Computing">
Nothing Special   »   [go: up one dir, main page]

PIC18F47J53 Capitulo6

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 38

PIC18F47J53

6.0 ORGANIZACION DE LA MEMORIA 6.1 Organización de la Memoria de Programa

Hay dos tipos de memoria en los microcontroladores Los microcontroladores PIC18 implementan un
Contador de Programa de 21 bits(PC), que es capaz
PIC18 : de direccionar un espacio de memoria de programa
• Memoria de Programa de 2 Mbytes. Acceder a una ubicación entre el límite
• Memoria de Datos RAM superior de la memoria implementada físicamente y
la dirección de 2 Mbytes devuelve todos los '0' (una
Como dispositivos de arquitectura de Harvard, las
memorias de datos y programas usan buses separados; instrucción NOP).
Esto permite el acceso concurrente de los dos espacios La familia PIC18F47J53 ofrece una gama de
de memoria. tamaños de memoria de programa Flash en chip,
Section 7.0 “Flash Program Memory” proporciona desde 64 Kbytes (hasta 32,768 instrucciones de
información adicional sobre el funcionamiento de la una sola palabra) a 128 Kbytes (65,536
memoria del programa Flash. instrucciones de una sola palabra).

FIGURE 6-1: MEMORY MAPS FOR PIC18F47J53 FAMILY DEVICES

PC<20:0>
CALL, CALLW, RCALL, 21
RETURN, RETFIE, RETLW,
ADDULNK, SUBULNK
Stack Level 1

Stack Level 31

PIC18FX6J53 PIC18FX7J53
000000h
On-Chip On-Chip
Memory Memory

Config. Words
00FFFFh

Config. Words
01FFFFh

Unimplemented Unimplemented
Read as ‘0’ Read as ‘0’

1FFFFF

Note: Sizes of memory areas are not to scale. Sizes of program memory areas are enhanced to show detail.

2009-2016 Microchip Technology Inc. DS30009964C-page 1


PIC18F47J53
Figure 6-1 proporciona los mapas de memoria del 6.1.2 PALABRAS DE CONFIGURACIÓN
programa para dispositivos familiares individuales. Debido a que los dispositivos de la familia PIC18F47J53
6.1.1 VECTORES de la MEMORIA PROGRAMA no tienen memoria de configuración persistente, las
Todos los dispositivos PIC18 tienen un total de tres cuatro palabras principales de la memoria del programa
vectores de retorno codificados en su espacio de en chip están reservadas para la información de
memoria de programa. La dirección de reinicio del configuración. Luego de un RESET, la información de
vector es el valor predeterminado al que el contador configuración se copia en los registros de Configuración.
del programa regresa en todos los reinicios del Las palabras de configuración se almacenan en su
dispositivo; Se encuentra a las 0000h. ubicación de memoria del programa en orden numérico,
Los dispositivos PIC18 también tienen dos direcciones comenzando con el byte inferior de CONFIG1 en la
de vector de interrupción para manejar interrupciones dirección más baja y terminando con el byte superior de
de alta prioridad y baja prioridad. El vector de CONFIG4.
interrupción de alta prioridad se encuentra en 0008h y La Tabla 6-1 proporciona las direcciones reales de la
el vector de interrupción de baja prioridad a las 0018h. palabra de configuración de Flash para dispositivos en
La Figura 6-2 proporciona sus ubicaciones en relación la familia PIC18F47J53. La Figura 6-2 muestra su
con el mapa de memoria del programa. ubicación en el mapa de memoria con otros vectores de
memoria.
FIGURE 6-2: UBICACIONES VECTORES Y En la Sección 28.1 "Bits de configuración" se
PALABRAS DE CONFIGURACIÓN PARA proporcionan detalles adicionales sobre las palabras de
DISPOSITIVOS PIC18F47J53 configuración del dispositivo.
Reset Vector 0000h TABLE 6-1: CONFIGURACIÓN FLASH
PALABRA PARA DISPOSITIVOS PIC18F47J53
0008h Program
High-Priority Interrupt
Memory Configuration
Vector Device
(Kbytes) Word Addresses

Low-Priority Interrupt Vector PIC18F26J53


0018h
On-Chip 64 FFF8h to FFFFh
PIC18F46J53
Program Memory
PIC18F27J53
128 1FFF8h to 1FFFFh
PIC18F47J53

6.1.3 CONTADOR PROGRAMA


El contador de programa (PC) especifica la dirección de
la instrucción que se va a buscar para su ejecución. La
PC tiene 21 bits de ancho y está contenida en tres
registros separados de 8 bits. El byte bajo, conocido
Flash Configuration Words (Top of Memory-7)
como el registro PCL, es legible y escribible. El byte alto,
Read as ‘0’
o registro PCH, contiene los bits PC <15: 8>; no es
directamente legible o escribible. Las actualizaciones del
registro PCH se realizan a través del registro PCLATH.
El byte superior se llama PCU. Este registro contiene los
PC <20:16> bits; Tampoco es directamente legible o
(Top of Memory)
1FFFFFh
escribible. Las actualizaciones del registro PCU se
realizan a través del registro PCLATU.
Leyenda: (Parte superior de la memoria) representa el El contenido de PCLATH y PCLATU se transfiere al
límite superior del espacio de memoria del contador del programa mediante cualquier operación
programa en chip (consulte la Figura 6-1 que escriba en PCL. Del mismo modo, los 2 bytes
para conocer los valores específicos del
superiores del contador del programa se transfieren a
dispositivo). El área sombreada representa
la memoria no implementada. Las áreas no
PCLATH y PCLATU mediante una operación que lee
se muestran a escala. PCL. Esto es útil para las operaciones con
desplazamientos del PC (consulte la Sección 6.1.6.1
"GOTO Computed").

2009-2016 Microchip Technology Inc. DS30009964C-page 2


PIC18F47J53
El PC direcciona los bytes en la memoria del programa. Los datos también se pueden enviar o extraer de la pila
Para evitar que la PC se desalinee con las instrucciones mediante estos registros. Una instrucción de tipo CALL
de palabras, el bit menos significativo (LSb) de PCL se provoca un empuje en la pila. El Stack Pointer se
fija en un valor de "0". La PC se incrementa en dos para incrementa primero y la ubicación señalada por el Stack
abordar las instrucciones secuenciales en la memoria Pointer se escribe con el contenido de la PC (que ya
del programa. apunta a las instrucciones que siguen a un CALL). Una
instrucción de tipo RETURN provoca un pop de la pila.
Las instrucciones CALL, RCALL, GOTO y la rama del El contenido de la ubicación señalada por el STKPTR
programa escriben directamente en el contador del se transfiere a la PC y luego se disminuye el Stack
programa. Para estas instrucciones, los contenidos de Pointer.
PCLATH y PCLATU no se transfieren al contador del
El puntero de pila se inicializa a "00000" después de
programa.
todos los RESETs. No hay RAM asociada con la
ubicación correspondiente a un valor de Stack Pointer
6.1.4 RETORNO PILA DIRECCIONES
de "00000"; esto es solo un valor de reinicio. Los bits de
La pila de dirección de retorno permite que ocurra estado indican si la pila está llena, se ha desbordado
cualquier combinación de hasta 31 llamadas de por arriba o abajo.
programa e interrupciones. El PC se inserta en la
pila cuando se ejecuta una instrucción CALL o 6.1.4.1 Acceso a la parte superior de la pila
RCALL, o se reconoce una interrupción. El valor del Solo la parte superior de la pila (Top-of-Stack
PC se extrae de la pila con una instrucción TOS) se puede leer y escribir. Un conjunto de tres
RETURN, RETLW o RETFIE (y en ADDULNK y registros, TOSU:TOSH:TOSL, contiene el
SUBULNK instrucciones si el conjunto de contenido de la ubicación de la pila señalada por el
instrucciones extendido está habilitado). PCLATU y registro STKPTR (Figura 6-3).
PCLATH no se ven afectadas por ninguna de las Esto permite a los usuarios implementar una pila de
instrucciones RETURN o CALL. software si es necesario. Después de una CALL,
RCALL o interrupción (e instrucciones ADDULNK y
La pila funciona como una RAM de 31 palabras por 21
SUBULNK si el conjunto de instrucciones extendido
bits y un Stack Pointer (SP) de 5 bits, STKPTR. El está habilitado), el software puede leer el valor
espacio de la pila no forma parte del programa ni del introducido leyendo los registros TOSU: TOSH:
espacio de datos. El puntero de la pila es legible y se TOSL. Estos valores se pueden colocar en una pila
puede escribir y la dirección en la parte superior de la de software definida por el usuario. En el momento
pila se puede leer y escribir a través de los Registros de de la devolución, el software puede devolver estos
funciones especiales (SFR) de la parte superior de la valores a TOSU: TOSH: TOSL y hacer una
pila. devolución.
El usuario debe deshabilitar los bits de habilitación
de interrupción global mientras accede a la pila para
evitar la corrupción accidental de la pila.

FIGURE 6-3: RETURN ADDRESS STACK AND ASSOCIATED REGISTERS

Return Address Stack <20:0>


Top-of-Stack Registers Stack Pointer
11111
TOSU TOSH TOSL 11110 STKPTR<4:0>
00h 1Ah 34h 11101 00010

00011
Top-of-Stack 001A34h 00010
000D58h 00001
00000

2009-2016 Microchip Technology Inc. DS30009964C-page 3


PIC18F47J53
manipular los TOS bajo control de software. TOSU,
TOSH y TOSL se pueden modificar para colocar datos o
6.1.4.2 Retorno PUNTERO PILA (STKPTR)
una dirección de retorno en la pila.
El registro STKPTR (Registro 6-1) contiene el valor
La instrucción PUSH coloca el valor actual de la PC en
de Stack Pointer, los bits de estado STKFUL (Stack
la pila. Esto incrementa el puntero de la pila y carga el
Full) y STKUNF (Stack Underflow). El valor del
valor actual de la PC en la pila.
puntero de pila puede ser de 0 a 31. El puntero de
la pila aumenta antes de que los valores se La instrucción POP descarta los TOS actuales al
introduzcan en la pila y disminuye después de que disminuir el puntero de pila. El valor anterior introducido
los valores salen de la pila. Al reiniciar, el valor del en la pila se convierte en el valor TOS.
puntero de pila será cero. El usuario puede leer y
escribir el valor del puntero de pila. Esta
característica puede ser utilizada por un sistema
operativo en tiempo real (RTOS) para el
mantenimiento de la pila de retorno.
Después de guardar( pushed ) 31 veces la PC a la pila
(sin extraer (popping) ningún valor de la pila), se
establece el bit STKFUL. El bit STKFUL se borra
mediante software o mediante un reinicio de encendido
(POR).
La acción que tiene lugar cuando la pila se llena depende
del estado del bit de configuración de habilitación de
restablecimiento de desbordamiento de pila (STVREN).
Consulte la Sección 28.1 "Bits de configuración" para ver
la descripción de los bits de configuración del dispositivo.
Si STVREN está configurado (predeterminado), el 31er
empuje empujará el valor (PC + 2) a la pila, establecerá
el bit STKFUL y reiniciará el dispositivo. El bit STKFUL
permanecerá establecido y el Stack Pointer se
establecerá en cero.
Si se borra STVREN, el bit STKFUL se establecerá en el
31 empuje y el puntero de pila se incrementará a 31.
Cualquier empuje adicional no sobrescribirá el empuje
31 y el STKPTR permanecerá en 31.
Cuando la pila ha sido expulsada suficientes veces para
descargar la pila, el siguiente pop devolverá cero a la PC
y establecerá el bit STKUNF, mientras que el puntero de
pila permanece en cero. El bit STKUNF permanecerá
establecido hasta que el software lo borre o hasta que
se produzca un POR.
Nota: Devolver un valor de cero a la PC en un
flujo inferior tiene el efecto de vectorizar el
programa en el vector RESET, donde se
pueden verificar las condiciones de la pila
y se pueden tomar las medidas
apropiadas. Esto no es lo mismo que un
reinicio, ya que el contenido de los SFR
no se ve afectado.

6.1.4.3 Instrucciones PUSH and POP


Dado que Top-of-Stack (TOS) es legible y escribible, es
necesaria la capacidad de insertar valores en la pila y
extraer valores de la pila, sin perturbar la ejecución
normal del programa. El conjunto de instrucciones PIC18
incluye dos instrucciones, PUSH y POP, que permiten

2009-2016 Microchip Technology Inc. DS30009964C-page 4


PIC18F47J53

REGISTER 6-1: STKPTR: STACK POINTER REGISTER (ACCESS FFCh)


R/C-0 R/C-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
STKFUL(1) STKUNF(1) — SP4 SP3 SP2 SP1 SP0
bit 7 bit 0

Legend: C = Clearable
bit
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 STKFUL: Stack Full Flag bit(1)


1 = Stack became full or overflowed
0 = Stack has not become full or overflowedbit 6
STKUNF: Stack Underflow Flag bit(1)
1 = Stack underflow occurred
0 = Stack underflow did not occur
bit 5 Unimplemented: Read as ‘0’ bit 4-0
SP<4:0>: Stack Pointer Location bits

Note 1: Bits 7 and 6 are cleared by user software or by a POR.

2009-2016 Microchip Technology Inc. DS30009964C-page 5


PIC18F47J53
6.1.4.4 Reset por Pila Llena (Stack Full) o Vacía ( EXAMPLE 6-1: FAST REGISTER STACK
Stack Underflow) CODE EXAMPLE
El dispositivo tiene un RESET en las condiciones de CALL SUB1, FAST ;STATUS, WREG, BSR
;SAVED IN FAST REGISTER
desbordamiento y vaciamiento de la pila, si se habilitan
;STACK
poniendo un 1 el bit STVREN en el registro de
configuración 1L. Cuando se establece STVREN, una 
condición de desbordamiento o vaciamiento establece 
SUB1 
el bit STKFUL o STKUNF apropiado y luego provoca un

reinicio del dispositivo. Cuando se borra STVREN, una RETURN FAST
condición de desbordamiento o vaciamiento establece ;RESTORE VALUES SAVED
el bit STKFUL o STKUNF apropiado, pero no provoca ;IN FAST REGISTER STACK
un reinicio del dispositivo. Los bits STKFUL o STKUNF
son borrados por el software del usuario o un POR
6.1.6 TABLAS DE BÚSQUEDA EN LA
6.1.5 PILA para REGISTROS RAPIDOS (FRS)
MEMORIA DEL PROGRAMA
Se proporciona una pila de registro rápido (FRS) para
los registros de STATUS, WREG y BSR para Puede haber situaciones de programación que requieran
proporcionar una opción de "retorno rápido" para las la creación de estructuras de datos o tablas de búsqueda
interrupciones. Esta pila tiene solo un nivel de en la memoria del programa. Para los dispositivos
profundidad y no se puede leer ni escribir. Se carga con PIC18, las tablas de búsqueda se pueden implementar
el valor actual del registro correspondiente cuando el se de dos maneras:
procesa una interrupción. Todas las fuentes de • Computed GOTO
interrupción introducen valores en los registros de la
• Table Reads
pila. Los valores en los registros se vuelven a cargar en
los registros de trabajo si se utiliza la instrucción
RETFIE, FAST para regresar de la interrupción. 6.1.6.1 Computed GOTO
Si se habilitan las interrupciones de baja prioridad y alta Un Computed GOTO se logra agregando un
prioridad, los registros de la pila no se pueden usar de desplazamiento a la PC. Un ejemplo se muestra en el
manera confiable para regresar de las interrupciones de Ejemplo 6-2. Se puede formar una tabla de búsqueda
baja prioridad. Si se produce una interrupción de alta
con una instrucción ADDWF PCL y un grupo de
prioridad mientras se da servicio a una interrupción de
instrucciones RETLW nn. El registro W se carga con un
baja prioridad, los valores del registro de pila
almacenados por la interrupción de baja prioridad se desplazamiento en la tabla antes de ejecutar una
sobrescribirán. En estos casos, los usuarios deben llamada a esa tabla. La primera instrucción de la rutina
guardar los registros clave en el software durante una llamada es la instrucción ADDWF PCL. La siguiente
interrupción de baja prioridad. instrucción ejecutada será una de las instrucciones
Si no se usa la prioridad de interrupción, todas las RETLW nn que devuelve el valor, "nn", a la función de
interrupciones pueden usar el FRS para retornos de la llamada.
interrupción. Si no se utilizan interrupciones, el FRS se El valor de desplazamiento (en WREG) especifica el
puede usar para restaurar los registros de STATUS, número de bytes que la PC debe avanzar y debe
WREG y BSR al final de una llamada de subrutina. Para ser múltiplos de 2 (LSb = 0).
usar la pila de registro rápido para una llamada de
subrutina, se debe ejecutar una etiqueta de CALL, En este método, solo se puede almacenar un byte
instrucción RÁPIDA para guardar los registros de en cada ubicación de instrucción, pero se requiere
ESTADO, WREG y BSR en la pila de registro rápido. espacio en la pila de la dirección de retorno.
Luego se ejecuta una instrucción RETURN, FAST para EXAMPLE 6-2: COMPUTED GOTO USING
restaurar estos registros desde el FRS.
AN OFFSET VALUE
El ejemplo 6-1 proporciona un ejemplo de código fuente
que usa el FRS durante una llamada y devolución de MOVF OFFSET, W
subrutina. CALL TABLE
ORG nn00h

TABLE ADDWF PCL


RETLW nnh
RETLW nnh
RETLW nnh
.
.
.

2009-2016 Microchip Technology Inc. DS30009964C-page 6


PIC18F47J53
6.1.6.2 Table Reads 6.2.2 INSTRUCTION FLOW/PIPELINING
Un mejor método para almacenar datos en la memoria Un "Ciclo de instrucción" consta de cuatro ciclos Q, Q1
del programa permite almacenar dos bytes en cada a Q4. La búsqueda y ejecución de instrucciones se
ubicación de instrucción. canalizan de tal manera que una búsqueda toma un ciclo
de instrucciones, mientras que la decodificación y la
Los datos de la tabla de búsqueda pueden almacenarse ejecución toman otro ciclo de instrucciones. Sin
dos bytes por palabra de programa mientras se embargo, debido a la canalización, cada instrucción se
programa. El puntero de tabla (TBLPTR) especifica la ejecuta efectivamente en un ciclo. Si una instrucción
dirección de byte, y el bloqueo de tabla (TABLAT) hace que la PC cambie (por ejemplo, GOTO), entonces
contiene los datos que se leen de la memoria del se requieren dos ciclos para completar la instrucción
programa. Los datos se transfieren desde la memoria (Example 6-3).
del programa, un byte a la vez.
Un ciclo de búsqueda comienza con el incremento de la
La operación de lectura de tabla se trata más PC en Q1.
detalladamente en la Sección 7.1 “Lecturas y escrituras En el ciclo de ejecución, la instrucción obtenida se
enclava en el IR en ciclo Q1. Esta instrucción luego se
de tabla”.
decodifica y ejecutado durante los ciclos Q2, Q3 y Q4.
Datos la memoria se lee durante Q2 (lectura de
6.2 CICLO DE INSTRUCCIONES PIC18 operando) y se escribe durante Q4 (escritura de
destino).
6.2.1 ESQUEMA DEL CLOCK
La entrada del reloj del microcontrolador, ya sea de una
fuente interna o externa, se divide internamente por "4"
para generar cuatro relojes de cuadratura no
superpuestos (Q1, Q2, Q3 y Q4). Internamente, la PC
se incrementa en cada Q1; la instrucción se obtiene de
la memoria del programa y se guarda en el registro de
instrucciones (IR) durante el Q4. La instrucción se
decodifica y ejecuta durante los siguientes Q1 a Q4. La
figura 6-4 ilustra los relojes y el flujo de ejecución de
instrucciones.

2009-2016 Microchip Technology Inc. DS30009964C-page 7


PIC18F47J53

FIGURE 6-4: CLOCK/INSTRUCTION CYCLE

EXAMPLE 6-3: INSTRUCTION PIPELINE FLOW

TCY 0 TCY 1 TCY 2 TCY 3 TCY 4 TCY 5


1. MOVLW 55h Fetch 1 Execute 1
2. MOVWF PORTB Fetch 2 Execute 2
3. BRA SUB_1 Fetch 3 Execute 3
4. BSF PORTA, BIT3 (Forced NOP) Fetch 4 Flush (NOP)
5. Instruction @ address SUB_1 Fetch SUB_1 Execute SUB_1

Note: All instructions are single-cycle, except for any program branches. These take two cycles since the
fetch instruction is “flushed” from the pipeline while the new instruction is being fetched and then exe-
cuted.

2009-2016 Microchip Technology Inc. DS30009964C-page 8


PIC18F47J53
6.2.3 INSTRUCCIONES EN LA MEMORIA Las instrucciones de rama de programa, que
DEL PROGRAMA codifican un desplazamiento de dirección relativo,
funcionan de la misma manera. El valor de
La memoria del programa se direcciona en bytes. Las
compensación almacenado en una instrucción de
instrucciones se almacenan como 2 bytes o 4 bytes en
bifurcación representa el número de instrucciones
la memoria del programa. El byte menos significativo
de una sola palabra por las que se compensará la
(LSB) de una palabra de instrucción siempre se
PC
almacena en una ubicación de memoria de programa
con una dirección par (LSB = 0). Para mantener la
alineación con los límites de la instrucción, la PC El "Resumen del conjunto de instrucciones"
aumenta en pasos de 2 y el LSB siempre leerá "0" proporciona más detalles del conjunto de
(consulte la Sección 6.1.3 "Contador de programa"). instrucciones por Section 29.0
La Figura 6-5 proporciona un ejemplo de cómo se
almacenan las palabras de instrucción en la memoria del
programa.
Las instrucciones CALL y GOTO tienen la dirección
de memoria absoluta del programa incrustada en la
instrucción. Como las instrucciones siempre se
almacenan en los límites de las palabras, los datos
contenidos en la instrucción son una dirección de
palabras. La palabra dirección se escribe en la PC
<20: 1>, que accede a la dirección de bytes
deseada en la memoria del programa. La
Instrucción # 2 en la Figura 6-5 muestra cómo la
instrucción, GOTO 0006h, se codifica en la memoria
del programa.

FIGURE 6-5: INSTRUCTIONS IN PROGRAM MEMORY


Word Address
LSB = 1 LSB = 0 
Program Memory 000000h
Byte Locations 
000002h

Instruction 1: MOVLW 055h 000004h

000006h

0Fh 55h 000008h


Instruction 2: GOTO 0006h EFh 03h 00000Ah
F0h 00h 00000Ch
C1h 23h 00000Eh
F4h 56h 000010h
000012h
Instruction 3: MOVFF 123h, 456h
000014h

6.2.4 INSTRUCCIONES DE DOS PALABRAS


El conjunto de instrucciones PIC18 estándar tiene
GOTO y LSFR. En todos los casos, la segunda palabra
cuatro instrucciones de dos palabras: CALL, MOVFF,
de las instrucciones siempre tiene "1111"

2009-2016 Microchip Technology Inc. DS30009964C-page 9


PIC18F47J53
como sus cuatro bits más significativos (MSbs); los
otros 12 bits son datos literales, generalmente una
dirección de memoria de datos.

El uso de "1111" en los 4 MSbs de una instrucción


especifica una forma especial de NOP. Si la instrucción
se ejecuta en la secuencia adecuada inmediatamente
después de la primera palabra, la secuencia de
instrucciones accede y utiliza los datos de la segunda
palabra. Si se omite la primera palabra por alguna razón
y la segunda palabra se ejecuta por sí misma, se
ejecuta un NOP. Esto es necesario para los casos en
que la instrucción de dos palabras está precedida por
una instrucción condicional que cambia el PC

EXAMPLE 6-4: TWO-WORD INSTRUCTIONS


CASE 1:

Object Code Source Code

0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?


1100 0001 0010 0011 MOVFF REG1, REG2 ; No, skip this word
1111 0100 0101 0110 ; Execute this word as a NOP

0010 0100 0000 0000 ADDWF REG3 ; continue code


CASE 2:

Object Code Source Code

0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?


1100 0001 0010 0011 MOVFF REG1, REG2 ; Yes, execute this word
1111 0100 0101 0110 ; 2nd word of instruction

0010 0100 0000 0000 ADDWF REG3 ; continue code

Example 6-4 ilustra cómo funciona esto.

Nota: Consulte la Sección 6.5 “Memoria del


programa y el conjunto de
instrucciones extendido” para obtener
información sobre instrucciones de
dos palabras en el conjunto de
instrucciones extendido.

2009-2016 Microchip Technology Inc. DS30009964C-page 10


PIC18F47J53
6.3 Organización Memoria de DATOS Para los paquetes de datos IN, el SIE puede leer
directamente el contenido de SRAM de uso general y lo
Nota: El funcionamiento de algunos aspectos
de la memoria de datos cambia cuando el utiliza para crear paquetes de datos USB que se envían
conjunto de instrucciones extendidas al host.
PIC18 está habilitado. Consulte la Nota: IN y OUT siempre son desde la
Sección 6.6 “Memoria de datos y el perspectiva del host USB.
conjunto de instrucciones ampliado” para
SRAM Bank 13 (D00h-DFFh) es único. Además de ser
obtener más información.
accesible tanto para el núcleo del microcontrolador como
La memoria de datos en los dispositivos PIC18 se para el módulo USB, el SIE usa una parte del Banco 13
implementa como RAM estática. Cada registro en la como Registros de funciones especiales (SFR). Estos
memoria de datos tiene una dirección de 12 bits, lo SFR componen la tabla de descriptores de búfer (BDT).
que permite hasta 4096 bytes de memoria de datos.
Cuando el módulo USB está habilitado, los registros BDT
El espacio de memoria se divide en hasta 16 bancos
se utilizan para controlar el comportamiento de la
que contienen 256 bytes cada uno. La familia
operación USB DMA para cada uno de los puntos finales
PIC18F47J53 implementa todos los bancos
habilitados. El número exacto de ubicaciones de SRAM
disponibles y proporciona 3,8 Kbytes de memoria de
que se usan para la BDT depende de cuántos puntos
datos disponibles para el usuario. La Figura 6-6
finales estén habilitados y de qué modo USB Ping-Pong
proporciona la organización de la memoria de datos
se use. Para más detalles, consulte la Sección 23.3 "RAM
para los dispositivos.
USB".
La memoria de datos contiene registros de funciones
Cuando el módulo USB está desactivado, estas
especiales (SFR) y registros de uso general (GPR).
ubicaciones SRAM se comportan como cualquier otra
Los SFR se utilizan para el control y el estado del
ubicación GPR. Cuando el módulo USB está
controlador y las funciones periféricas, mientras que
desactivado, estas ubicaciones se pueden usar para
los GPR se utilizan para el almacenamiento de datos
cualquier propósito general.
y las operaciones del bloc de notas en la aplicación
d. Cualquier lectura de una ubicación no 6.3.2 REGISTRO para SELECCIONAR BANCO
implementada se leerá como "0". BSR
El conjunto de instrucciones y la arquitectura Grandes áreas de memoria de datos requieren un
permiten operaciones en todos los bancos. Se puede esquema de direccionamiento eficiente para hacer
acceder a toda la memoria de datos mediante los posible el acceso rápido a cualquier dirección.
modos de direccionamiento directo, indirecto o Idealmente, esto significa que no es necesario
indexado. Los modos de direccionamiento se proporcionar una dirección completa para cada
analizan más adelante en esta sección. operación de lectura o escritura. Para los dispositivos
Para garantizar que se pueda acceder a los registros PIC18, esto se logra con un esquema de banco RAM.
de uso común (seleccione SFR y GPR) en un solo Esto divide el espacio de memoria en 16 bancos
ciclo, los dispositivos PIC18 implementan un banco contiguos de 256 bytes. Dependiendo de las
de acceso. Este es un espacio de memoria de 256 instrucciones, cada ubicación puede ser direccionada
bytes que proporciona acceso rápido a SFR directamente por su dirección completa de 12 bits, o una
seleccionados y a la parte inferior del GPR Bank 0 dirección de bajo orden de 8 bits y un puntero de banco
sin usar el BSR. La Sección 6.3.3 “Banco de acceso” de 4 bits.
proporciona una descripción detallada de la RAM de La mayoría de las instrucciones en el conjunto de
acceso. instrucciones PIC18 utilizan el puntero de banco,
conocido como el registro de selección de banco (BSR).
Este SFR contiene los 4 MSbs de la dirección de una
6.3.1 RAM para USB ubicación; la instrucción en sí incluye los 8 LSbs. Solo se
El núcleo del microcontrolador y el motor de interfaz en implementan los cuatro bits inferiores del BSR (BSR <3:
serie (SIE) del módulo USB pueden acceder 0>). Los cuatro bits superiores no se utilizan; siempre
simultáneamente a todos los 3.8 Kbytes de los GPR leerán "0" y no se puede escribir en ellos. El BSR se
implementados en los dispositivos de la familia puede cargar directamente utilizando la instrucción
PIC18F47J53. El SIE utiliza un motor DMA USB dedicado MOVLB..
para almacenar los paquetes de datos entrantes (OUT / El valor del BSR indica el banco en la memoria de
SETUP) directamente en la memoria de datos del datos. Los 8 bits de la instrucción muestran la
sistema principal. ubicación en el banco y pueden considerarse como

2009-2016 Microchip Technology Inc. DS30009964C-page 11


PIC18F47J53
un desplazamiento del límite inferior del banco. La
figura 6-7 ilustra la relación entre el valor del BSR y
la división del banco en la memoria de datos.
Debido a que hasta 16 registros pueden compartir la
misma dirección, el usuario siempre debe tener
cuidado de asegurarse de que se seleccione el
banco adecuado antes de realizar una lectura o
escritura de datos. Por ejemplo, escribir lo que
deberían ser datos de programa en una dirección de
8 bits de F9h cuando el BSR es 0Fh, terminará
reiniciando la PC.
Si bien se puede seleccionar cualquier banco, solo
se pueden leer o escribir en aquellos bancos que
realmente están implementados. Las escrituras a
los bancos no implementados se ignoran, mientras
que las lecturas de los bancos no implementados
devolverán '0'. Aun así, el registro de STATUS
seguirá siendo afectado como si la operación fuera
exitosa. El mapa de memoria de datos en la Figura
6-6 indica qué bancos están implementados. En el
conjunto básico de instrucciones PIC18, solo la
instrucción MOVFF especifica completamente la
dirección de 12 bits de los registros de origen y
destino. Esta instrucción ignora completamente el
BSR cuando se ejecuta. Todas las demás
instrucciones incluyen solo la dirección de orden
inferior como un operando y deben usar el BSR o el
Banco de acceso para ubicar sus registros de
destino.

2009-2016 Microchip Technology Inc. DS30009964C-page 12


PIC18F47J53
FIGURE 6-6: DATA MEMORY MAP FOR PIC18F47J53 FAMILY DEVICES

2009-2016 Microchip Technology Inc. DS30009964C-page 13


PIC18F47J53
FIGURE 6-7: USE OF THE BANK SELECT REGISTER (DIRECT ADDRESSING)

"1", la instrucción usa el BSR y la dirección de 8 bits


incluida en el código de operación para la dirección de
6.3.3 BANCO DE ACCESO
memoria de datos. Sin embargo, cuando "a" es "0", la
Si bien el uso del BSR con una dirección incorporada instrucción se ve obligada a utilizar el mapa de
de 8 bits permite a los usuarios abordar el rango direcciones del Banco de acceso; El valor actual del
completo de la memoria de datos, también significa BSR se ignora por completo.
que el usuario siempre debe asegurarse de
El uso de este direccionamiento "forzado" permite que
seleccionar el banco correcto. De lo contrario, los
la instrucción opere en una dirección de datos en un
datos pueden leerse o escribirse en la ubicación
solo ciclo sin actualizar primero el BSR. Para
incorrecta. Esto puede ser desastroso si un GPR es el
direcciones de 8 bits de 60h y superiores, esto significa
objetivo previsto de una operación, pero en su lugar se
que los usuarios pueden evaluar y operar en SFR de
escribe un SFR. Verificar y / o cambiar el BSR para
manera más eficiente. La RAM de acceso por debajo
cada lectura o escritura en la memoria de datos puede
de 60 h es un buen lugar para los valores de datos a
volverse muy ineficiente.
los que el usuario podría necesitar acceder
Para agilizar el acceso a las ubicaciones de memoria rápidamente, como resultados computacionales
de datos más utilizadas, la memoria de datos se inmediatos o variables de programa comunes. La
configura con un banco de acceso, que permite a los RAM de acceso también permite un contexto más
usuarios acceder a un bloque de memoria mapeado rápido y eficiente para guardar y cambiar las variables.
sin especificar un BSR. El banco de acceso consta de
La asignación del banco de acceso es ligeramente
los primeros 96 bytes de memoria (00h-5Fh) en el
diferente cuando el conjunto de instrucciones
banco 0 y los últimos 160 bytes de memoria (60h-FFh)
extendido está habilitado (XINST Bit de configuración
en el banco 15. La mitad inferior se conoce como RAM
= 1). Esto se discute con más detalle en la Sección
de acceso y está compuesta de GPR. La mitad
superior es donde se asignan los SFR del dispositivo. 6.6.3 “Mapeo del banco de acceso en modo de
compensación literal indexada”.
Estas dos áreas se mapean contiguamente en el
Banco de acceso y se pueden abordar de manera 6.3.4 ARCHIVO REGISTRO DE
lineal mediante una dirección de 8 bits (Figura 6-6). PROPOSITO GENERAL (GPR)
El banco de acceso es utilizado por las instrucciones Los dispositivos PIC18 pueden tener bancos de
centrales PIC18 que incluyen el bit RAM de acceso (el memoria en el área GPR. Esta es la RAM de datos,
parámetro "a" en la instrucción). Cuando "a" es igual a que está disponible para su uso en todas las

2009-2016 Microchip Technology Inc. DS30009964C-page 14


