松翰單片機(jī)外部中斷
//{{SONIX_CODE_OPTION
//完整源碼下載:http://www.51hei.com/f/shwbzd.rar
.Code_Option WDT_CLK Flosc/4
.Code_Option Reset_Pin P04
.Code_Option LVD LVD_Max ; 3.3V Reset
.Code_Option Watch_Dog Disable ;關(guān)閉看門狗
.Code_Option Low_Fcpu Flosc/1
.Code_Option High_Clk IHRC_16M ; Internal 16M RC Oscillator
.Code_Option High_Fcpu Fhosc/1
.Code_Option Security Enable
.Code_Option Noise_Filter Enable
//}}SONIX_CODE_OPTION
.DATA;數(shù)據(jù)
ORG 0
TEMP DS 1
ACCBUF DS 1
PflagBUF DS 1
K DS 1
.CONST
K1 EQU K.0;標(biāo)志位
.CODE;程序代碼
ORG 0000H
JMP A1
ORG 09H;外部中斷入口
JMP INT00
A1: MOV A,#02H;設(shè)置中斷觸發(fā)方式為低電平觸發(fā)
B0MOV PEDGE,A
B0BCLR FP00IRQ;清中斷標(biāo)志
B0BSET FP00IEN;開(kāi)中斷
B0BSET FGIE;開(kāi)總中斷
B0BSET K1 ;設(shè)置標(biāo)志
JMP $
;*************************************************
;中斷服務(wù)程序
;*************************************************
INT00:
B0BCLR FP00IEN;關(guān)中斷
B0BCLR FGIE;禁止中斷
B0XCH A,ACCBUF;壓棧
B0MOV A,PFLAG;
B0MOV PFLAGBUF,A;
B0BTS1 FP00IRQ;判斷是否真的發(fā)生中斷
JMP INT01
B0BTS1 K1;判斷標(biāo)志來(lái)控制LED狀態(tài)標(biāo)志為1LED亮
JMP K01
B0BCLR K1;標(biāo)志清0
B0BSET P0M.3;設(shè)置P0.3為輸出模式
B0BCLR P0.3;點(diǎn)亮LED
;*******************************************
;按鍵去抖
;*******************************************
K00: CALL M001;延時(shí)
B0BCLR P0M.0;設(shè)置P0.0為輸入模式
B0BSET P0UR.0;設(shè)置P0.0上拉
B0BTS1 P0.0;判斷P0.0是否為0是繼續(xù)否跳過(guò)下一條指令
JMP K00
CALL M001
B0BCLR P0M.0
B0BSET P0UR.0
B0BTS1 P0.0;判斷P0.0是否為0是繼續(xù)否跳過(guò)下一條指令
JMP K00
JMP INT01
K01:
B0BTS0 K1
JMP INT01
B0BSET K1
B0BSET P0M.3
B0BSET P0.3
K02:
CALL M001
B0BCLR P0M.0
B0BSET P0UR.0
B0BTS1 P0.0;判斷P4.0是否為1是繼續(xù)否跳過(guò)下一條指令
JMP K02
CALL M001
B0BCLR P0M.0
B0BSET P0UR.0
B0BTS1 P0.0;判斷P4.0是否為1是繼續(xù)否跳過(guò)下一條指令
JMP K02
INT01:
B0MOV A,PFLAGBUF;彈棧
B0MOV PFLAG,A
B0XCH A,ACCBUF
B0BCLR FP00IRQ
B0BSET FP00IEN
B0BSET FGIE
RETI
;*********************************************
;延時(shí)子程序
;*********************************************
M001: MOV A,#200
MOV 50H,A
M002: MOV A,#250
MOV 51H,A
M003: DECMS 51H
JMP M003
DECMS 50H
JMP M002
RET
ENDP
評(píng)論