Escolar Documentos
Profissional Documentos
Cultura Documentos
2
2.1 Conjunto de Instrucciones 2.2 Modos de direccionamiento 2.3 Registros de trabajo
M I C R O C O N T R O L A D O R E S
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BYTE de registros ADDWF: Suma W y f Suma el contenido del registro W y el registro f. Si d es 0, el resultado se almacena en el registro W. Si d es 1 el resultado se almacena en el registro f. Sintaxis: [etiqueta] ADDWF f,d Operacin: (W) + (f) > (destino) Flags afectados: C, DC, Z Ejemplo: ADDWF REG,1 Antes de la instruccin: W=003, REG=004 Despus de la instruccin: W=003, REG=007 ANDWF: W AND f Realiza la operacin lgica AND entre el registro W y el registro f. Si d es 0 el resultado se almacena en el registro W. Si d es 1, el resultado se almacena en el registro f. Sintaxis: [etiqueta] ANDWF f,d Operacin: (W) AND (f) > (destino) Flags afectados: Z Ejemplo: ANDWF REG,1 Antes de la instruccin: W=017, REG= 0xC2 Despus de la instruccin: W=017, REG= 002
M I C R O C O N T R O L A D O R E S
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BYTE registros COMF: Complementa el registro f El contenido del registro f se complementa. Si d=0 el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro f. Sintaxis: [etiqueta] COMF f,d Flags afectados: Z Ejemplo: COMF REG,0 Antes de la instruccion: REG=013 Despus de la instruccin: REG=013, W=0xEC DECF: Decrementa f en 1 De decrementa en uno el contenido del registro f. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en f. Sintaxis: [etiqueta] DECF f,d Flags afectados: Z Ejemplo: DEC CONT, 1 Antes de la instruccin: CONT=001, Z=0 Despus de la instruccin: CONT=000, Z=1
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BYTE registros DECFSZ: Decrementa en 1 y salta si el resultado es 0 El contenido del registro f se decrementa. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro f. Si el resultado es 0, se salta la siguiente instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno INCF: Incrementa el registro f Incrementa en uno el contenido del registro f. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en f. Sintaxis: [label] INCF f,d Flags afectados: Z Ejemplo: INCF CONT,1 Antes de la instruccin: CONT=0xFF, Z=0 Despus de la instruccin: CONT=000, Z=1
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BYTE registros INCFSZ: Incrementa en 1 y salta si el resultado es 0 El contenido del registro f se incrementa. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro f. Si el resultado es 0, se salta la siguiente instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno IORWF: W OR f Realiza la operacin lgica OR entre el registro W y el registro f. Si d=0 el resultado se almacena en el registro W. Si d=1, el resultado se almacen en el registro f. Sintaxis: [etiqueta] IORWF f,d Flags afectados: Z Ejemplo: IORWF REG,0 Antes de la instruccin: REG=013, W=091 Despus de la instruccin: REG=013, W=093
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BYTE registros MOVF: Mover el registro f El contenido del registro f se mueve al destino d. Si d=0, el destino es el registro W. Si d=1, el destino es el propio registro f. Sintaxis: [etiqueta] MOVF f,d Flags afectados: Z Ejemplo: MOVF REG,0 Despus de la instruccin: W=REG RLF: Rota el registro f a la izquierda El contenido del registro f se rota una posicin a la izquierda. El bit de ms peso pasa al carry y el carry se introduce por el bit de menos peso de f. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro f. Sintaxis: [etiqueta] RLF f,d Flags afectados: C Ejemplo: RLF REG,1 Antes de la instruccin: REG=b11100110, C=0 Despus de la instruccin: REG=b11001100, C=1
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BYTE registros RRF: Rota el registro f a la derecha El contenido del registro f se rota una posicin a la derecha. El bit de menos peso pasa al carry y el carry se introduce por el bit de ms peso de f. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro f. Sintaxis: [etiqueta] RLF f,d Flags afectados: C Ejemplo: RLF REG,1 Antes de la instruccin: REG=b11100110, C=0 Despus de la instruccin: REG=b01110011, C=0 SUBWF: Resta f W Resta el contenido del registro f menos el contenido del registro W. Si d=0, el resultado se almacena en el registro W. Si d=1, el resultado se almacena en el registro f. Sintaxis: [etiqueta] SUBWF f,d Flags afectados: C, DC, Z Ejemplo: SUBWF REG,1 Antes de la instruccin: REG=001, W=002 Despus de la instruccin: REG=0xFF, W=002
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BYTE registros SWAPF: Intercambio de f El nibble bajo del registro f se intercambia con el nibble alto del mismo. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro f. Sintaxis: [etiqueta] SWAPF f,d Flags afectados: Ninguno Ejemplo: SWAPF REG,1 Antes de la instruccin: REG=054 Despus de la instruccin: REG=045 XORWF: W XOR f Realiza la funcin lgica OR exclusiva entre el contenido del registro W y el registro f. Si d=0, el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro f. Sintaxis: [etiqueta] XORWF f,d Flags afectados: Z Ejemplo: XORWF REG,1 Antes de la instruccin: REG=0xAF, W=0xB5 Despus de la instruccin: REG=0x1A, W=0xB5 NOP: No operacion No realiza ninguna operacion, solo consume un ciclo de reloj Sintaxis: [etiqueta] NOP
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a BIT BCF: Borra un bit Borra el bit bdel registro f Sintaxis: [etiqueta] BCF f,b Ejemplo: BCF REG,0 Antes de la instruccin: REG=b01101101 Despus de la instruccin: REG=b01101100 BSF: Activa un bit Activa el bit b del registro f Sintaxis: [etiqueta] BSF f,b Ejemplo: BSF REG,2 Antes de la instruccin: REG=b01001001 Despus de la instruccin: REG=b01001011 BTFSC: Checa un bit y salta si es 0 Si el bit b del registro f es 0, se salta una instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] BTFSC f,b BTFSS: Checa un bit y salta si es 1 Si el bit b del registro f es 1, se salta una instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] BTFSS f,b
M I C R O C O N T R O L A D O R E S
M I C R O C O N T R O L A D O R E S
ANDLW: W AND literal Realiza la operacin lgica AND entre el registro W y la constante k. El resultado se almacena en el registro W. Sintaxis: [label] ANDWL k Flags afectados: Z Ejemplo: ANDLW 0x5F Antes de la instruccin: W=0xA3 Despus de la instruccin: W=003 CALL: Llamada a subrutina Llamada y salto a subrutina. La direccin de retorno se guarda en el stack. La constante k de 8 bits forma la direccin de salto y se carga en los bits del PC. Los bits del PC se cargan con los bits del registro STATUS. PC se pone a 0. Sintaxis: [etiqueta] CALL k Ejemplo: INICIO CALL DESTINO Antes de la instruccin: PC=INICIO Despus de la instruccin: PC=DESTINO
M I C R O C O N T R O L A D O R E S
CLRWDT: Borra el watchdog timer Esta instruccin borra tanto el watchdog como el prescaler. Los bits TO y PD del registro de estado se ponen a 1. Sintaxis: [label] CLRWDT Flags afectados: TO, PD GOTO: Salto incondicional Se trata de un salto incondicional. Los 9 bits de la constante k que forman la instruccin, se cargan en los bits del PC y forman la direccin de salto. Los bits del PC se cargan con los bits del registro de estado. Sintaxis: [etiqueta] GOTO k Ejemplo: INICIO GOTO DESTINO Antes de la instruccin: PC=0 Despus de la instruccin: PC=DESTINO
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a constantes y de control IORLW: W OR literal Se realiza la funcin lgica OR entre el registro W y la contante k. El resultado se almacena en el registro W. Sintaxis: [etiqueta] IORLW k Flags afectados: Z Ejemplo: IORLW Ox35 Antes de la instruccin: W=0x9A Despus de la instruccin: W=0xBF MOVLW: Carga un literal en W El registro W se carga con el valor de 8 bits expresado mediante la literal k. Sintaxis: [etiqueta] MOVLW k Ejemplo: MOVLW 0x5A Despus de la instruccin: W=0x5A RETURN: Regresa de una subrutina El programa regresa de la subrutina y ejecuta la instruccion que sigue a CALL Sintaxis: [etiqueta] RETURN
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a constantes y de control RETLW: Regresa de una subrutina y carga el valor K en W El programa regresa de la subrutina y carga el valor de 8 bits del registro k en el registro W Sintaxis: [etiqueta] RETLW,k Ejemplo: RETLW,045 Antes de la instruccion: W=xx Despues de la instruccion: W=045 RETFIE: Regresa de la rutina de servicio Sintaxis: [etiqueta] RETFIE SLEEP: Entra en estado de reposo Al salir, activa el bit de estado TO y borra el PD. El WDT y el prescaler se borran.Al entrar en el modo SLEEP, se detiene el oscilador. Sintaxis: [etiqueta] SLEEP Flags afectados: TO, PD, GPWUF
M I C R O C O N T R O L A D O R E S
Instrucciones orientadas a constantes y de control XORLW: W XOR literal Realiza la funcin lgica OR exclusiva entre el contenido del registro W y la constante k de 8 bits. El resultado se almacena en el registro W. Sintaxis: [etiqueta] XORLW k Flags afectados: Z Ejemplo: XORLW 0xAF Antes de la instruccin: W = 0xB5 Despus de la instruccin: W = 0x1A SUBLW: Resta L W A una constante k de 8 bits se le resta el registro W. El resultado es guardado en el mismo registro W. Sintaxis: [etiqueta] SUBLW k Flags afectados: C,DC,Z
M I C R O C O N T R O L A D O R E S
Cdigo de operacin
f (direccin)
si d=0 el destino es W
si d=1 el destino es f f es la direccin de 7 bits del registro El formato de todas las instrucciones consiste de una palabra de 14 bits dividida en un cdigo de operacin que especifica el tipo de instruccin de uno o ms operandos. En esta pgina y las siguientes se muestra los tres formatos generales que las instrucciones pueden tener.
M I C R O C O N T R O L A D O R E S
M I C R O C O N T R O L A D O R E S
si d=0 entonces: f w si d=1 entonces: f f, en este caso se utiliza para saber si el contenido de f es cero. En estas instrucciones f representa un registro SFR (ej: PORTA) o el nombre de una variable RAM (TEMP1), que sirve como operando fuente o destino. d representa al operando destino: si d=0 el destino es el registro W, si d=1 el destino es el file f especificado en la instruccin.
f (direccin)
M I C R O C O N T R O L A D O R E S
As: BSF f, 5 realiza 1 f5. En estas instrucciones b representa un campo de 3 bits que selecciona el nmero de bit afectado en la operacin, mientras que f representa el registro en el cual el bit est localizado.
Cdigo de operacin
Literal k
k es un valor inmediato o constante de 8 bits En la mayora de las instrucciones k representa un dato de 8 bits.
M I C R O C O N T R O L A D O R E S
Cdigo de operacin
M I C R O C O N T R O L A D O R E S
Ciclo de instruccin
Como ya se ha dicho debido a la tubera y al solapamiento de la fase de ejecucin de una instruccin con la fase de bsqueda de la siguiente, la mayora de las instrucciones de los PIC demoran un ciclo de instruccin. La excepcin son las instrucciones de salto o ramificacin, donde al no poder solapar su ejecucin con la bsqueda de la siguiente, son necesarios los dos ciclos de instruccin.
M I C R O C O N T R O L A D O R E S
Instrucciones Limpiar/mover
CLRW CLRF MOVLW MOVWF MOVF MOVF SWAPF SWAPF
TEMP1 D 10 TEMP1 TEMP1, W TEMP1, F TEMP1, F TEMP1, W
M I C R O C O N T R O L A D O R E S
Incremento/Decremento/Complemento
INCF INCF DECF DECF COMF COMF TEMP1, F TEMP1, W TEMP1, F TEMP1, W TEMP1, F TEMP1, W
M I C R O C O N T R O L A D O R E S
Suma/Resta
ADDLW ADDWF ADDWF SUBLW SUBWF SUBWF 5 TEMP1, F TEMP1, W 5 TEMP1, F TEMP1, W
M I C R O C O N T R O L A D O R E S
Instrucciones Lgicas
ANDLW ANDWF ANDWF IORLW IORWF IORWF XORLW XORWF XORWF RLF RLF RRF RRF B 00000111 TEMP1, F TEMP1, W B 00000111 TEMP1, F TEMP1, W B 00000111 TEMP1, F TEMP1, W TEMP1, F TEMP1, W TEMP1, F TEMP1, W
M I C R O C O N T R O L A D O R E S
RETFIE
Miscelnea
CLRWDT ;Si el watchdog timer est habilitado, esta ;instruccin lo pone encera para impedir su ;desbordamiento. ;Detiene el reloj (reduce potencia) y ;espera por watchdog timer o por seal externa. ;no hace nada consume un ciclo de instruccin
M I C R O C O N T R O L A D O R E S
SLEEP
NOP
Direccionamiento inmediato Ocurre en instrucciones con literales que forman parte de la instruccin. Es decir que el dato se encuentra en la misma instruccin. En el cdigo de mquina est embebido el dato.
Direccionamiento directo
Ocurre en las instrucciones que contienen la direccin del dato requerido. En el cdigo de mquina est embebido la direccin del dato. Direccionamiento indirecto Ocurre cuando en la instruccin se tiene una operacin con el registro INDF, lo cual indica que el valor del dato se encuentra en la direccin guardada en el registro FSR (7-BITS menos significativos).
M I C R O C O N T R O L A D O R E S
Direccionamiento Indirecto
El microcontrolador 16F887 es adems capaz de direccionamiento indirecto por medio de los registros INDF y FSR. Algunas veces el direccionamiento indirecto simplifica considerablemente la escritura de un programa. El direccionamiento indirecto emplea el registro INDF, el cual, no es un registro verdadero (fsicamente no existe), solamente especifica el registro apuntado por el registro FSR. Debido a esto la lectura/escritura sobre el registro INDF significa la lectura/escritura del registro apuntado por el registro FSR. En otras palabras en el registro FSR se especifican las direcciones de los registros apuntados y en INDF se colocan sus valores.
M I C R O C O N T R O L A D O R E S
NEXT
CONTINUE XXXX
M I C R O C O N T R O L A D O R E S
Bit de lectura/escritura Bit de lectura solamente Despus de un RESET, se hace cero Despus de un RESET, se hace uno
IRP - Bit que selecciona bancos de registros. Se lo usa en direccionamiento indirecto 1 - Banks 0 and 1 activos (00h-FFh) 0 - Banks 2 and 3 activos (100h-1FFh) RP1,RP0 - Bits para seleccionar los bancos de registros. Usados en direccionamiento directo.
RP1 RP0 00 01 10 11 Banco activo Bank0 Bank1 Bank2 Bank3
TO Bit de Time-out. 1 Despus de encender el microcontrolador o despus de ejecutar la instruccin CLRWDT que resetea el WDT o la instruccin SLEEP (modo de bajo consumo de energa). 0 Cuando se desborda el perro guardin.
M I C R O C O N T R O L A D O R E S
PD Bit de Power-down. 1 Despus de encender el microcontrolador o despus de ejecutar la instruccin CLRWDT que resetea el WDT . 0 Al ejecutar la instruccin SLEEP que permite entrar en el modo de bajo consumo. Z - Bit de Zero 1 Cuando el resultado de una operacin aritmtica o lgica es cero. 0 Cuando el resultado de una operacin aritmtica o lgica es diferente de cero. DC - Bit de carry/borrow este bit cambia durante las operaciones de adicin y sustraccin si ocurre un desbordamiento (overflow) o prstamo (borrow). 1 Cuando ocurre un desbordamiento del cuarto bit. 0 Cuando no ocurre un desbordamiento del cuarto bit. C - Bit de Carry/Borrow cambia durante las operaciones de adicin o sustraccin si ocurre un desbordamiento (overflow) o prstamo (borrow), i.e. si el resultado es mayor a 255 or menor que 0. 1 Cuando ocurre un desbordamiento del bit ms significativo. 0 Cuando no ocurre un desbordamiento del bit ms significativo.
M I C R O C O N T R O L A D O R E S
INTEDG Seleccin del Flanco de Interruptcin 1 Interrupcin con el flanco de subida del bit RB0/INT. 0 - Interrupcin con el flanco de bajada del bit RB0/INT.
T0CS Selecciona el origen del reloj del TMR0 1 Como contador de pulsos del pin TOCKI. 0 Reloj de insrucciones interno (Fosc/4). T0SE Seleccin del flanco de conteo del TMR0 desde TOCK1 1 Incrementa en flanco de bajada del pin RA4/TOC1. 0 - Incrementa en flanco de subida del pin RA4/TOC1.
M I C R O C O N T R O L A D O R E S
PSA Asignacin del preescalador al WDT o al TMR0 1 Pre-escalador se asigna al WDT. 0 Pre-escalador se asigna al TMR0. PS2, PS1, PS0 Bits de seleccin del Pre-escalador La divisin del Pre-escalador es seleccionada mediante tres bits y se lo asigna al (TMR0) o al perro guardin (WDT) de acuerdo a la siguiente tabla:
M I C R O C O N T R O L A D O R E S
El registro PCON contiene dos banderas para diferenciar entre: POR,BOR,MCLR y WDT reset. As como tambin un control para Ultra low power reset y un habilitador por software del BOR.
ULPWUE Bit habilitador de Ultra Low-Power Wake-up 1 Habilitador de Ultra low Power Power Wake-up. 0 - Deshabilitador de Ultra low Power Power Wake-up. SBOREN - Bit habilitador de Software BOR Enable 1 - Habilitador de Brown-out Reset. 0 - Deshabilitador de Brown-out Reset. POR Bit de Power-on Reset 1 Cuando no ha ocurrido POR 0 - Cuando ha ocurrido POR. Este bit tiene que ser seteado por software BOR - Bit de Brown-out Reset 1 - Cuando no ha ocurrido un Brown-out Reset 0 - Cuando ha ocurrido un Brown-out Reset . Este bit debe de ser seteado por software luego de un BOR,
M I C R O C O N T R O L A D O R E S
El tamao de la memoria ROM del microcontrolador es de 8K. Es decir 8.192 posiciones para almacenar programas. Por esta razn el contador de programa debe ser de 13 bits de ancho (2^13 = 8192), conformado por 8 bits del registro PCL y 5 bits del registro PCLATH. El contador del programa cuenta normalmente hasta 2K por esta razn la memoria ROM se divide en cuatro pginas de 2K. Para saltar entre pginas es necesario programar los bits 4 y 5 de PCLATH (que son los indicadores de pgina). En llamadas a subrutinas o ejecuciones de saltos (instrucciones CALL y GOTO), el microcontrolador es capaz de proveer solo 11-bits de direccionamiento. Por esta razn en forma similar a la memoria RAM dividida en bancos, la memoria ROM se divide en cuatro pginas de 2K cada una. Las instrucciones ejecutadas dentro de una pgina no tienen problema pero para saltar entre pginas es necesario programar los bits 4 y 3 de PCLATH (que son los indicadores de pgina) como se observa en la prxima diapositiva. Cuando las subrutinas alcanzan las instrucciones RETURN, RETLW o RETFIE retornan al programa principal y el microcontrolador simplemente contina con la ejecucin del programa a partir de la direccin almacenada en la PILA o STACK
M I C R O C O N T R O L A D O R E S
M I C R O C O N T R O L A D O R E S