找回密码
 立即注册

QQ登录

只需一步,快速开始

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

两个单片机之间进行串口通信程序与Proteus仿真

[复制链接]
跳转到指定楼层
楼主
1、在发送端proteus图纸中,  按下按键K1和K2,可以改变要发送的数据num(数值范围0~9),按下K3通过串口发送num数据到接收端。

接收端能够接受数据,并在数码管上显示接受的数字。

2、接收端也可以进行数据的发送,也可以发送数据到发送端,同时发送端也能显示接收到的数据。


单片机源程序如下:

  1. /*
  2.                 串口发送与接受一体的控制代码
  3. */
  4. #include <REGX51.H>
  5. #include <intrins.h>

  6. //共阳0-F dp-a
  7. unsigned char code tab[16]=
  8. {0xc0,0xf9,0xa4,0xb0,
  9. 0x99,0x92,0x82,0xf8,
  10. 0x80,0x90,0x88,0x83,
  11. 0xc6,0xa1,0x86,0x8e};

  12. #define uchar unsigned char
  13. sbit K1=P1^0;//ADD  递增
  14. sbit K2=P1^1;//DEC  递减
  15. sbit K3=P1^2;//DEC  递减



  16. void UartInit(void)                //9600bps@11.0592MHz
  17. {
  18.         PCON &= 0x7F;                //波特率不倍速
  19.         SCON = 0x50;                //8位数据,可变波特率
  20.         TMOD = 0x20;                //设定定时器1为8位自动重装方式
  21.         TL1 = 0xFD;                //设定定时初值
  22.         TH1 = 0xFD;                //设定定时器重装值
  23.         ET1 = 0;                //禁止定时器1中断
  24.         TR1 = 1;                //启动定时器1
  25.         ES=1;//开串口中断
  26.         EA=1;//开总中断
  27. }

  28. char putchar (uchar ch)//向串口发送数据
  29. {
  30.          SBUF=ch;
  31.          while(!TI);//查询发生是否完毕
  32.          TI=0;//发送完毕,TI由软件清零
  33.         return ch;
  34. }

  35. /********************************************************

  36. 函数功能: 延时c  ms
  37. 参    数:  c
  38. 返回  值: 无
  39. *********************************************************/

  40. void delayms( unsigned int ms)                //@11.0592MHz
  41. {
  42.          unsigned char i, j;
  43.         for(;ms>0;ms--)
  44.                 {
  45.                                 _nop_();
  46.                                 i = 2;
  47.                                 j = 199;
  48.                                 do
  49.                                 {
  50.                                         while (--j);
  51.                                 } while (--i);
  52.                 }
  53. }

  54. uchar Receive_nums=0;//接收到的  字符
  55. void Uart1() interrupt 4
  56. {        
  57.     if (RI)
  58.    {
  59.                         RI=0;        //清除RI位
  60.                         Receive_nums=SBUF;        
  61.                  
  62.    }
  63. }

  64. void main(void)
  65. {
  66.         uchar Transmit_nums=0;//发送给乙机的数字
  67.         UartInit();
  68.         
  69.         while(1)
  70.         {
  71.                 P0=~tab[Receive_nums];//在数码管上显示数字
  72.                 if(K1==0)//递增按键
  73.                 {
  74.                         delayms(10);//消抖
  75.                          if(K1==0)
  76.                          {
  77.                                 Transmit_nums++;
  78.                                  if(Transmit_nums>9)
  79.                                          Transmit_nums=9;
  80.                          }
  81.                          while(K1==0);//等待按键K1松开
  82.                 }
  83.                
  84.                 if(K2==0)//递减按键
  85.                 {
  86.                         delayms(10);//消抖
  87.                          if(K2==0)
  88.                          {
  89.                                 Transmit_nums--;
  90.                                  if(Transmit_nums<1)
  91.                                          Transmit_nums=0;         
  92.                          }
  93.                  while(K2==0);//等待按键K2松开
  94.                 }
  95.                
  96.                 if(K3==0)//发送按键
  97.                 {
  98.                         delayms(10);//消抖
  99.                          if(K3==0)
  100.                          {
  101.                                 putchar(Transmit_nums);
  102.                          }
  103.                          while(K3==0);//等待按键K3松开
  104.                 }
  105.         }
  106. }
复制代码
注意需要配合vspd软件是用,百度即可获取
http://www.51hei.com/bbs/dpj-108037-1.html

Keil代码下载与Proteus仿真下载:
05_双机通信.7z (63.03 KB, 下载次数: 70)



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:710460 发表于 2021-12-4 23:15 | 只看该作者
VSPD是为windows系统添加虚拟串口的软件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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