我做了 一个MC9S12D64的输入捕捉程序,想实现输入下降沿脉冲捕捉.下降沿脉冲通过按键实现.定义全局变量num用来记录脉冲的次数.程序如下
int num; /*****************IC中断处理程序***************/ #pragma CODE_SEG NON_BANKED void interrupt 8 ECT_ISR(void) { num=num+1; } #pragma CODE_SEG DEFAULT /********************IC初始化*********************/ static void IC_init(void) { TIOS = 0x00; // 设置为IC DLYCT=0X03; // 延迟1024个P时钟 TCTL4 = 0x02; // 下降沿捕获 OC7M =0X00; // 屏蔽位无效 TSCR1 = 0X90; // 定时器使能,标志位快速清除 TSCR2 = 0x0f; // 定时器溢出中断禁止 // TCRES清零,定时器自动运行 // 定时器分频系数为128 TIE = 0x01; // IC0允许中断 } /********************主程序*********************/ void main(void) { IC_init(); EnableInterrupts;
for(;;) {} }
调试程序的时候我在中断程序中设置断点,按下按键后程序能够正常进入中断,实现num正常加1,然后我把断点去掉,全速运行,再按下一次按键后停止程序,观察num变量,发现num变量的值竟然达到上万以上。 我分析是按键产生的抖动使得中断重复发生,但是我已经设置了输入延时,为什么中断次数还这么多?ECT的延时功能该如何设置? 望版主指点!
|