天天看點

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

文章目錄

  • 一、先知先會
    • 1、計算串行通信基礎
    • 2、串行通信的基本概念
    • (1)、異步通信與同步通信
      • a.異步通信
      • b、同步通信
    • (2)、串行通信的傳輸方向
    • (3)、串行通信常見的錯誤校驗
    • (4)、傳輸速率
    • (5)、傳輸距離與傳輸速率的關系
    • (6)、串行通信接口标準
      • a.RS-232C接口
      • <1>、機械特性
      • <2>、功能特性
      • <3>、過程特性
      • b.RS-232C電平與TTL電平轉換驅動電路
      • c.RS422A接口
      • d.RS-485接口
  • 二、80C51的串行口
    • 1、80C51串行口的結構
    • 2、寄存器SCON
    • 3、寄存器PCON
  • 三、串行口的工作方式
    • 1、方式0
      • a、輸出
      • b、輸入
    • 2、方式1
      • a.輸出
      • b.輸入
    • 3、方式2和方式3
      • a.輸出
      • b.輸入
  • 四、波特率的計算
  • 五、序列槽如何使用
  • 六、單片機與單片機的通信
    • 1、點對點的通信_硬體連接配接
    • 2、多機通信_硬體連接配接
  • 七、單片機序列槽的中斷号

一、先知先會

1、計算串行通信基礎

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

2、串行通信的基本概念

(1)、異步通信與同步通信

a.異步通信

​ 異步通信是指通信的發送與接收裝置使用各自的時鐘控制資料的發送和接收過程。為使雙方的收發協調,要求發送和接收裝置的時鐘盡可能一緻。

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
​ 異步通信是以

字元

(構成的幀)為

機關

進行傳輸,字元與字元之間的間隙(時間間隔)是

任意

的,但每個字元中的各位是以

固定的時間

傳送的,即

字元之間

不一定有“位間隔”的整數倍的關系,但

同一字元内

各位之間

的距離均為“位間隔”的整數倍。
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

b、同步通信

​ 同步通信時要建立

發送方

時鐘對

接收方

時鐘的

直接控制

,使雙方達到

完全同步

,。此時,傳輸資料的位之間的距離均為“位間隔”的整數倍,同時傳送的字元間不留間隙,即

保持位同步

關系,

也保持字元同步

關系。發送方對接收方的同步可以通過兩種方法實作。
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

(2)、串行通信的傳輸方向

  • 單工:資料傳輸僅能沿

    一個方向

    ,不能實作反向傳輸;
  • 半雙工:資料傳輸可以沿

    兩個方向

    ,但需要分時進行;
  • 全雙工:資料可以

    同時進行雙向

    傳輸。
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

(3)、串行通信常見的錯誤校驗

  • 奇偶校驗
    ​ 在發送資料時,資料位尾随的1位為奇偶校驗位(1或0)。奇校驗時,資料中“1”的個數與校驗位“1”的個數之和應為奇數;偶校驗時,資料中“1”的個數與校驗位“1”的個數之和應為偶數。接收字元時,對“1”的個數進行校驗,若發現不一緻,則說明傳輸資料過程中出現了差錯。
  • 代碼和校驗
    代碼和校驗是發送方将所發資料塊求和(或各位元組異或),産生一個位元組的校驗字元(校驗和)附加到資料塊末尾。接收方接收資料同時對資料塊(除校驗位元組外)求和(或各位元組異或),将所得的結果與發送方的“校驗和”進行比較,相符則無差錯,否則即認為傳送過程中出現了差錯。
  • 循環備援校驗
    這種校驗是通過某種數學運算實作有效資訊與校驗位之間的循環校驗,常用于對磁盤資訊的傳輸、存儲區的完整性校驗等。這種校驗方法糾錯能力強,廣泛應用于同步通信中。

通常使用

奇偶校驗

,其它的了解即可。

(4)、傳輸速率

比特率

(也稱

波特率

),每秒傳輸

二進制代碼

位數

,機關是:位/秒(bps)。

每秒傳送240個字元,而每個字元格式包含10位(1個起始位、1個停止位、8個資料位),這時的比特率為: 10位× 240個/秒 = 2400 bps

(5)、傳輸距離與傳輸速率的關系

