📄 counter.asm
字号:
COUNT EQU 30H ;计数单元
BUF EQU 31H ;显示缓冲区首地址,共2字节
ORG 0
LJMP START
ORG 3
LJMP JS
ORG 30H
START: MOV SP,#60H
SETB IT0 ;设INT0为边沿中断
SETB EX0 ;允许INT0中断
MOV COUNT,#0 ;计数单元清零
SETB P3.2 ;设置INT0管脚为输入状态
SETB EA ;开中断
LOOP: MOV R6,COUNT ;取计数值
LCALL HTOB ;将计数值转换为BCD码
MOV BUF,R2 ;存转换后的计数值
MOV BUF+1,R3
LCALL DISP
SJMP LOOP
;显示程序
;将BUF单元的2字节BCD码送数码管显示
DISP: MOV R0,#BUF
MOV R2,#2 ;共显示2个字节的BCD码
MOV R3,#1 ;位码初值
MOV A,@R0
ANL A,#0FH
MOV DPTR,#DISP_TAB
MOVC A,@A+DPTR
MOV P0,A ;送段码
MOV A,R3
MOV P2,#2
LCALL DELAY ;延时1ms
MOV A,@R0
SWAP A
ANL A,#0FH
MOV DPTR,#DISP_TAB
MOVC A,@A+DPTR
MOV P0,A ;送段码
MOV P2,#1
LCALL DELAY
INC R0
MOV A,@R0
ANL A,#0FH
MOV DPTR,#DISP_TAB
MOVC A,@A+DPTR
MOV P0,A ;送段码
MOV A,R3
MOV P2,#8
LCALL DELAY ;延时1ms
MOV A,@R0
SWAP A
ANL A,#0FH
MOV DPTR,#DISP_TAB
MOVC A,@A+DPTR
MOV P0,A ;送段码
MOV P2,#4
LCALL DELAY
RET
DISP_TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
;这是一个将16进制数转换为BCD码的程序
;待转换的16进制数在R6中,转换完的结果在R2R3中
;使用的寄存器A,,B,R6,R2,R3
HTOB: MOV A,R6
MOV B,#100
DIV AB
MOV R2,A
MOV A,B
MOV B,#10
DIV AB
SWAP A
ADD A,B
MOV R3,A
RET
;计数程序
;计数值为1字节 存在COUNT单元
JS: PUSH PSW
PUSH ACC
PUSH DPH
PUSH DPL
CLR RS1
SETB RS0 ;选择1区工作寄存器
INC COUNT
POP DPL
POP DPH
POP ACC
POP PSW
RETI
DELAY: MOV R6,#250
L1: NOP
NOP
DJNZ R6,L1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -