Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Nemonicos de Gama Media de Microchip PDF
Nemonicos de Gama Media de Microchip PDF
1. Nemónico
En la siguiente tabla se detallan los 35 nemónicos de la gama media de Microchip, cuando
se indica borra en la descripción se quiere decir que se pone a 0 el mismo.
W es el acumulador, f representa un registro cualquiera y C,DC,Z los flags del registro
STATUS.
OPERACIONES TIPO BYTE A REGISTROS (FILE REGISTER)
Nemónico, 14 bits Opcode Flag
Descripción Ciclos Notas
Operandos B+S B-S afectado
ADDWF f, d Sumar W y f 1 00 0111 dfff ffff C,DC,Z 1, 2
ANDWF f, d AND W con f (bit a bit) 1 00 0101 dfff ffff Z 1,2
CLRF f Borrar f 1 00 0001 lfff ffff Z 2
CLRW - Borrar W 1 00 0001 0xxx xxxx Z -
COMF f, d Complemento de f (bit a bit) 1 00 1001 dfff ffff Z 1,2
DECF f, d Decrementar f 1 00 0011 dfff ffff Z 1,2
DECFSZ f, d Decrementar f, Saltar si 0 1 (2) 00 1011 dfff ffff - 1,2,3
INCF f, d Incrementar f 1 00 1010 dfff ffff Z 1,2
INCFSZ f, d Incrementar f, Saltar si 0 1 (2) 00 1111 dfff ffff - 1,2,3
IORWF f, d OR W con f (bit a bit) 1 00 0100 dfff ffff Z 1,2
MOVF f, d Mover f 1 00 1000 dfff ffff Z 1,2
MOVWF f Mover de W a f 1 00 0000 lfff ffff - -
NOP - No Operar 1 00 0000 0xx0 0000 - -
RLF f, d Rotar a la izquierda f por Carry 1 00 1101 dfff ffff C 1,2
RRF f, d Rotar a la derecha f por Carry 1 00 1100 dfff ffff C 1,2
SUBWF f, d Restar W a f 1 00 0010 dfff ffff C,DC,Z 1,2
SWAPF f, d Intercambiar nibbles de f 1 00 1110 dfff ffff - 1,2
XORWF f, d XOR W con f (bit a bit) 1 00 0110 dfff ffff Z 1,2
OPERACIONES DE MANIPULACION E INTERROGACION DE BIT EN REGISTRO
Nota
1: Cuando los registro de entrada/salida son modificados por la función ( Ej., MOVF PORTB, 1), el valor será al que
represente en los pines. Por ejemplo si el latch esta a 1 los pines estarán configurados como entrada, si estos pines están
puestos a 0 por un dispositivo externo, el dato se escribirá como ‘0’.
2: Si esta instrucción es ejecutada en el registro TMR0 (y cuando sea aplicable d=1), el conteo de la preescala asignada
será borrado, pero no será borrada la preescala asignada en OPTION_REG, que controla Timer0.
3: Si el contador de programa es modificado o la condición de test es cierta, la instrucción durará 2 ciclos, el Segundo
será una operación NOP
Página 1 de 15
Nemónicos de la serie media de Microchip
2. Introducción.
Para la comprensión de este documento hay que aprender unas nociones básica de
notación, que a continuación se describen.
Advierto de antemano que por sí solo este código no funcionará, ya que se obvian las
directivas del compilador.
Estos ejemplos están pensados para MPLAB 5.40.00, detallare seguidamente la
representación de constantes en este compilador.
Flags:
Los Flags o banderas son marcadores, representados por bits dentro del registro de
STATUS, serán afectados por los registros que así lo indique la tabla anterior y son:
- Z : Flag de cero. Se pone a 1 cuando una operación que le afecta da como resultado
un 0.
- C : Flag de Carry, se pone a 1 cuando la operación que le afecta sobrepasa el nivel
de representación del procesador, en nuestro caso es 8 BIT’s , de esta manera si
sumamos a 0b11111111 un 0b00000011 el resultado seria 0b00000010 y el BIT de
Carry pasaría a 1.
- DC : Flag de carry del nibbles inferior, este se comporta igual que el BIT de Carry,
solo que el limite de representación son los 4 bits inferiores, de esta manera si
tenemos 0b00001111 y sumamos 0b00000111, l resultado será 0b00010110 y el
BIT de DC se pone a 1, el BIT de Carry estará a 0 al no superarse los 8 bits y el de Z
a 0 al ser el número diferente de 0.
Página 2 de 15
Nemónicos de la serie media de Microchip
Registros:
Un registro está compuesto por 8 bits los cuales se representan dándoles un numero según
su posición, de esta manera el BIT menos representativo se le da el número 0 y el mas
representativo el 7.
BIT 7 6 5 4 3 2 1 0
REGISTRO X X X X X X X X
Donde X puede ser 1 ó 0.
Los bits del 0 al 3 se denomina nibbles inferior, y del 4 al 7 se denominan nibbles superior.
Macro:
En la mayoría de los compiladores existen algunas utilidades extra como por ejemplo
los macro, estos macro son una forma de realizar diversas rutinas. De esta manera un
macro representa un grupo de operaciones. Cuando se ensambla el código se sustituye la
etiqueta del macro por las operaciones que representa.
Como por ejemplo un cambio en la página de memoria o de memoria de programa.
3. Descripción de nemónicos
Página 3 de 15
Nemónicos de la serie media de Microchip
ADDLW: Sumar literal a W (ADD Literal to W)
Sintaxis: [ etiqueta ] ADDLW k
Operando: 0 ≤ k ≤ 255
Operación: (W) + k → (W)
Afecta a los flags: C, DC, Z
Descripción: El contenido de W es sumado con los 8 bits del literal k y el resultado se coloca en W.
Ej. En este ejemplo se suma 0x05 (5 en decimal) al contenido de W, que este caso es 0x10 de alguna operación
anterior (mirar MOVLW para ver como cargar un literal en W).
Ej. Vamos a sumar a W el registro DATO , denotado por esta etiqueta, el valor inicial de este registro es 0x23 y
realizaremos dos casos, en el que d es igual a 1 ó 0 representado por W. W tendrá valor inicial 0x2A.
Mirar las operaciones MOVLW y MOVWF para dar un valor a f.
Descripción: Con el contenido del acumulador W se realiza la operación AND BIT a BIT con el literal, el resultado
se guarda en W.
Ej. Vamos a realizar la operación AND para obtener el nibbles inferior del acumulador, que inicialmente es 0x7A.
Ej. En este caso realzaremos la operación AND del registro ENTRADAS con W, el valor inicial e ENTRADAS es
0b11000011 y el valor W es 0b01101110 en binario
Ej. Pondremos a 0 el BIT 0 del registro DATO, anteriormente se le dio el valor 0xFF.
Ej. Se pondrá a 1 el BIT 5 del registro STATUS, no nos interesara el estado anterior de este registro.
Ej. Pondremos dos ejemplos de esta instrucción para denotar la potencialidad de esta.
En el 1º se realizará un bucle del que no se saldrá hasta que el dato tenga valor diferente de 0.
En el 2º se realizará o no una operación, dependiendo del resultado de test.
Página 5 de 15
Nemónicos de la serie media de Microchip
Descripción: la instrucción CALL, realiza llamada a una subrutina, primero pone el contador de programa en la
pila, los primeros 11 bits son cargados en el contador de programa y luego los 2 restantes del PCLATH. CALL es
una subrutina de dos ciclos.
El literal k denota la dirección absoluta de una instrucción con respecto a una página, la forma mas cómoda de
realizar un CALL es poner como k el nombre de una etiqueta, en el precompilado se sustituyen por las
direcciones.
El valor k de 2047 no es caprichoso, la memoria de programa de estos microcontroladores está dividida en
páginas, es como un libro. Los códigos se escriben en páginas, el tamaño de estas es de 2048 comandos, como
por ejemplo el PIC6F876 tiene 4 páginas. El PIC16F84 y PIC16F84A tiene una sola página, aunque de tamaño
1024.
Para realizar un CALL a cualquier página habrá que configurar primero los bits 4:3 del PCLATH, donde
pondremos la página a donde queremos realizar el salto.
Para regresar de esa subrutina no tendremos que realizar ninguna configuración de PCLATH, ya que se
recupera completamente la dirección de regreso de la pila de programa.
Ej realizamos una llamada a subrutina en la página 1 , para cargar el contenido de PCLATH utilizamos un macro
de MPLAB
Página 6 de 15
Nemónicos de la serie media de Microchip
Ej. Bueno pondré un ejemplo aunque no sea necesario. Supongamos que el valor inicial de DATO es 0xF0,
después de borrarlo se pone a uno el flag Z.
Ej. Supongamos que el valor debido a operaciones anteriores es 0xF0, se utilizará CRW para ponerlo a 0x00.
Descripción: Esta instrucción pone a 0 el Watchdog timer, y pone a 0 la preescala, además de poner a 1 los flags
de TO y PD del registro STATUS.
La preescala puede verse en MPLAB como T0pre, siendo esta solo asignable al timer0 o al watchdog.
El watchdog o perro guardián es un método muy extendido para poder evitar el cuelgue del microcontrolador, es
imperativo para cualquier sistema industrial, ya que no nos podemos permitir fallos o paradas peligrosas en un
proceso de producción, que pueden quedar afectados tanto las personas a cargo del proceso industrial como la
materia prima o semielaborada que esos momentos este siendo procesada, con la consiguiente perdida de
dinero.
Ej. En el caso en el que el reset por watchdog este habilitado para evitar el reset se deberá borrar el WDT de
forma frecuente.
Página 7 de 15
Nemónicos de la serie media de Microchip
Descripción: El contenido del registro f es complementado (se realiza operación NOT BIT a BIT), el resultado se
coloca en el acumulador si d es 0 ó colocado nuevamente en el registro f si es 1.
Ej. Se realizara el complemento de u operación NOT BIT a BIT, de DATO. Con las dos posibilidades de d.
Ej. El primer ejemplo realiza una espera de tantos ciclos de operación como indique ESPERA.
El segundo ejemplo Decrementa un dato y lo deja en el acumulador, si el resultado de decrementar fue 0 se salta
a DATOERROR, si no es así se sigue operando.
Página 8 de 15
Nemónicos de la serie media de Microchip
Descripción: este Nemónico realiza un salto incondicional (salta y punto no realiza ningún tipo de test).
Los 11 bits de menos peso son guardados en el contador de programa PC<10:0> y el PCLATH <4:3> se pasa al
contador de programa, esta instrucción se realiza en dos ciclos de programa.
Al igual que la subrutina CALL ésta realiza saltos no mas grandes que 2047 líneas en modo absoluto con
respecto a las páginas, que corresponde a una página de la memoria de programa. En todo momento se deberá
configurar PCLATH, que por defecto es 0x00.
Ej: el primer ejemplo salta a la página 1 de por ejemplo un 16f876. se utiliza un macro para configurar el
PCLATH.
Página 9 de 15
Nemónicos de la serie media de Microchip
Ej. El primer ejemplo realiza una espera de tantos ciclos de operación como indique (ESPERA-255).
El segundo ejemplo Incrementa un dato y lo deja en el acumulador, si el resultado de incrementar fue 0 se salta a
DATOERROR, si no es así se sigue operando.
Descripción: Se realiza la operación OR BIT a BIT del registro W con el literal k. El resultado es colocado en el
acumulador W.
Ej. Realizaremos la operación OR de W que tendrá el valor 0b00100110 con el literal k igual a 0b10100001.
Ej. Realizaremos la operación OR de W que tendrá el valor 0b00101110 con el registro REG igual a
0b11110001.
Ej. En el primero veremos si DATO es 0, en ese caso Z pasara a 1. En el segundo moveremos el registro
PORTB a W.
Página 10 de 15
Nemónicos de la serie media de Microchip
EJ2 ; es una etiqueta que identifica la posición del código
MOVF PORTB,0 ; PORTB = 0x80 W = 0x00
XXX ; PORTB = 0x80 W = 0x80
Ej. Se puede utilizar para realizar pequeña esperas. En este caso realizaremos una espera de dos ciclos de
operación.
Página 11 de 15
Nemónicos de la serie media de Microchip
RETLW: Regresar con literal en W (RETurn with Literal in W)
Sintaxis: [ etiqueta ] RETLW k
Operandos: 0 ≤ k ≤ 255
Operación: k → (W)
TOS → PC
Afecta a los flags: Ninguno
Descripción: El acumulador es cargado con el valor k. Se carga el contador de programa con el de la pila y se
regresa al lugar donde se realizo el CALL. Se emplean dos ciclos de proceso para esta instrucción.
Ej. En algunos casos necesitamos que una subrutina nos devuelva el resultado de una acción, como por ejemplo
un 1 si se cumple una razón o 0 si no se cumple, en este caso realizaremos la parte que comunica el
cumplimiento de la razón. Otra utilidad aún más potente seria utilizarlo como sistema de lectura de datos en
memoria de programa. Solo indicare la primera utilidad.
Descripción: Regresa de la subrutina, la parte superior de la pila es colocada en el contador de programa. Esta
una instrucción de dos ciclos de programa.
Ej. En este caso simplemente se regresa de la subrutina, pudiendo colocar lo que queramos en W. Es siempre
recomendable hacer que las subrutina acaben en el mismo sitio, esto es hacer que una subrutina solo tenga un
RETURN.
Descripción: El contenido del registro f es rotado un BIT a la izquierda , el BIT que sale por la izquierda se pasa
al carry, y el del carry se pasa al BIT 0 de f, como se indica en la figura
EJ La rotación de un registro tiene múltiples aplicaciones, en este caso lo utilizaremos como sistema de
multiplicación, si realizamos una rotación a izquierda conseguiremos multiplicar por 2 el contenido del registro.
E registro a otra sera DATO = 40 = 0b00101000
Descripción: El contenido del registro f es rotado un BIT a la derecha , el BIT que sale por la derecha se pasa al
carry, y el del carry se pasa al BIT 7 de f, como se indica en la figura
Página 12 de 15
Nemónicos de la serie media de Microchip
EJ La rotación de un registro tiene múltiples aplicaciones, en este caso lo utilizaremos como sistema de división,
si realizamos una rotación a derecha conseguiremos dividir por 2 el contenido del registro. En este caso se
pierde los decimales.
E registro a otra sera DATO = 40 = 0b00101000
Descripción: El BIT PD’ (Power-down) es borrado, el BIT TO’ (Time-out) es puesto a 1. El watchdog timer es
puesto a cero y el contenido de su preescala también, el microcontrolador es puesto en modo SLEEP y el
oscilador es parado. Se saldrá de este estado cuando se produzca un RESET, un RESET por Watchdog o
cuando se produzca una interrupción que afecte a este estado.
Nota: E0 es un número negativo si realizamos el proceso inverso nos tendría que dar –20
100 - E0 = 20, que al aplicársele el complemento A2 para números negativos es el –20.
Descripción: Resta al registro f el contenido del acumulador W, utilizando el sistema del complemento A2 (mirar
nemónico anterior para explicación CA2). Si el valor de d es 0 el resultado es colocado es colocado en el
acumulador, si d es 1 el resultado se pondrá nuevamente en f.
Ej. En este caso realizaremos similares operaciones al caso anterior. El dato al que se le restara W es DATO
Descripción: El nibbles inferior y superior del registro f son intercambiados. Si d es 0 el resultado se coloca en el
acumulador W y si es 1 se coloca nuevamente en f.
Página 14 de 15
Nemónicos de la serie media de Microchip
Ej. Se puede utilizar para saber si dos datos son iguales, en ese caso el resultado será 0, en el caso de que no
sea 0 los bits a 1 serán lo diferentes.
Descripción: Se realiza la operación XOR (mirar nemónico anterior para operación EXOR) entre el acumulador y
el registro f. Si d es 0 se coloca en W y si es 1 se deja nuevamente en f.
Ej. Se puede utilizar para saber si dos datos son iguales, en ese caso el resultado será 0, en el caso de que no
sea 0 los bits a 1 serán lo diferentes. También se utiliza para mandar un BIT que nos garantice la integridad de la
trama de datos enviados, haciendo la EXOR de cada byte con el siguiente y mandándolo.
Página 15 de 15