You are on page 1of 6

Set de Instrucciones

Microcontroladores PIC I

Conjunto De Instrucciones INSTRUCCIONES ORIENTADAS A


BITS
Del PIC 16F628 (16F628A)
BCF: Borra un bit
Como ya hemos visto, para que el
microcontrolador lleve acabo una tarea, Borra el bit ‘b’del registro ‘f’
debemos indicarle exactamente que debe Sintaxis: [etiqueta] BCF f,b
hacer, o en otras palabras, debemos escribir
el programa que el micro ejecutara. Ya
hemos visto varios ejemplos y muchas de
las instrucciones del PIC, pero ahora
veremos las 35 instrucciones del Antes de la instrucción: REG=b’01101101′
ensamblador mpasm. Estas 35 Después de la instrucción:
instrucciones son las mismas para toda la REG=b’01101100′
gama media de los microcontroladores PIC
así que si mas adelante se quiere realizar BSF: Activa un bit
un programa para un PIC 16F877 se Activa el bit ‘b’ del registro ‘f’
usaran las mismas instrucciones. Sintaxis: [etiqueta] BSF f,b

Las instrucciones se clasifican en:

- Orientadas a registros (18) Antes de la instrucción: REG=b’01001001′


- Orientadas al bit (4) Después de la instrucción:
- Operaciones de literales y control REG=b’01001011′
(13)
BTFSC: Checa un bit y salta si es 0
Todas las instrucciones se demoran en Si el bit “b” del registro “f” es 0, se salta una
ejecutar un ciclo de maquina con la instrucción y se continúa con la ejecución.
excepción de las instrucciones de salto que Sintaxis: [etiqueta] BTFSC f,b
toman dos ciclos

Antes de continuar es necesario definir


algunos términos que se usaran para
explicar las instrucciones:
f: cualquier registro del microcontrolador
W: registro de trabajo
b: posición de un bit en el registro ‘f’ BTFSS: Checa un bit y salta si es 1
d: destino, puede ser ‘f’ (d=1) o ‘W’ (d=0) Si el bit “b” del registro “f” es 1, se salta una
etiqueta: grupo de caracteres que marcan instrucción y se continúa con la ejecución.
el inicio de una parte del programa Sintaxis: [etiqueta] BTFSS f,b
[ ]: opcional
: posición de un bit dentro de un registro

Manuel Alvarado Baldeón -1-


Set de Instrucciones

Microcontroladores PIC I

INSTRUCCIONES ORIENTADAS A registro de estado se ponen a “1″.


CONSTANTES Y DE CONTROL Sintaxis: [label] CLRWDT
Flags afectados: TO, PD
ANDLW: W AND literal
Realiza la operación lógica AND entre el GOTO: Salto incondicional
registro W y la constante “k”. El resultado Se trata de un salto incondicional. Los 9
se almacena en el registro W. bits de la constante “k” que forman la
Sintaxis: [label] ANDWL k instrucción, se cargan en los bits del PC y
Flags afectados: Z forman la dirección de salto. Los bits del PC
se cargan con los bits del registro de estado.
Sintaxis: [etiqueta] GOTO k

Antes de la instrucción: W=0xA3


Después de la instrucción: W=0×03
Antes de la instrucción: PC=0
ADDLW: W ADD literal Después de la instrucción: PC=DESTINO
Realiza la suma entre el registro W y la
constante “k”. El resultado se almacena en IORLW: W OR literal
el registro W. Se realiza la función lógica OR entre el
Sintaxis: [label] ADDLW k registro W y la constante “k”. El resultado
Flags afectados: Z se almacena en el registro W.
Sintaxis: [etiqueta] IORLW k
Flags afectados: Z

Antes de la instrucción: W=0x50


Después de la instrucción: W=0×73
Antes de la instrucción: W=0x9A
CALL: Llamada a subrutina Después de la instrucción: W=0xBF
Llamada y salto a subrutina. La dirección
de retorno se guarda en el stack. La MOVLW: Carga un literal en W
constante “k” de 8 bits forma la dirección de El registro W se carga con el valor de 8 bits
salto y se carga en los bits del PC. Los bits expresado mediante la literal “k”.
del PC se cargan con los bits del registro Sintaxis: [etiqueta] MOVLW k
“STATUS”. PC se pone a 0.
Sintaxis: [etiqueta] CALL k

