Está en la página 1de 58

TEMA

2.1 Conjunto de Instrucciones


2.2 Modos de direccionamiento
2.3 Registros de trabajo
2.1 Conjunto de Instrucciones
• Clasificación de instrucciones M
I

• Formato general C
R
O
• Ciclo de instrucción C
O
N
• Modos de dirección T
R


O
Instrucciones orientadas a byte L
A

• Instrucciones orientadas a bit D


O
R
• Instrucciones con literales y de control E
S
Clasificación de las Instrucciones
M
• El conjunto de instrucciones es altamente ortogonal I
C
y están agrupadas en tres categorías básicas. R
O
1- Instrucciones orientadas a byte. C
O
2- Instrucciones orientadas a bit. N
3- Instrucciones de literales y de control T
R
O
L
A
D
O
R
E
S
Formato general: instrucciones de byte
13 8 7 6 0
M
Código de operación d f (dirección) I
C
R
O
C
si d=0 el destino es W O
N
si d=1 el destino es f T
R
f es la dirección de 7 bits del registro O
L
El formato de todas las instrucciones consiste de una palabra de 14 bits dividida en un A
código de operación que especifica el tipo de instrucción de uno o más operandos. D
O
En esta página y las siguientes se muestra los tres formatos generales que las R
instrucciones pueden tener. E
S
Instrucciones orientadas a byte: Ejemplo

• MOVF f, d M
I
código: 00 1000 dfff ffff C
R
O
0peración: f → destino, actualiza bandera Z C
O
N
• si d=0 entonces: f → w T
si d=1 entonces: f → f, en este caso se utiliza para saber si el R
contenido de f es cero. O
L
• En estas instrucciones f representa un registro SFR (ej: PORTA) A
D
o el nombre de una variable RAM (TEMP1), que sirve como O
operando fuente o destino. R
• d representa al operando destino: si d=0 el destino es el E
S
registro W, si d=1 el destino es el file f especificado en la
instrucción.
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 6 0
M
Código de operación b9b8b7 f (dirección) I
C
R
O
C
O
bbb es el número en binario del bit N
T
f es la dirección de 7 bits del registro R
O
L
A
D
O
R
E
S
Instrucciones orientadas a bit: Ejemplo
• BSF f, b M
I
código: 01 01bb bfff ffff C
R
operación: 1 → bit (bbb) de f O
C
O
N
• Así: BSF f, 5 realiza 1 → f5. T
R

• En estas instrucciones “b” representa un campo de 3 O


L
A
bits que selecciona el número de bit afectado en la D
O
operación, mientras que f representa el registro en el R
E
cual el bit está localizado. 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 8 7 0
M
Código de operación Literal k I
C
R
O
C
O
k es un valor inmediato o constante de 8 bits N
T
En la mayoría de las instrucciones k representa un dato de 8 bits. R
O
L
A
D
O
R
E
S
Formato general: instrucciones de control
• Instrucciones CALL y GOTO solamente: k es un valor M
inmediato o constante de 11 bits. I
C
R
O
13 11 10 0 C
O
Código de operación Literal k (11 bits) 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
M
bits, llamada literal. I
• XORLW k C
R
código: 11 1010 kkkk kkkk O
operación: W  kkkkkkkk → W C
Así: XORLW 32, entonces O
W  00100000 → W N
T
• En la mayoría de estas instrucciones como XORLW k, donde “k” R
es un byte, éste es un dato. O
L
• GOTO k A
código: 101kkk kkkk kkkk D
operación: PC12PC11 kkkkkkkkkkk → PC O
R
• En las instrucciones de control como GOTO k, el literal k de 11 E
bits se usa para hallar una dirección. 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 instrucción
• Como ya se ha dicho debido a la tubería y al M
I
solapamiento de la fase de ejecución de una C
R
instrucción con la fase de búsqueda de la siguiente, O
C
la mayoría de las instrucciones de los PIC demoran O
N
un ciclo de instrucción. T
R
• La excepción son las instrucciones de salto o O
L
ramificación, donde al no poder solapar su ejecución A
D
con la búsqueda de la siguiente, son necesarios los O
R
dos ciclos de instrucción. E
S
Ciclo de Instrucción de los PIC
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Ciclo de Instrucción de los PIC
• El ciclo de instrucción demora cuatro ciclos de reloj que de acuerdo al
gráfico anterior siendo Q1=Q2=Q3=Q4 se obtiene: M
CI=Ciclo de Instrucción=4Q=4Tosc I
C
R
Donde: Tosc = 1/fosc O
C
EJEMPLOS: O
N
T
PARA fosc= 4 MHz: R
O
CI =4Q= 4Tosc = 4(1/4MHz) = 1 µseg L
A
D
Para fosc = 20 MHz → O
R
CI = 4Q=4Tosc = 4x 1/20MHz = 0.2 useg = 200 ns E
S
Instrucciones por Grupos
M
• Para su mejor estudio vamos a dividirlas en los grupos siguientes: I
C
R
1- Limpiar/mover
O
2- Incremento/decremento/complemento C
3- Suma/Resta O
4- Lógicas N
T
5- Manipulación de un solo bit y saltos condicionales R
6- goto/call/return/return from interrupt O
7- Miscelánea L
A
D
O
R
E
S
Instrucciones Limpiar/mover
M
• CLRW I
• CLRF TEMP1 C
R
• MOVLW D ´10´ O
C
• MOVWF TEMP1 O
• MOVF TEMP1, W N
T
• MOVF TEMP1, F R
• SWAPF TEMP1, F O
L
• SWAPF TEMP1, W A
D
O
R
E
S
Incremento/Decremento/Complemento

M
• INCF TEMP1, F I
C
• INCF TEMP1, W R
O
• DECF TEMP1, F C
• DECF TEMP1, W O
N
• COMF TEMP1, F T
R
• COMF TEMP1, W O
L
A
D
O
R
E
S
Suma/Resta
M
• ADDLW 5 I
• ADDWF TEMP1, F C
R
• ADDWF TEMP1, W O
C
• SUBLW 5 ;W ← 5 - W O
N
• SUBWF TEMP1, F ; TEMP1 ← TEMP1-W T
• SUBWF TEMP1, W ; W ← TEMP1 - W R
O
L
A
D
O
R
E
S
Instrucciones Lógicas
• ANDLW B ´00000111´
• ANDWF TEMP1, F M
I
• ANDWF TEMP1, W C
• IORLW B ´00000111´ R
• IORWF TEMP1, F O
C
• IORWF TEMP1, W O
• XORLW B ´00000111´ N
T
• XORWF TEMP1, F R
• XORWF TEMP1, W O
L
• RLF TEMP1, F A
• RLF TEMP1, W D
• RRF TEMP1, F O
R
• RRF TEMP1, W E
S
Manipulación de un solo bit / saltos
condicionales
M
I
• BCF PORTB, 0 C
• BSF STATUS, C R
O
• BCF TEMP1, 5 C
• BTFSC TEMP1, 3 O
N
• BTFSS TEMP1, 3 T
• DECFSZ TEMP1, F R
O
• DECFSZ TEMP1, W L
A
• INCFSZ TEMP1, F D
• INCFSZ TEMP1, W O
R
E
S
GOTO-CALL-RETURN-
RETURN FROM INTERRUPT
M
I
• GOTO ALLI ; salto a una etiqueta C
• CALL TAREA1 ; llamado a una subrutina R
O
• RETURN ; para retornar de una subrutina C
O
• RETLW 5 ; carga el literal 5 en w retornando del N
T
; llamado a una subrutina R
O
L
• RETFIE ; sirve para retornar de una A
; interrupción D
O
R
E
S
Miscelánea

• CLRWDT ;Si el “watchdog timer” está habilitado, esta M


