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