You are on page 1of 15

Nemnicos de la gama media de Microchip

1. Nemnico
En la siguiente tabla se detallan los 35 nemnicos de la gama media de Microchip, cuando se indica borra en la descripcin 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) Nemnico, Operandos ADDWF f, d ANDWF f, d CLRF f CLRW COMF f, d DECF f, d DECFSZ f, d INCF f, d INCFSZ f, d IORWF f, d MOVF f, d MOVWF f NOP RLF f, d RRF f, d SUBWF f, d SWAPF f, d XORWF f, d Descripcin Sumar W y f AND W con f (bit a bit) Borrar f Borrar W Complemento de f (bit a bit) Decrementar f Decrementar f, Saltar si 0 Incrementar f Incrementar f, Saltar si 0 OR W con f (bit a bit) Mover f Mover de W a f No Operar Rotar a la izquierda f por Carry Rotar a la derecha f por Carry Restar W a f Intercambiar nibbles de f XOR W con f (bit a bit) Ciclos 1 1 1 1 1 1 1 (2) 1 1 (2) 1 1 1 1 1 1 1 1 1 14 bits Opcode B+S 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0111 0101 0001 0001 1001 0011 1011 1010 1111 0100 1000 0000 0000 1101 1100 0010 1110 0110 dfff dfff lfff 0xxx dfff dfff dfff dfff dfff dfff dfff lfff 0xx0 dfff dfff dfff dfff dfff Flag B-S afectado ffff C,DC,Z ffff Z ffff Z xxxx Z ffff Z ffff Z ffff ffff Z ffff ffff Z ffff Z ffff 0000 ffff C ffff C ffff C,DC,Z ffff ffff Z Notas 1, 2 1,2 2 1,2 1,2 1,2,3 1,2 1,2,3 1,2 1,2 1,2 1,2 1,2 1,2 1,2

OPERACIONES DE MANIPULACION E INTERROGACION DE BIT EN REGISTRO BCF BSF BTFSC BTFSS f, b f, b f, b f, b Borrar Bit de f Activar Bit de f Test de Bit de f, Saltar si 0 Test de Bit de f, Saltar si 1 1 1 1 (2) 1 (2) 01 01 01 01 00bb 01bb 10bb 11bb bfff bfff bfff bfff ffff ffff ffff ffff 1,2 1,2 3 3

OPERACIONES CON LITERALES (CONSTANTES) Y DE CONTROL ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW Nota 1: Cuando los registro de entrada/salida son modificados por la funcin ( Ej., MOVF PORTB, 1), el valor ser al que represente en los pines. Por ejemplo si el latch esta a 1 los pines estarn configurados como entrada, si estos pines estn puestos a 0 por un dispositivo externo, el dato se escribir como 0. 2: Si esta instruccin 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 condicin de test es cierta, la instruccin durar 2 ciclos, el Segundo ser una operacin NOP k k k k k k k k k Sumar literal a W AND de literal con W Llamada a subrutina Borrar timer del Watchdog Ir a direccin OR de literal con W Mover literal a W Regresar desde interrupcin Regresar con literal en W Regresar desde Subrutina Pasar a modo standby Restar W a un literal XOR de literal con W 1 1 2 1 2 1 1 2 2 2 1 1 1 11 11 10 00 10 11 11 00 11 00 00 11 11 111x 1001 0kkk 0000 1kkk 1000 00xx 0000 01xx 0000 0000 110x 1010 kkkk kkkk kkkk 0110 kkkk kkkk kkkk 0000 kkkk 0000 0110 kkkk kkkk kkkk kkkk kkkk 0100 kkkk kkkk kkkk 1001 kkkk 1000 0011 kkkk kkkk C,DC,Z Z TO,PD Z TO,PD C,DC,Z Z -

Pgina 1 de 15

Nemnicos de la serie media de Microchip 2. Introduccin.


Para la comprensin de este documento hay que aprender unas nociones bsica de notacin, que a continuacin se describen. Advierto de antemano que por s solo este cdigo no funcionar, ya que se obvian las directivas del compilador. Estos ejemplos estn pensados para MPLAB 5.40.00, detallare seguidamente la representacin de constantes en este compilador. Tipo Decimal Hexadecimal Octal binario ASCII Sintaxis D<dgitos> .<dgitos> H<digito hex.> 0x<digito hex.> <digito hex.> O'<digito octal> B<digito binario> A<carcter> <carcter> Ejemplo D100 .100 H64 0x64 64 O144 B01100100 AC C Comentario (D puede ser minscula) (H puede ser minscula) (O puede ser minscula) (B puede ser minscula) (A puede ser minscula)

