µC Programm

Gast #175510
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
Gast #175515
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
Gast #175516
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;
*******
Gast #175517
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
Gast #175518
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
Gast #175519
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren