找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9205|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机双机串口通信仿真 内含源码 仿真图

  [复制链接]
跳转到指定楼层
楼主

单片机源程序如下:
  1. /******************************************************************
  2. 功能:采用USART串口通信,波特率为9600,一个单片机发送数字
  3.           一个单片机接收,并把接收的数字用数码管显示。接收!!!
  4.          作者:cs天涯
  5. ******************************************************************/
  6. #include <reg51.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. bit flag;
  10. uchar num;
  11. void display(uchar num);
  12. void delay(uint z);
  13. void init();
  14. uchar code table[]=
  15. {
  16.   0x3f,0x06,0x5b,0x4f,
  17.   0x66,0x6d,0x7d,0x07,
  18.   0x7f,0x6f,0x77,0x7c,
  19.   0x39,0x5e,0x79,0x71};//编码0~9AbCdEF
  20. void main()
  21. {
  22.   init();
  23.   while(1)
  24.    {
  25.      while(flag)
  26.            {
  27.             display(num);
  28.             delay(5);
  29.            }
  30.    }
  31. }
  32. void init()
  33. {
  34.   PCON &= 0x7F;        //波特率不加倍
  35.   TMOD=0x20;   //定时器1工作方式2
  36.   TH1=0xfd;
  37.   TL1=0xfd;         //给定时器定初值,设置波特率为9600
  38.   TR1=1;    //开启定时器1工作
  39.   SCON=0x50;//0101 0000 允许串行口接收数据,设置串行口工作方式1
  40.   EA=1;
  41.   ES=1;          //打开串行口中断
  42.   ET1=0;  //禁止定时器1中断
  43.   }
  44. void display(uchar num)
  45. {
  46.   uchar shi,ge;
  47.   shi=num/10;                           //取十位
  48.   ge=num%10;                           //取个位

  49.   P0=table[shi];                        //送十位值
  50.   P2=0xbf;//1011 1111     //选择段选位置
  51.   delay(5);
  52.   P0=0;                                          //数码管消影
  53.   P2=0xff;

  54.   P0=table[ge];                                //送个位值
  55.   P2=0x7f;//0111 1111        //选择段选位置
  56.   delay(5);
  57.   P0=0;                                          //数码管消影
  58.   P2=0xff;
  59. }
  60. void delay(uint z)        //延时函数
  61. {
  62.   uint x,y;
  63.   for(x=z;x>0;x--)
  64.   for(y=110;y>0;y--);
  65. }
  66.   void receive() interrupt 4
  67. {
  68.   num=SBUF;
  69.   flag = 1;                                //接受一次后打开显示
  70.   ES = 0;                //关闭串行中断
  71.   RI = 0;                 //清除串行接受标志位
  72.   }
  73. 发送程序:
  74. #include <reg51.h>
  75. #define uchar unsigned char
  76. #define uint unsigned int
  77. uchar num;     //=2939可以不要
  78. void init();
  79. void delay(int z);
  80. void send(uchar num); //声明子函数的时候要加分号
  81. void main()
  82. {
  83.    init();            //调用子函数的时候要加分号
  84.   while(1)
  85.    {
  86.    send(39);        //发送函数
  87.    delay(10);       //发送后延时一下,保证发送频率不过快
  88.    }
  89. }

  90. void init()
  91. {
  92.   PCON&=0x7F;     //        设置波特率不加倍
  93.   TMOD=0x20;    //设置定时器1工作方式 2
  94.   TH1=0xfd;  
  95.   TL1=0xfd;           //设定定时器1工作方式2的初值   (关计算还没讲)  波特率为9600
  96.   TR1=1;       //开定时器1,开启波特率发生器
  97.   SM0=0;
  98.   SM1=1;    //设定串口通信工作方式1
  99.   EA=1;             //开总中断
  100.   }

  101. void delay(int z)        //晶振11.592.延时z毫秒
  102. {
  103.   uint x,y;
  104.   for(x=z;x>0;x--)
  105.   for(y=110;y>0;y--);
  106. }

  107. void send(uchar num)
  108. {
  109.   SBUF=num;      //把发送的内容写进sbuf,自动发送 ,发送数据时TI为0,!0为1
  110.   while(!TI);   //!逻辑非,发送完数据,发送完数据时TI为1.!1为0,停止发送
  111.   TI=0;             //TI需要软件清零
  112. }


复制代码

所有资料51hei提供下载:
单片机串口通信.zip (37.19 KB, 下载次数: 254)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:237239 发表于 2018-1-23 09:12 | 只看该作者
部分注释无关主题,如79行//=2939可以不要, 98行(关计算还没讲)
回复

使用道具 举报

板凳
ID:635436 发表于 2019-11-4 16:35 | 只看该作者
请问一下U3是什么芯片呢
回复

使用道具 举报

地板
ID:77126 发表于 2021-3-16 15:35 | 只看该作者
下来好好学习学习,谢谢分享!
回复

使用道具 举报

5#
ID:1081034 发表于 2023-6-1 13:57 | 只看该作者
电脑发送单片机接收显示可以实现吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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