JUEGO DE INSTRUCCIONES
de los PIC

Juego Reducido de Instrucciones (RISC) de  los PIC.

Como se indica es un juego reducido de instrucciones sólo son 35, así que, no nos resultará demasiado complicado manejar estas pocas instrucciones, aunque es cierto que no es necesario retener en la memoria qué hace cada una, esto resultaría una extrema labor para cualquiera de nosotros y no es esto lo que se pretende, se trata de disponer de una referencia a la que acudir, en caso de dudas y continuar con nuestro trabajo que es la programación. Para lograr cierta soltura a la hora de programar, es muy conveniente realizar cuantas más practicas mejor, sólo con la practica se puede lograr la agilidad en cualquier disciplina.

Una forma de familiarizarse con las instrucciones que aquí se describen, es utilizar las librerías de rutinas y tratar de comprender el motivo por el que se ha usado cierta instrucción y no otra que se nos haya ocurrido. Por cierto, es interesante usar las rutinas que se entregan y procurar adaptarlas a las características y circunstancias que nos convengan en cada aplicación, el motivo es que estas rutinas sabemos que funcionan por lo tanto será mejor aprovechar un trabajo hecho y comprobado frente al riesgo de la aventura. Y sin más preámbulos empecemos con las instrucciones.

Términos resaltados en Rojo indican que no tienen correspondencia con el '508A. 

 

ADDLW
ADDWF
ANDLW
ANDWF
BCF
BSF
BTFSC
BTFSS

CALL
CLRF CLRW
CLRWDT
COMF
DECF
DECFSZ

GOTO
INCF
INCFSZ

IORLW
IORWF

MOVF
MOVLW
MOVWF
NOP
OPTION

RETFIE
RETLW
RETURN
RLF
RRF

SLEEP
SUBLW
SUBWF
SWAPF
TRIS
XORLW
XORWF


NOTACIÓN PARA NÚMEROS

Siempre dependerá de la herramienta en uso, normalmente se usa lo que sigue:

  • Decimal :  '100D'  ó  .100
  • Hexadecimal  : '64H'  ó  0x64  ó  64h
  • Octal : '144O' o 144O
  • Binario : '01101100b'
  • ASCII :  'C'
NOTACIÓN PARA REGISTROS Y LITERALES
  • w : Registro W, es el registro de trabajo, similar al acumulador.
  • f  : Campo de 5 bits (fffff),contiene la dirección del banco de registros, que ocupa el banco 0 del área de datos.
            Direcciona uno de esos registros.
  • k : Representa una constante de 8 bits.
  • d : Bit del código OP de la instrucción. Si d=0, el destino es W, y si d=1 el destino es f. O sea, en la instrucción
    se selecciona el destino donde se guarda el resultado de la operación.
  • b : Determina la posición de un bit dentro de un registro de 8 bits, (o sea, tomará valores entre 0 y 7)
FLAGS

Los Flags o banderas son marcadores, representados por bits dentro del registro STATUS, y son resaltados en la tabla siguiente:

      PA2 PA1 PA0 TO# PD# Z DC C
      - - - - - X X X
  • Z   : Flag (bandera) Zero, se pone a 1 cuando una operación lógica o aritmética da 0 (cero) como resultado. En cualquier otro caso se pone a 0.
  • : Flag (bandera) Carry, se pone a 1 cuando la operación que le afecta sobrepasa el nivel de representación del procesador, en nuestro caso 
    es de 8 BIT's, de esta manera si sumamos a 11111111b un 00000011b el resultado sería 00000010b mas 1 y el Bit Carry pasaría a 1 para
    advertir de esta circunstancia. En otras palabras, cuando se rebasa la cuenta de 255 y pasa por 0 en la cuenta el Bit Carry se pone a 1.
  • DC : Flag carry del nibble inferior, este se comporta igual que el Bit Carry, solo que el límite de representación son los 4 bits
     inferiores, de esta manera si tenemos 00001111b (0Fh) y sumamos 00000111b (07h), el resultado será 00010110b y el Bit DC se
     pone a 1, el Bit Carry estará a 0 al no superarse los 8 bits y el Bit Z a 0 al ser el número diferente de 0.

Procure entender y no le queden dudas respecto a los FLAGS, éstos conceptos son esenciales, no obstante ya se aclararán en la medida que vaya avanzando en los artículos que siguen. Sobre todo se recomienda que revise los estados de los registros mediante herramientas como MPASM, cuando lea el artículo sobre el uso de esta herramienta que de uso libre, se aclararán las posibles dudas.

NIBBLES

Todos los registros del F84 y el ' 508A comprenden 8 "celdas" en las que se coloca un 'cero' o un 'uno'. Las ocho celdas se separan en dos grupos llamados Nibbles (niveles), uno superiores de 4 celdas (Nibble Alto) y otro inferiores de 4 celdas (Nibble Bajo).

Nº Bit 7 6 5 4 3 2 1 0
Registro 0 0 0 0 0 0 0 0

nibble alto

nibble bajo

Instrucción ADDLW ADD Literal to W   ADDWF ADD W to F
Sintaxis ADDLW k   ADDWF f,d
Codificación
11     111x kkkk kkkk
 
0001 11bf ffff
00 0111 dfff ffff
Palabra/Ciclos 1 / 1   1/1
Operación W + k -> WW + k -> W
W AND f -> W si d=0
  W + f -> f   si d=1
W + f -> W  si d=0

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - X X X
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - X X X
Descripción

C Se pone a 1 si se produce un acarreo desde el bit de mayor peso.

DC Se pone a 1 si se genera un acarreo del bit 3 al bit 4.

Z Se pone a 1 si el resultado de la operación es cero.

Añade el contenido de W al contenido de k y almacena el resultado en W.

Atención: Esta operación no existe en los PIB12C5XX.

 

C Se pone a 1 si se produce un acarreo desde el bit de mayor peso.

DC Se pone a 1 si se genera un acarreo del bit 3 al bit 4.

Z Se pone a 1 si el resultado de la operación es cero.

Añade el contenido de W al contenido de f y almacena el resultado en W si  d=0 y en f si d=1.

Ejemplo

 ADDLW 0x15h  Si antes de la instrucción:

W = 10h = 0001 0000 b

Al ejecutarse la instrucción: W = 10h + 15h = 25h

W = 0001 0000 b + 0001 0101 b = 0010 0101 b

 

ADDWF FSR.0

Si antes de la instrucción: W = 17h y FSR = C2h como d=0

Al ejecutarse: W = 17h + C2h = D9h    FSR = C2h

 

Volver
Instrucción ANDLW AND Literal and W   ANDWF AND W with F
Sintaxis ANDLW k   [Etiqueta] ANDWF f,d
Codificación
1110 kkkk kkkk
11 1001 kkkk Kkkk
 
0001     01df ffff
00 0101 dfff ffff
Palabra/Ciclos 1/1   1/1
Operación W AND k -> W  

f entre 0 y 127     b entre 0 y 7

W AND f -> f     si d=1

W AND f -> W  si d=0

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - X - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - X - -
Descripción

Z Se pone a 1 si el resultado de la operación es cero.

Ejecuta un AND lógico entre el contenido  de W y el literal k y lo almacena en W.

 

Efectúa la operación AND lógico entre el contenido del W y el contenido de f y almacena el resultado en W. Si d = 0 o en f si d =1.   Z Se pone a 1 si el resultado de la operación es 0.

Ejemplo

ANDLW 0x5F

Si antes de la instrucción W = A3h

Al ejecutarse: W = 0101 1111 b AND 1010 0011 b =

= 0000 0011b = 03h

 

ANDWF FSR,1

Si antes de la instrucción.

W = 17h = 0001 0111 b y FSR = C2h = 1100 0010 b

Al ejecutarse: W = 17h = 0001 0111 b

FSR = 0001 0111 b AND 1100 0010 b = 0000 0010 b = 02h

