viernes, 4 de octubre de 2013

INSTRUCCIONES LÓGICAS

En la siguiente figura puede observar una explicación gráfica de las Instrucciones Lógicas de los PIC de gama media:


Veamos el siguiente ejemplo:

Se requiere sumar los dos nibles de PORTB y almacenar el resultado en PORTA. Escriba el fragmento de programa que permita a un microcontrolador PIC de la gama media realizar esta operación.

Solución:
Recordemos que todos los registros del PIC tienen 8 bits (2 nibles), los 4 bits mas significativos constituyen un nible y los cuatro bits menos significativos otro nible. Es decir:


Se requiere realizar la siguiente operación:


Es decir, sumar (aritméticamente) dos números de cuatro bits.

Para sumar estos números es necesario “separarlos” primero. Para esto podemos recurrir a “enmascarar” el registro PORTB convenientemente y de esta forma obtener cada nible.

Para obtener el nible menos significativo, podemos usar la máscara 00001111:


En ensamblador esta operación se puede realizar mediante las siguientes instrucciones (hacemos uso de un registro auxiliar llamado NIBLEMS, para almacenar el resultado):

MOVF   PORTB,W
ANDLW  b'00001111'
MOVWF   NIBLEMS

Para obtener el nible mas significativo, podemos usar la máscara 11110000:


En ensamblador esta operación se puede realizar mediante las siguientes instrucciones (hacemos uso de un registro auxiliar llamado NIBLELS, para almacenar el resultado):

MOVF   PORTB,W
ANDLW  b'11110000'
MOVWF   NIBLELS

Sin embargo, apenas hemos separado los nibles, el menos significativo tiene 4 bits, pero el mas significativo continúa teniendo 8 bits (los ceros a la izquierda no tienen valor, pero los ceros a la derecha si). Debemos entonces hacer que los ceros a la derecha del Nible MS pasen a la izquierda y en su lugar se ubiquen los bits del Nible MS (un intercambio de nibles: swapf), es decir:


Para hacer esto, agregamos una instrucción:

SWAPF   NIBLELS,W

Luego sumamos NIBLELS y NIBLEMS (Considerando que en W está almacenado el valor del nible menos significativo) y  almacenamos el resultado en PORTA:

ADDWF   NIBLEMS,W
MOVWF   PORTA

Finalmente, el fragmento de programa que permite sumar los dos nibles de PORTB y almacenar el resultado en PORTA es el siguiente:

MOVF   PORTB,W
ANDLW  b'00001111'
MOVWF  NIBLEMS
MOVF   PORTB,W
ANDLW  b'11110000'
MOVWF  NIBLELS
SWAPF  NIBLELS,W
ADDWF  NIBLEMS,W
MOVWF  PORTA














No hay comentarios.:

Publicar un comentario