You are on page 1of 40

17

2. Descripcin general del Microcontrolador PIC18F4550.




2.1. La Familia del PIC18F4550

La Familia especial del PIC18F4550 esta formada por los PIC: PIC18F2455/2550/4455/4550.

Las caractersticas principales de esta familia son:

Diferentes modos de Manejo de Energa. Tecnologa nanoWatt (reduccin del consumo
de energa durante la operacin).

Diferentes tipos de Estructura de Oscilador.

Disponibilidad de varios Perifricos como pueden ser: Puertos I/O, Mdulos de Timers,
Mdulos de CCP/PWM, Modulo USART, Convertidores de A/D etc.

Gran cantidad de memoria.

Arquitectura RISC avanzada tipo Harvard: 16 bits con 8 bits de datos.

Conjunto de 75 instrucciones.

Facilidad de Programacin en Lenguaje C.

Hasta 32 k bytes de memoria de programa.

Multiplicador Hardware 8x8.

Hasta 2048 bytes de RAM y 256 bytes de EEPROM.

Pila de 31 niveles.

Mltiples fuentes de interrupcin.

Perifricos de comunicacin avanzados como es el USB soportando baja y alta velocidad
de comunicacin (1.5Mb/s y 12 Mb/s respectivamente).

Modulo CCP extendido. Este modulo permite que en modo PWM se puedan tener 1, 2 o 4
salidas para controlar diferentes dispositivos.

Reduccin en el tiempo de la conversin A/D ya que no es necesario esperar el tiempo de
muestreo.

Precio reducido




18
2.2. Caractersticas generales

En la Tabla 2.1 se muestran las caractersticas de la familia PIC18F4550.

Tabla 2.1 Caractersticas de la familia PIC18F4550

Features PIC18F2455 PIC18F2550 PIC18F4455 PIC18F4550

Operating Frequency DC -48 MHz DC -48 MHz DC-48 MHz DC-48 MHz

Program Memory (Bytes) 24576 32768 24576 32768

Program Memory (Instructions) 12288 16384 12288 16384

Data Memory (Bytes) 2048 2048 2048 2048

Data EEPROM Memory (Bytes) 256 256 256 256

Interrupt Sources 19 19 20 20

l/O Ports Ports A, B, C, (E) Ports A, B, C, (E) Ports A, B, C, D, E Ports A, B, C, D, E

Timers 4 4 4 4

Capture/Compare/PWM Modules 2 2 1 1

Enhanced Capture/ 0 0 1 1

Compare/PWM Modules

Serial Communications MSSP, MSSP, MSSP, MSSP,

Enhanced USART Enhanced USART Enhanced USART Enhanced USART

Universal Serial Bus (USB) 1 1 1 1

Module

Streaming Parallel Port (SPP) No No Ves Ves

10-bit Analog-to-Digital Module 10 Input Channels 10 Input Channels 13 Input Channels 13 Input Channels

Comparators 2 2 2 2

Resets (and Delays) POR, BOR, POR, BOR, POR, BOR, POR, BOR,

RESET Instruction, RESET Instruction, RESET Instruction, RESET Instruction,

Stack Full, Snack Full, Stack Full, Stack Full,

Stack Underflow Stack Underflow Stack Underflow Stack Underflow



(PWRT, OST), (PWRT, OST), ( (PWRT, OST), , OST),

MCLR (optional), MCLR MCLR (optional), (optional), MCLR (optional),

WDT WDT WDT WDT

Programmable Low-Voltage Ves Ves Ves Ves

Detect

Programmable Brown-out Reset Ves Ves Ves Ves

Instruction Set 75 Instructions; 75 Instructions; 75 Instructions; 75 Instructions;

83 with Extended 83 with Extended 83 with Extended 83 with Extended

Instruction Set Instruction Set Instruction Set lnstruction Set

enabled enabled enabled enabled

Packages 28-pin PDIP 28-pin PDIP 40-pin PDIP 40-pin PDIP

28-pin SOIC 28-pin SOIC 44-pin QFN 44-pin QFN

44-pin TQFP 44-pin TQFP


2.3. Diagrama de bloques y pines del PIC18F4550

El PIC18F4550 est fabricado con tecnologa CMOS de altas prestaciones y encapsulado de 40
pines. En la Figura 2.1 y 2.2 se muestran el diagrama de bloques de la arquitectura interna y de
patillajes del PIC respectivamente (ms detalles del patillaje del PIC ver manual).
.





19

Figura 2.1 Diagrama de bloques del microcontrolador PIC18F4550




20

Figura 2.2 Diagrama de pines del microcontrolador PIC18F4550

Nomenclatura.- Adems de lo mencionado de la nomenclatura general para reconocer el
microcontrolador, en el nombre especfico del microcontrolador pueden aparecer algunas siglas
como se muestra en la figura 2.3.


Figura 2.3 Nomenclatura de esta familia




21
2.4. El oscilador y sus variantes
Debido a la incorporacin del modulo USB, el microcontrolador necesita un reloj estable para
proporcionar una fuente de reloj separada para manejar los 48 MHz necesarios para la
comunicacin del USB de alta velocidad. Debido, a que esta seal es controlada por la fuente
de reloj primaria del micro, un sistema de prescalador y poscaladores son necesarios para
lograr estros requerimientos, los otros dispositivos o el microcontrolador se pueden controlar por
fuentes secundarias u osciladores internos como en el resto de microcontroladores PIC. En la
Figura 2.4 se muestra el diagrama de bloques del reloj para esta familia.


Figura 2.4 Diagrama de bloques del reloj




22
El oscilador se controla mediante dos registros de configuracin y otros dos de control.

En los registros CONFIG1L y CONFIG1H se selecciona el modo del oscilador y las
opciones de los escaladores del USB (prescaler y postscaler). Los bits de configuracin
se seleccionan al programarlos y permanecern hasta que se vuelvan a programar.

El registro OSCCON selecciona el modo activo de reloj (manejo de energa del
PIC).

El registro OSCTUNE se utiliza para recortar frecuencia de la fuente INTRC.

Tipos de Oscilador.

Hay que programar los bits de configuracin FOSC3:FOSC0, para seleccionar un modo de
estos:

XT: Cristal/Resonador cermico.
XTPLL: Cristal/Resonador cermico con PLL activo.
HS: Cristal/Resonador cermico de alta velocidad.
HSPLL: Cristal/Resonador cermico de alta velocidad con PLL activo.
EC: Reloj externo con Fosc/4 como salida en RA6.
ECIO: Reloj externo con RA6 como E/S.
ECPLL: Reloj externo con Fosc/4 como salida en RA6 y PLL activo.
ECPIO: Reloj externo con RA6 como E/S y PLL activo.
INTHS: Oscilador interno usado como reloj del microcontrolador y HS como reloj del
USB.
INTXT: Oscilador interno usado como reloj del microcontrolador y XT como reloj del
USB.
INTIO: Oscilador interno usado como reloj del microcontrolador y EC como reloj del USB
con RA6 como E/S.
INTCKO: Oscilador interno usado como reloj del microcontrolador y EC como reloj del
USB con Fosc/4 como salida en RA6.

Cristal (XTAL)/Resonadores Cermicos

En HS, HSPLL, XT y XTPLL el XTAL o el circuito resonador se conecta a los pines OSC1 y
OSC2 (figura 2.5a).

El postscaler interno permite elegir una frecuencia distinta a la del reloj de entrada. La divisin
de la frecuencia se elige con el bit de configuracin CPUDIV y se puede seleccionar a 1/1, 1/2,
1/3 1/4 de la frecuencia de entrada.

Se puede utilizar un reloj externo cuando el microcontrolador est en modo HS. En este caso el
pin OSC2/CLK0 est abierto (figura 2.5b).





23

a) b)
Figura 2.5 Operacin XTAL/resonador cermico configuracin a) XT, HS o HSPLL, b) HS

Notas: 1.- Ver tablas 2.1 y 2.2 (manual del PIC18F4550) para conocer los valores iniciales de C1 y C2.
2.- Se puede necesitar una resistencia RS con cristales de AT
3.- RF vara con el modo de oscilador seleccionado.

Seal de reloj externa

Los modos EC, ECIO, ECPLL y ECPIO requieren una seal externa de reloj conectada al pin
OCS1. No se necesita un oscilador de puesta en marcha despus de un reset o al salir del
modo sleep.

En los modos EC y ECPLL, se obtiene una seal en el pin OSC2 de la seal de reloj dividida
por 4 (figura 2.6a). Esta seal se puede usar para prueba o para sincronizar otros dispositivos.
En los modos ECIO y ECPIO el pin OSC2 (pin RA6) funciona como pin E/S (figura 2.6b).

El postscaler interno que se utiliza en los modos XT y HS se puede usar tambin en los modos
EC y ECIO.


a) b)
Figura 2.6 Operacin reloj externo configuracin a) EC y ECPLL, b) ECIO y ECPIO

Multiplicador de frecuencia PLL.

Esta familia de dispositivos incluye un circuito PLL (Paced Locked Loop). Se utiliza en
aplicaciones USB con velocidad baja de oscilacin y puede tambin ser usado como fuente de
reloj para el microcontrolador.

El PLL est activo en los modos HSPLL, XTPLL, ECPLL y ECPIO. Est diseado para producir
una seal de referencia de 96MHz de una seal de entrada de 4MHz. La salida se puede dividir
y utilizar para el USB y el reloj del microcontrolador porque el PLL tiene una seal de entrada y
salida fijas. Tiene ocho opciones de prescaler para elegir la frecuencia de entrada al PLL.

Hay un postscaler para elegir la velocidad del microcontrolador, para que el USB y el
microcontrolador tengan una entrada de reloj y funcionen a velocidades diferentes. El postscaler
tiene las opciones de 1/2, 1/3, 1/4 y 1/6 de la salida del PLL.




24
Oscilador Interno.

