新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式學(xué)習(xí)筆記11——51單片機(jī)之中斷串口通信

嵌入式學(xué)習(xí)筆記11——51單片機(jī)之中斷串口通信

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

2. 異步通信

本文引用地址:http://m.butianyuan.cn/article/201611/318670.htm


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

3. 串行通信的傳輸方向

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

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

5. 串行通信接口標(biāo)準(zhǔn)

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

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

(2)針對(duì)RS232C的缺點(diǎn),提出了RS422A接口。其傳輸速率90Kbps時(shí),傳輸距離可達(dá)1200米,抗干擾能力強(qiáng)。—

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

6. 51單片機(jī)的串行口

6. 串行口的控制寄存器


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

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

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

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

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

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

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

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

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

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

8. 方式1輸出的時(shí)序圖:

9.方式1輸入的時(shí)序圖:

10. 波特率的計(jì)算

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

11. 串口的使用

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

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

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

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

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

(6)寫中斷服務(wù)程序,記住軟件清零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ā)完時(shí)硬件自動(dòng)將TI置1

TI=0;

ES=1;

}

}

}

void serial() interrupt 4

{

a=SBUF;

P1=a;

RI=0;

flag=1;

}



評(píng)論


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

關(guān)閉