51单片机写一个汇编程序串口接收的数据由数码管显示,并将数据按位取款发送出去,波特率2400八位数据格式。
时间: 2024-02-25 13:54:56 浏览: 103
51单片机串口通信(单片机接收上位机数据)
4星 · 用户满意度95%
以下是一个简单的51单片机汇编程序,实现串口接收数据并用数码管显示,同时按位取款并发送出去,波特率为2400,数据格式为8位。
```assembly
; 定义常量
UART_CONTR equ PCON
UART_TX equ P0
UART_RX equ P1
BaudRate equ 2400
; 定义变量
data DB 0
temp DB 0
flag DB 0
i DB 0
; 初始化串口
InitUART:
mov UART_CONTR, #0x00 ; 关闭SMOD位
mov SCON, #0x50 ; 8位数据位,无校验,1位停止位
mov TMOD, #0x20 ; 8位自动重载定时器1
mov TH1, #256 - (FREQ/32/BaudRate) ; 计算波特率
setb TR1 ; 启动定时器1
ret
; 串口接收中断处理程序
UART_ISR:
clr RI ; 清除接收中断标志位
mov data, SBUF ; 将接收到的数据存入data变量
mov flag, #1 ; 设置标志位,表示有数据接收
reti
; 数码管显示函数
Display:
mov i, #0 ; 将i清零
mov A, data ; 将data中的数据移动到累加器A中
loop:
mov temp, A ; 将A中的值移动到temp中
anl temp, #0x0F ; 取temp低四位
mov P2, temp ; 将temp的值输出到数码管
inc i ; i自增1
mov temp, A ; 将A中的值移动到temp中
shr A, #4 ; 将A右移4位
cjne i, #2, loop ; i小于2就跳转到loop
ret
; 按位取款并发送函数
Send:
mov i, #0 ; 将i清零
mov A, data ; 将data中的数据移动到累加器A中
loop2:
mov temp, A ; 将A中的值移动到temp中
anl temp, #0x01 ; 取temp的最低位
mov P3.0, temp ; 将temp的值输出到P3.0引脚
rrc A ; A右移一位
inc i ; i自增1
cjne i, #8, loop2 ; i小于8就跳转到loop2
mov SBUF, data ; 将data中的数据发送出去
ret
; 主程序
main:
; 初始化
call InitUART
setb EA ; 开启总中断
setb ES ; 开启串口中断
mov flag, #0 ; 将标志位清零
; 循环
loop:
cjne flag, #1, loop ; 如果标志位为0,就继续循环
clr flag ; 将标志位清零
call Display ; 数码管显示数据
call Send ; 按位取款并发送数据
sjmp loop ; 继续循环
```
这个程序假定数码管连接到P2口,按位取款的数据输出到P3.0口。根据具体的硬件连接情况,请相应地修改程序。
阅读全文