En otros compiladores se puede utilizar la siguiente nomenclatura Tipo Decimal Hexadecimal Octal binario Sintaxis 0D<dgitos> <dgitos> 0H<digito hex.> 0O<digito octal> 0B<digito binario> Ejemplo 0D100 100 0H64 0O144 0B01100100 Comentario (D puede ser minscula) (Suele ser en compiladores de C) (H puede ser minscula) (O puede ser minscula) (B puede ser minscula)

Los registros y literales se denotan de la siguiente manera: f : Representa un registro cualquiera de la memora SRAM k : Representa una constante de 8 bits. d : Representa los valores 0 1 (no es asociable a un registro). b : Es un valor entre 0 y 7 (no es asociable a un registro).

Flags: Los Flags o banderas son marcadores, representados por bits dentro del registro de STATUS, sern afectados por los registros que as lo indique la tabla anterior y son: Z : Flag de cero. Se pone a 1 cuando una operacin que le afecta da como resultado un 0. C : Flag de Carry, se pone a 1 cuando la operacin que le afecta sobrepasa el nivel de representacin del procesador, en nuestro caso es 8 BITs , de esta manera si sumamos a 0b11111111 un 0b00000011 el resultado seria 0b00000010 y el BIT de Carry pasara a 1. DC : Flag de carry del nibbles inferior, este se comporta igual que el BIT de Carry, solo que el limite de representacin 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 nmero diferente de 0.
Pgina 2 de 15

Nemnicos de la serie media de Microchip


Registros: Un registro es un espacio en la memoria SRAM del microcontrolador en el que podemos guardar informacin, existen tambin unos registros en los cuales podemos configurar el microcontrolador o saber el estado de este o algunos de sus perifricos. Un registro est compuesto por 8 bits los cuales se representan dndoles un numero segn su posicin, de esta manera el BIT menos representativo se le da el nmero 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. La forma de representacin de parte de los bits de un registro en este documento es la siguiente. Registro<3:0> Indica los bits del 3 al 0 del registro. Para identificar el BIT Z de STATUS sera. STATUS<2> Macro: En la mayora 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 cdigo se sustituye la etiqueta del macro por las operaciones que representa. Como por ejemplo un cambio en la pgina de memoria o de memoria de programa.

3. Descripcin de nemnicos
A continuacin realizar un descripcin de los nemnicos adjuntando una ejemplo simple y cambio de estados en registros.

Pgina 3 de 15

Nemnicos de la serie media de Microchip ADDLW: Sumar literal a W (ADD Literal to W)


Sintaxis: [ etiqueta ] ADDLW k Operando: 0 k 255 Operacin: (W) + k (W) Afecta a los flags: C, DC, Z Descripcin: 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 operacin anterior (mirar MOVLW para ver como cargar un literal en W). SUMA5 ADDLW 0x05 ;SUMA5 es una etiqueta que identifica la posicin del cdigo ;W=0x10 ;W=0x15

ADDWF: Sumar W y f (ADD W to F)


Sintaxis: [ etiqueta ] ADDWF f, d Operandos: 0 f 127 d [0,1] Operacin: (W) + (f) (destino) Afecta a los flags: C, DC, Z Descripcin: Suma el contenido de W con el registro f. Si d es 0, el resultado es colocado en W, si d es 1 el resultado se coloca de nuevo en f. 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. CASO1 ADDWF DATO,W CASO2 ADDWF DATO,1 ;es una etiqueta que identifica la posicin del cdigo ;W = 0x2A _ DATO = 0x23 mandaremos el resultado a W ;W = 0x4D _ DATO = 0x23 en W s encuentra la suma ;es una etiqueta que identifica la posicin del cdigo ;W = 0x2A _ DATO = 0x23 mandaremos el resultado a DATO ;W = 0x2A _ DATO = 0x4D en W s encuentra la suma

ANDLW: AND de literal con W (AND Literal


Sintaxis: [ etiqueta ] ANDLW k Operandos: 0 k 255 Operacin: (W) .AND. (k) (W) Afecta a los flags: Z

to W)

Descripcin: Con el contenido del acumulador W se realiza la operacin AND BIT a BIT con el literal, el resultado se guarda en W. Ej. Vamos a realizar la operacin AND para obtener el nibbles inferior del acumulador, que inicialmente es 0x7A. NIBBLESINF ANDLW 0x0F ;es una etiqueta que identifica la posicin del cdigo ;W = 0x7A Se realizara la operacin booleana AND ;W = 0x0A Tenemos el nibbles inferior de W

ANDWF: AND W con f (AND W to F)


Sintaxis: [etiqueta ] ANDWF f, d Operandos: 0 f 127 d [0,1] Operacin: (W) .AND. (f) (destino) Afecta a los flags: Z Descripcin: Operacin AND de W con el registro f, si d es 0 el resultado se coloca en W, si es 1 el resultado se coloca en f. Ej. En este caso realzaremos la operacin AND del registro ENTRADAS con W, el valor inicial e ENTRADAS es 0b11000011 y el valor W es 0b01101110 en binario ANDOPERACION1 ANDWF ENTRADAS,0 ;es una etiqueta que identifica la posicin del cdigo ;W = 0b11000011 ENTRADAS = 0b01101110 ;W = 0b01000010 ENTRADAS = 0b01101110

Pgina 4 de 15

Nemnicos de la serie media de Microchip


ANDOPERACION2 ANDWF ENTRADAS,1 ;es una etiqueta que identifica la posicin del cdigo ;W = 0b11000011 ENTRADAS = 0b01101110 ;W = 0b11000011 ENTRADAS = 0b01000010

BCF: Borrar Bit de f (Bit Clear F)


Sintaxis: [ etiqueta ] BCF f, b Operandos: 0 f 127 0b7 Operacin: 0 (f<b>) Afecta a los flags: Ninguno Descripcin: El BIT b en el registro f es puesto a cero. Ej. Pondremos a 0 el BIT 0 del registro DATO, anteriormente se le dio el valor 0xFF. BORRABIT BCF DATO,0 ; es una etiqueta que identifica la posicin del cdigo ; DATO = 0b11111111 ; DATO = 0b11111110

BSF: Activar Bit de f (Bit Set F)


Sintaxis: [ etiqueta ] BSF f, b Operandos: 0 f 127 0b7 Operacin: 1 (f<b>) Afecta a los flags: Ninguno Descripcin: El BIT b en el registro f es puesto a uno. Ej. Se pondr a 1 el BIT 5 del registro STATUS, no nos interesara el estado anterior de este registro. ACTBIT BSF STATUS,5 ;es una etiqueta que identifica la posicin del cdigo ; STATUS = 0bxx0xxxxx ; STATUS = 0bxx1xxxxx

BTFSC: Test de Bit de f, Saltar si 0 (Bit Test, Skip if Clear)


Sintaxis: [ etiqueta ] BTFSC f, b Operandos: 0 f 127 0b7 Operacin: saltar si (f<b>) = 0 Afecta a los flags: Ninguno Descripcin: Si el BIT b en el registro f es 1, la prxima instruccin es ejecutada. Si es BIT b en el registro f es 0, la prxima instruccin es descartada y en su lugar se ejecuta una instruccin NOP, haciendo que BTFSC dure dos ciclos de programa. Ej. Pondremos dos ejemplos de esta instruccin 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 operacin, dependiendo del resultado de test. EJ1 XXXX XXXX BTFSC STATUS,Z GOTO EJ1 XXXX XXXX EJ2 XXXX XXXX BTFSC STATUS,Z GOTO FIN XXXX XXXX FIN ; es una etiqueta que identifica la posicin del cdigo ; operaciones cualesquiera para realizar la comprobacin ; operaciones cualesquiera para realizar la comprobacin ;se realiza test de flag Z ; Nemnico de salto, mirar descripcin de este, salta a la etiqueta EJ1 ; operaciones siguientes ; operaciones siguientes ; es una etiqueta que identifica la posicin del cdigo ; operaciones cualesquiera para realizar la comprobacin ; operaciones cualesquiera para realizar la comprobacin ;se realiza test de flag Z ; Nemnico de salto, mirar descripcin de este, salta a la etiqueta FIN ; operaciones siguientes ; operaciones siguientes ; es una etiqueta que identifica la posicin del cdigo

Pgina 5 de 15

Nemnicos de la serie media de Microchip

BTFSS: Test de Bit de f, Saltar si


Sintaxis: [ etiqueta ] BTFSS f, b Operandos: 0 f 127 0b<7 Operacin: Saltar si (f<b>) = 1 Afecta a los flags: Ninguno

1 (Bit Test f, Skip if Set)

