[AVR单片机] 求助,用INT0和T0配合测量脉冲宽度?

[复制链接]
 楼主| cctv 发表于 2007-1-20 01:24 | 显示全部楼层 |阅读模式

 如题,方波送入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(); 远大于脉冲周期,则采回来的数据完全不对!参差不齐! 

求教,问题在哪里? 
wenlw 发表于 2007-1-20 17:13 | 显示全部楼层

用输入捕捉

用输入捕捉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

2

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部