-
-
Neuer Benutzer
Öfters hier
Hi D´oh,
wie Du schon sagst, war die Baudratenberechnung das Problem.
Ich habe das Programm nach Hilfestellung im Mikrocontroller-Forum etwas abgeändert und nun läuft das wie gewünscht:
#include <avr/io.h>
#include <inttypes.h>
/* CPU Frequenz */
#define F_CPU 1000000UL //Frequenz 1 Mhz
#define BAUD 9600UL //Baudrate
// USART initialisieren
void uart_init(void)
{
// Baudrate einstellen (Normaler Modus)
#if F_CPU < 2000000UL
UCSRA = (1 << U2X);
UBRRL = F_CPU / (8 * BAUD) - 1;
#else
UBRRL = F_CPU / (16 * BAUD) - 1;
#endif
// Aktivieren von receiver und transmitter
UCSRB = (1<<TXEN) | (1<<RXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
int main(void)
{
uint8_t buffer;
DDRA=0xff; //Port A als Ausgang
// USART initialisieren
uart_init();
while (1)
{
// Warten bis Daten empfangen wurden
while ( !(UCSRA & (1<<RXC)) );
// Empfangsregister auslesen
buffer = UDR;
if(buffer==0x31) //Wenn der PC das Zeichen "1" sendet,
PORTA=0x01; //dann die erste LED ausschalten
else //sonst
PORTA=0x00; //alle LED´s ein
// Warten bis der Sendepuffer frei ist
while ( !( UCSRA & (1<<UDRE)) );
// Daten in den Puffer schreiben und damit senden
UDR = buffer;
}
return 0;
}
Grüße
Leuchtturm
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen