TI中文支持网
TI专业的中文技术问题搜集分享网站

蜂鸣器有的子函数中能驱动有的却不可以,专家给指导一下吧

各位工程师,您好!我的程序流程大概是这样的:上电后MCU先进入LMP4,然后在P1.6的按键中断中退出LMP4,speak()(蜂鸣器函数)响一声,之后开启SD24中断,并且若有P1.7中断,则调用cal()函数,同时speak()使蜂鸣器响一声,在cal()中如果有CASE TRUE,则speak()调用两次,即蜂鸣器响两声。

我遇到的问题是:P1.6中断后,蜂鸣器可以响一声,而之后的再调用speak()时,蜂鸣器根本不响,但但这个函数还可以单步运行(在线测试过)!我把部分代码粘贴在下方,希望您不吝赐教,帮忙解决下,非常感谢!

代码:

蜂鸣器函数:

void speak()

{

  unsigned char si;

  P1DIR|=BIT4;

    P1OUT|=BIT4;

       for(si=0;si<200;si++)

       {

         delay_us(200);

         P1OUT^=BIT4;

       }

       P1OUT|=BIT4;  

}

部分主函数: WDTCTL=WDTPW+WDTHOLD;                        //关闭看门狗

  InitialToLMP4();                             //进入低功耗前的初始化函数

  speak();

  __bis_SR_register(LPM4_bits + GIE);          //开机就进入低功耗LMP4模式

  speak();

  Initial(); //单片机初始化 

  //while(1);

  SD24CCTL0 |= SD24SC;//开始AD转换

  _EINT();

  delay_ms(100);//保证完成一次ad采集

  while(1)

{

…………

}

按键中断:#pragma vector=PORT1_VECTOR

__interrupt void Port_1(void)

{

  switch(P1IFG&0xC0)

  {

  case 0x40:

    __bic_SR_register_on_exit(LPM4_bits);

    P1IFG &= ~BIT6;

    Speak();//可以响

    if(status==1)

    {  

      OutLMP4();

    }

    break;

  case 0x80:

    P1IFG &= ~BIT7;

    speak();//蜂鸣器不响

    Cal();

    break;

  default:

    P1IFG = 0x00;

    break;

  }

  

}

SD24初始化及其中断:

  SD24CTL = SD24XDIV_3+SD24DIV_3+SD24SSEL_1+SD24REFON  ;//

         //二级48分频,一级8分频,ad时钟选为SMCLK=mclk,启用内部参考电压

  SD24INCTL0 = SD24INTDLY0+SD24GAIN_2+SD24INCH_0;

      // Interrupt on 3rd sample,AD Gain: 2 AD通道选择A0

  SD24CCTL0 = SD24UNI+SD24OSR_1024+SD24IE; 

      //单极模式,连续转换、过采样1024点,Enable interrupt

#pragma vector = SD24_VECTOR

__interrupt void SD24ISR(void)

{

  unsigned int out=0;

  switch(SD24IV)

  {

  case 2:

    break;

  case 4:

    out=SD24MEM0;//结果是16位

    break;

  case 6:

    break;

  case 8:

    break;

  default:

    break;

  }

gaoyang9992006:

上电后MCU先进入LMP4,然后在P1.6的按键中断中退出LMP4,speak()(蜂鸣器函数)响一声,之后开启SD24中断,并且若有P1.7中断,则调用cal()函数,同时speak()使蜂鸣器响一声,在cal()中如果有CASE TRUE,则speak()调用两次,即蜂鸣器响两声。

********************************************************************************************

根据你的描述,原因是,后面根本没有进入中断程序,前面的那个1.6的进去了,而后面的1.7的没有进去。

bin jiao:

回复 gaoyang9992006:

谢谢您的回答,不过中断可以进去,在线测试过

赞(0)
未经允许不得转载:TI中文支持网 » 蜂鸣器有的子函数中能驱动有的却不可以,专家给指导一下吧
分享到: 更多 (0)