串行口是單片機與(yu) 外界進行信息交換的工具。
8051單片機的通信方式有兩(liang) 種:
並行通信:數據的各位同時發送或接收。 串行通信:數據一位一位次序發送或接收。參看下圖:
串行通信的方式:
異步通信:它用一個(ge) 起始位表示字符的開始,用停止位表示字符的結束。其每幀的格式如下:
在一幀格式中,先是一個(ge) 起始位0,然後是8個(ge) 數據位,規定低位在前,高位在後,接下來是奇偶校驗位(能省略),最後是停止位1。用這種格式表示字符,則字符能一個(ge) 接一個(ge) 地傳(chuan) 送。
在異步通信中,CPU與(yu) 外設之間必須有兩(liang) 項規定,即字符格式和波特率。字符格式的規定是雙方能夠在對同一種0和1的串理解成同一種意義(yi) 。原則上字符格式能由通信的雙方自由製定,但從(cong) 通用、方便的角度出發,一般還是使用一些標準為(wei) 好,如采用ASCII標準。
波特率即數據傳(chuan) 送的速率,其定義(yi) 是每秒鍾傳(chuan) 送的二進製數的位數。例如,數據傳(chuan) 送的速率是120字符/s,而每個(ge) 字符如上述規定包含10數位,則傳(chuan) 送波特率為(wei) 1200波特。
同步通信:在同步通信中,每個(ge) 字符要用起始位和停止位作為(wei) 字符開始和結束的標誌,占用了時間;所以在數據塊傳(chuan) 遞時,為(wei) 了提高速度,常去掉這些標誌,采用同步傳(chuan) 送。由於(yu) 數據塊傳(chuan) 遞開始要用同步字符來指示,同時要求由時鍾來實現發送端與(yu) 接收端之間的同步,故硬件較複雜。
通信方向:在串行通信中,把通信接口隻能發送或接收的單向傳(chuan) 送辦法叫單工傳(chuan) 送;而把數據在甲乙兩(liang) 機之間的雙向傳(chuan) 遞,稱之為(wei) 雙工傳(chuan) 送。在雙工傳(chuan) 送方式中又分為(wei) 半雙工傳(chuan) 送和全雙工傳(chuan) 送。半雙工傳(chuan) 送是兩(liang) 機之間不能同時進行發送和接收,任一時該,隻能發或者隻能收信息。
2.8051單片機的串行接口結構
8051單片機串行接口是一個(ge) 可編程的全雙工串行通信接口。它可用作異步通信方式(UART),與(yu) 串行傳(chuan) 送信息的外部設備相連接,或用於(yu) 通過標準異步通信協議進行全雙工的8051多機係統也能通過同步方式,使用TTL或CMOS移位寄存器來擴充I/O口。
8051單片機通過管腳RXD(P3.0,串行數據接收端)和管腳TXD(P3.1,串行數據發送端)與(yu) 外界通信。SBUF是串行口緩衝(chong) 寄存器,包括發送寄存器和接收寄存器。它們(men) 有相同名字和地址空間,但不會(hui) 出現衝(chong) 突,因為(wei) 它們(men) 兩(liang) 個(ge) 一個(ge) 隻能被CPU讀出數據,一個(ge) 隻能被CPU寫(xie) 入數據。
串行口的控製與(yu) 狀態寄存器
串行口控製寄存器SCON
其中fosc為(wei) 晶體(ti) 震蕩器頻率
SM2:多機通信控製位。在方式0時,SM2一定要等於(yu) 0。在方式1中,當(SM2)=1則隻有接收到有效停止位時,RI才置1。在方式2或方式3當(SM2)=1且接收到的第九位數據RB8=0時,RI才置1。
REN:接收允許控製位。由軟件置位以允許接收,又由軟件清0來禁止接收。
TB8: 是要發送數據的第9位。在方式2或方式3中,要發送的第9位數據,根據需要由軟件置1或清0。例如,可約定作為(wei) 奇偶校驗位,或在多機通信中作為(wei) 區別地址幀或數據幀的標誌位。
RB8:接收到的數據的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8為(wei) 接收到的停止位。在方式2或方式3中,RB8為(wei) 接收到的第9位數據。
TI:發送中斷標誌。在方式0中,第8位發送結束時,由硬件置位。在其它方式的發送停止位前,由硬件置位。TI置位既表示一幀信息發送結束,同時也是申請中斷,可根據需要,用軟件查詢的辦法獲得數據已發送完畢的信息,或用中斷的方式來發送下一個(ge) 數據。TI必須用軟件清0。
RI:接收中斷標誌位。在方式0,當接收完第8位數據後,由硬件置位。在其它方式中,在接收到停止位的中間時刻由硬件置位(例外情況見於(yu) SM2的說明)。RI置位表示一幀數據接收完畢,可用查詢的辦法獲知或者用中斷的辦法獲知。RI也必須用軟件清0。
特殊功能寄存器PCON
PCON是為(wei) 了在CHMOS的80C51單片機上實現電源控製而附加的。其中最高位是SMOD。
串行口的工作方式
8051單片機的全雙工串行口可編程為(wei) 4種工作方式,現分述如下:
方式0為(wei) 移位寄存器輸入/輸出方式。可外接移位寄存器以擴展I/O口,也能外接同步輸入/輸出設備。8位串行數據者是從(cong) RXD輸入或輸出,TXD用來輸出同步脈衝(chong) 。
輸出 串行數據從(cong) RXD管腳輸出,TXD管腳輸出移位脈衝(chong) 。CPU將數據寫(xie) 入發送寄存器時,立即啟動發送,將8位數據以fos/12的固定波特率從(cong) RXD輸出,低位在前,高位在後。發送完一幀數據後,發送中斷標誌TI由硬件置位。
輸入 當串行口以方式0接收時,先置位允許接收控製位REN。此時,RXD為(wei) 串行數據輸入端,TXD仍為(wei) 同步脈衝(chong) 移位輸出端。當(RI)=0和(REN)=1同時滿足時,開始接收。當接收到第8位數據時,將數據移入接收寄存器,並由硬件置位RI。
下麵兩(liang) 圖分別是方式0擴展輸出和輸入的接線圖。
方式1為(wei) 波特率可變的10位異步通信接口方式。發送或接收一幀信息,包括1個(ge) 起始位0,8個(ge) 數據位和1個(ge) 停止位1。
輸出 當CPU執行一條指令將數據寫(xie) 入發送緩衝(chong) SBUF時,就啟動發送。串行數據從(cong) TXD管腳輸出,發送完一幀數據後,就由硬件置位TI。
輸入 在(REN)=1時,串行口采樣RXD管腳,當采樣到1至0的跳變時,確認是開始位0,就開始接收一幀數據。隻有當(RI)=0且停止位為(wei) 1或者(SM2)=0時,停止位才進入RB8,8位數據才能進入接收寄存器,並由硬件置位中斷標誌RI;不然信息丟(diu) 失。所以在方式1接收時,應先用軟件清零RI和SM2標誌。
方式2
方式月為(wei) 固定波特率的11位UART方式。它比方式1增加了一位可程控為(wei) 1或0的第9位數據。
輸出: 發送的串行數據由TXD端輸出一幀信息為(wei) 11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或複位。它可作為(wei) 多機通信中地址/數據信息的標誌位,也能作為(wei) 數據的奇偶校驗位。當CPU執行一條數據寫(xie) 入SUBF的指令時,就啟動發送器發送。發送一幀信息後,置位中斷標誌TI。
輸入: 在(REN)=1時,串行口采樣RXD管腳,當采樣到1至0的跳變時,確認是開始位0,就開始接收一幀數據。在接收到附加的第9位數據後,當(RI)=0或者(SM2)=0時,第9位數據才進入RB8,8位數據才能進入接收寄存器,並由硬件置位中斷標誌RI;不然信息丟(diu) 失。且不置位RI。再過一位時間後,不管上述條件時否滿足,接收電路即行複位,並重新檢測RXD上從(cong) 1到0的跳變。
工作方式3
方式3為(wei) 波特率可變的11位UART方式。除波特率外,其餘(yu) 與(yu) 方式2相同。
波特率選擇
如前所述,在串行通信中,收發雙方的數據傳(chuan) 送率(波特率)要有一定的約定。在8051串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控製。
方式0
方式0的波特率固定為(wei) 主振頻率的1/12。
方式2
方式2的波特率由PCON中的選擇位SMOD來決(jue) 定,可由下式表示:
波特率=2的SMOD次方除以64再乘一個(ge) fosc,也就是當SMOD=1時,波特率為(wei) 1/32fosc,當SMOD=0時,波特率為(wei) 1/64fosc
3.方式1和方式3
定時器T1作為(wei) 波特率發生器,其公式如下:
波特率=定時器T1溢出率
T1溢出率= T1計數率/產(chan) 生溢出所需的周期數
式中T1計數率取決(jue) 於(yu) 它工作在定時器狀態還是計數器狀態。當工作於(yu) 定時器狀態時,T1計數率為(wei) fosc/12;當工作於(yu) 計數器狀態時,T1計數率為(wei) 外部輸入頻率,此頻率應小於(yu) fosc/24。產(chan) 生溢出所需周期與(yu) 定時器T1的工作方式、T1的預置值有關(guan) 。
定時器T1工作於(yu) 方式0:溢出所需周期數=8192-x
定時器T1工作於(yu) 方式1:溢出所需周期數=65536-x
定時器T1工作於(yu) 方式2:溢出所需周期數=256-x
因為(wei) 方式2為(wei) 自動重裝入初值的8位定時器/計數器模式,所以用它來做波特率發生器最恰當。
當時鍾頻率選用11.0592MHZ時,取易獲得標準的波特率,所以很多單片機係統選用這個(ge) 看起來“怪”的晶體(ti) 震蕩器就是這個(ge) 道理。
下表列出了定時器T1工作於(yu) 方式2常用波特率及初值。