單片機(jī)課件第8章8051資源的編程_第1頁(yè)
單片機(jī)課件第8章8051資源的編程_第2頁(yè)
單片機(jī)課件第8章8051資源的編程_第3頁(yè)
單片機(jī)課件第8章8051資源的編程_第4頁(yè)
單片機(jī)課件第8章8051資源的編程_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第8章 8051內(nèi)部資源的C編程8.1中 斷8.2定時(shí)器/計(jì)數(shù)器8.3串行口2013/10/13 L12013/10/13 L8.1 中 斷中斷的基本概念 所謂中斷是指CPU對(duì)系統(tǒng)中或系統(tǒng)外發(fā)生的某個(gè)事件的一種響應(yīng)過(guò)程,即CPU暫時(shí)停止現(xiàn)行程序的執(zhí)行,而自動(dòng)轉(zhuǎn)去執(zhí)行預(yù)先安排好的處理該事件的服務(wù)子程序。當(dāng)處理結(jié)束后,再返回到被暫停程序的斷點(diǎn)處,繼續(xù)執(zhí)行原來(lái)的程序。實(shí)現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)稱(chēng)為中斷系統(tǒng)。12013/10/13 L8.1.1 中斷源1、 8051 中 斷 源中 斷 源說(shuō) 明 外部中斷0由P3.2腳輸入,低電平/負(fù)跳變觸發(fā)外部中斷1由P3.3腳輸入,低電平/負(fù)跳變觸發(fā)定時(shí)器

2、/計(jì)數(shù)器0中斷定時(shí)器T0溢出觸發(fā)定時(shí)器/計(jì)數(shù)器1中斷定時(shí)器T1溢出觸發(fā) 串行口中斷接收或發(fā)送一幀數(shù)據(jù)觸發(fā) 12013/10/13 L2、 定時(shí)器/計(jì)數(shù)器控制寄存器(TCON)TCONIT0IE0IT1IE1TR0TF0TR1TF1D7 D6 D5 D4 D3 D2 D1 D0字節(jié)地址98H IT0(IT1):外部中斷0(或1)觸發(fā)方式控制位。 IT0(或IT1)被設(shè)置為0,則選擇外部中斷為電平觸發(fā)方式; IT0(或IT1)被設(shè)置為1,則選擇外部中斷為邊沿觸發(fā)方式。 電平觸發(fā)方式: CPU在每個(gè)機(jī)器周期的S5P2采樣INTx引腳,若 INTx引腳為低電平,將直接觸發(fā)外部中斷。邊沿觸發(fā)方式:若第一

3、個(gè)機(jī)器周期采樣到 INTx引腳為高電平,第二個(gè)機(jī)器周期采樣到 INTx引腳為低電平時(shí),向CPU請(qǐng)求中斷。12013/10/13 LIE0(IE1):外部中斷0(或1)的中斷請(qǐng)求標(biāo)志位。 當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí)由硬件將 IE0(或IE1)清零。TCONIT0IE0IT1IE1TR0TF0TR1TF1D7 D6 D5 D4 D3 D2 D1 D0字節(jié)地址98H TF0(TF1):定時(shí)器中斷0(或1)的中斷請(qǐng)求標(biāo)志位。 當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí)由硬件將 TF0(或TF1)清零。12013/10/13 L3、 串行口控制寄存器(SCON) SM0 SM1 SM2 REN TB8

4、RB8 TI R1SCON RI,TI:串行口收/發(fā)數(shù)據(jù)申請(qǐng)中斷標(biāo)志位1 申請(qǐng)中斷; 0 不申請(qǐng)中斷12013/10/13 L8.1.2 中斷的控制1、 中斷允許寄存器(IE) MCS-51單片機(jī)中沒(méi)有專(zhuān)設(shè)的開(kāi)中斷和關(guān)中斷指令,對(duì)各中斷源的中斷開(kāi)放或關(guān)閉是由內(nèi)部的中斷允許寄存器IE的各位來(lái)控制的。EX0ET0EX1ET1ESEAD7 D6 D5 D4 D3 D2 D1 D0IE字節(jié)地址A8H EA:中斷允許總控位。 EA=0,屏蔽所有的中斷請(qǐng)求; EA=1,開(kāi)放中斷。 EA的作用是使中斷允許形成兩級(jí)控制。即各中斷源首先受EA位的控制;其次還要受各中斷源自己的中斷允許總控位控制。12013/10

5、/13 LEX0ET0EX1ET1ESEAD7 D6 D5 D4 D3 D2 D1 D0IE字節(jié)地址A8H ET1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位。ET1=0 禁止T1中斷;ET1=1 允許T1中斷。ES:串行口中斷允許位。ES=0 禁止串行口中斷;ES=1 允許串行口中斷。EX1:外部中斷1中斷允許位。EX1=0 禁止外部中斷1中斷;EX1=1 允許外部中斷1中斷。12013/10/13 L2、 中斷優(yōu)先級(jí)寄存器(IP) MCS-51單片機(jī)的中斷源有兩個(gè)用戶(hù)可控的中斷優(yōu)先級(jí),從而可實(shí)現(xiàn)二級(jí)中斷嵌套。中斷系統(tǒng)遵循如下三條規(guī)則: (1) 正在進(jìn)行的中斷過(guò)程不能被新的同級(jí)或低優(yōu)先級(jí)的中斷請(qǐng)求所

