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