En la familia PIC18F4550 tienen un oscilador interno que genera dos seales diferentes;
cualquiera se puede utilizar como reloj del microcontrolador. Si el USB no est utilizado, el
oscilador interno puede eliminar el oscilador externo de los pines OSC1 y/o OSC2.

La salida principal (INTOSC) es una fuente de reloj de 8MHz que se puede utilizar para manejar
el reloj directamente. Esto tambin gobierna el postscaler de INTOSC, que puede proporcionar
un rango de frecuencias de 31kHz a 4MHz. La salida INTOSC est activa cuando se selecciona
una frecuencia de reloj de 125kHz a 8MHz.

La otra seal interna de reloj es el oscilador RC (INTRC) que da una salida nominal de 31kHz.
INTRC est activo si se selecciona como fuente de reloj; se activa automticamente cuando
alguno de los siguientes est activo:
Temporizador de encendido
Monitor de reloj de seguridad
Temporizador perro guardin
Dos velocidades de inicio.

La frecuencia (INTOSC directo, INTRC directo o INTOSC postscaler) se elige configurando el
bit IRCF del registro OSCCON. Cuando el oscilador interno funciona como reloj del
microcontrolador, uno de los otros modos (reloj externo o XTAL/resonador cermico) debe
utilizarse como reloj del USB.

Configuracin del oscilador para el USB

Cuando el PIC18F4550 se utiliza en una conexin por USB, se necesita un reloj de 6MHz
48MHz dependiendo de si se usa baja o alta velocidad. Esto se debe prever al seleccionar la
frecuencia y al programar el microcontrolador.
Cuando se selecciona operaciones con baja velocidad (USB 1.0), el reloj del USB se obtiene del
oscilador primario y no del PLL. El oscilador se divide por 4 para obtener los 6MHz en el reloj.
Por esto, el microcontrolador necesita una frecuencia de 24MHz cuando el mdulo USB est
activo y el controlador del reloj est en uno de los modos primarios del oscilador (XT, HS con o
sin PLL).

Funcionamiento diferente del reloj del USB y del microcontrolador

El mdulo USB puede funcionar de una forma asncrona con respecto al reloj del
microcontrolador y otros perifricos. Esto se puede realizar cuando el USB funciona con el
oscilador primario y el microcontrolador con un reloj distinto con menor velocidad.

Fuentes de reloj y cambios de oscilador

La familia PIC18F4550 incluye una opcin para cambiar la fuente de reloj principal a una fuente
alternativa de menor frecuencia. Cuando activamos una fuente alternativa, tenemos disponibles
varios modos de manejo/control de energa.




25
Hay tres fuentes de reloj en estos dispositivos:

Oscilador primario
Oscilador secundario
Bloque interno de oscilacin

Los osciladores primarios incluyen los XTAL, los circuitos resonadores, los modos externos de
reloj y el bloque interno de oscilacin. El modo particular se elige con los bits de configuracin
FOSC3:FOSC0.

Los osciladores secundarios son las fuentes externas que no se conectan en los pines OSC1 u
OSC2. Estas fuentes pueden seguir funcionando incluso cuando el microcontrolador se pone en
modo control de energa. Esta familia de PIC ofrece el Timer1 como oscilador secundario.
Este oscilador es, a menudo, el temporizador base en las aplicaciones basadas en tiempo real
en todos los modos de control de energa. Comnmente, se conecta un XTAL de 32,768kHz
en los pines RC0/T1OSO/TI3CKI y RC1/T10SI/UOE* junto con sus condensadores.

El bloque interno de oscilacin se puede usar como reloj en los modos control de energa. La
fuente INTRC se utiliza en varias opciones especiales como el perro guardin o el monitor del
reloj de seguridad.

Registros de control del oscilador
El registro OSCCON maneja distintos aspectos de las operaciones del reloj en todos los modos
de energa.

Transiciones del oscilador
Esta familia de dispositivos tiene un circuito para prevenir problemas del reloj cuando cambia
entre las distintas fuentes de reloj. Ocurre una pequea pausa cuando cambia la seal de reloj.
La longitud de esta pausa es la suma de dos ciclos del reloj antiguo ms tres a cuatro ciclos del
reloj nuevo. Esta formula indica cuando el reloj nuevo se hace estable.


2.5. Modos de control de energa

Los dispositivos de esta familia disponen de un total de siete modos de funcionamiento para
controlar la energa. Estos modos proporcionan una variedad de opciones para la conservacin
selectiva en las aplicaciones donde los recursos pueden ser limitados (es decir, los dispositivos
con pilas).

Existen tres categoras de modos de control de energa, que definen las porciones del
dispositivo que se utilizan y a que velocidades.

Modo ejecucin (modo normal de ejecucin).
Modo reposo (IDLE).
Modo sleep.





26
Los modos ejecucin y reposo pueden utilizar cualquiera de los tres relojes disponibles
(primario, secundario o bloque interno); el modo sleep no utiliza una fuente del reloj.

Los modos de reposo (IDLE) permiten que el regulador del CPU este apagado (el CPU no esta
ejecutando instrucciones), mientras que los perifricos continan funcionando gracias al Timer
1. Esto permite manejar mejor consumo de energa. Las salidas de este modo son: una
interrupcin, un desbordamiento del WDT o un reset. Cuando la CPU comienza a ejecutar
cdigo, se activa con la misma fuente de reloj que posee en el modo de reposo.

Para seleccionar un modo de control de energa requiere dos decisiones: si la CPU est
controlada o no y la seleccin de una fuente del reloj. El bit IDLEN (OSCCON<7>) controla la
CPU, mientras que los bits SCS1:SCS0 (OSCCON<1: 0>) seleccionan la fuente de reloj.

TABLA 1.3: MODOS DE CONTROL DE ENERGA
Modo
Bits OSCCON Modulo que controla
Fuente de reloj y oscilador disponible
IDLEN
(1)
SCS1:SCS0 CPU Perifricos
Sleep 0 N/A off off Nada los relojes estn desactivados
PRI RUN N/A 00 Clocked Clocked
Primario-todos los modos del oscilador.
Este es el modo de ejecucin normal.
SEC-RUN N/A 01 Clocked Clocked Secundario-Como oscilador los Timer
RC RUN N/A 1X Clocked Clocked Bloque interno del oscilador
(2)

PRI IDLE 1 00 Off Clocked Primario-todos los modos de oscilador
SEC_IDLE 1 01 Off Clocked Secundario-Como oscilador los Timer
RC IDLE 1 1X off Clocked Bloque interno del oscilador
(2)
Nota: 1: IDLEN devuelve este valor cuando se ha ejecutado la instruccin SLEEP.
2: Incluye INTOSC y los postscaler INTOSC as como la fuente INTRC


2.6 Reset

Los dispositivos de esta familia distinguen las siguientes clases de reset:

a) Reset por fallo de energa (POR)
b) Reset por MCLR durante la operacin normal
c) Reset de MCLR durante modos ahorro de energa
d) Reset por el perro guardin (WDT) (durante ejecucin)
e) Reset por cese de energa (BOR)
f) Instruccin RESET
g) Reset por desbordamiento la Pila
h) Reset por vaciado de la Pila

Estos dispositivos tienen un filtro antirruidos en la trayectoria del reset de MCLR que detecta y
no hace caso de pulsos pequeos. En esta familia, la entrada MCLR se puede inhabilitar con la
configuracin del bit MCLRE. Cuando MCLR est desactivado, el pin se convierte en una
entrada digital.





27

Figura 2.7. Diagrama simplificado del Reset

Registro RCON
En el registro RCON se controlan los bits de reset. Los cinco bits ms bajos del registro indican
que ha ocurrido un reset. En la mayora de los casos, estos bits se borran con el reset y se
deben activar por software despus. El estado de estas banderas se puede leer para indicar el
tipo de reset que acaba de ocurrir. El registro de RCON tambin tiene bits de control para elegir
la prioridad de la interrupcin (IPEN) y del software de control del BOR (SBOREN).

REGISTRO RCON: Registro de control de reset
R/W - 0 R/W - 1 U 0 R/W - 1 R 1 R - 1 R/W - 0 R/W 0
IPEN SBOREN - RI* TO* PD* POR* BOR*
bit 7 bit 0

bit 7 IPEN: Bit activador de la prioridad de las interrupciones

1 =Activa los niveles de prioridad de en las interrupciones.
0 =Desactiva los niveles de prioridad de en las interrupciones.
bit 6 SOBREN: Bit activador de reset por BOR
(1)
(En un reset SBOREN=1).

Si BOREN1:BOREN0=01
1 =BOR activo
0 =BOR desactivado.
Si BOREN1:BOREN0=00, 10 11.
Bit desactivado, se lee 0.




28
bit 4 RI*: Bit de la instruccin RESET

1 =No se ha ejecutado una instruccin RESET (se activa por firmware)
0 =Se ha ejecutado una instruccin RESET (se tiene que activar por software)
bit 3 TO*: Bit de desbordamiento del WDT.

1 =Se activa por reinicio, CLRWDT, o una instruccin SLEEP
0 =El WDT se ha desbordado
bit 2 PD*: Bit de deteccin de una cada de tensin

1 =Se activa por reinicio o CLRWDT
0 =Se borra por una instruccin SLEEP.
bit 1
POR*: Bit de estado de reset por subida de tensin
(2)
(el valor actual de POR* depende del
tipo de reset)

1 =No ha ocurrido (se activa por firmware)
0 =Ha ocurrido (se tiene que activar por software)
bit 0 BOR*: Bit de estado de reset por cese de energa

1 =No ha ocurrido (se activa por firmware)
0 =Ha ocurrido (se tiene que activar por software).
Nota 1: Se recomienda que el bit POR* est fijado despus de detectar el reset para poder detectar
otros resets.
2: Normalmente, cuando ocurre un reset por cese de energa BOR* es 0 y POR* 1 (suponiendo
que POR* se pone a 1 despus de un reset por subida de tensin).


