两个51单片机基于rs485通讯程序
时间: 2023-12-02 16:02:20 浏览: 130
51单片机实现的RS485通讯程序
以下是两个51单片机基于RS485通讯的程序:
发送端代码:
```c
#include <reg52.h>
#include <intrins.h>
sbit led = P1^0; // LED灯接在P1.0口
sbit RS485TX = P1^5; // RS485芯片控制引脚
sbit RS485RX = P1^6; // RS485芯片控制引脚
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i=0; i<t; i++)
{
for(j=0; j<120; j++);
}
}
void InitUART() // 串口初始化函数
{
TMOD = 0x20;
SCON = 0x50;
PCON = 0x80;
TH1 = 0xF3;
TL1 = 0xF3;
TR1 = 1;
}
void SendData(unsigned char dat) // 串口发送数据函数
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void SendString(unsigned char *str) // 串口发送字符串函数
{
while(*str)
{
SendData(*str++);
}
}
void main()
{
InitUART(); // 初始化串口
while(1)
{
led = ~led; // LED灯闪烁
SendString("Hello World!\r\n"); // 发送字符串
delay(10000); // 延时
}
}
```
接收端代码:
```c
#include <reg52.h>
#include <intrins.h>
sbit led = P1^0; // LED灯接在P1.0口
sbit RS485TX = P1^5; // RS485芯片控制引脚
sbit RS485RX = P1^6; // RS485芯片控制引脚
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i=0; i<t; i++)
{
for(j=0; j<120; j++);
}
}
void InitUART() // 串口初始化函数
{
TMOD = 0x20;
SCON = 0x50;
PCON = 0x80;
TH1 = 0xF3;
TL1 = 0xF3;
TR1 = 1;
}
void SendData(unsigned char dat) // 串口发送数据函数
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
unsigned char ReceiveData() // 串口接收数据函数
{
while(RI == 0);
RI = 0;
return SBUF;
}
void main()
{
InitUART(); // 初始化串口
while(1)
{
RS485RX = 1; // 设置为接收模式
if(ReceiveData() == 'H') // 接收到'H'字符
{
if(ReceiveData() == 'i') // 接收到'i'字符
{
led = ~led; // LED灯闪烁
SendData('O'); // 发送字符'O'
SendData('K'); // 发送字符'K'
SendData('\r'); // 发送回车
SendData('\n'); // 发送换行
}
}
RS485RX = 0; // 设置为发送模式
delay(10000); // 延时
}
}
```
以上代码中,发送端不断发送字符串"Hello World!\r\n",接收端接收到字符'H'后,判断接收到的下一个字符是否为'i',如果是,则让LED灯闪烁,并以"OK\r\n"的形式回复发送端。注意,在接收数据时,需要先将RS485芯片控制引脚设置为接收模式,接收完数据后再将其设置为发送模式。
阅读全文