I
;instrucción lo pone encera para impedir su C
R
;desbordamiento. O
C
O
• SLEEP ;Detiene el reloj (reduce potencia) y N
T
;espera por “watchdog timer” o por señal externa. R
O
L
• NOP ;no hace nada – consume un ciclo de instrucción 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
M
microcontroladores de Microchip a la que pertenece el P16F887. I
La razón para que solo se utilizan 35 instrucciones en la programación es que los PIC C
son microcontroladores RISC, y estas instrucciones están bien optimizadas para R
tener una mayor velocidad de trabajo, una arquitectura mas simple y un código mas O
C
compacto. O
Antes de continuar se definen las abreviaturas usadas para explicar las N
instrucciones: T
R
f: cualquier registro del microcontrolador O
W: registro de trabajo L
b: posición de un bit en el registro ‘f’ A
d: destino, puede ser ‘f’ (d=1) o ‘W’ (d=0) D
O
etiqueta: grupo de caracteres que marcan el inicio de una parte del programa R
[]: opcional E
: posición de un bit dentro de un registro 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
Operación: (W) + (f) –> (destino) M
I
Flags afectados: C, DC, Z C
Ejemplo: ADDWF REG,1 R
Antes de la instrucción: W=0×03, REG=0×04 O
C
Después de la instrucción: W=0×03, REG=0×07
O
ANDWF: W AND f N
Realiza la operación lógica AND entre el registro W y el registro “f”. Si “d” es 0 el T
resultado se almacena en el registro W. Si “d” es 1, el resultado se almacena en R
O
el registro “f”. L
Sintaxis: [etiqueta] ANDWF f,d A
Operación: (W) AND (f) –> (destino) D
O
Flags afectados: Z
R
Ejemplo: ANDWF REG,1 E
Antes de la instrucción: W=0×17, REG= 0xC2 S
Después de la instrucción: W=0×17, REG= 0×02
Instrucciones orientadas a BYTE registros

CLRF: Borra un registro


Borra el contenido del registro ‘f’ y se activa el flag Z. M
Sintaxis: [etiqueta] CLRF f I
Flags afectados: Z C
Ejemplo: CLRF REG R
O
Antes de la instrucción: REG=0×54 C
Después de la instrucción: REG=0×00, Z=1 O
CLRW: Borra el registro de trabajo W N
T
Borra el contenido del registro ‘W’ y se activa el flag Z. Esta R
instruccion no tiene operandos. O
Sintaxis: [etiqueta] CLRW L
Flags afectados: Z A
D
Ejemplo: CLRW O
Antes de la instrucción: W=0×54 R
Después de la instrucción: W=0×00, Z=1 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’. M
Sintaxis: [etiqueta] COMF f,d I
C
Flags afectados: Z R
Ejemplo: COMF REG,0 O
Antes de la instruccion: REG=0×13 C
O
Después de la instrucción: REG=0×13, W=0xEC N
DECF: Decrementa f en 1 T
De decrementa en uno el contenido del registro ‘f’. Si d=0, el R
resultado se almacena en W. Si d=1, el resultado se O
L
almacena en ‘f’. A
Sintaxis: [etiqueta] DECF f,d D
Flags afectados: Z O
R
Ejemplo: DEC CONT, 1 E
Antes de la instrucción: CONT=0×01, Z=0 S
Después de la instrucción: CONT=0×00, Z=1
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 M
el resultado es 0, se salta la siguiente instrucción y se continúa con la I
ejecución. C
R
Sintaxis: [etiqueta] DECFSZ f,d O
Flags afectados: Ninguno C
INCF: Incrementa el registro f O
N
Incrementa en uno el contenido del registro ‘f’. Si d=0, el resultado se T
almacena en W. Si d=1, el resultado se almacena en ‘f’. R
Sintaxis: [label] INCF f,d O
Flags afectados: Z L
A
Ejemplo: INCF CONT,1 D
Antes de la instrucción: CONT=0xFF, Z=0 O
Después de la instrucción: CONT=0×00, Z=1 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 M
resultado es 0, se salta la siguiente instrucción y se continúa con la I
ejecución. C
R
Sintaxis: [etiqueta] DECFSZ f,d O
Flags afectados: Ninguno C
IORWF: W OR f O
N
Realiza la operación lógica OR entre el registro W y el registro ‘f’. Si d=0 T
el resultado se almacena en el registro W. Si d=1, el resultado se R
almacen en el registro ‘f’. O
Sintaxis: [etiqueta] IORWF f,d L
A
Flags afectados: Z D
Ejemplo: IORWF REG,0 O
Antes de la instrucción: REG=0×13, W=0×91 R
E
Después de la instrucción: REG=0×13, W=0×93 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’.
M
Sintaxis: [etiqueta] MOVF f,d I
Flags afectados: Z C
Ejemplo: MOVF REG,0 R
O
Después de la instrucción: W=REG C
RLF: Rota el registro f a la izquierda O
El contenido del registro ‘f’ se rota una posición a la izquierda. El bit de más N
T
peso pasa al carry y el carry se introduce por el bit de menos peso de ‘f’. Si
R
d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el O
registro ‘f’. L
Sintaxis: [etiqueta] RLF f,d A
D
Flags afectados: C O
Ejemplo: RLF REG,1 R
Antes de la instrucción: REG=b’11100110′, C=0 E
S
Después de la instrucción: REG=b’11001100′, C=1
Instrucciones orientadas a BYTE registros

