Einer der ersten in Deutschland veröffentlichten Zeitschriftenartikel über Mikroprozessoren stammt von mir. Er heißt: RTTY-Ausgabeinterface für 8-Bit-Mikroprozessoren |
Er erschien in der Amateurfunkzeitschrift cq-DL, der Vereinszeitschrift des Deutschen Amateuradioclubs e.V., Heft 8/1977 ab der Seite 303.
Der Artikel beschreibt, wie man mit Hilfe eines Mikrocomputers den Funkfernschreibbetrieb automatisieren kann. Nachfolgend ein Foto des Mikrocomputers, in dem das Ausgabeinterface eingebaut war: |
![]() |
Leider besitze ich von dem 8080 Mikrocomputer kein besseres Foto. Immerhin ist zu erkennen, dass die Frontplatte aus einzelnen Blechteilen zusammengesetzt ist. Dies Verfahren ermöglichte einen schrittweisen Aufbau. Zwei Schalterreihen mit je 8
Kippschaltern sind zu erkennen. Eine der beiden Schalterreihen diente zur Programmeingabe. Man konnte dadurch immer ein Byte von 8 Bit Länge eingeben. Auf der oberhalb der Schalterreihe eingeklebten LED-Reihe konnte man Speicherinhalte und deren Adressen anzeigen. Die Schalterstellung der anderen Schalterreihe ließ sich vom Programm abfragen. Dadurch war es möglich, den Ablauf des Programmes zu beeinflussen. Das Datenkabel links unten führte zu einer umgebauten IBM-3270-Terminaltastatur. Ich benutzte die Tastatur für Funkfernschreibbetrieb. |
RTTY-Ausgabeinterface für 8-Bit-MikroprozessorenVon Rolf-Fredrik Matthaei, DL8WA Der Artikel wurde zur Webdarstellung leicht überarbeitet. Die Abbildungen wurden aus der gedruckten Vorlage abfotografiert. „Interface” de sortle RTTY pour microprocesseur à 8 bits permettant au choix des incréments de blocage de 1,5 ou de 2, d'être asservi par un microprocesseur à 8 bits (Motorola 6800, Intel 8080) ou bien par un circuit logique TTL. Il comprend une séparation totale de l'é'lectronique par un relais. Ses composants sont de type courant. Son prix de revient: 30 DM. (DC0HO) Variations about a parallel-to-serial converter (as described by GM3UDL) with the aim to use it as a RTTY-output-interface for an Intel 8080 microprocessor. Description of two small programs. 1. AllgemeinesDieses Interface entstand als Weiterentwicklung eines von GM3UDL veröffentlichten Parallel-Serialwandlers. Es bietet einige Besonderheiten:
2. Zusammenspiel Mikroprozessor/Interface (Abb.1)Mit Hilfe des Befehls OUT 0 werden die fünf Elemente des auszugebenden RTTY-Zeichens und das Übergabesignal (Strobe) dem RTTY-Ausgabeinterface zur Verfügung gestellt. | |
![]() | Durch Abfrage des Character Change-Impulses (Befehl IN 0), den das Interface nach vollendeter Parallel-Serialwandlung abgibt, ist es möglich, ein neues Zeichen erst dann
einzustellen, wenn das alte Zeichen durch das Interface verarbeitet wurde.
Durch Ausgabe des Wertes 0 in das Strobebit wird die Ausgabe gestoppt, der Linienstrom wird dadurch eingeschaltet. |
![]() | |
Die Codierung
des Interfaces ist in Abb.2 dargestellt. Die Codierung der Stromsohritte
ergibt sich aus der Codetabelle für den 5-bit-Fernschreibcode. Beispielsweise ist die
Darstellung des Umschaltzeichens „Bu”: xlx00000, die des Buchstabens
„L”:xlx0ll0l. Dabei bedeutet „x” dass der Inhalt dieses
Bits für das Ausgabeinterface nicht wesentlich ist, da dieses Bit
des Eingabe-Ausgabebausteines nicht mit dem Interface in Verbindung steht.
2.1. Unterprogramm zur Ausgabe eines im Akkumulator bereitstehenden Zeichens |
![]() |
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||
Abb.3 (links): Grober Ablaufplan
Abb.4 (oben): Sinnbilder für Programmablaufpläne | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Abb.3 zeigt den groben Programmablaufplan. Die Symbole des Programmablaufplanes sprechen für sich, so daß deren Erklärung (Abb.4) auf ein Minimum beschränkt bleiben kann. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
PRINT, MOV B,A Akkumulator nach Register B WAIT1, IN 0 Character Change-Impuls ANI X'80' gesetzt? JZ WAIT1 nein * MOV A,B ja OUT 0 Zeichen ausgeben WAIT2, IN 0 Character Change-Impuls ANI X'80' noch gesetzt? JNZ WAIT2 ja RET neinAbb.5. Unterprogramm, Ausgabe des im Akkumulator bereitgestellten Zeichens | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Im Programm
(Abb.5), das sich auf einen 8080-Mikroprozessor bezieht, erfolgt aus logischen
Gründen eine Zwischenspeicherung des Zeichens aus dem Akkumulator in das
Register B. Das Unterprogramm stellt zu Beginn des Character Change-Impulses
dem Interface das neue Zeichen zur Verfügung (Befehle MOV A, B und OUT 0
oberhalb des Merkmales WAIT2) und wartet den Ablauf des Character
Change-Impulses ab (Schleife WAIT2) bevor es wieder ins Hauptprogramm
zurückkehrt.
An dieser Stelle sei ein Hinweis für OMs erlaubt, die mit der IBM 370 oder ähnlichen Maschinen vertraut sind: Der 8080 arbeitet mit Stackregistern im Zusammenhang mit Unterprogrammen. Deshalb ist in dem Unterprogramm keine explizite Adreßzwischenspeicherung in ein allgemeines Register zu erkennen. Ein wesentlicher Vorteil der Unterprogrammtechnik mit Hilfe eines Stackregisters ist, daß eine beliebige Verschachtelung von Unterprogrammen möglich ist, ohne daß es zu Schleifen kommt. Beispielsweise kann bei dem Verfahren mit dem Stackregister ein Unterprogramm sich selbst oder Teile seiner selbst als eigenständiges Unterprogramm benutzen. 3. Interpretation der Schaltung (Abb.6) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||||||||||||||||||||||||||
3.1. Taktgeber (NE555)Der NE555 gibt Impulse mit der doppelten Schrittfrequenz ab. Da sich im Amateurfunkverkehr 45,45 Baud durchgesetzt haben, gibt er 91 Hz ab. Eine Umschaltung auf andere Geschwindigkeiten durch Benutzung anderer RC-Kombinationen ist möglich, m.E. aber nicht lohnend.Für die Ausführung der Schaltung ist zu beachten, daß der 2,2µF-Kondensator ein Folienkondensator sein muB. Elektrolytkondensatoren oder Tantalkondensatoren sind an dieser Stelle der Schaltung fehl am Platze. 3.2. Zähler (7493)Der 7493 zählt die Impulse des NE555 binär auf seine Ausgänge abcd. Die LED am Ausgang leuchtet einmal pro RTTY-Zeichen und dient zu Kontrollzwecken. Der 330Ω-Widerstand begrenzt den durch sie hindurchfließenden Strom. Ein vorzeitiges Rücksetzen des Zählers ist möglich, wenn der Umschalter 2fach/ l,5fach in der Stellung 1,5fach steht. In der Stellung 2fach erfolgt das Rücksetzen durch Überlauf. 3.3. Character Change-Impuls-Erzeugung (7420 und 74121)Wenn der 7493 den Zählerstand 15 (abcd = 1111) erreicht hat, startet der 7420 den 74121, der seinerseits am Pin 6 den Impuls Character Change abgibt. Dieser Impuls hat zwei Aufgaben:
Die Umschaltung der Länge des Sperrschrittes hat einen gewissen Sinn. Ohne auf die theoretischen Überlegungen einzugehen, die dazu geführt haben, diesen Sperrschritt umschaltbar zu gestalten, möchte ich zwei Hinweise geben:
3.4. Parallel Serial Wandler (74150 und 7400)Der 74150 hat 16 Dateneingänge. Der jeweils ausgewählte Eingang wird durch die Zählereingänge abcd bestimmt. Die Eingänge in der angegebenen Schaltung sind wie folgt beschaltet:
Die beim Zählerstand 0 und 1 angewählten Dateneingänge bilden den Startschritt, die beim Zählerstand 12 bis 15 angewählten Eingänge bilden den Stoppschritt (Sperrschritt). Der Strobe-Eingang des 74150 wird über einen 7400 angesteuert. Ist der Schalter Run offen, so ist der Ausgang des 74150 (Pin 10) auf l. Ist der Schalter Run geschlossen und der freie Eingang des 2. Gatters des 7400 auf 0, so ist der Ausgang des 74150 auf 1. Nur wenn der Schalter Run geschlossen ist und der freie Eingang des 7400 auf 1 steht, ist der durch abcd angewählte Dateneingang für den Wert des Ausganges des 74150 maßgebend. Am freien Eingang des 2. Gatters des 7400 ist Strobe (Abb.2) angeschlossen. Am Ausgang des 74150 steht das serielle RTTY-Signal zur Verfügung. Zusätzlich steht es in invertierter Form am Pin 8 des 7420 zur Verfügung. An diesen beiden Stellen ist es TTL-kompatibel. 3.5. Relaistreiber (BC1O7)Der BC107 mit dem nachfolgenden Reed-Relais (Spulenwiderstand 70 Ohm) bildet die Trennstufe zum Linienstromkreis. Das Relais soll verhindern, daß sich die 100 Volt des Linienstromkreises im Mikroprozessor breitmachen können. Über die Relaiskontakte ist gewohnter Form ein Funkenlöschglied 100 nF in Serie mit 470Ω geschaltet (nicht im Schaltbild gezeichnet). (Ein passendes Reed-Relais ist bei Fa. Werner Conrad, Postfach 1180, 8452 Hirschau, erhältlich: Best.-Nr. 50383, Schließer 60 VA, Best.-Nr. 50395, Erregerspule 2,9 bis 5,4 Volt, Lieferzeit ca. 3 bis 4 Wochen.)Auch der BC107 wird mit 5 Volt versorgt. Damit ist die Hardwarebeschreibung des Interfaces abgeschlossen. Vielleicht wird man sich wundern, weshalb ich überhaupt ein Interface selbst gebaut habe, denn es gibt ja so etwas zu kaufen. Leider stimmt das nicht. Es gibt zwar für Mikroprozessoren V24-Interfaces zu kaufen, und zwar in der Version der Teletype-Schnittstelle (V24 ist eine sehr flexible Norm). Aber diese Schnittstellen haben nichts Gemeinsames mit 45 Baud und CCITT-2-Code, so daß sich ein Selbstbau nicht umgehen läßt. Außerdem ist er lehrreich und bringt Spaß. 4.ProgrammeDie beiden nachfolgend beschriebenen kleinen Programme sind Generatorprogramme, die ohne Eingabe eine sich wiederholende Ausgabe erzeugen. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() | Beide Programme fragen das wertniedrigste Bit von IN 0 (vgl. Abb.1) auf den Wert 1 ab, um eine Start- oder Schlußbedingung zu ermitteln. Abb.7 (links) zeigt eine Möglichkeit der Steuerung des Inhalts dieses Bits durch einen Schalter. Beide Programme benutzen das Unterprogramm der Abb.5 für die eigentliche Ausgabe. | |||||||||||||||||||||||||||||||||||||||||||||||||||
Beide Programme sind für Mikroprozessoren des Typs 8080 bestimmt. Beide Programme sind kleiner als 110 Bytes.
4.1. RY-Generator mit Zeilenwechsel nach 64 ZeichenDies Programm ist ohne weiteres ohne Ablaufplan verständlich.START, LXI SP,STACK Stackbereich definieren SUB A,A Akkumulator löschen und OUT 0 Linienstrom einschalten. WAIT, IN 0 Ausdruck beginnt, wenn Schalter ANI X'01' auf 1 steht. JZ WAIT * Schalter steht auf 1 MVI C,X'00' Zeichenzähler löschen MVI A,X'57' CR CALL PRINT MVI A,X'57' CR CALL PRINT MVI A,X'5D' LF CALL PRINT MVI A,X'40' Bu CALL PRINT RY, MVI A,X'55' R CALL PRINT MVI A,X'4A' Y CALL PRINT INR C Zeichenzähler erhöhen MOV A,C Zeichenzähler gleich 34? CPI X'22' (hexadezimal 22) JNZ RY nein, noch nicht JMP START ja, dann neue Zeile beginnen, vorher aber abfragen ob weitergemacht werden soll. Das letzte Y wird durch diesen Rücksprung nicht mehr mit ausgegeben! 4.2. CQ-Generator mit Aufforderung zum Kommen (Abb.8) |
![]() | Abb. 8 (links): Programmablaufplan CQ-Generator mit Aufforderung zum Kommen |
Dies Programm benutzt „selbststeuernde Texte”. Gemeint sind Texte, die ein Kennzeichen für das Textende enthalten. Ich habe als Wert für EOT (End of Text) den Wert Low Value (X'00') verwendet. | |
START1, SUB A,A Linienstrom einschalten OUT 0 START, LXI SP,STACK Stackbereich definieren WAIT, IN 0 Ausdruck beginnt, wenn der ANI X'01 Schalter auf 1 steht. JZ WAIT PUTCR, LXI H&L,CR Ausgabe CR CR LF CALL PUT MVI B,X'04' Schleifenzähler für viermal CQ in einer Zeile FERTIG, IN 0 Abfrage ob Schalter noch auf 1 ANI X'01' JZ PUTAR Wenn der Schalter auf Null steht, dann Ausgabe Aufforderung zum Kommen. PUTCQ, LXI H&L,CQ Andernfalls CQ drucken. CALL PUT DCR B JZ PUTCR Zeilenwechsel nach viermal CQ JMP FERTIG PUT, MOV A,(H&L) Allgemeines Druckunterprogramm CPl X'00, EOT? JZ GOBACK Ja, dann zurück CALL PRINT Nein, dann das Zeichen drucken INX H&L Nächstes Zeichen adressieren JMP PUT GOBACK, RET Rücksprung * PUTAR, LXI H&L,AR Ausgabe Aufforderung CALL PUT zum kommen. SUB A,A Linienstrom einschalten nachdem CALL PRINT das letzte Zeichen ausgegeben ist JMP WAIT | Das Registerpaar H&L dient als Indexregister zur Adressierung des Textes. Der Textteil CR CR LF wird doppelt verwendet. Er steht eigenständig und als Schluß des Textteils AR PSE KKKK. |
Für den Textteil habe ich zusätzlich die binäre Codierung angegeben. |
TEXTE Maschinencode und symbolisch 01011100 AR, C'A' 01010101 C'R' 01011011 C'b' 01001001 C'P' 01011010 C'S' 01011110 C'E' 01011011 C'b' 01010000 C'K' 01010000 C'K' 01010000 C'K' 01010000 C'K' 01010111 CR, X'57' CR 01010111 X'57' CR 01011101 X'5D' LF 00000000 X'00' EOT 01000000 CO, X'40' Bu 01010001 C'C' |
Hinweis: b heißt hier Zwischenraum. 01001000 C'Q' 01011011 C'b' 01010001 C'C' 01001000 C'Q' 01011011 C'b' 01010110 C'D' 01011110 C'E' 01011011 C'b' 01010110 C'D' 01001101 C'L' 01000100 X'44' Zi 01011001 C'8' 01000000 X'40' Bu 01001100 C'W' 01011100 C'A' 01011011 C'b' 00000000 X'00' EOT |
5. SchlußbemerkungenDieser Artikel hat mehrere Ziele. Er soll Sie ermutigen,
|