Programmierung eines EPROMs für Morsetelegrafie

Artikel im FUNKAMATEUR Heft 7 (1991) Seite 408

Um einen EPROM für einen Rufzeichengeber oder eine Speichermorsetaste nach (1) oder (2) zu programmieren, habe ich ein kleines BASIC-Programm geschrieben. Das Programm läuft auf einem KC87, verwendet aber keine rechnerspezifischen Elemente, sondern allgemein übliche BASIC-Befehle, so daß es sich auch für andere Rechner nutzen läßt.

Es können16 Texte gespeichert werden, die so organisiert sind, daß sie zweimal acht Kanäle belegen. Nach dem Start des Programmes erwartet es die Eingabe der zu speichernden Texte.

Um eine sinnvolle Funktion der Speichermorsetaste zu gewährleisten, müssen die Morsezeichen eines Textes an je einem Datenbitausgang des EPROMs seriell erscheinen, wenn die Adresse des EPROMs hochgezählt wird. Um dies zu erreichen, sind in den DATA-Zeilen des Programmes die Morsezeichen als Strings abgelegt. Das Morsezeichenbesteht aus dem genormten Bitmuster und der sich anschließenden Pause, dem "A" entspricht "10111000". Der Programmablauf zerlegt diese Strings in einzelne 0- und 1-Strings und setzt sie im RAM-Bereich durch PEEK- und POKE-Operationen bit für Bit. Ist der Speicherbereich so "umgepflügt", läßt er sich auf den EPROM übertragen. Folgende Zeichen sind vorgesehen: die Ziffern, sämtliche Buchstabe (ohne Umlaute) und die Sonderzeichen , -.?

Das Zeichen "*" (2AH) dient programmintern dazu, Leertexte einzugeben, das heißt, von den 16 Möglichkeiten können einige für spätere Nachprogrammierungen freigehalten werden. Dazu steht in Programmzeile 230 als erster String der DATA-Anweisung eine einzelne 1, wie sie als Morsezeichen nicht vorkommt. Das Leerzeichen (20H) ist dem "+" (2BH) gleichgestellt und erzeugt zwischen zwei Wörtern eine Pause von fünf Punkten Länge. Will man die Pausenlänge variieren, müssen in Programmzeile 230 beim zweiten String nach der DATA-Anweisung eine oder mehrere Nullen hinzugefügt oder gestrichen werden. Das Zeichen "@" (40H) erzeugt das Zeichen AR (Ende).Programmzeile 120 legt den zu bearbeitenden Speicherbereich fest und Zeile 900 verweist darauf. Dieser Bereich muß nach dem Programmablauf auf den EPROM gebrannt werden.

Das Programm erkennt den Versuch, einen Text einzugeben, der mehr als 1024 Bit beanspruchen würde. In diesem Fall wird der entsprechende Bereich wieder frei gemacht und es erfolgt die Aufforderung, einen kürzeren Text einzugeben. Der zu lange Text, die Nummer des letzten Zeichens und die letzten möglichen Bits werden angezeigt.



Literatur

(1) Bisschoppnink, H. DL3MU: Caller 7, cq-DL 54 (1983) Heft 8, Seite 381

(2) Perner, M., Y21UO: Elektronische Morsetaste mit Festtextspeicher, FUNKAMATEUR 40 (1991), Heft 4, Seite 228


10 REM CW-TEXT
20 REM PROGRAMMERARBEITUNG FUER CALLER BZW.
30 REM SPEICHERMORSETASTE
40 REM COPYRIGHT ANDREAS BILSING, Y23AM
50 REM
100 DIM MC$(43): REM MORSECODE
110 ADR=-32768:REM ANFANGSADRESSE 8000HEX
130 FOR I=0 TO 2047:POKE (ADR+I);255 : NEXT I
140 FOR I=0 TO 43:READ MC$(I):NEXT I
230 DATA "1","00000","1110111010101110111000"
235 DATA "10111010111010111000"
240 DATA "1110101011101000","1110111011101110111000"
250 DATA "10111011101110111000"
260 DATA "101011101110111000","1010101110111000",101010101000","11101010101000"
270 DATA "1110111010101000","111011101110101000","11101110111011101000"
280 DATA "101011101110101000","1011101011101000","10111000","111010101000"
290 DATA "11101011101000","1110101000","1000","101011101000","111011101000"
300 DATA "1010101000","101000","1011101110111000","111010111000"
310 DATA "1011110101000","1110111000","11101000","11101110111000"
320 DATA "10111011101000","1110111010111000","1011101000","10101000","111000"
330 DATA "1010111000",101010111000","101110111000","111010101000"
340 DATA "1110101110111000","11101110101000"
400 FOR N=0 TO 15: REM 16 TEXTE
410 IF N<7 THEN 430
420 M=N:GOTO 440
430 M=N-8: ADR=-31744:REM ANF-ADR 2.K
440 PRINT "TEXT";N: T$="": INPUT T$
450 IF T$="" THEN T$="*"
500 Z=0:B=2^M: B=NOT B: L1=LEN T$
510 FOR I=1 TO L1
520 C$=MID$(T$,I,1):C=ASC(c$):IF C=32 THEN C=43
530 IF C>58 THEN C=C-47:GOTO 610
540 C=C-42
610 MZ$=MC$(C): L2=LEN (MZ$)
620 FOR K = 1 TO L2
640 MB$=MID$(MZ$,K,1)
650 IF MB$="1" THEN 680
660 D=PEEK(ADR+Z):D=D AND B
670 POKE (ADR+Z),D
680 Z=Z+1
690 IF Z<1024 THEN 800
700 B= NOT B:REM ZU LANGEN TEXT LOESCHEN
710 FOR L=0 TO 1023: D=PEEK (ADR+L)
720 D=D OR B:POKE(ADR+L),D:NEXT L
730 PRINT:PRINT"EINGEGEBENER TEXT LAENGER ALS 1023 BIT":PRINT
740 PRINT LEFT$(T$,I):PRINT
750 PRINT "NR. DES LETZTEN ZEICHENS:";I
760 PRINT"LETZTES BIT:";K
770 PRINT"KUERZEREN TEXT EINGEBEN"!":PRINT
780 GOTO 440
800 NEXT K:NEXT I: NEXT N
900 PRINT:PRINT"8000HEX...87FF EPROM BRENNEN"
1000 END



Zurück zur DL2LUX-Homepage


Copyright© Andreas Bilsing, DL2LUX, upload 31. Mai 1998