6、中斷,一直到該中斷服務(wù)程序結(jié)束,返回了主程序且執(zhí)行了主程序中的一條指令后,CPU才響應(yīng)新的中斷請(qǐng)求。 (2) 正在進(jìn)行的低優(yōu)先級(jí)中斷服務(wù)程序能被高優(yōu)先級(jí)中斷請(qǐng)求所中斷,實(shí)現(xiàn)兩級(jí)中斷嵌套。 (3) CPU同時(shí)接收到幾個(gè)中斷請(qǐng)求時(shí),首先響應(yīng)優(yōu)先級(jí)最高的中斷請(qǐng)求。12013/10/13 LPT2PSPT1PX1PT0PX0D7 D6 D5 D4 D3 D2 D1 D0IP字節(jié)地址B8H PT2:定時(shí)器/計(jì)數(shù)器T2的中斷優(yōu)先級(jí)控制位,只用于52子系列。PS:串行口的中斷優(yōu)先級(jí)控制位。PT1:定時(shí)器/計(jì)數(shù)器T1的中斷優(yōu)先級(jí)控制位。PX1:外部中斷1的中斷優(yōu)先級(jí)控制位。PT0:定時(shí)器/計(jì)數(shù)器T0的中斷優(yōu)先

7、級(jí)控制位。PX0:外部中斷0的中斷優(yōu)先級(jí)控制位。12013/10/13 L表8.2 中 斷 優(yōu) 先 級(jí)中 斷 源同級(jí)的中斷優(yōu)先級(jí) 外部中斷0 定時(shí)器/計(jì)數(shù)器0中斷 外部中斷1 定時(shí)器/計(jì)數(shù)器1中斷 串行口中斷 定時(shí)器/計(jì)數(shù)器2中斷最高最低12013/10/13 L8.1.3 中斷響應(yīng) 單片機(jī)響應(yīng)中斷的條件為中斷源有請(qǐng)求(中斷允許寄存器IE相應(yīng)位置1),且CPU開(kāi)中斷(即EA=1)。這樣,在每個(gè)機(jī)器周期的S5P2期間,對(duì)所有中斷源按用戶(hù)設(shè)置的優(yōu)先級(jí)和內(nèi)部規(guī)定的優(yōu)先級(jí)進(jìn)行順序檢測(cè),并可在S6期間找到所有有效的中斷請(qǐng)求。如有中斷請(qǐng)求,且滿(mǎn)足下列條件,則在下一個(gè)機(jī)器周期的S1期間響應(yīng)中斷,否則將丟棄中

8、斷采樣的結(jié)果。 (1) 無(wú)同級(jí)或高級(jí)中斷正在處理。 (2) 現(xiàn)行指令執(zhí)行到最后1個(gè)機(jī)器周期且已結(jié)束。 (3) 若現(xiàn)行指令為RETI或訪問(wèn)IE、IP的指令時(shí),執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完畢。1中斷響應(yīng)的條件12013/10/13 L CPU響應(yīng)中斷后,由硬件自動(dòng)執(zhí)行如下的功能操作: (1) 根據(jù)中斷請(qǐng)求源的優(yōu)先級(jí)高低,對(duì)相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器置1。 (2) 保護(hù)斷點(diǎn),即把程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧保存。 (3) 清內(nèi)部硬件可清除的中斷請(qǐng)求標(biāo)志位(IE0、IE1、TF0、TF1)。 (4) 把被響應(yīng)的中斷服務(wù)程序入口地址送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。各中斷服務(wù)程序的入

9、口地址見(jiàn)表。 2中斷響應(yīng)過(guò)程12013/10/13 L中斷服務(wù)程序入口地址表 編 號(hào)中 斷 源入 口 地 址0外部中斷00003H1定時(shí)器/計(jì)數(shù)器0000BH2外部中斷10013H3定時(shí)器/計(jì)數(shù)器1001BH4串行口中斷0023H12013/10/13 L中斷服務(wù)程序的函數(shù)定義的語(yǔ)法格式如下: 返回值 函數(shù)名(參數(shù)) interrupt m using n 3中斷服務(wù)程序 C51編譯器支持在C源程序中直接開(kāi)發(fā)中斷程序。中斷服務(wù)程序是通過(guò)按規(guī)定語(yǔ)法格式定義的一個(gè)函數(shù)。interrupt 屬性的參數(shù)為0 到31 的整常數(shù)值。帶操作數(shù)的表達(dá)式在函數(shù)原型中是不允許的。12013/10/13 Linte