PIC18F47J53
instrucciones. Los GPR comienzan en la parte inferior STATUS de la ALU se describe más adelante en esta
del Banco 0 (dirección 000h) y crecen hacia la parte sección. Los registros relacionados con el
inferior del área SFR. Los GPR no se inicializan funcionamiento de las características periféricas se
mediante un POR y no se modifican en los demás describen en el capítulo correspondiente a ese
Resets. periférico.
6.3.5 REGISTROS FUNCION ESPECIAL(SFR) Los SFR generalmente se distribuyen entre los
Los SFR son registros utilizados por la CPU y los periféricos cuyas funciones controlan. Las ubicaciones
módulos periféricos para controlar el funcionamiento SFR no utilizadas no se implementan y se leen como
deseado del dispositivo. Estos registros se "0"
implementan como RAM estática. Los SFR comienzan
en la parte superior de la memoria de datos (FFFh) y
se extienden hacia abajo para ocupar más de la mitad Nota: Los SFR ubicados entre EB0h y F5Fh no
superior del Banco 15 (F40h a FFFh). La Tabla 6-2, la forman parte del Banco de acceso. Se
Tabla 6-3 y la Tabla 6-4 proporcionan una lista de deben usar las instrucciones BANKED
estos registros. (usando BSR) o la instrucción MOVFF
para acceder a estas ubicaciones. Al
Los SFR se pueden clasificar en dos conjuntos: los
programar en MPLAB® C18, el
asociados con la funcionalidad del dispositivo "núcleo" compilador usará automáticamente el
(ALU, Resets e interrupciones) y los relacionados con modo de direccionamiento apropiado.
las funciones periféricas. Los registros de Reset e
interrupción se describen en sus capítulos
correspondientes, mientras que el registro de E

2009-2016 Microchip Technology Inc. DS30009964C-page 15


PIC18F47J53

2009-2016 Microchip Technology Inc. DS30009964C-page 16


PIC18F47J53

2009-2016 Microchip Technology Inc. DS30009964C-page 17


PIC18F47J53

6.3.5.1 Contexto definido SFR registro se está accediendo. Ver Section 20.5.3.4
Hay varios registros que comparten la misma “7-Bit Address Masking Mode” para detalles
dirección en el espacio SFR. La definición y el uso adicionales.
del registro dependen del modo operativo de su • PMADDRH/L y PMDOUT2H/L: En este caso,
periférico asociado. Estos registros son: estos pares de búferes nombrados son en
• SSPxADD y SSPxMSK: Estos son dos registros realidad los mismos registros físicos. El modo de
de hardware separados, a los que se accede a funcionamiento del módulo de puerto maestro
través de una única dirección SFR. El modo paralelo (PMP) determina qué función asumen
operativo de los módulos MSSP determina a qué los registros. Ver Section 11.1.2 “Data
Registers” para detalles adicionales.
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY)
Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

FFFh TOSU — — — Top-of-Stack Upper Byte (TOS<20:16>) ---0 0000

FFEh TOSH Top-of-Stack High Byte (TOS<15:8>) 0000 0000

FFDh TOSL Top-of-Stack Low Byte (TOS<7:0>) 0000 0000

FFCh STKPTR STKFUL STKUNF — SP4 SP3 SP2 SP1 SP0 00-0 0000

FFBh PCLATU — — bit 21 Holding Register for PC<20:16> ---0 0000

FFAh PCLATH Holding Register for PC<15:8> 0000 0000

FF9h PCL PC Low Byte (PC<7:0>) 0000 0000

FF8h TBLPTRU — — bit 21 Program Memory Table Pointer Upper Byte (TBLPTR<20:16>) --00 0000

FF7h TBLPTRH Program Memory Table Pointer High Byte (TBLPTR<15:8>) 0000 0000

FF6h TBLPTRL Program Memory Table Pointer Low Byte (TBLPTR<7:0>) 0000 0000

FF5h TABLAT Program Memory Table Latch 0000 0000

FF4h PRODH Product Register High Byte xxxx xxxx

FF3h PRODL Product Register Low Byte xxxx xxxx

FF2h INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x

FF1h INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP 1111 1111

FF0h INTCON3 INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF 1100 0000

FEFh INDF0 Uses contents of FSR0 to address data memory – value of FSR0 not changed (not a physical register) N/A

FEEh POSTINC0 Uses contents of FSR0 to address data memory – value of FSR0 post-incremented (not a physical register) N/A

FEDh POSTDEC0 Uses contents of FSR0 to address data memory – value of FSR0 post-decremented (not a physical register) N/A

FECh PREINC0 Uses contents of FSR0 to address data memory – value of FSR0 pre-incremented (not a physical register) N/A

FEBh PLUSW0 Uses contents of FSR0 to address data memory – value of FSR0 pre-incremented (not a physical register) – N/A
value of FSR0 offset by W

FEAh FSR0H — — — — Indirect Data Memory Address Pointer 0 High Byte ---- xxxx

FE9h FSR0L Indirect Data Memory Address Pointer 0 Low Byte xxxx xxxx

FE8h WREG Working Register xxxx xxxx

FE7h INDF1 Uses contents of FSR1 to address data memory – value of FSR1 not changed (not a physical register) N/A

FE6h POSTINC1 Uses contents of FSR1 to address data memory – value of FSR1 post-incremented (not a physical register) N/A

FE5h POSTDEC1 Uses contents of FSR1 to address data memory – value of FSR1 post-decremented (not a physical register) N/A

FE4h PREINC1 Uses contents of FSR1 to address data memory – value of FSR1 pre-incremented (not a physical register) N/A

2009-2016 Microchip Technology Inc. DS30009964C-page 18


PIC18F47J53
FE3h PLUSW1 Uses contents of FSR1 to address data memory – value of FSR1 pre-incremented (not a physical register) – N/A
value of FSR1 offset by W

FE2h FSR1H — — — — Indirect Data Memory Address Pointer 1 High Byte ---- xxxx

FE1h FSR1L Indirect Data Memory Address Pointer 1 Low Byte xxxx xxxx

FE0h BSR — — — — Bank Select Register ---- 0000

FDFh INDF2 Uses contents of FSR2 to address data memory – value of FSR2 not changed (not a physical register) N/A

FDEh POSTINC2 Uses contents of FSR2 to address data memory – value of FSR2 post-incremented (not a physical register) N/A

FDDh POSTDEC2 Uses contents of FSR2 to address data memory – value of FSR2 post-decremented (not a physical register) N/A
Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 19


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)

Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

FDCh PREINC2 Uses contents of FSR2 to address data memory – value of FSR2 pre-incremented (not a physical register) N/A

FDBh PLUSW2 Uses contents of FSR2 to address data memory – value of FSR2 pre-incremented (not a physical register) – N/A
value of FSR2 offset by W
FDAh FSR2H — — — — Indirect Data Memory Address Pointer 2 High Byte ---- xxxx

FD9h FSR2L Indirect Data Memory Address Pointer 2 Low Byte xxxx xxxx

FD8h STATUS — — — N OV Z DC C ---x xxxx

FD7h TMR0H Timer0 Register High Byte 0000 0000

FD6h TMR0L Timer0 Register Low Byte xxxx xxxx

FD5h T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111

FD3h OSCCON IDLEN IRCF2 IRCF1 IRCF0 OSTS FLTS SCS1 SCS0 0110 q000

FD2h CM1CON CON COE CPOL EVPOL1 EVPOL0 CREF CCH1 CCH0 0001 1111

FD1h CM2CON CON COE CPOL EVPOL1 EVPOL0 CREF CCH1 CCH0 0001 1111

FD0h RCON IPEN — CM RI TO PD POR BOR 0-11 11qq

FCFh TMR1H Timer1 Register High Byte xxxx xxxx

FCEh TMR1L Timer1 Register Low Bytes xxxx xxxx

FCDh T1CON TMR1CS1 TMR1CS0 T1CKPS1 T1CKPS0 T1OSCEN T1SYNC RD16 TMR1ON 0000 0000

FCCh TMR2 Timer2 Register 0000 0000

FCBh PR2 Timer2 Period Register 1111 1111

FCAh T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000

FC9h SSP1BUF MSSP1 Receive Buffer/Transmit Register xxxx xxxx

FC8h SSP1ADD MSSP1 Address Register (I2C Slave Mode). MSSP1 Baud Rate Reload Register (I2C Master Mode). 0000 0000

FC8h SSP1MSK MSK7 MSK6 MSK5 MSK4 MSK3 MSK2 MSK1 MSK0 ---- ----

FC7h SSP1STAT SMP CKE D/A P S R/W UA BF 1111 1111

FC6h SSP1CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000

FC5h SSP1CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000

FC5h SSP1CON2 GCEN ACKSTAT ADMSK5 ADMSK4 ADMSK3 ADMSK2 ADMSK1 SEN 0000 0000

FC4h ADRESH A/D Result Register High Byte xxxx xxxx

FC3h ADRESL A/D Result Register Low Byte xxxx xxxx

FC2h ADCON0 VCFG1 VCFG0 CHS3 CHS2 CHS1 CHS0 GO/DONE ADON 0000 0000

FC1h ADCON1 ADFM ADCAL ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 0000 0000

FC0h WDTCON REGSLP LVDSTAT ULPLVL VBGOE DS ULPEN ULPSINK SWDTEN 1xx0 0000

FBFh PSTR1CON CMPL1 CMPL0 — STRSYNC STRD STRC STRB STRA 00-0 0001

FBEh ECCP1AS ECCP1ASE ECCP1AS2 ECCP1AS1 ECCP1AS0 PSS1AC1 PSS1AC0 PSS1BD1 PSS1BD0 0000 0000

FBDh ECCP1DEL P1RSEN P1DC6 P1DC5 P1DC4 P1DC3 P1DC2 P1DC1 P1DC0 0000 0000

FBCh CCPR1H Capture/Compare/PWM Register 1 High Byte xxxx xxxx

FBBh CCPR1L Capture/Compare/PWM Register 1 Low Byte xxxx xxxx

FBAh CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 20


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
FB9h PSTR2CON CMPL1 CMPL0 — STRSYNC STRD STRC STRB STRA 00-0 0001

FB8h ECCP2AS ECCP2ASE ECCP2AS2 ECCP2AS1 ECCP2AS0 PSS2AC1 PSS2AC0 PSS2BD1 PSS2BD0 0000 0000

FB7h ECCP2DEL P2RSEN P2DC6 P2DC5 P2DC4 P2DC3 P2DC2 P2DC1 P2DC0 0000 0000

FB6h CCPR2H Capture/Compare/PWM Register 2 High Byte xxxx xxxx

FB5h CCPR2L Capture/Compare/PWM Register 2 Low Byte xxxx xxxx

FB4h CCP2CON P2M1 P2M0 DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 0000 0000

FB3h CTMUCONH CTMUEN — CTMUSIDL TGEN EDGEN EDGSEQEN IDISSEN CTTRIG 0-00 0000

FB2h CTMUCONL EDG2POL EDG2SEL1 EDG2SEL0 EDG1POL EDG1SEL1 EDG1SEL0 EDG2STAT EDG1STAT 0000 00xx

FB1h CTMUICON ITRIM5 ITRIM4 ITRIM3 ITRIM2 ITRIM1 ITRIM0 IRNG1 IRNG0 0000 0000

FB0h SPBRG1 EUSART1 Baud Rate Generator Register Low Byte 0000 0000

FAFh RCREG1 EUSART1 Receive Register 0000 0000

Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

FAEh TXREG1 EUSART1 Transmit Register xxxx xxxx

FADh TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010

FACh RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x

FABh SPBRG2 EUSART2 Baud Rate Generator Register Low Byte 0000 0000

FAAh RCREG2 EUSART2 Receive Register 0000 0000

