Étape 5: Expliquant le code
Si vous avez compris l’organigramme ce sera assez facile
Le code a seulement 2 fonction
1) int gameByte (int courte commande)
2) int_PS2inanalougemode() Sub
int gameByte (int courte commande)
{
short int i ; variable utilisé comme compteur
_delay_us(1) ;
court de données int = 0 x 00 ; effacer la variable de données pour enregistrer les bits de poids faible de réglage plus tard.
pour (i = 0; j’ai < 8; i ++) / / 8 octets sont transférés j’ai < 8
{
Si (commande & _BV(i)) //each peu de commande est ANDED avec un 1, donc la valeur de cette cmnd est dans le cas d’une condition
{
SBI (PORTB, PScommand) ; Si la commande est une broche de commande a la valeur
}
d’autre
{
CBI (PORTB, PScommand) ; d’autre broche de commande faite à zéro
}
CBI (PORTB, PSclock) ; BASSE DE L’HORLOGE
_delay_us(1) ; Attendez la sortie de stabiliser
Si ((PINB & _BV(PSdata)))
{
SBI(Data, i) ; lu magasin et PSdata broche
}
d’autre
{
CBI(Data, i) ;
}
SBI (PORTB, PSclock) ; HORLOGE DE HAUTE
}
SBI (PORTB, PScommand) ;
_delay_us(20) ; Attendez ACK passer.
Return(Data) ;
}
int_PS2inanalougemode() Sub-
Cette fonction met le contrôleur en mode analogique, jusqu'à ce qu’elle renvoie la valeur 0x73 en 2ème octet indiquant que ce contrôleur PS2 est en mode analogique, si elle ne retourne pas ses incrémente le compteur et continue de mettre PS2 contrôleur est en mode analogique
int main (void)
dans la boucle principale nous interroger simplement l’entrée du contrôleur PS2.
vidéo
code complet est ici