tan_zhichao 发表于 2008-4-14 10:58:15

关于atmega128输入捕获功能遇到的一个奇怪问题

请问马老师这个问题是怎么回事啊?
我的目的是在输入捕获1来四次外部事件(我是用传感器来检测轮毂上的四个铁柱用到了输入捕获功能),采用下降沿或上升沿都有问题,就是我本来是每检测到一次铁柱(每来一次输入捕获)我进行下液晶显示,通过count计数来记捕获次数(也是验证了检测到的铁柱数),但是不稳定啊 ,比如我触发一次,在一行显示了,但再出发一次它要么就在第三行显示要么就是还是第一行或者第二行,总之是不稳定的,我现在用的触发方法是用输入捕获引脚通过跳线手动碰地,即给个下降沿,应该没太大影响吧,下面是我的程序大概意思,我不知道哪出毛病了,谢谢您了



#include <iom128v.h>       
#include <macros.h>
#include <delay.h>       
               
voidOSCAPISR_Handler (void);
charcount=0;

#pragma interrupt_handler OSCAPISR:12

void OSCAPISR (void)
{   
TIFR|=0x20;
count++;
SEI();

}



static void CAP_Init(void)
{
   DDRD&=~0x10;//输入捕获引脚设置为输入
    PORTD=0x10;//必须上拉
   TCCR1B=(1<<ICES1)|(1<<ICNC1);//上升沿触发或下降沿触(发都会产生我想要问的问题)
    TCCR1B=0x80;//
   TIFR|=0x20;//清中断标志
   TIMSK=(1<<TICIE1);//允许输入捕获
}




void main(void)
{
        CLI();                                         
        CAP_Init();
        SEI();
while(1)                                                       
        {
          switch(count)
          {
          case 1:
       // 液晶第一行显示
          break;
          case 2:
          // 液晶第二行显示;
          break
          case 3:
          // 液晶第三行显示;
          break;
          case 4:
          // 液晶第四行显示;
          break;
          default :break;

        }
}

machao 发表于 2008-4-14 18:55:36

"通过跳线手动碰地"有抖动,实际产生多次中断.

看了你的代码,认为你可能还不了解输入捕捉功能应该如何正确使用.建议你下载11章内容,里面有该功能使用的例子.

tan_zhichao 发表于 2008-4-14 22:12:17

恩,知道了,谢谢您马老师,我回去好好看下书

yinhe 发表于 2008-5-4 18:01:32

记号
页: [1]
查看完整版本: 关于atmega128输入捕获功能遇到的一个奇怪问题