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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式學習筆記11——51單片機之中斷串口通信

          嵌入式學習筆記11——51單片機之中斷串口通信

          作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
          1. 計算機通信指計算機與外設或計算機與計算機之間的信息交換,分為兩大類:并行通信(控制簡單)和串行通信(從低到高,一位一位的傳送,長距離傳輸時成本低)。

          2. 異步通信

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


          1. 異步通信是以字符(構成的幀)為單位進行傳輸,字符與字符之間的間隙(時間間隔)是任意的,但每個字符中的各位是以固定的時間傳送的。
          2. 異步通信的數(shù)據(jù)格式:
            格式中的校驗位通常有3種方式獲得:(1)奇偶校驗:奇校驗——數(shù)據(jù)中的“1”的個數(shù)與校驗位“1”的個數(shù)之和應為奇數(shù);偶校驗——數(shù)據(jù)中的“1”的個數(shù)與校驗位“1”的個數(shù)之和應為偶數(shù)。(2)代碼和校驗:發(fā)送方將所發(fā)數(shù)據(jù)塊求和(或各字節(jié)異或),產(chǎn)生一個字節(jié)的校驗字符(校驗和)附加到數(shù)據(jù)塊末尾。接收方接收數(shù)據(jù)同時對數(shù)據(jù)塊(校驗字節(jié)外)求和(或各字節(jié)異或),將所得的結果與發(fā)送方的“校驗和”進行比較。(3)循環(huán)冗余校驗。

          3. 串行通信的傳輸方向

          (1)單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實現(xiàn)反向傳輸。(如遙控器)(2)半雙工是指數(shù)據(jù)傳輸可以沿兩個方向,但需要分時進行。(如對講機) (3)全雙工是指數(shù)據(jù)可以同時進行雙向傳輸。

          4. 比特率是每秒鐘傳輸二進制代碼的位數(shù),單位是位/秒(bps)。傳輸速率越大,傳輸距離越小。

          5. 串行通信接口標準

          (1)RS-232C(25針,比較老了;或者9針)

          我們通常用到的是TXD、RXD和SGND。RS-232C的缺點是傳輸速率最高為20Kbps,傳輸距離不超過15米;要求收發(fā)雙方共地,通信距離較大時,收發(fā)雙方的地電位差別較大,在信號地上將有比較大的地電流并產(chǎn)生壓降;抗干擾能力差。

          (2)針對RS232C的缺點,提出了RS422A接口。其傳輸速率90Kbps時,傳輸距離可達1200米,抗干擾能力強。—

          (3)RS-485是RS422A的變型:RS-422A用于全雙工,而RS-485用于半雙工。傳輸距離可達1200米,傳輸速率可達1Mbps。一般是一點對多點的通信接口。普通的PC機一般不帶RS485接口,因策要使用RS-232C/RS-485轉(zhuǎn)換器。

          6. 51單片機的串行口

          6. 串行口的控制寄存器


          SCON是一個特殊功能寄存器,用以設定串行口的工作方式、接收/發(fā)送控制以及設置狀態(tài)標志。

          (1)SM0和SM1為工作方式選擇位,可選擇4種工作方式:

          圖中,fosc為晶振頻率。 常用的是方式1。

          (2)SM2,多機通信控制位,主要用于方式2和方式3。當接收機的SM2=1時,可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,并激活RI,進而在中斷服務中將數(shù)據(jù)從SBUF中讀走)。當SM2=0時,不論收到的RB8為0還是1,均可以使收到的數(shù)據(jù)進入SBUF,并激活RI。在方式0時,SM2必須是0。在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1;若SM2=0,則RB8是接收到的停止位。

          (3)REN,允許串行接收位。由軟件置REN=1,則啟動串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收。

          (4)TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可用軟件規(guī)定其作用??梢杂米鲾?shù)據(jù)的奇偶校驗位,或在多機通信中,作為地址幀/數(shù)據(jù)幀的標志位。在方式0和方式1中,該位未用。

          (5)RB8,在方式2或方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。

          (6)TI,發(fā)送中斷標志位。串行發(fā)送停止位的開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務程序中,必須用軟件將TI清0,取消此中斷申請。

          (7)RI,接收中斷標志位。串行接收停止位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。在中斷服務程序中,必須用軟件將RI清0,取消此中斷申請。

          7. PCON中有一位SMOD(PCON.7,波特率倍增位)與串行口工作有關。在串行口方式1~3時,波特率與SMOD有關,當SMOD=1時,波特率提高一倍。復位時,SMOD=0。

          8. 方式1輸出的時序圖:

          9.方式1輸入的時序圖:

          10. 波特率的計算

          在串行通信中,收發(fā)雙方對發(fā)送或接收數(shù)據(jù)的速率要有約定,否則就會出現(xiàn)亂碼。其中方式0和方式2的波特率固定,而方式1和方式3的波特率是可變的,由定時器T1的溢出率來決定。

          11. 串口的使用

          (1)確定T1的工作方式(編程TMOD寄存器)

          (2)計算T1的初始值,裝載TH1、TL1

          (3)啟動T1(編程TCON中的TR1位)

          (4)確定串行口控制(編程SCON寄存器、還有PCON中的SMOD位)

          (5)設置IE寄存器,打開EA和ES位。

          (6)寫中斷服務程序,記住軟件清零RI、TI。

          12. 示例程序

          unsigned char a,flag;

          void main()

          {

          while(1)

          {

          if(flag)

          {

          ES=0;

          flag=0;

          SBUF=a;

          while(!TI);//等待數(shù)據(jù)發(fā)送完,發(fā)完時硬件自動將TI置1

          TI=0;

          ES=1;

          }

          }

          }

          void serial() interrupt 4

          {

          a=SBUF;

          P1=a;

          RI=0;

          flag=1;

          }



          評論


          技術專區(qū)

          關閉
          看屁屁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); })();