Forum: Mikrocontroller und Digitale Elektronik 8255 - wie programmieren


von Digger (Gast)


Lesenswert?

Hallo,

ich möchte an meinen µ einen 8255 zur Porterweiterung anschließen.
Weiß jemand, wie man diesen Programmieren kann. Hat jemand dafür 
Beispiele in C? Kennt jemand eine entsprechende Webseite?

mfG

Digger

von Andreas (Gast)


Lesenswert?

Ich habe den das letzte Mal vor mehreren Jahren programmiert. Kann mal 
suchen, müßte irgendwelche Beispiele finden. Allerdings in 
8085-Assembler. Wenn Dir das was nützt melde Dich.

Ich kann mich daran erinnern, daß der 8255 drei Ports mit 8 Bit hat, die 
Du als Ein- oder Ausgänge programmieren kannst. Jeder dieser Port hat 
eine eigene Adresse, die meiner Meinung nach, fortlaufend ist. An die 4. 
Adresse mußt Du das Steuerwort reinschreiben. Hiermit wird festgelegt, 
ob die Ports Ein/Ausgänge sind. Wenn ich mich richtig erinnere, ist der 
Port C teilbar in 2 x 4 Bit. Hier auch wieder individuell festzulegen ob 
Eingang oder Ausgang. Mit dem Reset-Signal werden alle Ports als 
Eingänge zurückgesetzt.
Die Eingänge RD/WR, mit denen festgelegt wird, ob der 8255 Daten liest 
oder schreibt sind Low-Aktiv.

Wie bereits gesagt, alle Angaben unter Vorbehalt, da aus der Erinnerung 
gekramt.

von Digger (Gast)


Lesenswert?

Hallo,

vielen Dank für die schnelle Antwort. Wenn Du noch was finden kannst...
Aber bitte nur, wenn es keine Umstände macht.

Vielen Dank

Digger

von Matthias (Gast)


Lesenswert?

Hallo Digger,

wie du vielleicht schon weißt, benimmt sich der 8255 wie ein Speicher. 
D.h. du schließt 8 Datenleitungen, Schreib- und Leseleitung an, und 
baust einen kleinen "Adressdekonder", der das CE-Signal (Chip Enable) 
erzeugt.

An einen AVR kannst du ihn auf zwei Arten anschließen:

1.) Als (externen) Speicher, dies funktioniert nicht mit allen AVR's. 
Dazu brauchst du ein sogenanntes "XRAM" Interface. z.B. der AT90S8515 
hat eins. An dieses XRAM-Interface schliesst du ein Latch an, um die 8 
Datenleitungen und die unteren 8 Adressleitungen zu bekommen ...

2.) Du kannst ihn aber auch an ganz gewöhliche Portleitungen 
anschließen. Dabei musst du aber alle Steuersignale selber erzeugen ...

Des weiteren benötigst du ein Datenblatt ...


Gruß
Matthias

von Siegfried (Gast)


Lesenswert?

Hallo Digger,

es stellt sich die Frage, ob die Lösung mit dem 8255 etwas bringt, denn 
von den ohnehin schon knappen Portleitungen gehen ja nochmal einige 
(D0-D7, IOW, IOR, A0, A1, ...) für die Ansteuerung des 8255 verloren. 
D.h. der 8255 bringt zwar 24 Portleitungen, unterm Strich sind es jedoch 
nur 12 Leitungen mehr.

Falls Deine µC-Anwendung nicht so zeitkritisch ist, kommt auch eine 
Lösung mit Schieberegistern mit Latches (74HC49?) in Frage. So lassen 
sich beispielsweise 24 weitere Ausgänge realisieren, die allerdings nur 
3 Leitungen zur Ansteuerung benötigen. Bei den Eingängen verhält es sich 
ähnlich.

In dem Beitrag hier findest Du noch einige weitere nützliche 
Informationen zu dem Thema:
http://www.engineerbob.com/articles/digio.pdf

Siegfried

von Jörg (Gast)


Lesenswert?

Hallo,

oder Du benutzt die I2C Schnittstelle der AVR's und pro 8 I/O Leitungen 
einen PCF8574 (kostet 2 Pins SLC/SDA). Da der PCF8574 auch noch einen 
INT-Ausgang hat kannst Du bei Eingangsänderungen einen Interrupt am AVR 
auslösen.

Gruß

Jörg

von Andreas (Gast)


Lesenswert?

Hallo Digger,

