📄 频率计.asm
字号:
;频率计
;计数频率范围1-65535Hz
VALUEH EQU 20H ;暂存TH1的值
VALUEL EQU 21H ;暂存TL1的值
DATE0 EQU 22H ;暂存计数值的BCD码
DATE1 EQU 23H
DATE2 EQU 24H
DATE3 EQU 25H
DATE4 EQU 26H
COUNT EQU 30H ;COUNT为溢出计数,当COUNT=20时,计满1s
ORG 0000H ;程序起始地址
SJMP START ;跳转至START
ORG 001BH ;定时/计数器T1中断矢量地址
LJMP TIMER1 ;跳转至TIMER1
START:MOV DPTR,#TABLE ;取TABLE的有效地址给DPTR
MOV 20H,#00H ;存储空间初始化
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV 24H,#00H
MOV 25H,#00H
MOV 26H,#00H
MOV 30H,#00H
;定时/计数器T1工作在定时方式1;定时/计数器T0工作在计数方式1
MOV TMOD,#15H
MOV TH1,#3CH ;定时/计数器T1赋初值为3CB8H,即49.992ms
MOV TL1,#0B8H
MOV TH0,#00H ;定时/计数器T0赋初值为00H
MOV TL0,#00H
MOV IE,#8AH
;按键为低电平时,开始计数
WAIT:SETB TR0 ;启动定时/计数器T0
SETB TR1 ;启动定时/计数器T1
W1:LCALL DISP ;显示计数值
AJMP W1
;定时/计数器T1中断服务子程序
TIMER1:MOV TH1,#3CH ;重新初始化定时/计数器T1的初值
MOV TL1,#0B8H
INC COUNT ;COUNT加1
MOV A,COUNT
CJNE A,#20,RETUNE ;是否计满1秒,否的话,跳转至RETUNE
MOV COUNT,#00H ;是的话,COUNT清零
CLR TR0 ;关闭定时器T0
CLR TR1 ;关闭计数器T1
MOV VALUEL,TL0 ;存放计数值
MOV VALUEH,TH0
LCALL HTOD
RETUNE:RETI
;将VALUEH/VALUEL中的16进制数转成10进制并且把5位数依次存入DATE0至DATE4
HTOD:MOV R2,VALUEH
MOV R3,VALUEL
CLR A
MOV R4,A ;R4、R5、R6清零
MOV R5,A
MOV R6,A
MOV R7,#10H ;R7赋值为10H,即循环左移16位
LOOP1:CLR C ;清零进位位
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LOOP1
CZ:MOV R0,#DATE4
MOV A,R6
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R6
SWAP A
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R5
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R5
SWAP A
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,R4
ANL A,#0FH
MOV @R0,A
RET
;显示子程序
DISP:MOV A,DATE4
MOVC A,@A+DPTR
MOV P2,#0FFH
CLR P2.3
MOV P1,A
LCALL DL1MS
SETB P2.3
MOV A,DATE3
MOVC A,@A+DPTR
MOV P2,#0EFH
MOV P1,A
LCALL DL1MS
MOV P2,#0FFH
MOV A,DATE2
MOVC A,@A+DPTR
MOV P2,#0DFH
MOV P1,A
LCALL DL1MS
MOV P2,#0FFH
MOV A,DATE1
MOVC A,@A+DPTR
MOV P2,#0BFH
MOV P1,A
LCALL DL1MS
MOV P2,#0FFH
MOV A,DATE0
MOVC A,@A+DPTR
MOV P2,#7FH
MOV P1,A
LCALL DL1MS
MOV P2,#0FFH
RET
;1ms延时子程序
DL1MS:MOV R6,#14H
DL1:MOV R7,#19H
DL2:DJNZ R7,DL2
DJNZ R6,DL1
RET
;0-9的共阴极数码管的段码值
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -