久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3705|回復(fù): 0
收起左側(cè)

單片機(jī)485全雙工通信仿真 單數(shù)據(jù)通信 多數(shù)據(jù)通信 自動(dòng)收發(fā)通信

[復(fù)制鏈接]
ID:137190 發(fā)表于 2016-10-8 23:41 | 顯示全部樓層 |閱讀模式
單片機(jī)用485總線進(jìn)行通信是考勤系統(tǒng)等常用的,下面給大家分享幾個(gè)例子,都帶有proteus仿真,有485單數(shù)據(jù)通信 485多數(shù)據(jù)通信 485自動(dòng)收發(fā)通信仿真下面是仿真原理圖:
0.png 0.png
仿真工程文件及所有完整程序等資料下載地址:
http://m.zg4o1577.cn/bbs/dpj-56304-1.html

485自動(dòng)收發(fā)單片機(jī)源程序:
  1. #include <reg51.h>
  2. #include <absacc.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. uchar idata buf[10];                      //接受收據(jù)
  6. uchar idata buf1[3]={0x06,0x09,0x05};     //從機(jī)發(fā)送的數(shù)據(jù)
  7. uchar data1,data2,data3;
  8. uchar pf,i;
  9. uchar flag,flag2;

  10. sbit key1=P2^0;

  11. /************延時(shí)程序************/
  12. void delay(uchar k)
  13.     {
  14.         uchar j;
  15.         while((k--)!=0)           
  16.                 {
  17.                 for(j=0;j<125;j++)
  18.                         {;}
  19.                 }
  20.     }

  21. void init(void)
  22. {
  23.     TMOD=0x20;
  24.     TH1=0xfd;
  25.     TL1=0xfd;
  26.     PCON=0x00;
  27.     TR1=1;
  28.     SCON=0Xd0;
  29. }

  30. void receive(void)
  31. {  
  32.      SM2=1;                         //SM2=1,從機(jī)只處于接受地址狀態(tài)
  33.      key1=0;
  34.      while(RI==0)
  35.           {
  36.             ;
  37.           }
  38.         data1=SBUF;               //接受地址與本機(jī)的地址比較
  39.         RI=0;               
  40.        if(data1!=0x04)
  41.          {  
  42.          flag2=3;                  //不是本機(jī)的地址
  43.          }
  44.     else {                         //地址正確
  45.               key1=1;
  46.               flag2=2;
  47.               TB8=1;                //TB8=1是從機(jī)發(fā)送地址標(biāo)志
  48.               SM2=0;                //SM2=2是允許任何發(fā)送和接受數(shù)據(jù)
  49.               SBUF=0x04;             //從機(jī)發(fā)送標(biāo)志
  50.               while(TI==0)
  51.                    {
  52.                      ;
  53.                    }
  54.               TI=0;
  55.               pf=0;
  56.               TB8=0;                 //TB8=0是從機(jī)以下通信的全是數(shù)據(jù)
  57.               key1=0;
  58.               while(RI==0)
  59.                     {
  60.                       ;
  61.                     }
  62.               data3=SBUF;             //從機(jī)接受主機(jī)狀態(tài)
  63.               RI=0;
  64.               key1=1;
  65.              if(data3==0x02)           //11111主機(jī)是接受狀態(tài)
  66.                    { TB8=0;
  67.                     
  68.                      SBUF=0x02;        //從機(jī)發(fā)送本機(jī)的狀態(tài)
  69.                      while(TI==0)
  70.                        {
  71.                          ;
  72.                        }
  73.                      TI=0;
  74.                      for(i=0;i<=2;i++)            //從機(jī)發(fā)送數(shù)據(jù)
  75.                           {  SBUF=buf1[i];
  76.                              pf+=buf1[i];
  77.                              while(TI==0)
  78.                                   {
  79.                                     ;
  80.                                   }
  81.                              TI=0;
  82.                            }
  83.                       SBUF=pf;                 //從機(jī)發(fā)送效驗(yàn)和
  84.                       while(TI==0)
  85.                             {
  86.                               ;
  87.                             }
  88.                       TI=0;
  89.                   }
  90.             
  91.                if(data3==0x01)                  //22222主機(jī)是發(fā)送狀態(tài)
  92.                    {  TB8=0;
  93.                       key1=1;
  94.                       SBUF=0x01;                //從機(jī)發(fā)送本機(jī)的狀態(tài)
  95.                       while(TI==0)
  96.                        {
  97.                          ;
  98.                        }
  99.                      TI=0;
  100.                      key1=0;
  101.                      for(i=0;i<=9;i++)
  102.                         {                           //從機(jī)接受主機(jī)的數(shù)據(jù)
  103.                          while(RI==0)
  104.                               {
  105.                                ;
  106.                               }
  107.                          buf[i]=SBUF;
  108.                          pf+=buf[i];
  109.                          RI=0;
  110.                         }
  111.                      while(RI==0)
  112.                             {
  113.                                ;                   //從機(jī)接受效驗(yàn)和
  114.                             }
  115.                      data2=SBUF;                  
  116.                      RI=0;
  117.                      key1=1;
  118.                      if(data2==pf)                //從機(jī)接受的效驗(yàn)和與本機(jī)的效驗(yàn)和比較
  119.                          {                //效驗(yàn)正確
  120.                             TB8=0;
  121.                             SBUF=0xcc;            //發(fā)送正確的標(biāo)志
  122.                             while(TI==0)  
  123.                                  {
  124.                                    ;
  125.                                  }
  126.                             TI=0;
  127.                          }
  128.                   else{  
  129.                          TB8=0;                    //效驗(yàn)錯(cuò)誤
  130.                          SBUF=0xdd;         //發(fā)送錯(cuò)誤標(biāo)志,請(qǐng)求主機(jī)重新發(fā)送數(shù)據(jù)
  131.                          while(TI==0)
  132.                                {
  133.                                   ;
  134.                                 }
  135.                           TI=0;
  136.                        }
  137.                 }
  138.              else                           //主機(jī)狀態(tài)錯(cuò)誤
  139.                    {  key1=1;
  140.                       flag2=3;
  141.                       SBUF=0xac;             //發(fā)送錯(cuò)誤標(biāo)志
  142.                       while(TI==0)
  143.                         {
  144.                          ;
  145.                         }
  146.                        TI=0;
  147.                     }
  148.        }
  149. }

  150. void display(void)
  151. { if(flag2==2)                   //從機(jī)顯示標(biāo)志
  152.     {
  153.          for(i=0;i<=9;i++)
  154.             {
  155.               P1=buf[i];
  156.               delay(50);
  157.              }
  158.      }
  159. }


  160. void main(void)
  161. {
  162.     delay(500);
  163.     init();
  164.     while(1)
  165.     {  
  166.       receive();                //從機(jī)通信子程序
  167.       display();                //從機(jī)顯示子程序
  168.     }
  169. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区中文字幕 | 日韩午夜在线观看 | 欧美久久久久久久 | 国产精品黄 | 色一区二区三区 | 黄色成人在线视频 | 亚洲色在线视频 | 在线播放日韩 | 国产色在线 | av不卡在线播放 | 久久精品视频国产 | 三级在线播放 | 日本特级黄色片 | 亚洲专区在线 | 欧美一级特黄视频 | 六月婷婷在线 | av色婷婷| 久久在线播放 | 自拍偷拍av | 亚洲精品午夜精品 | 午夜色婷婷 | 久久视频免费看 | 国产成人免费在线 | 中文字幕免费在线看线人动作大片 | 国产精品福利一区 | 中文字幕国产一区 | 伊人成人在线视频 | 日韩一区二区三 | 五月婷婷网 | 欧美精品二区三区四区免费看视频 | 欧美日韩在线一区二区 | 久久99精品久久久久久 | 国产成人免费观看 | 亚洲怡春院 | 毛片在线免费播放 | 日本中文字幕一区 | 在线免费国产 | 青青操国产 | 手机福利视频 | 精品国产区 | 激情小说图片视频 |