Sida 1 av 1

Får inte Timer0 att snurra

Postat: 27 mars 2007, 10:47:04
av ankan
Förstår inte vad jag har missat. Har kollat databladet flera gånger för att kolla att jag inte har glömt något register men jag kommer inte fram till annat än konfen nedan:

OPTION_REG = 0x07;
INTCON.TMR0IF=0;
INTCON.TMR0IE=1;

PCL snurrar men TMR0 står helt stilla.

Kör koden på en 16F88 med intern oscillator som tickar i 4Mhz.

Postat: 27 mars 2007, 11:27:42
av sodjan
Först en generell sak...

När man sätter värden på register som igentligen inte är "värden" utan
inställningar av olika "bitar", så är det *mycket* tydligare om man
anger värdet binärt , OPTION_REG = b'00000111'.
Det går mycket snabbare att jämföra med databladet !
I just detta fall med h'07' så var det enkelt, man ibland är det inte
lika tydligt...

Hur som helst...

> ...men TMR0 står helt stilla.

Hur vet du det ?

Postat: 27 mars 2007, 12:39:59
av ankan
Mjukvaru debuggar i MikroC. Kan tyvärr inte hårdvarudebugga ännu eftersom jag inte har fått utvecklingskortet.

Hur kan jag kolla om den snurrar som den ska eller vad som är fel?

Postat: 27 mars 2007, 12:46:21
av sodjan
Om du har en debugger som fungerar, så borde man kunna
se på TMR0 att det "tickar" fram. Obs att de kpör med 1:256 prescaler,
så det tar ett tag innan det händer något...

Postat: 27 mars 2007, 13:42:40
av ankan
Ändrade prescalen för att kolla men det hjälpte inte, TMR0 står stilla. Testade en kod som var för att testa TMR0 som medföljde kompilatorn men den fick inte TMR0 att snurra heller.

I och med att det är mjukvarudebugger så antar jag att det inte spelar någon roll vilken oscillatorkälla man väljer men jag har testat olika utan skillnad.

Vet inte vad jag ska kolla nu.

Postat: 27 mars 2007, 19:42:10
av lgrfbs
Tycker att du ska bekriv felet i debuggern på mikroC:s forum för att de är
snabba på att fix såna här saker.

Postat: 27 mars 2007, 19:44:50
av ankan
Testade Proteus VSM. Där snurrar Timer0 som den ska så det måste vara något med debuggern i MikroC´s kompilator.

Så jag får testa i morgon att programmera något enkelt exempel där Timer0 används för att se var felet kan vara.

Postat: 28 mars 2007, 14:19:07
av ankan
Det var Timer1 som spökade. Trots att jag hade satt PIE1.TMR1IE=0; så gav den interrupt. Det hjälpte dock när jag satte T1CON.TMR1ON=0;

Ska Timer1 ge trots att PIE1.TMR1IE=0; ?

Postat: 28 mars 2007, 17:03:40
av sodjan
xxxxF flaggorna sätts *alltid* (när t.ex en timer "slår runt"). Det går inte att stoppa.
xxxxE flaggorna (om de är = "0") bara hindrar att ISR'en anropas.

Det är därför som man bör testa båda flaggorna i ISR'en om man har
interrupt från flera källor...

Postat: 29 mars 2007, 17:32:35
av $tiff
Det gör ingen skada om man anger vilken plattform man jobbar på redan i trådens titel. :wink: