Tomando los interruptores (RA2, RA1, RA0) como un número binario, le
sumaremos 2 y sacaremos el resultado por los leds (led apagado=0, led encendido = 1,
RB3 bit de mayor peso).
Usaremos el listado del programa sbinaria.asm, si bien será desarrollado paso a
paso.
Lo primero será definir las posiciones de las variables que queremos utilizar. Esto
se puede hacer a través de la directiva include , que incluye ya la
definición (en base a la literatura inglesa) de todos los registros y bits. Busque, como
curiosidad, el fichero “16C84.inc” y lea su contenido. Encontrará un archivo *.inc por
cada micro de los soportados por el MPLAB.
Nosotros respetaremos la nomenclatura inglesa, pero escribiremos a mano las
variables que nos interesan. El motivo es muy simple: en ese p16C84.inc no se ha
considerado el problema de los bancos de memoria, que se deben intercambiar a través
del registro de estado, de modo que TRISA y TRISB no son funcionales.
De este modo para nosotros PORTA representará al puerto A, PORTB
representará al puerto B, TRISA y TRISB serán ellos mismos y W será el registro de
estado. Hemos castellanizado el STATUS como ESTADO por comodidad, y hemos
llamado BANCO al bit dentro de ESTADO que determina el banco de datos con el que
se va a trabajar (recordad que el PIC16C84 tiene dos bancos de datos).
El programa, por lo demás, es bastante evidente. Necesitamos sólo introducir el
sentido de los TRIS. Este registro está asociado a los distintos puertos y en él cada bit
representa un pin del puerto al que se refiera. Un 0 en uno de sus bits representará que el
pin es de salida, y un 1 que es de entrada. De este modo cada pata será independiente,
dándonos mayor flexibilidad para la implementación física de los diseños. Es posible
incluso, aunque no habitual, cambiar la dirección del pin durante la ejecución del
programa. Esta opción puede llegar a darnos la posibilidad de manejar varios
dispositivos con un solo puerto.
52