第八章 8051內(nèi)部資源的C編程_第1頁
第八章 8051內(nèi)部資源的C編程_第2頁
第八章 8051內(nèi)部資源的C編程_第3頁
第八章 8051內(nèi)部資源的C編程_第4頁
第八章 8051內(nèi)部資源的C編程_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第八章8051內(nèi)部資源的C編程8.1中斷8.2定時器8.3串行口8.1中斷8.1.1中斷的概念一、中斷的概念當(dāng)中央處理器CPU正在執(zhí)行某程序時,由于某種原因,外界向CPU發(fā)出了暫停目前工作去處理更重要事件的請求,程序被打斷,CPU響應(yīng)該請求并轉(zhuǎn)入相應(yīng)的處理程序,處理程序完成以后,再返回到原來程序被打斷的位置,繼續(xù)原來的工作,這一過程稱為中斷。實現(xiàn)中斷功能的部件稱為中斷系統(tǒng)。二、中斷的作用可以實現(xiàn)CPU與外部設(shè)備的并行工作,提高CPU利用效率??梢詫崿F(xiàn)CPU對外部事件的實時處理,進行實時控制。實現(xiàn)多項任務(wù)的實時切換。中斷技術(shù)實質(zhì)上是一種資源共享技術(shù)?;谶@種資源共享思想,中斷技術(shù)主要用于分時操作、實時處理、故障及時處理等。8.1.2

80C51單片機中斷系統(tǒng)

80C51中斷系統(tǒng)由中斷源、中斷標(biāo)志、中斷允許控制、中斷優(yōu)先級控制、中斷查詢硬件以及相應(yīng)的特殊功能寄存器組成。一、中斷源

80C5l共有3類5個中斷源,分別是2個外部中斷源、2個定時中斷源、1個串行口接收/發(fā)送中斷源。1)外部中斷 外部中斷0和外部中斷1,分別由引腳INT0(P3.2)和INT1(P3.3)引入。2)定時中斷

80C5l單片機內(nèi)有兩個定時器/計數(shù)器T0、T1,當(dāng)計數(shù)值發(fā)生溢出時,定時器/計數(shù)器的中斷請求標(biāo)志位TF0或TF1被置1,也就向CPU發(fā)出了中斷請求的申請。3)串行口中斷 當(dāng)串行口接收或發(fā)送完一組數(shù)據(jù)時,便產(chǎn)生一個中斷請求,特殊功能寄存器SCON中的RI或TI被置1。二、中斷請求標(biāo)志 要實現(xiàn)中斷,首先中斷源要提出中斷請求,單片機內(nèi)中斷請求的過程是特殊功能寄存器TCON和SCON相關(guān)狀態(tài)位——中斷請求標(biāo)志位置1的過程,當(dāng)CPU響應(yīng)中斷時,中斷請求標(biāo)志位才由硬件或軟件清0。1、TCON--定時器/計數(shù)器控制寄存器 該寄存器用于保存外部中斷請求,以及作為定時器的計數(shù)溢出標(biāo)記。既可以對其整個字節(jié)尋址,又可以對其位尋址。寄存器地址88H,位地址8FH~88H,這個寄存器既有定時器/計數(shù)器的控制功能又有中斷控制功能,其中與中斷有關(guān)的控制位共6位:IE0和IE1、IT0和IT1以及TF0和TF1。TF0、TF1:定時器0/定時器1的溢出中斷標(biāo)志。T0被啟動計數(shù)后,從初值做加1計數(shù),計滿溢出后由硬件置位TF0,同時向CPU發(fā)出中斷。IE0、IE1:外部中斷0/外部中斷1中斷標(biāo)志。IE0=1,外部中斷0向CPU申請中斷。IT0、IT1:外部中斷0/外部中斷1觸發(fā)方式控制位。當(dāng)IT0=0時,外部中斷0控制為電平觸發(fā)方式。當(dāng)IT0=1時,外部中斷0控制為邊沿觸發(fā)方式。IT0IE0IT1IE1TF0TF1D0D1D2D3D4D5D6D72、SCON--串行口控制寄存器

