Keycodes in ASCII umwandeln mit PIC

Nov 29, 2004 8 Replies

Ich will eine Schaltung bauen, die an eine PS/2 Tastatur angeschlossen wird und die gesendeten daten in ascii code umwandelt. Im www habe ich da auch schon etwas gefunden:

formatting link



Da ich den Code noch etwas anpassen will (und auch verstehen will) will ich ihn nicht einfach so auf den PIC brennen. Ich habe ihn mir mal durchgelesen, war ja alles eigentlich ganz einfach, aber bei einer stelle hakt es noch: Ich verstehe nicht genau wie jetzt bestimmt wird das z.B.



0x1C in ASCII 0x61 sein soll (hier jezt Buchstabe "a")

in der Datei die in den Hauptteil mit include eingefügt wird

formatting link
stehen lauter retlw befehle. aber er kommt doch so wie ich das verstehe nur bis zum ersten befehl, nimmt den wert in w mit und springt dann zurück. also wo passiert da die umwandlung?



ich hoffe ihr könnt mir helfen.



grüße Gecko


Gecko schrieb:

Hab ich dich nicht erst kürzlich im Zoo gesehen? Hätte nicht gedacht, dass du dich mit Elektronik befasst.

formatting link

addwf PCL,f beachten!

Gruß Dieter

das ist ein übliches Verfahren beim PIC, Wertetabellen abzulegen. Wie du siehst, wird der PCL geändert, wodurch danach der PIC an einer anderen Stelle weitermacht und dann den passenden retlw ausführt.

Frank Buß, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de

Hi Gecko,

Gecko schrieb: ^^^^^ Realname wird hier gerne gesehen, erh=F6ht die Chancen auf Antworten!

wird

ich

le

Da musst Du das Programm mal durchsehen und verstehen wie es funktioniert, ich bin n=E4mlich zu faul dazu :-)

ger_main.html)

nur

k.

Das ist eine Tabelle (Look up table). Am Eingang (KDBtable) wird ein 8-bit Wert im Register W =FCbergeben. Dieser Wert wird zum Program Counter dazuaddiert (addwf PCL,f), erst dann wird weiter ausgef=FChrt. Ist W also 5, werden 5 der retlw's =FCbersprungen und der 6. Kommt zum tr= agen. Das Makro DT ist nur eine vereinfachte Schreibweise f=FCr eine Reihe von retlw's.

Die Tabelle wirst Du =E4ndern m=FCssen, falls Du keine Schweizer Tastatur=

verwenden willst (einige Scancodes sind auf einer rein deutschen Tastatur anders).

Beim =C4ndern aber aufpassen: die Tabelle darf nicht =FCber eine

100-hex-Byte Grenze (page) gehen!

Viel Spa=DF beim R=E4tseln Wolfgang

--=20 From-address is Spam trap Use: wolfgang (dot) mahringer (at) sbg (dot) at

Gecko schrieb: >

formatting link

Hallo,

entscheidend ist der addlw-Befehl zu Beginn der Routine:

KBDtable ; (not used for characters typed with shift button active) addwf PCL,F retlw 0 ; invalid entry retlw A'9' ; F9 -> 9 0x01 retlw 0 ; retlw A'5' ; F5 -> 5 [...]

Ablauf:

  1. Der Tastaturcode steht im W-Register.

  1. Unterprogramm wird mit "call KBDtable" aufgerufen.

  2. Der addwf-Befehl addiert den Inhalt des W-Registers zum Befehlszähler (!) hinzu. Dies wirkt wie ein Sprungbefehl relativ zur aktuellen Befehladresse um entsprechend viele Befehle.

  1. Der zum Tastaturcode (= Inhalt des W-Registers = Sprungweite des durch addlw ausgelösten relativen Sprungs) zugehörige retlw-Befehl wird ausgeführt.

  2. Nach der Rückkehr aus dem Unterprogramm KBDtable steht im W-Register der zugeordnete ASCII-Code.

Ich hoffe, das konnte Dir weiterhelfen.

Grüße, Markus.

Hallo,

Fast richtig ;)

Das ist ne LUT (Lookup Table). Beim PIC muss man das so realisieren (retlw), da man anderweitig nicht auf Tabellen im Code-Memory zugreifen kann (abgesehen mal von den neuesten Flash-Modellen, da kann man das Flash in etwa so auslesen wie das EEPROM), sondern nur ueber diese RETLW-Konstruktion:

GET_DATA: ADDWF PCL ; W = Offset

RETLW Wert0 ; 1. Wert RETLW Wert1 ; ... RETLW Wert2 ; RETLW Wert3

Wenn man jetzt einen CALL GET_DATA ausfuehrt, und dabei in W der Wert 0 steht, wird zum PCL nichts addiert, und der erste RETLW wird ausgefuehrt, laedt den Wert0 und huepft zurueck. Steht 1 in W, ueberspringt er das erste RETLW, fuehrt den

  1. RETLW aus, und huepft mit Wert1 in W zurueck. Usw...

Schau mal vor die RETLW-Reihe bzw. im Assemblerprogramm an die Stelle, wo die Datei eingebunden wird, da muesste ein ADDWF PCL davorstehen.

Gruss,

Steffen

Am Mon, 29 Nov 2004 17:22:40 +0100 schrieb Markus Koechy: Aah, jetzt hat es klick gemacht, danke

Am Mon, 29 Nov 2004 17:11:28 +0100 schrieb Dieter Wiedmann:

Wieso nicht? Es gibt ja auch Affen die malen. Ausserdem eignen sich meine klebrigen Finger sehr gut um SMD-Bauteile auf Platinen zu platzieren. ;-)

Genial! Ich liebe solche treffsicheren Antworten. :)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required