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 | }
|