RRF: Rota el registro f a la derecha


El contenido del registro ‘f’ se rota una posición a la derecha. El bit de menos
peso pasa al carry y el carry se introduce por el bit de más peso de ‘f’. Si d=0,
el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro
M
‘f’. I
Sintaxis: [etiqueta] RLF f,d C
Flags afectados: C R
O
Ejemplo: RLF REG,1 C
Antes de la instrucción: REG=b’11100110′, C=0 O
Después de la instrucción: REG=b’01110011′, C=0 N
SUBWF: Resta f – W T
R
Resta el contenido del registro ‘f’ menos el contenido del registro W. Si d=0, el O
resultado se almacena en el registro W. Si d=1, el resultado se almacena en el L
registro ‘f’. A
D
Sintaxis: [etiqueta] SUBWF f,d O
Flags afectados: C, DC, Z R
Ejemplo: SUBWF REG,1 E
Antes de la instrucción: REG=0×01, W=0×02 S
Después de la instrucción: REG=0xFF, W=0×02
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 M
Ejemplo: SWAPF REG,1 I
C
Antes de la instrucción: REG=0×54 R
Después de la instrucción: REG=0×45 O
XORWF: W XOR f C
Realiza la función lógica OR exclusiva entre el contenido del registro W y el registro O
N
‘f’. Si d=0, el resultado se almacena en el registro W. Si d=1 el resultado se T
almacena en el registro ‘f’. R
Sintaxis: [etiqueta] XORWF f,d O
L
Flags afectados: Z A
Ejemplo: XORWF REG,1 D
Antes de la instrucción: REG=0xAF, W=0xB5 O
Después de la instrucción: REG=0x1A, W=0xB5 R
E
NOP: No operacion S
No realiza ninguna operacion, solo consume un ciclo de reloj
Sintaxis: [etiqueta] NOP
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 ‘b’del registro ‘f’
Sintaxis: [etiqueta] BCF f,b
Ejemplo: BCF REG,0
Antes de la instrucción: REG=b’01101101′ M
Después de la instrucción: REG=b’01101100′ I
BSF: Activa un bit C
R
Activa el bit ‘b’ del registro ‘f’ O
Sintaxis: [etiqueta] BSF f,b C
Ejemplo: BSF REG,2 O
N
Antes de la instrucción: REG=b’01001001′ T
Después de la instrucción: REG=b’01001011′ R
BTFSC: Checa un bit y salta si es 0 O
Si el bit “b” del registro “f” es 0, se salta una instrucción y se continúa con la L
A
ejecución. D
Sintaxis: [etiqueta] BTFSC f,b O
BTFSS: Checa un bit y salta si es 1 R
E
Si el bit “b” del registro “f” es 1, se salta una instrucción y se continúa con la S
ejecución.
Sintaxis: [etiqueta] BTFSS f,b
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 operación lógica AND entre el registro W y la constante “k”. El
resultado se almacena en el registro W.
M
Sintaxis: [label] ANDWL k I
Flags afectados: Z C
Ejemplo: ANDLW 0x5F R
O
Antes de la instrucción: W=0xA3 C
Después de la instrucción: W=0×03 O
CALL: Llamada a subrutina N
T
Llamada y salto a subrutina. La dirección de retorno se guarda en el stack. La
R
constante “k” de 8 bits forma la dirección de salto y se carga en los bits del PC. O
Los bits del PC se cargan con los bits del registro “STATUS”. PC se pone a 0. L
Sintaxis: [etiqueta] CALL k A
D
Ejemplo: INICIO CALL DESTINO O
Antes de la instrucción: PC=INICIO R
Después de la instrucción: PC=DESTINO E
S
Instrucciones orientadas a constantes y de control

