單片機(jī)原理課件--第四章_輸入_輸出、中斷、定時(shí)與串行通信.ppt_第1頁(yè)
單片機(jī)原理課件--第四章_輸入_輸出、中斷、定時(shí)與串行通信.ppt_第2頁(yè)
單片機(jī)原理課件--第四章_輸入_輸出、中斷、定時(shí)與串行通信.ppt_第3頁(yè)
單片機(jī)原理課件--第四章_輸入_輸出、中斷、定時(shí)與串行通信.ppt_第4頁(yè)
單片機(jī)原理課件--第四章_輸入_輸出、中斷、定時(shí)與串行通信.ppt_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第4章 輸入/輸出、中斷、定時(shí)與串行通信,4.1 I/O概述 4.2 MCS-51單片機(jī)的中斷系統(tǒng) 4.3 定時(shí)器/計(jì)數(shù)器 4.4 單片機(jī)串行通信 4.5 PC機(jī)與單片機(jī)的通信,本章內(nèi)容提要,介紹I/O的基本概念、I/O數(shù)據(jù)傳遞方式,中斷的基本概念,串行通信基本概念。主要介紹單片機(jī)中斷系統(tǒng)結(jié)構(gòu)、特點(diǎn)及使用方法;片內(nèi)定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)、原理及使用;片內(nèi)串行口結(jié)構(gòu)、原理以及雙機(jī)和多機(jī)通信實(shí)現(xiàn)方法;PC機(jī)與單片機(jī)通信實(shí)現(xiàn)方法。,4.1 I/O概述 4.1.1 I/O的概念 在單片機(jī)內(nèi)部結(jié)構(gòu)中,除了CPU之外,單片機(jī)集成有內(nèi)部數(shù)據(jù)寄存器、程序存儲(chǔ)器、定時(shí)器/計(jì)數(shù)器、并行I/O口、串行口、中斷控制系統(tǒng)等

2、。CPU通過內(nèi)部總線與片內(nèi)的I/O連接,通過片內(nèi)I/O,單片機(jī)可與外設(shè)或單片機(jī)系統(tǒng)交換信息。此外,單片機(jī)可以由P0、P2和P3口構(gòu)成外部總線,擴(kuò)展外部I/O,構(gòu)成更加復(fù)雜的系統(tǒng),滿足實(shí)際應(yīng)用的需求。 1. 接口與端口 接口是CPU與外設(shè)之間交換信息的連接部件,也稱為接口電路。接口電路通常包含有數(shù)據(jù)寄存器用來保存輸入/輸出數(shù)據(jù)、狀態(tài)寄存器保存接口的狀態(tài)信息、控制寄存器保存單片機(jī)的控制命令等。數(shù)據(jù)的I/O操作通過數(shù)據(jù)寄存器的操作完成。 通常接口電路中可編址并能進(jìn)行讀寫操作的寄存器稱為端口或簡(jiǎn)稱口。一個(gè)接口電路中可能包括多個(gè)口,例如數(shù)據(jù)口、狀態(tài)口、控制口,即包含有多個(gè)口地址。同一單片機(jī)系列中,片內(nèi)集

3、成的I/O模塊各有不同,當(dāng)片內(nèi)I/O不能滿足實(shí)際需求時(shí),可擴(kuò)展外部I/O。 2. I/O的分類 按照信號(hào)的傳遞方式,可將I/O分為串行和并行兩類。 按照I/O連接的信號(hào)大致可分為模擬量、數(shù)字量、脈沖量I/O三類。 3. 數(shù)據(jù)總線隔離技術(shù) 為了正確地進(jìn)行數(shù)據(jù)的I/O傳遞,必須解決數(shù)據(jù)總線的隔離問題,即在任一時(shí)刻,CPU只對(duì)一個(gè)I/O進(jìn)行操作。為此,對(duì)輸出設(shè)備的接口電路要使用鎖存器,對(duì)輸入設(shè)備的接口電路,使用三態(tài)緩沖器。,4 單片機(jī)I/O編址方式 每一個(gè)I/O都需要編址,以便CPU分別進(jìn)行尋址。常用的I/O編址方式有兩種:獨(dú)立編址方式和統(tǒng)一編址方式。 獨(dú)立編址方式: I/O和存儲(chǔ)器分開編址,有各自

4、獨(dú)立的地址空間,采用不同的控制總線,使用不同的指令分別尋址。 統(tǒng)一編址方式: I/O與數(shù)據(jù)存儲(chǔ)器在同一地址空間編址,尋址方式相同,采用相同的地址、數(shù)據(jù)、控制總線,使用相同的指令尋址。 4.1.2 輸入/輸出的傳遞方式 單片機(jī)系統(tǒng)中有不同類型的I/O,由于I/O所連接的外設(shè)或I/O接口本身的速度與CPU的處理速度相比,通常低于CPU的速度,為了實(shí)現(xiàn)數(shù)據(jù)的正確傳輸,CPU通常采用三種控制方式,即無條件傳送方式、查詢方式和中斷控制方式。 1. 無條件傳送方式 I/O或與I/O連接的外設(shè)隨時(shí)都處于準(zhǔn)備好狀態(tài),這時(shí)CPU不需要測(cè)試外設(shè)狀態(tài),隨時(shí)直接對(duì)其進(jìn)行操作。 2. 查詢方式 I/O接口或外設(shè)的狀態(tài)以

5、適當(dāng)?shù)姆绞捷斎隒PU,CPU通過對(duì)狀態(tài)信號(hào)的查詢,在判別外設(shè)準(zhǔn)備好之后, 對(duì)其進(jìn)行輸入/輸出操作。 查詢方式的特點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,通用性強(qiáng),適合各種設(shè)備數(shù)據(jù)的輸入/輸出;其缺點(diǎn)是需要占用CPU的 時(shí)間,外設(shè)速度較慢時(shí),效率較低。,圖4.1 查詢方式流程圖,3. 中斷方式 中斷方式下外設(shè)的狀態(tài)信號(hào)以中斷申請(qǐng)方式輸入CPU。 CPU響應(yīng)中斷,暫停正在執(zhí)行的程序,轉(zhuǎn)而執(zhí)行中斷服務(wù)程序,在中斷服務(wù)程序中對(duì)外設(shè)進(jìn)行輸入/輸出操作,中斷返回后,再繼續(xù)執(zhí)行被中斷的程序。 中斷方式可提高單片機(jī)系統(tǒng)的效率,特別適用于電池供電的低功耗系統(tǒng)。,4.2 MCS-51單片機(jī)的中斷系統(tǒng) 中斷是一項(xiàng)重要的計(jì)算機(jī)技術(shù)。當(dāng)CPU正

6、在處理某件事時(shí),外界發(fā)生了緊急事件請(qǐng)求,要求CPU暫停當(dāng)前的工作,轉(zhuǎn)而去處理這個(gè)緊急事件。處理完后再回到原來被中斷的位置,繼續(xù)原來的工作,這一過程稱為中斷,實(shí)現(xiàn)這種功能的部件稱為中斷系統(tǒng)。當(dāng)多個(gè)中斷源同時(shí)向CPU申請(qǐng)中斷時(shí),CPU將根據(jù)每個(gè)中斷源的優(yōu)先級(jí),優(yōu)先響應(yīng)級(jí)別最高的中斷請(qǐng)求。 當(dāng)中斷系統(tǒng)有多個(gè)中斷優(yōu)先級(jí)時(shí),CPU暫停較低級(jí)的中斷服務(wù)程序,轉(zhuǎn)而處理優(yōu)先級(jí)更高的中斷請(qǐng)求源,處理完后再處理較低級(jí)的中斷服務(wù)程序,這樣的過程稱為中斷嵌套。這樣的中斷系統(tǒng)稱為多級(jí)中斷系統(tǒng)。 51系列單片機(jī)的中斷系統(tǒng)有5個(gè)中斷源:2個(gè)外部中斷源、2個(gè)定時(shí)器中斷源和一個(gè)串行口中斷源,具有兩個(gè)中斷優(yōu)先級(jí),可實(shí)現(xiàn)兩級(jí)中斷服

