智能车制作

标题: PIT XS128 中断 [打印本页]

作者: baimengru    时间: 2013-3-26 23:35
标题: PIT XS128 中断
    #define  PITTIME  5000   //PITTIME用于设定PIT中断的响应周期Period = 1us*PITTIME

void PIT_Init(void)
{
  PITCFLMT_PITE  = 0;                 // 关闭定时器PIT,等设定参数过后再开启PIT,这样利于系统稳定
  PITCE_PCE0     = 1;                 // 开启定时通道0;
  PITMTLD0       = 48-1;              // 8位定时器初值设定   对应的时钟周期为1us 频率为1M
  PITLD0         = PITTIME - 1;       // 16bit定时器周期设定 周期为 PITTIME * 1us
  PITINTE        = 0x01;              // 开启定时通道0的中断
  PITCFLMT_PITE  = 1;                 // 启动定时器PIT

}

void main(void)
{
  System_Init();          //系统初始化

  DDRA  = 0xff;
  DDRB  = 0xff;
  EnableInterrupts
  while(1);

}


void interrupt 66 PIT0(void)
{
  PORTA = 0x00;
  delay_ms(50);  
  PORTA = 0xff;
  delay_ms(50);

}




我设定中断定时器为5ms.请问为什么我设定IO_A口拉低50ms测定IO_A电平依旧为占空比为50%
的方波,不是应该只为低电平么?
个人认为中断为主函数打断执行中断内部内容,然后再回到主函数,如果中断函数内语句超过中断响应时间,
则一直执行中断函数内部内容等于中断响应时间的语句。
即:此函数应该只执行PORTA=0x00;后执行延时函数50MS(由于下一次中断响应,则50ms未执行完毕,只执行5ms就执行下一次中断)。
即再次执行PORTA =0x00;。。。。。。。

希望 有没有理解的,给我答案。。。


作者: new_life    时间: 2013-3-27 11:47
哈哈 不会 表示~~我刚刚接触单片机 刚把板子弄完?灯天我在给你商量~~~
作者: 机遇    时间: 2013-3-27 12:14
没清中断标志位?
作者: baimengru    时间: 2013-3-27 20:34
嗯,确实。我以为PITTF自动清除标志位的。
理解错误。
作者: 空相救心    时间: 2013-8-19 13:49
中断里最好不要加延时,会引起程序死掉




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