Witam
Mam pewien problem z timerami, jesli dobrze rozumiem dokumentacje to przy kazdym przejsciu wartosci rejestru TMR z 0xFFFF na 0x0000 powinno wystapic przerwanie. Napialem prosty program wywolujacy przerwanie przy pomocy timera0 i niestety wartosc ta musi przjesc przez zero kilkaset razy zanim wystapi przerwanie. Korzystam ze sprzetowaego debuggera, wiec zakladam ze nie jest to blad symulatora. Jak by ktos wyjasnil jak to jest z tymi licznikami w PICkach to bylbym bardzo wdzieczny bo juz na prawde nie mam pojecia czemu tak sie zachwouje.
Tu jest przykladowy kod
zmienna "a" zczytuje ile razy licznik przeszedl przez zero zanim nastapilo przerwanie, co najdziwniejsze ta wartosc nie jest stala tylko sie zmienia i to w dosc losowy sposob...
Korzystam z MPLAB 7.5, kompilator CCS ver. 3.249
Mam pewien problem z timerami, jesli dobrze rozumiem dokumentacje to przy kazdym przejsciu wartosci rejestru TMR z 0xFFFF na 0x0000 powinno wystapic przerwanie. Napialem prosty program wywolujacy przerwanie przy pomocy timera0 i niestety wartosc ta musi przjesc przez zero kilkaset razy zanim wystapi przerwanie. Korzystam ze sprzetowaego debuggera, wiec zakladam ze nie jest to blad symulatora. Jak by ktos wyjasnil jak to jest z tymi licznikami w PICkach to bylbym bardzo wdzieczny bo juz na prawde nie mam pojecia czemu tak sie zachwouje.
Tu jest przykladowy kod
#include <18F452.h>
#include <math.h>
#byte timer0=0xFD5
#byte timer1=0xFCD
#byte timer3=0xFB1
#byte tm0=0xFD6
#byte tm1=0xFCE
long a=0,b=0;
#INT_TIMER0
void timer0_isr()
{
a=0;
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); //start timer0
set_timer0(0x3CB1); //wartosc timer0
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while(TRUE)
{
if (tm0==0xFFFF)
{
a++;
}
}
}
zmienna "a" zczytuje ile razy licznik przeszedl przez zero zanim nastapilo przerwanie, co najdziwniejsze ta wartosc nie jest stala tylko sie zmienia i to w dosc losowy sposob...
Korzystam z MPLAB 7.5, kompilator CCS ver. 3.249