单片机甲乙丙机多机通信代码
时间: 2023-09-17 15:07:27 浏览: 39
单片机之间的通信可以通过串口通信、SPI、I2C等协议实现。以下是使用串口通信实现多机通信的示例代码,假设使用的是STC89C52单片机:
甲机发送数据:
```c
#include <reg52.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_DIV 256
#define TH1_INIT (256 - (FOSC / BAUD / TIMER_DIV))
void SendByte(char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void main()
{
TMOD = 0x20; //定时器1工作在模式2
TH1 = TH1_INIT;
TL1 = TH1_INIT;
TR1 = 1; //启动定时器1
SCON = 0x50; //串口工作在模式1,允许接收
ES = 1; //允许串口中断
EA = 1; //允许总中断
while(1)
{
SendByte(0x55); //发送数据
Delay(500); //延时
}
}
void SerialInterrupt() interrupt 4
{
if(RI)
{
RI = 0;
}
if(TI)
{
TI = 0;
}
}
```
乙机接收数据:
```c
#include <reg52.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_DIV 256
#define TH1_INIT (256 - (FOSC / BAUD / TIMER_DIV))
void main()
{
TMOD = 0x20; //定时器1工作在模式2
TH1 = TH1_INIT;
TL1 = TH1_INIT;
TR1 = 1; //启动定时器1
SCON = 0x50; //串口工作在模式1,允许接收
ES = 1; //允许串口中断
EA = 1; //允许总中断
while(1)
{
//等待接收数据
}
}
void SerialInterrupt() interrupt 4
{
if(RI)
{
char dat = SBUF; //读取接收到的数据
RI = 0;
}
if(TI)
{
TI = 0;
}
}
```
丙机接收数据:
```c
#include <reg52.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_DIV 256
#define TH1_INIT (256 - (FOSC / BAUD / TIMER_DIV))
void main()
{
TMOD = 0x20; //定时器1工作在模式2
TH1 = TH1_INIT;
TL1 = TH1_INIT;
TR1 = 1; //启动定时器1
SCON = 0x50; //串口工作在模式1,允许接收
ES = 1; //允许串口中断
EA = 1; //允许总中断
while(1)
{
//等待接收数据
}
}
void SerialInterrupt() interrupt 4
{
if(RI)
{
char dat = SBUF; //读取接收到的数据
RI = 0;
}
if(TI)
{
TI = 0;
}
}
```
这样,甲机可以通过串口发送数据给乙机和丙机,乙机和丙机通过串口接收甲机发送的数据。需要注意的是,每个单片机的串口波特率、数据格式等参数需要一致。