mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik µC Programm


Autor: Michael Sauter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kein Anhang...

Autor: Michael Sauter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

liegt doch nicht als Dateianhang vor versuche es diesesmal.

danke mfg Michael

Autor: Thorsten (Gast)
Datum:

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

Autor: Michael Sauter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: chriss chd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
*******

Autor: Michael Sauter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Sauter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.