久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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

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

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

2. 異步通信

本文引用地址:http://cqxgywz.com/article/201611/318670.htm


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

3. 串行通信的傳輸方向

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

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

5. 串行通信接口標準

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

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

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

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

6. 51單片機的串行口

6. 串行口的控制寄存器


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

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

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

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

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

(4)TB8,在方式2或方式3中,是發送數據的第九位,可用軟件規定其作用。可以用作數據的奇偶校驗位,或在多機通信中,作為地址幀/數據幀的標志位。在方式0和方式1中,該位未用。

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

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

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

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

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

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

10. 波特率的計算

在串行通信中,收發雙方對發送或接收數據的速率要有約定,否則就會出現亂碼。其中方式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);//等待數據發送完,發完時硬件自動將TI置1

TI=0;

ES=1;

}

}

}

void serial() interrupt 4

{

a=SBUF;

P1=a;

RI=0;

flag=1;

}



評論


技術專區

關閉