Hallo Forum,

möchte ein Byte von der seriellen Schnittstelle eines PC auf einen Atmega32 mit einem Interrupt übertragen.

Die Interruptroutine bleibt in der gekennzeichneten Stelle //verharrt hier stehen und die Variable Empfang wird nicht mehr auf 1 gesetzt.

Die Wertzuweisung a = UDR; arbeitet im Pollingbetrieb einwandfrei, auch Hardwareinterrupts funktionieren.

Umgebung: RN-Control 1.4, Ausgabe auf 8 LEDs, AVR-Studio 4.18. Suche im Forum und Tutorials waren leider nicht hilfreich.

Wo soll ich weitersuchen?

Danke für die Antworten.



#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>

unsigned char a;
unsigned char empfang = 0;

ISR(USART_RXC_vect){

//PORTC = ~'D'; //verharrt hier während des delay

a = UDR;
empfang = 1;
}

int main(void){

sei();
//Schnittstelle parametrisieren
UBRRH = 0;
UBRRL = 51;
//Empfang, Senden, Empfangsinterrupt
UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
//Defaultwerte zementieren, 8N1
UCSRC |= (1<<URSEL) | (3<<UCSZ0);

DDRC = 0xff;


while(1){

PORTC = ~empfang; //wird nicht ausgeführt
_delay_ms(1000);

PORTC = ~'E'; //wird ausgeführt
_delay_ms(1000);

if(empfang){


PORTC = ~a;
empfang = 0;
}
}
}