智能车制作
标题:
开定时器让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