;**********************************************************************
; 本程序以外部中斷舉例
;上電時(shí)P50輸出高,在INT引腳輸入下降沿時(shí)進(jìn)外部中斷,P50輸出翻轉(zhuǎn)一次。
;**********************************************************************
;MCU: EM78P153S
;Oscillator: IRC 4MHz
;Clock: 2
;WDT: Disable
;編譯軟件: WicePulse version 2.6081015
INCLUDE "EM78P153S.INC"
A_buffer == 0x1C ;保存A寄存器
R4_buffer == 0x1D ;保存R4寄存器
R3_buffer == 0x1E ;保存R3寄存器
ORG 0X00
JMP INITIAL
ORG 0X08
EX_INT:
MOV A_buffer,A ;保存 A
SWAPA R3
MOV R3_buffer,A ;保存 R3
MOV A,R4
MOV R4_buffer,A ;保存 R4
JBS EXIF ;查詢有沒有外部中斷標(biāo)志
JMP INT_RET ;如果沒有外部中斷標(biāo)志退出中斷程序
MOV A,ISR
AND A,@0XFB
MOV ISR,A ;清除外部中斷標(biāo)志
JBS PORT5,0 ;P50取反
JMP $+3
BC PORT5,0
JMP INT_RET
BS PORT5,0
INT_RET:
MOV A,R4_buffer ;返回 R4
MOV R4,A
SWAPA R3_buffer ;返回 R3
MOV R3,A
SWAP A_buffer ;返回 A
SWAPA A_buffer
RETI
ORG 0X50
INITIAL:
MOV A,@0
CLR PORT5 ;PORT5初始狀態(tài)為低電位
IOW IOC5 ;PORT5設(shè)為輸出,控制LED
MOV A,@0XFF
IOW IOCD
MOV A,@01000000B
IOW IOCE ;P60作為/INT中斷輸入引腳
CLR ISR ;清除中斷標(biāo)志位
MOV A,@00000100B
IOW IMR ;使能外部中斷
BS PORT5,0 ;點(diǎn)亮LED
ENI ;使能總中斷
MAIN:
NOP
NOP
JMP MAIN