10、rrupt 屬性影響如下函數(shù)的目標(biāo)代碼 特殊功能寄存器 ACC B DPH DPL 和PSW 的內(nèi)容 需要時(shí)在函數(shù)調(diào)用時(shí)保存在堆棧中。 在中斷函數(shù)中所用的寄存器如果不用using 屬性指 定一個(gè)寄存器組就保存在堆棧中。 保存在堆棧中的寄存器和SFR 在退出函數(shù)前恢復(fù)。 函數(shù)由指令RETI 終止。另外Cx51 編譯器自動(dòng)產(chǎn)生中斷矢量。12013/10/13 Lstmt level source 1 extern bit alarm; 2 int alarm_count; 3 4 5 void falarm (void) interrupt 1 using 3 6 1 alarm_count *=

11、 2; 7 1 alarm = 1; 8 1 下面的例子程序說(shuō)明了如何使用interrupt 屬性。程序同時(shí)顯示進(jìn)入和退出中斷函數(shù)的代碼。using 函數(shù)屬性用來(lái)選擇和非中斷程序不同的寄存器組。12013/10/13 LASSEMBLY LISTING OF GENERATED OBJECT CODE 0000 C0E0 PUSH ACC 0002 C0D0 PUSH PSW ; SOURCE LINE # 5 ; SOURCE LINE # 6 0004 E500 R MOV A,alarm_count+01H 0006 25E0 ADD A,ACC 0008 F500 R MOV alar

12、m_count+01H,A 000A E500 R MOV A,alarm_count 000C 33 RLC A 000D F500 R MOV alarm_count,A ; SOURCE LINE # 7 000F D200 E SETB alarm ; SOURCE LINE # 8 0011 D0D0 POP PSW 0013 D0E0 POP ACC 0015 32 RETI 但是因?yàn)樵诒竞瘮?shù)中不需要工作寄存器為切換寄存器組而產(chǎn)生的代碼被優(yōu)化排除了。12013/10/13 L 4中斷服務(wù)函數(shù)應(yīng)用注意 中斷函數(shù)沒(méi)有函數(shù)參數(shù)。如果中斷函數(shù)聲明中帶參數(shù), 編譯器就產(chǎn)生錯(cuò)誤信息。 中斷函數(shù)

13、聲明不能包含返回值,必須聲明為VOID 。如果 定義了一個(gè)返回值,編譯器就產(chǎn)生一個(gè)錯(cuò)誤。暗含的int 返回值被編譯器忽略。 編譯器不允許直接的對(duì)中斷函數(shù)的調(diào)用。對(duì)中函數(shù)的直 接調(diào)用是無(wú)意義的。 編譯器對(duì)每個(gè)中斷函數(shù)產(chǎn)生一個(gè)中斷矢量。矢量的代碼 是跳轉(zhuǎn)到中斷函數(shù)的起始 從一個(gè)中斷程序中調(diào)用函數(shù)必須和中斷使用相同的寄存器組。12013/10/13 L8.1.5 中斷編程 圖所示是利用優(yōu)先權(quán)解碼芯片,在單片機(jī)8031的一個(gè)外部中斷INT1上擴(kuò)展多個(gè)中斷源的原理電路圖。12013/10/13 L # include unsigned char status; bit flag; void servic

14、e_int1( ) interrupt 2 using 2 /* INT1中斷服務(wù)程序 */ flag=1; /* 設(shè)置標(biāo)志 */ status=p1; /* 存輸入口狀態(tài) */ 在中斷服務(wù)程序中僅設(shè)置標(biāo)志,并保存I/O口輸入狀態(tài)。12013/10/13 Lvoid main(void) IP=0 x04 ; /* 置INT1為高優(yōu)先級(jí)中斷 */ IE=-0 x84 ; /* INT1開(kāi)中斷,CPU開(kāi)中斷 */ for( ; ;) if(flag) /* 有中斷 */ switch(status) /* 根據(jù)中斷源分支 */ case 0 : break; /* 處理IN0 */ case 1

15、 : break; /* 處理IN1 */ case 2 : break; /* 處理IN2 */ case 3 : break; /* 處理IN3 */ default : ; flag=0 ; /* 處理完成清標(biāo)志 */ 12013/10/13 L8.2定時(shí)器/計(jì)數(shù)器 2個(gè)16位定時(shí)器/計(jì)數(shù)器定時(shí)器:對(duì)片內(nèi)機(jī)器時(shí)鐘(周期方波)進(jìn)行計(jì)數(shù)計(jì)數(shù)器:對(duì)Tx引腳輸入的負(fù)脈沖進(jìn)行計(jì)數(shù) 與Timer工作有關(guān)的特殊功能寄存器: TCON 、TMOD、THx 和 TLx8.2.0 定時(shí)器概述 TIMER的作用:定時(shí)操作:定時(shí)采樣,定時(shí)掃描,定時(shí)中斷測(cè)量外部信號(hào):累加統(tǒng)計(jì),測(cè)量周期等定時(shí)輸出:PWM等監(jiān)視系統(tǒng)

16、正常工作與否12013/10/13 L 定時(shí)器的一般結(jié)構(gòu)和工作原理+1計(jì)數(shù)器溢出中斷脈沖控制開(kāi)關(guān) 實(shí)質(zhì)是計(jì)數(shù)器,脈沖每一次下降沿,計(jì)數(shù)寄存器數(shù)值將加1. 計(jì)數(shù)的脈沖如果來(lái)源于單片機(jī)內(nèi)部的晶振,由于其周期極為準(zhǔn)確,這時(shí)稱(chēng)為定時(shí)器。 計(jì)數(shù)的脈沖如果來(lái)源于單片機(jī)外部的引腳,由于其周期一般不確定,可表示事件發(fā)生,這時(shí)稱(chēng)為計(jì)數(shù)器。12013/10/13 L1、計(jì)數(shù)寄存器TH與TL2、定時(shí)器控制寄存器TCON (88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TRx: Timer0/1運(yùn)行控制位。 =1 啟動(dòng)計(jì)數(shù); =0 停止計(jì)數(shù)8.2.1 與定時(shí)器有關(guān)的特殊功能寄存器12013/

17、10/13 LTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TFx: Timer0/1計(jì)數(shù)溢出標(biāo)志位。 =1 計(jì)數(shù)溢出; =0 計(jì)數(shù)未滿(mǎn) TFx標(biāo)志位可用于申請(qǐng)中斷或供CPU查詢(xún)。 在進(jìn)入中斷服務(wù)程序時(shí)會(huì)自動(dòng)清零;但在查詢(xún)方式時(shí)必須軟件清零。定時(shí)器T0/T1 中斷申請(qǐng)過(guò)程 在已經(jīng)開(kāi)放T0/T1中斷允許且已被啟動(dòng)的前提下:T0/T1加滿(mǎn)溢出時(shí) TF0/TF1標(biāo)志位自動(dòng)置“1” 檢測(cè)到TCON中TF0/TF1變“1”后,將產(chǎn)生指令: LCALL 000BH/LCALL 001BH 執(zhí)行中斷服務(wù)程序, TF0/TF1標(biāo)志位會(huì)自動(dòng)清“0”,以備下次中斷申請(qǐng)。 12013/10/13 L

18、3、定時(shí)器方式寄存器TMOD (89H)GATE C / T M1 M0 GATE C / T M1 M0T1T0C/T :計(jì)數(shù)器/定時(shí)器選擇位 = 1 外部事件計(jì)數(shù)器。對(duì)Tx引腳的負(fù)脈沖計(jì)數(shù); = 0 片內(nèi)時(shí)鐘定時(shí)器。對(duì)機(jī)器周期脈沖計(jì)數(shù)定時(shí)12013/10/13 LGATE門(mén)控位: Timer可由軟件與硬件兩者控制 GATE = 0 普通用法 Timer的啟/停由軟件對(duì)TRx位寫(xiě)“1”/“0”控制 GATE = 1 門(mén)控用法 Timer的啟/停由軟件對(duì)TRx位寫(xiě)“1”/“0” 和在INTx引腳上出現(xiàn)的信號(hào)的高/低共同控制 (INTx引腳高電平允許定時(shí)/計(jì)數(shù))GATE C / T M1 M0

19、GATE C / T M1 M0T1T012013/10/13 LGATE C / T M1 M0 GATE C / T M1 M0T1T0M1,M0:工作方式定義位 ( 定義4 種方式 ):0 0:13位 Timer用它無(wú)益,不要記它!0 1:16位 Timer經(jīng)常用到。1 0:可自動(dòng)重裝的 8位 Timer經(jīng)常用到。1 1:T0 分為2個(gè)8位 Timer;T1 此時(shí)不工作 因?yàn)闆](méi)有帶來(lái)什么好處,幾乎無(wú)用。12013/10/13 L4、定時(shí)器/計(jì)數(shù)器2控制寄存器TMOD (89H) TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2T2CON Address = 0C8H R

20、eset Value = 0000 0000BTF2:溢出標(biāo)志位,必須由軟件清零。EXF2:外部標(biāo)志,當(dāng)EXEN2=1,且當(dāng)T2EX引腳上出現(xiàn)負(fù)跳變而出現(xiàn)捕獲或重裝時(shí),EXF2置位,申請(qǐng)中斷。 EXF2必須由軟件清零。RCLK:接收時(shí)鐘標(biāo)志。1用定時(shí)器2溢出作為串行口的接收時(shí)鐘;0用定時(shí)器1溢出作為串行口的接收時(shí)鐘。TCLK:發(fā)送時(shí)鐘標(biāo)志。1用定時(shí)器2溢出作為串行口的發(fā)送時(shí)鐘;0用定時(shí)器1溢出作為串行口的發(fā)送時(shí)鐘。12013/10/13 LTF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2EXEN2:定時(shí)器2外部允許標(biāo)志。1若定時(shí)器2未作串行口波特率發(fā)生器,則T2EX端的 負(fù)跳

