Im dritten Teil wollen wir versuchen, Ihnen die Programmierung des Profiports näher zu bringen. Port bedeutet eigentlich nur ‘Tor’, und genau darum dreht es sich hier - ein Tor zur (elektronischen) Außenwelt des Rechners.
In Abbildung 1 sehen Sie das Anschlußbild des Profiports. An dieser 64-poligen Messerleiste sind genau 32 individuell programmierbare digitale Leitungen (1PA0-1PA7,1PB0-1PB7,2PA0-2PA7,2PB0-2PB7), 2 digitale Sonderleitungen (1CB2,2CB2) und 2 flankenempfindliche, digitale Eingänge (1CB1, 2CB1) verfügbar. Zusätzlich ist die Versorgungsspannung der Profibank auf verschiedenen Stiften herausgeführt, verbunden mit zwei sogenannten PIAs (Peripheral Interface Adapter oder Schnittstellenbaustein) des Typs 68B21, die aus der Familie des 6800, eines Vorläufers des 68000, stammen. Der preisgünstige 68B21 ist außerdem in einer stromsparenden CMOS-Version, genannt 63B21, erhältlich und läßt sich ebenfalls in der Profibank einsetzen.
Jede der Leitungen xPAy und xPBy ist individuell zu einem Eingang oder Ausgang programmierbar. Jedoch unterscheiden sich die Leitungen ‘PA’ hardwareseitig von ‘PB’. ‘PA’, falls zum Eingang programmiert, liegt definitiv aufgrund des internen Pull-up-Widerstands an +5V. ‘PB’ , falls zum Eingang programmiert, ist hochohmig und sollte deshalb nicht offengelassen werden. Bei der CMOS-Ausführung (63B21) sind die Pull-up-Widerstände des ‘PA’ konsequenterweise nicht vorhanden. Um ein sicheres Lesen der Eingänge zu garantieren, muß die Spannung an solchen für ein ‘LOW’ (gelesenes Bit=0) unter 0.8V und für ein ‘HIGH’ über 2.4V liegen.
‘PA’ des 68B21, falls zum Ausgang programmiert, erreicht von sich aus CMOS-Pegel, ‘PB’ jedoch nur mit Hilfe eines Pull-up-Widerstands (Richtwert: 10K nach +5 V). Der 63B21 braucht logischerweise keine Pull-up-Widerstände. Das Treiben von bis zu 2 TTL-Lasten ist in allen Fällen problemlos. Aufgrund ihrer Konstruktion sind die Leitungen ‘PA’ zum direkten Treiben der Basen von NPN-Transistoren ohne Vorwiderstand geeignet. Die Ausgänge sind begrenzt kurzschlußfest - zu langer Kurzschlußstreß führt aufgrund exzessiver Verlustleistung eines Bausteins zu dessen sicherem thermischen Ableben.
Äußerste Vorsicht ist geboten, daß die Eingangsspannungen an den Portleitungen die Betriebsspannungsgrenzen keinesfalls überschreiten. Falls dies trotzdem geschieht, können sehr große Eingangsströme fließen, die Fehlfunktion und schließlich Zerstörung des Bausteins zur Folge haben können.
Detailliertere Informationen kann Ihnen das Datenblatt eines Herstellers liefern.
...gestaltet sich recht einfach, da nur 6 Register alle Funktionen abdecken. Eigentlich hat jeder Baustein nur 4 direkt erreichbare Register - denn zwei Register haben je nach Programmierung eine Doppelfunktion. Zwei Hälften, A und B, ergeben einen 68B21. Die Register im einzelnen (beachten Sie auch Abbildung 2):
Peripheral Data Register oder Datenregister
Ein Doppelregister, dessen Funktion durch das Bit 2 im Register CRA bestimmt wird.
Ist CRA-Bit 2=0. so erreicht man unter dieser Adresse das Datenrichtungsregister A. welches über Eingänge und Ausgänge der korrespondierenden Portleitungen bestimmt. Bit 7 bestimmt die Betriebsart von PA7 etc. Ist ein Bit dieses Registers Eins, so ist die entsprechende Portleitung ein Ausgang.
Falls CRA-Bit2 = 1, so ist es das Datenregister. Wird es gelesen, erhält man in jedem Bit den Zustand der Eingänge und/oder der Ausgänge (je nach Programmierung des Datenrichtungsregisters). Das Lesen ergibt bei ‘PA’ immer den Zustand der Portleitungen, der selbstverständlich durch äußere Beschaltung, auch bei programmierten Ausgängen, manipuliert werden kann. Ganz anders bei ‘PB’, der den Zustand eines Ausganges dem Ausgangsdatenregister entnimmt, damit auch nicht äußerlich manipulierbar ist.
Dieser Fakt erlangt spätenstens dann Bedeutung, wenn Port A direkt Transistoren treibt und der Zustand eines Ausganges invertiert werden soll.
Wird das Datenregister beschrieben, gelangen die Zustände der einzelnen Bits, falls auf Ausgang geschaltet, direkt an die entsprechenden Leitungen.
Control Register Side A oder Kontrollregister A
Wie schon erwähnt, bestimmt dieses Register über den Zugriff auf das Daten- oder Datenrichtungsregister. Außerdem enthält es verschiedene Kontrollbits bezüglich der Leitungen CA1 und CA2, die jedoch im Profiport unbenutzt bleiben.
Wie unter 1. beschrieben, jedoch für die 2. Hälfte (Seite B) des 68B21.
Wie unter 2. beschrieben, jedoch für die 2. Hälfte des 68B21. Außerdem sind die Leitungen CBI und CB2, deren Funktion dieses Register bestimmt, am Profiport verfügbar.
Abbildung 2 zeigt eine genaue Aufgliederung der Kontrollregister und die Bedeutung einzelner Steuerbits.
In Listing 1 sehen Sie das Grundgerüst mit Unterprogrammen zum Ansprechen der Profiport-Register in GFA-BASIC.
...zum Anschluß an die Profibank, sollten Sie folgende Richtlinien im Auge behalten, um Probleme von vornherein auszuschalten:
Listing 1 zeigt ein GFA-BASIC-Pro-gramm, in dem 2 Unterprogramme den Zugriff auf die Portbausteine ermöglichen: das eine Unterprogramm zum Lesen, das andere zum Schreiben eines Registers.
1 Aufruf:
@Pias (Adresse%,Datenwort%)
Dient zum Beschreiben eines Registers an der spezifizierten Adresse mit dem 8 Bit-Datenwort.
2 Aufruf:
@Pial (Adresse%, *Datenwort/6)
Rückgabe des Datenwortes in A%
Liest das Register an der spezifizierten Adresse in die globale Variable A%.
Im vierten und vorerst letzten Teil unserer Profiline-Serie geben wir Ihnen eine ganze Reihe von Beispielschaltungen mit dem Profiport wie z.B. Merkkanal-Datenwandlung, Schalten und Steuern verschiedener Lasten sowie die Ansteuerung von Schrittmotoren.
RH
' PIA.BAS - Beispielroutinen zur Ansteuerung des Profiports
' R.Hofmann ' 88
Sdr%=&HFB0000 ! Basisadresse des Schreibdatenregisters
P1%=&HFAA000 ! Basisadresse der 1. PIA
P2%=&HFAB000 ! Basisadresse der 2. PIA
Crb%=0 ! Offset in das Kontrollregister B
Cra%=2 ! Offset in das Kontrollregister A
Prb%=4 ! Offset in das Daten- oder Datenrichtungsregister B
Pra%=6 ! Offset in das Daten- oder Datenrichtungsregister A
Lo%=&H800 ! Offset in den 'Lesen' - Bereich der PIA
'
' ----------------------
'
'
' Pias(Adresse%,Datenbyte%)
' Beschreibt das bestimmte Register mit dem Datenbyte
'
Procedure Pias(Adr%,Dat%)
Void Peek(Sdr%+Dat%*256)! Datenbyte in die oberen 8 Bit's des SDR
Void Dpeek(Adr%) ! In gewähltes Register Schreiben
Return
'
' Pial(Adresse%,*Ergebnis%)
' Rückgabewert : in Ergebnis%
' Liest das bestimmte Register und übergibt es in *Ergebnis%
'
Procedure Pial(Adr%,A%)
*A%=Dpeek(Adr%+Lo%)/256
Return
Listing 1: Beispielroutinen zur Ansteuerung des Profiports
' PIA.BAS - Beispielroutinen zur Ansteuerung des Profiports
' Außerdem kann der Profiport damit getestet werden
' R.Hofmann '88
Sdr%=&HFB0000! Basisadresse des Schreibdatenregisters
P1%=&HFAA000 ! Basisadresse der 1. PIA
P2%=&HFAB000 ! Basisadresse der 2. PIA
Crb%=0 ! Offset in das Kontrollregister B
Cra%=2 ! Offset in das Kontrollregister A
Prb%=4 ! Offset in das Daten- oder Datenrichtungsregister B
Pra%=6 ! Offset in das Daten- oder Datenrichtungsregister A
Lo%=&H800 ! Offset in den 'Lesen' - Bereich der PIA
'
' ----------------------
'
Do
@Pias(P1%+Cra%,0)
@Pias(P1%+Crb%,0)
@Pias(P2%+Cra%,0)
@Pias(P2%+Crb%,0)
@Pias(P1%+Pra%,255)
@Pias(P1%+Prb%,255)
@Pias(P2%+Pra%,255)
@Pias(P2%+Prb%,255)
@Pias(P1%+Cra%,4)
@Pias(P1%+Crb%,4)
@Pias(P2%+Cra%,4)
@Pias(P2%+Crb%,4)
@Pias(P1%+Pra%,255)
@Pias(P2%+Pra%,255)
@Pias(P1%+Prb%,255)
@Pias(P2%+Prb%,255)
Loop
'
' Pias(Adresse%,Datenbyte%)
' Beschreibt das bestimmte Register mit dem Datenbyte
'
Procedure Pias(Adr%,Dat%)
Void Peek(Sdr%+Dat%*256)! Datenbyte in die oberen 8 Bit's des SDR
Void Dpeek(Adr%) ! In gewähltes Register Schreiben
Return
'
' Pial(Adresse%)
' Rückgabewert : A%
' Liest das bestimmte Register und übergibt es in A%
'
Procedure Pial(Adr%)
*A%=Dpeek(Adr%+Lo%)/256
Return
Listing 2:Mit diesem Programm ist es zusätzlich möglich, den Profiport auszutesten.