5.6 Timer Interrupt
Because CPU may enter timer interrupt routine at any time, the timer interrupt routine should backup all
special registers at its entry point and restore them before return.
(Address 0x004)
TIMER_ENTRY: MOV
SWAPR
BCR
MOV
MOV
MOV
;
; Execute interrupt service routine
;
MOV
MOV
SWAPR
MOV
SWAPR
SWAPR
BCR
RETI
A_TEMP, A
A, STATUS
STATUS, BS
S_TEMP, A
A, INDAR
I_TEMP, A
A, I_TEMP
INDAR, A
A, S_TEMP
STATUS, A
A_TEMP
A, A_TEMP
INTEN, TMROF
5.7 Conditional Branch
Example: Conditional branch can be according to value of Accumulator. Firmware can use this method to
return value for lookahead table. Because Accumulator is only 8 bits wide, the higher 5 bits of Program
Counter should be load into PCHBUF before the conditional branch executed.
(Address 0x540)
LOOKAHEAD:
MOVIA
MOV
MOVIA
ADDAR
RETIA
RETIA
RETIA
.
.
.
0x05
PCHBUF, A
LOOKAHEAD_VAL
PCL, A
0
; Acc = 0
1
; Acc = 1
2
; Acc = 2
.
.
.
5.8 Change Register Bank
Usually keeps BS = 0. If firmware want to access register address 0x80 to 0x8F, set BS = 1. After process
register address 0x80 to 0x8F complete, clear BS = 0 to address 0x00 to 0x7F.
BSR
MOV
BCR
STATUS, BS
PORT1CON, A
STATUS, BS
5.9 Change Code Bank
Because PCL is only 11 bits wide, Program Counter can only jump in 2K boundary directly. If Program
Counter want to jump over 2K boundary, firmware should set PCHBUF to correct bank first.
Revision 1.6
-28-
02/28/2000