單片機(jī)串行接口的控制與應(yīng)用
概述
本文引用地址:http://m.butianyuan.cn/article/201611/322018.htm21世紀(jì)是信息的社會,而信息的傳遞和交換,要有一定的途徑和方法,你現(xiàn)在在網(wǎng)上就是在獲取信息,對不對?如果你是使用電話撥號上網(wǎng)的話,就是在使用計算機(jī)的串行接口在通信的啦?。?!
- 串行接口的一般概念 計算機(jī)與外界進(jìn)行信息交換稱之為通訊。
MCS-51單片機(jī)內(nèi)部有一個全雙工的串行接口,在物理結(jié)構(gòu)上是由獨立的接收和發(fā)送數(shù)據(jù)緩沖器(SBUF)組成,可同時發(fā)送、接收數(shù)據(jù)。
串行通訊的方式: 在一幀格式中,包括:一個起始位0,然后是8個數(shù)據(jù)位,規(guī)定低位在前,高位在后,接下來是奇偶校驗位(可以省略),最后是停止位1。用這種格式表示字符后,則字符可以一個接一個地傳送。
- 異步通訊:
它是用一幀來表示一個字符。
從上可知CPU與外設(shè)之間必須有兩項規(guī)定,即字符格式和波特率(傳送的字符速度)。字符格式的規(guī)定是雙方能夠在對同一種0和1的字符串時能理解成同一種意義。原則上字符格式可以由通訊的雙方自由制定,但從通用、方便的角度出發(fā),一般還是使用一些標(biāo)準(zhǔn)為好,如采用ASCII標(biāo)準(zhǔn)。
波特率:即數(shù)據(jù)傳送的速率,其定義是每秒鐘傳送的二進(jìn)制數(shù)的位數(shù)。單位:位/秒,例如,數(shù)據(jù)傳送的速率是120字符/s,即每秒傳送120個字符,而每個字符如上述規(guī)定包含10數(shù)位,則傳送波特率為10*120=1200波特。
- 通訊方向:在串行通訊中,把通訊接口只能發(fā)送或接收的單向傳送方法叫單工傳送;而把數(shù)據(jù)在甲乙兩機(jī)之間的雙向傳遞,稱之為雙工傳送。在雙工傳送方式中又分為半雙工傳送和全雙工傳送。半雙工傳送是兩機(jī)之間不能同時進(jìn)行發(fā)送和接收,任一時該,只能發(fā)或者只能收信息。而全雙工傳送則發(fā)送和接收可同時進(jìn)行。
- 同步通訊:在同步通訊中,每個字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了時間;所以在數(shù)據(jù)塊傳遞時,為了提高速度,常去掉這些標(biāo)志,采用同步傳送。由于數(shù)據(jù)塊傳遞開始要用同步字符來指示,同時要求由時鐘來實現(xiàn)發(fā)送端與接收端之間的同步,故硬件較復(fù)雜。
常用于計算機(jī)之間的通信。
- 2.8051單片機(jī)的串行接口結(jié)構(gòu)
- 串行口的控制是由對專用的特殊功能寄存器進(jìn)行設(shè)置來完成的。包括:SCON、PCON。
- 串行口控制寄存器SCON
它用于定義串行口的工作方式及實施接收和發(fā)送控制。字節(jié)地址為98H,其各位定義如下表:
D7
D6
D5
D4
D3
D2
D1
D0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0、SM1:串行口工作方式選擇位,其定義如下:
SM0、SM1
工作方式
功能描述
波特率
0 0
方式0
8位移位寄存器
Fosc/12
0 1
方式1
10位UART
可變
1 0
方式2
11位UART
Fosc/64或fosc/32
1 1
方式3
11位UART
可變
其中fosc為晶振頻率
SM2:多機(jī)通訊控制位。在方式0時,SM2一定要等于0。在方式1中,當(dāng)(SM2)=1則只有接收到有效停止位時,RI才置1。在方式2或方式3當(dāng)(SM2)=1且接收到的第九位數(shù)據(jù)RB8=0時,RI才置1。
REN:接收允許控制位。由軟件置位以允許接收,又由軟件清0來禁止接收。
TB8:在方式2或方式3中,要發(fā)送的第9位數(shù)據(jù)位,根據(jù)需要由軟件置1或清0。例如,可約定作為奇偶校驗位,或在多機(jī)通訊中作為區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)志位。
RB8:接收到的數(shù)據(jù)的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8為接收到的停止位。在方式2或方式3中,RB8為接收到的第9位數(shù)據(jù)。
TI:發(fā)送中斷標(biāo)志。在方式0中,第8位發(fā)送結(jié)束時,由硬件置位。在其它方式的發(fā)送停止位前,由硬件置位。TI置位既表示一幀信息發(fā)送結(jié)束,同時也是申請中斷,可根據(jù)需要,用軟件查詢的方法獲得數(shù)據(jù)已發(fā)送完畢的信息,或用中斷的方式來發(fā)送下一個數(shù)據(jù)。TI必須用軟件清0(如CLR TI)。
RI:接收中斷標(biāo)志位。在方式0,當(dāng)接收完第8位數(shù)據(jù)后,由硬件置位。在其它方式中,在接收到停止位的中間時刻由硬件置位(例外情況見于SM2的說明)。RI置位表示一幀數(shù)據(jù)接收完畢,可用查詢的方法獲知或者用中斷的方法獲知。RI也必須用軟件清0(如CLR RI)。
- 特殊功能寄存器PCON
PCON是為了在CHMOS的80C51單片機(jī)上實現(xiàn)電源控制而附加的。其中最高位是SMOD,為串行口波特率系數(shù)控制位,SMOD=1時,使波特率加倍,一般不用。
- 串行口的工作方式
8051單片機(jī)的全雙工串行口可編程為4種工作方式,現(xiàn)分述如下:
- 方式0為移位寄存器輸入/輸出方式。可外接移位寄存器以擴(kuò)展I/O口,也可以外接同步輸入/輸出設(shè)備。8位串行數(shù)據(jù)者是從RXD輸入或輸出,TXD用來輸出同步脈沖。
- 輸出串行數(shù)據(jù)從RXD引腳輸出,TXD引腳輸出移位脈沖。CPU將數(shù)據(jù)寫入發(fā)送寄存器時,立即啟動發(fā)送,將8位數(shù)據(jù)以fos/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送中斷標(biāo)志TI由硬件置位。
- 輸入當(dāng)串行口以方式0接收時,先置位允許接收控制位REN。此時,RXD為串行數(shù)據(jù)輸入端,TXD仍為同步脈沖移位輸出端。當(dāng)(RI)=0和(REN)=1同時滿足時,開始接收。當(dāng)接收到第8位數(shù)據(jù)時,將數(shù)據(jù)移入接收寄存器,并由硬件置位RI。
下面兩圖分別是方式0擴(kuò)展輸出和輸入的接線圖。
- 波特率選擇
- 如前所述,在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在8051串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控制。
- 方式0方式0的波特率固定為主振頻率的1/12。
- 方式2
- 方式2的波特率由PCON中的選擇位SMOD來決定,可由下式表示:
波特率=2的SMOD次方除以64再乘一個fosc,也就是當(dāng)SMOD=1時,波特率為1/32fosc,當(dāng)SMOD=0時,波特率為1/64fosc
3.方式1和方式3
定時器T1作為波特率發(fā)生器,其公式如下:
波特率=定時器T1溢出率
T1溢出率= T1計數(shù)率/產(chǎn)生溢出所需的周期數(shù)
式中T1計數(shù)率取決于它工作在定時器狀態(tài)還是計數(shù)器狀態(tài)。當(dāng)工作于定時器狀態(tài)時,T1計數(shù)率為fosc/12;當(dāng)工作于計數(shù)器狀態(tài)時,T1計數(shù)率為外部輸入頻率,此頻率應(yīng)小于fosc/24。產(chǎn)生溢出所需周期與定時器T1的工作方式、T1的預(yù)置值有關(guān)。
定時器T1工作于方式0:溢出所需周期數(shù)=8192-x定時器T1工作于方式1:溢出所需周期數(shù)=65536-x
定時器T1工作于方式2:溢出所需周期數(shù)=256-x
因為方式2為自動重裝入初值的8位定時器/計數(shù)器模式,所以用它來做波特率發(fā)生器最恰當(dāng)。
當(dāng)時鐘頻率選用11.0592MHZ時,取易獲得標(biāo)準(zhǔn)的波特率,所以很多單片機(jī)系統(tǒng)選用這個看起來“怪”的晶振就是這個道理。
下表列出了定時器T1工作于方式2常用波特率及初值。
常用波特率 | Fosc(MHZ) | SMOD | TH1初值 |
19200 | 11.0592 | 1 | FDH |
9600 | 11.0592 | 0 | FDH |
4800 | 11.0592 | 0 | FAH |
2400 | 11.0592 | 0 | F4h |
1200 | 11.0592 | 0 | E8h |
評論