7、務(wù)程序嵌套。,圖4.2 二級(jí)中斷嵌套,4.2.1 中斷系統(tǒng)的結(jié)構(gòu) 單片機(jī)中斷控制系統(tǒng)的結(jié)構(gòu)如圖4.3,中斷控制系統(tǒng)由中斷源、中斷選擇、中斷標(biāo)志、中斷允許寄存器(中斷源允許、全局中斷允許)、中斷優(yōu)先級(jí)寄存器和查詢電路組成。,圖4.3 中斷控制系統(tǒng)的結(jié)構(gòu),5個(gè)中斷源符號(hào)、名稱及產(chǎn)生條件分別為: (1) INT0 .:外部中斷0,由P3.2管腳輸入,低電平或下降沿有效。通過設(shè)置定時(shí)器控制寄存器TCON的相應(yīng)控制位選擇。 (2) INT1:外部中斷1,由P3.3管腳輸入,低電平或下降沿有效。通過設(shè)置定時(shí)器控制寄存器TCON的相應(yīng)控制位選擇。 (3) T0:定時(shí)器/計(jì)數(shù)器0中斷,由T0回零溢出有效。 (

8、4) T1:定時(shí)器/計(jì)數(shù)器1中斷,由T1回零溢出有效。 (5) TI/RI:串行口完成一幀數(shù)據(jù)的發(fā)送/接收后有效。 中斷產(chǎn)生時(shí),對(duì)應(yīng)的中斷標(biāo)志位被置位為“1”,當(dāng)中斷響應(yīng)時(shí),由硬件復(fù)位或在中斷服務(wù)程序中,用軟件復(fù)位清除中斷標(biāo)志。串行口中斷為發(fā)送和接收共用,當(dāng)串行口中斷時(shí),通過查詢定時(shí)器工作方式控制寄存器TMOD中的TI和RI判別是發(fā)送還是接收中斷,并用軟件復(fù)位中斷標(biāo)志。中斷系統(tǒng)的控制通過對(duì)特殊功能寄存器的操作完成。 1. 定時(shí)器控制寄存器TCON TCON為特殊功能寄存器,字節(jié)地址為88H,可位操作,位地址由低位到高位為88H8FH。對(duì)TCON的設(shè)置可完成定時(shí)器的運(yùn)行控制和外部中斷觸發(fā)方式的選

9、擇,同時(shí),定時(shí)器和外部中斷發(fā)生時(shí),會(huì)影響TCON的中斷請(qǐng)求標(biāo)志位。 TCON的格式如下:,TCON每一位的功能如下: (1) IT0(TCON.0)和IT1(TCON.2):外部中斷中斷觸發(fā)方式控制位。IT0(IT1)=0,電平觸發(fā)方式,低電平觸發(fā);IT0(IT1)=1,脈沖觸發(fā)方式,下降沿觸發(fā)。 (2) IE0(TCON.1)和IE1(TCON.3):外部中斷請(qǐng)求標(biāo)志位。IE0(IE1)=0,無中斷請(qǐng)求;IE0(IE1)=1,有中斷請(qǐng)求。當(dāng)中斷觸發(fā)信號(hào)為下降沿有效時(shí),IE0(IE1)由硬件置位為“1”,中斷響應(yīng)時(shí),硬件自動(dòng)復(fù)位為“0”;電平觸發(fā)方式下,IE0(IE1)標(biāo)志由外部觸發(fā)信號(hào)控制,

10、不由片內(nèi)硬件控制。當(dāng)中斷觸發(fā)信號(hào)為低電平信號(hào)時(shí),IE0(IE1)=1,當(dāng)中斷觸發(fā)信號(hào)為高電平信號(hào)時(shí),IE0(IE1)=0。 (3) TF0(TCON.5)和TF1(TCON.7):定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器1溢出中斷請(qǐng)求標(biāo)志位。TF0(TF1)=0,無中斷請(qǐng)求;TF0(TF1)=1,有中斷請(qǐng)求。當(dāng)定時(shí)器/計(jì)數(shù)器0 (定時(shí)器/計(jì)數(shù)器1)溢出時(shí),硬件置位TF0(TF1)=1,中斷響應(yīng)時(shí)片內(nèi)硬件自動(dòng)復(fù)位TF0(TF1)=0。查詢TF0(TF1)時(shí),需用軟件復(fù)位TF0(TF1)=0。 (4) TR0(TCON.4)和TR1(TCON.6):定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器1運(yùn)行控制位。TR0(T

11、R1)=0,關(guān)閉定時(shí)器/計(jì)數(shù)器;TR0(TR1)=1,打開定時(shí)器/計(jì)數(shù)器 。 2. 中斷允許寄存器IE 中斷允許寄存器IE為兩級(jí)允許控制(如圖4.3所示):第一級(jí)為局部中斷允許,可選擇某個(gè)或幾個(gè)中斷源允許中斷,第二級(jí)為全局允許。只有當(dāng)全局中斷允許有效時(shí),局部中斷允許的中斷信號(hào)才可以申請(qǐng)中斷。IE在特殊功能寄存器中,可位操作。字節(jié)地址為0A8H,位地址由低位到高位為A8HAFH。IE的格式如下:,IE寄存器的每個(gè)位信號(hào)定義為: (1) EX0(IE.0)和EX1(IE.2):外部中斷允許控制位。EX0(EX1)=0,外部中斷禁止;EX0(EX1)=1,外部中斷允許。 (2) ET0(IE.1)和

12、ET1(IE.3):定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器1中斷允許控制位。ET0(ET1)=0,定時(shí)器/計(jì)數(shù)器禁止中斷;ET0(ET1)=1,定時(shí)器/計(jì)數(shù)器允許中斷。 (3) ES(IE.4):串行口中斷允許控制位。ES=0,串行口禁止中斷;ES=1,串行口允許中斷。 (4) EA(IE.7):全局中斷允許控制位。EA=0,禁止全局中斷;EA=1,允許全局中斷。 (5) IE.5、IE.6:保留位。 3. 串行口控制寄存器SCON 串行口控制寄存器SCON在特殊功能寄存器中,可位操作。字節(jié)地址為98H,位地址由低位到高位為98H9FH。SCON的格式如下:,與中斷有關(guān)的控制位有2位: (1) RI

13、(SCON.0):串行口接收中斷標(biāo)志位。當(dāng)接收完一幀數(shù)據(jù)后,由硬件置位為“1”。中斷響應(yīng)后,在中斷服務(wù)程序中須用軟件復(fù)位為“0”。 (2) TI(SCON.1):串行口發(fā)送中斷標(biāo)志位。當(dāng)發(fā)送完一幀數(shù)據(jù)后,由硬件置位為“1”。中斷響應(yīng)后,在中斷服務(wù)程序中須用軟件復(fù)位為“0”。,4. 中斷優(yōu)先級(jí)控制寄存器IP 每個(gè)中斷源有兩個(gè)優(yōu)先級(jí),可用程序?qū)χ袛鄡?yōu)先級(jí)控制寄存器IP的控制位置位或復(fù)位來選擇。特殊功能寄存器IP的字節(jié)地址為B8H,位地址由低位到高位為B8HBFH。IP的格式如下:,與中斷優(yōu)先級(jí)有關(guān)的控制位有5位: (1) PX0(IP.0)和PX1(IP.2):外部中斷0和外部中斷1中斷優(yōu)先級(jí)控制

