AVR 倒计时器
AVR Countdown timer
我正在尝试使用主频为 8 MHz 的 ATmega32 制作倒数计时器。
我想使用 ATmega 计时器在按下开关时开始倒计时 8 分钟,输出应打开 8 分钟,当倒计时为零时,输出应关闭,倒计时返回到零。 (所有这些我都想在 16*2 LCD 上展示)。我知道我必须为此使用计时器,但我真的不确定该怎么做。有什么建议吗?
AVR 计时器是否可能造成这么长的延迟?
请不要生我的气(我不想通过回答我自己的问题来不尊重你们)。我曾尝试自己解决我的问题并且我已经做到了,这段代码有效谢谢你宝贵的时间回答我的问题。我已经发布了代码,以便新人可以从中受益。谢谢你的时间。
volatile uint16_t second_count = 0;
void init_timer1(void);
void init_timer1()
{
TCCR1B |= (1<<WGM12);//CTC mode
TCNT1 = 0;//initializing timer
OCR1A = 31249;//preloading timer so that it can count with 1 sec
TIMSK |= (1<<OCIE1A);//Timer compare A Match interrupt
TCCR1B |= (1<<CS12);//Starting timer and clock prescaler(256)
}
ISR(TIMER1_COMPA_vect)
{
second_count++;
if(second_count == 180)//turing the output on for 180 seconds on power on
{
PORTD |= (1<<PD6);
}
else
{
PORTD &= ~(1<<PD6);
second_count = 0;
}
}
int main(void)
{
init_timer1();
sei();
DDRD = 0xff;
PORTD = 0x00;
DDRB = 0x00;
PORTB = 0xff;
while(1)
{
}
}
我正在尝试使用主频为 8 MHz 的 ATmega32 制作倒数计时器。
我想使用 ATmega 计时器在按下开关时开始倒计时 8 分钟,输出应打开 8 分钟,当倒计时为零时,输出应关闭,倒计时返回到零。 (所有这些我都想在 16*2 LCD 上展示)。我知道我必须为此使用计时器,但我真的不确定该怎么做。有什么建议吗?
AVR 计时器是否可能造成这么长的延迟?
请不要生我的气(我不想通过回答我自己的问题来不尊重你们)。我曾尝试自己解决我的问题并且我已经做到了,这段代码有效谢谢你宝贵的时间回答我的问题。我已经发布了代码,以便新人可以从中受益。谢谢你的时间。
volatile uint16_t second_count = 0;
void init_timer1(void);
void init_timer1()
{
TCCR1B |= (1<<WGM12);//CTC mode
TCNT1 = 0;//initializing timer
OCR1A = 31249;//preloading timer so that it can count with 1 sec
TIMSK |= (1<<OCIE1A);//Timer compare A Match interrupt
TCCR1B |= (1<<CS12);//Starting timer and clock prescaler(256)
}
ISR(TIMER1_COMPA_vect)
{
second_count++;
if(second_count == 180)//turing the output on for 180 seconds on power on
{
PORTD |= (1<<PD6);
}
else
{
PORTD &= ~(1<<PD6);
second_count = 0;
}
}
int main(void)
{
init_timer1();
sei();
DDRD = 0xff;
PORTD = 0x00;
DDRB = 0x00;
PORTB = 0xff;
while(1)
{
}
}