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

[求助]输入捕捉问题

[求助]输入捕捉问题

  我做了 一个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的延时功能该如何设置?
  望版主指点!


 

妞,我一无所有,你何时跟我走?
你可以先试试加上大的电容滤波,从硬件上改善波形后,情况有什么变化。
海纳百川  有容乃大
返回列表