Jag håller på och skriver ett program som ska få interrupt när man trycker ner en av de 4x4 knapparna på en keypad. Rows ettor och IOCA på cols. Kanske ska avslöja att det här är första gången som jag använder interrupt. Jag har två problem för tillfället:
1. Blir ingen interrupt.
Jag kan inte ens tvinga den till interrupt genom att sätta RAIF i koden. (Borde väl gå?) (En fråga: Visst ska programmet hoppa till interruptrutinen direkt vid interrupt utan att man ska behöva testa om RAIF har blivit satt?)
Init interrupt
Kod: Markera allt
banksel option_reg
bcf option_reg,7 ; "not_rapu". har läst att den måste clearas.
banksel ioca
movlw b'00111111' ; Enable interrupt on change på PORTA.
movwf ioca
banksel wpua
movlw b'00010111' ; Enable weak pull up.
movwf wpua
banksel intcon
clrf intcon
bcf intcon,raif ; Clear porta, interrupt flag.
bcf intcon,intf
bsf intcon,inte
;bsf intcon,raie ; Sätter jag den här så funkar inte USART...
bsf intcon,gie ; Enable interrupts.
På flera ställen i koden så har jag skrivit ut några tecken på LCDn, så jag ser vart i programmet den är. Jag ser tydligt när/om den kommer dit det är tänkt.
<GLÖM DET HÄR, DET FUNKAR SOM DET SKA>
2. Mäter jag keypad-pinnarnas nivåerna så blir bara ena kolumnen så hög som 5V när man trycker på en knapp i den kolumnen. De andra är K1=1V, K2=1V, K4=1,4V. Jag har tolkat databladet som så att sätter man WPUA så behöver man inte använda några yttre resistorer till keypaden, så den har jag satt.
</GLÖM DET HÄR, DET FUNKAR SOM DET SKA>
Vidare så är det meningen att programmet, efter interrupt, ska skanna av vilken knapp som orsakade interrupten och för tillfället skriva ut samma tecken på LCDn. Om detta fungerar som det ska vet jag inte, men det spelar inte heller någon roll nu. Det viktiga är interrupten, och jag skulle uppskatta lite hjälp.
Jag använder:
PIC16F688
MPLAB IDE v7.20
/Klas