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

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

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

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