Después de la instrucción: W=0x14

RETURN: Regresa de una subrutina


Antes de la instrucción: PC=INICIO El programa regresa de la subrutina y
Después de la instrucción: PC=DESTINO ejecuta la instrucción que sigue a CALL
Sintaxis: [etiqueta] RETURN
CLRWDT: Borra el watchdog timer
Esta instrucción borra tanto el “watchdog”
como el prescaler. Los bits TO y PD del

Manuel Alvarado Baldeón -2-


Set de Instrucciones

Microcontroladores PIC I

Antes de la instrucción: W = 0xB5


Después de la instrucción: W = 0x1A
RETLW: Regresa de una subrutina y
carga el valor K en W SUBLW: Resta L – W
El programa regresa de la subrutina y A una constante “k” de 8 bits se le resta el
carga el valor de 8 bits del registro k en el registro W. El resultado es guardado en el
registro W mismo registro W.
Sintaxis: [etiqueta] RETLW,k Sintaxis: [etiqueta] SUBLW k
Flags afectados: C,DC,Z

INSTRUCCIONES ORIENTADAS A
REGISTROS
RETFIE: Regresa de la rutina de
servicio ADDWF: Suma W y f
Sintaxis: [etiqueta] RETFIE
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
Operación: (W) + (f) –> (destino)
Flags afectados: C, DC, Z

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. ANDWF: W AND f
Sintaxis: [etiqueta] SLEEP Realiza la operación lógica AND entre el
Flags afectados: TO, PD, GPWUF registro W y el registro “f”. Si “d” es 0 el
resultado se almacena en el registro W. Si
XORLW: W XOR literal “d” es 1, el resultado se almacena en el
Realiza la función lógica OR exclusiva entre registro “f”.
el contenido del registro W y la constante Sintaxis: [etiqueta] ANDWF f,d
“k” de 8 bits. El resultado se almacena en el Operación: (W) AND (f) –> (destino)
registro W. Flags afectados: Z
Sintaxis: [etiqueta] XORLW k
Flags afectados: Z

Manuel Alvarado Baldeón -3-


Set de Instrucciones

Microcontroladores PIC I

‘f’.
Sintaxis: [etiqueta] DECF f,d
Flags afectados: Z

CLRF: Borra un registro


Borra el contenido del registro ‘f’ y se activa
el flag Z.
Sintaxis: [etiqueta] CLRF f
Flags afectados: Z Antes de la instrucción: CONT=0×03, Z=0
Después de la instrucción: CONT=0×02,
Z=1
Antes de la instrucción: REG=0×54
DECFSZ: Decrementa en 1 y salta si el
Después de la instrucción: REG=0×00, Z=1
resultado es 0
El contenido del registro ‘f’ se decrementa.
CLRW: Borra el registro de trabajo W Si ‘d=0, el resultado se coloca en el registro
Borra el contenido del registro ‘W’ y se W. Si d=1, el resultado se coloca en el
activa el flag Z. Esta instrucción no tiene registro ‘f’. Si el resultado es 0, se salta la
operandos. siguiente instrucción y se continúa con la
Sintaxis: [etiqueta] CLRW ejecución.
Flags afectados: Z Sintaxis: [etiqueta] DECFSZ f,d
Flags afectados: Ninguno

Antes de la instrucción: W=0×A7


Después de la instrucción: W=0×00, Z=1

COMF: Complementa el registro f


El contenido del registro ‘f’ se complementa.
Si d=0 el resultado se almacena en el INCF: Incrementa el registro f
registro W. Si d=1 el resultado se almacena Incrementa en uno el contenido del registro
en el registro ‘f’. ‘f’. Si d=0, el resultado se almacena en W. Si
Sintaxis: [etiqueta] COMF f,d d=1, el resultado se almacena en ‘f’.
Flags afectados: Z Sintaxis: [label] INCF f,d
Flags afectados: Z

Antes de la instrucción: PORTB=0×9D


Después de la instrucción:
REG=0×62,W=0x9D Antes de la instrucción: CONT=0xFF, Z=0
Después de la instrucción: CONT=0×00,
DECF: Decrementa f en 1 Z=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

Manuel Alvarado Baldeón -4-


Set de Instrucciones

