attiny.c


1
/*ATTyni13
2
  WIN AVR 20090313 Programmers Notepad 
3
  AVR Studio 4 
4
  Taster Active High also gegen VCC ---*/
5
#include <avr/io.h>
6
#include <util/delay.h> 
7
//#define F_CPU 1000000UL     
8
#define LED_ROT  PB3
9
#define LED_GELB PB5
10
#define AUSGANG PB4
11
uint8_t sprung =0;
12
int gedrueckt=0;
13
inline uint8_t pressen(volatile uint8_t *port, uint8_t pin)
14
{
15
  if ( *port & (1<<0x01|0x02|0x03 ))
16
  {
17
     sleep_ms(50);//warning: implicit declaration of function sleep ms---
18
          //warning: previous implicit declaration of sleep ms was here
19
      if(((*port& 0x01)==0x01)&&((*port& 0x02)==0x00))
20
    {
21
      sprung =1;
22
    }
23
      if(((*port& 0x02)==0x02)&&((*port& 0x01)==0x00))
24
    {
25
      sprung =2;
26
    }
27
      if ( (*port& 0x03)==0x03)
28
    {
29
      sprung =3;
30
    }
31
      if( ! (*port & (1 << 0x01|0x02|0x03) ))
32
    {
33
    sleep_ms(20);/* Anwender Zeit zum Loslassen des Tasters geben */
34
      return 1;
35
    }
36
  }
37
  return 0;
38
}//warning: funktion declaration is not a prototype
39
int main()
40
{   
41
  DDRB |= 0x3f;
42
  DDRB &=~((1<<PB0)|(1<<PB1)); 
43
  gedrueckt=0;
44
  
45
  while  (gedrueckt!=1) {// erste Schleife
46
  if (pressen(&PINB,0x01|0x02|0x03)){
47
  switch (sprung){
48
    case 1:
49
    gedrueckt=1;
50
    break;
51
      case 2:
52
      for(;;){}
53
      break;
54
        case 3:
55
        for(;;){}
56
        break;
57
    }
58
  }
59
 }
60
  gedrueckt=0;
61
  sprung =0;  
62
  while  (gedrueckt!=1){// zweite Schleife
63
  if (pressen(&PINB,0x01|0x02|0x03)){
64
    switch (sprung){
65
      case 1:
66
      for(;;){}
67
      break;
68
        case 2:
69
        gedrueckt=1;
70
        break;
71
          case 3:
72
          for(;;){}
73
          break;
74
    }
75
  }
76
}
77
  gedrueckt=0;
78
  sprung =0;
79
while  (gedrueckt!=1){// dritte Schleife
80
  if (pressen(&PINB,0x1|0x2|0x03)){
81
  switch (sprung){
82
    case 1:
83
    gedrueckt=1;
84
    break;
85
      case 2:
86
      for(;;){}
87
      break;
88
        case 3:
89
        for(;;){}
90
        break;
91
    }
92
  }
93
}
94
  gedrueckt=0;
95
  sprung =0;
96
while  (gedrueckt!=1){// vierte Schleife
97
  if (pressen(&PINB,0x1|0x2|0x03)){
98
  switch (sprung){
99
    case 1:
100
    gedrueckt=1;
101
    break;
102
      case 2:
103
      for(;;){}
104
      break;
105
        case 3:
106
        for(;;){}
107
        break;
108
    }
109
  }
110
}
111
gedrueckt=0;
112
  sprung =0;  
113
  while  (gedrueckt!=1){// fünfte Schleife
114
  if (pressen(&PINB,0x01|0x02|0x03)){
115
    switch (sprung){
116
      case 1:
117
      for(;;){}
118
      break;
119
        case 2:
120
        gedrueckt=1;
121
        break;
122
          case 3:
123
          for(;;){}
124
          break;
125
    }
126
  }
127
}
128
  gedrueckt=0;
129
  sprung =0;
130
  
131
while  (gedrueckt!=1){// sechste Schleife
132
  if (pressen(&PINB,0x1|0x2|0x03)){
133
  switch (sprung){
134
    case 1:
135
    for(;;){}
136
    break;
137
      case 2:
138
      for(;;){}
139
      break;
140
        case 3:
141
        gedrueckt=1;
142
        break;
143
    }
144
  }
145
}
146
while (1)
147
  {
148
    PORTB |=(1<<LED_GELB);//PB5 LED_GELB an
149
    sleep_ms(4);sleep_ms(1000);//soll  1Sekunde dauern
150
    PORTB |=(1<<AUSGANG);//PB4 Ausgang an
151
    sleep_ms(20);
152
    PORTB &=~((1<<LED_GELB)|(1<<AUSGANG));//PB5 - PB4 aus
153
    PORTB |=(1<<LED_ROT);//PB3-LED_ROT- an
154
    sleep_ms(50);//kurzes Aufblitzen von LED_ROT
155
    PORTB &=~(1<<LED_ROT);//PB3-LED_ROT- aus 
156
  }
157
  }//warning: conflicting types for sleep ms
158
void sleep_ms(uint16_t ms)//warning: conflicting types for sleep ms
159
{
160
  while(ms)
161
 {
162
  ms--;
163
  _delay_ms(1);
164
 }
165
}