按鍵中斷報警EM78P447
;************************************************
; 按鍵中斷報警.dt
;************************************************
PORT6 == 0x06 ;定義端口6,7
PORT7 == 0x07
;-----------------------------------------------------------------------
IOCE == 0x0E ;定義看門狗控制寄存器IOCE
IOCF == 0x0F ;定義中斷屏蔽寄存器IOCF
ISR == 0X3F ;定義中斷狀態(tài)寄存器ISR
;-----------------------------------------------------------------------
DLY1 == 13 ;定義延時暫存單元DLY1,DLY2,DLY3
DLY2 == 14
DLY3 == 15
COUNT == 16 ;定義計數(shù)暫存單元COUNT
EXIE == 3 ;定義中斷屏蔽寄存器的第3位EXIE
;允許外部中斷時需將EXIE置1
EXIF == 3 ;定義中斷狀態(tài)寄存器的第3位EXIT
;中斷響應以后EXIF自動置1,要用程序清0
;-----------------------------------------------------------------------
ORG 0x00
JMP INIT
ORG 0x01
JMP INT_SERVICE
INIT: MOV A,@0x00 ;設定P6口,P7口全部為輸出
IOW PORT6
IOW PORT7
MOV A,@0X11 ;關閉看門狗功能
IOW IOCE
MOV A,@0XFF ;LED數(shù)碼管顯示全暗
MOV PORT6,A
MOV A,@0X20 ;設定延時時間
MOV DLY3,A
BC PORT7,1 ;P71低電平,繼電器接通,電動機運行
MOV A,@0x0A ;為計數(shù)器置數(shù)10
MOV COUNT,A
MOV A,@0B00001000 ;將中斷屏蔽寄存器第3位置1,允許外部中斷
IOW IOCF
;-----------------------------------------------------------------------
MAIN: ENI ;允許中斷,將控制寄存器第6位INT置1
MAIN1: JMP MAIN1 ;等中斷
;-----------------------------------------------------------------------
INT_SERVICE:BS PORT7,1 ;P71高電平,繼電器斷開,電動機仃止
INT_S1 MOV A,@0X00 ;LED數(shù)碼管顯示全亮
MOV PORT6,A
CALL DELAY ;延時
MOV A,@0XFF ;LED數(shù)碼管顯示全暗
MOV PORT6,A
CALL DELAY ;延時
DJZ COUNT ;計數(shù)器減1,閃爍10次到否?
JMP INT_S1 ;未到,繼續(xù)閃爍
BC ISR,EXIF ;已到,清除中斷響應標志,為下次中斷作準備
MOV A,@0x0A ;重新為計數(shù)器置數(shù)10
MOV COUNT,A
BC PORT7,1 ;P71底電平,繼電器接通,電動機運行
RETI ;中斷返回,將控制寄存器第6位INT置1
;-----------------------------------------------------------------------
DELAY: MOV A,@20 ;1*(DLY3) 延時子程序
MOV DLY2,A ;1*(DLY3)
INNER2: MOV A,@5 ;1*(DLY3)*(250)
MOV DLY1,A ;1*(DLY3)*(250)
INNER1: DJZ DLY1 ;1*(DLY3)*(250)*(133)
JMP INNER1 ;2*(DLY3)*(250)*(133)
DJZ DLY2 ;1*(DLY3)*(250)
JMP INNER2 ;2*(DLY3)*(250)
DJZ DLY3 ;1*(DLY3)
JMP DELAY ;2*(DLY3)
RET ;延時子程序返回
EOP