Volver
Instrucción BCF Bit Clear F   BSF Bit Set F
Sintaxis [Etiqueta] BCF f,b    [Etiqueta] BSF f,b 
Codificación
0100 bbbf ffff
01 00bb bfff ffff
 
0100 bbbf ffff
01 11bb bfff ffff
Palabra/Ciclos

f entre 0 y 127     b entre 0 y 7

0 -> b(f)     

 

f entre 0 y127    b entre 0 y 7

1 -> b(f)

Operación 1/1   1/1

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción Pone a 0 el bit b del archivo f   Pone a 1 el bit b del archivo f
Ejemplo

BCF FLAG_REG,7

Si antes de la instrucción el registro:

FLAG_REG = C7h = 1100 0111 b      

Al ejecutarse la instrucción, el registro queda con valor:

FLAG_REG = 47h = 0100 0111b

 

Si antes de la instrucción el registro tiene el valor:

FLAG_REG = 0Ah = 0000 1010b 

Al ejecutarse la instrucción, el registro queda con valor:

FLAG_REG = 8Ah = 1000 1010 b

Volver
Instrucción BTFSC Bit Test, Skip If Clear   BTFSS Bit Test, Skip If Set
Sintaxis [Etiqueta] BTFSC f,b   [Etiqueta] BTFSS f,b
Codificación
0110     bbbf ffff
01 10bb bfff ffff
 
0111 bbbf ffff
01 11bb bfff ffff
Palabra/Ciclos 1/1 o 2   1/1 o 2
Operación

f entre 0 y 127      b entre 0 y 7

Salta (Skip) si b(f)=0

 

f entre 0 y 127      b entre 0 y 7

Salta (Skip) si b(f)=1

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción

Si el bit número b del registro f es cero, la instrucción que sigue a ésta se ignora (Skip) y se trata como un NOP. En este caso y sólo en este caso, la instrucción BTFSC precisa de dos ciclos para ejecutarse. 

 

Si el bit número b del registro f es 1, la instrucción que sigue a ésta se ignora (Skip) y se trata como un NOP. En este caso y sólo en este caso, la instrucción BTFSS precisa de dos ciclos para ejecutarse. 

Ejemplo

Aqui BTFSC FLAG,1

FALSE GOTO Process_Code TRUE.

Si antes de la instrucción : PC = dirección Aqui

Al ejecutarse: if FLAG <1> = 0, PC = dirección TRUE

 if FLAG <1> = 1, PC = dirección FALSE

 

Aqui BTFSS FLAG,1

FALSE GOTO Process_Code TRUE.

Si antes de la instrucción : PC = dirección Aqui

Al ejecutarse: if FLAG <1> = 0, PC = dirección FALSE

 if FLAG <1> = 1, PC = dirección TRUE

Volver
Instrucción CALL Subrutina CALL   CLRF Clear f with f
Sintaxis [Etiqueta] CALL k   [Etiqueta] CLRF f
Codificación
1001 kkkk kkkk
10 0kkk kkkk kkkk
 
0000    011f ffff
00 0001 1fff ffff
Palabra/Ciclos 1/2   1/1
Operación

k entre 0 y 2047

Para los 16c5X: PC + 1 -> Pila, k -> PC(0-7),0 ->PC(8)

PA2 a PA0 -> PC(9-11)

Para los 16c64, 71, 74, 84

PC +1 -> Pila, k -> PC(0-10), PCLATH(3,4) -> PC(11,12)

 

f entre 0 y 127

00h -> f

1 -> Z

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - 1 - -
Descripción

Guarda la dirección de vuelta en la Pila y después llama a la subrutina situada en la dirección cargada en el PC.

Atención: El modo de cálculo de la dirección difiere según la familia PIC utilizada. También hay que posicionar bien PA2, PA1, PA0 (16c5X) o el registro PCLATH (en los demás PIC), antes de ejecutar la instrucción CALL.

 

Pone el contenido del registro f a cero y activa el bit [Flag] Z.

Z se pone a 1 si el resultado de la operación es 0.

Ejemplo

Aqui CALL THERE

Si antes de la instrucción: PC = dirección Aqui

Al ejecutarse:  PC = dirección (THERE)

 TOS = dirección (Aqui + 1)

 

CLRF REG

Si antes de la instrucción. REG =5Ah

Al ejecutarse REG = 00h             Flag Z = 1

Volver
Instrucción CLRW Clear register W   CLRWDT Clear Watchdog Timer
Sintaxis [Etiqueta] CLRW    [Etiqueta] CLRWDT
Codificación
0000 0100 0000
00 0001 0000 0011
 
0000 0000 0100
00 0000 0110 0100
Palabra/Ciclos 1/1   1/1
Operación

00 -> W

 1 -> Z

 

00 -> WDT y 0 -> predivisor del temporizador.

Los bits TO# y PD# del registro State se ponen a 1.

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - 1 - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - 1 - -
Descripción

Pone el registro W a 00h y pone a 1 el bit [flag] Z, si el resultado de la operación 0.

 

 

Pone a 00h el registro WDT contador del temporizador Watchdog, así como el predivisor.

TO# y PD# se ponen a 1 cuando  se ejecuta la instrucción CLRWDT o SLEEP.

TO# se pone a 0 si el temporizador Watchdog se desborda.

Ejemplo

CLRW

Si antes de la instrucción. W = 5Ah

Al ejecutarse: W = 00h

 flag Z = 1

 

CLRWDT

Si antes de ejecutarse la instrucción: WDT = ?

Al ejecutarse: WDT = 00h   Preescaler WDT = 0

bit de estado TO = 1

bit de estado PD = 1

Volver
Instrucción COMF Complement F   DECF Decrement F to F
Sintaxis [Etiqueta] COMF f,d   [Etiqueta] DECF f,d
Codificación
0010     01df ffff
00 1001 dfff ffff
 
0000 11df ffff
00 0011 dfff ffff
Palabra/Ciclos 1/1   1/1
Operación

si d = 1    ~f -> f           f entre 0 y 127

si d = 0    ~f -> W

 

f - 1 -> f      si d = 1            f entre 0 y 127

f - 1 -> W   si d = 0 

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - X - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - X - -
Descripción

Complementa el contenido del registro f bir a bit. El resultado lo almacena de nuevo en f si d = 1 (borra lo anterior) o en W si d = 0 (f no varía).

Z se pone a 1 si el resultado de la operación es 0.

 

Decrementa el contenido del registro f en una unidad. El resultado se guarda en W si d=0 (f no varía) o en f si d=1.

Z Se pone a 1 si el resultado de la operación es 0.

Ejemplo

COMF REG1,0

Si antes de la instrucción: REG1 = 13h como d = 0

Al ejecutarse: REG1 = 13h = 0001 0011 b

W = ECh = 1110 1100 b           flag Z = 0

 

DECF CNT,1

Si antes de la instrucción: CNT = 01h    Z = 0 

Al ejecutarse: CNT = 00h

bit [flag] Z = 1

Volver
Instrucción DECFSZ Decrement F, Skip If Zero   GOTO Salto Incondicional with F
Sintaxis [Etiqueta]  DECFSZ f, d   GOTO k
Codificación
0010 11df ffff
00 1011 dfff ffff
 
101k     kkkk kkkk
10 1kkk kkkk kkkk
Palabra/Ciclos 1,1 (2)   1/2
Operación

f - 1 -> f     si d=1 ;    f entre 0 y 127 
 salta si d= 0 ;  f - 1 -> W  

 

En el caso de los 16c5X:
k -> PC(0-8), PA2 PA1, PA0 -> PC(9-11) 
En el caso de los 16c64,71,74 y 84: 
k -> PC(0-10), PCLATH(3,4) -> PC(11,12)

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción

Decrementa el contenido del registro f en una unidad. El resultado se guarda en W si d=0 (f no varia)  y en f si d=1
Si el resultado es nulo, se ignora la siguiente instrucción y en ese caso la instrucción dura dos ciclos.

 

Llama la subrutina situada en la dirección cargada en el registro PC
Atención: El modo de cálculo de la dirección difiere según la familia de PIC utilizada. También hay que posicionar correctamente PA2, PA1, PA0 (16c5X) o la parte baja de k, se carga en PCL y la alta en PCLATH (en los demás PIC) antes de ejecutar la instrucción GOTO. Se trata de un salto incondicional.

Ejemplo

AQUI DECFSZ CNT,1
GOTO LOOP CONTINUE; 
 Si antes de la instrucción: PC = dirección AQUI
Al ejecutarse: CNT = CNT -1
Si CNT = 0 entonces PC = dirección CONTINUE
Si CNT no = 0 entonces PC = dirección AQUI + 1

 

- Ocupa 2 ciclos de reloj. Ejemplo: GOTO retardo1
 Antes:       PC = Origen
 Después: PC = Destino (retardo1)

Volver
Instrucción INCF Incremento F   INCFSZ Incrementa F, Skip (salta) if Zero
Sintaxis INCF f, d   INCFSZ f, d
Codificación
0010 10df ffff
00 1010 dfff ffff
 
0011 11df ffff
00 1111 dfff ffff
Palabra/Ciclos 1/1   1/1(2)
Operación

f + 1 -> f si d=1
f + 1 -> W si d=0

 

d = [0,1],         f entre 0 y 127
f + 1 -> f si d=1
f + 1 -> W si d=0 
En ambos casos: Salta si f + 1 = 0

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - 1 - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción

Incrementa en 1 el contenido de f. El resultado se almacena de nuevo en f, si d=1, o en W si d=0 (en este caso f no varía)

 

Incrementa el contenido de f en una unidad. El resultado se guarda de nuevo en f si d=1, o si d=0 en W (en este caso f no varia). Si el resultado es nulo, salta la siguiente instrucción y en este caso, esta instrucción dura dos ciclos

Ejemplo

 

 

 

Volver
Instrucción IORLW Inclusive OR Literal con W   IORWF Inclusive OR W With f
Sintaxis IORLW k   IORWF f, d
Codificación
1101    kkkk kkkk
11 1000 kkkk kkkk
 
0001 00df ffff
00 0100 dfff ffff
Palabra/Ciclos 1/1   1/1
Operación

W OR k -> W     k entre 0 y 255

 

W OR f -> f si d=1    f entre 0 y 127
 W OR f -> W si d=0

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - 1 - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - 1 - -
Descripción

Efectúa un OR lógico inclusivo entre el contenido de W y el literal k y almacena el resultado en W

 

Efectúa un OR lógico inclusivo entre el contenido de W y el contenido de f y almacena el resultado en f, si d=1 o en W si d=0

Ejemplo

IORLW 0x35     = 00110101
 Antes:      W = 0x9Ah    = 10011010
 Después: W = 0xBFh   = 10111111

 

IORWF  Reg,0
 Antes:      W=0x91,   Reg=0x13
 Después: W=0x93,  Reg=0x13

Volver
Instrucción MOVF MOVE F   MOVLW Move Literal to W with F
Sintaxis MOVF f,d   MOVLW  f
Codificación
0010 00df ffff
00 1000 dfff ffff
 
1100 kkkk kkkk
11 00xx kkkk kkkk
Palabra/Ciclos 1/1   1/1
Operación

f -> f si d=1     f entre 0 y 127
 f -> W si d=0

 

k -> W      f entre 0 y 127

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - 1 - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción

Pone el contenido de f en f,  si d=1 o f en W
 si d=0 ; Pone Z a 1 si operación = 0
Atención: El desplazamiento de f en f que parecería inútil, permite comprobar el contenido de f con respecto a cero ya que esta instrucción afecta sobre el bit Z

 

Carga W con el literal k

Ejemplo

MOVF Reg,0

Después:  W = al valor del Reg

 

MOVLW  0x5A

Después: Reg = 0x4F,    W = 0x5A

