Jag har försökt få igång Timer0 som skall generera interrupt i en PIC16F887, men det bara vägrar komma igång, trots idoga försök och tester. Kan någon se vad jag har gjort fel?
Jag har försökt korta ned min kod till ett minimum och hoppas att ingen tar illa upp att jag klistrar in den här.
Jag förväntar mig att pinne RC7 skall gå hög, men det händer aldrig.
Sedan om någon kan upplysa mig om NÄR jag måste använda mig av banksel så vore jag glad. Har försökt hitta information som beskriver detta, men har gått bet på det än så länge. Jag har i varje fall märkt att om jag inte lägger en banksel framför förändring av egna variabler så fungerar inte MPLAB SIMs watch för lokala variabler om jag dessförinnan har ändrat något register som t.ex. PORTA, TRISC eller liknande. Jag förmodar också att användning av banksel på det sätt jag gör nedan är felaktigt, eller kanske snarare onödigt?

banksel TRISA
clrf TRISA
banksel TRISC <-- den här är onödig??
clrf TRISC
Tack för hjälp som tar mig vidare...
Här är min felande kod:
Kod: Markera allt
; ==============================================================
list p=16f887
include <p16f887.inc>
__CONFIG _CONFIG1, _BOR_OFF & _XT_OSC & _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF
ERRORLEVEL 0, -302 ;suppress bank selection message
; ==============================================================
cblock 0x20
count
count1
counta
countb
flags
Count1us
Count10us
Count1ms
Count100ms
W_SAVE
STATUS_SAVE
PCLATH_SAVE
endc
; ==============================================================
org 0x00
goto StartProgram
org 0x04
goto InterruptServiceRoutine
; ==============================================================
include "delay.inc"
; ==============================================================
StartProgram
call InitPorts
call InitInterrupt
again
bsf PORTC,0
call delay1s
bcf PORTC,0
call delay1s
goto again
; ==============================================================
InitPorts
banksel ANSEL
clrf ANSEL
clrf ANSELH
banksel PORTA
clrf PORTA
banksel PORTB
clrf PORTB
banksel PORTC
clrf PORTC
banksel PORTD
clrf PORTD
banksel PORTE
clrf PORTE
banksel TRISA
movlw 0xFF
movwf TRISA
; clrf TRISA
banksel TRISB
clrf TRISB
banksel TRISC
clrf TRISC
banksel TRISD
clrf TRISD
banksel TRISE
bsf TRISE,0
bsf TRISE,1
bsf TRISE,2
bsf TRISE,3
return
; ==============================================================
InitInterrupt
clrwdt
banksel OPTION_REG ; Change prescaler from WDT to TMR0
movlw b'11110000'
andwf OPTION_REG,W
iorlw b'00000111'
movwf OPTION_REG
banksel INTCON
bcf INTCON,T0IF
bsf INTCON,T0IE ; start Timer0 interrupt
bsf INTCON,GIE ; start general interrupt
return
; ==============================================================
InterruptServiceRoutine
movwf W_SAVE ; Save W
swapf STATUS,F ; Save STATUS
swapf STATUS,W
movwf STATUS_SAVE
movfw PCLATH
movwf PCLATH_SAVE
; =======
banksel PORTC
bsf PORTC,7
; =======
banksel INTCON
bcf INTCON,T0IF
bsf INTCON,T0IE
bsf INTCON,GIE
movfw PCLATH_SAVE
movwf PCLATH
swapf STATUS_SAVE,F ; Restore W & Status
swapf STATUS_SAVE,W
movwf STATUS
swapf W_SAVE,F
swapf W_SAVE,W
retfie
; ==============================================================
end