Professional Documents
Culture Documents
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
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
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
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
Pgina 4 de 15
Pgina 5 de 15
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 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
DATO
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
Pgina 7 de 15
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
Pgina 8 de 15
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
Pgina 9 de 15
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
Pgina 10 de 15
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
Pgina 12 de 15
SUBLW:
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
Z=0
Z=1
Z=0
(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
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
Pgina 15 de 15