c51串行通信汇编语言,51单片机双机串行通信汇编语言程序+Proteus仿真
时间: 2023-10-18 09:16:16 浏览: 124
基于8051单片机+PROTEUS仿真 C语言程序设计实例源码之- ADC0809模数转换与显示.zip
以下是c51串行通信汇编语言的示例程序,包括了51单片机双机串行通信的汇编语言程序和Proteus仿真:
首先,需要定义串行通信协议参数:
```
baudrate EQU 34H ; 波特率设置
RXD EQU 0 ; 串行接收引脚
TXD EQU 1 ; 串行发送引脚
```
然后,需要初始化串行口和中断:
```
; 初始化串行口
INIT_SERIAL:
MOV SCON,#50H ; 串行口工作在模式1
MOV TMOD,#20H ; 定时器1工作在模式2,用于波特率发生器
MOV TH1,#baudrate ; 波特率发生器的初始值
SETB TR1 ; 启动波特率发生器
SETB ES ; 打开串行口中断
RET
```
接着,需要编写发送数据和接收数据的代码:
```
; 发送数据
SEND_DATA:
MOV A,#data ; 要发送的数据
MOV SBUF,A ; 将数据存入发送缓冲区
JNB TI,$ ; 等待发送完成
CLR TI ; 清除发送完成标志
RET
; 接收数据
RECEIVE_DATA:
JNB RI,$ ; 等待接收数据
MOV data,SBUF ; 将接收到的数据存入data中
CLR RI ; 清除接收中断标志
RET
```
最后,需要在中断服务程序中编写发送和接收数据的代码:
```
; 中断服务程序
SERIAL_ISR:
JNB TI,SEND_ISR ; 如果没有发送中断,跳转到接收中断
CLR TI ; 清除发送中断标志
RETI ; 返回中断
SEND_ISR:
JNB RI,$ ; 等待接收中断
MOV A,SBUF ; 将接收到的数据存入A中
MOV SBUF,A ; 将A中的数据发送出去
CLR RI ; 清除接收中断标志
RETI ; 返回中断
```
在主程序中,可以调用发送数据和接收数据的函数:
```
MAIN:
CALL INIT_SERIAL ; 初始化串行口和中断
CALL SEND_DATA ; 发送数据
CALL RECEIVE_DATA ; 接收数据
SJMP MAIN ; 循环执行
```
以上是一个简单的51单片机双机串行通信的汇编语言程序示例,可以用Proteus进行仿真测试。需要注意的是,在Proteus中需要添加一个串行口模块,并将其连接到51单片机的串行引脚上。
阅读全文