• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

求指点MSP430F149驱动超声波模块程序,不能正常工作

秀文 2013-05-21 浏览量:5122
求指点MSP430F149驱动超声波模块程序,不能正常工作 #include #define  RISE  1 #define  FALL  0 #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define uint unsigned int #define uchar unsigned char #define Trig_H P1OUT|=BIT0 #define Trig_L P1OUT&=~BIT0 uint TA_Over_Cnt;//TA溢出次数存放变量 unsigned long int Period;//脉宽存放结果变量 unsigned long int S; uint distance; uint RiseCapVal;//上升沿时刻捕获值存放变量 uchar Edge=1;//当前触发沿 uchar disbuff[4]="0.00"; void Init_clock() {    uint i;    BCSCTL1=0X00;//将寄存器的内容清零                //XT2振荡器开启                //LFTX1工作在低频模式                //ACLK的分频因子为一    do    {      IFG1&=~OFIFG;      BCSCTL2|=SELM_2+SELS;//设置MCLK 和SMCLK为8M      for (i=0x20;i>0;i--);       }     while((IFG1&OFIFG)==OFIFG);//如果OSCFault=1    BCSCTL2=0X00;//将寄存器的内容清空    BCSCTL2+=SELM1; //MCLK 的时钟源为TX2CLK,分频因子为1    BCSCTL2+SELS;//SMCLK TX2CLK的时钟源为TX2CLK,分频因子为1 } void Init_IO()//I/O口初始化函数 {   P1DIR|=BIT0;//P1,0 口作为Trig输出口   P1DIR&=~BIT1;//P1,1 口作为Echor输入口   P1SEL|=BIT1;//P1,1 口为 Echor第二功能开启   Trig_H;   delay_ms(1000); } void Init_TimerA() {    TACTL|=TASSEL_2+MC_2+ID_3;//,连续计数SMCLK    TACCTL0 |=CAP+CM_1+CCIS_0+SCS+CCIE;//捕获模式开启,CCI1 } void main () {     WDTCTL=WDTPW+WDTHOLD;//关闭看门狗   Init_clock();   Init_TimerA();   Init_IO();   TACCTL0 |=CAP+CM_1+CCIS_0+SCS+CCIE;//CCI1A   _EINT();   while(1)   {       P1OUT|=BIT0;       delay_ms(10);       P1OUT&=~BIT0;               } }   #pragma vector=TIMERA0_VECTOR   __interrupt void Timer_A(void)   {     switch(TAIV)     {          case 0: if(Edge==RISE)               {                 RiseCapVal = TACCR0;                                                                                                           TACCTL0 |= CAP+CM_2+CCIS_1+SCS+CCIE;//改为下降沿捕获                 Edge = FALL;//下降沿捕获标志               }              else               {                                _DINT();                             Period = TACCR0-RiseCapVal;                 S=(Period*17)/100;                 TACCR0 = 0;                 TACCTL0|= CAP+CM_1+CCIS_1+SCS+CCIE;//改为上升沿捕获                 Edge = RISE;//上升沿捕获标志                   _EINT();               }                  break;            case 10: TA_Over_Cnt++;_EINT();                  break;       }          }
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 买的时候卖家没给资料,超声波模块是HC_R04
    程序改了之后在示波器上能测出来,但是加了12864显示后不能显示出来,附件是我写的程序,请您指点一下,谢谢了!!!
    • 发布于 2013-05-24
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • 把你使用超声波模块的资料发来,也好让大家帮你参谋一下。
    • 发布于2013-05-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 今天就找老板要了这么点资料
    • 发布于2013-05-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 拿51的驱动改,主要是MSP430的定时器,搞定这个就行了
    • 发布于2019-03-13
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

求指点MSP430F149驱动超声波模块程序,不能正常工作