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

QQ登錄

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

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

單片機(jī)多機(jī)通信互傳數(shù)據(jù)仿真+代碼(1602顯示從機(jī)信息)

[復(fù)制鏈接]
ID:372961 發(fā)表于 2019-3-11 16:43 | 顯示全部樓層 |閱讀模式
功能說(shuō)明:主機(jī)功能:按下key1,從機(jī)1燈亮,lcd顯示從機(jī)1發(fā)送的數(shù)據(jù),按下key2,從機(jī)1燈。按下key3,從機(jī)2燈亮,lcd顯示從機(jī)2發(fā)送的數(shù)據(jù);按下key4,從機(jī)2燈滅,按下key5,從機(jī)1和從機(jī)2燈滅;按下key6,從機(jī)1和從機(jī)2燈滅;
proteus仿真圖:
多機(jī)通信數(shù)據(jù).png

主機(jī)部分單片機(jī)代碼:
  1. /*******************************************************************************
  2. *  標(biāo)題:                        多機(jī)通信                                       *
  3. *  時(shí)間                      2019年3月11日16:14:33                                                           *                                                                                                                                          
  4. *                                                                              *                                                                        
  5. *  實(shí)驗(yàn)說(shuō)明:主機(jī)功能:按下key1,從機(jī)1燈亮,lcd顯示從機(jī)1發(fā)送的數(shù)據(jù),按下key2,   *
  6. 從機(jī)1燈。按下key3,從機(jī)2燈亮,lcd顯示從機(jī)2發(fā)送的數(shù)據(jù);按下key4,從機(jī)2燈滅,按下*
  7. key5,從機(jī)1和從機(jī)2燈滅;按下key6,從機(jī)1和從機(jī)2燈滅;                           *                                                               
  8. ********************************************************************************
  9. * 實(shí)驗(yàn)心得:1.例如發(fā)送的字符串?dāng)?shù)組是buff[]={0x01,0x02,0x03},那么接收端前三位收到*
  10. 的數(shù)據(jù)就是0x01,0x02,0x03,之后也是有數(shù)據(jù)發(fā)送過(guò)來(lái),但是數(shù)據(jù)的值不是字符串賦的值  *
  11. 2.check=check^Buff[i];這句話的意思是check和buff的值進(jìn)行二進(jìn)制或與,相同為0,   *
  12. 不同為1,按這個(gè)進(jìn)行主機(jī)與從機(jī)數(shù)據(jù)的校驗(yàn)                                        *
  13. ********************************************************************************/
  14. #include<reg51.h>
  15. #include<string.h>
  16. #include "lcd.h"
  17. #define _SUCC_   0x0f//數(shù)據(jù)傳送成功
  18. #define _ERR_    0xf0//數(shù)據(jù)傳送失敗
  19. unsigned char aa=0xff;//主機(jī)與從機(jī)之間通信標(biāo)志
  20. unsigned char temp=0xff;
  21. unsigned char Buff[20];//數(shù)據(jù)緩沖區(qū)
  22. unsigned char recive[6];         //用于保存從機(jī)發(fā)送的數(shù)據(jù)
  23. sbit KEY1=P1^3;
  24. sbit KEY2=P1^2;
  25. sbit KEY3=P1^1;
  26. sbit KEY4=P1^0;
  27. sbit KEY5=P3^2;
  28. sbit KEY6=P3^3;

  29. //sbit KEY5=P1^4;
  30. //sbit KEY6=P1^5;
  31. //延時(shí)1ms函數(shù)
  32. void delay_1ms(unsigned int i)
  33. {
  34.      unsigned int x,y;
  35.      for(x=i;x>0;x--)
  36.          for(y=110;y>0;y--);
  37. }
  38. //串口初始化函數(shù)
  39. void init()
  40. {
  41.      TMOD=0x20; //定時(shí)器1工作于方式2
  42.      TH1=0xfd;  
  43.      TL1=0xfd; //波特率為9600
  44.      PCON=0;
  45.      SCON=0xd0;  //串口工作于方式3
  46.      TR1=1;  //開(kāi)啟定時(shí)器
  47.      TI=0;
  48.      RI=0;
  49. }


  50. //發(fā)送數(shù)據(jù)函數(shù)
  51. void SEND_data(unsigned char *Buff)
  52. {
  53.      unsigned char i,lenth,check;
  54.      lenth=strlen(Buff);      //計(jì)算數(shù)據(jù)長(zhǎng)度
  55.      check=lenth;
  56.      TI=0;         //發(fā)送數(shù)據(jù)長(zhǎng)度
  57.      TB8=0;       //發(fā)送數(shù)據(jù)幀
  58.      SBUF=lenth;
  59.      while(!TI);
  60.      TI=0;
  61.          
  62.      for(i=0;i<lenth;i++)  //發(fā)送數(shù)據(jù)
  63.     {
  64.         check=check^Buff[i];
  65.         TB8=0;
  66.         SBUF=Buff[i];      
  67.         while(!TI);
  68.         TI=0;
  69.     }
  70.       TB8=0;      //發(fā)送校驗(yàn)字節(jié)
  71.       SBUF=check;   
  72.       while(!TI);
  73.       TI=0;     
  74. }

  75. //接收數(shù)據(jù)函數(shù)
  76. unsigned char RECE_data(unsigned char *Buff)
  77. {
  78.      unsigned char i;
  79.      unsigned char lenth;
  80.      unsigned char check;
  81.      RI=0;     //接收數(shù)據(jù)長(zhǎng)度
  82.      while(!RI);
  83.      if(RB8==1)
  84.          {
  85.                  RI = 0;   
  86.              return 0xfe;  //若接收到地址幀,則返回0xfe
  87.          }
  88.      lenth=SBUF;
  89.      RI=0;     
  90.      check=lenth;
  91.      for(i=0;i<lenth;i++) //接收數(shù)據(jù)
  92.     {
  93.         while(!RI);
  94.         if(RB8==1)   //若接收到地址幀,則返回0xfe
  95.         return 0xfe;
  96.         Buff[i]=SBUF;   
  97.         check=check^(Buff[i]);
  98.         RI=0;
  99.     }
  100.      while(!RI);    //接收校驗(yàn)字節(jié)
  101.      if(RB8==1)    //若接收到地址幀,則返回0xfe
  102.      return 0xfe;
  103.      temp=SBUF;
  104.      RI=0;
  105.      check=temp^check;  //將從主機(jī)接收到的校驗(yàn)碼與自己計(jì)算的校驗(yàn)碼比對(duì)
  106.      if(check!=0)   //校驗(yàn)碼不一致,表明數(shù)據(jù)接收錯(cuò)誤,向主機(jī)發(fā)送錯(cuò)誤信號(hào),函數(shù)返回0xff
  107.      {
  108.         TI=0;
  109.         TB8=0;
  110.         SBUF=_ERR_;
  111.         while(!TI);
  112.         TI=0;
  113.         return 0xff;
  114.      }
  115.      TI=0;           //校驗(yàn)碼一致,表明數(shù)據(jù)接收正確,向主機(jī)發(fā)送成功信號(hào),函數(shù)返回0x00
  116.      TB8=0;
  117.      SBUF=_SUCC_;            
  118.      while(!TI);
  119.      TI=0;
  120.      return 0;
  121. }                                 

  122. //發(fā)送從機(jī)地址
  123. void ADDR_data(unsigned addr)
  124. {
  125. while(temp!=addr) //主機(jī)等待從機(jī)返回其地址作為應(yīng)答信號(hào)
  126. {
  127.   TI=0;    //發(fā)送從機(jī)地址
  128.   TB8=1;    //發(fā)送地址幀
  129.   SBUF=addr;
  130.   while(!TI);
  131.   TI=0;
  132.   
  133.   RI=0;
  134.   while(!RI);
  135.   temp=SBUF;
  136.   RI=0;
  137. }
  138. }

  139. void keyscan()
  140. {
  141.   
  142.   if(KEY1==0)
  143.   {
  144.      delay_1ms(5);
  145.      if(KEY1==0)
  146.     {
  147.       while(!KEY1);
  148.       ADDR_data(0x01);//發(fā)送從機(jī)地址
  149.       temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  150.       while(temp!=_SUCC_)
  151.       {
  152.           unsigned char Buff[]={0xfe};
  153.           SEND_data(Buff);//發(fā)送數(shù)據(jù)
  154.           RI=0;
  155.           while(!RI);
  156.           temp=SBUF;
  157.           RI=0;
  158.       }
  159.           SM2=0;       //接收數(shù)據(jù)幀
  160.       aa=0xff;    //從機(jī)接收數(shù)據(jù),并將數(shù)據(jù)保存到數(shù)據(jù)緩沖區(qū)
  161.       while(aa==0xff)
  162.       {
  163.           aa=RECE_data(Buff);
  164.                   P0 = 0xff;
  165.       }
  166.           P0 = 0xfe;
  167.       recive[0] = Buff[0];
  168.           recive[1] = Buff[1];
  169.           recive[2] = Buff[2];
  170.          
  171.     }
  172.   }

  173.   if(KEY2==0)
  174.   {
  175.      delay_1ms(5);
  176.      if(KEY2==0)
  177.      {
  178.         while(!KEY2);
  179.         ADDR_data(0x01);
  180.         temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  181.         while(temp!=_SUCC_)
  182.        {
  183.           unsigned char Buff[]={0xff};
  184.           SEND_data(Buff);
  185.           RI=0;
  186.           while(!RI);  
  187.           RI=0;
  188.                   temp=SBUF;
  189.        }
  190.      }
  191.   }

  192.   if(KEY3==0)
  193.   {
  194.      delay_1ms(5);
  195.      if(KEY3==0)
  196.      {
  197.          while(!KEY3);
  198.          ADDR_data(0x02);
  199.              temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  200.          while(temp!=_SUCC_)
  201.         {
  202.            unsigned char Buff[]={0xfe};
  203.            SEND_data(Buff);
  204.            RI=0;
  205.            while(!RI);
  206.            temp=SBUF;
  207.            RI=0;
  208.         }
  209.                 SM2=0;       //接收數(shù)據(jù)幀
  210.                 aa=0xff;    //從機(jī)接收數(shù)據(jù),并將數(shù)據(jù)保存到數(shù)據(jù)緩沖區(qū)
  211.                 while(aa==0xff)
  212.                 {
  213.                         aa=RECE_data(Buff);
  214.                         P0 = 0xff;
  215.                 }
  216.                 P0 = 0xfe;
  217.                 recive[3] = Buff[0];
  218.                 recive[4] = Buff[1];
  219.                 recive[5] = Buff[2];
  220.      }
  221.   }

  222.   if(KEY4==0)
  223.   {
  224.       delay_1ms(5);
  225.       if(KEY4==0)
  226.      {
  227.          while(!KEY4);
  228.          ADDR_data(0x02);
  229.               temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  230.          while(temp!=_SUCC_)
  231.         {
  232.              unsigned char Buff[]={0xff};
  233.              SEND_data(Buff);
  234.              RI=0;
  235.              while(!RI);
  236.              temp=SBUF;
  237.              RI=0;
  238.         }
  239.      }
  240.   }
  241.   if(KEY5==0)
  242.   {
  243.       delay_1ms(5);
  244.       if(KEY5==0)
  245.      {
  246.          while(!KEY5);
  247.          ADDR_data(0x01);
  248.               temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  249.          while(temp!=_SUCC_)
  250.         {
  251.              unsigned char Buff[]={0xff};
  252.              SEND_data(Buff);
  253.              RI=0;
  254.              while(!RI);
  255.              temp=SBUF;
  256.              RI=0;
  257.         }
  258.          ADDR_data(0x02);
  259.               temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  260.          while(temp!=_SUCC_)
  261.         {
  262.              unsigned char Buff[]={0xff};
  263.              SEND_data(Buff);
  264.              RI=0;
  265.              while(!RI);
  266.              temp=SBUF;
  267.              RI=0;
  268.         }
  269.      }
  270.   }
  271.   if(KEY6==0)
  272.   {
  273.       delay_1ms(5);
  274.       if(KEY6==0)
  275.      {
  276.          while(!KEY6);
  277.          ADDR_data(0x01);
  278.               temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  279.          while(temp!=_SUCC_)
  280.         {
  281.              unsigned char Buff[]={0xff};
  282.              SEND_data(Buff);
  283.              RI=0;
  284.              while(!RI);
  285.              temp=SBUF;
  286.              RI=0;
  287.         }
  288.          ADDR_data(0x02);
  289.               temp=_ERR_;   //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
  290.          while(temp!=_SUCC_)
  291.         {
  292.              unsigned char Buff[]={0xff};
  293.              SEND_data(Buff);
  294.              RI=0;
  295.              while(!RI);
  296.              temp=SBUF;
  297.              RI=0;
  298.         }
  299.      }
  300.   }

  301. }      
  302. void main()
  303. {
  304.      init();
  305.          LcdInit();                         //初始化LCD1602
  306.      LcdWriteCom(0x01);
  307.      while(1)
  308.      {
  309.         keyscan();
  310.                 LcdWriteData(recive[0]);
  311.             LcdWriteData(recive[1]);
  312.                 LcdWriteData(recive[2]);
  313.             LcdWriteData(recive[3]);
  314.                 LcdWriteData(recive[4]);
  315.             LcdWriteData(recive[5]);
  316.                 LcdWriteCom(0x80);
  317.      }
  318. }
