Está en la página 1de 59
TEMA 2 2.1 Conjunto de Instrucciones 2.2 Modos de direccionamiento 2.3 Registros de trabajo
TEMA
2
2.1
Conjunto de Instrucciones
2.2
Modos de direccionamiento
2.3
Registros de trabajo
2.1 Conjunto de Instrucciones
2.1 Conjunto de Instrucciones

Clasificación de instrucciones Formato general Ciclo de instrucción Modos de dirección Instrucciones orientadas a byte Instrucciones orientadas a bit Instrucciones con literales y de control

2.1 Conjunto de Instrucciones • Clasificación de instrucciones • Formato general • Ciclo de instrucción •

Clasificación de las Instrucciones

El conjunto de instrucciones es altamente ortogonal y están agrupadas en tres categorías básicas. 1- Instrucciones orientadas a byte. 2- Instrucciones orientadas a bit. 3- Instrucciones de literales y de control

Clasificación de las Instrucciones • El conjunto de instrucciones es altamente ortogonal y están agrupadas en

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 razón para que solo se utilizan 35 instrucciones en la programación es que los PIC son microcontroladores RISC, y estas instrucciones están bien optimizadas para tener una mayor velocidad de trabajo, una arquitectura mas simple y un código mas compacto.

Antes de continuar se definen las abreviaturas usadas para explicar las

instrucciones:

f: cualquier registro del microcontrolador W: registro de trabajo b: posición 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 : posición de un bit dentro de un registro

Detalle de las 35 Instrucciones Este conjunto de 35 instrucciones es aplicable a toda la gama

Conjunto de 35 instrucciones Para PICS de gama media

Conjunto de 35 instrucciones Para PICS de gama media
Conjunto de 35 instrucciones Para PICS de gama media
Conjunto de 35 instrucciones Para PICS de gama media
Conjunto de 35 instrucciones Para PICS de gama media

Instrucciones orientadas a BYTE registros

M I C R O C O N T R O L A D O R
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

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) Flags afectados: C, DC, Z Ejemplo: ADDWF REG,1 Antes de la instrucción: W=0×03, REG=0×04

Después de la instrucción: W=0×03, REG=0×07

ANDWF: W AND f

Realiza la operación lógica 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 Operación: (W) AND (f) > (destino) Flags afectados: Z Ejemplo: ANDWF REG,1

Antes de la instrucción: W=0×17, REG= 0xC2

Después de la instrucción: W=0×17, REG= 0×02

Instrucciones orientadas a BYTE de registros ADDWF: Suma W y f Suma el contenido del registro

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 instrucción: REG=0×54 Después de la instrucción: REG=0×00, 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 instrucción: W=0×54 Después de la instrucción: W=0×00, Z=1

Instrucciones orientadas a BYTE registros CLRF: Borra un registro Borra el contenido del registro ‘f’ y

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=0×13

Después de la instrucción: REG=0×13, 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 instrucción: CONT=0×01, Z=0 Después de la instrucción: CONT=0×00, Z=1

Instrucciones orientadas a BYTE registros COMF: Complementa el registro f El contenido del registro ‘f’ se

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 instrucción y se continúa con la ejecución. 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 instrucción: CONT=0xFF, Z=0

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

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 instrucción y se continúa con la ejecución. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno

IORWF: W OR f

Realiza la operación lógica 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 instrucción: REG=0×13, W=0×91

Después de la instrucción: REG=0×13, W=0×93

Instrucciones orientadas a BYTE registros INCFSZ: Incrementa en 1 y salta si el resultado es 0

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 Después de la instrucción: W=REG

RLF: Rota el registro f a la izquierda

El contenido del registro ‘f’ se rota una posición a la izquierda. El bit de más 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 instrucción: REG=b’11100110′, C=0

Después de la instrucción: REG=b’11001100′, C=1

Instrucciones orientadas a BYTE registros MOVF: Mover el registro f El contenido del registro ‘f’ se

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

‘f’.

Sintaxis: [etiqueta] RLF f,d

Flags afectados: C Ejemplo: RLF REG,1

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 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 instrucción: REG=0×01, W=0×02 Después de la instrucción: REG=0xFF, W=0×02

Instrucciones orientadas a BYTE registros RRF: Rota el registro f a la derecha El contenido del

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 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 en el registro ‘f’.