Descripcin: Si el BIT b en el registro f es 0, la prxima instruccin es ejecutada. Si el BIT b est a 1 la prxima instruccin es descartada y en su lugar se ejecuta el Nemnico NOP, por lo tanto en este ltimo caso la instruccin dura 2 ciclos de programa. Ej. Pondremos los mismos ejemplos aplicados a registros diferentes TEST1 REPITE BTFSS PORTA,0 GOTO REPITE XXXX TEST2 BTFSS PORTA,0 GOTO NOPULSADO XXXX XXXX NOPULSADO ; es una etiqueta que identifica la posicin del cdigo ; es una etiqueta que identifica la posicin del cdigo ; realiza un test sobre el bit 0 de PORTA ; si esta a 0 se realiza esta operacin, si no realiza un NOP ; otras operaciones ; es una etiqueta que identifica la posicin del cdigo ; realiza un test sobre el bit 0 de PORTA ; si esta a 0 salta a NOPULSADO, si esta a 1 realiza un NOP ; otras operaciones ; otras operaciones ; es una etiqueta que identifica la posicin del cdigo

CALL: Llamada a subrutina

(CALL Subroutine)

Sintaxis: [ etiqueta ] CALL k Operandos: 0 k 2047 Operacin: (PC)+ 1 TOS k PC<10:0> (PCLATH<4:3>) PC<12:11> Afecta a los flags: ninguno Descripcin: la instruccin 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 direccin absoluta de una instruccin con respecto a una pgina, la forma mas cmoda 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 pginas, es como un libro. Los cdigos se escriben en pginas, el tamao de estas es de 2048 comandos, como por ejemplo el PIC6F876 tiene 4 pginas. El PIC16F84 y PIC16F84A tiene una sola pgina, aunque de tamao 1024. Para realizar un CALL a cualquier pgina habr que configurar primero los bits 4:3 del PCLATH, donde pondremos la pgina a donde queremos realizar el salto. Para regresar de esa subrutina no tendremos que realizar ninguna configuracin de PCLATH, ya que se recupera completamente la direccin de regreso de la pila de programa. Ej realizamos una llamada a subrutina en la pgina 1 , para cargar el contenido de PCLATH utilizamos un macro de MPLAB EJ1 Pagina1 CALL SUBRUTINA1 XXX XXX ....... SUBRUTINA1 XXX ; es una etiqueta que identifica la posicin del cdigo ; mediante macro configuramos PCLATH ; se realiza llamada a subrutina ; instruccin que se ejecutara cuando se termine la ; subrutina ; ; es una etiqueta que identifica la posicin del cdigo ;

Pgina 6 de 15

Nemnicos de la serie media de Microchip

CLRF: Borrar f (CLeaR F)


Sintaxis: [ etiqueta ] CLRF f Operandos: 0 f 127 Operacin: 00h (f) 1Z Afecta a los flags: Z Descripcin: El contenido del registro f es borrado (puesto a 0) y el flag Z es activado. Ej. Bueno pondr un ejemplo aunque no sea necesario. Supongamos que el valor inicial de DATO es 0xF0, despus de borrarlo se pone a uno el flag Z. ETIQUETA XXX CLRW ; es una etiqueta que identifica la posicin del cdigo ; DATO = 0xF0 ; DATO = 0x00 Z = 1

DATO

CLRW: Borrar W (CLeaR W)


Sintaxis: [ etiqueta ] CLRW Operandos: Ninguno Operacin: 00h (W) 1Z Afecta a los flags: Z Descripcin: El acumulador W es borrado (puesto a 0) y el flag Z es activado. Ej. Supongamos que el valor debido a operaciones anteriores es 0xF0, se utilizar CRW para ponerlo a 0x00. EJ XXX CLRW ; es una etiqueta que identifica la posicin del cdigo ; W = 0xF0 ; W = 0x00 Z=1

CLRWDT: Borrar timer del Watchdog


Sintaxis: [ etiqueta ] CLRWDT Operandos: Ninguno Operacin: 00h WDT 0 WDT preescala 1 TO 1 PD Afecta a los flags: TO, PD

(CLeaR WatchDog Timer)

Descripcin: Esta instruccin pone a 0 el Watchdog timer, y pone a 0 la preescala, adems 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 guardin es un mtodo 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 produccin, 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. ETKT XXX XXX CLRWDT XXX ; es una etiqueta que identifica la posicin del cdigo ; instruccin del proceso ; instruccin del proceso ; se debe colocar esta instruccin de foma temporizada para que sea los mas ; efectiva posible

COMF: Complemento de f (bit a bit) (COMplement F)


Sintaxis: [ etiqueta ] COMF f,d Operandos: 0 f 127 d [0,1] Operacin: (f) (destino) Afecta a los flags: Z

Pgina 7 de 15

Nemnicos de la serie media de Microchip


