找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1925|回复: 0
打印 上一主题 下一主题
收起左侧

新手求助MSP430单片机定时器时间不准问题

[复制链接]
跳转到指定楼层
楼主
ID:388338 发表于 2018-9-15 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       请教坛里各位资深前辈、老师们,帮我看看为什么我配置的定时器时间不准,开发板是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;
  }

}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表