Keycodes in ASCII umwandeln mit PIC

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

Reply to
Gecko
Loading thread data ...

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

Reply to
Dieter Wiedmann

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
Reply to
Frank Buss

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

Reply to
Wolfgang Mahringer

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.

Reply to
Markus Koechy

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

Reply to
Steffen Koepf

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

Reply to
Gecko

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. ;-)

Reply to
Gecko

Genial! Ich liebe solche treffsicheren Antworten. :)

Reply to
Le Filou

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.