智能车制作

标题: 开定时器让for循环中的程序跑不了 [打印本页]

作者: qqhengg    时间: 2012-7-4 17:04
标题: 开定时器让for循环中的程序跑不了
本帖最后由 qqhengg 于 2012-7-4 17:11 编辑

    我遇到了一个很让我无法解释的问题,我在TIM初始化中用了一个脉冲累加,还有一个定时器中断。定时器采用的是溢出中断,主函数的for循环是点亮端口D的程序。最后,下载程序并且点击运行,结果显示各部分都正常,串口发送编码器采样值正常,LED正常,定时中断也正常,总之,和我预期的效果一样。   可问题是,当我把下载器拔掉直接用电池供电就不正常了,主函数中的for循环没有执行,也就是LED没有闪,但是其他部分都正常,串口还是正常发送。

   我检查了很久,电源绝对是没有问题的,我换了几种电源都不行,包括USB供电。最后无奈之下我注释了TIM初始化的语句,发现正常了(我的时钟频率是32M).现在我实在是有点不解,为什么用BDM的调试的时候可以,接上外接电源就不行了。
  求高手解答,谢谢!!!

  PS(TIM初始化程序):
void TIM_Init(void)           //函数作用:IOC(输入捕捉)初始化
{
    TIOS_IOS7 = 0;             //设置IOC7输入  
    OC7M_OC7M7 = 0;            //输出比较用(输入时无用)
    TCTL1_OM7 = 0;             //关闭输出
    TCTL1_OL7 = 0;                                    
    PACTL_PAEN = 1;            //使能输入捕捉的计数功能
    PACTL_PAMOD = 0;           //PACTL_PAMOD = 0与PACTL_PEDGE = 0共同确定下降沿捕捉
    PACTL_PEDGE = 0;           //PACTL_PAMOD = 0与PACTL_PEDGE = 0共同确定下降沿捕捉
    PACTL_PAOVI = 0;           //关闭溢出中断
    PACTL_PAI = 0;             //关闭输入捕捉中断
    TSCR1_TFFCA = 1;           //清除输入捕捉标志位
    PACNT = 0;                 //计数器清零

    TSCR2 = 0x87;          //定时器溢出中断部分
    TSCR1_TEN = 1;
    TFLG2_TOF = 1;
    TIE_C0I = 1;
    TFLG1_C0F = 1;
    TCNT = 65035;   
}


#pragma CODE_SEG NON_BANKED
void interrupt 16 Timer_ISR(void)
{
         ........ //相关代码
}



作者: happyonolne    时间: 2012-7-7 10:25
是因为定时器的中断标志未能完全清除
作者: qqhengg    时间: 2012-7-10 16:56
happyonolne 发表于 2012-7-7 10:25
是因为定时器的中断标志未能完全清除

哦,忘了告诉你,我在中断服务函数里面已经清除了中断标志位!





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2