PPI 8255 Initialisieren

Gast #1802238
Lesenswert?
• ▲
▼
Hallo Leute,

ich stehe gerade etwas auf dem Schlauch:
ich möchte einen PPI 8255 Initialisieren.

Port A und B sollen einlesen. Port C wird nicht verwendet.
Basisvektor lautet: 100H
Ich habe das wie folgt (grob):
1
/*PPI 8255 initialisieren
2
PORT A -> Input
3
Mode 0 -> Byte Ein- und Ausgabe
4
Port B -> Input
5
Mode 0 -> Byte Ein- und Ausgabe
6
Port C -> Dont Care
7

8
Basisadresse 200H
9
*/
10

11
//Initialisierung PPI
12
//D7 D6 D5 D4 D3 D2 D1 D0
13
// 1  0  0  1  0  0  1  0  ->0x92
14

15

16
outp(0x200,...)

ich bin mir jetzt nicht mehr so sicher,wie ich das Statusregster 
initialisiere,also welche port auf In oder Out, welche Mode jeweils und 
so weiter.
Vielleicht habt ihr einen kleinen Hinweis

Besten Gruß!
#1802416
Lesenswert?
• ▲
▼
82X55, der gute alte Parallelbus läßt grüßen.
Die Initialisierung bei den Peripheriebausteinen der 82XX-Serie läuft 
immer nach dem gleichen Muster ab:
  - Baustein für die gewünschte Betriebsart vorbereiten, dh in
    das Kommandoregister wird ein passendes Steuerwort(-Bitkombination)
    eingeschrieben
  - Arbeit mit dem Baustein aufnehmen
Wenn Daten über Port A und B eingelesen werden sollen und Port C 
ignoriert werden kann , muß der 8255 in Betriebsart 0 konfiguriert 
werden. Für das Kommandobyte sind daher folgende Bitkombinationen ltd 
Datenblatt(Siemens Datenbuch 1979/80) möglich:
  Bit 7, 6, 5, 4, 3, 2, 1, 0
      1  0  0  1  0  0  1  0  -> 0x92
      1  0  0  1  0  0  1  1  -> 0x93
      1  0  0  1  1  0  1  0  -> 0x9a
      1  0  0  1  1  0  1  1  -> 0x9b
In Betriebsart 0 gilt: Ein gesetztes Bit konfiguriert den entsprechenden 
Port als Eingang und vice versa, wobei Bit 4 Port A, Bit 3 Port C MSB, 
Bit 1 Port B, Bit 0 Port C LSB zugeordnet ist. Das gesetzte Bit7 ist für 
die Funktion "Betriebsart-Setzen" notwendig, alle übrigen Bit müssen 0 
sein.

Die Port A, B, C und das Kommandoregister lassen sich über interne 
Register ansprechen, die in Bezug auf die Basisadresse 'hintereinander' 
angeordnet sind.

.
.
#define PPI_Basis Basisadresse
#define Port_A    0
#define Port_B    1
#define Port_C    2
#define Kommand   3
#define PAB_IN    0x92  /*oder... s.o.*/
.
.
/*8255 in Betriebsart 0 konfigurieren: Dateneingabe über Port A,B */
*(unsigned char *)(PPI_Basis+Kommand)=PAB_IN;
/* Daten von Port A einlesen*/
pa=*(unsigned char*)(PPI_Basis+Port_A);
.
.
usw
Zu beachten bleibt noch, dass die aktiven Steuer- und Datensignale 
Mindestzeiten von ca 500ns nicht unterschreiten sollten, 'sind halt 
betagte Teile.
mfg

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.