|
|
View previous topic :: View next topic |
Author |
Message |
Guest
|
PS2 KEYBOARD |
Posted: Thu Feb 09, 2006 7:39 pm |
|
|
Hy !
I looking to find a sample source to send key to PC PS2 port
I only need to detect keypress on pic port and send A key on PC
Thanks
Alain |
|
|
RVaughn13
Joined: 09 Feb 2006 Posts: 13 Location: Santa Fe, Texas
|
PS2 Keyboard |
Posted: Fri Feb 10, 2006 6:18 pm |
|
|
Hi,
There are other ways to pass information to your PS2 port (if you only want to detect a button press or switch closure). There are many different types of PS2 keyboard emulators used by the MAME gaming industry. These emulators have screw-lug terminal blocks and are programmable to transmit any character (or series of characters) to your IBM PS2 keyboard port. An example can be found here:
http://www.ultimarc.com/ipac1.html
Hope this helps! _________________ --Rick |
|
|
Donlaser
Joined: 17 Sep 2005 Posts: 12 Location: Trenque Lauquen, Argentina
|
|
Posted: Fri Feb 10, 2006 8:07 pm |
|
|
I use this routines for ps/2 i/o, with a pic16f628 running @4mhz intrc.
Work without problem in more than 2000 units deployed.
You can use this for code as Asm inline o recode in CCS C.
KBD_CLK_I and KBD_DAT_I are inputs pins
KBD_CLK_O and KBD_DAT_O are outputs pins what drives a npn transistors with the colectors conected at de data lines/clock lines and the emiter to GND.
note: Delay is in "cycles" (running at 4mhz).
I hope this was a start point for you.
Hernan.
Argentina.
;---------------------------------------------------------------------------------------------
; ByteOut:
; Sends a byte in w to the host.
; Returns 0xFE if inhibited during transmission.
; Returns 0xFF if host interrupts to send its own data.
; Returns 0x00 if byte sent successfully.
;---------------------------------------------------------------------------------------------
; OUTPUT ONE BYTE: - TIMING IS CRITICAL!!!
;---------------------------------------------------------------------------------------------
SendKey movwf LastSend
ByteOut movwf Temp0
InhibitLoop btfss KBD_CLK_I ;Test for inhibit
goto InhibitLoop
Delay 50
btfss KBD_CLK_I
goto InhibitLoop
btfss KBD_DAT_I ;Check for request-to-send
retlw 0xFF
clrf Parity
movlw 0x08
movwf Counter
movlw 0x00
call BitOut ;Start bit (0)
btfss KBD_CLK_I ;Test for inhibit
goto ByteOutEnd
Delay 4
ByteOutLoop movf Temp0, w
xorwf Parity, f
call BitOut ;Data bits
btfss KBD_CLK_I ;Test for inhibit
goto ByteOutEnd
rrf Temp0, f
decfsz Counter, f
goto ByteOutLoop
Delay 2
comf Parity, w
call BitOut ;Parity bit
btfss KBD_CLK_I ;Test for inhibit
goto ByteOutEnd
Delay 5
movlw 0xFF
call BitOut ;Stop bit (1)
Delay 48
retlw 0x00
ByteOutEnd bcf KBD_DAT_O ; dato a alto (inv)
nop ; x las dudas...
bcf KBD_CLK_O ; clock a alto (inv)
retlw 0xFE
BitOut andlw 0x01 ; saca el bit 0 de w por la salida..
btfss STATUS, Z
bcf KBD_DAT_O ; cero
btfsc STATUS, Z
bsf KBD_DAT_O ; uno
Delay 21
bsf KBD_CLK_O ; clock abajo (uno)
Delay 45
bcf KBD_CLK_O ; clock arriba (cero)
Delay 5
return
;---------------------------------------------------------------------------------------------
; ByteIn:
; Reads a byte from the host.
; Result in "Receive" register.
; Returns 0xFD in w if timeout waiting start bir
; Returns 0xFE in w if host aborts transmission.
; Returns 0xFF in w if framing/Parity error detected.
; Returns 0x00 in w if byte Received successfully.
;---------------------------------------------------------------------------------------------
; READ ONE BYTE: - TIMING IS CRITICAL!!!
;---------------------------------------------------------------------------------------------
ByteIn clrf Contador
ByteInL decfsz Contador, F
goto espsb
retlw 0xFD
espsb btfss KBD_CLK_I ;Wait for start bit, clock alto con dato bajo..... por el tiempo en Contador...
goto ByteInL
btfsc KBD_DAT_I
goto ByteInL
movlw 0x08
movwf Counter
clrf Parity
Delay 28
ByteInLoop call BitIn ;Data bits
btfss KBD_CLK_I ;Test for inhibit
retlw 0xFE
bcf STATUS, C
rrf Receive, f
iorwf Receive, f
xorwf Parity, f
decfsz Counter, f
goto ByteInLoop
Delay 1
call BitIn ;Parity bit
btfss KBD_CLK_I ;Test for inhibit
retlw 0xFE
xorwf Parity, f
Delay 5
ByteInLoop1 Delay 1
call BitIn ;Stop bit
btfss KBD_CLK_I ;Test for inhibit
retlw 0xFE
xorlw 0x00
btfsc STATUS, Z
clrf Parity
btfsc STATUS, Z ;Stop bit = 1?
goto ByteInLoop1 ; No--keep clocking.
;Acknowledge
bsf KBD_DAT_O ; dato como salida
Delay 11
bsf KBD_CLK_O ; clock como salida
Delay 45
bcf KBD_CLK_O ; clock como entrada
Delay 7
bcf KBD_DAT_O ; data como entrada
btfss Parity, 7 ;Parity correct?
retlw 0xFF ; No--return error
Delay 45
retlw 0x00
BitIn Delay 8
bsf KBD_CLK_O ; clock como salida
Delay 45
bcf KBD_CLK_O ; clock como entrada
Delay 21
btfsc KBD_DAT_I
retlw 0x80
retlw 0x00 |
|
|
Guest
|
|
Posted: Sat Feb 11, 2006 9:08 am |
|
|
Thank you very much !! |
|
|
kender
Joined: 09 Aug 2004 Posts: 768 Location: Silicon Valley
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|