14、位。PX0(PX1)=0,低優(yōu)先級(jí);PX0(PX1)=1,高優(yōu)先級(jí)。 (2) PT0(IP.1)和PT1(IP.3):定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器1中斷優(yōu)先級(jí)控制位。PT0(PT1)=0,低優(yōu)先級(jí);PT0(PT1)=1,高優(yōu)先級(jí)。 (3) PS(IP.4):串行口中斷優(yōu)先級(jí)控制位。PS=0,低優(yōu)先級(jí);PS=1,高優(yōu)先級(jí)。 (4) IP.5IP.7:保留位。 51系列單片機(jī)中,兩個(gè)優(yōu)先級(jí)的結(jié)構(gòu)可實(shí)現(xiàn)中斷嵌套服務(wù),中斷優(yōu)先級(jí)的控制原則: (1) 高優(yōu)先級(jí)中斷請(qǐng)求可以打斷低優(yōu)先級(jí)中斷服務(wù)形成中斷嵌套 (2) 同級(jí)中斷之間不能形成中斷嵌套 (3) 同級(jí)中斷源有多個(gè)同時(shí)向CPU請(qǐng)求中斷時(shí),CPU的響

15、應(yīng)順序?yàn)椋和獠恐袛?定時(shí)中斷0外部中斷1定時(shí)中斷1串行口中斷,4.2.2 中斷系統(tǒng)的初始化與中斷控制寄存器的設(shè)置 中斷控制系統(tǒng)中,系統(tǒng)上電或復(fù)位時(shí),控制寄存器均被復(fù)位,所有中斷均被禁止。因此,用戶需根據(jù)自己的需要對(duì)上述4個(gè)控制寄存器賦值,即通過程序?qū)χ袛嘞到y(tǒng)進(jìn)行初始化設(shè)置,以便使用中斷系統(tǒng)。例如,外部中斷初始化包括:外部中斷觸發(fā)方式設(shè)定、外部中斷允許、全局中斷允許,以及中斷優(yōu)先級(jí)控制。假設(shè)對(duì)外部中斷0的初始化使用如下指令: MOVIE,#81H 或使用位操作指令: SETBEA SETBEX0 則結(jié)合復(fù)位時(shí)控制寄存器的狀態(tài),外部中斷0被設(shè)置為低電平觸發(fā)的低級(jí)中斷源。 4.2.3 中斷響應(yīng)過程

16、1. 中斷采樣 單片機(jī)在每個(gè)機(jī)器周期的S5P2對(duì)中斷標(biāo)志進(jìn)行采樣,在下一個(gè)機(jī)器周期根據(jù)優(yōu)先級(jí)順序查詢中斷標(biāo)志。如果中斷標(biāo)志在前一個(gè)機(jī)器周期的S5P2被置位,則后一個(gè)周期中斷系統(tǒng)就可以發(fā)現(xiàn)這個(gè)中斷請(qǐng)求信號(hào)。 外部中斷源為脈沖觸發(fā)時(shí),若INT0(INT1)管腳在一個(gè)機(jī)器周期為高電平,另一個(gè)機(jī)器周期為低電平,則TCON寄存器的中斷請(qǐng)求標(biāo)志IE0(IE1)將置位,標(biāo)志位IE0(IE1)請(qǐng)求中斷。由于外部中斷管腳每個(gè)機(jī)器周期采樣一次,因此,管腳上的高電平和低電平至少都要持續(xù)一個(gè)機(jī)器周期以上,以保證下降沿被采樣到。,2. 中斷響應(yīng) 中斷系統(tǒng)查詢到有中斷請(qǐng)求時(shí),如果處于以下情形,系統(tǒng)將阻止長(zhǎng)調(diào)用LCALL指

17、令的執(zhí)行而不運(yùn)行中斷服務(wù)程序 : (1) 同級(jí)或高優(yōu)先級(jí)的中斷響應(yīng)正在執(zhí)行中 (2) 正在執(zhí)行的指令未到指令最后一個(gè)周期,即當(dāng)前指令未執(zhí)行完 (3) 當(dāng)前指令是RETI或訪問IE、IP寄存器 條件(2)保證在得到中斷向量之前,運(yùn)行指令必須完整執(zhí)行。條件(3)保證執(zhí)行RETI或訪問IE、IP寄存器后,至少還要執(zhí)行一條指令才能響應(yīng)中斷。在上述情形之外,當(dāng)CPU查詢到有效中斷請(qǐng)求時(shí),系統(tǒng)硬件將產(chǎn)生一條長(zhǎng)調(diào)用指令LCALL,即將程序計(jì)數(shù)器值PC壓入堆棧,把相應(yīng)的中斷入口地址裝入PC,轉(zhuǎn)到相應(yīng)中斷服務(wù)程序中去執(zhí)行。 各中斷源的入口地址是: 由于各中斷入口地址之間僅相隔8個(gè)字節(jié),不能存儲(chǔ)較長(zhǎng)的中斷服務(wù)程序

18、,通常在中斷入口地址開始的單元中,安排一條轉(zhuǎn)移指令,轉(zhuǎn)移到相應(yīng)中斷源的中斷服務(wù)程序中。,3. 中斷響應(yīng)時(shí)間 外部中斷電平有效時(shí),在機(jī)器周期的S5P2采樣后鎖存到IE0(IE1),IE0(IE1)在下一個(gè)機(jī)器周期由電路查詢,如果中斷請(qǐng)求立刻響應(yīng),則中斷服務(wù)程序成為下一條執(zhí)行的指令。長(zhǎng)調(diào)用指令自身需要2個(gè)機(jī)器周期,因此,從外部中斷觸發(fā)到中斷服務(wù)程序第一條指令開始執(zhí)行最少需要3個(gè)完整的機(jī)器周期。 當(dāng)前面所述的三個(gè)條件不滿足,則中斷響應(yīng)需要更長(zhǎng)的時(shí)間。如果指令是RETI或?qū)拇嫫鱅E和IP操作,則附加的等待時(shí)間不會(huì)多于5個(gè)周期,即最多一個(gè)周期完成當(dāng)前指令,下一條指令為MUL或DIV再加4個(gè)周期。所以,

19、一個(gè)中斷發(fā)生時(shí),中斷響應(yīng)時(shí)間為38個(gè)周期。 4. 中斷請(qǐng)求的撤銷 中斷請(qǐng)求標(biāo)志在中斷響應(yīng)后應(yīng)當(dāng)清除,以免一次中斷申請(qǐng)被多次重復(fù)查詢和響應(yīng)。 串行口中斷請(qǐng)求標(biāo)志需要在中斷服務(wù)程序中用軟件清除,定時(shí)器和外部中斷的中斷標(biāo)志在響應(yīng)后硬件自動(dòng)復(fù)位清除。但外部中斷為電平觸發(fā)時(shí),如果中斷響應(yīng)后, 管腳仍為低電平,則會(huì)重新置位中斷請(qǐng)求,為此可以在系統(tǒng)中增加輔助電路解決。 圖4.4 電平方式外部中斷請(qǐng)求的撤銷電路,并在中斷服務(wù)程序中增加如下指令,使得的INT0輸入變?yōu)楦唠娖健?ORLP1,#01H ANLP1,#0FEH 5. 軟件模擬第三優(yōu)先級(jí)中斷 在某些應(yīng)用中需要三個(gè)中斷優(yōu)先級(jí),這時(shí)可用簡(jiǎn)單的軟件方法產(chǎn)生第

20、三優(yōu)先級(jí)效果。首先,通過中斷優(yōu)先級(jí)寄存器IP可設(shè)置高優(yōu)先級(jí)和低優(yōu)先級(jí)分別為第一、第二優(yōu)先級(jí)中斷,然后在第二級(jí)中斷服務(wù)程序中包含如下程序: PUSHIE MOVIE,#MASK CALLLABEL * 執(zhí)行第三級(jí)中斷服務(wù)程序 * POP RET LABEL:RETI 只要有中斷響應(yīng),中斷允許寄存器重新定義,禁止除第一優(yōu)先級(jí)以外的中斷,然后用CALL指令調(diào)用RETI指令,清除第二優(yōu)先級(jí)中斷標(biāo)志位,則第二優(yōu)先級(jí)中斷允許中斷服務(wù)。用POP指令恢復(fù)IE寄存器,RET終止中斷服務(wù)程序。當(dāng)晶振為12MHz時(shí),附加的指令需要10s。,4.3 定時(shí)器/計(jì)數(shù)器 定時(shí)器/計(jì)數(shù)器通常用于定時(shí)采樣、順序控制、數(shù)字時(shí)鐘等

