Forum: Mikrocontroller und Digitale Elektronik C167 Tabelle Assembler


von Stephan Lehrl (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

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

von Thomas S. (tstuetz)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.