Forum: Mikrocontroller und Digitale Elektronik senden über uart


von jimmii (Gast)


Lesenswert?

Hi,
ich möchte mit folgenden programm über die uart den untenstehenden
wert ausgeben leider haut das mit keil nicht hin.


#include <reg_c51.h>
char uart_data;
void main (void)
{
  SCON = 0x50;
  TMOD = 0x20 ;
  TH1  = 0xF3;
  TL1  = 0xF3;
  ES = 1;
  EA = 1;
  TR1 = 1;

while(1)

{

      SBUF = "fgh";
}
}

von Rahul (Gast)


Lesenswert?

>SBUF = "fgh";
Was soll ein ein-Byte-grosses Register mit einem String (Ansammlung von
Bytes)? Richtg: Passt nicht!

von johnny.m (Gast)


Lesenswert?

Wenn Du in SBUF ständig was reinschreibst (was zudem noch gar nicht
reinpasst, SBUF ist nur 8 Bit breit) und nicht mal wartest, bis es
gesendet wurde, dann kann nix ankommen. Bitte beschäftige Dich erst mal
eingehendst mit den Grundlagen.

von jimmii (Gast)


Lesenswert?

ok geht dann das?
#include "header.h"

char uart_data;


void main (void)
{
  SCON = 0x50;
  PCON |=  0x50;
  TMOD =  0x20 ;
  TH1  = 0xFD;
  TL1  = 0xFD;
  ES = 1;
  EA = 1;
  TR1 = 1;


while (1)
{
if (RI == 1)
  {
    RI = 0;
    uart_data = SBUF;
    TI = 1;
    SBUF = uart_data;
  }
  else TI = 0;

}

von Karl H. (kbuchegg)


Lesenswert?

Sag mal: Sind mit dem Compiler keine Demos mitgekommen?

Ansonsten:
Schau mal ins ACR-gcc Tutorial. Ich weiss was du sagen willst:
Ich hab aber Keil. Schon. Aber im AVR-gcc Tutorial sind
auch die Grundlagen über USART-Behandlung drinnen. Die
Register heissen bei dir etwas anders, aber das Prinzip
wie das Teil funktioniert ist dasselbe (Kunststück: liegt
ja auch dieselbe Hardware drunter). Du hast noch nicht
verstanden wie das ganze 'im Prinzip' abläuft.

von Lupin (Gast)


Lesenswert?

ich glaube nicht, dass er einen AVR programmiert. Ich hab keine ahnung
was RI oder TI ist.

von Rahul (Gast)


Lesenswert?

[Werbung]
"Mikrocontroller-Kochbuch" von Andreas Roth. Für mich DIE
8051er-Bibel. Grundlagen von A-Z.
[/Werbung]

von peter dannegger (Gast)


Lesenswert?

Sollte gehen.
Das TI brauchst Du nicht, wenn Du es nicht testest.

Damit man weiß, daß wirklich die UART benutzt wird und kein Kurzschluß
ist, kann man folgendes machen:
1
while (1)
2
{ 
3
if (RI == 1) 
4
  {                         
5
    RI = 0;
6
    SBUF = SBUF + 1;
7
  }
8
}

Dann kriegst Du immer das nächst höhere Zeichen zurück (A->B usw.).


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.