hvordan interface PS / 2 mus wih Atmel 8.051 mikrocontroller

U

user1111

Guest
desuden er det muligt at kommunikere PS / 2 mus i serie mode?

 
hej,
om den serielle tilstand.Jeg tror det ikke er muligt ...PS2 bruge en extrange 10-11 smule shincronous datapakker, hvor uret er genereret af musen!

Jeg brugte RC51 til denne rutiner ...håber du finder dem nyttige ...-------------------------------------------------- --
sbit psDATA = P1 ^ 0;
sbit psCLOCK = P1 ^ 1;void ps2Inhibit ()
(
psDATA = 1;
psCLOCK = 0;
)

bit ps2Rb ()
(
bit c;
while (psCLOCK);
c = psDATA;
while (! psCLOCK);
return c;
)
char ps2Rx ()
(
char i = 8, a = 0;
psCLOCK = 1;
ps2Rb ();
do (
a>> = 1;
if (ps2Rb ()) a | = 0x80;
) While (- i);

ps2Rb (); / / bit: paritet ...
ps2Rb (); / / bit: stop ...
return a;
)

void ps2Tb (bit c)
(
while (psCLOCK);
psDATA = c;
while (! psCLOCK);
)

void ps2Tx (char dato)
(
char i = 50, pari = 0;
psCLOCK = 0;
mens (- i); / / aprox 100us
psDATA = 0; / / bit: start.(RTS)
i = 8;
psCLOCK = 1; / / RTS ...
do (
if (dato & 1) (ps2Tb (1); pari ;)
else ps2Tb (0);
Dato>> = 1;
) While (- i);

(pari & 1)?ps2Tb (0): ps2Tb (1) / / bit par
ps2Tb (1);
while (psCLOCK);
while (! psCLOCK);
)

char Tipo;
underskrevet char mouse_X = 0;
underskrevet char mouse_Y = 0;
underskrevet char mouse_Z = 0;

void init_MOUSE ()
(
ps2Tx (0xFF); / / reset
ps2Rx (); / / Acknoledge
ps2Rx (); / / selvtest = AAH
ps2Rx (); / / mus ID = 00h
ps2Tx (0xF3); / / prøvetagning ...
ps2Rx () / /-Acknoledge
ps2Tx (0xC8); / / 200
ps2Rx (); / / Acknoledge

ps2Tx (0xF3); / / prøvetagning ...
ps2Rx (); / / Acknoledge
ps2Tx (0x64) / / 100
ps2Rx (); / / Acknoledge

ps2Tx (0xF3); / / prøvetagning ...
ps2Rx (); / / Acknoledge
ps2Tx (0x50) / / 80
ps2Rx (); / / Acknoledge

ps2Tx (0xF2); / / ID
ps2Rx (); / / Acknoledge
Tipo = ps2Rx (); / / mus ID = 00 normal 03 intelli

ps2Tx (0xF3); / / afsluttende prøver ...
ps2Rx (); / / Acknoledge
ps2Tx (0x0A) / / 10 (je je je jeg er langsom ...)
ps2Rx (); / / Acknoledge

ps2Tx (0xE8); / / Res ...
ps2Rx (); / / Acknoledge
ps2Tx (0x00) / / 1 tælle / mm
ps2Rx (); / / Acknoledge

)

char mouse_STAT;
underskrevet char mouse_dX;
underskrevet char mouse_dY;
underskrevet char mouse_dZ;

void read_mouse ()
(
ps2Tx (0xEB); / / Data
ps2Rx (); / / Acknoledge
mouse_STAT = ps2Rx ();
mouse_dX = ps2Rx ();
mouse_dY = ps2Rx ();
if (Tipo) mouse_dZ = ps2Rx ();
/ / abosolute pos ...
mouse_X = mouse_dX;
mouse_Y = mouse_dY;
if (Tipo) mouse_Z = mouse_dX;
)

-------------------------------------------------- --nu skal du først kalde

init_MOUSE ();



read_mouse ();

at læse værdier i mouse_X, mouse_Y Og måske mouse_Z (også mouse_dX, og så .. er nyttige ...)

håber, du allerede har søgt på PS / 2 format og PS / 2 mus kommandoer ...skål!

 

Welcome to EDABoard.com

Sponsor

Back
Top