FA9h TXREG2 EUSART2 Transmit Register 0000 0000

FA8h TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010

FA7h EECON2 Flash Self-Program Control Register (not a physical register) ---- ----

FA6h EECON1 — — WPROG FREE WRERR WREN WR — --00 x00-

FA5h IPR3 SSP2IP BCL2IP RC2IP TX2IP TMR4IP CTMUIP TMR3GIP RTCCIP 1111 1111

FA4h PIR3 SSP2IF BCL2IF RC2IF TX2IF TMR4IF CTMUIF TMR3GIF RTCCIF 0000 0000

FA3h PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CTMUIE TMR3GIE RTCCIE 0000 0000

FA2h IPR2 OSCFIP CM2IP CM1IP USBIP BCL1IP HLVDIP TMR3IP CCP2IP 1111 1111

FA1h PIR2 OSCFIF CM2IF CM1IF USBIF BCL1IF HLVDIF TMR3IF CCP2IF 0000 0000

FA0h PIE2 OSCFIE CM2IE CM1IE USBIE BCL1IE HLVDIE TMR3IE CCP2IE 0000 0000

F9Fh IPR1 PMPIP(1) ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 1111 1111

F9Eh PIR1 PMPIF(1) ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 0000 0000

F9Dh PIE1 PMPIE(1) ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 0000 0000

F9Ch RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x

F9Bh OSCTUNE INTSRC PLLEN TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 0000 0000

F9Ah T1GCON TMR1GE T1GPOL T1GTM T1GSPM T1GGO/ T1GVAL T1GSS1 T1GSS0 0000 0x00
T1DONE

F99h IPR5 — — CM3IP TMR8IP TMR6IP TMR5IP TMR5GIP TMR1GIP --11 1111

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 21


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
F98h PIR5 — — CM3IF TMR8IF TMR6IF TMR5IF TMR5GIF TMR1GIF --00 0000

F97h T3GCON TMR3GE T3GPOL T3GTM T3GSPM T3GGO/ T3GVAL T3GSS1 T3GSS0 0000 0x00
T3DONE

F96h TRISE(1) RDPU REPU — — — TRISE2 TRISE1 TRISE0 00-- -111

F95h TRISD(1) TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 1111 1111

F94h TRISC TRISC7 TRISC6 — — — TRISC2 TRISC1 TRISC0 1111 1111

F93h TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111

F92h TRISA TRISA7 TRISA6 TRISA5 — TRISA3 TRISA2 TRISA1 TRISA0 111- 1111

F91h PIE5 — — CM3IE TMR8IE TMR6IE TMR5IE TMR5GIE TMR1GIE --00 0000

F90h IPR4 CCP10IP CCP9IP CCP8IP CCP7IP CCP6IP CCP5IP CCP4IP CCP3IP 1111 1111

F8Fh PIR4 CCP10IF CCP9IF CCP8IF CCP7IF CCP6IF CCP5IF CCP4IF CCP3IF 0000 0000

F8Eh PIE4 CCP10IE CCP9IE CCP8IE CCP7IE CCP6IE CCP5IE CCP4IE CCP3IE 0000 0000

F8Dh LATE(1) — — — — — LATE2 LATE1 LATE0 ---- -xxx

F8Ch LATD(1) LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0 xxxx xxxx

F8Bh LATC LATC7 LATC6 — — — LATC2 LATC1 LATC0 xxxx xxxx

F8Ah LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 xxxx xxxx

F89h LATA LATA7 LATA6 LATA5 — LATA3 LATA2 LATA1 LATA0 xxx- xxxx

F88h DMACON1 SSCON1 SSCON0 TXINC RXINC DUPLEX1 DUPLEX0 DLYINTEN DMAEN 0000 0000

F87h OSCCON2 — SOSCRUN — SOSCDRV SOSCGO PRISD — — -0-1 01--

F86h DMACON2 DLYCYC3 DLYCYC2 DLYCYC1 DLYCYC0 INTLVL3 INTLVL2 INTLVL1 INTLVL0 0000 0000

F85h HLVDCON VDIRMAG BGVST IRVST HLVDEN HLVDL3 HLVDL2 HLVDL1 HLVDL0 0000 0000

F84h PORTE(1) — — — — — RE2 RE1 RE0 ---- -xxx

F83h PORTD(1) RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 xxxx xxxx

F82h PORTC RC7 RC6 RC5 RC4 — RC2 RC1 RC0 xxxx xxxx

F81h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx

F80h PORTA RA7 RA6 RA5 — RA3 RA2 RA1 RA0 xxx- xxxx

Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

F7Fh SPBRGH1 EUSART1 Baud Rate Generator High Byte 0000 0000

F7Eh BAUDCON1 ABDOVF RCIDL RXDTP TXCKP BRG16 — WUE ABDEN 0100 0-00

F7Dh SPBRGH2 EUSART2 Baud Rate Generator High Byte 0000 0000

F7Ch BAUDCON2 ABDOVF RCIDL RXDTP TXCKP BRG16 — WUE ABDEN 0100 0-00

F7Bh TMR3H Timer3 Register High Byte xxxx xxxx

F7Ah TMR3L Timer3 Register Low Byte xxxx xxxx

F79h T3CON TMR3CS1 TMR3CS0 T3CKPS1 T3CKPS0 T3OSCEN T3SYNC RD16 TMR3ON 0000 0000

F78h TMR4 Timer4 Register 0000 0000

F77h PR4 Timer4 Period Register 1111 1111

F76h T4CON — T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 -000 0000

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 22


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
F75h SSP2BUF MSSP2 Receive Buffer/Transmit Register xxxx xxxx

F74h SSP2ADD MSSP2 Address Register (I2C Slave Mode). MSSP2 Baud Rate Reload Register (I2C Master Mode). ---- ----

F74h SSP2MSK MSK7 MSK6 MSK5 MSK4 MSK3 MSK2 MSK1 MSK0 0000 0000

F73h SSP2STAT SMP CKE D/A P S R/W UA BF 1111 1111

F72h SSP2CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000

F71h SSP2CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000
ADMSK5 ADMSK4 ADMSK3 ADMSK2 ADMSK1

F70h CMSTAT — — — — — COUT3 COUT2 COUT1 ---- -111

F6Fh PMADDRH/ — CS1 Parallel Master Port Address High Byte -000 0000
PMDOUT1H(1)
Parallel Port Out Data High Byte (Buffer 1) 0000 0000

F6Eh PMADDRL/ Parallel Master Port Address Low Byte/ 0000 0000
PMDOUT1L(1) Parallel Port Out Data Low Byte (Buffer 1)

F6Dh PMDIN1H(1) Parallel Port In Data High Byte (Buffer 1) 0000 0000

F6Ch PMDIN1L (1) Parallel Port In Data Low Byte (Buffer 1) 0000 0000

F6Bh TXADDRL SPI DMA Transmit Data Pointer Low Byte xxxx xxxx

F6Ah TXADDRH — — — — SPI DMA Transmit Data Pointer High Byte ---- xxxx

F69h RXADDRL SPI DMA Receive Data Pointer Low Byte xxxx xxxx

F68h RXADDRH — — — — SPI DMA Receive Data Pointer High Byte ---- xxxx

F67h DMABCL SPI DMA Byte Count Low Byte xxxx xxxx

F66h DMABCH — — — — — — SPI DMA Byte Count High ---- --xx


Byte

F65h UCON(1) — PPBRST SE0 PKTDIS USBEN RESUME SUSPND — -0x0 000-

F64h USTAT — ENDP3 ENDP2 ENDP1 ENDP0 DIR PPBI — -xxx xxx-

F63h UEIR BTSEF — — BTOEF DFN8EF CRC16EF CRC5EF PIDEF 0--0 0000

F62h UIR — SOFIF STALLIF IDLEIF TRNIF ACTVIF UERRIF URSTIF -000 0000

F61h UFRMH — — — — — FRM10 FRM9 FRM8 ---- -xxx

F60h UFRML FRM7 FRM6 FRM5 FRM4 FRM3 FRM2 FRM1 FRM0 xxxx xxxx

F5Fh PMCONH(1) PMPEN — PSIDL ADRMUX1 ADRMUX0 PTBEEN PTWREN PTRDEN 0-00 0000

F5Eh PMCONL(1) CSF1 CSF0 ALP — CS1P BEP WRSP RDSP 000- 0000

F5Dh PMMODEH (1) BUSY IRQM1 IRQM0 INCM1 INCM0 MODE16 MODE1 MODE0 0000 0000

F5Ch PMMODEL (1) WAITB1 WAITB0 WAITM3 WAITM2 WAITM1 WAITM0 WAITE1 WAITE0 0000 0000

F5Bh PMDOUT2H(1) Parallel Port Out Data High Byte (Buffer 2) 0000 0000

F5Ah PMDOUT2L(1) Parallel Port Out Data Low Byte (Buffer 2) 0000 0000

F59h PMDIN2H(1) Parallel Port In Data High Byte (Buffer 2) 0000 0000

F58h PMDIN2L (1) Parallel Port In Data Low Byte (Buffer 2) 0000 0000

F57h PMEH(1) PTEN15 PTEN14 PTEN13 PTEN12 PTEN11 PTEN10 PTEN9 PTEN8 0000 0000

F56h PMEL (1) PTEN7 PTEN6 PTEN5 PTEN4 PTEN3 PTEN2 PTEN1 PTEN0 0000 0000

F55h PMSTATH(1) IBF IBOV — — IB3F IB2F IB1F IB0F 00-- 0000

F54h PMSTATL(1) OBE OBUF — — OB3E OB2E OB1E OB0E 10-- 1111

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 23


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

F53h CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 0000
0000
F52h CCPTMRS0 C3TSEL1 C3TSEL0 C2TSEL2 C2TSEL1 C2TSEL0 C1TSEL2 C1TSEL1 C1TSEL0 0000
0000
F51h CCPTMRS1 C7TSEL1 C7TSEL0 — C6TSEL0 — C5TSEL0 C4TSEL1 C4TSEL0 00-0 -
000
F50h CCPTMRS2 — — — C10TSEL0(3) — C9TSEL0(3) C8TSEL1 C8TSEL0 ---0 -
000
F4Fh DSGPR1 Deep Sleep Persistent General Purpose Register (contents retained even in deep sleep) xxxx
xxxx

F4Eh DSGPR0 Deep Sleep Persistent General Purpose Register (contents retained even in deep sleep) xxxx
xxxx

F4Dh DSCONH DSEN — — — — r DSULPEN RTCWDIS 0--- -


000
F4Ch DSCONL — — — — — ULPWDIS DSBOR RELEASE ---- -
000
F4Bh DSWAKEH — — — — — — — DSINT0 ---- ---
0
F4Ah DSWAKEL DSFLT — DSULP DSWDT DSRTC DSMCLR — DSPOR 0-00 00-
1
F49h ANCON1 VBGEN — — PCFG12 PCFG11 PCFG10 PCFG9 PCFG8 0--0
0000
F48h ANCON0 PCFG7(1) PCFG6(1) PCFG5(1) PCFG4 PCFG3 PCFG2 PCFG1 PCFG0 0000
0000
F47h OEDCON ALRMEN CHIME AMASK3 AMASK2 AMASK1 AMASK0 ALRMPTR1 ALRMPTR0 0000
0000
F46h ALRMRPT ARPT7 ARPT6 ARPT5 ARPT4 ARPT3 ARPT2 ARPT1 ARPT0 0000
0000
F45h ALRMVALH Alarm Value High Register Window based on ALRMPTR<1:0> xxxx
xxxx

