Hallo allerseits,

da ich neu in der AVR-Programmierung bin, sind mit noch einigen Grundprinzipien unklar.

Frage 1:
Aus welchem Grund liefert mir (1<<0x00) eine 1 also 0x01? Dies bedeutet doch, dass 0x00 um eine stelle nach links geshiftet wird, wobei fehlende Vorgänger mit 0 aufgefüllt werden. Nach meiner Logik sollte in diesem Beispiel die 0x00 wieder resultieren.

Frage 2:
Ich habe ein Beispielprogramm für UART mit Interrrupts getestet. Es funktioniert prinzipiell:

Code:
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <libusart.h>

volatile unsigned char data;

SIGNAL (SIG_UART_RECV) {
        data = UDR;
        if (data == '0') {
            PORTB = 0x00;
            USART_transmit_string("LED off");
            USART_transmit('\n');
        }
        if (data == '1') {
            PORTB = 0xff;
            USART_transmit_string("LED on");
            USART_transmit('\n');
        }
}
int main (void) {
        USART_Init();
        DDRB = 0xff;
        sei (); 
    
        USART_transmit('\n');
        USART_transmit_string("Begruessungstext");
        USART_transmit('\n');

        for (;;) {} 
}
Das Problem ist jetzt, dass mein AVR die ganze Zeit "Begruessungstext" mir übermittelt, als wäre diese Zeile in der Endlosschleife.
Ich bitte um Hilfe und entschuldige meine Unwissenheit .
Danke im Vorraus.