SCON寄存器地址98H,位地址9FH~98H,其中的低2位RI和TI鎖存串行口的接收中斷和發(fā)送中斷的申請標(biāo)志位。RITID0D1D2D3D4D5D6D7TI:串行發(fā)送中斷標(biāo)志

CPU將數(shù)據(jù)寫入發(fā)送緩沖器SBUF時,就啟動發(fā)送,每發(fā)送完一個串行幀,硬件將使TI置位。注意:CPU響應(yīng)中斷時并不清除TI,必須由軟件清除。RI:串行接收中斷標(biāo)志在串行口允許接收時,每接收完一個串行幀,硬件將使RI置位。注意:CPU在響應(yīng)中斷時不會清除RI,必須由軟件清除三、中斷控制 中斷控制主要通過中斷允許寄存器IE和中斷優(yōu)先級寄存器IP實現(xiàn)。1、IE--中斷允許控制寄存器 中斷源申請后,中斷能否被響應(yīng),取決于CPU對中斷源的開放或屏蔽狀態(tài),由內(nèi)部的中斷允許寄存器IE進行控制,IE的地址是A8H,位地址為AFH~A8H。

EA:總中斷允許控制位。EA=1,開放所有中斷,各中斷源的允許和禁止可通過相應(yīng)的中斷允許位單獨加以控制;EA=0,禁止所有中斷。ES:串行口中斷允許位。ES=1,允許串行口中斷;ES=0,禁止串行口中斷。ET1:定時器1中斷允許位。EX1:外部中斷1中斷允許位。ET0:定時器0中斷允許位。EX0:

外部中斷0中斷允許位。EX0ET0EX1ET1ESEAD0D1D2D3D4D5D6D72、IP--中斷優(yōu)先級控制寄存器80C51有兩個中斷優(yōu)先級,每個中斷源均可通過軟件設(shè)置為高優(yōu)先級或低優(yōu)先級中斷,實現(xiàn)2級中斷嵌套。為實現(xiàn)以上功能,80C51中斷系統(tǒng)設(shè)有兩個不可尋址的優(yōu)先級狀態(tài)觸發(fā)器,一個指示CPU是否正在執(zhí)行高優(yōu)先級中斷服務(wù)程序,而另一個指示CPU是否正在執(zhí)行低優(yōu)先級中斷服務(wù)程序。前一個觸發(fā)器的1狀態(tài)屏蔽所有的中斷申請,而后一個觸發(fā)器的1狀態(tài)屏蔽相同優(yōu)先級的其他中斷申請。特殊功能寄存器IP為中斷優(yōu)先級控制寄存器,其地址為B8H,位地址為BFH~B8H,各位內(nèi)容如表所示。PS:串行口中斷優(yōu)先控制位PS=1,設(shè)定串行口為高優(yōu)先級中斷;PS=0,設(shè)定串行口為低優(yōu)先級中斷。PT1:定時器T1中斷優(yōu)先控制位PX1:外部中斷1中斷優(yōu)先控制位

PT0:定時器T0中斷優(yōu)先控制位PX0:外部中斷0中斷優(yōu)先控制位

當(dāng)系統(tǒng)復(fù)位后,所有中斷源均設(shè)定為低優(yōu)先級中斷。PX0PT0PX1PT1PSD0D1D2D3D4D5D6D7MCS-51單片機的中斷優(yōu)先級控制原則CPU同時接收到幾個中斷請求時,首先響應(yīng)優(yōu)先級最高的中斷請求(先高后低)正在進行的低優(yōu)先級中斷服務(wù)程序能被高優(yōu)先級中斷請求所中斷,實現(xiàn)二級嵌套(停低轉(zhuǎn)高)正在進行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷,一直執(zhí)行到返回指令RETI,返回主程序,而后再執(zhí)行一條指令后,才能響應(yīng)新的中斷申請(高不睬低)當(dāng)同一優(yōu)先級的幾個中斷源同時向CPU提出中斷請求時,CPU通過內(nèi)部硬件查詢邏輯電路,按查詢順序判定優(yōu)先響應(yīng)哪一個中斷請求,其查詢順序如下:外部中斷0、定時中斷0、外部中斷1、定時中斷1、串行中斷。中斷系統(tǒng)的結(jié)構(gòu)框圖8.1.3中斷處理過程 一個完整的中斷處理過程包括中斷請求、中斷響應(yīng)、中斷服務(wù)、中斷返回幾個部分。1、中斷請求

