Étape 2: Sous-routines Communications
La première chose que nous devons faire est de connecter les deux contrôleurs. Alors prenez un fil de PD6 sur l’un et le connecter à PD7 sur l’autre et vice versa. Puis les initialiser en affectant PD7 sortie sur les deux et PD6 à se prononcer sur les deux. Enfin tous les définir à 0V. Plus précisément, ajoutez la ligne suivante à l’Init ou réinitialiser la section du code sur chaque microcontrôleur :
sbi DDRD,7 ; PD7 set to output cbi PortD,7 ; PD7 initially 0V cbi DDRD,6 ; PD6 set to input cbi PortD,6 ; PD6 initially 0V clr total ; total on dice initially 0
Maintenant nous allons mettre en place la sous-routine de communications sur la puce de dés-rouleau. Tout d’abord définir une nouvelle variable dans la partie supérieure appelée « total » qui mémorise le nombre total roulé sur la paire de dés et initialisez-la à zéro.
Puis écrire une sous-routine pour communiquer avec l’analyseur :
communicate: cbi PortD,7 sbi PortD,7 ; Send ready signal wait: sbic PinD,6 ; read PinD and skip if 0V rjmp wait delay 8 ; delay to synchronize (found this experimentally) send: dec total delay 2 ; delay for each die count cpi total,0 ; 0 here means "total" number delays have been sent breq PC+2 rjmp send cbi PortD,7 ; PD7 to 0V clr total ; reset dice total to 0 ret
Dans l’analyseur, nous ajoutons un rappelez la routine principale à la sous-routine de communiquer :
clr analyzer ; prepare for new number sbic PinD,6 ; check PD6 for a 5V signal rcall communicate ; if 5V go to communicate mov analyzer, total ; output to analyzer display rcall analyzer
et puis écrire la sous-routine de communiquer comme suit :
communicate: clr total ; reset total to 0 delay 10 ; delay to get rid of bounces sbi PortD,7 ; set PB7 to 5V to signal ready receive: delay 2 ; wait for next number inc total ; increment total sbic PinD,6 ; if PD6 goes back to 0V we're done rjmp receive; otherwise loop back up for more data cbi PortD,7 ; reset PD7 when done ret
Là vous allez ! Chaque microcontrôleur est maintenant mis en place pour communiquer le résultat de la lancer de dés et ensuite afficher dans l’analyseur.
Nous mettrons en oeuvre d’une façon beaucoup plus efficace de communiquer par la suite lorsque nous avons besoin de transférer le contenu d’un registre entre les contrôleurs au lieu de juste un jet de dé. Dans ce cas, nous utiliserons encore que deux fils qui les relient, mais nous allons utiliser 1,1 signifie « commencer la transmission » ; 0,1 à signifier « 1 » ; 1,0 pour signifier « 0 » ; et enfin de 0,0 signifie « fin de transmission ».
Exercice 1: voir si vous pouvez mettre en œuvre la meilleure méthode et l’utiliser pour transférer les dés comme un nombre binaire de 8 bits.
Je vais joindre une vidéo qui montre mine en exploitation.