// AVR_lab 5 // Skal till laboration 13 // #include #include #define main_yellow 0b01000010 #define red_red // Komplettera! #define cross_redyellow // Komplettera! #define cross_green // Komplettera! #define cross_yellow // Komplettera! #define main_redyellow // Komplettera! #define main_green // Komplettera! const char light_table[][2] = { { 1, main_yellow }, { 1, red_red }, { 1, cross_redyellow }, { 5, cross_green }, { 1, cross_yellow }, { 1, red_red }, { 1, main_redyellow }, { 10, main_green }, { 0, 0 } }; void countDown(unsigned char *address){ // Komplettera funktionen! } //============================================================== //=========== Periodiskt avbrott. ============================== //============================================================== // Själva avbrottsfunktionen: ISR (SIG_OUTPUT_COMPARE1A){ static unsigned char counter; // Hit kommer vi var 10:e millisekund countDown(&counter); if (counter==0){ // Här läggs uppgifter som ska utföras en gång per sekund } } // Uppstart av periodiskt avbrott: void initOC1(){ // Output Compare 1 TCCR1A = 0; // Normal användning TCCR1B = 0b00001010; // Nollställ vid OC, systemklocka/8 OCR1A = 1250; // 1250x8=10000 (10 ms vid 1 MHz)) TIMSK = TIMSK | 0x10; // Aktivera avbrottet } //============================================================== //============================================================== //=== Inställning av portar: =================================== //============================================================== void initIO(){ DDRA = 0b00000000; // Måste kompletteras!!! DDRB = 0b00000000; // Måste kompletteras!!! DDRC = 0b00000000; // Måste kompletteras!!! DDRD = 0b00000000; // Måste kompletteras!!! } //============================================================== //============================================================== //=== Huvudprogram ============================================= //============================================================== int main(void){ initIO(); // Ställ in portarna initOC1(); // Starta avbrottet OC1 SREG |= 0x80; // Sätt på hela avbrottsystemet while (1){ } }