C167 Tabelle Assembler

Gast #215870
Hallo,

ich habe ein kleines Projekt laufen, in dem ich eine MF2-Tastatur über
die schnelle synchrone Schnittstelle des C167 auslese und ansteuere
(LED's schalten...).
Mein Assembler Programm läuft so weit sehr gur und ich kann Buchstaben
und Zahlen von der Tastatur einlesen. Um dem empfangenen und
ausmaskierten hex-Code einen Buchstaben oder einer Zahl zuzuweisen und
diese dann im Monitorprogramm auszugeben, bin ich folgendermaßen
vorgegangen:

_a:  cmp  R1,#1Ch
  jmp  cc_ne,_b
  mov  R0,#a1
  call  puts
  jmp   ENDE

_b:  cmp  R1,#32h
  jmp  cc_ne,_c
  mov  R0,#b1
  call  puts
  jmp   ENDE
...

puts ist ein Unterprogramm für die Ausgabe der Buchstaben am
Bildschirm. Am Ende des Programmes habe ich dann eine kleine
Unterprogrammbiliothek:

a1    db  'a',0
b1    db  'b',0

Bis heute konnte ich nichts finden, aber ich bin überzeugt davon, dass
es einen einfacheren Weg gibt, dieses Problem zu lösen.
Vielleicht kann mir jemand helfen einen eleganteren Weg zu finden, z.B.
nur eine Tabelle anzulegen und in der dann zu suchen ohne jeden
Buchstaben-hex-Wert einzeln zu checken und mit nur einer Tabelle.


Vielen Dank!!! Stephan
Gast #215871
hallo,

tabellen sind eine gute wahl, du hast schon den richtigen gedankengang.
auf den 80c51 gab es glaube ich einen befehl der in etwa wie
"mov a,@dptr+a"
lautet. denn gibt es bestimmt auch auf den c167. der befehl sagt
eigentlich schon alles. nach @dptr wird einfach die anfangsadresse der
tabelle geladen, und in den akku der wert aus der tastatur.
jetzt holst du mit den oben gesagten befehl den passenden wert aus der
tabelle. intern werden jetzt akku und dptr addiert und bilden den neuen
dptr. im akku steht dann der wert aus der tabelle. ich hoffe das mit
@dptr war richtig beim C167. wenn es den befehl nicht gibt mußt du dir
den datapointer selber ausrechnen.

MfG
#215872
movb  RxL,[Ry]

movbz Rx,[Ry]

Ry = Adresse auf den Anfang einer Tabelle (R0,...R15)
RxL= Bytewert in einem Register (R0L,R1L..R15L)
Rx = Wortwert obere 8 Bit werden 0 gesetzt

Bsp der Tabelle:

Anfang db 0x00 ; Code 00h von Tastatur wird in 00h umgesetzt
       db 0x01 ; Code 01h von Tastatur wird in 01h umgesetzt
...
       db 0xA1 ; Code 1Bh von Tastatur wird in A1h umegesetzt

Gruss

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.