版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、上次課回顧XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A
2、1326P2.6/A1427U1AT89C51R2560R3560R4560R5560VCCD5LED-YELLOWD1LED-YELLOWD2LED-YELLOWD3LED-YELLOWR104.7kR114.7k12456U2:A744091012138U2:B7440R110kR610kR710k單片機的定時/計數(shù)器本章內(nèi)容5.1 任務(wù)4引入5.2 定時/計數(shù)器的結(jié)構(gòu)和工作原理5.3 定時器/計數(shù)器的寄存器(重點) 5.4 定時器/計數(shù)器的工作方式(難點)5.5 編程實例本次課內(nèi)容5.1 通過任務(wù)4,引入定時/計數(shù)中斷方式。5.2 簡要介紹定時/計數(shù)器的結(jié)構(gòu)和工作原理。5.3 介紹定時/
3、計數(shù)器的2個寄存器,TCON和TMOD,其中TMOD是重點。5.4 定時/計數(shù)器的工作方式。重點講方式1和方式2。 在計算機控制領(lǐng)域,如檢測、控制及智能儀器等,常常需要實時時鐘來實現(xiàn)定時或延時控制,也常常要對外部事件進行計數(shù)。MCS-51單片機中就有兩個定時/計數(shù)器,可以實現(xiàn)這些功能。5.1 5.1 任務(wù)任務(wù)4 4:信號燈的控制:信號燈的控制一、要求一、要求按照圖任務(wù)1中圖1.7的電路,不用任務(wù)2中的軟件延時,也不用任務(wù)3中的按鍵,而用其它硬件方式來完成發(fā)光二極管的閃爍,間隔時間為100ms(假如使用的晶振頻率為6MHz)。二、任務(wù)分析與實現(xiàn)二、任務(wù)分析與實現(xiàn)在計算機中也經(jīng)常要用到定時。定時的
4、方法一般有2種:1 1、采用軟件定時、采用軟件定時 軟件定時是通過反復(fù)地執(zhí)行一個循環(huán)程序以進行時間的延遲,特點是時間精確,不需外加硬件電路。 但要注意的是,延時程序?qū)嶋H上是“耗時”,要白白地占用CPU一段時間。此時CPU不能做任何其他的工作,就像機器在不停空轉(zhuǎn)一樣,這是程序延時的缺點。因此軟件定時的時間不宜過長。 在任務(wù)2中,我們使用了一個延時子程序的方式來完成發(fā)光二極管閃爍的,通過反復(fù)執(zhí)行一個循環(huán)體內(nèi)的指令以累計機器周期數(shù)而實現(xiàn)延時。可以通過改變延時程序的參數(shù)來改變延時時間。2 2、采用可編程定時器定時、采用可編程定時器定時 在任務(wù)3中,我們是用手動按鍵模擬一個中斷請求來完成發(fā)光二極管的亮、
5、滅變化,時間間隔由我們手動控制。但是這樣不可能達到間隔時間的精確,顯然達不到任務(wù)定時間隔100ms的要求。 因此若要在延時時間精確,而在定時過程中需要CPU還能做其它的工作,就需要采用單片機內(nèi)部的硬件定時器或外接其他定時芯片。比如8253芯片,就是一個定時芯片。 MCS-51單片機內(nèi)部有兩個定時器,這樣我們就不要外接定時芯片。本次任務(wù)就可以采用這兩個定時器中的任何一個來完成“定時”,而不是延時。 利用單片機的開發(fā)系統(tǒng)輸入下面的程序:#include void main ( void ) TMOD = 0 x01;TH0 = 0 x3C;TL0 = 0 xB0;EA = 1;ET0 = 1;TR
6、0 = 1;while(1);void timer0_int (void)interrupt 1 P1 = P1;1. 21. 2個個1616位定時器位定時器/ /計數(shù)器計數(shù)器 (52系列有3個16位Timer)定時器:對片內(nèi)機器時鐘(周期方波)進行計數(shù)計數(shù)器:對Tx引腳輸入的負脈沖進行計數(shù) T0引腳輸入端:P3.4 T1引腳輸入端:P3.52. 2. 與與TimerTimer工作有關(guān)的特殊功能寄存器:工作有關(guān)的特殊功能寄存器: TCON 和 TMOD5.2 5.2 定時定時/ /計數(shù)器的結(jié)構(gòu)和原理計數(shù)器的結(jié)構(gòu)和原理5.3 5.3 定時定時/ /計數(shù)器的寄存器計數(shù)器的寄存器TF1 TR1 TF
7、0 TR0 IE1 IT1 IE0 IT01.1.定時器控制寄存器定時器控制寄存器TCON (88H)TCON (88H)(1 1)TFx: Timer0/1TFx: Timer0/1計數(shù)溢出標(biāo)志位計數(shù)溢出標(biāo)志位 =1 計數(shù)溢出; =0 計數(shù)未滿 TFx標(biāo)志位可用于申請中斷或供CPU查詢。 在進入中斷服務(wù)程序時會自動清零;但在 查詢方式時必須軟件清零。(2 2)TRx: Timer0/1TRx: Timer0/1運行控制位運行控制位 =1 啟動計數(shù); =0 停止計數(shù)(3 3)定時器)定時器T0/T1 T0/T1 中斷申請過程中斷申請過程 在已經(jīng)開放在已經(jīng)開放T0/T1T0/T1中斷允許且已被啟
8、動的前提下:中斷允許且已被啟動的前提下: T0/T1T0/T1加滿溢出時加滿溢出時 TF0/TF1TF0/TF1標(biāo)志位自動置標(biāo)志位自動置“1” 1” 檢測到檢測到TCONTCON中中TF0/TF1TF0/TF1變變“1”1”后后, ,將產(chǎn)生指令:將產(chǎn)生指令: LCALL 000BH/LCALL 001BH LCALL 000BH/LCALL 001BH 執(zhí)行中斷服務(wù)程序執(zhí)行中斷服務(wù)程序, , TF0/TF1TF0/TF1標(biāo)志位會自動清標(biāo)志位會自動清“0”,0”,以備下次中斷申以備下次中斷申 請。請。 定時定時/ /計數(shù)器可按片內(nèi)機器周期定時,也可對由計數(shù)器可按片內(nèi)機器周期定時,也可對由T0/T
9、1T0/T1引腳輸入一個負脈沖進行加法計數(shù)引腳輸入一個負脈沖進行加法計數(shù)GATE C / T M1 M0 GATE C / T M1 M02.2.定時器方式寄存器定時器方式寄存器TMOD (89H)TMOD (89H)T1T1T0T0(1 1)M1,M0M1,M0:工作方式定義位:工作方式定義位 (4 (4 種方式種方式 ):):(2 2)C/T C/T :計數(shù)器:計數(shù)器/ /定時器選擇位定時器選擇位 = 1 = 1 外部事件計數(shù)器。對外部事件計數(shù)器。對TxTx引腳的負脈沖計數(shù);引腳的負脈沖計數(shù); = 0 = 0 片內(nèi)時鐘定時器。對機器周期脈沖計數(shù)定時片內(nèi)時鐘定時器。對機器周期脈沖計數(shù)定時0
10、00 0:1313位位 TimerTimer用它無益用它無益, ,不要記它!不要記它!0 10 1:1616位位 TimerTimer經(jīng)常用到經(jīng)常用到1 01 0:可自動重裝的:可自動重裝的 8 8位位 TimerTimer經(jīng)常用到經(jīng)常用到1 11 1:T0 T0 分為分為2 2個個8 8位位 TimerTimer;T1 T1 此時不工作此時不工作 因為沒有帶來甚么好處,幾乎因為沒有帶來甚么好處,幾乎無無用用(3)GATE(3)GATE門控位門控位: Timer: Timer可由軟件與硬件兩者控制可由軟件與硬件兩者控制 GATE = 0 GATE = 0 普通用法普通用法 TimerTimer
11、的啟的啟/ /停由軟件對停由軟件對TRxTRx位寫位寫“1”/“0”1”/“0”控制控制2.2.定時器方式寄存器定時器方式寄存器TMODTMOD(續(xù))(續(xù)) GATE = 1 GATE = 1 門控用法門控用法 TimerTimer的啟的啟/ /停由軟件對停由軟件對TRxTRx位寫位寫“1”/“0” 1”/“0” 和在和在INTxINTx引腳上出現(xiàn)的信號的高引腳上出現(xiàn)的信號的高/ /低共同控制低共同控制5.4 定時/計數(shù)器的工作方式1.1.工作方式工作方式1 1:1616位的定時位的定時/ /計數(shù)器計數(shù)器振蕩器振蕩器 12TLx THx (8位位) (8位位)TFx申請申請中斷中斷TxTx端端
12、TRxTRx位位GATEGATE位位INTxINTx端端11& &C/T=0C/T=1控制控制 =1開關(guān)接通開關(guān)接通或門或門與門與門 THx/TLxTHx/TLx賦初值:賦初值:THxTHx賦高賦高8 8位,位,TLxTLx賦低賦低8 8位位(1 1)工作方式)工作方式1 1 的編程要點:的編程要點: TMODTMOD選方式:選方式: 寫寫“M1,M0”=01 , M1,M0”=01 , 選方式選方式1 1 若不用門控位若不用門控位, ,直接用軟件寫直接用軟件寫TRxTRx控制啟控制啟/ /停停 若使用門控位,先置位若使用門控位,先置位TRxTRx,然后由,然后由INTxINT
13、x端端 的高的高/ /低電平來控制其啟低電平來控制其啟/ /停停 若要允許中斷,還須先置位若要允許中斷,還須先置位ETxETx、EAEA等中斷等中斷 允許控制位,并編寫中斷服務(wù)程序允許控制位,并編寫中斷服務(wù)程序 若不用中斷,可查詢?nèi)舨挥弥袛?,可查詢“計?shù)溢出標(biāo)志計數(shù)溢出標(biāo)志TFx”TFx” 的方式工作,但溢出標(biāo)志的方式工作,但溢出標(biāo)志TFxTFx須軟件清須軟件清0 0 由于在方式由于在方式1 1工作模式下,工作模式下,TLxTLx、THxTHx計數(shù)寄計數(shù)寄存器各使用存器各使用8 8位,而位,而2 28 8=256=256,我們要把計數(shù)起點,我們要把計數(shù)起點的值除以的值除以256256,將余數(shù)放
14、入,將余數(shù)放入TLxTLx計數(shù)寄存器,將計數(shù)寄存器,將商數(shù)放入商數(shù)放入THxTHx計數(shù)寄存器。例如要使用計數(shù)寄存器。例如要使用Timer 0Timer 0計數(shù)計數(shù)5000050000,則填入計數(shù)寄存器的指令如下:,則填入計數(shù)寄存器的指令如下: MOV TL0MOV TL0,#(65536-50000) MOD 256 #(65536-50000) MOD 256 ;取;取8 8位的余數(shù)位的余數(shù) MOV TH0MOV TH0,#(65536-50000)#(65536-50000)256 256 ;??;取8 8位的商數(shù)位的商數(shù) TL0=B0 HTH0=3C HT0=65536-50000=3CB
15、0 H(2 2)計數(shù)初值的設(shè)定)計數(shù)初值的設(shè)定(3 3)定時器)定時器( (方式方式1)1)應(yīng)用程序舉例應(yīng)用程序舉例:分析分析:已知已知foscfosc = 6MHz = 6MHz 則:則: (振蕩周期)(振蕩周期)1Tc=1/6MHz1Tc=1/6MHz (機器周期)(機器周期)1Tm=12Tc=12/6MHz=21Tm=12Tc=12/6MHz=2 S S 粗略地說:粗略地說:Tmin Tmin 2 2 S S 16 16位定時器最大數(shù)值為:位定時器最大數(shù)值為:2 21616=65536=0FFFFH+1=65536=0FFFFH+1 故選擇方式故選擇方式 1 1 工作可以得到:工作可以得
16、到: Tmax = 65536Tmax = 65536 2 = 1310722 = 131072 S S131.072mS131.072mS例例:若晶振頻率為:若晶振頻率為6MHz6MHz,計算單片機的最小與,計算單片機的最小與最大定時時間:最大定時時間:分析分析:已知已知foscfosc = 6MHz = 6MHz 則:則: (機器周期)(機器周期)1Tm=12Tc=12/6MHz=21Tm=12Tc=12/6MHz=2 S S 100mS 100mS2 2 S = 50000S = 50000 16 16位定時器最大數(shù)值為:位定時器最大數(shù)值為: 2 216 16 = 65536 (=0FF
17、FFH+1)= 65536 (=0FFFFH+1) 故選擇方式故選擇方式1 1工作可以滿足要求。工作可以滿足要求。計算初值計算初值:655366553650000=15536=3CB0H50000=15536=3CB0H例例:要求對:要求對T0T0產(chǎn)生產(chǎn)生100mS100mS定時進行初始化。定時進行初始化。 ( (晶振晶振=6MHz)=6MHz)(3 3)定時器)定時器( (方式方式1)1)應(yīng)用程序舉例:應(yīng)用程序舉例:GATE C / T M1 M0 GATE C / T M1 M0定時器方式定時器方式寄存器寄存器TMOD初始化初始化 X X X X 0 0 0 1X X X X 0 0 0
18、1初始化初始化:TMOD=0 x01 ;TMOD=0 x01 ;選選 T0 T0 方式方式 1 1 TH0=0 x3C ; TH0=0 x3C ;賦初值高賦初值高8 8位位 TL0=0 xB0 ;TL0=0 xB0 ;賦初值低賦初值低8 8位位 TR0=1 ;TR0=1 ;啟動啟動 T0T0定時定時若需要定時器若需要定時器0 0產(chǎn)生中斷還應(yīng)當(dāng)寫如下語句:產(chǎn)生中斷還應(yīng)當(dāng)寫如下語句: ET0=1 ; ET0=1 ;開開T0T0中斷允許中斷允許 EA=1 ;EA=1 ;開總中斷允許開總中斷允許以及相應(yīng)的中斷服務(wù)程序。以及相應(yīng)的中斷服務(wù)程序。#include void main ( void ) TM
19、OD = 0 x01;TH0 = 0 x3C;TL0 = 0 xB0;EA = 1;ET0 = 1;TR0 = 1;while(1);void timer0_int (void)interrupt 1 P1 = P1;2.2.工作方式工作方式2 2:8 8 位自動重裝的定時位自動重裝的定時/ /計數(shù)器計數(shù)器振蕩器振蕩器 12TLx (8位位)TFx申請申請中斷中斷TxTx端端TRxTRx位位GATEGATE位位INTxINTx端端11& &C/T=0C/T=1控制控制 =1開關(guān)接通開關(guān)接通或門或門與門與門THx (8位位)溢溢出出位位門開門開 THx/TLxTHx/TLx賦相同
20、初值賦相同初值 在在TLxTLx計數(shù)達到計數(shù)達到0FFH 0FFH 再加再加“1”1”時,時,TLxTLx 將溢出將溢出, ,進位位直接進入進位位直接進入“TFx”TFx”去申請去申請 中斷中斷, ,同時打開三態(tài)門,使同時打開三態(tài)門,使THxTHx中的值中的值 自動重裝自動重裝(Copy)(Copy)進進TLxTLx(1 1)工作方式)工作方式2 2 的編程要點:的編程要點: TMODTMOD寄存器選方式:寄存器選方式: 寫寫“M1M1,M0” = 10 , M0” = 10 , 選中方式選中方式2 2 其他用法與各種方式其他用法與各種方式1 1完全相同完全相同分析:分析:foscfosc =
21、 6MHz = 6MHz 1 1機器周期機器周期 = 2 = 2 S S 1KHz 1KHz方波周期方波周期 = 1 mS = 1 mS 半個方波周期半個方波周期 =500=500 S S 500uS 500uS2 uS = 250 2 uS = 250 若選擇方式若選擇方式2 2 工作工作,8,8位位定時器最大數(shù)值為:定時器最大數(shù)值為: 2 28 8 =256 =0FFH + 1 =256 =0FFH + 1 可以滿足要求??梢詽M足要求。計算初值:計算初值:256256250=6250=6例例1:1:從從P1.0 P1.0 腳輸出頻率腳輸出頻率=1KHz=1KHz方波。方波。設(shè):晶振設(shè):晶振
22、=6MHz=6MHz。利用。利用T1T1定時中斷。定時中斷。Th:半周期:半周期T:周期:周期(2 2)定時器(方式)定時器(方式2 2)應(yīng)用程序舉例:)應(yīng)用程序舉例: #include#include sbit P1_0=P10; sbit P1_0=P10; void main() void main() TMOD=0 x20; TMOD=0 x20; TH0=0 x06; TH0=0 x06; TL0=0 x06; TL0=0 x06; EA=1; EA=1; ET1=1; ET1=1; TR1=1; TR1=1; while(1); while(1); void Timer1_2()
23、interrupte 3 void Timer1_2() interrupte 3 P1_0=! P1_0; P1_0=! P1_0; 初初始始化化/選選T1T1方式方式/賦重裝值賦重裝值/賦初值賦初值/開開T1T1中斷中斷/開總中斷開總中斷/啟動啟動T1T13.3.定時器小結(jié):定時器小結(jié): (2 2個個1616位加法計數(shù)器)位加法計數(shù)器)運行運行/ /停止由停止由TRxTRx位控制,位控制,( (當(dāng)當(dāng)GATE=1GATE=1時:時: 由由TRxTRx位和位和INTxINTx引腳上的信號共同控制引腳上的信號共同控制) )工作方式由工作方式由TMODTMOD決定決定; ; 計數(shù)計數(shù)/ /定時由定
24、時由C/TC/T位決定位決定 工作方式工作方式0 0(1313位)位) 永遠不用永遠不用 工作方式工作方式3 3(T0T0拆為雙拆為雙8 8位)位) 幾乎幾乎無無用用 工作方式工作方式1 1(1616位)位) 經(jīng)常用到經(jīng)常用到 工作方式工作方式2 2(8 8位自動重裝)位自動重裝) 經(jīng)常用到經(jīng)常用到從初值按機器周期或外部脈沖遞加,溢出位從初值按機器周期或外部脈沖遞加,溢出位 TFxTFx申請中斷;中斷允許由申請中斷;中斷允許由ETxETx位和位和EAEA位控制位控制 當(dāng)定時計數(shù)器設(shè)置為計數(shù)工作方式時,計數(shù)器對來自輸入引腳TO(P3.4)和Tl(P3.5)的外部信號計數(shù),外部脈沖的下降沿將觸發(fā)計
25、數(shù)。在每個機器周期的S5P2期間采樣引腳輸入電平,若前一個機器周期采樣值為l,后一個機器周期采樣值為O,則計數(shù)器加l。新的計數(shù)值是在檢測到輸入引腳電平發(fā)生l到0的負跳變后,于下一個機器周期的S3P1期間裝入計數(shù)器中的,可見,檢測一個由l到O的負跳變需要兩個機器周期。 所以,最高檢測頻率為振蕩頻率的最高檢測頻率為振蕩頻率的1 12424。計數(shù)器對外部輸入信號的占空比沒有特別的限制,但必須保證輸入信號的高電平與低電平的持續(xù)時間在一個機器周期以上。 當(dāng)設(shè)置了定時器的工作方式并啟動定時器工作后,定時器就按被設(shè)定的工作方式獨立工作,不再占用CPU的操作時間,只有在計數(shù)器計滿溢出時才可能中斷CPU當(dāng)前的操
26、作。5.4 5.4 定時定時/ /計數(shù)器的編程和應(yīng)用計數(shù)器的編程和應(yīng)用 定時/計數(shù)器是單片機應(yīng)用系統(tǒng)中的重要部件,靈活應(yīng)用定時/計數(shù)器可提高編程技巧,減輕CPU的負擔(dān),簡化外圍電路?!纠?.2】電路連接仍如任務(wù)3。編寫程序,使定時器0的中斷方式產(chǎn)生100ms的延時,實現(xiàn)8個發(fā)光二極管的亮點流動。在亮點流動的過程中,如果按下單脈沖鍵,8個發(fā)光二極管的發(fā)光狀態(tài)將改變?yōu)橥瑫r閃爍,閃爍8次恢復(fù)亮點流動(閃爍時間間隔由延時程序完成)。分析:顯示結(jié)果同分析:顯示結(jié)果同【例例4.44.4】?!纠?.44.4】電路連接仍如任務(wù)電路連接仍如任務(wù)3 3。編寫程序,假設(shè)在單。編寫程序,假設(shè)在單脈沖鍵按下之前,脈沖
27、鍵按下之前,LEDLED處于一個亮點流動的狀態(tài)。采用處于一個亮點流動的狀態(tài)。采用中斷方式,當(dāng)按下單脈沖鍵時,中斷方式,當(dāng)按下單脈沖鍵時,LEDLED狀態(tài)改為同時閃爍。狀態(tài)改為同時閃爍。閃爍閃爍8 8次再恢復(fù)原來的亮點流動。次再恢復(fù)原來的亮點流動。#include #include #include #include void delay ( unsigned int d )void delay ( unsigned int d ) /延時函數(shù)延時函數(shù) whilewhile(-d 0-d 0);); void main ( ) void main ( ) /主函數(shù)主函數(shù) unsigned cha
28、r temp unsigned char temp; temp = 0 xfe temp = 0 xfe; EA = 1 EA = 1; EX0 =1 EX0 =1; IT0 =1 IT0 =1; for for (;)(;) P1 = temp P1 = temp; temp = _crol_ temp = _crol_ (temp temp ,1 1);); delay delay(5000050000);); void INT0_ISR( ) interrupt 0 using 1void INT0_ISR( ) interrupt 0 using 1/中斷服務(wù)函數(shù)中斷服務(wù)函數(shù) unsi
29、gned char i unsigned char i,selsel; sel = 0 xff sel = 0 xff; for for(i=0i=0;i16i16;i+i+) P1 = sel P1 = sel; sel = sel sel = sel; delay delay(5000050000);); 不同的是不同的是【例例4.44.4】中的亮點流動是通過程序延時實中的亮點流動是通過程序延時實現(xiàn),這里是要通過定時器的中斷實現(xiàn)。現(xiàn),這里是要通過定時器的中斷實現(xiàn)。 很顯然按下單脈沖鍵產(chǎn)生的外部中斷可能是在單很顯然按下單脈沖鍵產(chǎn)生的外部中斷可能是在單片機執(zhí)行定時器的中斷服務(wù)程序時產(chǎn)生的,這是
30、一個片機執(zhí)行定時器的中斷服務(wù)程序時產(chǎn)生的,這是一個中斷嵌套的情況。因此這里要設(shè)置定時器中斷和外部中斷嵌套的情況。因此這里要設(shè)置定時器中斷和外部中斷中斷0 0的優(yōu)先級。根據(jù)實驗要求,將定時器中斷的優(yōu)的優(yōu)先級。根據(jù)實驗要求,將定時器中斷的優(yōu)先級設(shè)置為低,將外部中斷先級設(shè)置為低,將外部中斷0 0的優(yōu)先級設(shè)置為高。的優(yōu)先級設(shè)置為高。編程如下:編程如下:#include #include #include #include unsigned char temp;unsigned char temp;void delay(unsigned int d) void delay(unsigned int d)
31、 /延時函數(shù)延時函數(shù) while while(-d 0-d 0); ; void main ( ) void main ( ) /主函數(shù)主函數(shù) temp = 0 xfe; temp = 0 xfe; EA = 1; EA = 1; EX0 =1; EX0 =1; ET0 =1; ET0 =1; PX0 =1; PX0 =1; IT0 =1; IT0 =1; TH0 = 0 x3C TH0 = 0 x3C; TL0 = 0 xB0 TL0 = 0 xB0; TR0 = 1 TR0 = 1; While(1 While(1);); void Timer0_ISR( ) interrupt 1voi
32、d Timer0_ISR( ) interrupt 1/定時器定時器0 0中斷服務(wù)函數(shù)中斷服務(wù)函數(shù) TH0 = 0 x3C TH0 = 0 x3C; TL0= 0 xB0 TL0= 0 xB0; temp= _crol_ temp= _crol_ (temp,1temp,1); ; P1 = temp P1 = temp; void INT0_ISR( ) interrupt 0void INT0_ISR( ) interrupt 0 using 1using 1/外部中斷外部中斷0 0中斷服務(wù)函數(shù)中斷服務(wù)函數(shù) unsigned char i,sel; unsigned char i,sel;
33、 sel = 0 xff; sel = 0 xff; for for(i=0;i16;i+i=0;i16;i+) P1 = sel; P1 = sel; sel = sel sel = sel; delay delay(5000050000); ; 【例5.3】利用T0的方式1產(chǎn)生頻率為50Hz、占空比為50%的方波,由P1.0輸出。假定CPU使用中斷方式進行控制。仍采用6MHz的晶體。 分析:方波頻率是50Hz,周期為20ms。由于占空比為50%,高電平部分和低電平部分所占時間都為方波周期的一半(10ms)。因此定定時時間可設(shè)置為10ms。由于晶振6M, 1 1機器周期機器周期 2 2 S
34、S,那么初值: X = 65536-10000 / 2 = 60536 = EC78HX = 65536-10000 / 2 = 60536 = EC78H 可編程如下:#include sbit P1_0 = P10; void main ( void ) /主函數(shù)TMOD = 0 x01;TH0 = 0 xEC;TL0 = 0 x78;EA = 1;ET0 = 1;TR0 = 1;while(1);void timer0_int(void)interrupt 1/定時器0中斷函數(shù) P1_0 = !P1_0;【例例5.45.4】利用T0的方式1產(chǎn)生一個50Hz、占空比為25%的方波,由P1.
35、0輸出。假定CPU用查詢方式進行控制。仍采用6MHz的晶體。 分析分析:方波頻率是50Hz,周期為20ms。由于占空比為25%,則一個周期中高電平時間為5ms,低電平時間為15ms。因此定時初值有兩個: X1= 65536-5000/2 =63036 = F63CH X2= 65536-15000/2 =58036= E2B4H 采用查詢方式來控制,就必須要知道單片機根據(jù)什么知道定時時間是否到了。因為在計數(shù)滿時,會將TF0置1,這是不以人的意志為轉(zhuǎn)移的。采用中斷方式時,是通過硬件檢測TF0為1后自動進入中斷服務(wù)程序。采用查詢方式時,可通過軟件查詢采用查詢方式時,可通過軟件查詢TF0TF0標(biāo)志是
36、否為標(biāo)志是否為1 1來可以判斷定時時間是否來可以判斷定時時間是否到了。到了。 由于僅使用查詢方式,不開中斷,T0定時時間到時,TF0標(biāo)志出現(xiàn),但不會進入中斷服務(wù),所以要人工用指令清除TF0標(biāo)志。程序如下:#include sbit P1_0 = P10;void main ( void ) /主函數(shù) TMOD = 0 x01; TR0 = 1; for(;) TH0 = 0 xF6; TL0 = 0 x3C; P1_0 = 1; while(TF0 = = 0); TF0 = 0; TH0 = 0 xE2; TL0 = 0 xB4; P1_0 = 0; while(TF0 = = 0); TF
37、0 = 0; 【例例5.5 5.5 】設(shè)定時器T0工作于方式2,產(chǎn)生500s定時中斷,在中斷服務(wù)程序中將累加器A的內(nèi)容減1,并送P1口顯示。已知晶振頻率為6MHZ。 時間常數(shù)為:28 500 / 26=06H。#include unsigned char data temp _at_ 0 x30;void main ( void ) /主函數(shù) TMOD = 0 x02;TH0 = 0 x06;TL0 = 0 x06;EA = 1;ET0 = 1;TR0 = 1;while(1);void timer0_int(void)interrupt 1/定時器0中斷函數(shù) temp=temp-1;看一看這
38、個程序和前面的程序有什么不同的地方。前面的在中斷服務(wù)程序中有給TL0、TH0重新賦值的過程,在本例中沒有。這是因為【例5.3】中采用的是方式1,不具備本例中方式2的“自動再裝入功能自動再裝入功能”。既然沒有這種功能,只有人工進行,否則在第一次計數(shù)溢出后就會從0開始重新計數(shù)。導(dǎo)致后面的定時時間和第一次不一樣,不再是10ms,而是最大的定時時間。 【例例5.65.6】將任務(wù)3擴展一下,將圖4.1所表示的單脈沖電路的負脈沖端接在單片機的P3.4引腳。編寫程序,使每按動圖4.1中的按鍵5次,P1口的8個發(fā)光二極管亮、滅切換一次。 分析分析:按照題目要求,計數(shù)脈沖是來自于外部的負脈沖,因此應(yīng)當(dāng)設(shè)置定時器
39、工作于計數(shù)狀態(tài)。 由于P3.4、P3.5分別是T0和T1的外部計數(shù)脈沖輸入端,本例中外部脈沖是從P3.4輸入的,也就是說應(yīng)該使用T0來進行計數(shù)。中斷服務(wù)程序的入口編號為 1 。為了免去每次在累加溢出時的重新賦初值的過程,可以設(shè)T0工作在方式2,因此給TMOD賦以06H。 為了使每來5個脈沖T0計數(shù)溢出,給TL0、TH0賦值為28-5 = 251 = FBH。 #include void main ( void ) /主函數(shù) TMOD = 0 x06;TH0 = 0 xFB;TL0 = 0 xFB;EA = 1;ET0 = 1;TR0 = 1;while(1);void timer0_int(v
40、oid)interrupt 1 /定時器0中斷函數(shù)P1 = P1;* *【例例5.95.9】設(shè)外部正脈沖由/INT0(P3.2)輸入,編寫程序,測量這個外部正脈沖的寬度,并將測量結(jié)果放在20H、21H兩單元中。 分析分析:測量寬度,可以理解成測量這個外部正脈沖維持的時間是多少個Tp。這樣我們就可以采用定時器的定時狀態(tài)(累加Tp)。 根據(jù)題意,定時器的啟動和停止必須取決于這個外部正脈沖。它開始,定時器就開始工作,它結(jié)束,定時器就停止工作。 什么時候定時器的啟動和停止和外部脈沖有關(guān)呢? GATE=1GATE=1 一般情況下,應(yīng)使GATE0,這樣,定時器是否運行僅由TRx位的狀態(tài)決定。在前面的幾個例子中,我們都是直接用SETB TR0這樣的指令來控制T0的開和關(guān)的。反之如果反之如果GATE=1GATE=1, 一旦一旦 “ “TRxINTxTRxINTx”=1 ”=1 時,時,TxTx立刻啟動。立刻啟動。 利用這一特點我們就可以測試外部輸入脈沖的寬度。怎么處理呢? 設(shè)T0工作于方式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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- CCAA - 2014年09月建筑施工領(lǐng)域?qū)I(yè)答案及解析 - 詳解版(70題)
- 建筑工地安全責(zé)任協(xié)議2025
- 養(yǎng)老院消防安全制度
- 養(yǎng)老院安全巡查制度
- 企業(yè)內(nèi)部信息傳播制度
- 2025年高考(上海卷)歷史真題(學(xué)生版+解析版)
- 系統(tǒng)結(jié)構(gòu)自考通簡答
- 灌區(qū)管理工10S執(zhí)行考核試卷含答案
- 我國上市公司環(huán)境信息披露:現(xiàn)狀、問題與突破路徑
- 貨裝值班員安全實踐測試考核試卷含答案
- 《SPSS與AMOS在中介效應(yīng)與調(diào)節(jié)效應(yīng)分析中的應(yīng)用》
- 家屬院停車管理暫行辦法
- 單位開展女神節(jié)活動方案
- 錫圓電子科技有限公司高端半導(dǎo)體封測項目環(huán)評資料環(huán)境影響
- T/CGAS 031-2024城鎮(zhèn)燃氣加臭技術(shù)要求
- T/CGAS 026.2-2023瓶裝液化石油氣管理規(guī)范第2部分:平臺建設(shè)
- 上海市2023-2024學(xué)年八年級下學(xué)期期末語文試題匯編-現(xiàn)代文1說明文(答案版)
- 《新能源汽車電力電子技術(shù)》電子教案-新能源汽車電力電子技術(shù).第一版.電子教案
- 金屬非金屬礦山開采方法手冊
- GB/T 45356-2025無壓埋地排污、排水用聚丙烯(PP)管道系統(tǒng)
- 設(shè)備管理人員19年述職
評論
0/150
提交評論