復(fù)制代碼
從機(jī)1部分代碼:
  1. #include<reg51.h>
  2. #include<string.h>
  3. #define addr     0x01//從機(jī)1的地址
  4. #define _SUCC_   0x0f//數(shù)據(jù)傳送成功
  5. #define _ERR_    0xf0//數(shù)據(jù)傳送失敗
  6. unsigned char aa=0xff;//主機(jī)與從機(jī)之間通信標(biāo)志
  7. unsigned char Buff[20];//數(shù)據(jù)緩沖區(qū)
  8. unsigned char ceshi[] = {0x77,0x78,0x56};                //傳遞給主機(jī)的信息
  9. unsigned char tp;
  10. //串口初始化函數(shù)
  11. void init()
  12. {
  13.      TMOD=0x20; //定時(shí)器1工作于方式2
  14.      TH1=0xfd;  
  15.      TL1=0xfd; //波特率為9600
  16.      PCON=0;
  17.      SCON=0xd0;  //串口工作于方式3
  18.      TR1=1;  //開(kāi)啟定時(shí)器         
  19.      TI=0;
  20.      RI=0;
  21. }

  22. //發(fā)送數(shù)據(jù)函數(shù)
  23. void SEND_data(unsigned char *Buff)
  24. {
  25.      unsigned char i,lenth,check;
  26.      lenth=strlen(Buff);      //計(jì)算數(shù)據(jù)長(zhǎng)度
  27.      check=lenth;
  28.      TI=0;         //發(fā)送數(shù)據(jù)長(zhǎng)度
  29.      TB8=0;       //發(fā)送數(shù)據(jù)幀
  30.      SBUF=lenth;
  31.      while(!TI);
  32.      TI=0;
  33.          
  34.      for(i=0;i<lenth;i++)  //發(fā)送數(shù)據(jù)
  35.     {
  36.         check=check^Buff[i];
  37.         TB8=0;
  38.         SBUF=Buff[i];      
  39.         while(!TI);
  40.         TI=0;
  41.     }
  42.       TB8=0;      //發(fā)送校驗(yàn)字節(jié)
  43.       SBUF=check;   
  44.       while(!TI);
  45.       TI=0;     
  46. }

  47. //接收數(shù)據(jù)函數(shù)
  48. unsigned char RECE_data(unsigned char *Buff)
  49. {
  50.      unsigned char i,temp;
  51.      unsigned char lenth;
  52.      unsigned char check;
  53.      RI=0;     //接收數(shù)據(jù)長(zhǎng)度
  54.      while(!RI);
  55.      if(RB8==1)
  56.          {
  57.                  RI = 0;   
  58.              return 0xfe;  //若接收到地址幀,則返回0xfe
  59.          }
  60.      lenth=SBUF;
  61.      RI=0;     
  62.      check=lenth;
  63.      for(i=0;i<lenth;i++) //接收數(shù)據(jù)
  64.     {
  65.         while(!RI);
  66.         if(RB8==1)   //若接收到地址幀,則返回0xfe
  67.         return 0xfe;
  68.         Buff[i]=SBUF;   
  69.         check=check^(Buff[i]);
  70.         RI=0;
  71.     }
  72.      while(!RI);    //接收校驗(yàn)字節(jié)
  73.      if(RB8==1)    //若接收到地址幀,則返回0xfe
  74.      return 0xfe;
  75.      temp=SBUF;
  76.      RI=0;
  77.      check=temp^check;  //將從主機(jī)接收到的校驗(yàn)碼與自己計(jì)算的校驗(yàn)碼比對(duì)
  78.      if(check!=0)   //校驗(yàn)碼不一致,表明數(shù)據(jù)接收錯(cuò)誤,向主機(jī)發(fā)送錯(cuò)誤信號(hào),函數(shù)返回0xff
  79.      {
  80.         TI=0;
  81.         TB8=0;
  82.         SBUF=_ERR_;
  83.         while(!TI);
  84.         TI=0;
  85.         return 0xff;
  86.      }
  87.      TI=0;           //校驗(yàn)碼一致,表明數(shù)據(jù)接收正確,向主機(jī)發(fā)送成功信號(hào),函數(shù)返回0x00
  88.      TB8=0;
  89.      SBUF=_SUCC_;            
  90.      while(!TI);
  91.      TI=0;
  92.      return 0;
  93. }                                 
  94. void main()
  95. {
  96.     init();
  97.     while(1)
  98.    {
  99.        SM2=1;              //處于接收地址幀狀態(tài)
  100.        while(aa!=addr)  //從機(jī)等待主機(jī)請(qǐng)求自己的地址
  101.       {
  102.            RI=0;
  103.            while(!RI);
  104.            aa=SBUF;
  105.            RI=0;
  106.       }
  107.       TI=0;     //一旦被請(qǐng)求,從機(jī)返回自己的地址作為應(yīng)答,等待接收數(shù)據(jù)
  108.       TB8=0;
  109.       SBUF=addr;
  110.       while(!TI);
  111.       TI=0;
  112.       SM2=0;       //接收數(shù)據(jù)幀
  113.       aa=0xff;    //從機(jī)接收數(shù)據(jù),并將數(shù)據(jù)保存到數(shù)據(jù)緩沖區(qū)
  114.       while(aa==0xff)
  115.       {
  116.           aa=RECE_data(Buff);
  117.       }
  118.       if(aa==0xfe)
  119.          continue;
  120.       P2=Buff[0];      //查看接收到的數(shù)據(jù)
  121.           tp = _ERR_;
  122.           if(Buff[0] == 0xfe)
  123.           {
  124.                   while(tp!=_SUCC_)
  125.                   {
  126.                           SEND_data(ceshi);
  127.                         RI=0;
  128.                         while(!RI);  
  129.                         RI=0;
  130.                         tp=SBUF;
  131.                   }
  132.           }
  133.    }
  134. }
