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;
}
}
}
Lesezeichen