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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.