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