UART mit C8051F410

Gast #3147505
Lesenswert?
• ▲
▼
Hi Leute

Ich bin neu hier und habe ein dringendes Problem.
Ich versuche die UART Slave Schnittstelle an meinem C8051F410 von 
Silicon Laboratories zum laufen zu bringen.
Da ich aber bis jetzt nur einmal was mit SPI gemacht habe, habe ich 
keine Ahnung wie ich das hinkriege.

Die Signale sind immer 8bit lang und haben zusätzlich ein Start und ein 
Stopbit also eigentlich 10bits. Dem Datenblatt habe ich entnommen, dass 
die Signale über die Crossbar ins Input shift register und von dort ins 
SBUF Register kommen. Allerdings schaff ichs nicht die da raus zu holen.
Deshalb wär ich froh wenn mir jmd sagen könnte wo und wie ich die Daten 
abholen kann.

Ich nehm mal an, dass meine Frage extrem dumm ist zumal der Controller 
noch acht andere register an der UART schnittstelle besitzt, aber ich 
hoffe ihr könnt mir trotzdem helfen.
PS: ich hab euch einen Ausschnitt aus dem Datenblatt zur UART 
Schnittstelle angehängt.

Danke im Voraus für die Antworten.
Angehängte Dateien:
Gast #3147562
Lesenswert?
• ▲
▼
Der UART beim 8051/8031 funtioniert immer gleich.
Sorge für eine Taktung, setze etwas in dein SBUF - Register und es wird 
rausgeschoben.

Was Du über die Crossbar sagst dreht sich rein um die Pins zur 
Außenwelt, die must du vorher definieren, damit dein TX-Pin auch wackelt 
-:)

Was meinst Du in dem Zusammenhang mit SPI ? SPI spielt doch hier gar 
keine Rolle !?
Gast #3147575
Lesenswert?
• ▲
▼
P.S. hab übersehen das Du eigentlich was empfangen willst.

Ich würde trotzdem vorschlagen erst mal was zu senden. (ist einfacher, 
Du kannst prüfen ob dein Portpin wackelt). Du kannst außerdem die 
Baudrate abschätzen mit der das Byte gesendet wird. Zum Empfangen 
braucht es etwas mehr, hier muß REN gesetzt sein und die Baudrate muss 
soweit stimmen, das die 10 Bit korrekt erkannt werden!

Gruß
#3150433
Lesenswert?
• ▲
▼
Der Empfang wir mit gesetztem RI-Flag angezeigt.
Also:
1
char Zeichen;
2
init_seriell();
3
...
4
if (RI==1)
5
{  // jetzt ist was in SBUF
6
   Zeichen = SBUF;
7
   RI = 0; // Flag wieder löschen
8
}

Wenn die serielle Schnittstelle korrekt konfiguriert ist, kann man auch 
einfach mit printf("Text") und gtechar()/putchar() arbeiten.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.