MCS-51單片機的中斷請求由硬件自動完成。定時中斷和串行中斷在單片機內(nèi)部自動完成。外部中斷的中斷請求信號要由INT0(P3.2)和INT1(P3.3)兩個引腳由單片機外部提供。2、中斷響應(yīng) 中斷響應(yīng)指系統(tǒng)滿足中斷條件,CPU對中斷請求做出反應(yīng),程序執(zhí)行轉(zhuǎn)向中斷服務(wù)程序入口地址的過程。CPU在每個機器周期的S5P2對INT0或INT1進行采樣,并設(shè)置中斷標(biāo)志位的狀態(tài),而其他中斷源的中斷請求發(fā)生在單片機內(nèi)部,直接設(shè)置相應(yīng)的中斷標(biāo)志位的狀態(tài)。CPU在每個機器周期的S6按順序查詢每個中斷請求標(biāo)志位,如果有中斷請求滿足所有中斷允許條件,則CPU將在下個機器周期的S1按中斷優(yōu)先級響應(yīng)激活最高級中斷請求。CPU要響應(yīng)中斷請求,除了前面介紹的要有中斷請求、中斷被允許基本條件外,如果出現(xiàn)下列條件之一,則中斷響應(yīng)將被阻止:1)CPU正在處理同級的或更高優(yōu)先級的中斷。2)當(dāng)前的機器周期不是所執(zhí)行指令的最后一個機器周期,CPU不會響應(yīng)任何中斷請求。3)正在執(zhí)行的指令是RETI或是訪問IE或IP的指令。CPU完成這類指令后,至少還要再執(zhí)行一條指令才會響應(yīng)新的中斷請求,以便保證程序能夠正確地返回。如果存在上述任何一個條件,CPU都會丟棄中斷查詢結(jié)果,否則將在隨后的機器周期開始響應(yīng)中斷。

中斷響應(yīng)過程流程圖

3、CPU響應(yīng)中斷后,完成如下操作:

1)根據(jù)中斷請求的優(yōu)先級高低,使相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1,禁止同級或低級中斷

2)清相應(yīng)的中斷請求標(biāo)志位IE0、IE1、TF0、TF1 3)保護斷點,將當(dāng)前的PC值壓入椎棧

4)把被響應(yīng)的中斷入口地址送入PC,轉(zhuǎn)入執(zhí)行相應(yīng)的中斷服務(wù)程序

5)結(jié)束中斷時執(zhí)行RETI指令,恢復(fù)斷點,返回主程序各中斷服務(wù)程序的入口地址: 外部中斷0 0003H

定時器/計數(shù)器0 000BH

外部中斷1 0013H

定時器/計數(shù)器1 001BH

串行口中斷 0023H4、中斷請求的撤除對于定時中斷,由硬件自動對中斷標(biāo)志位TF0或TFl清0。對于脈沖觸發(fā)的外部中斷請求,在中斷響應(yīng)后,也同樣通過硬件自動對中斷請求標(biāo)志位IE0或IE1清0,即中斷請求的撤除也是自動的。

對于電平觸發(fā)的外部中斷請求。中斷響應(yīng)后,硬件不能自動對中斷請求標(biāo)志位IE0或IE1清0。中斷的撤除,要靠撤除或引腳上的低電平才能有效。對于串行中斷,其中斷標(biāo)志位TI和RI,不進行自動清0。因為在中斷響應(yīng)后,還要測試這兩個標(biāo)志位的狀態(tài),以判定是接收操作還是發(fā)送操作,然后才能清除。所以串行中斷請求的撤除是通過軟件方法,在中斷服務(wù)程序中實現(xiàn)的。 外部中斷請求撤消方案之一:通過D觸發(fā)器連接外部中斷請求信號,利用一根口線作為中斷申請撤消線中斷服務(wù)程序中用下列兩條指令撤消中斷請求

