;**********************************************************************
; 本程序以外部中断举例
;上电时P50输出高,在INT引脚输入下降沿时进外部中断,P50输出翻转一次。
;**********************************************************************
;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 ;查询有没有外部中断标志
JMP INT_RET ;如果没有外部中断标志退出中断程序
MOV A,ISR
AND A,@0XFB
MOV ISR,A ;清除外部中断标志
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初始状态为低电位
IOW IOC5 ;PORT5设为输出,控制LED
MOV A,@0XFF
IOW IOCD
MOV A,@01000000B
IOW IOCE ;P60作为/INT中断输入引脚
CLR ISR ;清除中断标志位
MOV A,@00000100B
IOW IMR ;使能外部中断
BS PORT5,0 ;点亮LED
ENI ;使能总中断
MAIN:
NOP
NOP
JMP MAIN