Sintaxis: [etiqueta] XORWF f,d Flags afectados: Z

Ejemplo: XORWF REG,1

Antes de la instrucción: REG=0xAF, W=0xB5

Después de la instrucción: REG=0x1A, W=0xB5

NOP: No operacion

No realiza ninguna operacion, solo consume un ciclo de reloj

Sintaxis: [etiqueta] NOP

Instrucciones orientadas a BYTE registros SWAPF: Intercambio de f El nibble bajo del registro ‘f’ se

Instrucciones orientadas a BIT

Instrucciones orientadas a BIT
Instrucciones orientadas a BIT

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′

Después de la instrucción: REG=b’01101100′

BSF: Activa un bit

Activa el bit ‘b’ del registro ‘f’

Sintaxis: [etiqueta] BSF f,b Ejemplo: BSF REG,2

Antes de la instrucción: REG=b’01001001′ Después de la instrucción: REG=b’01001011′

BTFSC: Checa un bit y salta si es 0

Si el bit “b” del registro “f” es 0, se salta una instrucción y se continúa con la

ejecución. 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 instrucción y se continúa con la

ejecución. Sintaxis: [etiqueta] BTFSS f,b

Instrucciones orientadas a BIT BCF: Borra un bit Borra el bit ‘b’del registro ‘f’ Sintaxis: [etiqueta]

Instrucciones orientadas a literales y control

M I C R O C O N T R O L A D O R
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

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. Sintaxis: [label] ANDWL k Flags afectados: Z Ejemplo: ANDLW 0x5F Antes de la instrucción: W=0xA3 Después de la instrucción: W=0×03

CALL: Llamada a subrutina

Llamada y salto a subrutina. La dirección de retorno se guarda en el stack. La

constante “k” de 8 bits forma la dirección 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 instrucción: PC=INICIO Después de la instrucción: PC=DESTINO

Instrucciones orientadas a constantes y de control ANDLW: W AND literal Realiza la operación lógica AND

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 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 instrucción, se cargan en los bits del PC y forman la dirección

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 instrucción: PC=0 Después de la instrucción: PC=DESTINO

Instrucciones orientadas a constantes y de control CLRWDT: Borra el watchdog timer Esta instrucción borra tanto

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 Flags afectados: Z Ejemplo: IORLW Ox35 Antes de la instrucción: W=0x9A Después de la instrucción: 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 Después de la instrucción: W=0x5A

RETURN: Regresa de una subrutina

El programa regresa de la subrutina y ejecuta la instruccion que

sigue a CALL Sintaxis: [etiqueta] RETURN

Instrucciones orientadas a constantes y de control IORLW: W OR literal Se realiza la función lógica

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,0×45 Antes de la instruccion: W=xx Despues de la instruccion: W=0×45

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

Instrucciones orientadas a constantes y de control RETLW: Regresa de una subrutina y carga el valor

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

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 instrucción: W = 0xB5 Después de la instrucción: 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

Instrucciones orientadas a constantes y de control XORLW: W XOR literal Realiza la función lógica OR

Formato general: instrucciones de byte

13

8

7

6

0

Código de operación

d

f (dirección)

si d=0 el destino es W

si d=1 el destino es f f es la dirección de 7 bits del registro

El formato de todas las instrucciones consiste de una palabra de 14 bits dividida en un

código de operación que especifica el tipo de instrucción de uno o más operandos.

En esta página y las siguientes se muestra los tres formatos generales que las instrucciones pueden tener.

Formato general: instrucciones de byte 13 8 7 6 0 Código de operación d f (dirección)

Instrucciones orientadas a BYTE registros

M I C R O C O N T R O L A D O R
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

Instrucciones orientadas a byte: Ejemplo

MOVF

f, d

código: 00 1000 dfff ffff

0peración: 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 instrucción.

Instrucciones orientadas a byte: Ejemplo • MOVF f, d código: 00 1000 dfff ffff 0peración: f

Formato general: instrucciones de bit

13 10 9 8 7 6 0 M Código de operación f (dirección) b 9 b
13
10
9
8
7
6
0
M
Código de operación
f (dirección)
b 9 b 8 b 7
I
C
R
O
C
O
bbb es el número en binario del bit
f es la dirección de 7 bits del registro
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

Instrucciones orientadas a BIT

Instrucciones orientadas a BIT
Instrucciones orientadas a BIT

Instrucciones orientadas a bit: Ejemplo

BSF

f, b

código: 01 01bb bfff ffff operación: 1 → bit (bbb) de f

 

Así: BSF f, 5

realiza 1 → f 5 .

En estas instrucciones “b” representa un campo de 3 bits que selecciona el número de bit afectado en la operación, mientras que f representa el registro en el cual el bit está localizado.

Instrucciones orientadas a bit: Ejemplo • BSF f, b código: 01 01 bb b fff ffff

Formato general: instrucciones de literales

13

8

7

Código de operación

Literal k

k es un valor inmediato o constante de 8 bits En la mayoría de las instrucciones k representa un dato de 8 bits.

Formato general: instrucciones de literales 13 8 7 Código de operación Literal k k es un

Formato general: instrucciones de control

Instrucciones CALL y GOTO solamente: k es un valor

inmediato o constante de 11 bits.

  • 13 11

10

0

Código de operación

Literal k (11 bits)

Formato general: instrucciones de control • Instrucciones CALL y GOTO solamente: k es un valor inmediato

Instrucciones de literales y de control

En estas instrucciones “k” representa una constante de 8 u 11

bits, llamada literal.

 

XORLW

k

código: 11 1010 kkkk kkkk operación: W kkkkkkkk → W Así: XORLW 32, entonces

 
 

W 00100000 → W

En la mayoría de estas instrucciones como XORLW k, donde “k”

es un byte, éste es un dato.

 

GOTO k código: 101kkk kkkk kkkk operación: PC 12 PC 11 kkkkkkkkkkk → PC

En las instrucciones de control como GOTO k, el literal k de 11 bits se usa para hallar una dirección.

Instrucciones de literales y de control • En estas instrucciones “k” representa una constante de 8

Instrucciones orientadas a literales y control

M I C R O C O N T R O L A D O R
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

Ciclo de instrucción

Como ya se ha dicho debido a la tubería y al

solapamiento de la fase de ejecución de una

instrucción con la fase de búsqueda de la siguiente, la mayoría de las instrucciones de los PIC demoran

un ciclo de instrucción.

La excepción son las instrucciones de salto o ramificación, donde al no poder solapar su ejecución con la búsqueda de la siguiente, son necesarios los dos ciclos de instrucción.

Ciclo de instrucción • Como ya se ha dicho debido a la tubería y al solapamiento

Ciclo de Instrucción de los PIC

Ciclo de Instrucción de los PIC

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:

CI=Ciclo de Instrucción=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

Ciclo de Instrucción de los PIC • El ciclo de instrucción demora cuatro ciclos de reloj

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- Lógicas

5- Manipulación de un solo bit y saltos condicionales

6- goto/call/return/return from interrupt 7- Miscelánea

Instrucciones por Grupos • Para su mejor estudio vamos a dividirlas en los grupos siguientes: 1-

Instrucciones Limpiar/mover

CLRW

CLRF

TEMP1

MOVLW

D ´10´

MOVWF

TEMP1

MOVF

TEMP1, W

MOVF

TEMP1, F

SWAPF

TEMP1, F

SWAPF

TEMP1, W

Instrucciones Limpiar/mover • CLRW • CLRF TEMP1 • MOVLW D ´10´ • MOVWF TEMP1 • MOVF

Incremento/Decremento/Complemento

INCF

TEMP1, F

INCF

TEMP1, W

DECF

TEMP1, F

DECF

TEMP1, W

COMF

TEMP1, F

COMF

TEMP1, W

Incremento/Decremento/Complemento • INCF TEMP1, F • INCF TEMP1, W • DECF TEMP1, F • DECF TEMP1,

Suma/Resta

ADDLW

5

ADDWF

TEMP1, F

ADDWF

TEMP1, W

SUBLW

5

;W ← 5 - W

SUBWF

TEMP1, F

; TEMP1 ← TEMP1-W

SUBWF

TEMP1, W

; W ← TEMP1 - W

Suma/Resta • ADDLW 5 • ADDWF TEMP1, F • ADDWF TEMP1, W • SUBLW 5 ;W

Instrucciones Lógicas

ANDLW

B ´00000111´

ANDWF

TEMP1, F

ANDWF

TEMP1, W

IORLW

B ´00000111´

