///////////// 文件#include "" #include "" char table[30]; long unsigned int channel[3];// 存放时间 uint channel_count[6]={0};// 存放计数值 uchar channel_flag[3]={0}; uchar yichu_flag=0;// 溢出标志 float distance1=0; float distance2=0; float distance3=0; /************** 变量定义****************/ unsigned char flag=0; long time; /******************************************* 函数名称: void InitSys() 函数功能:时钟初始化入口参数:无返回值:无*******************************************/ void InitSys() { unsigned int iq0; _DINT(); BCSCTL1 &=~XT2OFF; do { IFG1 &= ~OFIFG; //清除振荡器失效标志 for (iq0 = 0xFF; iq0 > 0; iq0--); //延时,等待 XT2 起振} while ((IFG1 & OFIFG) != 0); //判断 XT2 是否起振 BCSCTL2 =SELM1+SELS; //MCLK,SMCLK 时钟为 XT2 } /******************************************* 函数名称: void init_dvice(void) 函数功能:超声波模块初始化入口参数:无返回值:无*******************************************/ void init_dvice(void) { P2DIR|=BIT0+BIT1+BIT2; //输出方向(用来产生大于 10us 的脉冲) P4DIR&=~(BIT1+BIT2+BIT3); //P1 的管脚为输入 P4SEL|=(BIT1+BIT2+BIT3); //CCI0A 输入 TBCTL=TBSSEL_2+TBCLR+ID_3+MC_2; //MCLK, 清除 TAR, 八分频,连续计数模式//CCTL0=IS_0+IE; //上升沿捕捉模式,IxA 作为捕捉事件的输入信号, //工作在捕捉模式,捕获/比较中断使能 TL3 |= CM_1 + SCS + CAP + CCIE;// 捕获模式,同步捕获,中断打开,上降沿捕获 TL1 |= CM_1 + SCS + CAP + CCIE;// 捕获模式,同步捕获,中断打开,上降沿捕获 TL2 |= CM_1 + SCS + CAP + CCIE;// 捕获模式,同步捕获,中断打开,上降沿捕获//TL4 |= CM_1 + SCS + CAP + CCIE;// 捕获模式,同步捕获,中断打开,上降沿捕获// TBCTL|=TASSEL_1+TACLR+ID_1+MC_1; //TIMER_B 工作于增计数方式// TL0|=CCIE; // R0 =4096; _EINT(); //使能 GIE } /******************************************* 函数名称: void start(void) 函数功能:超声波开始信号,产生 10us 的脉冲入口参数:无返回值:无*******************************************/ void start1(void) { Trig_L1; delay_us(10); Trig_H1; delay_us(10); Trig_L1; } void start2(void) { Trig_L2; delay_us(10); Trig_H2; delay_us(10); Trig_L2; } void start3(void) { Trig_L3; delay_us(10); Trig_H3; delay_us(10); Trig_L3; } /******************************************* 函数名称: void count_distance(void) 函数功能:计算距离入口参数:无返回值:无*******************************************/ float count_distance(long unsigned int ti1) { float dist
msp430f149多路超声波测距程序 来自淘豆网www.taodocs.com转载请标明出处.