zasoby Poziom 19

Joined: 11 Jul 2002 Posts: 792
|
#1
17 Sep 2004 22:21 Interfejs myszy i klawiatury komputerowej dla PICa |
|
|
|
Dużo układów bazujących na PIC wykorzystują proste przyciski do sterowania funkcjami zbudowanego urządzenia. Przy niewielkich ilościach jest opłacalne kupienie kilku przycisków, wszystko komplikuje się jeżeli potrzebne jest dużo przycisków i zaprogramowanie pod każdym przyciskiem innej funkcji. Wspomnijmy, że pomysł na dwukrotne kliknięcie został opatentowany ;) Z drugiej strony ceny klawiatur są bardzo niskie, osoby wymieniają klawiaturę przynajmniej raz na kilka lat. Czemu nie wykorzystać klawiatury lub myszki do sterowania pracą mikrokontrolera PIC?
Rozwiązanie jest kompatybilne tylko z złączem PS/2.
Demonstracyjny listing został napisany dla PIC16F628, gdzie pin RA0 jest używany dla linii DATA PS2 a RA1 jest używany dla CLK. Można użyć dowolnego PICa i dowolnych pinów wprowadzając korekcję do listingu. Na pokładzie klawiatury znajduje się pewnego rodzaju niewielki procesor z którym należy się skomunikować. Do tego są używane linie DATA i CLK, a zasilanie +5V jest doprowadzane pinami 5 oraz 2. Dane są wysyłane w sposób szeregowy - bit startu - 8 bitów danych oraz bit stopu. Wszystko jest odpowiednio synchronizowane przez sygnał zegarowy.
Listing programu dane wejściowe z klawiatury PS/2
| Code: |
MAIN: comf PORTA,W ; are clock and data lines both high?
andlw b’0000001’ ; (i.e. is keyboard in Idle state?)
btfsc STATUS,Z
goto MAIN ; no
call RECEIVE ; yes, so check if a key pressed
movf BYTE,W ; is BYTE > 0 (has a data byte been received?)
btfsc STATUS,Z
goto MAIN ; no, so try again
btfss PARITY,0 ; yes, is parity bit correct (hi)?
goto MAIN ; no, so start again
call YourRoutine ; yes (data received ok so use it as you want)
goto MAIN ; repeat it all again
RECEIVE: btfss PORTA,1 ; wait till clock high (idle clock)
goto RECEIVE ; not yet high
btfsc PORTA,0 ; it’s high, so is data line low (start bit)?
return ; no, it’s high, so a false Start bit, try again
clrf BYTE ; yes, set BYTE to zero prior to getting data
movlw 8 ; set loop for 8 data bits
movwf LOOP
clrf PARITY ; clear parity record
RECDATA: rrf BYTE,F ; rotate byte to make room for received bit
call HIGHLOW ; wait for clock high to low transition
RX2: btfsc PORTA,0 ; is data low?
goto RECSET ; no, it’s high
bcf BYTE,7 ; yes, data is low so clear bit 7 of BYTE
goto RECNEXT ; and ignore parity counter
RECSET: bsf BYTE,7 ; set bit 7 of BYTE
incf PARITY,F ; and add 1 to parity counter
RECNEXT: decfsz LOOP,F
goto RECDATA ; loop until all 8 bits have been received
call HIGHLOW ; wait for clock high to low transition
movf PORTA,W ; get parity bit
xorwf PARITY,W ; XOR with parity counter
andlw 1 ; extract bit 0 of parity
movwf PARITY ; and store it
call HIGHLOW ; wait for Stop bit (but not actually used)
return ; return to main routine
HIGHLOW: btfss PORTA,1 ; loop until clock is high
goto HIGHLOW
HL2: btfsc PORTA,1 ; loop until clock is low
goto HL2
return
|
W załączniku opis w języku angielskim, schemat przykładowego układu, listingi programów, znaczenie kodów klawiszy.
EPE
| Filename: |
PIC_to_keyboard_and_mouse.zip |
 Download |
| Contents: |
kbd151.asm
, mouse213.asm
, p16f628.inc
, KBD151.HEX
, MOUSE213.HEX
, PIC to k...d mouse
See all... |
| Filesize: |
15.18 KB |
| Punkty: |
0.00 |
| Filename: |
klawiatura dla pic.pdf |
 Download |
| Contents: |
|
| Filesize: |
192.4 KB |
| Punkty: |
0.00 |
|
|
zasoby Poziom 19

Joined: 11 Jul 2002 Posts: 792
|
#2
19 Sep 2004 11:28 Re: Interfejs myszy i klawiatury komputerowej dla PICa |
|
|
|
Przykładowa gra z wykorzystaniem myszki i kody źródłowe
| Filename: |
alpha mouse.zip |
 Download |
| Contents: |
alpha mouse
, alphamouse.txt
, alphamouse70.asm
, ALPHAMOUSE70.HEX
See all... |
| Filesize: |
5.62 KB |
| Punkty: |
0.00 |
| Filename: |
alpha mouse.pdf |
 Download |
| Contents: |
alpha mouse
, alphamouse.txt
, alphamouse70.asm
, ALPHAMOUSE70.HEX
See all... |
| Filesize: |
185.15 KB |
| Punkty: |
0.00 |
|
|