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.