




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/=/ 文件名稱: ultrasonic_app.c/ 功能描述: 超聲波測(cè)距模組v2.0的功能接口函數(shù)/ 維護(hù)記錄: 2006-02-21 v2.0/=#include spce061a.h#define long_send_timer 1000 /中距測(cè)距時(shí)的40khz信號(hào)發(fā)射時(shí)長(zhǎng)#define long_send_timer2 3000 /中距測(cè)距的補(bǔ)充測(cè)距時(shí)的40khz信號(hào)發(fā)射時(shí)長(zhǎng)#define long_wait_delay 600 /中距測(cè)距的防余波干擾延時(shí)時(shí)長(zhǎng)#define long_wait_delay2 1500 /中距測(cè)距的補(bǔ)充測(cè)距時(shí)的防余波干擾延時(shí)時(shí)長(zhǎng)#define lo
2、ng_res_add 0x00b0 /中距測(cè)距的結(jié)果補(bǔ)償值#define long_res_add2 0x0220 /中距測(cè)距的補(bǔ)充測(cè)距時(shí)的結(jié)果補(bǔ)償值#define low_send_timer 250 /短距測(cè)距時(shí)的40khz信號(hào)發(fā)射時(shí)長(zhǎng)#define low_send_timer2 1000 /短距測(cè)距的補(bǔ)充測(cè)距時(shí)的40khz信號(hào)發(fā)射時(shí)長(zhǎng)#define low_wait_delay 180 /短距測(cè)距的防余波干擾延時(shí)時(shí)長(zhǎng)#define low_wait_delay2 400 /短距測(cè)距的補(bǔ)充測(cè)距時(shí)的防余波干擾延時(shí)時(shí)長(zhǎng)#define low_res_add 0x0034 /短距測(cè)距的結(jié)果補(bǔ)償
3、值#define low_res_add2 0x00b0 /短距測(cè)距的補(bǔ)充測(cè)距時(shí)的結(jié)果補(bǔ)償值unsigned int counter_buf; /超聲波測(cè)距當(dāng)中,用于保存timerb計(jì)數(shù)的變量,相當(dāng)于時(shí)長(zhǎng)unsigned int ext1_irq_flag=0; /外部中斷標(biāo)志變量,用于ext1的irq中斷程序和測(cè)距程序同步/=/ 語(yǔ)法格式: void initial_ult(void)/ 實(shí)現(xiàn)功能: 超聲波測(cè)距模組的初始化子程序/ 參數(shù): 無(wú)/ 返回值: 無(wú)/=void initial_ult(void) unsigned int uitemp; / 初始化端口主要是iob8和iob9 ui
4、temp = *p_iob_dir; uitemp = uitemp|0x0200; uitemp = uitemp&0xfeff; *p_iob_dir = uitemp; uitemp = *p_iob_attrib; uitemp = uitemp|0x0200; uitemp = uitemp&0xfeff; *p_iob_attrib = uitemp; uitemp = *p_iob_buffer; uitemp = uitemp|0x0300; *p_iob_data = uitemp;/=/ 語(yǔ)法格式: void delay_ult(unsigned int timers)/
5、實(shí)現(xiàn)功能: 超聲波測(cè)距模組的延時(shí)子程序/ 參數(shù): unsigned int timers 延時(shí)的時(shí)長(zhǎng)(僅是一個(gè)相對(duì)量)/ 返回值: 無(wú)/=void delay_ult(unsigned int timers) unsigned int i; for(i=0;i1; /除二 uitemp = (unsigned int)ultemp; return uitemp;/=/ 語(yǔ)法格式: unsigned int measure_ult(unsigned int type)/ 實(shí)現(xiàn)功能: 超聲波測(cè)距模組的測(cè)距程序,完成一次測(cè)距/ 參數(shù): type 選擇測(cè)距類型,/ type=1 中距測(cè)距/ type=
6、0 短距測(cè)距/ 返回值: 所測(cè)得的距離,以厘米為單位/=unsigned int measure2_ult(unsigned int type);unsigned int measure_ult(unsigned int type) unsigned int exit_flag = 1; unsigned int uitemp; unsigned int uiresoult; unsigned int uisend_timer,uiwait_timer,uires_add; unsigned int uisystem_clock; uisystem_clock = *p_systemclock
7、; /將當(dāng)前的系統(tǒng)時(shí)鐘設(shè)置暫時(shí)保存起來(lái) *p_systemclock = 0x0088; /將系統(tǒng)時(shí)鐘設(shè)置為49mhz,分頻比為1,強(qiáng)振模式 if(type) /根據(jù)type即測(cè)距類型,選擇不同的測(cè)距參數(shù) uisend_timer = long_send_timer; uiwait_timer = long_wait_delay; uires_add = long_res_add; else uisend_timer = low_send_timer; uiwait_timer = low_wait_delay; uires_add = low_res_add; *p_timerb_data
8、= 0xfed2; *p_timerb_ctrl = 0x03c0; /enable 40khz out delay_ult(uisend_timer); /delay for send the signal *p_timerb_ctrl = 0x0006; /stop 40khz out *p_timerb_data = 0x0000; *p_timerb_ctrl = 0x0001; /timerb work as a counter at 192khz while(*p_timerb_data10000) /如計(jì)數(shù)值大于10000,表示超時(shí) exit_flag = 0; /exit ui
9、resoult = measure2_ult(type);/再進(jìn)行一次補(bǔ)充的測(cè)距,將會(huì)加長(zhǎng)40khz信號(hào)發(fā)射的量 *p_timerb_ctrl = 0x0006; /stop timerb uitemp = *p_timerb_data; *p_watchdog_clear = 0x0001; *p_int_ctrl = *p_int_ctrl_new&(0x0100); /關(guān)掉外部中斷 _asm(irq off); /關(guān)掉總中斷 *p_systemclock = uisystem_clock; /恢復(fù)系統(tǒng)時(shí)鐘的設(shè)置 return uiresoult;/=/ 語(yǔ)法格式: void ext1_i
10、rq_ult(void)/ 實(shí)現(xiàn)功能: 超聲波測(cè)距模組的測(cè)距程序的ext1中斷服務(wù)程序,在ext1的irq中斷/ 中調(diào)用/ 參數(shù): 無(wú)/ 返回值: 無(wú)/=void ext1_irq_ult(void) counter_buf = *p_timerb_data; /save the timerb counter *p_timerb_ctrl = 0x0006; /stop timerb *p_int_ctrl = *p_int_ctrl_new&(0x0100); /關(guān)掉外部中斷 *p_int_clear = 0xffff; /清除中斷發(fā)生標(biāo)志 ext1_irq_flag = 1; /通知測(cè)距程
11、序,外部中斷已發(fā)生/=/ 語(yǔ)法格式: unsigned int measure2_ult(void)/ 實(shí)現(xiàn)功能: 補(bǔ)充進(jìn)行一次遠(yuǎn)距的測(cè)量,以保證能夠獲取測(cè)量結(jié)果/ 參數(shù): type 選擇測(cè)距類型,/ type=1 中距測(cè)距/ type=0 短距測(cè)距/ 返回值: 所測(cè)得的距離,以厘米為單位/=unsigned int measure2_ult(unsigned int type) unsigned int exit_flag = 1; unsigned int uiresoult; unsigned int uisend_timer,uiwait_timer,uires_add; *p_tim
12、era_ctrl = 0x0006; /stop timera *p_int_ctrl = *p_int_ctrl_new&(0x0100); /關(guān)掉外部中斷 _asm(irq off); /關(guān)掉總中斷 *p_int_clear = 0xffff; /清除掉中斷發(fā)生標(biāo)志 if(type) /根據(jù)type即測(cè)距類型,選擇不同的測(cè)距參數(shù) uisend_timer = long_send_timer2; uiwait_timer = long_wait_delay2; uires_add = long_res_add2; else uisend_timer = low_send_timer2; ui
13、wait_timer = low_wait_delay2; uires_add = low_res_add2; *p_timerb_data = 0xfed2; *p_timerb_ctrl = 0x03c0; /enable 40khz out delay_ult(uisend_timer); /delay for send the signal *p_timerb_ctrl = 0x0006; /stop 40khz out *p_timerb_data = 0x0000; *p_timerb_ctrl = 0x0001; /timerb work as a counter at 192k
14、hz while(*p_timerb_data10000) /如計(jì)數(shù)值大于10000,表示超時(shí) exit_flag = 0; /exit uiresoult = 0; /error return data 0 *p_timerb_ctrl = 0x0006; /stop timerb return uiresoult;/=/ 語(yǔ)法格式: unsigned int measure_times(unsigned int type)/ 實(shí)現(xiàn)功能: 組合進(jìn)行共6次的測(cè)距程序,包括對(duì)6次測(cè)量結(jié)果的取平均值處理/ 參數(shù): type 選擇測(cè)距類型,/ type=1 中距測(cè)距/ type=0 短距測(cè)距/ 返回
15、值: 所測(cè)得的距離,以厘米為單位/=unsigned int measure_times(unsigned int type) unsigned int uiresoult=0,uimeasure_index=0,i; unsigned int uitemp_buf6,uitemp; unsigned int uisystem_clock; for(;uimeasure_indexuitemp_bufi-1) uitemp_bufi = uitemp_bufi-1; uitemp_bufi-1 = uitemp; else uitemp_bufi = uitemp; break; /退出排序
16、i-; /兩次測(cè)量之間的延時(shí)等待,利用以下代碼軟仿真時(shí)的cycles數(shù)結(jié)合設(shè)置的cpuclk進(jìn)行計(jì)算,大概72ms uisystem_clock = *p_systemclock; /將之前的系統(tǒng)時(shí)鐘的設(shè)置用變量保存 *p_systemclock = 0x000b; /設(shè)置為fsys=24.576mhz 分頻比為8 for(i=0;i5;i+) delay_ult(1000); /調(diào)用延時(shí)程序 *p_watchdog_clear = 0x0001; *p_systemclock = uisystem_clock; /恢復(fù)系統(tǒng)時(shí)鐘設(shè)置 /此處延時(shí)結(jié)束 /對(duì)6次測(cè)距的結(jié)果進(jìn)行處理 if(uitemp_buf5=0)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包地土地租賃合同
- 鄉(xiāng)村旅游開(kāi)發(fā)實(shí)施細(xì)則指南
- 擋土墻工程勞務(wù)承包合同
- 預(yù)制砼界碑施工方案
- 鏤空磚隔斷施工方案
- 遂寧雨水收集系統(tǒng)施工方案
- 四川球場(chǎng)拼裝地板施工方案
- 沙坪壩餐廳石膏板施工方案
- 瀝青站搬遷改造方案
- 青浦區(qū)遮陽(yáng)停車棚施工方案
- 8 歌曲 《郵遞員叔叔來(lái)了》課件(13張內(nèi)嵌視頻)
- 網(wǎng)絡(luò)數(shù)據(jù)安全風(fēng)險(xiǎn)治理與防護(hù)項(xiàng)目需求說(shuō)明
- GB/T 14020-2024氫化松香
- 中醫(yī)護(hù)理學(xué) 課件 模塊七 中醫(yī)護(hù)理操作 項(xiàng)目四麥粒灸技術(shù)
- 人教版八年級(jí)數(shù)學(xué)上冊(cè)教案全冊(cè)
- 人教版五年級(jí)上冊(cè)音樂(lè)《手拉手地球村》教學(xué)設(shè)計(jì)
- CH-T+8023-2011機(jī)載激光雷達(dá)數(shù)據(jù)處理技術(shù)規(guī)范
- 美團(tuán)眾包新的騎手協(xié)議來(lái)了
- 2024收銀系統(tǒng)合同
- 辦公樓裝飾施工組織設(shè)計(jì)裝飾裝修工程施工組織設(shè)計(jì)方案
- 山東管理學(xué)院聲樂(lè)題庫(kù)復(fù)習(xí)題
評(píng)論
0/150
提交評(píng)論