




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、利用紅外發(fā)射接收傳感器進行距離檢測一、實驗要求對紅外的發(fā)射接收作進一步的探討。紅外可以用來測距離,理解紅外測距的基本原理,能夠掌握簡單的比例控制方法,以及編程。掌握定時/計數(shù)器的使用。對循跡效果作分析。二、實驗概要本實驗將探討紅外測距的內(nèi)容。利用紅外檢測器的內(nèi)置電子濾波功能,調(diào)節(jié)發(fā)射紅外的載波頻率,而檢測器對不同頻率的信號有不同的“敏感度”,這樣,就能大概的知道距離。1 .測試紅外的掃描頻率。記錄紅外發(fā)射接收的距離。2 .尾隨小車。讓一個小車跟著另一個小車前行。要將前后距離控制在一定的范圍內(nèi),若前后距離較大,后面跟隨的小車應該加速,跟上去;若距離小于預定值,則減速。3 .跟蹤黑色條紋帶。紅外測
2、距的另一種形式的應用。也能讓小車實現(xiàn)循跡功能。三、實驗內(nèi)容紅外技術發(fā)展到現(xiàn)在,已經(jīng)為大家所熟知,這種技術已經(jīng)在現(xiàn)代科技、國防和工農(nóng)業(yè)等領域獲得了廣泛的應用。紅外傳感系統(tǒng)是用紅外線為介質(zhì)的測量系統(tǒng),按照功能能夠分成五類:(1)輻射計,用于輻射和光譜測量;(2)搜索和跟蹤系統(tǒng),用于搜索和跟蹤紅外目標,確定其空間位置并對它的運動進行跟蹤;(3)熱成像系統(tǒng),可產(chǎn)生整個目標紅外輻射的分布圖像;(4)紅外測距和通信系統(tǒng);(5)混合系統(tǒng),是指以上各類系統(tǒng)中的兩個或者多個的組合。紅外傳感器根據(jù)探測機理可分成為:光子探測器(基于光電效應)和熱探測器(基于熱效應)。本次試驗將嘗試用紅外來測距。1 .測試掃描頻率下
3、圖9-1顯示的是一個特殊品牌的紅外線探測器數(shù)據(jù)表(PanasonicPNA4602M)的部分摘錄。這個摘錄顯示了紅外線探測器在接收到頻率不同于38.5kHz時紅外線信號時其敏感程度隨頻率變化的曲線圖。例如,當你發(fā)送頻率為40kHz的信號給探測器時,它的靈敏度是頻率為38.5kHz的50%。如果紅外LED發(fā)送頻率為42kHz,探測器的靈敏度是頻率為38.5kHz的20%左右。尤其是對于讓探測器的靈敏度很底的頻率,為了讓探測器探測到紅外線的反射,物體必須離探測器更近讓反射的紅外光更強。另一個角度來考慮就是最高靈敏度的頻率可以探測最遠距離的物體,較低靈敏度的頻率可以探測距離較近的物體。這使得距離探測
4、就簡單了。選擇5個不同頻率,然后從最高靈敏度到最低靈敏度進行測試。首先嘗試最高靈敏度頻率,如果物體被探測到了,就讓僅次于它的高靈敏度頻率測試,觀察是否可以探測到。依賴于探測器不能再檢測到物體的紅外線頻率,我們就可以推斷物體的大概位置。BPF frequencv characteristics(PNA4602M)1Spectral sensitivity characteristicsCarrier frequency (kHz) The peks for PNA4&01Mh PNA4608M, and PNA4810M 0度 ill f0.圖9-1濾波器靈敏度由載波頻率決定圖9-2探測區(qū)域例程
5、:TestLeftFrequencySweep.c例程要做兩件事情:首先,測試IRLED/探測器(分別與P1_3和P1_2連接)以確認它們的距離探測功能正常;然后,完成圖9-2所示的頻率掃描。#include#include#defineLeftIRP1_2/左邊紅外接受連接到P1_2#defineLeftLaunchP13/左邊紅外發(fā)射連接到P13/定時時間值/左邊的距離unsignedinttime;intleftdistance;intdistanceLeft,irDetectLeft;unsignedintfrequency5=29370,31230,33050,35700,38460
6、;voidtimer_init(void)IE=0x82;TMOD |= 0X01;void FreqOut(unsigned int Freq)time = 256 - (500000/Freq); /TH0 = 0XFF;TL0 = time;TR0 = 1;delay_nus(800);TR0 = 0;void Timer0_Interrupt(void) interrupt 1 LeftLaunch = LeftLaunch;TH0 = 0xFF;TL0 = time;void Get_lr_Distances()unsigned int count;leftdistance = 0;
7、/for(count = 0;count5;count+)/開總中斷EA允許定時器0中斷ET0 定日t器0工作在模式1: 16位定時器模式根據(jù)頻率計算初值 高八位設FF低八位根據(jù)公式計算 啟動定時器延時停止定時器/定時器中斷取反重新設值初始化左邊的距離發(fā)射頻率FreqOut(frequencycount);/irDetectLeft=LeftIR;printf(irDetectLeft=%d,irDetectLeft);if(irDetectLeft=1)leftdistance+;intmain(void)uart_Init();timer_init();printf(ProgamRunni
8、ng!n);printf(FREQENCYETECTEDn);while(1)Get_lr_Distances();printf(distanceLeft=%dn,leftdistance);printf(An);delay_nms(1000);Tips:TestLeftFrequencySweep.c是如何工作的?還記得“數(shù)組”嗎?這里你將用整數(shù)型數(shù)組存儲五個頻率值:unsignedintfrequency5=29370,31230,33050,35700,38460;uart_Init();串口的初始化,這個函數(shù)已多次用到。timer_init();定時器的初始化。此例程使定時器0工作在模
9、式1,16位定時模式,不具備自動重載功能。注意,timer_init()并沒有開啟定時器。Get_lr_Distances();機器人要發(fā)射某一頻率,該給定時器設定多大的值呢?50000065536 頻率為f時,周期T=1/f,高低電平持續(xù)時間為t=1/(2T),根據(jù)公式TC=2n-CC可算定時器初值time:16ttime26110但實際上,time值并未占滿低八位,所以你可以這樣簡化計算:高八位設0xFF,低八位根據(jù)n=8時計算,即函數(shù)FreqOut(frequencycount)中用的time=256-(500000/Freq)來計算。當?shù)桶宋挥嫕M后,整個寄存器將溢出。根據(jù)圖6-2所示的
10、描述原理,如果檢測結(jié)果irDetectLeft為1,即沒有發(fā)現(xiàn)物體,則距離leftdistance加1。循環(huán)描述,當5個頻率描完后,可根據(jù)leftdistance的值來判斷物體離機器人的大致距離。運行程序時,在機器人前端放一白紙,前后移動白紙,調(diào)試終端將會顯示白紙所在的區(qū)域,如圖9-3所示。圖9-3距離探測輸出實例程序通過計算“1”出現(xiàn)的數(shù)量,就可以確定目標在哪個區(qū)域。緊記,這種距離測量方法是相對的而非絕對地精確。然而,它為機器人跟隨,跟蹤和其他行為提供了一個足夠好的探測距離的能力。輸入、保存并運行程序TestLeftFrequencySweep.c用一張紙或卡片面對IRLED/探測器做距離探
11、測改變紙片與機器人距離,記錄使distanceLeft變化的位置該你了一一測試右邊的IRLED/探測器修改程序TestLeftFrequencySweep.c,對右邊的IRLED/探測器做距離探測測試運行該程序,檢驗這對IRLED/探測器能否測量同樣的距離。你可參考教材配套光盤對應例程中的注釋部分。例程:DisplayBothDistances.c修改程序TestLeftFrequencySweep.c,添加右邊IRLED/探測器部分輸入、保存并運行程序DisplayBothDistances.c用紙片重復對每個IRLED進行距離探測,然后對兩個IRLED同時進行測試該你了一一更多的距離測試嘗
12、試測量不同物體的距離,弄清物體的顏色和(或)材質(zhì)是否會造成距離測量的差異2 .尾隨小車讓一個寶貝車跟隨另一個寶貝車行走,跟隨的寶貝車,也叫尾隨車,必須知道距離引導車有多遠。如果尾隨車落在后面,它必須能察覺并加速。如果尾隨車距離引導車太近,它也要能察覺并減速。如果當前距離正好合適,它會等待直到測量距離變遠或變近。距離僅僅是由機器人和其它自動化機器需要控制一種數(shù)值之一。當一個機器被設計用來自動維持某一數(shù)值,比如距離、壓力或液位等,它一般都包含一個控制系統(tǒng)。這些系統(tǒng)有時由傳感器和閥門組成,或者由傳感器和電機組成。在寶貝車里面,由傳感器和連續(xù)旋轉(zhuǎn)電機組成。還必須有某些處理器可以接受傳感器的測量結(jié)果并把
13、它們轉(zhuǎn)化為機械運動。必須對處理器編程來基于傳感器的輸入做出決定,從而控制機械輸出。閉環(huán)控制是一種常用的維持控制目標數(shù)據(jù)的方法,它很好地幫助寶貝車保持與一個物體之間的距離。閉環(huán)控制算法類型多種多樣,最常用的有滯后、比例、積分以及微分控制。所有這些控制方法都將在過程控制教材中詳細介紹。事實上,圖9-4所示的方框圖描述了寶貝車用到的比例控制過程的步驟,即寶貝車用右邊的IRLED/探測器探測距離并用右邊的伺服電機調(diào)節(jié)機器人之間的位置以維持適當?shù)木嚯x。Centerpulsewidth圖9-4右邊的伺服電機及IRLED/探測器的比例控制方框圖讓我們仔細觀察一下圖9-4的數(shù)字,學習一下比例控制是如何工作的。
14、這個特殊的例子是右邊的IRLED/探測器和右邊的伺服電機的比例控制方框圖。設定位置為2,說明我們想寶貝車維持它和任何它探測到的物體之間的距離是2。測量的距離為4,距離太遠。誤差是設定值減去測量值的差,即2-4=-2,這在圓圈的左方以符號的形式指出,這個圓圈叫求和點。接著,誤差傳入一個操作框。這個操作框顯示,誤差將乘以一個比例常數(shù)Kp。Kp的值為70。該操作框的輸出顯示為2X70=-140,這叫輸出校正。這個輸出校正結(jié)果輸入到另一個求和點,這時它與電機的零點脈沖寬度1500相加。相加的結(jié)果是1360,這個脈寬可以讓電機大約以3/4全速順時針旋轉(zhuǎn)。這讓寶貝車右輪向前、朝著物體的方向旋轉(zhuǎn)。第二次經(jīng)過
15、閉環(huán),測量距離可能發(fā)生變化,但是沒有問題,因為不管測量距離如何變,這個控制環(huán)路將會計算出一個數(shù)值,讓電機旋轉(zhuǎn)來糾正任何誤差。修正值與誤差總是成比例關系,該誤差就是設定位置和測量位置的關系的偏差。控制環(huán)都有一組方程來主導系統(tǒng)行為。圖9-4中的方框圖是對該組方程的可視化描述方法。下面是從方框圖中歸納出來的方程關系及結(jié)果:Error=Rightdistancesetpoint-Measuredrightdistance=2-4Outputadjus=error-Kp=t2-70=T40Rightservooutput=Outputadjust+Centerpulsewidth=-140+1500=1
16、360通過一些置換,上面三個等式可被簡化為一個,提供你相同的結(jié)果:Rightservooutput=(Rightdistancesetpoint-Measuredrightdistance)Kp+Centerpulsewidth代入數(shù)值,我們可以看到結(jié)果一致:=(2-4)70)+1500=1360左邊的IRLED/探測器以及左邊的伺服電機的控制框圖如圖9-5所示,與右邊的運算法則類似。不同的是比例系數(shù)Kp的值由+70變?yōu)闉?70。假設與右邊的測量值一樣,輸出修正的脈沖寬度應該為1640。下面是該框圖的計算等式:Leftservooutput=(Leftdistancesetpoint-Meas
17、uredleftdistance)Kp+Centerpulsewidth=(2-4)-(70)+1500Centerpulsewidth圖9-5機器人左伺服電機及IRLed/探測器的比例控制方框圖例程:FollowingRobot.c該例程實現(xiàn)剛才討論過的各個伺服脈沖比例控制。換句話說,在每個脈沖發(fā)送之前,需要測量距離,決定誤差信號,然后將誤差值乘以比例系數(shù)Kp,再將結(jié)果加上(或減去)發(fā)送到左(或右)伺服電機的脈沖寬度值。輸入、保存并運行程序FollowingRobot.c把大小為20x28cm的紙片置于機器人的前面,就像障礙物墻。機器人應該維持它和紙片之間的距離為預定的距離嘗試輕輕旋轉(zhuǎn)一下紙
18、片,機器人應該跟隨之旋轉(zhuǎn)嘗試用紙片引導機器人四處運動,機器人應該跟隨它移動紙片距離機器人特別近時,機器人應該后退,遠離紙片#include#include#define LeftIR#define RightIR#define LeftLaunch#define RightLaunchP1_2P3_5P1_3P3_6/左邊紅外接受連接到P1_2/右邊紅外接收連接到P3_5/左邊紅外發(fā)射連接到P1_3/右邊紅外發(fā)射連接到P3_6#defineKpl-70#defineKpr70#defineSetPoint2#defineCenterPulse1500unsignedinttime;intlef
19、tdistance,rightdistance;/左邊和右邊的距離intdelayCount,distanceLeft,distanceRight,irDetectLeft,irDetectRight;unsignedintfrequency5=29370,31230,33050,35700,38460;voidtimer_init(void)IE=0x82;/開總中斷EA允許定時器0中斷ET0TMOD|=0X01;/定日t器0工作在模式1:16位定時器模式voidFreqOut(unsignedintFreq)time=256-(50000/Freq);TH0=0XFF;TL0=time;T
20、R0=1;delay_nus(800);TR0=0;voidTimer0_Interrupt(void)interrupt1LeftLaunch=LeftLaunch;RightLaunch=RightLaunch;TH0=0XFF;TL0=time;voidGet_lr_Distances()unsignedcharcount;leftdistance=0;/初始化左邊的距離rightdistance=0;/初始化右邊的距離for(count=0;count5;count+)FreqOut(frequencycount);irDetectRight=RightIR;irDetectLeft=
21、LeftIR;if(irDetectLeft=1)leftdistance+;if(irDetectRight=1)rightdistance+;voidSend_Pulse(unsignedintpulseLeft,unsignedintpulseRight)P1_1=1;delay_nus(pulseLeft);P1_1=0;P1_0=1;delay_nus(pulseRight);P1_0=0;delay_nms(18);intmain(void)unsignedintpulseLeft,pulseRight;uart_Init();timer_init();while(1)Get_lr
22、_Distances();pulseLeft=(SetPoint-leftdistance)*Kpl+CenterPulse;pulseRight=(SetPoint-rightdistance)*Kpr+CenterPulse;Send_Pulse(pulseLeft,pulseRight);Tips:FollowingRobot.c是如何工作的?主程序做的第一件事是調(diào)用Get_lr_Distances子函數(shù)。Get_lr_Distances函數(shù)運行完成之后,變量leftdistance和rightdistance分別包含一個與區(qū)域相對應的數(shù)值,該區(qū)域里的目標被左、右紅外線探測器探測到。隨后
23、兩行代碼對每個電機執(zhí)行比例控制計算:pulseLeft=(SetPoint-leftdistance)*Kpl+CenterPulsepulseRight=(SetPointrightdistance)*Kpr+CenterPulse最后調(diào)用子函數(shù)Send_Pulse對電機的速度進行調(diào)節(jié)。因為你要做的實驗是尾隨,串口線的連接影響了機器人的運動,故可去掉。該你了圖9-6所示是引導車和尾隨車。引導車運行的程序是FastIrRoaming.c修改后的版本,尾隨車運行的程序是FollowingRobot.c。比例控制讓尾隨車成為忠實的追隨者。一個引導車可以引導串大概6到7個尾隨車。只需要把導引車的側(cè)面
24、板和后擋板加到其它的尾隨車上。圖9-6導引機器人(左)和尾隨機器人(右)如果你是班級成員之一,把紙板安裝在導引小車的兩側(cè)和尾部,參考圖9-6如果你不屬于班級成員的一部分(并且只有一個機器人),可以讓尾隨車跟隨一張紙或你的手來運動,就和跟隨導引車一樣用阻值為1k或2k的電阻替換掉連接機器人紅外線發(fā)光二極管的470電阻使用程序FastIrRoaming.c修改后的版本對導引機器人編程來做避障試驗,打開程序FastIrRoaming.c重命名為SlowerIrRoamingForLeadRobot.c對程序SlowerIrRoamingForLeadRobot.c做以下修改:把1300的增加為142
25、0把1700的減少為1580尾隨車運行程序FollowingRobot.c,不用做任何修改機器人都運行自己的程序,把尾隨車放在引導車的后面。尾隨車應該跟隨一個固定的距離,只要它不被其它的諸如手或附近墻壁等引開你可以通過調(diào)整SetPoint和比例常數(shù)來改變尾隨車的行為。用手或一張紙片來引導尾隨車,做下面練習:嘗試用30到100范圍內(nèi)的常量Kpr和Kpl來運行程序FollowingRobot.c,注意機器人在跟隨目標運動的時候的響應有何差異嘗試調(diào)節(jié)常量SetPoint的值,范圍從0到43 .跟蹤條紋帶圖9-8是你可以搭建的一個路徑并編程使機器人跟它運動的例子。路徑中每個條紋帶是由三條1/4英寸寬的
26、聚乙烯絕緣帶邊對邊并行放置在白色招貼板上組成的,絕緣帶條紋之間不能漏出白色板。1)搭建和測試路線為了成功跟蹤該路徑,測試和調(diào)節(jié)機器人是必要的。需要的材料:(1) 一張招貼板一一大概尺寸:22X28英寸(56X71cm)(2)1/4英寸(19mm)寬黑色聚乙烯絕緣帶一卷參考圖9-7用白色招貼板和絕緣帶搭建運行路徑2fiT(71(:時圖9-7條紋帶跟蹤圖9-8紅外探測器朝下掃描條紋帶2)測試條紋帶調(diào)節(jié)IR LED/探測器的位置向下和向外,如圖 6-8所示 確保絕緣帶路徑不受熒光燈干擾用1k電阻代替與IR LED串聯(lián)的470電阻,使機器人更加近視 運行程序DisplayBothDistances.c
27、 。機器人與串口電纜相連,如圖9-9所示,把機器人放在白色招貼板上 驗證你的區(qū)域讀數(shù)是否表示被探測的物體 在很近的區(qū)域,兩個傳感器給你的讀數(shù)都 是1或0放置機器人使兩個IR LED/檢測器都直接指 向三條絕緣帶的中心,如圖9-10和9-11所示,然后調(diào)整機器人的位置(靠近或遠離 絕緣帶)直到兩個區(qū)域的值都達到4或者5,這表明要么發(fā)現(xiàn)一個很遠的物體,要么沒 有發(fā)現(xiàn)物體以便你能看到顯示的距圖9-9低區(qū)域測試俯視圖如果在你的絕緣帶路徑上很難獲得比較高的讀數(shù)值,參考絕緣帶路徑排錯部分圖9-10高區(qū)域測試頂視圖圖9-11高區(qū)域測試(側(cè)視圖)3)絕緣帶路徑排錯如果當IRLED臉測器指向絕緣帶路徑的中心的時
28、候你不能獲得比較高的讀數(shù)值,代替原來三條絕緣帶用四條絕緣帶搭建路徑。如果區(qū)域讀數(shù)仍然低,確認你是用1k?電阻串聯(lián)在IRLED上。你可以試用2k?電阻使機器人更加近視。如果都不行,試試不同的絕緣帶。調(diào)整IRLED/探測器,使它們指向更靠近或更遠離機器人的前部可能有幫助。如果當讀白色表面時你的低區(qū)域測試有問題。試試將IRLED/探測器朝機器人的方向再向下調(diào)整,但是要注意不要讓底盤帶來干擾。你也可以試試一個更低阻值的電阻。如果你用老的縮小包裝的IRLED代替帶套筒的IRLED,當IRLED/探測器聚焦在白色背景上時你要得到一個低區(qū)域的值可能有問題。這些IRLED可能需要串聯(lián)220?電阻。也要確保IR
29、LED的腳沒有相互接觸?,F(xiàn)在,將機器人放在絕緣帶路徑上,它的輪子正好跨在黑色線上。IR探測器應該稍稍向外,如圖9-12。驗證兩個距離讀數(shù)是否又是0或者1。如果讀數(shù)較高,意味著IR探測器需要再稍微朝遠離絕緣帶邊緣的方向向外調(diào)整一下SQBM 口 p 口口口 DO h nnnZ 口口口 one-L口口口口口rl_門口 Sitrifi(garcT;二修,q +保機器人橫跨蛆編帶俯視圖圖9-12IR檢測器朝向放大圖當你把機器人沿圖中雙箭頭所示的任何一個方向移動,兩個IR中的一個會指向絕緣帶上。當你做了這些后,這個指向絕緣帶上的IR的讀數(shù)應該增加到4或5。記住如果你將機器人向左移動,右邊檢測器的值會增加,
30、如果你將機器人向右移動,左邊檢測器的值會升高。調(diào)整IRLED/檢測器直到機器人通過這個最后的測試,然后你可以試驗下面的例程使機器人沿著條紋帶行走4)編程跟蹤條紋帶你只需對程序FollowingRobot.c做一點小小的調(diào)整,就可以使機器人跟蹤條紋帶行走。首先,機器人應當向目標靠近,以使到目標的距離比SetPoint要?。换蜻h離目標,以使距離比SetPoint大,這同程序FollowingRobot.c的表現(xiàn)相反。當機器人離物體的距離不在SetPoint的范圍內(nèi)時,讓機器人向相反的方向運動。只需簡單地更改Kpl和Kpr的符號,換句話說,將Kpl由-70改為70;由Kpr由70改為-70。你應該做
31、試驗,當SetPoint從2到4時,看哪個值使系統(tǒng)工作穩(wěn)定。下面的例程將SetPoint值改為3。例程:StripeFollowingRobot.c打開程序FollowingRobot.c另存為StripeFollowingRobot.c將SetPoint的值由2改為3將Kpl由-70改為70將Kpr由70改為-70運行程序?qū)C器人放在圖9-7所示的“Start”位置,機器人將靜止。如果你把手放在IR組前面,然后它會向前移動,當它走過了開始的條紋帶時,把手移開,它會沿著條紋帶行走。當它看到“Finish”條紋帶時,它應該停止不動假定你從絕緣帶獲彳#的距離讀數(shù)為5,從白色招貼板獲得的讀數(shù)為0,S
32、etPoint的常量值為2、3以及4時都可以正常工作。嘗試不同的SetPoint值,注意機器人在條紋帶上運行時的性能附錄:定時/計數(shù)器的運用實驗需要用到單片機更精確的定時功能,因此再回顧一下51單片機定時/計數(shù)器的使用方法。單片機的定時/計數(shù)器能夠提供更精確的時間。前面已經(jīng)介紹了幾種延時方法,除了空操作函數(shù)_nop_()外,定時/計數(shù)器能產(chǎn)生更精確的延時,它的最小延時單位為1個機器周期。前面講過:若晶振頻率為12MHz則延時單位為1us;若為11.0592MHz,則延時單位為1.08us。單片機P89V51RD的定時/計數(shù)器可以分為定時器模式和計數(shù)器模式。其實這兩種模式?jīng)]有本質(zhì)上的區(qū)別,均使用
33、二進制的加一計數(shù):當計數(shù)器的值計滿回零時能自動產(chǎn)生中斷的請求,以此來實現(xiàn)定時或者計數(shù)功能。它們的不同之處在于定時器使用單片機的時鐘來計數(shù),而計數(shù)器使用的是外部信號。定時/計數(shù)器的控制單片機P89V51RD2T3個定時/計數(shù)器,通過TCO河口TMO這兩個特殊功能寄存器控制。TCON和TMO哧都可以在頭文件uart.h中看到其應用。TCON;定時器控制寄存器,有8位,每個位的含義為如表9-1所示。TCONJ低4位與定時器無關,它們用于檢測和觸發(fā)外部中斷。表9-1TCON控制寄存器位符號描述TCON.7TF1定時器1溢出標志位。由硬件置位,由軟件清除TCON.6TR1定時器1運行控制位。由軟件置或清
34、除:置1為啟動;置0為停止TCON.5TF0定時器編出標志位TCON.4TR0定時器速行控制位TCON.3IE1外部中斷1邊沿觸發(fā)標志TCON.2IT1外部中斷1類型標志位TCON.1IE0外部中斷0邊沿觸發(fā)標志TCON.0IT0外部中斷0類型標志位TMOD;定時器模式寄存器,它也有8位,但不能像TCONH羊可以一位一位的設置,只能通過字節(jié)傳送指令來設定TMOD各個狀態(tài)。TMOD各位定義如表9-2所示。表9-2TMO限式寄存器位名字定時器描述7GATE1門控制。當被置為1時,只有INT為高電平時,定時器才開始工作6C/T1定時/計數(shù)器選擇位:1=計數(shù)器;0=定時器5M11模式位1(見表6-3)
35、4M01模式位0(見表6-2)3GATE0定時器0的門控制位2C/T0定時器0的定時/計數(shù)選擇位1M10定時器0的模式位10M00定時器0的模式位0表9-3定時器工作模式M1M0模式000011102113工作模式每個定時/計數(shù)器都有一個16位的寄存器Tn(n=0或1)來控制計數(shù)長度,由高8位TH吊口低8位TLn置初值。定時/計數(shù)器有四種工作模式。模式0:定時/計數(shù)器按13位自加1計數(shù)器工作。這13位由TH勺全部8位和TL中的低5位組成,TL中的高3位沒有用到。模式1:定時/計數(shù)器按16位自加1計數(shù)器工作。模式2:定時/計數(shù)器被拆成一個8位寄存器丁藤口一個8位計數(shù)器TL,以便實現(xiàn)自動重載。這種
36、模式使用起來非常方便,一旦設置好TMO和THn,定時器就可以按設定好的周期溢出。模式3:TH解口TL叫作為兩個獨立的8位計數(shù)器工作。定時器1在模式3下不工作。定時/計數(shù)器初值的計算定時/計數(shù)器是在計數(shù)初值的基礎上加法記數(shù)的,假設Tn(TLn和THn)中寫入的值為TC,在該模式下最大計數(shù)值為2n,程序運行的計數(shù)值為CCtc=2-cc回顧一下,前面的實驗中已經(jīng)用LE型測試電路,通過延時函數(shù)使LED!隔一段時間閃爍一次。在實驗中,你是否可以通過定時/計數(shù)器來實現(xiàn)LEDB式電路呢?假設通過P1_0所接的燈每0.4ms閃動一次,即每過0.2ms滅一次,再過0.2ms亮一次。模式2最大計數(shù)值為256us(
37、28),滿足要求,因此用模式2來顯示LED丁閃爍功能,計數(shù)的值C0.2ms/1us=200。利用公式計算得出TC=256-200=59,換成十六進制為TC=0x38。例程:TimeApplication.c搭建LED的測試電路(具體請參照第二章內(nèi)容)接通教學板的電源輸入、保存并運行程序Time_Application.c驗證與P10連接的LED是否每個0.4ms閃爍一次#include子函數(shù)聲明#includevoidinitial(void);/voidmain(void)initial(); /while(1); /調(diào)用定時/計數(shù)器初始化函數(shù) 等待中斷/*=初始化定時/計數(shù)器函數(shù)*/voi
38、dinitial(void)/IE=0x82;/TCON=0x00;TMOD=0x02;TH0=0x38;TL0=0x38;TR0=1;中斷服務程序/開總中斷EA允許定時器0中斷ET0停止定時器,清除標志工作在定時器0的模式2中設置重載值設置定時器初值啟動定時器0void TIMER(void) interrupt 1 / P1_0=P1_0; P1_0 的值取反 中斷服務程序,1是定時器0的中斷號TimeApplication.c是如何工作的?在程序開頭,你看到了兩個頭文件一reg51.h和stdio.h ,它們有什么用呢?打開這兩個頭文件(reg51.h 在 “C:Program FilesKeilC51INC“目錄下,stdio.h 在 “C:ProgramFilesKeilC51INC ”目錄下),你可以看到:在 reg51.h中對一些標識符進行了聲明,如P1_0(可能沒有,要自己在程序中定義)、IE、TCO陣;而stdio.h對常用白一些IO函數(shù)進行了聲明,如printf() 等。在C程序中,一個函數(shù)的定義可以放在任意位置,既可放在主函數(shù)main之前,也可放在main之后,但如果放在main之后的話,那么應該在main函數(shù)的前面加上這個函數(shù)的聲明:v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年蘭州市購銷合同終止協(xié)議
- 2025如何簽訂租賃期滿續(xù)租合同
- 2025煤炭購銷合同(示范文本)
- 2025年簽訂股權轉(zhuǎn)讓合同:注意風險轉(zhuǎn)移的關鍵點
- 2025資產(chǎn)委托代理合同
- 2025年網(wǎng)紅藝人經(jīng)紀合同范本
- 2024-2025學年新教材高中政治 第1單元 民事權利與義務 第3課 第1框 訂立合同學問大教學設計 新人教版選擇性必修2
- 分析電子商務平臺在吸引和保留用戶方面的策略
- 廣西北海市合浦縣重點達標名校2023-2024學年十校聯(lián)考最后數(shù)學試題含解析
- 2025年呼和浩特貨運從業(yè)資格考試題
- 借用品牌合同范本
- 噴灑除草劑安全協(xié)議書(2篇)
- 2025年4月自考00015英語二(13000英語專升本)押題及答案
- LTE-V2X系統(tǒng)性能要求及測試規(guī)范
- 2025年北森題庫測試題及答案
- 中國大唐集團有限公司陸上風電工程標桿造價指標(2023年)
- 2025年美容師初級技能水平測試卷:美容師美容護膚實操技能試題匯編
- 茶館里的政治:揭秘《茶館》背后的歷史
- 跨學科實踐活動5探究土壤酸堿性對植物生長的影響教學設計-2024-2025學年九年級化學魯教版下冊
- 國望液晶數(shù)顯切紙機安全操作規(guī)程
- 特種設備事故應急演練方案(附總結(jié))
評論
0/150
提交評論