Microcontroladores PIC I

INCFSZ: Incrementa en 1 y salta si el W=0x15


resultado es 0 Después de la instrucción: PORTB=0x15,
El contenido del registro ‘f’ se incrementa. W=0x15
Si d=0, el resultado se coloca en el registro
W. Si d=1, el resultado se coloca en el MOVF: Mover el registro f
registro ‘f’. Si el resultado es 0, se salta la El contenido del registro ‘f’ se mueve al
siguiente instrucción y se continúa con la destino ‘d’. Si d=0, el destino es el registro
ejecución. W. Si d=1, el destino es el propio registro ‘f’.
Sintaxis: [etiqueta] DECFSZ f,d Sintaxis: [etiqueta] MOVF f,d
Flags afectados: Ninguno Flags afectados: Z

Después de la instrucción: W=PORTB

RLF: Rota el registro f a la izquierda


El contenido del registro ‘f’ se rota una
IORWF: W OR f
posición a la izquierda. El bit de más peso
Realiza la operación lógica OR entre el
pasa al carry y el carry se introduce por el
registro W y el registro ‘f’. Si d=0 el
bit de menos peso de ‘f’. Si d=0, el resultado
resultado se almacena en el registro W. Si
se coloca en el registro W. Si d=1, el
d=1, el resultado se almacena en el registro
resultado queda en el registro ‘f’.
‘f’.
Sintaxis: [etiqueta] RLF f,d
Sintaxis: [etiqueta] IORWF f,d
Flags afectados: C
Flags afectados: Z

Antes de la instrucción: REG=0×13, Antes de la instrucción: REG=b’11100110′,


W=0×91 C=0
Después de la instrucción: REG=0×13, Después de la instrucción:
W=0×93 REG=b’11001100′, C=1

MOVWF: Mover el valor del registro W RRF: Rota el registro f a la derecha


al registro f El contenido del registro ‘f’ se rota una
El contenido del registro ‘W’ se mueve al posición a la derecha. El bit de menos peso
registro ‘f’. pasa al carry y el carry se introduce por el
Sintaxis: [etiqueta] MOVWF f bit de más peso de ‘f’. Si d=0, el resultado se
Flags afectados: Ninguno coloca en el registro W. Si d=1, el resultado
queda en el registro ‘f’.
Sintaxis: [etiqueta] RLF f,d
Flags afectados: C

Antes de la instrucción: PORTB=??,

Manuel Alvarado Baldeón -5-


Set de Instrucciones

Microcontroladores PIC I

en el registro ‘f’.
Sintaxis: [etiqueta] XORWF f,d
Flags afectados: Z
Antes de la instrucción: REG=b’11100110′,
C=0
Después de la instrucción:
REG=b’01110011′, C=0

SUBWF: Resta f – W
Resta el contenido del registro ‘f’ menos el Antes de la instrucción: REG=0xAF,
contenido del registro W. Si d=0, el W=0xB5
resultado se almacena en el registro W. Si Después de la instrucción: REG=0x1A,
d=1, el resultado se almacena en el registro W=0xB5
‘f’.
Sintaxis: [etiqueta] SUBWF f,d NOP: No operación
Flags afectados: C, DC, Z No realiza ninguna operación, solo consume
un ciclo de reloj
Sintaxis: [etiqueta] NOP

Antes de la instrucción: REG=0×01, Y estas son las 35 instrucciones que


W=0×02 podemos utilizar para programar los
Después de la instrucción: REG=0xFF, microcontroladores PIC. La razón para que
W=0×02 solo se utilicen 35 instrucciones en la
programación es que los PIC son
SWAPF: Intercambio de f microcontroladores RISC, y estas
El nibble bajo del registro ‘f’ se intercambia instrucciones están bien optimizadas para
con el nibble alto del mismo. Si d=0, el tener una mayor velocidad de trabajo, una
resultado se coloca en el registro W. Si d=1, arquitectura más simple y un código mas
el resultado queda en el registro ‘f’. compacto.
Sintaxis: [etiqueta] SWAPF f,d
Flags afectados: Ninguno

Antes de la instrucción: REG=0×54


Después de la instrucción: REG=0×45

XORWF: W XOR f
Realiza la función lógica 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

Manuel Alvarado Baldeón -6-

You might also like