單片機(jī)的通信一般有并行通信和串行通信。并行通訊是數(shù)據(jù)的各位同時(shí)發(fā)送或接收,并行通信控制簡單,傳輸速度快,傳輸線較多。
參看下圖:
串行通訊傳輸線少,可利用電話網(wǎng),但傳送控制復(fù)雜。數(shù)據(jù)一位一位順序發(fā)送或接收。
串行通訊中有一種是異步通信,即我們通常所說的串口通信。這是我們今天要分享的內(nèi)容: 異步通訊用一個(gè)起始位表示字符的開始,用停止位表示字符的結(jié)束。其每幀的格式如下:在一幀格式中,先是一個(gè)起始位0,然后是8個(gè)數(shù)據(jù)位,規(guī)定低位在前,高位在后,接下來是奇偶校驗(yàn)位(可以省略),最后是停止位1。用這種格式表示字符,則字符可以一個(gè)接一個(gè)地傳送。
一、在異步通訊中,CPU與外設(shè)之間必須有兩項(xiàng)規(guī)定,即字符格式和波特率。 1、字符格式的規(guī)定是雙方能夠在對同一種0和1的串理解成同一種意義,即我們所說的通信協(xié)議。 2、波特率即數(shù)據(jù)傳送的速率,其定義是每秒鐘傳送的二進(jìn)制數(shù)的位數(shù)。例如,數(shù)據(jù)傳送的速率是120字符/s,而每個(gè)字符如上述規(guī)定包含10數(shù)位,則傳送波特率為1200波特。
二、通訊方向。 1、在串行通訊中,把通訊接口只能發(fā)送或接收的單向傳送方法叫單工傳送。 2、把數(shù)據(jù)在甲乙兩機(jī)之間的雙向傳遞,稱之為雙工傳送。在雙工傳送方式中又分為半雙工傳送和全雙工傳送。半雙工傳送是兩機(jī)之間不能同時(shí)進(jìn)行發(fā)送和接收,任一時(shí)該,只能發(fā)或者只能收信息。
接下來我們分享下單片機(jī)串口的結(jié)構(gòu)和寄存器相關(guān)的知識(shí)。
51單片機(jī)通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界通訊。SBUF是串行口緩沖寄存器,包括發(fā)送寄存器和接收寄存器。它們有相同名字和地址空間,但不會(huì)出現(xiàn)沖突,因?yàn)樗鼈儍蓚(gè)一個(gè)只能被CPU讀出數(shù)據(jù),一個(gè)只能被CPU寫入數(shù)據(jù)。

TH1和TL1是裝計(jì)數(shù)初值的計(jì)數(shù)器,用于產(chǎn)生波特率。TI是發(fā)送標(biāo)志位,RI是接收標(biāo)志位,具體作用我們會(huì)在下面的分享中接觸到。 下面我們看看單片機(jī)串口相關(guān)的寄存器:
一、工作方式寄存器SCON 位 D7 D6 D5 D4 D3 D2 D1 D0 功能 SM0 SM1 SM2 REN TB8 RB8 TI RI

其中fosc為晶振頻率
SM2:多機(jī)通訊控制位。在方式0時(shí),SM2一定要等于0。在方式1中,當(dāng)(SM2)=1則只有接收到有效停止位時(shí),RI才置1。在方式2或方式3當(dāng)(SM2)=1且接收到的第九位數(shù)據(jù)RB8=0時(shí),RI才置1。 REN:接收允許控制位。由軟件置位以允許接收,又由軟件清0來禁止接收。 TB8:是要發(fā)送數(shù)據(jù)的第9位。 RB8:接收到的數(shù)據(jù)的第9位。 TI:發(fā)送中斷標(biāo)志。在方式0中,第8位發(fā)送結(jié)束時(shí),由硬件置位。TI置位既表示一幀信息發(fā)送結(jié)束,同時(shí)也是申請中斷,可根據(jù)需要,用軟件查詢的方法獲得數(shù)據(jù)已發(fā)送完畢的信息,或用中斷的方式來發(fā)送下一個(gè)數(shù)據(jù)。TI必須用軟件清0。 RI:接收中斷標(biāo)志位。在方式0,當(dāng)接收完第8位數(shù)據(jù)后,由硬件置位。RI置位表示一幀數(shù)據(jù)接收完畢,可用查詢的方法獲知或者用中斷的方法獲知。RI也必須用軟件清0。
波特率的概念: 波特率的定義:串行口每秒鐘發(fā)送的位數(shù)稱為波特率。比如說2400的波特率就是每秒鐘發(fā)送2400個(gè)位數(shù)。串行口的波特率是用定時(shí)器T1作為波特率發(fā)生器的,這是定時(shí)器自動(dòng)設(shè)置在工作方式2(可自動(dòng)重裝初值)。 

接下來我們分享下怎樣通過編程實(shí)現(xiàn)串口通信,串口的操作步驟:
一、先設(shè)置波特率:
設(shè)置定時(shí)器T1為工作方式2(設(shè)置TMOD寄存器)
給計(jì)數(shù)器賦初值(工作方式2會(huì)自動(dòng)重裝)
二、設(shè)置串口工作方式:
設(shè)置SCON
如果使用中斷方式,那么打開相應(yīng)的中斷和總中斷。
三、打開定時(shí)器T1,開始產(chǎn)生波特率。
四、設(shè)置TRx
下面我們看個(gè)例程:
|