Paso 5: Explicar el código

Si ha entendido el diagrama de flujo esto será muy fácil
El código tiene sólo 2 función
1) gameByte int (int corta comando)
2) int_PS2inanalougemode() vacío 
gameByte int (int corta comando)
{
corto int i;                                                 variable utilizada como contador de
_delay_us(1);
Short int datos = 0 x 00;                             borrar datos variable para guardar bits bajo ajuste más adelante.
para (i = 0; i < 8; i ++) / / como se transfieren 8 bytes < 8
{
Si (command & _BV(i)) poco de //each de comando es deben con 1 uno por uno, así es el valor de eso cmnd si está en condición
{
OSE (PORTB, PScommand);       Si el comando es un comando pin se establece
}
otra cosa
{
CBI (PORTB, PScommand);     otro comando pin se hace cero
}
CBI (PORTB, PSclock);                        RELOJ BAJO
_delay_us(1);                                    Espere a la salida se estabilice
Si ((PINB & _BV(PSdata)))
{
SBI(Data, i);                               leer tienda y PSdata pin
}
otra cosa
{
CBI(Data, i);
}
OSE (PORTB, PSclock);                             RELOJ DE ALTA
}
OSE (PORTB, PScommand);
_delay_us(20);                                                   esperar confirmación pasar.
Return(Data);
}
vacío int_PS2inanalougemode()-
Esta función pone el mando en modo analógico hasta que devuelve el valor 0x73 de 2 bytes que indican que el controlador PS2 en modo analógico si no devuelve sus incrementos el contador y sigue PS2 controlador está en modo analógico
int Main
en el bucle principal encuesta simplemente la entrada de controlador de PS2.
video
código completo es













