Board logo

标题: 定时器中断问题 [打印本页]

作者: finewind    时间: 2010-5-21 12:51     标题: 定时器中断问题

我用的芯片是MC9S12XDP512,开了定时器0和1,定时器0的定时时长20ms,定时器1定时器200ms,也就是说,定时器1产生中断的时候定时器0也刚好产生中断,调试发现,无法进入定时器1的中断程序,进一步调试发现,只要朝寄存器PITTF写任意一个数,PITTF所有标志位就被清除了,以下是我调试时加的测试代码:
void interrupt 66 PIT0_Int(void)
{
  static byte count = 0;
  static byte temp1,temp2;
  temp1 = PITTF;      // 记录中断标志
  PITTF_PTF0 = 1;     // 清中断标志
  temp2 = PITTF;      // 记录中断标志
  count++;
  if(count == 10)
  {
     for(;;);    // 200ms时进入死循环
  }
}

调试结果是: temp1 = 3,temp2 = 0; 即在清除定时器0的中断标志时,定时器1的也被清除了。
大家有没有遇到相同的问题?是怎么解决的?
作者: finewind    时间: 2010-5-24 13:33

搞定了,芯片手册说,清除定时器中断时不能用位指令和逻辑指令之类的装载-修改-存储指令,而应该直接向寄存器写值,即不能用PITTF_PTF0 = 1ITTF |= 0x01;这样的指令,而应该直接用PITTF = 0x01;




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0