Hallo! Ich programmiere nun seit einigen Jahren die At90* und die AtMega Serie von Atmel. Nun möchte ich zusätzlich die Programmierung von 8051er lernen (ich habe meine Gründe dafür und will KEINE Diskussion über Vor- und Nachteile der genannten uC auslösen). Wie kann ich einen einzelnen Pin eines Ports als Ausgang oder Eingang definieren? Ich habe nur die Register P0-P5 gefunden. Bei den AVRs geht das über die Regsiter PORTx PINx und DDRx. Wie ist das bei den 8051ern gelöst? Ich habe leider keine Infos dazu finden können. (Wahrscheinlich fehlen mir nur die entsprechenden Stichwörter). Vielen Dank für eure Hilfe. Grüße Steffen
Hi Steffen, ist ganz einfach wie immer wenn man es weiß. Ausgang: MOV Port1, A Schreibt den Akku in den Port 1 Eingang: Mov P1, FF MOV A, P1 Funktioniert so: Ich setze die Port Pins auf 1 und lese danach aus. Das Setzen auf 1 muß nur einmal geschehen. Wenn ich eine 1 einlese ist der Eingabewert (bitweise) 1, wenn ich eine 0 zurücklese ist der Eingabewert 0. Kannste auch mit jedem Bit einzeln machen, also fünf Bits ausgeben und drei Bits einlesen oder so. Prinzipiell: Bits die ich einlesen will auf 1 setzen, dann Bit einlesen. Gruß und viel Erfolg Thomas
Hallo Thomas, danke für deine Antwort! Ich programmiere in IAR Embedden Workbench, also C. Aber das dürfte da ja keinen großen Unterschied machen. Sprich: Man setzt das Portregister (alle Eingänge auf 1, alle Ausgänge auf 0) Anschließend liest man das Portregister ein. Will man wieder einlesen, reicht es, dass Portregister zu lesen und die entsprechenden Bits auszuwerten. Will man die Ausgänge setzen, so setzt man diese wie gewünscht und die Eingänge wieder auf 1. Muss das Einlesen des Portregisters genau der nächste Befehl sein? Dann werden die Pins als Eingang / Ausgang gesetzt. Hab ich das so richtig verstanden? Danke nochmals!! Grüße Steffen
Es gibt nur ein Register für jeden Port. Wird dieses auf 0xFF gesetzt liegen alle Pins auf high (mit Pull-up). Wird jetzt ein Pin extern gegen Masse gezogen, wird auch das entsprechende Bit im Register low und man kann es auch so auslesen.
Der 8051 hat open-drain Ausgänge mit internen Pull-Up Widerständen. Deshalb kann er keine großen High-Ströme treiben (z.B. LEDs gegen VCC anschalten). Eine Richtungsumschaltung gibt es deshalb nicht. Gelesen wird immer von den Pins, geschrieben auf das Portregister. Das Portregister kann nicht direkt gelesen werden, wird aber bei ORL, ANL, XRL, SETB, CLR, JBC verwendet. Nach dem Reset sind alle Ports auf High und Du kannst sie als Eingänge benutzen. Bei P0 fehlen die Pull-ups und Du must extern welche anschalten, sobald P0 als Ausgang dienen soll. Neuere schnelle 8051-er (z.B. C8051Fxx-Serie, Philips LPC-Serie) können auch als Push-Pull Ausgagng geschaltet werden und dann größere High-Ströme liefern. Peter
Ich weiß zwar jetzt nicht welchen 8051 du verwendest, aber beim C515C von Siemens kann man direkt auf die einzelnen Bits des Ports zugreifen mit zb. SETB P4.1 CLRB P4.1
Hallo! Danke für die vielen Antworten! Ich verwende den AT89C51SND1 - als MP3 Player. Das Datenblatt sagt natürlich nur etwas über die eigenheiten des SND1 aus - nichts über die generelle Programmierung von 8051ern. Daher meine Fragen :-) Aber mit der Erklärung von Peter hab ichs jetzt voll verstanden. @Peter: Eine Frage noch zu deiner Antwort: "Das Portregister kann nicht direkt gelesen werden, wird aber bei ORL, ANL, XRL, SETB, CLR, JBC verwendet." Wie genau ist das gemeint? "MOV A, P1" so kann ich das Portregister doch einlesen, oder nicht? Grüße Steffen
@Hans: "Ich weiß zwar jetzt nicht welchen 8051 du verwendest, aber beim C515C von Siemens kann man direkt auf die einzelnen Bits des Ports zugreifen mit zb. SETB P4.1 CLRB P4.1" Was hat denn Deine Antwort mit Peters Aussage zu tun? Nichts. Lies Peters Antwort nochmal durch und schau ins Datenblatt des 8051ers.
Ich glaube, Hans' Antwort war mehr auf meine Fragen bezogen. Und er wollte wissen, was ich für einen 8051 er verwende ... Grüße Steffen
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.