这是Timer的代码,它会在按下按钮(INT0)后启动,并在按下按钮一段时间后在Atmega128中复位。但是按下按钮一会儿,Timer会自动启动。在我看来,在释放按钮后,外部中断以某种方式激活。但我知道为什么?我将非常感谢您的帮助
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int a,b,c;
int main(void)
{ DDRA = 0xff;
DDRB = 0xff;
DDRC = 0xff;
DDRD = 0x00;
sei();
OCR1A = 0xFFFF;
TIMSK |= (1 << OCIE1A);
TCCR1A |= (1 << COM1A0);
TCCR1B |= (1<<WGM12);
EIMSK = (1 << INT0);
while (1)
{
int iggy;
iggy=iggy+1;
}
}
ISR (TIMER1_COMPA_vect) //When Timer interrupt activates, These actions will be taken
{
if(a==9)
{ a=0;
if(b==9)
{b=0;
if(c==9)
{ c=0;}
else
{ c=c+1;}
}
else
{b=b+1;}
}
else
{ a=a+1;}
PORTA = a;
PORTB = b;
PORTC = c;
}
ISR(INT0_vect) //When button is pressed it will start timer clock and if it pressed too long it will stop the clock and reset values
{
TCCR1B |= (1 << CS10);
_delay_ms(800);
if(PIND==0b00000000)
{
TCCR1B |= (0 << CS10);
a=0;
b=0;
c=0;
PORTA = a;
PORTB = b;
PORTC = c;
_delay_ms(1000);
}
}
答案 0 :(得分:0)
这是一个很晚的答案,但对于那些第一次见过的人: 作为外部中断的机械开关并不像它看起来那么简单。 机械开关导致弹跳,即一系列脉冲&#39;而不是一个简单的改变。 它可以通过硬件延迟或软件来解决。 有关详细信息,请参阅:http://www.instructables.com/id/Arduino-Push-Switch-Debouncing-Interrupts/