找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2852|回复: 2
收起左侧

51单片机实现串口通信(主单片机到从单片机发送LED流水灯)

[复制链接]
ID:407545 发表于 2018-12-9 21:33 | 显示全部楼层 |阅读模式
其实这是个51单片机串口通信的小例子,课堂上老师说你们可以去尝试弄一下,于是就去网上找一下资料,就做了这个实验。
1.jpg
先把一个作为主机,用来发送数据;另一个作为从机,用来接收数据。将两个程序各自烧录到对应的板子上去,并将主机的TX(P3.0)接到从机的RX(P3.1),主机的RX(P3.1)接到从机的TX(P3.1),便可以实现将主机的数据发送到从机上去,并在从机上实现功能,这时可以看到从机上流水灯的现象
主机发送代码
  1. #include<reg51.h>
  2. unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};           //流水灯控制码
  3. void send(unsigned char dat)            //数据发送程序
  4. {
  5.            SBUF=dat;                           //将要发送的数据存入发送缓冲器中
  6.         while(TI==0);                       //若发送中断标志位没有置1(正在发送数据),就等待
  7.         TI=0;                               //若发送完成,TI自动置1,这里把它清零
  8. }
  9. void delay(void)                        //延时函数
  10. {
  11.         unsigned char m,n;
  12.         for(m=0;m<200;m++)                  //延时约50ms
  13.         for(n=0;n<250;n++);
  14. }
  15. void main(void)
  16. {
  17.         unsigned char i;
  18.         TMOD=0x20;                         //定时器T1工作于方式2(可自动重装的8位定时器)
  19.         SCON=0x40;                         //串口工作方式1,不允许接收
  20.         PCON=0x00;                         //波特率不倍增
  21.         TH1=0xf4;                          //波特率为2400b/s
  22.         TL1=0xf4;
  23.         TR1=1;                             //启动定时器T1(T1作波特率的发生器)
  24.         while(1)
  25.         {
  26.                 for(i=0;i<8;i++)               //一共8位的流水灯控制码
  27.                 {
  28.                         send(tab[i]);              //发送数据
  29.                         delay();                   //每50ms发送一次数据
  30.                 }
  31.         }
  32. }

  33. 从机接收代码

  34. #include<reg51.h>
  35. unsigned char receive(void)         //数据接收函数
  36. {
  37.         unsigned char dat;
  38.         
  39.         while(RI==0);                   //数据没有接收完毕时等待接收
  40.         RI=0;                           //接收完毕时清零
  41.         dat=SBUF;                       //将接收缓冲器中的数据存入dat
  42.         return dat;                     //将接收到的数据返回
  43. }
  44. void main(void)
  45. {
  46.         TMOD=0x20;                     //设置定时器T1工作于方式2
  47.         SCON=0x50;                     //串口工作方式1,允许接收数据
  48.         PCON=0x00;                     //波特率不倍增
  49.         TH1=0xf4;                      //波特率为2400b/s
  50.         TL1=0xf4;
  51.         TR1=1;                         //启动定时器T1
  52.         REN=1;                         //允许接收数据
  53.         while(1)
  54.         {
  55.                 P2=receive();              //将接收到的数据送到P1口显示        
  56.         }
  57. }
复制代码


回复

使用道具 举报

ID:130345 发表于 2020-3-2 14:15 | 显示全部楼层
谢谢楼主,学习了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表