Witam, czy może ktoś spojrzeć na poniższy kod i napisać mi co w nim źle napisałem? Moim zamiarem było ustawienie przerwania na Timer2 z zewnętrznym kwarcem zegarkowym, aby co sekundę zmieniał wartość jakiejś zmiennej i wyświetlał ją na LCD. Niestety nie wiem dlaczego ale program nie odlicza mi sekundy ale mniej więcej minutę ;]
Poniżej uproszczony kod programu. Gdy pisałem samo przerwanie dla Timera2 aby mrugał diodą działało prawidłowo.
Poniżej uproszczony kod programu. Gdy pisałem samo przerwanie dla Timera2 aby mrugał diodą działało prawidłowo.
include <avr/io.h>
#include "def.h"
#include "lib\delay.c"
#include "lib\lcd.c"
#include "lib\eeprom.c"
#include <avr/pgmspace.h>
#include <math.h>
#include <avr\interrupt.h>
#define PRG_RDB(addr) pgm_read_byte(addr)
...
SIGNAL (SIG_OVERFLOW2) //funkcja obsługująca przerwanie od timera2
{
...
kod zmieniający wartość zmiennej sekund minut itd ...
...
}
...
int main(void)
{
TIMSK &=~_BV(TOIE2);// Wył. przerwania TC2
TCCR2 = _BV(CS20)|_BV(CS22); // preskaler fclk
ASSR |= _BV(AS2); // TC2 z taktowania zegarem CPU na generator asynchroniczny
TIFR = 192; //Tak się kasuje flagi przerwań
TIMSK |= _BV(TOIE2);// włącz przerwania z TC2
sei(); //odblokuj globalne przerwania
while(1) //pętla nieskończona
{
...
wyswietlanie na lcd godz
delayms(500); //opóźnienie
...
}
}