CLRP1.0 SETBP1.0/INT0P1.0QD/SCLK外部中斷請求信號8.1.3

中斷服務(wù)程序1、程序初始化 對中斷控制的相關(guān)寄存器中的各有關(guān)控制位進行賦值步驟:

1)置位相應(yīng)的中斷允許標(biāo)志位及EA(設(shè)置IE)

2)設(shè)定所有中斷源的優(yōu)先級(設(shè)置IP)

3)對外部中斷應(yīng)設(shè)定中斷請求信號形式,對于定時/計數(shù)器中斷應(yīng)設(shè)置工作方式(設(shè)置TCON、TMOD)2、中斷服務(wù)程序一般情況下,中斷處理程序包括兩部分:一是中斷現(xiàn)場的保護和恢復(fù),二是為中斷源服務(wù)中斷的現(xiàn)場保護主要是在中斷時刻單片機的存儲單元中的數(shù)據(jù)和狀態(tài)的存儲。中斷的恢復(fù)是恢復(fù)單片機在被中斷前存儲單元中的數(shù)據(jù)和狀態(tài)。保護現(xiàn)場和恢復(fù)現(xiàn)場可通過堆棧操作指令PUSHdirect和POPdirect實現(xiàn)。C51編譯器會自動完成ACC、B、DPH、DPL、PSW、R0~R7的保護和恢復(fù)。C51程序員無需保護現(xiàn)場和恢復(fù)現(xiàn)場。工作寄存器的保護:寄存器組切換C51編譯器允許在C語言源程序中聲明中斷和編寫中斷服務(wù)程序,從而減輕了采用匯編程序編寫中斷服務(wù)程序的繁瑣程度。通過使用interrupt關(guān)鍵字實現(xiàn)。定義中斷服務(wù)程序的一般格式如下:

void函數(shù)名()interruptn[usingm] { }interrupt表明該函數(shù)是一個中斷服務(wù)函數(shù)。n對應(yīng)中斷源編號: 外部中斷0: 0

定時器/計數(shù)器0: 1

外部中斷1: 2

定時器/計數(shù)器1: 3

串行口中斷: 4usingm指明該中斷服務(wù)程序所對應(yīng)的工作寄存器組,m取值范圍為:0~3。3、中斷編程舉例

/INT0端口接一開關(guān),P1.0接一發(fā)光二極管,開關(guān)閉合(接地)時,發(fā)光二極管改變一次狀態(tài)

#include<reg51.h> #include<intrins.h>

sbitP10=P1^0;

sbitINT0=P3^2; voiddelay(void) {

inta=100; while(a--)_nop_(); } voidint0_srv(void)interrupt0using1 { delay(); if(INT0==0) { P10=!P10; while(INT0==0); } IE0=0; } voidmain() { P10=0; EA=1; EX0=1; while(1); }8.2定時器MCS-51單片機定時器/計數(shù)器組成定時器/計數(shù)器0(T0):16位的加計數(shù)器,由2個特殊功能寄存器TH0和TL0構(gòu)成定時器/計數(shù)器1(T1):16位的加計數(shù)器,由2個特殊功能寄存器TH1和TL1構(gòu)成定時器/計數(shù)器的功能對外部輸入信號的計數(shù)功能:定時器/計數(shù)器0(T0)的外來脈沖輸入端為P3.4;定時器/計數(shù)器1(T1)的外來脈沖輸入端為P3.5,當(dāng)輸入脈沖信號從1到0的負(fù)跳變時,計數(shù)器自動加1。計數(shù)的最高頻率一般為振蕩頻率的1/24。定時功能:定時器/計數(shù)器的定時功能也是通過計數(shù)實現(xiàn)的,它的計數(shù)脈沖是由單片機的片內(nèi)振蕩器輸出經(jīng)12分頻后產(chǎn)生的信號,即為對機器周期計數(shù)??捎糜诙〞r控制、延時、對外部事件計數(shù)和檢測等場合。定時器/計數(shù)器的控制定時器/計數(shù)器的控制主要是通過以下幾個寄存器實現(xiàn)的:TCON---定時器/計數(shù)器控制寄存器TMOD---定時器/計數(shù)器工作方式控制寄存器IE---中斷允許控制寄存器TCON--定時器/計數(shù)器控制寄存器(可位尋址)TF1:定時器1的溢出中斷標(biāo)志。T1被啟動計數(shù)后,從初值做加1計數(shù),計滿溢出后由硬件置位TF1,同時向CPU發(fā)出中斷。TF0:定時器0溢出中斷標(biāo)志。其操作功能同TF1。TR1:定時器1運行控制位。由軟件置1或清0來啟動或關(guān)閉定時器1。當(dāng)GATE=1,且為高電平時,TR1置1啟動定時器1;當(dāng)GATE=0時,TR1置1即可啟動定時器1。TR0:定時器0運行控制位。其功能及操作情況同TR1。定時器控制位外中斷控制位IT0IE0IT1IE1TR0TF0TR1TF1D0D1D2D3D4D5D6D7TMOD--定時器/計數(shù)器工作方式控制寄存器M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7定時器T1定時器T0C/T