Descripcin: El contenido del registro f es complementado (se realiza operacin 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 operacin NOT BIT a BIT, de DATO. Con las dos posibilidades de d. EJ COMF XXX EJ1 COMF XXX DATO,0 DATO,1 ; es una etiqueta que identifica la posicin del cdigo ; DATO = 0b01010101 ; DATO = 0b10101010 ; es una etiqueta que identifica la posicin del cdigo ; DATO = 0b01010101 ; DATO = 0b01010101 W = 0b10101010

DECF: Decrementar f

(DECrement f)

Sintaxis: [ etiqueta ] DECF f,d Operandos: 0 f 127 d [0,1] Operacin: (f) - 1 (destino) Afecta a los flags: Z Descripcin: Decrementa el registro f, si d es 0 el resultado se coloca en el acumulador, si d es 1 se coloca en el registro f. Ej. Decrementaremos el registro COUNT. Con las dos posibilidades de d. EJ DECF XXX EJ1 DECF XXX COUNT,0 COUNT,1 ; es una etiqueta que identifica la posicin del cdigo ; COUNT = 0xB1 ; COUNT = 0xB0 ; es una etiqueta que identifica la posicin del cdigo ; COUNT = 0xB1 ; COUNT = 0xB1 W = 0xB0

DECFSZ: Decrementar f, Saltar si 0 (DECrement F, Skip if Zero)


Sintaxis: [ etiqueta ] DECFSZ f,d Operandos: 0 f 127 d [0,1] Operacin: (f) - 1 (destino) Saltar si resultado = 0 Afecta a los flags: Ninguno Descripcin: El contenido del registro f es decrementado, si d es 0 se coloca en el acumulador, si es 1 se vuelve a poner en el registro f. Si el resultado de decrementar es 0, la siguiente instruccin se sustituir por un NOP(instruccin de 2 ciclos), en caso contrario la siguiente instruccin es ejecutada. Ej. El primer ejemplo realiza una espera de tantos ciclos de operacin 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. EJ1 DECFSZ ESPERA,1 GOTO EJ1 XXXX TERMINA EJ2 DECFSZ DATO,0 GOTO DATOENW GOTO DATOERROR ; es una etiqueta que identifica la posicin del cdigo ; ESPERA = 0x05 ; ; ESPERA = ESPERA - 1 ; ESPERA = 0x00 ; es una etiqueta que identifica la posicin del cdigo ; es una etiqueta que identifica la posicin del cdigo ; ESPERA ; Se ejecuta si ESPERA 0 ; Se ejecuta se ESPERA = 0

Pgina 8 de 15

Nemnicos de la serie media de Microchip

GOTO: Ir a direccin

(GO TO)

Sintaxis: [ etiqueta ] GOTO k Operandos: 0 k 2047 Operacin: k PC<10:0> PCLATH<4:3> PC<12:11> Afecta a los flags: Ninguno Descripcin: este Nemnico realiza un salto incondicional (salta y punto no realiza ningn 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 instruccin se realiza en dos ciclos de programa. Al igual que la subrutina CALL sta realiza saltos no mas grandes que 2047 lneas en modo absoluto con respecto a las pginas, que corresponde a una pgina de la memoria de programa. En todo momento se deber configurar PCLATH, que por defecto es 0x00. Ej: el primer ejemplo salta a la pgina 1 de por ejemplo un 16f876. se utiliza un macro para configurar el PCLATH. EJ pagina1 GOTO PAKA .......... PAKA XXXX ; es una etiqueta que identifica la posicin del cdigo ; MACRO de MPLAB ; salta a PAKA ; ; es una etiqueta que identifica la posicin del cdigo ; cdigo cualquiera

INCF: Incrementar f (INCrement F)


Sintaxis: [ etiqueta ] INCF f,d Operandos: 0 f 127 d [0,1] Operacin: (f) + 1 (destino) Afecta a los flags: Z Descripcin: El contenido del registro f es incrementado. Si d es 0 el resultado es colocado en el acumulador W, si d es 1 el resultado es puesto nuevamente en f. Ej. incrementaremos el registro COUNT. Con las dos posibilidades de d. EJ DECF XXX EJ1 DECF XXX COUNT,0 COUNT,1 ; es una etiqueta que identifica la posicin del cdigo ; COUNT = 0xB1 ; COUNT = 0xB0 ; es una etiqueta que identifica la posicin del cdigo ; COUNT = 0xB1 ; COUNT = 0xB1 W = 0xB0

INCFSZ: Incrementar f, Saltar si 0 (INCrement F, Skip if Zero)


Sintaxis: [ etiqueta ] INCFSZ f,d Operandos: 0 f 127 d [0,1] Operacin: (f) + 1 (destino) Saltar si resultado = 0 Afecta a los flags: Ninguno Descripcin: El contenido de f es incrementado. Si d es 0 el resultado es colocado en W, si f es 1 el resultado es colocado de nuevo en f. Si el resultado del incremento es diferente de 0, la siguiente instruccin se ejecuta. Si el resultado de incremento es 0 en lugar de la siguiente instruccin se ejecuta un NOP, en este ultimo caso la instruccin es ejecutada en dos ciclos de programa.

Pgina 9 de 15

Nemnicos de la serie media de Microchip


Ej. El primer ejemplo realiza una espera de tantos ciclos de operacin 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. EJ1 INCFSZ GOTO XXXX TERMINA EJ2 INCFSZ GOTO GOTO ESPERA,1 EJ1 ; es una etiqueta que identifica la posicin del cdigo ; ESPERA = 0x05 ; ; ESPERA = ESPERA + 1 ; ESPERA = 0x00 ; es una etiqueta que identifica la posicin del cdigo ; es una etiqueta que identifica la posicin del cdigo ; ESPERA ; Se ejecuta si ESPERA 0 ; Se ejecuta se ESPERA = 0

DATO,0 DATOENW DATOERROR

IORLW: OR de literal con W


Sintaxis: [ etiqueta ] IORLW k Operandos: 0 k 255 Operacin: (W) .OR. k (W) Afecta a los flags: Z

(Inclusive OR Literal with W)

Descripcin: Se realiza la operacin OR BIT a BIT del registro W con el literal k. El resultado es colocado en el acumulador W. Ej. Realizaremos la operacin OR de W que tendr el valor 0b00100110 con el literal k igual a 0b10100001. EJ IORLW 0b10100001 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0b00100110 ; W = 0b10100111

IORWF: OR W con f (bit a bit) (Inclusive OR W with F)


Sintaxis: [ etiqueta ] IORWF f,d Operandos: 0 f 127 d [0,1] Operacin: (W) .OR. (f) (destino) Afecta a los flags: Z Descripcin: Se realiza la operacin OR del acumulador W con el registro f. Si d es 0 el resultado se coloca en el acumulador W, si es 0 se vuelve a poner en f. Ej. Realizaremos la operacin OR de W que tendr el valor 0b00101110 con el registro REG igual a 0b11110001. EJ IORWF REG,0 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0b00101110 REG = 0b011110001 ; W = 0b11111111 REG = 0b011110001

MOVF: Mover f (MOVe F)


Sintaxis: [ etiqueta ] MOVF f,d Operandos: 0 f 127 d [0,1] Operacin: (f) (destino) Afecta a los flags: Z Descripcin: El contenido del registro f es movido, su destino depende de d. Si d es 0 f se mueve al acumulador, si d es 1 el contenido del registro es colocado nuevamente en f (aunque parece una inutilidad este ultimo caso, puede ser utilizado para saber si el contenido del registro f es cero, ya que esta instruccin afecta al flag Z). 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. EJ1 MOVF XXX DATO,1 ; es una etiqueta que identifica la posicin del cdigo ;DATO = 0x00 Z=0 ;DATO = 0x00, Z = 1

Pgina 10 de 15

Nemnicos de la serie media de Microchip


EJ2 MOVF XXX PORTB,0 ; es una etiqueta que identifica la posicin del cdigo ; PORTB = 0x80 W = 0x00 ; PORTB = 0x80 W = 0x80

MOVLW: Mover literal a W (MOVe Literal to W)


Sintaxis: [ etiqueta ] MOVLW k Operandos: 0 k 255 Operacin: k (W) Afecta a los flags: Ninguno Descripcin: Los 8 bits del literal k sern escritos en el acumulador W. Ej. Moveremos a w el valor 0x04 EJ MOVLW 0x04 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0x00 ; W = 0x04

MOVWF: Mover de W a f (MOVe W to F)


Sintaxis: [ etiqueta ] MOVWF f Operandos: 0 f 127 Operacin: (W) (f) Afecta a los flags: Ninguno Descripcin: Mueve el contenido del acumulador W al registro f. Ej. Moveremos el contenido de W al registro TRISB EJ MOVWF TRISB XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0x01 TRISB = 0x00 ; W = 0x01 TRISB = 0x01

NOP: No Operar (No OPeration)


Sintaxis: [ etiqueta ] NOP Operandos: Ninguno Operacin: No se realiza ninguna operacin. Ej. Se puede utilizar para realizar pequea esperas. En este caso realizaremos una espera de dos ciclos de operacin. EJ NOP NOP ; es una etiqueta que identifica la posicin del cdigo ; espera 1 ciclo de operacin ; espera 1 ciclo de operacin

RETFIE: Regresar desde interrupcin (RETurn From IntErrupt)


Sintaxis: [ etiqueta ] RETFIE Operandos: Ninguno Operacin: TOS PC 1 GIE Afecta a los flags: Ninguno Descripcin: se regresa de una subrutina de interrupcin. Se realizan las operaciones de recarga del contador de programa desde la pila y se activan de nuevo las interrupcin. Por si sola esta instruccin no es recomendable para ser utilizada como regreso de interrupcin, debe utilizarse junto con otras instrucciones para poder guardar el registro de STATUS y W. Ej. Regresaremos de una interrupcin despus de ejecutarla. EJ XXX RETFIE ; es una etiqueta que identifica la posicin del cdigo ; subrutina de interrupcin ; se ejecutara el regreso de la interrupcin

Pgina 11 de 15

Nemnicos 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 Operacin: k (W) TOS PC Afecta a los flags: Ninguno Descripcin: 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 instruccin. Ej. En algunos casos necesitamos que una subrutina nos devuelva el resultado de una accin, como por ejemplo un 1 si se cumple una razn o 0 si no se cumple, en este caso realizaremos la parte que comunica el cumplimiento de la razn. Otra utilidad an ms potente seria utilizarlo como sistema de lectura de datos en memoria de programa. Solo indicare la primera utilidad. EJ XXX RETLW 0x01 ; es una etiqueta que identifica la posicin del cdigo ; La subrutina halla que se cumple ; regresa con un 1 en el acumulador

RETURN: Regresar desde Subrutina (RETURN from Subroutine)


Sintaxis: [ etiqueta ] RETURN Operandos: Ninguno Operacin: TOS PC Afecta a los flags: Ninguno Descripcin: Regresa de la subrutina, la parte superior de la pila es colocada en el contador de programa. Esta una instruccin 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. EJ XXX RETURN ; es una etiqueta que identifica la posicin del cdigo ; fin de subrutina ; regreso de subrutina

RLF: Rotar a la izquierda f por Carry (Rotate Left F through carry)


Sintaxis: [ etiqueta ] RLF f,d Operandos: 0 f 127 d [0,1] Operacin: Ver descripcin siguiente Afecta a los flags: C Descripcin: 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 rotacin de un registro tiene mltiples aplicaciones, en este caso lo utilizaremos como sistema de multiplicacin, si realizamos una rotacin a izquierda conseguiremos multiplicar por 2 el contenido del registro. E registro a otra sera DATO = 40 = 0b00101000 EJ BCF RLF XXX STATUS,Z DATO,1 ; es una etiqueta que identifica la posicin del cdigo ; ponemos a 0 el carry para que nos meta un cero en el BIT bajo de DATO ; rotamos DATO DATO = 0b00101000 = 40 ; DATO = 0b01010000 = 80

RRF: Rotar a la derecha f por Carry (Rotate Right F through carry)


Sintaxis: [ etiqueta ] RRF f,d Operandos: 0 f 127 d [0,1] Operacin: Ver descripcin siguiente Afecta a los flags: C Descripcin: 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

Pgina 12 de 15

Nemnicos de la serie media de Microchip


EJ La rotacin de un registro tiene mltiples aplicaciones, en este caso lo utilizaremos como sistema de divisin, si realizamos una rotacin 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 EJ BCF RRF XXX STATUS,Z DATO,1 ; es una etiqueta que identifica la posicin del cdigo ; ponemos a 0 el carry para que nos meta un cero en el BIT alto de DATO ; rotamos DATO DATO = 0b00101000 = 40 ; DATO = 0b00010100 = 20

SLEEP: Pasar a modo standby


Sintaxis: [ etiqueta ]SLEEP Operandos: Ninguno Operacin: 00h WDT 0 WDT preescala 1 TO 0 PD Afecta a los flags: TO, PD Descripcin: 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 tambin, 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 interrupcin que afecte a este estado. Ej. Simplemente pasar el microcontrolador a modo sleep EJ XXX SLEEP ; es una etiqueta que identifica la posicin del cdigo ; instruccin cualquiera ; Paso a modo sleep y el reloj se para.

SUBLW:

Restar al literal el W (SUBtract W from Literal)

Sintaxis: [ etiqueta ] SUBLW k Operandos: 0 k 255 Operacin: k - (W) (W) Afecta a los flags: C, DC, Z Descripcin: Se resta el acumulador W al literal k por el mtodo del complementa A2. Explicare que mtodo es ste. El complemento A2 es una manera de representar nmeros tanto negativos como positivos. De esta manera para representar un nmero como positivo se coloca tal cual sin realiza ninguna modificacin, y para representarlo como negativo se realiza la siguiente operacin : esta se realiza en el microcontrolador de forma automtica, ya que es simplemente una operacin Not y un incremento de A. De esta manera si queremos restar a B el valor de A seria de la siguiente manera. pondremos 3 ejemplos trabajando con nmeros hexadecimales, sacaremos conclusiones y los flags afectados. CASO A>B A=B A<B VALORES A B 50 30 40 40 30 50 Hexadecimal sin CA2 OP RES 50 30 20 40 40 0 30 50 -20 OPCA2 50 + D0 40 + C0 30 + B8 Hexadecimal con CA2 RESCA2 BYTE1 BYTE0 120 1 20 100 1 00 E0 0 E0 FLAG Z C 0 1 1 1 0 0

C A2 ( A) = 2 8 A = 256 A

X = B A = B + C A2 ( A) = A + 28 A = B + (256 A)

Nota: E0 es un nmero negativo si realizamos el proceso inverso nos tendra que dar 20 100 - E0 = 20, que al aplicrsele el complemento A2 para nmeros negativos es el 20.

Ej. En este caso realizaremos los 3 ejemplos anteriormente detallados. EJ1 SUBLW 0x50 XXX EJ1 SUBLW 0x40 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0x30 ; W = 0x20 C=1 Z=0 ; es una etiqueta que identifica la posicin del cdigo ; W = 0x40 ; W = 0x00 C=1 Z=1

Pgina 13 de 15

Nemnicos de la serie media de Microchip


EJ1 SUBLW 0x30 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0x50 ; W = 0xE0 C=0 Z=0

SUBWF: Restar W a f (SUBtract W from F)


Sintaxis: [ etiqueta ] SUBWF f,d Operandos: 0 f 127 d [0,1] Operacin: (f) - (W) (destino) Afecta a los flags: C, DC, Z Descripcin: Resta al registro f el contenido del acumulador W, utilizando el sistema del complemento A2 (mirar nemnico anterior para explicacin 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 EJ1 SUBWF DATO,0 XXX EJ1 SUBWF DATO,1 XXX EJ1 SUBWF DATO,0 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0x30 DATO = 0x50 ; W = 0x20 DATO = 0x50 C=1 ; es una etiqueta que identifica la posicin del cdigo ; W = 0x40 DATO = 0x40 ; W = 0x40 DATO = 0x00 C=1 ; es una etiqueta que identifica la posicin del cdigo ; W = 0x50 DATO = 0x30 ; W = 0xE0 DATO = 0x30 C=0

Z=0

Z=1

Z=0

SWAPF: Intercambiar nibbles de f


Sintaxis: [ etiqueta ] SWAPF f,d Operandos: 0 f 127 d [0,1] Operacin: (f<3:0>) (destino<7:4>) (f<7:4>) (destino<3:0>) Afecta a los flags: Ninguno

(SWAP nibbles in F)

Descripcin: 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. Ej. Rotaremos el registro DATO, su contenido inicial ser 0x40 EJ1 SWAPF DATO,1 XXX EJ2 SWAPF DATO,0 XXX ; es una etiqueta que identifica la posicin del cdigo ; DATO = 0x40 ; DATO = 0x04 ; es una etiqueta que identifica la posicin del cdigo ; DATO = 0x40 ; DATO = 0x40 W = 0x04

XORLW: XOR de literal con


Syntax: [etiqueta] XORLW k Operandos: 0 k 255 Operacin: (W) .XOR. k (W) Afecta a los flags: Z

W (eXclusive OR Literal with W)

Descripcin: Se realiza la operacin XOR BIT a BIT del registro W con el valor k. El resultado se coloca en W. A continuacin presento la tabla de la verdad de la funcin EXOR.

EXOR

x 0 0 1 1

y 0 1 0 1

x y 0 1 1 0

Pgina 14 de 15

Nemnicos 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 sern lo diferentes. EJ XORLW 0x08 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0x08 ; W = 0x00 Z=1

XORWF: XOR W con f (bit a bit) (eXclusive OR W with F)


Syntax: [etiqueta] XORWF f,d Operandos: 0 f 127 d [0,1] Operacin: (W) .XOR. (f) (destino) Afecta a los flags: Z Descripcin: Se realiza la operacin XOR (mirar nemnico anterior para operacin 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 sern lo diferentes. Tambin 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 mandndolo. EJ1 XORWF DATO,0 XXX EJ2 XORWF DATO,1 XXX ; es una etiqueta que identifica la posicin del cdigo ; W = 0x08 DATO = 0x08 ; W = 0x00 DATO = 0x08 Z=1 ; es una etiqueta que identifica la posicin del cdigo ; W = 0x09 DATO = 0x08 ; W = 0x09 DATO = 0x01 Z=0

Pgina 15 de 15