-
-
Erfahrener Benutzer
Fleißiges Mitglied
USART atmega32 mit Interrupt
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;
}
}
}
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen