多机串口通讯实验 数码管显示
时间: 2023-07-03 15:04:09 浏览: 117
多机串口通讯实验可以通过使用单片机的串口通信功能来实现。下面是一个简单的示例,假设有两个单片机,分别为主机和从机,它们通过串口通信进行数据交换,并且在数码管上显示收到的数据。
主机代码:
```c
#include <reg52.h>
#include <stdio.h>
#define BAUDRATE 9600
#define FOSC 11059200UL
sbit LED = P1^0;
sbit SDA = P3^4;
sbit SCL = P3^5;
void delay(unsigned int t)
{
while(t--);
}
void init_serial()
{
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/BAUDRATE);
TR1 = 1;
SM0 = 0;
SM1 = 1;
EA = 1;
ES = 1;
}
void send_char(char c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
void send_string(char *s)
{
while(*s)
send_char(*s++);
}
void main()
{
char c;
init_serial();
while(1)
{
LED = 1;
send_string("Enter a character: ");
while(RI == 0);
c = SBUF;
RI = 0;
LED = 0;
delay(1000);
if(c >= '0' && c <= '9')
SDA = c - '0';
}
}
void serial_isr() interrupt 4
{
if(RI)
RI = 0;
}
```
从机代码:
```c
#include <reg52.h>
#include <stdio.h>
#define BAUDRATE 9600
#define FOSC 11059200UL
sbit LED = P1^0;
sbit SDA = P3^4;
sbit SCL = P3^5;
void delay(unsigned int t)
{
while(t--);
}
void init_serial()
{
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/BAUDRATE);
TR1 = 1;
SM0 = 0;
SM1 = 1;
EA = 1;
ES = 1;
}
void send_char(char c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
void send_string(char *s)
{
while(*s)
send_char(*s++);
}
void main()
{
char c;
init_serial();
while(1)
{
LED = 1;
send_string("Enter a character: ");
while(RI == 0);
c = SBUF;
RI = 0;
LED = 0;
delay(1000);
if(c >= '0' && c <= '9')
SDA = c - '0';
}
}
void serial_isr() interrupt 4
{
if(RI)
RI = 0;
}
```
在这个例子中,两个单片机通过串口通信进行数据交换。主机不断发送提示信息,等待从机发送数据。从机接收到主机的提示信息后,将用户输入的数字发送给主机。主机接收到从机发来的数据后,将其显示在数码管上。
需要注意的是,两个单片机的波特率和串口通信参数需要设置成相同的值。并且在主机和从机之间连接好串口通信的引脚(TXD、RXD)。
阅读全文