IORWF

TEMP1, F

IORWF

TEMP1, W

XORLW

B ´00000111´

XORWF

TEMP1, F

XORWF

TEMP1, W

RLF

TEMP1, F

RLF

TEMP1, W

RRF

TEMP1, F

RRF

TEMP1, W

Instrucciones Lógicas • ANDLW B ´00000111´ • ANDWF TEMP1, F • ANDWF TEMP1, W • IORLW

Manipulación de un solo bit / saltos

condicionales

BCF

PORTB, 0

BSF

STATUS, C

BCF

TEMP1, 5

BTFSC

TEMP1, 3

BTFSS

TEMP1, 3

DECFSZ

TEMP1, F

DECFSZ

TEMP1, W

INCFSZ

TEMP1, F

INCFSZ

TEMP1, W

Manipulación de un solo bit / saltos condicionales • BCF PORTB, 0 • BSF STATUS, C

GOTO-CALL-RETURN-

RETURN FROM INTERRUPT

GOTO

ALLI

; salto a una etiqueta

CALL

TAREA1 ; llamado a una subrutina

5

RETURN

; para retornar de una subrutina

RETLW

; carga el literal 5 en w retornando del ; llamado a una subrutina

RETFIE

; sirve para retornar de una ; interrupción

GOTO-CALL-RETURN- RETURN FROM INTERRUPT • GOTO ALLI ; salto a una etiqueta • CALL TAREA1 ;

Miscelánea

CLRWDT

;Si el “watchdog timer” está habilitado, esta ;instrucción lo pone encera para impedir su ;desbordamiento.

SLEEP

;Detiene el reloj (reduce potencia) y ;espera por “watchdog timer” o por señal externa.

NOP

;no hace nada consume un ciclo de instrucción

Miscelánea • CLRWDT ;Si el “ watchdog timer ” está habilitado, esta ;instrucción lo pone encera

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

2.2 Modos de direccionamiento de datos • La memoria de datos se puede acceder de tres

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

de máquina está embebido el dato.

Direccionamiento directo

Ocurre en las instrucciones que contienen la dirección del dato

requerido. En el código de máquina está embebido la dirección del dato.

Direccionamiento indirecto

Ocurre cuando en la instrucción se tiene una operación con el registro INDF, lo cual indica que el valor del dato se encuentra en la dirección guardada en el registro FSR (7-BITS menos significativos).

Direccionamiento inmediato Ocurre en instrucciones con literales que forman parte de la instrucción. Es decir que

Direccionamiento Directo e Indirecto

M I C R O C O N T R O L A D O R
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

Ejemplo de instrucciones con

Direccionamiento Directo

Con el direccionamiento directo el cual es lógico y claro por sí mismo, es suficiente direccionar un registro para leerlo.

Ejemplo de instrucciones con Direccionamiento Directo • Con el direccionamiento directo el cual es lógico y
Ejemplo de instrucciones con Direccionamiento Directo • Con el direccionamiento directo el cual es lógico y

Direccionamiento Indirecto