Conjunto de instrucciones de rango alto.
El conjunto de instrucciones de rango alto, utilizadas para los PIC18 se compone de 75
instrucciones principales ms 8 en modo extendido (utilizadas para hacer ms eficiente los
programas de alto nivel que utilizan recursividad y el stack).
En la tabla 2.2, se muestra la descripcin de las simbologas utilizadas en la tabla 2.3 donde se
muestran las instrucciones principales de la familia del microcontrolador PIC18F4550, y en la
figura 2.8 se muestra el formato general de las instrucciones.

Tabla 2.2. Descripcin de los smbolos utilizados para las instrucciones
Field Description
a RAM access bit
a =0: RAM location in Access RAM (BSR register is ignored)
a =1: RAM bank is specified by BSR register
bbb Bit address within an 8-bit file register (O to 7).
BSR Bank Select Register. Used to select the current RAM bank.
C, DC. Z, OV, N ALU status bits: Carry, Digit Carry, Zero, Overflow, Negative.
d Destination select bit
d =0: store result in WREG
d =1: store result in lile register f
dest Destination: either the WREG register or the specified register file location.
f 8-bit register file address (00h to FFh) or 2-bit FSR designator (0h to 3h).
f s 12-bit register file address (000h to FFFh). This is the source address.
f d 12-bit register file address (000h to FFFh). This is the destination address.
GI E Global Interrupt Enable bit.
k Literal field, constant data or label (may be either an 8-bit, 12-bit or a 20-bit value).
label Label name.
mm The mode of the TBLPTR register for the table read and table write instructions.




