tacy201 发表于 2007-3-16 16:15:03

使用模拟比较器来触发Time1输入捕捉的应用讨论

问几个问题,多指点:

1.模拟比较器来触发Time1输入捕捉,模拟比较器的中断是否有影响.

2.作模拟比较器输入时,不可使能内部上拉电阻吗.

zhxlx 发表于 2007-4-18 19:58:40

我今天用iccavr+proteus+m128调试模拟比较器来触发Time1输入捕捉,搞了一天也没弄好,请高手详解。

heihai001 发表于 2011-12-9 14:41:06

回复【1楼】zhxlx 星星之火
-----------------------------------------------------------------------

我也遇到了类似的问题。有没有高人指点啊?

starli 发表于 2012-9-9 17:31:27

同样的问题我也没搞定,求解,我这个程序可以进入中断一次,但第二次就进不去了。

#include "timer.h"

void        Timer1Init(void)
{
       
        TCNT1L = 0;
        TCNT1H = 0;
       
        ICR1L =0;
        ICR1H =0;
       
        //AIN0 连接到模拟比较器的正极输入
        //AIN1 连接到模拟比较器的负极输入
        ADCSRB = 0;               
        ACSR = ((1<<ACIC)|(1<<ACO));        //模拟比较器输入捕捉使能                        ACSR
        TCCR1A = 0;
        TCCR1B = ((1<<TCCR1B)|(1<<CS12));        //上升沿触发输入捕捉        , 系统时钟256分频

        TIMSK1 = (1<<ICIE1);        //输入捕获使能
        TIFR1|=(1<<ICF1);//清ICP中断标志

       
        sei();
}       



ISR(SIG_INPUT_CAPTURE1)
{
        countdat = 1;
       
       
        TIFR1|=(1<<ICF1);//清ICP中断标志

        // user code here
}


main.c
------------------------------------

unsigned int countdat = 0;

int main(void)
{
       
        _delay_ms(100);
       
        Timer1Init();
       
        UartInit(71);        //9600 - 8 - N - 1
       
        _delay_ms(100);
       
        UartPutStr("----- Project Test -----\r\n");
       
    while(1)
    {
      
                if(countdat == 1)
                {
                        UartPutStr("----- Test -----\r\n");               
                        countdat = 0;       
                }
               
                //_delay_ms(100);
                //TODO:: Please write your application code
    }
}

starli 发表于 2012-9-9 19:40:34

我的程序没问题,己调通,将 //_delay_ms(100) 改为 _delay_us(10); 即可正常运行。

我使用的是模拟比较器连接定时器。

zlw1987107 发表于 2013-11-10 20:40:12

proteus能仿真模拟比较器吗,我用proteus7.5仿真根本进入不了捕获中断,但ICP1做为输入捕获触发源时可以
页: [1]
查看完整版本: 使用模拟比较器来触发Time1输入捕捉的应用讨论