Gast
#4906556
Hallo,
ich verzweifle gerade an dem RX-Interrupt meiner USART0.
Ich nutze bei einem ATTiny841 die USART0 (RXD0 an PB2 und TXD0 an PA7).
Initialisierung:
#define F_CPU 8000000UL
#define BAUD 9600UL
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
#error Systematischer Fehler der Baudrate groesser 1% und damit zu hoch!
#endif
void UART_init(void)
{
UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
UCSR0C = (1<<UCSZ00) | (1<<UCSZ01); 8N1
UCSR0B |= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0);
}
meine Main:
int main(void)
{
DDRB = 0b00000101;
PORTB = 0b00000101;
DDRA = 0b00111111;
PORTA = 0b00100000;
UART_init();
sei();
while(1)
{...}
}
ISR:
ISR(USART0_RX_vect)
{
PORTA = 0b00000000;
}
Mittlerweile möchte ich in meiner ISR nur noch eine LED ausschalten um
zu schauen ob der µC noch da rein springt. Tut er nicht, und ich
verstehe nicht warum. Hab mit nem Oszi nachgemessen, die Daten liegen
definitiv an. Zusätzlich hab ich mal den INT0 getestet, da funktioniert
alles wie gewünscht. Weiß jemand Rat?