CLRWDT: Borra el watchdog timer


Esta instrucción borra tanto el “watchdog” como el prescaler. Los bits TO M
I
y PD del registro de estado se ponen a “1″.
C
Sintaxis: [label] CLRWDT R
Flags afectados: TO, PD O
GOTO: Salto incondicional C
O
Se trata de un salto incondicional. Los 9 bits de la constante “k” que N
forman la instrucción, se cargan en los bits del PC y forman la dirección T
de salto. Los bits del PC se cargan con los bits del registro de estado. R
O
Sintaxis: [etiqueta] GOTO k
L
Ejemplo: INICIO GOTO DESTINO A
Antes de la instrucción: PC=0 D
Después de la instrucción: PC=DESTINO O
R
E
S
Instrucciones orientadas a constantes y de control

IORLW: W OR literal
Se realiza la función lógica OR entre el registro W y la contante “k”.
El resultado se almacena en el registro W.
Sintaxis: [etiqueta] IORLW k
M
Flags afectados: Z I
Ejemplo: IORLW Ox35 C
Antes de la instrucción: W=0x9A R
Después de la instrucción: W=0xBF O
C
MOVLW: Carga un literal en W O
El registro W se carga con el valor de 8 bits expresado mediante la N
literal “k”. T
R
Sintaxis: [etiqueta] MOVLW k O
Ejemplo: MOVLW 0x5A L
Después de la instrucción: W=0x5A A
RETURN: Regresa de una subrutina D
O
El programa regresa de la subrutina y ejecuta la instruccion que R
sigue a CALL E
Sintaxis: [etiqueta] RETURN 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 M
registro k en el registro W I
Sintaxis: [etiqueta] RETLW,k C
Ejemplo: RETLW,0×45 R
O
Antes de la instruccion: W=xx C
Despues de la instruccion: W=0×45 O
RETFIE: Regresa de la rutina de servicio N
T
Sintaxis: [etiqueta] RETFIE R
SLEEP: Entra en estado de reposo O
Al salir, activa el bit de estado TO y borra el PD. El WDT y el prescaler se L
borran.Al entrar en el modo SLEEP, se detiene el oscilador. A
D
Sintaxis: [etiqueta] SLEEP O
Flags afectados: TO, PD, GPWUF R
E
S
Instrucciones orientadas a constantes y de control

XORLW: W XOR literal


Realiza la función lógica OR exclusiva entre el contenido del registro W M
I
y la constante “k” de 8 bits. El resultado se almacena en el registro W.
C
Sintaxis: [etiqueta] XORLW k R
Flags afectados: Z O
Ejemplo: XORLW 0xAF C
O
Antes de la instrucción: W = 0xB5 N
Después de la instrucción: W = 0x1A T
SUBLW: Resta L – W R
O
A una constante “k” de 8 bits se le resta el registro W. El resultado es
L
guardado en el mismo registro W. A
Sintaxis: [etiqueta] SUBLW k D
Flags afectados: C,DC,Z O
R
E
S
2.2 Modos de direccionamiento de datos

• La memoria de datos se puede acceder de M


I
tres modos que se conocen como: C
R
O
C
O
1- Direccionamiento inmediato N
T

