Forum: Mikrocontroller und Digitale Elektronik Der 8255 lacht mich aus.


von Tim (Gast)


Lesenswert?

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?

von Cyblord -. (cyblord)


Lesenswert?

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?

von Helmut L. (helmi1)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Korrekt erkannt. Du musst in das Register auch noch reinschreiben. Dazu 
dient WR.

von Tim (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Kommt ihr hier grad rudelweise rein?
Beitrag "Fragen zum 8255"

von Tim (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

A. K. schrieb:
> Kommt ihr hier grad rudelweise rein?
> Beitrag "Fragen zum 8255"

lach sieht scheinbar so aus

von Peter D. (peda)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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

von hp-freund (Gast)


Lesenswert?


von Tim (Gast)


Lesenswert?

Ach ich gibs auf...

von Helmut L. (helmi1)


Lesenswert?

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.

von Heinz (Gast)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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...

von Helmut L. (helmi1)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

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?

von Tim (Gast)


Lesenswert?

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?

von Helmut L. (helmi1)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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??

von Tim (Gast)


Lesenswert?

Um einen Defekt auszuschließen, habe ich jetzt 3 Stück getestet mit den 
gleichen Resultaten..

von Helmut L. (helmi1)


Lesenswert?

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.

von Erich (Gast)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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 =)

von hp-freund (Gast)


Lesenswert?

Na also:

Der 8255 lacht dich jetz an :-)

von Helmut L. (helmi1)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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?

von Tim (Gast)


Lesenswert?

Aber Danke an alle, die geholfen haben =)

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
Noch kein Account? Hier anmelden.