




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第8章 8051內(nèi)部資源的C編程8.1中 斷8.2定時器/計數(shù)器8.3串行口2013/10/13 L12013/10/13 L8.1 中 斷中斷的基本概念 所謂中斷是指CPU對系統(tǒng)中或系統(tǒng)外發(fā)生的某個事件的一種響應(yīng)過程,即CPU暫時停止現(xiàn)行程序的執(zhí)行,而自動轉(zhuǎn)去執(zhí)行預(yù)先安排好的處理該事件的服務(wù)子程序。當(dāng)處理結(jié)束后,再返回到被暫停程序的斷點處,繼續(xù)執(zhí)行原來的程序。實現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)稱為中斷系統(tǒng)。12013/10/13 L8.1.1 中斷源1、 8051 中 斷 源中 斷 源說 明 外部中斷0由P3.2腳輸入,低電平/負跳變觸發(fā)外部中斷1由P3.3腳輸入,低電平/負跳變觸發(fā)定時器
2、/計數(shù)器0中斷定時器T0溢出觸發(fā)定時器/計數(shù)器1中斷定時器T1溢出觸發(fā) 串行口中斷接收或發(fā)送一幀數(shù)據(jù)觸發(fā) 12013/10/13 L2、 定時器/計數(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在每個機器周期的S5P2采樣INTx引腳,若 INTx引腳為低電平,將直接觸發(fā)外部中斷。邊沿觸發(fā)方式:若第一
3、個機器周期采樣到 INTx引腳為高電平,第二個機器周期采樣到 INTx引腳為低電平時,向CPU請求中斷。12013/10/13 LIE0(IE1):外部中斷0(或1)的中斷請求標(biāo)志位。 當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時由硬件將 IE0(或IE1)清零。TCONIT0IE0IT1IE1TR0TF0TR1TF1D7 D6 D5 D4 D3 D2 D1 D0字節(jié)地址98H TF0(TF1):定時器中斷0(或1)的中斷請求標(biāo)志位。 當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時由硬件將 TF0(或TF1)清零。12013/10/13 L3、 串行口控制寄存器(SCON) SM0 SM1 SM2 REN TB8
4、RB8 TI R1SCON RI,TI:串行口收/發(fā)數(shù)據(jù)申請中斷標(biāo)志位1 申請中斷; 0 不申請中斷12013/10/13 L8.1.2 中斷的控制1、 中斷允許寄存器(IE) MCS-51單片機中沒有專設(shè)的開中斷和關(guān)中斷指令,對各中斷源的中斷開放或關(guān)閉是由內(nèi)部的中斷允許寄存器IE的各位來控制的。EX0ET0EX1ET1ESEAD7 D6 D5 D4 D3 D2 D1 D0IE字節(jié)地址A8H EA:中斷允許總控位。 EA=0,屏蔽所有的中斷請求; EA=1,開放中斷。 EA的作用是使中斷允許形成兩級控制。即各中斷源首先受EA位的控制;其次還要受各中斷源自己的中斷允許總控位控制。12013/10
5、/13 LEX0ET0EX1ET1ESEAD7 D6 D5 D4 D3 D2 D1 D0IE字節(jié)地址A8H ET1:定時器/計數(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)先級寄存器(IP) MCS-51單片機的中斷源有兩個用戶可控的中斷優(yōu)先級,從而可實現(xiàn)二級中斷嵌套。中斷系統(tǒng)遵循如下三條規(guī)則: (1) 正在進行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所
6、中斷,一直到該中斷服務(wù)程序結(jié)束,返回了主程序且執(zhí)行了主程序中的一條指令后,CPU才響應(yīng)新的中斷請求。 (2) 正在進行的低優(yōu)先級中斷服務(wù)程序能被高優(yōu)先級中斷請求所中斷,實現(xiàn)兩級中斷嵌套。 (3) CPU同時接收到幾個中斷請求時,首先響應(yīng)優(yōu)先級最高的中斷請求。12013/10/13 LPT2PSPT1PX1PT0PX0D7 D6 D5 D4 D3 D2 D1 D0IP字節(jié)地址B8H PT2:定時器/計數(shù)器T2的中斷優(yōu)先級控制位,只用于52子系列。PS:串行口的中斷優(yōu)先級控制位。PT1:定時器/計數(shù)器T1的中斷優(yōu)先級控制位。PX1:外部中斷1的中斷優(yōu)先級控制位。PT0:定時器/計數(shù)器T0的中斷優(yōu)先
7、級控制位。PX0:外部中斷0的中斷優(yōu)先級控制位。12013/10/13 L表8.2 中 斷 優(yōu) 先 級中 斷 源同級的中斷優(yōu)先級 外部中斷0 定時器/計數(shù)器0中斷 外部中斷1 定時器/計數(shù)器1中斷 串行口中斷 定時器/計數(shù)器2中斷最高最低12013/10/13 L8.1.3 中斷響應(yīng) 單片機響應(yīng)中斷的條件為中斷源有請求(中斷允許寄存器IE相應(yīng)位置1),且CPU開中斷(即EA=1)。這樣,在每個機器周期的S5P2期間,對所有中斷源按用戶設(shè)置的優(yōu)先級和內(nèi)部規(guī)定的優(yōu)先級進行順序檢測,并可在S6期間找到所有有效的中斷請求。如有中斷請求,且滿足下列條件,則在下一個機器周期的S1期間響應(yīng)中斷,否則將丟棄中
8、斷采樣的結(jié)果。 (1) 無同級或高級中斷正在處理。 (2) 現(xiàn)行指令執(zhí)行到最后1個機器周期且已結(jié)束。 (3) 若現(xiàn)行指令為RETI或訪問IE、IP的指令時,執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完畢。1中斷響應(yīng)的條件12013/10/13 L CPU響應(yīng)中斷后,由硬件自動執(zhí)行如下的功能操作: (1) 根據(jù)中斷請求源的優(yōu)先級高低,對相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1。 (2) 保護斷點,即把程序計數(shù)器PC的內(nèi)容壓入堆棧保存。 (3) 清內(nèi)部硬件可清除的中斷請求標(biāo)志位(IE0、IE1、TF0、TF1)。 (4) 把被響應(yīng)的中斷服務(wù)程序入口地址送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。各中斷服務(wù)程序的入
9、口地址見表。 2中斷響應(yīng)過程12013/10/13 L中斷服務(wù)程序入口地址表 編 號中 斷 源入 口 地 址0外部中斷00003H1定時器/計數(shù)器0000BH2外部中斷10013H3定時器/計數(shù)器1001BH4串行口中斷0023H12013/10/13 L中斷服務(wù)程序的函數(shù)定義的語法格式如下: 返回值 函數(shù)名(參數(shù)) interrupt m using n 3中斷服務(wù)程序 C51編譯器支持在C源程序中直接開發(fā)中斷程序。中斷服務(wù)程序是通過按規(guī)定語法格式定義的一個函數(shù)。interrupt 屬性的參數(shù)為0 到31 的整常數(shù)值。帶操作數(shù)的表達式在函數(shù)原型中是不允許的。12013/10/13 Linte
10、rrupt 屬性影響如下函數(shù)的目標(biāo)代碼 特殊功能寄存器 ACC B DPH DPL 和PSW 的內(nèi)容 需要時在函數(shù)調(diào)用時保存在堆棧中。 在中斷函數(shù)中所用的寄存器如果不用using 屬性指 定一個寄存器組就保存在堆棧中。 保存在堆棧中的寄存器和SFR 在退出函數(shù)前恢復(fù)。 函數(shù)由指令RETI 終止。另外Cx51 編譯器自動產(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 下面的例子程序說明了如何使用interrupt 屬性。程序同時顯示進入和退出中斷函數(shù)的代碼。using 函數(shù)屬性用來選擇和非中斷程序不同的寄存器組。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 但是因為在本函數(shù)中不需要工作寄存器為切換寄存器組而產(chǎn)生的代碼被優(yōu)化排除了。12013/10/13 L 4中斷服務(wù)函數(shù)應(yīng)用注意 中斷函數(shù)沒有函數(shù)參數(shù)。如果中斷函數(shù)聲明中帶參數(shù), 編譯器就產(chǎn)生錯誤信息。 中斷函數(shù)
13、聲明不能包含返回值,必須聲明為VOID 。如果 定義了一個返回值,編譯器就產(chǎn)生一個錯誤。暗含的int 返回值被編譯器忽略。 編譯器不允許直接的對中斷函數(shù)的調(diào)用。對中函數(shù)的直 接調(diào)用是無意義的。 編譯器對每個中斷函數(shù)產(chǎn)生一個中斷矢量。矢量的代碼 是跳轉(zhuǎn)到中斷函數(shù)的起始 從一個中斷程序中調(diào)用函數(shù)必須和中斷使用相同的寄存器組。12013/10/13 L8.1.5 中斷編程 圖所示是利用優(yōu)先權(quán)解碼芯片,在單片機8031的一個外部中斷INT1上擴展多個中斷源的原理電路圖。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)先級中斷 */ IE=-0 x84 ; /* INT1開中斷,CPU開中斷 */ 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ù)器 2個16位定時器/計數(shù)器定時器:對片內(nèi)機器時鐘(周期方波)進行計數(shù)計數(shù)器:對Tx引腳輸入的負脈沖進行計數(shù) 與Timer工作有關(guān)的特殊功能寄存器: TCON 、TMOD、THx 和 TLx8.2.0 定時器概述 TIMER的作用:定時操作:定時采樣,定時掃描,定時中斷測量外部信號:累加統(tǒng)計,測量周期等定時輸出:PWM等監(jiān)視系統(tǒng)
16、正常工作與否12013/10/13 L 定時器的一般結(jié)構(gòu)和工作原理+1計數(shù)器溢出中斷脈沖控制開關(guān) 實質(zhì)是計數(shù)器,脈沖每一次下降沿,計數(shù)寄存器數(shù)值將加1. 計數(shù)的脈沖如果來源于單片機內(nèi)部的晶振,由于其周期極為準確,這時稱為定時器。 計數(shù)的脈沖如果來源于單片機外部的引腳,由于其周期一般不確定,可表示事件發(fā)生,這時稱為計數(shù)器。12013/10/13 L1、計數(shù)寄存器TH與TL2、定時器控制寄存器TCON (88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TRx: Timer0/1運行控制位。 =1 啟動計數(shù); =0 停止計數(shù)8.2.1 與定時器有關(guān)的特殊功能寄存器12013/
17、10/13 LTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TFx: Timer0/1計數(shù)溢出標(biāo)志位。 =1 計數(shù)溢出; =0 計數(shù)未滿 TFx標(biāo)志位可用于申請中斷或供CPU查詢。 在進入中斷服務(wù)程序時會自動清零;但在查詢方式時必須軟件清零。定時器T0/T1 中斷申請過程 在已經(jīng)開放T0/T1中斷允許且已被啟動的前提下:T0/T1加滿溢出時 TF0/TF1標(biāo)志位自動置“1” 檢測到TCON中TF0/TF1變“1”后,將產(chǎn)生指令: LCALL 000BH/LCALL 001BH 執(zhí)行中斷服務(wù)程序, TF0/TF1標(biāo)志位會自動清“0”,以備下次中斷申請。 12013/10/13 L
18、3、定時器方式寄存器TMOD (89H)GATE C / T M1 M0 GATE C / T M1 M0T1T0C/T :計數(shù)器/定時器選擇位 = 1 外部事件計數(shù)器。對Tx引腳的負脈沖計數(shù); = 0 片內(nèi)時鐘定時器。對機器周期脈沖計數(shù)定時12013/10/13 LGATE門控位: Timer可由軟件與硬件兩者控制 GATE = 0 普通用法 Timer的啟/停由軟件對TRx位寫“1”/“0”控制 GATE = 1 門控用法 Timer的啟/停由軟件對TRx位寫“1”/“0” 和在INTx引腳上出現(xiàn)的信號的高/低共同控制 (INTx引腳高電平允許定時/計數(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用它無益,不要記它!0 1:16位 Timer經(jīng)常用到。1 0:可自動重裝的 8位 Timer經(jīng)常用到。1 1:T0 分為2個8位 Timer;T1 此時不工作 因為沒有帶來什么好處,幾乎無用。12013/10/13 L4、定時器/計數(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)負跳變而出現(xiàn)捕獲或重裝時,EXF2置位,申請中斷。 EXF2必須由軟件清零。RCLK:接收時鐘標(biāo)志。1用定時器2溢出作為串行口的接收時鐘;0用定時器1溢出作為串行口的接收時鐘。TCLK:發(fā)送時鐘標(biāo)志。1用定時器2溢出作為串行口的發(fā)送時鐘;0用定時器1溢出作為串行口的發(fā)送時鐘。12013/10/13 LTF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2EXEN2:定時器2外部允許標(biāo)志。1若定時器2未作串行口波特率發(fā)生器,則T2EX端的 負跳
21、變引起定時器2的捕獲或重裝。0T2EX端的外部信號不起作用。TR2:定時器2運行控制位。1啟動。0停止。C/T2:計數(shù)器/定時器選擇位。1計數(shù)器。0定時器。12013/10/13 LCP/RL2:捕獲/重裝標(biāo)志。1當(dāng)EXEN21,且T2EX端的信號負跳變時,發(fā)生捕 獲操作。0當(dāng)定時器2溢出,或在EXEN21條件下T2EX端的 信號負跳變時,發(fā)生自動重裝操作。TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL212013/10/13 L1、工作方式1:16位的定時/計數(shù)器振蕩器12TLx THx (8位) (8位)TFx申請中斷Tx端TRx位GATE位INTx端1&C/T=0C/T
22、=1控制 =1開關(guān)接通或門與門最大計數(shù)脈沖個數(shù):65536(216)8.2.2 定時器/計數(shù)器的工作方式12013/10/13 L THx/TLx賦初值:THx賦高8位,TLx賦低8位工作方式1 的編程要點: TMOD選方式: 寫“M1,M0”=01b選方式1 若不用門控位,直接用軟件寫TRx控制啟/停 若使用門控位,先置位TRx,然后由INTx端 的高/低電平來控制其啟/停 若要允許中斷,還須先置位ETx、EA等中斷 允許控制位,并編寫中斷服務(wù)程序 若不用中斷,可查詢“計數(shù)溢出標(biāo)志TFx” 的方式工作,但溢出標(biāo)志TFx須軟件清012013/10/13 L定時器的計數(shù)單元每個機器周期自動加1直
23、到溢出 T=(12/fosc)*(216-a)us方式1:定時初值/定時時間計算12013/10/13 L2、工作方式2:8 位自動重裝的定時/計數(shù)器振蕩器12TLx (8位)TFx申請中斷Tx端TRx位GATE位INTx端1&C/T=0C/T=1控制 =1開關(guān)接通或門與門THx (8位)溢出位門開用于需要重復(fù)定時和計數(shù)的場合。最大計數(shù)值:256 (28)12013/10/13 L THx/TLx賦相同初值 在TLx計數(shù)達到0FFH 再加“1”時,TL0 將溢出, “TFx”置1去申請中斷,同時THx中的 值自動重裝(Copy)進TLx工作方式 2 的編程: TMOD寄存器選方式: 寫“M1,
24、M0” = 10 b 選中方式2 其他用法與各種方式1完全相同12013/10/13 L3、工作方式3 方式3只適用于定時器0。此時,定時器0的TH0、TL0成為兩個獨立的計數(shù)器。 TL0可作為定時器/計數(shù)器,占用定時器0在TCON和TMOD中的控制位和標(biāo)志位。 TH0只能作為定時器使用,占用定時器1在TCON和TMOD中的控制位和標(biāo)志位。12013/10/13 L4、定時器2的工作方式第一種:捕捉方式。 設(shè)置為捕捉方式時和定時器0 或定時器1 一樣以16 位方式工作。這種方式通過復(fù)位EXEN2 來選擇。當(dāng)置位EXEN2 時,如果T2EX 有負跳變電平將把當(dāng)前的數(shù)鎖存在RCAP2H和RCAP2
25、L 中,這個事件可用來產(chǎn)生中斷。 通過軟件設(shè)置T2CON ,可使定時/計數(shù)器2以三種基本工作方式之一工作。12013/10/13 L 用來產(chǎn)生串行口通訊所需的波特率。這通過同時或分別置位RCLK 和TCLK來實現(xiàn)。在這種方式中每個機器周期都將使定時器加1 而不像定時器0 和1 那樣需要12 個機器周期這使得串行通訊的波特率更高。第二種工作方式:為自動重裝方式。 其中包含的兩個子功能由EXEN2 來選擇。當(dāng)EXEN2復(fù)位時,16 位定時器溢出將觸發(fā)一個中斷,并將RCAP2H 和RCAP2L 中的數(shù)裝入定時器中。當(dāng)EXEN2 置位時,除上述功能外T2EX 引腳的負跳變將產(chǎn)生一次重裝操作。第三種工作
26、方式:12013/10/13 L8.2.3 定時器/計數(shù)器的初始化1、初始化步驟(2)計算定時器/計數(shù)器的計數(shù)初值,并裝載到TH和TL寄 存器。(1)確定定時器/計數(shù)器的工作方式 編程TMOD寄存器。(3)定時器/計數(shù)器工作中斷方式時,開CPU中斷和源中 斷,編程IE寄存器(4)啟動定時器/計數(shù)器編程TCON寄存器中的 TR0/TR1位。12013/10/13 L2、計數(shù)初值的計算(1)定時器的計數(shù)初值 在定時器方式下,是對機器周期脈沖進行計數(shù)。如果系統(tǒng)時鐘為6MHz,一個機器周期為12/fosc=2us.方式0,13位定時器最大定時間隔2132us=16.384ms.方式1,16位定時器最大
27、定時間隔2162us=131.072ms.方式2,8位定時器最大定時間隔282us=512us.初值計算方法:T=(12/fosc)*(216-X) us12013/10/13 L(2)計數(shù)器的計數(shù)器初值方式0,13位計數(shù)器最大計數(shù)值213=8192.方式1,16位計數(shù)器最大計數(shù)值216=65536.方式2,8位計數(shù)器最大計數(shù)值28=256.初值計算方法:cnt=216-X12013/10/13 L8.2.4 定時器/計數(shù)器的應(yīng)用實例例1 在頻率為12MHz 的標(biāo)準51單片機上, 用timer1產(chǎn)生10khz定時器滴答中斷。解:1、確定timer1工作方式: 工作方式28位自動重裝方式 TMO
28、D中的M1M0=10 2、確定timer1計數(shù)初值: X256 100156。3、中斷方式控制字設(shè)定。 EA=1 ,ET1=1。12013/10/13 L4、啟動定時器。 TR1=1。5、編程(1)流程圖:主函數(shù)流程圖 中斷函數(shù)流程圖(2)代碼編寫:中斷函數(shù) 主函數(shù)12013/10/13 L#include sbit LED = P10;sbit WAVE = P11;static unsigned long overflow_count = 0;/* 定時器1中斷服務(wù)程序;每100個時鐘周期執(zhí)行一次*/void timer1_ISR(void) interrupt 3overflow_cou
29、nt+;WAVE = !WAVE;12013/10/13 L/* 主函數(shù):定時器1設(shè)置為方式2 8位重裝方式*/void main( void )TMOD = (TMOD & 0X0F) | 0X20;/設(shè)置定時器1工作方式TH1 = 256 - 100;/定時器1賦初值TL1 = TH1;EA = 1;/開定時器1中斷ET1 = 1;TR1 = 1;/啟動定時器1while(1)if ( overflow_count = 100) overflow_count = 0;LED = !LED;12013/10/13 L例2 在頻率為12MHz 的標(biāo)準51單片機上,輸出周期 為2ms的方波。1、
30、用定時器0的方式1編程,采用查詢方式。#include sbit P10 = P10;void main( void )TMOD = 0 x01; / 定時器工作方式0TR0 = 1;/ 啟動定時器0for( ; ; )TH0 = ( 65536 - 1000)/256; / 裝載計數(shù)初值TL0 = ( 65536 - 1000)%256;do while ( !TF0 );/ 查詢等待定時中斷信號P10 = !P10;/ 取反TF0 = 0;/ 軟件清零TF012013/10/13 L2、用定時器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)準51單片機上,使LED閃爍,周期為2s。12013/10/13 L#include sbit LED = P10;sbit
32、 WAVE = P11;static unsigned long overflow_count = 0;/* 定時器1中斷服務(wù)程序;每50ms執(zhí)行一次*/void timer1_ISR(void) interrupt 3TH1 = (65536 50000)/256;/定時器1賦初值TL1 = (65536 50000)%256;overflow_count+;WAVE = !WAVE;12013/10/13 L/* 主函數(shù):定時器1設(shè)置為方式1 */void main( void )TMOD = (TMOD & 0X0F) | 0X10;/設(shè)置定時器1工作方式TH1 = (65536 500
33、00)/256;/定時器1賦初值TL1 = (65536 50000)%256;EA = 1;/開定時器1中斷ET1 = 1;TR1 = 1;/啟動定時器1while(1)if ( overflow_count = 20) overflow_count = 0;LED = !LED;12013/10/13 L例4 在頻率為12MHz 的標(biāo)準51單片機上,在P1.0引腳上輸出周期為2.5S,占空比為20的脈沖信號。中斷次數(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ù)逐位順序進行傳送。串行通信的格式及約定(如:同步方式、通訊速率、數(shù)據(jù)塊格式、信號電平等)不同,形成了多種串行通信的協(xié)議與接口標(biāo)準。常見的有:通用異步收發(fā)器(UART)本課程介紹的串口通用串行總線(USB)I2C總線 CAN總線 SPI總線 RS-485,等等12013/10/13 L全雙工串行接口(UART)全雙工:(串行通信)收/發(fā)可同時進行半雙工:(串行通信)收/發(fā)不可同時進行單 工:數(shù)據(jù)單向傳送異步串行通信:以字符為單位進行傳送同步串行通信:以數(shù)據(jù)塊為單位進行傳送波特率(bps.):每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù)。異步串行通信數(shù)據(jù)格式D0D1D2D3D4D5D6D7
36、停止位起始位12013/10/13 LSBUF(發(fā))SBUF(收)發(fā)送控制器 TI接收控制器 RI移位寄存器波特率發(fā)生器T11A累加器(門)移位寄存器RxDTxD去申請中斷引腳引腳串 行 接 口 的 組 成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位), 波特率可變,按公式計算; 1 0 方式2:9位UART(1+8+1+1位), 波特率固定=fosc /32
37、或1/64 1 1 方式3:9位UART(1+8+1+1位), 波特率可變,按公式計算;SM2:串行口多機通信控制位 (作為方式2、方式3的附加控制位)1、串行口控制寄存器SCON(98H)12013/10/13 L RI,TI:串行口收/發(fā)數(shù)據(jù)申請中斷標(biāo)志位 1 申請中斷; 0 不申請中斷 TB8:方式2、3中,是要發(fā)送的第9位數(shù)據(jù)。 多機通信中,TB8=0 表示發(fā)送的是數(shù)據(jù); TB8=1 表示發(fā)送的是地址。(奇偶校驗) RB8:在方式2、3中,是收到的第9位數(shù)據(jù)。 在多機通信中,用作區(qū)別地址幀/數(shù)據(jù)幀的標(biāo)志。 (奇偶校驗) 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 時,波特率加倍 =0 時,波特率不加倍。 (在PCON中只有這一個位與串口有關(guān)) GF1,GF0:用戶可自行定義使用的通用標(biāo)志位PCON12013/10/13 L8.3.2 串行口的工作方式1、工作方式0:8位移位寄存器I/O方式發(fā)送:SBUF中的串行數(shù)據(jù)由RxD逐位移出; TxD輸出移位時鐘,波特率=fosc
39、/12; 每送出8位數(shù)據(jù)TI就自動置1; 需要用軟件清零TI。 接收:串行數(shù)據(jù)由RxD逐位移入SBUF中; TxD輸出移位時鐘,波特率=fosc/12; 每接收8位數(shù)據(jù)RI就自動置1; 需要用軟件清零RI。12013/10/13 L方式0時序圖寫入SBUFRXD輸出TXDTID0D1D2D3D4D5D6D7寫REN=1RI=0RXD輸入RI接收時序發(fā)送時序TXD12013/10/13 L串行口方式0的擴展應(yīng)用經(jīng)常用到串行口常用工作方式0擴展出并行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共陽LED 數(shù)碼管VCCTxDRxD51單片機12013/10/13 L2、串行口工作方式 1 串行口為波特率可調(diào)的8位通用異步串行通信口。發(fā)送或接收一幀信息,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。其幀格式如圖所示。 方式1工作時: 發(fā)送端自動添加一個起始位和一個停止位; 接收端自動去掉一個起始位和一個停止位。12013/10/13 L(1)方式1輸出 發(fā)送時,數(shù)據(jù)從TXD端輸出,當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,啟動發(fā)送器發(fā)送。當(dāng)發(fā)送完一幀數(shù)據(jù)后,停止工作,置中斷標(biāo)志TI為
41、1。(2) 方式1輸入 接收時,由REN置1,允許接收,串行口采樣RXD,當(dāng)采樣由1到0跳變時,確認是起始位“0”,開始接收一幀數(shù)據(jù)。 當(dāng)RI=0,且停止位為1或SM2=0時,停止位進入RB8位,同時置中斷標(biāo)志RI;否則信息將丟失。 所以,方式1接收時,應(yīng)先用軟件清除RI或SM2標(biāo)志。12013/10/13 L(a) 發(fā)送時序圖(b) 接收時序圖采樣RXD輸入數(shù)據(jù)D0D1D2D3D4D5D6D7停止位起始位RI檢測負跳變寫入SBUFTXD數(shù)據(jù)輸出TID0D1D2D3D4D5D6D7停止位起始位12013/10/13 L3、串行口工作方式2 方式2下,串行口為9位UART。發(fā)送或接收一幀數(shù)據(jù)包括
42、1位起始位0,8位數(shù)據(jù)位,1位可編程位(TB8/RB8)(用于奇偶校驗)和1位停止位。其幀格式如圖所示。12013/10/13 L(1)方式2的輸出 寫SBUF的指令,除了將8位數(shù)據(jù)送入SBUF外,同時還將TB8裝入發(fā)送移位寄存器的第9位,并通知發(fā)送控制器進行一次發(fā)送。 發(fā)送時,先根據(jù)通信協(xié)議由軟件設(shè)置TB8,然后用指令將要發(fā)送的數(shù)據(jù)寫入SBUF,啟動發(fā)送器。 在送完一幀信息后,TI被自動置1,在發(fā)送下一幀信息之前,TI必須由中斷服務(wù)程序或查詢程序清0。12013/10/13 L 當(dāng)REN=1時,允許串行口接收數(shù)據(jù)。數(shù)據(jù)由RXD端輸入,接收11位的信息。當(dāng)接收器采樣到RXD端的負跳變,并判斷起始位有效后,開始接收一幀信息。(2)方式2的輸入 當(dāng)接收器接收到第9位數(shù)據(jù)后,若同時滿足以下兩個條件:RI=0和SM2=0或接收到的第9位數(shù)據(jù)為1,則接收數(shù)據(jù)有效,8位數(shù)據(jù)送入SBUF,第9位送入RB8,并置RI=1。若不滿足上述兩個條件,則信息丟失。12013/10/13 L 方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。4、串行口工作方式312013/10/13 L8.3.2 串行口的初始化1、串行口的波特率 波特率為每秒鐘傳送二進制數(shù)碼的位數(shù),也叫比特數(shù),單位為b/s,即位/秒。 波特率用于表征數(shù)據(jù)傳輸
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAS 431-2020綜合管廊管線支吊架技術(shù)規(guī)程
- T/CAQI 29-2021中小學(xué)教室空氣質(zhì)量管理指南
- T/CAPE 10021-2020設(shè)備全壽命周期管理導(dǎo)則
- 城管文職面試題及答案
- 郟縣美術(shù)面試題及答案
- 財富顧問考試題及答案
- 歌舞團面試題及答案
- 互聯(lián)網(wǎng)奇葩面試題及答案
- 人社局電工技能培訓(xùn)課件
- 成華區(qū)新質(zhì)生產(chǎn)力
- 2025屆遼寧省葫蘆島市第二次模擬考試二模英語試題(原卷版+解析版)
- 2025新疆交投集團所屬子公司招56人筆試參考題庫附帶答案詳解
- 2025-2030年中國銅合金散熱器材料行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 醫(yī)療器械銷售流程與技巧
- 黑龍江省農(nóng)村信用社聯(lián)合社員工招聘考試真題2024
- 2025上海車展專題報告
- 紡織承包合同協(xié)議書
- 軟件轉(zhuǎn)讓合同協(xié)議書
- 2025年北京市豐臺區(qū)中考數(shù)學(xué)一模試卷
- 續(xù)簽采購合同范本(標(biāo)準版)
- 智能垃圾分類箱項目投資商業(yè)計劃書范本(投資融資分析)
評論
0/150
提交評論