Ik krijg de overflow interrupt van TMR1 en 2 niet de gang, overflow interrupt van TMR0 werkt wel. Ik gebruik de PICC compiler van HI-TECH en een PIC16f628a. Ik heb het volgende stukje code geschreven:
void main(void)
{
TRISB=0x00;//PORTB outputs
T1CKPS0=0; //prescaler 1:1
T1CKPS1=0;
TMR1CS=0; //interbal clock Fosc/4
TMR1ON=0; //timer on
TMR1IE=1; //enable overflow interrupt
GIE = 1; //enable global interrupt
while(1){
}
}
void interrupt isr(void)
{
if(TMR1IF) //tmr1 overflow?
{
RB4=!RB4; //toggle RB4 "ledje"
TMR1L=0x00;//clear lower byte tmr1
TMR1H=0x00;//clear higher byte tmr1
TMR1IF=0; //clear interrupt flag tmr1
}
}
iemand een idee waarom dit niet werkt? Hij gaat de interrupt service routine gewoon niet in.
Ik heb geen verstand van C, maar het lijkt er op dat je vergeten bent om de 'peripheral interrupts' te enablen in het INTCON register.
iemand een idee waarom dit niet werkt? Hij gaat de interrupt service routine gewoon niet in.
Hoe constateer je dat?
Want werkt dit in PICC?
RB4=!RB4; //toggle RB4 "ledje"
Nu is PICC geen Jal, maar in Jal werkt deze constructie niet.
MvgEat
Klopt Rd12tf, dit werkt idd niet. Ik heb dit er even als vb bijgezet. In mijn werkelijke code doe ik het anders detecteren.
MGP
LDmicro user.
Structuur C programma is op het eerste zicht ook niet juist.
oa. teveel accolades... functie "void interrupt isr(void)"
wordt niet aangeroepen en er staat geen puntkomma achter..
Waarschijnlijk allemaal het gevolg van knippen en plakken, maar toch...
logic
Maar dat is logisch ...
In de datasheet staat op pag. 50:
TMR1ON: Timer1 On bit
1 = Enables Timer1
0 = Stops Timer1
Je zegt in je code:
TMR1ON=0; //timer onZet je dan niet de timer uit ipv aan ?
Misschien moet 't dit zijn: TMR1ON=1
Bij timer0 is 't idd een ander verhaal:
REGISTER 4-2: OPTION REGISTER (ADDRESS: 81h, 181h)
bit 5 T0CS: TMR0 Clock Source Select bit
1 = Transition on RA4/T0CKI pin
0 = Internal instruction cycle clock (CLKOUT)
De standaard-waarde (na opstarten/reset) van dit bit is 1: transition on RA4-pin.
Als je timer0 op de interne clock wilt laten lopen, moet je dit bit 0 maken.
Maar bij timer1 is 't denk ik net andersom.
De standaard-waarde (na opstarten/reset) van TMR1ON is 0.
Je moet 'm op 1 zetten om timer1 te laten werken.
[Bericht gewijzigd door logic op ]
TMR1ON moet idd geset worden, hier was ik ondertussen ook achter gekomen. Maar het werkt nu in ieder geval, dus iedereen bedankt voor de reactie.
