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