51单片机入门学习 第八天
提示:今天是學習51單片機的第八天,以下就是今天的筆記(我買的是普中的開發(fā)板,學習筆記是根據普中的視頻進行學習)今天學習的內容是中斷和串口通信。
目錄
中斷系統(tǒng)
1.中斷
1.1中斷介紹
1.2中斷結構及相關寄存
2.外部中斷
2.1 外部中斷介紹
2.2 外部中斷配置
2.3 硬件設計
2.4 軟件設計
3.定時器中斷?
3.1 定時器介紹
3.2 定時器配置
3.3 硬件設計?
3.4 軟件設計
串口通信實驗
1.通信的基本概念
2.單片機串口介紹
2.1 串口通信簡介
2.2 串口相關寄存器
2.3 串口工作方式
2.4 串口的使用方法
3.硬件設計
4.軟件設計
中斷系統(tǒng)
我們通過介紹 51 單片機 IO 口學習了很多相關的實驗。從最簡單的 LED 到數碼管動態(tài)掃描再到 LED 點陣體現(xiàn)學習 51 單片 機 IO 口操作的重要性。學習 51 單片機的重點及難點主要有中斷、定時器、串口等內容。
1.中斷
-
1.1中斷介紹
-
1.2中斷結構及相關寄存
2.外部中斷
- 2.1 外部中斷介紹
- 2.2 外部中斷配置
- 2.3 硬件設計
- 2.4 軟件設計?
3.定時器中斷
- 3.1 定時器介紹
- 3.2 定時器配置
- 3.3 硬件設計
- 3.4 軟件設計
1.中斷
1.1中斷介紹
中斷是為使單片機具有對外部或內部隨機發(fā)生的事件實時處理而設置的, 中斷功能的存在,很大程度上提高了單片機處理外部或內部事件的能力。它也是 單片機最重要的功能之一。對于單片機來講,中斷是指 CPU 在處理某一事件 A 時,發(fā)生了另一事件 B, 請求 CPU 迅速去處理(中斷發(fā)生);CPU 暫時停止當前的工作(中斷響應), 轉去 處理事件 B(中斷服務);待 CPU 將事件 B 處理完畢后,再回到原來事件 A 被 中斷的地方繼續(xù)處理事件 A(中斷返回),這一過程稱為中斷。
?引起 CPU 中斷的根源稱為中斷源。中斷源向 CPU 提出中斷請求,CPU 暫時 中斷原來的事務 A,轉去處理事件 B,對事件 B 處理完畢后,再回到原來被中斷 的地方(即斷點),稱為中斷返回。實現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷 機構)。 當中央處理機 CPU 正在處理某件事的時候外界發(fā)生了緊急事件請求,要求 CPU 暫停當前的工作,轉而去處理這個緊急事件,處理完以后,再回到原來被中 斷的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。實現(xiàn)這種功能的部件稱為中 斷系統(tǒng),請示 CPU 中斷的請求源稱為中斷源。微型機的中斷系統(tǒng)一般允許多個 中斷源,當幾個中斷源同時向 CPU 請求中斷,要求為它服務的時候,這就存在 CPU 優(yōu)先響應哪一個中斷源請求的問題。通常根據中斷源的輕重緩急排隊,優(yōu)先 處理最緊急事件的中斷請求源,即規(guī)定每一個中斷源有一個優(yōu)先級別。CPU 總是 先響應優(yōu)先級別最高的中斷請求。 當 CPU 正在處理一個中斷源請求的時候(執(zhí)行相應的中斷服務程序),發(fā)生 了另外一個優(yōu)先級比它還高的中斷源請求。如果 CPU 能夠暫停對原來中斷源的 服務程序,轉而去處理優(yōu)先級更高的中斷請求源,處理完以后,再回到原低級中 斷服務程序,這樣的過程稱為中斷嵌套。這樣的中斷系統(tǒng)稱為多級中斷系統(tǒng),沒 有中斷嵌套功能的中斷系統(tǒng)稱為單級中斷系統(tǒng)。
人們發(fā)現(xiàn)中斷技術不僅解決了快速主機與慢速 I/O 設備的數據傳送問題,而且還具有如下優(yōu)點: ①分時操作。CPU 可以分時為多個 I/O 設備服務,提高了計算機的利用率; ②實時響應。CPU 能夠及時處理應用系統(tǒng)的隨機事件,系統(tǒng)的實時性大大增 強; ③可靠性高。CPU 具有處理設備故障及掉電等突發(fā)性事件能力,從而使系統(tǒng)可靠性提高。
1.2中斷結構及相關寄存
STC89C5X 系列單片機提供了 8 個中斷請求源,它們分別是:外部中斷 O(INTO)、外部中斷 1(INT1)、外部中斷 2(INT2)、外部中斷 3(INT3)、定時器 0 中斷、定時器 1 中斷、定時器 2 中斷、串口(UART)中斷。(注意:51 系列單片 機一定有基本的 5 個中斷,但不全有 8 個中斷,需要查看芯片手冊,通常我 們使用的都是基本的 5 個中斷:INT0、INT1、定時器 0/1,串口中斷)。所有的 中斷都具有四個中斷優(yōu)先級(基本型只有兩個)。用戶可以用關總中斷允許位 (EA/IE.7)或相應中斷的允許位來屏蔽所有的中斷請求,也可以用打開相應的中 斷允許位來使 CPU 響應相應的中斷申請。其中有些中斷源可以用軟件獨立地控 制為開中斷或關中斷狀態(tài)。每一個中斷的優(yōu)先級別均可用軟件設置。高優(yōu)先級的 中斷請求可以打斷低優(yōu)先級的中斷,反之,低優(yōu)先級的中斷請求不可以打斷高優(yōu) 先級及同優(yōu)先級的中斷。當兩個相同優(yōu)先級的中斷同時產生時,將由查詢次序來 決定系統(tǒng)先響應哪個中斷。
?①INT0 對應的是 P3.2 口的附加功能,可由 IT0(TCON.0)選擇其為低電平有 效還是下降沿有效。當 CPU 檢測到 P3.2 引腳上出現(xiàn)有效的中斷信號時,中斷標 志 IE0(TCON.1)置 1,向 CPU 申請中斷。
②INT1 對應的是 P3.3 口的附加功能,可由 IT1(TCON.2)選擇其為低電平有 效還是下降沿有效。當 CPU 檢測到 P3.3 引腳上出現(xiàn)有效的中斷信號時,中斷標 志 IE1(TCON.3)置 1,向 CPU 申請中斷。
③T0 對應的是 P3.4 口的附加功能,TF0(TCON.5),片內定時/計數器 T0 溢 出中斷請求標志。當定時/計數器 T0 發(fā)生溢出時,置位 TF0,并向 CPU 申請中斷。
④T1 對應的是 P3.5 口的附加功能,TF1(TCON.7),片內定時/計數器 T1 溢出中斷請求標志。當定時/計數器 T1 發(fā)生溢出時,置位 TF1,并向 CPU 申請中 斷。
⑤RXD 和 TXD 對應的是 P3.0 和 P3.1 口的附加功能,RI(SCON.0)或 TI (SCON.1),串行口中斷請求標志。當串行口接收完一幀串行數據時置位 RI 或 當串行口發(fā)送完一幀串行數據時置位 TI,向 CPU 申請中斷。
1.2. 1中斷相關寄存器
(1)中斷允許控制 CPU 對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器 IE 控制的。
- EX0(IE.0),外部中斷 0 允許位;
- ET0(IE.1),定時/計數器 T0 中斷允許位;
- EX1(IE.2),外部中斷 0 允許位;
- ET1(IE.3),定時/計數器 T1 中斷允許位;
- ES(IE.4),串行口中斷允許位;
- EA (IE.7), CPU 中斷允許(總允許)位。
(2)中斷請求標志
TCON IT0(TCON.0),外部中斷 0 觸發(fā)方式控制位。 當 IT0=0 時,為電平觸發(fā)方式。 當 IT0=1 時,為邊沿觸發(fā)方式(下降沿有效)。
- IE0(TCON.1),外部中斷 0 中斷請求標志位。(當 IT0=0 時,為電平觸發(fā)方式。 當 IT0=1 時,為邊沿觸發(fā)方式(下降沿有效))
- IT1(TCON.2),外部中斷 1 觸發(fā)方式控制位。
- IE1(TCON.3),外部中斷 1 中斷請求標志位。
- TF0(TCON.5),定時/計數器 T0 溢出中斷請求標志位。
- TF1(TCON.7),定時/計數器 T1 溢出中斷請求標志位。
(3)中斷優(yōu)先級 同一優(yōu)先級中的中斷申請不止一個時,則有中斷優(yōu)先權排隊問題。同一優(yōu)先 級的中斷優(yōu)先權排隊,由中斷系統(tǒng)硬件確定的自然優(yōu)先級形成,其排列如所示:
?(4)中斷號
?(5)中斷響應條件 ①中斷源有中斷請求; ②此中斷源的中斷允許位為 1; ③CPU 開中斷。
2.外部中斷
2.1 外部中斷介紹
51 單片機外部中斷有 2 個,外部中斷 0 和 外部中斷 1,它們的使用方法是一樣的,所以只要學會一個即可掌握所有外部中 斷使用。?
STC89C5X 系列單片機提供了 4 個外部中斷:外部中斷 O(INTO)、外部中斷 1(INT1)、外部中斷 2(INT2)、外部中斷 3(INT3)。(注意:51 系列單片機一定 有基本的 2 個外部中斷,但不全有 4 個中斷,需要查看芯片手冊,通常我們 都是使用基本的 2 個外部中斷:INT0 和 INT1)。 下面我們來看下外部中斷結構圖,如下所示:
圖中 INT0 和 INT1 即為外部中斷 0 和外部中斷 1 輸入口。 ①INT0 對應的是 P3.2 口的附加功能,可由 IT0(TCON.0)選擇其為低電平有 效還是下降沿有效。當 CPU 檢測到 P3.2 引腳上出現(xiàn)有效的中斷信號時,中斷標 志 IE0(TCON.1)置 1,向 CPU 申請中斷。 ②INT1 對應的是 P3.3 口的附加功能,可由 IT1(TCON.2)選擇其為低電平有 效還是下降沿有效。當 CPU 檢測到 P3.3 引腳上出現(xiàn)有效的中斷信號時,中斷標 志 IE1(TCON.3)置 1,向 CPU 申請中斷。
(1)中斷允許控制 CPU 對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器 IE 控制的。
EX0(IE.0),外部中斷 0 允許位; ET0(IE.1),定時/計數器 T0 中斷允許位; EX1(IE.2),外部中斷 0 允許位; ET1(IE.3),定時/計數器 T1 中斷允許位; ES(IE.4),串行口中斷允許位; EA (IE.7), CPU 中斷允許(總允許)位。
(2)中斷請求標志 TCON 224 IT0(TCON.0),外部中斷 0 觸發(fā)方式控制位。
當 IT0=0 時,為電平觸發(fā)方式。 當 IT0=1 時,為邊沿觸發(fā)方式(下降沿有效)。 IE0(TCON.1),外部中斷 0 中斷請求標志位。 IT1(TCON.2),外部中斷 1 觸發(fā)方式控制位。 IE1(TCON.3),外部中斷 1 中斷請求標志位。 TF0(TCON.5),定時/計數器 T0 溢出中斷請求標志位。 TF1(TCON.7),定時/計數器 T1 溢出中斷請求標志位 。
2.2 外部中斷配置
?51 單片機發(fā)生中斷必須要滿足以下 3 個條件,這 3 個條件的 順序可以任意:
①中斷源有中斷請求; ②此中斷源的中斷允許位為 1; ③CPU 開中斷(即 EA=1)。
比如我們配置外部中斷 0,對應的配置程序如下:
EA=1;//打開總中斷開關
EX0=1;//開外部中斷 0
IT0=0/1;//設置外部中斷的觸發(fā)方式
當觸發(fā)中斷后即會進入中斷服務函數,外部中斷 0 中斷服務函數如:
void exti0() interrupt 0 //外部中斷 0 中斷函數 { //執(zhí)行所需的功能 }2.3 硬件設計
本實驗使用到硬件資源如下: (1)獨立按鍵模塊(K3) (2)LED 模塊?
2.4 軟件設計
使用獨立按鍵 K3 控制 LED
#include "reg52.h" typedef unsigned int u16;//對系統(tǒng)默認數據類型進行重定義 typedef unsigned char u8; //定義 LED1 管腳 sbit LED1=P2^0; //定義獨立按鍵 K3 控制腳 sbit KEY3=P3^2;void delay_10us(u16 ten_us) { while(ten_us--); }void exti0_init(void) { IT0=1;//跳變沿觸發(fā)方式(下降沿) EX0=1;//打開 INT0 的中斷允許 EA=1;//打開總中斷 }void main() { exti0_init();//外部中斷 0 配置 while(1) { } } void exti0() interrupt 0 //外部中斷 0 中斷函數 { delay_10us(1000);//消斗 if(KEY3==0)//再次判斷 K3 鍵是否按下 LED1=!LED1;//LED1 狀態(tài)翻轉 }3.定時器中斷?
1,CPU 時序的有關知識
①振蕩周期:為單片機提供定時信號的振蕩源的周期(晶振周期或外加振蕩 周期)。 ②狀態(tài)周期:2 個振蕩周期為 1 個狀態(tài)周期,用 S 表示。振蕩周期又稱 S 周 期或時鐘周期。 ③機器周期:1 個機器周期含 6 個狀態(tài)周期,12 個振蕩周期。 ④指令周期:完成 1 條指令所占用的全部時間,它以機器周期為單位。
例如:外接晶振為 12MHz 時,51 單片機相關周期的具體值為: 振蕩周期=1/12us; 狀態(tài)周期=1/6us; 機器周期=1us; 指令周期=1~4us;
2,學習定時器前需要明白的幾點
①51 單片機有兩組定時器/計數器,因為既可以定時,又可以計數,故稱之 為定時器/計數器。 ②定時器/計數器和單片機的 CPU 是相互獨立的。定時器/計數器工作的過程 是自動完成的,不需要 CPU 的參與。 ③51 單片機中的定時器/計數器是根據機器內部的時鐘或者是外部的脈沖信 號對寄存器中的數據加 1。 有了定時器/計數器之后,可以增加單片機的效率,一些簡單的重復加 1 的 工作可以交給定時器/計數器處理。CPU 轉而處理一些復雜的事情。同時可以實現(xiàn)精確定時作用。
3.1 定時器介紹
3.1.1單片機定時器原理
STC89C5X 單片機內有兩個可編程的定時/計數器 T0、T1 和一個特殊功能定時器 T2。定時/計數器的實質是加 1 計數器(16 位),由高 8 位和低 8 位兩個寄存器 THx 和 TLx 組成。它隨著計數器的輸入脈沖進行自加 1,也就是每來一個脈沖,計數器就自動加 1,當加到計數器為全 1 時,再輸入一個脈沖就使計數器回零,且計數器的溢出使相應的中斷標志位置 1,向 CPU 發(fā)出中斷請求(定時 /計數器中斷允許時)。如果定時/計數器工作于定時模式,則表示定時時間已到; 如果工作于計數模式,則表示計數值已滿。可見,由溢出時計數器的值減去計數 初值才是加 1 計數器的計數值。
3.3.2單片機定時/計數器結構
51 單片機定時器/計數器內部結構如下所示:
? 上圖中的 T0 和 T1 引腳對應的是單片機 P3.4 和 P3.5 管腳。51 單片機定時/ 計數器的工作由兩個特殊功能寄存器控制。TMOD 是定時/計數器的工作方式寄存 器,確定工作方式和功能;TCON 是控制寄存器,控制 T0、T1 的啟動和停止及 設置溢出標志。
1,工作方式寄存器 TMOD
工作方式寄存器 TMOD 用于設置定時/計數器的工作方式,低四位用于 T0,高 四位用于 T1。其格式如下:
GATE 是門控位, GATE=0 時,用于控制定時器的啟動是否受外部中斷源信號 的影響。只要用軟件使 TCON 中的 TR0 或 TR1 為 1,就可以啟動定時/計數器工作; GATA=1 時,要用軟件使 TR0 或 TR1 為 1,同時外部中斷引腳 INT0/1 也為高電平時,才能啟動定時/計數器工作。即此時定時器的啟動條件,加上了 INT0/1 引腳 為高電平這一條件。 C/T :定時/計數模式選擇位。C/T =0 為定時模式;C/T =1 為計數模式。
M1M0:工作方式設置位。定時/計數器有四種工作方式。
(1)方式 0 :方式 0 為 13 位計數,由 TL0 的低 5 位(高 3 位未用)和 TH0 的 8 位組成。 TL0 的低 5 位溢出時向 TH0 進位,TH0 溢出時,置位 TCON 中的 TF0 標志,向 CPU 發(fā)出中斷請求。其結構圖如下所示:
門控位 GATE 具有特殊的作用。當 GATE=0 時,經反相后使或門輸出為 1,此 時僅由 TR0 控制與門的開啟,與門輸出 1 時,控制開關接通,計數開始;當 GATE=1 時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啟由外中斷引腳信號 和 TR0 共同控制。當 TR0=1 時,外中斷引腳信號引腳的高電平啟動計數,外中斷 引腳信號引腳的低電平停止計數。這種方式常用來測量外中斷引腳上正脈沖的寬 度。計數模式時,計數脈沖是 T0 引腳上的外部脈沖。計數初值與計數個數的關 系為:X=2 13-N。
(2)方式 1 :方式 1 的計數位數是 16 位,由 TL0 作為低 8 位,TH0 作為高 8 位,組成了 16 位加 1 計數器。其結構圖如下所示:
計數初值與計數個數的關系為:X=2 16-N。
2,控制寄存器? TCON
TCON 的低 4 位用于控制外部中斷。TCON 的高 4 位用于控制定時/計數器的啟動和中斷申請。其格式如下:
TF1(TCON.7):T1 溢出中斷請求標志位。T1 計數溢出時由硬件自動置 TF1 為 1。CPU 響應中斷后 TF1 由硬件自動清 0。T1 工作時,CPU 可隨時查詢 TF1 的 狀態(tài)。所以,TF1 可用作查詢測試的標志。TF1 也可以用軟件置 1 或清 0,同硬 件置 1 或清 0 的效果一樣。
TR1(TCON.6):T1 運行控制位。TR1 置 1 時,T1 開始工作;TR1 置 0 時, T1 停止工作。TR1 由軟件置 1 或清 0。所以,用軟件可控制定時/計數器的啟動與停止。使用時要打開。
TF0(TCON.5):T0 溢出中斷請求標志位,其功能與 TF1 類同。 TR0(TCON.4):T0 運行控制位,其功能與 TR1 類同。
3.2 定時器配置
其步驟如下(各步驟順序可任 意):
- ①對 TMOD 賦值,以確定 T0 和 T1 的工作方式,如果使用定時器 0 即對 T0 配 置,如果使用定時器 1 即對 T1 配置。
- ②根據所要定時的時間計算初值,并將其寫入 TH0、TL0 或 TH1、TL1。
- ③如果使用中斷,則對 EA 賦值,開放定時器中斷。
- ④使 TR0 或TR1 置位,啟動定時/計數器定時或計數。
3.3 硬件設計?
本實驗使用到硬件資源如下: (1)獨立按鍵模塊(K3) (2)LED 模塊?
3.4 軟件設計
通過定時器 0 中斷控制 D1 指示
#include "reg52.h" typedef unsigned int u16;//對系統(tǒng)默認數據類型進行重定義 typedef unsigned char u8; //定義 LED1 管腳 sbit LED1=P2^0;void delay_10us(u16 ten_us) { while(ten_us--); }void time0_init(void) { TMOD|=0X01;//選擇為定時器 0 模式,工作方式 1 TH0=0XFC; //給定時器賦初值,定時 1ms TL0=0X18; ET0=1;//打開定時器 0 中斷允許 EA=1;//打開總中斷 TR0=1;//打開定時器 }void main() { time0_init();//定時器 0 中斷配置 while(1) { } } void time0() interrupt 1 //定時器 0 中斷函數 { static u16 i;//定義靜態(tài)變量 i TH0=0XFC; //給定時器賦初值,定時 1ms TL0=0X18; i++; if(i==1000) { i=0; LED1=!LED1; } }串口通信實驗
隨著單片機系統(tǒng)的廣泛應用和計算機網絡技術的普及,單片機的通信功能愈 來愈顯得重要。在 WIFI、藍牙、GPS、GSM/GPRS 等應用的控制無不體現(xiàn)串口通信 的重要性。學習 51 單片機重點及難點內容主要有中斷、 定時/計數器、串口通信,而定時/計數器在完成功能時要用到中斷,串口通信使用時要用到定時器中斷。 51 單片機的串口通信。開發(fā)板上集成了 1 個串口通信電路,是 USB 轉串口模塊,它既可下載程序也可實現(xiàn)串口通信功能。內容如下:
1.通信的基本概念
2.51 單片機串口介紹
3.硬件設計
4.軟件設計
1.通信的基本概念
51 單片機不僅可以實現(xiàn)串口通信,還可以通過 IO 口模擬實現(xiàn)多種其他通信,比如 SPI、IIC 等,學習這些通信前,我們了解下通信的基本概念。通信的方式可以分為多種,按照數據傳送方式可分為串行通信和并行通信。按照通信的數據同步方法,可分為異同通信和同步通信(時鐘區(qū)別)。按照數據的傳輸方向又可分為單工、半雙工和全雙工通信。
通信速率
衡量通信性能的一個非常重要的參數就是通信速率,通常以比特率(Bitrate) 來表示。比特率是每秒鐘傳輸二進制代碼的位數,單位是:位/秒( bps)。
如每秒鐘傳送 240 個字符,而每個字符格式包含 10 位(1 個起始位、1 個停止位、 8 個數據位),這時的比特率為: 10 位×240 個/秒 = 2400 bps
“波特率”表示每秒鐘傳輸了多少個碼元。而碼元是通信信號調制的概念,通信中常用時間間隔相同的符號來表示一個二進制數字,這樣的信號稱為碼元。如常見的通信傳輸中,用 0V 表示數字 0,5V 表 示數字 1,那么一個碼元可以表示兩種狀態(tài) 0 和 1,所以一個碼元等于一個二 進制比特位,此時波特率的大小與比特率一致;如果在通信傳輸中,有 0V、 2V、 4V 以及 6V 分別表示二進制數 00、 01、 10、 11,那么每個碼元可以表示四種狀態(tài),即兩個二進制比特位,所以碼元數是二進制比特位數的一半,這個時候 的波特率為比特率的一半。由于很多常見的通信中一個碼元都是表示兩種狀態(tài), 所以我們常常直接以波特率來表示比特率。
2.單片機串口介紹
2.1 串口通信簡介
串口通信(Serial Communication),是指外設和計算機間通過數據信號線、 地線等按位進行傳輸數據的一種通信方式,屬于串行通信方式。
串口是一種接口標準,它規(guī)定了接口的電氣標準,沒有規(guī)定接口插件電纜以及使用的協(xié)議。
(1)接口標準
串口通信的接口標準有很多,有 RS-232C、 RS-232、 RS-422A、 RS-485 等。 常用的是 RS-232 和 RS-485。RS-232 其實是 RS-232C 的改進,原理是一樣的。
這里我們就以 RS-232C 接口進行實現(xiàn)。 RS-232C 是 EIA(美國電子工業(yè)協(xié)會)1969 年修訂 RS-232C 標準。RS-232C 定義了數據終端設備(DTE)與數據通信設備(DCE)之間的物理接口標準。 RS-232C 接口規(guī)定使用 25 針連接器,簡稱 DB25,連接器的尺寸及每個插 針的排列位置都有明確的定義。RS-232C 還有一種 9 針的非標準連接器接口,簡稱 DB9。串口通信使用的大多都是 DB9 接口。DB25 和 DB9 接頭有公頭和母頭之分,其中帶針狀的接頭是 公頭,而帶孔狀的接頭是母頭。兩種接口如下圖所示:
從上圖中可以看到公頭和母頭的管腳定義順序是不一樣, 9 針串口和 25 針串口常用管腳的功能說明如下圖所示:
?在串口通信中,通常我們只使用 2、3、5 三個管腳,即 TXD、RXD、SGND。
RS-232C 對邏輯電平也做了規(guī)定,如下:
在 TXD 和 RXD 數據線上:
1.邏輯 1 為-3~-15V 的電壓? ?2.邏輯 0 為 3~15V 的電壓
在 RTS、CTS、DSR、DTR 和 DCD 等控制線上: 1.信號有效( ON 狀態(tài)) 為 3~15V 的電壓 2.信號無效( OFF 狀態(tài)) 為-3~-15V 的電壓
由此可見,RS-232C 是用正負電壓來表示邏輯狀態(tài),與晶體管-晶體管邏輯集成電路(TTL)以高低電平表示邏輯狀態(tài)的規(guī)定正好相反。而我們 51 單片機使用 的就是 TTL 電平,所以要實現(xiàn) 51 單片機與計算機的串口通信,需要進行 TTL 與 RS-232C 電平轉換,通常使用的電平轉換芯片是 MAX232。
在串口通信中通常 PC 機的 DB9 為公頭,單片機上使用的串口 DB9 為母頭, 通過一根直通串口線進行相連。在 9 針串口線實物圖即為直通型串口線,串口線 (COM)母頭連接計算機 DB9 的公頭,串口線公頭連接單片機上使用的 DB9 母 頭,這樣就是將 2、3、5 管腳直接相連。如果你要實現(xiàn)兩臺計算機串口通信, 那么就需要一根交叉串口線,將 2 對 3、3 對 2、5 對 5 連接,交叉串口線一 般兩頭都是母頭。
串口通信中還需要注意的是,串口數據收發(fā)線要交叉連接,計算機的 TXD 要對應單片機的 RXD,計算機的 RXD 要對應單片機的 TXD,并且共 GND,如下 圖:
??(2)通信協(xié)議
RS232 的通信協(xié)議比較簡單,通常遵循 96-N-8-1 格式。
“96”表示的是通信波特率為 9600。串口通信中通常使用的是異步串口通信,即沒有時鐘線,所以兩個設備要通信,必須要保持一致的波特率,當然,波 247 特率常用值還有 4800、 115200 等。 “N”表示的是無校驗位,由于串口通信相對更容易受到外部干擾導致傳輸 數據出現(xiàn)偏差,可以在傳輸過程加上校驗位來解決這個問題。校驗方法有奇校驗 (odd)、偶校驗(even)、0 校驗(space)、1 校驗(mark)以及無校驗(noparity)。 “8”表示的是數據位數為 8 位,其數據格式在前面介紹異步通信中已講過。 當然數據位數還可以為 5、6、7 位長度。 “1”表示的是 1 位停止位,串口通訊的一個數據包從起始信號開始,直到停止信號結束。數據包的起始信號由一個邏輯 0 的數據位表示,而數據包的停止信號可由 0.5、1、1.5 或 2 個邏輯 1 的數據位表示,只要雙方約定一致即可。
(3)串口內部結構
?上圖中右邊的 TXD 和 RXD 為單片機 IO 口,TXD 對應的是 P3.1 管腳,RXD 對應的是 P3.0 管腳。
2.2 串口相關寄存器
(1)串口控制寄存器 SCON
SM0 和 SM1 為工作方式選擇位:
?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,可以實現(xiàn)多機通信。
REN:允許串行接收位。由軟件置 REN=1,則啟動串行口接收數據;若軟件置 REN=0,則禁止接收。
TB8:在方式 2 或方式 3 中,是發(fā)送數據的第 9 位,可以用軟件規(guī)定其作用。 可以用作數據的奇偶校驗位,或在多機通信中,作為地址幀/數據幀的標志位。 在方式 0 和方式 1 中,該位未用到。 RB8:在方式 2 或方式 3 中,是接收到數據的第 9 位,作為奇偶校驗位或地 址幀/數據幀的標志位。在方式 1 時,若 SM2=0,則 RB8 是接收到的停止位。
TI:發(fā)送中斷標志位。在方式 0 時,當串行發(fā)送第 8 位數據結束時,或在其 它方式,串行發(fā)送停止位的開始時,由內部硬件使 TI 置 1,向 CPU 發(fā)中斷申請。 在中斷服務程序中,必須用軟件將其清 0,取消此中斷申請。
RI:接收中斷標志位。在方式 0 時,當串行接收第 8 位數據結束時,或在其 它方式,串行接收停止位的中間時,由內部硬件使 RI 置 1,向 CPU 發(fā)中斷申請。 也必須在中斷服務程序中,用軟件將其清 0,取消此中斷申請。
(2)電源控制寄存器 PCON
SMOD:波特率倍增位。在串口方式 1、方式 2、方式 3 時,波特率與 SMOD 有 關,當 SMOD=1 時,波特率提高一倍。復位時,SMOD=0。
2.3 串口工作方式
2.3.1 方式 0
方式 0 時,串行口為同步移位寄存器的輸入輸出方式。主要用于擴展并行輸入或輸出口。數據由 RXD(P3.0)引腳輸入或輸出,同步移位脈沖由 TXD(P3.1) 引腳輸出。發(fā)送和接收均為 8 位數據,低位在先,高位在后。波特率固定為 fosc/12。對應的輸入輸出時序圖如下所示:
①方式 0 輸出????????<------方向
?
②方式 0 輸入
?2.3.2 方式 1
方式 1 是 10 位數據的異步通信口。TXD 為數據發(fā)送引腳,RXD 為數據接收引 腳,傳送一幀數據的格式如下所示。其中 1 位起始位,8 位數據位,1 位停止位。 對應的輸入輸出時序圖如下所示:
①方式 1 輸出
?②方式 1 輸入
?用軟件置 REN 為 1 時,接收器以所選擇波特率的 16 倍速率采樣 RXD 引腳電 平,檢測到 RXD 引腳輸入電平發(fā)生負跳變時,則說明起始位有效,將其移入輸入 移位寄存器,并開始接收這一幀信息的其余位。接收過程中,數據從輸入移位寄 存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最后一次移 位。當 RI=0,且 SM2=0(或接收到的停止位為 1)時,將接收到的 9 位數據的前 8 位數據裝入接收 SBUF,第 9 位(停止位)進入 RB8,并置 RI=1,向 CPU 請求中斷。
2.3.3 方式 2 和方式 3
方式 2 或方式 3 時為 11 位數據的異步通信口。TXD 為數據發(fā)送引腳,RXD 為 數據接收引腳。其數據格式如下所示:
?對應的輸入輸出時序圖如下所示:
①方式 2、方式 3 輸出
?發(fā)送開始時,先把起始位 0 輸出到 TXD 引腳,然后發(fā)送移位寄存器的輸出位 (D0)到 TXD 引腳。每一個移位脈沖都使輸出移位寄存器的各位右移一位,并由 TXD 引腳輸出。第一次移位時,停止位“1”移入輸出移位寄存器的第 9 位上, 以后每次移位,左邊都移入 0。當停止位移至輸出位時,左邊其余位全為 0,檢 測電路檢測到這一條件時,使控制電路進行最后一次移位,并置 TI=1,向 CPU 請求中斷。
②方式 2、方式 3 輸入
接收時,數據從右邊移入輸入移位寄存器,在起始位 0 移到最左邊時,控制 電路進行最后一次移位。當 RI=0,且 SM2=0(或接收到的第 9 位數據為 1)時, 接收到的數據裝入接收緩沖器 SBUF 和 RB8(接收數據的第 9 位),置 RI=1,向 CPU 請求中斷。如果條件不滿足,則數據丟失,且不置位 RI,繼續(xù)搜索 RXD 引腳的負跳變。
2.4 串口的使用方法
(1)如何計算波特率 在學習 51 單片機串口時,非常重要的一點是學會如何計算波特率。以下列 出了幾種方式下波特率的計算公式:
方式 0 的波特率 = fosc/12
方式 2 的波特率 =(2 SMOD/64)*?fosc
方式 1 的波特率 =(2 SMOD/32)*(T1 溢出率)
方式 3 的波特率 =(2 SMOD/32)*(T1 溢出率)
其中 T1 溢出率 = fosc /{12×[256 -(TH1)]},
也可以使用? 51波特率初值計算^__^
(2)串口初始化步驟 254 如何使用串口,大家可以按照以下幾個步驟配置。 ①確定 T1 的工作方式(TMOD 寄存器); ②確定串口工作方式(SCON 寄存器); ③計算 T1 的初值(設定波特率),裝載 TH1、TL1; ④啟動 T1(TCON 中的 TR1 位); ⑤如果使用中斷,需開啟串口中斷控制位(IE 寄存器)。
例如:設置串口為工作方式 1、波特率為 9600、波特率加倍、使用中斷。其配置程序如下
void uart_init(u8 baud) { TMOD|=0X20; //設置計數器工作方式 2 SCON=0X50; //設置為工作方式 1 PCON=0X80; //波特率加倍 TH1=baud; //計數器初始值設置 TL1=baud; ES=1; //打開接收中斷 EA=1; //打開總中斷 TR1=1; //打開計數器 }在主函數中調用該函數并傳入 OXFA 值即可,如下:
uart_init(0XFA);//波特率為 96003.硬件設計
?通過 CH340 芯片把 51 單片機的串口與 PC 機的 USB 口 進行連接,不僅可以實現(xiàn)程序的燒入,還可實現(xiàn)串口通信功能。根據前面介紹, 串口通信需將數據收發(fā)管腳交叉連接,所以可以看到在 CH340 芯片的 2 和 3 腳 已做處理。電路中其他部分是自動下載電路部分,目的是控制單片機的電源,無 需冷啟動。使用 USB 轉串口芯片,免去了一根串口線,使用普通 USB 數據線(支 持安卓手機數據線)就可以進行串口通信。 從上圖中可以看到 CH340 的 2、3 腳串口并非直接連接到單片機串口,而是 連接在 P5 端子上,這樣就把 CH340 的串口與單片機串口獨立出來,不直接連接而要使用這個 P5 端子是方便用戶可以使用開發(fā)板上的 USB 轉 TTL 模塊(也就是 CH340 轉串口模塊)做一些串口類模塊的調試,比如:WIFI、藍牙、 GPS、GPRS 等,直接利用 PC 上位機來調試模塊。同時也方便用戶使用板載 USB 轉 TTL 模塊給其它類型單片機下載程序。 如果使用黃色跳線帽將 P5 端子的 1、2 短接,3、4 短接,那么 CH340 串口與 單片機串口是連接一起的,此時即可實現(xiàn)程序的下載或串口通信。
4.軟件設計
當串口助手發(fā)送數據給單片機,單片機原封不動轉 發(fā)給串口助手顯示。
#include "reg52.h" typedef unsigned int u16;//對系統(tǒng)默認數據類型進行重定義 typedef unsigned char u8;void uart_init(u8 baud) { TMOD|=0X20; //設置計數器工作方式 2 SCON=0X50; //設置為工作方式 1 PCON=0X80; //波特率加倍 TH1=baud; //計數器初始值設置 TL1=baud; ES=1; //打開接收中斷 EA=1; //打開總中斷 TR1=1; //打開計數器 }void main() { uart_init(0XFA);//波特率為 9600 while(1) { } } void uart() interrupt 4 //串口通信中斷函數 { u8 rec_data; RI = 0; //清除接收中斷標志位 rec_data=SBUF; //存儲接收到的數據 SBUF=rec_data; //將接收到的數據放入到發(fā)送寄存器 while(!TI); //等待發(fā)送數據完成 TI=0; //清除發(fā)送完成標志位 }總結
以上是生活随笔為你收集整理的51单片机入门学习 第八天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有向无环图——AOE网(关键路径)
- 下一篇: DeepStream5.0系列之yolo