Flytte kode fra Timer0 til Timer1 på AVR

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Danish to

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 <mega8515.h>

//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 <mega8515.h>

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


Site Timeline