<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)RS485串口通信

          單片機(jī)RS485串口通信

          作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
          RS-485是半雙工的通信方式,發(fā)送和接收共用同一物理信道。在任意時(shí)刻只允許一臺(tái)單機(jī)處于發(fā)送狀態(tài)。因此要求應(yīng)答的單機(jī)必須在偵聽到總線上呼叫信號(hào)已經(jīng)發(fā)送完畢,并且沒有其它單機(jī)發(fā)出應(yīng)答信號(hào)的情況下,才能應(yīng)答。半雙工通信對(duì)主機(jī)和從機(jī)的發(fā)送和接收時(shí)序有嚴(yán)格的要求。如果在時(shí)序上配合不好,就會(huì)發(fā)生總線沖突,使整個(gè)系統(tǒng)的通信癱瘓,無法正常工作。要使總線上的設(shè)備在時(shí)序上嚴(yán)格配合。在復(fù)位時(shí),使主從機(jī)都處于接收狀態(tài)。

          MAX3082的發(fā)送和接收轉(zhuǎn)換是由芯片的RE/和DE端控制的。RE/=1,DE=1時(shí),MAX3082處于發(fā)送狀態(tài);RE/=0,DE=0時(shí),MAX3082處于接收狀態(tài)。一般使用單片機(jī)的一個(gè)IO口連接RE/和DE端。在上電復(fù)位時(shí),由于硬件電路穩(wěn)定需要一定的時(shí)間,并且單片機(jī)各端口復(fù)位后處于高電平狀態(tài),這樣就會(huì)使總線上各個(gè)分機(jī)處于發(fā)送狀態(tài),由于上電時(shí)各電路不穩(wěn)定,可能向總線發(fā)送信息。因此,如果用一根口線作發(fā)送和接收控制信號(hào),應(yīng)該將口線反向后接入MAX3082的控制端,使上電時(shí)MAX3082處于接收狀態(tài)。另外,在主從機(jī)軟件上也應(yīng)做處理措施,如:上電時(shí)或通信之前,對(duì)串行口做幾次空操作,清除端口的非法數(shù)據(jù)和命令。

          本文引用地址:http://www.ex-cimer.com/article/201611/318595.htm

          RS-485的通信程序編寫和RS-232沒有太大區(qū)別,如果使用一個(gè)IO口控制MAX3082的RE/和DE端口,RS-485只比RS-232多了一個(gè)接收和發(fā)送的轉(zhuǎn)換控制位。初始化串口時(shí),使該位處于低電平,即接收狀態(tài)。發(fā)送數(shù)據(jù)時(shí),使該位先為高,發(fā)送完數(shù)據(jù)后拉低。程序如下:

          sbitRS485_EP3^5//發(fā)送,接收控制位

          void UART1_Init(void)

          {

          SCON = 0x50;//方式1,8位數(shù)據(jù),可變波特率

          RS485_E= 0;//置低,接收

          TMOD|= 0x20;//定時(shí)器1,方式2,8位自重載

          PCON = 0x00;//波特率倍頻禁止

          TH1= 0xfd;//晶振22.1184MHz,波特率19200;

          TL1= 0xfd;

          IE|= 0x90;//開中斷

          IP= 0x10;

          TR1= 1;//啟動(dòng)定時(shí)器

          }

          void UART1_Send_Char(const INT8U dt)

          {

          SBUF= dt;

          while(!TI);

          TI = 0;

          }

          void UART1_Send_String(INT8U *str, INT8U len)

          {

          INT8U i;

          RS485_E= 1;//置高,發(fā)送

          ES= 0;

          for(i=0; i

          {

          UART1_Send_Char(*(str+i));

          }

          RS485_E= 0;//置低,接收

          ES= 1;

          }

          void UART1_Interrupt(void) interrupt 4

          {

          RS485_E = 0;//接收

          ES = 0;

          if(RI)

          {

          //中斷接收數(shù)據(jù)

          }

          ES = 1;

          }



          關(guān)鍵詞: 單片機(jī)RS485串口通

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();