51单片机软件版毫秒表汇编语言实现
时间: 2023-10-18 07:08:01 浏览: 40
以下是51单片机软件版毫秒表的汇编语言实现:
```
ORG 0H
MOV TMOD, 01H
MOV TH0, 0FEH
MOV TL0, 0CBH
SETB TR0
MAIN: JB TF0, MAIN
MOV A, 0AH
CLR TF0
JMP MAIN
END
```
解释:
1. `ORG 0H`:将程序的起始地址设置为0。
2. `MOV TMOD, 01H`:将计时器0的模式设置为1。
3. `MOV TH0, 0FEH`:将计时器0的高8位设置为0xFE。
4. `MOV TL0, 0CBH`:将计时器0的低8位设置为0xCB。
5. `SETB TR0`:启动计时器0。
6. `MAIN`:主程序入口。
7. `JB TF0, MAIN`:当计时器0溢出时,跳转到主程序入口。
8. `MOV A, 0AH`:将寄存器A设置为0x0A,即10。
9. `CLR TF0`:清除计时器0的溢出标志。
10. `JMP MAIN`:跳转到主程序入口,开始下一轮计时。
以上代码实现了一个简单的毫秒表,每当计时器0溢出时,寄存器A的值加1,最终可以得到一个从0开始,以10毫秒为单位递增的毫秒表。
相关问题
单片机软件版毫秒表汇编语言实现
以下是一份基于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中断服务程序中对毫秒、秒、分进行计数,同时使用串口中断服务程序来读取串口数据并发送数据。在程序主循环中,只有一个无限循环指令,程序的实际运行由中断服务程序来完成。
51单片机用lcd1602制作电压表汇编语言
下面是一个简单的汇编程序,可以实现51单片机LCD1602电压表的功能:
```
; 51单片机LCD1602电压表汇编程序
; 使用ADC0804模块进行模拟电压转换,使用P1口连接LCD1602模块
ORG 0 ; 程序从地址0开始
MOV P1, #00000000H ; 初始化P1口为输出模式,清零所有位
MAIN:
ACALL ADC_READ ; 调用ADC转换程序,将结果存入R1
ACALL LCD_DISP ; 调用LCD显示程序,显示R1的值
SJMP MAIN ; 进入死循环
ADC_READ:
MOV A, #00000001B ; 设置ADC0804模块的控制字节,选择通道0,开始转换
MOV P1.0, #1 ; 启动转换
WAIT:
JB P1.1, WAIT ; 等待转换完成
MOV A, P1.2 ; 读取ADC的输出数据
MOV R1, A ; 将结果存入R1
RET ; 返回主程序
LCD_DISP:
MOV A, R1 ; 将R1中的值存入A寄存器
MOV P1, #00000000H; 清空P1口
MOV P2, #00000000H; 清空P2口
MOV P1.7, #1 ; 将RS置为1,选择数据传输模式
ACALL LCD_DELAY ; 延时2毫秒
MOV P2, A ; 将A寄存器的值传输到LCD1602的数据口
MOV P1.6, #1 ; 将EN置为1,开始传输数据
ACALL LCD_DELAY ; 延时2毫秒
MOV P1.6, #0 ; 将EN置为0,结束传输数据
ACALL LCD_DELAY ; 延时2毫秒
RET ; 返回主程序
LCD_DELAY:
; 延时程序,根据实际情况调整延时时间
MOV R2, #255
D1:
DJNZ R2, D1
MOV R2, #255
D2:
DJNZ R2, D2
RET ; 返回LCD_DISP程序
```
需要注意的是,以上程序仅供参考,具体实现需要根据实际硬件和需求进行调整和优化。同时,还需要进行一些硬件上的调整和优化,比如使用精准的电阻分压器、电容滤波等等,以保证精度和稳定性。
相关推荐
![ASM](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)