Você está na página 1de 58

TEMA

2
2.1 Conjunto de Instrucciones
2.2 Modos de direccionamiento
2.3 Registros de trabajo

2.1 Conjunto de Instrucciones

Clasificacin de instrucciones
Formato general
Ciclo de instruccin
Modos de direccin
Instrucciones orientadas a byte
Instrucciones orientadas a bit
Instrucciones con literales y de control

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Clasificacin de las Instrucciones


El conjunto de instrucciones es altamente ortogonal
y estn agrupadas en tres categoras bsicas.
1- Instrucciones orientadas a byte.
2- Instrucciones orientadas a bit.
3- Instrucciones de literales y de control

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Formato general: instrucciones de byte


13

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

Instrucciones orientadas a byte: Ejemplo


MOVF
f, d
cdigo: 00 1000 dfff ffff
0peracin: f destino, actualiza bandera Z

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.

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Instrucciones orientadas a BYTE registros

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Formato general: instrucciones de bit


13

10 9 8 7

Cdigo de operacin b9b8b7

bbb es el nmero en binario del bit


f es la direccin de 7 bits del registro

f (direccin)

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Instrucciones orientadas a bit: Ejemplo


BSF
f, b
cdigo: 01 01bb bfff ffff
operacin: 1 bit (bbb) de f

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.

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Instrucciones orientadas a BIT


M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Formato general: instrucciones de literales


13

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

Formato general: instrucciones de control


Instrucciones CALL y GOTO solamente: k es un valor
inmediato o constante de 11 bits.
13

11

Cdigo de operacin

10

Literal k (11 bits)

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Instrucciones de literales y de control


En estas instrucciones k representa una constante de 8 u 11
bits, llamada literal.
XORLW
k
cdigo: 11 1010 kkkk kkkk
operacin: W kkkkkkkk W
As: XORLW 32, entonces
W 00100000 W
En la mayora de estas instrucciones como XORLW k, donde k
es un byte, ste es un dato.
GOTO k
cdigo: 101kkk kkkk kkkk
operacin: PC12PC11 kkkkkkkkkkk PC
En las instrucciones de control como GOTO k, el literal k de 11
bits se usa para hallar una direccin.

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Instrucciones orientadas a literales y control

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

Ciclo de Instruccin de los PIC


M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Ciclo de Instruccin de los PIC

El ciclo de instruccin demora cuatro ciclos de reloj que de acuerdo al


grfico anterior siendo Q1=Q2=Q3=Q4 se obtiene:
CI=Ciclo de Instruccin=4Q=4Tosc
Donde: Tosc = 1/fosc

EJEMPLOS:
PARA fosc= 4 MHz:
CI =4Q= 4Tosc = 4(1/4MHz) = 1 seg
Para fosc = 20 MHz

CI = 4Q=4Tosc = 4x 1/20MHz = 0.2 useg = 200 ns

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Instrucciones por Grupos

Para su mejor estudio vamos a dividirlas en los grupos siguientes:


1- Limpiar/mover
2- Incremento/decremento/complemento
3- Suma/Resta
4- Lgicas
5- Manipulacin de un solo bit y saltos condicionales
6- goto/call/return/return from interrupt
7- Miscelnea

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

;W 5 - W
; TEMP1 TEMP1-W
; W 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

Manipulacin de un solo bit / saltos


condicionales

BCF
BSF
BCF
BTFSC
BTFSS
DECFSZ
DECFSZ
INCFSZ
INCFSZ

PORTB, 0
STATUS, C
TEMP1, 5
TEMP1, 3
TEMP1, 3
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

GOTO-CALL-RETURNRETURN FROM INTERRUPT

GOTO
CALL
RETURN
RETLW

RETFIE

ALLI
; salto a una etiqueta
TAREA1 ; llamado a una subrutina
; para retornar de una subrutina
5
; carga el literal 5 en w retornando del
; llamado a una subrutina
; sirve para retornar de una
; interrupcin

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Miscelnea
CLRWDT

;Si el watchdog timer est habilitado, esta


;instruccin lo pone encera para impedir su
;desbordamiento.

SLEEP

;Detiene el reloj (reduce potencia) y


;espera por watchdog timer o por seal externa.

NOP

;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

Detalle de las 35 Instrucciones


Este conjunto de 35 instrucciones es aplicable a toda la gama media de los
microcontroladores de Microchip a la que pertenece el P16F887.
La razn para que solo se utilizan 35 instrucciones en la programacin es que los PIC
son microcontroladores RISC, y estas instrucciones estn bien optimizadas para
tener una mayor velocidad de trabajo, una arquitectura mas simple y un cdigo mas
compacto.
Antes de continuar se definen las abreviaturas usadas para explicar las
instrucciones:
f: cualquier registro del microcontrolador
W: registro de trabajo
b: posicin de un bit en el registro f
d: destino, puede ser f (d=1) o W (d=0)
etiqueta: grupo de caracteres que marcan el inicio de una parte del programa
[]: opcional
: posicin de un bit dentro de un registro

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Instrucciones orientadas a BYTE registros

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

Instrucciones orientadas a BYTE registros


CLRF: Borra un registro
Borra el contenido del registro f y se activa el flag Z.
Sintaxis: [etiqueta] CLRF f
Flags afectados: Z
Ejemplo: CLRF REG
Antes de la instruccin: REG=054
Despus de la instruccin: REG=000, Z=1
CLRW: Borra el registro de trabajo W
Borra el contenido del registro W y se activa el flag Z. Esta
instruccion no tiene operandos.
Sintaxis: [etiqueta] CLRW
Flags afectados: Z
Ejemplo: CLRW
Antes de la instruccin: W=054
Despus de la instruccin: W=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


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


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

Instrucciones orientadas a literales y control

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

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

Instrucciones orientadas a constantes y de control

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

2.2 Modos de direccionamiento de datos


La memoria de datos se puede acceder de
tres modos que se conocen como:
1- Direccionamiento inmediato
2- Direccionamiento directo
3- Direccionamiento indirecto

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

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 Directo e Indirecto


M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Ejemplo de instrucciones con


Direccionamiento Directo
Con el direccionamiento directo el cual es lgico y claro por s
mismo, es suficiente direccionar un registro para leerlo.

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.

Las diferencias entre direccionamiento directo e indirecto se especifican en la


siguiente diapositiva.

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Ejemplo de instrucciones con INDF


MOVWF INDF
Antes: (W)=2A (FSR)=14 ((FSR))=?
Despus (W)=2A (FSR)=14 ((FSR))=2
MOVF INDF, W
Antes: (W)=? (FSR)=14 ((FSR))=B2
Despus (W)=B2 (FSR)=14 ((FSR))=B2

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Ejemplo de Direccionamiento
Indirecto
Programa que limpia las localidades de la RAM
desde la posicin 20H hasta 2FH.

NEXT

CONTINUE XXXX

BCF
MOVLW
MOVWF
CLRF
INCF
BTFSS
GOTO
XXXX

STATUS, IRP
0X20
FSR
INDF
FSR, F
FSR, 4
NEXT

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

Diferencias entre Direccionamiento Directo y Direccionamiento Indirecto

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

2.3 Registros de Trabajo


Los registros de trabajo o de control se
encuentran en los registros SFR . Por ahora se
estudiarn los registros:

STATUS
OPTION REG
PCON
PC = PCLATH & PCL

M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

R(W
R
(0)
(1)

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

RBPU - Port B Pull up


1 - PortB pull-ups deshabilitados
0 - PortB pull-ups habilitados

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

Contador de Programa PC: Compuesto por los Registros PCL y PCLATH

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

Você também pode gostar