📄 频率测量.asm
字号:
;频率测量0-9999Hz
;T0计时1s,T1计数放入R2、R3中
ORG 0000H ;程序起始地址
AJMP MAIN ;跳转至MAIN
ORG 000BH ;定时/计数器T0溢出中断矢量地址
LJMP TIMER0 ;跳转至TIMER0
ORG 001BH ;定时/计数器T1溢出中断矢量地址
LJMP TIMER1 ;跳转至TIMER1
ORG 0030H ;主程序起始地址
MAIN:MOV TMOD,#61H ;设置定时/计数器T0为定时器方式1,16位计数器
;定时/计数器T1为计数器方式2,8位自动重装载计数器
MOV TH1,#0FFH ;T1的8位自动重装载计数器的初值为0FFH
MOV TL1,#0FFH
MOV TH0,#3CH ;T0的计数器初值为3CBAH,49.99ms计时
MOV TL0,#0BAH
MOV R0,#20 ;R0=20,计时变量
MOV 20H,#00 ;20H地址中的数据为0,20H地址中存放频率值
MOV 21H,#00 ;21H地址中的数据为0
MOV A,#00H ;A清零
SETB EA ;CPU开总中断
SETB ET1 ;定时/计数器T1开溢出中断
SETB ET0 ;定时/计数器T0开溢出中断
SETB IT1 ;外部中断INT1为边沿触发方式
SETB TR1 ;启动T1
SETB TR0 ;启动T0
LOOP:ACALL DISPLAY ;调用显示子程序
AJMP LOOP ;无限循环
;显示子程序
DISPLAY:MOV A,20H ;20H地址中的频率值送A
MOV B,#10 ;B=10
DIV AB ;A除以B
SWAP A ;A的高4位与低4位交换
ORL A,B ;A与B相或
MOV P1,A ;A的值送P1口
MOV A,21H ;取21H地址的值给A
MOV B,#10 ;B=10
DIV AB ;A除以B
SWAP A ;A的高4位与低4位交换
ORL A,B ;A与B相或
MOV P2,A ;A的值送P2口
RET
;定时/计数器T0中断服务子程序
TIMER0:MOV TH0,#3CH ;重新初始化TO计数器
MOV TL0,#0BAH
DJNZ R0,LOOP0 ;R0不为0时,跳转至LOOP0
MOV R0,#20 ;R0=0时,重新初始化R0=20
MOV 20H,R2 ;R2中的值放入20H地址中
MOV 21H,R3 ;R3中的值放入21H地址中
MOV R2,#00H ;R2、R3清零
MOV R3,#00H
LOOP0:RETI ;中断返回
;定时/计数器T1中断服务子程序
TIMER1:INC R2 ;R2加1
CJNE R2,#100,LOOP1 ;R2不为100时,跳转至LOOP1
MOV R2,#00H ;R2=100时,R2清零
INC R3 ;R3加1
CJNE R3,#100,LOOP1 ;R3不为100时,跳转至LOOP1
MOV R3,#00H ;R3=100时,R3清零
LOOP1:RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -