ch8 8051內(nèi)部資源的C編程.ppt_第1頁
ch8 8051內(nèi)部資源的C編程.ppt_第2頁
ch8 8051內(nèi)部資源的C編程.ppt_第3頁
ch8 8051內(nèi)部資源的C編程.ppt_第4頁
ch8 8051內(nèi)部資源的C編程.ppt_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第8章 8051內(nèi)部資源的C編程,8.1中 斷 8.2定時(shí)器/計(jì)數(shù)器 8.3串行口,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.1 中 斷,中斷的基本概念,所謂中斷是指CPU對(duì)系統(tǒng)中或系統(tǒng)外發(fā)生的某個(gè)事件的一種響應(yīng)過程,即CPU暫時(shí)停止現(xiàn)行程序的執(zhí)行,而自動(dòng)轉(zhuǎn)去執(zhí)行預(yù)先安排好的處理該事件的服務(wù)子程序。當(dāng)處理結(jié)束后,再返回到被暫停程序的斷點(diǎn)處,繼續(xù)執(zhí)行原來的程序。,實(shí)現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)稱為中斷系統(tǒng)。,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.1.1 中斷源,1、 8051 中 斷 源,2008/04/12,第8章 8051內(nèi)部資源的C編程,2、

2、定時(shí)器/計(jì)數(shù)器控制寄存器(TCON),IT0(IT1):外部中斷0(或1)觸發(fā)方式控制位。 IT0(或IT1)被設(shè)置為0,則選擇外部中斷為低電平觸發(fā)方式; IT0(或IT1)被設(shè)置為1,則選擇外部中斷為邊沿觸發(fā)方式。,電平觸發(fā)方式: CPU在每個(gè)機(jī)器周期的S5P2采樣INTx引腳,若 INTx引腳為低電平,將直接觸發(fā)外部中斷。 邊沿觸發(fā)方式: 若第一個(gè)機(jī)器周期采樣到 INTx引腳為高電平,第二個(gè)機(jī)器周期采樣到 INTx引腳為低電平時(shí),向CPU請(qǐng)求中斷。,2008/04/12,第8章 8051內(nèi)部資源的C編程,IE0(IE1):外部中斷0(或1)的中斷請(qǐng)求標(biāo)志位。 當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程

3、序時(shí)由硬件將 IE0(或IE1)清零。,TF0(TF1):定時(shí)器中斷0(或1)的中斷請(qǐng)求標(biāo)志位。 當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí)由硬件將 TF0(或TF1)清零。,2008/04/12,第8章 8051內(nèi)部資源的C編程,3、 串行口控制寄存器(SCON),RI,TI:串行口收/發(fā)數(shù)據(jù)申請(qǐng)中斷標(biāo)志位 1 申請(qǐng)中斷; 0 不申請(qǐng)中斷,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.1.2 中斷的控制,1、 中斷允許寄存器(IE),MCS-51單片機(jī)中沒有專設(shè)的開中斷和關(guān)中斷指令,對(duì)各中斷源的中斷開放或關(guān)閉是由內(nèi)部的中斷允許寄存器IE的各位來控制的。,EA:中斷允許總控位。 EA=0

4、,屏蔽所有的中斷請(qǐng)求; EA=1,開放中斷。 EA的作用是使中斷允許形成兩級(jí)控制。即各中斷源首先受EA位的控制;其次還要受各中斷源自己的中斷允許總控位控制。,2008/04/12,第8章 8051內(nèi)部資源的C編程,ET1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位。 ET1=0 禁止T1中斷; ET1=1 允許T1中斷。,ES:串行口中斷允許位。 ES=0 禁止串行口中斷; ES=1 允許串行口中斷。,EX1:外部中斷1中斷允許位。 EX1=0 禁止外部中斷1中斷; EX1=1 允許外部中斷1中斷。,2008/04/12,第8章 8051內(nèi)部資源的C編程,2、 中斷優(yōu)先級(jí)寄存器(IP),MCS-51單

