Paso 5: El software de diseño
Es el diseño de hardware, ahora tenemos que diseñar el software que permitirá que nuestro hardware se convierten en un dado.
Una cosa que usted probablemente ha notado fue que la aplicación de hardware se hizo de una manera estructurada, de bloque de edificio. Necesitamos a nuestro software de diseño de la misma manera.
En el diseño de nuestro software, permite empezar por dividir el sistema en bloques funcionales. Una división fácil es dividir el problema en una entrada (el botón), algunos proceso (realmente los dados del balanceo) y una salida (los LEDs).
Permite empezar por construir primero la parte de salida de nuestro código. Es el componente más visual, y que nos permite 'poner algunos funcionamientos en el tablero' temprano. Antes de empezar aunque, permite hablar un poco sobre el conjunto de instrucciones del microprocesador y la arquitectura.
La gama PIC de microprocesadores implementan un reducido instrucción Set Computer (RISC). Tener un núcleo RISC es un factor que hace que estos CPU tan rápido. Una desventaja de tener un núcleo RISC es que la gama PIC de microprocesadores sólo implementar aproximadamente 37 instrucciones, así que de vez en cuando tarda más instrucciones para hacer las cosas, y a menudo las soluciones no siempre parecen ser tan intuitivo como en, por ejemplo, un Z80 o 6502.
En la foto, el registro principal del trabajo es el registro 'W'. La mayoría de nuestras operaciones utilizan el registro 'W' de alguna manera. Tomemos, por ejemplo, un conjunto de comandos que es la salida de un patrón binario '10101010' al puerto B.
MOVLW B '10101010'
MOVWF PortB
En primer lugar, la palabra que queremos escribir es cargada en el registro 'W', entonces el registro 'W' se escribe en el puerto B.
Podemos utilizar esta secuencia de operaciones para generar el patrón de bits para mostrar un rodillo de dados de 6. Desde el diagrama esquematico, podemos ver que la primera matriz está conectada al puerto A, bits 0 a 3 de la siguiente manera;
Puerto A(0) - centro de LED
A.1 - el puerto de la esquina de LEDs (1) y (3).
Puerto A(2) - esquina de LEDs (2) y (4).
Puerto A(3) - LED media (5) y (6).
Para mostrar el patrón para un 6, los LED de la esquina y todos los LEDs mediados en, pero el centro LED está apagado. Esto equivale a patrón de bits de b '00001110'. Por lo tanto, para mostrar un 6, simplemente ejecutamos las instrucciones;
MOVLW B '00001110'
MOVWF PortA
Asimismo, para mostrar un 1 (el LED del centro), utilizaríamos;
MOVLW B '00000001'
MOVWF PortA
Nos hemos estado refiriendo a 6 como 00001110 y 1 como 00000001. Puede ser confuso utilizar números como este, sobre todo cuando realmente no son números, son simplemente patrones. Para facilitar la confusión, la mayoría de los ensambladores permiten el uso de 'Constantes' para proporcionar una asignación entre un nombre de texto y un número. En el caso de nuestra exhibición de dados, podemos utilizar la palabra Die6 en lugar 00001110 o Die1 en lugar de 00000001.
Sería una lista de constantes que podríamos usar en nuestra pantalla;
Die1 B '00000001'
Die2 B '00000100'
Die3 B '00000101'
Die4 B '00000110'
Die5 B '00000111'
Die6 B '00001110'
DieOff B '00000000'
DieTest B '00001111'
Las 2 últimas entradas (DieOff y DieTest) son útiles para apagar la pantalla, o verificar que todos los LEDs son operativos en el arranque al encender todos los LEDs.
Ahora que sabemos cómo mostrar un número, se debe producir el bloque de construcción que nos permite proporcionar un número, y el patrón de bit correspondiente se carga en la pantalla.
Antes de que discutimos esta rutina de exhibición, cabe mencionar que software es mejor escrito de manera modular, una rutina a la vez. Esto permite funcionalidad para agregar componente por componente. Entonces podemos centrarnos en escribir cada componente individualmente, permitiendo software complejo que se construirá la capa por capa.
A nuestro bloque de edificio para la visualización de un rollo de dados. Una rutina para implementar la funcionalidad de pantalla podría verse así;
; En primer lugar, definir las constantes necesarias... Die1 EQU B '00000001'; se definen algunas constantes Die2 EQU B '00000100'; para los varios dados del LED Die3 EQU B '00000101'; patrones Die4 EQU B '00000110' Die5 EQU B '00000111' Die6 EQU B '00001110' DieOff EQU B '00000000'; TODOS los LEDs apagados DieTest EQU B '00001111'; TODOS los LEDs en ; Disp_Dice1 - hace que un número aparezca en una cara del dado ; Entrada: Registro W ; Salida: Un patrón de LED en los dados. ; Comentario: para los valores del registro 'W'; 0 = todos los LEDs de ; 1 – 6 = mostrar el patrón de 1 – 6 ; 7 = todos LED ON (modo de prueba) ; DISP_DICEA LLAMADA DIE_LOOKUP MOVWF PortA VOLVER ; Se trata de una ramificación tabla de búsqueda. Básicamente, cualquier valor se pasa a través del registro W es ; añadirá al contador de programa (PCL). Este entonces resulta en el valor adecuado para el ; resultado de búsqueda se cargan en el registro W y control se devuelve a la llamada ; Sub rutina. ; es decir; Si un 2 se pasa a través del registro W, el ADDWF PCL, f operación hace 2 a ; añadido al contador de programa actual causando la instrucción RETLW Die2 a ejecutarse. ; Esto se traduce en la constante Die2 (B '00000100') en el registro W, y ; control se devuelve al programa que llama. DIE_LOOKUP ADDWF PCL, f RETLW DieOff RETLW Die1 RETLW Die2 RETLW Die3 RETLW Die4 RETLW Die5 RETLW Die6 RETLW DieTest |
La mayor parte de la lista anterior es comentarios (líneas precedidas por el carácter ';'), por lo que deben ser capaces de seguir.
La rutina de display se puede utilizar al ejecutar el siguiente código;
MOVLW 4
LLAMAR AL DISP_DICEA