Hallo Habe folgendes Problem: Möchte mit dem atmega8(auf stk 500) Port B toggeln. Mir ist egal bei welcher frequenz die leds getoggelt werden haupsache es ist sichtbar. Habe folgendes Program geschrieben aber es haut nicht hin. Es leuchten immer alle leds. #include <avr/io.h> #include <avr/interrupt.h> unsigned int x; void start_timer0(void) { TCCR0 = 0x02; TIMSK = 0x01; TCNT0 = 255; sei(); } ISR(TIMER0_OVF_vect) { x++; if(x==500) { PORTB=0x00; } if(x==1000) { PORTB=0xff; } } int main(void) { start_timer0(); DDRB=0xff; for(;;){} }
Hallo, #include <avr/io.h> #include <avr/interrupt.h> volatile unsigned int x; void start_timer0(void) { TCCR0 = 0x05; TIMSK = 0x01; sei(); } ISR(TIMER0_OVF_vect) { x++; if(x==4) { PORTB=0x00; } if(x==8) { PORTB=0xFF; x = 0; } } int main(void) { start_timer0(); DDRB=0xFF; while(1) ; } Dann sollte deine LEd ca. alle Sekunde blinken , bei 1Mhz takt , ansonsten natürlich fixer. Gruß
Fabian Ostner wrote: > Achso und lies das mal durch ;-) > http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Hmmm, vielleicht selber mal durchlesen. x wird ausschließlich in dem Interrupt Handler verwendet. Das volatile ist deshalb überflüssig...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.