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