单片机软件版毫秒表汇编语言实现
时间: 2023-10-18 11:22:20 浏览: 47
以下是一份基于AT89C51单片机的毫秒表汇编语言实现:
```
ORG 0H ;程序从0地址开始存放
MOV TMOD,01H ;使用定时器0,工作方式1
MOV TH0,#0 ;定时器初值为0
MOV TL0,#0 ;定时器初值为0
SETB TR0 ;启动定时器0
SETB EA ;打开总中断
SETB ET0 ;打开定时器0中断
SETB ES ;打开串口中断
MOV SCON,#50H ;设置串口工作方式
MOV PCON,#80H ;设置串口波特率
MAIN: SJMP MAIN ;程序主循环
;定时器0中断服务程序
TIMER0_ISR: MOV TH0,#0 ;重新赋初值
MOV TL0,#0 ;重新赋初值
INC MS ;毫秒加1
CJNE MS,#100,EXIT_ISR ;毫秒计数小于100,直接退出
CLR MS ;毫秒计数清零
INC SEC ;秒加1
CJNE SEC,#60,EXIT_ISR ;秒计数小于60,直接退出
CLR SEC ;秒计数清零
INC MIN ;分钟加1
CJNE MIN,#60,EXIT_ISR ;分钟计数小于60,直接退出
CLR MIN ;分钟计数清零
EXIT_ISR: RETI ;中断返回
;串口中断服务程序
UART_ISR: MOV A,SBUF ;读取串口数据
CJNE A,#0FFH,SEND_DATA ;串口数据不等于FFH,发送数据
CLR A ;串口数据等于FFH,清空数据
SEND_DATA: MOV SBUF,A ;发送数据
CLR TI ;清空发送中断标志位
RETI ;中断返回
;变量定义
MS EQU 20H ;毫秒计数
SEC EQU 21H ;秒计数
MIN EQU 22H ;分计数
END ;程序结束
```
该程序使用定时器0来实现毫秒计数,并在定时器0中断服务程序中对毫秒、秒、分进行计数,同时使用串口中断服务程序来读取串口数据并发送数据。在程序主循环中,只有一个无限循环指令,程序的实际运行由中断服务程序来完成。