一、89C51單片機(jī)的串行接口結(jié)構(gòu)
89C51單片機(jī)通過(guò)引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界通訊。SBUF是串行口緩沖寄存器,包括發(fā)送寄存器和接收寄存器。它們有相同名字和地址空間,但不會(huì)出現(xiàn)沖突,因?yàn)樗鼈兤渲幸粋€(gè)只能被CPU讀出數(shù)據(jù),另一個(gè)只能被CPU寫(xiě)入數(shù)據(jù)。
二、串行口的控制與狀態(tài)寄存器
SCON用于定義串行口的工作方式及實(shí)施接收和發(fā)送控制。其各位定義如表1:
SM2:多機(jī)通訊控制位。本文不使用,編程時(shí)置0即可。
REN:接收允許控制位。由軟件置位以允許接收,又由軟件清0來(lái)禁止接收。
TB8:要發(fā)送數(shù)據(jù)的第9位。可約定作為奇偶校驗(yàn)位。
RB8:接收到的數(shù)據(jù)的第9位。在方式0中不使用RB8。在方式1中,若SM2=0,其為接收到的停止位。
TI:發(fā)送中斷標(biāo)志。在方式0中,第8位發(fā)送結(jié)束時(shí),由硬件置位。在其它方式的發(fā)送停止位前,由硬件置位。必須用軟件清0。
RI:接收中斷標(biāo)志位。在方式0,當(dāng)接收完第8位數(shù)據(jù)后,由硬件置位。在其它方式中,在接收到停止位的中間時(shí)刻由硬件置位。RI也必須用軟件清0。
1:方式1,3波特率=定時(shí)器1溢出率/16;方式2波特率為Fosc/32。
0:方式1,3波特率=定時(shí)器1溢出率/32;方式2波特率為Fosc/64
四種工作方式分別為方式0、方式1、方式2、方式3:
(1)方式0為移位寄存器輸入/輸出方式。(2)方式1為波特率可變的10位異步通訊接口方式。(3)方式2為固定波特率的11位異步通訊接口方式。(4)方式3為波特率可變的11位異步通訊接口方式。
三、波特率的選擇
在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在89C51串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時(shí)器T1的溢出率控制。
A、方式0:波特率固定為晶振頻率的1/12。B、方式2:波特率由PCON中的選擇位SMOD來(lái)決定:SMOD=1:波特率為1/32fosc,SMOD=0:波特率為1/64fosc。C、方式1和方式3:定時(shí)器T1作為波特率發(fā)生器,其公式如下:波特率=定時(shí)器T1溢出率乘2的SMOD次方除以32;T1溢出率=T1計(jì)數(shù)率/產(chǎn)生溢出所需的周期數(shù)。當(dāng)時(shí)鐘頻率選用11.0592MHZ時(shí),容易獲得標(biāo)準(zhǔn)的波特率,所以很多單片機(jī)系統(tǒng)選用這個(gè)頻率的晶振。
四、串口調(diào)試實(shí)驗(yàn)
我們首先要做的是串口的初始化:(1)確定定時(shí)器1的工作方式———編程TMOD寄存器;(2)計(jì)算定時(shí)器1的初值———裝載TH1,TL1;(3)啟動(dòng)定時(shí)器1———編程TCON中的TR1位;(4)確定串行口的工作方式———編程SCON;(5)串行口在中斷方式工作時(shí),須開(kāi)CPU和源中斷———編程IE寄存器。
初始化以后就進(jìn)行串口與PC機(jī)的通訊實(shí)驗(yàn),本實(shí)驗(yàn)是在PC端向單片機(jī)發(fā)送數(shù)據(jù),然后單片機(jī)把PC發(fā)送的數(shù)據(jù)送回PC端,同時(shí)單片機(jī)控制一個(gè)led燈閃爍。這里我們使用基于VC++編寫(xiě)的PC端串口工具來(lái)完成調(diào)試。
五、結(jié)束語(yǔ)
串口通信因簡(jiǎn)單高效而得到了廣泛的應(yīng)用,本文介紹了89C51單片機(jī)的串口通信原理,對(duì)其內(nèi)部結(jié)構(gòu)如串行口控制寄存器SCON和電源控制寄存器PCON進(jìn)行了詳細(xì)剖析,研究了4種工作方式下的波特率選擇問(wèn)題,最后進(jìn)行了實(shí)際的RS232串口通信實(shí)驗(yàn),利用中斷方式靈活地實(shí)現(xiàn)了單片機(jī)與PC機(jī)的串口通信。