80C51單片機串行通信工作方式
1. 串行工作方式0在方式0下,串行口是作為同步移位寄存器使用。這時以RXD(P3.0)端作為數(shù)據(jù)移位的入口和出口,而由TXD(P3.1)端提供移位脈沖。移位數(shù)據(jù)的發(fā)送和接收以8位為一幀,不設起始位和停止位,低位在前高位在后。其幀格式為:
.... | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | ...... |
使用方式0實現(xiàn)數(shù)據(jù)的移位輸入輸出時,實際上是把串行口變成并行口使用。
串行口作為并行輸出口使用時,要和CD4049或74LS164配合使用,其電路連接如圖10。
圖(b)為74LS164的引腳圖,芯片各引腳功能如下:
Q0~Q7為并行輸出引腳。
DSA、DSB為 串行輸入引腳。
清零引腳,低電平時,使74LS164輸出清零。
CP為時鐘脈沖輸入引腳,在CP脈沖的上升沿作用下實現(xiàn)移位。在CP=0, =1時,74LS164保持原來數(shù)據(jù)狀態(tài)不變。
利用串行口與74LS164實現(xiàn)八位串入并行輸出的連接如圖(a)所示,當8位數(shù)據(jù)全部移出后,SCON寄存器的TI位被自動置1。用P1.0輸出低電平可將164輸出清零。
如果把能實現(xiàn)“并入串出”功能的CD4014或74LS165與串行口配合使用,就可以把串行口變?yōu)椴⑿休斎肟谑褂。如圖所示。
圖(b)為74LS165引腳圖,當 =1時,允許串行移位, =0時允許并行輸入。當CPINH=1時,從CP引腳輸入的每一個正脈沖使QH輸出移位一次。REN=0,
并行輸入
禁止接收;REN=1,允許接收。當軟件置位REN時,即開始從RXD端以fosc/12波特率輸入數(shù)據(jù)(低位在前),當接收到8位數(shù)據(jù)時,置位中斷標志RI,在中斷處理程序中將REN清零停止接收數(shù)據(jù),并用P1.0引腳將清零,停止串行輸出,轉(zhuǎn)而并行輸入。當SBUF中的數(shù)據(jù)取走后,再將REN置1準備接收數(shù)據(jù),并用用P1.0將 置1,停止并行輸入,轉(zhuǎn)串行輸出。
(2)波特率
方式0時,移位操作的波特率是固定的,波特率=fosc/12。
(3) 應用舉例
例1 使用74LS164的并行輸出端接8支發(fā)光二極管,利用它的串入并出功能,把發(fā)光二極管從右向左依次點亮,并反復循環(huán)之。
假定發(fā)光二極管為共陰極型,則電路連接如圖所示。
當串行口把8位狀態(tài)碼串行移位輸出后,TI置1。如把TI作為狀態(tài)查詢標志,則使用查詢方法完成的參考程序如下:
注意:串行口先移出最低位D0,而74LS164通過同步脈沖移到Q0,隨著8個字節(jié)的逐步移出,D0位通過8個同步脈沖移到Q7。
此外,串行口并行I/O擴展功能還常用于LED顯示器接口電路。
2.串行工作方式1
方式1是10位為一幀的異步串行通信方式。共包括1個起始位,8個數(shù)據(jù)位和1個停止位。其幀格式為:
起始位<?XML:NAMESPACE PREFIX = O /> | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 停止 |
方式1的數(shù)據(jù)發(fā)送是由一條寫發(fā)送寄存器(SBUF)指令開始的。隨后在串行口由硬件自動加入起始位和停止位,構(gòu)成一個完整的幀格式,然后在移位脈沖的作用下,由TXD端串行輸出。一個字符幀發(fā)送完后,使TXD輸出線維持在“1”(space)狀態(tài)下,并將SCON寄存器的TI置1,通知CPU可以發(fā)送下一個字符。用動畫
接收數(shù)據(jù)時,SCON的REN位應處于允許接收狀態(tài)(REN=1)。在此前提下,串行口采樣RXD端,當采樣到從1向0的狀態(tài)跳變時,就認定是接收到起始位。隨后在移位脈沖的控制下,把接收到的數(shù)據(jù)位移入接收寄存器中。直到停止位到來之后把停止位送入RB8中,并置位中斷標志位RI,通知CPU從SBUF取走接收到的一個字符。
(2)波特率設定
方式0 的波特率是固定的,一個機器周期進行一次移位。但方式1的波特率是可變的,其波特率由定時器1的計數(shù)溢出來決定,其公式為: 其中
smod為PCON寄存器最高位的值,smod=1表示波特率加倍,定時器的工作于方式2。
3.串行工作方式2
方式2是11位一幀的串行通信方式,即1個起始位,9個數(shù)據(jù)位和1個停止位。
在方式2下,字符還是8個數(shù)據(jù)位。而第9數(shù)據(jù)位即可作奇偶校驗位使用,也可作控制使用,其功能由用戶確定,發(fā)送之前應先在SCON中的TB8準備好,再向SBUF寫入字符的8個數(shù)據(jù)位,并以此來啟動串行發(fā)送。一個字符幀發(fā)送完畢后,將TI位置1,其過程與方式1相同。方式2的接收過程也與方式1基本類似,所不同的在于第9數(shù)據(jù)位上,串行口把接收到的8位數(shù)據(jù)送入SBUF,而把第9數(shù)據(jù)位送入RB8。
方式2的波特率是固定的,波特率=2smod╳fosc/64
與PCON寄存器中SMOD位的值有關。
4.串行工作方式3
方式3同樣是11位為一幀的串行通信方式(1個起始位,9個數(shù)據(jù)位和1個停止位)其通信過程與方式2完全相同,所不同的僅在于波特率。而方式3的波特率則可由用戶根據(jù)需要設定。其設定方式與方式1一樣,即通過設置定時器1的初值來設定波特率。
5.串行口四種工作方式的比較
四種工作方式的區(qū)別主要表現(xiàn)在幀格式及波特率兩個方面。見表1。
表1 四種工作方式--幀格式及波特率
在串行通信中,收發(fā)雙方對發(fā)送或接收的速率要有約定。通過軟件可對單片機串行接口編程。
在單片機的應用中,常用的晶振頻率為:12MHz和11.0592MHz。所以,選用的波特率也相對固定。常用的串行接口波特率以及各參數(shù)的關系如表2所示。
表2 常用波特率與定時器1的關系位置
在使用串行口前,應對其進行初始化,主要是設置產(chǎn)生波特率的定時器1、串行接口控制和中斷控制。具體步驟如下:
①確定T1的工作方式(編程TMOD寄存器);
②計算T1的初值,裝載TH1、TL1;
③啟動T1(編程TCON中的TR1位);
④確定串行接口控制(編程SCON寄存器);
⑤串行接口在中斷方式工作時,要進行中斷設置(編程IE、IP寄存器)。
表3 常用波特率與定時器1的關系位置
在使用串行口前,應對其進行初始化,主要是設置產(chǎn)生波特率的定時器1、串行接口控制和中斷控制。具體步驟如下:
①確定T1的工作方式(編程TMOD寄存器);
②計算T1的初值,裝載TH1、TL1;
③啟動T1(編程TCON中的TR1位);
④確定串行接口控制(編程SCON寄存器);
⑤串行接口在中斷方式工作時,要進行中斷設置(編程IE、IP寄存器)。
編輯:admin 最后修改時間:2018-06-27