Beispiel 1 zur PIO-Programmierung history Letztmalig dran rumgefummelt: 06.10.20 18:21:16 menue

Aufgabe: Kanal A des PIO ist Byte-Ausgabe bei gesperrtem Interrupt und Kanal B in Einzelbitsteuerung so zu programmieren, dass ein Interrupt auf Bit 6=L ausgelöst wird!

ACHTUNG: ... das ist vorerst lediglich der Baustein PIO-Programmierung - der gesamte Interrupt-Bereich fehlt noch!

Prinzipschaltplan - er würde in der Praxis so nicht funktionieren

elektronisch korrekter Schaltplan

... das würde funktionieren - die Eingänge an Port B sind jetzt sauber auf "H" vorgespannt und bei Taster-Betätigung wird "L" gesendet

... das Projekt auch als CorelDraw-Datei im Format 11.0

 

 

Lösungsalgorithmus: Durch entsprechendes Laden des Registers A und anschließendes Schreiben auf die entsprechenden Programmier- bzw. Datenports werden die beiden Ports des PIO programmiert Adressen sind hier  06H sowie 07H. Anschließend können über die Datenwort-Adressen - natürlich entsprechend der Betriebsart Daten ein- bzw. ausgelesen werden.

Anmerkungen zur Hardware:

Marke Adresse Hex-Code Assembler-Code Kommentar
ORG 0040H ;Adresse Programmbeginn (... dieser fiktive Rechner hat seinen RAM-Bereich ab dieser Adresse - das ist nicht zu dikutieren WARUM - das ist Hardware!!!)
M1: 0040H 3E C0 LD A, 0C0H ;Interruptvektor Kanal B - willkürlich festgelegt - Bit 0 muss 0 sein - hier also C0H
0042H  D3 07 OUT (007H), A  ;Interruptvektor auf Steuerwortadresse Kanal B
M2: 0044H 3E 0F LD A, 00FH ;Byte-Ausgabe für Kanal A
0046H D3 06 OUT (006H), A  ;aktuelles Steuerwort auf Steuerwortadresse Kanal A - hier 006H
M3: 0048H 3E 03 LD A, 003H ;Interruptsteuerwort Kanal A A verboten
004AH D3 06 OUT (006H), A  ;Interrupt Kanal auf Steuerwortadresse Kanal A - hier 006H
M4: 004CH 3E F0 LD A, 0F0H ;Grundeinstellung Kanal A
004EH D3 04 OUT (004H), A ;definierte Signale an Kanal A
M5: 0050H  3E FF LD A, 0FFH ;Einzelbitsteuerung für Kanal B
0052H D3 07 ;Steuerwort auf Steuerwortadresse Kanal B
M6: 0054H 3E E3 LD A, 0E3H ;E/A-Steuerwort für Bits auf Kanal B
0056H D3 07 OUT (007H), A ;Steuerwort auf Steuerwortadresse Kanal B
M7: 0058H  3E 97 LD A, 097H ;Interruptsteuerwort Kanal B
005AH D3 07 OUT (007H), A ;Steuerwort auf Steuerwortadresse Kanal B
M8: 005CH 3E BF LD A, 0BFH ;Interruptsteuerwort Kanal B
005EH D3 07 OUT (007H), A ;Interrup-Maskierungswort auf
M9: 0060H 3E 83 LD A, 083H ;Interruptfreigabe Port B
0062H D3 07 OUT (007H), A ;Eintragen in Interruptfreigabe Register Port B
M10: 0064H 3E 10 LD A, 010H ;Bitmuster für Bit 6
0066H D3 05 OUT (005H), A ;definiertes Signal an Port B - Steuerwortadresse Kanal B (Bit 6 L-Aktiv)
LOOP: 0068H 18 FE JR LOOP ;Endlosschleife

Beispiel für eine  Anweisungstabelle in vollständiger Mnemoic-Codierung

Wir zerlegen das Gesamtproblem und analysieren die Teilprozesse - wir können die Funktionalitäten aus dem Inhalt des Registers A sowie der Portadresse eruieren:
 

M1

M2 M3 M4
LD A, 0C0H
OUT (007H), A

Ergebnis Schritt 1

  • Interrupt -Vektor in das Interruptvektor-Register Port B eingetragen (... es wird erkannt am Bitmuster XXXX XXX0)

  • Steuerwort C0H in das Interupt-Vektor-Register Port B geschrieben

LD A, 00FH
OUT (006H), A

Ergebnis Schritt 2

  • Betriebsart Byte-Ausgabe auf das Betriebsarten-Register Port A geschrieben (... es wird erkannt am Bitmuster XXXX 1111)

  • Steuerwort 0FH in das Betriebsarten-Register Port A geschrieben

LD A, 003H
OUT (006H), A

Ergebnis Schritt 3

  • Interrupt für Port A gesperrt (... es wird erkannt am Bitmuster XXXX 0011)

  • Steuerwort 03H in das Interrut-Freigabereister Port A geschrieben

LD A, 0F0H
OUT (004H), A

Ergebnis Schritt 4

  • Ausgangsdaten auf den Datenport von Port A geschrieben - die Lampen an den Ausgabe-Bit A4 bis A7 leuchten nun

  • die Programmierung Port A ist damit abgeschlossen

M5

M6 M7 M8
LD A, 0FFH
OUT (007H), A

Ergebnis Schritt 5

  • Betriebsart Einzelbit-Betrieb auf das Betriebsarten-Register Port B geschrieben

  • Steuerwort FFH in das Betriebsarten-Register Port B geschrieben

LD A, 0E3H
OUT (007H), A

Ergebnis Schritt 6

  • in der Betriebsart Mode 3 (Einzelbitbetrieb) muss als nächstes das E/A-Steuerwort folgen

  • 1 gesetzte Bits bilden Eingänge ab - 0-Bits sind Ausgänge

  • Steuerwort E3H in das I/O-Control-Register Port B geschrieben

LD A, 097H
OUT (007H), A

Ergebnis Schritt 7

  • Interrupt-Steuerwort definiert (... es wird erkannt am Bitmuster XXXX 0111)

  • 1 gesetzte Bits bilden in OR-Verknüpfung das Muster der in die Interrupt-Auslösung einbezogenen Bits

  • Steuerwort 97H in das I/O-Control-Register Port B geschrieben

LD A, 0BFH
OUT (007H), A

Ergebnis Schritt 8

  • Interrupt-Freigabe-Steuerwort definiert

  • 0 gesetzte Bits beziehen einen Ausgang in die Interrupt-Auslösung ein (nur Bit 6 soll auf "L" auslösen - das wird erkannt am Bitmuster 1101 1111)

  • Steuerwort BFH in das Interrupt-Control-Register Port B geschrieben

M9

M10 ... dies als CORELDRAW-Datei im 11.0-Format dmit kann man auf 8 Nit unversell rechnen - das ist für Programmierer extrem wichtig!!! ... das Projekt im A-Side-Format

LD A, 083H
OUT (007H), A

Ergebnis Schritt 9

  • Interruptfreigabe wird auf das Freigabe-Register des Ports B geschrieben

  • Steuerwort 83H in das Betriebsarten-Register Port B geschrieben

LD A, 010H
OUT (005H), A

Ergebnis Schritt 10

  • Datenwort auf den Datenport B eingetragen

  • 1 gesetzte Bits bilden auf der Ausgangs-Seite eine eingeschaltete Lampe ab

  • Datenwort 10H in das Datenwort-Register-Register Port B geschrieben

... eine freie Acht-Bit-Gruppe zur freien HEX-Konvertierung

... das Projekt auch als CorelDraw-Datei im Format 11.0

... fast vollständig!!!

  Projekt als A-Side Assembler Datei

 

... Projektgestaltung PIO-Programmierung mit vollständiger ISR ... Projekt-Entsprechung - kein "überflüssiger Ballast"! ... Delphi-Projekt PIO-Programmierung

... das gesamte Projekt-Beispiel in grafischem Ablauf

... das Projekt auch als CorelDraw-Datei im Format 11.0

... das gesamte Projekt-Beispiel in grafischem Ablauf

... das Projekt auch als CorelDraw-Datei im Format 11.0

... kommt nicht so schnell!!!

 

PIO-Programmierung - die Übersicht

... der PIO - die Details zum gesamten IC

Programmierungsbeispiele für Interrupt-Steuerungen

PIO-Programmierung

Kieser/Meder Mikroprozessortechnik - die U880-Bibel - der PIO

 A-Side Assembler-Projekte mit Interrupt-Steuerung



zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost am 28. März 2002 um 7.36 Uhr

... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-)

„Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“

Diddi Hallervorden, dt. Komiker und Kabarettist