El microcontrolador 16F887 es además 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 (físicamente 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.

Direccionamiento Indirecto • El microcontrolador 16F887 es además capaz de direccionamiento indirecto por medio de los

Ejemplo de instrucciones con INDF

Ejemplo de instrucciones con INDF
Ejemplo de instrucciones con INDF

Ejemplo de Direccionamiento

Indirecto

Programa que limpia las localidades de la RAM

desde la posición 20H hasta 2FH.

Ejemplo de Direccionamiento Indirecto • Programa que limpia las localidades de la RAM desde la posición
Ejemplo de Direccionamiento Indirecto • Programa que limpia las localidades de la RAM desde la posición

Diferencias entre Direccionamiento Directo y Direccionamiento Indirecto

M I C R O C O N T R O L A D O R
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

2.3 Registros de Trabajo

Los

registros

de

trabajo

o

de

control

se

encuentran en los registros SFR . Por ahora se estudiarán los registros:

STATUS

OPTION REG

PCON

PC = PCLATH & PCL

2.3 Registros de Trabajo • Los registros de trabajo o de control se encuentran en los
R(W Bit de lectura/escritura R Bit de lectura solamente (0) Después de un RESET, se hace

R(W

Bit de lectura/escritura

R

Bit de lectura solamente

(0)

Después de un RESET, se hace cero

(1)

Después 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.

TO Bit de Time-out.

RP1 RP0

Banco activo

  • 0 Bank0

0

  • 0 Bank1

1

  • 1 Bank2

0

  • 1 Bank3

1

  • 1 Después de encender el microcontrolador o después de ejecutar la instrucción

CLRWDT que resetea el WDT o la instrucción SLEEP (modo de bajo consumo de

energía).

  • 0 Cuando se desborda el perro guardián.

R(W Bit de lectura/escritura R Bit de lectura solamente (0) Después de un RESET, se hace
PD – Bit de Power-down. 1 – Después de encender el microcontrolador o después de ejecutar

PD Bit de Power-down.

  • 1 Después de encender el microcontrolador o después de ejecutar la instrucción CLRWDT que resetea el WDT .

  • 0 Al ejecutar la instrucción SLEEP que permite entrar en el modo de bajo consumo.

Z - Bit de Zero

  • 1 Cuando el resultado de una operación aritmética o lógica es cero.

  • 0 Cuando el resultado de una operación aritmética o lógica es diferente de cero.

DC - Bit de carry/borrow este bit cambia durante las operaciones de adición y

sustracción si ocurre un desbordamiento (overflow) o préstamo (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 adición o sustracción si

ocurre un desbordamiento (overflow) o préstamo (borrow), i.e. si el resultado es

mayor a 255 or menor que 0.

  • 1 Cuando ocurre un desbordamiento del bit más significativo.

  • 0 Cuando no ocurre un desbordamiento del bit más significativo.

PD – Bit de Power-down. 1 – Después de encender el microcontrolador o después de ejecutar
RBPU - Port B Pull up 1 - PortB pull-ups deshabilitados 0 - PortB pull-ups habilitados
RBPU - Port B Pull up 1 - PortB pull-ups deshabilitados 0 - PortB pull-ups habilitados

RBPU - Port B Pull up

  • 1 - PortB pull-ups deshabilitados

  • 0 - PortB pull-ups habilitados

INTEDG Selección del Flanco de Interruptción 1 Interrupción con el flanco de subida del bit RB0/INT. 0 - Interrupción 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 Selección 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.

RBPU - Port B Pull up 1 - PortB pull-ups deshabilitados 0 - PortB pull-ups habilitados
PSA – Asignación del preescalador al WDT o al TMR0 1 – Pre-escalador se asigna al
PSA – Asignación del preescalador al WDT o al TMR0 1 – Pre-escalador se asigna al

PSA Asignación 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 selección del Pre-escalador

La división del Pre-escalador es seleccionada mediante tres bits

y se lo asigna

al (TMR0) o al perro guardián (WDT) de acuerdo a la siguiente tabla:

PSA – Asignación del preescalador al WDT o al TMR0 1 – Pre-escalador se asigna al
PSA – Asignación del preescalador al WDT o al TMR0 1 – Pre-escalador se asigna al

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.

El registro PCON contiene dos banderas para diferenciar entre: POR,BOR,MCLR y WDT reset. Así como también

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,

El registro PCON contiene dos banderas para diferenciar entre: POR,BOR,MCLR y WDT reset. Así como también

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

Contador de Programa PC: Compuesto por los Registros PCL y PCLATH • El tamaño de la

El tamaño de la memoria ROM del microcontrolador es de 8K. Es decir 8.192 posiciones para

almacenar programas. Por esta razón 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 razón la memoria ROM se divide en cuatro páginas de 2K. Para saltar entre páginas es necesario programar los bits 4 y 5 de PCLATH (que son los indicadores de página).

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 razón en forma similar a la memoria RAM dividida en “bancos”, la memoria “ROM” se divide en cuatro páginas de 2K cada una. Las instrucciones ejecutadas dentro de una página no tienen problema pero para saltar entre páginas es necesario programar los bits 4 y 3 de PCLATH (que

son los indicadores de página) como se observa en la próxima diapositiva. Cuando las

subrutinas alcanzan las instrucciones RETURN, RETLW o RETFIE retornan al programa principal y el microcontrolador simplemente continúa con la ejecución del programa a partir de la dirección almacenada en la PILA o STACK

Contador de Programa PC: Compuesto por los Registros PCL y PCLATH • El tamaño de la
M I C R O C O N T R O L A D O R
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