串行口的工作方式0為同步移位寄存器輸入/輸出方式。這種方式并不是用于兩個AT8 9 S51單片機之間的異步串行通信,而是用于串行口外接移位寄存器,以擴展并行I/O口。
方式0以8位數(shù)據(jù)為一幀,沒有起始位和停止位,先發(fā)送或接收最低位。波特率是固定的,為fosc/12。方式0的幀格式如下圖所示。
1.方式0發(fā)送
(1)方式0發(fā)送過程。
方式0發(fā)送過程是,當CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令時,產(chǎn)生一個正脈沖,串行口開始把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù),中斷標志位TI置1。方式0發(fā)送時序如下圖所示。
(2)方式0發(fā)送應(yīng)用舉例。
下圖所示為AT89S51利用方式O發(fā)送的一個具體應(yīng)用,通過串行口外接8位串行輸入并行輸出移位寄存器74LS164,擴展兩個8位并行輸出口的具體電路。
當串行口被設(shè)置在方式0發(fā)送狀態(tài)時,串行數(shù)據(jù)由P3.0(RXD端)送出,移位脈沖由P3.1(TXD端)送出。在移位脈沖的作用下,串行口發(fā)送緩沖器的數(shù)據(jù)逐位地從P3.0串行移入74LS164中。
2.方式0接收
(1)方式0接收過程。
方式0接收時,REN為串行口允許接收控制位,REN=0,禁止接收;REN=1,允許接收。
當CPU向串行口的SCON寄存器寫入控制字(設(shè)置為方式0,并使REN位置1,同時RI=0)時,產(chǎn)生一個正脈沖,串行口開始接收數(shù)據(jù)。引腳RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號輸出端,接收器以fsc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當接收器接收完8位數(shù)據(jù)時,中斷標志RI置1,表示一幀數(shù)據(jù)接收完畢,可進行下一幀數(shù)據(jù)的接收,時序如下圖所示。
(2)方式0接收應(yīng)用舉例。
下圖所示為串行口外接兩片8位并行輸入串行輸出的寄存器74LS165擴展兩個8位并行輸入口的電路。
當74LS165的S/L(的反)端由高到低跳變時,并行輸入端的數(shù)據(jù)被置人寄存器;當S/L(的反)=1,且時鐘禁止端(第15腳)為低電平時,允許TXD(P3.1)串行移位脈沖輸入,這時在移位脈沖作用下,數(shù)據(jù)由右向左方向移動,以串行方式進入串行口的接收緩沖器中。
在上圖中,P3. 1(TXD)作為移位脈沖輸出與所有75LS165的移位脈沖輸入端CP相連;P3. 0(RXD)作為串行數(shù)據(jù)輸入端與74LS165的串行輸出端QH相連;P1.0與S/L(的反)相連,用來控制74LS165的串行移位或并行輸入;74LS165的時鐘禁止端(第15腳)接地,表示允許時鐘輸入。當擴展多個8位輸入口時,相鄰兩芯片的首尾(QH與SIN)相連。
在方式0下,SCON中的TB8、RB8位沒有用到,發(fā)送或接收完8位數(shù)據(jù)由硬件使TI或RI中斷標志位置1,CPU響應(yīng)TI或RI中斷,在中斷服務(wù)程序中向發(fā)送SBUF中送入下一個要發(fā)送的數(shù)據(jù)或從接收SBUF中把接收到的1B存入內(nèi)部RAM中。注意,TI或RI標志位必須由用戶軟件清0,可采用如下指令:
來把TI或RI清0。方式0時,SM2位(多機通信控制位)必須為0。