51单片机的串口是全双工的,可以同时实现发送和接收。基于这个原理,做了一个数据同时发送和接收的小实验。?双机通信的protues图
代码如下,欢迎大家交流学习
#include<reg51.h>
#define uchar unsigned char
uchar send=0;
uchar receive=0;//设置接收和发送
void delay(unsigned int time )//延时
{
unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void UART()interrupt 4
{
if(RI) //如果接收到信号
{
RI = 0; //清除中断标志
receive = SBUF;
}
if(TI) //发送完信号,等待下次发送
{
TI = 0; //清除中断标志
}
}
void init()
{
SCON = 0x50; //串口工作在方式1
PCON = 0; //SMOD=0,波特率不加倍
TMOD = 0x20; //定时方式2,定时器1当做波特率发生器
TH1 = 0xFD; //初值, 9600 11.0592MHz
TL1 = 0xFD;
TR1 = 1; //启动T1
ES = 1; //开中断
EA = 1;
}
void main()
{
init();
while(1)
{
P0 = receive;//显示收到的数据
send = P1;
SBUF = send;//发送数据
delay(50);//延时0.5s
}
}
https://download.csdn.net/download/weixin_44620349/41974005
|