21、變引起定時(shí)器2的捕獲或重裝。0T2EX端的外部信號(hào)不起作用。TR2:定時(shí)器2運(yùn)行控制位。1啟動(dòng)。0停止。C/T2:計(jì)數(shù)器/定時(shí)器選擇位。1計(jì)數(shù)器。0定時(shí)器。12013/10/13 LCP/RL2:捕獲/重裝標(biāo)志。1當(dāng)EXEN21,且T2EX端的信號(hào)負(fù)跳變時(shí),發(fā)生捕 獲操作。0當(dāng)定時(shí)器2溢出,或在EXEN21條件下T2EX端的 信號(hào)負(fù)跳變時(shí),發(fā)生自動(dòng)重裝操作。TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL212013/10/13 L1、工作方式1:16位的定時(shí)/計(jì)數(shù)器振蕩器12TLx THx (8位) (8位)TFx申請(qǐng)中斷Tx端TRx位GATE位INTx端1&C/T=0C/T

22、=1控制 =1開(kāi)關(guān)接通或門(mén)與門(mén)最大計(jì)數(shù)脈沖個(gè)數(shù):65536(216)8.2.2 定時(shí)器/計(jì)數(shù)器的工作方式12013/10/13 L THx/TLx賦初值:THx賦高8位,TLx賦低8位工作方式1 的編程要點(diǎn): TMOD選方式: 寫(xiě)“M1,M0”=01b選方式1 若不用門(mén)控位,直接用軟件寫(xiě)TRx控制啟/停 若使用門(mén)控位,先置位TRx,然后由INTx端 的高/低電平來(lái)控制其啟/停 若要允許中斷,還須先置位ETx、EA等中斷 允許控制位,并編寫(xiě)中斷服務(wù)程序 若不用中斷,可查詢(xún)“計(jì)數(shù)溢出標(biāo)志TFx” 的方式工作,但溢出標(biāo)志TFx須軟件清012013/10/13 L定時(shí)器的計(jì)數(shù)單元每個(gè)機(jī)器周期自動(dòng)加1直

23、到溢出 T=(12/fosc)*(216-a)us方式1:定時(shí)初值/定時(shí)時(shí)間計(jì)算12013/10/13 L2、工作方式2:8 位自動(dòng)重裝的定時(shí)/計(jì)數(shù)器振蕩器12TLx (8位)TFx申請(qǐng)中斷Tx端TRx位GATE位INTx端1&C/T=0C/T=1控制 =1開(kāi)關(guān)接通或門(mén)與門(mén)THx (8位)溢出位門(mén)開(kāi)用于需要重復(fù)定時(shí)和計(jì)數(shù)的場(chǎng)合。最大計(jì)數(shù)值:256 (28)12013/10/13 L THx/TLx賦相同初值 在TLx計(jì)數(shù)達(dá)到0FFH 再加“1”時(shí),TL0 將溢出, “TFx”置1去申請(qǐng)中斷,同時(shí)THx中的 值自動(dòng)重裝(Copy)進(jìn)TLx工作方式 2 的編程: TMOD寄存器選方式: 寫(xiě)“M1,

24、M0” = 10 b 選中方式2 其他用法與各種方式1完全相同12013/10/13 L3、工作方式3 方式3只適用于定時(shí)器0。此時(shí),定時(shí)器0的TH0、TL0成為兩個(gè)獨(dú)立的計(jì)數(shù)器。 TL0可作為定時(shí)器/計(jì)數(shù)器,占用定時(shí)器0在TCON和TMOD中的控制位和標(biāo)志位。 TH0只能作為定時(shí)器使用,占用定時(shí)器1在TCON和TMOD中的控制位和標(biāo)志位。12013/10/13 L4、定時(shí)器2的工作方式第一種:捕捉方式。 設(shè)置為捕捉方式時(shí)和定時(shí)器0 或定時(shí)器1 一樣以16 位方式工作。這種方式通過(guò)復(fù)位EXEN2 來(lái)選擇。當(dāng)置位EXEN2 時(shí),如果T2EX 有負(fù)跳變電平將把當(dāng)前的數(shù)鎖存在RCAP2H和RCAP2

25、L 中,這個(gè)事件可用來(lái)產(chǎn)生中斷。 通過(guò)軟件設(shè)置T2CON ,可使定時(shí)/計(jì)數(shù)器2以三種基本工作方式之一工作。12013/10/13 L 用來(lái)產(chǎn)生串行口通訊所需的波特率。這通過(guò)同時(shí)或分別置位RCLK 和TCLK來(lái)實(shí)現(xiàn)。在這種方式中每個(gè)機(jī)器周期都將使定時(shí)器加1 而不像定時(shí)器0 和1 那樣需要12 個(gè)機(jī)器周期這使得串行通訊的波特率更高。第二種工作方式:為自動(dòng)重裝方式。 其中包含的兩個(gè)子功能由EXEN2 來(lái)選擇。當(dāng)EXEN2復(fù)位時(shí),16 位定時(shí)器溢出將觸發(fā)一個(gè)中斷,并將RCAP2H 和RCAP2L 中的數(shù)裝入定時(shí)器中。當(dāng)EXEN2 置位時(shí),除上述功能外T2EX 引腳的負(fù)跳變將產(chǎn)生一次重裝操作。第三種工作

