单片机甲乙丙机多机通信代码
时间: 2023-09-17 13:07:27 浏览: 49
单片机甲乙丙机多机通信代码可以采用串口通信,以下是一个简单的代码示例:
甲机代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <reg52.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_1MS (65536-FOSC/12/1000) // 1ms计时器初值
sbit led = P1^0;
unsigned char id = 'A'; // 甲机ID为A
void init_uart()
{
SCON = 0x50; // 8位数据位,可变波特率
TMOD &= 0x0F; // 清除定时器1的设置
TMOD |= 0x20; // 定时器1工作在模式2:8位自动重装载计数器
TH1 = TL1 = TIMER_1MS; // 波特率为9600,定时器1初值
TR1 = 1; // 启动定时器1
ES = 1; // 使能串口中断
EA = 1; // 允许中断
}
void uart_send(unsigned char dat)
{
SBUF = dat;
while(TI == 0); // 等待发送完成
TI = 0; // 发送完成,清除标志位
}
void uart_send_str(unsigned char *str)
{
while(*str != '\0')
{
uart_send(*str);
str++;
}
}
void main()
{
init_uart();
while(1)
{
led = ~led; // 闪烁LED灯
uart_send_str("Hello, I am A.\n"); // 发送消息
delay(1000); // 延时1秒
}
}
void uart_isr() interrupt 4
{
if(RI == 1) // 接收到数据
{
RI = 0; // 清除接收标志位
unsigned char dat = SBUF; // 读取数据
if(dat == 'B') // 收到B机发送的消息
{
uart_send_str("I received a message from B.\n");
}
else if(dat == 'C') // 收到C机发送的消息
{
uart_send_str("I received a message from C.\n");
}
}
}
```
乙机和丙机的代码与甲机类似,只需要修改ID为B或C即可。
同时需要注意,三台单片机的串口连接方式应该是TX->RX,RX->TX,共地。这样甲机就可以接收乙机和丙机发送的消息了。
希望对你有所帮助!