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"; } }
>SBUF = "fgh";
Was soll ein ein-Byte-grosses Register mit einem String (Ansammlung von
Bytes)? Richtg: Passt nicht!
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.
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; }
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.
[Werbung] "Mikrocontroller-Kochbuch" von Andreas Roth. Für mich DIE 8051er-Bibel. Grundlagen von A-Z. [/Werbung]
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.