¿Cómo deshacerse de “Código de operación no válido 0x002A en PC = 0x004” en ISIS Proteus?

1

He usado ATmega 8 y he simulado un circuito para usar interrupciones, cuando doy una interrupción externa, es decir, cuando se presiona un botón pulsador, todos los LED conectados a PORTB se supone que están encendidos, pero aparece este error. ¿que hacer? Este es el código que he usado

#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>
#define F_CPU 4000000UL
#define DataDDR     DDRB


#define DataPort    PORTB
ISR(INT0_vect)
{
    unsigned char i, temp;

    _delay_ms(500); // Software debouncing control

    temp = DataPort;    // Save current value on DataPort

    /* This for loop blink LEDs on Dataport 5 times*/
    for(; ; )
    {

        DataPort = 0xFF;

    }

    DataPort = temp;    //Restore old value to DataPort 
}   

int main(void)
{
    DDRD = 1<<PD2;      // Set PD2 as input (Using for interupt INT0)
    PORTD = 1<<PD2;     // Enable PD2 pull-up resistor

    DataDDR = 0xFF;     // Configure Dataport as output
    DataPort = 0x01;    // Initialise Dataport to 1

    GICR = 1<<INT0;                 // Enable INT0
    MCUCR = 1<<ISC01 | 1<<ISC00;    // Trigger INT0 on rising edge

    sei();              //Enable Global Interrupt

    while(1)
    {
        if(DataPort >= 0x80)
            DataPort = 1;
        else
            DataPort = DataPort << 1;   // Shift to the left

        _delay_ms(500); // Wait 5 seconds

    }
}
    
pregunta user75736

0 respuestas

Lea otras preguntas en las etiquetas