两台C51单片机串口通信
时间: 2023-07-28 09:06:44 浏览: 62
C51单片机串口通信需要使用两个串口口,一个作为发送端,一个作为接收端。以下是一个简单的例子,其中P1.0口为发送端,P1.1口为接收端。
发送端程序:
```c
#include <reg52.h>
void UART_SendByte(unsigned char dat);
void main()
{
TMOD = 0x20; // 设置计数器1为模式2
TH1 = 0xfd; // 波特率9600,时钟频率12MHz
TL1 = 0xfd;
TR1 = 1; // 启动计数器1
SCON = 0x50; // 串口工作在模式1,允许接收和发送
P1 = 0xff; // 初始化P1口为高电平
while(1)
{
UART_SendByte(0x55); // 发送0x55
}
}
void UART_SendByte(unsigned char dat)
{
SBUF = dat; // 将要发送的数据放入发送缓冲区
while(!TI); // 等待发送完成
TI = 0; // 发送完成标志位清零
}
```
接收端程序:
```c
#include <reg52.h>
void UART_ReceiveByte(unsigned char *dat);
void main()
{
TMOD = 0x20; // 设置计数器1为模式2
TH1 = 0xfd; // 波特率9600,时钟频率12MHz
TL1 = 0xfd;
TR1 = 1; // 启动计数器1
SCON = 0x50; // 串口工作在模式1,允许接收和发送
P1 = 0xff; // 初始化P1口为高电平
while(1)
{
unsigned char dat;
UART_ReceiveByte(&dat); // 接收数据
P1 = dat; // 将接收到的数据输出到P1口
}
}
void UART_ReceiveByte(unsigned char *dat)
{
while(!RI); // 等待接收完成
*dat = SBUF; // 将接收到的数据放入dat指向的内存空间
RI = 0; // 接收完成标志位清零
}
```
需要注意的是,两个单片机之间的波特率、数据位数、停止位数、校验位等参数必须一致。同时,两个单片机的接收和发送引脚也需要正确连接。