PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ps2-tastatur am 644p....



funkheld
09.02.2011, 20:02
hallo, ich habe eine ps2-tastatur am 644p.
funktioniert auch.

wer kann mir das gedöns von den datazeilen mal erklären.
ich kann es nicht enziffern, was das bedeuten kann.

gruss




$regfile = "m644pdef.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

Config Keyboard = Pind.2 , Data = Pind.4 , Keydata = Keydata

Dim S As String * 12
Dim B As Byte

$serialinput = Kbdinput

Print "hello"

Do

B = Getatkbd()

If B > 0 Then
Print B ; Chr(b)
End If

Loop

End


Kbdinput:

$asm

push r16 ; save used register
push r25
push r26
push r27

Kbdinput1:

rCall _getatkbd ; call the function

tst r24 ; check for zero

breq Kbdinput1 ; yes so try again

pop r27 ; we got a valid key so restore registers
pop r26
pop r25
pop r16

$end Asm
Return

B = Getatkbd()

Keydata:

'normal keys lower case

Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

'shifted keys UPPER case

Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

funkheld
09.02.2011, 20:08
noch ein programm von hier :
http://www.rn-wissen.de/index.php/PS/2_-_Schnittstelle

ich muss hier ja für den 644p das gimsk ersetzen mit eimsk ("push r0:in r0,eimsk:push r0:disable int1 ) und dieses ( pop r0:!out eimsk,r0:pop r0)

es werden nicht die tastendrücke angegeben, die ich drücke sondern ganz andere, die vom zahlenwert her nicht annähernd hinkommen.

woran liegt der fehler in diesem bascom-musterprogramm?

gruss

hardware.bas
10.02.2011, 08:00
Ich betreibe eine PS/2-Tastatatur an einem Atmega8 in BASCOM und muss
ehrlich gesagt erwähnen, dass ich die Routine dafür auch im wesentlichen
abgeschrieben habe, obwohl sie anders etwas aussieht, als bei Dir.
Du und ich können erstmal sagen, dass es funktioniert. Das Wichtigste!
Genau erschliesst sich mir die Funktion auch nicht, jedoch kann ich nur
soviel sagen, dass der Tastaturcode GANZ ANDERS ist, als der ASC-Code,
so dass eine Codewandlung gemacht werden muss, die dann in den
DATA-Zeilen abgelegt ist. Hoffentlich sind meine Ausführungen richtig,
ich denke hier gibts bestimmt Jemanden, der das gut ergänzen könnte.
VG Micha