实在是不知道怎么加两个中断用来开始和暂停目前只会写以下两种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两个按钮控制开始和暂停,求教各位大佬,谢谢
|