Abend ihr da draußen.... Wir haben am Freitag in der Schule einen 8255 bekommen und sollen am Montag mit ihm arbeiten können, also kurz gesagt, wir sollen uns einarbeiten. Der 8255 kann ja als Aus und Eingang verwendet werden, ich habe ihn bis jetzt als Eingang verwendet, was auch funktioniert, aber wenn ich ihn als ausgang verwenden möchte, dann muss ich das doch im "Moderegister" festlegen, das heißt A0 und A1 auf High setzen und dann 1XXXXXXX an den Datenbus anlegen oder habe ich da was falsch verstanden? Wenn das wie oben gemacht ist, muss ich CS auf Masse setzen und wie sollen die Pegel am RD und WR sein? Ich würde vermuten das WR auf low und RD auf High muss oder?
Tim schrieb: > Wenn das wie oben gemacht ist, muss ich CS auf Masse setzen und wie > sollen die Pegel am RD und WR sein? > > Ich würde vermuten das WR auf low und RD auf High muss oder? Sollte sowas nicht im Datenblatt stehen?
Tim schrieb: > Ich würde vermuten das WR auf low und RD auf High muss oder? Yepp. Aber wer braucht so ein altes Teil noch der ist schon ueber 35 Jahre alt. Wie steuerst du den an? per Hand? Dein Lehrer sollte sich mal was aktuelleres zulegen.
cyblord ---- schrieb: > Sollte sowas nicht im Datenblatt stehen? Ja, ich gehe ja nach dem Datenblatt vor, jedoch geht das irgendwie nicht, ist warscheinlich entweder ein Verständnis fehler oder so, sry =(
Korrekt erkannt. Du musst in das Register auch noch reinschreiben. Dazu dient WR.
Helmut Lenzen schrieb: > Dein Lehrer sollte sich mal was aktuelleres zulegen. Die Schule hat die in Masse und es ist ja nur eine Übungsaufgabe, es geht um das erarbeiten eines Bausteins, es ist ja im Prinzip egal wie alt ein Baustein ist, es geht ja nur um die Übung... Ansteuern tu ich den übern AT89S8253 angeschlossen ist einPort des AT an dem Datenbus und die benötigten Leitungen an nem anderen Port
A. K. schrieb: > Korrekt erkannt. Du musst in das Register auch noch reinschreiben. Dazu > dient WR. Okey, wenn ich es dann in das Register übertragen habe, muss ich dann WR wieder ausschalten oder dient WR auch für die Ausgabe an Port A, B, C? Also so wie ich das verstanden habe muss ich A0 und A1 auf high setzen um das Register anzusteuern und WR dann um Daten einzulesen, wenn ein Port als Eingang dient, dan muss ich RD aktivieren und wenn er als Ausgang dient muss ich WR aktivieren?
Tim schrieb: > Okey, wenn ich es dann in das Register übertragen habe, muss ich dann WR > wieder ausschalten oder dient WR auch für die Ausgabe an Port A, B, C? Ohne RD=0 oder WR=0 bei gleichzeitig CS=0 passiert effektiv garnichts. Egal ob Steuerregister oder Ports. Siehe Datasheet Tabelle "BASIC OPERATIONS" vorne und Busablaufdiagramme weiter hinten. Was RD und WR bedeuten steht da auch drin, also bitte nicht Datasheet von andere vorlesen lassen, sondern selber lesen.
A. K. schrieb: > Kommt ihr hier grad rudelweise rein? > Beitrag "Fragen zum 8255" lach sieht scheinbar so aus
Wenn Dein 80C51 nicht zu modern (zu schnell) ist, hängt man den 82C55 (Grrr) memory mapped ran (AD0..7, /RD, /WR). /CS entweder über einen Decoder (74HC138) oder direkt an einen P2.0 .. P2.7. Peter
Tim schrieb: > Ansteuern tu ich den übern AT89S8253 angeschlossen ist einPort des AT an > dem Datenbus und die benötigten Leitungen an nem anderen Port Dann brauchst du gar nichts zu machen. Der Controller kann den schon direkt ansteuern mit dem richtigen Timming. Datenbus 8255 an AD0..7 vom uC WR 8255 an P3.6 (wr) vom uC RD 8255 an P3.7 (rd) vom uC A0 8255 an P2.0 (A8) vom uC A1 8255 an P2.1 (A9) vom uC CS 8255 an P2.2 (A10) vom uC Reg18255 liegt dann Addresse 0x0000 Reg28255 liegt dann Addresse 0x0100 Reg38255 liegt dann Addresse 0x0200 Reg48255 liegt dann Addresse 0x0300 schreiben mov dptr,#Reg18255 mov a,#0x12 movx @dptr,a lesen mov dptr,#Reg18255 movx a,@dptr
Damit alle mitspielen können: http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/50-rtlib/60-pio8255/pio.html
Tim schrieb: > Ach ich gibs auf... Warum denn das? Hier sind doch alle Loesungen schon genannt worden wie man das macht. Dein uC kann das doch schon von sich aus. Wenn man es doch zu Fuss machen will. Ansonsten schreiben in den 8255: Daten anlegen an D0..7 Dann Addresse A0,A1 auswaehlen wohin geschrieben werden soll Dann CS + WR auf 0 setzen, damit werden die Daten uebernommen. Danach CS + WR wieder auf 1 setzen. Lesen vom 8255: Dann Addresse A0,A1 auswaehlen woher gelesen werden soll Dann CS + RD auf 0 setzen, damit werden die Daten ausgegeben. Daten einlesen vom 8255 Danach CS + RD wieder auf 1 setzen.
Helmut Lenzen schrieb: > Tim schrieb: >> Ach ich gibs auf... > > Warum denn das? Musst du denn Leuten immer alles bis in letzte Detail darlegen? Du bevormundest und entmündigst sie damit. Ist ja ekelhaft. Gib dem "armen" Kerlen doch die Chance selbstständig zu denken.
Helmut Lenzen schrieb: > Daten anlegen an D0..7 > Dann Addresse A0,A1 auswaehlen wohin geschrieben werden soll > Dann CS + WR auf 0 setzen, damit werden die Daten uebernommen. > Danach CS + WR wieder auf 1 setzen. Danke, aber so mache ich das schon die ganze Zeit... Das auslesen Funktioniert, nur das Umstellen das die Daten vom Datenbus auf die Ports geht, geht nicht, ich mache es so wie es im Datenblatt steht, ich verwende das von Intel... Heinz schrieb: > Musst du denn Leuten immer alles bis in letzte Detail darlegen? Du > bevormundest und entmündigst sie damit. Ist ja ekelhaft. > > Gib dem "armen" Kerlen doch die Chance selbstständig zu denken. Nichts für ungut, aber ich finde dein Kommentar ekelhaft...
Tim schrieb: > Das auslesen Funktioniert, nur das Umstellen das die Daten vom Datenbus > auf die Ports geht, geht nicht, ich mache es so wie es im Datenblatt > steht, ich verwende das von Intel... Zeig mal deinen Code. Denk daran das du die Datenleitungen am uC auch noch auf Eingang stellen must wenn du es zu Fuss machen willst. Beim 8051 und Consorten geht das mit 0xff ausgeben auf dem Port.
Also so mache ich das, wenn was falsch ist, dann bitte korrigiert mich =)
1 | mov P3,#080h |
2 | |
3 | setb A0 |
4 | setb A1 |
5 | |
6 | clr CS |
7 | clr WR |
8 | |
9 | nop |
10 | nop |
11 | nop |
12 | |
13 | setb WR |
14 | setb CS |
15 | |
16 | |
17 | |
18 | mov P3,#0F0h |
19 | |
20 | clr A0 |
21 | clr A1 |
22 | |
23 | clr CS |
24 | clr WR |
Der Port 3 und 2 den ich verwende wird ganz oben auf FF gesetzt.
Beim 2. schreiben fehlt das auf '1' setzen von CS+WR Kannst du auch an den Pins mal messen ob sich da was tut? Reset vom 8255 ist auch richtig beschaltet?
Helmut Lenzen schrieb: > Beim 2. schreiben fehlt das auf '1' setzen von CS+WR Ja, das hab ich vergessen mit rein zu kopieren. > Kannst du auch an den Pins mal messen ob sich da was tut? An dem Port A is nix dran, also 0V. Am Datenbus ist auch 0V, wenn ich ihn Trenne, dann geht er erst auf High... > Reset vom 8255 ist auch richtig beschaltet? Ich habs versucht mit Reset auf High und auf Low Wenn ich die RD und WR vertausche, dann geht die Datenübertragung von Port A nach Datenbus, was ja nicht sein dürfte, wenn ich im 8255 den Port A als Ausgang definiert habe oder hab ich da was falsch verstanden?
Tim schrieb: > Am Datenbus ist auch 0V, wenn ich ihn Trenne, dann geht er erst auf > High... Dann zieht der 8255 den runter. Tim schrieb: > Wenn ich die RD und WR vertausche, dann geht die Datenübertragung von > Port A nach Datenbus, was ja nicht sein dürfte, wenn ich im 8255 den > Port A als Ausgang definiert habe oder hab ich da was falsch verstanden? Du kannst auch von einen Port der als Ausgang definiert ist lesen, die Datenbustreiber im 8255 schalten dann um. Was man dann zu lesen bekommt steht im Datenblatt.
Helmut Lenzen schrieb: > Du kannst auch von einen Port der als Ausgang definiert ist lesen, die > Datenbustreiber im 8255 schalten dann um. Was man dann zu lesen bekommt > steht im Datenblatt. Ahhh, okey, gut, dann hab ich da was falsch verstanden =D Aber wenn ich das mit dem Programm nicht falsch mache, was ist dann der Fehler? Jemand ne Idee??
Um einen Defekt auszuschließen, habe ich jetzt 3 Stück getestet mit den gleichen Resultaten..
Tim schrieb: > Ich habs versucht mit Reset auf High und auf Low Der muss auf Low liegen. Ansonsten 0x80 zum Controllregister macht alle 3 Ports zu Ausgänge. Tim schrieb: > Am Datenbus ist auch 0V, wenn ich ihn Trenne, dann geht er erst auf > High... Kannst du denn überhaupt ändern wenn der 8255 dran hängt und RD + WR + CS = 1 ist.
Kannst dir ja einen Multitech Microprofessor besorgen... http://mycorner.no-ip.org/z80/mpf1/mpf_board.jpg http://mycorner.no-ip.org/z80/index.html Schön, daß gleichzeitig du und dein Klassenkamerad Beitrag "Fragen zum 8255" diese Probleme haben.
Erich schrieb: > Schön, daß gleichzeitig du und dein Klassenkamerad > Beitrag "Fragen zum 8255" > diese Probleme haben. Der "Fabian" möchte mit dem 8255 was bauen und zu dem kenne ich ihn nicht, da ich keinen Fabian in meiner Klasse habe... Ahhhhhhhhhhhhhhhhhh, wie ich diese Stecker hasse, also diese, die auf son Wannenstecker drauf kommen.... Mir ist grade aufgefallen, das bei 3 Leitungen vom Flachbandkabel, nen Wackler drauf ist, darum gings nicht wirklich -.-" Ach und zur Ergänzung, man kann das auch so machen: mov P3,#0F0h clr A0 clr A1 clr CS clr WR ohne CS + WR auf ! zu setzen, wenn man dann den Wert an Port 3 ändert, dann wird dieser auch an dem ausgewählten Port des 8255 geändert =)
Tim schrieb: > ohne CS + WR auf ! zu setzen, wenn man dann den Wert an Port 3 ändert, > dann wird dieser auch an dem ausgewählten Port des 8255 geändert =) Können kann man schon, ist aber nicht Sinn de Sache. Tim schrieb: > Mir ist grade aufgefallen, das bei 3 Leitungen vom Flachbandkabel, nen > Wackler drauf ist, darum gings nicht wirklich -.-" Schön das es jetzt geht. Also mal wieder so ein dummer Fehler.
Helmut Lenzen schrieb: > Tim schrieb: >> ohne CS + WR auf ! zu setzen, wenn man dann den Wert an Port 3 ändert, >> dann wird dieser auch an dem ausgewählten Port des 8255 geändert =) > > Können kann man schon, ist aber nicht Sinn de Sache. ich bin der Meinung, das es drauf ankommt, in welcher Hinsicht der 8255 verwendet wird... Jetzt habe ich noch eine kleine Frage, es wurde ja erwähnt, das ich z.B. wenn der Port A als Ausgang eingestellt wurde ich "On Fly" statt WR zu setzen und Daten vom Datenbus zum Port A zu übertragen, ich RD setzen kann um ein Bit abzufragen, hab ich das richtig verstanden?
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.