:功能選擇位,當(dāng)設(shè)置為定時器工作方式該位為“0”;當(dāng)設(shè)置為計數(shù)器工作方式該位為“1”。

GATE:門控位。當(dāng)GATE=0時,軟件控制位TR0或TR1置1即可啟動定時器;當(dāng)GATE=1時,軟件控制位TR0或TR1須置1,同時還須(P3.2)或(P3.3)為高電平方可啟動定時器,常用于測量信號的脈寬。M1和M0:方式選擇位。定義如下:M1M0工作方式功能說明

00方式013位計數(shù)器

01方式116位計數(shù)器

10方式2自動重裝初值8位計數(shù)器

11方式3定時器0:分成兩個8位計數(shù)器定時器1:停止計數(shù)工作方式0(M1,M0=0,0)13位的計數(shù)器結(jié)構(gòu)(由TH和TL的低五位構(gòu)成)計數(shù)范圍:1---8192定時時間:(8192-初值)*T機器周期工作方式1(M1,M0=0,1)16位的計數(shù)器結(jié)構(gòu)(由TH和TL的全部構(gòu)成)計數(shù)范圍:1---65536定時時間:(65536-初值)*T機器周期工作方式2(M1,M0=1,0)為8位的計數(shù)器結(jié)構(gòu)(由TL的全部構(gòu)成,TH作為預(yù)置寄存器)計數(shù)范圍:1---256定時時間:(256-初值)*T機器周期在計數(shù)溢出后不需要由軟件向計數(shù)器賦初始值,而改由TH完成。TH0工作方式3(M1,M0=1,1)定時器/計數(shù)器的初始化初始化步驟:(1)設(shè)置工作方式(設(shè)置TMOD)(2)計算計數(shù)初值Count,裝載TH、TL(3)若采用中斷方式則T0、T1及CPU開中斷(設(shè)置IE)(4)啟動計數(shù)器工作(設(shè)置TCON----TR)1.計數(shù)器初值的計算把計數(shù)器計滿為零所需要的計數(shù)值設(shè)定為C,計數(shù)初值設(shè)定為TC,由此可得到公式:TC=M-C式中,M為計數(shù)器模值,該值和計數(shù)器工作方式有關(guān)。在方式0時M為213;在方式1時M為216;在方式2和方式3時M為28。2.定時器初值的計算在定時器模式下,計數(shù)器由單片機主脈沖經(jīng)12分頻后計數(shù)。因此,定時器定時時間T的公式:T=(M-TC)T計數(shù)上式也可寫成:TC=M-T/T計數(shù)式中,M為模值,和定時器的工作方式有關(guān);T計數(shù)是單片機振蕩周期TCLK的12倍;TC為定時器的定時初值。MCS-51單片機的定時器/計數(shù)器應(yīng)用舉例:利用定時器/計數(shù)器實現(xiàn)固定時間的定時利用定時器/計數(shù)器實現(xiàn)對外來信號脈沖的計數(shù)利用定時器/計數(shù)器實現(xiàn)對外來信號脈沖信號脈寬的測量實例一:定時器/計數(shù)器實現(xiàn)固定時間的定時題目:利用T0,使用工作方式0,在單片機的P1.0輸出一個周期為2ms,占空比為1:1的方波信號。解:周期為2ms,占空比為1:1的方波信號,只需要利用T0產(chǎn)生定時,每隔1ms將P1.0取反即可。編程步驟:計算TMOD的值由于GATE=0;M1M0=00;C/T=0;所以(TMOD)=00H計算初值(單片機振蕩頻率為12MHZ)

