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
Hallo, liegt doch nicht als Dateianhang vor versuche es diesesmal. danke mfg Michael
Was heißt, "funktioniert nicht"? Wird garnichts am POrt ausgegeben oder etwas falsches?
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
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
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; *******
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.