Problem mit RS232-Code

#229757
Lesenswert?

Mahlzeit!
Ich habe hier folgenden Code, um ein paar Bytes (0..8) über die
serielle Schnittstelle zu schicken.
Der Controller ist ATMega162. Programmiert ist das mit dem avrgcc
Das Problem an der Sache ist, beim Empfänger kommt nur 0x00 an. Die
Anzahl stimmt, aber der Inhalt ist falsch.
Die Bytes (momentan Testweise durch 0xFF ersetzt,) sollen periodisch
übertragen werden, bis sich die Gegenseite meldet.
Kann mir bitte jemand sagen, wieso da nur 0x00 übertragen wird?

Vielen Dank im Vorraus
Rahul

UBRR1H = (unsigned char) (ubrval >> 8);
UBRR1L = (unsigned char) ubrval;
UCSR1B = ((1<<RXEN1) | (1<< RXCIE1) | (1<<TXEN1));
UCSR1C = ((1<<UCSZ11) | (1<<UCSZ10));

do
  {
    // LED togglen
    if ((PORTD & rot) == rot)
    {
      PORTD &= ~rot;
    }
    else
    {
      PORTD |= rot;
    }
    for(i=0;i<=8;i++)
    {
      while (!(UCSR1A & (1<<UDRE1)));
      UDR1 = 0xFF; // SendBuffer[i];
    }
    for(i=0;i<255;i++)
      for(j=0;j<100;j++)
        for(k=0;k<20;k++);
  }
  while (ComplMsg !=0xFF);
#229766
Lesenswert?

Es hat mich gewurmt.
Aber, es funktioniert. Und wie immer ist das Datenblatt dein Freund.
Atmel hat in seinen USART-Beispielen ganz wunderbar aufgeführt, welche
Bits gesetzt werden müssen.
Ich hatte das URSEL-Bit vergessen.
Damit unterscheidet der Controller zwischen dem UCSRC- und dem
UBRRH-Register.

Jetzt läuft zumindest die Initialisierung...

Auch wenn ich alleine draufgekommen bin, danke ich euch für die Hilfe.

Gruß Rahul
Gast #229767
Lesenswert?

Stimmt, von Prozessor zu Prozessor kann´s da schonmal diverse
Unterschiede geben. Deshalb ist es immer recht sicher, bei Fragen genau
das zu checken, was in dem Datenblatt des einen Prozessors steht, den
man gerade benutzt. Sind nicht alle gleich.... ist mir anfangs auch
passiert, jetzt gucke ich vor ´jedem Programmierproblem lieber nochmal
nach, weil alles kann man sich einfach nicht merken.

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