Hallo zusammen! Wir gehn gerade die Ports des 8051 durch, laut angehängten Bild gibt es 4, aber wo sind die Ports? Im 8051-IC? Wo genau? Was haben diese für einen Sinn? Wir haben Übungen dazu gemacht z.B. ein Rechtecksignal darzustellen: SQUAREWAVE: MOV R2,#0 loop:CPL P1.3 DJNZ R2,loop RET Wo sehe ich das das Rechtecksignal? Was hat das mit einem Port zu tun? Viele Anfänger fragen, aber ich hab schon das Internet durchforstet, aber für mich nichts verständliches gefunden. Danke schonmal im voraus! mfg Mr Gast
Mr Gast schrieb: > Wo sehe ich das das Rechtecksignal? Öffne das Datenblatt, schaue unter Pinbelegung, welcher Pin der ominöse P1.3 ist und schließe dort das Oszi an. Peter
Zum Thema Ports bein 8051 gibt es bei ET-Tutorials.de eine Videos-Reihe. http://et-tutorials.de/mikrocontroller/ Speziell für die Funktiobsweise von Ports könnte DIr dieses Video helfen: http://et-tutorials.de/4339/lesen-aus-portpins/
Danke! Jetzt verstehe ich schon ein bisschen mehr was so ein Port kann, aber für was ist er gut? Wo ist den auf dem Bild P1.3? Ich schätze mal Port 1 und pin 3? Aber wo ist der? Und den oben geposteten Code verstehe ich noch immer nicht. CPL P1.3 --> komplementiert das Bit(0 oder 1). D.h. 0 wird zu 1 und 1 wird zu 0 richtig? DJNZ R2,loop --> dekrementiert R2 um 1 und springt wenn R2 nicht 0 ist. R2 ist aber immer 0, d.h. die Schleife wird nur einmal durchgegangen, was hat das für einen Sinn? Und was steht in P1.3 drinnen?
Mr Gast schrieb: > R2 ist aber immer 0, d.h. die Schleife wird nur einmal durchgegangen, > was hat das für einen Sinn? Achso ne, was rede ich da...^^. R2 ist nicht 0, sondern wird immer um 1 dekrementiert, d.h. die Schleife wird viel viel öfter durchgelaufen. Wie weit sinkt den R2 ab? Wann kommt es den zu einen Überlauf?
Hi
> Wie weit sinkt den R2 ab? Wann kommt es den zu einen Überlauf?
Bis r2 wieder Null wird.
MfG Spess
Mr Gast schrieb: > Wo ist den auf dem Bild P1.3? Ich schätze mal Port 1 und pin 3? Aber wo > ist der? P1.X wobei x für 0 bis 7 steht. P1.3 Konkret ist PIN 4 am Controller Gehäuse(bei 40 Pin DIL). Der Sinn? Damit Signale rein und raus können.
Mr Gast schrieb: > Wo ist den auf dem Bild P1.3? Ich schätze mal Port 1 und pin 3? Aber wo > ist der? Auf dem Bild steht die Schaltung eines Bits von Port 3; es gibt davon 8 Stck., daher auch P3.X mit X=0...7 > CPL P1.3 --> komplementiert das Bit(0 oder 1). D.h. 0 wird zu 1 und 1 > wird zu 0 richtig? Ja. > Und was steht in P1.3 drinnen? Nach Reset steht irgendwas drin (müsste man im Datenblatt nachschauen), und das wird bei jedem Durchlauf invertiert. Zu R2: 8-Bit-Register, Wertebereich 0...255. Beim inkrementieren kommt nach 255 wieder 0 (Überlauf), beim dekrementieren umgekehrt ("Unterlauf"). Gruß Dietrich
Danke! Bei meinem Programm geht ja das ganze in den Minusbereich. Also geht R2 bis -255 und dann kommt der "Unterlauf" und R2 wird dann 0?
Bei 8 Bit ist der Wertebereich von 0-255 oder von -127 bis +127es gibt keine -255. Also 0 minus 1 gleich 255.
Uwe schrieb: > oder von -127 bis +127 Damit Mr Gast nicht verwirrt wird: bei 2er-Komplement (meist verwendete Kodierung): -128 bis +127 Gruß Dietrich
Ok danke! Ich hab hier 2 andere Programme: Übung 1(WRITE_DD): P1.4-P1.7 WRITE_DD: ANL a,#0xF SWAP A ANL P1 ORL P1,A RET Was ist hier überhaupt die Aufgabenstellung, also was soll man hier erreichen? Und was macht dieses Programm? Übung 2(Wait4Edge(4Low)): WAIT4EDGE: JB P1.0,$ JNB P1.0,$ ;jump if bit is not set RET WAIT4LOW: JB P1.0,$ ;jump if bit is set RET Was können die Dollar-Zeichen hier? --> JMP $ ist ja eine Endlosschleifen, aber hier?
Mr Gast schrieb: > Übung 2(Wait4Edge(4Low)): > > WAIT4EDGE: > JB P1.0,$ > JNB P1.0,$ ;jump if bit is not set > RET > > WAIT4LOW: > JB P1.0,$ ;jump if bit is set > RET > > Was können die Dollar-Zeichen hier? --> JMP $ ist ja eine > Endlosschleifen, aber hier? Das ist aber nur ein JMP, wenn die Bedingung erfüllt ist; sonst geht das Programm weiter (zu RET). Gruß Dietrich
Ah ok jetzt ist mir das auch klar danke! Und was soll das mit dem WRITE_DD? Ich verstehe gar nicht was die Grundidee dahinter ist?
Mr Gast schrieb: > Übung 1(WRITE_DD): > P1.4-P1.7 > WRITE_DD: ANL a,#0xF ; Akkuinhalt: D0...D3 bleibt, D4...D7 wird gelöscht SWAP A ; D0...D3 wird mit D4...D7 getauscht ANL P1 ; der Befehl ist falsch: da fehlt der 2. Parameter ORL P1,A ; Port 1 wird mit der Oder-Verknüpfung von Port 1 und Akku ; geladen RET ; Rückkehr aus Unterprogramm Was das Ganze soll, ist mir auch nicht klar, zumal da mindestens ein Fehler drin ist. Gruß Dietrich
Ahja, ok danke! Ich habe mir jetzt Port 1 näher angeschaut. Die verschiedenen Fälle etc., wann der FET durchschaltet und wann nicht, dass weis ich jetzt. Man kann ja hier den Port-pin lesen und beschreiben. Und dann auch noch den Port-Latch lesen(kann man den Port-Latsch auch beschreiben?) Ich verstehe nicht wie man jetzt liest oder beschreibt? Wie macht man das? Bei meinen Codes hab ich das gelesen oder geschrieben und vorallem was Port pin oder Port latch?
Mr Gast schrieb: > Man kann ja hier den Port-pin lesen und beschreiben. Und dann auch noch > den Port-Latch lesen(kann man den Port-Latsch auch beschreiben?) Nein, schau Dir die Schaltung nochmal an: - Port-Pin als Ausgang: * Du schreibst in das Latch und bestimmst damit den Zustand der Port-Pins * Du kannst das Latch lesen; so brauchst Du im Programm den Zustand der Bits nicht woanders merken, wenn Du später mal ein Bit ändern willst - Port-Pin als Eingang: * das Latch muss auf "1" geschrieben sein, damit der Transistor abgeschaltet ist und den Eingang nicht auf "0" zieht (und damit das Eingangssignal kurzschließt) * den Pin kannst Du nur lesen (schreiben ist ja auch nicht logisch) > Ich verstehe nicht wie man jetzt liest oder beschreibt? Wie macht man > das? > Bei meinen Codes hab ich das gelesen oder geschrieben und vorallem was > Port pin oder Port latch? Schreiben des Latch von Port 1 z.B. MOV P1,A Lesen der Pins von Port 1 z.B. MOV A,P1 Bei einigen Befehlen wir aus dem Latch gelesen, z.B. ORL P1,#1 wird so ausgeführt: aus dem Latch Lesen, #1 dazuodern, wieder in das Latch schreiben Genaueres muss man bei den Befehlen nachlesen. siehe auch: http://electrofriends.com/articles/electronics/microcontroller-electronics-articles/8051-8951/8051-microcontroller-port-programming/ - Alle Angaben ohne Gewähr - Gruß Dietrich
Danke dir!
Aber hier steht: Port lesen, Port schreiben und Port Latch Lesen, aber
kein Port Latch schreiben? Jetzt bin ich verwirrt.
>>>Du kannst das Latch lesen; so brauchst Du im Programm den Zustand
der Bits nicht woanders merken, wenn Du später mal ein Bit ändern
willst.
Ich verstehe nicht was damit gemeint wird. Wo brauch ich kein Bit merken
und warum? Kann mir einer das bitte näher erklären?
Mr Gast schrieb: > Aber hier steht: Port lesen, Port schreiben und Port Latch Lesen, aber > kein Port Latch schreiben? Jetzt bin ich verwirrt. Port schreiben ist Latch schreiben, denn der Latch-Ausgang geht (mehr oder weniger) direkt auf den Port-Pin als Ausgang. >> Du kannst das Latch lesen; so brauchst Du im Programm den Zustand >> der Bits nicht woanders merken, wenn Du später mal ein Bit ändern >> willst. > > Ich verstehe nicht was damit gemeint wird. Wo brauch ich kein Bit merken > und warum? Kann mir einer das bitte näher erklären? Das war wohl auch nicht ganz richtig. So wie ich das verstanden habe wird das wohl nur intern benutzt, z.B. beim ORL P1,#1 (s.o.: Lesen - Ändern - Schreiben). Denn wenn es das "Lesen Latch" physikalisch nicht gäbe und man nur ein Bit im Port ändern wollte, müsste man den Zustand der anderen Bits ja kennen, um sie nicht zu verändern. Es gibt auch die Möglichkeit, direkt Einzelbits zu ändern (Bitadressierung). Wie das aber jetzt intern abläuft, weiß ich nicht. Gruß Dietrich
Ok danke! auf dieser seite da: http://electrofriends.com/articles/electronics/microcontroller-electronics-articles/8051-8951/8051-microcontroller-port-programming/ Da ist ja überall beschrieben wie ein Port als Input funktioniert, warum ist das nicht beschrieben wie die Ports als Output funktionieren? Alle Ports können I/O oder?
Mr Gast schrieb: > auf dieser seite da: > http://electrofriends.com/articles/electronics/mic... > > Da ist ja überall beschrieben wie ein Port als Input funktioniert, warum > ist das nicht beschrieben wie die Ports als Output funktionieren? Ist es doch: bei "Port 0:" wird es benutzt als Ausgang, bei "Port 0 as Input:" als Eingang. Wenn es Eingang sein soll, muss das Latch auf "1" geschrieben werden, sonst gibt es Kurzschluss mit der externen Quelle. > Alle Ports können I/O oder? Ja. Gruß Dietrich
Alle Ports(inklusive Pins) müssen beim D-Eingang eine 1 haben das sie als input wirken? D.h. am FET liegt Low Pegel an --> Er sperrt oder? Die Drain-Source-Spannung ist niedrig, dadurch ist er offen oder? Warum muss am Pin High Pegel(3-5V) anliegen, das der Port als Input gilt? Und warum muss am Pin Low Pegel anliegen, das der Port als Output gilt? Read-modify-write: Vom Port lesen, Wert verändern, zurückschreiben. z.B. MOV P0,A ANL P0,#FFhex Kann man dazu noch was näheres sagen zu Read-modify-write?
Mr Gast schrieb: > Alle Ports(inklusive Pins) müssen beim D-Eingang eine 1 haben das sie > als input wirken? Ja. > D.h. am FET liegt Low Pegel an --> Er sperrt oder? Die > Drain-Source-Spannung ist niedrig, dadurch ist er offen oder? Ja. Aber das gilt für alle Ports. > Warum muss am Pin High Pegel(3-5V) anliegen, das der Port als Input > gilt? Nein, muss nicht. Nur der FET muss abgeschaltet sein (d.h. Latch=1), damit das externe Signal, das man am Eingang "sehen" will, ungestört durchkommt. Dieses externe Signal kann natürlich High oder Low sein, sonst wäre das ja Unsinn ;-) > Und warum muss am Pin Low Pegel anliegen, das der Port als Output gilt? Nein, muss nicht. Es kann natürlich High oder Low sein, sonst könntest Du ja mit dem Ausgang nicht anfangen. Nur: High ist relativ hochohmig (nur der Pull-Up-Widerstand), darum kann in diesem Zustand der Pin auch als Eingang benutzt werden. > Read-modify-write: > > Vom Port lesen, Wert verändern, zurückschreiben. > > z.B. > > MOV P0,A > ANL P0,#FFhex > > Kann man dazu noch was näheres sagen zu Read-modify-write? (Am Rande: In diesem Beispiel kannst Du ANL P0,#FFH weglassen, da UND-Verknüpung mit 0FFH kein Bit verändert..) Das Read-modify-write macht der µC ganz alleine. Das gilt für bestimmte Befehle, z.B. ANL P0,#FFH oder ORL... Es gibt aber noch mehr Befehle, die das Port verändern, wo der Ablauf so ist. Ich habe jetzt aber nicht alle Befehle daraufhin durch geforstet. Das kannst Du bei Bedarf selber machen: http://www.keil.com/dd/docs/datashts/philips/p51_pg.pdf Schau dort mal z.B. auf Seite 97. Gruß Dietrich PS: Diese etwas "komplizierte" Art von Ports ist eine Spezialität von 8051er µCs. Bei neueren µCs gibt es üblicherweise eigene "Richtungs-Register", in denen man hineinschreibt, ob der Pin Eingang oder Ausgang ist.
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.