5、片機(jī)的中斷源有兩個(gè)用戶可控的中斷優(yōu)先級(jí),從而可實(shí)現(xiàn)二級(jí)中斷嵌套。中斷系統(tǒng)遵循如下三條規(guī)則: (1) 正在進(jìn)行的中斷過程不能被新的同級(jí)或低優(yōu)先級(jí)的中斷請(qǐng)求所中斷,一直到該中斷服務(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)求。,2008/04/12,第8章 8051內(nèi)部資源的C編程,D7 D6 D5 D4 D3 D2 D1 D0,IP,字節(jié) 地址 B8H,PT2:定時(shí)器/計(jì)數(shù)器T2的中斷優(yōu)先級(jí)控制位,只用于52

6、子系列。 PS:串行口的中斷優(yōu)先級(jí)控制位。 PT1:定時(shí)器/計(jì)數(shù)器T1的中斷優(yōu)先級(jí)控制位。 PX1:外部中斷1的中斷優(yōu)先級(jí)控制位。 PT0:定時(shí)器/計(jì)數(shù)器T0的中斷優(yōu)先級(jí)控制位。 PX0:外部中斷0的中斷優(yōu)先級(jí)控制位。,2008/04/12,第8章 8051內(nèi)部資源的C編程,表8.2 中 斷 優(yōu) 先 級(jí),2008/04/12,第8章 8051內(nèi)部資源的C編程,8.1.3 中斷響應(yīng),單片機(jī)響應(yīng)中斷的條件為中斷源有請(qǐng)求(中斷允許寄存器IE相應(yīng)位置1),且CPU開中斷(即EA=1)。這樣,在每個(gè)機(jī)器周期的S5P2期間,對(duì)所有中斷源按用戶設(shè)置的優(yōu)先級(jí)和內(nèi)部規(guī)定的優(yōu)先級(jí)進(jìn)行順序檢測,并可在S6期間找到所

7、有有效的中斷請(qǐng)求。如有中斷請(qǐng)求,且滿足下列條件,則在下一個(gè)機(jī)器周期的S1期間響應(yīng)中斷,否則將丟棄中斷采樣的結(jié)果。 (1) 無同級(jí)或高級(jí)中斷正在處理。 (2) 現(xiàn)行指令執(zhí)行到最后1個(gè)機(jī)器周期且已結(jié)束。 (3) 若現(xiàn)行指令為RETI或訪問IE、IP的指令時(shí),執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完畢。,1中斷響應(yīng)的條件,2008/04/12,第8章 8051內(nèi)部資源的C編程,CPU響應(yīng)中斷時(shí),由硬件自動(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)志位(IE

8、0、IE1、TF0、TF1)。 (4) 把被響應(yīng)的中斷服務(wù)程序入口地址送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。各中斷服務(wù)程序的入口地址見表。,2中斷響應(yīng)過程,2008/04/12,第8章 8051內(nèi)部資源的C編程,中斷服務(wù)程序入口地址表,2008/04/12,第8章 8051內(nèi)部資源的C編程,中斷服務(wù)程序的函數(shù)定義的語法格式如下: 返回值 函數(shù)名(參數(shù)) interrupt m using n ,3中斷服務(wù)程序,C51編譯器支持在C源程序中直接開發(fā)中斷程序。中斷服務(wù)程序是通過按規(guī)定語法格式定義的一個(gè)函數(shù)。,interrupt 屬性的參數(shù)為0 到31 的整常數(shù)值。 帶操作數(shù)的表達(dá)式在函數(shù)原型中

9、是不允許的。,2008/04/12,第8章 8051內(nèi)部資源的C編程,interrupt 屬性影響如下函數(shù)的目標(biāo)代碼 特殊功能寄存器 ACC B DPH DPL 和PSW 的內(nèi)容 需要在函數(shù)調(diào)用時(shí)保存在堆棧中。 在中斷函數(shù)中所用的寄存器如果不用using 屬性指定一個(gè)寄存器組就保存在堆棧中。 保存在堆棧中的寄存器和SFR 在退出函數(shù)前恢復(fù)。 函數(shù)由指令RETI 終止。,另外Cx51 編譯器自動(dòng)產(chǎn)生中斷矢量。,2008/04/12,第8章 8051內(nèi)部資源的C編程,stmt level source 1 extern bit alarm; 2 int alarm_count; 3 4 5 voi

10、d falarm (void) interrupt 1 using 3 6 1 alarm_count *= 2; 7 1 alarm = 1; 8 1 ,下面的例子程序說明了如何使用interrupt 屬性。程序同時(shí)顯示進(jìn)入和退出中斷函數(shù)的代碼。using 函數(shù)屬性用來選擇和非中斷程序不同的寄存器組。,2008/04/12,第8章 8051內(nèi)部資源的C編程,ASSEMBLY LISTING OF GENERATED OBJECT CODE 0000 C0E0 PUSH ACC 0002 C0D0 PUSH PSW ; SOURCE LINE # 5 ; SOURCE LINE # 6 000

11、4 E500 R MOV A,alarm_count+01H 0006 25E0 ADD A,ACC 0008 F500 R MOV alarm_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)

12、化排除了。,2008/04/12,第8章 8051內(nèi)部資源的C編程,4中斷服務(wù)函數(shù)應(yīng)用注意,中斷函數(shù)沒有函數(shù)參數(shù)。如果中斷函數(shù)聲明中帶參數(shù), 編譯器就產(chǎn)生錯(cuò)誤信息。,中斷函數(shù)聲明不能包含返回值,必須聲明為VOID 。如果 定義了一個(gè)返回值,編譯器就產(chǎn)生一個(gè)錯(cuò)誤。暗含的int 返回值被編譯器忽略。,編譯器不允許直接的對(duì)中斷函數(shù)的調(diào)用。對(duì)中斷函數(shù)的直接調(diào)用是無意義的。,編譯器對(duì)每個(gè)中斷函數(shù)產(chǎn)生一個(gè)中斷矢量。矢量的代碼 是跳轉(zhuǎn)到中斷函數(shù)的起始,從一個(gè)中斷程序中調(diào)用函數(shù)必須和中斷使用相同的寄存器組。,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.1.5 中斷編程,圖所示是利用優(yōu)先權(quán)解碼芯

13、片,在單片機(jī)8031的一個(gè)外部中斷INT1上擴(kuò)展多個(gè)中斷源的原理電路圖。,2008/04/12,第8章 8051內(nèi)部資源的C編程,# include unsigned char status; bit flag; void service_int1( ) interrupt 2 using 2 /* INT1中斷服務(wù)程序 */ flag=1; /* 設(shè)置標(biāo)志 */ status=p1; /* 存輸入口狀態(tài) */ ,在中斷服務(wù)程序中僅設(shè)置標(biāo)志,并保存I/O口輸入狀態(tài)。,2008/04/12,第8章 8051內(nèi)部資源的C編程,void main(void) IP=0 x04 ; /* 置INT1為

14、高優(yōu)先級(jí)中斷 ,等價(jià)PX1=1*/ IE=-0 x84 ; /* INT1開中斷,CPU開中斷 等價(jià)EA=1,EX1=1*/ for( ; ;) if(flag) /* 有中斷 */ switch(status) /* 根據(jù)中斷源分支 */ case 0 : break; /* 處理IN0 */ case 1 : break; /* 處理IN1 */ case 2 : break; /* 處理IN2 */ case 3 : break; /* 處理IN3 */ default : ; flag=0 ; /* 處理完成清標(biāo)志 */ ,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.2

15、定時(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 和 TLx,8.2.0 定時(shí)器概述,TIMER的作用: 定時(shí)操作:定時(shí)采樣,定時(shí)掃描,定時(shí)中斷 測量外部信號(hào):累加統(tǒng)計(jì),測量周期等 定時(shí)輸出:PWM等 監(jiān)視系統(tǒng)正常工作與否,2008/04/12,第8章 8051內(nèi)部資源的C編程,定時(shí)器的一般結(jié)構(gòu)和工作原理,實(shí)質(zhì)是計(jì)數(shù)器,脈沖每一次下降沿,計(jì)數(shù)寄存器數(shù)值將加1. 計(jì)數(shù)的脈沖如果來源于單片機(jī)內(nèi)部的晶振,由于其周期極為準(zhǔn)確,這時(shí)稱為定時(shí)器。 計(jì)數(shù)的脈沖如果

16、來源于單片機(jī)外部的引腳,由于其周期一般不確定,可表示事件發(fā)生,這時(shí)稱為計(jì)數(shù)器。,2008/04/12,第8章 8051內(nèi)部資源的C編程,1、計(jì)數(shù)寄存器TH與TL,2、定時(shí)器控制寄存器TCON (88H),TRx: Timer0/1運(yùn)行控制位。 =1 啟動(dòng)計(jì)數(shù); =0 停止計(jì)數(shù),8.2.1 與定時(shí)器有關(guān)的特殊功能寄存器,2008/04/12,第8章 8051內(nèi)部資源的C編程,TFx: Timer0/1計(jì)數(shù)溢出標(biāo)志位。 =1 計(jì)數(shù)溢出; =0 計(jì)數(shù)未滿 TFx標(biāo)志位可用于申請(qǐng)中斷或供CPU查詢。 在進(jìn)入中斷服務(wù)程序時(shí)會(huì)自動(dòng)清零;但在查詢方式時(shí)必須軟件清零。,定時(shí)器T0/T1 中斷申請(qǐng)過程, 在已經(jīng)

17、開放T0/T1中斷允許且已被啟動(dòng)的前提下: T0/T1加滿溢出時(shí) TF0/TF1標(biāo)志位自動(dòng)置“1” 檢測到TCON中TF0/TF1變“1”后,將產(chǎn)生指令: LCALL 000BH/LCALL 001BH 執(zhí)行中斷服務(wù)程序, TF0/TF1標(biāo)志位會(huì)自動(dòng)清“0”,以備下次中斷申請(qǐng)。,2008/04/12,第8章 8051內(nèi)部資源的C編程,3、定時(shí)器方式寄存器TMOD (89H),C/T :計(jì)數(shù)器/定時(shí)器選擇位 = 1 外部事件計(jì)數(shù)器。對(duì)Tx引腳的脈沖計(jì)數(shù); = 0 片內(nèi)時(shí)鐘定時(shí)器。對(duì)機(jī)器周期脈沖計(jì)數(shù)定時(shí),2008/04/12,第8章 8051內(nèi)部資源的C編程,GATE門控位: Timer可由軟件與

18、硬件兩者控制 GATE = 0 普通用法 Timer的啟/停由軟件對(duì)TRx位寫“1”/“0”控制, GATE = 1 門控用法 Timer的啟/停由軟件對(duì)TRx位寫“1”/“0” 和在INTx引腳上出現(xiàn)的信號(hào)的高/低共同控制 (INTx引腳高電平允許定時(shí)/計(jì)數(shù)),2008/04/12,第8章 8051內(nèi)部資源的C編程,M1,M0:工作方式定義位 ( 定義4 種方式 ):,0 0:13位 Timer用它無益,不要記它! 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)闆]有帶來什么好處,幾乎無用。

19、,2008/04/12,第8章 8051內(nèi)部資源的C編程,4、定時(shí)器/計(jì)數(shù)器2控制寄存器TMOD (89H),T2CON Address = 0C8H Reset Value = 0000 0000B,TF2:溢出標(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í)鐘。,2008/

20、04/12,第8章 8051內(nèi)部資源的C編程,EXEN2:定時(shí)器2外部允許標(biāo)志。 1若定時(shí)器2未作串行口波特率發(fā)生器,則T2EX端的 負(fù)跳變引起定時(shí)器2的捕獲或重裝。 0T2EX端的外部信號(hào)不起作用。,TR2:定時(shí)器2運(yùn)行控制位。 1啟動(dòng)。 0停止。,C/T2:計(jì)數(shù)器/定時(shí)器選擇位。 1計(jì)數(shù)器。 0定時(shí)器。,2008/04/12,第8章 8051內(nèi)部資源的C編程,CP/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)重裝操作。,2008/04/12,第8章 8051內(nèi)部資源的C

21、編程,1、工作方式1:16位的定時(shí)/計(jì)數(shù)器,振蕩器,12,TLx THx (8位) (8位),TFx,申請(qǐng)中斷,Tx端,TRx位,GATE位,INTx端,1, sbit WAVE = P11; static unsigned long overflow_count = 0; /* 定時(shí)器1中斷服務(wù)程序;每100個(gè)時(shí)鐘周期執(zhí)行一次*/ void timer1_ISR(void) interrupt 3 overflow_count+; WAVE = !WAVE; ,2008/04/12,第8章 8051內(nèi)部資源的C編程,/* 主函數(shù):定時(shí)器1設(shè)置為方式2 8位重裝方式*/ void main(

22、void ) TMOD = (TMOD ,2008/04/12,第8章 8051內(nèi)部資源的C編程,例2 在頻率為12MHz 的標(biāo)準(zhǔn)51單片機(jī)上,輸出周期 為2ms的方波。P188,1、用定時(shí)器0的方式1編程,采用查詢方式。,#include sbit P10 = P10; 由P10輸出波形 void main( void ) TMOD = 0 x01; / 定時(shí)器0工作方式1 TR0 = 1;/ 啟動(dòng)定時(shí)器0 for( ; ; ) TH0 = ( 65536 - 1000)/256; / 裝載計(jì)數(shù)初值 TL0 = ( 65536 - 1000)%256; do while ( !TF0 );/

23、 查詢等待定時(shí)中斷信號(hào) P10 = !P10;/ 取反 TF0 = 0;/ 軟件清零TF0 ,2008/04/12,第8章 8051內(nèi)部資源的C編程,2、用定時(shí)器0的方式1編程,采用中斷方式。,#include sbit P10 = P10; void timer0_isr( void ) interrupt 1 P10 = !P10; TH0 = ( 65536 - 1000 )/256; /表達(dá)式的數(shù)學(xué)意義?初值恢復(fù) TL0 = ( 65536 - 1000 )%256; void main ( void ) TMOD = 0 x01; TH0 = ( 65536 - 1000 )/256

24、; TL0 = ( 65536 - 1000 )%256; EA = 1; ET0 = 1; TR0 = 1; while (1) ; ,2008/04/12,第8章 8051內(nèi)部資源的C編程,例3 在頻率為12MHz 的標(biāo)準(zhǔn)51單片機(jī)上,使LED閃爍,周期為2s。p189,2008/04/12,第8章 8051內(nèi)部資源的C編程,#include sbit LED = P20; sbit WAVE = P11; static unsigned long overflow_count = 0; /* 定時(shí)器1中斷服務(wù)程序;每50ms執(zhí)行一次,*/ void timer1_ISR(void) in

25、terrupt 3 TH1 = (65536 50000)/256;/定時(shí)器1賦初值 TL1 = (65536 50000)%256; / 50ms/1us=5000,晶振? overflow_count+; WAVE = !WAVE; ,2008/04/12,第8章 8051內(nèi)部資源的C編程,/* 主函數(shù):定時(shí)器1設(shè)置為方式1 */ void main( void ) TMOD = (TMOD /T1的中斷系列,20個(gè)中斷為1系列,每個(gè)中斷50ms,2008/04/12,第8章 8051內(nèi)部資源的C編程,例4 在頻率為12MHz 的標(biāo)準(zhǔn)51單片機(jī)上,在P1.0引腳上輸出周期為2.5S,占空比

26、為20的脈沖信號(hào)。P190,#include #defined unchar unsigned char sbit WAVE = P10; uchar period = 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 )

27、overflow_count=0; WAVE = 1; ,Y,Y,N,N,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.3串行口,串行通訊:數(shù)據(jù)逐位順序傳送。傳輸線僅需1-2根。,8.3.0 基 本 概 念,串行通信的基本特征是數(shù)據(jù)逐位順序進(jìn)行傳送。 串行通信的格式及約定(如:同步方式、通訊速率、數(shù)據(jù)塊格式、信號(hào)電平等)不同,形成了多種串行通信的協(xié)議與接口標(biāo)準(zhǔn)。 常見的有: 通用異步收發(fā)器(UART)本課程介紹的串口 通用串行總線(USB) I2C總線 CAN總線:控制器局域網(wǎng)CAN(Controller Area Net)是一種現(xiàn)場總線 SPI總線, Serial Periph

28、eral Interface,串行外圍接口 RS-485,等等,2008/04/12,第8章 8051內(nèi)部資源的C編程,全雙工串行接口(UART),全雙工:(串行通信)收/發(fā)可同時(shí)進(jìn)行(手機(jī),電話) 半雙工:(串行通信)收/發(fā)不可同時(shí)進(jìn)行(對(duì)講機(jī)) 單 工:數(shù)據(jù)單向傳送,異步串行通信:以字符為單位進(jìn)行傳送 同步串行通信:以數(shù)據(jù)塊為單位進(jìn)行傳送 波特率(bps.):每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù)。Bits per second,異步串行通信數(shù)據(jù)格式(低位先行),2008/04/12,第8章 8051內(nèi)部資源的C編程,串 行 接 口 的 組 成(發(fā)送完TI才置1或接收完,接收完RI才置1),2008/04/

29、12,第8章 8051內(nèi)部資源的C編程,8.3.1 與串行口有關(guān)的SFR p194,SM0 SM1 SM2 REN TB8 RB8 TI R1,SCON,SM0,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或1/64 1 1 方式3:9位UART(1+8+1+1位), 波特率可變,按公式計(jì)算;,SM2:串行口多機(jī)通信控制位 (作為方式2、方式3的附加控制位),1、串行口控制寄存器S

30、CON(98H),2008/04/12,第8章 8051內(nèi)部資源的C編程, 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ā)送的是地址。(or奇偶校驗(yàn)), RB8:在方式2、3中,是收到的第9位數(shù)據(jù)。 在多機(jī)通信中,用作區(qū)別地址幀/數(shù)據(jù)幀的標(biāo)志。 (or奇偶校驗(yàn)),SM0 SM1 SM2 REN TB8 RB8 TI R1, REN:串行口接收允許控制位 = 1 表示允許接收; = 0 禁止接收。,SCON,2008/04/12,第8章 8051內(nèi)部資源的C

31、編程,SMOD GF1 GF0 PD 1DL,2、電源控制寄存器 PCON(97H) P.152 特殊功能寄存器PCON不能按位尋址, SMOD:在串行口工作方式 1、2、3 中是波特率加倍位 =1 時(shí),波特率加倍 =0 時(shí),波特率不加倍。 (在PCON中只有這一個(gè)位與串口有關(guān)), GF1,GF0:用戶可自行定義使用的通用標(biāo)志位,PCON,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.3.2 串行口的工作方式,1、工作方式0:8位移位寄存器I/O方式,發(fā)送:SBUF中的串行數(shù)據(jù)由RxD逐位移出; TxD輸出移位時(shí)鐘,波特率=fosc/12; 每送出8位數(shù)據(jù)TI就自動(dòng)置1; 需要用

32、軟件清零TI。,接收:串行數(shù)據(jù)由RxD逐位移入SBUF中; TxD輸出移位時(shí)鐘,波特率=fosc/12; 每接收8位數(shù)據(jù)RI就自動(dòng)置1; 需要用軟件清零RI。,2008/04/12,第8章 8051內(nèi)部資源的C編程,方式0時(shí)序圖,寫入SBUF,RXD數(shù)據(jù)輸出,TXD同步移位脈沖,TI中斷標(biāo)志,D0,D1,D2,D3,D4,D5,D6,D7,寫REN=1 RI=0,RXD輸入,RI,接收時(shí)序,發(fā)送時(shí)序,TXD,2008/04/12,第8章 8051內(nèi)部資源的C編程,串行口方式0的擴(kuò)展應(yīng)用經(jīng)常用到,串行口常用工作方式0擴(kuò)展出并行I/O口, 工作方式1、2、3則常用于串行通信,AB,CLK,h g

33、f e d c b a,CLR,AB,CLK,CLR,AB,CLK,CLR,+5V,74LS164,74LS164,74LS164,74LS164是串入并出芯片;,h g f e d c b a,h g f e d c b a,+5V,共陽LED 數(shù)碼管,VCC,TxD,RxD,51單片機(jī),2008/04/12,第8章 8051內(nèi)部資源的C編程,2、串行口工作方式 1,串行口為波特率可調(diào)的8位通用異步串行通信口。發(fā)送或接收一幀信息,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。其幀格式如圖所示。,方式1工作時(shí): 發(fā)送端自動(dòng)添加一個(gè)起始位和一個(gè)停止位; 接收端自動(dòng)去掉一個(gè)起始位和一個(gè)停止位。,20

34、08/04/12,第8章 8051內(nèi)部資源的C編程,(1)方式1輸出,發(fā)送時(shí),數(shù)據(jù)從TXD端輸出,當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,啟動(dòng)發(fā)送器發(fā)送。當(dāng)發(fā)送完一幀數(shù)據(jù)后,停止工作,置中斷標(biāo)志TI為1。,(2) 方式1輸入,接收時(shí),由REN置1,允許接收,串行口采樣RXD,當(dāng)采樣由1到0跳變時(shí),確認(rèn)是起始位“0”,開始接收一幀數(shù)據(jù)。 當(dāng)RI=0時(shí),若停止位為1或SM2=0,停止位進(jìn)入RB8位,此時(shí)置中斷標(biāo)志RI;否則信息將丟失。 所以,方式1接收時(shí),應(yīng)先用軟件清除RI或SM2標(biāo)志。,2008/04/12,第8章 8051內(nèi)部資源的C編程,(a) 發(fā)送時(shí)序圖,(b) 接收時(shí)序圖,2008/04/12,