​ 串行接口或終端直接傳送串行資訊位流的最大距離與傳輸速率及傳輸線的電氣特性有關。當傳輸線使用每0.3米(約1英尺)有50PF電容的非平衡屏蔽雙絞線時,傳輸距離随傳輸速率的增加而減小。當比特率超過1000bps時,最大傳輸距離迅速下降。

9600bps時,最大距離下降到隻有76m(約250英尺)。

就是說【傳輸

速度越

大,傳輸

距離

越小】。

(6)、串行通信接口标準

a.RS-232C接口

RS-232C是EIA(美國電子工業協會)1969年修訂RS-232C标準。RS-232C定義了資料終端裝置(DTE)與資料通信裝置(DCE)之間的實體接口标準。

<1>、機械特性

​ RS-232C接口規定使用25針連接配接器,連接配接器的尺寸及每個插針的排 列位置都有明确的定義。(陽頭)
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

<2>、功能特性

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

<3>、過程特性

過程特性規定了

信号之間的時序關系

,以便正确地接收和發送資料。
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

注意:是

發送

接收

相接,别連錯了

b.RS-232C電平與TTL電平轉換驅動電路

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

MC1488

晶片,将

TTL電平

轉換

RS-232電平

,即将

5V

轉換為

12V

進行通信。

MC1489

晶片,将

RS-232電平

轉換為

TTL電平

,即将

12V

轉換為

5V

進行通信。
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

c.RS422A接口

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
​ RS-422A

輸出驅動器為雙端平衡驅動器

。如果其中一條線為邏輯“1”狀态,另一條線就為邏輯“0”,比采用單端不平衡驅動對電壓的放大倍數大一倍。

差分電路

能從地線幹擾中拾取有效信号,差分接收器可以分辨200mV以上電位差。若傳輸過程中混入了幹擾和噪聲,由于差分放大器的作用,可使幹擾和噪聲互相抵消。是以可以避免或大大減弱地線幹擾和電磁幹擾的影響。

RS-422A傳輸速率(90Kbps)時,傳輸距離可達1200米。

d.RS-485接口

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
​ RS-485是RS-422A的變型:RS-422A用于全雙工,而RS-485則用于半雙工。RS-485是一種

多發送器

标準,在通信線路上最多可以使用32 對差分驅動器/接收器。如果在一個網絡中連接配接的裝置超過32個,還可以使用中繼器。

RS-485的信号傳輸采用兩線間的電壓來表示邏輯1和邏輯0。由于發送方需要

兩根傳輸線

,接收方也需要兩根傳輸線。傳輸線采用差動信道,是以它的幹擾抑制性極好,又因為它的阻抗低,無接地問題,是以

傳輸距離可達1200米

,傳輸速率可達1Mbps。

二、80C51的串行口

1、80C51串行口的結構

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
​ 有兩個實體上獨立的

接收、發送緩沖器SBUF

,它們占用同一位址99H ;接收器是雙緩沖結構 ;發送緩沖器,因為發送時CPU是主動的,不會産生

重疊錯誤。

2、寄存器SCON

​ SCON 是一個特殊功能寄存器,用以設定串行口的工作方式、接收/發送控制。

其設定狀态标志:

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

SM0和SM1為工作方式選擇位,可選擇四種工作方式:

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
通常使用方式1
  • SM2,

    多機通信控制位

    ,主要用于

    方式2

    方式3

    接收機的SM2=1時可以利用的RB8來控制是否激活RI

    • RB8=0,不激活

      RI

      ,收到的資訊丢棄;
    • RB8=1,收到的資料進入

      SBUF

      ,并激活

      RI

      ,進而在中斷服務中将資料從

      SBUF

      讀走。

    SM2=0

    ,不論收到的

    RB8

    為0還是1,均可以使收到的資料進入

    SBUF

    ,并激活

    RI

    。(即此時RB8

    不控制

    RI的激活)。【通過控制

    SM2

    ,可以實作多機通信】。

注意:在

方式0

時,

SM2

必須為0;在

方式1

時,如果

SM2=1

,則隻有接收到

有效停止位

時,

RI

