两个51单片机之间的通信发送数值
时间: 2023-06-27 20:01:13 浏览: 125
51单片机之间的通信程序
两个51单片机之间的通信可以使用串口通信进行发送数值。需要先定义好通信的波特率、数据位、停止位、校验位等参数,然后通过串口发送数据。以下是一个简单的示例代码:
发送端:
```c
#include <reg51.h>
#define BAUDRATE 9600 // 通信波特率
#define FOSC 11059200UL // 系统时钟频率
#define PRESCALER 12 // 定时器预分频值
void initUART() {
TMOD = 0x20; // 设置定时器1为模式2
TH1 = 256 - FOSC / PRESCALER / 32 / BAUDRATE; // 计算波特率重载值
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为模式1
}
void sendByte(unsigned char byte) {
SBUF = byte; // 将字节写入发送缓存
while (TI == 0); // 等待发送完成
TI = 0; // 清除发送标志
}
void main() {
unsigned char value = 100; // 要发送的数值
initUART(); // 初始化串口
sendByte(value); // 发送数值
while (1); // 循环等待
}
```
接收端:
```c
#include <reg51.h>
#define BAUDRATE 9600 // 通信波特率
#define FOSC 11059200UL // 系统时钟频率
#define PRESCALER 12 // 定时器预分频值
void initUART() {
TMOD = 0x20; // 设置定时器1为模式2
TH1 = 256 - FOSC / PRESCALER / 32 / BAUDRATE; // 计算波特率重载值
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为模式1
}
unsigned char receiveByte() {
while (RI == 0); // 等待接收完成
RI = 0; // 清除接收标志
return SBUF; // 返回接收到的字节
}
void main() {
unsigned char value; // 接收到的数值
initUART(); // 初始化串口
value = receiveByte(); // 接收数值
while (1); // 循环等待
}
```
需要注意的是,两个单片机之间的串口通信需要将它们的TX和RX引脚相连,同时需要确保它们的电平和波特率等参数设置相同。
阅读全文