AVR interrupción de cambio de pin

1

Quiero encender los LED 0, 1 y 2 cuando se activan pinc1, pinc2 y pinc3. Además, quiero usar una interrupción de cambio de pin.

Problema: solo el LED 1 está encendido.

Este es mi código y estoy usando atmega328p y Proteus para simulación:

#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint8_t bemf = 0 ;
ISR(PCINT1_vect)
{

if (PINC & 00000010){bemf=1;}
if (PINC & 00000100){bemf=2;}
if (PINC & 00001000){bemf=3;}

}

int main(void)
{

DDRD = 0xFF ; 
PORTD = 0x00;
PCMSK1 |= 1<<PCINT10 | 1<<PCINT11 | 1<<PCINT9 ; // pinc1 pinc2 and pinc3
PCICR |= 1<<PCIE1 ;
sei();

while (1) 
{

  if (bemf==1){PORTD= 1<<PIND0;}  // TURN ON LED 0
  if (bemf==2){PORTD= 1<<PIND1;}  // TURN ON LED 1
  if (bemf==3){PORTD= 1<<PIND3;}  // TURN ON LED 2


}
}
    
pregunta Mourad

1 respuesta

2

la solución es usar esto

PINC & 0b00000010

en lugar de

PINC & 00000010
    
respondido por el Mourad

Lea otras preguntas en las etiquetas