21、。51系列單片機(jī)有兩個(gè)16位的定時(shí)器/計(jì)數(shù)器:T0和T1。T0由兩個(gè)8位的定時(shí)寄存器TH0和TL0構(gòu)成16位寄存器,同樣,T1由兩個(gè)8位的定時(shí)寄存器TH1和TL1構(gòu)成16位寄存器,它們分別映射在特殊功能寄存器中。TH0、TL0的地址分別為8CH、8AH,TH1和TL1的地址分別為8DH和8BH。 (1)定時(shí)功能,定時(shí)寄存器每個(gè)機(jī)器周期自動(dòng)加1,可以看作是機(jī)器周期的計(jì)數(shù)器。由于每個(gè)機(jī)器周期為12個(gè)時(shí)鐘振蕩周期,所以計(jì)數(shù)頻率為振蕩頻率的1/12。 (2)計(jì)數(shù)功能,定時(shí)寄存器在單片機(jī)外部引腳T0或T1有“1”到“0”的跳變時(shí)自動(dòng)加1。外部輸入在每個(gè)機(jī)器周期的S5P2被采樣,當(dāng)前一個(gè)機(jī)器周期采樣為高電

22、平,后一個(gè)機(jī)器周期采樣為低電平時(shí),計(jì)數(shù)器在下一個(gè)機(jī)器周期S3P1進(jìn)行計(jì)數(shù)。由于一個(gè)下降沿的識(shí)別需要2個(gè)機(jī)器周期,故計(jì)數(shù)器最高計(jì)數(shù)頻率為振蕩頻率的1/24。 4.3.1 工作方式 無論作為定時(shí)器還是計(jì)數(shù)器,T0和T1都有4種工作方式:方式0、方式1、方式2和方式3。其中,T0和T1的前三種工作方式相同,方式3不同。下面以定時(shí)/計(jì)數(shù)器1為例分述四種工作方式的特點(diǎn)和用法。 1方式0 13位計(jì)數(shù)方式。在方式0中,時(shí)間寄存器配置為13位寄存器,是為與MCS-48兼容而設(shè)置,由TH1的全部8位和TL1的低5位構(gòu)成,TL1的高三位棄之不用,當(dāng)寄存器中所有13位中的全“1”翻轉(zhuǎn)為“0”時(shí),設(shè)置定時(shí)器中斷標(biāo)志T

23、F1。圖4.5是定時(shí)器/ 計(jì)數(shù)器1在工作方式0的邏輯結(jié)構(gòu)圖。,圖4.5 定時(shí)器/計(jì)數(shù)器1方式0:13位計(jì)數(shù)器 C/T:定時(shí)/計(jì)數(shù)選擇,由定時(shí)器工作方式特殊功能寄存器TMOD的位設(shè)置選擇 C/T=0,T1為定時(shí)器,計(jì)數(shù)器對(duì)機(jī)器周期進(jìn)行計(jì)數(shù)實(shí)現(xiàn)定時(shí) C/T =1,T1為計(jì)數(shù)器,計(jì)數(shù)來自引腳T1的外部脈沖數(shù) 定時(shí)器/計(jì)數(shù)器是否啟動(dòng)受TR1、GATE和 引腳的控制,GATE和TR1由定時(shí)器工作方式控制寄存器TMOD和控制寄存TCON中相應(yīng)的位狀態(tài)確定。由圖4.5中的邏輯電路可知:要啟動(dòng)定時(shí)/計(jì)數(shù)器,必須TR1=1,同時(shí)GATE=0或 引腳=1。 通常設(shè)置GATE=0,用TR1的狀態(tài)控制T1的工作。 當(dāng)

24、GATE=1,TR1=1時(shí),T1能否計(jì)數(shù)由引腳的輸入狀態(tài)控制,可以對(duì)INT1輸入高電平脈沖寬度進(jìn)行測(cè)量。,定時(shí)器啟動(dòng)后,定時(shí)或計(jì)數(shù)脈沖加到TL1的低5位,從預(yù)先設(shè)置的初值(時(shí)間常數(shù))開始計(jì)數(shù),TL1計(jì)滿后,向TH1進(jìn)位,當(dāng)TL1、TH1的13位都為1變?yōu)槿?,即計(jì)數(shù)器溢出時(shí),中斷標(biāo)志位TF1置“1”,表明定時(shí)時(shí)間或計(jì)數(shù)次數(shù)已到。在中斷系統(tǒng)允許時(shí),向CPU請(qǐng)求中斷。 方式0沒有時(shí)間常數(shù)自動(dòng)重裝功能,如果需進(jìn)一步定時(shí)/計(jì)數(shù),需用指令重裝時(shí)間常數(shù)。 2工作方式1 16位計(jì)數(shù)方式。計(jì)數(shù)器由8位TL1和8位TH1構(gòu)成,工作方式1與方式0僅計(jì)數(shù)器長(zhǎng)度不同,其他均相同,如圖4.6。,圖4.6 定時(shí)器/計(jì)數(shù)器

25、1方式1:16位計(jì)數(shù)器,3工作方式2 8位計(jì)數(shù)器帶時(shí)間常數(shù)自動(dòng)重裝功能。如圖4.7。 工作方式2與工作方式0、1的功能相同,只是由TL1構(gòu)成8位計(jì)數(shù)器,TH1用來存放時(shí)間常數(shù)。,圖4.7 定時(shí)器/計(jì)數(shù)器1方式2:8位自動(dòng)重裝,啟動(dòng)時(shí),TL1和TH1均裝入相同的時(shí)間常數(shù),當(dāng)TL1計(jì)數(shù)器溢出時(shí),中斷標(biāo)志TF1置“1”,同時(shí),控制將TH1中的時(shí)間常數(shù)重新裝入TL1中。與方式0和方式1相比,方式2采用的硬件重裝時(shí)間常數(shù),提高了定時(shí)精度,操作簡(jiǎn)便。缺點(diǎn)是定時(shí)/計(jì)數(shù)范圍較小 。,4工作方式3 當(dāng)T0為工作方式3時(shí),TL0和TH0分別作為兩個(gè)獨(dú)立的8位計(jì)數(shù)器,其硬件邏輯框圖如圖4.8。TL0既可作定時(shí)器也可

26、作計(jì)數(shù)器,并使用定時(shí)器0的控制位:C/T、GATE、TR0、 和TF0。TH0鎖定為定時(shí)器功能,并使用定時(shí)器1的控制位TR1和TH1,這時(shí),TH0控制了“定時(shí)器1”的中斷。,圖4.8 定時(shí)器/計(jì)數(shù)器0方式3:兩個(gè)8位計(jì)數(shù)器 當(dāng)定時(shí)器0工作于方式3時(shí),單片機(jī)可看作有3個(gè)定時(shí)/計(jì)數(shù)器,這時(shí)定時(shí)器1只能工作于方式0、1或2,并且可以通過設(shè)置它是否為工作方式3來控制其計(jì)數(shù)器的啟動(dòng)和停止。由于這時(shí)的定時(shí)器1的中斷請(qǐng)求標(biāo)志已被定時(shí)器0占用,因而定時(shí)器1不能產(chǎn)生中斷請(qǐng)求,故一般用于不要求產(chǎn)生中斷的串行口的波特率發(fā)生器。,4.3.2 定時(shí)器/計(jì)數(shù)器控制寄存器 1定時(shí)器控制寄存器TCON TCON寄存器既參與中

27、斷控制又參與定時(shí)控制。定時(shí)器通過設(shè)置控制TR位的狀態(tài)控制定時(shí)器/計(jì)數(shù)器的啟、停。TF標(biāo)志定時(shí)/計(jì)數(shù)器是否溢出而請(qǐng)求中斷。 2工作方式控制寄存器TMOD TMOD在特殊功能寄存器中,字節(jié)地址89H,不能位尋址。TMOD的格式為:,TMOD的高4位用于T1,低4位用于T0,符號(hào)的定義如下: (1) GATE:門控位。GATE和軟件控制位TR、外引腳( )的狀態(tài),共用控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)和停止。 (2) C/T:定時(shí)/計(jì)數(shù)器方式選擇位。 C/T 1為計(jì)數(shù)方式; C/T 0為定時(shí)方式。 (3) M1 M0:工作方式選擇位。 M1 M000;方式0 M1 M001;方式1 M1 M010;方式2 M

