Paso 2: Subrutinas comunicaciones
Lo primero que debemos hacer es conectar los dos controladores. Así que tome un cable de PD6 en uno y conecte a PD7 en el otro y viceversa. Luego inícielos estableciendo PD7 salida en ambos y PD6 con la entrada de ambos. Finalmente todos ellos fijado a 0V. En concreto, añadir lo siguiente en el Init o restablecer la sección del código en cada microcontrolador:
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
Ahora vamos a configurar la subrutina de comunicaciones en la viruta del rodillo de dados. En primer lugar definir una nueva variable en la parte superior llamado "total" que almacenará el número en el par de dados e inicializar a cero.
Luego escribir una subrutina para comunicarse con el analizador:
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
En el analizador añadimos un rcall desde la rutina principal a la subrutina de comunicación:
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
y luego escribir la subrutina de comunicar lo siguiente:
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
Hay que ir! Ahora cada microcontrolador está configurado para comunicarse el resultado del rollo de dados y luego mostrar en el analizador.
Vamos a implementar una manera mucho más eficiente de comunicar más tarde cuando tenemos que transferir el contenido de un registro entre los controladores en lugar de sólo un rollo de dados. En ese caso, todavía utilizamos sólo dos cables conectarlos pero usaremos 1,1 significa "comenzar la transmisión"; 0,1 en el sentido de "1"; 1,0 en el sentido de "0"; y por último 0,0 significa "transporte".
Ejercicio 1: ver si se puede implementar el mejor método y usarlo para transferir los dados como un número binario de 8 bits.
Le adjunto un video que muestra a mina en operación.