才置1。

  • REN

    ,允許串行接收位。

    軟體

    REN=1

    ,則

    啟動

    串行口接收資料;

    若軟體置

    REN=0

    ,則

    進制接收

  • TB8

    ,在方式2或方式3中,是發送資料的

    第九位

    ,可以用

    軟體規定其作用

    可以用作資料的

    奇偶校驗位

    或在多機通信中,作為

    位址幀/資料幀

    的标志位。(在方式0和方式1中,該位未用)
  • RB8

    ,在方式2或方式3中,是接收到資料的

    第九位

    作為

    奇偶校驗位

    位址幀/資料幀

    的标志位。(在方式1時,若

    SM2=0

    ,則

    RB8

    是接收到的停止位。
  • TI

    ,發送中斷标志位。
    在方式0時,當串行發送第8位資料結束時,或在其它方式,串行發送停止位的開始時,由内部硬體使TI置1,向CPU發中斷申請。在中斷服務程式中,

    必須

    軟體清零

    ,取消中斷申請。
  • RI

    ,接收中斷标志位。
    在方式0時,當串行接收第8位資料結束時,或在其它方式,串行接收停止位的中間時,由内部硬體使

    RI=1

    ,向CPU發中斷申請。也

    必須

    在中斷服務程式中,用

    軟體清零

    ,取消此中斷。

    3、寄存器PCON

PCON中隻有一位SMOD與串行口工作有關 :
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

SMOD

(PCON.7) 波特率倍增位。在串行口方式1、方式2、方式3時,波特率與SMOD有關,當SMOD=1時,波特率提高一倍。複位時,SMOD=0。

三、串行口的工作方式

1、方式0

a、輸出

​ 方式0時,串行口為

同步移位

寄存器的輸入輸出方式。主要用于擴充并行輸入或輸出口。

資料由

RXD

(P3.0)引腳輸入或輸出,同步移位脈沖由

TXD

(P3.1)引腳輸出。發送和接收均為8位資料,低位在先,高位在後。

波特率固定為fosc/12。

1、方式0輸出
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
當發送完最後一位,會産生

中斷标志

b、輸入

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
當接收完最後一位,會産生

中斷标志

2、方式1

​ 方式1是

10位資料的異步通信口

TXD

為資料發送引腳,

RXD

為資料接收引腳,傳送一幀資料的格式如圖所示。其中

1位起始位,8位資料位,1位停止位

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

a.輸出

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
發送的時候,

後高

b.輸入

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

起始位

開始接收,直到接收到

停止位

RI

中斷标志置1。

​ 用

軟體

REN

置為1時,

接收器

所選擇波特率的16倍速率

采樣

RXD

引腳電平,檢測到

RXD

引腳輸入電平發生

負跳變

時,則說明

起始位有效

,将其移入

輸入移位寄存器

中,并開始接收這一幀資訊的其餘位。(一幀資訊包括

起始位

資料位(D0~7)

停止位

)。

​ 接收過程中,資料從

輸入移位寄存器

右邊

移入,起始位移至

輸入移位寄存器

最左邊

時,控制電路進行最後一次移位。當

RI=0

,且

SM2=0

(或接收到的停止位為1)時,将接收到的9位資料的前8位資料裝入接收

SBUF

,第9位(停止位)進入

RB8

,并且置

RI=1

,向CPU請求中斷。

3、方式2和方式3

​ 方式2或方式3時為11位資料的異步通信口。TXD為資料發送引腳,RXD為資料接收引腳 。
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
​ 方式2和方式3時起始位1位,資料9位(含1位附加的第9位,

發送時

SCON

中的

TB8

接收時

RB8

),停止位1位,一幀資料為11位。
  • 方式2的波特率固定為晶振頻率的1/64或1/32;
  • 方式3的波特率由定時器T1的溢出率決定。

a.輸出

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
​ **

發送

**開始時,先把

起始位

0輸出到

TXD

引腳,然後

發送移位寄存器

輸出位

D0

)到

TXD

引腳。每一個

移位脈沖

都使輸出移位寄存器的

各位右移

一位,并由

TXD

引腳輸出。

​ 第一次移位時,

停止位

“1”移入輸出移位寄存器的

第9位

上 ,以後每次移位,

左邊都移入0

。當

停止位移至輸出位

時,左邊其

餘位全為0

,檢測電路檢測到這一條件時,使控制電路進行最後一次移位,并置

TI=1

,向CPU請求中斷。