28、1 M011;方式3。,3定時(shí)/計(jì)數(shù)器初值的求取 51系列單片機(jī)定時(shí)器/計(jì)數(shù)器采用增量式計(jì)數(shù),其內(nèi)部的計(jì)數(shù)器在定時(shí)器方式下對(duì)機(jī)器周期加“1”計(jì)數(shù),在計(jì)數(shù)器方式下對(duì)外部引腳上的脈沖計(jì)數(shù),計(jì)數(shù)器加滿回零溢出時(shí),置中斷請(qǐng)求標(biāo)志TF。在不同的工作方式下,定時(shí)器/計(jì)數(shù)器初值的計(jì)算方法基本相同,只是采用了不同長(zhǎng)度的計(jì)數(shù)器,設(shè)置時(shí)間常數(shù)時(shí)略有不同。 方式0,計(jì)數(shù)范圍:18192(213) 定時(shí)工作方式時(shí),定時(shí)時(shí)間=(213-計(jì)數(shù)初值)晶振周期12 或 定時(shí)時(shí)間=(213-計(jì)數(shù)初值)機(jī)器周期 例4.1設(shè)單片機(jī)晶振頻率fosc=6MHz,用定時(shí)器1以方式0、查詢方式產(chǎn)生周期為500s的等寬方波脈沖,由P1.0輸

29、出。 (1) 確定計(jì)數(shù)初值X 本題可在P1.0以250s交替輸出高、低電平實(shí)現(xiàn)所需的脈沖,定時(shí)時(shí)間為250s。晶振頻率6MHz對(duì)應(yīng)的機(jī)器周期為2s。則: (213-X)210-6=25010-6 求得X=8067 對(duì)應(yīng)二進(jìn)制X=1111110000011。高8位放入TH1,即TH1=11111100=FCH;低5位放入TL1,即TL1=00011=03H。 (2) 寄存器初始化 包括定時(shí)器初始化和中斷系統(tǒng)初始化,主要對(duì)IP、IE、TCON、TMOD的相應(yīng)位進(jìn)行正確的設(shè)置,并將時(shí)間常數(shù)送入定時(shí)器。本例中,IE、TCON、TMOD均應(yīng)初始化為00H。,(3) 程序設(shè)計(jì) 本例假設(shè)系統(tǒng)是從復(fù)位開始運(yùn)行

30、,則IE、TCON、TMOD均不需要操作。 MOVTH1, #0FCH;T1置初值 MOVTL1, #03H SETBTR1;啟動(dòng)T1 LOOP:JBCTF1, LOOP1;T1溢出轉(zhuǎn)LOOP1 SJMPLOOP;T1未溢出,繼續(xù)查詢 LOOP1:MOVTH1, #0FCH;T1重新置初值 MOVTL1, #03H CLRTF1 ;清T1溢出標(biāo)志位 CPLP1.0;輸出取反 SJMPLOOP;繼續(xù)查詢,(3) 程序設(shè)計(jì) 本例假設(shè)系統(tǒng)是從復(fù)位開始運(yùn)行,則IE、TCON、TMOD均不需要操作。 MOVTH1, #0FCH;T1置初值 MOVTL1, #03H SETBTR1;啟動(dòng)T1 LOOP:J

31、BCTF1, LOOP1;T1溢出轉(zhuǎn)LOOP1 SJMPLOOP;T1未溢出,繼續(xù)查詢 LOOP1:MOVTH1, #0FCH;T1重新置初值 MOVTL1, #03H CLRTF1 ;清T1溢出標(biāo)志位 CPLP1.0;輸出取反 SJMPLOOP;繼續(xù)查詢 方式1,計(jì)數(shù)范圍:165536(216) 定時(shí)工作方式時(shí),定時(shí)時(shí)間=(216-計(jì)數(shù)初值)晶振周期12 或 定時(shí)時(shí)間=(216-計(jì)數(shù)初值)機(jī)器周期,例4.2 將例4.1改以方式1實(shí)現(xiàn)。 (1) 確定計(jì)數(shù)初值X (216-X)210-6=25010-6 求得X=65411 對(duì)應(yīng)二進(jìn)制X=1111111110000011。高8位放入TH1,即TH

32、1=11111111=FFH;低5位放入TL1,即TL1=10000011=83H。 (2) 程序設(shè)計(jì) 與例1程序?qū)?yīng),僅T1置初值程序不同,將對(duì)應(yīng)的程序修改即可: MOVTH1, #0FFH;T1置初值 MOVTL1, #83H 方式2,計(jì)數(shù)范圍:1256(28) 定時(shí)工作方式時(shí),定時(shí)時(shí)間=(28-計(jì)數(shù)初值)晶振周期12 或 定時(shí)時(shí)間=(28-計(jì)數(shù)初值)機(jī)器周期 與方式0和方式1不同,方式2為8位重裝計(jì)數(shù)方式,所以,高8位計(jì)數(shù)器和低8位計(jì)數(shù)器在初始化時(shí)裝入的是相同的計(jì)數(shù)初始值。在計(jì)數(shù)到之后,不需要軟件重裝計(jì)數(shù)初始值。,4.4 單片機(jī)串行通信 本節(jié)在介紹串行通信基礎(chǔ)知識(shí)之后,介紹單片機(jī)串行口的

33、結(jié)構(gòu)、特點(diǎn)、工作方式以及單片機(jī)雙機(jī)、多機(jī)、單片機(jī)與PC機(jī)之間的通信技術(shù)。 4.4.1 串行通信基礎(chǔ) 通常把計(jì)算機(jī)與外界的數(shù)據(jù)傳輸稱為通信,計(jì)算機(jī)的數(shù)據(jù)通信方式有兩種:并行通信和串行通信。 并行通信是將數(shù)據(jù)以成組的方式在兩條以上的并行通道上傳輸。它可以同時(shí)傳輸一組數(shù)據(jù)位,每個(gè)數(shù)據(jù)位使用單獨(dú)的一條導(dǎo)線。因此,并行通信的物理信道為并行內(nèi)總線或并行外總線。并行通信的特點(diǎn)是:硬件上有多根數(shù)據(jù)線,各數(shù)據(jù)位同時(shí)傳送,速度快,效率高,傳送距離通常小于30米。如計(jì)算機(jī)和外圍設(shè)備之間的通信,CPU、存儲(chǔ)器模塊和設(shè)備控制器之間的通信等。 串行通信中,數(shù)據(jù)流以串行方式逐位地在一條信道上傳輸,每次只能發(fā)送或接收一個(gè)數(shù)據(jù)

34、位。串行通信的特點(diǎn)是:硬件上最少只需要一對(duì)傳輸線即可完成,數(shù)據(jù)傳送按位進(jìn)行,適用于數(shù)據(jù)位數(shù)多、遠(yuǎn)距離傳輸場(chǎng)合。串行通信使得設(shè)備之間的連線大為減少,但也帶來了數(shù)據(jù)的串/并轉(zhuǎn)換、并/串轉(zhuǎn)換以及位計(jì)數(shù)等問題。 串行通信有兩種基本通信方式:同步通信和異步通信。,1. 串行異步通信幀格式 異步串行通信以字符為單位,以相同的幀格式傳送。每一幀信息由起始位,數(shù)據(jù)位,奇偶校驗(yàn)位和停止位組成。如圖4.9所示。 圖4.9 串行異步通信幀格式 (1) 起始位。通信線在沒有數(shù)據(jù)傳輸時(shí)處于邏輯“1”狀態(tài),當(dāng)發(fā)送器要發(fā)送一個(gè)字符的數(shù)據(jù)時(shí),首先發(fā)送一個(gè)邏輯“0”信號(hào),表示其后所傳輸?shù)臑閿?shù)據(jù)。起始位表示字符傳輸開始。 (2)

