用51单片机写一个汇编程序试用定时器T1实现0~9的循环计时显示任务。单片机P2端口连接一个共阳型数码管,要求间隔1S变化一个数字。单片机晶振频率12MHz。共阳型数码管0~9的字形码为0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H。
时间: 2024-03-14 18:47:08 浏览: 84
以下是用MCS-51汇编语言编写的程序,可以实现用定时器T1实现0~9的循环计时显示任务,单片机P2端口连接一个共阳型数码管,每间隔1S变化一个数字。共阳型数码管0~9的字形码为0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H。
```
ORG 0H ; 程序从地址0开始存储
MOV PCON,#00H ; 关闭功耗模式
MOV TMOD,#10H ; 定时器1工作在模式1
MOV TH1,#0C0H ; 定时器1初值为0xC0
MOV TL1,#0H ; 定时器1初值为0x00
SETB TR1 ; 启动定时器1
MOV P2,#0FFH ; P2端口输出高电平
MAIN:
JB TF1, UPDATE ; 如果定时器1溢出,则跳转到更新显示
SJMP MAIN ; 否则继续等待
UPDATE:
CLR TF1 ; 清除定时器1溢出标志位
ADD A, #1 ; 累加器A递增1
MOV C, #0 ; 清除进位标志位C
ACALL DISPLAY ; 调用DISPLAY显示数字
SJMP MAIN ; 继续循环
DISPLAY:
CPL A ; 将累加器A按位取反,得到数码管显示的字形码
MOV P2, A ; 将字形码写入P2端口,使数码管显示对应数字
ACALL DELAY ; 程序延时
RET ; 返回主程序
DELAY:
MOV R2, #0FFH ; 计数器R2初值为0xFF
DELAY_LOOP:
DJNZ R2, DELAY_LOOP ; 计数器R2递减,直至为0
RET ; 返回DISPLAY
```
阅读全文