Forum: Mikrocontroller und Digitale Elektronik µC Programm


von Michael Sauter (Gast)


Lesenswert?

Hallo,
ich wollte mal fragen ob mir beim Erstellen eines Programms für einen
µC geholfen werden kann.

µC Daten:
-Philips P89C51RD2HBP
-12 MHz Quarz

zu verarbeitende Daten:
-serielle Daten (TTL) Pegel
-Boudrate 9600 oder 4800

mein Programm (funktioniert nicht) liegt im Anhang vor. Was kann ich da
machen?

Ich möchte das serielle Eingangssignal ganz einfach am P2 Port
ausgeben. Also wenn z.B. über die serielle Schnittstelle eine 1
gesendet wird soll eine 1 an P2 anliegen (binär also 00000001).

Was muss ich an meinem Programm ändern?

danke mfg Michael

von Rahul (Gast)


Lesenswert?

kein Anhang...

von Michael Sauter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

liegt doch nicht als Dateianhang vor versuche es diesesmal.

danke mfg Michael

von Thorsten (Gast)


Lesenswert?

Was heißt, "funktioniert nicht"? Wird garnichts am POrt ausgegeben
oder etwas falsches?

von Michael Sauter (Gast)


Lesenswert?

Hallo,
es kommt gar nichts am Port an. Es ändert sich auch nichts wenn ich was
anderes sende. Dabei sollte der P2 sich ja immer dem seriellen Eingang
anpassen.

danke´mfg Michael

von Markus_8051 (Gast)


Lesenswert?

Hallo Michael,

mein letztes C-Programm ist schon etwas her, da ich gerade auf dem µC
Assembler bevorzuge (da weiß man immer, was passiert) aber ich versuch
es mal:

- char COMein[8];    Warum ein Feld von acht Zeichen? Ein einzelnes
Byte hätte hier genügt.

- TI=1;   Sowohl TI als auch RI werden von der Hardware gesetzt und
müssen per Software gelöscht werden. Ein Setzen dieser Flags per SW
macht keinen Sinn.

- if (TF1==1)     warum willst Du diese Schleife bei einem Überlauf von
Timer1 ausführen? Mehr Sinn würde es machen auf empfangene Daten zu
warten, also: if (RI==1)

- TF0=0;      Warum kommt hier auf einmal Timer0 ins Spiel?


Hoffe das hilft!
Markus_8051

von chriss chd (Gast)


Lesenswert?

welchen comilier verwendest du?
wenn ich mich nicht irre sollte folgendes tiny prg funktionieren
--------
#include <reg51.h>
#include <stdio.h>

void main()
{
char zeichen;
/*dass musst du selber kontrollieren ob die einstellungen richtig sind
hab schon lang nichts mehr mit der 51er zu tun, sieh einfach mal in den
sfr's und im datasheet nach ob das für 12MHz passt!*/
SCON=0x50;
PCON= PCON | 0x80;
TMOD=0x21;
TL1=249;
TH1=249;
TR1=1;

while (1)
 {
  zeichen = getchar();
  P2 = zeichen;
 }
}
----
*****
das sollte für t2 und 9600B@12MHz sein:
TR2 = 0;
TF2 = 0;
RCAP2L = 0xD9;
RCAP2H = 0xFF;
TCLK = 1;
RCLK = 1;
SCON = 0x50;
TI = 1;
RI = 0;
TR2 = 1;
*******

von Michael Sauter (Gast)


Lesenswert?

Hallo,
vielen vielen Dank für diese Tipps. Nur eine Frage habe ich noch:

wie soll ich das in das obige Programm einbinden?

das sollte für t2 und 9600B@12MHz sein:
TR2 = 0;
TF2 = 0;
RCAP2L = 0xD9;
RCAP2H = 0xFF;
TCLK = 1;
RCLK = 1;
SCON = 0x50;
TI = 1;
RI = 0;
TR2 = 1;

vielen dank mfg Michael

von Michael Sauter (Gast)


Lesenswert?

Hallo,

ich habs gerade mit dem Programm

#include <reg51.h>
#include <stdio.h>

void main()
{
char zeichen;
/*dass musst du selber kontrollieren ob die einstellungen richtig sind
hab schon lang nichts mehr mit der 51er zu tun, sieh einfach mal in
den
sfr's und im datasheet nach ob das für 12MHz passt!*/
SCON=0x50;
PCON= PCON | 0x80;
TMOD=0x21;
TL1=249;
TH1=249;
TR1=1;

while (1)
 {
  zeichen = getchar();
  P2 = zeichen;
 }
}

probiert, aber es liegen immer nur 5V an den P2 Áusgängen an, an was
kann das liegen?

danke mfg Michael

von Markus_8051 (Gast)


Lesenswert?

Na, ich weiß jedenfalls mal wieder, warum ich meinen µC lieber in
Assembler progge.....

Was liefert getchar() bzw gets() zurück, wenn gearde nichts an der
RS232 anliegt? Wahrscheinlich solltest Du wirklich warten, bis ein
Zeichen da ist, bevor Du es abholst! (Siehe meinen Beitrag weiter
oben)

Sonst schließ Deinen µC doch mal an ein Terminalprogramm an und schreib
das empfangene Zeichen direkt wieder raus, dann siehst Du schon mal, ob
die Einstellung der RS232 richtig sind:

zeichen = getchar();
putchar(zeichen);


CU,
Markus_8051

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.