标题:
51单片机实现串口通信(主单片机到从单片机发送LED流水灯)
[打印本页]
作者:
15113099078
时间:
2018-12-9 21:33
标题:
51单片机实现串口通信(主单片机到从单片机发送LED流水灯)
其实这是个51单片机串口通信的小例子,课堂上老师说你们可以去尝试弄一下,于是就去网上找一下资料,就做了这个实验。
1.jpg
(225.41 KB, 下载次数: 29)
下载附件
2021-10-12 04:54 上传
先把一个作为主机,用来发送数据;另一个作为从机,用来接收数据。将两个程序各自烧录到对应的板子上去,并将主机的TX(P3.0)接到从机的RX(P3.1),主机的RX(P3.1)接到从机的TX(P3.1),便可以实现将主机的数据发送到从机上去,并在从机上实现功能,这时可以看到从机上流水灯的现象
主机发送代码
#include<reg51.h>
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //流水灯控制码
void send(unsigned char dat) //数据发送程序
{
SBUF=dat; //将要发送的数据存入发送缓冲器中
while(TI==0); //若发送中断标志位没有置1(正在发送数据),就等待
TI=0; //若发送完成,TI自动置1,这里把它清零
}
void delay(void) //延时函数
{
unsigned char m,n;
for(m=0;m<200;m++) //延时约50ms
for(n=0;n<250;n++);
}
void main(void)
{
unsigned char i;
TMOD=0x20; //定时器T1工作于方式2(可自动重装的8位定时器)
SCON=0x40; //串口工作方式1,不允许接收
PCON=0x00; //波特率不倍增
TH1=0xf4; //波特率为2400b/s
TL1=0xf4;
TR1=1; //启动定时器T1(T1作波特率的发生器)
while(1)
{
for(i=0;i<8;i++) //一共8位的流水灯控制码
{
send(tab[i]); //发送数据
delay(); //每50ms发送一次数据
}
}
}
从机接收代码
#include<reg51.h>
unsigned char receive(void) //数据接收函数
{
unsigned char dat;
while(RI==0); //数据没有接收完毕时等待接收
RI=0; //接收完毕时清零
dat=SBUF; //将接收缓冲器中的数据存入dat
return dat; //将接收到的数据返回
}
void main(void)
{
TMOD=0x20; //设置定时器T1工作于方式2
SCON=0x50; //串口工作方式1,允许接收数据
PCON=0x00; //波特率不倍增
TH1=0xf4; //波特率为2400b/s
TL1=0xf4;
TR1=1; //启动定时器T1
REN=1; //允许接收数据
while(1)
{
P2=receive(); //将接收到的数据送到P1口显示
}
}
复制代码
作者:
持勤补拙
时间:
2020-3-2 14:15
谢谢楼主,学习了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1