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 =(
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.
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
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.
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??
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.
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?