實(shí)在是不知道怎么加兩個(gè)中斷用來(lái)開(kāi)始和暫停目前只會(huì)寫以下兩種0到9共陽(yáng)極數(shù)碼管循環(huán)
程序一(自動(dòng)循環(huán))
ORG 0000H
LJMP START
ORG 0040H
START: MOV DPTR,#NUMTAB ;讀數(shù)據(jù)表入口地址
MOV R0,#00H ;R0地址初始化
LOPDSP: MOV A,R0
MOVC A,@A+DPTR ;讀數(shù)字對(duì)應(yīng)編碼
MOV P0,A
ACALL DELAY
INC R0 ;數(shù)字加1
CJNE R0,#0AH,LOPDSP ;大于9,再?gòu)?顯示
JMP START
DELAY: MOV R6,#0FFH
LP1: MOV R7,#0FFH
LP: DJNZ R7,LP
DJNZ R6,LP1
RET
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
程序二(按鍵按一下加一,使用一個(gè)中斷子程序)
; 使用P0接靜態(tài)數(shù)碼管 ; 使用P1接LED燈(本程序中未使用) ; 使用P3.2接獨(dú)立按鍵K1,外部中斷0和P3.2引腳綁定 ; 按鍵無(wú)消抖 ;------------------------------------- ORG 0000H ; ORG為程序段說(shuō)明偽指令,它向匯編程序說(shuō)明該程序段的起始地址,所以可以當(dāng)中斷向量地址用 LJMP L_Main ; 跳轉(zhuǎn)到L_Main標(biāo)號(hào)處 ORG 0013H ; 0003H為外部中斷0向量地址 LJMP I_INT1 ; 跳轉(zhuǎn)到I_INT1標(biāo)號(hào)處 ORG 0030H L_Main: ; 初始化中斷 SETB EA ; 總中斷允許控制位設(shè)置為1 SETB EX1 ; 外部中斷0允許位設(shè)置為1 SETB PX1 ; 外部中斷0優(yōu)先級(jí)設(shè)置為1 SETB IT1 ; 外部中斷0設(shè)置為下降沿觸發(fā)方式
MOV DPTR,#T_table ; T_table所在地址賦值給DPTR MOV R0,#000H ; 立即數(shù)賦值給R0,給R0賦初值,在中斷中用到 MOV P0,#0C0H ; 設(shè)置數(shù)碼管顯示的初始值(熄滅)
; 主循環(huán) L_MainLoop: SJMP L_MainLoop ; 無(wú)限循環(huán)
;--------------------------------------- I_INT1: PUSH ACC ; ACC地址單元中的數(shù)據(jù)壓棧 PUSH PSW ; 程序狀態(tài)字寄存器壓棧 MOV A,R0 ; 將R0的值移動(dòng)到累加器A MOVC A,@A+DPTR ; 根據(jù)A的值和DPTR的值,從數(shù)據(jù)表中取數(shù)到A MOV P0,A ; 將累加器A的值移動(dòng)到P0口,更新數(shù)碼管顯示 INC R0 ; R0寄存器值加1 CJNE R0,#10,L_Next ; 如果R0不等于10就跳轉(zhuǎn)到L_Next MOV R0,#000H ; 如果R0等于10,則重置為0 L_Next: POP PSW ; 程序狀態(tài)字寄存器出棧 POP ACC ; ACC地址單元中的數(shù)據(jù)出棧 RETI ; 中斷返回 ;--------------------------------------- T_table:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H,0F8H, 80H, 90H END
想用普中開(kāi)發(fā)板P3.2,P3.3連K1,K2兩個(gè)按鈕控制開(kāi)始和暫停,求教各位大佬,謝謝
|