我做了 一个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的延时功能该如何设置?
望版主指点!
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |