如题,方波送入INT0,我想通过测量两个下降沿的时间间隔(T0)来计算脉冲的频率。因为需要逐个逐个的分析然后分类,所以不采用统计的方法来计算频率。
曾经做过以下尝试,但结果怎么调试都不正常:
interrupt [EXT_INT0] void ext_int0_isr(void) {
if (plus_edge) { //是否第一个下降沿 plus_width=TCNT0; //不是,则读出T0 plus_readed=1 ; //标志,说明测量完毕. #asm("cli") //关闭中断 plus_edge=0;
}
else { TCCR0=1; //是第一个下降沿,则启动T0
plus_edge=1; //标志说明已不是第一个
}
}
main() {
.......... if (plus_readed) { ................ putchar(plus_width); plus_readed=0; plus_edge=0; #asm("sei") }
functionb();
}
问题如下: 1 如果functionb(); 执行周期小于脉冲宽度,则软件仿真正确,可是在M16上执行(无JTAG),输出的数据完全不对
2 如果FUNCTIONB(); 远大于脉冲周期,则采回来的数据完全不对!参差不齐!
求教,问题在哪里? |