F44h ALRMVALL Alarm Value Low Register Window based on ALRMPTR<1:0> xxxx
xxxx

F43h — — — — — — — — — ---- ---


-
F42h ODCON1 CCP8OD CCP7OD CCP6OD CCP5OD CCP4OD ECCP3OD ECCP2OD ECCP1OD 0000
0000
F41h ODCON2 — — — — CCP10OD CCP9OD U2OD U1OD ----
0000
F40h ODCON3 — — — — — — SPI2OD SPI1OD ---- --
00
F3Fh RTCCFG RTCEN — RTCWREN RTCSYNC HALFSEC RTCOE RTCPTR1 RTCPTR0 0-00
0000
F3Eh RTCCAL CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 0000
0000
F3Dh REFOCON ROON — ROSSLP ROSEL RODIV3 RODIV2 RODIV1 RODIV0 0-00
0000
F3Ch PADCFG1 — — — — — RTSECSEL1 RTSECSEL0 PMPTTL(1) ---- -
000
F3Bh RTCVALH RTCC Value High Register Window Based on RTCPTR<1:0> 0xxx
xxxx

F3Ah RTCVALL RTCC Value Low Register Window Based on RTCPTR<1:0> 0xxx
xxxx

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 24


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
F39h UCFG UTEYE UOEMON — UPUEN UTRDIS FSEN PPB1 PPB0 00-0
0000
F38h UADDR — ADDR6 ADDR5 ADDR4 ADDR3 ADDR2 ADDR1 ADDR0 -000
0000
F37h UEIE BTSEE — — BTOEE DFN8EE CRC16EE CRC5EE PIDEE 0--0
0000
F36h UIE — SOFIE STALLIE IDLEIE TRNIE ACTVIE UERRIE URSTIE -000
0000
F35h UEP15 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F34h UEP14 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F33h UEP13 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F32h UEP12 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F31h UEP11 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F30h UEP10 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F2Fh UEP9 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F2Eh UEP8 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F2Dh UEP7 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F2Ch UEP6 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F2Bh UEP5 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F2Ah UEP4 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F29h UEP3 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F28h UEP2 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F27h UEP1 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F26h UEP0 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0
0000
F25h CM3CON CON COE CPOL EVPOL1 EVPOL0 CREF CCH1 CCH0 0001
1111
F24h TMR5H Timer5 Register High Byte xxxx
xxxx

Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

F23h TMR5L Timer5 Register Low Bytes xxxx xxxx

F22h T5CON TMR5CS1 TMR5CS0 T5CKPS1 T5CKPS0 T5OSCEN T5SYNC RD16 TMR5ON 0000 0000

F21h T5GCON TMR5GE T5GPOL T5GTM T5GSPM T5GGO/ T5GVAL T5GSS1 T5GSS0 0000 0x00
T5DONE

F20h TMR6 Timer6 Register 0000 0000

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 25


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
F1Fh PR6 Timer6 Period Register 1111 1111

F1Eh T6CON — T6OUTPS3 T6OUTPS2 T6OUTPS1 T6OUTPS0 TMR6ON T6CKPS1 T6CKPS0 -000 0000

F1Dh TMR8 Timer8 Register 0000 0000

F1Ch PR8 Timer8 Period Register 1111 1111

F1Bh T8CON — T8OUTPS3 T8OUTPS2 T8OUTPS1 T8OUTPS0 TMR8ON T8CKPS1 T8CKPS0 -000 0000

F1Ah PSTR3CON CMPL1 CMPL0 — STRSYNC STRD STRC STRB STRA 00-0 0001

F19h ECCP3AS ECCP3ASE ECCP3AS2 ECCP3AS1 ECCP3AS0 PSS3AC1 PSS3AC0 PSS3BD1 PSS3BD0 0000 0000

F18h ECCP3DEL P3RSEN P3DC6 P3DC5 P3DC4 P3DC3 P3DC2 P3DC1 P3DC0 0000 0000

F17h CCPR3H Capture/Compare/PWM Register 3 High Byte xxxx xxxx

F16h CCPR3L Capture/Compare/PWM Register 3 Low Byte xxxx xxxx

F15h CCP3CON P3M1 P3M0 DC3B1 DC3B0 CCP3M3 CCP3M2 CCP3M1 CCP3M0 0000 0000

F14h CCPR4H Capture/Compare/PWM Register 4 High Byte xxxx xxxx

F13h CCPR4L Capture/Compare/PWM Register 4 Low Byte xxxx xxxx

F12h CCP4CON — — DC4B1 DC4B0 CCP4M3 CCP4M2 CCP4M1 CCP4M0 --00 0000

F11h CCPR5H Capture/Compare/PWM Register 5 High Byte xxxx xxxx

F10h CCPR5L Capture/Compare/PWM Register 5 Low Byte xxxx xxxx

F0Fh CCP5CON — — DC5B1 DC5B0 CCP5M3 CCP5M2 CCP5M1 CCP5M0 --00 0000

F0Eh CCPR6H Capture/Compare/PWM Register 6 High Byte xxxx xxxx

F0Dh CCPR6L Capture/Compare/PWM Register 6 Low Byte xxxx xxxx

F0Ch CCP6CON — — DC6B1 DC6B0 CCP6M3 CCP6M2 CCP6M1 CCP6M0 --00 0000

F0Bh CCPR7H Capture/Compare/PWM Register 7 High Byte xxxx xxxx

F0Ah CCPR7L Capture/Compare/PWM Register 7 Low Byte xxxx xxxx

F09h CCP7CON — — DC7B1 DC7B0 CCP7M3 CCP7M2 CCP7M1 CCP7M0 --00 0000

F08h CCPR8H Capture/Compare/PWM Register 8 High Byte xxxx xxxx

F07h CCPR8L Capture/Compare/PWM Register 8 Low Byte xxxx xxxx

F06h CCP8CON — — DC8B1 DC8B0 CCP8M3 CCP8M2 CCP8M1 CCP8M0 --00 0000

F05h CCPR9H Capture/Compare/PWM Register 9 High Byte xxxx xxxx

F04h CCPR9L Capture/Compare/PWM Register 9 Low Byte xxxx xxxx

F03h CCP9CON — — DC9B1 DC9B0 CCP9M3 CCP9M2 CCP9M1 CCP9M0 --00 0000

F02h CCPR10H Capture/Compare/PWM Register 10 High Byte xxxx xxxx

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 26


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
F01h CCPR10L Capture/Compare/PWM Register 10 Low Byte xxxx xxxx

F00h CCP10CON — — DC10B1 DC10B0 CCP10M3 CCP10M2 CCP10M1 CCP10M0 --00 0000

EFFh RPINR24 — — — PWM Fault Input (FLT0) to Input Pin Mapping bits ---1 1111

EFEh RPINR23 — — — SPI2 Slave Select Input (SS2) to Input Pin Mapping bits ---1 1111

EFDh RPINR22 — — — SPI2 Clock Input (SCK2) to Input Pin Mapping bits ---1 1111

EFCh RPINR21 — — — SPI2 Data Input (SDI2) to Input Pin Mapping bits ---1 1111

EFBh — — — — — — — — —

EFAh — — — — — — — — —

EF9h — — — — — — — — —

EF8h RPINR17 — — — EUSART2 Clock Input (CK2) to Input Pin Mapping bits ---1 1111

EF7h RPINR16 — — — EUSART2 RX2DT2 to Input Pin Mapping bits ---1 1111

EF6h — — — — — — — — —

EF5h — — — — — — — — —

Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

EF4h RPINR14 — — — Timer5 Gate Input (T5G) to Input Pin Mapping bits ---1 1111

EF3h RPINR13 — — — Timer3 Gate Input (T3G) to Input Pin Mapping bits ---1 1111

EF2h RPINR12 — — — Timer1 Gate Input (T1G) to Input Pin Mapping bits ---1 1111

EF1h — — — — — — — — —

EF0h — — — — — — — — —

EEFh — — — — — — — — —

EEEh — — — — — — — — —

EEDh — — — — — — — — —

EECh — — — — — — — — —

EEBh — — — — — — — — —

EEAh RPINR9 — — — ECCP3 Input Capture (IC3) to Input Pin Mapping bits ---1 1111

EE9h RPINR8 — — — ECCP2 Input Capture (IC2) to Input Pin Mapping bits ---1 1111

EE8h RPINR7 — — — ECCP1 Input Capture (IC1) to Input Pin Mapping bits ---1 1111

EE7h RPINR15 — — — Timer5 External Clock Input (T5CKI) to Input Pin Mapping bits ---1 1111

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 27


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
EE6h RPINR6 — — — Timer3 External Clock Input (T3CKI) to Input Pin Mapping bits ---1 1111

EE5h — — — — — — — — —

EE4h RPINR4 — — — Timer0 External Clock Input (T0CKI) to Input Pin Mapping bits ---1 1111

EE3h RPINR3 — — — External Interrupt (INT3) to Input Pin Mapping bits ---1 1111

EE2h RPINR2 — — — External Interrupt (INT2) to Input Pin Mapping bits ---1 1111

EE1h RPINR1 — — — External Interrupt (INT1) to Input Pin Mapping bits ---1 1111

EE0h — — — — — — — — —

EDFh — — — — — — — — —

EDEh — — — — — — — — —

EDDh — — — — — — — — —

EDCh — — — — — — — — —

EDBh — — — — — — — — —

EDAh — — — — — — — — —

ED9h — — — — — — — — —

ED8h(1) RPOR24 — — — Remappable Pin RP24 Output Signal Select bits ---0 0000

ED7h(1) RPOR23 — — — Remappable Pin RP23 Output Signal Select bits ---0 0000

ED6h(1) RPOR22 — — — Remappable Pin RP22 Output Signal Select bits ---0 0000

ED5h(1) RPOR21 — — — Remappable Pin RP21 Output Signal Select bits ---0 0000

ED4h(1) RPOR20 — — — Remappable Pin RP20 Output Signal Select bits ---0 0000

ED3h(1) RPOR19 — — — Remappable Pin RP19 Output Signal Select bits ---0 0000

ED2h RPOR18 — — — Remappable Pin RP18 Output Signal Select bits ---0 0000

ED1h RPOR17 — — — Remappable Pin RP17 Output Signal Select bits ---0 0000

ED0h) — — — — — — — — — ---0 0000

ECFh — — — — — — — — — ---0 0000

ECEh — — — — — — — — — ---0 0000

ECDh RPOR13 — — — Remappable Pin RP13 Output Signal Select bits ---0 0000

ECCh RPOR12 — — — Remappable Pin RP12 Output Signal Select bits ---0 0000

ECBh RPOR11 — — — Remappable Pin RP11 Output Signal Select bits ---0 0000

ECAh RPOR10 — — — Remappable Pin RP10 Output Signal Select bits ---0 0000

EC9h RPOR9 — — — Remappable Pin RP9 Output Signal Select bits ---0 0000

EC8h RPOR8 — — — Remappable Pin RP8 Output Signal Select bits ---0 0000

EC7h RPOR7 — — — Remappable Pin RP7 Output Signal Select bits ---0 0000

EC6h RPOR6 — — — Remappable Pin RP6 Output Signal Select bits ---0 0000

EC5h RPOR5 — — — Remappable Pin RP5 Output Signal Select bits ---0 0000

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

2009-2016 Microchip Technology Inc. DS30009964C-page 28


PIC18F47J53
TABLE 6-4: REGISTER FILE SUMMARY (PIC18F47J53 FAMILY) (CONTINUED)
Value on
Addr. File Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR

EC4h RPOR4 — — — Remappable Pin RP4 Output Signal Select bits ---0
0000

EC3h RPOR3 — — — Remappable Pin RP3 Output Signal Select bits ---0
0000

EC2h RPOR2 — — — Remappable Pin RP2 Output Signal Select bits ---0
0000
EC1h RPOR1 — — — Remappable Pin RP1 Output Signal Select bits ---0
0000

EC0h RPOR0 — — — Remappable Pin RP0 Output Signal Select bits ---0
0000

EBFh PPSCON — — — — — — — IOLOCK ---- ---


0
EBEh — — — — — — — — —

EBDh — — — — — — — — —

EBCh PMDIS3 CCP10MD CCP9MD CCP8MD CCP7MD CCP6MD CCP5MD CCP4MD — 0000
000-
EBBh PMDIS2 — TMR8MD — TMR6MD TMR5MD CMP3MD CMP2MD CMP1MD -0-0
0000
EBAh PMDIS1 PSPMD(1) CTMUMD RTCCMD TMR4MD TMR3MD TMR2MD TMR1MD — 0000
000-
EB9h PMDIS0 CCP3MD CCP2MD CCP1MD UART2MD UART1MD SPI2MD SPI1MD ADCMD 0000
0000
EB8h ADCTRIG — — — — — — TRIGSEL1 TRIGSEL0 ---- --
00
EB7h — — — — — — — — —

EB6h — — — — — — — — —

EB5h — — — — — — — — —

EB4h — — — — — — — — —

EB3h — — — — — — — — —

EB2h — — — — — — — — —

EB1h — — — — — — — — —

EB0h — — — — — — — — —

300000h CONFIG1L DEBUG XINST STVREN CFGPLLEN PLLDIV2 PLLDIV1 PLLDIV0 WDTEN 1111
1111
300001h CONFIG1H — — — — — CP0 CPDIV1 CPDIV0 ---- -
111
300002h CONFIG2L IESO FCMEN CLKOEC SOSCSEL1 SOSCSEL0 FOSC2 FOSC1 FOSC0 1111
1111
300003h CONFIG2H — — — — WDTPS3 WDTPS2 WDTPS1 WDTPS0 ----
1111
300004h CONFIG3L DSWDTPS3 DSWDTPS2 DSWDTPS1 DSWDTPS0 DSWDTEN DSBOREN RTCOSC DSWDTOSC 1111
1111
300005h CONFIG3H — — — — MSSPMSK — ADCSEL IOL1WAY ---- 1-
11
300006h CONFIG4L WPCFG WPFP6 WPFP5 WPFP4 WPFP3 WPFP2 WPFP1 WPFP0 1111
1111
300007h CONFIG4H — — — — LS48MHZ — WPEND WPDIS ---- 1-
11

DS30009964C-page 29 2009-2016 Microchip Technology Inc.


PIC18F47J53
Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition, r = reserved, do not modify
Note 1: Implemented only for 44-pin devices (PIC18F46J53, PIC18F47J53, PIC18LF46J53 and
PIC18LF47J53). 2: Implemented only for 28-pin devices (PIC18F26J53, PIC18F27J53, PIC18LF26J53 and
PIC18LF27J53).
3: Implemented only for devices with 128 Kbyte of program memory (PIC18F27J53, PIC18F47J53, PIC18LF27J53 and PIC18LF47J53).

6.3.6 REGISTRO STATUS


El registro de ESTADO, que se muestra en el
Registro 6-2, contiene el estado aritmético de la
ALU. El registro de ESTADO puede ser el operando
para cualquier instrucción, como con cualquier otro
registro. Si el registro de ESTADO es el destino de
una instrucción que afecta a los bits Z, DC, C, OV o
N, entonces la escritura en estos cinco bits está
desactivada.
Estos bits son ponen en 1 o 0 de acuerdo con la
lógica del dispositivo. Por lo tanto, el resultado de
una instrucción con el registro de ESTADO como
destino puede ser diferente de lo previsto. Por
ejemplo, CLRF STATUS establece el bit Z pero
dejará los otros bits sin cambios. El registro de
ESTADO se lee de nuevo como "000u u1uu". Por lo
tanto, se recomienda que solo use las instrucciones
BCF, BSF, SWAPF, MOVFF y MOVWF para
modificar el registro de ESTADO porque estas
instrucciones no afectan los bits Z, C, DC, OV o N
en el registro de ESTADO. Para otras instrucciones
que no afectan a ningún bit de estado, consulte el
resumen del conjunto de instrucciones en la Tabla
29-2 y la Tabla 29-3.
Nota: Los bits C y DC funcionan como
Préstamo y Digit Borrow bits,
respectivamente en resta..

2009-2016 Microchip Technology Inc. DS30009964C-page 30


U-0 U-0 U-0 R/W-x R/W-x R/W-x PIC18F47J53
R/W-x R/W-x
— — — N OV Z DC(1)
C(2)
bit 7 bit 0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
POR

REGISTER 6-2: STATUS REGISTER (ACCESS FDBh)


bit 7-5 Unimplemented: Read as ‘0’

bit 4 N: Negative bit


This bit is used for signed arithmetic (2’s complement). It indicates whether the result was
negative (ALU MSB = 1).
1 = Result was negative
0 = Result was positive
bit 3 OV: Overflow bit
This bit is used for signed arithmetic (2’s complement). It indicates an overflow of the 7-bit magnitude,
which causes the sign bit (bit 7) to change state.
1 = Overflow occurred for signed arithmetic (in this arithmetic operation)
0 = No overflow occurred
bit 2 Z: Zero bit
1 = The result of an arithmetic or logic operation is zero0 = The result of an
arithmetic or logic operation is not zero

bit 1 DC: Digit Carry/Digit Borrow bit(1)


For ADDWF, ADDLW, SUBLW and SUBWF instructions:
1 = A carry out from the 4th low-order bit of the result occurred
0 = No carry out from the 4th low-order bit of the result

bit 0 C: Carry/Borrow bit(1)


For ADDWF, ADDLW, SUBLW and SUBWF instructions:
1 = A carry out from the MSb of the result occurred
0 = No carry out from the MSb of the result occurred

Note 1: For Digit Borrow, the polarity is reversed. A subtraction is executed by adding the 2’s complement of the
second operand. For rotate (RRF, RLF) instructions, this bit is loaded with either bit 4 or bit 3 of the source
register.
2: For Borrow, the polarity is reversed. A subtraction is executed by adding the 2’s complement of the second
operand. For rotate (RRF, RLF) instructions, this bit is loaded with either the high or low-order bit of
the source register.

2009-2016 Microchip Technology Inc. DS30009964C-page 31


PIC18F47J53
6.4 Modos Direccionamiento de Datos están especificadas por los argumentos que acompañan
a la instrucción.
Nota: La ejecución de algunas instrucciones en
el conjunto de instrucciones PIC18 básico En el conjunto básico de instrucciones PIC18, las
se cambia cuando se habilita el conjunto instrucciones orientadas a bits y a bytes utilizan alguna
de instrucciones extendido PIC18. versión de Direccionamiento directo de forma
Consulte la Sección 6.6 “Memoria de predeterminada. Todas estas instrucciones incluyen
datos y el conjunto de instrucciones alguna dirección literal de 8 bits como su LSB. Esta
ampliado” para obtener más información. dirección especifica una dirección de registro en uno de
Si bien la memoria del programa se puede direccionar los bancos de datos RAM (Sección 6.3.4 “Archivo de
de una sola manera a través de la PC, la información en registro de propósito general”) o una ubicación en el
el espacio de la memoria de datos se puede abordar de Banco de acceso (Sección 6.3.3 “Banco de acceso”)
varias maneras. Para la mayoría de las instrucciones, el como la fuente de datos para instrucción.
modo de direccionamiento es fijo. Otras instrucciones
pueden usar hasta tres modos, dependiendo de qué El bit de RAM de acceso, "a", determina cómo se
operandos se usen y si el conjunto de instrucciones interpreta la dirección. Cuando "a" es "1", el contenido
extendido está habilitado o no. del BSR (Sección 6.3.2 "Registro de selección de
banco") se utiliza con la dirección para determinar la
Los modos de direccionamiento son: dirección completa de 12 bits del registro. Cuando "a" es
• Inherent "0", la dirección se interpreta como un registro en el
• Literal Banco de acceso. El direccionamiento que usa la RAM
• Direct de acceso a veces también se conoce como modo de
direccionamiento forzado directo.
• Indirect
Un modo de direccionamiento adicional, Algunas instrucciones, como MOVFF, incluyen la
Desplazamiento literal indexado, está disponible cuando dirección completa de 12 bits (origen o destino) en sus
el conjunto de instrucciones extendido está habilitado códigos de operación. En estos casos, el BSR se ignora
(bit de configuración XINST = 1). Su funcionamiento se por completo.
trata con más detalle en la Sección 6.6.1
"Direccionamiento indexado con desplazamiento literal". El destino de los resultados de la operación está
determinado por el bit de destino, "d". Cuando "d" es "1",
6.4.1 DIRECCIONAMIENTO INHERENT Y los resultados se almacenan nuevamente en el registro
LITERAL fuente, sobrescribiendo su contenido original. Cuando
Muchas instrucciones de control PIC18 no necesitan "d" es "0", los resultados se almacenan en el registro W.
ningún argumento en absoluto; o realizan una Las instrucciones sin el argumento "d" tienen un destino
implícito en la instrucción; su destino es el registro
operación que afecta globalmente al dispositivo o
objetivo en el que se opera o el registro W.
operan implícitamente en un registro. Este modo de
direccionamiento se conoce como direccionamiento
6.4.3 DIRECCIONAMIENTO INDIRECT
inherente. Los ejemplos incluyen SLEEP, RESET y
DAW. El direccionamiento indirecto permite al usuario acceder
a una ubicación en la memoria de datos sin proporcionar
Otras instrucciones funcionan de manera similar, pero
una dirección fija en la instrucción. Esto se hace
requieren un argumento explícito adicional en el código
mediante el uso de registros de selección de registros
de operación. Esto se conoce como modo de
(FSR) como punteros a las ubicaciones para ser leídos
direccionamiento literal, porque requieren algún valor
o escritos. Dado que los FSR están ubicados en la RAM
literal como argumento. Los ejemplos incluyen ADDLW
como SFR, también pueden manipularse directamente
y MOVLW, que, respectivamente, agregan o mueven un
bajo el control del programa. Esto hace que los FSR
valor literal al registro W. Otros ejemplos incluyen CALL
sean muy útiles para implementar estructuras de datos
y GOTO, que incluyen una dirección de memoria de
como tablas y matrices en la memoria de datos.
programa de 20 bits.
6.4.2 DIRECCIONAMIENTO DIRECT Los registros para el direccionamiento indirecto también
Direccionamiento directo especifica la totalidad o parte se implementan con Indirect File Operands (INDF) que
de la dirección de origen y / o destino de la operación permiten la manipulación automática del valor del
dentro del propio código de operación. Las opciones puntero con incremento automático, decremento
automático o compensación con otro valor. Esto permite

2009-2016 Microchip Technology Inc. DS30009964C-page 32


PIC18F47J53
un código eficiente utilizando bucles, como el ejemplo de de forma lineal. Los pares de registros FSR,
borrar un banco de RAM completo en el Ejemplo 6-5. entonces, sirven como punteros a ubicaciones de
También permite a los usuarios realizar memoria de datos.
direccionamiento indexado y otras operaciones de El direccionamiento indirecto se logra con un
puntero de pila para la memoria del programa en la conjunto de Operandos INDF, INDF0 a INDF2.
memoria de datos. Estos pueden presumirse como registros "virtuales";
se mapean en el espacio SFR pero no se
EXAMPLE 6-5: HOW TO CLEAR RAM (BANK 1) implementan físicamente. Leer o escribir en un
USING INDIRECT ADDRESSING registro INDF en particular se accede a su par de
registros FSR correspondiente. Una lectura de
LFSR FSR0, 100h ; INDF1, por ejemplo, lee los datos en la dirección
NEXT CLRF POSTINC0 ; Clear INDF indicada por FSR1H: FSR1L. Las instrucciones que
; register then usan los registros INDF como operandos en
; inc pointer realidad usan el contenido de su FSR
BTFSS FSR0H, 1 ; All done with ; correspondiente como un puntero al objetivo de la
Bank1?
instrucción. El operando INDF es solo una forma
BRA NEXT ; NO, clear next
CONTINUE ; YES, continue
conveniente de usar el puntero.
Debido a que el direccionamiento indirecto utiliza

6.4.3.1 Registros FSR (File Select Registers) una dirección completa de 12 bits, no es necesario
y el operador INDF (INDF) seleccionar un banco en la RAM. Por lo tanto, el
contenido actual del BSR y el bit de RAM de acceso
En el núcleo del direccionamiento indirecto hay tres
no tienen ningún efecto en la determinación de la
conjuntos de registros: FSR0, FSR1 y FSR2. Cada
dirección de destino..
uno representa un par de registros de 8 bits, FSRnH
y FSRnL. Los cuatro bits superiores del registro
FSRnH no se utilizan, por lo que cada par FSR tiene
un valor de 12 bits. Esto representa un valor que
puede abordar todo el rango de la memoria de datos

2009-2016 Microchip Technology Inc. DS30009964C-page 33


PIC18F47J53
6.4.3.2 Registros FSR y POSTINC, en INDF1, usando INDF0 como el operando, dará
POSTDEC, PREINC y PLUSW como resultado un NOP.
Además del operando INDF, cada par de registros FSR Por otro lado, el uso de los registros virtuales para
también tiene cuatro operandos indirectos adicionales. escribir en un par FSR puede no ocurrir según lo
Al igual que INDF, estos son registros "virtuales" que no planeado. En estos casos, el valor se escribirá en el
se pueden leer o escribir indirectamente. Con el acceso par FSR pero sin ningún incremento o disminución.
a estos registros realmente se accede al par de Por lo tanto, escribir en INDF2 o POSTDEC2
registros FSR asociado, pero también realiza una escribirá el mismo valor en FSR2H: FSR2L..
acción específica sobre su valor almacenado. Son: Dado que los FSR son registros físicos mapeados
• POSTDEC: accede al valor FSR, luego lo disminuye en el espacio SFR, pueden manipularse a través de
automáticamente en '1' a partir de entonces todas las operaciones directas. Los usuarios deben
proceder con cautela cuando trabajen en estos
• POSTINC: accede al valor FSR, luego lo incrementa
registros, particularmente si su código usa
automáticamente en "1" a partir de entonces
Direccionamiento indirecto..
• PREINC: incrementa el valor FSR en '1', luego lo usa
Del mismo modo, las operaciones por
en la operación
direccionamiento indirecto generalmente están
• PLUSW: agrega el valor con signo del registro W permitidas en todos los demás SFR. Los usuarios
(rango de 127 a 128) al del FSR y usa el nuevo valor en deben tener la precaución adecuada de no cambiar
la operación involuntariamente la configuración que pueda
En este contexto, acceder a un registro INDF utiliza el afectar el funcionamiento del dispositivo.
valor en los registros FSR sin cambiarlos. Del mismo
modo, acceder a un registro PLUSW proporciona el 6.5 Memoria de programa y el conjunto
valor FSR compensado por el valor en el registro W;
de instrucciones ampliado
ninguno de los valores se cambia realmente en la
operación. Acceder a los otros registros virtuales La operación de la memoria del programa no se ve
cambia el valor de los registros FSR. afectada por el uso del conjunto de instrucciones
Las operaciones en los FSR con POSTDEC, POSTINC extendido.
y PREINC afectan a todo el par de registros; es decir, Habilitar el conjunto de instrucciones extendido
las transferencias del registro FSRnL de FFh a 00h se agrega cinco comandos adicionales de dos palabras
transfieren al registro FSRnH. Por otro lado, los al conjunto de instrucciones PIC18 existente:
resultados de estas operaciones no cambian el valor de ADDFSR, CALLW, MOVSF, MOVSS y SUBFSR.
ningún indicador en el registro de ESTADO (por Estas instrucciones se ejecutan como se describe en
ejemplo, Z, N, OV, etc.). la Sección 6.2.4 "Instrucciones de dos palabras".
El registro PLUSW se puede usar para implementar una 6.6 Memoria de datos y el conjunto de
forma de direccionamiento indexado en el espacio de instrucciones ampliado
memoria de datos. Al manipular el valor en el registro
W, los usuarios pueden alcanzar direcciones que son La activación del conjunto de instrucciones extendidas
compensaciones fijas de direcciones de puntero. En PIC18 (bit de configuración XINST = 1) cambia
algunas aplicaciones, esto se puede usar para significativamente ciertos aspectos de la memoria de
implementar una estructura de control de programa datos y su direccionamiento. Específicamente, el uso del
potente, como pilas de software, dentro de la memoria Banco de acceso para muchas de las instrucciones
de datos. básicas de PIC18 es diferente. Esto se debe a la
introducción de un nuevo modo de direccionamiento
6.4.3.3 Operaciones con FSRs sobre FSRs para el espacio de memoria de datos. Este modo
Las operaciones de direccionamiento indirecto que también altera el comportamiento del direccionamiento
se dirigen a otros FSR o registros virtuales indirecto utilizando FSR2 y sus operandos asociados.
representan casos especiales. Por ejemplo, usar un
FSR para apuntar a uno de los registros virtuales no Lo que no cambia es igual de importante. El tamaño del
dará como resultado operaciones exitosas. Como espacio de memoria de datos no cambia, así como su
caso específico, suponga que FSR0H: FSR0L direccionamiento lineal. El mapa SFR sigue siendo el
contiene FE7h, la dirección de INDF1. Los intentos mismo. Las instrucciones básicas de PIC18 aún pueden
de leer el valor de INDF1, usando INDF0 como funcionar en ambos modos de direccionamiento directo
operando, devolverán 00h. Los intentos de escribir e indirecto; Las instrucciones inherentes y literales no

2009-2016 Microchip Technology Inc. DS30009964C-page 34


PIC18F47J53
cambian en absoluto. El direccionamiento indirecto con interpreta como un valor de desplazamiento para un
FSR0 y FSR1 también permanece sin cambios. puntero de dirección especificado por FSR2. El
desplazamiento y el contenido de FSR2 se agregan
6.6.1 DIRECCIÓN INDEXADA CON para obtener la dirección de destino de la operación.
DESPLAZAMIENTO LITERAL
6.6.2 INSTRUCCIONES AFECTADAS POR
La activación del conjunto de instrucciones EL MODO DE DESPLAZAMIENTO LITERAL
extendidas PIC18 cambia el comportamiento del INDEXADO
direccionamiento indirecto utilizando el par de
registros FSR2 y sus operandos de archivo Cualquiera de las instrucciones básicas de PIC18 que
asociados. En condiciones adecuadas, las pueden usar Direccionamiento directo se ve
instrucciones que utilizan Access Bank, es decir, la potencialmente afectada por el modo de
mayoría de las instrucciones orientadas a bits y direccionamiento de desplazamiento literal indexado.
bytes, pueden invocar una forma de Esto incluye todas las instrucciones orientadas a bits y
direccionamiento indexado utilizando un bytes, o casi la mitad del conjunto de instrucciones
desplazamiento especificado en la instrucción. Este PIC18 estándar. Las instrucciones que solo usan
modo de direccionamiento especial se conoce modos de direccionamiento inherente o literal no se ven
como direccionamiento indexado con afectadas.
desplazamiento literal o modo de desplazamiento
Además, las instrucciones orientadas a bytes y bits no
literal indexado.
se ven afectadas si usan el banco de acceso (el bit de
RAM de acceso es '1') o si incluye una dirección de
Cuando se utiliza el conjunto de instrucciones
archivo de 60h o superior. Las instrucciones que
extendido, este modo de direccionamiento requiere
lo siguiente: cumplan con estos criterios continuarán ejecutándose
como antes. En la Figura 6-9 se proporciona una
• El uso del Banco de acceso es forzado (‘a’ = 0); y comparación de los diferentes modos de
direccionamiento posibles cuando el conjunto de
• El argumento de la dirección del archivo es menor instrucciones extendido está habilitado.
o igual a 5Fh. Aquellos que deseen utilizar byte o instrucciones
orientadas a bits en el modo de desplazamiento literal
En estas condiciones, la dirección del archivo de la indexado deben tener en cuenta los cambios en la
instrucción no se interpreta como el byte inferior de sintaxis del ensamblador para este modo. Esto se
una dirección (utilizada con el BSR en describe con más detalle en la Sección 29.2.1 "Sintaxis
direccionamiento directo) o como una dirección de de instrucción extendida".
8 bits en el banco de acceso. En cambio, el valor se

2009-2016 Microchip Technology Inc. DS30009964C-page 35


PIC18F47J53

2009-2016 Microchip Technology Inc. DS30009964C-page 36


PIC18F47J53
6.6.3 MAPEO DEL BANCO DE ACCESO EN indexado. Las operaciones que usan el BSR (el bit
MODO DE DESPLAZAMIENTO de RAM de acceso es '1') continuarán usando el
LITERAL INDEXADO direccionamiento directo como antes. Cualquier
El uso del modo de direccionamiento de operación de direccionamiento indirecto o indexado
desplazamiento literal indexado cambia que utilice explícitamente cualquiera de los
efectivamente la forma en que se asigna la parte operandos de archivo indirectos (incluido FSR2)
inferior de RAM de acceso (00h a 5Fh). En lugar de continuará funcionando como direccionamiento
contener solo el contenido de la parte inferior del indirecto estándar. Cualquier instrucción que use
Banco 0, este modo asigna el contenido del Banco Access Bank, pero incluya una dirección de registro
0 y una "ventana" definida por el usuario que puede superior a 05Fh, utilizará Direct Addressing y el
ubicarse en cualquier parte del espacio de la mapa normal de Access Bank.
memoria de datos. El valor de FSR2 establece el
límite inferior de las direcciones asignadas a la
ventana, mientras que el límite superior se define
6.6.4 BSR EN MODO DE DESPLAZAMIENTO
por FSR2 más 95 (5Fh). Las direcciones en la RAM
de acceso superior a 5Fh se asignan como se LITERAL INDEXADO
describió anteriormente (consulte la Sección 6.3.3 Aunque el banco de acceso se reasigna cuando se
“Banco de acceso”). La Figura 6-10 proporciona un habilita el conjunto de instrucciones extendido, la
ejemplo de reasignación de Access Bank en este operación del BSR permanece sin cambios. El
modo de direccionamiento. La reasignación del direccionamiento directo, utilizando el BSR para
banco de acceso se aplica solo a las operaciones seleccionar el banco de memoria de datos, funciona
que utilizan el modo de desplazamiento literal de la misma manera que se describió anteriormente.

2009-2016 Microchip Technology Inc. DS30009964C-page 37


PIC18F47J53

2009-2016 Microchip Technology Inc. DS30009964C-page 38

También podría gustarte