Flytte kode fra Timer0 til Timer1 på AVR

Jan 06, 2008 0 Replies

Nu er jeg jo så kommet til en ny milesten.



Da jeg nu har koden med læsning af 4x4 keypaden til at virke, har jeg fået problemer med Timer0, der i den omtalte kode benyttes til at give SW-interrupt, når en tast påvirkes. Jeg har dog brug for timerfunktionen andre steder, hvor Timer0 anvendes til at teste, om 2 knapper holdes nede i 5 sek. Denne funktion vil jeg så have over på Timer1 i stedet. Til at teste Timer1, tager jeg udgangspunkt i dette lille kodeeksempel:



#include



//Timer 0 overflow ISR interrupt [TIM0_OVF] void timer0_ovf_isr(void) { static unsigned int timecount = 0; //global time counter TCNT0 = 0x06; // start med at tælle fra 6; Tæl til 250 if(++timecount == 1000) { PORTA = PORTA ^ 0x80; // Toggle bit 7 på PortA timecount = 0; // Clear for de næste



500 us } }

void main(void) { // Timer 0 interrupt initialisering TIMSK = 0x02; // Afmask Timer 0 overflow interrupt DDRA = 0x80; // Port A bit 7 er output TCCR0 = 0x02; // Sæt Timer0 til clock/8 som clock input // Global aktivering af interrupts #asm("sei") while(1) ; }



Denne blinker fint med bit7 på PortA med 1 Hz. Dette forsøger jeg så at ændre til Timer1, således:



#include



//Timer 1 overflow ISR interrupt [TIM1_OVF] void timer1_ovf_isr(void) { static unsigned int timecount = 0; //global time counter TCNT1 = 0xFF05; // start med at tælle fra 65285; Tæl til 250 if(++timecount == 1000) { PORTA = PORTA ^ 0x80; // Toggle bit 7 på PortA timecount = 0; // Clear for de næste



500 us } }

void main(void) { // Timer 0 interrupt initialisering TIMSK = 0x02; // Afmask Timer 0 overflow interrupt DDRA = 0x80; // Port A bit 7 er output TCCR1B = 0x02; // Sæt Timer1 til clock/8 som clock input // Global aktivering af interrupts #asm("sei") while(1) ; }


Hvilket desværre blot får bit 7 til at lyse konstant - Har ikke lige en scop, så jeg kan teste, om det blot er en høj frekvens. Hvad gør jeg galt?


Mvh. Tomas

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required