Udało mi się połączyć At89C51 z portem ps/2 klawiatury.
Problem polega na tym, że jak wciskam klawisze pojedynczo na klawiaturze to nic się nie dzieje, a jak wciskam przynajmniej dwa klawisz e na raz to literki wyswiatlaja na ekranie monitora.
Program napisałem w Bascomie, odczytuje on dane z klawiatury i podaje do komutera:
Kod:
Kod: Zaznacz cały
Do
Gosub odczytaj
While Clk = 0 ' czekaj az linia klawiatury bedzie wolna.
Waitms 2
Wend
Gosub Przeslij
Loop
...
Odczytaj: 'odkrylem ze blad jest gdzies w tej procedurze
Klawisz = 0
Reset P 'Zerowanie zmiennej klawisza.
Bitwait Kbdclk , Reset 'Oczekiwanie na znak od klawiatury. 'itp...
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.0
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.1
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.2
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.3
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.4
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.5
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.6
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set Klawisz.7
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then
Set P
End If
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
Bitwait Kbdclk , Set
X = Klawisz 'odczytany znak
Return
Z górydziękuje za wszelką pomoc.
p.s.
Nie muszę znać specyfikacji poszczególnych klawiszy, bo jedyne co robie
to przerzucam dane z jednego we/wy na drugie we/wy.