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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數: 3303 | 評論數: 11 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2019-11-21 01:00

正文摘要:

現在采用的是stc12c5a60s2的單片機作為主機,其余六塊作為從機! 主機以廣播的方式發送數組數據,其中包括幀頭+地址+命令+幀尾共四個字節,而且是不斷發送! 在串口助手上可以看到對應的輸出。   問題來 ...

回復

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]==地址)))

  {
   數據處理;
  }

}
ID:646224 發表于 2019-11-21 13:37

現在卡在從機的接受數據上,在編寫好接受程序之后,我試著用串口助手去發送0XAA 看是否有反應,結果一動不動。
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);                         } }
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清零         }  }
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. }
復制代碼
ID:617449 發表于 2019-11-21 09:58
1、多機通訊采用 RS485 方式
2、先把一對一的調試好
3、在擴展到6個分機
4、給你看一個 20 點485通訊的
http://www.zg4o1577.cn/bbs/dpj-170710-1.html
ID:470332 發表于 2019-11-21 08:59
1、首先,你試試一對一通信能不能正確接收
2、如果只接收理論上是可以的
3、如果從機還需要發送,如果直接把TX RX并在了主機上,這樣應該不行,你從機的TX不能接在一起
ID:306810 發表于 2019-11-21 08:42
主機發送成功了?在串口助手上能夠監控到數據了?以上都成功了,那么從機有成功收到數據么?如果有,那么就是你的程序處理報文的問題了。
ID:138097 發表于 2019-11-21 08:14
看上去理論是沒有問題的,不過實際操作會不會哪步出現問題,排查一下啊,從機仿真看一下接收到沒有
ID:25310 發表于 2019-11-21 08:07
從機接收端要識別接收,比如一幀數據為:55 01 02 aa ,  55 和AA是頭尾,串口接收時叢55開始才放到數組第一個位置,依次接收到最后AA就是一幀數據。開始不是55 的直接退出不接收這樣就避免收到錯誤的數據。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产一区二区三区 | 国产一区二区久久 | 韩国毛片一区二区三区 | 欧美一区二区三区国产精品 | 不卡视频一区二区三区 | 国产一区二区三区精品久久久 | 欧美一区二区三区免费在线观看 | 日本午夜精品 | 国产一二三区精品视频 | 丝袜一区二区三区 | 中文字幕高清在线 | 午夜爽爽男女免费观看hd | 久久久国产精品 | 中文字幕精品一区 | 一区二区三区免费 | 本地毛片| 日韩中文字幕一区二区 | 亚洲综合日韩精品欧美综合区 | 国产xxxx岁13xxxxhd| 日韩二区| 久草新视频 | 国产一区二区三区 | 7777久久| 天堂精品视频 | 国产中文字幕网 | 成人a免费 | 国产精品入口麻豆www | av日韩在线播放 | 欧美在线国产精品 | 99久久99| 欧美无乱码久久久免费午夜一区 | 国产精品久久久久久久一区探花 | 成人在线视频观看 | 精品一区在线 | 91在线最新 | 亚洲美女一区二区三区 | 中文在线一区二区 | 天天艹天天干天天 | 久热久草 | 日韩亚洲视频 | 国产成人一区二区三区精 |