TC=M-T/T計數(shù)=8192-1000us/1us=7192

所以:(TH0)=0E0H,(TL0)=18H給定時器賦初值8192-1000,C語言中相當(dāng)于-1000。

TH1=-1000/32;

TL1=-1000%32;1)用定時器0的方式0編程,采用查詢方式#include<reg51.h>sbitP10=P1^0;

/*方波由P1.0口輸出*/voidmain(void)

{

TMOD=0x00;

/*設(shè)置定時器/計數(shù)器0為工作方式0*/IE=0x00;

/*禁止中斷*/TR0=1;

/*啟動定時*/for(;;){ TH0=-1000/32;

/*設(shè)置計數(shù)初值高字節(jié)*/ TL0=-1000%32;

/*設(shè)置計數(shù)初值低字節(jié)*/ do{}while(!TF0);

/*查詢計數(shù)溢出*/

P10=!P10; /*輸出取反*/ TF0=0;

/*計數(shù)溢出標(biāo)志位清0*/}}2)用定時器0的方式0編程,采用中斷方式#include<reg51.h>sbitP10=P1^0;

/*方波由P1.0口輸出*/voidint1()interrupt1using1{P10=!P10;

/*輸出取反*/TH0=-1000/32;

/*設(shè)置計數(shù)初值高字節(jié)*/TL0=-1000%32;

/*設(shè)置計數(shù)初值低字節(jié)*/}voidmain(void)

{TMOD=0x00;

/*設(shè)置定時器/計數(shù)器0為工作方式0*/TH0=-1000/32;

/*設(shè)置計數(shù)初值高字節(jié)*/TL0=-1000%32;

/*設(shè)置計數(shù)初值低字節(jié)*/

EA=1;

/*開中斷IE=0x82*/

ET0=1;

TR0=1;

/*啟動定時*/for(;;)

/*等待中斷*/}實例二:測量每1秒鐘之內(nèi)的按鍵按下次數(shù)要求:每秒的次數(shù)用發(fā)光管顯示出來每秒鐘按鍵的按下次數(shù)不超過255次實現(xiàn)的方法:利用T0計數(shù)器對從T0輸入的脈沖進行計數(shù),利用T1工作于定時。每定時達到1秒鐘,取出計數(shù)器的值進行顯示。由于每秒鐘按鍵的按下次數(shù)不超過255次,所以只需要顯示TL0的內(nèi)容即可。步驟:由于定時器的最大定時時間不能夠達到1秒鐘,我們設(shè)定T1定時100mS,每10次取一次計數(shù)值。設(shè)定TMOD,TH1,TL1的內(nèi)容,(fosc)=6MHz

所以:(TMOD)=51H

(TH1)=-50000/256

(TL1)=-50000%256#include<reg51.h>unsignedchari;voidint1(void)interrupt3using2{TR0=0;TR1=0; /*停止定時器計數(shù)器*/TH1=-50000/256;

/*重置定時器初值高字節(jié)*/TL1=-50000%256;

/*重置定時器初值低字節(jié)*/if(i<10) { i++; /*累計定時時間*/ TR0=1;TR1=1; /*重新啟動定時器計數(shù)器*/ } if(i==10) { P1=TL0; /*定時時間到,顯示按鍵次數(shù)*/ TL0=0;i=0; }}voidmain(void)

