|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
RS485通訊奇怪現(xiàn)象 |
| 作者:jhycl 欄目:通信技術 |
系統(tǒng)有兩個串口,1個是mcu串口 1個是用16C550擴的串口,其中16C550擴的串口由MAX485轉(zhuǎn)成485方式,在通訊中有個奇怪現(xiàn)象,485通訊時,近距離沒問題 但遠距離(300M)通訊時,16C550收到的數(shù)據(jù)就有錯誤,但用一個RS232轉(zhuǎn)485模塊監(jiān)測RS485上數(shù)據(jù),用電腦串口接收就能收到正取數(shù)據(jù),不知為什么? |
| 2樓: | >>參與討論 |
| 作者: chunyang 于 2006/11/24 12:27:00 發(fā)布:
應該是16C550控制程序的時序處于臨界態(tài) 或者485總線路況不夠好,新的模塊容差較好或者是改變了總線匹配、反射等因素。 |
|
| 3樓: | >>參與討論 |
| 作者: jhycl 于 2006/11/24 15:45:00 發(fā)布:
16C550部分程序 晶振11.0592 void Init_16C550() { uchar idata TEMP; while(int_ok != 1) { WDT = 1; } WDT = 1; lcr = 0X80; dlm = 0x00; dll = 0x48; lcr = VERIFY_O; ier = 0X03; isr = 0Xc7; _nop_(); isr = 0Xc1; mcr = 0; fcr = 0x07; do { TEMP = rhr; TEMP = lsr; TEMP = TEMP&0x01; }while(TEMP); } uchar Rx_16C550() { uchar data kk,k,TEMP; bit TEMP0; WDT = 1; kk = 0; do { k = 0; do { TEMP = lsr; TEMP0 = (bit)(TEMP & 0x01); k++; }while ((TEMP0 == 0) && (k < 255)); kk++; }while ((TEMP0 == 0) && (kk < 50)); if(TEMP0) k = rhr; else k = 0xff; return(k); } void Tx_16C550_E(uchar i) { uchar TEMP; // EA = 0; WDT = 1; c_per = 1; _nop_(); lcr = VERIFY_E; thr = i; do { TEMP = lsr; TEMP = TEMP & 0x40; }while (TEMP == 0); c_per = 0; // EA = 1; } |
|
| 4樓: | >>參與討論 |
| 作者: jhycl 于 2006/11/24 15:47:00 發(fā)布:
補充下 兩端的485芯片不同 1端是MAX485 1端是75176 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |