Probleme mit UART

Gast #798316
Lesenswert?
• ▲
▼
Hallo, wollte eine UART bei einem ATMega8 einrichten und bin nachdem 
Tutorial auf der Hauptseite geangen. Das senden eines Zeichens klappt 
auch Problemlos,  jedoch will das Senden einer Zeichenkette nicht, da 
ich nur irgendwelche kryptischen Zeichen empfange.
Mein Code währe folgender:

#include <avr/io.h>

#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 
12000000"
#define F_CPU 12000000L    // Systemtakt in Hz, das L am Ende ist 
wichtig, NICHT UL verwenden!
#endif

#define BAUD 9600L          // Baudrate, das L am Ende ist wichtig, 
NICHT UL verwenden!

// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille

#if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu 
hoch!
#endif


void putc(char c)
{
  while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich 
*/
  {
  }

  UDR = c;                    /* schreibt das Zeichen x auf die 
Schnittstelle */
}

void puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        putc(*s);
        s--;
    }
}

int main(void)
{

  UCSRB |= (1<<TXEN);                // UART TX einschalten
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1

  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;

  puts('Hallo');

  return 0;

}

Wo ist das Problem?
#798325
Lesenswert?
• ▲
▼
Das Problem liegt hier:
1
  puts('Hallo');

In C werden in einfache Anführungszeichen '' einzelne Zeichen 
eingeschlossen 'a'. Ein String wird durch doppelte Anführungszeichen 
"Hallo" dargestellt. Daraus wird/das entspricht einem char-Array {'H', 
'a', 'l', 'l', 'o', '\0'}

P.S. bei der Ausgabe musst du in der Schleife natürlich den Pointer 
erhöhen, also s++

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren