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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3070|回復: 11
打印 上一主題 下一主題
收起左側

51單片機進行一個主機對對多個從機廣播

[復制鏈接]
跳轉到指定樓層
樓主
ID:646224 發表于 2019-11-21 01:00 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
現在采用的是stc12c5a60s2的單片機作為主機,其余六塊作為從機! 主機以廣播的方式發送數組數據,其中包括幀頭+地址+命令+幀尾共四個字節,而且是不斷發送! 在串口助手上可以看到對應的輸出。
  問題來了,我現在從機需要接受數據并且用接受到的地址與自身比對,成功就執行接受到的數組數據的第三位命令位對應的命令。 這個就是沒有成功。不知道壇友們有沒好的方法?

急用,求大佬指點
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:25310 發表于 2019-11-21 08:07 | 只看該作者
從機接收端要識別接收,比如一幀數據為:55 01 02 aa ,  55 和AA是頭尾,串口接收時叢55開始才放到數組第一個位置,依次接收到最后AA就是一幀數據。開始不是55 的直接退出不接收這樣就避免收到錯誤的數據。
回復

使用道具 舉報

板凳
ID:138097 發表于 2019-11-21 08:14 | 只看該作者
看上去理論是沒有問題的,不過實際操作會不會哪步出現問題,排查一下啊,從機仿真看一下接收到沒有
回復

使用道具 舉報

地板
ID:306810 發表于 2019-11-21 08:42 | 只看該作者
主機發送成功了?在串口助手上能夠監控到數據了?以上都成功了,那么從機有成功收到數據么?如果有,那么就是你的程序處理報文的問題了。
回復

使用道具 舉報

5#
ID:470332 發表于 2019-11-21 08:59 | 只看該作者
1、首先,你試試一對一通信能不能正確接收
2、如果只接收理論上是可以的
3、如果從機還需要發送,如果直接把TX RX并在了主機上,這樣應該不行,你從機的TX不能接在一起
回復

使用道具 舉報

6#
ID:617449 發表于 2019-11-21 09:58 | 只看該作者
1、多機通訊采用 RS485 方式
2、先把一對一的調試好
3、在擴展到6個分機
4、給你看一個 20 點485通訊的
http://www.zg4o1577.cn/bbs/dpj-170710-1.html
回復

使用道具 舉報

7#
ID:646224 發表于 2019-11-21 13:20 | 只看該作者
pcbboy 發表于 2019-11-21 08:07
從機接收端要識別接收,比如一幀數據為:55 01 02 aa ,  55 和AA是頭尾,串口接收時叢55開始才放到數組第一 ...
  1. uchar add=0;
  2. uchar dis[]={0xAA,addr1,0x01,0xFF};

  3. /*****主程序*****/
  4. void main()
  5. {
  6.                         int i;
  7.       Uart_Init();
  8.            while(1)
  9.                         {
  10.                                 for(i=0;i<4;i++)
  11.                                 {
  12.                                         SBUF=dis[i];
  13.                                         while(!TI); //等特數據傳送
  14.                                         TI=0; //清除數據傳送標志

  15.                                 } delayms(500);
  16.                         }
  17. }


  18. //從機
  19. void main()
  20. {
  21.           int tem;
  22.     uchar Data[4],t;
  23.     Uart_Init();
  24. while(1)
  25. {
  26.         //在串口助手檢測程序有沒運行
  27.         tem++;        
  28.         if(tem%10000==0) {
  29.                          SBUF = 0X00;
  30.     while(!TI);//當寫下這句的時候,就不要在中斷函數里面在寫TI = 0;這句了,不然進入中斷函數將TI清零之后,程序就會一直卡在這里
  31.     TI = 0;       //在這里將TI清零
  32.    SM2=0;  
  33.         }                    
  34.         //接收數據
  35.         for(t=0;t<4;t++)
  36.         {
  37.                 Data[t]=SBUF;
  38.                 while(!RI);
  39.                 RI=0;
  40.                 if(SBUF==0XFF) {
  41.                         SM2=1;
  42.                         t=0;
  43.                 }
  44.                         }
  45.         if(Data[0]==0xAA)
  46.         {
  47.          SBUF = 0X11;
  48.     while(!TI);//當寫下這句的時候,就不要在中斷函數里面在寫TI = 0;這句了,不然進入中斷函數將TI清零之后,程序就會一直卡在這里
  49.     TI = 0;       //在這里將TI清零
  50.         }

  51. }
復制代碼
回復

使用道具 舉報

8#
ID:646224 發表于 2019-11-21 13:21 | 只看該作者
//從機 void main() {           int tem;     uchar Data[4],t;     Uart_Init(); while(1) {         //在串口助手檢測程序有沒運行         tem++;                 if(tem%10000==0) {                          SBUF = 0X00;      while(!TI);//當寫下這句的時候,就不要在中斷函數里面在寫TI = 0;這句了,不然進入中斷函數將TI清零之后,程序就會一直卡在這里     TI = 0;       //在這里將TI清零    SM2=0;           }                             //接收數據         for(t=0;t<4;t++)         {                 Data[t]=SBUF;                 while(!RI);                 RI=0;                 if(SBUF==0XFF) {                         SM2=1;                         t=0;                 }                         }         if(Data[0]==0xAA)         {          SBUF = 0X11;     while(!TI);//當寫下這句的時候,就不要在中斷函數里面在寫TI = 0;這句了,不然進入中斷函數將TI清零之后,程序就會一直卡在這里     TI = 0;       //在這里將TI清零         }  }
回復

使用道具 舉報

9#
ID:646224 發表于 2019-11-21 13:22 | 只看該作者
//主機 uchar add=0; uchar dis[]={0xAA,addr1,0x01,0xFF};  /*****主程序*****/ void main() {                         int i;       Uart_Init();            while(1)                         {                                 for(i=0;i<4;i++)                                 {                                         SBUF=dis[i];                                         while(!TI); //等特數據傳送                                         TI=0; //清除數據傳送標志                                  } delayms(500);                         } }
回復

使用道具 舉報

10#
ID:646224 發表于 2019-11-21 13:37 | 只看該作者

現在卡在從機的接受數據上,在編寫好接受程序之后,我試著用串口助手去發送0XAA 看是否有反應,結果一動不動。
回復

使用道具 舉報

11#
ID:646224 發表于 2019-11-21 13:47 | 只看該作者
這是主機給串口發送的數組數據,但是從機是否接受到 或者接受是否正確就無法考證。現在試著用PC端的RX TX 和主機的RX TX 并  然后 連到一個從機的TX RX上面, 結果,還是沒有反應,大神們,還有其他的測試思路?

回復

使用道具 舉報

12#
ID:25310 發表于 2019-11-21 15:41 | 只看該作者
void UART1_RX (void) interrupt 4   using 2
{
    if(RI)
    {
      RI = 0;
                       
                if(SBUF==0x55)        RX1_Cnt = 0;                       
        RX1_Buffer0[RX1_Cnt] = SBUF;
                         
        if(++RX1_Cnt >= 5)  
                                        {
                                                RX1_Cnt = 0;
                                               
                                  }
       
    }

    if(TI)
                       
    {
    TI = 0;
                busy=0;       
    }
               
}

void  dataCompare( )
{
if(((RX1_Buffer0[0] ==0x55)&&(RX1_Buffer0[4] ==0xaa))&&(
                  (RX1_Buffer0[1]==地址)))

  {
   數據處理;
  }

}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99一区二区 | 国产精品污www一区二区三区 | 国产精品日韩欧美一区二区三区 | 日日夜夜草 | 国产a一区二区 | 精品久久不卡 | 日韩中文在线视频 | 久久最新| 4h影视 | 欧美极品在线观看 | 亚洲一区二区视频 | 超碰激情 | 欧美又大粗又爽又黄大片视频 | 午夜精品一区二区三区免费视频 | 成人精品在线视频 | 最近日韩中文字幕 | 日本精品视频在线 | 亚洲在线视频 | 免费国产黄网站在线观看视频 | 女同久久| 国产精品一区二区av | 国产欧美视频一区二区三区 | 尤物视频在线免费观看 | 人人草人人干 | 99国内精品 | 永久av| 黑人性hd | 久草资源在线 | 日本一二三区电影 | 亚洲人成在线播放 | 成人国产一区二区三区精品麻豆 | 国产伦精品一区二区 | 国产成人99久久亚洲综合精品 | 亚洲 中文 欧美 日韩 在线观看 | 成人婷婷 | 日日干干 | 成人一级毛片 | 男女羞羞视频免费 | 蜜桃免费一区二区三区 | 国产一区二区三区四区 | 久久久久久久久综合 |