hvordan grensesnittet PS/2-mus wih atmel 8051 mikrokontroller

U

user1111

Guest
også er det mulig å kommunisere ps / 2 mus i seriell modus?

 
hei,
om den serielle modus.Jeg tror det ikke mulig ...PS2 bruke en extrange 10-11 bit shincronous datapakker, hvor klokken er generert av musen!

Jeg brukte RC51 for denne rutiner ...håper du finner 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;
while (- 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 linje
ps2Tb (1);
while (psCLOCK);
while (! psCLOCK);
)

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

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

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

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

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

ps2Tx (0xF3); / / endelig prøvetaking ...
ps2Rx (); / / Acknoledge
ps2Tx (0x0A); / / 10 (je je je jeg er treg ...)
ps2Rx (); / / Acknoledge

ps2Tx (0xE8); / / Res ...
ps2Rx (); / / Acknoledge
ps2Tx (0x00); / / 1 teller / mm
ps2Rx (); / / Acknoledge

)

char mouse_STAT;
signert char mouse_dX;
signert char mouse_dY;
signert 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;
)

-------------------------------------------------- --Nå første du bør ringe

init_MOUSE ();



read_mouse ();

å lese verdier i mouse_X, mouse_Y Og kanskje mouse_Z (også mouse_dX, og så .. er nyttige ...)

håper du allerede søkte på PS / 2-format og PS / 2 mus kommandoer ...skål!

 

Welcome to EDABoard.com

Sponsor

Back
Top