35、 數(shù)據(jù)位。起始位之后為數(shù)據(jù)位。數(shù)據(jù)位的個(gè)數(shù)是5、6、7或8位,低位在前,高位在后。 (3) 奇偶校驗(yàn)位。奇偶校驗(yàn)用于有限差錯(cuò)檢測(cè),是通信雙方約定一致的檢錯(cuò)方式。奇偶校驗(yàn)位為冗余位,可由用戶根據(jù)需要選擇使用。 (4) 停止位。在奇偶位或數(shù)據(jù)位(當(dāng)無奇偶校驗(yàn)時(shí))之后是停止位。可以是1位、 位或2位,表示一個(gè)字符傳輸?shù)慕Y(jié)束。在發(fā)送的間隙,即空閑時(shí),通信線路總處于邏輯“1”狀態(tài)。,2. 單工、半雙工、全雙工通信方式 串行數(shù)據(jù)通信有以下三種數(shù)據(jù)通路形式:?jiǎn)喂ぃ⊿implex) 、半雙工(Half-duplex) 、全雙工(Full-duplex) 圖4.10 單工形式串行通信圖 4.11 半雙工形式串行

36、通信 圖4.12 全雙工形式串行通信,3波特率 通信線上的數(shù)據(jù)按位傳送,每一位量度(位信號(hào)持續(xù)時(shí)間)由數(shù)據(jù)傳送速率決定。每秒傳送的位數(shù)量稱之為波特率(baud rate)。如每秒傳送一位就是1波特,即: 1波特1位/秒(1bps) 串行通信中常用的標(biāo)準(zhǔn)波特率有:600、1200、2400、4800、9600、19200等。 4.4.2 EIA-232-D接口標(biāo)準(zhǔn) EIA-232-D是由美國(guó)電子工業(yè)協(xié)會(huì)正式公布的串行總線標(biāo)準(zhǔn),也是目前最常用的串行接口標(biāo)準(zhǔn),用來實(shí)現(xiàn)計(jì)算機(jī)之間、計(jì)算機(jī)與外設(shè)之間的數(shù)據(jù)通信。EIA-232-D總線接口適用于設(shè)備之間距離不大于15米,傳輸速度最大20kb/s。 1EIA

37、-232-D信號(hào)引腳定義 EIA-232-D定義了22根線,采用標(biāo)準(zhǔn)25芯 (DB-25) 插頭座,在EIA-232中描述的連接器還有DB-9。如表4.1和4.2所示。 2電氣特性 EIA-232-D采用負(fù)邏輯,即: 邏輯“1”:-3V-15V 邏輯“0”:+3V+15V EIA-232-D的邏輯電平與TTL電平不兼容,為了與TTL器件相連必須進(jìn)行電平轉(zhuǎn)換。,3. EIA-232-D端口的直接連接 兩臺(tái)計(jì)算機(jī)可通過調(diào)制解調(diào)器(Modem),由電話線連接實(shí)現(xiàn)長(zhǎng)距離通信。在工業(yè)數(shù)據(jù)通信中,常直接將兩臺(tái)計(jì)算機(jī)的EIA-232端口連接。在通信過程中,不需要握手時(shí),只需要3根連接線,DB-9連接器的接線

38、如圖4.13(a)所示。在需要握手時(shí),還需要將請(qǐng)求發(fā)送、允許發(fā)送、準(zhǔn)備就緒等信號(hào)端形成如圖4.13(b)所示的交叉連接形式。,(a) 無握手 (b) 全握手 圖4.13 EIA-232端口的直接連接,4.4.3 MCS-51單片機(jī)串行口 MCS-51單片機(jī)內(nèi)部有一個(gè)全雙工的串行口,有兩個(gè)獨(dú)立的接收、發(fā)送緩沖器SBUF(地址都是99H,屬于特殊功能寄存器),可同時(shí)發(fā)送和接收數(shù)據(jù)。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,用讀、寫指令加以區(qū)分。由于串口接收部分由輸入移位寄存器和接收緩沖器構(gòu)成雙緩沖結(jié)構(gòu),所以在接收緩沖器讀出數(shù)據(jù)之前,串行口可以開始接收第二個(gè)字節(jié)。但是如果第二個(gè)字節(jié)已接

39、收完畢時(shí),第一個(gè)字節(jié)還沒有讀出,則將丟失其中一個(gè)字節(jié)。MCS-51串行口除了用于數(shù)據(jù)通信之外,還可以非常方便地構(gòu)成一個(gè)或多個(gè)并行輸入/輸出口,或作為串并轉(zhuǎn)換,用來驅(qū)動(dòng)鍵盤或顯示器。 1串行口控制寄存器 串行口有四種工作方式,串行口的控制寄存器有兩個(gè),即特殊功能寄存器SCON和PCON。 (1)串行口控制寄存器SCON SCON為特殊功能寄存器,字節(jié)地址為98H,可位尋址,位地址從98H到9FH,SCON的格式為: SCON控制寄存器的定義: SM0、SM1:控制串行口工作方式。定義如表4.3,表4.3 串行口工作方式 SM2:為多機(jī)通信設(shè)置的控制位,允許工作在方式2和方式3的單片機(jī)實(shí)現(xiàn)多機(jī)通信

40、。在工作方式2或方式3,若SM2=1,當(dāng)接收到的第9位數(shù)據(jù)(RB8)為0時(shí),RI=0,接收的數(shù)據(jù)丟棄; 當(dāng)RB8=1時(shí),置RI1,接收數(shù)據(jù)有效。在工作方式1,若SM21,當(dāng)接收有效停止位時(shí),置RI1,數(shù)據(jù)有效;沒有接收到有效停止位時(shí),RI0,數(shù)據(jù)無效。在方式0時(shí),SM2應(yīng)為0。 REN:接收允許控制位。通過軟件置“1”/清零使得串行口允許/禁止接收數(shù)據(jù)。 TB8:在方式2和方式3中要發(fā)送的第9數(shù)據(jù)位,可根據(jù)需要置“1”或清零。 RB8:在方式2和方式3中接收的第9數(shù)據(jù)位。在方式1,SM2=0,RB8 接收的是停止位。在方式0,RB8不用。 TI:發(fā)送中斷標(biāo)志。在串行發(fā)送時(shí),在方式0發(fā)送完第8位

41、數(shù)據(jù)時(shí)由硬件置位TI, 在其他方式下,開始發(fā)送停止位時(shí)硬件置位TI。必須由軟件清零。 RI:接收中斷標(biāo)志。在串行接收(不考慮SM2)時(shí),在方式0接收完第8位數(shù)據(jù)時(shí)由硬件置位RI, 在其他方式下,接收停止位中硬件置位RI。必須由軟件清零。,(2)電源控制寄存器PCON PCON其字節(jié)地址為87H,無位地址。其中與串行口有關(guān)的只有D7位。 SMOD:波特率加倍位。在計(jì)算串行方式1、2、3的波特率時(shí),SMOD0,波特率不加倍;SMOD1,波特率加倍。 2串行口工作方式 (1) 方式0 在方式0下,串行口為同步移位寄存器方式,波特率固定,為fosc/12。數(shù)據(jù)由RxD(P3.0)端出入,同步移位脈沖由

42、TXD(P3.1)端輸出,發(fā)送、接收都是8位數(shù)據(jù),低位在前,高位在后。圖4.14為串行口在方式0下的功能框圖。,圖4.14 串行口在方式0下的功能框圖,發(fā)送階段CPU在S6P2時(shí)刻向緩沖器SBUF寫操作時(shí),“1”被裝入發(fā)送移位寄存器的第9位,并告之發(fā)送控制模塊開始發(fā)送。當(dāng)寫有效后,相隔一個(gè)機(jī)器周期發(fā)送控制端SEND有效(高電平),允許移位寄存器的輸出從RxD(P3.0)引腳發(fā)送,同時(shí)允許移位時(shí)鐘SHIFT CLOCK從TxD(P3.1)引腳輸出。每個(gè)機(jī)器周期的S6P2時(shí)刻,SEND有效時(shí),發(fā)送移位寄存器向右移一位。每向右移一位,從左邊向最高位移入一個(gè)“0”位。當(dāng)數(shù)據(jù)的最高位到達(dá)移位寄存器的輸出