26、方式:12013/10/13 L8.2.3 定時(shí)器/計(jì)數(shù)器的初始化1、初始化步驟(2)計(jì)算定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)初值,并裝載到TH和TL寄 存器。(1)確定定時(shí)器/計(jì)數(shù)器的工作方式 編程TMOD寄存器。(3)定時(shí)器/計(jì)數(shù)器工作中斷方式時(shí),開(kāi)CPU中斷和源中 斷,編程IE寄存器(4)啟動(dòng)定時(shí)器/計(jì)數(shù)器編程TCON寄存器中的 TR0/TR1位。12013/10/13 L2、計(jì)數(shù)初值的計(jì)算(1)定時(shí)器的計(jì)數(shù)初值 在定時(shí)器方式下,是對(duì)機(jī)器周期脈沖進(jìn)行計(jì)數(shù)。如果系統(tǒng)時(shí)鐘為6MHz,一個(gè)機(jī)器周期為12/fosc=2us.方式0,13位定時(shí)器最大定時(shí)間隔2132us=16.384ms.方式1,16位定時(shí)器最大

27、定時(shí)間隔2162us=131.072ms.方式2,8位定時(shí)器最大定時(shí)間隔282us=512us.初值計(jì)算方法:T=(12/fosc)*(216-X) us12013/10/13 L(2)計(jì)數(shù)器的計(jì)數(shù)器初值方式0,13位計(jì)數(shù)器最大計(jì)數(shù)值213=8192.方式1,16位計(jì)數(shù)器最大計(jì)數(shù)值216=65536.方式2,8位計(jì)數(shù)器最大計(jì)數(shù)值28=256.初值計(jì)算方法:cnt=216-X12013/10/13 L8.2.4 定時(shí)器/計(jì)數(shù)器的應(yīng)用實(shí)例例1 在頻率為12MHz 的標(biāo)準(zhǔn)51單片機(jī)上, 用timer1產(chǎn)生10khz定時(shí)器滴答中斷。解:1、確定timer1工作方式: 工作方式28位自動(dòng)重裝方式 TMO

28、D中的M1M0=10 2、確定timer1計(jì)數(shù)初值: X256 100156。3、中斷方式控制字設(shè)定。 EA=1 ,ET1=1。12013/10/13 L4、啟動(dòng)定時(shí)器。 TR1=1。5、編程(1)流程圖:主函數(shù)流程圖 中斷函數(shù)流程圖(2)代碼編寫(xiě):中斷函數(shù) 主函數(shù)12013/10/13 L#include sbit LED = P10;sbit WAVE = P11;static unsigned long overflow_count = 0;/* 定時(shí)器1中斷服務(wù)程序;每100個(gè)時(shí)鐘周期執(zhí)行一次*/void timer1_ISR(void) interrupt 3overflow_cou

29、nt+;WAVE = !WAVE;12013/10/13 L/* 主函數(shù):定時(shí)器1設(shè)置為方式2 8位重裝方式*/void main( void )TMOD = (TMOD & 0X0F) | 0X20;/設(shè)置定時(shí)器1工作方式TH1 = 256 - 100;/定時(shí)器1賦初值TL1 = TH1;EA = 1;/開(kāi)定時(shí)器1中斷ET1 = 1;TR1 = 1;/啟動(dòng)定時(shí)器1while(1)if ( overflow_count = 100) overflow_count = 0;LED = !LED;12013/10/13 L例2 在頻率為12MHz 的標(biāo)準(zhǔn)51單片機(jī)上,輸出周期 為2ms的方波。1、

30、用定時(shí)器0的方式1編程,采用查詢(xún)方式。#include sbit P10 = P10;void main( void )TMOD = 0 x01; / 定時(shí)器工作方式0TR0 = 1;/ 啟動(dòng)定時(shí)器0for( ; ; )TH0 = ( 65536 - 1000)/256; / 裝載計(jì)數(shù)初值TL0 = ( 65536 - 1000)%256;do while ( !TF0 );/ 查詢(xún)等待定時(shí)中斷信號(hào)P10 = !P10;/ 取反TF0 = 0;/ 軟件清零TF012013/10/13 L2、用定時(shí)器0的方式1編程,采用中斷方式。#include sbit P10 = P10;void time

31、r0_isr( void ) interrupt 1P10 = !P10;TH0 = ( 65536 - 1000 )/256;TL0 = ( 65536 - 1000 )%256;void main ( void )TMOD = 0 x01;TH0 = ( 65536 - 1000 )/256;TL0 = ( 65536 - 1000 )%256;EA = 1;ET0 = 1;TR0 = 1;while (1) ;12013/10/13 L例3 在頻率為12MHz 的標(biāo)準(zhǔn)51單片機(jī)上,使LED閃爍,周期為2s。12013/10/13 L#include sbit LED = P10;sbit

