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

2019-03-24 12:34发布

求指点MSP430F149驱动超声波模块程序,不能正常工作
#include <msp430f149.h>
#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;
      }     
   
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
dontium
1楼-- · 2019-03-24 17:03
 精彩回答 2  元偷偷看……
赵宇
2楼-- · 2019-03-24 18:02
< :TI_MSP430_内容页_SA7 --> 买的时候卖家没给资料,超声波模块是HC_R04
程序改了之后在示波器上能测出来,但是加了12864显示后不能显示出来,附件是我写的程序,请您指点一下,谢谢了!!!
赵宇
3楼-- · 2019-03-24 23:43
今天就找老板要了这么点资料

一周热门 更多>

相关问题

    相关文章