Created
May 14, 2019 10:26
-
-
Save avr-programmierung/627d28aa0b944af8cdbe4053dc916873 to your computer and use it in GitHub Desktop.
ATmega88 @ 1MHz Ampel
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* ampel_01.c ATmega88 @ 1MHz */ | |
#include <avr/io.h> | |
#include <util/delay.h> | |
enum ampel {rot=1, rot_gelb, gelb, gruen}; // rot=1, rot_gelb=2, gelb=3, gruen=4 | |
char zustand = 1; // Zustand beim Start definieren (globale Variable) | |
void ampel1(ampel) // Funktion ampel 1 | |
{ | |
switch (ampel) | |
{ | |
case rot: PORTB = (1<<PB0); break; | |
case rot_gelb: PORTB = (1<<PB0)+(1<<PB1); break; | |
case gelb: PORTB = (1<<PB1); break; | |
case gruen: PORTB = (1<<PB2); break; | |
} | |
} | |
void ampel2(ampel) // Funktion ampel 2 | |
{ | |
switch (ampel) | |
{ | |
case rot: PORTD = (1<<PD0); break; | |
case rot_gelb: PORTD = (1<<PD0)+(1<<PD1); break; | |
case gelb: PORTD = (1<<PD1); break; | |
case gruen: PORTD = (1<<PD2); break; | |
} | |
} | |
void state_machine(void) // Funktion state_machine | |
{ | |
enum ampel ampel_1, ampel_2; // Deklaration ampel_1 und ampel_2 vom Typ enum ampel | |
switch (zustand) | |
{ | |
case 1: ampel1 (ampel_1 = rot); | |
ampel2 (ampel_2 = gruen); | |
zustand = 2; // Neuer Zustand = 2 | |
break; | |
case 2: ampel1 (ampel_1 = rot); | |
ampel2 (ampel_2 = gelb); | |
zustand = 3; // Neuer Zustand = 3 | |
break; | |
case 3: ampel1 (ampel_1 = rot); | |
ampel2 (ampel_2 = rot); | |
zustand = 4; // Neuer Zustand = 4 | |
break; | |
case 4: ampel1 (ampel_1 = rot_gelb); | |
ampel2 (ampel_2 = rot); | |
zustand = 5; // Neuer Zustand = 5 | |
break; | |
case 5: ampel1 (ampel_1 = gruen); | |
ampel2 (ampel_2 = rot); | |
zustand = 6; // Neuer Zustand = 6 | |
break; | |
case 6: ampel1 (ampel_1 = gelb); | |
ampel2 (ampel_2 = rot); | |
zustand = 7; // Neuer Zustand = 7 | |
break; | |
case 7: ampel1 (ampel_1 = rot); | |
ampel2 (ampel_2 = rot); | |
zustand = 8; // Neuer Zustand = 8 | |
break; | |
case 8: ampel1 (ampel_1 = rot); | |
ampel2 (ampel_2 = rot_gelb); | |
zustand = 1; // Neuer Zustand = 1 | |
break; | |
} | |
} | |
int main(void) | |
{ | |
DDRB = 0x07; // PB0, PB1, PB2 = Ausgang | |
DDRD = 0x07; // PD0, PD1, PD2 = Ausgang | |
while(1) | |
{ | |
state_machine(); // Funktion state_machine aufrufen | |
_delay_ms(3000); // 3 Sekunden warten | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment