凌阳超声波测距

上传人:kms****20 文档编号:39593314 上传时间:2018-05-17 格式:DOC 页数:8 大小:43.50KB
返回 下载 相关 举报
凌阳超声波测距_第1页
第1页 / 共8页
凌阳超声波测距_第2页
第2页 / 共8页
凌阳超声波测距_第3页
第3页 / 共8页
凌阳超声波测距_第4页
第4页 / 共8页
凌阳超声波测距_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《凌阳超声波测距》由会员分享,可在线阅读,更多相关《凌阳超声波测距(8页珍藏版)》请在金锄头文库上搜索。

1、/= = / 文件名称: ultrasonic_App.c / 功能描述: 超声波测距模组 V2.0 的功能接口函数 / 维护记录: 2006-02-21 V2.0/= = #include “SPCE061A.h“ #define LONG_SEND_TIMER 1000 /中距测距时的 40KHz 信号发射时长 #define LONG_SEND_TIMER2 3000 /中距测距的补充测距时的 40KHz 信号发射时 长 #define LONG_WAIT_DELAY 600 /中距测距的防余波干扰延时时长 #define LONG_WAIT_DELAY2 1500 /中距测距的补充测距

2、时的防余波干扰延时时 长 #define LONG_RES_ADD 0x00B0 /中距测距的结果补偿值 #define LONG_RES_ADD2 0x0220 /中距测距的补充测距时的结果补偿值#define LOW_SEND_TIMER 250 /短距测距时的 40KHz 信号发射时长 #define LOW_SEND_TIMER2 1000 /短距测距的补充测距时的 40KHz 信号发射 时长 #define LOW_WAIT_DELAY 180 /短距测距的防余波干扰延时时长 #define LOW_WAIT_DELAY2 400 /短距测距的补充测距时的防余波干扰延时 时长 #de

3、fine LOW_RES_ADD 0x0034 /短距测距的结果补偿值 #define LOW_RES_ADD2 0x00B0 /短距测距的补充测距时的结果补偿值unsigned int Counter_buf; /超声波测距当中,用于保存 TimerB 计数的变量, 相当于时长 unsigned int EXT1_IRQ_flag=0; /外部中断标志变量,用于 EXT1 的 IRQ 中断程序 和测距程序同步/= = / 语法格式: void Initial_ult(void) / 实现功能: 超声波测距模组的初始化子程序 / 参数: 无 / 返回值: 无/= = void Initial_

4、ult(void) unsigned int uiTemp;/ 初始化端口主要是 IOB8 和 IOB9uiTemp = *P_IOB_Dir;uiTemp = uiTemp|0x0200;uiTemp = uiTemp*P_IOB_Dir = uiTemp;uiTemp = *P_IOB_Attrib;uiTemp = uiTemp|0x0200;uiTemp = uiTemp*P_IOB_Attrib = uiTemp;uiTemp = *P_IOB_Buffer;uiTemp = uiTemp|0x0300;*P_IOB_Data = uiTemp; /= = / 语法格式: void

5、Delay_ult(unsigned int timers) / 实现功能: 超声波测距模组的延时子程序 / 参数: unsigned int timers 延时的时长(仅是一个相对量) / 返回值: 无/= = void Delay_ult(unsigned int timers) unsigned int i;for(i=0;i1; /除二uiTemp = (unsigned int)ulTemp;return uiTemp; /= = / 语法格式: unsigned int measure_ult(unsigned int type) / 实现功能: 超声波测距模组的测距程序,完成一次

6、测距 / 参数: type 选择测距类型, / type=1 中距测距 / type=0 短距测距 / 返回值: 所测得的距离,以厘米为单位/= = 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 uiS

7、ystem_Clock;uiSystem_Clock = *P_SystemClock; /将当前的系统时钟设置暂时保存起来*P_SystemClock = 0x0088; /将系统时钟设置为 49MHz,分频比为 1,强振模 式if(type) /根据 type 即测距类型,选择不同的测距参数uiSend_Timer = LONG_SEND_TIMER;uiWait_Timer = LONG_WAIT_DELAY;uiRes_Add = LONG_RES_ADD;elseuiSend_Timer = LOW_SEND_TIMER;uiWait_Timer = LOW_WAIT_DELAY;u

8、iRes_Add = LOW_RES_ADD;*P_TimerB_Data = 0xfed2;*P_TimerB_Ctrl = 0x03c0; /enable 40KHz outDelay_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 192KHzwhile(*P_TimerB_Data10000) /如计数值大于 1

9、0000,表示超时Exit_flag = 0; /exituiResoult = measure2_ult(type);/再进行一次补充的测距,将会加长 40KHz 信号 发射的量*P_TimerB_Ctrl = 0x0006; /stop timerBuiTemp = *P_TimerB_Data;*P_Watchdog_Clear = 0x0001;*P_INT_Ctrl = *P_INT_Ctrl_New /关掉外部中断_asm(“IRQ OFF“); /关掉总中断*P_SystemClock = uiSystem_Clock; /恢复系统时钟的设置return uiResoult; /

10、= = / 语法格式: void EXT1_IRQ_ult(void) / 实现功能: 超声波测距模组的测距程序的 EXT1 中断服务程序,在 EXT1 的 IRQ 中 断 / 中调用 / 参数: 无 / 返回值: 无/= = 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 /关掉外部中断*P_INT_Clear = 0xffff; /清除中断发生标志EX

11、T1_IRQ_flag = 1; /通知测距程序,外部中断已发生 /= = / 语法格式: unsigned int measure2_ult(void) / 实现功能: 补充进行一次远距的测量,以保证能够获取测量结果 / 参数: type 选择测距类型, / type=1 中距测距 / type=0 短距测距 / 返回值: 所测得的距离,以厘米为单位/= = unsigned int measure2_ult(unsigned int type) unsigned int Exit_flag = 1;unsigned int uiResoult;unsigned int uiSend_Timer,uiWait_Timer,uiRes_Add;*P_TimerA_Ctrl =

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号