habe Dir mal unten einen kleinen Auszug aus einem Assembler-Programm 
gepostet.
Wie Dir bereits von Matthias geschrieben wurde, brauchst Du unbedingt 
ein Datenblatt.
Finde mein Handbuch über alle 8XXX Typen im Moment nicht da ich mit dem 
Teil schon länger nichts mehr gemacht habe.
Früher gab es das mal von Siemens und nannte sich uP-Bausteine 
Peripherie oder so ähnlich. Dort waren alle Bausteine wie
der alle Peripherie-Bausteine die zu den Prozessoren 8080/8085 gehörten, 
ausführlichst beschrieben.

Daher nur das was ich in meinem Sammelsurium noch finden konnte:

D0-D7          Datenbus (Zweiweg)
RESET          Rücksetzeingang
CS             Bausteinauswahl (Low-Aktiv)
RD             Leseeingang (Low-Aktiv)
WR             Schreibeingang (Low-Aktiv)
A0,A1          Kanaladresse
Pa0 - Pa7      Kanal A (Bit 0 - 7)
Pb0 - Pb7      Kanal B (Bit 0 - 7)
Pc0 - Pc7      Kanal C (Bit 0 - 7)

Der 8255 kann in drei Betriebsarten arbeiten:
Betriebsart 0: Einfache  Ein/Ausgabe
Betriebsart 1: Getastete Ein/Ausgabe
Betriebsart 2: Zweiwegbus

Es sind jeweils 12 Ports in einer Gruppe in der jeweiligen Betriebsart 
zu programmieren.
Zur Gruppe A gehören Port A und Port C, höherwertige Bits (C7 - C4)
Zur Gruppe B gehören Port B und Port C, niderwertige Bits (C3 - C0)

Das Steuerwort besteht aus 8 Bit und hat folgendes Format:

D7   - Betriebsartenkennzeichen
         1 = aktiv

D5/6 - Wahl der Betriebsart Gruppe A
         00 = Betriebsart 0
         01 = Betriebsart 1
         1X = Betriebsart 2

D4   - Port A                    1 = Eingabe 0 = Ausgabe Gruppe A
D3   - Port C höherwertige Bits  1 = Eingabe 0 = Ausgabe Gruppe A

D2   - Wahl der Betriebsart Gruppe B
         0 = Betriebsart 0
         1 = Betriebsart 1

D1   - Port B                    1 = Eingabe 0 = Ausgabe Gruppe B

D0   - Port C niederwertige Bits 1 = Eingabe 0 = Ausgabe Gruppe B

        cseg

porta1  equ     80h
portb1  equ     porta1+1
portc1  equ     porta1+2
str1    equ     porta1+3
porta2  equ     60h
portb2  equ     porta2+1
portc2  equ     porta2+2
str2    equ     porta2+3


; ********************** Initialisierung 
***********************************

init:   mvi     a,80h           ; 8255/1 in Betriebsart 0, alle Ports 
Ausgaenge
        out     str1            ; Port A und C fuer LCD, Port B fuer 
Tastatur
        mvi     a,83h           ; 8255/2 Port A, obere 4 Bits Port C 
Ausgaenge
        out     str2            ; fuer Drucker, Port B Eingang fuer 
Tastatur
        mvi     a,83h           ; 8255/3 alle Ports Ausgaenge A3-A5 
Steuerung
        out     str3            ; der Zaehler


Ich hatte allerdings (wie meine Vorschreiber) von Anfang an meine 
Zweifel ob der 8085 für einen
Controller das richtige ist. Aber ich weiss ja nicht, was Du damit 
machen
willst, vielleicht ist es ja doch die Lösung die Du brauchst 
(Betriebsart 2?)

von Matthias (Gast)


Lesenswert?

Hallo,

ich habe das bzw. die Bücher, die Andreas beschreibt:

- "Mikrocomputer Bausteine - Mikroprozessor-System SAB 8085" von 1980/81
- "Mikrocomputer Bausteine - Peripherie" von 1979/80


falls wirklich der Bedarf besteht, bzw. sich keine Datenblätter im 
Internet finden lassen, kann ich die Seiten (41!) scannen ...


Gruß
Matthias

von Rolo Tomasi (Gast)


Angehängte Dateien:

Lesenswert?


von Digger (Gast)


Lesenswert?

Wow,
ich bin überwältigt!!
Vielen Dank für die zahlreichen, guten Antworten!!
Klasse!
Digger

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.