mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C167 Tabelle Assembler


Autor: Stephan Lehrl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Stütz (tstuetz)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.