29
Only used with table read and table write instructions:
* No change to register (such as TBLPTR with table reads and writes)
*+ Post-Increment register (such as TBLPTR with table reads and writes)
*- Post-Decrement register (such as TBLPTR with table reads and writes)
+* Pre-Increment register (such as TBLPTR with table reads and writes)
n The relative address (2's complement number) for relative branch instructions or the direct address for
Call/Branch and Retum instructions.
PC Program Counter.
PCL Program Counter Low Byte.
PCH Program Counter High Byte.
PCLAT

Program Counter High Byte Latch.
PCLAT

Program Counter Upper Byte Latch.
PD Power-Down bit.
PRODH Product of Multiply High Byte.
PRODL Product of Multiply Low Byte.
s Fast Call/Retum mode select bit
s =0: do not update into/from shadow registers
s =1: certain registers loaded into/from shadow registers (Fast mode)
TBLPT

21-bit Table Pointer (points to a program memory location).
TABLA

8-bit Table Latch.
TO Time-out bit
TOS Top-of-Stack.
u Unused or unchanged.
WDT Watchdog Timer.
WREG Working register (accumulator).
x
Don't care ('0' or '1'). The assembler will generate code with x =0. It is the recommended forrn of use
for
compatibility with all Microchip software tools.
Zs 7-bit offset value for indirect addressing of register files (source).
Zd 7-bit offset value for indirect addressing of register files (destination).
{ } Optional argument
[textl Indicates an indexed address.
(text) The contents of texto
[expr] <n> Specifies bit n of the register indicated by the pointer expr .
Assigned to.
< > Register bit field.
E In the set of.
italics User defined terrn (font is Courier).


Tabla 2.3 Instrucciones principales de la familia del PIC18F4550
Mnemonic, 16-Bit Instruction Word Status
Operands
Description Cycles
Affected
Notes

MSb lSb
BYTE-ORIENTED OPERATIONS
ADDWF f, d, a Add WREG and f 1 0010 Ol da ffff ffff C, DC, Z, OV, N 1,2
ADDWFC f, d, a Add WREG and Carry bit to f 1 0010 OOda ffff ffff C, DC, Z, OV, N 1,2
ANDWF f, d, a AND WREG with f 1 0001 Ol da ffff ffff Z,N 1,2
CLRF f, a Clear f 1 0110 101a ffff ffff Z 2
COMF f, d, a Complement f 1 0001 l l da ffff ffff Z,N 1,2
CPFSEQ f, a Compare f with WREG, skip = 1 (2 or 3) 0110 OOl a ffff ffff None 4
CPFSGT f, a Compare f with WREG, skip > 1 (2 or 3) 0110 Ol Oa ffff ffff None 4
CPFSLT f, a Compare f with WREG, skip < 1 (2 or 3) 0110 OOOa ffff ffff None 1,2
DECF f, d, a Decrement f 1 0000 Ol da ffff ffff C, DC, Z, OV, N 1,2,3,4
DECFSZ f, d, a Decrement f, Skip if 0 1 (2 or 3) 0010 l l da ffff ffff None 1,2,3,4
DCFSNZ f, d, a Decrement f, Skip if Not 0 1 (2 or 3) 0100 l l da ffff ffff None 1,2




30
INCF f, d, a Increment f 1 0010 10da ffff ffff C, DC, Z, OV, N 1,2,3,4
INCFSZ f, d, a Increment f, Skip if 0 1 (2 or 3) 0011 l l da ffff ffff None 4
INFSNZ f, d, a Increment f, Skip if Not 0 1 (2 or 3) 0100 10da ffff ffff None 1,2
IORWF f, d, a Inclusive OR WREG with f 1 0001 OOda ffff ffff Z,N 1,2
MOVF f, d, a Move f 1 0101 OOda ffff ffff Z,N 1
MOVFF fs, fd Move fs (source) to 1st word 2 1100 ffff ffff ffff None

fd (destination) 2nd word 1111 ffff ffff ffff
MOVWF f, a Move WREG to f 1 0110 l I l a ffff ffff None
MULWF f, a Multiply WREG with f 1 0000 OOl a ffff ffff None 1,2
NEGF f, a Negate f 1 0110 110a ffff ffff C, DC, Z, OV, N
RLCF f, d, a Rolate Left f through Carry 1 0011 Ol da ffff ffff C,Z,N 1,2
RLNCF f, d, a Rotate Left f (No Carry) 1 0100 Ol da ffff ffff Z,N
RRCF f, d, a Rotate Right f through Carry 1 0011 OOda ffff ffff C,Z,N
RRNCF f, d, a Rolate Right f (No Carry) 1 0100 OOda ffff ffff Z,N
SETF f, a Setf 1 0110 100a ffff ffff None 1,2
SUBFWB f, d, a Subtract f from WREG with 1 0101 Ol da ffff ffff C, DC, Z, OV, N

borrow
SUBWF f, d, a Subtract WREG from f 1 0101 l l da ffff ffff C, De, Z, OV, N 1,2
SUBWFB f, d, a Subtract WREG from f with 1 0101 10da ffff ffff C, DC, Z, OV, N

borrow
SWAPF f, d, a Swap nibbles in f 1 0011 10da ffff ffff None 4
TSTFSZ f, a Test f, skip if 0 1 (2 or 3) 0110 Ol l a ffff ffff None 1,2
XORWF f, d, a Exclusive OR WREG with f 1 0001 10da ffff ffff Z,N


Mnemonic,
16-Bit Instruction Word
Status

Description Cycles Notes
Operands MSb LSb Affected
BIT-ORIENTED OPERATIONS
BCF f, b, a Bit Clear f 1 1001 bbba f f f f f f f f None 1,2
BSF f, b, a Bit Set f 1 1000 bbba f f f f f f f f None 1,2
BTFSC f, b, a Bit Test f, Skip if Clear 1 (2 or 3) 1011 bbba f f f f f f f f None 3,4
BTFSS f, b, a Bit Test f, Skip if Set 1 (2 or 3) 1010 bbba f f f f f f f f None 3,4
BTG f, d, a Bit Toggle f 1 0111 bbba f f f f f f f f None 1,2
CONTROL OPERATIONS
BC n Branch if Carry 1 (2) 1110 0010 nnnn nnnn None
BN n Branch if Negative 1 (2) 1110 0110 nnnn nnnn None
BNC n Branch if Not Carry 1 (2) 1110 0011 nnnn nnnn None
BNN n Branch if Not Negative 1 (2) 1110 0111 nnnn nnnn None
BNOV n Branch if Not Overflow 1 (2) 1110 0101 nnnn nnnn None
BNZ n Branch if Not Zero 1 (2) 1110 0001 nnnn nnnn None
BOV n Branch if Overflow 1 (2) 1110 0100 nnnn nnnn None
BRA n Branch Unconditionally 2 1101 Onnn nnnn nnnn None
BZ n Branch if Zero 1 (2) 1110 0000 nnnn nnnn None
CALL n,s Call subroutine 1st word 2 1110 110s kkkk kkkk None

2nd word 1111 kkkk kkkk kkkk
CLRWDT
-
Clear Watchdog Timer 1 0000 0000 0000 0100 TO, PD
DAW - Decimal Adjust WREG 1 0000 0000 0000 0111 C
GOTO n Go to address 1st word 2 1110 1111 kkkk kkkk None

2nd word 1111 kkkk kkkk kkkk
NOP - No Operation 1 0000 0000 0000 0000 None
NOP
-
No Operation 1 1111 xxxx xxxx xxxx None 4
POP - Pop top of retum stack (TOS) 1 0000 0000 0000 0110 None
PUSH - Push top of retum stack (TOS) 1 0000 0000 0000 0101 None
RCALL n Relative Call 2 1101 l nnn nnnn nnnn None
RESET Software device Reset 1 0000 0000 1111 1111 Al!
RETFIE s Retum from interrupt enable 2 0000 0000 0001 OOOs GIE/GIEH,

PEIE/GIEL
RETLW k Retum with literal in WREG 2 0000 1100 kkkk kkkk None
RETURN s Retum from Subroutine 2 0000 0000 0001 001s None
SLEEP - Go into Standby mode 1 0000 0000 0000 0011 TO, PD




31
Mnemonic, 16-Bit Instruction Word Status
Operands
Description Cycles
Affected
Notes

MSb LSb
LITERAL OPERATIONS
ADDLW k Add literal and WREG 1 0000 1111 kkkk kkkk C, DC, Z, OV, N
ANDLW k AND literal with WREG 1 0000 1011 kkkk kkkk Z,N
IORLW k Inclusive OR literal with WREG 1 0000 1001 kkkk kkkk Z,N
LFSR f, k Move literal (12-bit) 2nd word 2 1110 1110 OOf f kkkk None

to FSR(f) 1st word 1111 0000 kkkk kkkk
MOVLB k Move literal to BSR<3:0> 1 0000 0001 0000 kkkk None
MOVLW k Move literal to WREG 1 0000 1110 kkkk kkkk None
MULLW k Multiply literal with WREG 1 0000 1101 kkkk kkkk None
RETLW k Retum with literal in WREG 2 0000 1100 kkkk kkkk None
SUBLW k Subtract WREG from literal 1 0000 1000 kkkk kkkk C, DC, Z, OV, N
XORLW k Exclusive OR literal with WREG 1 0000 1010 kkkk kkkk Z,N
DATA MEMORY PROGRAM MEMORY OPERATIONS
TBLRD* Table Read 2 0000 0000 0000 1000 None
TBLRD*+ Table Read with post-increment 0000 0000 0000 1001 None
TBLRD*- Table Read with post-decrement 0000 0000 0000 1010 None
TBLRD+* Table Read with pre-increment 0000 0000 0000 1011 None
TBLWT* Table Write 2 0000 0000 0000 1100 None
TBLWT*+ Table Write with post-increment 0000 0000 0000 1101 None
TBLWT*- Table Write with post-decrement 0000 0000 0000 1110 None
TBLWT+* Table Write with pre-increment 0000 0000 0000 1111 None
Note 1: When a Port register is modified as a function of itself (e.g., MOVF PORTB, 1, O), the value used will be that value present on
the pins themselves. For example, if the data latch is '1' for a pin configured as input and is driven low by an extemal device,
the data will be written back with a 'O'.
2: If this inslruction is executed on the TMR0 register (and where applicable, 'd =1), the prescaler will be cleared if assigned.
3: If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is
executed as a NOP.
4: Some instructions are two-word instructions. The second word of these inslructions will be executed as a NOP unless the first
word of the instruction retrieves Ihe information embedded in these 16 bits. This ensures that all program memory locations
have a valid instruction.










32

Figura 2.8. Formato general de las instrucciones

En la seccin 26 del manual de PIC18F4550 (Instruction Set Summary) se pueden ver estas
ms detales de estas instrucciones.






33
2.8. Organizacin de la memoria

El PIC18F4550 dispone de las siguientes memorias:

Memoria de Programa:
o Almacena instrucciones y constantes/datos.
memoria flash interna de 32, 768 byte.
o Puede ser escrita/leda mediante un programador externo o durante la ejecucin
programa mediante unos punteros.

Memoria RAM de datos:
o Almacena datos de forma temporal durante la ejecucin del programa.
memoria SRAM interna de 2048 bytes en la que estn incluidos
los registros de funcin especial.
o Puede ser escrita/leda en tiempo de ejecucin mediante diversas instrucciones.

Memora EEPROM de datos:
o Almacena datos que se deben conservar aun en ausencia de alimentacin del micro.
memoria no voltil de 256 bytes.
o Puede ser escrita/leda en tiempo de ejecucin a travs de registros.

Pila o Stack:
o Almacena la direccin de la instruccin que debe ser ejecutada despus de una
interrupcin o subrutina.
bloque de 31 palabras de 21 bits.

Memoria de configuracin:

Arquitectura Harvard.
El PIC18F4550 dispone de arquitectura tipo Harvard (figura 2.9). Ambos buses son totalmente
independientes y de distintos anchos:

memoria en la que se incluyen los bits de configuracin (12
bytes de memoria flash) y los registros de identificacin (2 bytes de memoria de solo
lectura).
o Bus de la memoria de programa:
- 21 lneas de direccin
- 16/8 lneas de datos (16 lneas para instrucciones/8 lneas para datos)

o Bus de la memoria:
- 12 lneas de direccin.
- 8 lneas de datos.


Memoria de
instrucciones
CPU
Bus de
instrucciones
Memoria
de datos
Bus de datos

Figura 2.9 Arquitectura Harvard
Adems, como los buses son independientes, el CPU puede estar ejecutando una instruccin
(por lo general requiere acceso a memoria de datos) mientras se lee de la memoria de
programa la siguiente instruccin (proceso pipeline).




34


Por lo tanto la ejecucin completa de 1 instruccin (lectura instruccin +ejecucin) se hace en
1 ciclo de instruccin (4 T
OSC
). Excepcin: las instrucciones de salto que modifican el
PC requieren 2 ciclos de instruccin al no conocer la direccin de la siguiente
instruccin hasta que no se haya completado la de bifurcacin.



El PIC18F4550 dispone una memoria
de programa tipo flash de 32, 768
bytes (0000H 7FFFH). Las
instrucciones ocupan 2 bytes (excepto
CALL, MOVFF, GOTO y LSR que
ocupan 4 bytes). Por lo tanto la
memoria de programa puede
almacenar hasta 16,384 instrucciones.
de Programa.

La operacin de lectura por encima de
7FFFH da 0 como resultado
(equivalente a la instruccin NOP).

Los dispositivos PIC18 tienen las
siguientes direcciones de memoria
especiales:

Vector del Reset en la
direccin 0000H.

Vector de las interrupciones
de alta prioridad en la
direccin 0008H.

Vector de las interrupciones
de baja prioridad en la
direccin 0018H.









35
2.9. Almacenamiento de instrucciones en la memoria de programa.

A la memoria de programa se dirige en bytes. Las instrucciones se almacenan en dos o cuatro
bytes en la memoria de programa. Primero se almacena la parte baja de la instruccin y luego
la parte alta para las instrucciones de dos bytes. Para las instrucciones de dos palabras (cuatro
bytes) primero los bytes menos significativos y luego
los ms significativos, en estos casos, los 12 bits
menos significativos son los datos literales de la
instruccin y los 4 bits ms significativos son siempre
1111.

Para mantener la alineacin con lmites de la
instruccin, las instrucciones siempre comienzan en
direcciones pares.
El valor almacenado en una instruccin de brinco
representa el nmero de instrucciones de una
palabra que el PC brincar.


2.10. Contador de programa PC

El contador de programa (PC) es un puntero de 21 bits capas de seleccionar hasta 2 Mb de
memoria de programa, est puntero indica la direccin en memoria de programa de la
instruccin que se debe ejecutar. El PC esta separados en tres registros de 8bits.

PCU: parte superior del PC (bits <20:16>del PC), registro no directamente accesible; las
operaciones de lectura/escritura sobre este registro se hacen a travs del registro
PCLATU.

PCH: parte alta del PC (bits <15:8> del PC), registro no directamente accesible; las
operaciones de lectura/escritura sobre este registro se hacen a travs del registro
PCLATH.

PCL: parte baja del PC, registro directamente accesible. Una operacin de lectura sobre
el PCL provoca que los valores de PCU y PCH pasen a PCLATU y PCLATH
respectivamente. Y una operacin de escritura sobre el PCL provoca que los valores de
PCLATU y PCLATH pasen a PCU y PCH respectivamente. El PLC siempre tiene el bit
menos significativo a 0, debido a que las instrucciones siempre empiezan en direcciones
pares.





36
La direccin de la PILA.
La pila es un bloque de memoria RAM independiente de 31 palabras de 21 bits, que sirve para
almacenar temporalmente el valor del PC cuando se produce una llamada a subrutina o una
interrupcin.

El puntero de la pila (contenido en el registro STKPTR) es un contador de 5 bit que indica la
posicin actual del final de la pila. El contenido del final de la pila es accesible mediante los
registros TOSU, TOSH, TOSL.

Cuando se procesa una interrupcin o se ejecutan las instrucciones CALL o RCALL (el PC est
apuntando a la siguiente instruccin) se incrementa el STKPR y se almacena en el final de la
pila el valor del PC.

Cuando se ejecutan las instrucciones RETURN, RETLW o RETFIE se copia el valor
almacenado en la cima de la pila en el PC y se decrementa el STKPTR.



REGISTRO STKPTR: Registro del stack pointer
R/C - 0 R/C 0 U - 0 R/W - 0 R/W 0 R/W - 0 R/W 0 R/W 0
STKFUL STKUNF
-
SP4 SP3 SP2 SP1 SP0
bit 7 bit 0

bit 7 STKFUL: Bit sealizador del llenado de la pila: (Borrado por software)

1=Se ha producido el llenado o desbordamiento de la pila.
0 =No se ha producido el llenado o desbordamiento de la pila.
bit 6 STKUNF: Bit sealizador del vaciado de la pila, (Borrado por software)

1=Se ha producido el desbordamiento por vaciado de la pila (undeflow)
0=No se ha producido el desbordamiento por vaciado de la pila (undeflow)
bit 4 0 SP4:SP0: Puntero de la pila. Estos 5 bits indican la posicin final de la pila (valor de o a 31).

Reset por llenado/underflow de la pila.
Los reset por desbordamiento y por underflow de la pila se activan activando el bit STVREN del
registro de configuracin 4L. Cuando se activa STVREN, un llenado o vaciado de la pila activar
el bit apropiado STKFUL o STKUNF y despus har un reset del microcontrolador. Cuando
STVREN est borrado, al llenar o vaciar la pila se activar el bit apropiado STKFUL o STKUNF
pero no se resetear el dispositivo y si se producen nuevos almacenamientos no afectarn a la
pila. Los bits STKFUL o STKUNF se borran por software o en un reinicio





37
Lectura y escritura del ltimo valor de la pila.
El ltimo valor de la pila (apuntado por el registro STKPTR) es accesible para lectura y
escritura. El PIC18 incluye dos instrucciones, PUSH y POP, que permiten poner el valor actual
del PC en la pila y colocar el valor actual de la TOS (TOSU, TOSH y TOSL) en el PC,
respectivamente.

Pila de almacenamiento rpido
Se trata de una pila de un solo nivel en la que se apilan los valores del registro de estado W y
del registro BSR cada vez que se produce una interrupcin. Estos valores pueden ser
recuperados si al salir de la interrupcin se utiliza la instruccin RETFIE, FAST. Si estn
habilitadas las interrupciones de baja y alta prioridad, esta pila no debe ser utilizada en
interrupciones de baja prioridad. Si no hay interrupciones habilitadas esta pila puede ser
utilizada para restaurar los registros estado, W y BSR al final de una llamada de una subrutina.
Para utilizar la pila de almacenamiento rpido en una llamada de un subprograma, hay que usar
una instruccin CALL LABEL, FAST donde LABEL es el nombre de la subrutina se debe utilizar
para guardar los registros de estado, W y BSR en la pila de almacenamiento rpido. Para
restaurar estos registros hay que utilizar una instruccin RETURN, FAST.

CALL SUB1, FAST ; Se guardan en el registro de la pila de acceso rpido los
; registros de estado WREG y BSR
..
..
SUB1 ..
..
RETURN, FAST ; Devuelve los valores guardados en la pila de
; acceso rpido


2.11. Organizacin de la Memoria de Datos

El microcontrolador PIC18F4550 dispone de una memoria RAM esttica de 2,048 datos. La
memoria se divide en 8 bancos que contienen 256 bytes cada uno.

La memoria de datos contiene 160 bytes de registros de funcin especial (SFRs) situados en la
parte alta del banco 15 y los registros de propsito generales (GPRs). Los SFRs se utilizan para
el control y estado de las funciones de control y perifricas del micro, mientras que los GPRs se
utilizan para el almacenaje de datos y las operaciones de almacenamiento en las aplicaciones
del usuario. Cuando se lee una localizacin no implementada aparecern 0s.

Para acceder a un byte de la memoria RAM de datos primero se debe seleccionarse el banco
(BSR) y a continuacin direccionar el byte dentro del banco. Adems existe una modalidad de
acceso rpido a las 96 posiciones de la parte baja del banco 0 (00H 5FH) y a los 160 bytes de
SFRs (60H FFH) sin usar BSR (banco de acceso rpido). Los bancos 4 al 7 se asignan como
RAM de almacenamiento intermedio para las operaciones del USB cuando este esta habilitado.
Los bancos del 8 al 14 no estn implementados se leen como 0s.





38


Mapa de memoria de datos.




39
2.12. Registros de funcin especial (SFR).
Los registros de funcin especfica (SFRs) son registros mediante los cuales se puede
monitorear/controlar el funcionamiento de las CPU y de las unidades funcionales del
microcontrolador. Estos registros ocupan el segmento superior del banco 15, de F60H a FFFH.
Los SFRs se pueden clasificar en dos conjuntos: los asociados a la funcionalidad del ncleo
del microcontrolador (CPU: WREG, STATUS, BSR, etc., Interrupciones: INCONT, PIE1, PIR1
etc., Reset: RCON) y los relacionados con las funciones de los perifricos (Timers: T0CON,
TMR1H, TMR1L, etc., Convertidor A/D: ADRESH, ADRESL etc.)
Los SFRs se distribuyen por las funciones los perifricos que controlan. Las localizaciones de
SFR no utilizadas no estn implementadas y se leen como 0.

TABLA 1.4: Mapa de los registros de funcin especfica

Nota: 1: No es un registro fsico.
2: Registros no implementados se leen como 0.
3: Estos registros se implementan el los micros de 40/44 pines.
(Ms informacin de los registros ver el manual del PIC18F4550 seccin 5.3.5 tabla 5.1 y 5.2).




40

Registro de Estado STATUS

El registro STATUS, contiene el estado aritmtico de la ALU. Como con cualquier otro SFR, se
puede modificar con cualquier instruccin.

REGISTRO STATUS: Registro estado
U 0 U - 0 U - 0 R/W - x R/W x R/W x R/W - x R/W x
- - - N OV Z DC C
bit 7 bit 0


bit 4
N: Bit de valor negativo.
Bit utilizado para operaciones con signo (complemento a 2). Indica cuando el
resultado ha asido negativo

1=Resultado de la ultima operacin negativo (MSB a 1)
0=Resultado de la ultima operacin positivo (MSB a 0)
bit 3
OV: Bit de desbordamiento (overflow).
Bit utilizado para operaciones con signo (complemento a 2). Indica si se ha
producido un desbordamiento del 7
0
bit, es decir si se ha producido algn cambio
en el bit 7 del resultado.

1=Se ha producido un desbordamiento en la operacin aritmtica
0=No se ha producido un desbordamiento en la operacin aritmtica
bit 2
Z: Bits de cero

1=El resultado de una operacin aritmtica o lgica ha sido 0.
0=El resultado de una operacin aritmtica o lgica ha sido diferente de 0.
bit 1
DC: Dgito de acarreo/prstamo*.
Nota: En prstamo (BORROW*), se invierte la polaridad. Una substraccin es
ejecutada por adicin en complemento a dos del segundo operando. En las
instrucciones de rotar (RRF, RLF), este bit se carga con el bit 3 del registro fuente.

Con las instrucciones ADDWF, ADDLW, SUBLW y SUBWF
1=Se ha producido acarreo del 3
0
bit.
0=No se ha producido acarreo del 4
0
bit.
bit 0
C: Dgito de acarreo/prstamo*.
Nota: En prstamo (BORROW*), se invierte la polaridad. Una substraccin es
ejecutada por adicin en complemento a dos del segundo operando. En las
instrucciones de rotar (RRF, RLF), este bit se carga con el bit MSB LSB del registro
fuente.

Con las instrucciones ADDWF, ADDLW, SUBLW y SUBWF
1=Se ha producido acarreo del 7
0
bit.
0=No se ha producido acarreo del 7
0
bit.







41
2.13. Acceso a la memoria RAM de datos.

La instruccin MOVFF op1,op2 permite acceder directamente
a cualquier posicin de la memoria RAM de datos ya
incorpora los 12 bits de la direccin de los dos operandos (es
una instruccin de 2 word de 16 bits). Por ejemplo:

MOVFF 0x011, 0x120



El resto de instrucciones que permiten acceder a la memoria RAM de datos incorporan un
modificador a que establece el modo de acceso:

Si a =1: se accede a la totalidad de la memoria mediante el BSR. Mediante los 4 bits
menos significativos del BSR se selecciona el banco y mediante el operado de la
instruccin se indica el byte del banco seleccionado que se quiere acceder. La instruccin
MOVLB permite escribir directamente en el BSR el valor del banco a seleccionar (los bits
BSR[7..4]) no son considerados y se leen siempre como 0).

MOVLW 0xB4 ; 0xB4 en WREG.
MOVLB .1 ; Banco de registro 1.
MOVWF 0x21, 1 ; Pasa el contenido del
WREG a la posicin 21H
utilizando el BSR, a=1 (banco 1).

Si a =0: se ignora el BSR y se accede al banco
de acceso rpido compuesto por los primeros 96
bytes del banco 0 y los 160 bytes de los SFRs. Este mtodo permite acceder a dichos
bytes con una sola instruccin sin necesidad de seleccionar previamente el banco.

MOVLW 0x74 ; 0x74 en WREG.
MOVWF 0x6, 0 ; Pasa el contenido del
WREG a la posicin 06H sin
utilizar el BSR, a=0 (banco 0)




2.14. Modos de direccionamiento de los datos

El modo de direccionamiento es la forma en la que se obtienen el o los datos que van a ser
utilizados en la instruccin. Existen 4 modos de direccionamiento: Inherente, Literal, Directo, e
Indirecto
Hay otro modo de direccionamiento, indexacin del literal compensado, est disponible cuando
se permiten las instrucciones extendidas (configuracin del bit XINST=1).

10H 12H 10H 12H
11H 22H 11H 22H
12H AFH 12H AFH

120H 3BH 120H 22H
121H 65H 121H 65H


120H 3EH 120H 3EH
121H 15H 121H B4H
122H FFH 122H FFH

FE8H 3BH FE8H 3BH
WREG FE9H B4H FE9H B4H


05H C7H 05H C7H
06H 80H 06H 7AH
07H FFH 07H FFH

FE8H 38H FE8H 38H
WREG FE9H 7AH FE9H 7AH





42
Modo de direccionamiento inherente.
En este modo, las instrucciones no tienen operando o el operando viene especificado en el
propio cdigo de operacin de la instruccin, (no necesitan todos los argumentos); pueden
realizan una operacin global, que afecte al dispositivo a funcionar implcitamente en un
registro. Los ejemplos incluyen RESET (realiza un reset por software, los operandos son todos
los registros afectados por el reset), DAW (ajuste decimal del acumulador, el operando es el
acumulador, formato BCD), NOP (no realiza ninguna operacin, no hay operando).

Modo de direccionamiento literal
En este modo, el valor del operando viene indicado en forma explicita adicional en la instruccin
(requieren un cierto valor literal como argumento). Los ejemplos incluyen ADDLW y MOVLW,
(que respectivamente, suman o mueven un valor literal (operando) al registro W), CALL y
GOTO (saltos a una direccin especifica operando).

Modo de direccionamiento directo.
En este modo, la direccin en la que se encuentra el valor del operando viene indicada de forma
explicita en la instruccin. Los operandos pueden ser un byte o un bit.

Las operaciones del tipo byte se usan mediante la instruccin MOVFF en este caso la seleccin
del banco BSR se ignora, Mediante la combinacin de la seleccin del banco con BRS a=1 y
mediante el banco de acceso rpido a=0. Estas operaciones fueron mostradas en la
sub_seccin anterior de Acceso a la memoria del tipo RAM.

El destino de los resultados de la operacin se determina por el bit de destino d. Cuando el d
es 1, los resultados se almacenan en el registro fuente, sobrescribiendo su original contenido.
Cuando el d el 0, los resultados se almacenan dentro del registro W. Las instrucciones sin la
d tienen un destino implcito en la instruccin; su destino es cualquier registro del blanco que
funciona o el registro W.

Las operaciones del tipo bit

en este caso en la instruccin se especifica el registro en el que se
encuentra el bit y luego la posicin del bit dentro del registro.

MOVLB .2
BSF 0x31, 6

b7 b6 b5 b4 B3 b2 b1 b0 b7 b6 b5 b4 B3 b2 b1 b0
230H 0 1 1 0 1 0 1 1 230H 0 1 1 0 1 0 1 1
231H 0 0 0 0 0 0 1 0 231H 0 1 0 0 0 0 1 0
232H 1 1 0 1 1 1 0 1 232H 1 1 0 1 1 1 0 1


Para facilitar las tareas de programacin, en el lenguaje ensamblador los valores numricos que
corresponden a datos literales o a direcciones de memoria se representan mediante etiquetas.
VAR1 EQU 0x10
CTE1 EQU .24
.
.
MOVLW CTE1
MOVWF VAR1, 0




43
Modo de direccionamiento indirecto.
Este modo, permite que el usuario tenga acceso a una localizacin en la memoria de datos sin
dar una direccin fija en la instruccin. La direccin de memoria en la que se encuentra el dato
viene especificado en uno de los registros selectores del archivo FSR0, FSR1 y FSR2. Para
acceder al valor se debe escribir la direccin del dato (12 bits) en el registro FSRx (FSRxH[3..0]
y FSRxL[3..]) y se lee/escribe el dato en el registro INDFx. Esto hace que los FSRs sean muy
tiles en estructuras de datos, tales como tablas y rdenes en memoria de datos.

Registro de seleccin de registro
Memoria RAM de datos
Operando de
Registro Indirecto

23H 020EH
3FH 020FH
67H 0210H
02H 10H 23H 0211H 67H
FSRH0 FSRL0 C4H 0212H INDF0
21H 0213H
15H 0214H

Los registros INDFx son registros virtuales, aunque tienen una direccin asignada en la zona de
SRFs, fsicamente corresponden con la direccin de memoria apuntada por el correspondiente
FSRx. Adems de los operandos INDFx existen otros registros virtuales que permiten acceder
el dato apuntado por los registros FSRx, permitiendo operaciones adicionales:

POSTDEC0, POSTDEC1, POSTDEC2: al acceder a un registro POSTDECx se accede
a la posicin de memoria apuntada por el FSRx correspondiente y a continuacin se
decrementa en 1 el valor de dicho FSRx.
POSTINC0, POSTINC1, POSTINC: al acceder a un registro POSTINCx se accede a la
posicin de memoria apuntada por el FSRx correspondiente y a continuacin se incrementa en
1 el valor de dicho FSRx.
PREINC0, PREINC1, PREINC2: al acceder a un registro PREINCx se incrementa el
valor del FSRx correspondiente en 1y a continuacin, se accede a la posicin de memoria
apuntada por el nuevo valor del FSRx.
PLUSW0, PLUSW1, PLUSW2: al acceder a un registro PLUSWx se accede a la
direccin de memoria RAM formada por la suma del valor del registro FSRx y del acumulador
WREG (se considera en valor de WREG con signo [-127 a 128]). En este caso el valor del FSRx
no se modifica.

La lectura de los registros virtuales (INDFx, POSDECx, POSTINCx, PREINCx) mediante
direccionamiento indirecto da por resultado 0x00. La escritura de los registros virtuales
mediante direccionamiento indirecto da por resultado un NOP.
Nota: No se debe modificar los valores de los FSRx`s mediante direccionamiento indirecto; se
debe acceder a estos registros siempre mediante direccionamiento directo,

Ejemplo borrar el banco 1 (RAM) utilizando el direccionamiento indirecto.
LFSR FSR0, 100H
NEXO CLRF POSTINC0 ; borra el registro INDF e incrementa el puntero
BTFSS FSR0H, 1 ; Todo el banco 1 en blanco?
BRA NEXO ; No, borra el siguiente
CONTINUA ; Si, contina




44
2.15. Memoria EEPROM de datos.

El PIC18F4550 dispone una memoria EEPORM de datos de 256 bytes. Al ser una memoria no
voltil los datos almacenados en ella se mantienen aun en ausencia de tensin de alimentacin.
El acceso a esta memoria se realiza mediante los SFR`s: EECON1, EECON2, EEDATA,
EEADR.

Esta memoria permite hasta 1, 000, 000 de ciclos de borrado/escritura. Se puede leer/escribir
de forma individual en cada una de las 256 posiciones de memoria.

Cuando se realiza una operacin de escritura la circuiteria interna del microcontrolador se
encarga de borrar previamente la posicin en la que se desea escribir. La duracin de un ciclo
completo de borrado/escritura de un byte en la memoria EEPROM suele ser de unos 4 ms.

REGISTRO EECON1: Registro de control de los datos de la EEPROM
L/R - x L/R x - 0 L/E - 0 L/E - x L/E - 0 L/S - 0 L/S - 0
EEPGD CFGS
-
FREE WRERR WREN WR RD
bit 7 bit 0

bit 7 EEPGD: Bit de seleccin de acceso a la memoria Flash o de la EEPROM

1 =Acceso a memoria de programa flash
0 =Acceso a memoria de datos EEPROM
bit 6 CFGS: Bit de selector de Flash/EEPROM o configuracin

1 =Acceso a los registros de configuracin de la memoria Flash
0 =Acceso a la memoria Flash de programa o EEPROM de datos
bit 4 FREE: Bit de borrado serie de la flash

1 =Borra la memoria de programa con direccionamiento serie con TBLPTR en el prximo
comando WR. (Se borra al completar la operacin de borrado)
0 =Slo escritura
bit 3 WRERR: Flag de error de escritura de la memoria Flash/EEPROM
(1)

1 =Una operacin de escritura ha terminado bruscamente en la Flash/EEPROM
0 =La operacin de escritura se ha completado correctamente en la Flash/EEPROM
bit 2 WREN: Bit de habilitacin de la operacin de escritura en la Flash/EEPROM

1 =Habilita escritura en la Flash/EEPROM
0 =Deshabilita escritura en la Flash/EEPROM
bit 1 WR: Bit de control de la escritura en la Flash/EEPROM

1 =Inicia una operacin de borrado/escritura en la EEPROM o en la memoria de programa
Flash. (El bit se borra por hardware despus del ciclo)
0 =Ha completado la operacin de escritura en la Flash/EEPROM
bit 0 RD: Bit de control de lectura en la memoria EEPROM

1 =Inicia una lectura en la EEPROM. Se borra por hardware, no se puede activar cuando
EEPGD=1 o CFGS=1
0 =No se inicia una operacin de lectura de la EEPROM
Nota 1: Cuando ocurre un WRERR, los bits EEPGD y CFGS no se borran. Esto permite
determinar la condicin de error.






45
1. Poner a 0 el bit CFGS del registro EECON1 (CFGS =0 acceso a la memoria EEPROM
o a la memoria Flash de programa).
Operacin de lectura en al memoria EEPROM.
El proceso de lectura en la memoria EEPROM es el siguiente:
2. Poner a 0 el bit EEPGD del registro EECON1 (EEPGD = 0 acceso a la memoria
EEPROM).
3. Escribir la direccin del dato que se quiere leer en el registro EEADR.
4. Poner a 1 el bit RD del registro EECON1. Esto iniciar el proceso de lectura.
En el siguiente ciclo de instruccin el dato estar disponible en el registro EEDATA. El bit RD se
pone por hardware a 0 cuando el proceso de lectura.

BCF EECON1, CFGS ; Se activa acceso a la memoria EEPROM.
BCF EECON1, EEPGD ; Puntero a la memoria de datos
MOVLW . .2 ; Se selecciona la direccin de la memoria a leer.
MOVWF EEADR ; Bits bajos de la direccin de memoria a leer
BSF EECON1, RD ; Orden de lectura en EEPROM.
MOVF EEDATA, W ; El dato ledo se carga en el acumulador (W=EEDATA).

1. Poner a 0 el bit CFGS del registro EECON1 (CFGS =0 acceso a la memoria EEPROM
o a la memoria Flash de programa).
Operacin de escritura en la memoria EEPROM.
El proceso de escritura en la memoria EEPROM es el siguiente:
2. Poner a 0 el bit EEPGD del registro EECON1 (EEPGD = 0 acceso a la memoria
EEPROM).
3. Escribir la direccin en la que se desea escribir en el registro EEADR.
4. Escribir el dato que se desea grabar en memoria en el registro EEDATA.
5. Poner a 1 el bit WREN del registro EECON1 para habilitar la escritura.
6. Deshabilitar las interrupciones (bit GIE a 0). Este paso es necesario para que la
secuencia de los pasos 7 y 8 no se vea interrumpida.
7. Escribir sucesivamente los valores 55H y AAH en el registro virtual EECON2. (lecturas
de este registro se ven como 0s)
8. Poner a 1 el bit WR del registro EECON1. Esto iniciara el proceso de escritura que
suele tardar unos 4 ms.
9. Habilitar las interrupciones (bit GIE a 1).

Cuando concluye el proceso de escritura, el bit WR se pone a 0 por hardware y la bandera de
interrupcin EEIF se pone a 1. El usuario debe detectar el final del proceso de escritura
mediante interrupcin o mediante poleo y poner a 0 el bit WREN para deshabilitar la escritura
en la EEPROM.

BCF EECON1, CFGS ; Activa el acceso a la EEPROM.
BCF EECON1, EEPGD ; Activa el acceso a la EEPROM.
; Puntero a la memoria de datos.
MOVLW .8 ; Selecciona la direccin 8 de la memoria EEPROM.
MOVWF EEADR ; de memoria en la que se quiere escribir.
MOVLW 0x4F ; Escribe en EEDATA.




46
MOVWF EEDATA ; el valor que se desea escribir (dato 0x4F).
BSF EECON1, WREN ; Habilita escritura WR.
BCF INTCON, GIE ; Deshabilita interrupciones para evitar
; interrumpir la secuencia.
MOVLW 55H ; Escribe 55H.
MOVWF EECON2 ; en el registro virtual EECON2.
MOVLW 0AAH ; Escribe AAH
MOVWF EECON2 ; en el registro virtual EECON2.
BSF EECON1, WR ; inicia el proceso de escritura.
BSF INTCON, GIE ; Una vez acabada la secuencia se vuelven
; a habilitar las interrupciones.

; Ciclo de espera de terminacin de escritura de la EEPROM
;o algn cdigo de usuario hasta que el bit WR =0.
espera BTFSC EECON1,WR ;espera a que termine la escritura
GOTO espera ; de la EEPORM

; Una vez que se detecta el final del proceso de escritura mediante la bandera EEIF
BCF EECON1, WREN ; Deshabilita la escritura en la EEPROM

Dependiendo de la aplicacin, una buena prctica para verificar que los datos se han escrito en
forma correcta es utilizar la operacin de lectura de los mismos.

El bit CPD del registro de configuracin CONFIG5H permite la proteccin de la memoria
EEPORM de operacin externas de lectura/escritura. Este bit no afecta a las operaciones de
lectura y escritura internas.

Un problema bastante comn en las memorias EEPROM es la modificacin de los datos
almacenados debidos a operaciones de escritura indeseadas. Para evitar este tipo de
situaciones durante la inicializacin del microcontrolador (power.up, reset) la operacin de
escritura queda deshabilitada. La secuencia de inicio de la escritura y el bit WREN ayudan a
prevenir una escritura accidental durante un cese de tensin, fallo en la energa o
malfuncionamiento del software.

2.16. Memoria de Configuracin.

Se trata de un bloque de memoria mapeado a partir de la posicin 300, 000H de memoria de
programa (ms all de la zona de la memoria de programa de usuario). En esta memoria de
configuracin se incluyen:

Bits de configuracin: contenidos en 12 bytes de memoria Flash permiten la configuracin de
algunas opciones del microcontrolador como:

- Opciones del oscilador.
- Opciones del reset.
- Opciones del watchdog.




47
- Opciones de la circuiteria de depuracin y programacin.
- Opciones de proteccin contra escritura de memoria de programa y memoria EEPROM de
datos.

Estos bits se configuran generalmente durante la programacin del microcontrolador aunque
tambien pueden ser leidos y modificados durante la ejecucin del programa.

Los registros de identificacin (ID)
Nombre del Registro
se tratan de dos registros situados en las direcciones 3FF
FFEH y 3FF FFFH que contienen informacin del modelo y revisin del dispositivo. Son
registros de solo lectura y no pueden ser modificados por el usuario.

TABLA 25-1: BITS DE CONFIGURACIN E IDENTIFICADORES DEL DISPOSITIVO
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Valor por
defecto
300000h CONFIG1L USBDIV CPUDIV1 CPUDIV0 PLLDIV2 PLLDIV1 PLLDIV0 --000000
300001h CONFIG1H IESO FCMEN FOSC3 FOSC2 FOSC1 FOSC0 00--0101
300002h CONFIG2L VREGEN BORV1 BORV0 BOREN1 BOREN0 PWRTEN* --011111
300003h CONFIG2H WDTPS3 WDTPS2 WDTPS1 WDTPS0 WDTEN ---11111
300005h CONFIG3H MCLRE LPT1OSC PBADEN CCP2MX 1----011
300006h CONFIG4L DEBUG* XINST
ICPRT(3)
LVP STVREN 100--1-1
300008h CONFIG5L
CP3(1)
CP2 CP1 CP0 ----1111
300009h CONFIG5H CPD CPB 11-----
30000Ah CONFIG6L
WRT3(1)
WRT2 WRT1 WRT0 ----1111
30000Bh CONFIG6H WRTD WRTB WRTC 111----
30000Ch CONFIG7L
EBTR3(1)
EBTR2 EBTR1 EBTR0 ----1111
30000Dh CONFIG7H EBTRB -1-----
3FFFFEh DEVID1 DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0
xxxxxxxx(2)
3FFFFFh DEVID2 DEV10 DEV9 DEV8 DEV7 DEV6 DEV5 DEV4 DEV3
00010010(2)

Donde: x=desconocido; u=sin cambios; -=no implementado, se leen 0
Nota 1: No implementado en los dispositivos PIC18Fx455; mantener el bit activo
2: Ver los registros 25-15 para los valores de DEVID1. Los registros DEVID slo se pueden leer y no los
puede programar el usuario.
3: Disponible en los PIC18F4455/4550 en encapsulado TQFP de 44pines. Mantener este bit borrado en el
resto de dispositivos.

(Para ms informacin ver el manual del microcontrolador PIC18f4550 en la seccin 25)


A continuacin se presenta una breve descripcin de los bits de configuracin, como se
encuentra en el archivo de cabecera P18F4550.INC. Se pueden utilizar estas declaraciones
para configurar los bits desde el cdigo fuente utilizando la misma sintaxis que aqu se muestra.

Para CONFIG1L:
Este registro contiene los bits de configuracin para el oscilador del PLL del mdulo USB.





48
Bits de seleccin de prescala:
PLLDIV =000 Sin prescaler (Entrada de oscilador de 4MHz conduce el PLL directamente)
PLLDIV =001 Divide por 2 (8 MHz oscilador de entrada)
PLLDIV =010 Divide por 3 (12 MHz oscilador de entrada)
PLLDIV =011 Divide por 4 (16 MHz oscilador de entrada)
PLLDIV =100 Divide por 5 (20 MHz oscilador de entrada)
PLLDIV =101 Divide por 6 (24 MHz oscilador de entrada)
PLLDIV =110 Divide por 10 (40 MHz oscilador de entrada)
PLLDIV =111 Divide por 12 (48 MHz oscilador de entrada)

Bits de seleccin de postcaler para el reloj del sistema CPU:
CPUDIV1:CPUDIV0 Para los osciladores XT,HS,
EC y ECIO
Para los osciladores XTPLL,
HSPLL,ECPLL, ECPIO
CPUDIV =00 [OSC1/OSC2 Src: /1] [96 MHz PLL Src: /2]
CPUDIV =01 [OSC1/OSC2 Src: /2] [96 MHz PLL Src: /3]
CPUDIV =10 [OSC1/OSC2 Src: /3] [96 MHz PLL Src: /4]
CPUDIV =11 [OSC1/OSC2 Src: /4] [96 MHz PLL Src: /6]

Bit de seleccin de reloj para el USB (slo en modo high speed UCFG:FSEN=1)
USBDIV =0 La fuente de reloj es el oscilador primario sin postscaler
USBDIV =1 La fuente de reloj viene de los 96MHz PLL y los divide por 2

Para CONFIG1H:
Este registro contiene los bits para la configuracin y seleccin del oscilador del
microcontrolador.

Bits de seleccin de oscilador
FOSC =000x XT oscilador, XT usado por USB
FOSC =001x XT oscilador, PLL activo, XT usado por USB




49
FOSC =0100 Reloj externo, funciona como puerto RA6, EC usado por USB
FOSC =0101 Reloj externo, CLKOUT en RA6, EC usado por USB
FOSC =0110 Reloj externo, PLL activo, funciona como puerto RA6, EC usado por USB
FOSC =0111 Reloj externo, PLL activo, CLKOUT en RA6, EC usado por USB
FOSC =1000 Oscilador interno, funciona como puerto RA6, EC usado por USB
FOSC =1001 Oscilador interno, CLKOUT en RA6, EC usado por USB
FOSC =1010 Oscilador interno, XT usado por USB
FOSC =1011 Oscilador interno, HS usado por USB
FOSC =110x HS oscilador, HS usado por USB
FOSC =111x HS oscilador, PLL activo, HS usado por USB

Bit de habilitacin de Monitor de reloj a prueba de fallas (Fail-Safe Clock Monitor):
FCMEM =0 Monitor de reloj de seguridad desactivado
FCMEM =1 Monitor de reloj de seguridad activo

Bit de habilitacin de cambio de oscilador interno/externo:
IESO =0 Modo de cambio del oscilador desactivado
IESO =1 Modo de cambio del oscilador activo

Para CONFIG2L:
Configuraciones para el Brown-Out Reset, Power-Up Timer y el regulador de voltaje para el
USB.

Bit de habilitacin del retraso del timer de encendido (Power-Up Timer):
PWRT =1 PWRT activo
PWRT =0 PWRT desactivado

Bits de habilitacin del Reset por Cese de Tensin (BOR):
BOREN =00 BOR desactivado en hardware y software




50
BOREN =01 BOR activo y controlado por software (SBOREN est activo)
BOREN =10 BOR activo slo en hardware y desactivado en modo Sleep (SBOREN desactivado)
BOREN =11 BOR activo slo en hardware (SBOREN est desactivado)

Bits de voltaje para el Brown-out:
BORV =00 Configuracin mxima
BORV =01
BORV =10
BORV =11 Configuracin mnima

Bit de habilitacin para el regulador del voltaje para el USB:
VREGEN =0 Regulador de tensin USB desactivado
VREGEN =1 Regulador de tensin USB activo

Para CONFIG2H:
Configuracin del Watchdog Timer.

Bit de habilitacin del Temporizador del Watchdog
WDTEN =0 WDT Desactivado (controlado por sofware en el bit SWDTEN)
WDT EN=1 WDT habilitado en hardware, deshabilitado en software

Bits de seleccin de postscaler para el Watchdog
WDTPS =0000 1:1
WDTPS =0001 1:2
WDTPS =0010 1:4
WDTPS =0011 1:8
WDTPS =0100 1:16
WDTPS =0101 1:32
WDTPS =0110 1:64




51
WDTPS =0111 1:128
WDTPS =1000 1:256
WDTPS =1001 1:512
WDTPS =1010 1:1024
WDTPS =1011 1:2048
WDTPS =1100 1:4096
WDTPS =1101 1:8192
WDTPS =1110 1:16384
WDTPS =1111 1:32768


Para CONFIG3H:
Configuraciones varias

Bit de habilitacin del pin MCLR*:
MCLRE =0 Pin RE3 de entrada activo; MCLR* desactivado
MCLRE =1 Pin MCLR* activo; pin RE3 de entrada desactivado

Bit de habilitacin de la potencia del oscilador de Timer 1
LPT1OSC =0 Timer 1 configurado para operacin con alta potencia
LPT1OSC =1 Timer 1 configurado para operacin con baja potencia

Bit de habilitacin de PORTB A/D:
PBADEN =0 Los pines PORTB<4:0>se configuran como E/S digitales en el Reset
PBADEN =1 Los pines PORTB<4:0>se configuran como entradas analgicas en el Reset

Bit de multiplexado de CCP2:
CCP2MX =0 E/S CCP2 se multiplexa con RB3
CCP2MX =1 E/S CCP2 se multiplexa con RC1





52
Para CONFIG4L:
Configuraciones varias

Bit permiso del reset por llenado/vaciado de la Pila (Stack Full/Underflow Reset):
STVREN =0 Llenado/vaciado de la pila no provoca el Reset
STVREN =1 Llenado/vaciado de la pila provoca el Reset

Bit de habilitacin de ICSP con alimentacin sencilla (Single-Supply ICSP):
LVP =0 ICSP desactivado
LVP =1 ICSP activo

Bit de habilitacin del debug en circuito/puerto de programacin (ICPORT):
ICPRT =0 ICPORT desactivado
ICPRT =1 ICPORT activo

Bit de habilitacin del juego de instrucciones extendido:
XINST =
0
J uego de instrucciones extendido y modo de direccionamiento
indexado desactivado
XINST =
1
J uego de instrucciones extendido y modo de direccionamiento
indexado activo

Bit de habilitacin del Debugger oculto:
DEBUG =0 Debugger oculto: activo, RB6 y RB7 se dedican al Debug En-Circuito
DEBUG =1 Debugger oculto: desactivado, RB6 y RB7 configurados como pines de
E/S de propsito general

Para CONFIG5L:
Bits para proteccin de cdigo

Bit de cdigo de proteccin en el bloque 0:
CP0 =0 Bloque 0 (000800-001FFFh) con cdigo de proteccin
CP0 =1 Bloque 0 (000800-001FFFh) sin cdigo de proteccin

Bit de proteccin de cdigo, bloque 1:




53
CP1 =0 Bloque 1 (002000-003FFFh) con cdigo de proteccin
CP1 =1 Bloque 1 (002000-003FFFh) sin cdigo de proteccin

Bit de proteccin de cdigo, bloque 2:
CP2 =0 Bloque 2 (004000-005FFFh) con cdigo de proteccin
CP2 =1 Bloque 2 (004000-005FFFh) sin cdigo de proteccin

Bit de proteccin de cdigo, bloque 3:
CP3 =0 Bloque 3 (006000-007FFFh) con cdigo de proteccin
CP3 =1 Bloque 3 (006000-007FFFh) sin cdigo de proteccin

Para CONFIG5H:
Bits para proteccin de cdigo

Bit del cdigo de proteccin en el bloque de inicio:
CPB =0 Bloque de inicio (000000-0007FFh) con cdigo de proteccin
CPB =1 Bloque de inicio (000000-0007FFh) sin cdigo de proteccin

Bit de cdigo de proteccin en la EEPROM de datos:
CPD =0 EEPROM de datos con cdigo de proteccin
CPD =1 EEPROM de datos sin cdigo de proteccin

Para CONFIG6L:
Bits para proteccin contra escritura

Bit de proteccin contra escritura del bloque 0:
WRT0 =0 Bloque 0 (000800-001FFFh) con proteccin contra escritura
WRT0 =1 Bloque 0 (000800-001FFFh) sin proteccin contra escritura

Bit de proteccin contra escritura del bloque 1:
WRT1 =0 Bloque 1 (002000-003FFFh) con proteccin contra escritura
WRT1 =1 Bloque 1 (002000-003FFFh) sin proteccin contra escritura





54
Bit de proteccin contra escritura del bloque 2:
WRT2 =0 Bloque 2 (004000-005FFFh) con proteccin contra escritura
WRT2 =1 Bloque 2 (004000-005FFFh) sin proteccin contra escritura

Bit de proteccin contra escritura del bloque 3:
WRT3 =0 Bloque 3 (006000-007FFFh) con proteccin contra escritura
WRT3 =1 Bloque 3 (006000-007FFFh) sin proteccin contra escritura

Para CONFIG6H:
Bits para proteccin contra escritura
Bit de proteccin de contra escritura en el bloque de inicio (Boot Block):
WRTC =0 Bloque de inicio (000000-0007FFh) con proteccin contra escritura
WRTC =1 Bloque de inicio (000000-0007FFh) sin proteccin contra escritura

Bit de proteccin contra escritura de registros de configuracin:
WRTB =0 Registros de configuracin (300000-3000FFh) con proteccin contra escritura
WRTB =1 Registros de configuracin (300000-3000FFh) sin proteccin contra escritura

Bit de proteccin contra escritura de la EEPROM de datos:
WRTD =0 EEPROM de datos con proteccin contra escritura
WRTD =1 EEPROM de datos sin proteccin contra escritura

Para CONFIG7L:
Bits para proteccin contra lectura de tablas

Bit de proteccin contra lectura de tablas, bloque 0:
EBTR0 =0 Bloque 0 (000800-001FFFh) con proteccin de la lectura de tabla
ejecutado en otros bloques
EBTR0 =1 Bloque 0 (000800-001FFFh) sin proteccin de la lectura de tabla
ejecutado en otros bloques

Bit de proteccin contra lectura de tablas, bloque 1:
EBTR1 =0 Bloque 1 (002000-003FFFh) con proteccin de la lectura de tabla
ejecutado en otros bloques




55
EBTR1 =1 Bloque 1 (002000-003FFFh) sin proteccin de la lectura de tabla
ejecutado en otros bloques

Bit de proteccin contra lectura de tablas, bloque 2:
EBTR2 =0 Bloque 2 (004000-005FFFh) con proteccin de la lectura de tabla
ejecutado en otros bloques
EBTR2 =1 Bloque 2 (004000-005FFFh) sin proteccin de la lectura de tabla
ejecutado en otros bloques

Bit de proteccin contra lectura de tablas, bloque 3:
EBTR3 =0 Bloque 3 (006000-007FFFh) con proteccin de la lectura de tabla
ejecutado en otros bloques
EBTR3 =1 Bloque 3 (006000-007FFFh) sin proteccin de la lecturade tabla
ejecutado en otros bloques

Para CONFIG7H:
Bits para proteccin contra lectura de tablas

Bit de proteccin contra lectura de tablas en el bloque de inico (Boot Block):
EBTRB =0 Bloque de inicio (000000-0007FFh) con proteccin de la lectura
de tabla ejecutado en otros bloques
EBTRB =1 Bloque de inicio (000000-0007FFh) sin proteccin de la lectura de
tabla ejecutado en otros bloques

El siguiente es un ejemplo de cmo utilizando el compilador MPASM, para configurar los bits de
configuracin desde el cdigo fuente. Para esto se utiliza la directiva CONFIG, as como
tambin las declaraciones antes descritas.

#include "P18F4550.inc" ;Cabecera con las declaraciones para el
;PIC18F4550
CONFIG PLLDIV =12 ; 96 MHz PLL dividido por 12
CONFIG CPUDIV =OSC1_PLL2 ; Postescala de 2 para el CPU
CONFIG USBDIV =2 ; Reloj para Full-Speed, 96 MHz PLL/2
CONFIG FOSC =INTOSCIO_EC ; Oscilador interno, funcin de puerto en RA6
CONFIG FCMEN =ON ; Fail-Safe Clock Monitor habilitado
CONFIG IESO =OFF ; IESO deshabilitado
CONFIG PWRT =ON ; Power-up Timer habilitado
CONFIG BOR =OFF ; Brown-out Reset deshabilitado
CONFIG BORV =3 ; Brown-out Voltage: 4.3V




56
CONFIG VREGEN =OFF ; Regulador de voltaje USB deshabilitado
CONFIG WDT =OFF ; Watchdog timer deshabilitado
CONFIG WDTPS =128 ; Watchdog Postescala =1:128
CONFIG MCLRE =ON ; MCLR Habilitado
CONFIG LPT1OSC =OFF ; Oscilador Timer 1 de alta potencia
CONFIG PBADEN =OFF ; PORTB<4:0>configurados como I/O digital
CONFIG CCP2MX =OFF ; CCP2 I/O multiplexado con RB3
CONFIG STVREN =OFF ; Deshabilitado reset por Snack
CONFIG LVP =OFF ; Programacin a bajo voltaje deshabilitada
CONFIG ICPRT =OFF ; ICPORT deshabilitado
CONFIG XINST =OFF ; Set extendido deshabilitado
CONFIG DEBUG =OFF ; Debugger deshabilitado
CONFIG CP0 =OFF ; Sin proteccin de cdigo
CONFIG CP1 =OFF ;
CONFIG CP2 =OFF ;
CONFIG CP3 =OFF ;
CONFIG CPB =OFF ;
CONFIG CPD =OFF ;
CONFIG WRT0 =OFF ;
CONFIG WRT1 =OFF ;
CONFIG WRT2 =OFF ;
CONFIG WRT3 =OFF ;
CONFIG WRTB =OFF ;
CONFIG WRTC =OFF ;
CONFIG WRTD =OFF ;
CONFIG EBTR0 =OFF ;
CONFIG EBTR1 =OFF ;
CONFIG EBTR2 =OFF ;
CONFIG EBTR3 =OFF ;
CONFIG EBTRB =OFF ;

You might also like