Frage zu Endloschleifen und Bitmanipulatoren [gelöst]
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 8-[ .
Danke im Vorraus.
Re: Frage zu Endloschleifen und Bitmanipulatoren
Zitat:
Zitat von exile
Frage 1:
Aus welchem Grund liefert mir (1<<0x00) eine 1 also 0x01?
Diese expression bewirkt, daß die Zahl 1 um Null Bits nach links geschoben wird. das ergibt, klaro, wieder eins.
frage 2 muß ich mir erst anschauen