Hallo

Seit Tagen verbiege ich mich bei folgendem Problem:
Ich beschäftige mich zur Zeit mit der Programmierung einer Laufschrift, ähnlich der auf der Seite

http://home.wanadoo.nl/electro1/avr/dotmatrix.htm

Ich benutze aber kein intelligentes Display, sondern verwende die 5x7-Punktmatrixmodule TA07-11 von Reichelt.
Die Zeilen werden mit einem ULN2803A durchgetickert, die Spalten zeilenweise in 5 mal 74HC595 eingetaktet (40 Spalten).
Um die richtige Taktung zu überprüfen und die Zeilenfrequenz einzustellen, damit die Anzeige nicht flimmert, habe ich einen Punkt spalten- und zeilenweise durchlaufen lassen. Das ist soweit ok.

Der Zeichensatz ist zeilenweise im Speicher abgelegt (7 Zeilen je 8 Bit) und jeweils, wie üblich, über ein Label erreichbar.
Dabei habe ich mich an die Organisation des LCD-Zeichensatzes gehalten (ist einfacher, brauchte nur die Bits übernehmen).
Dies sieht dann so aus:

A:
.db 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000, 0

B:
.db 0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b11110000, 0

C:
.db ... usw., Sch...arbeit, den kompletten Zeichensatz einzutippen

Das Bit0 wird zuerst gelesen, der ganze Ramsch nach links rausgeschoben und in den Datenpin des 74HC595 eingetaktet.
Das erste Byte ist dabei die oberste Zeile, das letzte die unterste und die abschliessende Null wegen der Wortadressierung.
Beim Einlesen wird bis zum 6.Bit gezählt (6.Bit ist Leerspalte zwischen den Buchstaben) und der Rest wird verworfen und das entsprechende Zeilenbyte des nächsten Zeichen eingelesen. Die einzelnen Zeichen werden von rechts ins Display geschoben. So kann man den Satz Zeichen für Zeichen so einlesen, wie man ihn liest und erscheint auch so im Display. Da die Anzeige während des Eintakten abgeschaltet ist, sieht man dies nicht.

Nach jeder komplett eingelesenen Zeile wird das Display eingeschaltet. Die ganze Taktung geschieht während eines Interrupts. So ist gewährleistet, daß die Zeilen nicht gegeneinander verschoben werden.

Nun stehe ich vor dem Problem, das in ein Register eingelesene Zeichen einem Label in der Tabelle zuzuordnen. Bei Hochsprachen hat ja jedes Zeichen eine Ordnungszahl, diese könnte ich dann als Index verwenden. Da ich keine rechte Lust habe, mich in C einzuarbeiten, programmiere ich in Assembler. Da weiß ich nicht, wie diese Nuß zu knacken ist.

Z.B.: es wird 'e' eingelesen und es soll zum Label "e:" gesprungen werden und das entsprechende Zeilenbyte übernommen werden.
Die einzelnen Zeilen lassen sich über einen Index-Zähler adressieren, das wäre nicht das Problem. Das Problem ist, daß ein Label als Adresse definiert wird. An dieser Verbindung vom Zeichen zum entsprechenden Label beiße ich mir die Zähne aus.

Wäre nicht schlecht, wenn jemand einen Tip hätte. Ich hoffe, daß dies alles verständlich und nachvollziehbar ist.

mfg

Roger