Volver
Instrucción MOVWF Move W to F   NOP No Operation
Sintaxis MOVWF W,f   NOP
Codificación
0000 001f ffff
00 0000 1fff ffff
 
0000 0000 0000
00 0000 0xx0 0000
Palabra/Ciclos 1/1   1/1
Operación W -> f     f entre 0 y 127   Ninguna

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción Carga f con el contenido de W  

Consume un ciclo de maquina y ocupa un lugar en la memoria de programa. Se usa para hacer retardos.

Ejemplo

MOVWF Reg,0
 Antes:       Reg = 0xFF,  W = 0x4F
 Después: Reg =0x4F  ,  W = 0x4F 

 

 

Volver
Instrucción OPTION Load Option Register   RETFIE Return From Interrupt
Sintaxis OPTION   RETFIE
Codificación
0000    0000 0010
00 0000 0110 0010
 
00 0000 0000 1001
Palabra/Ciclos 1/1   1/2
Operación W -> OPTION   Pila -> PC, 1 -> GIE

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción

Carga el registro OPTION con el contenido de W.
Atención: Esta instrucción no debe utilizarse en otros chips que no sean los PIC 16c5x. Sin embargo, es correctamente interpretada por los chips 16c64, 71, 74, 84 con el fin de asegurar una compatibilidad ascendente.

 

Carga el PC con el valor que se encuentra en la parte superior de la pila, asegurando así la vuelta de la interrupción. Pone a 1 el bit GIE, con el fin de autorizar de nuevo que se tengan en cuenta las interrupciones
Atención: Esta interrupción dura dos ciclos. Esta instrucción no existe para los PIC 16c5X. TOS = top of stack

Ejemplo

 

 

RETFIE
Al ejecutarse: PC = TOS
 GIE = 1

Volver
Instrucción RETLW Return with Literal in W   RETURN Return from Subroutine with F
Sintaxis RETLW   RETURN
Codificación
11 01xx kkkk

kkkk

 
00     0000 0000 0000
Palabra/Ciclos 1/2   1/2
Operación K --> (W); TOS --> PC   Pila -> PC

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - -
Descripción

 Carga el registro W con el literal k y después carga el PC con el valor de la parte superior de la PILA, efectuando así, un retorno de subrutina.

 

Carga el PC con el valor que se encuentra en la parte superior de la pila, efectuando así una vuelta a la subrutina. Se trata de la instrucción RETLW simplificada
Atención: Esta instrucción dura dos ciclos. Esta instrucción no existe en los PIC 12c5XX, usar RETLW

Ejemplo

 

 

 

Volver
Instrucción RLF Rotate Left F through Carry   RRF Rotate Right F through Carry
Sintaxis RLF f,d   RRF f, d
Codificación
0011 01df ffff
00 1101 dfff ffff
 
0011 00df ffff
00 1100 dfff ffff
Palabra/Ciclos 1/1   1/1
Operación ver descripción  

ver descripción

  Bit de Estado
       Bandera

PA2 PA1 PA0 TO# PD# Z DC C
- - - - - - - 1
 
PA2 PA1 PA0 TO# PD# Z DC C
- - - - -     1
Descripción

Rotación de un bit a la izquierda del contenido de f, pasando por el bit de acarreo C. Si d=1 el resultado se almacena en f si d=0 el resultado se almacena en W

 

Rotación de un bit a la derecha del contenido de f, pasando por el bit de acarreo C. Si d=1 el resultado se introduce en f, si d=0 el resultado se amacena en W

Ejemplo

RLF Reg1,0 ; d = 0 result. en W
antes: Reg1=1110 0110b ; flag C = 0 
después: W =1110 0110b ; flag C = 1

 

 RRF Reg1,0 ; d = 0 result. en W
antes: Reg1=1110 0110b ; flag C = 1 
después: W =1110 0110b ; flag C = 0

Volver
Instrucción SLEEP Sleep   SUBLW Substract W from Literal
Sintaxis SLEEP   SUBWF f, d
Codificación
0000  0000 0011
00 0000 0110 0011
 
11 110x kkkk kkkk