📄 exp1.asm
字号:
ORG 0000h
LJMP MAIN
ORG 0003h /*外部中断0入口地址*/
LJMP INTE0 /*中断入口转移*/
ORG 000Bh /*定时器0中断入口地址*/
LJMP TIE0 /*中断入口转移*/
MAIN:MOV DPTR,#0E100H
MOV A,#03H
MOVX @DPTR,A
MOV 2AH,#00H
MOV 2BH,#00H
MOV 2CH,#00H
MOV 2DH,#00H
MOV 2EH,#00H
MOV 2FH,#00H
SETB EX0 /*允许外部中断0中断*/
SETB EA /*cpu开中断*/
SETB IT0 /*设置外部中断0下降沿有效*/
SETB ET0 /*允许定时器0中断*/
CLR F0 /*加减法标志位清0*/
MOV R0,#2AH /*将数码管地址赋给R0,R1*/
MOV R1,#2BH
MOV TMOD,#51H /*设置定时器/计数器工作方式*/
MOV TL0,#0B0H /*给定时器赋初值*/
MOV TH0,#3CH
SETB IP.1 /*设置定时器0中断为高优先级*/
SETB P3.2
MOV R5,#0B0H
MOV R4,#03CH
MOV R6,#05H
LOOP:LCALL DISPLAY /*调用显示子程序*/
SJMP LOOP
LOOP2:DJNZ R5,MDISPLAY /*当连续加减显示时,显示一段时间*/
DJNZ R4,MDISPLAY
DJNZ R6,MDISPLAY
RET
MDISPLAY:LCALL DISPLAY
SJMP LOOP2
INTE0:SETB TR0 /*定时器0开始计时*/
MOV R6,#20
MOV C,P3.2 /*判断int0是否为低电平,若为低电平,则转到CTIME子程序*/
JNC CTIME
INTE00:CLR TR0 /*定时器0停止工作*/
JB F0, DECE0 /*判断加减法标志位,若为1,则做减法,否则,做加法*/
LJMP INCRE
CTIME:MOV C,P3.2 /*判断int0是否为高电平,若不是,则等待*/
JNC CTIME
TIE0:DJNZ R6,CTU /*判断是否计时到2s,若没到,则重新赋初值*/
MOV A,R6 /*若已经到2s,则连续做加减*/
JZ INTE00
JNC CTIME /*若按键未到2s且仍然为低电平,则转到CTIME子程序继续等待*/
CLR TR0 /*若按键未到2s但已经为高电平,则结束计时*/
MOV TL0,#0B0H
MOV TH0,#3CH /*给定时器0重新赋初值*/
LJMP INTE00 /*转到INTE0子程序*/
CTU:MOV TL0,#0B0H
MOV TH0,#3CH
RETI
INCRE:MOV A,R6
CJNE @R0,#09H,SETR00 /*判断是否已经加到9,若没有,则转到STER00子程序*/
MOV @R1,#01H /*若已经加到9,则将十位置为1,个位置为0*/
MOV @R0,#00H
SETB F0 /*将加减法标志位置为1*/
LJMP DISPLAY /*调用显示*/
JZ LOOP2
JZ INTE00 /*若按键时间达到2s,则连续加减并显示*/
RETI
SETR00:INC @R0 /*个位增1,并显示*/
LJMP DISPLAY
JZ LOOP2
JZ INCRE
RETI
DECE0:MOV A,R6
CJNE @R1,#01H,DECE00 /*判断是否十位为1,若不是,则转到DECE00子程序*/
MOV @R1,#00H /*若十位为1,则将十位置为0,个位置为9并显示*/
MOV @R0,#09H
LJMP DISPLAY
JZ LOOP2 /*判断按键是否达到2s,若达到,则显示并连续加减*/
JZ DECE0
RETI
DECE00: CJNE @R0,#01H,SETR01 /*判断个位是否为1,若不是,则转到SETR01子程序*/
CLR F0 /*若个位为1,则加减法标志位清0,个位减1并显示*/
DEC @R0
LJMP DISPLAY
JZ LOOP2 /*判断按键是否达到2s,若达到,则显示并继续加减*/
JZ INTE00
RETI
SETR01:DEC @R0 /*若个位不为1,则个位自减1并显示*/
LJMP DISPLAY
JZ LOOP2
JZ DECE0
RETI
DISPLAY:MOV R0,#2AH
MOV R7,#00H
DISPN: MOV DPTR,#0E102H
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#DISPD
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#0E101H
MOVX @DPTR,A
MOV DPTR,#DISPW
MOV A,R7
MOVC A,@A+DPTR
MOV DPTR,#0E102H
MOVX @DPTR,A
LCALL DIMS
INC R0
INC R7
CJNE R7,#06H,DISPN
RET
DIMS:MOV 30H,#0FAH
DLP: NOP
NOP
DJNZ 30H,DLP
RET
DISPD: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
DB 79H,50H,5CH,54H,40H,00H
DISPW:DB 01H,02H,04H,08H,10H,20H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -