如何采用51單片機實現(xiàn)串口通訊的設(shè)計?
STC51單片機一般帶有1個串口,有的帶有2個串口,串口一般用于下載程序和串口通信。串口通信特別適合控制設(shè)備,所以工控機的電腦上一般都帶有串口。51單片機的串口引腳為P3.0引腳與P3.1引腳,分別是RXD和TXD引腳。串口通信可以用于單片機和其它芯片通信或者單片機之間通信或者單片機與電腦通信。串口通信一般都是交叉連接。標準的串口有9個引腳,我們一般情況下,只用RXD TXD GND,剩下的引腳都是通信控制引腳,在以前用于控制電話機,現(xiàn)在已經(jīng)基本上不用了。所以我們的51單片機上只保留了RXD和TXD。
51單片機串行口結(jié)構(gòu)描述
1、串行口結(jié)構(gòu)
51單片機的串行口是一個可編程全雙工的通信接口,具有UART(通用異步收發(fā)器)的全部功能,能同時進行數(shù)據(jù)的發(fā)送和接收,也可作為同步移位寄存器使用。
51單片機可以通過特殊功能寄存器SBUF對串行接收或串行發(fā)送寄存器進行訪問,兩個寄存器公用一個地址99H,注意:在物理上這是兩個獨立的寄存器, 只是共用一個地址而已,由指令操作決定訪問哪一個寄存器。即a=SBUF接收和SBUF=a發(fā)送。
2、串行口控制寄存器SCON
SCON 是一個特殊功能寄存器,字節(jié)地址為98H,可位尋址,用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標志等,單片機復(fù)位時,SCON全部被清0.
SM2,多機通信控制位,主要用于方式2和方式3。當(dāng)接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,并激活RI,進而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時,不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進入SBUF,并激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2,可以實現(xiàn)多機通信。在方式0時,SM2必須是0。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1。
●REN,允許串行接收位。由軟件置REN=1,則啟動串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收。
●TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用??梢杂米鲾?shù)據(jù)的奇偶校驗位,或在多機通信中,作為地址幀/數(shù)據(jù)幀的標志位。在方式0和方式1中,該位未用。
●RB8,在方式2或方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。
●TI,發(fā)送中斷標志位。在方式0時,當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行發(fā)送停止位的開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請。
●RI,接收中斷標志位。在方式0時,當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行接收停止位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請。
說明:通過上面串行口控制寄存器SCON的介紹,可以看出在使用串行口工作方式1的情況下,設(shè)置SCON各位如下:SM0=0,SM1=1,SM2=0,REN=1,其余各位TB8,RB8,TI,RI都不用設(shè)置即都為0。
四、串行口方式1編程與實現(xiàn)
串行口方式1是最常用的通信方式,所以這里主要介紹方式1,學(xué)會一種其他方式也是大同小異。
軟件方面,由于是用串口進行"并行"通信,因此就不能將串口的工作方式設(shè)置為方式0(移位寄存器輸入/輸出方式)以外的其他方式。還要注意此時串口的波特率固定為單片機外接晶振頻率的1/12。串行數(shù)據(jù)通過RXD輸入/輸出,TXD用于發(fā)送控制輸入輸出數(shù)據(jù)移位的時鐘脈沖。收發(fā)的數(shù)據(jù)為8位,低位在前。
現(xiàn)在單片機的應(yīng)用越來越廣泛,單片機與PC之間的通信是一個非常重要的應(yīng)用。如果單純的從實現(xiàn)單片機與PC的并行通信的角度來說,該實現(xiàn)方法并不是最簡單的。最簡單的方法是將PC的并口對應(yīng)引腳與單片機的P1口和P3口直接相連,然后軟件上實現(xiàn)。