32、 WAVE = P11;static unsigned long overflow_count = 0;/* 定時(shí)器1中斷服務(wù)程序;每50ms執(zhí)行一次*/void timer1_ISR(void) interrupt 3TH1 = (65536 50000)/256;/定時(shí)器1賦初值TL1 = (65536 50000)%256;overflow_count+;WAVE = !WAVE;12013/10/13 L/* 主函數(shù):定時(shí)器1設(shè)置為方式1 */void main( void )TMOD = (TMOD & 0X0F) | 0X10;/設(shè)置定時(shí)器1工作方式TH1 = (65536 500

33、00)/256;/定時(shí)器1賦初值TL1 = (65536 50000)%256;EA = 1;/開(kāi)定時(shí)器1中斷ET1 = 1;TR1 = 1;/啟動(dòng)定時(shí)器1while(1)if ( overflow_count = 20) overflow_count = 0;LED = !LED;12013/10/13 L例4 在頻率為12MHz 的標(biāo)準(zhǔn)51單片機(jī)上,在P1.0引腳上輸出周期為2.5S,占空比為20的脈沖信號(hào)。中斷次數(shù)加1次數(shù)高電平?次數(shù)周期?P1.0=0P1.0=1返回#include #defined unchar unsigned charsbit WAVE = P10;uchar p

34、eriod = 250;uchar high = 50;uchar overflow_count = 0;void timer1_ISR(void) interrupt 1 TH0 = ( 65536 10000 ) / 256; TL0 = ( 65536 10000 ) % 256; if( +overflow_count = high ) WAVE = 0; else if ( overflow_count = period ) overflow_count=0; WAVE = 1; 12013/10/13 L8.3串行口串行通訊:數(shù)據(jù)逐位順序傳送。傳輸線僅需1-2根。8.3.0 基 本

35、 概 念串行通信的基本特征是數(shù)據(jù)逐位順序進(jìn)行傳送。串行通信的格式及約定(如:同步方式、通訊速率、數(shù)據(jù)塊格式、信號(hào)電平等)不同,形成了多種串行通信的協(xié)議與接口標(biāo)準(zhǔn)。常見(jiàn)的有:通用異步收發(fā)器(UART)本課程介紹的串口通用串行總線(USB)I2C總線 CAN總線 SPI總線 RS-485,等等12013/10/13 L全雙工串行接口(UART)全雙工:(串行通信)收/發(fā)可同時(shí)進(jìn)行半雙工:(串行通信)收/發(fā)不可同時(shí)進(jìn)行單 工:數(shù)據(jù)單向傳送異步串行通信:以字符為單位進(jìn)行傳送同步串行通信:以數(shù)據(jù)塊為單位進(jìn)行傳送波特率(bps.):每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù)。異步串行通信數(shù)據(jù)格式D0D1D2D3D4D5D6D7

36、停止位起始位12013/10/13 LSBUF(發(fā))SBUF(收)發(fā)送控制器 TI接收控制器 RI移位寄存器波特率發(fā)生器T11A累加器(門(mén))移位寄存器RxDTxD去申請(qǐng)中斷引腳引腳串 行 接 口 的 組 成12013/10/13 L8.3.1 與串行口有關(guān)的SFR SM0 SM1 SM2 REN TB8 RB8 TI R1SCONSM0,SM1:串行口4種工作方式的選擇位。 0 0 方式0:8位移位寄存器I/O,波特率固定為 fosc/12 0 1 方式1:8位UART(1+8+1位), 波特率可變,按公式計(jì)算; 1 0 方式2:9位UART(1+8+1+1位), 波特率固定=fosc /32

37、或1/64 1 1 方式3:9位UART(1+8+1+1位), 波特率可變,按公式計(jì)算;SM2:串行口多機(jī)通信控制位 (作為方式2、方式3的附加控制位)1、串行口控制寄存器SCON(98H)12013/10/13 L RI,TI:串行口收/發(fā)數(shù)據(jù)申請(qǐng)中斷標(biāo)志位 1 申請(qǐng)中斷; 0 不申請(qǐng)中斷 TB8:方式2、3中,是要發(fā)送的第9位數(shù)據(jù)。 多機(jī)通信中,TB8=0 表示發(fā)送的是數(shù)據(jù); TB8=1 表示發(fā)送的是地址。(奇偶校驗(yàn)) RB8:在方式2、3中,是收到的第9位數(shù)據(jù)。 在多機(jī)通信中,用作區(qū)別地址幀/數(shù)據(jù)幀的標(biāo)志。 (奇偶校驗(yàn)) SM0 SM1 SM2 REN TB8 RB8 TI R1 REN

38、:串行口接收允許控制位 = 1 表示允許接收; = 0 禁止接收。SCON12013/10/13 LSMOD GF1 GF0 PD 1DL2、電源控制寄存器 PCON(97H) P.152特殊功能寄存器PCON不能按位尋址 SMOD:在串行口工作方式 1、2、3 中是波特率加倍位 =1 時(shí),波特率加倍 =0 時(shí),波特率不加倍。 (在PCON中只有這一個(gè)位與串口有關(guān)) GF1,GF0:用戶(hù)可自行定義使用的通用標(biāo)志位PCON12013/10/13 L8.3.2 串行口的工作方式1、工作方式0:8位移位寄存器I/O方式發(fā)送:SBUF中的串行數(shù)據(jù)由RxD逐位移出; TxD輸出移位時(shí)鐘,波特率=fosc

