音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

51機RS485通信問題請教!

作者:hustzch 欄目:單片機
51機RS485通信問題請教!

   我采用AT89LS51,外接一個MAX491來進行多機全雙工RS485通信。
   在調(diào)試的時候先采用雙機通信,發(fā)現(xiàn)從機的總是接收不正確。只能接收0x55,例如0x95,0x20這樣的
字節(jié)就總是出錯。由于沒有RS485/RS232適配器,所以不能打到PC串口看數(shù)據(jù)。
   我又一塊單片機,采用RS232接口和PC通信,采用相同的程序,使用串口調(diào)試精靈調(diào)試,發(fā)現(xiàn)接收和發(fā)送
都是正常的,請問這是怎么回事?謝謝
   以下是我的源碼:
  /***********************************************
                主機
***********************************************/
   void main (void)
{

    SCON = 0x50;             /* uart in mode 1 (8 bit), REN=1 */
    TMOD = TMOD | 0x20 ;         /* Timer 1 in mode 2 */
    TH1  = 0xFD;                 /* 9600 Bds at 11.059MHZ */
    TL1  = 0xFD;              /* 9600 Bds at 11.059MHZ */
        IE =0x90;
        TR1 = 1;                     /* Timer 1 run */

   
       Rx_en=0;                        /* RS-485 Rx enable,'0'--enable; '1'--disable */
       Tx_en=1;                        /* RS-485 Tx enable,'1'--enable; '0'--disable */
       
   while(1)                     
   {                                 
                     SBUF=0x55;     //只有0x55可以成功被從機接收                                 
                    while(TI==0);                                               
                    TI=0;
                     delay(100);
                 LED_blink1();  /* If received a byte ,LED1 will blink */
                    
                       
   }        
}

void serial () interrupt 4   //接收采用中斷,發(fā)送不使用中斷
{
                if(RI)
                    {  
                       CHAR uart_data;
                       RI=0;
                       uart_data=SBUF;                     
                       SWITCH(uart_data)
                       {
                         case 0x25:
                              LED_blink2();
                              break;
                         default:
                              break;
                       }     
                    }
}
/***********************************************
                從機
***********************************************/
void main (void)
{
    CHAR shakehands;
  
    SCON = 0x50;             /* uart in mode 1 (8 bit), REN=1 */
    TMOD = TMOD | 0x20 ;         /* Timer 1 in mode 2 */
    TH1  = 0xFD;                 /* 9600 Bds at 11.059MHZ */
    TL1  = 0xFD;              /* 9600 Bds at 11.059MHZ */
    ES = 0;              /* Disable serial interrupt */
    EA = 0;                 /* Disable GLOBAL interrupt */
        TR1 = 1;                    
2樓: >>參與討論
shixiudong
很可能是485總線沖突了
檢查是否有多個輸出連在同一個總線中了。
這是經(jīng)常性錯誤。

3樓: >>參與討論
hustzch
謝謝回復(fù)
   我沒有完全明白你的意思。
   我本是想做多機通信的,現(xiàn)在先用雙機調(diào)程序。所以總線上只有2個設(shè)備啊。

4樓: >>參與討論
xrb3115
是否是485收發(fā)切換的時間不夠
 
5樓: >>參與討論
hustzch
to xrb3115
    我使用的是MAX491,采用的是全雙工485方式,輸入和輸出是獨立的通道,
雖然各有使能,但我一上電把他們都使能了。
    我認為既然是全雙工,就沒有收發(fā)切換的問題了吧?

6樓: >>參與討論
1121
輸入和輸出是獨立通道的全雙工485方式?直接說422不就得了。
你的發(fā)送程序或發(fā)送電路需要改進,關(guān)鍵的問題是你總在占用總線。
我看你是可以用PC來調(diào)試的,動下腦筋吧。

7樓: >>參與討論
lsn_061
我也一直在做這個,能否交流呢
是不是延時的時間太少了?      delay(100);


8樓: >>參與討論
hustzch
謝謝樓上的
   我起初是用PC調(diào)試的,用的就是RS232和PC通信,PC端用串口調(diào)試精靈。
   RS485是RS422的改進,有2線和4線兩種連接方式的。
   我使用的是MAX491芯片,Datasheet上說明是應(yīng)用于full-duplex RS485 network,應(yīng)該是指全雙工RS485網(wǎng)絡(luò)吧,我也是第一次用這個片子。
   后來發(fā)現(xiàn)硬件設(shè)計時,MAX491的VCC為5V的,但是接成3.3V了(不是俺設(shè)計的啊,冤的很),應(yīng)該是這個問題導(dǎo)致誤碼的吧!

9樓: >>參與討論
1121
不是你設(shè)計的,你就沒責(zé)任了嗎?!為什么不好好檢查!
哈,說玩樂的啦,別介意。如果早些用示波器看一下波形就不用走彎路了。

RS485和RS422還是看下標準再說吧,在此不做深究了。

MAX某些IC都是按非標設(shè)計的,當然有些是超標的啦。

10樓: >>參與討論
hustzch
呵呵,是啊,說的對
   我是對我們的硬件設(shè)計的確很放心。沒想到出岔子出在VCC上,我悶著腦袋
搞了半天通信協(xié)議,都是有問題啊,真是ft了。

11樓: >>參與討論
12864
芯片是全雙工,但聯(lián)網(wǎng)就不是全雙工的了
起碼眾多從機的發(fā)送都是連接在一起的,從機為了避免總線沖突,必須是先收后發(fā),而且不該自己發(fā)的時候不能發(fā),更不能在任意時刻主動發(fā)起通信。

這樣看,還是全雙工嗎?當然在一主一從的時候是可以全雙工的。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
關(guān)于DS12C887使用問題
問個弱問題,VCC為5V,接成3.3V有什么后果?
EMC的C編譯器不能用,那我可以........
問一個串口中斷調(diào)試的子程序 問題
問一下那位知道用HD44780驅(qū)動的液晶模塊大慨要好多錢
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號