首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

定时器中断问题

定时器中断问题

我用的芯片是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的也被清除了。
大家有没有遇到相同的问题?是怎么解决的?
搞定了,芯片手册说,清除定时器中断时不能用位指令和逻辑指令之类的装载-修改-存储指令,而应该直接向寄存器写值,即不能用PITTF_PTF0 = 1ITTF |= 0x01;这样的指令,而应该直接用PITTF = 0x01;
返回列表