使用模拟比较器来触发Time1输入捕捉的应用讨论
问几个问题,多指点:1.模拟比较器来触发Time1输入捕捉,模拟比较器的中断是否有影响.
2.作模拟比较器输入时,不可使能内部上拉电阻吗. 我今天用iccavr+proteus+m128调试模拟比较器来触发Time1输入捕捉,搞了一天也没弄好,请高手详解。 回复【1楼】zhxlx 星星之火
-----------------------------------------------------------------------
我也遇到了类似的问题。有没有高人指点啊? 同样的问题我也没搞定,求解,我这个程序可以进入中断一次,但第二次就进不去了。
#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
}
}
我的程序没问题,己调通,将 //_delay_ms(100) 改为 _delay_us(10); 即可正常运行。
我使用的是模拟比较器连接定时器。 proteus能仿真模拟比较器吗,我用proteus7.5仿真根本进入不了捕获中断,但ICP1做为输入捕获触发源时可以
页:
[1]