Sida 1 av 1

Timer1 PIC16F690

Postat: 6 januari 2012, 16:07:44
av MrIzoard
Hej!

Nu har jag suttit och exprimenterat en del med Timer0 och Timer1 och nu börjar det fungera som jag har tänkt men jag förstår inte varför jag måste göra som jag gör med Timer1.

Jag har kopplat upp och programmerat PORTC till 8 LED'ar och vid ett interrupt så räknar jag upp en variabel som jag sedan skickar ut på PORTC.
Igår fick jag det inte att fungera men då lärde jag mig efter att ha kollat i lst-filen att jag bör ha en interrupthantering som är lite bättre :), sagt och gjort så la jag till den men när jag simulerade och hade en breakpoint i den så kom jag bara dit första gången och aldrig mer (sedan stog det bara och tuggade när man körde Run (simulering via MP SIM)).

Jag kollade med lite piggare hjärna idag och såg då att GIE i INTCON hade nollats så om jag i interrupthanteringen sätter den biten igen så fungerar programmet som tänkt.

Är det så att efter interruptet inträffar så behöver man "ladda" om GIE så det är "normalt"? (jag använder bara interna interruptet, inga periferigrejer som knappar och dylikt)

//Ulf L.

Re: Timer1 PIC16F690

Postat: 6 januari 2012, 17:25:24
av sodjan
Du avslutar väl din ISR med en RETFIE, eller hur ?

Re: Timer1 PIC16F690

Postat: 6 januari 2012, 17:39:42
av MrIzoard
:vissla:
Tack!
Vet inte hur många gånger jag läst om det men tydligen en gång för lite.....

//Ulf L.

Re: Timer1 PIC16F690

Postat: 6 januari 2012, 17:55:11
av MrIzoard
Var tvungen att testa vidare med min termometer (ett annat litet projekt) innan jag kunde prova.
Ja det fungerade fint med RETFIE i koden, läste ju till och med hur det fungerade med stackhantering men när jag väl satt vid datorn så var det borta.

//Ulf L.

Re: Timer1 PIC16F690

Postat: 6 januari 2012, 17:57:47
av sodjan
> läste ju till och med hur det fungerade med stackhantering

Nu var det ju inte problemet (jag antar att du hade en vanlig RETURN där), utan
just hanteringen av GIE. Stacken hanteras på samma sätt av RETURN och RETFIE.

Re: Timer1 PIC16F690

Postat: 6 januari 2012, 18:08:33
av MrIzoard
När jag var i min interrupthantering så tänkte jag inte på hur jag hade kommit dit (jag provade aldrig med RETURN för att komma åter) utan jag lämnade den med en GOTO till min "huvudsnurra".

Kanon att kunna ställa mina dumma frågor till er, sakta men säkert så lär man sig saker i alla fall.

//Ulf L.

Re: Timer1 PIC16F690

Postat: 6 januari 2012, 23:33:00
av sodjan
Jaha, ja det är ju nästan hur fel som helst... :-)
Ett interrupt är lite likt ett vanligt CALL/RETURN med
vissa viktiga skillnader...