Gast
#2225254
Hallo liebe Forenuser,
Ich wende mich an euch weil ich im Moment ein bißchen verzweifel.
Habe ein Programm welches zum Test der UART gedacht ist damit ich nur
sehen kann ob es als Interrupt läuft und ich daten empfange.
Hier das Programm:
#define F_CPU 16000000UL // µC Frequenz
#define USART_RXC_vect _VECTOR(14)
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
// Baudrate einstellen (Normaler Modus)
UBRRH = 0x00;
UBRRL = 0x67;
// Aktivieren des Empfängers, des Senders und des "Daten
empfangen"-Interrupts
UCSRB |= (1<<RXCIE | 1<<RXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC |= (1<<URSEL | 1<<UCSZ1 | 1<<UCSZ0);
DDRB |= (1<<DDB0 | 1<<DDB1); //PB0 und PB1 = Ausgang
sei(); //Global Interrupt Enable Bit im StaturRegister setzen
while (1)
{
//LED blinken
PORTB |= (1<<PORTB1);
_delay_ms(100);
PORTB &= ~(1<<PORTB1);
_delay_ms(100);
}
return(0);
}
ISR(USART_RXC_vect)
{
PORTB |= (1<<PORTB0);
PORTB &= ~(1<<PORTB0);
}
Mein Problem ist jetzt:
Das Programm läuft und die LED PORTB1 blint schnell.
Wenn ich daten über die RS232 schicke merkt man das der Interrupt
aufgerufen wird. LED PORTB0 ist sehr schwach an.
Jetzt das komische. Die LED PORT0 bleibt schwach an und LED PORTB1
blinkt mindestens um die hälfte langsamer.
Wie kann das sein?
Ich habe das gefühl das der µC jetzt immer in den Interrupt springt,
obwohl er keine daten mehr empfängt.
Kann mir einer helfen?
Danke.
MFG Alsastro