{TMOD=0x51;

/*設(shè)置定時器/計數(shù)器0為方式1計數(shù)*/ /*設(shè)置定時器/計數(shù)器1為方式1定時*/TH1=-50000/256;

/*設(shè)置定時器初值高字節(jié)*/TL1=-50000%256;

/*設(shè)置定時器初值低字節(jié)*/

TL0=0;

/*設(shè)置計數(shù)初值*/

EA=1;

/*開中斷IE=0x88*/

ET1=1;

TR0=1;

/*啟動計數(shù)*/TR1=1;

/*啟動定時*/P1=0; /*初始顯示按鍵次數(shù)0*/for(;;)

/*等待中斷*/}實例三:測量在(P3.2)端出現(xiàn)的正脈沖寬度實質(zhì):利用門控制位GATE實現(xiàn)對定時器/計數(shù)器的啟/??刂?,來測量脈沖寬度。當(dāng)GATE為1,TR1(TR0)為1時,只有INT1(INT0)引腳輸入高電平時,T1(T0)才允許計數(shù)。當(dāng)GATE為0,只要TR1(TR0)為1時,T1(T0)就允許計數(shù)。利用GATE=1時的這個功能,可測試INT1(P3.3)和INT0(P3.2)上正脈沖的寬度。P3.2TT=(TH0*256+TL0)*12/foscT0初始化(TMOD,TL0,TH0賦值)P3.2=0?啟動T0工作停止T0工作NY開始P3.2=1?NY結(jié)束P3.2=0?NY思考:脈沖展寬程序設(shè)P3.4輸入低頻窄脈沖信號,要求在P3.4輸入發(fā)生負(fù)跳變時,輸出一個500us的同步脈沖。晶振頻率為6MHz。P3.4P1.0500us8.3串行口

串行通信的基本概念1.數(shù)據(jù)通信的傳輸方式:單工、半雙工、全雙工2.并行通信和串行通信方式3.異步串行通信和同步串行通信異步串行通信(以下簡稱為異步通信)所傳輸?shù)臄?shù)據(jù)格式(也稱為串行幀)由1個起始位、7個或8個數(shù)據(jù)位、1~2個停止位(含1.5個停止位)和1個校驗位組成。起始位約定為0,空閑位約定為1。在異步通信方式中,接收器和發(fā)送器有各自的時鐘,它們的工作是非同步的。同步串行通信(以下簡稱為同步通信)中,發(fā)送器和接收器由同一個時鐘源控制。4.波特率波特率是串行通信中一個重要概念。波特率是單位時間傳輸?shù)亩M制數(shù)的位數(shù),單位:bps。波特率的倒數(shù)即為每位傳輸所需的時間。

波特率≠時鐘頻率串行口的結(jié)構(gòu)與組成:1.數(shù)據(jù)緩沖寄存器SBUF

在邏輯上,SBUF只有一個,既表示發(fā)送寄存器,又表示接收寄存器。具有同一個單元地址99H。在物理上,SBUF有兩個,一個是發(fā)送寄存器(只寫),另一個是接收寄存器(只讀)。2.數(shù)據(jù)發(fā)送與接收控制發(fā)送控制器在波特率作用下,將發(fā)送SBUF中的數(shù)據(jù)由并到串,一位位地傳輸?shù)桨l(fā)送端口;接收控制器在波特率作用下,將從接收端口接收數(shù)據(jù)由串到并,存入接收SBUF中。SBUFSBUF發(fā)送控制接收控制發(fā)送端口接收端口≥1波特率控制TXDRXDDBDBTIRI串行中斷寫SBUF讀SBUF移位寄存器移位寄存器串行口控制寄存器SCON(可位尋址)?SM0、SM1:串行口工作方式選擇位,由軟件設(shè)定。?SM2:多機通信控制位,由軟件設(shè)定。串行口的方式2和方式3適用于多機通信。在方式2或方式3中,當(dāng)SM2=1,若接收到的第9位數(shù)據(jù)(RB8)為0,則不能置位RI;只有收到RB8=1,才置位RI。SM2=1用于多機通信中,只接收地址幀,不接收數(shù)據(jù)幀。而當(dāng)SM2=0時,只要接收到一幀信息(無論是地址還是數(shù)據(jù)),RI都被置位。雙機通信時,通常使SM2=0。在方式0中,SM2必須為0。?REN:允許接收控制位,由軟件設(shè)定。REN=1時允許接收,REN=0時禁止接收。?TB8:方式2和方式3中要發(fā)送的第9位數(shù)據(jù),由軟件設(shè)定,用作奇偶校驗位或地址/數(shù)據(jù)標(biāo)志位,后者多用于多機通信。?RB8:方式2和方式3中接收到的第9位數(shù)據(jù),在方式1中,如果SM2=0,則RB8為收到的停止位。方式0不使用RB8。SM0SM1SM2RENTB8RB8TIRI電源控制寄存器PCON:沒有位尋址功能,與串行接口有關(guān)的只有D7位SM0SM1方式功能說明000移位寄存器輸入/輸出,波特率為fosc/1201110位UART,波特率可變10211位UART,波特率為fosc/32或fosc/6411311位UART,波特率可變SMOD———GF1GF0PDIDL波特率控制:該位為1時,波特率增大一倍!電源控制串行口的工作方式1.方式0:移位寄存器輸入/輸出方式寫SBUF內(nèi)部移出脈沖RXD(數(shù)據(jù)輸出)TXD(移位時鐘)TID0D1D2D3D4D5D6D7方式0發(fā)送時序:寫SCON,清RI,置REN內(nèi)部移出脈沖RIRXD(數(shù)據(jù)輸入)TXD(移位時鐘)D0D1D2D3D4D5D6D7方式0接收時序:2.方式1:10位異步通信方式

一幀數(shù)據(jù)為10位:1位起始位、8位數(shù)據(jù)位和1位停止位。寫SBUFTXD起始位停止位TID0D1D2D3D4D5D6D7方式1發(fā)送時序起始位停止位RXDRI采樣時間D0D1D2D3D4D5D6D7方式1接收時序3.方式2和方式3:11位異步通信方式方式2和方式3適用于多機通信。一幀數(shù)據(jù)為11位:1位起始位、8位數(shù)據(jù)位、1位可編程位(第9位數(shù)據(jù),用作奇偶校驗或地址/數(shù)據(jù)選擇)和1位停止位。發(fā)送時,第9位數(shù)據(jù)為TB8,接收時,第9位數(shù)據(jù)送入RB8。發(fā)送與接收時序與方式1相似,僅僅是多了一位數(shù)據(jù)TB8或RB8。波特率的設(shè)置方式0:波特率是固定的,為fosc/12方式2:SMOD=1時為fosc/32,SMOD=0時為fosc/64方式1和方式3:波特率=2SMOD

T1溢出率/32

T1溢出率=fosc/[12

(256-TC)]

,TC為定時器T1的計數(shù)初值串行口的應(yīng)用串行口初始化初始化步驟:(1)確定定時器1的工作方式(編程TMOD)(2)計算定時器1的初值(裝載TH1,TL1)(3)啟動定時器1(編程TCON----TR1)(4)確定串行口的控制(編程SCON,SMOD)(5)串行口若工作在中斷方式,須開CPU和源中斷(編程IE)

串行口進行數(shù)據(jù)傳輸時既可以采用中斷方式,也可以采用查詢方式串行口方式0應(yīng)用于擴展并行I/O口1)用并入串出8位移位寄存器74LS165擴展輸入口使用移位寄存器芯片可以擴展一個或多個8位并行I/O口。這種方法不會占用片外RAM地址,而且可節(jié)省單片機的硬件開銷。缺點是操作速度較慢,擴展芯片越多,速度越慢。RXDTXDP1.0從16位擴展輸入口讀入20個雙字節(jié)數(shù)據(jù)并存儲#include<reg51.h>sbitP10=P1^0;voidmain(void){ unsignedchari,a,b; unsignedintd[20]; F0=1;

溫馨提示

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

最新文檔

評論

0/150

提交評論