合泰單片機中斷嵌套
;*************************************************
;外部中斷0服務(wù)子程序
;*************************************************
ZD01:;進入中斷自動關(guān)閉總中斷
SETEMI;打開總中斷允許嵌套
CLRINT0E;關(guān)閉外部中斷0避免為完成操作2次中斷
MOV[0F2H],A;壓棧ACC到0F2H
MOVA,STATUS;
MOV[0F3H],A;壓棧status標志寄存器到0F3H
INC[8DH];個位數(shù)碼管加1
MOVA,10;
SUBA,[8DH];用10減個位數(shù)碼管的數(shù)判斷是否相等
SNZZ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMPA2;Z=1結(jié)果不等返回繼續(xù)加1
MOVA,0;Z=0結(jié)果相等
MOV[8DH],A;存0繼續(xù)顯示
INC[8CH];十位數(shù)碼管加1
MOVA,10;用10減十位數(shù)碼管的數(shù)判斷是否相等
SUBA,[8CH];
SNZZ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMPA2;Z=1結(jié)果不等返回繼續(xù)加1
MOVA,0;Z=0結(jié)果相等
MOV[8CH],A;存0繼續(xù)顯示
INC[8BH];百位數(shù)碼管加1
MOVA,10;
SUBA,[8BH];用10減百位數(shù)碼管的數(shù)判斷是否相等
SNZZ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMPA2;Z=1結(jié)果不等返回繼續(xù)加1
MOVA,0;Z=0結(jié)果相等
MOV[8BH],A;存0繼續(xù)顯示
INC[8AH];千位數(shù)碼管加1
MOVA,10;用10減千位數(shù)碼管的數(shù)判斷是否相等
SUBA,[8AH];
SNZZ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMPA2;Z=1結(jié)果不等返回繼續(xù)加1
MOVA,0;Z=0結(jié)果相等
MOV[8AH],A;存0繼續(xù)顯示
JMPA2;已經(jīng)到9999清為0000返回反復執(zhí)行
A2:
CALLM001
SNZPA.3;判斷PA3是否為高電平(去抖)
JMPA2;是低電平則返回判斷
CALLM001;延時防止抖動
SNZPA.3;
JMPA2;
MOVA,[0F3H];彈棧后進先出先進后出
MOVSTATUS,A;彈棧0F1H的數(shù)到標志寄存器
MOVA,[0F2H];彈棧0F0H的數(shù)到acc
CLRINT0F;清中斷標志
SETINT0E;使能外部中斷
RETI;中斷返回
;*******************************************************
;中斷服務(wù)子程序
;*******************************************************
ZD1:
MOV[0F0H],A;壓棧ACC到0F0H
MOVA,STATUS;
MOV[0F1H],A;壓棧status標志寄存器到0F1H
CLRPC;清PC(清屏幕)
MOVA,Q1;數(shù)據(jù)表地址
CLRTBHP;清數(shù)據(jù)表地址高位否則出錯
ADDA,IAR0;利用間接寄存器找到要顯示段碼所在數(shù)據(jù)表的地址
MOVTBLP,A;表格指針寄存器TBLP
TABRDPD;查表并將數(shù)據(jù)存到PD口寄存器
MOVA,[80H];位碼寄存器
MOVPC,A;將位碼寄存器的數(shù)存到PC口寄存器
;段碼和位碼的數(shù)都有了所以數(shù)碼管被點亮
INCMP0;間接寄存器指針加1指向下一個段碼寄存器
RL[80H];左移位碼寄存器控制下一個數(shù)碼管
SNZ[80H].5;判斷是否控制完4個數(shù)碼管
JMPZD2;退出中斷繼續(xù)
MOVA,1;是則從新初始化寄存器數(shù)據(jù)
MOV[80H],A;
MOVA,8AH;千位數(shù)碼管對應(yīng)寄存器
MOVMP0,A;存到間接寄存器0
ZD2:
MOVA,[0F1H];彈棧后進先出先進后出
MOVSTATUS,A;彈棧0F1H的數(shù)到標志寄存器
MOVA,[0F0H];彈棧0F0H的數(shù)到acc
CLRMF0F;清多功能標志
CLRT2AF;清定時器2比較器A標志
RETI;中斷返回
;**************************************
;延時子程序
;**************************************
M001:
MOVA,1
MOV[85H],A
M002:
MOVA,10
MOV[86H],A
M003:
MOVA,250
MOV[87H],A
M004:
SDZ[87H]
JMPM004
SDZ[86H]
JMPM003
SDZ[85H]
JMPM002
RET
END本文引用地址:http://m.butianyuan.cn/article/201612/324335.htm
評論