标题: 新手求助MSP430单片机定时器时间不准问题 [打印本页]

作者: mming    时间: 2018-9-15 11:42
标题: 新手求助MSP430单片机定时器时间不准问题
       请教坛里各位资深前辈、老师们,帮我看看为什么我配置的定时器时间不准,开发板是149,高速晶体为8M,P2.7连接LED,利用定时器A实现每隔num2秒,LED翻转一次。现在的问题就是如果计数模式我设置成MC_1增计数,定时器直接进不了中断,或者只能进入一次,再就是我配置为连续计数模式后,主程序里放的位置不同,LED的闪烁时间就不同,不知道什么原因,在此感激各位前辈!
    void main()
{
  WDTCTL = WDTPW + WDTHOLD;
  CLOCK_Init();
  PORT_Init();
  /*  TACTL = TASSEL_2 + ID_3 + MC_2 + TAIE + TACLR;        //    这段注释的定时器配置放在此处和放在主程序while()里,
      CCTL1 = CCIE;                                                                //    P2.7端口LED的闪烁时间不一样
      CCR1 = 9999;    */
  _EINT();

  while(1)
  {
    TACTL = TASSEL_2 + ID_3 + MC_2 + TAIE + TACLR;       // 8M 晶体   8分频    连续计数   
    CCTL1 = CCIE;                                                               
    CCR1 = 9999;                                                         //  CCR1 为 定时0.01秒
    KEY_SCAN();                                                          //按键检测
    KEY_service();                                                        //按键服务函数
    Display_service();                                                    //显示服务函数
    Display();                                                               //显示函数
    if(t == num2)                                                        //num2 是时间设定显示函数里的变量,可以任意取值,num2 =1就是1秒,等于X就是X秒
    {
      t=0;
      P2OUT ^= BIT7;
    }

  }
}

#pragma vector = PORT1_VECTOR      // P2.0中断函数
__interrupt void P1_Interrupt()
{

    P1IFG=0X00;
    PULSE++;
    P2OUT ^= 0X01;
    _DINT();
}

#pragma vector = TIMERA1_VECTOR
__interrupt void TIMEA1()
{
  switch(TAIV)
  {
  case 2:   t++;  if(t>num2) t=0;  break;
  case 4:   break;
  case 10:  break;
  }

}





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1