復(fù)制代碼

從機(jī)2部分代碼:
  1. #include<reg51.h>
  2. #include<string.h>
  3. #define addr     0x02//從機(jī)2的地址
  4. #define _SUCC_   0x0f//數(shù)據(jù)傳送成功
  5. #define _ERR_    0xf0//數(shù)據(jù)傳送失敗
  6. unsigned char aa=0xff;//主機(jī)與從機(jī)之間通信標(biāo)志
  7. unsigned char ceshi[] = {0x6b,0x6c,0x2b};
  8. unsigned char tp;
  9. unsigned char Buff[20];//數(shù)據(jù)緩沖區(qū)
  10. //串口初始化函數(shù)
  11. void init()
  12. {
  13.      TMOD=0x20; //定時(shí)器1工作于方式2
  14.      TH1=0xfd;  
  15.      TL1=0xfd; //波特率為9600
  16.      PCON=0;
  17.      SCON=0xd0;  //串口工作于方式3
  18.      TR1=1;  //開(kāi)啟定時(shí)器
  19.      TI=0;
  20.      RI=0;
  21. }

  22. //發(fā)送數(shù)據(jù)函數(shù)
  23. void SEND_data(unsigned char *Buff)
  24. {
  25.      unsigned char i,lenth,check;
  26.      lenth=strlen(Buff);      //計(jì)算數(shù)據(jù)長(zhǎng)度
  27.      check=lenth;
  28.      TI=0;         //發(fā)送數(shù)據(jù)長(zhǎng)度
  29.      TB8=0;       //發(fā)送數(shù)據(jù)幀
  30.      SBUF=lenth;
  31.      while(!TI);
  32.      TI=0;
  33.          
  34.      for(i=0;i<lenth;i++)  //發(fā)送數(shù)據(jù)
  35.     {
  36.         check=check^Buff[i];
  37.         TB8=0;
  38.         SBUF=Buff[i];      
  39.         while(!TI);
  40.         TI=0;
  41.     }
  42.       TB8=0;      //發(fā)送校驗(yàn)字節(jié)
  43.       SBUF=check;   
  44.       while(!TI);
  45.       TI=0;     
  46. }

  47. //接收數(shù)據(jù)函數(shù)
  48. unsigned char RECE_data(unsigned char *Buff)
  49. {
  50.      unsigned char i,temp;
  51.      unsigned char lenth;
  52.      unsigned char check;
  53.      RI=0;     //接收數(shù)據(jù)長(zhǎng)度
  54.      while(!RI);
  55.      if(RB8==1)    //若接收到地址幀,則返回0xfe
  56.      return 0xfe;
  57.      lenth=SBUF;
  58.      RI=0;     
  59.      check=lenth;
  60.      for(i=0;i<lenth;i++) //接收數(shù)據(jù)
  61.     {
  62.         while(!RI);
  63.         if(RB8==1)   //若接收到地址幀,則返回0xfe
  64.         return 0xfe;
  65.         Buff[i]=SBUF;   
  66.         check=check^(Buff[i]);
  67.         RI=0;
  68.     }
  69.      while(!RI);    //接收校驗(yàn)字節(jié)
  70.      if(RB8==1)    //若接收到地址幀,則返回0xfe
  71.      return 0xfe;
  72.      temp=SBUF;
  73.      RI=0;
  74.      check=temp^check;  //將從主機(jī)接收到的校驗(yàn)碼與自己計(jì)算的校驗(yàn)碼比對(duì)
  75.      if(check!=0)   //校驗(yàn)碼不一致,表明數(shù)據(jù)接收錯(cuò)誤,向主機(jī)發(fā)送錯(cuò)誤信號(hào),函數(shù)返回0xff
  76.      {
  77.         TI=0;
  78.         TB8=0;
  79.         SBUF=_ERR_;
  80.         while(!TI);
  81.         TI=0;
  82.         return 0xff;
  83.      }
  84.      TI=0;           //校驗(yàn)碼一致,表明數(shù)據(jù)接收正確,向主機(jī)發(fā)送成功信號(hào),函數(shù)返回0x00
  85.      TB8=0;
  86.      SBUF=_SUCC_;
  87.      while(!TI);
  88.      TI=0;
  89.      return 0;
  90. }
  91. void main()
  92. {
  93.     init();
  94.     while(1)
  95.    {
  96.        SM2=1;              //接收地址幀
  97.        while(aa!=addr)  //從機(jī)等待主機(jī)請(qǐng)求自己的地址
  98.       {
  99.            RI=0;
  100.            while(!RI);
  101.            aa=SBUF;
  102.            RI=0;
  103.       }
  104.       TI=0;     //一旦被請(qǐng)求,從機(jī)返回自己的地址作為應(yīng)答,等待接收數(shù)據(jù)
  105.       TB8=0;
  106.       SBUF=addr;
  107.       while(!TI);
  108.       TI=0;
  109.       SM2=0;                  //接收數(shù)據(jù)幀
  110.       aa=0xff;    //從機(jī)接收數(shù)據(jù),并將數(shù)據(jù)保存到數(shù)據(jù)緩沖區(qū)
  111.       while(aa==0xff)
  112.       {
  113.           aa=RECE_data(Buff);
  114.       }
  115.       if(aa==0xfe)
  116.          continue;
  117.       P2=Buff[0];      //查看接收到的數(shù)據(jù)
  118.           tp = _ERR_;
  119.           if(Buff[0] == 0xfe)
  120.           {
  121.                   while(tp!=_SUCC_)
  122.                   {
  123.                           SEND_data(ceshi);
  124.                         RI=0;
  125.                         while(!RI);  
  126.                         RI=0;
  127.                         tp=SBUF;
  128.                   }
  129.           }
  130.    }
  131. }
復(fù)制代碼

全套代碼可以下載附件
0.png

注意這個(gè)仿真只能用Proteus7.8版本打開(kāi),經(jīng)過(guò)測(cè)試其他版本均無(wú)反應(yīng):
多機(jī)通信-1602顯示從機(jī)信息.zip (194.84 KB, 下載次數(shù): 137)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:509233 發(fā)表于 2019-4-27 17:14 | 顯示全部樓層
請(qǐng)問(wèn)下如果我不進(jìn)行校驗(yàn)的話代碼可以怎么改?比如說(shuō)我只接受兩個(gè)從機(jī)的八位數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

ID:289218 發(fā)表于 2023-1-24 16:23 | 顯示全部樓層
反饋:8.13版本運(yùn)行,按下任何按鈕均無(wú)反應(yīng)。
回復(fù)

使用道具 舉報(bào)

ID:717459 發(fā)表于 2023-5-8 15:49 | 顯示全部樓層
效果不行
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表