找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机双机通信(握手)PC与串口通信的几个proteus仿真及源程序

  [复制链接]
跳转到指定楼层
楼主
ID:137190 发表于 2016-10-10 13:42 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

仿真工程文件及所有完整程序等资料下载地址(压缩包一共有45个单片机仿真,全部下载后找到这个项目即可):
http://www.51hei.com/bbs/dpj-56298-1.html


程序说明:
  甲发送,乙接收 甲先发送AA给乙 ,乙接收AA后,向甲回答BB。甲收到BB后(甲乙两机握手)就把P1口的状态发送给乙机,之后向乙机发送结束符FF。乙收到FF后,根据甲机P1口的状态点亮LED。同时向甲机返回结束符FF,甲机收到结束符FF后停止发送。


甲机程序:
  1. /********************************************************************
  2.                             汇诚科技
  3. *********************************************************************/

  4. 程序说明:
  5.   甲发送,乙接收 甲先发送AA给乙 ,乙接收AA后,向甲回答BB。甲收到BB后(甲乙两机握手)就把P1口的状态发送给乙机,之后向乙机发送结束符FF。乙收到FF后,根据甲机P1口的状态点亮LED。同时向甲机返回结束符FF,甲机收到结束符FF后停止发送。
  6. *********************************************************************/
  7. #include<reg52.h>                 //库文件
  8. #define uchar unsigned char//宏定义无符号字符型
  9. #define uint unsigned int  //宏定义无符号整型
  10. /********************************************************************
  11.                             延时函数
  12. *********************************************************************/

  13. void delayms(uchar n)
  14. {
  15. uchar m,s;
  16. for(m=n;m>0;m--)
  17. for(n=20;n>0;n--)
  18. for(s=248;s>0;s--);
  19. }

  20. /********************************************************************
  21.                 功能:串口初始化,波特率9600,方式1
  22. *********************************************************************/

  23. void Init_Com(void)
  24. {
  25. TMOD = 0x20;
  26. PCON = 0x00;
  27. SCON = 0x50;
  28. TH1 = 0xFd;
  29. TL1 = 0xFd;
  30. TR1 = 1;
  31. }
  32. /********************************************************************
  33.                             主函数
  34. *********************************************************************/
  35. void main()
  36. {
  37. Init_Com();         //初始化
  38. delayms(40); //延时等待

  39. while(1)
  40.   {

  41.   do{
  42.      SBUF=0Xaa;          //发送AAH
  43.            while(!TI);
  44.          TI=0;
  45.          while(!RI);
  46.          RI=0;
  47.      }
  48.    
  49.         while((SBUF^0XBB)!=0);/*此句可以改为while(SBUF!=0XBB);*/ //等待接收乙发送的BBH
  50.                  
  51.    do{                           //发送P1口状态
  52.      SBUF=P1;
  53.            while(!TI);
  54.          TI=0;
  55.          SBUF=0XFF;
  56.          while(!TI);
  57.          TI=0;
  58.          while(!RI);
  59.          RI=0;
  60.      }
  61.     while((SBUF^0XFF)!=0);/*此句可以改为while(SBUF!=0XFF);*/
  62.   }
  63. }
  64.         
  65. /********************************************************************
  66.                               结束
  67. *********************************************************************/
复制代码

乙机程序:
  1. /********************************************************************
  2.                             天马电子
  3. *********************************************************************/
  4. /程序说明:
  5.   甲发送,乙接收 甲先发送AA给乙 ,乙接收AA后,向甲回答BB。甲收到BB后(甲乙两机握手)就把P1口的状态发送给乙机,之后向乙机发送结束符FF。乙收到FF后,根据甲机P2口的状态点亮LED。同时向甲机返回结束符FF,甲机收到结束符FF后停止发送。
  6. *********************************************************************/
  7. #include<reg52.h>                 //库文件
  8. #define uchar unsigned char//宏定义无符号字符型
  9. #define uint unsigned int  //宏定义无符号整型
  10. /********************************************************************
  11.                             延时函数
  12. *********************************************************************/

  13. void delayms(uchar n)
  14. {
  15. uchar m,s;
  16. for(m=n;m>0;m--)
  17. for(n=20;n>0;n--)
  18. for(s=248;s>0;s--);
  19. }

  20. /********************************************************************
  21.                 功能:串口初始化,波特率9600,方式1
  22. *********************************************************************/

  23. void Init_Com(void)
  24. {
  25. TMOD = 0x20;
  26. PCON = 0x00;
  27. SCON = 0x50;
  28. TH1 = 0xFd;
  29. TL1 = 0xFd;
  30. TR1 = 1;
  31. }
  32. /********************************************************************
  33.                             主函数
  34. *********************************************************************/
  35. void main()
  36. {
  37. Init_Com();         //初始化
  38. delayms(40); //延时等待

  39. while(1)
  40.   {

  41.   do{
  42.      while(!RI);//等待接收中断置位
  43.          RI=0;                //中断清零
  44.      }
  45.    
  46.         while((SBUF^0XAA)!=0);/*此句可以改为while(SBUF!=0XAA);*/ //等待接收甲发送的AAH

  47.         do{                          
  48.          SBUF=0XBB;        //向甲发送BBH
  49.            while(!TI);
  50.          TI=0;
  51.          while(!RI);
  52.          RI=0;
  53.          P2=SBUF;
  54.          while(!RI);
  55.          RI=0;
  56.      }
  57.     while((SBUF^0XFF)!=0);/*此句可以改为while(SBUF!=0XFF);*/
  58.                  
  59.      SBUF=0xFF;
  60.            while(!TI);
  61.          TI=0;
  62.          }
  63. }
  64.         
  65. /********************************************************************
  66.                               结束
  67. *********************************************************************/
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶1 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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