35、第8章 8051內(nèi)部資源的C編程,3、串行口工作方式2,方式2下,串行口為9位UART。發(fā)送或接收一幀數(shù)據(jù)包括1位起始位0,8位數(shù)據(jù)位,1位可編程位(TB8/RB8)(用于奇偶校驗(yàn))和1位停止位。其幀格式如圖所示。,2008/04/12,第8章 8051內(nèi)部資源的C編程,(1)方式2的輸出,寫SBUF的指令,除了將8位數(shù)據(jù)送入SBUF外,同時(shí)還將TB8裝入發(fā)送移位寄存器的第9位,并通知發(fā)送控制器進(jìn)行一次發(fā)送。,發(fā)送時(shí),先根據(jù)通信協(xié)議由軟件設(shè)置TB8,然后用指令將要發(fā)送的數(shù)據(jù)寫入SBUF,啟動(dòng)發(fā)送器。,在送完一幀信息后,TI被自動(dòng)置1,在發(fā)送下一幀信息之前,TI必須由中斷服務(wù)程序或查詢程序清0。

36、,2008/04/12,第8章 8051內(nèi)部資源的C編程,當(dāng)REN=1時(shí),允許串行口接收數(shù)據(jù)。數(shù)據(jù)由RXD端輸入,接收11位的信息。當(dāng)接收器采樣到RXD端的負(fù)跳變,并判斷起始位有效后,開始接收一幀信息。,(2)方式2的輸入,當(dāng)接收器接收到第9位數(shù)據(jù)后,若同時(shí)滿足以下兩個(gè)條件:在1. RI=0;2. SM2=0,或接收到的第9位數(shù)據(jù)為1條件下,則接收數(shù)據(jù)有效,8位數(shù)據(jù)送入SBUF,第9位送入RB8,并置RI=1。若不滿足上述兩個(gè)條件,則信息丟失。,2008/04/12,第8章 8051內(nèi)部資源的C編程,方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。,4、串行

37、口工作方式3,2008/04/12,第8章 8051內(nèi)部資源的C編程,8.3.2 串行口的初始化,1、串行口的波特率,波特率為每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),也叫比特?cái)?shù),單位為b/s,即位/秒。 波特率用于表征數(shù)據(jù)傳輸?shù)乃俣?,波特率越高,?shù)據(jù)傳輸速度越快。,(1)方式0波特率 在方式0中,波特率為時(shí)鐘頻率的1/12,即fosc/12,固定不變。,(2) 方式2波特率 在方式2中,波特率取決于PCON中的SMOD值, 當(dāng)SMOD=0時(shí),波特率為fosc/64; 當(dāng)SMOD=1時(shí),波特率為fosc/32.,2008/04/12,第8章 8051內(nèi)部資源的C編程,波特率=2SMOD ( T1的溢出率 ) /32,在方式1和方式3下,波特率由定時(shí)器1的溢出率和SMOD共同決定。,(3) 方式1和方式3的波特率,溢出率:T1溢出的頻繁程度 即:T1溢出一次所需時(shí)間的倒數(shù)。,當(dāng)定時(shí)器T1做波特率發(fā)生器使用時(shí),通常是工作在模式2,即自動(dòng)重裝載的8位定時(shí)器,此時(shí)TL1作計(jì)數(shù)用,自動(dòng)重裝載的值在TH1內(nèi)。設(shè)計(jì)數(shù)的預(yù)置值(初始值)為X,那么每過256-X個(gè)機(jī)器周期,定時(shí)器溢出一次。為了避免因溢出而產(chǎn)生不必要的中斷,此時(shí)應(yīng)禁止T1中斷。(程序中無需ET1=1),2008/04/12,第8章 8051內(nèi)部資源的C編程,溢出周期為:,溢出率為溢出周期的倒數(shù),所以 方式1、3波特率 =,課堂作業(yè):波

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論