2- Direccionamiento directo R
O
L
3- Direccionamiento indirecto A
D
O
R
E
S
Direccionamiento inmediato
Ocurre en instrucciones con literales que forman parte de la instrucción.
Es decir que el dato se encuentra en la misma instrucción. En el código M
de máquina está embebido el dato. I
C
Direccionamiento directo R
O
C
Ocurre en las instrucciones que contienen la dirección del dato O
N
requerido. En el código de máquina está embebido la dirección del dato. T
R
O
Direccionamiento indirecto L
A
D
O
Ocurre cuando en la instrucción se tiene una operación con el registro R
INDF, lo cual indica que el valor del dato se encuentra en la dirección E
S
guardada en el registro FSR (7-BITS menos significativos).
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 lógico y claro por sí M
mismo, es suficiente direccionar un registro para leerlo. I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Direccionamiento Indirecto
M
I
• El microcontrolador 16F887 es además capaz de direccionamiento indirecto C
por medio de los registros INDF y FSR. Algunas veces el direccionamiento R
indirecto simplifica considerablemente la escritura de un programa. O
C
O
• El direccionamiento indirecto emplea el registro INDF, el cual, no es un N
registro verdadero (físicamente no existe), solamente especifica el registro T
apuntado por el registro FSR. Debido a esto la lectura/escritura sobre el R
registro INDF significa la lectura/escritura del registro apuntado por el O
registro FSR. En otras palabras en el registro FSR se especifican las direcciones L
de los registros apuntados y en INDF se colocan sus valores. A
D
• Las diferencias entre direccionamiento directo e indirecto se especifican en la O
siguiente diapositiva. R
E
S
Ejemplo de instrucciones con INDF
M

• MOVWF INDF I
C
Antes: (W)=2A (FSR)=14 ((FSR))=? R
O
Después (W)=2A (FSR)=14 ((FSR))=2ª C
O
N
T
• MOVF INDF, W R
O
Antes: (W)=? (FSR)=14 ((FSR))=B2 L
A
Después (W)=B2 (FSR)=14 ((FSR))=B2 D
O
R
E
S
Ejemplo de Direccionamiento
Indirecto
• Programa que limpia las localidades de la RAM M
desde la posición 20H hasta 2FH. I
C
R
O
BCF STATUS, IRP C
O
MOVLW 0X20 N
MOVWF FSR T
R
NEXT CLRF INDF O
INCF FSR, F L
A
BTFSS FSR, 4 D
GOTO NEXT O
R
CONTINUE XXXX E
XXXX 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
M

• Los registros de trabajo o de control se I


C
encuentran en los registros SFR . Por ahora se R
O
estudiarán los registros: C
O
N
T
R
• STATUS O
L
• OPTION REG A


D
PCON O

• PC = PCLATH & PCL R


E
S
R(W Bit de lectura/escritura
R Bit de lectura solamente
(0) Después de un RESET, se hace cero M
(1) Después de un RESET, se hace uno I
C
IRP - Bit que selecciona bancos de registros. Se lo usa en direccionamiento indirecto R
1 - Banks 0 and 1 activos (00h-FFh) O
0 - Banks 2 and 3 activos (100h-1FFh) C
O
RP1,RP0 - Bits para seleccionar los bancos de registros. Usados en direccionamiento N
directo. T
RP1 RP0 Banco activo R
00 Bank0 O
01 Bank1
10 Bank2 L
11 Bank3 A
TO – Bit de Time-out. D
1 – Después de encender el microcontrolador o después de ejecutar la instrucción O
R
CLRWDT que resetea el WDT o la instrucción SLEEP (modo de bajo consumo de
E
energía). S
0 – Cuando se desborda el perro guardián.
PD – Bit de Power-down.
1 – Después de encender el microcontrolador o después de ejecutar la M
instrucción CLRWDT que resetea el WDT . I
0 – Al ejecutar la instrucción SLEEP que permite entrar en el modo de bajo C
consumo. R
O
Z - Bit de Zero C
1 – Cuando el resultado de una operación aritmética o lógica es cero. O
0 – Cuando el resultado de una operación aritmética o lógica es diferente de N
cero. T
DC - Bit de carry/borrow este bit cambia durante las operaciones de adición y R
sustracción si ocurre un desbordamiento (overflow) o préstamo (borrow). O
L
1 – Cuando ocurre un desbordamiento del cuarto bit.
A
0 – Cuando no ocurre un desbordamiento del cuarto bit. D
C - Bit de Carry/Borrow cambia durante las operaciones de adición o sustracción si O
ocurre un desbordamiento (overflow) o préstamo (borrow), i.e. si el resultado es R
mayor a 255 or menor que 0. E
1 – Cuando ocurre un desbordamiento del bit más significativo. S
0 – Cuando no ocurre un desbordamiento del bit más significativo.
RBPU - Port B Pull up
1 - PortB pull-ups deshabilitados
0 - PortB pull-ups habilitados M
I
C
R
INTEDG – Selección del Flanco de Interruptción O
1 – Interrupción con el flanco de subida del bit RB0/INT. C
0 - Interrupción con el flanco de bajada del bit RB0/INT. O
N
T
R
T0CS – Selecciona el origen del reloj del TMR0 O
1 – Como contador de pulsos del pin TOCKI. L
A
0 – Reloj de insrucciones interno (Fosc/4). D
O
R
T0SE – Selección del flanco de conteo del TMR0 desde TOCK1 E
1 – Incrementa en flanco de bajada del pin RA4/TOC1. S
0 - Incrementa en flanco de subida del pin RA4/TOC1.
PSA – Asignación del preescalador al WDT o al TMR0
1 – Pre-escalador se asigna al WDT.
M
0 – Pre-escalador se asigna al TMR0.
I
C
R
PS2, PS1, PS0 Bits de selección del Pre-escalador O
La división del Pre-escalador es seleccionada mediante tres bits y se lo asigna C
al (TMR0) o al perro guardián (WDT) de acuerdo a la siguiente tabla: 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 también un control para Ultra low power reset y un habilitador por
software del BOR.

M
ULPWUE – Bit habilitador de Ultra Low-Power Wake-up I
C
1 – Habilitador de Ultra low Power Power Wake-up. R
0 - Deshabilitador de Ultra low Power Power Wake-up. O
SBOREN - Bit habilitador de Software BOR Enable C
1 - Habilitador de Brown-out Reset. O
N
0 - Deshabilitador de Brown-out Reset. T
POR – Bit de Power-on Reset R
1 – Cuando no ha ocurrido POR O
L
0 - Cuando ha ocurrido POR. Este bit tiene que ser seteado por software A
BOR - Bit de Brown-out Reset D
1 - Cuando no ha ocurrido un Brown-out Reset O
0 - Cuando ha ocurrido un Brown-out Reset . Este bit debe de ser seteado por R
E
software luego de un BOR, S
Contador de Programa PC: Compuesto por los Registros PCL y PCLATH

M
• El tamaño de la memoria ROM del microcontrolador es de 8K. Es decir 8.192 posiciones para I
almacenar programas. Por esta razón el contador de programa debe ser de 13 bits de ancho C
(2^13 = 8192), conformado por 8 bits del registro PCL y 5 bits del registro PCLATH. R
O
• El contador del programa cuenta normalmente hasta 2K por esta razón la memoria ROM se
C
divide en cuatro páginas de 2K. Para saltar entre páginas es necesario programar los bits 4 y 5 O
de PCLATH (que son los indicadores de página). N
• En llamadas a subrutinas o ejecuciones de saltos (instrucciones CALL y GOTO), el T
microcontrolador es capaz de proveer solo 11-bits de direccionamiento. Por esta razón en R
forma similar a la memoria RAM dividida en “bancos”, la memoria “ROM” se divide en cuatro O
L
páginas de 2K cada una. Las instrucciones ejecutadas dentro de una página no tienen
A
problema pero para saltar entre páginas es necesario programar los bits 4 y 3 de PCLATH (que D
son los indicadores de página) como se observa en la próxima diapositiva. Cuando las O
subrutinas alcanzan las instrucciones RETURN, RETLW o RETFIE retornan al programa principal R
y el microcontrolador simplemente continúa con la ejecución del programa a partir de la E
dirección almacenada en la PILA o STACK S
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S

También podría gustarte