43、位后,最初裝入在第9位的“1”移到了最高位的左邊,并且其左邊所有的位都為“0”,這一條件標(biāo)志發(fā)送控制模塊在將最高位移出后將使SEND無效,并置TI=1。 接收的初始化的條件為:REN=1和RI=0。在下個(gè)周期S6P2時(shí)刻,接收控制單元將11111110寫入接收移位寄存器,相隔一個(gè)機(jī)器周期使接收控制RECEIVE有效。RECEIVE允許移位時(shí)鐘SHIFT CLOCK從TxD(P3.1)引腳輸出,當(dāng)RECEIVE有效時(shí),每個(gè)機(jī)器周期的S6P2時(shí)刻,接收移位寄存器的內(nèi)容左移一位,右邊進(jìn)來的值是S5P2 時(shí)刻從P3.0引腳采樣的值。當(dāng)初始化裝入的值11111110左邊的“1”逐步移出,“0”到達(dá)移位寄

44、存器的最左邊時(shí),標(biāo)志著接收控制模塊再作最后一次左移,并將移位寄存器的結(jié)果裝入SBUF,在第10個(gè)機(jī)器周期置RI=1,使RECEIVE無效。 圖4.15為相應(yīng)的時(shí)序。在方式0中,SCON中的TB8位沒有用,SM2位(多機(jī)通信控制位)必須為“0”,由TI和RI標(biāo)志向CPU申請(qǐng)中斷,CPU需通過TI和RI標(biāo)志位判斷是發(fā)送還是接收中斷,因而不通過硬件清零,在程序中用指令清零。,圖4.15 串行口在方式0下發(fā)送、接收時(shí)序圖,(2) 方式1 當(dāng)SM0 SM1=01時(shí),串行口工作在方式1,為8位異步通信接口,一幀的信息為10位,通過TxD發(fā)送或RxD接收:1位起始位、8位數(shù)據(jù)位(低位在前)和1位停止位。在接

45、收時(shí),停止位進(jìn)入SCON的RB8。波特率由定時(shí)器1的溢出率決定。 與方式0相似,發(fā)送階段CPU向SBUF寫數(shù)據(jù)的同時(shí)將“1”裝入發(fā)送移位寄存器的第9位,并向發(fā)送控制單元標(biāo)志請(qǐng)求發(fā)送。發(fā)送由SEND控制信號(hào)有效,并將起始位發(fā)送到TxD開始。一個(gè)位時(shí)間之后,數(shù)據(jù)有效,允許移位寄存器的輸入位發(fā)送到TxD。當(dāng)最后一位發(fā)送完,發(fā)送控制單元使SEND無效,在計(jì)數(shù)的第10次翻轉(zhuǎn)時(shí)置TI1。圖4.16為串行口在方式1下的功能框圖。 圖4.17為串行口在方式1下發(fā)送和接收相應(yīng)的時(shí)序圖。當(dāng)檢測(cè)到RxD引腳發(fā)生“1”到“0”跳變時(shí)啟動(dòng)接收,接收控制器以16倍波特率速率對(duì)RxD引腳采樣,同時(shí)計(jì)數(shù)器立刻復(fù)位,并將1FF

46、H寫入輸入移位寄存器。每個(gè)位時(shí)間被16等分,在第7、8、9時(shí)刻對(duì)RxD的位信息進(jìn)行采樣,將其中兩次以上相等的值作為采樣值,以防止噪聲干擾。若第一位采樣值不是“0”,則不是起始位,接收電路復(fù)位,控制電路重新檢測(cè)下一個(gè)“1”到“0”的跳變;若是起始位,則將其移位進(jìn)入移位寄存器,并接收本幀的其他信息。,圖4.16 串行口在方式1下的功能框圖,圖4.17串行口在方式1下發(fā)送、接收時(shí)序圖,數(shù)據(jù)位從右邊進(jìn)入,“1”從左邊移出。當(dāng)起始位到達(dá)移位寄存器的最右邊時(shí)(方式1是9位寄存器),接收控制單元需再作最后一次移位。只有當(dāng)最后一次移位時(shí),如果同時(shí)滿足以下條件: RI=0 SM2=0或收到的停止位為“1” 則接

47、收的數(shù)據(jù)有效,8位數(shù)據(jù)裝入SBUF,停止位進(jìn)入RB8,置RI=1。接收控制器再次采樣RxD引腳的負(fù)跳變。如果上述條件之一不滿足,接收的信息將丟棄。 (3) 方式2 當(dāng)SM0 SM1=10時(shí),串行口工作在方式2,為9位異步通信接口。一幀的信息為11位,通過TxD發(fā)送或RxD接收:1位起始位、8位數(shù)據(jù)位、1位可編程第9數(shù)據(jù)位和1位停止位。發(fā)送時(shí),第9數(shù)據(jù)位TB8根據(jù)需要設(shè)置為“0”或“1”。TB8既可作為多機(jī)通信中的地址、數(shù)據(jù)標(biāo)志位,又可作為數(shù)據(jù)的奇偶校驗(yàn)位;在接收時(shí),第9數(shù)據(jù)位進(jìn)入SCON的RB8。 方式2發(fā)送:數(shù)據(jù)由TxD輸出,附加的第9位數(shù)據(jù)為SCON中的TB8。當(dāng)CPU執(zhí)行寫SBUF指令后

48、,發(fā)送隨著SEND信號(hào)有效開始,送完一幀信息后,使SEND無效并置TI=1。圖4.18為串行口在方式2下發(fā)送和接收相應(yīng)的時(shí)序圖。,圖4.18 串行口在方式2下發(fā)送、接收時(shí)序圖,下面是一個(gè)發(fā)送中斷服務(wù)程序,TB8為奇偶校驗(yàn)位,R0為發(fā)送數(shù)據(jù)區(qū)地址指針。 SEND:PUSHPSW;保護(hù)現(xiàn)場(chǎng) PUSHA CLRTI;發(fā)送中斷標(biāo)志位清零 MOVA, R0;取數(shù)據(jù) MOVC, P;奇偶位送TB8 MOVTB8, C MOVSBUF, A;數(shù)據(jù)寫入發(fā)送緩沖器,啟動(dòng)發(fā)送 INCR0;數(shù)據(jù)指針加1 POPA;恢復(fù)現(xiàn)場(chǎng) POPPSW RETI;中斷返回 方式2接收:當(dāng)REN=1時(shí),與方式1相同,檢測(cè)到RxD引腳

49、發(fā)生“1”到“0”跳變時(shí)啟動(dòng)接收,采樣到起始位后,數(shù)據(jù)位依次進(jìn)入移位寄存器,當(dāng)最后一位數(shù)據(jù)進(jìn)入移位寄存器時(shí),只有以下兩個(gè)條件同時(shí)滿足: RI=0 SM2=0或收到的第9位數(shù)據(jù)為“1” 則接收的數(shù)據(jù)有效,接收控制塊控制8位數(shù)據(jù)裝入SBUF,第9位數(shù)據(jù)進(jìn)入RB8,并置RI=1。如果上述條件之一不滿足,則將接收的數(shù)據(jù)丟棄。,下面是一個(gè)接收中斷服務(wù)程序?qū)嵗?,程序有奇偶校?yàn),R1為接收數(shù)據(jù)緩沖區(qū)地址指針。 RECEIVE:PUSHPSW;保護(hù)現(xiàn)場(chǎng) PUSHA CLRRI;接收中斷標(biāo)志位清零 MOVA, SBUF;接收數(shù)據(jù) MOVC, P;取奇偶位 JNCL1; JNBRB8, ER;奇偶校驗(yàn)錯(cuò)則轉(zhuǎn)錯(cuò)誤處

