A do tog zaključka sam došao tako što sam u main dijelu programa, unutar while(1) petlje probao staviti neki if (TMR0L = 0xFE) npr. i uredno se izvrši ono što je unutar if uvjeta. I ako recimo stavim if(TMR0H = početna_vrijednost) isto tako će se izvršiti. Ako stavim if(TMR0H = 0x05) npr a početna vrijednost je 0x00, nikad neće ući u taj if.
EDIT: budući da radim u Proteusu simulaciju, stavio sam u Watch Window timer kao Internal Timer 0 i tamo se svih 16-bitova inkrementira i debugger pokazuje neku aktivnost kad sa FFFF prede u 0000 ali prekid i dalje ne radi. Je li to bug u programu? Evo moj kod:
/* Main.c file generated by New Project wizard
*
* Created: uto pro 2 2014
* Processor: PIC18F1220
* Compiler: MPLAB C18
*/
#include <p18f1220.h>
#pragma config WDT = OFF
#pragma config PWRT= ON
#pragma config MCLRE=OFF
void high_isr(void); // prototip prekidne rutine
#pragma code high_vector=0x08 // direktiva pretprocesoru – slijedi
// prekidni vektor
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm // skoci na prekidnu rutinu
}
#pragma code // kraj prekidnog vektora
#pragma interrupt high_isr // direktiva pretprocesoru - slijedi prekidna rutina visokog prioriteta
void high_isr (void)
{
PORTB = 0xFF;
}
#pragma code // kraj programskog koda prekidne rutine
void main()
{
PORTB = 0; // Brisanje porta B
TRISB = 0; // Svi portovi porta B izlazni
INTCON = 0xA0; // Uključivanje prekida
T0CON = 0x88; // Postavljanje i pokretanje brojaca, 16-bit, interni clock, bez prescalera*/
TMR0L = 0x00;
TMR0H = 0xFF; // 0x09
while (1){
}
}
[Ovu poruku je menjao Pioneer cdj 200 dana 07.12.2014. u 17:55 GMT+1]