eh oui encore moi,cette fois ci je veux faire le prog suivant:
je pousse une fois sur BP=>la led clignote 5 fois,je pousse deux fois sur BP=>10 fois
et je pousse trois fois sur Bp=> 20 fois
voilà l debut de mon code,j'aimerai un peu d'aide cette fois ci et merci d'avance
- Code: Tout sélectionner
#include <avr/io.h>
#include <avr/interrupt.h>
enum etat_led { IDLE,etat_5,etat_10,etat_20 };
volatile unsigned char etat_led, prev_etat_led,BP,count;
int main(void)
{
DDRD |= (0 << PD2); //PD2 as input(INTO)
DDRB |= (1 << PB0); //PB0 as output(led)
PORTD |= (1 << PD2); //Pull-up on PD2
MCUCR |= ((1 << ISC01) | (1 << ISC11)); //downfront 1/0
GICR |= (1 << INT0); //enable INT0
TCCR1A |= ((1 << COM1A1) | (1 << COM1A1)); //CTCmode TIM1 channel A
TCCR1B |= ((1 << WGM12) | (1 << CS12)); //prescaler 256 & CTCmode
OCR1A = 19531.25; //Compare value @ 0,5s for 10MHZ
TIMSK |= ((1 << OCIE1A) | (1 << TOIE1)); //enable ovf & output compare A
sei();
}
ISR(INT0_vect)
{
}
ISR(TIMER1_COMPA_vect)
{
switch (etat_led)
{
case IDLE:
break;
case etat_5:
count=5;
if(count!=0)
{
PORTB ^=(1 << PB0);
count--;
}
break;
case etat_10:
break;
case etat_20:
break;
default:
break;
}
}