b.輸入

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

接收

時,資料從右邊移入輸入移位寄存器,在起始位0移到最左邊時,控制電路進行最後一次移位。當

RI=0

,且

SM2=0

(或接收到的第9位資料為1)時,接收到的資料裝入

接收緩沖器SBUF

RB8

(接收資料的第9位),置

RI=1

,向CPU請求中斷。如果條件不滿足,則資料丢失,且

不置位RI

,繼續搜尋

RXD

引腳的負跳變。

四、波特率的計算

在串行通信中,收發雙方對發送或接收資料的速率要有約定。

通過軟體可對單片機串行口程式設計為四種工作方式,其中方式0和

方式2的波特率是固定的,而方式1和方式3的波特率是可變的,

由定時器T1的溢出率來決定。

串行口的四種工作方式對應三種波特率。由于輸入的移位時鐘的來源不同,是以,各種方式的波特率計算公式也不相同。

  • 方式0的波特率 = fosc/12
  • 方式2的波特率 =(2SMOD/64)· fosc
  • 方式1的波特率 =(2SMOD/32)·(T1溢出率)
  • 方式3的波特率 =(2SMOD/32)·(T1溢出率)
方式1和方式3的波特率是

固定

的,而我們

常用

的是方式1
【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
初值即為

TH1

五、序列槽如何使用

串行口工作之前,應對其進行初始化,主要是設定産生波特率的定時器1、串行口控制和中斷系統。具體步驟:

  • 确定

    T1的工作方式

    (程式設計

    TMOD

    寄存器);
  • 計算

    T1的初值

    ,裝載

    TH1

    TL1

    ;
  • 啟動T1

    (程式設計

    TCON

    中的

    TR1

    位);
  • 确定

    串行口控制

    (程式設計

    SCON

    寄存器);

**注意:**串行口在中斷方式工作時,要進行

中斷設定

(程式設計

IE

IP

寄存器)。

#include "reg52.h"			

typedef unsigned int u16;	
typedef unsigned char u8;

void UsartInit()
{/* 此處配置的波特率是為4800,波特率加倍*/
	
	TMOD|=0x20;//選擇工作方式2:8位自動重裝載的定時器
	TH1=0xF4;//8位自動重裝,是以上下兩個一樣
	TL1=0xF4;
	PCON=0x80;//設定SMOD,PCON是不可位尋址,波特率加倍
	TR1=1;//啟動定時器1
	SCON=0x50;//SM0=0,SM1=1,即為方式1:8位資料、波特率可變;REN=1 允許串行接收位
	ES=1;//打開序列槽中斷
	EA=1;//打開總中斷
}

void main()
{	
	UsartInit();
	while(1);		
}

void Usart() interrupt 4
{
	u8 receiveData;
	receiveData=SBUF;//讀取接收緩沖器中的資料
	RI=0;//接收完成後,硬體自動置1,需要軟體清零
	SBUF=receiveData;//傳遞資料時,把資料存入傳輸緩沖器中
	while(!TI);
	TI=0;//發送完成後,硬體自動置1,需要軟體清零
}


           

六、單片機與單片機的通信

1、點對點的通信_硬體連接配接

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
通過2個

MAX232A

晶片。

将單片機1的

TTL

電平通過

MAX232A晶片1

轉換為

RS232

電平,再由

MAX232A晶片1

MAX232A晶片2

進行通信,再由

MAX232A晶片2

轉為

TTL

電平,來進行

單片機間

的通信。

2、多機通信_硬體連接配接

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号
單片機構成的多機系統常采用總線型主從式結構。所謂

主從式

,即在數個單片機中,有一個是主機,其餘的是從機,從機要服從主機的排程、支配。

80C51單片機的串行口方式2和方式3适于這種主從式的通信結構。

當然采用

不同的通信标準

時,還需進行

相應的電平轉換

,有時還要對信号進行光電隔離。在實際的多機應用系統中,常采用

RS-485

串行标準總線進行資料傳輸。

七、單片機序列槽的中斷号

【單片機學習】51單片機【序列槽】,詳細介紹一、先知先會二、80C51的串行口三、串行口的工作方式四、波特率的計算五、序列槽如何使用六、單片機與單片機的通信七、單片機序列槽的中斷号

繼續閱讀