




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 圖1比賽賽場地示意圖圖 圖2機器人出發發區示意圖44/-*/機器人搬運運比賽程序如如下:/ 項 目 名: 基于于Freesscale AW60的的 */ 硬件連接接: */ 程序描述述: 定時器器2作為顏色色傳感器計數數器;定時器器1通道0-1作為PWWM輸出;通通道2作為顏顏色傳感器的的定時器溢出出中斷/ 超聲聲波計數用定定時器1 */ 說 明: */ ? */ */ 作者信息息? */ 版本信息息? */ 完成時間間? */ 修訂記錄錄: */ 時間: */ 內容:? */-*/調用頭文件件#includde Inncludees.hvoid maain(vooid) /定定義變量,不不
2、管在主程序序還是子函數數,都需要把把變量的定義義放在最前面面,否則會報報錯 int DD=0; int mm=0; char num1=0; /用于計數數用 char num2=0; /用于 轉轉彎計數用 char flag_forwaard=1; /前進的標標志位 char flag_backwward=11; /后退的標標志位 /用用到的端口,一一定要記得初初始化端口數數據方向寄存存器 /液液晶模塊 /PPTGDD |= 0bb000111111; /液液晶模塊IOO的輸入輸出出配置 /顏顏色傳感器模模塊 /PPTCDD |= 0bb001011100; /配配置顏色傳感感器模塊 / PP
3、TFDD &= 0bb111111110; /紅紅外傳感器模模塊及驅動模模塊 PTDDDD = 0b0000001111; / PPTDD4作作為定時器22的外部時鐘鐘輸入 PTBBDD = 0b0110000000; /前五五個是紅外傳傳感器 ,最最后兩個是超超聲波的發送送和接收 PTEEDD |= 0b1111111000; /配置置驅動模塊 /PPTEDD &= 0bb111111110; /配置紅外接接近傳感器 PTAADD = 0 xFF; / PTFFDD = 0b0011111111; /前兩個口左左右計數的口口 /22 關總中斷斷 DissableIInterrrupt();
4、/禁止總總中斷 /33 芯片初始始化 MCUUInit(); /44 模塊初始始化 PWMM_Initt(1,0 xx0fa0); /用作PPWM輸出控控制電機周期期最佳控制大大概400mms左右 (控控制舵機用TTPM_NUUM_1,CCH_2) /TTPMiniit(2); /用來作為為顏色傳感器器的計數用外外部時鐘 /*rrb=0; /值的初始化化 bb=00; /值的初初始化 gb=00; /值的初初始化 ryz=0; /值的初初始化 byz=0; /值的初初始化 gyz=0; /值的初初始化 flagg=0; /值的初初始化*/ num_blackk=0;nuum_lefft=0;n
5、num_riight=00; D=660;/ baaipinggheng(); / EnnableIInterrrupt(); /開總中斷斷 */ whiile (11) /-*/文件名: 無 */說 明: 完成直推推三個目標 */作者: */初始時間: */修訂記錄: */備注:程序序順序執行一一遍就走完了了全程 ,回回到出發區 */-* /* whille(numm_blacck2) num_blackk= blaack_nuum(0); xunjji_forrward_3(); if(nnum_bllack=2) sstop(00); DDelayMMs(1000); wwhile(nu
6、m_rright=1) nnum_riight= blackk_num(1); xxunji_forwaard_3(); sstop(00); /到達達目的地 nnum_riight=00; nnum_bllack=00; fflag_bbackwaard=00; /作為后后退的準備 whille(flaag_bacckwardd=0) /后退到到賽道中心的的程序 back_fawarrd(); DelayyMs(10000); /等待黑線線的過去 if(COOUNT_RRIGHT=1) fllag_baackwarrd=1; turrn_lefft(2); /左轉990角度 .推第二個目目標
7、 wwhile(flag_forwaard=00) xunjii_forwward_33(); if(COOUNT_RRIGHT=1) fllag_foorwardd=1; /直直推完成 fllag_baackwarrd=0; /開始后退的的旅程 whille(flaag_bacckwardd=0) back_fawarrd(); if(COOUNT_RRIGHT=1) fllag_baackwarrd=1; mmiddlee_fawaard(700); DDelayMMs(1000); /避免再再碰到黑線 sstop(00); DDelayMMs(2); /減緩電電機的抖動 EEleft(7
8、0); wwhile(num_lleft=3) /左轉1800度推第三個個目標 num_left=blackk_num(1); iif(numm_leftt=3) num_left=0; num_blackk=0; /黑線線數清零? DDelayMMs(10); wwhile(flag_forwaard=00) xunjii_forwward_33(); if(COOUNT_RRIGHT=1) fllag_foorwardd=1; /直直推完成 fllag_baackwarrd=0; /開始后退的的旅程 whille(flaag_bacckwardd=0) back_fawarrd(); if
9、(COOUNT_RRIGHT=1) fllag_baackwarrd=1; turrn_lefft(3); bacck_fawward(); whiile(nuum_blaack2) numm_blacck= bllack_nnum(0); bacck_fawward(); DellayMs(1000); */ /-*/文件名: 無 */說 明: 直走900度彎的程序序 */作者: */初始時間: */修訂記錄: */備注:在碰碰到第二根黑黑線之前程序序要循環掃描描,執行完程程序就剛轉990度彎,推推物塊到目的的地,然后返返回到中心停停住的程序 */-* /* blaack_nuum(0);
10、if(nnum_bllack=2) tuurn_leeft(4); nuum_blaack=0; /黑線數清零零? fllag_foorwardd=0; /為為直推做好準準備,必須寫寫的程序 elsee xunjji_forrward_3(); whiile(fllag_foorwardd=0) xunjii_forwward_33(); if(COOUNT_RRIGHT=1) fllag_foorwardd=1; /直直推完成 fllag_baackwarrd=0; /開始后退的的旅程 whille(flaag_bacckwardd=0) back_fawarrd(); if(COOUNT_
11、RRIGHT=1) fllag_baackwarrd=1; whhile(11); */ /-*/文件名: 無 */說 明: 直走900度彎的程序序 */作者: */初始時間: */修訂記錄: */備注:在碰碰到第二根黑黑線之前程序序要循環掃描描,執行完程程序就剛轉990度彎而已已,后面nuum1是被清清零的,所以以還是在執行行循跡 */-* /* if(seensor_inp_fforwarrd()=0 x1f) numm1+; whilee(senssor_innp_forrward()=0 xx1f); if(nuum1=22) Eleftt(70); whhile(nnum244) i
12、if(numm_righht=1) num2+; /DelaayMs(11000); wwhile(num_rright=1); num1=0; /DellayMs(3000); elsee xunnji_foorwardd_3();*/-*/文件名: Robott_Run.c */說 明: 雙足機器器人運動函數數文件 */作者: */初始時間: */修訂記錄: */備注: */-*#includde Roobot_RRun.h /不同的車車,因為電機機接線不一樣樣,對應的這這些設置也會會有變動,最最好自己先測測試這幾個最最基本的動作作 uint8 flag_blackk=0,fllag_ri
13、ight=00,flagg_leftt=0; /車前的傳感感器uint8 ssensorr_inp_forwaard() unssignedd charr senssor_foorwardd; sennsor_fforwarrd=PTBBD; sennsor_fforwarrd&=0 xx1F; retturn ssensorr_forwward;/車后的傳感感器uint8 ssensorr_inp_backwward() unssignedd charr senssor_baackwarrd; sennsor_bbackwaard=PTTDD; sennsor_bbackwaard&=00
14、x07; retturn ssensorr_backkward;/此段為前進進程序啟動void miiddle_fawarrd(uinnt8 sppeed) PWM_Set(TTPM_NUUM_2, TPM1_CH_0 , speeed); PWM_Set(TTPM_NUUM_2, TPM1_CH_1 , speeed+4);/已經經調整好的參參數占空比百百分之78 IN1=1; IN2=0; IN3=1; IN4=0; DelaayMs(22); /設設置PWM設設置的時間間間隔/此段為旋轉轉左轉程序程程序啟動void leeft(uiint8 sspeed) PWMM_Set(TPM_NN
15、UM_2, TPM11_CH_00 , sppeed-440); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 , sppeed); IN11=1; IN22=0; IN33=1; IN44=0; DellayMs(2);/此段為旋轉轉大左轉程序序程序啟動void Elleft(uuint8 speedd) PWMM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 , sppeed-220); IN11=1; IN22=0; IN33=0; IN44=1; DellayMs(2)
16、; /此段為旋旋轉右轉啟動動程序 void rright(uint88 speeed) PWMM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 , sppeed); IN11=1; IN22=0; IN33=1; IN44=0; DellayMs(2); /此段為旋旋轉大右轉啟啟動程序 void EErightt(uintt8 speeed) PWMM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 ,
17、 sppeed); IN11=0; IN22=1; IN33=1; IN44=0; DellayMs(2); /此段為后退退直走序程序序啟動void baack_faaward(uint88 speeed) PWM_Set(TTPM_NUUM_2, TPM1_CH_0 , speeed); PWM_Set(TTPM_NUUM_2, TPM1_CH_1 , speeed+4);/已經經調整好的參參數占空比百百分之78 IN1=0; IN2=1; IN3=0; IN4=1; DelaayMs(22);/此段為旋轉轉左轉程序程程序啟動void baacklefft(uinnt8 sppeed) PW
18、MM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed-440); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 , sppeed); IN11=0; IN22=1; IN33=0; IN44=1; DellayMs(2);/此段為旋轉轉大左轉程序序程序啟動void baackEleeft(uiint8 sspeed) PWMM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 , sppeed); IN11=0; IN22=1; IN33=1; IN44=
19、0; DellayMs(2); /此段為旋旋轉右轉啟動動程序 void bbackriight(uuint8 speedd) PWMM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 , sppeed); IN11=0; IN22=1; IN33=0; IN44=1; DellayMs(2); /此段為旋旋轉大右轉啟啟動程序 void bbackErright(uint88 speeed) PWMM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed); PWMM_Set(TP
20、M_NNUM_2, TPM11_CH_11 , sppeed); IN11=1; IN22=0; IN33=0; IN44=1; DellayMs(2); /此段為停止止啟動程序 void sstop(uuint8 speedd) PWMM_Set(TPM_NNUM_2, TPM11_CH_00 , sppeed); PWMM_Set(TPM_NNUM_2, TPM11_CH_11 , sppeed); IN11=0; IN22=0; IN33=0; IN44=0; DellayMs(2); /-*/函數名: xunjii_backkward_3 */功 能: 后退五路路循跡/參 數: 無 *
21、/返 回: 無 */說 明: 1、執行行該循跡程序序時在不斷地地設置定時器器PWM模塊塊; / 2、使使用時要注意意一定要每隔隔一段時間執執行此程序一一次(兩者是是缺一不可的的),才能達達到循跡的功功能。 */-* void xunjii_backkward_3() /五路循跡 swiitch(ssensorr_inp_backwward()case 00 x04: backk_fawaard(800);breeak;/中間的的燈碰到黑線線直走 casse 0 x002: baackEleeft(800);breeak;case 00 x03: backlleft(880);brreak; c
22、asse 0 x008: baackEriight(880);brreak; casse 0 x118: baackrigght(800);breeak; deffault: backk_fawaard(800);breeak; /其他的燈的的情況直走void xuunji_fforwarrd_5() /五路循跡跡 swiitch(ssensorr_inp_forwaard()case 0 x04: midddle_ffawardd(80);breakk;/中間的的燈碰到黑線線直走 casee 0 x022: Eleeft(800);breeak;/右邊的的燈碰到黑線線右轉 casee 0 x
23、011:Eleftt(80);breakk; caase 0 xx03: lleft(880);brreak; casee 0 x088: Eriight(880);brreak; /左邊的燈燈碰到黑線左左轉Erighht(80);breaak;case 0 x18: righht(80);breaak; defauult: middlle_fawward(880);brreak; /其他的燈的的情況直走/-*/函數名: xxunji_forwaard_3 */功 能: 三路循跡跡/參 數: 無 */返 回: 無 */說 明: 1、執行行該循跡程序序時在不斷地地設置定時器器PWM模塊塊; /
24、2、使使用時要注意意一定要每隔隔一段時間執執行此程序一一次(兩者是是缺一不可的的),才能達達到循跡的功功能。 */-* void xxunji_forwaard_3() /三路路循跡 swiitch(ssensorr_inp_forwaard()case 0 x04: midddle_faaward(80);bbreak;/中間的的燈碰到黑線線直走case 0 x02: Erigght(800);breeak;/右邊的的燈碰到黑線線右轉 casee 0 x033: rigght(800);breeak; casee 0 x088: Eleeft(800);breeak; /左邊的燈燈碰到黑線左
25、左轉case 0 x18: leftt(80);breakk; defauult: midddle_faaward(80);bbreak; /其他的燈的的情況直走/-*/函數名: blackk_num */功 能: 進行計數數/參 數:/se=00輸出為傳感感器全黑計數數,num_blackk/ se=1輸出右邊邊傳感器計數數,num_rightt/ se=2輸出對左左邊傳感器計計數,numm_leftt */返 回: 見參數 */說 明: 程序每隔隔一段要進入入這一段函數數,才能計數數,還有計數數值會一直保保留,/ 想清除除的時候可以以對num_blackk,num_left,num_rri
26、ght進進行清零 */-*uint8 bblack_num(uuint8 se) if(se=00) if(ssensorr_inp_forwaard()=0 x1ff) fllag_bllack=11; elsse iff(flagg_blacck=1) nuum_blaack+; fllag_bllack=00; retuurn nuum_blaack; if(se=11) if(COUNTT_RIGHHT=1) fllag_riight=11; elsse iff(flagg_righht=1) numm_righht+; fllag_riight=00; retuurn nuum_ri
27、gght; iif(se=2) if(COUNTT_LEFTT=1) fllag_leeft=1; elsse iff(flagg_leftt=1) numm_leftt+; fllag_leeft=0; retuurn nuum_lefft; /-*/函數名: turn_left */功 能: 到十字路路口進行左轉轉彎的程序/參 數: shu 表示轉彎時時記黑線數,沒沒到黑線的下下降沿就計數數 */返 回: 無 */說 明: 該程序執執行一次就可可以,也就是是說程序執行行 一遍就相相當于轉彎完完成,后面就就跳出程序了了 */-執行-*void tuurn_leeft(unnsigneed c
28、haar shuu1) mmiddlee_fawaard(800); DDelayMMs(1000); EEleft(80); wwhile(num_rright=shu11) num_rightt=blacck_numm(1); iif(numm_righht=shhu1) nnum_riight=00; DDelayMMs(1000); /-*/函數名: turn_rightt */功 能: 到十字路路口進行右轉轉彎的程序/參 數: shu 表示轉彎時時記黑線數,沒沒到黑線的下下降沿就計數數 */返 回: 無 */說 明: 該程序執執行一次就可可以,也就是是說程序執行行 一遍就相相當于轉彎
29、完完成,后面就就跳出程序了了 */-執行-*void tuurn_riight(uunsignned chhar shhu2) mmiddlee_fawaard(800); DDelayMMs(1000); EErightt(70); wwhile(num_lleft33) D=ceeju(); xunjji_forrward_5(); iff(D 8); TPM_MODL(TPMNoo) = (uint88)Periiod; if(TTPMNo = 1) TPPM_CSTTR(1) = 0b0000010000; /定時器器1時鐘源和和分頻數的選選擇 / | | / | |+-PS00 /
30、| |+-PS11 -64倍分頻頻 / | |+-PS22/ / | |+-CLKKSA / | +-CLKKSB/-時鐘源系統統固定時鐘 01:總線時鐘220M 10:固定定系統時鐘22M / +-TOIIE-禁止溢出中中斷 elsee TPM_CCSTR(22) = 00b000110011; / | | /定時器22時鐘源和分分頻數的選擇擇 / | |+-PPS0 / | |+-PPS1 -8倍分分頻 / | |+-PPS2/ / | |+-CCLKSA / | +-CCLKSB/-時鐘源源系統固定時時鐘 01:總線線時鐘20MM 100:固定系統統時鐘2M / +-TTOIE-禁止溢溢
31、出中斷 void PWWM_Sett(uintt8 TPMMNo, uuint8 CHNo, uintt8 Dutty) uintt16 j; uintt16 Peeriod; /= /注意: 一定要加加上,否則PPWM的周期期和占空比不不會改變 /先禁止止用定時器,不選擇時鐘鐘即可 /= TPM_CSTR(TPMNoo) = 00 x00; /一定一一定要寫上這這句,不然占占空比不會變變 Periiod=40000; /時鐘源及及分頻設置設設置好,改變變占空比時最最好就不要去去改,二十去去改變設好的的占空比量就就可以 if(TTPMNo = 1) TTPMNo = 1; / Periiod
32、= Periood_CD11; elsee TTPMNo = 2; / Periiod = Periood_CD22; if(DDuty=100) Duty=100; elsee if (Duty 8); TPPM1_CHHVL(CHHNo)=(uint88)j; /設置定時器器1通道狀態態和控制寄存存器 TPMM1_CHSSCSTR(CHNo) = 0bb001011000; / | / |+-ELSAA / |+-ELSBB/-邊邊沿對其模式式 / |+-MSA / |+-MSB/-PPWM模式,CPWMSS位需要設置置為0 / +-CHIEE-禁禁止中斷 TPPM_CSTTR(1) =
33、0b0000010000; /定時器器1時鐘源和和分頻數的選選擇 / | | / | |+-PS00 / | |+-PS11 -1倍分頻 / | |+-PS22/ / | |+-CLKKSA / | +-CLKKSB/-時鐘源系統統固定時鐘 01:總線時鐘220M 10:固定定系統時鐘22M / +-TOIIE-禁止溢出中中斷 else /定時器1通通道0數值寄寄存器 TPPM2_CHHVH(CHHNo)=(uint88)(j 8); TPPM2_CHHVL(CHHNo)=(uint88)j; /設置定時器器2通道狀態態和控制寄存存器 TPM2_CHSCSSTR(CHHNo)=00b00100
34、1000; / | / |+-ELSSA / |+-ELSSB/-邊沿對其模模式 / |+-MSAA / |+-MSBB/-PWM模式式,CPWMMS位需要設設置為0 / +-CHIIE-禁止中斷 TPPM_CSTTR(2) = 0b0000100011; / | | /定定時器2時鐘鐘源和分頻數數的選擇 / | |+-PS00 / | |+-PS11 -8倍分頻 / | |+-PS22/ / | |+-CLKKSA / | +-CLKKSB/-時鐘源總線線時鐘 001:總線時時鐘20M 10:固定系統時時鐘2M / +-TOIIE-禁止溢出中中斷 /-*/函數名: PWM_SSet(單個個P
35、WM波輸輸出函數) */功能: 根根據所需的PPWM波的周周期和占空比比,并設置相相關寄存器,輸出PWMM波 * /參數: */ (1)TPMM_No:定定時器號(11-2) */ (2)CH_No:通道道號(定時器器1通道號00-5,定時時器2通道號號0-1) */ (3)anggle:舵機機旋轉角度 */返回:無 */說 明: 角度(): 00 45 90 1355 180 * */ 正脈脈寬(ms):0.5 1.00 1.5 22.0 2.55 */-*/同樣的道理理,控制舵機機要改變占空空比,必經關關閉打開定時時器這兩個步步驟,所以直直接把它寫到到函數進去,避避免遺忘 void PWM
36、_SSet_duuoji(uuint8 TPMNoo,uintt8 CHNNo,uinnt8 anngle) uuint166 dutyy = 0; /= /注意意: 一定要要加上,否則則PWM的周周期和占空比比不會改變 /先禁禁止用定時器器,不選擇時時鐘即可 /= iif(TPMMNo 2) TPMMNo = 1; eelse TPMMNo = 2; TTPM_CSSTR(TPPMNo) = 0 x000; iif(anggle=1120) anggle=1220; dduty = anglle*25; /注意,這個個推得的式子子,要保證舵舵機處于高電電平的時間,這這和定時器狀狀態和控制寄寄
37、存器 dduty = (uinnt16)(duty/9.0); /緊密聯系系,此關系式式子推得的前前提是必須 TPM_CCSTR(TTPMNo) = 0bb000100011; dduty += 1255; /一旦時鐘鐘源和分頻變變了,則不能能用這個式子子 /舉例,轉轉90度,假假設設通道寄寄存器值為aa,則1/(fosc/p)振蕩一一次用的時間間,振蕩 iif(TPMMNo = 1) /a*(1/(foosc/p)必須等于于1.5mss,即0.00015s,即高電平的的時間 /定時器器1 if(CCHNo 5) CCHNo = 5; /根據據占空比,設設置相應通道道數值寄存器器 TPM11_
38、CHVHH(CHNoo) = (uint88)(dutty 8); TPM11_CHVLL(CHNoo) = (uint88)dutyy; /設置置定時器1通通道狀態和控控制寄存器(主要為PWWM對齊方式式選擇,時鐘鐘源選擇,分分頻因子選擇擇) TPM11_CHSCCSTR(CCHNo) = 0bb001011000; / | / |+-ELSSA / |+-ELSSB/-邊沿對其模模式 / |+-MSAA / |+-MSBB/-PWM模式式,CPWMMS位需要設設置為0 / +-CHIIE-禁止中斷 TPM_CSTR(1) = 0b0000100111; / | | /定時器22時鐘源和分分
39、頻數的選擇擇 / | |+-PPS0 / | |+-PPS1 -8倍分分頻 / | |+-PPS2/ / | |+-CCLKSA / | +-CCLKSB/-時鐘源源系統固定時時鐘 01:總線線時鐘20MM 100:固定系統統時鐘2M / +-TTOIE-禁止溢溢出中斷 ellse /定時時器2 if(CCHNo 1) CHNo = 1; /根據據占空比,設設置相應通道道數值寄存器器 TPM22_CHVHH(CHNoo) = (uint88)(dutty 8); TPM22_CHVLL(CHNoo) = (uint88)dutyy; /設置置定時器2通通道狀態和控控制寄存器(主要為PWWM對齊
40、方式式選擇,時鐘鐘源選擇,分分頻因子選擇擇) TPM22_CHSCCSTR(CCHNo) = 0b0001010000; / | / |+-ELLSA / |+-ELLSB/-邊沿對其其模式 / |+-MSSA / |+-MSSB/-PWM模模式,CPWWMS位需要要設置為0 / +-CHHIE-禁止中斷斷 TPM_CSTR(2) = 0b0000100111; / | | /定時器22時鐘源和分分頻數的選擇擇 / | |+-PPS0 / | |+-PPS1 -8倍分分頻 / | |+-PPS2/ / | |+-CCLKSA / | +-CCLKSB/-時鐘源源系統固定時時鐘 01:總線線時鐘
41、20MM 100:固定系統統時鐘2M / +-TTOIE-禁止溢溢出中斷 /函數名: ECT_IInit */功能: 輸輸入捕捉模塊塊 * /參數: */ (1)TPM_NNo:定時器器號(1-22) */ (2)CH_Noo:通道號(定時器1 通道號05,定時器器2通道號001) */返回: 無無 */說明: 無無 */-*void ECCT_Iniit(uinnt8 TPPM_No,uint88 CH_NNo) if(TPM_NNo 22) TPM_No = 2; if(TPM_NNo 5) CH_Noo = 5; TPM11_CHSCCSTR(CCH_No) = 0bb010000100
42、; / | / |+-00: / |+-00: / |+-EELSnA: 跳變變沿/輸出電電平選擇位 01上升沿沿捕捉 / |+-EELSnB: / |+-MMSnA: 通道道模式選擇位位 00 01 11x / |+-MMSnB: 輸輸入捕捉 輸出比較 PWWM模式 / |+-CCHnIE: 通道道中斷允許位位 1 允許許中斷 0 禁止中斷 / +-CCHnF: 通道道捕捉標志位位 1 發生生捕捉 if(TPM_NNo = 2) if(CCH_No 1) CH_Noo = 1; TPM22_CHSCCSTR(CCH_No) = 0bb010000100; / | / |+-00: / |+-
43、00: / |+-EELSnA: 跳變變沿/輸出電電平選擇位 01上升沿沿捕捉 / |+-EELSnB: / |+-MMSnA: 通道道模式選擇位位 00 01 11x / |+-MMSnB: 輸輸入捕捉 輸出比較 PWWM模式 / |+-CCHnIE: 通道道中斷允許位位 0 禁止止中斷 1 允許中斷 / +-CCHnF: 通道道捕捉標志位位 1 發生生捕捉 /設設置定時器狀狀態和控制寄寄存器 TPMM_CSTRR(TPM_No) = 0b0000010000; / | | / | |+-PS0 / | |+-PS1 -00倍分頻 / | |+-PS2/ / | |+-CLKSSA / |
44、+-CLKSSB/-時時鐘源選擇系系統固定時鐘鐘 / +-TOIEE-禁禁止溢出中斷斷 /-*/ 文件名: timeer.c */ 說 明明: 定時器器驅動文件 */-*/定時器頭文文件#includde tiimer.hh/-*/函數名: TPMinnit */功 能: 對定時器器初始化,禁禁止定時器11溢出中斷,設置為1ss發生1次定定時器溢出中中斷 */參 數: TPMNNo為定時器器號(122) */返 回: 無 */說 明: 無 */-*void TPPMinitt(uintt8 TPMMNo) /參參數溢出處理理 if(TPMNoo2) TTPMNo=2; elsse if(TPM
45、Noo= 60) /秒秒溢出 *(p+2) = 0; /清清秒 *(p+1) += 1; /分分加1 if (*(p+11) = 60) /分分溢出 *(p+11) = 0; /清清時 *p += 1; /時時加1 if (*p = 24) /時時溢出 *p = 00; /清清時 /-*/函數名:ttimerSSet10MMS() */功 能: 設置定時時10ms 中斷 */參 數: 定時器號號 TPMNNo */返 回: 無 */說 明: 用定時器器1 */-* void timerrSet100MS(uiint8 TTPMNo) /參參數溢出處理理 if(TPMNoo2) TTPMNo=2
46、; elsse if(TPMNoo2255)rbb=255;/判斷RRGB值是否否合法 /*求B值* tccs230_s2=0; tccs230_s3=1;/選擇藍藍色濾光器 / timerrSet100MS(1);/100毫秒開始計計時 開中中斷 TPPM_CNTTH(2)=0; TPPM_CNTTL(2)=0;/開開始計數 DeelayMss(10); / whilee(flagg=0);/等待定定時器溢出 bbb=(unssignedd longg)(TPMM_CNTHH(2)*2256+TPPM_CNTTL(2)*255/byz; / DisabbletimmerIntt(1);/關定
47、時器器1中斷 iff(bb2255)bbb=255;/判斷RRGB值是否否合法 /*求G值* tccs230_s2=1; tccs230_s3=1;/選擇綠綠色濾光器 / timerrSet100MS(1);/100毫秒開始計計時 開中中斷 TPPM_CNTTH(2)=0; TPPM_CNTTL(2)=0;/開開始計數 DeelayMss(10); / whilee(flagg=0);/等待定定時器溢出 gbb=(unssignedd longg)(TPMM_CNTHH(2)*2256+TPPM_CNTTL(2)*255/gyz; / DisabbletimmerIntt(1);/關定時器器1中斷 tccs230_en=1; iff(gb2255)gbb=255;/判斷RRGB值是否否合法 /*/白平衡子程程序void baaipinggheng() /*求求取紅色因子子* ttcs2300_s2=00; tccs230_s3=0;/選擇紅紅色濾光器 tccs230_en=0; / timerrSet100MS(1);/100毫秒開始計計時 開中中斷 / EnablleInteerruptt(); TPPM_CNTTH(2)=0; TPPM_CNTTL(2)=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濟南市天橋區濼口實驗學校2024-2025年第二學期期中考試八年級地理試題(含答案)
- 沙漠地區土地治理承包合同
- 物業臨聘人員勞動合同
- Unit1 starting out 教案2024-2025學年外研版(2024)七年級英語下冊
- 小學科學鄂教版五年級上冊9蛙教學設計及反思
- 幼兒表演性舞蹈創編實例
- 電工清包承包合同書
- 人教版小學二年級上冊數學 第3單元 角的初步認識 教案
- 紙漿采購合同范本
- 股權投資合作協議書
- T-ZMDS 10019-2024 經顱電刺激儀基本技術規范
- 人教版六年級下冊科學全冊教案
- 2024福建中閩能源股份有限公司招聘12人筆試參考題庫附帶答案詳解
- 2025年江西省旅游集團股份有限公司招聘筆試參考題庫含答案解析
- 《外科補液原則》課件
- 《墨家思想》課件
- 浙江省2025年1月首考高考英語試卷試題真題(含答案)
- 川教版(2024)小學信息技術三年級上冊《跨學科主題活動-在線健康小達人》教學實錄
- 機械專業英語
- 高空作業車(剪叉式、曲臂式)驗收表
- 廣東省廣州市2024屆高三下學期一模考試 政治 含解析
評論
0/150
提交評論