39、/12; 每送出8位數(shù)據(jù)TI就自動(dòng)置1; 需要用軟件清零TI。 接收:串行數(shù)據(jù)由RxD逐位移入SBUF中; TxD輸出移位時(shí)鐘,波特率=fosc/12; 每接收8位數(shù)據(jù)RI就自動(dòng)置1; 需要用軟件清零RI。12013/10/13 L方式0時(shí)序圖寫(xiě)入SBUFRXD輸出TXDTID0D1D2D3D4D5D6D7寫(xiě)REN=1RI=0RXD輸入RI接收時(shí)序發(fā)送時(shí)序TXD12013/10/13 L串行口方式0的擴(kuò)展應(yīng)用經(jīng)常用到串行口常用工作方式0擴(kuò)展出并行I/O口,工作方式1、2、3則常用于串行通信ABCLKh g f e d c b aCLRABCLKCLRABCLKCLR+5V74LS16474LS

40、16474LS16474LS164是串入并出芯片;h g f e d c b ah g f e d c b a+5V共陽(yáng)LED 數(shù)碼管VCCTxDRxD51單片機(jī)12013/10/13 L2、串行口工作方式 1 串行口為波特率可調(diào)的8位通用異步串行通信口。發(fā)送或接收一幀信息,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。其幀格式如圖所示。 方式1工作時(shí): 發(fā)送端自動(dòng)添加一個(gè)起始位和一個(gè)停止位; 接收端自動(dòng)去掉一個(gè)起始位和一個(gè)停止位。12013/10/13 L(1)方式1輸出 發(fā)送時(shí),數(shù)據(jù)從TXD端輸出,當(dāng)數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUF后,啟動(dòng)發(fā)送器發(fā)送。當(dāng)發(fā)送完一幀數(shù)據(jù)后,停止工作,置中斷標(biāo)志TI為

41、1。(2) 方式1輸入 接收時(shí),由REN置1,允許接收,串行口采樣RXD,當(dāng)采樣由1到0跳變時(shí),確認(rèn)是起始位“0”,開(kāi)始接收一幀數(shù)據(jù)。 當(dāng)RI=0,且停止位為1或SM2=0時(shí),停止位進(jìn)入RB8位,同時(shí)置中斷標(biāo)志RI;否則信息將丟失。 所以,方式1接收時(shí),應(yīng)先用軟件清除RI或SM2標(biāo)志。12013/10/13 L(a) 發(fā)送時(shí)序圖(b) 接收時(shí)序圖采樣RXD輸入數(shù)據(jù)D0D1D2D3D4D5D6D7停止位起始位RI檢測(cè)負(fù)跳變寫(xiě)入SBUFTXD數(shù)據(jù)輸出TID0D1D2D3D4D5D6D7停止位起始位12013/10/13 L3、串行口工作方式2 方式2下,串行口為9位UART。發(fā)送或接收一幀數(shù)據(jù)包括

42、1位起始位0,8位數(shù)據(jù)位,1位可編程位(TB8/RB8)(用于奇偶校驗(yàn))和1位停止位。其幀格式如圖所示。12013/10/13 L(1)方式2的輸出 寫(xiě)SBUF的指令,除了將8位數(shù)據(jù)送入SBUF外,同時(shí)還將TB8裝入發(fā)送移位寄存器的第9位,并通知發(fā)送控制器進(jìn)行一次發(fā)送。 發(fā)送時(shí),先根據(jù)通信協(xié)議由軟件設(shè)置TB8,然后用指令將要發(fā)送的數(shù)據(jù)寫(xiě)入SBUF,啟動(dòng)發(fā)送器。 在送完一幀信息后,TI被自動(dòng)置1,在發(fā)送下一幀信息之前,TI必須由中斷服務(wù)程序或查詢(xún)程序清0。12013/10/13 L 當(dāng)REN=1時(shí),允許串行口接收數(shù)據(jù)。數(shù)據(jù)由RXD端輸入,接收11位的信息。當(dāng)接收器采樣到RXD端的負(fù)跳變,并判斷起始位有效后,開(kāi)始接收一幀信息。(2)方式2的輸入 當(dāng)接收器接收到第9位數(shù)據(jù)后,若同時(shí)滿(mǎn)足以下兩個(gè)條件:RI=0和SM2=0或接收到的第9位數(shù)據(jù)為1,則接收數(shù)據(jù)有效,8位數(shù)據(jù)送入SBUF,第9位送入RB8,并置RI=1。若不滿(mǎn)足上述兩個(gè)條件,則信息丟失。12013/10/13 L 方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。4、串行口工作方式312013/10/13 L8.3.2 串行口的初始化1、串行口的波特率 波特率為每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),也叫比特?cái)?shù),單位為b/s,即位/秒。 波特率用于表征數(shù)據(jù)傳輸

溫馨提示

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

評(píng)論

0/150

提交評(píng)論