50、理 SJMPL2;奇偶校驗(yàn)轉(zhuǎn)L2 L1:JBRB8, ER;奇偶校驗(yàn)錯(cuò)則轉(zhuǎn)錯(cuò)誤處理 L2:MOVR1, A;接收數(shù)據(jù)存數(shù)據(jù)緩沖器 INCR1;數(shù)據(jù)指針加1 POPA;恢復(fù)現(xiàn)場(chǎng) POPPSW LJMPEND ER:;錯(cuò)誤處理(略) END:RETI,(4) 方式3 當(dāng)SM0 SM1=11時(shí),串行口工作在方式3,為波特率可變的9位異步通信方式。除波特率可變之外,方式3與方式2相同。 3串行口通信波特率的設(shè)置 方式0:波特率=系統(tǒng)振蕩頻率fosc/12 方式2:波特率=2SMOD fosc/64 方式1、3:波特率=2SMOD 定時(shí)器1的溢出率/32 作為波特率時(shí),定時(shí)器1不允許中斷,典型的應(yīng)用是工

51、作在定時(shí)器方式,時(shí)間常數(shù)自動(dòng)重裝,這時(shí)的波特率計(jì)算公式為: 例如,系統(tǒng)時(shí)鐘頻率fosc=6MHz,當(dāng)SMOD=1,波特率選擇為2400時(shí),時(shí)間常數(shù)為: 定時(shí)器初始化程序如下:,MOVTMOD,#20H;定時(shí)器T1方式2,定時(shí)方式 MOVTH1,#0F3H;置時(shí)間常數(shù) MOVTL1,#0F3H MOVPCON,#80H;SMOD=1 MOVSCON,#50H;串行口工作方式1 SETBTR1;啟動(dòng)定時(shí)器T1 4雙機(jī)通信程序舉例 例4.3設(shè)甲、乙兩單片機(jī)時(shí)鐘頻率為6MHz,通信波特率為2400,甲發(fā)送數(shù)據(jù),已接收數(shù)據(jù)。開始通信時(shí),由甲發(fā)送呼叫信號(hào)“00”,詢問乙是否可以接收數(shù)據(jù)。乙收到呼叫信號(hào)后,

52、如同意接收數(shù)據(jù)則發(fā)送“00”給甲,否則發(fā)送“FF”暫不接收數(shù)據(jù)。甲收到乙回復(fù)信號(hào),如果是“00”,向乙發(fā)送數(shù)據(jù);如果是“FF”,則繼續(xù)向乙呼叫,直到收到“00”并發(fā)送數(shù)據(jù)。發(fā)送數(shù)據(jù)格式為: 累計(jì)校驗(yàn)和為字節(jié)數(shù)、數(shù)據(jù)1,數(shù)據(jù)n,這(n+1)個(gè)字節(jié)內(nèi)容的和。乙機(jī)根據(jù)接收到的校驗(yàn)和判別乙收到的數(shù)據(jù)是否正確。若正確,向甲發(fā)送“0F”,否則發(fā)送“F0”給甲。甲在收到信號(hào)“0F”后,返回被調(diào)用程序。 (1) 甲發(fā)送子程序 初始化設(shè)置:定時(shí)器T1工作方式2,時(shí)間常數(shù)F3H,SMOD=1;串行口工作方式1,允許接收。內(nèi)部RAM和工作寄存器設(shè)置:31H和30H存放數(shù)據(jù)首地址,2FH存放數(shù)據(jù)長(zhǎng)度,R6為累加和。發(fā)

53、送程序框圖如圖4.19。,圖4.19 發(fā)送程序框圖,發(fā)送程序: FMT_T_S:MOVTMOD, #20H;波特率設(shè)置 MOVTH1, #0F3H MOVTL1, #0F3H SETBTR1 MOVSCON, #50H;串行口初始化 MOVPCON,#80H;置SMOD=1 FMT_RAM:MOVDPH, 31H;設(shè)置DPTR指針 MOVDPL, 30H MOVR7, 2FH;字節(jié)數(shù)送R7 MOVR6, #00H;累加和寄存器清零 TX_ACK:MOVA, #00H;發(fā)送“00” MOVSBUF, A WAIT1:JBCTI, RX_YES;等待發(fā)送完一個(gè)字節(jié) SJMPWAIT1 RX_YES

54、:JBCRI, NEXT1;等待乙機(jī)回答 SJMPRX_YES NEXT1:MOVA, SBUF;乙機(jī)不同意接收時(shí)繼續(xù)呼叫 CJNEA, #00H, TX_ACK TX_BYTES:MOVA, R7;發(fā)送字節(jié)數(shù) MOVSBUF, A,(2) 乙接收子程序 初始化設(shè)置:定時(shí)器T1工作方式2,時(shí)間常數(shù)F3H,SMOD=1;串行口工作方式1,允許接收。內(nèi)部RAM和工作寄存器設(shè)置:31H和30H存放接收數(shù)據(jù)緩沖區(qū)首地址,R7存放數(shù)據(jù)長(zhǎng)度,R6為累加和。接收程序框圖如圖4.20。 圖4.20 接收程序框圖,接收程序: FMT_T_S:MOVTMOD, #20H;波特率設(shè)置 MOVTH1, #0F3H M

55、OVTL1, #0F3H SETBTR1 MOVSCON, #50H;串行口初始化 MOVPCON,#80H;置SMOD=1 FMT_RAM:MOVDPH, 31H;設(shè)置DPTR指針 MOVDPL, 30H MOVR6, #00H;累加和寄存器清零 RX_ACK:JBCRI, IF_00H;接收呼叫信號(hào) SJMPRX_ACK IF_00H:MOVA, SBUF;判斷呼叫信號(hào)是否正確 CJNEA, #00H, TX_FFH TX_00H:MOVA,#00H;向甲發(fā)送同意接收信號(hào) MOVSBUF, A WAIT1:JBCTI, RX_BYTES;等待應(yīng)答信號(hào)發(fā)送完 SJMPWAIT1 TX_FFH

56、:MOVA, #0FFH;向甲發(fā)送呼叫信號(hào)不正確 MOVSBUF, A 圖4.20 接收程序框圖,WAIT2:JBCTI, HAVE1 SJMPWAIT2 HAVE1:LJMPRX_ACK;返回接收呼叫信號(hào) RX_BYTES:JBCRI, HAVE2;接收數(shù)據(jù)長(zhǎng)度 SJMPRX_BYTES HAVE2:MOVA, SBUF;存入長(zhǎng)度寄存器 MOVR7, A MOVR6, A;累加和 RX_NEWS:JBCRI, HAVE3;接收數(shù)據(jù)存入外部RAM SJMP RX_NEWS HAVE3:MOVA, SBUF MOVXDPTR, A INCDPTR ADD A, R6;累加和計(jì)算 MOVR6, A

57、 DJNZR7, RX_NEWS;數(shù)據(jù)是否接收完? RX_SUM:JBCRI, HAVE4;接收校驗(yàn)和 SJMPRX_SUM HAVE4:MOVA, SBUF;判斷校驗(yàn)和 CJNEA, R6, TX_ERR,TX_RIGHT:MOVA, #0FH;向甲發(fā)送接收正確信號(hào) MOVSBUF, A TX_ERR:MOVA, #0F0H;向甲發(fā)送接收錯(cuò)誤信號(hào) MOVSBUF, A WAIT4:JBCTI, AGAIN SJMPWAIT4 AGAIN:LJMPFMT_RAM;重新接收數(shù)據(jù) GOOD:RET 5單片機(jī)多機(jī)通信原理 51系列單片機(jī)具有多機(jī)通信功能,可構(gòu)成各種分布式系統(tǒng),圖4.21為主從式多機(jī)通信方式。 圖4.21 單片機(jī)主從多機(jī)通信,圖4.21中,一臺(tái)主機(jī)與多臺(tái)從機(jī)通信,主機(jī)的TxD和RxD分別與從機(jī)的RxD和TxD相連,主機(jī)可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論