嵌入式學(xué)習(xí)筆記11——51單片機(jī)之中斷串口通信
2. 異步通信
本文引用地址:http://m.butianyuan.cn/article/201611/318670.htm- 異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的間隙(時(shí)間間隔)是任意的,但每個(gè)字符中的各位是以固定的時(shí)間傳送的。
- 異步通信的數(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)論