找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3344|回复: 3
收起左侧

单片机485全双工通信仿真+源程序案例

[复制链接]
ID:269536 发表于 2017-12-31 17:37 | 显示全部楼层 |阅读模式
485通讯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
QQ图片20171231173511.png QQ图片20171231173421.png

单片机源程序如下:
  1. #include <reg51.h>
  2. #include <absacc.h>
  3. #define TR 1
  4. #define uchar unsigned char
  5. #define uint  unsigned int

  6. uchar idata buf[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
  7. uchar idata buf1[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x09};
  8. uchar data1,data2,data3;
  9. uchar pf,addr,TRR;
  10. uchar flag,flag1,flag2=3;

  11. sbit key1=P1^0;
  12. sbit key2=P1^1;
  13. sbit key3=P2^0;
  14. /************延时程序************/
  15. void delay(uchar k)
  16.     {
  17.         uchar j;
  18.         while((k--)!=0)           
  19.                 {
  20.                 for(j=0;j<125;j++)
  21.                         {;}
  22.                 }
  23.     }

  24. void init(void)
  25. {
  26.     TMOD=0x20;
  27.     TH1=0xfd;
  28.     TL1=0xfd;
  29.     PCON=0x00;
  30.     TR1=1;
  31.     SCON=0xd0;
  32. }


  33. void keyscan(void)
  34. {
  35.    if(key1==0)
  36.     {
  37.       delay(50);
  38.         if(key1==0)
  39.           {
  40.             while(key1==0)
  41.               {
  42.                ;
  43.               }
  44.            flag2=0;
  45.            TRR=0x01;
  46.            addr=0x03;
  47.           }
  48.     }
  49.    if(key2==0)
  50.     {
  51.       delay(50);
  52.         if(key2==0)
  53.           {
  54.             while(key2==0)
  55.               {
  56.                ;
  57.               }
  58.            flag2=1;
  59.            TRR=0x01;
  60.            addr=0x04;
  61.          }
  62.     }
  63. }

  64. void send(void)
  65. { uchar i;

  66.   if(flag2==0)
  67.     {
  68.       TB8=1;
  69.       key3=1;
  70.       SBUF=addr;
  71.        while(TI==0)
  72.          {
  73.            ;
  74.          }
  75.        TI=0;
  76.        key3=0;
  77.       while(RI==0)
  78.        {
  79.         ;
  80.        }
  81.         data1=SBUF;
  82.         RI=0;
  83.        if(data1!=addr)
  84.          {
  85.           flag2=0;
  86.            
  87.          }
  88.      else{
  89.              TB8=0;
  90.              key3=1;
  91.              SBUF=TRR;
  92.              while(TI==0)
  93.              {
  94.                 ;
  95.              }
  96.              TI=0;
  97.              key3=0;
  98.              while(RI==0)
  99.              {
  100.                 ;
  101.              }
  102.              data3=SBUF;
  103.              RI=0;
  104.              if(data3!=TRR)
  105.                {
  106.                 flag2=0;
  107.                }
  108.              else{
  109.                      pf=0;
  110.                      key3=1;
  111.                     for(i=0;i<=9;i++)
  112.                       {
  113.                         TB8=0;
  114.                         SBUF=buf[i];
  115.                         pf+=buf[i];
  116.                         
  117.                         while(TI==0)
  118.                              {
  119.                                ;
  120.                              }
  121.                         TI=0;
  122.                        }
  123.                      TB8=0;
  124.                      SBUF=pf;
  125.                      while(TI==0)
  126.                             {
  127.                               ;
  128.                             }
  129.                      TI=0;
  130.                      key3=0;
  131.                      while(RI==0)
  132.                             {
  133.                               ;
  134.                             }
  135.                      data2=SBUF;
  136.                      RI=0;
  137.                      if(data2==0xcc)
  138.                           {
  139.                             flag2=3;
  140.                           }
  141.                      else{
  142.                             flag2=0;
  143.                          }
  144.                   }
  145.            }
  146.       }
  147. }


  148. void send1(void)
  149. { uchar i;
  150.   if(flag2==1)
  151.     {
  152.       TB8=1;
  153.       SBUF=addr;
  154.        while(TI==0)
  155.          {
  156.            ;
  157.          }
  158.        TI=0;
  159.       while(RI==0)
  160.        {
  161.         ;
  162.        }
  163.         data1=SBUF;
  164.         RI=0;
  165.        if(data1!=addr)
  166.          {
  167.           flag2=1;
  168.            
  169.          }
  170.        else{
  171.              TB8=0;
  172.              SBUF=TRR;
  173.              while(TI==0)
  174.              {
  175.                 ;
  176.              }
  177.              TI=0;
  178.              while(RI==0)
  179.              {
  180.                 ;
  181.              }
  182.              data3=SBUF;
  183.              RI=0;
  184.              if(data3!=TRR)
  185.                 {
  186.                  flag2=1;
  187.                 }
  188.             else
  189.                 {  
  190.                    pf=0;
  191.                    for(i=0;i<=9;i++)
  192.                       {  
  193.                         TB8=0;
  194.                         SBUF=buf1[i];
  195.                         pf+=buf1[i];
  196.                         while(TI==0)
  197.                              {
  198.                                ;
  199.                              }
  200.                         TI=0;
  201.                       }
  202.                     TB8=0;
  203.                     SBUF=pf;
  204.                     while(TI==0)
  205.                        {
  206.                         ;
  207.                        }
  208.                     TI=0;
  209.                     while(RI==0)
  210.                         {
  211. ……………………

  212. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
485全双工通信.zip (162.11 KB, 下载次数: 77)
回复

使用道具 举报

ID:157257 发表于 2018-4-30 15:45 | 显示全部楼层
谢谢分享啊~~~~~
回复

使用道具 举报

ID:325957 发表于 2018-5-9 15:36 来自手机 | 显示全部楼层
谢谢你的分享  但是我没钱  我很尴尬
回复

使用道具 举报

ID:331575 发表于 2018-5-26 20:11 | 显示全部楼层
之前一直都在写485的通讯代码,对比一下楼主的,看看能不能找出新思路
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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