Você está na página 1de 621

EL MICROCONTROLADOR PIC16F876

Características principales:

- CPU tipo RISCC de altas prestaciones.


- Repertorio de 35 instrucciones de una palabra.
- Todas las instrucciones son de un único ciclo, excepto las de salto, que llevan
dos.
- Velocidad de trabajo de 20 Mhz, con un ciclo de instrucción de 200 ns.
- Memoria de programa tipo flash de 8 K palabras.
- Memoria de datos de 368 bytes.
- Memoria EEPROM de datos de 256 bytes.
- Patillaje compatible con PIC16C73B/74B/76/77.
- Hasta 14 fuentes de interrupción.
- Pila por hardware de 8 niveles.
- Modos de direccionamiento directo, indirecto y relativo.
- Reset de conexión (POR).
- Temporización de conexión y temporización de inicio de oscilación.
- Circuito supervisor (watchdog).
- Código de protección programable.
- Tecnología de alta velocidad y bajo consumo en la memoria CMOS
EEPROM/FLASH.
- Programación in-situ vía serie con dos patillas.
- Posibilidad de programación in-situ, vía serie, mediante tensión simple de 5 voltios
.
- Acceso para lectura o escritura a la memoria de programa.
- Gran margen de alimentación entre 2 y 5,5 voltios.
- Corriente de salida de 25 mA.
- Bajo consumo:
. Menor de 2 mA a 5V y 4 Mhz.
. 20 .
A a 3V y 32 Khz.
. Menor de 1 .
A en reposo.

Prestaciones de periféricos:

- Timer0: Temporizador-Contador de 8 bits, con Predivisor también de 8 bits.


- Timer1: Temporizador-Contador de 16 bits con Predivisor, que puede trabajar co
n
reloj externo en el modo reposo (sleep).
- Timer2: Temporizador-Contador de 8 bits con registro de período de la misma
longitud, con Predivisor y Postdivisor.
- Dos módulos de Captura y Comparación y uno PWM (modulación por ancho de
impulso:
. La captura es de 16 bits, con resolución máxima de 12,5 ns.
. La comparación es de 16 bits, con resolución máxima de 200 ns.
. El bloque PWM tiene una resolución máxima de 10 bits.

- Convertidor multicanal analógico digital de 10 bits.


- Puerto serie síncrono (SSP), con modo Maestro (SPI) e I2C (maestro/servidor).
- Transmisor Receptor Universal Síncrono Asíncrono (USART/SCI) con detección
de 9 bits y de dirección.
- Circuito de detección de BROWN-OUT (bajada de tensión).
PATILLAJE

PRESTACIONES
PIC16F876
Frecuencia de trabajo
Continua- 20Mhz.
Borrados y retardos
POR, BOR
(PWRT, OST)
Memoria de programa tipo flash
(palabras de 14 bits)
8K
Memoria de datos (bytes)
368
Memoria de datos EEPROM
256
Interrupciones
13
Puertos de entrada salida
PUERTOS A, B, C
Temporizadores
3
Módulos Captura/Comparación/PWM
2
Comunicaciones serie
MSSP y USART
Módulo CAD de 10 bits
5 canales
Repertorio de instrucciones
35
TABLA 1-1: DESCRIPCIÓN DEL Patillaje DEL PIC16F873 Y PIC16F876
Nombre de la patilla

DIP

SOIC
Tipo
I/O/P
Familia
Descripción

OSC1/CLKIN
9
9
I
ST/CMOS
Entrada de cristal oscilador/entrada reloj externo.
OSC2/CLKOUT
10
10
O
-
Salida del oscilador. Esta patilla saca ¼ de la frecuencia de reloj de
la patilla OSC1, e indica la duración del ciclo de instrucción.
-MCLR/Vpp/ THV
1
1
I/P
ST
Entrada de reset por nivel bajo, entrada de tensión de
programación o alta tensión de prueba de control.
El puerto A es un puerto bidireccional
RA0/AN0
2
2
I/O
TTL
RA0 puede ser, también, la entrada analógica 0.
RA1/AN1
3
3
I/O
TTL
RA1 puede ser, también, la entrada analógica 1.
RA2/AN2/VREF-
4
4
I/O
TTL
RA2 puede ser la entrada analógica 2 o la tensión negativa de
referencia analógica.
RA3/AN3/VREF+
5
5
I/O
TTL
RA3 puede serla entrada analógica 3 o la tensión positiva de
referencia analógica.
RA4/T0CKI
6
6
I/O
ST
RA4 puede ser, también, la entrada de reloj del Temporizador 0.
La salida es en drenador abierto.
RA5/-SS/AN4
7
7
I/O
TTL
RA5 puede ser, también, la entrada analógica 4 o la selección de
servidor para el puerto serie síncrono.
El puerto B es bidireccional y puede programarse la conexión interna de resistenci
as a +Vcc
RB0/INT
21
21
I/O
TTL/ST
RB0 puede ser, también, la interrupción externa.
RB1
22
22
I/O
TTL

RB2
23
23
I/O
TTL

RB3/PGM
24
24
I/O
TTL
RB3 puede ser, también, la entrada de programación.
RB4
25
25
I/O
TTL
Patilla de cambio de interrupción activa.
RB5
26
26
I/O
TTL
Patilla de cambio de interrupción activa.
RB6/PGC
27
27
I/O
TTL/ST
Cambio de interrupción activa o reloj para programación en serie.
RB7/PGD
28
28
I/O
TTL/ST
Cambio de interrupción activa o dato para programación en serie.
El puerto C es un puerto bidireccional
RC0/T1OSO/T1CKI
11
11
I/O
ST
RC0 puede ser, también, la salida de oscilación del Timer1 o la
entrada de reloj del Timer1.
RC1/T1OSI/CCP2
12
12
I/O
ST
RC1 puede ser, también, la entrada de oscilación del Timer1, la
entrada de Captura2, salida de Comparación2 o salida de PWM2.
RC2/CCP1
13
13
I/O
ST
RC2 puede ser, también, la entrada de Captura1, salida de
Comparación1 o salida de PWM1.
RC3/SCK/SCL
14
14
I/O
ST
RC3 puede ser, también, entrada de reloj síncrono serie o salida del
bloque SPI en modo I2C.
RC4/SDI/SDA
15
15
I/O
ST
RC4 puede ser, también, el dato de entrada en modo SPI o el dato
de entada salida en modo I2C.
RC5/SDO
16
16
I/O
ST
RC5 puede ser, también, el dato de salida en modo SPI.
RC6/TX/CK
17
17
I/O
ST
RC6 puede ser también, el reloj de la USART.
RC7/RX/DT
18
18
I/O
ST
RC7 puede ser, también, el dato de la USART.
Vss
8,19
8,19
P
-
Conexión de 0V para circuitos lógicos y entradas/salidas.
VDD
20
20
P
-
Alimentación positiva para lógica y entradas/salidas.
I = Entrada; O = Salida; I/O = Entrada o salida; P = Alimentación
- = No utilizado; TTL = Entrada de ese tipo; ST = Entrada tipo Trigger de Schmit
t
2.0 ORGANIZACIÓN DE LA MEMORIA

Existen tres bloques de memoria: la Memoria de Programa, la Memoria de Datos y l


a EEPROM
de datos. Las dos primeras poseen buses separados, lo que permite el acceso simu
ltáneo.
2.1 ORGANIZACIÓN DE LA MEMORIA DE PROGRAMA
El PIC16F876 tiene un Contador de Programa (PC) de 13 bits, capaz de direccionar
una
memoria de 8K palabras, siendo cada palabra de una longitud de 14 bits.
El vector de Reset se encuentra en la dirección 0000h, queriendo esto decir que tr
as un reset al
dispositivo el PC se cargará con esa cantidad. El vector de la interrupción se encue
ntra situado
en la dirección 0004h. En la figura 2.1 se representa esquemáticamente el mapa de me
moria del
chip.
Figura 2.1: Mapa de Memoria de Programa y Pila.

La Memoria de Datos se fracciona en cuatro


bancos: banco 0, banco 1, banco 2 y banco 3.

Cada banco puede seleccionarse con los bits


RP0 y RP1 del Registro de Funciones
Especiales (SFR).

RP1:RP0
Banco
00
0
01
1
10
2
11
3
Cada banco tiene una extensión de 128 bytes
(7Fh). Las posiciones más bajas de cada banco
se reservan para el registro SFR. Tanto SFR
como el GPR (Registro de Propósito General)
se implementan como una RAM estática. Los
registros que son muy utilizados dentro del
SFR, se duplican en otros bancos para evitar los
continuos cambios de éstos en los programas.

2.2.1 FICHERO DE REGISTROS DE PROPÓSITO GENERAL


Al fichero de registros de propósito general se puede acceder directamente o indir
ectamente a
través del Fichero de Selección de Registros FSR. En la figura 2.3 se ofrece el mapa
del fichero
de registros del PIC16F876.
Figura 2.3: MAPA DEL FICHERO DE REGISTROS DEL PIC16F876.

Direc. de
fichero

Dir. ind.(*)
00h
Dir. ind.(*)
80h
Dir. ind.(*)
100h
Dir. ind.(*)
180h
TMR0
01h
OPTION REG
81h
TMR0
101h
OPTION REG
181h

PCL
02h
PCL
82h
PCL
102h
PCL
182h

STATUS
03h
STATUS
83h
STATUS
103h
STATUS
183h

FSR
04h
FSR
84h
FSR
104h
FSR
184h

PORTA
05h
TRISA
85h

105h

185h

PORTB
06h
TRISB
86h
PORTB
106h
TRISB
186h

PORTC
07h
TRISC
87h
107h

187h

PORTD(1)
08h
TRISD(1)
88h

108h

188h

PORTE(1)
09h
TRISE(1)
89h

109h

189h

PCLATH
0Ah
PCLATH
8Ah
PCLATH
10Ah
PCLATH
18Ah
INTCON
0Bh
INTCON
8Bh
INTCON
10Bh
INTCON
18Bh

PIR1
0Ch
PIE1
8Ch
EEDATA
10Ch
EECON1
18Ch

PIR2
0Dh
PIE2
8Dh
EEADR
10Dh
EECON2
18Dh

TMR1L
0Eh
PCON
8Eh
EEDATH
10Eh
Reservado(2)
18Eh

TMR1H
0Fh

8Fh
EEADRH
10Fh
Reservado(2)
18Fh

T1CON
10h

90h
16 bytes de
Registros de
Propósito
General
110h
16 bytes de
Registros de
Propósito
General
190h

TMR2
11h
SSPCON2
91h
111h
191h

T2CON
12h
PR2
92h
112h
192h

SSPBUF
13h
SSPADD
93h
113h
193h

SSPCON
14h
SSPSTAT
94h
114h
194h

CCPR1L
15h

95h
115h
195h

CCPR1H
16h

96h
116h
196h

CCP1CON
17h

97h
117h
197h

RCSTA
18h
TXSTA
98h
118h
198h

TXREG
19h
SPBRG
99h
119h
199h
RCREG
1Ah

9Ah
11Ah
19Ah

CCPR2L
1Bh

9Bh
11Bh
19Bh

CCPR2H
1Ch

9Ch
11Ch
19Ch

CCP2CON
1Dh

9Dh
11Dh
19Dh

ADRESH
1Eh
ADRESL
9Eh
11Eh
19Eh

ADCON
1Fh
ADCON1
9Fh
11Fh
19Fh

20h

A0h

120h

1A0h

96 bytes de
Registros de
Propósito
General

80 bytes de
Registros de
Propósito
General

80 bytes de
Registros de
Propósito
General

80 bytes de
Registros de
Propósito
General

EFh

16Fh
1EFh

F0h

170H

1F0h

Acceso
70h - 7Fh

Acceso
70h - 7Fh

Acceso
70h - 7Fh
7Fh

FFh

17Fh

1FFh

Banco 0

Banco 1

Banco 2

Banco 3
Posiciones sin implementar. Al leerlas se obtiene 0.

* No es físicamente un registro.
Nota 1: Estos registros no se implementan en los dispositivos de 28 patillas.
Nota 2: Estos registros están reservados; hay que mantenerlos en 0.
2.2.2 REGISTROS DE FUNCIÓN ESPECIAL (SFR)
Los Registros de Función Especial son registros usados por la CPU y módulos periférico
s para
controlar las operaciones deseadas en el microcontrolador. Estos registros se im
plementan como
una RAM estática, y la lista se ofrece en la Tabla 2.1. El SFR puede clasificarse
en dos grupos:
para la CPU y para los periféricos. Los registros asociados a operaciones de la CP
U se describen
detalladamente en esta sección; los relacionados con operaciones periféricas se deta
llarán en
secciones posteriores.

TABLA 2-1: RESUMEN DEL REGISTRO DE FUNCIÓN ESPECIAL


Direcc.
Nombre
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Valor tras
POR, BOR
Valor tras
otros resets
Banco 0

00h(4)
INDF
No es un registro físico. Se usa para direccionamiento de la memoria de datos.
0000 0000
0000 0000
01h
TMR0
Registro del módulo Timer 0.
xxxx xxxx
uuuu uuuu
02h(4)
PCL
Byte de menor peso del registro Contador de Programa (PC).
0000 0000
0000 0000
03h(4)
STATUS
IRP
RP1
RP0
-TO
-PD
Z
DC
C
0001 1xxx
000q quuu
04h(4)
FSR
Puntero de direccionamiento indirecto de la memoria de datos.
xxxx xxxx
uuuu uuuu
05h
PORTA
--
--
Memoria de datos PORTA en escritura; patillas PORTA en lectura.
- -0x 0000
- -0u 0000
06h
PORTB
Memoria de datos PORTB en escritura; patillas del PORTB cuando se lee.
xxxx xxxx
uuuu uuuu
07h
PORTC
Memoria de datos PORTC en escritura; patillas del PORTC cuando se lee.
xxxx xxxx
uuuu uuuu
08h(5)
PORTD
Memoria de datos PORTD en escritura; patillas del PORTD cuando se lee.
xxxx xxxx
uuuu uuuu
09h(5)
PORTE
--
--
--
--
--
RE2
RE1
RE0
- - - - -xxx
- - - - -uuu
0Ah(1,4)
PCLATH
--
--
--
Buffer de escritura para los 5 bits de más peso del PC.
- - -0 0000
- - -0 0000
0Bh(4)
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
0Ch
PIR1
PSPIF(3)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
0Dh
PIR2
--
(6)
--
EEIF
BCLIF
--
--
CCP2IF
- r -0 0- -0
- r -0 0- -0
0Eh
TMR1L
8 bits de menor peso del registro de 16 bits TMR1.
xxxx xxxx
uuuu uuuu
0Fh
TMR1H
8 bits de mayor peso del registro de 16 bits TMR1.
xxxx xxxx
uuuu uuuu
10h
T1CON
--
--
T1CKPS1
T1CKPS0
T1OSCEN
T1SYNC
TMR1CS
TMR1ON
- -00 0000
- -uu uuuu
11h
TMR2
Registro del módulo TIMER 2.
0000 0000
0000 0000
12h
T2CON
--
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0
- 000 0000
- 000 0000
13h
SSPBUF
Registro de transmisión y buffer de recepción del puerto serie síncrono.
xxxx xxxx
uuuu uuuu
14h
SSPCON
WCOL
SSPOV
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0
0000 0000
0000 0000
15h
CCPR1L
Byte de menor peso del registro de Captura, Comparación y PWM.
xxxx xxxx
uuuu uuuu
16h
CCPR1H
Byte de mayor peso del registro de Captura, Comparación y PWM.
xxxx xxxx
uuuu uuuu
17h
CCP1CON
--
--
CCP1X
CCP1Y
CCP1M3
CCP1M2
CCP1M1
CCP1M0
- -00 0000
- -00 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 000x
0000 000x
19h
TXREG
Registro de dato a transmitir en la USART.
0000 0000
0000 0000
1Ah
RCREG
Registro de dato recibido en la USART.
0000 0000
0000 0000
1Bh
CCPR2L
Byte menos significativo del registro 2 de Captura/Comparación/PWM.
xxxx xxxx
uuuu uuuu
1Ch
CCPR2H
Byte más significativo del registro 2 de Captura/Comparación/PWM.
xxxx xxxx
uuuu uuuu
1Dh
CCP2CON
--
--
CCP2X
CCP2Y
CCP2M3
CCP2M2
CCP2M1
CCP2M0
- -00 0000
- -00 0000
1Eh
ADRESH
Byte de más peso del resultado de la conversión analógica digital (A/D)
xxxx xxxx
uuuu uuuu
1Fh
ADCON0
ADCS1
ADCS0
CHS2
CHS1
CHS0
GO/-DONE
--
ADON
0000 00-0
0000 00-0
Explicación: x = Desconocido; u = Sin cambio; q = Depende de condición; r = Reservad
o
.---. = Sin implementar (al leer da cero); . . delante de una referencia = Función n
egada
Las posiciones oscurecidas están sin implementar; su lectura proporciona un cero.
Nota 1: El byte más significativo del Contador de Programa está inaccesible. PCLATH
es el registro de los 5
bits de más peso del PC (PC12 - PC8).
Nota 2: .Otros resets. incluye el externo (por la patilla -MCLR) y el debido al
Watchdog.
Nota 3: Los bits PSPIE y PSPIF están reservados en los dispositivos de 28 patillas
; se deben poner a cero.
Nota 4: Estos registros pueden direccionarse desde cualquier banco.
Nota 5: PORTD, PORTE, TRISD y TRISE no están implementados en los dispositivos de
28 patillas. Al
leerlos, siempre se obtiene cero.
Nota 6: PIR2<6> y PIE2<6> están reservados en dispositivos de 28 patillas; se debe
n mantener siempre a cero.
TABLA 2-1:RESUMEN DEL REGISTRO DE FUNCIÓN ESPECIAL (CONTINUACIÓN)
Direcc.
Nombre
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Valor tras
POR, BOR
Valor tras
otros resets

Banco 1
80h(4)
INDF
No es un registro físico. Se usa para direccionamiento de la memoria de datos.
0000 0000
0000 0000
81h
OPTION_REG
-RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
1111 1111
1111 1111
82h(4)
PCL
Byte menos significativo del Contador de Programa (PC).
0000 0000
0000 0000
83h(4)
STATUS
IRP
RP1
RP0
-TO
-PD
Z
DC
C
0001 1xxx
000q quuu
84h(4)
FSR
Puntero de direccionamiento indirecto de la memoria de datos.
xxxx xxxx
uuuu uuuu
85h
TRISA
--
--
Registro de programación de dirección del puerto A.
- -11 1111
- -11 1111
86h
TRISB
Registro de programación de dirección del puerto B.
1111 1111
1111 1111
87h
TRISC
Registro de programación de dirección del puerto C.
1111 1111
1111 1111
88h(5)
TRISD
Registro de programación de dirección del puerto D.
1111 1111
1111 1111
89h(5)
TRISE
IBF
OBF
IBOV
PSPMODE
--
Dirección de datos en puerto E.
0000 -111
0000 -111
8Ah(1,4)
PCLATH
--
--
--
Buffer de escritura para los 5 bits de más peso del PC.
- - -0 0000
- - -0 0000
8Bh(4)
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
8Ch
PIE1
PSPIE(3)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
8Dh
PIE2
--
(6)
--
EEIE
BCLIE
--
--
CCP2IE
-r -0 0- -0
-r -0 0- -0
8Eh
PCON
--
--
--
--
--
--
-POR
BOR
- - - - - -qq
- - - - - -uu
8Fh
--
Sin implementar.
----
----
90h
--
Sin implementar.
----
----
91h
SSPCON2
GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN
0000 0000
0000 0000
92h
PR2
Registro de programación del período del temporizador 2 (Timer 2).
1111 1111
1111 1111
93h
SSPADD
Registro de dirección del puerto serie síncrono en modo I2C.
0000 0000
0000 0000
94h
SSPSAT
SMP
CKE
D/-A
P
S
R/-W
UA
BF
0000 0000
0000 0000
95h
--
Sin implementar.
----
----
96h
--
Sin implementar.
----
----
97h
--
Sin implementar.
----
----
98h
TXSTA
CSRC
TX9
TXEN
SYNC
--
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro generador de baudios de transmisión.
0000 0000
0000 0000
9Ah
--
Sin implementar.
----
----
9Bh
--
Sin implementar.
----
----
9Ch
--
Sin implementar.
----
----
9Dh
--
Sin implementar.
----
----
9Eh
ADRESL
Byte de menos peso del resultado de la conversión analógica digital (A/D)
xxxx xxxx
uuuu uuuu
9Fh
ADCON1
ADFM
--
--
--
PCFG3
PCFG2
PCFG1
PCFG0
0- - - 0000
0- - - 0000
Explicación: x = Desconocido; u = Sin cambio; q = Depende de condición; r = Reservad
o
.---. = Sin implementar (al leer da cero); . . delante de una referencia = Función n
egada
Las posiciones oscurecidas están sin implementar; su lectura proporciona un cero.
Nota 1: El byte más significativo del Contador de Programa está inaccesible. PCLATH
es el registro de los 5
bits de más peso del PC (PC12 - PC8).
Nota 2: .Otros resets. incluye el externo (por la patilla -MCLR) y el debido al
Watchdog.
Nota 3: Los bits PSPIE y PSPIF están reservados en los dispositivos de 28 patillas
; se deben poner a cero.
Nota 4: Estos registros pueden direccionarse desde cualquier banco.
Nota 5: PORTD, PORTE, TRISD y TRISE no están implementados en los dispositivos de
28 patillas. Al
leerlos, siempre se obtiene cero.
Nota 6: PIR2<6> y PIE2<6> están reservados en dispositivos de 28 patillas; se debe
n mantener siempre a cero.
TABLA 2-1: RESUMEN DE REGISTRO DE FUNCIÓN ESPECIAL (CONTINUACIÓN)
Direcc.
Nombre
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Valor tras
POR, BOR
Valor tras
otros resets

Banco 2
100h(4)
INDF
No es un registro físico. Se usa para direccionamiento de la memoria de datos.
0000 0000
0000 0000
101h
TMR0
Registro del módulo temporizador 0 (Timer 0).
xxxx xxxx
uuuu uuuu
102h(4)
PCL
Byte menos significativo del Contador de Programa (PC).
0000 0000
0000 0000
103h(4)
STATUS
IRP
RP1
RP0
-TO
-PD
Z
DC
C
0001 1xxx
000q quuu
104h(4)
FSR
Puntero de direccionamiento indirecto de la memoria de datos.
xxxx xxxx
uuuu uuuu
105h
--
Sin implementar.
----
----
106h
PORTB
Memoria de datos PORTB en escritura; patillas del PORTB cuando se lee.
xxxx xxxx
uuuu uuuu
107h
--
Sin implementar.
----
----
108h
--
Sin implementar.
----
----
109h
--
Sin implementar.
----
----
10Ah(1,4)
PCLATH
--
--
--
Buffer de escritura para los 5 bits de más peso del PC.
- - -0 0000
- - -0 0000
10Bh(4)
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
10Ch
EEDATA
Registro de datos de la EEPROM.
xxxx xxxx
uuuu uuuu
10Dh
EEADR
Registro de dirección de la EEPROM.
xxxx xxxx
uuuu uuuu
10Eh
EEDATH
--
--
Byte alto del registro de datos de la EEPROM
xxxx xxxx
uuuu uuuu
10Fh
EEADRH
--
--
--
Byte alto del registro de dirección de la EEPROM
xxxx xxxx
uuuu uuuu

Banco 3
180h(4)
INDF
No es un registro físico. Se usa para direccionamiento de la memoria de datos.
0000 0000
0000 0000
181h
OPTION_REG
-RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
1111 1111
1111 1111
182h(4)
PCL
Byte menos significativo del Contador de Programa (PC).
0000 0000
0000 0000
183h(4)
STATUS
IRP
RP1
RP0
-TO
-PD
Z
DC
C
0001 1xxx
000q quuu
184h(4)
FSR
Puntero de direccionamiento indirecto de la memoria de datos.
xxxx xxxx
uuuu uuuu
185h
--
Sin implementar.
----
----
186h
TRISB
Registro de programación de dirección del puerto B.
1111 1111
1111 1111
187h
--
Sin implementar.
----
----
188h
--
Sin implementar.
----
----
189h
--
Sin implementar.
----
----
18Ah(1,4)
PCLATH
--
--
--
Buffer de escritura para los 5 bits de más peso del PC.
- - -0 0000
- - -0 0000
18Bh(4)
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
18Ch
EECON1
EEPGD
--
--
--
WRERR
WREN
WR
RD
x- - - x000
x- - - u000
18Dh
EECON2
Registro 2 de control de EEPROM. No es físicamente un registro.
- - - - - - - -
- - - - - - - -
18Eh
--
Sin implementar.
0000 0000
0000 0000
18Fh
--
Sin implementar.
0000 0000
0000 0000
Explicación: x = Desconocido; u = Sin cambio; q = Depende de condición; r = Reservad
o
.---. = Sin implementar (al leer da cero); . . delante de una referencia = Función n
egada
Las posiciones oscurecidas están sin implementar; su lectura proporciona un cero.
Nota 1: El byte más significativo del Contador de Programa está inaccesible. PCLATH
es el registro de los 5
bits de más peso del PC (PC12 - PC8).
Nota 2: .Otros resets. incluye el externo (por la patilla -MCLR) y el debido al
Watchdog.
Nota 3: Los bits PSPIE y PSPIF están reservados en los dispositivos de 28 patillas
; se deben poner a cero.
Nota 4: Estos registros pueden direccionarse desde cualquier banco.
Nota 5: PORTD, PORTE, TRISD y TRISE no están implementados en los dispositivos de
28 patillas. Al
leerlos, siempre se obtiene cero.
Nota 6: PIR2<6> y PIE2<6> están reservados en dispositivos de 28 patillas; se debe
n mantener siempre a cero.
2.2.2.1 REGISTRO DE ESTADO (STATUS REGISTER)
El registro de estado contiene el estado después de operaciones aritméticas y lógicas
en el
bloque de la ALU, el estado del RESET y los bits de selección de banco para la mem
oria de
datos.
El SR (Status Register) puede alterarse debido a algunas instrucciones o a algun
os registros. Si
el SR es el destino de alguna instrucción que afecta a los indicadores Z, DC o C,
la escritura
sobre estos tres bits se inhibe. Estos bits se activan o se borran de acuerdo a
circuitos lógicos.
Además, los bits -TO y -PD no pueden modificarse, por tanto, el resultado de una i
nstrucción
que tenga como destino el SR puede ser distinto de lo esperado. Por ejemplo, CLR
F STATUS
borrará los tres bits de más peso y pondrá a 1 el bit Z. Esto dejará el SR como 000u u1u
u, donde
u significa sin cambio.
Se recomienda, por lo tanto, que solamente se utilicen, para variar el SR, las i
nstrucciones BCF,
BSF, SWAPF y MOVWF, porque éstas no afectan a los bits Z, C o DC del registro SR.
En el
.Resumen de Instrucciones. se marcan las instrucciones que no afectan a los bits
del registro
SR.

REGISTRO 2-1: REGISTRO DE ESTADO (SR). (DIRECCIONES 03h, 83h, 103h y 183h.)

R/W-0
R/W-0
R/W-0
R-1
R-1
R/W-x
R/W-x
R/W-x

IRP
RP1
RP0
-TO
-PD
Z
DC
C

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7
bit0
bit 7:
IRP: Bit de selección de banco de registros (usado para direccionamiento indirecto
).

1 = Bancos 2 y 3 (100h - 1FFh)

0 = Bancos 0 y 1 (00h - FFh)


bit 6-5:
RP1:RP0: Bits de selección de banco de registros (usado para direccionamiento dire
cto).

11 = Banco 3 (180h - 1FFh)

10 = Banco 2 (100h - 17Fh)

01 = Banco 1 (80h - FFh)


00 = Banco 0 (00h - 7Fh)

Cada banco dispone de 128 bytes.

bit 4:
-TO: Bit de final de temporización.

1 = Después de conexión, instrucción CLRWDT, o instrucción


SLEEP.
0 = Cuando sucede el final de temporización del WDT.

bit 3:
-PD: Bit de bajada de tensión.

1 = Después de la conexión o por la instrucción CLRWDT.


0 = Al ejecutar la instrucción SLEEP.

bit 2:
Z: Bit de cero

1 = Después de una operación lógica o aritmética con resultado cero.

0 = Después de una operación lógica o aritmética con resultado distinto de cero.


bit 1:
DC: Bit de acarreo o debe en las instrucciones ADDWF, ADDLM, SUBLW y SUBWF.

(El indicador de .debe. es de polaridad contraria.)

1 = Cuando hay acarreo en el cuarto bit.

0 = Cuando no hay acarreo en el cuarto bit.


bit 0:
C: Bit de acarreo o debe en las instrucciones ADDWF, ADDLW, SUBLW y SUBWF.

1 = Cuando hay acarreo en el octavo bit (más significativo).

0 = Cuando no hay acarreo en el octavo bit.

Nota: Para el .debe., la polaridad es contraria. La resta se realiza sumando el


complemento a dos del segundo
operando. Para instrucciones de rotación (RRF y RLF), este bit se carga con el val
or del bit de mayor o menor peso
del registro que se rota.
2.2.2.2 REGISTRO DE OPCIONES (DIRECCIONES 81h, 181h)
El Registro de Opciones es un registro de lectura y escritura que contiene vario
s bits de control
para configurar el TMR0 (Temporizador0), valores del Predivisor, asignación de éste,
Interrupción Externa y Resistencias de Polarización del circuito de salida del Puert
o B.

REGISTRO 2-2: REGISTRO DE OPCIONES (DIRECCIONES 81h Y 181h)

R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
-RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
-RBPU: Bit de habilitación de resistencias de polarización en salida del PUERTO B.

1 = Resistencias inhibidas.

0 = Resistencias habilitadas.

bit 6:
INTEDG: Bits de selección de flanco de interrupción.
1 = Interrupción activa en el flanco positivo en la patilla RB0/INT.

0 = Interrupción activa en el flanco de bajada en la patilla RB0/INT.

bit 5:
T0CS: Bit de selección de fuente de reloj para TMR0
(Temporizador 0).

1 = Cambio en la patilla RA4/T0CKI.


0 = Reloj procedente del final del ciclo de instrucción (CLKOUT).

bit 4:
T0SE: Bit de selección de flanco de reloj en el TMR0.

1 = Variación de nivel alto a bajo en la patilla RA4/T0CKI.


0 = Variación de nivel bajo a alto en la patilla RA4/T0CKI.

bit 3:
PSA: Bit de asignación del PRESCALER (Divisor de Frecuencia).

1 = El Prescaler se asigna al WDT.

0 = El Prescaler se asigna al módulo TMR0.


bit 2-0:
PS2:PS0: Bit de valor de división del prescaler.

1 = Después de una operación lógica o aritmética con resultado cero.

0 = Después de una operación lógica o aritmética con resultado distinto de cero.

Valor
bit
Divisor TMR0
Divisor WDT

000
1 : 2
1 : 1

001
1 : 4
1 : 2

010
1 : 8
1 : 4

011
1 : 16
1 : 8

100
1 : 32
1 : 16

101
1 : 64
1 : 32

110
1 : 128
1 : 64

111
1 : 256
1 : 128

Nota: Cuando se use la baja tensión de programación (LVP) y la polarización de la sali


da del PORTB esté
habilitada, el bit 3 del registro TRISB debe ponerse a 0 para inhibir la polariz
ación en RB3 y asegurar la correcta
operación del dispositivo.
2.2.2.3 REGISTRO INTCON (CONTROL DE INTERRUPCIONES)
El registro INTCON es un registro de lectura y escritura que contiene varios bit
s de señalización
y habilitación para el desbordamiento (overflow) del TMR0, cambio sobre el puerto
RB e
interrupción externa en la patilla RB0/INT.
Nota: El bit indicador de interrupción se activa cuando ocurre una interrupción,
independientemente del estado de su correspondiente bit de habilitación o del bit
de habilitación
general GIE (INTCON<7>). El programa debe asegurar que el bit indicador de inter
rupción
apropiado está borrado antes de habilitar una interrupción.

REGISTRO 2-3: REGISTRO INTCON (DIRECCIONES 0Bh, 8Bh, 10Bh Y 18Bh)

R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-x
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
GIE: Bit de habilitación general de interrupciones.

1 = Habilita todas las interrupciones no enmascaradas.

0 = Inhibe todas las interrupciones.

bit 6:
PEIE: Bit de habilitación de interrupción de periféricos.

1 = Habilita todas las interrupciones no enmascaradas de periféricos.

0 = Inhibe todas las interrupciones de periféricos.

bit 5:
T0IE: Bit de habilitación de interrupción por desbordamiento del TMR0.
1 = Habilita la interrupción del TMR0.

0 = Inhibe la interrupción del TMR0.

bit 4:
INTE: Bit de habilitación de interrupción externa en la patilla RB0/INT.
1 = Habilita la interrupción externa en la patilla RB0/INT.

0 = Inhibe la interrupción externa en la patilla RB0/INT.

bit 3:
RBIE: Bit de habilitación de interrupción por variación en puerto RB.

1 = Habilita la interrupción cuando sucede una variación sobre el puerto RB.


0 = Inhibe la interrupción cuando sucede una variación sobre el puerto RB.

bit 2:
T0IF: Bit indicador de interrupción por desbordamiento del TMR0 .

1 = El TMR0 ha terminado su tiempo (desbordamiento). Este indicador se debe borr


ar en el programa.

0 = Aún no ha sucedido el desbordamiento del TMR0.


bit 1:
INTF: Bit indicador de interrupción externa en la patilla RB0/INT.

1 = Ha sucedido una interrupción externa en la patilla RB0/INT. Debe borrarse en e


l programa.

0 = No ha llegado una interrupción externa por la patilla RB0/INT.

bit 0:
RBIF: Bit indicador de interrupción por variación sobre el puerto RB.

1 = Ha sucedido una interrupción por variación de nivel en el puerto RB. Se debe bor
rar por software.
0 = No ha habido variación sobre el puerto RB.
2.2.2.4 REGISTRO PIE1
El registro PIE1 posee los bits de habilitación individual para las interrupciones
de periféricos.
El bit PEIE del registro INTCON debe ser 1 para permitir la habilitación de cualqu
ier
interrupción de periférico.

REGISTRO 2-4: REGISTRO PIE1 (DIRECCIÓN 8Ch).

R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
PSPIE: Bit habilitador de interrupción por Lectura-Escritura en el Puerto Servidor
Paralelo (PSP).

1 = Habilita la interrupción del PSP.

0 = Inhibe la interrupción del PSP.

bit 6:
ADIE: Bit de habilitación de interrupción del Convertidor Analógico Digital (ADC).
1 = Habilita la interrupción del ADC.

0 = Inhibe la interrupción del ADC.

bit 5:
RCIE: Bit de habilitación de interrupción de recepción del USART.
1 = Habilita la interrupción de recepción del USART.

0 = Inhibe la interrupción de recepción del USART.

bit 4:
TXIE: Bit de habilitación de interrupción para la transmisión en el USART.

1 = Habilita la interrupción para la transmisión en el USART.


0 = Inhibe la interrupción para la transmisión en el USART.

bit 3:
SSPIE: Bit de habilitación de interrupción para el Puerto Síncrono Serie (SSP).

1 = Habilita la interrupción del SSP.


0 = Inhibe la interrupción del SSP.

bit 2:
CCP1IE: Bit de habilitación de interrupción del módulo de Captura /Comparación/PWM.

1 = Habilita la interrupción del módulo CCP1.

0 = Inhibe la interrupción del módulo CCP1.


bit 1:
TMR2IE: Bit de habilitación de interrupción por coincidencia del TMR2 con el PR2.

1 = Habilita la interrupción cuando coincide los contenidos de TMR2 y PR2.

0 = Inhibe la interrupción por coincidencia de los contenidos de TMR2 y PR2

bit 0:
TMR1IE: Bit de habilitación de interrupción por desbordamiento del TMR1.

1 = Habilita la interrupción cuando desborda el TMR1 (termina su tiempo programado


).

0 = Inhibe la interrupción del TMR1.


Nota 1:
PSPIE queda reservado en los dispositivos de 28 patillas; se debe mantener siemp
re a cero.
2.2.2.5 REGISTRO PIR1
El registro PIR1 contiene los bits de señalización individual de las interrupciones
de periféricos.
Nota: El bit indicador de interrupción se activa al ocurrir una interrupción, indepe
ndientemente
del estado de su correspondiente bit de habilitación o del bit de habilitación gener
al GIE
(INTCON<7>). El programa debe asegurar que el bit indicador de interrupción apropi
ado está
borrado antes de habilitar una interrupción.

REGISTRO 2-5: REGISTRO PIR1 (DIRECCIÓN 0Ch)

R/W-0
R/W-0
R-0
R-0
R/W-0
R/W-0
R/W-0
R/W-0

PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF

R = De lectura
W = De escritura
-n = Valor del reset POR

bit7

bit0

bit 7:
PSPIF: Bit indicador de interrupción por Lectura-Escritura del Puerto Servidor Par
alelo (PSP).
1 = Una operación de escritura o lectura ha tenido lugar. Debe borrarse por softwa
re.

0 = No ha ocurrido una operación de lectura o escritura.

bit 6:
ADIF: Bit de señalización de interrupción del Convertidor Analógico Digital (ADC).

1 = Se ha completado la conversión del ADC.


0 = El ADC no ha terminado su conversión.

bit 5:
RCIF: Bit de señalización de interrupción por recepción del USART.

1 = El buffer de recepción del USART está lleno.


0 = El buffer de recepción del USART está vacío.

bit 4:
TXIF: Bit de señalización de interrupción para la transmisión en el USART.

1 = El buffer de transmisión del USART está vacío (USART preparado para una nueva tras
misión).

0 = El buffer de transmisión del USART está lleno (aún no se ha transmitido el byte).


bit 3:
SSPIF: Bit de señalización de interrupción para el Puerto Síncrono Serie (SSP).

1 = Ha ocurrido la condición de interrupción del SSP, y debe ser borrada en el softw


are antes de
retornar de la rutina de servicio de la interrupción. Las condiciones señaladas por
este bit son:
SPI
Se ha producido una transmisión o recepción.
I2C Slave (servidor)
Se ha producido una transmisión o recepción.
I2C Master (maestro)
Se ha producido una transmisión o recepción.
El módulo SSP completó la condición de START (arranque).
El módulo SSP completó la condición de STOP (detención).
El módulo SSP completó la condición de RESTART (reinicio).
El módulo SSP completó la condición de ACK (Acknowledge = Reconocimiento).
Una condición de START ha ocurrido cuando el módulo está aislado (sistema Multimaestro
).
Una condición de STOP ha ocurrido cuando el módulo está aislado (sistema Multimaestro)
.
0 = No ha sucedido la condición de interrupción del SSP.

bit 2:
CCP1IF: Bit de señalización de interrupción del módulo de Captura /Comparación/PWM.

Modo Captura
1 = Ha ocurrido una captura en el registro TMR1. Debe borrarse por software.

0 = No ha sucedido una captura del registro TMR1.


Modo Comparación
1 = Ha ocurrido una coincidencia en la comparación del registro TMR1. Debe borrars
e por software.
0 = No existe coincidencia de comparación en el registro TMR1.
Modo PWM
No se usa en este modo.
bit 1:
TMR2IF: Bit de señalización de interrupción por coincidencia del TMR2 con el PR2.

1 = Ha ocurrido la coincidencia entre los contenidos de TMR2 y PR2. Debe borrars


e por software.

0 = No hay coincidencia de los contenidos de TMR2 y PR2.

bit 0:
TMR1IF: Bit de señalización de interrupción por desbordamiento del TMR1.

1 = Se ha producido el desbordamiento del TMR1 (termina su tiempo programado). D


ebe borrarse por
software.
0 = No ha finalizado su tiempo el TMR1.

Nota 1:
PSPIF queda reservado en los dispositivos de 28 patillas; se debe mantener siemp
re a cero.
2.2.2.6 REGISTRO PIE2
El registro PIE2 contiene los bits de habilitación de interrupción individual para l
os periféricos
CCP2, conflicto de bus de SSP y operación de escritura en la EEPROM.

REGISTRO 2-6: REGISTRO PIE2 (DIRECCIÓN 8Dh)

U-0
R/W-0
U-0
R/W-0
R/W-0
U-0
U-0
R/W-0

---
---
---
EEIE
BCLIE
---
---
CCP2IE

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
Sin implementar: Da cero al leer.

bit 6:
Reservado: Siempre se debe mantener este bit a cero.
bit 5:
Sin implementar: Da cero al leer.

bit 4:
EEIE: Bit de habilitación de interrupción por la operación de escritura en la EEPROM.

1 = Habilita la interrupción para la escritura en la EEPROM.


0 = Inhibe la interrupción para la escritura en la EEPROM.

bit 3:
BCLIE: Bit de habilitación de interrupción por el conflicto de bus del Puerto Síncrono
Serie (SSP).

1 = Habilita la interrupción de conflicto de bus del SSP.

0 = Inhibe la interrupción de conflicto de bus del SSP.


bit 2-1:
Sin implementar: Da cero al leer.

bit 0:
CCP2IE: Bit de habilitación del módulo CCP2.

1 = Habilita la interrupción de CCP2.

0 = Inhibe la interrupción de CCP2.


2.2.2.7 REGISTRO PIR2
El registro PIR2 contiene los bits indicadores de las interrupciones de CCP2, co
nflicto de bus de
SSP y operación de escritura en EPROM.
Nota: El bit indicador de interrupción se activa cuando ocurre una interrupción,
independientemente del estado de su correspondiente bit de habilitación o del bit
de habilitación
general GIE (INTCON<7>). El programa debe asegurar que el bit indicador de inter
rupción
apropiado está borrado antes de habilitar una interrupción.

REGISTRO 2-7: REGISTRO PIR2 (DIRECCIÓN 0Dh)

U-0
R/W-0
U-0
R/W-0
R/W-0
U-0
U-0
R/W-0
---
---
---
EEIF
BCLIF
---
---
CCP2IF

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
Sin implementar: Da cero al leer.

bit 6:
Reservado: Siempre se debe mantener este bit a cero.
bit 5:
Sin implementar: Da cero al leer.

bit 4:
EEIF: Bit de señalización de interrupción por la operación de escritura en la EEPROM.

1 = Se ha completado la operación de escritura en la EEPROM. Debe borrarse por sof


tware.
0 = No se ha completado la escritura en la EEPROM, o no se ha iniciado.

bit 3:
BCLIF: Bit de señalización de interrupción por el conflicto de bus del Puerto Síncrono S
erie (SSP).

1 = Un conflicto de bus ha ocurrido en el SSP cuando estaba configurado en modo


Maestro I2C.

0 = No existe conflicto de bus del SSP.


bit 2-1:
Sin implementar: Da cero al leer.

bit 0:
CCP2IF: Bit de señalización de interrupción del módulo CCP2.

Modo Captura:

1 = Ha sucedido una captura en el registro TMR1. Debe borrarse por software.


0 = No hay captura en el registro TMR1.

Modo Comparación:

1 = Ha ocurrido la coincidencia en la comparación del registro TMR1. Debe borrarse


por software.

0 = No hay coincidencia en la comparación del registro TMR1.

Modo PWM:

No se usa.
2.2.2.8 REGISTRO PCON
El registro de control de alimentación PCON contiene los bits que permiten la dife
renciación
entre el reset de conexión (POR), el reset Brown.Out (BOR), el reset Watch-Dog (WD
T) y el
reset externo -MCLR.
Nota: BOR se ignora durante la conexión (POR). Lo debe activar el usuario y cheque
arlo en los
subsiguientes resets para ver si BOR está borrado, indicando, con ello, que ha ocu
rrido un reset
BOR. El bit de estado de BOR es indiferente y no predecible si el circuito de Br
own-Out se
inhibe (borrando el bit BODEN en la palabra de configuración).

REGISTRO 2-8: REGISTRO PCON (DIRECCIÓN 8Eh)

U-0
U-0
U-0
U-0
U-0
U-0
R/W-0
R/W-1
---
---
---
---
---
---
-POR
-BOR

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7

bit0
bit 7-2:
Sin implementar: Da cero al leer.

bit 1:
-POR: Bit indicador del estado del reset de conexión (POR).

1 = No ha sucedido el reset de conexión


0 = Ha ocurrido un reset de conexión. Debe ponerse a 1 por software después de la co
nexión.

bit 0:
-BOR: Bit indicador del estado del reset BOR

1 = No ha sucedido un reset tipo BOR.

0 = Ha ocurrido un reset tipo BOR. Debe activarse por software después del reset B
OR.
2.3 PCL Y PCLATH
El registro Contador de Programa (PC) tiene un tamaño de 13 bits. El byte de menor
peso reside
en el registro PCL, que es un registro de lectura y escritura. Los 5 bits de may
or peso
(PC<12:8>) no se pueden leer, pero son susceptibles de escritura indirectamente
a través del
registro PCLATH. Después de cualquier reset, los bits de mayor peso quedan borrado
s. En la
figura 2-5 se muestra las dos situaciones para cargar el PC. El ejemplo superior
de la figura
muestra cómo se carga el PC con la escritura del PCL (PCLATH<4:0>. PCH). El ejempl
o
inferior de la figura muestra la carga del PC durante una instrucción CALL o GOTO
(PCLATH<4:3> . PCH).
FIGURA 2-5: CARGA DEL PC EN SITUACIONES DIFERENTES

2.3.1 CÁLCULO DEL SALTO


(GOTO)

El cálculo del salto se realiza sumando


un desplazamiento al contenido del PC
(ADDWF PCL). Cuando se realiza la
lectura de una tabla usando el método
del salto (GOTO), hay que tener
cuidado para no superar el límite de
memoria (cada bloque de 256 bytes)

2.3.2 PILA
El PIC16F876 posee una pila por hardware de 8 niveles, con un ancho de palabra d
e 13 bits. El
espacio ocupado por la pila no forma parte de la memoria de usuario, y el punter
o de pila no se
puede leer ni escribir. El PC se salva en pila cuando se ejecuta una instrucción C
ALL o cuando
se va a producir un salto debido a una interrupción. Se extrae de la pila cuando s
e ejecuta una
instrucción RETURN, RETLW o RETFIE. El PCLATH no varía en operaciones de salvar o
recuperar de pila (operaciones PUSH o POP).
La pila opera como un buffer circular: después de ocho memorizaciones (entradas) e
n pila, la
novena, sobrescribirá su valor en la primera entrada, la décima, sobrescribirá en la q
ue fue la
segunda entrada, y así sucesivamente.
Nota 1: No existe ningún bit de estado que indique condiciones de desbordamiento d
e pila.
Nota 2: No existen mnemónicos de instrucciones llamados PUSH o POP. Estas acciones
suceden al ejecutar instrucciones como CALL, RETURN, RETLW y RETFIE, o al vector
izarse
una interrupción.
2.4 PAGINANDO LA MEMORIA DE PROGRAMA

El PIC16F876 es capaz de direccionar un bloque continuo de 8k palabras de memori


a de
programa. Las instrucciones CALL o GOTO proporcionan solamente 11 bits de direcc
ión para
permitir el salto entre una extensión de memoria de 2k palabras. Cuando se realiza
una
instrucción CALL o GOTO, los 2 bits de mayor peso de la dirección son suministrados
por el
registro PCLATH, bits 4 y 3. Cuando ejecute una instrucción CALL o GOTO, el usuari
o debe
asegurarse que los bits de selección de página están programados de manera adecuada a
la
página de memoria deseada. Si se ejecuta un retorno de una instrucción CALL (o inter
rupción),
el total de los 13 bits del PC son devueltos desde la pila, por consiguiente, la
manipulación de
los bits 4 y 3 del PCLATH no es necesaria para instrucciones de retorno.
El ejemplo 2-1 muestra la llamada de una subrutina en la página 1 de la memoria de
programa.
Este ejemplo asume que el PCLATH es salvado y restaurado por la rutina de servic
io de la
interrupción (si se usa interrupción).
Ejemplo 2-1: Llamada de una subrutina en página 1 desde la página 0.
ORG 0x500
BCF PCLATH,4
BSF PCLATH,3 ;Selecciona página 1 (800h - FFFh)
CALL SUB1_P1 :Llama a subrutina en página 1 (800h - FFFh)
:
:
ORG 0x900 ;Página 1 (800h - FFFh)
SUB1_P1
: ;Llamada a subrutina
: ;Página 1 (800h - FFFh)
:
RETURN ;Retorna a página 0 (000h - 7FF), de la llamada
de subrutina.
2.5 Direccionamiento Indirecto: registros INDF y FSR.
El registro INDF no es un registro físico y se usa para conseguir el direccionamie
nto indirecto.
Cualquier instrucción que utilice el registro INDF, lo que hace es acceder a la di
rección
apuntada por FSR. Si se efectúa una lectura sobre INDF, se leerá 0; si se escribe so
bre INDF no
se ejecuta ninguna acción, aunque los bits de estado pueden resultar afectados. Se
puede obtener
una dirección efectiva de 9 bits encadenando los 8 bits del registro FSR y el bit
IRP del registro
de estado (STATUS<7>), como se muestra en la figura 2-6.
Un programa sencillo, para borrar las posiciones de memoria que van desde 20h a
2Fh, usando
direccionamiento indirecto, se expone en el ejemplo 2-2.
EJEMPLO 2-2 DIRECCIONAMIENTO INDIRECTO
movlw 0x20 ;Inicializa el puntero de RAM.
movwf FSR ; "
NEXT clrf INDF ;Borra posición de RAM.
incf FSR,1 ;Incrementa el puntero.
btfss FSR,4 ;Si se ha completado el borrado se salta la próxima
instrucción.
goto NEXT ;Si no se han borrado todas las posiciones se repite el
bucle.
:
:
FIGURA 2-6: DIRECCIONAMIENTO DIRECTO E INDIRECTO
3.0 PUERTOS DE ENTRADA SALIDA

Algunas de las patillas destinadas a puertos de


entrada salida se multiplexan para obtener otras
funciones de periféricos del dispositivo. Como
regla general podemos decir que cuando un
periférico se habilita, la patilla respectiva no se
utilizará como puerto de entrada salida.

3.1 Registros PORTA y TRISA

PORTA es un registro de puerto bidireccional de


6 bits, cuyo registro de dirección de datos es
TRISA. Programando TRISA a 1 conseguiremos
que el puerto A quede como entrada, quedando
el circuito (driver) de salida en estado de alta
impedancia o desconexión. Si ponemos a 0 el
registro TRISA conseguiremos programar el
puerto A como salida, y, con ello, que el
contenido del latch correspondiente aparezca en
la patilla de salida.

Leyendo el registro PORTA leeremos el estado


en las patillas del puerto A, mientras que si
escribimos en PORTA, lo estaremos haciendo en
el latch de salida.

La patilla RA4 se multiplexa con la entrada de


reloj del Timer0, y se llama RA4/T0CKI. Esta
patilla, como entrada es de tipo Schmitt Trigger,
como salida es de tipo drenador abierto. Las
demás patillas del PORTA poseen niveles TTL
de entrada y salidas CMOS amplificadas.

Las demás patillas del PORTA se multiplexan


con entradas analógicas y con la tensión de
referencia analógica VREF. La operación de cada
patilla se selecciona activando o borrando los
bits de control en el registro ADCON1 (registro
1 de control del CAD).

Después de Reset, estas patillas se configuran


como entradas analógicas, y se leen como 0.
El registro TRISA controla la dirección de las
patillas del PORTA, incluso cuando se usan
como entradas analógicas. Por este motivo, el
usuario debe asegurarse que los bits del registro
TRISA están a 1 cuando se usen las patillas del
puerto como entradas analógicas.
EJEMPLO 3.1: INICIALIZACIÓN DEL PORTA

BCF STATUS, RP0 ; Selecciona banco 0.


BCF STATUS, RP1 ; .
CLRF PORTA ; Pone 0 en los latches de salida.
BSF STATUS, RP0 ; Selecciona banco 1.
MOVLW 0x06 ; Configura todas las patillas como entradas
MOVWF ADCON1 ; digitales.
MOVLW 0xCF ; Dato para configurar la dirección.
MOVWF TRISA ; Programa RA0-RA3 como entradas, y
; RA4-RA5 como salidas.
; TRISA (6-7) siempre se leerán como 0.

TABLA 3-1: FUNCIONES DEL PUERTO A (PortA)


Nombre
Bit
Buffer
Función

RA0/AN0
Bit0
TTL
Entrada-salida o entrada analógica 0.
RA1/AN1
Bit1
TTL
Entrada-salida o entrada analógica 1.
RA2/AN2
Bit2
TTL
Entrada-salida o entrada analógica 2.
RA3/AN3/VREF
Bit3
TTL
Entrada-salida, entrada analógica 3, o VREF.
RA4/T0CKI
Bit4
ST
Entrada-salida, o entrada externa de reloj de TIMER0.
La salida es de tipo drenador abierto.
RA5/-SS/AN4
Bit5
TTL
Entrada-salida, selección de .servidor. para el puerto
serie síncrono, o entrada analógica 4.
TTL = Entrada tipo TTL; ST = Entrada tipo Schmitt Trigger.

TABLA 3-2: RESUMEN DE REGISTROS ASOCIADOS AL PORTA


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros resets
05h
PORTA
---
---
RA5
RA4
RA3
RA2
RA1
RA0
- - 0x 0000
- - 0u 0000
85h
TRISA
---
---
Registro de dirección de datos del PORTA
- - 11 1111
- - 11 1111
9Fh
ADCON1
ADFM
---
---
---
PCFG3
PCFG2
PCFG1
PCFG0
- - 0 - 0000
- - 0 - 0000
x = Desconocido; u = Sin cambio; --- = sin implementar (se lee 0). Las celdas so
mbreadas no se utilizan en
PORTA.

Cuando se use el módulo SSP en modo servidor SPI, y SS habilitado, el convertidor


A/D debe fijarse a uno de los siguientes valores de PCFG3 PCFG0: 0100, 0101, 011
x,
1101, 1110, 1111.
3.2 REGISTROS PORTB Y TRISB

PORTB es un registro bidireccional de 8 bits que tiene su registro de dirección en


TRISB.
Programando éste a 1, las líneas del PORTB quedan como entradas; borrando el registr
o
TRISB, las 8 líneas del puerto se programan como salidas (en este caso, el conteni
do de los
latches de salida aparecerá en las patillas correspondientes).
Tres patillas del PORTB se multiplexan con las funciones de Baja Tensión de Progra
mación:
RB3/PGM, RB6/PGC y RB7/PGD. Estas funciones secundarias se describen en la sección
Características Especiales.

Cada patilla del PORTB posee polarización interna a VDD, que puede activarse media
nte un bit
de control. En el registro OPTION_REG, borrando el bit 7, llamado , se activará la
polarización. Este bit se programa a 1, y por lo tanto se suprime la polarización, c
uando el
puerto se configura como salida. Tras un reset de conexión (Power-On-Reset), la po
larización
queda inhibida.
RBPU

Cuatro patillas del PORTB, RB7 a RB4, poseen una característica especial por la qu
e pueden
provocar interrupción si cambian de estado (Interrupción por Cambio), estando config
uradas
como entradas. El estado de estas patillas se compara con su antiguo valor, memo
rizado en un
latch, de esta forma puede saber el circuito si ha habido un cambio de valor en
la entrada. El
conjunto de salidas de RB7 a RB4 se conectan a una puerta OR, para, de esta form
a, generar el
bit de petición de interrupción RBIF, cualquiera que sea la que cambie de valor.
Esta interrupción puede sacar al dispositivo del estado SLEEP (reposo). El program
ador, en la
rutina de servicio de la interrupción, puede borrar la interrupción de la siguiente
manera:

a) Leyendo o escribiendo sobre PORTB. Esto terminará con la condición.


b) Borrando el bit indicador RBIF.
Esta característica se recomienda en operaciones con teclados, donde el PORTB tra
baja con
cambios de valor. No se recomienda la técnica de .Consultas Sucesivas. (Polling) d
el PORTB
cuando se aproveche la característica de Interrupción por Cambio.
RB0/INT es una patilla de interrupción externa, y se configura utilizando el bit I
NTEDG del
registro OPTION_REG (bit 6). Esta patilla se analizará con profundidad en la sección
12.10.1.
Cuando se use Programación Serie en Baja Tensión (LVP) y las polarizaciones del puer
to
estén habilitadas, el bit 3 del registro TRISB debe borrarse para inhibir la polar
ización
sobre RB3 y asegurar la correcta operación del dispositivo.

TABLA 3-3: FUNCIONES DEL PORTB


Nombre
Bit
Buffer
Función

RB0/INT
Bit0
TTL/ST(1)
Patilla de entrada-salida o entrada de interrupción externa.
Polarización programable.
RB1
Bit1
TTL
Patilla de entrada-salida. Polarización programable.
RB2
Bit2
TTL
Patilla de entrada-salida. Polarización programable.
RB3/PGM
Bit3
TTL
Patilla de entrada-salida o modo de programación LVP. Polarización
programable.
RB4
Bit4
TTL
Patilla de entrada-salida (con Interrupción por Cambio). Polarización
programable.
RB5
Bit5
TTL
Patilla de entrada-salida (con Interrupción por Cambio). Polarización
programable.
RB6/PGC
Bit6
TTL/ST(2)
Patilla de entrada-salida (con Interrupción por Cambio) o depuración
in-situ. Polarización programable. Reloj de programación en serie.
RB7/
Bit7
TTL/ST(2)
Patilla de entrada-salida (con Interrupción por Cambio) o depuración
in-situ. Polarización programable. Dato de programación en serie.
TTL = Entrada con niveles TTL; ST = Entrada tipo Schmitt Trigger.
Nota 1: Este buffer es una entrada ST cuando se configura como interrupción extern
a.
Nota 2: Este buffer es una entrada ST cuando se usa en modo de programación serie.

TABLA 3-4: RESUMEN DE REGISTROS ASOCIADOS AL PORTB


Dirección
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor
tras POR,
BOR
Valor tras
otros
Resets

06h, 106h
PORTB
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0
xxxx xxxx
uuuu uuuu
86h, 186h
TRISB
Registro de dirección de datos del puerto B
1111 1111
1111 1111
81h, 181h
OPTION_REG
RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
1111 1111
1111 1111
x = Desconocido; u = Sin cambio. Las celdas oscurecidas no se emplean en el puer
to B.
3.3 REGISTROS PORTC Y TRISC

El puerto C es un puerto bidireccional de 8 bits cuyo registro de sentido de cir


culación de datos
es TRISC. Programando a 1 las líneas de TRISC, el sentido de esas líneas del puerto
es de
entrada. En este momento, los amplificadores de salida están desconectados (alta i
mpedancia).
Por el contrario, programando a 0 TRISC, las líneas del puerto que reciben esta pr
ogramación
quedan conectadas como salidas y, por lo tanto, el contenido de los latches de s
alida aparecerá
en las patillas del dispositivo.
PORTC se multiplexa con varias funciones de periféricos (como se aprecia en la tab
la 3-5), y
posee buffers de entrada tipo Schmitt Trigger.
Cuando se habilita el módulo I2C, las patillas 3 y 4 del PORTC pueden configurarse
con niveles
normales I2C, o con niveles SMBUS, usando el bit CKE (SSPSTAT <6>).
Cuando se habiliten las funciones de periféricos hay que tener cuidado en definir
la dirección de
cada bit del PORTC. Algunos periféricos anulan el bit de dirección para usar la pati
lla como
salida, mientras que otros hacen lo mismo para usarla como entrada. Ya que el bi
t anulado
(TRISC) está efectivo mientras que está habilitado el periférico, hay que evitar el us
o de
instrucciones, tanto de lectura como de escritura, sobre el registro TRISC.
TABLA 3-5: FUNCIONES DEL PORTC
Nombre
Bit
Buffer
Función

RC0/T1OSO/T1CKI
Bit0
ST
Entrada-salida. Salida de oscilación de Timer1. Entrada de reloj del
Timer1.
RC1/T1OSI/CCP2
Bit1
ST
Entrada-salida. Entrada de oscilación externa para Timer1. Entrada
del módulo Capture2. Salida del módulo Compare2. Salida del
módulo PWM2.
RC2/CCP1
Bit2
ST
Entrada-salida. Entrada de Capture1. Salida de Compare1. Salida de
PWM1.
RC3/SCK/SCL
Bit3
ST
Entrada-salida. Reloj serie síncrono para los modos SPI y I2C.
RC4/SDI/SDA
Bit4
ST
Entrada-salida. Dato de entrada en modo SPI. Dato entrada/salida
para el modo I2C.
RC5/SDO
Bit5
ST
Entrada-salida. Dato de salida del Puerto Serie Síncrono (SSP).
RC6/TX/CK
Bit6
ST
Entrada-salida. Reloj del USART (Transmisor Receptor Síncrono
Asíncrono).
RC7/RX/DT
Bit7
ST
Entrada-salida. Dato del USART (Transmisor Receptor Síncrono
Asíncrono).
ST = Entrada tipo Schmitt Trigger.

TABLA 3-6: RESUMEN DE REGISTROS ASOCIADOS AL PORTC


Dirección
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros Resets
07h
PORTC
RC7
RC6
RC5
RC4
RC3
RC2
RC1
RC0
xxxx xxxx
uuuu uuuu
87h
TRISC
Registro de dirección de datos del puerto C
1111 1111
1111 1111
x = Desconocido; u = Sin cambio.

4.0 MEMORIA FLASH DE PROGRAMA Y EEPROM DE DATOS


Tanto la memoria de programa como la de datos son de lectura y escritura en oper
aciones
normales, en todo el rango de alimentación. No puede realizarse un borrado de una
gran zona de
memoria por el programa de usuario (que incluye la supresión del código de protección)
. La
memoria de datos se direcciona por medio del Registro de Funciones Especiales (S
FR).
Hay seis registros para leer o escribir en las memorias de programas y datos, qu
e son:
EECON1
EECON2
EEDATA
EEDATH
EEADR
EEADRH
La memoria de datos permite la lectura y escritura de bytes. Cuando se usa el bl
oque memoria
de datos, el registro EEDATA mantiene el byte para ser escrito, o que ha sido leíd
o, y el registro
EEADR mantiene la dirección a la que estamos accediendo. Los registros EEDATH y
EEADRH no se utilizan para acceder a la memoria EEPROM de datos; estos dispositi
vos
poseen 256 bytes de memoria de datos, y con 8 bits para direccionamiento hay suf
iciente.
La memoria de datos se trata mediante ocho ciclos de borrado y escritura. El tie
mpo de escritura
se controla mediante un temporizador interno, que puede variar por temperatura,
tensión de
alimentación y tolerancias entre dispositivos. Habrá que leer el apartado de especif
icaciones
técnicas para asegurar los proyectos.
La memoria de programa permite leer y grabar palabras de hasta 14 bits. Su acces
o se controla
mediante cálculo y comprobación en una tabla almacenada. Al escribir un byte o una p
alabra
(14 bits), automáticamente se borra la palabra anterior y después se escribe la nuev
a. La
operación de escritura no termina hasta que se completa la palabra grabada. No se
puede
acceder a la memoria de programa cuando está siendo escrita, por consiguiente, no
puede
ejecutarse código alguno. Durante la operación de escritura, el oscilador sigue dand
o reloj a los
periféricos, continuando, por lo tanto, su operación. Posibles interrupciones se det
ectarán y se
pondrán en espera hasta que la escritura termine. Cuando esto suceda, la próxima ins
trucción en
curso se ejecutará, y se saltará a la dirección suministrada por el vector de interrup
ción.
Cuando se trabaja con la memoria de programa, los registros EEDATH:EEDATA forman
una
palabra de dos bytes que permite los 14 bits de longitud de palabra de datos de
la memoria. Los
registros EEADRH:EEADR forman un bloque de dos bytes cuya misión es contener los 1
3 bits
de dirección que permite la capacidad de la memoria de programa. Estos dispositivo
s poseen
una capacidad de memoria de programa de 8Kpalabras, con un rango de dirección desd
e 0000h
hasta 3FFFh. Los 2 bits de más peso del conjunto EEDATH:EEDATA, que sobran, se lee
rán
como 0.
El valor escrito en la memoria de programa no tiene que ser necesariamente una i
nstrucción
válida. Números mayores de 14 bits pueden guardarse en la memoria, como parámetros de
calibración, números de serie, encapsulados de 7 bits ASCII, etc. Si se ejecuta un p
rograma con
datos de códigos inválidos de instrucciones, el resultado es instrucciones NOP.

4.1 El registro EEADR


Este registro de dirección puede direccionar un máximo de 256 bytes de la memoria EE
PROM
de datos, o un máximo de 8Kpalabras de la memoria FLASH de programa.
Cuando seleccionamos un valor de dirección en la memoria de programa, el bit más
significativo (MSB) de la dirección se graba en el registro EEADRH, y el bit menos
significativo (LSB) se escribe en el registro EEADR. Al seleccionar un valor de
dirección en la
memoria de datos, solamente se escribe en EEADR el bit LSB.

4.2 Los registros EECON1 y EECON2

EECON1 es el registro de control para el acceso a la memoria.


EECON2 no es físicamente un registro. Si leemos EECON2 obtenemos todos 0. Este reg
istro se
usa exclusivamente en la secuencia de escritura de la memoria.
El bit de control EEPGD determina si el acceso debe producirse a la memoria de p
rograma o a
la de datos. Cuando se borra, cualquier operación subsiguiente se realizará en la me
moria de
datos; activándolo, las operaciones que sigan lo harán con la memoria de programa.
Los bits de control RD y WR inician las operaciones de lectura y escritura, resp
ectivamente.
Estos bits se pueden activar por software pero no borrar; se borran por hardware
cuando se
finaliza la operación de lectura o escritura. La inhabilitación del borrado por soft
ware del bit
WR evita una accidental prematura finalización de la operación de escritura.
El bit WREN, cuando se pone a 1, permite la operación de escritura. Al conectar el
dispositivo,
este bit está a 0. El bit WRERR se activa cuando se interrumpe una operación de escr
itura
debido a un reset o WDT, durante una operación normal. En este caso, a continuación
del reset, el programador debe chequear el bit WRERR y volver a escribir la posi
ción. El valor
del dato, del registro de dirección y del bit EEPGD permanecen sin cambio.
El bit indicador de interrupción EEIF, en el registro PIR2, se activa cuando se co
mpleta la
escritura. Debe borrarse por software.
MCLR
REGISTRO 4-1: REGISTRO EECON1 (DIRECCIÓN 18Ch)

R/W-x
U-0
U-0
U-0
R/W-x
R/W-0
R/S-0
R/S-0

EEPGD
---
---
---
WRERR
WREN
WR
RD

R = De lectura
W = De escritura
U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit7
bit0
bit 7:
EEPGD: Bit de selección EEPROM Programa-Datos.

1 = Acceso a la memoria de Programa.

0 = Acceso a la memoria de Datos.

(Este bit no debe modificarse cuando está realizándose una operación de lectura o escr
itura).
bit 6-4:
Sin implementar: Da cero al leer.

bit 3:
WRERR: Bit indicador de error en EEPROM.
1 = Se ha finalizado prematuramente una operación de escritura.

(Si se produce un reset o WDT, durante una operación normal).

0 = Se ha completado con éxito la operación de escritura..

bit 2:
WREN: Bit de habilitación de escritura en EEPROM.

1 = Permite ciclo de escritura.


0 = Inhibe el ciclo de escritura.

bit 1:
WR: Bit de control de escritura.

1 = Inicia un ciclo de escritura. (Este bit se borra por hardware cuando se comp
leta la escritura. Por
software, solamente puede activarse.

0 = Ciclo de escritura se ha completado correctamente.

bit 0:
RD: Bit de control de lectura.
1 = Se inicia una lectura de EEPROM. Este bit se borra por hardware y se activa
por software.

0 = No se inicia la lectura de la EEPROM.


4.3 Lectura de la memoria EEPROM de datos

Para leer una posición de la memoria de datos, el usuario debe escribir en el regi
stro EEADR la
dirección deseada, borrar el bit de control EEPGD (EECON1<7>) y, entonces, activar
el bit de
control RD (EECON1<0>). El dato estará disponible, en el próximo ciclo de instrucción,
en el
registro EEDATA, por consiguiente podrá leerse en la próxima instrucción. EEDATA
mantendrá este valor, hasta que se efectúe otra operación de lectura, o sea modificado
expresamente por el programador.

4.4 Escritura de la memoria EEPROM de datos

Para escribir en una posición de la memoria EEPROM de datos, primero hay que coloc
ar la
dirección en el registro EEADR, y después el dato a escribir, en el registro EEDATA.
Entonces
se iniciará la secuencia del ejemplo 4-2, que completará el ciclo de escritura.
Ejemplo 4-2: Escritura en la EEPROM de datos
1 BSF STATUS, RP1 ; Selección de banco 2.
2 BCF STATUS, RP0 ; .
3 MOVLW DATA_EE_ADDR ;
4 MOVWF EEADR ; Dirección de escritura.
5 MOVLW DATA_EE_DATA ;
6 MOVWF EEDATA ; Dato a escribir en memoria.
7 BSF STATUS, RP0 ; Selección de banco 3.
8 BCF EECON1, EEPGD ; Memoria de datos.
9 BSF EECON1, WREN ; Habilitación de escritura.
10 BCF INTCON, GIE ; Inhibe las interrupciones.
11 MOVLW 55h ; Escribe 55h en EECON2.
12 MOVWF EECON2 ; .
13 MOVLW AAh ;
14 MOVWF EECON2 ; Escribe AAh en EECON2.
15 BSF EECON1, WR ; Inicia la escritura.
16 BSF INTCON, GIE ; Habilita interrupciones.
17 SLEEP ; Espera hasta terminar la escritura.
18 BCF EECON1, WREN ; Inhibe la escritura.
La escritura no se iniciará si la secuencia no se sigue exactamente: escribir 55h
en EECON2,
escribir AAh en EECON2, activar bit WR; esto para cada ciclo de escritura. Se re
comienda muy
encarecidamente inhibir las interrupciones durante la operación.
Asimismo, el bit WREN debe activarse al inicio de la secuencia y borrarse al fin
al. De esta
manera evitaremos escrituras accidentales durante la ejecución de programas.
Después de iniciada la secuencia de escritura, un borrado del bit WREN no afectará a
la correcta
conclusión de la operación. El bit WR estará inhibido hasta después de que se active el
bit
WREN. Ambos bits no deben activarse en la misma instrucción.
Al final del ciclo de escritura, el bit WR se borrará por hardware, y el bit indic
ador de
interrupción por finalización de ciclo de escritura (EEIF) se activará. Este bit debe
borrarse por
software.
4.5 Lectura de la memoria FLASH de Programa

Para leer una posición de la memoria de programa escribiremos los dos bytes de la
dirección en
los registros EEADR y EEADRH, activaremos el bit de control EEPGD (EECON1<7>), p
ara,
finalmente, activar el bit de control RD (EECON1<0>). Siempre que el bit de cont
rol de lectura
está activo, el microcontrolador utiliza los dos siguientes ciclos de instrucción pa
ra leer el dato.
Este dato queda disponible en los registros EEDATA y EEDATH después de la segunda
instrucción NOP. Durante estas instrucciones es cuando se efectúa la lectura de los
dos bytes (se
recuerda que la longitud de la palabra, en la memoria de programa, es de 14 bits
). Los registros
EEDATA y EEDATH mantendrán el valor leído hasta que se produzca otra lectura, o el
programador modifique su valor.
Ejemplo 4-3: Lectura de memoria FLASH
BSF STATUS, RP1 ; Selección de banco 2
BCF STATUS, RP0 ; .
MOVLW ADDRH ; Carga byte de dirección alta en el
MOVWF EEADRH ; registro EEADRH.
MOVLW ADDRL ; Carga byte de dirección baja en el
MOVWF EEADR ; registro EEADR.
BSF STATUS, RP0 ; Selecciona banco 3.
BSF EECON1, EEPGD ; Selecciona memoria de programa.
BSF EECON1, RD ; Lectura de la EEPROM.
NOP ; Durante esta instrucción y la siguiente,
NOP ; se produce la lectura de los dos bytes.
BCF STATUS, RP0 ; Selecciona banco 2.
MOVF EEDATA, W ; Carga lectura byte bajo, en W.
MOVF EEDATH, W ; Carga lectura byte alto, en W.

4.6 Escritura de la memoria FLASH de Programa

Solamente podrá escribirse una palabra en la memoria de programa si la palabra no


es un código
de protección de área de memoria, y el bit de configuración WRT está activado. Para escr
ibir en
una posición de esta memoria, primero deben estar grabados los dos bytes de la dir
ección en los
registros EEADR y EEADRH, posteriormente se grabarán los dos bytes del dato en los
registros
EEDATA y EEDATH, después se activará el bit de control EEPGD (EECON1<7>), y,
finalmente, se activará el bit WR (EECON1<1>). La secuencia se detalla en el ejemp
lo 4-4.
El microcontrolador realizará diez operaciones internas detenido durante las próxima
s dos
instrucciones, para tener el tiempo necesario de la escritura. Este estado no es
como el modo
SLEEP, en el que el oscilador de periféricos seguía funcionando. Por este motivo, la
s dos
siguientes instrucciones después del .BSF EECON1, WR. serán NOP. Después del ciclo de
escritura, el microcontrolador continuará con la tercera instrucción después de .BSF E
ECON1,
WR..
Ejemplo 4-4: Escritura en la memoria FLASH de Programa
BSF STATUS, RP1 ; Selecciona banco 2.
BCF STATUS, RP0 ; .
MOVLW ADDRH ; Carga dirección alta.
MOVWF EEADRH ; .
MOVLW ADDRL ; Carga dirección baja.
MOVWF EEADR ; Carga dirección baja.
MOVLW DATAH ; Carga byte alto a escribir.
MOVWF EEDATH ; .
MOVLW DATAL ; Carga byte bajo a escribir.
MOVWF EEDATA ; .
BSF STATUS, RP0 ; Selecciona banco 3.
BSF EECON1, EEPGD ; Selecciona memoria de programa.
BSF EECON1, WREN ; Habilita escritura.
BCF INTCON, GIE ; Inhibe interrupciones.
MOVLW 55h ; Carga código escritura.
MOVWF EECON2 ; .
MOVLW AAh ; .
MOVWF EECON2 ; .
BSF EECON1, WR ; Comienza la escritura.
NOP ; Tiempo para escritura.
NOP ; Tiempo para escritura.
; Ahora, el microcontrolador quedará a
; la espera de que finalice la escritura.
; Cuando esto suceda, continuará con
; la tercera instrucción desde la
; BSF EECON1, WR.
BSF INTCON, GIE ; Habilita interrupciones.
BCF EECON1, WREN ; Se inhibe la escritura.

4.7 Verificación de escritura

Dependiendo de la aplicación, puede necesitarse la seguridad de que la grabación cor


responde
con el original. Esto se usa en aplicaciones en que excesivas escrituras pueden
llevar a los datos
al límite de las especificaciones.
Generalmente, el fallo de un bit corresponde a la lectura 0 cuando se escribió un
1 (debido al
diseño interno del dispositivo).

4.8 Protección contra picos transitorios en escritura

4.8.1 Memoria EEPROM de Datos


Existen condiciones en las que el dispositivo no debe ser escrito en su memoria
de datos. Para
que esto no ocurra accidentalmente se han dispuesto varios mecanismos internos.
En la
conexión, el bit WREN queda borrado, y además, durante un tiempo de 72 milisegundos
después de la conexión, la escritura de la EEPROM está bloqueada.
La forma de iniciar la secuencia de escritura y los métodos de prevención, evitan es
crituras
accidentales en casos de bajadas de tensión, picos de alimentación o errores en prog
ramas.
4.8.2 MEMORIA FLASH DE PROGRAMA

Para proteger la memoria de programa contra escrituras accidentales, el bit de c


onfiguración
WRT debe programarse a 0. La secuencia de escritura debe respetarse escrupulosam
ente. El bit
WRT y la palabra de configuración no pueden programarse con los códigos del usuario;
solamente a través de un programador externo.
4.9 Código de protección durante la operación

Cada bloque de memoria reprogramable posee un código propio como mecanismo de


protección. Lecturas y escrituras externas se impiden si cada uno de estos mecanis
mos están
habilitados.

4.9.1 MEMORIA EEPROM DE DATOS

El microcontrolador, puede, por sí mismo, leer y escribir en la EEPROM interna de


datos,
indiferentemente del estado del bit de configuración del código de protección.

4.9.2 MEMORIA FLASH DE PROGRAMA

El microcontrolador puede leer y ejecutar instrucciones, fuera de la memoria int


erna de
programa, indiferentemente del estado de los bits de configuración del código de pro
tección. Sin
embargo, el bit de configuración WRT y los bits del código de protección, producen dif
erentes
efectos en la escritura de la memoria de programa. En la tabla 4-1 se muestran v
arias
configuraciones y estados de lecturas y escrituras. Para borrar el bit WRT, o el
código de
protección, se requiere que el dispositivo esté totalmente borrado.

TABLA 4-1: ESTADO DE LECTURA-ESCRITURA DE LA MEMORIA FLASH DE PROGRAMA


Bits de configuración
Posiciones de memoria
Lectura
interna
Escritura
interna
Lectura
ICSP
Escritura
ICSP
CP1
CP0
WRT

0
0
X
Toda la memoria de programa

No
No
No
0
1
0
Áreas desprotegidas

No

No
0
1
0
Áreas protegidas

No
No
No
0
1
1
Áreas desprotegidas



No
0
1
1
Áreas protegidas

No
No
No
1
0
0
Áreas desprotegidas

No

No
1
0
0
Áreas protegidas

No
No
No
1
0
1
Áreas desprotegidas



No
1
0
1
Áreas protegidas

No
No
No
1
1
0
Toda la memoria de programa

No


1
1
1
Toda la memoria de programa



TABLA 4-2: REGISTROS ASOCIADOS CON LA MEMORIA EEPROM FLASH DE PROGRAMA


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,
BOR
Valor tras
otros
resets
0Bh, 8Bh,
10Bh, 18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
10Dh
EEADR
Registro de dirección de la EEPROM
xxxx xxxx
uuuu uuuu
10Fh
EEADRH
---
---
---
Dirección alta de la EEPROM
xxxx xxxx
uuuu uuuu
10Ch
EEDATA
Registro de datos de la EEPROM
xxxx xxxx
uuuu uuuu
10Eh
EEDATH
---
---
Registro de datos de más peso
xxxx xxxx
uuuu uuuu
18Ch
EECON1
EEPGD
---
---
---
WRERR
WREN
WR
RD
x--- x000
x--- u000
18Dh
EECON2
Registro2 de control de la EEPROM (no es un registro físico)

8Dh
PIE2
---
(1)
---
EEIE
BCLIE
---
---
CCP2IE
-r-0 0--0
-r-0 0 0
0Dh
PIR2
---
(1)
---
EEIE
BCLIE
---
---
CCP2IE
-r-0 0--0
-r-0 0 0
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0)
. Las celdas sombreadas no se
utilizan durante el acceso a la memoria FLASH.
Nota 1: Estos bits están reservados; se deben mantener siempre a cero.
5.0 MÓDULO TIMER 0 (TEMPORIZADOR 0)

El módulo Timer0 es un bloque que puede trabajar como temporizador o contador, con
las
siguientes características:
.
Temporizador o contador de 8 bits.
.
Se puede leer y programar.
.
Predivisor de 8 bits programable por software.
.
Selección de reloj interno o externo.
.
Provoca interrupción cuando desborda (cuando pasa de FFh a 00h).
.
Selección de flanco para reloj externo.

La figura 5-1 representa el esquema a bloques del Timer0 y del Predivisor, compa
rtido este
último con el WDT.
El modo temporizador se selecciona poniendo a 0 el bit T0CS (OPTION_REG <5>). En
este
modo, y trabajando sin Predivisor, la cantidad cargada en TMR0 se incrementará con
cada ciclo
de instrucción. Si se escribe sobre TMR0, el incremento de éste se inhibirá durante lo
s dos
próximos ciclos de instrucción. El usuario puede trabajar con él escribiendo y ajustan
do el valor
del registro TMR0.

El modo contador se selecciona colocando a 1 el bit T0CS (OPTION_REG<5>). En est


e modo,
el Timer0 incrementa con cada flanco de subida o bajada que llega por la patilla
RA4/T0CKI. El
tipo de flanco lo determina el bit T0SE (OPTION_REG<4>): 0 seleccionará flanco de
subida, 1
lo contrario. En la sección 5.2 se analizan las restricciones de la entrada extern
a de reloj.
El módulo Predivisor está compartido entre el Timer0 y el WDT, y no se puede leer ni
escribir.
En la sección 5.3 se ofrecen los detalles.
5.1 Interrupción del Timer0
La interrupción de TMR0 se genera cuando el registro TMR0 desborda. Este desbordam
iento
activa el bit T0IF (INTCON<2>). La interrupción puede enmascararse borrando el bit
T0IE
(INTCON<5>). El bit T0IF debe borrarse por software en la rutina de servicio del
Timer0 antes
de volver a habilitar esta interrupción. La interrupción TMR0 no puede sacar a la CP
U del
estado SLEEP ya que el temporizador está bloqueado durante este estado.

5.2 Usando el Timer0 con reloj externo

Cuando no se usa el Predivisor, la entrada de reloj externo es la misma que la s


alida del
Predivisor. La sincronización de T0CKI con la fase de reloj interno se consigue ca
pturando la
salida del Predivisor en los ciclos de reloj de fase interna Q2 y Q4. Por consig
uiente, es
necesario para T0CKI: permanecer en alto al menos un tiempo igual al doble del p
eríodo de
oscilador TOSC (y una pequeña red RC de retraso de 20 ns), permanecer en bajo el m
ismo
tiempo, y con la misma red RC. En el apartado de especificaciones eléctricas se of
recen todos
los datos necesarios.

5.3 Predivisor

Solamente hay disponible un módulo Predivisor, que está compartido por Timer0 y WDT.
Si se
asigna a uno de los módulos, no puede ser utilizado por el otro.
Los bits PSA y PS2:PS0 (OPTION_REG<3:0>) determinan la asignación del Predivisor,
y la
división que se efectuará.
Cuando se asigna al módulo Timer0, todas las instrucciones que escriben sobre el r
egistro
TMR0 (por ejemplo CLRF 1, MOVWF 1, BSF 1, x... etc.) borrarán el Predivisor. Cuand
o se
asigna al módulo WDT, una instrucción CLRWDT borrará el Predivisor y el Watchdog Timer
.
El Predivisor no se puede leer ni escribir.
Nota: Escribiendo sobre TMR0, cuando el Predivisor está asignado al Timer0, se bor
rará la
cuenta del Predivisor pero no se cambiará la asignación de éste.
REGISTRO 5-1: REGISTRO OPTION_REG

R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1

-RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0

R = De lectura
W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
-RBPU:
bit 6:
INTEDG
bit 5:
T0CS: Bit de selección de origen de reloj

1 = Transición en la patilla T0CKI.

0 = Reloj interno cada ciclo de instrucción (CLKOUT)

bit 4:
T0SE: Bit de selección de flanco de reloj para TMR0.

1 = Incrementa con la transición de alto a bajo en la patilla T0CKI.


0 = Incrementa con la transición de bajo a alto en la patilla T0CKI.

bit 3:
PSA: Bit de asignación de Predivisor.

1 = Predivisor asignado al WDT.

0 = Predivisor asignado al módulo Timer0.

bit 2-0:
PS2:PS0: Bits de selección de división.
Valor de los bits División TMR0 División WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128

TABLA 5-1: REGISTROS ASOCIADOS AL TIMER0


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,
BOR
Valor tras
otros
resets

01h, 101h,
TMR0
Registro del módulo Timer0
xxxx xxxx
uuuu uuuu
0Bh, 8Bh,
10Bh, 18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
81h, 181h
OPTION_REG
-RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
1111 1111
1111 1111
x = Desconocido; u = Sin cambio; r = Reservado. Las celdas sombreadas no se util
izan en el Timer0.
6.0 Módulo Timer1

Este módulo es un temporizador-contador de 16 bits, formado por dos registros de l


ectura y
escritura de 8 bits llamados TMR1H y TMR1L. La pareja de registros TMR1H:TMR1L s
e
incrementan desde 0000h hasta FFFFh, volviendo a 0000h en el ciclo de reloj sigu
iente. A este
retorno a 0000h se llama desbordamiento, y si las interrupciones están habilitadas
se producirá
una que advertirá a la CPU que el Timer1 ha llegado al final. El bit indicador de
esta
interrupción es TMR1IF (PIR1<0>). La interrupción puede habilitarse o inhibirse acti
vando o
borrando, respectivamente, el bit TMR1IE (PIE<0>).
El Timer1 puede trabajar en cualquiera de los dos modos siguientes:
.
Como temporizador.
.
Como contador.

El modo de operación lo determina el bit de selección de reloj TMR1CS (T1CON<1>).


En modo temporizador, el Timer1 se incrementa cada ciclo de instrucción, en modo c
ontador, el
incremento se produce cada flanco de subida en la entrada de reloj externo. El T
imer1 puede
habilitarse o inhibirse activando o borrando, respectivamente, el bit de control
TMR1ON
(T1CON<0>). Timer1 posee, también, una entrada de reset interna, que puede activar
la cada
uno de los dos módulos CCP. El registro 6.1 muestra el control del Timer1.

REGISTRO 6-1: T1CON: REGISTRO DE CONTROL DEL TIMER1 (DIRECCIÓN 10h)


U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0

---
---
T1CKPS1
T1CKPS0
T1OSCEN
-T1SYNC
TMR1CS
TMR1ON

R = De lectura
W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR
bit7

bit0
bit 7-6:
Sin implementar: Se lee como 0.
bit 5-4:
T1CKPS1:T1CKPS0: Bits de selección de predivisión de reloj de entrada a Timer1.

11 = 1:8 Valor de predivisión

10 = 1:4 Valor de predivisión

01 = 1:2 Valor de predivisión

00 = 1:1 Valor de predivisión


bit 3:
T1OSCEN: Bit de control de habilitación de oscilador para TMR1.

1 = Oscilador habilitado.

0 = Oscilador anulado.

bit 2:
-T1SYNC: Bit de control de sincronización de la entrada de reloj externo de Timer1
.
TMR1CS = 1

1 = Entrada de reloj externo no sincronizada.

0 = Entrada de reloj externo sincronizada.

TMR1CS = 0

En esta circunstancia, Timer1 usa el reloj interno.

bit 1:
TMR1CS: Bit de selección de origen de reloj para Timer1.

1 = Flanco de subida en la patilla RC0/T1OSO/T1CKI, o en la patilla RC1/T1OSI/CC


P2.
0 = Reloj interno (Fosc/4).

bit 0:
TMR1ON: Bit de conexión de Timer1.

1 = Timer1 habilitado.

0 = Timer1 detenido.

Cuando se habilita el oscilador del Timer1 (T1OSCEN = 1), las patillas RC1/T1OSI
/CCP2 y
RC0/T1OSO/T1CKI quedan como entradas; o sea, que se ignora el valor de TRISC<1:0
>.
6.1 Operación del Timer1 en modo temporizador
El modo temporizador se selecciona borrando el bit TMRCS (T1CON<1>). En este mod
o, la
entrada de reloj es Fosc/4; el bit de sincronización (T1CON<2>) no tiene efecto en
este modo porque el reloj interno siempre está sincronizado.
SYNCT1
6.2 Operación del Timer1 como contador

El Timer1 puede trabajar como contador asíncrono o síncrono, dependiendo de la progr


amación
del bit TMR1CS.
Cuando el contador Timer1 va a incrementarse vía externa, los incrementos suceden
en el flanco
de subida. Después de que el Timer1 se programe en modo contador, el módulo esperará u
n
flanco de bajada antes de comenzar los incrementos con los flancos de subida.

6.3 El Timer1 como contador sincronizado

El modo contador se selecciona poniendo a 1 el bit TMR1CS. En este modo, el Time


r1
incrementará en cada flanco de subida de la entrada de reloj en la patilla RC1/T1O
SI/CCP2,
cuando el bit T1OSCEN está a 1, o en la patilla RC0/T1OSO/T1CKI, cuando el bit T1O
SCEN
esté a 0.
Si se borra, la entrada externa de reloj se sincroniza con la fase interna de re
loj. La
sincronización se produce después de la etapa del Predivisor. Este bloque es un cont
ador cíclico
asíncrono.
6.4 El Timer1 como contador asíncrono

Si el bit de control (T1CON<2>) se activa, la entrada de reloj externa no queda


sincronizada. El temporizador continúa su incremento, totalmente asíncrono con la fa
se de reloj
interna. El temporizador continuará funcionando durante el estado de .alerta. (SLE
EP), y puede
provocar una interrupción en su desbordamiento que saque de su .letargo. a la CPU.
De
cualquier modo, es necesario tomar algunas precauciones en el software para leer
o escribir en
el Timer1 (Sección 6.4.1).

6.4.1 LEYENDO Y ESCRIBIENDO EL TIMER1 COMO CONTADOR ASÍNCRONO

Al leer TMR1H o TMR1L cuando el Timer1 está funcionando como contador asíncrono, el
hardware garantiza la lectura correcta. Sin embargo, el usuario debe conocer la
existencia de
ciertos problemas al leer el contenido de 16 bits, en dos bloques de 8 bits, com
o quiera que
puede producirse el desbordamiento del contador entre las dos lecturas.
En la escritura, se recomienda al usuario detener el temporizador, y, entonces,
escribir el valor
deseado sobre el registro. Una escritura cuando el temporizador está siendo increm
entado puede
provocar un valor impredecible en el registro.

6.5 Oscilador del Timer1

Se debe conectar un cristal de cuarzo entre las patillas T1OSI (entrada) y T1OSO
(salida del
amplificador oscilador). El oscilador se habilita con el bit T1OSCEN (T1CON<3>),
y
funcionará en bajo consumo a partir de 200 KHz. Este oscilador continúa funcionando
aunque
la CPU entre en modo SLEEP (alerta), y está diseñado especialmente para trabajar a 3
2 KHz. La
tabla 6-1 la selección del condensador dependiendo de la frecuencia de trabajo; en
la figura 6-3
se aprecia una aplicación del Timer1 como reloj de tiempo real.

Tabla 6-1: SELECCIÓN DE CONDENSADORES


PARA EL OSCILADOR DEL TIMER1
Tipo
Oscilador
Frecuen-
cia
C1
C2

LP
32 KHz
33 pF
33 pF
100 KHz
15 pF
15 pF
200 KHz
15 pF
15 pF
Estos valores son para guía de diseño
Cristales comprobados:
32,768 KHz
Epson C-
001R32.768K-A
+/- 20 PPM
100 KHz
Epson C-2 100.00KC-P
+/- 20 PPM
200 KHz
STD XTL 200.000KHz
+/- 20 PPM
Nota 1: Una mayor capacidad aumenta la estabilidad
del oscilador pero también aumenta el tiempo de
arranque.
Nota 2: Ya que cada oscilador o resonador posee sus
propias características, el usuario debe consultar las
especificaciones del dispositivo a utilizar.
6.6 Reset del Timer1 usando la salida de disparo del CCP

Si los módulos CCP1 o CCP2 se configuran en modo comparación para generar un .dispar
o por
suceso especial. (CCP1M3:CCP1M0 = 1011), esta señal provocará el reset del Timer1.
Nota: El .disparo por suceso especial. de los módulos CCP1 y CCP2 no activará el bit
indicador de interrupción TMR1IF (PIR<0>).
El Timer1 debe configurarse como temporizador o contador síncrono para disponer de
esta
característica. Si Timer1 está funcionando en modo contador asíncrono, este reset no s
e
producirá.
En el caso de que coincida la escritura sobre Timer1, y un .disparo por suceso e
special. desde
CCP1 o CCP2, la escritura tendrá preferencia.
En este modo de operación, la pareja de registros CCPRxH:CCPRxL produce el período p
ara
Timer1.
6.7 Reset de la pareja de registros TMR1H:TMR1L, del Timer1
Los registros TMR1H y TMR1L no se ponen a 00h con la conexión del sistema (POR), o
con
otros resets, exceptuando el reset del .disparo por suceso especial. de CCP1 o C
CP2.
El registro T1CON se borra con los reset POR o BOR. Esto produce la detención del
Timer1, y
pone el Predivisor a 1:1. Los demás resets no afectan a este registro.

6.7 Predivisor del Timer1

El contador Predivisor se borra al escribir sobre los registros TMR1H o TMR1L.

TABLA 6-2: REGISTROS ASOCIADOS AL TIMER1


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros
resets

0Bh, 8Bh,
10Bh, 18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
0Eh
TMR1L
Byte de menor peso del registro de 16 bits TMR1
xxxx xxxx
uuuu uuuu
0Fh
TMR1H
Byte de mayor peso del registro de 16 bits TMR1
xxxx xxxx
uuuu uuuu
10h
T1CON
---
---
T1CKPS1
T1CKPS0
T1OSCEN
T1SYNC
TMR1CS
TMR1ON
--00 0000
--uu uuuu
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0)
. Las celdas sombreadas no se utilizan en el
Timer1.
Nota 1: Los bits PSPIE y PSPIF se reservan en el PIC 16F873/876; se deben manten
er siempre a 0.
7.0 Módulo Timer2

El Timer2 es un temporizador de 8 bits con Predivisor y postdivisor. Puede utili


zarse como base
de tiempos en modo PWM de los módulos CCP. El registro TMR2 es de lectura y escrit
ura, y
puede borrarse con cualquier reset.
La entrada de reloj (Fosc/4) tiene la opción de predivisión por 1:1, 1:4 o 1:16, sel
eccionada por
los bits de control T2CKPS1:T2CKPS0 (T2CON<1:0>).
El módulo Timer2 posee el registro de período de 8 bits TMR2. Este temporizador incr
ementa
desde 00h hasta la coincidencia con PR2. En ese momento, se inicializará a 00h en
el siguiente
ciclo de incremento. PR2 es un registro de lectura y escritura, y se inicializa
a FFh tras un reset.
La salida de coincidencia de TMR2 se pasa a través de un postdivisor de 4 bits (of
reciendo una
división de frecuencia desde 1:1 hasta 1:16). Después de esto, se activará la interrup
ción de
TMR2, que queda memorizada en el bit indicador TMR2IF (PIR1<1>).
El Timer2 puede anularse, borrando el bit de control TMR2ON (T2CON<2>), para min
imizar el
consumo del dispositivo.
El registro 7-1 muestra el registro de control del Timer2.

REGISTRO 7-1: T2CON: REGISTRO DE CONTROL DEL TIMER2 (DIRECCIÓN 12h)

U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0

---
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0

R = De lectura
W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit7
bit0
bit 7:
Sin implementar: Se lee como 0.

bit 6-3:
TOUTPS3:TOUTPS0: Bits de selección de postdivisión de Timer2.

0000 = 1:1 valor de postdivisión

0001 = 1:2 valor de postdivisión

0010 = 1:3 valor de postdivisión

1111 = 1:16 Valor de postdivisión


bit 2:
TMR2ON: Bit de activación de TMR2.

1 = Timer2 está activado.

0 = Timer2 está desactivado.

bit 1-0:
T2CKPS1:T2CKPS0: Bit de selección de predivisión para Timer2.
00 = 1:1 valor de predivisión.

01 = 1:4 valor de predivisión.

1X = 1:16 valor de predivisión.

7.1 Predivisión y postdivisión del Timer2


Los contadores pre y postdivisores se borran con cualquiera de estos acontecimi
entos:
.
Una escritura en el registro TMR2.
.
Una escritura en el registro T2CON.
.
Cualquier reset del dispositivo (POR, MCLR, WDT o BOR).

El registro TMR2 no se borra cuando se escribe en T2CON.

7.2 Salida de TMR2

La salida de TMR2, antes del postdivisor, sirve para dar reloj al puerto SSPort,
quien utiliza esta
señal para crear su desplazamiento de datos serie. En la figura 7-1 se aprecia est
o con detalle.

TABLA 7-1: REGISTROS ASOCIADOS AL TIMER2


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,BOR
Valor tras
otros
resets

0Bh,
8Bh,
10Bh,
18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000
000u
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000
0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
11h
TMR2
Registro del módulo Timer2
0000 0000
0000 0000
12h
T2CON
---
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0
-000 0000
-000 000
92h
PR2
Registro de período del Timer2
1111 1111
1111 1111
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0)
. Las celdas sombreadas no se
utilizan en el Timer1.
Nota 1: Los bits PSPIE y PSPIF se reservan en el PIC 16F873/876; se deben manten
er siempre a 0.
8.0 Módulos CAPTURA/COMPARACIÓN/PWM
Cada módulo Captura/Comparación/PWM (CCP) contiene un registro de 16 bits que puede
trabajar como:
.
Registro de captura de 16 bits.
.
Registro de comparación de 16 bits.
.
Registro de relación de ciclo PWM.

El conjunto CCP1 y CCP2 son idénticos en el modo de operar, con la excepción de la


operación de .disparo por suceso especial.. La tabla 8-1 y 8-2 muestra los recurso
s e
interacciones del módulo CCP. En las secciones siguientes, la actividad de CCP se
describe con
respecto a CCP1.
Módulo CCP1:
El registro CCPR1 está compuesto de dos registros de 8 bits: CCPR1L (byte bajo) y
CCPR1H
(byte alto). El registro CCP1CON controla la operación de CCP1. El disparo por suc
eso
especial se genera cuando existe una coincidencia en la comparación, y se borrará el
Timer1.
Módulo CCP2:
El registro CCPR2 está compuesto de dos registros de 8 bits: CCPR2L (byte bajo) y
CCPR2H
(byte alto). El registro CCP2CON es el encargado de controlar la operación de CCP2
. Un
disparo por suceso especial se genera por coincidencia en la comparación, se borra
rá el Timer1
y se arranca el convertidor A/D, si está habilitado.

Tabla 8-1: Modo CCP Timer


Recursos

Modo CCP
Temp. afectado

Captura
Comparación
PWM
Timer1
Timer1
Timer2
Tabla 8-2: Interacción de los dos módulos CCP
Modo CCPx
Modo CCPy
Interacción

Captura
Captura
Misma base de tiempos que TMR1
Captura
Comparación
El comparador se configurará para .dispara por
suceso especial., que borrará a TMR1.
Comparación
Comparación
El comparador se configurará para .disparo por
suceso especial, que borrará a TMR1.
PWM
PWM
El PWM tiene la misma frecuencia y ciclo de
actualización (la interrupción de TMR2).
PWM
Captura
Ninguna
PWM
Comparación
Ninguna
REGISTRO 8-1: REGISTRO CCP1CON/CCP2CON (DIRECCIÓN 17h/1Dh)

U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0

---
---
CCPxX
CCPxY
CCPxM3
CCPxM2
CCPxM1
CCPcM0

R = De lectura
W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit7

bit0
bit 7-6:
Sin implementar: Se lee como 0.

bit 5-4:
CCPxX:CCPxY: Bits menos significativos de PWM.
Modo Captura: No usado.

Modo Comparación: No usado.

Modo PWM: Estos bits son los dos menos significativos de la relación de ciclo de P
WM. Los ocho
más significativos se encuentran en el registro CCPRxL.

bit 3-0:
CCPxM3:CCPxM0: Bits de selección de modo CCPx.
0000 = Captura/Comparación/PWM desconectados (reset del módulo CCPx).

0100 = Modo Captura, todos los flancos de bajada.

0101 = Modo Captura, todos los flancos de subida.

0110 = Modo Captura, cada 4 flancos de subida.

0111 = Modo Captura, cada 16 flancos de subida.

1000 = Modo Comparación, activa la salida con la coincidencia (se activa el bit CC
PxIF).

1001 = Modo Comparación, borra la salida con la coincidencia (se activa el bit CCP
xIF).
1010 = Modo Comparación, genera una interrupción cuando hay coincidencia (activa bit
CCPxIF, sin
efecto en la patilla CCPx)

1011 = Modo Comparación, disparo por suceso especial (activa bit CCPxIF, patilla C
CPx sin efecto);
CCP1 borra a TMR1; CCP2 borra TMR1 y arranca el convertidor A/D (si este módulo es

habilitado).

11xx = Modo PWM.

8.1 Modo Captura


En el modo Captura, CCPR1H:CCPR1L capturan los 16 bits del registro TMR1 cuando
ocurre
un suceso sobre la patilla RC2/CCP1. Este suceso puede ser:
.
Cada flanco de bajada.
.
Cada flanco de subida.
.
Cada cuatro flancos de subida.
.
Cada dieciséis flancos de subida.

El suceso se selecciona con los bits de control CCP1M3:CCP1M0 (CCP1CON<3:0>). Cu


ando
se realiza una captura, el bit indicador de petición de interrupción CCP1IF (PIR1<2>
) se activa,
debiendo borrarse en el programa este bit. Si ocurre otra captura antes de que s
e lea el valor
anterior en el registro CCPR1, el antiguo valor capturado se perderá.

8.1.1 CONFIGURACIÓN DE LA
PATILLA CCP
En modo Captura, la patilla RC2/CCP1 se
configurará como entrada activando el bit
TRISC<2>.

Nota: Si la patilla RC2/CCP1 se configura


como salida, una escritura en el puerto
puede provocar una condición de captura.
8.1.2 SELECCIÓN DE MODO DE TIMER1

El Timer1 debe funcionar en modo temporizador o contador sincronizado para que e


l módulo
CCP pueda utilizar la característica de captura. En modo contador asíncrono, la capt
ura no
puede producirse.

8.1.3 INTERRUPCIÓN POR SOFTWARE

Cuando se cambia el modo de captura, puede generarse una falsa interrupción de cap
tura. El
usuario mantendrá borrado el bit CCP1IE (PIE1<2>) para evitar falsas interrupcione
s, y borrará
el bit indicador CCP1IF inmediatamente después de cualquier cambio en el modo de o
peración.

8.1.4 PREDIVISOR DE CCP

Existen cuatro posibles programaciones para el Predivisor, especificadas por los


bits
CCP1M3:CCP1M0. Siempre que el módulo CCP se desconecta, o que el módulo CCP no está
en modo captura, el contador Predivisor está borrado. Cualquier reset borrará el con
tador
Predivisor.
El cambio de la predivisión de captura generará una interrupción. Pero el contador Pre
divisor no
se borrará, por lo que la primera captura no encontrará a cero al Predivisor. En el
ejemplo 8-1 se
muestra el método recomendado para conmutar entre predivisores de captura. Este ej
emplo
también borra el contador Predivisor y no generará una falsa interrupción.

EJEMPLO 8-1: CONMUTANDO PREDIVISIONES DE CAPTURA

CLRF CCP1CON ; Desconecta el módulo CCP.


MOVLW NEW_CAPT_PS ; Carga registro W con nueva predivisión
; y activa CCP.
MOVWF CCP1CON ; Carga CCP1CON con el nuevo valor.

8.2 Modo Comparación

En modo comparación, el valor del registro de 16 bits CCPR1 se compara constanteme


nte con
el valor del par de registros de TMR1. Cuando hay coincidencia, la patilla RC2/C
CP1 es:

.
Puesta a 1.
.
Puesta a 0.
.
Sin cambio.

La acción sobre esta patilla la selecciona el valor de los bits de control CCP1M3:
CCP1M0
(CCP1CON<3:0>). Al mismo tiempo, se activa el indicador de interrupción CCP1IF.
8.2.1 CONFIGURACIÓN DE CCP

El usuario debe configurar la patilla


RC2/CCP1 como salida, borrando el bit
TRISC<2>.

Nota: Borrando el registro CCP1CON se


fuerza al latch de salida de comparación
RC2/CCP1 al nivel bajo por defecto.

8.2.2 SELECCIÓN EN MODO TIMER1

Si deseamos que el módulo CCP pueda


utilizar su característica de comparación, el
Timer1 sólo puede funcionar en modo Temporizador o en modo Contador Sincronizado;
no se
debe operar en modo Contador Asíncrono.

8.2.3 MODO DE INTERRUPCIÓN POR SOFTWARE

Cuando se elige el modo de generar una interrupción por programa, la patilla CCP1
no queda
afectada. El bit CCPIF se activa provocando una interrupción en CCP (si está habilit
ado).

8.2.4 DISPARO POR SUCESO ESPECIAL


En este modo, se genera un disparo interno por hardware, que puede utilizarse pa
ra iniciar una
acción.
La salida de disparo por suceso especial de CCP1 borra el registro par TMR1. Est
o lleva al
registro CCPR1 a ser, realmente, un registro programable de período de 16 bits par
a el Timer1.
La salida de disparo por suceso especial de CCP2 borra el registro par TMR1 y ar
ranca el
convertidor A/D (si este módulo estuviese habilitado).
Nota: El disparo por suceso especial de los módulos CCP1 y CCP2 no activa el bit i
ndicador de
interrupción TMR1IF (PIR<0>).

8.3 Modo PWM (PWM)

En modo Modulación por Ancho de Pulso


(PWM), la patilla CCPx produce una salida
PWM con 10 bits de resolución. Como quiera
que la patilla CCP1 está multiplexada con el
latch de datos del puerto C, el bit TRISC<2>
se borrará para programar como salida la
patilla CCP1.

Nota: Borrando el registro CCP1CON se


forzará al latch de salida PWM CCP1 al nivel
bajo por defecto. Esto no afecta al latch de
datos del puerto C.

La figura 8-3 muestra el diagrama


simplificado a bloques del módulo CCP en
modo PWM.
Una salida PWM (figura 8-4) posee un período y un tiempo de alto (Duty Cycle). La
frecuencia
de la onda PWM será la inversa del período.
8.3.1 PERÍODO PWM
El período PWM se especifica escribiendo el registro PR2. El período PWM puede calcu
larse
usando la siguiente relación:
Período(PWM) = [(PR2)+1] 4Tosc (valor Predivisor TMR2); siendo Tosc=250 ns para 4 Mhz.
La frecuencia PWM será la inversa del período: f(PWM) = 1/Período(PWM)
Cuando TMR2 se iguala a PR2, suceden los siguientes tres sucesos en el próximo cic
lo de
incremento:
.
Se borra TMR2.
.
Se activa la patilla CCP1 (siempre y cuando el duty cycle no sea igual al 0%).
.
El duty cycle se carga desde CCPR1L a CCPR1H.

Nota: El postdivisor de Timer2 no se utiliza


en la determinación de la frecuencia PWM.
El postdivisor podría usarse para tener un
rango auto-actualizable de frecuencias de
salida PWM.

8.3.2 TIEMPO EN ALTO (DUTY


CYCLE) DE PWM

El duty cycle de PWM se especifica


escribiendo en el registro CCPR1L y en los
bits de CCP1CON<5:4>. Se dispone de 10
bits de resolución. El registro CCPR1L contiene los ocho bits más significativos, y
el registro
CCP1CON<5:4> los dos de menos peso. Este valor de 10 bits se representa por la n
otación
CCPR1L:CCP1CON<5:4>. La siguiente ecuación se utiliza para calcular el duty cycle,
en
tiempo, de PWM:
PWM(duty cycle) = (CCPR1L:CCP1CON<5:4>) Tosc (TMR2(Predivisor))
CCPR1L y CCP1CON<5:4> pueden escribirse en cualquier momento, pero el valor del
duty
cycle no se carga en CCPR1H hasta después de que ocurra la coincidencia entre PR2
y TMR2
(un período completo). En modo PWM, CCPR1H es un registro de sólo lectura.
El registro CCPR1H y un latch interno de 2 bits se utilizan como doble buffer de
l duty cycle
PWM. Este buffer doble es esencial para evitar los picos en la conmutación PWM.
Cuando CCPR1H y el latch de dos bits coinciden con TMR2 unido a dos bits procede
ntes del
Predivisor, o dos bits procedentes de F/F internos, se borra la patilla CCP1.
A título de ejemplo:
Cargamos CCPR1L con 210 (102) y ponemos .10. en los bits 5 y 4 de CCP1CON, el núme
ro
binario total será 1010. Como TMR2 ahora recibe los impulsos de una fase Q interna
(cuyo
período será de 250 ns con un oscilador de 4 Mhz), la duración del impulso alto (duty
cucle),
con predivisor a 1, será de 1010b x 250ns = 10d x 250 ns = 2,5 .
s.
Nota: Si el valor del duty cycle es mayor que el período PWM, la patilla CCP1 no s
e pondrá a
cero.

8.3.3 PROGRAMACIÓN PARA OPERACIÓN PWM

Los siguientes pasos deben respetarse para configurar el módulo CCP como PWM:
1. Programar el período PWM, escribiendo en el registro PR2.
2. Programar el duty cycle, escribiendo en el registro CCPR1L y CCP1CON<5:4>.
3. Poner la patilla CCP1 como salida, borrando el bit 2 de TRISC (TRISC<2>).
4. Programar el valor Predivisor de TMR2 y habilitar Timer2, escribiendo T2CON.
5. Configurar el módulo CCP1 para operación como PWM.

TABLA 8-3: REGISTROS ASOCIADOS AL TIMER1, CAPTURA Y COMPARACIÓN


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,BOR
Valor tras
otros
resets
0Bh,
8Bh,
10Bh,
18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
0Dh
PIR2
---
---
---
---
---
---
---
CCP2IF
---- ---0
---- ---0
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
8Dh
PIE2
---
---
---
---
---
---
---
CCP2IE
---- ---0
---- ---0
87h
TRISC
Registro de dirección del puerto C.
1111 1111
1111 1111
0Eh
TMR1L
Byte menos significativo del registro TMR1 de 16 bits.
xxxx xxxx
uuuu uuuu
0Fh
TMR1H
Byte más significativo del registro TMR1 de 16 bits.
xxxx xxxx
uuuu uuuu
10h
T1CON
---
---
T1CKPS1
T1CKPS0
T1OSCEN
-T1SYNC
TMR1CS
TMR1ON
--00 0000
--uu uuuu
15h
CCPR1L
Byte menos significativo del registro1 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
16h
CCPR1H
Byte más significativo del registro1 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
17h
CCP1CON
---
---
CCP1X
CCP1Y
CCP1M3
CCP1M2
CCP1M1
CCP1M0
--00 0000
--00 0000
1Bh
CCPR2L
Byte menos significativo del registro2 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
1Ch
CCPR2H
Byte más significativo del registro2 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
1Dh
CCP2CON
---
---
CCP2X
CCP2Y
CCP2M3
CCP2M2
CCP2M1
CCP2M0
--00 0000
--00 0000
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0)
. Las celdas sombreadas no se
utilizan en Captura y Timer1.
Nota 1: PSP no está implementado en el PIC 16F873/876; se debe mantener siempre a
0.
TABLA 8-4: REGISTROS ASOCIADOS AL TIMER2 Y PWM
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,BOR
Valor tras
otros
resets

0Bh,
8Bh,
10Bh,
18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
0Dh
PIR2
---
---
---
---
---
---
---
CCP2IF
---- ---0
---- ---0
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
8Dh
PIE2
---
---
---
---
---
---
---
CCP2IE
---- ---0
---- ---0
87h
TRISC
Registro de dirección del puerto C.
1111 1111
1111 1111
11h
TMR2
Registro de los módulos de TMR2.
0000 0000
0000 0000
92h
PR2
Registro de período de los módulos TMR2.
1111 1111
1111 1111
12h
T2CON
---
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0
-000 0000
-000 0000
15h
CCPR1L
Byte menos significativo del registro1 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
16h
CCPR1H
Byte más significativo del registro1 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
17h
CCP1CON
---
---
CCP1X
CCP1Y
CCP1M3
CCP1M2
CCP1M1
CCP1M0
--00 0000
--00 0000
1Bh
CCPR2L
Byte menos significativo del registro2 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
1Ch
CCPR2H
Byte más significativo del registro2 de Captura-Comparación-PWM
xxxx xxxx
uuuu uuuu
1Dh
CCP2CON
---
---
CCP2X
CCP2Y
CCP2M3
CCP2M2
CCP2M1
CCP2M0
--00 0000
--00 0000
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0)
. Las celdas sombreadas no se
utilizan en PWM y Timer2.
Nota 1: Los bits PSPIE y PSPIF están reservados en el PIC 16F873/876; se deben man
tener siempre a 0.

9.0 MÓDULO PUERTO SERIE SÍNCRONO MAESTRO (MSSP)

El módulo MSSP es un acoplamiento (interface) serie usada en comunicaciones con ot


ros
periféricos o dispositivos microcontroladores. Estos dispositivos periféricos pueden
ser
EEPROMs, registros de desplazamiento, controladores de displays, convertidores A
/D, etc. El
módulo MSSP puede trabajar en uno de estos dos modos:
.
Interface de Periférico Serie (SPI).
.
Circuitos Inter-Integrados (I2C).

La figura 9-1 muestra un diagrama a bloques para el modo SPI; las figuras 9-5 y
9-9 muestran
los diagramas a bloques para dos diferentes modos de trabajar I2C.
REGISTRO 9-1: SSPSTAT: REGISTRO DE ESTADO PUERTO SERIE SÍNCRONO
(DIRECCIÓN 94h)

R/W-0
R/W-0
R-0
R-0
R-0
R-0
R-0
R-0

SMP
CKE
D/-A
P
S
R/-W
UA
BF

R = De lectura
W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
SMP: Bit de captura.

SPI Modo Maestro

1 = Captura del dato de entrada al final del tiempo del dato de salida.

0 = Captura del dato de entrada en el centro del tiempo del dato de salida.

SPI Modo Servidor

SMP de borrarse cuando se use SPI en modo servidor.

En modo servidor, o maestro I2C:


1 = Inhibe control de velocidad para modo de velocidad estándar (100 KHz a 1 MHz).

0 = Habilita control de velocidad para modo de alta velocidad (400 KHz).

bit 6:
CKE: Selección de flanco de reloj para SPI (figura 9-4, figura 9-5 y figura 9-6).

Modo SPI:
CKP = 0

1 = La transmisión sucede en la transición del estado de reloj activo al estado de r


eloj aislado.

0 = La transmisión sucede en la transición del estado de reloj aislado al estado de


reloj activo.

CKP = 1

1 = El dato se transmite en el flanco de bajada de SCK.

0 = El dato se transmite en el flanco de subida de SCK.

En modo Servidor o Maestro I2C:

1 = Niveles de entrada conforme a las especificaciones SMBUS.


0 = Niveles de entrada conforme a las especificaciones I2C.

bit 5:
D/A: Bit de selección de dato o dirección (Data/-Address), solamente en modo I2C.

1 = Indica que el último byte recibido o transmitido fue un dato.

0 = Indica que el último byte recibido o transmitido fue una dirección


bit 4:
P: Bit de parada (stop)

(Solamente en modo I2C. Este bit se borra cuando se inhibe el módulo MSSP. SSPEN e
stá a cero).

1 = Indica que un bit de stop se ha detectado en último lugar. (este bit se pone a
cero con RESET).

0 = Indica que no se ha detectado en último lugar un bit de stop.

bit 3:
S: Bit de arranque (Start).
(Solamente en modo I2C. Este bit se borra cuando se inhibe el módulo MSSP. SSPEN e
stá a cero).

1 = Indica que un bit de start se ha detectado en último lugar. (este bit se pone
a cero con RESET).

0 = Indica que no se ha detectado en último lugar un bit de start.

bit 2:
R/W: Bit de información de lectura-escritura (solamente en modo I2C).

Este bit contiene la información de lectura-escritura de la última dirección tratada.


Este bit solamente
es válido desde la última dirección tratada hasta el próximo bit de Start, Stop o no ACK

En modo servidor I2C:


1 = Lectura.

0 = Escritura.

En modo maestro I2C:

1 = Transmisión en progreso.

0 = Transmisión detenida.

La función OR de este bit con SEN, RSEN, PEN, RCEN o ACKEN indicará si el MSSP está en
modo
aislado.

bit 1:
UA: Actualización de dirección (10 bits, solamente en modo I2C).
1= Indica que el usuario necesita actualizar la dirección en el registro SSPADD.

0 = Indica que la dirección no necesita ser actualizada.

bit 0:
BF: Bit de estado de buffer lleno (buffer full).

Recepción (modos SPI e I2C).

1 = Recepción completa. SSPBUF está lleno.

0 = Recepción incompleta. SSPBUF está vacío.


Transmisión (modos SPI e I2C).

1 = Dato transmitido está en progreso (no incluye ACK y bits de STOP). SSPBUF está ll
eno.

0 = Dato transmitido no está en progreso (no incluye ACK y bits de STOP). SSPBUF es
tá vacío.
REGISTRO 9-2: SSPCON: REGISTRO DE CONTROL PUERTO SERIE SÍNCRONO
(DIRECCIÓN 14h)

R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0

WCOL
SSPOV
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0

R = De lectura
W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
WCOL: Bit detector de conflicto en escritura.

Modo Maestro

1 = Se intentó una escritura sobre SSPBUF cuando no eran válidas las condiciones I2C
.

0 = No existe conflicto.

Modo Servidor

1 = Se escribió en SSPBUF cuando estaba transmitiendo la palabra anterior (se borr


a por software).

0 = No existe conflicto.
bit 6:
SSPOV: Bit indicador de desbordamiento en recepción.

Modo entrada SPI:

1 = Se ha recibido un nuevo byte cuando SSPBUF aún mantenía el dato anterior. El dat
o en SSPSR se
pierde al desbordar. En modo Servidor, el usuario leerá el SSPBUF, aunque esté trans
mitiendo un dato,
para evitar desbordamiento. En modo maestro, el bit de desbordamiento no se acti
va para evitar éste,

ya que cada operación se inicia escribiendo en el registro SSPBUF. Debe borrarse p


or software.

0 = No hay conflicto.

En modo I2C:
1 = Se recibe un byte mientras SSPBUF mantiene el dato previo. SSPOV es indifere
nte en trasmisión.

Debe borrarse por software.

0 = No existe conflicto.

bit 5:
SSPEN: Bit de habilitación de Puerto Serie Síncrono.

En modo SPI, cuando se habilite, estas patillas deberán ser convenientemente confi
guradas como

entradas o salidas.
1 = Habilita puerto serie y configura las patillas SCK, SDO, SDI y SS como patill
as del puerto serie.

0 = Inhibe puerto serie y configura estas patillas como líneas de puerto entrada-s
alida.

En modo I2C, cuando se habilite, estas patillas deberán ser convenientemente confi
guradas como

entradas o salidas.

1 = Habilita puerto serie y configura las patillas SDA y SCL como patillas del p
uerto serie.

0 = Inhibe puerto serie y configura estas patillas como líneas de puerto entrada-s
alida.
bit 4:
CKP: Bit de selección de polaridad de reloj.

En modo SPI:

1 = Reloj desconectado queda en nivel alto.

0 = Reloj desconectado queda en nivel bajo.

En modo servidor I2C, control de SCK.

1 = Habilita reloj.

0 = Mantiene bajo el reloj (prolongación del reloj). El usuario asegura el tiempo


de antelación de datos.
En modo maestro I2C:

No utilizado en este modo.

bit 3-0:
SSPM3:SSPM0: Bits de selección de modo para Puerto Serie Síncrono

0000 = Modo Maestro SPI, reloj = Fosc/4.

0001 = Modo Maestro SPI, reloj = Fosc/16.

0010 = Modo Maestro SPI, reloj = Fosc/64.

0011 = Modo Maestro SPI, reloj = salida/2 de TMR2.


0100 = Modo Servidor SPI, reloj = patilla SCK. Patilla de control SS habilitada.

0101 = Modo Servidor SPI, reloj = patilla SCK. Patilla de control SS inhibida. Ésta
puede usarse

como entrada o salida.

0110 = Modo Servidor I2C, con 7 bits de dirección.

0111 = Modo Servidor I2C, con 10 bits de dirección.

1000 = Modo Maestro I2C, reloj = Fosc / [4 (SSPADD+1)].

1011 = Modo Maestro controlado por el microprograma I2C (servidor desconectado).


1110 = Modo Maestro controlado por el microprograma I2C, dirección de 7 bits con b
it de start y stop e

interrupciones habilitadas.

1111 = Modo Maestro controlado por el microprograma I2C, dirección de 10 bits con
bit de start y stop,

e interrupciones habilitadas.

1001, 1010, 1100 y 1101 están reservadas.


REGISTRO 9-3: SSPCON2: REGISTRO2 DE CONTROL PUERTO SERIE SÍNCRONO
(DIRECCIÓN 91h)

R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0

GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN

R = De lectura
W = De escritura
U = Sin implementar.
Da 0 en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
GCEN: Bit de habilitación de llamada general (solamente en modo servidor I2C).

1 = Habilitación de interrupción cuando se recibe en SSPSR una dirección de llamada ge


neral.

0 = Inhibida la dirección de llamada general.

bit 6:
ACKSTAT: Bit de estado de reconocimiento (solamente en modo maestro I2C).

Modo maestro transmisión:

1 = No se recibió el reconocimiento desde el servidor.

0 = Se recibió el reconocimiento desde el servidor.


bit 5:
ACKDT: Bit de reconocimiento de dato (solamente en modo maestro I2C).

Recepción en modo maestro:

Valor que fue transmitido cuando el usuario inicia una secuencia de reconocimien
to al final de una

recepción.

1 = No hay reconocimiento,

0 = Reconocimiento.
bit 4:
ACKEN: Bit de habilitación de secuencia de reconocimiento (solamente en modo maest
ro I2C).

En modo maestro recepción:

1 = Inicia una secuencia de reconocimiento en las patillas SDA y SCL, y transmit


e un bit de datos

ACKDT. Automáticamente se borra por hardware.

0 = Detenida la secuencia de reconocimiento.


bit 3:
RCEN: Bits de habilitación de recepción (solamente en modo maestro I2C).

1 = Habilita la recepción en modo I2C.

0 = Recepción detenida.

bit 2:
PEN: Bit de habilitación de condición de parada (solamente en modo maestro I2C).

Control de SCK liberado

1 = Inicia la condición de parada (STOP) en las patillas SDA y SCL. Se borra automát
icamente por

hardware.
0 = Detenida la condición de parada.

bit 1:
RSEN: Bit de habilitación de la condición de repetición de arranque (solamente en modo
maestro I2C).

1 = Inicia la condición de repetición de arranque en las patillas SDA y SCL. Se borr


a automáticamente

por hardware.

0 = Detenida la condición de repetición de arranque.


bit 0:
SEN: Bit de habilitación de la condición de arranque (solamente en modo maestro I2C)
.

1 = Inicia la condición de arranque en las patillas SDA y SCL. Se borra automáticame


nte por hardware.

0 = Detenida la condición de arranque.

Nota:
Para los bits ACKEN, RCEN, PEN, RSEN y SEN: Si el módulo I2C no está en modo detención
, estos

bits no pueden programarse y el SSPBUF no puede escribirse.


9.1 Modo SPI
El modo SPI permite que 8 bits de datos sean, simultáneamente, transmitidos y reci
bidos. Están
desarrollados los cuatro modos de SPI. Para llevar a cabo la comunicación, se usan
tres patillas:
.
Dato de salida serie (SDO).
.
Dato de entrada serie (SDI).
.
Reloj serie (SCK).

Adicionalmente, una cuarta patilla puede usarse cuando se opera en modo servidor
:
.
Selección de servidor (). SS

Al inicializar el SPI, dispondremos de varias opciones, que se consiguen program


ando los bits
de control (SSPCON<5:0> y SSPSTAT<7:6>). Estos bits permitirán lo siguiente:
.
Modo maestro (SCK es el reloj de salida).
.
Modo servidor (SCK es el reloj de entrada).
.
Polaridad del reloj (estado desconectado de SCK).
.
Fase de captura del dato de entrada (en el centro o al final del tiempo del dato
de
salida).
.
Flanco de reloj (dato de salida en el flanco de subida-bajada de SCK).
.
Velocidad de reloj (solamente en modo maestro).
.
Modo de selección de servidor (solamente en modo servidor).

La figura 9-1 muestra el diagrama a bloques


del módulos MSSP cuando está en modo
SPI.

Para habilitar el puerto serie (bit MSSP)


debe activarse SSPEN (SSPCON<5>). Para
borrar o reconfigurar el modo SPI, borrar el
bit SSPEN, reinicializar el registro
SSPCON, y, entonces, activar el bit SSPEN.
Esto configura las patillas SDI, SDO, SCK
y como patillas de puerto serie. Para que
las patillas se comporten como funciones de
puerto serie, hay que tener debidamente
programados los bits de dirección de puerto
(registro TRIS). O sea:
SS
.
SDI se controla automáticamente
por el módulo SPI.
.
SDO debe tener borrado
TRISC<5>.
.
SCK (modo maestro) debe tener
borrado TRISC<3>.
.
SCK (modo servidor) debe tener en
1 el bit TRISC<3>.
.
debe tener activado TRISA<5>. SS

Cualquier función de puerto serie no


deseada debe anularse programando el
correspondiente registro de dirección de
datos (TRIS) con el valor opuesto.
9.1.1 MODO MAESTRO
El maestro puede iniciar la transferencia de datos en cualquier momento porque e
s él quien
controla el reloj SCK. El maestro determina, por el protocolo de software, cuándo
el servidor
(Procesador 2, figura 9-5) está transmitiendo datos.
En modo maestro, el dato se transmite o recibe tan pronto como el registro SSPBU
F se carga. Si
el módulo SPI está preparado solamente para recibir, la salida SDO estará inhibida (pr
ogramada
como entrada). El registro SSPSR continuará el desplazamiento con la señal presente
en la
patilla SDI a la velocidad de reloj programada. Cuando el byte se recibe, se car
gará en el
registro SSPBUF como una recepción normal de byte (se activará la interrupción y los b
its
apropiados de datos).
La polaridad del reloj se selecciona programando adecuadamente el bit CKP (SSCON
<4>). Esto
proporciona una formas de onda, para comunicaciones SPI, como se muestra en la F
igura 9-2,
Figura 9-3 y Figura 9-4, donde el MSB se transmite en primer lugar. En modo maes
tro, la
velocidad del reloj SPI se programa por el usuario, de una de las siguientes for
mas:
.
Fosc/4 (o TCY).
.
Fosc/16 (o 4TCY).
.
Fosc/64 (o 16TCY).
.
(SalidaTimer2) : 2.

Esto permitirá una frecuencia máxima de reloj de bit (a 20 MHz) de 5 MHz.


En la figura 9-2 se muestra las formas de onda para el modo Maestro. Cuando CKE
= 1, el dato
en SDO debe ser válido antes del flanco de reloj en SCK. El cambio en la captura d
e entrada se
muestra basándose en el estado del bit SMP. Se aprecia el instante en que se carga
el registro
SSPBUF con el dato recibido.
9.1.2 MODO SERVIDOR

En modo servidor, el dato se transmite y recibe cuando aparece el pulso externo


de reloj en
SCK. Cuando se ha memorizado el último bit, el bit indicador de interrupción SSPIF (
PIR<3>)
se activa.
En modo servidor, el reloj externo se suministra por la fuente externa de reloj
en la patilla SCK.
Este reloj externo debe poseer un mínimo de tiempo en alto y bajo, tal y como indi
can las
características eléctricas.
En modo SLEEP, el servidor puede transmitir y recibir datos. Cuando se recibe un
byte, el
dispositivo abandonará el estado SLEEP.
Nota: Cuando el módulo SPI está en modo servidor con la patilla habilitada
(SSPCON<3:0> = 0100), el módulo SPI inicializará si la patilla se coloca a VDD.
Nota: Si el módulo SPI se usa en modo servidor con CKE = 1, la patilla de control
debe
habilitarse.
TABLA 9-1: REGISTROS ASOCIADOS A LA OPERACIÓN SPI
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,BOR
Valor tras
otros resets

0Bh, 8Bh,
10Bh, 18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
13h
SSPBUF
Registro de recepción y transmisión del Puerto Serie Síncrono
xxxx xxxx
uuuu uuuu
14h
SSPCON
WCOL
SSPOV
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0
0000 0000
0000 0000
94h
SSPSTAT
SMP
CKE
D/-A
P
S
R/-W
UA
BF
0000 0000
0000 0000
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0)
. Las celdas sombreadas no se
utilizan por SSP en modo SPI.
Nota 1: Estos bits se reservan en los dispositivos de 28 patillas; se deben mant
ener siempre a 0.

9.2 Operación del módulo MSSP en modo I2C

El módulo MSSP en modo I2C implementa las funciones de maestro y servidor (incluye
ndo el
soporte de la llamada general), y proporciona interrupciones por hardware en los
bits de start y
stop para determinar la disponibilidad del bus (función multi-master). El módulo MSS
P
implementa las especificaciones de modo estándar, así como direccionamiento de 7 bit
s y 10
bits.
Un filtro de transitorios está dispuesto en las patillas SCL y SDA cuando trabajan
como
entradas. Este filtro opera en el rango de 100 a 400 KHz. En modo 100 KHz, cuand
o estas
patillas están como salidas, hay un control sobre la velocidad de subida de la pat
illa que es
independiente de la frecuencia del dispositivo.

Dos patillas se usan para transferencia de datos. Son las patillas SCL, que actúa
como reloj, y la
patilla SDA, que es el dato. Estas patillas se configuran automáticamente cuando s
e habilita el
modo I2C. Las funciones del módulo SSP se
habilitan activando SSPEN (SSPCON<5>).

El módulo MSSP tiene seis registros para la


operación I2C, que son:
.
Registro de Control SSP
(SSPCON).
.
Registro2 de Control SSP
(SSPCON2).
.
Registro de Estado (SSPSTAT).
.
Buffer de transmisión-recepción
serie (SSPBUF).
.
Registro de Desplazamiento
(SSPSR). No es accesible
directamente.
.
Registro de dirección SSP
(SSPADD).
El registro SSPCON permite el control de la operación I2C. Cuatro bits de selección
de modo
(SSPCON<3:0>) permiten seleccionar uno de los siguientes modos I2C:
.
Modo servidor I2C (dirección de 7 bits).
.
Modo servidor I2C (dirección de 10 bits).
.
Modo maestro I2C, reloj = OSC/4 (SSPADD + 1).

Antes de seleccionar cualquier modo I2C, las patillas SCL y SDA deben programars
e como
entradas, activando los bits apropiados del registro TRIS. Al seleccionar un mod
o I2C,
programando el bit SSPEN, se habilitan las patillas SCL y SDA para ser usadas co
mo líneas de
reloj y datos, respectivamente, en modo I2C.
El bit CKE (SSPSAT<6:7>) programa los niveles de las patillas SDA y SCL en los m
odos
maestro o servidor. Cuando CKE = 1, el nivel responderá a las especificaciones de
SMBUS;
cuando CKE = 0, los niveles responderán a las especificaciones de I2C.
El registro SSPSTAT contiene el estado de la transferencia. Esta información inclu
ye: la
detección de los bits de Start (S) o Stop (P), la especificación de si el byte recib
ido fue dato o
dirección, y si es esta última, si el próximo byte es el resto de la dirección de 10 bit
s, y, por
último, si habrá una lectura o escritura en la transferencia del dato.
SSPBUF es el registro donde se carga el dato a transferir, o donde está el dato re
cibido. Este
registro desplaza el dato hacia dentro o hacia fuera del dispositivo. En operaci
ones de recepción,
SSPBUF y SSPSR crean un doble buffer receptor. Esto permitirá la recepción del próximo
byte
antes de comenzar a leer el último byte recibido. Cuando se ha recibido el dato co
mpleto, se
transfiere al registro SSPBUF y el bit indicador SSPIF se activa. Si se recibe a
lgún otro byte
completo antes de leer el registro SSPBUF, se produce desbordamiento, y el bit S
SPOV
(SSPCON<6>) se activa para indicar que se perdió el byte primero cargado en SSPBUF
y no
leído.
El registro SSPADD mantiene la dirección del servidor. En modo de 10 bits de direc
ción, el
usuario necesita escribir el byte alto de la dirección (1111 0-A9-A8-0). A continu
ación, es
necesario cargar el byte bajo de la dirección (A7:A0).

9.2.1 MODO SERVIDOR


En este modo, las patillas SCL y SDA deben configurarse como entradas. El módulo M
SSP
sustituirá el estado de la entrada con el dato de salida cuando se necesite (servi
dor-transmisor).
Cuando una dirección es reconocida, o se recibe un dato después de reconocer una dir
ección, la
circuitería generará un pulso de reconocimiento . Entonces se produce la carga del
registro SSPBUF con el valor actual recibido, cargado en el registro SSPSR.
Existen ciertas condiciones por las que el módulo MSSP no producirá el pulso , y son
:
ACK
a) El bit de buffer lleno BF (SSPSAT<0>) se activó antes de que la transferencia f
uese
recibida.
b) El bit de desbordamiento SSPOV (SSPCON<6>) se activó antes de que fuese recibid
a
la transferencia.

Si el bit BF está activado, el valor del registro SSPSR no se carga en el registro


SSPBUF, pero
se activan los bits SSPIF y SSPOV. La tabla 9-2 muestra, en el estado de los bit
s BF y SSPOV,
lo que ocurre cuando no se recibe un byte de datos transferido. Las celdas sombr
eadas muestran
las condiciones donde el software del usuario no producen el borrado apropiado d
e la condición
de desbordamiento. El bit indicador BF se borra leyendo el registro SSPBUF, mien
tras que el
borrado de SSPOV será por software.
La entrada de reloj SCL debe tener un mínimo de duración, tanto en alto como en bajo
, para una
correcta operación. Los tiempos de alto y bajo de las especificaciones de I2C, así c
omo los
requisitos del módulo MSSP, se muestran en las especificaciones eléctricas.

9.2.1.1 DIRECCIONAMIENTO

Cada vez que el módulo MSSP ha sido habilitado, espera a que ocurra una condición de
arranque (Start). Seguidamente, se desplazan los 8 bits en el registro SSPSR. To
dos los bits
entrantes se capturan con el flanco de subida de la línea de reloj SCL. El valor d
el registro
SSPSR<7:1> se compara con el valor del registro SSPADD. La dirección se compara en
el
flanco de bajada del octavo pulso de reloj en SCL. Si la dirección se reconoce y l
os bits BF y
SSPOV están borrados, se suceden las siguientes operaciones:
a) El valor del registro SSPSR se carga en SSPBUF en el flanco de bajada del oct
avo pulso
de SCL.
b) El bit BF (buffer lleno) se activa en la bajada de reloj del octavo pulso en
SCL.
c) Se genera un pulso de reconocimiento .
d) El bit indicador de interrupción SSPIF (PIR1<3>) se activa en el flanco de baja
da del
noveno pulso en SCL. Se producirá interrupción, si estuviese habilitada.

En modo de dirección a 10 bits, se necesitan dos bytes para recibir la dirección por
el servidor.
Los cinco bits de mayor peso del primer byte de dirección, especifican si es una d
irección a 10
bits. El bit (SPSAT<2>) indicará una escritura sobre el dispositivo servidor que r
ecibirá
el segundo byte de dirección. Para una dirección de 10 bits, el primer byte debe ser
igual a
.1111 0-A9-A8-0., donde A9 y A8 son los dos bits de mayor peso de la dirección de
10 bits.
La secuencia de operaciones para una dirección a 10 bits es la siguiente, con los
pasos 7 a 9 para
servidor transmisor:
WR/
1. Recepción del primer byte (más peso) de la dirección (bits SSPIF, BF y UA
(SSPSTAT<1>) están activados).
2. Actualización del registro SSPADD con el segundo byte (menos peso) de la direcc
ión
(borra bit UA y libera la línea SCL).
3. Lectura del registro SSPBUF (borra bit BF) y borrado del bit indicador SSPIF.
4. Recepción el segundo byte (bajo) de la dirección (se activan los bits SSPIF, BF y
UA).
5. Actualiza del registro SSPADD con el primer byte (alto) de la dirección. Esto b
orrará el
bit UA y liberará la línea SCL.
6. Lectura del registro SSPBUF (borra bit BF) y borrado del bit SSPIF.
7. Recepción de la condición de Repetición de Arranque.
8. Recepción del primer byte (alto) de la dirección (se activan los bits SSPIF y BF)
.
9. Lectura del registro SSPBUF (se borra el bit BF) y borrado del bit indicador
SSPIF.

Nota: A continuación de la condición de Repetición de Arranque (paso 7) en modo 10 bit


s, el
usuario sólo necesita encontrar los primeros 7 bits de la dirección, y no actualizará
SSPADD
para la segunda mitad de la dirección.
9.2.1.2 RECEPCIÓN SERVIDOR
Cuando el bit del byte de dirección está borrado y sucede el reconocimiento de direc
ción,
el bit del registro SSPSTAT se borra. La dirección recibida se carga en el registr
o
SSPBUF.
Cuando existe la condición de byte de dirección con desbordamiento, el pulso de
reconocimiento no se produce. Entonces se define una condición de desbordamiento,
dada por el 1 del bit BF (SSPSTAT<0>) y el 1 del bit SSPOV (SSPCON<6>).
Se generará una interrupción SSP por cada byte de datos transferido. El bit indicado
r SSPIF
(PIR<3>) debe borrarse en el programa. El registro SSPSTAT se usa para determina
r el estado
del byte recibido.
Nota: El registro SSPBUF debe cargarse si el SSPOV está a 1 y el indicador BF está a
0. Si se
produce una lectura de SSPBUF, pero el usuario no ha borrado el estado de SSPOV
antes de
que ocurra la próxima recepción, no se envía y el SSPBUF se cambia.

Tabla 9-2 ACCIONES DE BYTE RECIBIDO EN LA TRANSFERENCIA DE DATO


Bits de estado tal y como se
recibe la transferencia
SSPSR .
SSPBUF
Generación de
pulso
Activación del bit SSPIF (Sucede la
interrupción SSP si está habilitada)
BF
SSPOV

0
0



1
0
No
No

1
1
No
No

0
1

No

Nota 1: Las celdas sombreadas muestran las condiciones donde el software del usu
ario no realizó adecuadamente el
borrado de la condición de desbordamiento.

9.2.1.3 TRANSMISIÓN SERVIDOR


Cuando el bit del byte de la dirección entrante está activado y sucede un reconocimi
ento
de dirección, el bit del registro SSPSTAT se activa. La dirección recibida se carga
en el
registro SSPBUF. EL pulso se enviará en el noveno bit, y la patilla SCL se mantend
rá a
0. El dato transmitido debe cargarse en el registro SSPBUF, quien descargará, a su
vez, sobre
SSPSR. En este momento, la patilla SCL se habilitará activando el bit CKP (SSPCON<
4>). El
maestro debe vigilar la patilla SCL antes de asegurar otro impulso de reloj. El
dispositivo
servidor se mantendrá desconectado del maestro, alargándose el reloj. Los ocho bits
de datos se
desplazarán hacia fuera en el flanco de bajada de la entrada en SCL. Esto asegura
que la señal
SDA es válida durante el tiempo en alto de SCL (Figura 9-7).
Se generará una interrupción por cada byte de dato transferido. El bit indicador SSP
IF debe
borrarse por programa, y el registro SSPSTAT se usará para determinar el estado de
l byte
transferido. El bit indicador SSPIF se activa en el flanco de bajada del noveno
impulso de reloj.
Al igual que el servidor-transmisor, el pulso desde el maestro receptor se memor
iza en el
flanco de subida del noveno impulso en la entrada SCL. Si la línea SDA está en alto
( no
), la transferencia del dato es completa. Cuando el no se memoriza por el servid
or,
la lógica de éste se inicializa y el servidor espera otra aparición del bit de arranqu
e (start). Si la
línea SDA está a 0 (), el dato transmitido será cargado en el registro SSPBUF, que, a
su
vez, se carga en el registro SSPSR. Entonces la patilla SCL se habilitará, activan
do el bit CKP.

9.2.2 SOPORTE DE LA DIRECCIÓN DE LLAMADA GENERAL

El procedimiento de direccionamiento por el bus I2C es de tal manera que el prim


er byte
después de la condición de START determina qué dispositivo será el servidor seleccionado
por
el maestro. La excepción es la dirección de llamada general, que puede seleccionar t
odos los
dispositivos. Cuando se usa esta dirección, todos los dispositivos deben, en teoría,
responder
con un reconocimiento.
La dirección de llamada general es una de ocho direcciones reservadas para propues
tas
específicas por el protocolo I2C. Consiste en todo ceros, con también a 0.
La dirección de llamada general se reconoce cuando el bit de habilitación de llamada
general
(GCEN) se habilita (SSPCON2<7> = 1). Siguiendo a la detección del bit de start, se
desplazarán 8 bits en SSPSR, y la dirección se compara con la de SSPADD. También se
compara con la dirección de llamada general fijada por hardware.
Si la dirección de llamada general coincide, el SSPSR se transfiere al SSPBUF, el
indicador BF
se activa (octavo bit), y en el flanco de bajada del noveno bit (bit ) el indica
dor SSPIF se
activa.
Cuando se sirve una interrupción, la procedencia de la interrupción puede chequearse
leyendo el
contenido de SSPBUF para determinar si la dirección fue específica del dispositivo o
fue una
dirección de llamada general.
En modo 10-bit, el SSPADD se necesita para ser actualizado por la segunda mitad
de la
dirección a reconocer, y el bit UA debe activarse (SSPSTAT<1>). Si se captura una
dirección
de llamada general cuando GCEN está activo y el servidor está configurado en modo di
rección
10-bit, la segunda mitad de la dirección no es necesaria, el bit UA no se activará,
y el servidor
empezará recibiendo un dato después del reconocimiento (Figura 9-8).

9.2.3 OPERACIÓN SLEEP (ALERTA)

Aunque el dispositivo esté en modo SLEEP, el módulo I2C puede recibir datos o direcc
iones.
Cuando ocurra la transferencia de un byte completo, o dirección reconocida, se sac
a al
procesador del estado sleep (si está habilitada la interrupción SSP).

9.2.4 EFECTO DE UN RESET

Un reset inhibe al módulo SSP y determina la transferencia actual.


TABLA 9-3: REGISTROS ASOCIADOS A LA OPERACIÓN I2C
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,
BOR
Valor tras
otros
resets

0Bh,
8Bh,
10Bh,
18Bh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
0Dh
PIR2
---
(2)
---
EEIF
BCLIF
---
---
CCP2IF
-r-0 0--0
-r-0 0 0
8Dh
PIE2
---
(2)
---
EEIE
BCLIE
---
---
CCP2IE
-r-0 0--0
-r-0 0 0
13h
SSPBUF
Registro de recepción y transmisión del Puerto Serie Síncrono
xxxx xxxx
uuuu uuuu
14h
SSPCON
WCOL
SSPOV
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0
0000 0000
0000 0000
91h
SSPCON2
GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN
0000 0000
0000 0000
94h
SSPSTAT
SMP
CKE
D/-A
P
S
R/-W
UA
BF
0000 0000
0000 0000
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0)
. Las celdas sombreadas no se
utilizan por SSP en modo I2C.
Nota 1: Estos bits se reservan en los dispositivos de 28 patillas; se deben mant
ener siempre a 0.
Nota2: Estos bits se reservan en estos dispositivos; se deben mantener a 0.

9.2.5 MODO MAESTRO

La operación del modo maestro está dirigida por la generación de interrupción en la dete
cción
de las condiciones de START y STOP. Los bits de STOP (P) y START (S) se borran c
on un
reset o cuando el módulo MSSP está inhibido. El control del bus I2C puede acometerse
cuando
el bit P está activado, o el bus está desconectado con el conjunto de los bits S y P
borrados.
En modo maestro, las líneas SCL y SDA son manipuladas por el hardware de MSSP.
Los siguientes acontecimientos provocarán la activación del bit SSPIF, indicador de
interrupción de SSP, si la interrupción SSP está habilitada:
.
Condición de START.
.
Condición de STOP.
.
Byte de transferencia de datos transmitido-recibido.
.
Transmisión de reconocimiento.
.
Repetición de arranque.

9.2.6 MODO MULTI-MAESTRO

En modo multi-maestro, la generación de la interrupción en la detección de las condici


ones de
START y STOP permite la detección de la disponibilidad del bus. Los bits de STOP (
P) y
START (S) se borran con un reset, o cuando se inhibe el módulo MSSP. El control de
l bus I2C
se realiza cuando el bit P (SSPSTAT<4>) se activa, estando el bus desconectado c
on la pareja S
y P a 0. Cuando el bus está ocupado, habilitando la interrupción SSP se generará una
interrupción cuando llegue una condición de STOP.
En operaciones multi-maestro, la línea SDA será chequeada para decidir si el nivel
en la señal
es el nivel de salida esperado. Este chequeo se desarrolla por hardware, cuyo re
sultado lo tiene
el bit BCLIF.
Los estados en los que no existe toma de decisión, serán:
.
Transferencia de dirección.
.
Transferencia de dato.
.
Condición de Start.
.
Condición de repetición de Start.
.
Condición de reconocimiento.

9.2.7 SOPORTE EN MODO I2C

El modo maestro se habilita, activando y borrando los bits apropiados SSPM, en e


l registro
SSPCON, y activando el bit SSPEN. Una vez que se habilita el modo maestro, el us
uario tiene
seis opciones:
- Confirmar una condición start en SDA y SCL.
- Confirmar una condición de repetición de start en SDA y SCL.
- Escribir en el registro SSPBUF, iniciando así una transmisión de dato o dirección.
- Generar una condición de stop en SDA y SCL.
- Configurar el puerto I2C para recibir dato.
- Generar una condición de reconocimiento al final de la recepción del byte de datos
.

Nota: El módulo MSSP, cuando se configura en modo maestro I2C, no permite colas de
espera
de sucesos. Por ejemplo, el usuario no puede iniciar una condición de start e, inm
ediatamente,
escribir el registro SSPBUF para iniciar una transmisión antes de completar la con
dición start.
En este caso, el registro SSPBUF no debe escribirse hasta que el bit WCOL esté act
ivado. Éste
será el indicador de la escritura de SSPBUF.
9.2.7.1 OPERACIÓN EN MODO MAESTRO I2C

El dispositivo maestro genera toda una serie de impulsos de reloj y las condicio
nes de START y
STOP. Se finaliza una transferencia, con la condición de STOP o con la condición de
repetición
de Start. Como quiera que la condición de Repetición de Start es también el comienzo d
e la
próxima serie transferida, el bus I2C no se desconectará.
En modo Maestro Transmisor, el dato serie se saca por SDA, mientras que la salid
a de reloj
serie es SCL. El primer byte transmitido contiene la dirección del dispositivo rec
eptor servidor
(7 bits) y el bit de Lectura-Escritura (). En este caso, el bit será 0. El dato se
rie se
transmite en 8 bits en este instante. Después de transmitir cada byte, se recibe u
n bit de
reconocimiento. Se envían las condiciones de START y STOP para indicar el comienzo
y el
final de la serie transmitida.
En modo Maestro Receptor, el primer byte transmitido contiene la dirección del ser
vidor del
dispositivo transmisor (7 bits) y el bit . En este caso, este bit deberá tener val
or lógico 1.
Por esto, el primer byte transmitido es una dirección de servidor de 7 bits, segui
do de un .1.
que indica bit de recepción. El dato serie se recibe vía SDA, y el reloj serie, por
SCL. El dato
serie de 8 bits se recibe simultáneamente al reloj. Tras la recepción de cada byte,
se transmite un
bit de reconocimiento. Las condiciones START y STOP indican el inicio y el final
de la
transmisión.
El generador de velocidad de transmisión (generador de baudios) utilizado para ope
ración en
modo SPI, es ahora usado para programar la frecuencia de reloj de SCL, para 100
Khz., 400
Khz. o 1 Mhz , en operación I2C. El generador de baudios recarga el valor contenid
o en los 7
bits de menos peso del registro SSPADD. El generador de baudios comenzará,
automáticamente, contando con una escritura en SSPBUF. Una vez que la operación se
completa (p.e. transmisión del último bit de datos seguido por ACK), el reloj intern
o detiene
automáticamente la cuenta, y la patilla SCL permanece en su último estado.
Una secuencia típica de transmisión será así:
a) El usuario genera la Condición de Start activando el bit de habilitación de START
(SEN) en SSPCON2.
b) Se activa SSPIF. El módulo esperará el tiempo necesario de start antes de que se
produzca otra operación cualquiera.
c) El usuario carga SSPBUF con la dirección a transmitir.
d) La dirección se desplaza fuera de la patilla SDA hasta que son transmitidos los
8 bits.
e) El módulo MSSP da entrada al bit ACK proveniente del dispositivo servidor y esc
ribe
este valor en el registro SSPCON2 (SSPCON2<6>).
f) El módulo genera una interrupción, al final del noveno ciclo de reloj, activando
SSPIF.
g) El usuario carga el registro SSPBUF con los 8 bits de datos.
h) El dato se desplaza fuera de la patilla SDA hasta la transmisión completa de lo
s 8 bits.
i) El módulo MSSP da entrada al bit ACK, proveniente del dispositivo servidor, y e
scribe
este valor en el registro SSPCON2 (SSPCON2<6>).
j) El módulo genera una interrupción al final del noveno ciclo de reloj, activando S
SPIF.
k) El usuario genera una condición de STOP activando el bit de habilitación de STOP
(PEN) en el registro SSPCON2.
l) La interrupción se genera cada vez que se completa la condición de STOP.

9.2.8 GENERADOR DE BAUDIOS

En modo I2C, el valor de recarga para BRG se localiza en los 7 bits de menos pes
o del registro
SSPADD (Figura 9-10). Cuando se carga BRG con este valor, se inicia la cuenta at
rás de BRG
hasta llegar a 0. En este momento, el contaje se detiene hasta que tiene lugar u
na nueva recarga.
El contador BRG se decrementa dos veces por ciclo de instrucción (TCY), en los rel
ojes Q2 y
Q4.
En modo I2C, el contador BRG se recarga automáticamente. Si se produce arbitraje d
e reloj, por
ejemplo, el BRG se recargará cuando la patilla SCL se vea en alto (Figura 9-11).

9.2.9 OSCILOGRAMAS DE LA CONDICIÓN DE START EN MODO MAESTRO I2C

Para iniciar una condición START, se activará el bit SEN, que habilita la condición de
start,
registro SSPCON2<0>. Si las patillas SDA y SCL están en nivel alto, el generador d
e baudios
se recarga con el contenido de SSPADD<6:0> y se inicia el contaje. Si el grupo S
CL y SDA
están en 1 cuando el generador de baudios termina (TBRG), la patilla SDA se pone a
0. La acción
de SDA, siendo puesta a 0 cuando SCL está a 1, es la condición de START, y hace que
el bit S
se active (SSPSTAT<3> = 1). Después de esto, el generador de baudios se recarga co
n el
contenido del registro SSPADD<6:0> y continúa su contaje decremental. Cuando el ge
nerador
termina la cuenta (TBRG), el bit SEN (SSPCON2<0>) se borrará automáticamente por el
hardware. El generador de baudios se detiene, dejando la línea SDA a nivel bajo y
completando
la condición de START.
Nota: Si al comienzo de la condición de START, las patillas SDA y SCL estaban ya e
n 0, o si
durante la condición de START la línea SCL se ve baja antes que la línea SDA, ocurre u
n
conflicto de bus. En este caso, se activa el indicador de conflicto de bus BCLIF
, se suspende la
condición de START, y el módulo I2C se inicializa en su estado IDLE.
9.2.9.1 INDICADOR DE ESTADO WCOL

Si el usuario escribe el registro SSPBUF cuando está desarrollándose una secuencia S


TART, se
activa WCOL, y el contenido del buffer permanece sin cambio.
Nota: Debido a que la cola de espera de acontecimientos no está permitida, escribi
endo los
cinco bits de menor peso de SSPCON2 se inhibe hasta que la condición de START se c
omplete.

9.2.10 OSCILOGRAMAS DE LA CONDICIÓN DE REPETICIÓN DE START, EN MODO


MAESTRO I2C
Estamos ante una condición de Repetición de Start cuando el bit RSEN (SSPCON2<1>) se
pone
en 1 y el módulo I2C está en estado desconectado. Cuando RSEN = 1, la patilla SCL se
pone en
0. Cuando la patilla SCL se ve baja, el generador de baudios se carga con el con
tenido de
SSPADD<6:0> y comienza la cuenta. La patilla SDA se libera y se coloca a 1, y se
convierte en
un contador generador de baudios (TBRG). Cuando este contador termina su tiempo,
si SDA está
en alto, la patilla SCL se pondrá en alto. Cuando SCL se chequea en 1, el generado
r de baudios
se recarga con el contenido de SSPADD<6:0> y comienza la cuenta. SDA y SCL deben
verse
en alto en un tiempo TBRG. Esta acción se sigue con la afirmación de la patilla SDA
(SDA en
bajo) por un tiempo TBRG, mientras SCL está alta. A continuación de esto, el bit RSE
N del
registro SSPCON2 se borrará automáticamente y el generador de baudios no se recargará,
dejando la patilla SDA en bajo. Tan pronto como se detecta la condición de start e
n las patillas
SDA y SCL, el bit S (SSPSTAT<3>) se activará. El bit SSPIF no se activará hasta que
el
generador de baudios termine cuenta.
Nota 1: Si RSEN se programa mientras que otro suceso está desarrollándose, no se act
ualizará.
Nota 2: Sucede un conflicto de bus, durante la condición de Repetición de Start, si:

.
Se detecta en bajo SDA cuando SCL pasa de cero a uno.
.
SCL pasa a cero antes que SDA se estabilice en ese valor. Esto puede indicar que
otro
maestro está intentando transmitir un dato .1..

Inmediatamente a continuación de la puesta a 1 de SSPIF, el usuario puede escribir


el SSPBUF
con los 7 bits de la dirección, en modo 7 bits, o la primera dirección prefijada en
modo 10-bit.
Después de que se transmitan los primeros 8 bits, y se ha recibido ACK, el usuario
puede,
entonces, transmitir ocho bits adicionales de dirección (en modo 10-bit), u ocho b
its de datos
(en modo 7-bit).

9.2.10.1 INDICADOR DE ESTADO WCOL

Si el usuario escribe el SSPBUF cuando una secuencia de Repetición de Start está en


desarrollo,
WCOL se activa y el contenido del buffer no recibe el valor deseado (no se produ
ce escritura).
Nota: A causa de que no se tolera la cola de sucesos, escribiendo los 5 bits de
menor peso de
SSPCON2 se inhibe hasta que se completa la secuencia la condición de Repetición de S
tart.

9.2.11 TRANSMISIÓN EN MODO MAESTRO I2C

La transmisión de un byte de datos, una dirección de 7 bits o cualquiera de las dos


mitades de
una dirección de 10 bits, se consigue con una simple escritura del valor en el reg
istro SSPBUF.
Esta acción activará el bit BF y llevará al generador de baudios a comenzar la cuenta
y arrancar
la próxima transmisión. Cada bit de dirección-dato será desplazado fuera de la patilla S
DA
después de la estabilización del flanco de bajada del reloj de SCL. Esta señal se mant
endrá baja
durante una vuelta de contaje (TBRG) del generador de baudios. El dato será válido a
ntes de que
SCL pase a nivel alto. Cuando la patilla SCL se pone a 1, se mantendrá de esa mane
ra durante
un TBRG. El dato en la patilla SDA permanecerá estable durante ese tiempo, al que
hay que
añadir el THOLD (que marcan las especificaciones eléctricas) después del próximo flanco
de
bajada de SCL. Después de sacar los 8 bits fuera de la patilla SDA (en el flanco d
e bajada del
octavo reloj), el indicador BF se borra, y el maestro abandona SDA permitiendo a
l servidor
direccionado responder con un bit , durante el noveno tiempo de bit, si existies
e un
reconocimiento de dirección o si el dato se recibió correctamente. El estado de se c
arga
en ACKDT en el flanco de bajada del noveno reloj. Si el maestro recibe un recono
cimiento, el
estado del bit de reconocimiento (ACKSTAT) se borra. Si no, este bit estará a 1. D
espués del
noveno reloj, SSPIF se activa y el reloj maestro (generador de baudios) se suspe
nde hasta que se
cargue el próximo byte de datos en SSPBUF, dejando SCL baja y SDA sin cambio (Figu
ra 9-
14).

Después de la escritura de SSPBUF, cada bit de la dirección será desplazado fuera en e


l flanco
de bajada de SCL hasta completar los siete bits de dirección y el bit . En el octa
vo flanco
de bajada, el maestro liberará la patilla SDA permitiendo al servidor responder co
n un
reconocimiento. En el noveno flanco de bajada, el maestro chequeará la patilla SDA
para ver si
la dirección fue reconocida por el servidor. El estado del bit ACK se carga en el
bit de estado
ACKSTAT (SSPCON2<6>). Después de que en el noveno reloj se transmita la dirección,
SSPIF se activa, el indicador BF se borra, y el generador de baudios se desconec
ta hasta que
otra escritura sobre SSPBUF tenga lugar, manteniendo SCL baja y llevando SDA a a
lta
impedancia (desconexión).

9.2.11.1 INDICADOR DE ESTADO BF

En modo transmisión, el bit BF (SSPSTAT<0>) se activa cuando la CPU escribe en SSP


BUF, y
se borra cuando los 8 bits han sido desplazados fuera.

9.2.11.2 INDICADOR DE ESTADO WCOL

Si el usuario escribe el SSPBUF cuando una transmisión todavía está en desarrollo (aún s
e está
sacando un byte de datos), WCOL se activa y el contenido del buffer no variará (no
se produce
escritura). WCOL debe borrarse por software.

9.2.11.3 INDICADOR DE ESTADO ACKSTAT

En modo transmisión, el bit ACKSTAT (SSPCON2<6>) se borra cuando el servidor ha en


viado
un reconocimiento ( = 0), y se activa cuando el servidor no hace el reconocimien
to
( = 1). Un servidor envía un reconocimiento cuando reconoce su dirección (incluso un
a
llamada general), o cuando el servidor ha recibido correctamente su dato.
9.2.12 RECEPCIÓN EN MODO MAESTRO I2C

La recepción en modo maestro se habilita programando el bit de habilitación de modo


recepción, RCEN (SSPCON2<3>).
Nota: El módulo SSP debe estar en estado desconectado antes de que el bit RCEN se
active o el
bit RCEN se despreciará.
El generador de baudios comienza la cuenta, y, en cada pasada, el estado de la p
atilla SCL
cambiará y el dato se desplazará en el registro SSPSR. Después del octavo flanco de ba
jada, el
indicador de habilitación de recepción se borra automáticamente, el contenido de SSPSR
se
carga en SSPBUF, el indicador BF se activa, el bit SSPIF se activa, y el generad
or de baudios se
detiene, manteniendo baja SCL. El SSP queda de nuevo en estado desconectado, esp
erando la
próxima orden. Cuando se lee el buffer SSPBUF por la CPU, el indicador BF se borra
automáticamente. El usuario puede ahora enviar un bit de reconocimiento, al final
de la
recepción, activando el bit de habilitación de secuencia de reconocimiento ACKEN
(SSPCON2<4>).

9.2.12.1 INDICADOR BF DE ESTADO

En operaciones de recepción, BF se activa cuando un byte de dirección o dato se carg


a en
SSPBUF desde SSPSR. Se borra cuando se lee SSPBUF.

9.2.12.2 INDICADOR SSPOV DE ESTADO

En operaciones de recepción, SSPOV se activa cuando se han recibido los 8 bits en


SSPSR y el
indicador BF está activado por una recepción previa.
9.2.12.3 INDICADOR WCOL DE ESTADO

Si el usuario escribe SSPBUF cuando una recepción está desarrollándose, WCOL se activa
y el
contenido del buffer no cambia (no se realiza la escritura).
9.2.13 OSCILOGRAMA DE LA SECUENCIA DE RECONOCIMIENTO

Para habilitar una secuencia de reconocimiento hay que activar el bit ACKEN (SSP
CON2<4>),
de habilitación de la secuencia. Cuando este bit está activado, la patilla SCL se co
loca a nivel
bajo y el contenido del bit de reconocimiento de dato aparece en la patilla SDA.
Si el usuario
desea generar un reconocimiento, el bit ACKDT debe borrarse; si no, se activará el
bit ACKDT
antes del inicio de la secuencia de reconocimiento. El generador de baudios desa
rrollará una
pasada, y la patilla SCL se libera (polarizada alta). Cuando la patilla SCL se e
scruta en alto, el
generador de baudios cuenta una vuelta (TBRG). La patilla SCL es ahora llevada a
nivel bajo. A
continuación, el bit ACKEN se borra automáticamente, el generador de baudios se desc
onecta y
el módulo SSP va al modo desconectado (Figura 9-16).

9.213.1 INDICADOR WCOL DE ESTADO


Si el usuario escribe SSPBUF cuando una secuencia de reconocimiento no ha termin
ado,
WCOL se activa y el contenido del buffer no cambiará (la escritura se desprecia).

9.2.14 OSCILOGRAMA DE LA CONDICIÓN DE STOP

Un bit de stop se asegura en la patilla SDA, al final de la recepción-transmisión, p


rogramando el
bit PEN (SSPCON2<2>) de habilitación de la secuencia de Stop. Al final de la recep
ción-
transmisión, la línea SCL se mantiene baja después del noveno flanco de bajada. Cuando
el bit
PEN se programa a 1, el maestro asegurará el nivel bajo de la línea SDA. Al verse en
bajo la
línea SDA, el generador de baudios se recargará y comenzará su decremento hasta 0. Al
finalizar la cuenta, la patilla SCL se pondrá a nivel alto, y una vuelta del gener
ador de baudios
después (TBRG) la patilla SDA será liberada. Cuando ésta se escrute en alto mientras S
CL está en
1, el bit P (SSPSTAT<4>) se activará. Un tiempo TBRG después, el bit PEN se borra y
el bit
SSPIF se activa (Figura 9-17).
Siempre que el microprograma decide tomar el control del bus, él primero determina
si el bus
está ocupado, chequeando los bits S y P en el registro SSPSTAT. Si el bus está ocupa
do,
entonces la CPU puede ser interrumpida cuando se detecta un bit de Stop (indicad
or de bus
libre).
9.2.14.1 INDICADOR DE ESTADO WCOL

Si el usuario escribe SSPBUF cuando está desarrollándose una secuencia de STOP, el b


it
WCOL se activa, y el contenido del buffer no cambia (se pierde la escritura).

9.2.15 ARBITRAJE DEL RELOJ

El arbitraje del reloj sucede cuando el maestro, durante una recepción, transmite,
o repite
condición de start-stop, liberando la patilla SCL (SCL queda en estado flotante).
En este
momento el generador de baudios (BRG) se suspende de contaje hasta que la patill
a SCL se vea
realmente a nivel alto. Cuando esto suceda, el BRG se recarga con el contenido d
e
SSPADD<6:0> y comienza el contaje. Esto asegurará que el tiempo en alto de SCL será,
al
menos, una vuelta de contaje de BRG, en el caso de que el reloj se fuerce a nive
l bajo por un
dispositivo externo (Figura 9-18).
9.2.16 OPERACIÓN SLEEP (ALERTA)

Mientras se está en modo sleep, el módulo I2C puede recibir direcciones o datos, y c
uando
coincida la dirección o se complete una transferencia de byte, se saca al procesad
or del estado
sleep (si la interrupción SSP está habilitada).

9.2.17 EFECTOS DE UN RESET

Un reset inhibe al módulo SSP y determina la transferencia actual.

9.2.18 COMUNICACIONES MULTI-MAESTRO, CONFLICTO DE BUS Y ARBITRAJE


DE BUS

El funcionamiento del modo Multi-Maestro se consigue por arbitraje de bus. Cuand


o el maestro
saca bits de dirección o datos hacia la patilla SDA, el arbitraje se produce cuand
o el maestro
abandona SDA, dejándola flotante (alto). Si en este momento otro maestro coloca un
0 en esta
línea, como el dato esperado sobre SDA es un 1 y, se detectará conflicto de bus. El
maestro
programará el indicador de interrupción por conflicto de bus, BCLIF, e inicializará el
puerto I2C
llevándolo al estado desconectado (Figura 9-19).
Si está en desarrollo una transmisión cuando sucede el conflicto de bus, la transmis
ión se
detiene, el bit BF se borra, se liberan las líneas SDA y SCL, y SSPBUF puede volve
r a
escribirse. Cuando se utilice la rutina de servicio de interrupción de conflicto d
e bus, y esté libre
el bus I2C, el usuario puede continuar la comunicación confirmando una condición Sta
rt.
Si una condición Start, Repetición de Start, Stop, o Reconocimiento, está en desarroll
o cuando
sucede el conflicto de bus, la condición se detiene, las líneas SDA y SCL se liberan
, y los
respectivos bits de control, en el registro SSPCON2, se borran. Cuando el usuari
o entra en la
rutina de servicio de la interrupción del conflicto de bus, y el bus I2C está libre,
puede continuar
la comunicación, asegurando una condición Start.
El maestro continuará la supervisión de las patillas SDA y SCL, y si sucede una cond
ición de
Stop, se activará el bit SSPIF.
Una escritura sobre SSPBUF arrancará la transmisión del dato, con el primer bit de ést
e,
independientemente de donde se quedó el transmisor cuando se produjo el conflicto
de bus.
En modo multi-maestro, la generación de la interrupción en la detección de las condici
ones de
start o stop, permite determinar la disponibilidad del bus. El control del bus I
2C puede realizarse
cuando se active el bit P, en el registro SSPSTAT, o se borren S y P, con el bus
desconectado.
9.2.18.1 CONFLICTO DE BUS DURANTE UNA CONDICIÓN DE START

Durante una condición de START, un conflicto de bus se produce, si:


a) Las líneas SDA y SCL se ven en 0 al inicio de la condición de START (Figura 9-20)
.
b) SCL se detecta baja antes de asegurar el nivel bajo de SDA (Figura 9-21).

Durante una condición de Start, el conjunto de patillas SDA y SCL se supervisan si


, la patilla SDA está
ya en bajo, o la patilla SCL está ya en bajo. Entonces: se suspende la condición de
START, se
activa el bit indicador BCLIF, y se inicializa el módulo I2C, quedando en estado d
esconectado
(Figura 9-20).
La condición Start comienza con la liberación de las patillas SDA y SCL. Cuando la p
atilla
SDA se lee en 1, el generador de baudios se carga desde SSPADD<6:0> y comienza e
l contaje
decremental hasta 0. Si la patilla SCL se lee baja cuando SDA está en 1, sucede un
conflicto de
bus porque está asumido que otro maestro está intentando enviar un 1 durante la cond
ición de
Start.
Si la patilla SDA se lee baja durante este contaje, el generador de baudios se i
nicializa y la línea
SDA se libera enseguida (Figura 9-22). Si, no obstante, se lee un 1 en la patill
a SDA, esta patilla
se pone baja al final de la cuenta de BRG. El generador de baudios se carga, ent
onces, y
comienza la cuenta a 0. Durante este tiempo, si la patilla SCL se lee en 0, el c
onflicto de bus no
se producirá. Al final de la cuenta de BRG, la patilla SCL se queda en nivel bajo.
Nota: La razón de que el conflicto de bus no sea un factor, durante la condición de
START, es
que no pueden dos maestros, simultáneamente, asegurar una condición de START. Por
consiguiente, un maestro asegurará siempre la patilla SDA antes que el otro. Esta
condición no
provoca conflicto de bus, porque los dos maestros estarán autorizados a decidir la
primera
dirección siguiente a la condición de START. Si la dirección es la misma, la decisión se
rá,
permitir continuar con la parte del dato, o condiciones de Repetición de START o S
TOP.
9.2.18.2 CONFLICTO DE BUS DURANTE LA CONDICIÓN DE REPETICIÓN DE START.

Durante una condición de Repetición de Start, un conflicto de bus sucede si:


a) Se observa un nivel bajo en SDA cuando SCL va de bajo a alto.
b) SCL se pone en 0 antes que se asegure el 0 en SDA. Esto indicaría que otro maes
tro
esta intentando transmitir un 1.

Cuando el usuario deja la patilla SDA y ésta queda flotante, el generador de baudi
os se carga
con SSPADD<6:0> y comienza la cuenta a cero. La patilla SCL se libera entonces,
y cuando se
observa en alto, la patilla SDA se memoriza. Si SDA es 0, ha ocurrido un conflic
to de bus (por
ejemplo, que otro maestro esté intentando transmitir un .0.). Si, por otra parte,
SDA se lee en 1,
el generador de baudios se recarga y comienza el contaje. Si SDA transita de alt
o a bajo antes
que el BRG termine su cuenta, no existirá conflicto de bus, porque no hay dos maes
tros
accediendo a SDA al mismo tiempo.
Sin embargo, si SCL cambia de alto a bajo antes que el BRG termine su cuenta, y
SDA no está
estable, sucede un conflicto de bus. En cuyo caso, otro maestro está intentando tr
ansmitir un 1
durante la condición de Repetición de Start.

Si al final del tiempo de BRG, el conjunto SDA y SCL están todavía en alto, la patil
la SDA se
pone a 0 y el BRG se recarga y comienza su cuenta. Al final de ésta, independiente
mente del
estado de la patilla SCL, ésta se pone a 0 y se completa la condición de Repetición de
Start
(Figura 9-23).
9.2.18.3 CONFLICTO DE BUS DURANTE UNA CONDICIÓN DE STOP

Durante una condición de Stop, ocurre un conflicto de bus, si:


a) Después de que la patilla SDA ha sido liberada y puesta en estado flotante, SDA
se
observa en 0 después del final de la cuenta de BRG.
b) Después de liberar la patilla SCL, ésta se lee en 0 antes de que SDA esté en 1.

La condición de STOP comienza fijando un 0 en SDA. Cuando ésta se lea en este valor,
la
patilla SCL se deja flotante. Si esta patilla de observa en 1 (arbitraje de relo
j), el BRG se carga
con SSPADD<6:0> y comienza el contaje. Al finalizar éste, se memoriza el valor de
SDA. Si
estuviese en 0, un conflicto de bus ha tenido lugar. Esto habrá sucedido porque ot
ro maestro
intenta enviar un 0. Si SCL se lee como 0 antes de que SDA quede flotante, no ha
y conflicto de
bus. Este es el caso de que otro maestro intente enviar un 0 (Figura 9-25).
9.3 Consideraciones de conexión del bus I2C
Para dispositivos de modo estándar del bus I2C, los valores de resistores Rp y Rs,
en la Figura
9-27, dependen de los siguientes parámetros:
.
Tensión de alimentación.
.
Capacidad del bus.
.
Número de dispositivos conectados (corriente de entrada + corriente de fuga).

La tensión de alimentación limita el mínimo valor del resistor Rp, debido al mínimo valo
r
especificado de corriente de carga de 3 mA, para una tensión de salida especificad
a de VOL máx =
0,4V. Por ejemplo, con una tensión de alimentación de VDD = 5V +/- 10%, y una VOL máx
= 0,4V
para 3 mA,
VDD en función de Rp se muestra en la Figura 9-27. El margen de ruido deseado de 0
,1 VDD
para el nivel bajo, limita el máximo valor de Rs. Opcionalmente se pueden agrupar
en serie
resistores para mejorar la susceptibilidad a las descargas electrostáticas (ESD).
La capacidad del bus es la capacidad total del cableado, conectores y patillas.
Esta capacidad
limita el valor máximo de Rp, debido al tiempo especificado de subida (Figura 9-27
).
El bit SMP es el habilitador del control del tiempo de subida. Este bit está en el
registro
SSPSTAT, y controla la velocidad de subida en las patillas de entrada-salida cua
ndo se trabaja
en modo I2C (maestro o servidor).
KRpmín7,1003,0)4,05,5(
10.0 TRANSMISOR RECEPTOR ASÍNCRONO SÍNCRONO UNIVERSAL (USART)

El módulo USART es uno de los dos módulos de E-S serie. (La USART es también conocida
como Interface de Comunicaciones Serie (SCI).) La USART puede configurarse como
sistema
asíncrono .full duplex., que puede comunicarse con dispositivos periféricos como ter
minales
CRT y ordenadores personales, o puede configurarse como sistema síncrono .half dup
lex., que
puede comunicarse con periféricos tales como circuitos integrados convertidores A/
D y D/A,
EEPROMs serie, etc.
La USART puede configurarse en los siguientes modos:
.
Asíncrono (full duplex).
.
Síncrono-maestro (half duplex).
.
Síncrono-servidor (half duplex).

El bit SPEN (RCSTA<7>) y los bits TRISC<7:6>) deben ser programados, en ese orde
n, para
configurar las patillas RC6/TX/CK y RC7/RX/DT como USART.
El módulo USART tiene, también, un multiprocesador de comunicación capaz de usar y
detectar 9 bits de dirección.

REGISTRO 10-1: TXSTA: REGISTRO DE CONTROL Y ESTADO DE TRANSMISIÓN


(DIRECCIÓN 98h)
R/W-0
R/W-0
R/W-0
R/W-0
U-0
R/W-0
R-1
R/W-0

CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D

R = De lectura
W = De escritura
U = Sin implementar. Da 0 en
lectura
-n = Valor del reset POR

bit7
bit0
bit 7:
CSRC: Bit de selección de origen de reloj.

Modo Asíncrono

Indiferente.

Modo Síncrono
1 = Modo Maestro (reloj interno procedente de BRG).

0 = Modo Servidor (reloj externo).

bit 6:
TX9: Bit de habilitación de transmisión con 9 bits.

1 = Selección de transmisión con 9 bits.

0 = Selección de transmisión con 8 bits.

bit 5:
TXEN: Bit de habilitación de transmisión.

1 = Transmisión habilitada.

0 = Transmisión inhibida.

Nota: SREN/CREN sustituyen a TXEN, en modo Síncrono.

bit 4:
SYNC: Bit de selección de modo USART.

1 = Modo Síncrono.

0 = Modo Asíncrono.
bit 3:
Sin implementar: Se lee como 0.

bit 2:
BRGH: Bit de selección de velocidad de baudios.

Modo Asíncrono

1 = Alta velocidad.

0 = Baja velocidad.
Modo Síncrono

No usado en este modo.

bit 1:
TRMT: Bit de estado del registro de desplazamiento de transmisión.

1 = TSR vacío.

0 = TSR lleno.

bit 0:
TX9D: Noveno bit del dato transmitido. Puede ser el bit de paridad.
REGISTRO 10-2: RCSTA: REGISTRO DE CONTROL Y ESTADO DE RECEPCIÓN
(DIRECCIÓN 18h)

R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R-0
R-0
R-x

SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D

R = De lectura
W = De escritura
U = Sin implementar. Da 0 en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
SPEN: Bit de habilitación de puerto serie.

1 = Puerto Serie habilitado (configurar RC7/RX/DT y RC6/TX/CK como patillas de p


uerto serie).

0 = Puerto Serie inhibido.


bit 6:
RX9: Bit de habilitación de recepción con 9 bits.

1 = Selección de recepción con 9 bits.

0 = Selección de recepción con 8 bits.

bit 5:
SREN: Bit de habilitación de recepción simple.

Modo Asíncrono
Irrelevante.

Modo Maestro Síncrono

1 = Recepción simple habilitada.

0 = Recepción simple inhibida.

Este bit se borra cuando se completa la recepción.

Modo Servidor Síncrono

No se usa en este modo.


bit 4:
CREN: Bit de habilitación de recepción continua.

Modo Asíncrono

1 = Habilita la recepción continua.

0 = Inhibe la recepción continua.

Modo Síncrono

1 = Habilita recepción continua hasta borrado de CREN (éste sustituye a SREN).

0 = Inhibe la recepción continua.


bit 3:
ADDEN: Bit de habilitación de detección de dirección.

Modo Asíncrono de 9 bits (RX9 = 1)

1 = Habilita la detección de la dirección, habilita la interrupción y carga el buffer


receptor cuando

RSR<8> = 1

0 = Inhibe la detección de la dirección, todos los bytes se reciben, y el noveno bit


puede usarse como

paridad
bit 2:
FERR: Bit de error por inconcordancia (framing).

1 = Error de concordancia (bit STOP=0). Puede cambiarse leyendo el registro RCRE


G

y recibiendo un próximo byte válido

0 = No existe error.

bit 1:
OERR: Bit de error por desbordamiento.

1 = Error de desbordamiento. Puede borrarse escribiendo 0 en el bit CREN.


0 = No existe error de desbordamiento.

bit 0:
RX9D: Noveno bit del dato recibido. Puede ser el bit de paridad.
10.1 Generador de baudios (BRG) de la USART
El BRG sirve a los modos síncrono y asíncrono de la USART. Es un contador de 8 bits,
especializado en generar la velocidad de circulación de los bits salientes o entra
ntes. El registro
SPBRG controla el período del temporizador independiente de 8 bits. En modo asíncron
o, el bit
BRGH (TXSTA<2>) es el encargado de controlar la velocidad; en modo síncrono, este
bit se
ignora. La tabla 10-1 muestra la fórmula para el cálculo de la velocidad de los baud
ios para
diferentes modos de la USART, solamente aplicada en modo maestro (reloj interno)
.
Elegidos una velocidad y Fosc dadas, el valor entero más próximo para SPBRG puede
calcularse usando la fórmula en la tabla 10-1, pudiendo, además, determinarse el val
or del error
de velocidad existente para ese valor obtenido.
Será interesante el uso de alta velocidad (BRGH = 1), aun para menores valores de
reloj. Esto
es así porque la ecuación Fosc / [16 (X + 1)] puede reducir el error de velocidad en c
iertos
casos.
Escribir un nuevo valor en el registro SPBRG provoca el borrado del temporizador
BRG. Esto
asegurará que el BRG no espere al final del tiempo antes de sacar una nueva veloci
dad.
10.1.1 CAPTURA
El dato en la patilla RC7/RX/DT se captura tres veces por un circuito detector d
e mayoría, que
determina el valor alto o bajo del dato presente en la patilla RX.

TABLA 10-2: REGISTROS ASOCIADOS AL GENERADOR DE BAUDIOS


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros resets
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
18h
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 000x
0000 000x
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en el módulo BRG.

TABLA 10-1: FÓRMULA PARA CALCULAR LA VELOCIDAD


SYNC
BRGH = 0 (Baja velocidad)
BRGH = 1 (Alta velocidad)

0
Velocidad (Asíncrono) = Fosc / [64 (X + 1)]
Velocidad = Fosc / [16 (X + 1)]
1
Velocidad (Síncrono) = Fosc / [4 (X + 1)]
No utilizado
X = valor en SPBRG (0 a 255)
TABLA 10-3: BAUDIOS EN MODO ASÍNCRONO (BRG = 0)
BAUD
(K)
Fosc = 20 Mhz
Fosc = 16 Mhz
Fosc = 10 Mhz
KBAUD
%
ERROR
Valor
decimal
SPBRG
KBAUD
%
ERROR
Valor
decimal
SPBRG
KBAUD
%
ERROR
Valor
decimal
SPBRG

0,3
---
---
---
---
---
---
---
---
---
1,2
1,221
1,75
255
1,202
0,17
207
1,202
0,17
129
2,4
2,404
0,17
129
2,404
0,17
103
2,404
0,17
64
9,6
9,766
1,73
31
9,615
0,16
25
9,766
1,73
15
19,2
19,531
1,72
15
19,231
0,16
12
19,531
1,72
7
28,8
31,250
8,51
9
27,778
3,55
8
31,250
8,51
4
33,6
34,722
3,34
8
35,714
6,29
6
31,250
6,99
4
57,6
62,500
8,51
4
62,500
8,51
3
52,083
9,58
2
ALTA
1,221
---
255
0,977
---
255
0,610
---
255
BAJA
312,500
---
0
250,000
---
0
156,250
---
0

BAUD
(K)
Fosc = 4 Mhz
Fosc = 3,6864 Mhz
KBAUD
%
ERROR
Valor
decimal
SPBRG
KBAUD
%
ERROR
Valor
decimal
SPBRG

0,3
0,300
0
207
0,301
0,33
185
1,2
1,202
0,17
51
1,216
1,33
46
2,4
2,404
0,17
25
2,432
1,33
22
9,6
8,929
6,99
6
9,322
2,90
5
19,2
20,833
8,51
2
18,643
2,90
2
28,8
31,250
8,51
1
---
---
---
33,6
---
---
---
---
---
---
57,6
62,500
8,51
0
55,930
2,90
0
ALTA
0,244
---
255
0,218
---
255
BAJA
62,500
---
0
55,930
---
0
TABLA 10-4: BAUDIOS EN MODO ASÍNCRONO (BRG = 1)
BAUD
(K)
Fosc = 20 Mhz
Fosc = 16 Mhz
Fosc = 10 Mhz
KBAUD
%
ERROR
Valor
decimal
SPBRG
KBAUD
%
ERROR
Valor
decimal
SPBRG
KBAUD
%
ERROR
Valor
decimal
SPBRG
0,3
---
---
---
---
---
---
---
---
---
1,2
---
---
---
---
---
---
---
---
---
2,4
---
---
---
---
---
---
2,441
1,71
255
9,6
9,615
0,16
129
9,615
0,16
103
9,615
0,16
64
19,2
19,231
0,16
64
19,231
0,16
51
19,531
1,72
31
28,8
29,070
0,94
42
29,412
2,13
33
28,409
1,36
21
33,6
33,784
0,55
36
33,333
0,79
29
32,895
2,10
18
57,6
59,524
3,34
20
58,824
2,13
16
56,818
1,36
10
ALTA
4,883
---
255
3,906
---
255
2,441
---
255
BAJA
1250,000
---
0
1000,000
---
0
625,000
---
0
BAUD
(K)
Fosc = 4 Mhz
Fosc = 3,6864 Mhz
KBAUD
%
ERROR
Valor
decimal
SPBRG
KBAUD
%
ERROR
Valor
decimal
SPBRG

0,3
---
---
---
---
---
---
1,2
1,202
0,17
207
1,203
0,25
185
2,4
2,404
0,17
103
2,406
0,25
92
9,6
9,615
0,16
25
9,727
1,32
22
19,2
19,231
0,16
12
18,643
2,90
11
28,8
27,798
3,55
8
27,965
2,90
7
33,6
35,714
6,29
6
31,960
4,88
6
57,6
62,500
8,51
3
55,930
2,90
3
ALTA
0,977
---
255
0,874
---
255
BAJA
250,000
---
0
273,722
---
0
10.2 USART en modo Asíncrono

En este modo, la USART emplea el formato estándar .no retorno a cero. (NRZ) (un bi
t de start,
ocho o nueve bits de datos y un bit de stop). El formato más común de datos es el de
8 bits. Se
utilizará un contador especializado, llamado generador de baudios, para obtener la
s frecuencias
del oscilador. La USART transmite y recibe, en primer lugar, el bit menos signif
icativo (LSb).
Los bloques transmisor y receptor de la USART son funcionalmente independientes,
pero usan
el mismo formato de datos y la misma velocidad de transferencia. El generador de
baudios
produce una señal de reloj cada x16 o x64 de la velocidad de desplazamiento de bit
,
dependiendo del bit BRGH (TXSTA<2>). La paridad no está soportada por el hardware,
pero
puede implementarse por software (y almacenarse como el noveno bit del dato). El
modo
Asíncrono se para durante el estado SLEEP, y se selecciona borrando el bit llamado
SYNC
(TXSTA<4>).
El módulo Asíncrono USART consta de los siguientes elementos importantes:
.
Generador de velocidad de baudios (generador de baudios o BRG).
.
Circuito de captura.
.
Transmisor asíncrono.
.
Receptor asíncrono.

10.2.1 TRANSMISOR ASÍNCRONO USART

El diagrama a bloques del transmisor USART se muestra en la Figura 10-1. El cora


zón del
transmisor es el registro de desplazamiento de transmisión serie (TSR). El registr
o de
desplazamiento obtiene su dato del buffer de transmisión de lectura-escritura, TXR
EG. El
registro TXREG no se carga hasta que el bit de STOP, de la carga previa, ha sido
transmitido.
Tan pronto como el bit de STOP se transmite, el TSR se carga con el nuevo dato p
roveniente
del registro TXREG (si está disponible). Enseguida que el registro TXREG transmite
su
contenido al registro TSR (sucede en un ciclo TCY), el registro TXREG queda vacío,
y el bit
indicador TXIF (PIR1<4>) se activa. Esta interrupción puede habilitarse o inhibirs
e activando o
borrando, respectivamente, el bit de habilitación TXIE (PIE1<4>). El bit indicador
se activará,
independientemente del estado del bit de habilitación TXIE, y no podrá borrarse por
software.
Solamente se borrará cuando un nuevo dato se cargue en el registro TXREG. Mientras
el bit
indicador TXIF señala el estado del registro TXREG, otro bit, TRMT (TXSTA<1>), mue
stra el
estado del registro TSR. El bit de estado TRMT es de lectura, y se activa cuando
el registro TSR
está vacío. Ninguna interrupción está unida a este bit, de manera que el usuario debe co
nsultar
este bit para determinar si el registro TSR está vacío.
Nota 1: El registro TSR no pertenece al mapa de memoria, por lo que no está dispon
ible para el
usuario.
Nota 2: El indicador TXIF se activa cuando está activo el bit de habilitación TXEN.
TXIF se
borra cargando el registro TXREG.
La transmisión se habilita activando el bit de habilitación TXEN (TXSTA<5>). La tran
smisión
actual no ocurrirá, hasta que el registro TXREG sea cargado con el dato, y el gene
rador de
baudios (BRG) haya producido el reloj de desplazamiento (Figura 10-2). La transm
isión puede
detenerse, primero cargando el registro TXREG, y activando después el bit de habil
itación
TXEN. Normalmente, cuando la transmisión se ha iniciado primero, el registro TSR e
stá vacío.
En este punto, transferir al registro TXREG dará como resultado una transferencia
inmediata de
aquél a TSR, quedando un registro TXREG vacío. Por esto, es posible una transferenci
a en
oposición (back-to-back) (Figura 10-3). El borrado de TXEN durante una transmisión p
rovocará
el abandono de ésta y la inicialización del transmisor. Como resultado, la patilla R
C6/TX/CK
quedará en alta impedancia.
Para seleccionar una transmisión a 9 bits, el bit TX9 (TXSTA<6>) deberá activarse, y
el noveno
bit deberá escribirse en TX9D (TXSTA<0>). El noveno bit se escribirá antes de cargar
los 8 bits
de datos en el registro TXREG. Esto es necesario, porque al escribir un dato en
el registro
TXREG puede tener lugar una transferencia inmediata del dato al registro TSR (si
TSR está
vacío). En este caso, se habrá cargado un dato incorrecto de nueve bits en el regist
ro TSR.

Los pasos a seguir para activar una transmisión Asíncrona, son:


1. Inicializar el registro SPBRG para la adecuada cadencia de bits. Si se desea
un valor
alto, activar el bit BRGH. (Sección 10.1)
2. Habilitar el puerto serie asíncrono borrando el bit SYNC y activando el bit SPE
N.
3. Si se desea interrupción, activar el bit de habilitación TXIE.
4. Si se desea una transmisión en 9 bits, activar el bit TX9.
5. Habilitar la transmisión activando el bit TXEN, que también activará el bit TXIF.
6. Si se selecciona transmisión a 9 bits, el noveno bit se cargará en TX9D.
7. Cargar el dato en el registro TXREG (se inicia la transmisión).
TABLA 10-5: REGISTROS ASOCIADOS A LA TRANSMISIÓN ASÍNCRONA
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,
BOR
Valor tras
otros
resets
OCh
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
---
FERR
OERR
RX9D
0000 -00x
0000 -00x
19h
TXREG
Registro Transmisor USART
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en transmisión asíncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de
mantenerse a cero.
10.2.2 RECEPTOR ASÍNCRONO USART

En la Figura 10-4 se muestra el diagrama de bloques del receptor. El dato se rec


ibe en la patilla
RC7/RX/DT y se conduce hasta el bloque Data Recovery (Recuperación de dato). Este
bloque
es un circuito desplazador de alta velocidad que opera con una cadencia x16, con
siderando que
el desplazador del receptor serie principal opera a Fosc.
Al seleccionar el modo asíncrono, la recepción se habilita activando el bit CREN (RC
STA<4>).

El corazón del receptor es el registro de desplazamiento serie de recepción (RSR). D


espués de la
captura del bit de STOP, el dato recibido en el registro RSR se transfiere al re
gistro RCREG (si
está vacío). Si la transferencia se completa, se activa el bit indicador RCIF (PIR1<
5>). La
interrupción actual puede habilitarse-inhibirse, activando-borrando el bit de habi
litación RCIE
(PIE1<5>). El bit RCIF es de lectura, y se borrará por hardware. Esto se producirá c
uando el
registro RCREG se ha leído y queda vacío. El RCREG es un registro de doble buffer (u
na FIFO
de dos posiciones). Por esto es posible, simultáneamente, cargar RCREG desde la CP
U,
transferir a RCREG desde el RSR, y comenzar a desplazar en RSR desde la patilla
RX. Al
detectar el bit de STOP que entra por la patilla RX, si el registro RCREG está tod
avía lleno, se
activará el bit de error por desbordamiento OERR (RCSTA<1>). En este caso, la pala
bra
existente en RSR se perderá. El registro RCREG puede leerse dos veces seguidas par
a recuperar
los dos bytes de la FIFO. El bit OERR será borrado por software, borrando CREN. Si
el bit
OERR está en 1, se inhibe la transferencia desde el registro RSR hasta el registro
RCREG, por
lo que es vital borrar el bit OERR, si estuviese activado. El error de concordan
cia FERR
(RCSTA<2>) se activa si un bit de STOP se lee en nivel bajo. El bit FERR y el no
veno bit
recibido se memorizan en el mismo canal que el dato recibido. Leyendo RCREG se c
argarán los
bits RX9D y FERR con los nuevos valores. Por consiguiente, es necesario que el u
suario lea el
registro RCSTA antes de leer el registro RCREG, para no perder los antiguos valo
res de FERR
y RX9D.
Para programar Recepción Asíncrona, hay que seguir los pasos siguientes:
1. Inicializar el registro SPBRG con la apropiada cadencia. Si se desea alta vel
ocidad,
poner a 1 el bit BRGH. (Sección 10.1).
2. Habilitar el puerto serie asíncrono, borrando el bit SYNC y activando el bit SP
EN.
3. Si se desea interrupción, activar el bit RCIE.
4. Si se desea recepción de 9 bits, activar RX9.
5. Habilitar la recepción, activando el bit CREN.
6. El indicador RCIF se activará cuando se complete la recepción. Esto generará una
interrupción, si está activado el bit RCIE.
7. Leer el registro RCSTA para obtener el valor del noveno bit (si está habilitado
el modo)
y determinar si ha existido error durante la recepción.
8. Leer los 8 bits del dato recibido, leyendo el registro RCREG.
9. Si ha ocurrido algún error, cancelar éste borrando el bit de habilitación CREN.
TABLA 10-6: REGISTROS ASOCIADOS A LA RECEPCIÓN ASÍNCRONA
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,
BOR
Valor tras
otros
resets

OCh
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
---
FERR
OERR
RX9D
0000 -00x
0000 -00x
1Ah
RCREG
Registro Receptor USART
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en recepción asíncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de
mantenerse a cero.
10.2.3 PROGRAMACIÓN DE MODO 9 BITS CON DETECCIÓN DE DIRECCIÓN

El .
C puede trabajar con varios servidores conectados a la misma línea serie. La forma
de
seleccionar a uno cualquiera es por el envío de un byte, que será interpretado por e
l servidor
como una dirección identificativa debido a que en el envío de esta dirección el noveno
bit estará
a 1. Así pues, los receptores deberán programarse inicialmente con recepción de 9 bits
y
detección de dirección. Esto pondrá a 1 los bits RX9 y ADDEN de la figura 10.6. Cuando
llegue
un byte en serie, si el bit noveno (RSR<8> de la figura 10.6) es 1, debido a la
acción de la
puerta AND-3, el byte recibido en RSR se transferirá al registro RCREG. Esto provo
cará la
interrupción de recepción (si estuviese habilitada) y el software del receptor mirará
el registro
RCSTA para ver si ha habido error y si el noveno bit es 1. Si es así, el byte reci
bido se interpreta
como el código de una dirección, y se comparará con el código intrínseco de ese receptor.
Si
hay coincidencia, se borrará ADDEN para que los próximos bytes enviados a él puedan ll
egar
hasta RCREG por la puerta OR de ceros (ya que ahora el noveno bit enviado por el
maestro será
un 0, indicativo de byte de datos). A partir de este momento, cada llegada de by
te supondrá una
interrupción para el receptor, que se limitará a tomar los datos enviados.
Como a cada recepción el software receptor comprobará el nivel de RSR<8>, cuando éste
sea 1
(porque el transmisor desea enviar dirección), el receptor comprobará que el byte re
cibido
corresponde o no a su dirección intrínseca. Si la dirección recibida es la suya, todo
seguirá igual
y el receptor tomará los bytes enviados. Si al comprobar el byte de dirección ésta no
coincidiese
con la suya, el receptor sabe que los próximos envíos de datos no van a ser para él. P
ondrá su bit
ADDEN a 1 para impedir que se carguen en su RCREG bytes de datos que no son para
él y, de
esta forma, se impide que se le interrumpa en cada dato recibido. (Obsérvese que s
i ponemos a 1
el bit ADDEN la puerta OR de ceros dará 0 de salida pero la NAND-3 puede dar 1, y
con ello
permitir la entrada del byte a RCREG cuando se reciba un byte de dirección, que te
ndrá
RSR<8> a 1.) Con todo lo explicado se comprende que ahora, el receptor, solament
e cargará un
byte en RCREG cuando aquél lleve el noveno bit a 1. Cuando esto ocurra, de nuevo s
e
comprobará el byte identificativo de dirección para ver si vuelve a ser seleccionado
.
Cuando se programe Recepción Asíncrona con Habilitación de Detección de Dirección,
respétense los siguientes pasos:
1. Inicializar el registro SPBRG con la apropiada cadencia. Si se desea alta vel
ocidad,
poner a 1 el bit BRGH. (Sección 10.1).
2. Habilitar el puerto serie asíncrono, borrando el bit SYNC y activando el bit SP
EN.
3. Si se desea interrupción, activar el bit RCIE.
4. Si se desea recepción de 9 bits, activar RX9.
5. Activar ADDEN para habilitar la detección de la dirección.
6. Habilitar la recepción, activando el bit CREN.
7. El indicador RCIF se activará cuando se complete la recepción. Esto generará una
interrupción, si está activado el bit RCIE.
8. Leer el registro RCSTA para obtener el valor del noveno bit y determinar si h
a existido
error durante la recepción.
9. Leer los 8 bits del dato recibido, leyendo el registro RCREG. Esto permitirá sa
ber si el
dispositivo está siendo direccionado.
10. Si ha ocurrido algún error, cancelarlo, borrando el bit de habilitación CREN.
11. Si el dispositivo ha sido direccionado, borrar el bit ADDEN para permitir qu
e sean
leídos los bytes de dato y dirección en el buffer receptor, e interrumpir a la CPU.
TABLA 10-7: REGISTROS ASOCIADOS A LA RECEPCIÓN ASÍNCRONA
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros resets

OCh
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 000x
0000 000x
1Ah
RCREG
Registro Receptor USART
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en recepción asíncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de
mantenerse a cero.
10.3 USART en modo Maestro Síncrono

En el modo Maestro Síncrono, el dato se transmite en half-duplex (no pueden darse,


simultáneamente, la transmisión y la recepción). Cuando se transmite un dato, la recep
ción
queda inhibida, y viceversa. El modo Síncrono se programa activando el bit SYNC
(TXSTA<4>). Además, hay que activar el bit de habilitación SPEN (RCSTA<7>) y, por es
te
orden, configurar las patillas RC6/TX/CK y RC7/RX/DT, la línea de reloj CK y la de
dato DT.
El modo Maestro indica que el procesador transmite el reloj maestro en la línea CK
. El modo
Maestro se programa activando el bit CSRC (TXSTA<7>).

10.3.1 TRANSMISIÓN DE USART EN MODO MAESTRO SÍNCRONO

El diagrama de bloques del transmisor de la USART se muestra en la Figura 10-6.


El corazón
del transmisor es el registro de desplazamiento de transmisión serie TSR. El regis
tro de
desplazamiento obtiene su dato del buffer del registro TXREG, quien, a su vez, o
btendrá el dato
por software. El registro TSR no se carga hasta que se ha transmitido el último bi
t del dato
previo. Tan pronto como sea transmitido el último bit, el TSR se cargará con el nuev
o dato
procedente de TXREG (si está disponible). Mientras que TXREG transmite el dato a T
SR (esto
sucede en un ciclo Tcycle), el TXREG se vacía, activándose el bit de petición de inter
rupción
TXIF (PIR1<4>). La interrupción puede habilitarse o inhibirse, activando o borrand
o,
respectivamente, el bit TXIE (PIE1<4>). El bit indicador TXIF se activará, indepen
dientemente
del estado del bit TXIE, y no podrá borrarse por software. Solamente se borra cuan
do un nuevo
dato se carga en el registro TXREG. Mientras que el bit TXIF indica el estado de
l registro
TXREG, otro bit, TRMT (TXSTA<1>), muestra el estado del registro TSR. TRMT es un
bit de
lectura, que se activa cuando TSR queda vacío. Ninguna interrupción lógica va unida a
este bit;
el usuario deberá consultarlo para determinar si TSR está vacío. TSR no pertenece al b
loque
memoria de registros, por lo que no es utilizable por el usuario.
La transmisión se habilita activando el bit TXEN (TXSTA<5>. La transmisión actual no
se
iniciará hasta que el registro TXREG haya sido cargado con un dato. El primer bit
del dato, será
transmitido fuera de la patilla con la próxima subida de reloj disponible en la líne
a CK. El dato
saliente será estable con el flanco de bajada del reloj síncrono (Figura 10-9). La t
ransmisión
puede detenerse, cargando primero el registro TXREG, y luego activando el bit TX
EN (Figura
10-10). Esto es preferible cuando se selecciona baja velocidad, ya que el BRG es
tá en reset
cuando los bits TXEN, CREN y SREN están a cero. Activando el bit TXEN arrancará BRG,
produciendo un reloj de desplazamiento inmediatamente. Normalmente, con la prime
ra
transmisión, el registro TSR está vacío, así que una transferencia sobre TXREG dará como
resultado una inmediata transferencia a TSR, quedando vacío el TXREG. Será posible l
a
transferencia en oposición.
Borrando el bit TXEN durante la transferencia, se producirá que se cancel la trans
misión y se
inicialice el transmisor. Las patillas DT y CK volverán al estado de alta impedanc
ia. Si
cualquiera de los dos bits CREN o SREN se activan durante la transmisión, ésta se ca
ncela y la
patilla DT vuelve al estado de alta impedancia (queda lista para recepción). La pa
tilla CK
permanece como salida si el bit CSRC está activo (reloj interno). La lógica de trans
misión, sin
embargo, no se inicializa, aunque se desconecta de las patillas. Para inicializa
r el transmisor, el
usuario ha de borrar el bit TXEN. Si SREN está activo, después de recibir una única pa
labra, el
bit SREN se borrará y el puerto serie retorna a transmisor, ya que el bit TXEN está
todavía
activado. La línea DT conmuta inmediatamente desde alta impedancia en modo recepto
r, a
modo transmisor, y arranca la conducción. Para evitar esto, se borrará el bit TXEN.
Para seleccionar transmisión con 9 bits, TX9 (TXSTA<6>) se activará y el noveno bit
se
escribirá en TX9D (TXSTA<0>). El noveno bit debe escribirse antes de escribir los
8 bits del
dato en el registro TXREG. Esto es porque el dato escrito en TXREG puede transfe
rirse
inmediatamente al registro TSR (si éste estuviese vacío), dando como resultado la ca
rga de los 8
bits del dato actual con el valor antiguo del noveno bit.
Los pasos a seguir para programar Maestro en Transmisión Síncrona, son:
1. Inicializar el registro SPBRG con la apropiada cadencia.
2. Habilitar el puerto serie como maestro síncrono, programando los bits SYNC, SPE
N y
CSRC.
3. Si se desean interrupciones, programar el bit TXIE.
4. Si se desea transmisión en 9 bits, programar el bit TX9.
5. Habilitar la transmisión activando el bit TXEN.
6. Si se ha seleccionado transmisión con 9 bits, cargar el noveno bit en TX9D.
7. Arrancar la transmisión cargando el dato en el registro TXREG.
TABLA 10-8: REGISTROS ASOCIADOS AL MAESTRO EN TRANSMISIÓN SÍNCRONA
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros resets

OCh
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 -00x
0000 -00x
19h
TXREG
Registro Transmisor USART
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; - = Sin implementar (se lee 0). Las celdas sombreadas no se uti
lizan en recepción asíncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; s
iempre han de mantenerse a cero.
10.3.2 USART MAESTRO EN RECEPCIÓN SÍNCRONA
Una vez seleccionado el modo síncrono, la recepción se habilita programado cualquier
a de los
dos bits SREN (RCSTA<5>) o CREN (RCST<4>). El dato se captura en la patilla RC7/
RX/DT
en el flanco de bajada del reloj. Si está activado el bit SEN, solamente se recibi
rá una palabra; si
está habilitado el bit CREN, la recepción será continua hasta el borrado de CREN. Si s
e han de
activar ambos bits, el primero en hacerlo será CREN. Después de la entrada del último
bit, el
dato recibido en el registro receptor RSR se transferirá al registro RCREG (si está
vacío).
Cuando se complete la transferencia, se activará el indicador de interrupción RCIF (
PIR1<5>).
La interrupción actual puede habilitarse o inhibirse, activando o borrando, respec
tivamente, el
bit RCIE (PIE1<5>). El indicador RCIF es sólo de lectura, y se borrará por hardware
cuando se
lea el registro RCREG y éste quede vacío. El registro RCREG es de doble buffer (una
FIFO de
dos posiciones). Por esto es posible, simultáneamente, cargar RCREG desde la CPU,
transferir a
RCREG desde el RSR, y comenzar a desplazar en RSR desde la patilla RX. Al detect
ar el bit de
STOP que entra por la patilla RX, si el registro RCREG está todavía lleno, se activa
rá el bit de
error por desbordamiento OERR (RCSTA<1>). En este caso, la palabra existente en
RSR se
perderá. El registro RCREG puede leerse dos veces seguidas para recuperar los dos
bytes de la
FIFO. El bit OERR se borrará por software borrando CREN. Si el bit OERR está en 1, s
e inhibe
la transferencia desde el registro RSR hasta el registro RCREG, por lo que es vi
tal borrar el bit
OERR, si estuviese activado. El noveno bit recibido se memoriza en el mismo latc
h que el dato
recibido. Leyendo RCREG se cargará el bit RX9D con el nuevo valor, por consiguient
e, es
esencial para el usuario leer el registro RCSTA, antes de leer el registro RCREG
, para no perder
la información en RX9D.
Los pasos a seguir cuando se programe Maestro en Recepción Síncrona, son:
1. Inicializar el registro SPBRG con la apropiada cadencia. (Sección 10.1).
2. Habilitar el puerto serie maestro síncrono programando los bits SYNC, SPEN y CS
RC.
3. Asegurar el borrado de los bits CREN y SREN.
4. Si se desea interrupción, activar el bit RCIE.
5. Si se desea recepción de 9 bits, activar RX9.
6. Si se desea una recepción, activar el bit SREN; para recepción continua, activar
CREN.
7. El indicador RCIF se activará cuando se complete la recepción. Esto generará una
interrupción, si está activado el bit RCIE.
8. Leer el registro RCSTA para tener el valor del noveno bit (si está habilitado e
l modo) y
determinar si ha existido error durante la recepción.
9. Leer los 8 bits del dato recibido, leyendo el registro RCREG.
10. Si ha ocurrido algún error, cancelarlo borrando el bit de habilitación CREN.
TABLA 10-9: REGISTROS ASOCIADOS AL MAESTRO EN RECEPCIÓN SÍNCRONA
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR,
BOR
Valor tras
otros
resets

OCh
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
---
FERR
OERR
RX9D
0000 -00x
0000 -00x
1Ah
RCREG
Registro Receptor USART
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en recepción asíncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; s
iempre han de mantenerse a cero.
10.4 USART SERVIDOR EN MODO SÍNCRONO
El modo Servidor Síncrono difiere del modo Maestro en el hecho de que el reloj se
suministra
externamente a la patilla RC6/TX/CK. Esto permite al dispositivo transferir o re
cibir datos,
incluso en el estado SLEEP. Se entra en modo servidor, borrando el bit CSRC (TXS
TA<7>).

10.4.1 USART EN TRANSMISIÓN SÍNCRONA COMO SERVIDOR

La operativa en modo síncrono maestro y servidor es idéntica, excepto en el caso del


estado
SLEEP.
Si se escriben dos palabras en TXREG, y se ejecuta entonces una instrucción SLEEP,
ocurrirá
lo siguiente:
a) La primera palabra será inmediatamente transferida al registro TSR y transmitid
a.
b) La segunda palabra permanecerá en el registro TXREG.
c) El bit indicador TXIF no se activará.
d) Cuando la primera palabra haya salida de TSR, el registro TXREG transferirá la
segunda palabra al TSR, y el bit TXIF se activará por primera vez.
e) Si el bit de habilitación TXIE está activado, la interrupción saca el chip del esta
do
SLEEP, y si las interrupciones globales están habilitadas, el programa saltará al ve
ctor
de interrupción 0004h.

Los pasos a seguir para programar una Transmisión Síncrona como Servidor, son:

1. Habilitar el puerto serie síncrono servidor, activando los bits SYNC y SPEN, y
borrando CSRC.
2. Borrar los bits CREN y SREN.
3. Si se desea interrupción, activar el bit de habilitación TXIE.
4. Si se desea transmisión con 9 bits, activar el bit TX9.
5. Habilitar la transmisión, activando el bit TXEN.
6. Si se ha seleccionado 9 bits, el noveno bit se cargará en TX9D.
7. La transmisión comienza cargando el dato en el registro TXREG.
10.4.2 USART EN RECEPCIÓN SÍNCRONA COMO SERVIDOR

La operación como maestro y servidor síncronos es idéntica, excepto en el caso del mod
o
SLEEP. En modo servidor, el bit SREN es indiferente.
Si está habilitada la recepción, porque se activó el bit CREN antes de la instrucción SL
EEP,
podrá recibirse una palabra aunque esté en estado SLEEP. A la completa recepción de es
ta
palabra, el registro RSR transferirá el dato en su poder al registro RCREG, y, si
el bit de
habilitación de interrupción RCIE está activado, la interrupción generada sacará al dispos
itivo
del estado SLEEP. Si las interrupciones globales están habilitadas, el programa sa
ltará al vector
de interrupción 0004h.
Los pasos a seguir para programar una Recepción Síncrona como Servidor, son:
1. Habilitar el puerto serie síncrono servidor, activando los bits SYNC y SPEN, y
borrando CSRC.
2. Si se desea interrupción, activar el bit de habilitación RCIE.
3. Si se desea recepción con 9 bits, activar el bit RX9.
4. Habilitar la recepción, activando el bit CREN.
5. El indicador RCIF se activará cuando se complete una recepción. Se generará una
interrupción, si el bit RCIE se activó en su momento.
6. Leer el registro RCSTA para obtener el noveno bit (si se programó 9 bits) y det
erminar
si ha habido error durante la recepción.
7. Leer los 8 bits de datos, efectuando la lectura del registro RCREG.
8. Si hubiese algún error, borrar éste escribiendo 0 en CREN.

TABLA 10-10: REGISTROS ASOCIADOS AL SERVIDOR EN TRANSMISIÓN SÍNCRONA


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros resets

OCh
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 000x
0000 000x
19h
TXREG
Registro Transmisor USART
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en recepción asíncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; s
iempre han de mantenerse a cero.
11.0 MÓDULO CONVERTIDOR ANALÓGICO-DIGITAL (CAD)
El módulo CAD posee cinco entradas para dispositivos de 28 patillas, y ocho para e
l resto de
dispositivos.
La entrada analógica carga un condensador de muestreo y retención. La salida de este
circuito
de muestreo y retención es la entrada al convertidor. Éste, genera un resultado bina
rio, función
del nivel analógico presente en la entrada, por medio de un CAD tipo aproximacione
s sucesivas.
La conversión digital es un número de 10 bits. El módulo CAD posee entrada de referenc
ia de
tensión baja y alta, que el software seleccionará en combinación con VDD, VSS, RA2 o R
A3.
El CAD posee una característica única: está hábil para operar, incluso en el modo SLEEP.
Para
trabajar en sleep, el reloj del CAD debe derivarse hacia el oscilador RC interno
, expresamente
diseñado para él.
El módulo CAD posee cuatro registros, que son:
TABLA 10-11: REGISTROS ASOCIADOS AL SERVIDOR EN RECEPCIÓN SÍNCRONA
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras
POR, BOR
Valor tras
otros resets
OCh
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
18h
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 000x
0000 000x
1Ah
RCREG
Registro Receptor USART
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
98h
TXSTA
CSRC
TX9
TXEN
SYNC
---
BRGH
TRMT
TX9D
0000 -010
0000 -010
99h
SPBRG
Registro Generador de Baudios
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en recepción asíncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; s
iempre han de mantenerse a cero.

.
Registro Alto del Resultado A/D (ADRESH).
.
Registro Bajo del Resultado A/D (ADRESL).
.
Registro 0 de Control A/D (ADCON0).
.
Registro 1 de Control A/D (ADCON1).

El registro ADCON0, mostrado el REGISTER 11-1, controla la operación del módulo A/D.
El
registro ADCON1, mostrado en REGISTER 11-2, configura la función de las patillas d
e los
puertos. Éstas, pueden configurarse como entradas analógicas (RA3 también puede ser la
tensión de referencia) o como entradas-salidas digitales.
REGISTRO 11-1: REGISTRO ADCON0 (DIRECCIÓN 1Fh)

R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
U-0
R/W-0

ADCS1
ADCS0
CHS2
CHS1
CHS0
GO/-DONE
---
ADON

R = De lectura
W = De escritura
U = Sin implementar. Da 0 en lectura
-n = Valor del reset POR

bit7

bit0
Los registros ADRESH:ADRESL contienen los 10 bits del resultado de la conversión A
/D.
Cuando ésta se completa, el resultado binario se carga en esta pareja de registros
del resultado,
el bit (ADCON0<2>) se borra, y el bit indicador de interrupción ADIF se activa.
El diagrama de bloques del módulo A/D se muestra en la Figura 11-1.
DONEGO/
REGISTRO 11-2: REGISTRO ADCON1 (DIRECCIÓN 9Fh)

R/W-0
U-0
U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
ADFM
---
---
---
PCFG3
PCFG2
PCFG1
PCFG0

R = De lectura
W = De escritura
U = Sin implementar. Da 0 en lectura
-n = Valor del reset POR

bit7

bit0
bit 7:
ADFM: Bit de selección de formato de resultado A/D.

1 = Justificación derecha. Los 6 bits más significativos de ADRESH se leen como 0.


0 = Justificación izquierda. Los 6 bits menos significativos de ADRESL se leen com
o 0.

bit 6-4:
Sin implementar: Se lee como 0.

bit 3-0:
PCFG3:PCFG0: Bits de control de configuración de puerto A/D.

Esta en la tabla inferior

PCFG3:
PCFG0
AN7(1)
RE2
AN6(1)
RE1
AN5(1)
RE0
AN4
RA5
AN3
RA3
AN2
RA2
AN1
RA1
AN0
RA0
VREF+
VREF-
CHAN /
Rets(2)

0000
A
A
A
A
A
A
A
A
VDD
VSS
8/0
0001
A
A
A
A
VREF+
A
A
A
RA3
VSS
7/1
0010
D
D
D
A
A
A
A
A
VDD
VSS
5/0
0011
D
D
D
A
VREF+
A
A
A
RA3
VSS
4/1
0100
D
D
D
D
A
D
A
A
VDD
VSS
3/0
0101
D
D
D
D
VREF+
D
A
A
RA3
VSS
2/1
011x
D
D
D
D
D
D
D
D
VDD
VSS
0/0
1000
A
A
A
A
VREF+
VREF-
A
A
RA3
RA2
6/2
1001
D
D
A
A
A
A
A
A
VDD
VSS
6/0
1010
D
D
A
A
VREF+
A
A
A
RA3
VSS
5/1
1011
D
D
A
A
VREF+
VREF-
A
A
RA3
RA2
4/2
1100
D
D
D
A
VREF+
VREF-
A
A
RA3
RA2
3/2
1101
D
D
D
D
VREF+
VREF-
A
A
RA3
RA2
2/2
1110
D
D
D
D
D
D
D
A
VDD
VSS
1/0
1111
D
D
D
D
VREF+
VREF-
D
D
RA3
RA2
1/2
A = Entrada analógica.
D = Entrada-salida digital.
Nota 1: Estos canales no están disponibles en los dispositivos de 28 patillas.
Nota 2: Esta columna indica el número de canales analógicos disponibles como entrada
s A/D, y el número de
canales analógicos utilizados como entradas de referencia de tensión.

Después de configurar el módulo A/D como se desea, el canal seleccionado será leído ante
s de
iniciar la conversión. El canal analógico de entrada debe tener su correspondiente b
it del
registro TRIS programado como entrada. Pasado el tiempo de adquisición, la convers
ión A/D
puede iniciarse. Los pasos siguientes deberán respetarse para realizar una convers
ión A/D:
1. Configuración del módulo A/D:
. Configurar las patillas analógicas, tensión de referencia y E/S digital
(ADCON1).
. Seleccionar el canal de entrada analógico (ADCON0).
. Seleccionar el reloj de conversión A/D (ADCON0).
. Conectar el módulo A/D (ADCON0).

2. Configurar la interrupción A/D, si se desea:


. Borrar el bit ADIF.
. Activar el bit ADIE.
. Activar el bit GIE.

3. Espera del tiempo necesario para la adquisición del valor analógico en la entrada
.
4. Arranca la conversión:
. Activar el bit (ADCON0).

5. Esperar a la finalización de la conversión A/D:


. O bien leyendo el bit
. O bien esperando la interrupción A/D.

6. Leer la pareja de registros del resultado (ADRESH:ADRESL), y borrar el bit AD


IF.
7. Para la próxima conversión, id al paso 1 o 2, según necesidades. El tiempo de
conversión A/D por bit está definido como TAD. Se necesita un mínimo de 2 TAD antes
de iniciar la próxima adquisición.

11.1 Requisitos para la adquisición A/D


Para que el convertidor A/D posea una precisión determinada, la carga del condensa
dor de
adquisición (CHOLD) debe completarse para el nivel analógico presente en el canal de
entrada
seleccionado. El modelo de la entrada analógica se muestra en la Figura 11-2. La i
mpedancia de
la fuente (RS) y la impedancia del conmutador de captura interno (RSS) afectan d
irectamente al
tiempo necesitado para cargar el condensador CHOLD. La impedancia del conmutador
de captura
varía según la tensión del dispositivo (VDD) (ver Figura 11-2). La impedancia máxima
recomendada para la fuente analógica es de 10K.
. Cuando la impedancia decrece, el tiempo
de adquisición también decrece. Después de la selección del canal analógico de entrada, es
te
tiempo de adquisición debe tenerse en cuenta antes de arrancar la conversión. Para c
alcular el
tiempo mínimo de adquisición, puede utilizarse la ecuación 11-1. Ésta, asume que existe
un
error de ½ LSB (1024 combinaciones para el A/D). El error de ½ LSB es el máximo error
permitido por el módulo A/D, según las especificaciones técnicas.

TACQ = Tiempo activación amplificador + Tiempo carga CHOLD + Coeficiente de temper


atura =
= TAMP + TC + TCOFF =
= 2.
s + TC + [(Temperatura 25ºC) (0,05.
s/ºC)]
TC = CHOLD (RIC + RSS + RS) ln (1 /2047) =
= 120pF (1K.
+ 7 K.
+ 10 K.
) ln 0,0004885) =
= 16,47.
s.
TACQ = 2.
s + 16,47.
s + [(50ºC 25 C) 0,005.
s/ºC] =
= 19,72.
s.
Nota 1: La tensión de referencia no afecta a la ecuación.
Nota 2: El condensador CHOLD no se descarga después de cada conversión.
Nota 3: La impedancia máxima recomendada para la fuentes analógicas es de 10K.
. Esto es
necesario para cumplir las especificaciones.
Nota 4: Después de completar la conversión, se debe esperar un tiempo de 2 TAD antes d
e
iniciar otra. Durante este tiempo, el condensador CHOLD no se conecta al canal d
e
entrada analógico seleccionado.
11.2 Selección del reloj de Conversión A/D
El tiempo por bit de la conversión A/D se define como TAD. La conversión A/D necesit
a un
mínimo de 12TAD por 10 bits de conversión. La fuente del reloj de conversión A/D se se
lecciona
por software. Cuatro opciones son posibles para TAD:
.
2Tosc
.
8Tosc
.
32Tosc
.
Oscilador RC interno

Para una correcta conversión A/D, el reloj debe seleccionarse para asegurar un tie
mpo mínimo
de 1,6.
s.
La Tabla 11-1 muestra los tiempos resultantes TAD, derivados de la frecuencia de
trabajo del
dispositivo y de la fuente de reloj seleccionada.

Tabla 11-1: TAD para máximas frecuencias de trabajo del dispositivo [dispositivos
estándar (c)]

Frecuencia máxima del dispositivo


Operación
ADCS1:ADCS0
Máx.

2Tosc
00
1,25 Mhz
8Tosc
01
5 Mhz
32Tosc
10
20 Mhz
RC(1,2,3)
11
Nota 1
Nota 1: La fuente RS tiene un tiempo típico de 4.
s, pero puede variar entre 2 y 6..
s.
Nota 2: Cuando las frecuencias del dispositivo son mayores que 1Mhz, la fuente d
e reloj RC se
recomienda solamente para la operación en modo SLEEP.
Nota 3: Para dispositivos de amplio margen de tensión (LC), mirar la sección de Espe
cificaciones
Eléctricas.

11.3 Configuración de patillas del puerto analógico

Los registros ADDCON1 y TRIS controlan la operación de las patillas de puerto A/D.
Las
patillas que se vayan a emplear como entradas analógicas, deben activarse como ent
radas, en los
bits correspondientes del registro TRIS. Si estos bits están a 0, las patillas act
uarán como
salidas, y los niveles de salida lógicos (VOH o VOL) serán convertidos a código binari
o.
La operación A/D es independiente del estado de los bits CHS2:CHS0 y de los bits T
RIS.
Nota 1: Al leer el registro del puerto, cualquier patilla configurada como canal
de entrada
analógico se leerá como 0. Las patillas configuradas como entradas digitales convert
irán en
binario sus valores de tensión lógica. Los niveles analógicos de las patillas configur
adas como
entradas digitales, no afectarán a la precisión de la conversión.
Nota 2: Los niveles analógicos en cualquier patilla definida como entrada digital,
puede hacer
que el buffer de entrada consuma más corriente de la especificada en las característ
icas del
dispositivo.

11.4 Conversiones A/D


Borrando el bit durante una conversión, se cancelará ésta. El resultado del registro
del resultado no se actualizará con una conversión parcial; esto es: ADRESH:ADRESL
contendrán el valor convertido de la última operación válida que se completó. Después de la
cancelación de la conversión, se necesita esperar un tiempo de 2TAD antes de iniciar
la siguiente
conversión. Después de esta espera, la conversión del canal seleccionado arrancará
automáticamente. En la Figura 11-3, después de activar el bit GO, el primer segmento
de tiempo
posee un mínimo de TCY y un máximo de TAD.
Nota: el bit no se activará en la misma instrucción que la activación de A/D.

11.4.1 REGISTRO DE RESULTADO A/D

La pareja de registros ADRESH:ADRESL es el lugar donde se carga el resultado de


la
conversión completa A/D de 10 bits. Este registro par tiene una capacidad de 16 bi
ts. El módulo
A/D ofrece la posibilidad de alinear a la derecha o izquierda el resultado de 10
bits, en un
registro de 16 bits. El bit de selección de formato A/D (ADFM) controla esta aline
ación. La
Figura 11-4 muestra la operación de alineación del resultado de la conversión A/D. Los
bits
sobrantes se cargan con 0. Cuando el resultado A/D no escriba en estas posicione
s (inhibición
del módulo A/D), estos registros pueden utilizarse como dos registros de uso gener
al de 8 bits
cada uno.
11.5 Operación A/D durante el estado SLEEP
El módulo A/D puede trabajar cuando el sistema se encuentra en modo SLEEP. Esto pr
ecisa
que la fuente de reloj de A/D debe ser la RC interna (ADCS1:ADCS0 = 11). Cuando
se
selecciona la fuente de reloj RC interna, el módulo A/D espera un ciclo de instruc
ción antes de
iniciar la conversión. Esto permitirá la ejecución de la instrucción SLEEP, que elimina
todo el
ruido de conmutación digital para la conversión. Cuando ésta se complete, el bit
se borrará, y el resultado se cargará en el registro de resultado. Si está habilitada
la interrupción
A/D, el dispositivo abandonará el estado SLEEP; si la interrupción A/D estuviese inh
ibida, el
módulo A/D se desconectará, aunque el bit ADON permanece activado.
Cuando la fuente de reloj A/D es otra opción (no la RC interna), la instrucción SLEE
P provoca
que la conversión presente se cancele y el módulo A/D se desconecte, a pesar de que
el bit
ADON permanezca activado.
Desconectando el módulo A/D conseguimos poner al dispositivo en el estado de menor
consumo.
Nota: Para que el módulo A/D opere en estado SLEEP, la fuente de reloj del A/D deb
e ser la
RC interna (ADCS1:ADCS0 = 11). Para conseguir que la conversión suceda durante SLE
EP,
hay que asegurar que la instrucción SLEEP siga, inmediatamente, a la instrucción que
activa el
bit GO/-DONE.
11.6 Efecto de un Reset
Un reset en el dispositivo, fuerza a todos los registros a su estado de reset. E
sto hará que el
módulo A/D se desconecte y se cancele cualquier conversión.
El valor de los registros ADRESH:ADRESL no se altera con un reset tipo MCLR o WDT
, y
contendrán datos desconocidos después de un POR o BOR.

11.0 CARACTERÍSTICAS ESPECIALES DE LA CPU

TABLA 11-2: REGISTROS/BITS ASOCIADOS CON A/D


Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
POR,
BOR
-MCLR,
WDT
OBh
INTCON
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
0000 000u
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
0000 0000
0000 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
1Eh
ADRESH
Registro de resultado para byte alto.
xxxx xxxx
uuuu uuuu
9Eh
ADRESL
Registro de resultado para byte bajo.
-----
-----
1Fh
ADCON0
ADCS1
ADCS0
CHS2
CHS1
CHS0
GO/-
DONE
---
ADON
0000 00-0
0000 00-0
9Fh
ADCON1
ADFM
---
---
---
PCFG3
PCFG2
PCFG1
PCFG0
--0- 0000
--0- 0000
85h
TRISA
---
---
Registro de dirección del puerto A
--11 1111
--11 1111
05h
PORTA
---
---
Latch de datos de PORTA en escritura; patillas de PORTA al
leer.
--0x 0000
--0u 0000
89h
TRISE
IBF
OBF
IBOV
PSPMODE
---
Bits de dirección de PORTE
0000 -111
0000 111
09h
PORTE
---
---
---
---
---
RE2
RE1
RE0
---- -xxx
---- -uuu
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se u
tilizan en conversión A/D.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas.

Estos dispositivos poseen un conjunto de características proyectadas, para aumenta


r al máximo
las posibilidades del sistema, minimizar costos eliminando componentes externos,
y
proporcionar potencia ahorrando modos de operación y ofreciendo códigos de protección.
Estas
características son:
.
Selección de oscilador.
.
Reset:
- De conexión (POR).
- Retardo a la conexión (PWRT).
- Retardo de arranque de oscilación (OST).
- Bajada de alimentación (BOR).
.
Interrupciones.
.
Temporizador supervisor (WDT).
.
SLEEP.
.
Código de protección.
.
Posiciones ID.
.
Circuito de entrada para programación serie.
.
Circuito de entrada de baja tensión para programación serie.
.
Circuito de entrada depurador.

Estos circuitos poseen un supervisor, que puede anularse, solamente, a través de l


os bits de
configuración. En desconexión, posee su propio oscilador RC para aumentar las posibi
lidades.
Existen dos temporizadores, que ofrecen los retardos necesarios a la conexión: uno
es el
temporizador de inicio de oscilación (OST), diseñado para mantener el dispositivo en
reset hasta
la estabilización de la oscilación del cristal; el otro es el temporizador de conexión
(PWRT), que
proporciona un retraso fijo de 72 ms desde la conexión. Está diseñado para mantener un
a parte
en reset mientras se estabiliza la alimentación. Con estos dos temporizadores en e
l chip, muchas
aplicaciones no necesitan circuitería externa de reset.
El modo SLEEP se ha diseñado para ofrecer una forma de operación de muy bajo consumo
. El
usuario, puede sacar del modo SLEEP al dispositivo, a través de un reset externo,
final de
temporización del supervisor, o a través de una interrupción. Varias opciones de oscil
ación
están también disponibles para permitir aplicaciones a medida. La opción de oscilación R
C
ahorra costos al sistema, mientras que la opción de cristal LP ahorra consumo. Un
conjunto de
bits de configuración se usan para seleccionar estas opciones.
12.1 Bits de configuración

Los bits de configuración, pueden programarse (se leen como 0) o dejarse sin progr
amar (leídos
como 1), para seleccionar varias configuraciones de dispositivos. Estos bits se
guardan en la
posición 2007h de memoria de programa.
El usuario notará que la dirección 2007h está fuera del espacio de la memoria de progr
ama. En
fábrica, se crea una zona especial de memoria (2000h 3FFFh), reservada a configura
ción y
pruebas, que solamente es accesible en el momento de la programación del dispositi
vo.
REGISTRO 12-1: PALABRA DE CONFIGURACIÓN (DIRECCIÓN 2007h)

CP1
CP0
DEBUG
---
WRT
CPD
LVP
BODEN
CP1
CP0
_______
PWRTE
WDTE
FOSC1
FOSC0

bit13

bit0

bits 13-12:
bits 5-4:
CP1:CP0: Bits de protección del código de memoria de Programa FLASH(2)
11 = Sin código de protección.
10 = 1F00h a 1FFFh zona protegida para PIC16F876 y 877
10 = 0F00h a 0FFFh zona protegida para PIC16F873 y 874
01 = 1000h a 1FFFh zona protegida para PIC16F876 y 877
01 = 0800h a 0FFFh zona protegida para PIC16F873 y 874
00 = 0000h a 1FFFh zona protegida para PIC16F876 y 877

bit 11:
DEBUG: Modo de depuración en dispositivo.
1 = Inhibido el depurador. RB6 y RB7 son patillas de uso general de puerto E/S.
0 = Habilitado el depurador. RB6 y RBy se dedican a depuración.

bit 10:
Sin implementar: Se lee como 0.

bit 9:
WRT: Bit de habilitación de escritura en la Memoria Flash de Programa
1 = La memoria de programa sin proteger se puede escribir mediante el control de
EECON.
0 = La memoria de programa sin proteger no se puede escribir mediante el control
de EECON.

bit 8:
CPD: Protección de códigos de la memoria de datos
1 = Sin protección.
0 = Los códigos de la memoria de datos están sin protección.
bit 7:
LVP: Bit de habilitación de Bajo Voltaje en circuito para Programación serie.
1 = La patilla RB3/PGM tiene la función PGM, que habilita la baja tensión de program
ación.
0 = La patilla RB3 es un canal digital de E/S de puerto. HV, en MCLR, puede usars
e para
programación.

bit 6:
BODEN: Bit de habilitación de Reset Brown.Out (BOR = descenso de tensión)(1)
1 = Habilitado BOR
0 = Inhibido BOR.

bit 3:
-PWRTE: Bit de habilitación de retardo a la conexión (PWRT)(1)
1 = Inhibido el PWRT.
0 = Habilitado el PWRT.

bit 2:
WDTE: Bit de habilitación de Supervisor (Watchdog).
1 = Habilitado WDT (Watchdog).
0 = Inhibido el WDT.

bit 1:0:
FOSC1:FOSC0: Bits de selección del Oscilador.
11 = Oscilador RC.
10 = Oscilador HS.
01 = Oscilador XT.
00 = Oscilador LP.
Nota 1:
Habilitando BOR, automáticamente se habilita PWRT, independientemente del valor de
l bit PWRTE.
Hay que asegurarse que PWRT está habilitado junto con BOR.

Nota 2:
Las patillas CP1:CP0 deben tener el valor ofrecido en la lista, para habilitar e
l código de protección.
12.2 Configuraciones del oscilador

12.2.1 Tipos de osciladores

Este dispositivo puede trabajar en cuatro diferentes modos de oscilación. El usuar


io puede
programar dos bits (Fosc1 y Fosc0) para seleccionar uno de estos cuatro modos:
.
LP Cristal, con bajo consumo.
.
XT Cristal-Resonador cerámico.
.
HS Cristal-Resonador, en alta velocidad.
.
RC Resistor-Condensador.

12.2.2 OSCILADOR DE CRISTAL O RESONADOR CERÁMICO

En los modos XT, LP o HS, un cristal de cuarzo, o un resonador cerámico, se conect


an a las
patillas OSC1/CLKIN y OSC2/CLKOUT para establecer la necesitada oscilación (Figura
12-1).
El oscilador diseñado en el PIC16F87X necesita el uso de un cristal de corte paral
elo. Si se usa
un cristal de corte serie, puede oscilar a una frecuencia fuera de las especific
aciones del

fabricante del cristal. En los modos XT, LP y


HS, el dispositivo puede alimentarse de una
fuente externa de reloj, conectada a la patilla
OSC1 (Figura 12-2).
TABLA 12-1: RESONADORES CERÁMICOS
Rangos Probados
Modo
Frec.
OSC1
OSC2

XT
455 KHz
2,0 MHz
4,0 MHz
68 100 pF
15 68 pF
15 68 pF
68 100 pF
15 68 pF
15 68 pF
HS
8,0 HMS
16,0 MHz
10 68 pF
10 22 pF
10 68 pF
10 22 pF
Estos valores son solamente, como guía para diseño
Resonadores utilizados
455 KHz
Panasonic EFQ-A455K04B
+/- 0,3%
2,0 MHz
Murata Erie CSA2.00MG
+/- 0,5%
4,0 MHz
Murata Erie CSA4.00MG
+/- 0,5%
8,0 MHz
Murata Erie CSA8.00MT
+/- 0,5%
16,0 MHz
Murata Erie CSA16.00MX
+/- 0,5%
Todos los resonadores utilizados no llevan, integrados,
los condensadores de oscilación

12.2.3 OSCILADOR RC

Para aplicaciones en las que el tiempo


no requiera precisión, el oscilador RC
ofrece la opción más económica. La
frecuencia del oscilador RC es
función, del voltaje de alimentación,
de los valores de resistencia (REXT) y
capacidad (CEXT), y de la temperatura
de trabajo. Además de esto, la
frecuencia del oscilador ira variando
conforme lo hagan los parámetros
normales. Además, las diferencias de
capacidad de las patillas del
condensador, según el tipo de
encapsulado, afectarán a la frecuencia
del oscilador, especialmente para
valores pequeños de capacidad CEXT. El usuario también necesita tener en cuenta la v
ariación
debido a la tolerancia de los componentes externos usados R y C. En la Figura 12
-3 se muestra
cómo está conectada al PIC16F87X la combinación R/C.
Nota1: Capacidades mayores incrementan la estabilidad del oscilador pero también i
ncrementan
el tiempo de arranque.
Nota 2: Como cada cristal-resonador posee sus propias características, el usuario
consultará al
fabricante del elemento oscilador para conseguir los valores apropiados de compo
nentes
externos.
Nota 3: RS es necesaria, en modos HS y XT, para evitar sobreoscilaciones del cri
stal con
niveles de conducción muy bajos.
Nota 4: Cuando se cambie a otros dispositivos PIC, las características de oscilación
se
revisarán.

TABLA 12-2: SELECCIÓN DE CONDENSADORES PARA


OSCILADOR DE CRISTAL
Tipo de Osc.
Frec. Cristal
C1
C2

LP
32 KHz
33 pF
33 pF
200 KHz
15 pF
15 pF
XT
200 KHZ
47-68pF
47-68pF
1 MHz
15 pF
15 pF
4 MHz
15 pF
15 pF
HS
4 MHz
15 pF
15 pF
8 MHz
15-33pF
15-33pF
20 MHz
15-33pF
15-33pF
Estos valores son orientativos para el diseño
Obsérvense las notas de arriba.
Cristales usados
32 Khz
Epson C-001R32.768K-A
+/- 20 PPM
200 Khz
STD XTL 200.000KHz
+/- 20 PPM
1 Mhz
ECS ECS-10-13-1
+/- 50 PPM
4 Mhz
ECS ECS-40-20-1
+/- 50 PPM
8 Mhz
EPSON CA-301 8.000M-C
+/- 30 PPM
20 Mhz
EPSON CA-301 20.000M-C
+/- 30 PPM

12-3 Reset
Los PIC16F87X poseen varios tipos de reset:
.
Reset a la conexión (POR).
.
Reset durante el trabajo normal.
.
Reset durante el modo SLEEP.
.
Reset WDT durante el trabajo normal.
.
Reset WDT para salir del modo SLEEP (wake-up).
.
Reset por bajada de tensión (BOR).
Algunos registros no son afectados por ninguno de estos reset. Su estado es desc
onocido con
POR, y sin cambio con cualquier otro reset. Pero otros muchos registros se borra
n con el reset
tipo POR, , WDT, durante el modo SLEEP y BOR. Los bit TO y PD se
activan o borran, dependiendo de la situación de reset encontrada, como se muestra
en la Tabla
12-4. Estos bits se usan en software para determinar la naturaleza del reset. Ve
r tabla 12-6 para
una completa descripción de los estados de reset para todos los registros.
En la figura 12-4 se muestra un esquema a bloques simplificado de la circuitería d
e reset que
contiene el dispositivo. Éste, posee un filtro de ruido en la entrada de que detec
tará e
ignorará los pulsos muy cortos.
Hay que resaltar que el reset WDT no pone a cero a la patilla .
12.4 Reset de conexión (POR)
Se genera un impulso POR cada vez que se detecta la subida de VDD entre 1,2V y 1
,7V. Para
conceder prioridad a POR, conectar directamente, o a través de un resistor, al niv
el
VDD. Esto eliminará componentes externos RC, normalmente necesitados para crear un
reset de
conexión. El máximo tiempo de subida se detalla en el apartado de Especificaciones E
léctricas.
Cuando el dispositivo arranca en operación normal (sale de la condición de reset), l
os
parámetros de trabajo del chip (tensión, frecuencia, temperatura,...) deben ser esta
bles para
asegurar la operación. Si estas condiciones no están aseguradas, el dispositivo debe
mantenerse
en reset hasta la correcta estabilidad de las condiciones de trabajo. BOR puede
utilizarse para
conseguir las condiciones de arranque.
12.5 Temporizador de conexión (PWRT)

EL PWRT proporciona un retardo de 72 ms para la conexión. El PWRT opera con una re


d RC
interna de oscilación. El chip se mantiene en reset tanto tiempo como dura la acti
vación de
PWRT. Este retardo permite a VDD subir hasta el nivel aceptable de trabajo. Exis
te un bit de
configuración para habilitar o inhibir el PWRT. El tiempo de retardo de PWRT varia
rá de uno a
otro chip debido a tolerancias entre ellos.
12.6 Temporizador de inicio de oscilación (OST)
Este temporizador proporciona un retardo de 1024 ciclos de oscilación (desde la en
trada OSC1)
desde que el retardo de PWRT terminó. Esto asegura que el oscilador de cristal o r
esonador ha
arrancado y está estabilizado. La Temporización de OST se aplica solamente a los mod
os XT,
LP y HS, en reset POR o abandono de SLEEP.

12.7 Reset por caída de tensión (Brown-Out_Reset)(BOR)

El bit BODEN, de configuración, puede habilitar o inhibir el circuito de BOR. Si V


DD desciende
por debajo de VBOR (alrededor de 4V), por un tiempo mayor de 100.
s (TBOR), la situación
Brown-Out inicializará al dispositivo. Si VDD baja más de VBOR, pero la duración de la
bajada es
menor de TBOR, no sucede reset alguno.
Mientras que sucede el BOR, el dispositivo permanecerá en reset BOR hasta que VDD
suba por
encima de VBOR. El temporizador de conexión mantendrá en reset al dispositivo, un ti
empo
TPWRT (72 ms, aproximadamente). Si VDD bajase de VBOR durante la Temporización TPW
RT, el
proceso de BOR se iniciará cuando VDD suba por encima de VBOR, con el temporizador
de
conexión en reset. Este temporizador siempre está habilitado cuando se habilita el c
ircuito BOR,
independientemente del estado del bit de configuración de PWRT.

12.8 Secuencia de finalización de Temporización

En la conexión, la secuencia de temporización es así: el retardo de PWRT arranca (si e


stá
habilitado) cuando ocurra el reset POR. Arranca OST, contando 1024 ciclos de rel
oj desde que
finalizó PWRT (modos LP, XT o HS). Cuando termine OST, se abandona el estado de re
set.
Si mantiene un 0 suficientemente largo, la temporización terminará. Devolviendo el
nivel alto a , iniciará la ejecución inmediatamente. Esto se usa para el chequeo, o
para
sincronizar varios dispositivos PIC que trabajan en paralelo.
La Tabla 12-5 muestra las condiciones de reset para los registros STATUS, PCON y
PC,
mientras que la Tabla 12-6 muestra las condiciones de reset para todos los regis
tros.

12.9 Registro PCON (Control de conexión/Registro de estado)

El registro PCON posee dos bits, bit0 y bit1, dependiendo del dispositivo. Bit0
es el bit del
estado de BOR. El bit no se reconoce en el reset POR. Debe activarse por el usua
rio, y
chequearse en subsiguientes resets para ver si está borrado, indicando con ello la
existencia de
BOR. EL bit es indiferente, y no es necesariamente previsible si el circuito de
BOR está
inhibido (por el borrado del bit de configuración BODEN). El bit1 corresponde a .
Se
borra con el reset POR, y queda sin efecto en otros casos. El usuario debe activ
ar este bit
después del POR.
BOR
POR
TABLA 12-3: TEMPORIZACIÓN EN VARIAS SITUACIONES
Configuración
del oscilador
Conexión
Brown-out
Salida de SLEEP
-PWRTE = 0
-PWRTE = 1

XT, HS, LP
72ms + 1024Tosc
1024Tosc
72ms + 1024Tosc
1024Tosc
RC
72 ms
---
72 ms
---

TABLA 12-4: BITS DE ESTADO Y SU SIGNIFICADO


POR
BOR
TO
PD
0
X
1
1
Reset de conexión (Power-On-Reset).
0
X
0
X
Código ilegal, TO se activa con POR.
0
X
X
0
Código ilegal, PD se activa con POR.
1
0
1
1
Reset de caída de tensión (Brown-Out-Reset).
1
1
0
1
Reset de supervisor (Watch-Dog-Timer).
1
1
0
0
Abandono de WDT.
1
1
u
u
-MCLR durante operación normal.
1
1
1
u
Reset MCLR durante SLEEP, o interrupción de abandono de SLEEP.

TABLA 12-5: CONDICIÓN DE RESET PARA REGISTROS ESPECIALES


Condición
Contador de
Programa
Registro de
Estado
Registro PCON

Reset POR
000h
0001 1xxx
---- --0x
Reset MCLR durante operación normal
000h
000u uuuu
---- --uu
Reset MCLR durante SLEEP
000h
0001 0uuu
---- --uu
Reset WDT
000h
0000 1uuu
---- --uu
Abandono WDT
PC + 1
uuu0 0uuu
---- --uu
Reset BOR
000h
0001 1uuu
---- --u0
Abandono de SLEEP por interrupción
PC + 1(1)
uuu10uuu
---- --uu
u = sin cambio; x = desconocido; --- = sin implementar (se lee como 0).
Nota 1: Cuando el abandono de SLEEP se debe a una interrupción, y GIE está activada,
el PC se carga con el vector de interrupción 0004h.
TABLA 12-6: CONDICONES DE INICIALIZACIÓN PARA TODOS LOS REGISTROS
Registros
Dispositivos
Reset POR,
Reset BOR
Reset MCLR,
Reset WDT
Abandono SLEEP por
WDT o Interrupción

W
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
INDF
873
874
876
877
N/A
N/A
N/A
TMR0
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
PCL
873
874
876
877
0000h
0000h
PC + 1(2)
STATUS
873
874
876
877
0001 1xxx
000q quuu(3)
uuuq quuu(3)
FSR
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
PORTA
873
874
876
877
--0x 000
--0u 000
--uu uuuu
PORTB
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
PORTC
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
PORTD
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
PORTE
873
874
876
877
---- -xxx
---- -uuu
---- -uuu
PCLATH
873
874
876
877
---0 0000
---0 0000
---u uuuu
INTCON
873
874
876
877
0000 000x
0000 000u
uuuu uuuu(1)
PIR1
873
874
876
877
r000 0000
r000 0000
ruuu uuuu(1)
873
874
876
877
0000 0000
0000 0000
uuuu uuuu(1)
PIR2
873
874
876
877
-r-0 0--0
-r-0 0--0
-r-u u u(1)
TMR1L
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
TMR1H
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
T1CON
873
874
876
877
--00 0000
--uu uuuu
--uu uuuu
TMR2
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
T2CON
873
874
876
877
-000 0000
-000 0000
-uuu uuuu
SSPBUF
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
SSPCON
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
CCPR1L
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
CCPR1H
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
CCP1CON
873
874
876
877
--00 0000
--00 0000
--uu uuuu
RCSTA
873
874
876
877
0000 000x
0000 000x
uuuu uuuu
TXREG
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
RCREG
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
CCPR2L
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
CCPR2H
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
CCP2CON
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
ADRESH
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
ADCON0
873
874
876
877
0000 00-0
0000 00-0
uuuu uu-u
OPTION_REG
873
874
876
877
1111 1111
1111 1111
uuuu uuuu
TRISA
873
874
876
877
--11 1111
--11 1111
--uu uuuu
TRISB
873
874
876
877
1111 1111
1111 1111
uuuu uuuu
TRISC
873
874
876
877
1111 1111
1111 1111
uuuu uuuu
TRISD
873
874
876
877
1111 1111
1111 1111
uuuu uuuu
TRISE
873
874
876
877
0000 -111
0000 -111
uuuu uuu
PIE1
873
874
876
877
r000 0000
r000 0000
ruuu uuuu
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
PIE2
873
874
876
877
-r-0 0--0
-r-0 0--0
-r-u u u
PCON
873
874
876
877
---- --qq
---- --uu
---- --uu
PR2
873
874
876
877
1111 1111
1111 1111
1111 1111
SSPADD
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
SSPSTAT
873
874
876
877
--00 0000
--00 0000
--uu uuuu
TXSTA
873
874
876
877
0000 -010
0000 -010
uuuu uuu
SPBRG
873
874
876
877
0000 0000
0000 0000
uuuu uuuu
ADRESL
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
ADCON1
873
874
876
877
0--- 0000
0--- 0000
u--- uuuu
EEDATA
873
874
876
877
0--- 0000
0--- 0000
u--- uuuu
EEADR
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
EEDATH
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
EEADRH
873
874
876
877
xxxx xxxx
uuuu uuuu
uuuu uuuu
EECON1
873
874
876
877
x--- x000
u--- u000
u--- uuuu
EECON2
873
874
876
877
---- ----
---- ----
---- ----
u = Sin cambio; x = Desconocido; --- = Sin implementar (se lee como 0); q = Depe
nde de la condición;
r = Reservado (mantener a 0).
Nota 1: Uno o más bits en INTCON, PIR1 y/o PIR2 serán afectados (a causa del abandon
o).
Nota 2: Cuando el abandono se debe a una interrupción, y el bit GIE está activado, e
l PC se carga
con el vector de interrupción 0004h.
Nota 3: Ver Tabla 12-5 para valores de reset de condiciones específicas.
12.10 Interrupciones
La familia PIC16F87X tiene más de 14 fuentes de interrupción. El registro de control
de
interrupciones (INTCON) posee, los bits de petición de interrupción de forma individ
ual, los
bits de habilitación individual, y el bit de habilitación global (de todo el conjunt
o).

Nota: Los bits de habilitación individual pueden activarse, independientemente del


estado de
sus correspondientes bits de máscara, o del bit GIE (habilitación global).
El bit de habilitación global GIE (INTCON<7>), habilita, si está programado a 1, tod
as las
interrupciones enmascarables, o inhibe, si está en 0, a todas ellas. Cuando se hab
ilita GIE, y un
bit indicador de interrupción y su máscara están a 1, la interrupción se atenderá inmediat
amente.
Las interrupciones individuales pueden inhibirse a través de sus correspondientes
bits de
habilitación, contenidos en varios registros. Los bits de interrupción individual se
activarán,
independientemente del estado del bit GIE. Este último se borra con reset.
La instrucción de retorno de interrupción, RETFIE, estará contenida en la rutina de in
terrupción,
así como la activación del bit GIE, que habilitará una nueva interrupción.
Los bits indicadores de petición de interrupción de la patilla RB0/INT, la interrupc
ión por
cambio en puerto RB y la interrupción por desbordamiento del TMR0, están contenidos
en el
registro INTCON.
Los indicadores de interrupción de periféricos están contenidos en los registros de fu
nción
especial PIR1 y PI2. Los bits correspondientes de habilitación de estas interrupci
ones están
contenidos en los registros de función especial PIE1 y PIE2, y el bit de habilitac
ión de
interrupción de periféricos, en el registro de función especial INTCON.
Cuando se responde a una interrupción, el bit GIE se borra para impedir cualquier
otra
interrupción, la dirección actual del PC (la de retorno) se mete en la pila, y el PC
se carga con la
dirección 0004h. Ésta es la dirección llamada vector de interrupción. Cada vez que se de
sarrolla
la rutina de interrupción, la fuente de interrupción se determina consultando el bit
de petición de
interrupción. Este bit debe borrarse por software antes de volver a habilitar las
interrupciones,
para impedir atenciones recurrentes de la misma interrupción.
Para interrupción por acontecimientos externos, como la patilla de interrupción INT
o
interrupción por cambio de estado en PORTB, el retraso en captar la interrupción es
de tres o
cuatro ciclos de instrucción. El retraso exacto depende de cuándo ocurra la interrup
ción. El
retraso es el mismo para instrucciones de uno o dos ciclos. Los bits señalizadores
de
interrupción individual se activan, independientemente del estado de su correspond
iente bit de
máscara o del bit GIE.

12.10.1 INTERRUPCIÓN INT

La interrupción externa en la patilla RB0/INT se dispara por flanco de subida, si


está activado el
bit INTEDG (OPTION_REG<6>), o de bajada, si está borrado este bit. Cuando un flanc
o válido
aparece en la patilla RB0/INT, el indicador INTF (INTCON<1>) se activa. Esta int
errupción
puede inhibirse borrando el bit INTE (INTCON<4>). El bit indicador debe borrarse
por
software en la rutina de servicio de interrupción antes de volver a habilitar las
interrupciones. La
interrupción INT puede sacar al procesador del SLEEP, si el bit INTE fue activado
antes de
entrar en el estado SLEEP. El estado del bit GIE decide si el procesador salta o
no al vector de
interrupción siguiente al abandono de SLEEP. En la sección 12.13 se ofrecen los deta
lles del
modo SLEEP.

12.10.2 INTERRUPCIÓN TMR0

Un desbordamiento (paso de FFh a 00h) en el registro TMR0 activará el bit indicado


r T0IF
(INTCON<2>). La interrupción puede habilitarse o inhibirse activando o borrando,
respectivamente, el bit de habilitación T0IE (INTCON<5>).
12.10.3 INTERRUPCIÓN POR CAMBIO EN PORTB

Un cambio de estado lógico en la entrada del PORTB<7:4> activa el indicador RBIF


(INTCON<0>). La interrupción puede habilitarse o inhibirse activando o borrando,
respectivamente, el bit RBIE del registro INTCON<4>. Ver Sección 3.2.

12.11 Salvando valores durante las interrupciones

Durante una interrupción, solamente se salva en pila, de forma automática, el PC. No


rmalmente,
el usuario deseará salvar algún registro durante una interrupción (por ejemplo el regi
stro
STATUS); esto deberá implementarlo en el programa con las instrucciones adecuadas.
Para los dispositivos PIC16F873/874, el registro W_TEMP estará definido en el conj
unto de
bancos 0 y 1, y será definido en la misma dirección relativa para ambos bancos (por
ejemplo: si
W_TEMP se define en la dirección 020h en el banco 0, en el banco 1 su dirección será 0
A0h
(080h + 020h). Los registros PCLATH_TEMP y STATUS_TEMP están definidos solamente e
n
el banco 0.
Puesto que los 16 bits más altos de cada banco son comunes en los dispositivos PIC
16F876/877,
los registros temporales W_TEMP, STATUS_TEMP y PCLATH_TEMP estarán situados aquí.
Estas 16 posiciones no necesitan dividirse en bancos y, por consiguiente, se hac
e más fácil para
el programa la guarda y restauración. En el Ejemplo 12-1 tenemos unos códigos básicos.
EJEMPLO 12-1: GUARDANDO EN RAM LOS REGISTROS STATUS, W Y PCLATH
MOVWF W_TEMP ;Copiar W en el registro temporal TEMP.
SWAPF STATUS,W ;Conmuta STATUS con W.
CLRF STATUS ;Selecciona banco 0. Borra IRP, RP1, RP0.
MOVWF STATUS_TEMP ;Salva STATUS de banco 0 en el registro
;STATUS_TEMP.
MOVF PCLATH,W ;Solamente requerido si se usa páginas 1,2
;y/0 3.
MOVWF PCLATH_TEMP ;Salva PCLATH en PCLATH_TEMP.
CLRF PCLATH ;Página 0, independientemente de la página
;actual.
:
: (ISR)
:
MOVF PCLATH_TEMP,W ;Restaura PCLATH a través de W.
MOVWF PCLATH ; .
SWAPF STATUS_TEMP,W ;Conmuta STATUS_TEMP con W (coloca
;el valor original del banco de trabajo.
MOVWF STATUS ;Carga W al registro STATUS.
SWAPF W_TEMP,F ;Devuelve el valor original a W. Se realiza
SWAPF W_TEMP,W ;pasando por el registro F y W_TEMP.

12-12 Temporizador supervisor (WDT)

El temporizador supervisor es un oscilador RC independiente que no necesita comp


onente
externo alguno. Este oscilador RC está separado del oscilador RC de la patilla OSC
1/CLKIN.
Este recurso permite funcionar al WDT aunque el reloj de OSC1/CLKIN y OSC2/CLKOU
T
esté detenido, por ejemplo, por la ejecución de una instrucción SLEEP.

Durante la operación normal, la finalización del tiempo de WDT genera un RESET al


dispositivo (Watchdog Timer Reset). Si el micro estuviese en modo SLEEP, el desb
ordamiento
de WDT provoca el abandono de SLEEP y la continuación con la operación normal de
funcionamiento. El bit , en el registro STATUS, quedará en 0 cuando el WDT finalic
e su
cuenta.
El WDT puede inhibirse permanentemente borrando el bit de configuración WDTE (Secc
ión
12.1).
El período del WDT, que puede encontrarse en las Especificaciones Eléctricas, tiene
un valor
típico de 18 ms. y un mínimo de 7 ms. Los valores para el Predivisor de WDT (realmen
te es un
postdivisor, aunque es el mismo bloque que el Predivisor de Timer0) se asignarán u
sando el
registro OPTION_REG.
Nota: Las instrucciones CLRWDT y SLEEP borran el WDT y su postdivisor, si éste est
uviese
asignado al WDT, y evitan la condición de reset cuando se cumpla el tiempo de supe
rvisión.
Nota: Cuando se ejecuta una instrucción CLRWDT, y el divisor está asignado al WDT
(postvisor), la cuenta de éste se borra pero la asignación del divisor no varía.
TO

FIGURA 12-11: RESUMEN DE REGISTROS DEL WATCHDOG


Dirección
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
2007h
Bits de Config.
(1)
BODEN(1)
CP1
CP0
-PWRTE(1)
WDTE
FOSC1
FOSC0
81h, 181h
OPTION_REG
-RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
Las celdas sombreadas no se utilizan en el WDT.
Nota 1: Ver Registro 12-1 para operación de estos bits.

12.13 Modo de bajo consumo (SLEEP)


Se entra en modo de bajo consumo ejecutando la instrucción SLEEP.
Si está habilitado, el Temporizador Supervisor (WDT) se inicializará, pero seguirá fun
cionando,
el bit (STATUS<3>) se borra, (STATUS<4>) se activa, y el oscilador principal se
PDTO
desconecta. Las patillas de puertos E/S mantienen el estado que poseían antes de q
ue la
instrucción SLEEP se ejecutase (alto, bajo o alta impedancia).
Para el menor consumo en este modo, situar las patillas E/S en VDD o VSS, asegurán
dose de que
ningún circuito exterior conduce con este nivel, desconectar el convertidor A/D e
inhibir los
relojes externos. Poner todas las patillas de E/S, que tienen entrada de alta im
pedancia, en alto o
bajo, para evitar corrientes de conmutación por entradas en estado flotante. La en
trada T0CKI
también debe conectarse a VDD o VSS, para obtener un consumo mínimo. La contribución d
e las
polarizaciones internas en el PORTB serán tenidas en cuenta.
La patilla se deberá poner a nivel lógico alto (VIHMC).

12.13.1 ABANDONO DEL ESTADO SLEEP

El dispositivo puede salir del estado SLEEP por una de las siguientes acciones:
1. Entrada de reset externo por la patilla .
2. Por final de temporización en WDT (si éste estuviese habilitado).
3. Interrupción en la patilla INT, interrupción por cambio en PORTB o interrupción de
algún periférico.

El reset externo provocará el reset del dispositivo. Los bits y , en el registro


de estado, pueden utilizarse para determinar la causa del reset. EL bit , que se
pone a uno en
la conexión (POR), se borra cuando se entra en estado SLEEP. El bit se borra, si s
e
consume el tiempo WDT y se provoca el abandono del estado.
La interrupción de los siguientes periféricos pueden ser la causa del abandono del e
stado
SLEEP:
PD
1. Escritura o lectura de PSP.
2. Interrupción de TMR1. Timer1 debe trabajar como contador asíncrono.
3. Interrupción en modo captura CCP.
4. Disparo por suceso especial (Timer1 en modo asíncrono usando reloj externo).
5. Interrupción por detección de bit SSP (Start/Stop).
6. Recepción o transmisión de SSP en modo servidor (SPI/I2C).
7. RX o TX de la USART (modo servidor síncrono).
8. Conversión A/D (cuando la fuente de reloj de A/D es RC).
9. Operación completa de escritura en EEPROM.

Otros periféricos no podrán generar interrupción porque durante el estado SLEEP no es


efectivo
el oscilador interno.
Cuando ha sido ejecutada la instrucción SLEEP, la próxima instrucción (PC + 1) se capt
ura.
Para que el dispositivo abandone SLEEP por una interrupción, el correspondiente bi
t de
habilitación de interrupción debe estar activo. La salida se produce, independientem
ente del
estado del bit GIE. Si éste estuviese borrado, el dispositivo continuará la ejecución
de la
instrucción siguiente al SLEEP. Si el bit GIE está activado, el dispositivo ejecuta
la instrucción
siguiente al SLEEP y, después, salta al vector de interrupción 0004h. En casos en lo
s que no se
desee la ejecución siguiente al SLEEP, el usuario pondrá una instrucción NOP (no opera
r)
después del SLEEP.
12.13.2 SALIDA USANDO INTERRUPCIONES

Cuando las interrupciones globales estén inhibidas (GIE borrado), y cualquier fuen
te de
interrupción tenga activados los bits de habilitación individual y señalización de inter
rupción,
sucede algo de los siguiente:
.
Si la interrupción ocurre antes de la ejecución del SLEEP, ésta se completa como una
instrucción NOP. Por consiguiente, el WDT y su postdivisor no se borrarán, el bit
no se activará, y el bit no se borrará.
.
Si la interrupción sucede antes o durante la ejecución de SLEEP, el dispositivo
abandonará inmediatamente el estado SLEEP. La instrucción SLEEP se ejecutará
completamente antes de producirse el abandono. De este modo, el WDT y su
postdivisor se borrarán, el bit se activará, y el bit se borrará.

Dependiendo del momento en que se chequearon los bits indicadores antes de ejecu
tar la
instrucción SLEEP, puede que éstos se activen antes de que se complete la instrucción
SLEEP.
Para determinar si se ejecutó la instrucción SLEEP, hay que mirar el bit . Si éste es
1, la
instrucción se ejecutó como una NOP. Para asegurar que el WDT está borrado, hay que ej
ecutar
una instrucción CLRWDT antes de la instrucción SLEEP.

12.14 Circuito interno de depuración

Cuando se programa a 0 el bit DEBUG, en la palabra de configuración, se habilita e


l circuito
interno de Depuración. Esta función permite acciones sencillas de depuración cuando se
usa el
MPLAB. Cuando el microcontrolador tiene esta función habilitada, algunos de los re
cursos no
quedan disponibles para uso general. La Tabla 12-7 muestra las características con
sumidas por
el Depurador.

TABLA 12-7: RECURSOS DEL DEPURADOR


Patillas de E/S
RB6 y RB7
Memoria de Programa
Dirección 0000h contendrá NOP
Últimas 100h palabras
Memoria de Datos
0x070(0x0F0, 0x170, 0x1F0)
0x1EB 0x1EF
Para usar la función interna de Depuración del microcontrolador, el diseño debe implem
entar las
conexiones del circuito de Programación Serie a MCLR/VPP, VDD, GND, RB7 y RB6. Esto
hace de interconexión para el módulo del Depurador interno.

12.15 Verificación del Programa/Código de Protección

Si los bits del código de protección no han sido programados, la Memoria de Programa
interna
puede extraerse (leerse) para verificaciones.

12.16 Posiciones ID

Cuatro posiciones de memoria (2000h 2003h) se han previsto como posiciones ID, d
onde el
usuario puede almacenar códigos de comprobación o números de identificación. Estas
posiciones no son accesibles durante la ejecución normal, pero pueden leerse y esc
ribirse en el
proceso de programación y verificación. Se recomienda que solamente se usen los 4 bi
ts menos
significativos de la posición ID.

12.17 Circuito de Programación Serie interno (ICSP)

Los microcontroladores PIC16F87X pueden programarse en serie. Es tan sencillo co


mo dejar
dos líneas para datos y reloj, y otras tres para alimentación, masa y tensión de progr
amación.
Cuando se utilice el ICSP, hay que suministrar 4,5V a 5,5V, si se ejecutaran una
gran cantidad
de borrados, incluyendo reprogramación de los códigos de protección desde el estado de
conexión al de desconexión. En todos los demás casos de ICSP, se programará a la tensión
normal de trabajo.

12.18 Programación ICSP en baja tensión

El bit LVP, de la palabra de configuración, habilita la programación ICSP en baja te


nsión. Este
modo permite al microcontrolador ser programado vía ICSP, usando la tensión VDD como
tensión base de programación. Para esto se necesita que VPP no se ponga a VIHH, pero
puede, en
cambio, quedarse a la tensión normal de trabajo. En este modo, la patilla RB3/PGM
se dedica a
la función de programación, y deja de ser una patilla general de puerto E/S. Durante
la
programación, VDD se aplica a la patilla . Para entrar en modo programación, VDD se
aplica a la patilla RB3/PGM, y se pondrá a uno el bit LVP. Por defecto (de fábrica),
el bit LVP
está a 1.
Nota 1: La programación con alta tensión siempre está disponible, independientemente d
el
estado del bit LVP, aplicando VIHH a la patilla .
Nota 2: Mientras se está en modo ICSP de baja tensión, la patilla RB3 no puede utili
zarse como
puerto de E/S.
Nota 3: Cuando se use programación ICSP en baja tensión y las resistencias de polari
zación del
PORTB estén habilitadas, el bit 3 del registro TRISB debe borrarse para inhibir la
polarización
de RB3 y asegurar la debida operación del dispositivo.
Si no se utiliza la programación en baja tensión, el bit LVP puede programarse a 0 y
RB3/PGM
podrá utilizarse como una patilla de puerto E/S. Sin embargo, el bit LVP será progra
mado,
únicamente, cuando se entre en modo programación con VIHH en la patilla . El bit LVP
se cargará solamente cuando se use alta tensión sobre .
Cada vez que se programa a 0 el bit LVP, solamente se dispone de programación en a
lta
tensión, y solamente este modo podrá usarse para programar el dispositivo.
13.0 RESUMEN DEL CONJUNTO DE INSTRUCCIONES

Cada instrucción en los PIC16F87X se compone de una palabra de 14 bits, dividida e


n un
Código de Operación (OPCODE), que especifica el tipo de instrucción, y uno o más operand
os
que especifican la operación de la instrucción. El conjunto de instrucciones de la T
abla 13-2
lista las operaciones orientadas a bit, orientadas a byte, literales y de contro
l. La Tabla 13-1
muestra el campo de descripciones del Código de Operación.
Para instrucciones orientadas a byte, .f. representa la designación de un registro
del fichero, y
.d. representa la designación del destino. La designación del registro fichero espec
ifica qué
registro fichero está usando la instrucción.
La designación del destino, especifica dónde se situará el resultado de la operación: si
.d. es 0,
el resultado se sitúa en el registro W, si .d. es 1, el resultado se coloca en el
registro fichero
especificado en la propia instrucción.
Para instrucciones orientadas a byte, .b. representa un bit, cuyo número indica la
posición del
bit afectado por la operación, en la que .f. es el registro en que se localiza el
bit designado.
Para operaciones literales, .k. representa un valor constante de 8 bits; en oper
aciones de
control, .k. es un número de 11 bits.

TABLA 13-1: DESCRIPCIÓN DE


INDICADORES DEL CÓDIGO DE
OPERACIÓN
Indicador
Descripción

f
Registro fichero. Dirección 0x00 a
0x7Fh.
W
Registro de trabajo (acumulador).
b
Número de bit en un registro de 8
bits
k
Dato constante o etiqueta.
x
Cualquier valor (0 o 1).
El ensamblador generará códigos
con x = 0. Es la forma de uso
recomendada para la
compatibilidad con todas las
herramientas de desarrollo de
Microchip.
d
Selección de destino; d = 0:
resultado se guarda en W,
d = 1: resultado se almacena en el
registro f.
Por defecto, f = 1.
PC
Contador de Programa.
TO
Bit de fin de temporización.
PD
Bit de bajo consumo.

El conjunto de instrucciones está en orden alfabético y agrupadas en tres categorías bás


icas:
.
Operaciones orientadas a byte.
.
Operaciones orientadas a bit.
.
Operaciones literales y de control.
Todas las instrucciones se ejecutan en un único ciclo de instrucción, menos las de c
omparación-
coincidencia, o las de cambio del Contador de Programa como resultado de una ins
trucción. En
estos casos, la ejecución supone dos ciclos de instrucción. Un ciclo de instrucción co
nsiste en
cuatro períodos del oscilador. Por esto, para una frecuencia del oscilador de 4 Mh
z, la ejecución
de una instrucción normal supone un tiempo de 1 .
s. Si se trata de instrucciones de
comparación-coincidencia, o de cambio del valor del Contador de Programa como resu
ltado de
una instrucción, el tiempo necesario será el doble.
En la Tabla 13-2 se detallan las instrucciones reconocidas por el ensamblador MP
ASM.
En la Figura 13-1 se muestra el formato general que puede tener una instrucción.
Nota: Para mantener la compatibilidad con futuros dispositivos PIC, no usar las
instrucciones
OPTION y TRIS.
Todos los ejemplso usan el formato 0xhh para representar cantidades hexadecimale
s, donde hh
representan las cifras hexadecimales.

TABLA 13:2 CONJUNTO DE ISTRUCCIONES DEL PIC16F87X


Mnemotécnicos,
Operandos
Descripción
Ciclos
Código de operación 14 bits
MSb LSb
Status
afectado
Notas

OPERACIONES ORIENTADAS A BYTE


ADDWF f, d
ANDWF f, d
CLRF f
CLRW
COMF f, d
DECF f, d
DECFSZ f, d
INCF f, d
INCFSZ f, d
IORWF f, d
MOVF f, d
MOVWF f
NOP
RLF f, d
RRF f, d
SUBWF f, d
SWAPF f, d
XORWF f, d
Suma W y f
Función AND de W con f
Borra f
Borra W
Complementa f
Decrementa f
Decrementa f y salta si cero
Incrementa f
Incrementa f y salta si cero
Función OR de W con f
Mueve f
Mueve W a f
No opera
Rotación a izda. de f a través de Carry
Rotación a dcha. de f a través de Carry
Resta W de f
Conmuta cuartetos en f
Función OREX de W con f
1
1
1
1
1
1
1 (2)
1
1 (2)
1
1
1
1
1
1
1
1
1
00 0111 d f f f f f f f
00 0101 d f f f f f f f
00 0001 1 f f f f f f f
00 0001 0 xxx xxxx
00 1001 d f f f f f f f
00 0011 d f f f f f f f
00 1011 d f f f f f f f
00 1010 d f f f f f f f
00 1111 d f f f f f f f
00 0100 d f f f f f f f
00 1000 d f f f f f f f
00 0000 1 f f f f f f f
00 0000 0xx0 0000
00 1101 d f f f f f f f
00 1100 d f f f f f f f
00 0010 d f f f f f f f
00 1110 d f f f f f f f
00 0110 d f f f f f f f
C, DC,Z
Z
Z
Z
Z
Z
Z
Z
Z
C
C
C, DC, Z
Z
1, 2
1, 2
2
1, 2
1, 2
1, 2, 3
1, 2
1, 2, 3
1, 2
1, 2
1, 2
1, 2
1, 2
1, 2
1, 2
OPERACIONES ORIENTADAS A BIT
BCF f, b
BSF f, b
BTFSC f, b
BTFSS f, b
Borra bit b de f
Activa bit b de f
Comprueba bit b de f y salto si 0
Comprueba bit b de f y salto si 1
1
1
1 (2)
1 (2)
01 00bb b f f f f f f f
01 01bb b f f f f f f f
01 10bb b f f f f f f f
01 11bb b f f f f f f f

1, 2
1, 2
3
3
OPERACIONES LITERALES Y DE CONTROL
ADDLW k
ANDLW k
CALL k
CLRWDT
GOTO k
IORLW k
MOVLW k
RETFIE
RETLW k
RETURN
SLEEP
SUBLW k
XORLW k
Suma W y k.
Función AND de W y k
Llamada a subrutina
Borra el WDT
Salto a la dirección k
Función OR de W y k
Mover k a W
Retorno de interrupción
Retorno cargando k en W
Retorno de subrutina
Va a modo reposo
Resta W de k
Función OREX de W y k
1
1
2
1
2
1
1
2
2
2
1
1
1
11 111x kkkk kkkk
11 1001 kkkk kkkk
10 0kkk kkkk kkkk
00 0000 0110 0100
10 1kkk kkkk kkkk
11 1000 kkkk kkkk
11 00xx kkkk kkkk
00 0000 0000 1001
11 01xx kkkk kkkk
00 0000 0000 1000
00 0000 0110 0011
11 110x kkkk kkkk
11 1010 kkkk kkkk
C, DC, Z
Z
-TO, -PD
Z
-TO, -PD
C, DC, Z
Z

Nota 1: Cuando se modifica un registro de E/S en función de él mismo (por ejemplo MO


VF PORTB,1), el valor
usado será el valor presente en las mismas patillas. Por ejemplo, si el valor del
latch de datos es 1 para una
patilla configurada como entrada, y se pone a 0 por una señal externa, el dato que
se escribirá será un 0.
Nota 2: Si esta instrucción se ejecuta en el registro TMR0 (y cuando se aplique d
= 1), el Predivisor se borrará si
está asignado al módulo Timer0.
Nota 3: Si se modifica el Contador de Programa (PC), o es verdadero el resultado
de una comparación, la instrucción
requiere dos ciclos. EL segundo ciclo se ejecuta como un NOP (no se realiza trab
ajo aparente alguno).
13.1 Descripción de instrucciones

ADDLW Suma W y Literal


Sintaxis: ADDLW k
Operandos: 0 .
k .
255
Operación: (W) + k .
(W)
Estado afdo.: C, DC, Z
Descripción: El contenido del registro W se
suma al byte de .k., y el
resultado se guarda en W.
ADDWF Suma W y f
Sintaxis: ADDWF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (W) + (f) .
(destino)
Estado afdo.: C, DC, Z
Descripción: El contenido del registro W se
suma al registro .f.. Si .d. es 0,
el resultado se almacena en W; si
.d. es 1, el resultado se guarda en
el registro .f..
ANDLW AND de W con Literal
Sintaxis: ANDLW k
Operandos: 0 .
k .
255
Operación: (W) AND (k) .
(W)
Estado afdo.: Z
Descripción: Se realiza la función AND del
contenido de W con la palabra
literal .k.. El resultado queda en
W.
ANDWF AND de W con f
Sintaxis: ANDWF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (W) AND (f) .
(destino)
Estado afdo.: Z
Descripción: And de W con el registro .f.. Si
.d. es 0, el resultado se almacena
en W; si .d. es 1, el resultado se
guarda en el registro .f..
BCF Borra un bit del registro f
Sintaxis: BCF f, b
Operandos: 0 .
f .
127
0 .
b .
7
Operación: 0 .
(f<b>)
Estado afdo.: Ninguno
Descripción: Se borra el bit numerado .b. del
registro .f..
BSF Activa un bit del registro f
Sintaxis: BSF f, b
Operandos: 0 .
f .
127
0 .
b .
7
Operación: 1 .
(f<b>)
Estado afdo.: Ninguno
Descripción: Se activa el bit numerado .b. del
registro .f..
BTFSS Chequea el bit b del registro
f, y salta si es 1 .
Sintaxis: BTFSS f, b
Operandos: 0 .
f .
127
0 .
b .
7
Operación: Salta si (f<b>) = 1
Estado afdo.: Ninguno
Descripción: Si el bit .b. del registro .f. es
uno, se salta la próxima
instrucción. Se invierten en total 2
ciclos de instrucción (2TCY).
BTFSC Chequea el bit b del registro
f, y salta si es 0 .
Sintaxis: BTFSC f, b
Operandos: 0 .
f .
127
0 .
b .
7
Operación: Salta si (f<b>) = 0
Estado afdo.: Ninguno
Descripción: Si el bit .b. del registro .f. es
cero, se salta la próxima
instrucción. Se invierten en total 2
ciclos de instrucción.
CALL Llamada a Subrutina.
Sintaxis: CALL k
Operandos: 0 .
k .
2047
Operación: (PC) + 1 .
TOS,
k .
PC<10:0>,
(PCLATH<4:3>).
PC<12:11>
Estado afdo.: Ninguno
Descripción: Salta a ejecutar el programa
(subrutina) que se encuentra en la
dirección dada por el contenido
de .k. (11 bits de menor peso) y
el PCLATH (bits de mayor peso).
Antes de cargar PC con la nueva
dirección, guarda en pila el PC
actual, para poder regresar cuando
se lo mande el programa. EL PC
actual será la dirección donde se
ubica el CALL más uno.
CLRF Borrado de f
Sintaxis: CLRF f
Operandos: 0 .
f .
127
Operación: 00 .
(f)
1.
Z
Estado afdo.: Z
Descripción: Se borra el contenido del registro
.f., activándose el indicador Z.
CLRW Borrado de W
Sintaxis: CLRW
Operandos: Ninguno
Operación: 00 .
(W)
1.
Z
Estado afdo.: Z
Descripción: Se borra el contenido del registro
.W.. Se activa el indicador Z.
CLRWDT Borrado del Watchdog Timer
Sintaxis: CLRWDT
Operandos: Ninguno
Operación: 00 .
WDT
0 ..
Predivisor WDT
1 .
-TO
1 .
-PD
Estado afdo.: -TO, -PD
Descripción: Se borra el contenido del registro
WDT y de su Predivisor. Se
activan los bits indicadores de
estado TO y PD.
COMF Complementa el registro f
Sintaxis: COMF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f) .
(destino)
Estado afdo.: Z
Descripción: Se complementa el contenido del
registro .f.. Si .d. es cero, el
resultado se almacena en W; si es
uno, en el propio registro .f..
DECF Decrementa el registro f
Sintaxis: DECF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f) - 1 .
(destino)
Estado afdo.: Z
Descripción: Se decrementa el contenido del
registro .f.. Si .d. es cero, el
resultado se almacena en W; si es
uno, en el propio registro .f..
DECFSZ Decrementa f, y salto si = 0
Sintaxis: DECFSZ f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f) - 1 .
(destino);
salto si resultado = 0.
Estado afdo.: ninguno
Descripción: Se decrementa el contenido del
registro .f.. Si .d. es cero, el
resultado se almacena en W; si es
uno, en el propio registro .f..
Si el resultado es 1, la próxima
instrucción se ejecutará; si el
resultado es 0, se ejecutará una
instrucción NOP, invirtiendo 2
ciclos de instrucción en ese caso.
GOTO Salto incondicional
Sintaxis: GOTO k
Operandos: 0 .
k .
2047
Operación: k .
PC<10:0>
PCLATH<4:3> .
PC<12:11>
Estado afdo.: ninguno
Descripción: Salto incondicional a la dirección
así conseguida:
Se carga PC, en sus 11 bits de
menor peso (PC<10:0>), con el
contenido de .k.. Los 2 bits de
más peso de PC se toman de
PCLATH. Esta instrucción se
ejecuta en 2 ciclos de instrucción.
INCF Incrementa el registro f
Sintaxis: INCF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f) + 1 .
(destino)
Estado afdo.: Z
Descripción: Se incrementa el contenido del
registro .f.. Si .d. es cero, el
resultado se almacena en W; si es
uno, en el propio registro .f..
INCFSZ Incrementa f, y salto si = 0
Sintaxis: INCFSZ f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f) + 1 .
(destino);
salto si resultado = 0.
Estado afdo.: ninguno
Descripción: Se incrementa el contenido del
registro .f.. Si .d. es cero, el
resultado se almacena en W; si es
uno, en el propio registro .f..
Si el resultado es 1, la próxima
instrucción se ejecutará; si el
resultado es 0, se ejecutará una
instrucción NOP, invirtiendo 2
ciclos de instrucción en ese caso.
IORLW Función OR de Literal con W
Sintaxis: IORLW k
Operandos: 0 .
k .
255
Operación: (W) OR k .
(W)
Estado afdo.: Z
Descripción: Se realiza la función OR entre el
contenido del registro W y la
palabra literal .k.. El resultado
queda en W.
IORWF Función OR entre W y f
Sintaxis: IORWF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (W) OR f .
(destino)
Estado afdo.: Z
Descripción: Se realiza la función OR con los
contenidos de los registros W y
.f.. El resultado quedará en W si
.d. = 0; en caso contrario, el
resultado se almacena en .f..
MOVF Mueve f
Sintaxis: MOVF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f) .
(destino)
Estado afdo.: Z
Descripción: Se lleva el contenido de .f. al
destino, que dependerá del valor
de .d.: si éste es 0, el contenido
de .f. va a parar a W; en caso
contrario, el contenido de .f. se
carga sobre sí mismo. Esta última
operación, aparentemente inútil,
puede servir para comprobar el
valor cero de .f..
MOVLW Mueve Literal a W
Sintaxis: MOVLW k
Operandos: 0 .
k .
255
Operación: (k) .
(W)
Estado afdo.: Ninguno
Descripción: Los ocho bits de la palabra .k. se
cargan en el registro W.
MOVWF Mueve W a f
Sintaxis: MOVWF f
Operandos: 0 .
f .
127
Operación: (W) .
(f)
Estado afdo.: Ninguno
Descripción: Mueve el dato de W al registro
.f..
NOP No Operar
Sintaxis: NOP
Operandos: Ninguno
Operación: No opera
Estado afdo.: Ninguno
Descripción: No se realiza operación alguna.
RETFIE Retorno desde interrupción
Sintaxis: RETFIE
Operandos: Ninguno
Operación: TOS .
PC; 1 .
GIE
Estado afdo.: Ninguno
Descripción: Al cargar PC con el contenido de
la última posición de pila, se
retornará al programa principal,
que se abandonó para atender la
interrupción.
RETLW Retorno con Literal en W
Sintaxis: RETLW k
Operandos: 0 .
k .
255
Operación: k .
(W); TOS .
PC
Estado afdo.: Ninguno
Descripción: El registro W se carga con la
palabra .k.. El contador de
programa se carga con el
contenido último de la pila. Esta
instrucción tiene 2TCY.
RETURN Retorno de Subrutina
Sintaxis: RETURN
Operandos: Ninguno
Operación: TOS .
PC
Estado afdo.: Ninguno
Descripción: Retorno desde una subrutina. Se
extrae el último valor que entró
en pila, para cargarse en el PC.
De esta forma se regresa al
programa principal en donde se
abandonó para saltar a subrutina.
Esta instrucción tiene 2TCY.
RLF Rotación a izquierda a través de
Carry
Sintaxis: RLF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: Ver descripción abajo
Estado afdo.: C
Descripción: El contenido del registro .f. se
rota a la izquierda a través del
Carry, en quien se cargará el bit
de más peso de .f.. El resto de
bits de .f. se desplazan desde
menor a mayor peso.
RRF Rotación a derecha a través de
Carry
Sintaxis: RRF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: Ver descripción abajo
Estado afdo.: C
Descripción: El contenido del registro .f. se
rota a la derecha a través del
Carry, en quien se cargará el bit
de menos peso de .f.. El resto de
bits de .f. se desplazan desde
mayor a menor peso.
SLEEP Estado vigilante
Sintaxis: SLEEP
Operandos: Ninguno
Operación: 00 .
WDT
0 ..
Predivisor WDT
1 .
-TO
0 .
-PD
Estado afdo.: -TO, -PD
Descripción: Se borra el bit de estado de bajo
consumo PD y se activa el bit
indicador de final de tiempo, -TO.
Se borra el registro WDT y su
Predivisor. El procesador se lleva
al modo SLEEP, con el oscilador
parado.
SUBLW Resta W a Literal
Sintaxis: SUBLW k
Operandos: 0 .
k .
255
Operación: (k) (W) .
(W)
Estado afdo.: C, DC, Z
Descripción: El contenido del registro W se
resta del byte contenido en .k.; el
resultado se guarda en W.
C = 1 . Resultado positivo
C = 0 . Resultado negativo
SUBWF Resta W de f
Sintaxis: SUBWF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f) - (W) .
(destino)
Estado afdo.: C, DC, Z
Descripción: El contenido del registro W se
resta del contenido del registro
.f., por el método del
complemento a dos. Si .d. es 0,
el resultado se almacena en W; si
.d. es 1, el resultado se guarda en
el registro .f..
C = 1 . Resultado positivo.
C = 0 . Resultado negativo.
SWAPF Conmuta cuartetos de f
Sintaxis: SWAPF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (f<3:0>) .
(destino<7:4>)
(f<7:4>) .
(destino<3:0>)
Estado afdo.: Ninguno
Descripción: Se permutan los dos cuartetos
(nibbles) del byte del registro .f..
Si .d. = 0, el resultado de la
permuta se sitúa en el registro W;
si .d. = 1, el resultado se coloca
en .f..
XORLW XOR de Literal con W
Sintaxis: XORLW k
Operandos: 0 .
k .
255
Operación: (W) XOR k .
(W)
Estado afdo.: Z
Descripción: Se realiza la función OR
EXCLUSIVA entre el contenido
del registro W y la palabra literal
.k.. El resultado queda en W.
XORWF XOR entre W y f
Sintaxis: XORWF f, d
Operandos: 0 .
f .
127
d .
[0,1]
Operación: (W) XOR f .
(destino)
Estado afdo.: Z
Descripción: Se realiza la función OR
EXCLUSIVA con los contenidos
de los registros W y .f.. El
resultado quedará en W si .d. =
0; en caso contrario, el resultado
se almacena en .f..
15.0 CARACTERÍSTICAS ELÉCTRICAS
Rango Máximo Absoluto
Temperatura ambiente en polarización .............................................
........................................ -55 a +125 ºC
Temperatura de almacenamiento ..................................................
.............................................. -65 a 150 ºC
Tensión en cualquier patilla respecto a VSS (excepto VDD, -MCLR y RA4) ...........
..... -0,3V a (VDD + 0,3V)
Tensión en VDD con respecto a VSS ................................................
............................................ -0,3 a +7,5V
Tensión en MCLR con respecto a VSS ................................................
.......................................... 0 a +14V
Tensión en RA4 con respecto a VSS ................................................
................................................. 0 a 8,5V
Disipación total de potencia (Nota 1) ............................................
........................................................ 1,0W
Máxima corriente de salida de la patilla VSS .....................................
................................................ 300 mA
Máxima corriente en la patilla VDD ...............................................
.................................................... 250 mA
Corriente de entrada de protección, IIK (VI < 0 o VI > VDD) ......................
.................................... +/- 20 mA
Corriente de salida de protección, IOK (VO < 0 o VO > VDD) .......................
.................................. +/- 20 mA
Máxima corriente de salida de cualquier patilla E/S a VSS ........................
.......................................... 25 mA
Máxima corriente de salida de cualquier patilla E/S a VDD ........................
......................................... 25 mA
Máxima corriente a VSS por PORTA, PORTB y PORTE (combinada) (Nota 3) .............
................. 200 mA
Máxima corriente a VDD por PORTA, PORTB y PORTE (combinada) (Nota 3) .............
................ 200 mA
Máxima corriente a VSS por PORTC y PORTD (combinada) (Nota 3).....................
........................ 200 mA
Máxima corriente a VDD por PORTC y PORTD (combinada) (Nota 3) ....................
........................ 200 mA
Nota 1: La potencia disipada se calcula así: Pdis = VDD (IDD - .
IOH) + .
[(VDD VOH) IOH] +
.
.
(VOL IOL).
Nota 2: Los picos de tensión por debajo de VSS en la patilla MCLR, que induzcan cor
rientes mayores
de 80 mA, pueden bloquear al dispositivo. Por esto se conecta un resistor en ser
ie, de valor
óhmico ente 50 y 100.
, cuando se aplique un nivel bajo a la patilla MCLR, y algo mayor
cuando se conecte directamente a VSS.
Nota 3: PORTD y PORTE no están implementados en los dispositivos de 28 patillas.
IMPORTANTE: Valores por encima de los listados en .Rango Máximo Absoluto. pueden c
ausar daños
en el dispositivo. Asimismo, exposiciones prolongadas de las condiciones arriba
indicadas, pueden afectar
a la fiabilidad del dispositivo.
Tabla 15-1: PIC16F873/874/876/877-04 (Comercial, Industrial)
PIC16F873/874/876/877-20 (Comercial, Industrial)
CARACTERÍSTICAS DC
Condiciones de trabajo Estándar (salvo indicación en contra)
Temperatura de trabajo 40ºC ..
TA .
+85ºC para industrial y
0ºC .
TA .
+70ºC para comercial
Parám.

Características
Símbolo
Mín.
Típ.
Máx.
Unid.
Condiciones

D001
D001A
Tensión de
alimentación
VDD
4,0
4,5
VBOR*
---
---
---
5,5
5,5
5,5
V
Configuración de oscilación
XT, RC y LP.
Configuración de oscilación
HS.
BOR habilitado, Fmáx = 14
Mhz (Nota 7)
D002*
Tensión de retención
datos RAM (Nota 1)
VDR
---
1,5
---
V

D003
VDD arranque para
asegurar la señal de
Reset interno (POR)
VPOR
---
VSS
---
V
Ver sección .Reset de
conexión. para los detalles.
D004*
Velocidad de subida
de VDD para asegurar
el reset interno (POR)
SVDD
0,05
---
---
V/ms
Ver sección .Reset de
conexión. para los detalles.
D005
Tensión de reset BOR
VBOR
3,7
4,0
4,35
V
Habilitado bit BODEN en
configuración.
D010
D013
Corriente alimentación
(Nota 2, 5)

IDD
---
---
1,6
7
4
15
mA
Oscilación XT, y RC
Fosc = 4 Mhz, VDD = 5,5 V
(Nota 4)
Oscilación HS
Fosc = 20 Mhz, VDD = 5,5 V
D015*
Corriente BOR (Nota 6)
.
IBOR
---
85
200
.
A
BOR habilitado, VDD=5,0V
D020
D021
D021A
Corriente bajo consumo
(Nota 3, 5)
IPD
---
---
---
10,5
1,5
1,5
42
16
19
.
A
VDD=4,0V, WDT habilitado,
-40 ºC a 85 ºC
VDD=4,0V, WDT inhibido,
0 ºC a 70 ºC
VDD=4,0V, WDT inhibido,
-40 ºC a 85 ºC
D023*
Corriente BOR
(Nota 6)
.
IBOR
---
85
200
.
A
BOR habilitado, VDD = 5,0V
Símbolo: * Parámetros característicos, pero no probados.
Dato en columna .Típ. es a 5V, 25ºC, salvo otra especificación. Estos parámetros son par
a guía de
diseño, pero no están probados.
Nota 1: Este es el límite al que puede bajar VDD sin perder los datos de la RAM.
2: La corriente de alimentación es, principalmente, función de la tensión de trabajo y
de la frecuencia. Otros
factores, como la carga de las patillas E/S, la velocidad de conmutación, tipo de
oscilador, modelo del
código interno de ejecución y temperatura, también tienen efecto sobre la corriente co
nsumida.
Las condiciones de prueba para todas las medidas de IDD, en modo activo de opera
ción, son:
OSC1 = Onda cuadrada externa; todas las patillas triestado, conectadas a VDD.
-MCLR = VDD; WDT habilitado o inhibido, según se especifique.
3: La corriente en modo SLEEP no depende del tipo de oscilador. Esta corriente s
e mide con el bloque en
modo SLEEP, con todas las patillas E/S en alta impedancia y conectadas a VDD y V
SS.
4: Para configuración de oscilador RC, no se incluye la corriente a través de la R e
xterna. Ésta puede
estimarse con la fórmula Ir = VDD/2Rext (mA), con Rext en K.
.
5: El oscilador del Timer1, cuando se habilita, añade 20 .
A a la corriente especificada. Este valor sirve
como guía de diseño, pero no está probado.
6: La corriente .
es la corriente adicional consumida cuando este periférico está habilitado. Esta cor
riente se
añadirá a la base IDD o IPD medida.
7: Cuando se habilita BOR, el dispositivo operará correctamente hasta alcanzar el
punto de caída de tensión
marcado como VBOR.
Tabla 15-2: Características DC: PIC16F873/874/876/877-04 (Comercial, Industrial)
CARACTERÍSTICAS DC
Condiciones de trabajo Estándar (salvo indicación en contra)
Temperatura de trabajo 40 ºC ..
TA .
+85 ºC para industrial y
0 ºC .
TA .
+70 ºC para comercial
Parám.

Características
Símbolo
Mín.
Típ.
Máx.
Unid.
Condiciones

D001
Tensión de
alimentación
VDD
2,0
---
5,5
V
Configuración de oscilación
XT, RC y LP (DC 4 Mhz).
D002*
Tensión de retención
datos RAM (Nota 1)
VDR
---
1,5
---
V

D003
VDD arranque para
asegurar la señal de
Reset interno (POR)
VPOR
---
VSS
---
V
Ver sección .Reset de
conexión. para los detalles.
D004*
Velocidad de subida
de VDD para asegurar
el reset interno (POR)
SVDD
0,05
---
---
V/ms
Ver sección .Reset de
conexión. para los detalles.
D005
Tensión de reset BOR
VBOR
3,7
4,0
4,35
V
Habilitado bit BODEN en
configuración.
D010
D010A
Corriente alimentación
(Nota 2, 5)

IDD
---
---
0,6
20
2,0
35
mA
.
A
Oscilación XT, y RC
Fosc = 4 Mhz, VDD = 3,0V
(Nota 4)
Oscilación LP
Fosc = 32 Khz, VDD = 3,0V,
WDT inhibido.
D015*
Corriente BOR
(Nota 6)
.
IBOR
---
85
200
.
A
Habilitación BOR, VDD = 5,0V
D020
D021
D021A
Corriente bajo consumo
(Nota 3, 5)
IPD
---
---
---
7,5
0,9
0,9
30
5
5
.
A
VDD = 3,0V, WDT habilitado,
-40 ºC a 85 ºC
VDD = 3,0 V, WDT inhibido,
0 ºC a 70 ºC
VDD = 3,0 V, WDT inhibido,
-40 ºC a 85 ºC
D023*
Corriente BOR
(Nota 6)
.
IBOR
---
85
200
.
A
Habilitación BOR, VDD = 5,0V
Símbolo: * Parámetros característicos, pero no probados.
Dato en columna .Típ. es a 5V, 25ºC, salvo otra especificación. Estos parámetros son par
a guía de
diseño, pero no están probados.
Nota 1: Este es el límite al que puede bajar VDD sin perder los datos de la RAM.
2: La corriente de alimentación es, principalmente, función de la tensión de trabajo y
de la frecuencia. Otros
factores como la carga de las patillas E/S, la velocidad de conmutación, tipo de o
scilador, modelo del
código interno de ejecución y temperatura, también tienen efecto sobre la corriente co
nsumida.
Las condiciones de prueba para todas las medidas de IDD, en modo activo de opera
ción, son:
OSC1 = Onda cuadrada externa; todas las patillas triestado, conectadas a VDD.
-MCLR = VDD; WDT habilitado o inhibido, según se especifique.
3: La corriente en modo SLEEP no depende del tipo de oscilador. Esta corriente s
e mide con el bloque en
modo SLEEP, con todas las patillas E/S en alta impedancia y conectadas a VDD y V
SS.
4: Para configuración de oscilador RC, no se incluye la corriente a través de la R e
xterna. Ésta puede
estimarse con la fórmula Ir = VDD/2Rext (mA), con Rext en K.
.
5: El oscilador del Timer1, cuando se habilita, añade 20 .
A a la corriente especificada. Este valor sirve
como guía de diseño, pero no está probado.
6: La corriente .
es la corriente adicional consumida cuando este periférico está habilitado. Esta cor
riente se
añadirá a la base IDD o IPD medida.
Tabla 15-3: Características DC: PIC16F873/874/876/877-04 (Comercial, Industrial)
PIC16F873/874/876/877-20 (Comercial, Industrial)
PIC16L873/874/876/877-04 (Comercial, Industrial)
CARACTERÍSTICAS DC
Condiciones de trabajo Estándar (salvo indicación en
contra)
Temperatura de trabajo 40 ºC ..
TA .
+85 ºC para industrial y
0 ºC .
TA .
+70 ºC para comercial
Parám.

Características
Símbolo
Mín.
Típ.
Máx.
Unid.
Condiciones

D030
D030A
D031
D032
D033
D034
D034A
Tensión entrada baja
Puertos E/S
con buffer TTL
con buffer ST
-MCLR, OSC1 (modo RC)
OSC1 (en XT, HS y LP)
Puertos RC3 y RC4
con buffer ST
con SMBus
VIL

VSS
VSS
VSS
VSS
VSS
VSS
-0,5

---

0,15VDD
0,8V
0,2VDD
0,2VDD
0,3VDD
0,3VDD
0,6
V

En todo el rango VDD


4,5 V .
VDD .
5,5 V
Nota 1
En todo el rango VDD
para VDD = 4,5 a 5,5 V

D040
D040A
D041
D042
D042A
D043
D044
D044A
Tensión entrada alta
Puertos E/S
con buffer TTL
con buffer ST
-MCLR
OSC1 (XT, HS y LP)
OSC1 (en modo RC)
Puertos RC3 y RC4
con buffer ST
con SMBus
VIH

2,0
0,25VDD
+0,8
0,8VDD
0,8VDD
0,7VDD
0,9VDD
0,7VDD
1,4

---

VDD
VDD
VDD
VDD
VDD
VDD
VDD
VDD
5,5

En todo el rango VDD


4,5 V .
VDD .
5,5 V
En el rango de VDD
Nota 1
En todo el rango VDD
para VDD = 4,5 a 5,5 V
D070
PORTB con pequeña
corriente de polarización
IPURB
50
250
400
.
A
VDD = 5 V, VPIN = VSS
D060
D061
D063
I de fuga en entrada
(Notas 2 y 3)
Puertos E/S
-MCLR, RA4/T0CKI
OSC1
IIL
---
---

+/- 1
+/- 5
+/- 5
.
A

VSS .
VPIN .
VDD,
patilla en alta imped.
VSS .
VPIN .
VDD
VSS .
VPIN .
VDD,
config. XT, HS y LP.
D080
D083
Voltaje salida baja
Puertos E/S
OSC2/CLKOUT (config.
en modo RC)
VOL
---
---
0,6
V

IOL=8,5mA, VDD=4,5V
de -40º C a 85 ºC
IOL=1,6mA, VDD=4,5V
de -40º C a 85 ºC
Símbolo: * Parámetros característicos, pero no probados.
Dato en columna .Típ. es a 5V, 25ºC, salvo otra especificación. Estos parámetros son par
a guía de
diseño, pero no están probados.
Nota 1: En configuración de oscilador RC, la patilla OSC1/CLKIN es una entrada Sch
mitt Trigger (ST). No se
recomienda que el PIC16F87X se conecte con reloj externo en modo RC.
2: La corriente de fugas en la patilla MCLR es muy dependiente del nivel de tensión
aplicado. Los niveles
expresados representan condiciones normales de trabajo. Corrientes mayores de fu
ga se obtendrán con
diferentes tensiones de entrada.
3: Una corriente negativa quiere expresar la corriente saliente de la patilla.
CARACTERÍSTICAS DC
Condiciones de trabajo Estándar (salvo indicación en contra)
Temperatura de trabajo 40 ºC ..
TA .
+85 ºC para industrial y
0 ºC .
TA .
+70 ºC para comercial
Parám.

Características
Símb.
Mín.
Típ.
Máx.
Unid.
Condiciones

D090
D092
Tensión salida alta
Puertos E/S (Nota 3)
OSC2/CLKOUT (config.
modo RC)
VOH
VDD - 0,7
---
---
V

IOH=-3,0mA. VDD=4,5V,
de 40 ºC a +85 ºC
IOH=-1,3mA. VDD=4,5V,
de 40 ºC a +85 ºC
D150
Tensión alta drenador
abierto
VOD
---
---
8,5
V
Patilla RA4

D100
D101
D102
Capacidad de carga en
patillas de salida
Patilla OSC2
Todas las patillas E/S y OSC2
(modo RC), SCL SDA en
modo I2C

COSC2
CIO
CB
---
---

15
50
400
pF
En modos XT, HS y LP, cuando
se usa reloj externo en OSC1.

D120
D121
D122
Memoria EEPROM de datos
Duración
VDD para lectura-escritura
Ciclo de borrado-escritura

ED
VDRW
TDEW

100K
Vmín
---

---
---
4

---
5,5
8

E/W
V
ms

25 ºC a 5V
Usando EECON para leer/escribir
Vmín= mínima tensión de trabajo

D130
D131
D132a
D133
Memoria de Programa
FLASH
Duración
VDD para lectura
VDD para borrado-escritura
Ciclo de borrado-escritura

EP
VPR
TPEW

1000
Vmín
Vmín
---
---
---
---
4

---
5,5
5,5
8

E/W
V
V
ms

25 ºC a 5 V
Vmím = Mín. tensión de trabajo
usando EECON para leer-escribir
Vmím = Mín. tensión de trabajo
Símbolo: * Parámetros característicos, pero no probados.
Dato en columna .Típ. es a 5V, 25ºC, salvo otra especificación. Estos parámetros son par
a guía de diseño,
pero no están probados.
Nota 1: En configuración de oscilador RC, la patilla OSC1/CLKIN es una entrada Sch
mitt Trigger (ST). No se
recomienda que el PIC16F87X se conecte con reloj externo en modo RC.
2: La corriente de fugas en la patilla MCLR es muy dependiente del nivel de tensión
aplicado. Los niveles
expresados representan condiciones normales de trabajo. Corrientes mayores de fu
ga se obtendrán con
diferentes tensiones de entrada.
3: Una corriente negativa quiere expresar la corriente saliente de la patilla.
Tabla 15-1: REQUISITOS DE TEMPORIZACIÓN DE RELOJ EXTERNO
Parám.

Símb.
Características
Mín.
Típ.
Máx.
Unid.
Condiciones

FOSC
Frecuencia CLKIN externo
(Nota 1)
DC
DC
DC
DC
---
---
---
---
4
4
20
200
MHz
MHz
MHz
MHz
Modos XTy RC
Modo
Frecuencia del oscilador
(Nota 1)
DC
0,1
4
5
---
---
---
---
4
4
20
200
MHz
MHz
MHz
KHz
Modo RC
Modo XT
Modo HS
Modo LP
1
TOSC
Período externo CLKIN
(Nota 1)
250
250
50
5
---
---
---
---
---
---
---
---
ns
ns
ns
.
s
Modo XT y RC
Modo HS
Modo HS
Modo LP
Período del oscilador
(Nota 1)
250
250
250
50
5
---
---
---
---
---
---
10,0
250
250
---
ns
ns
ns
ns
.
s
Modo RC
Modo XT
Modo HS (-04)
Modo HS (-20)
Modo LP
2
TCY
Duración ciclo instrucción
(Nota 1)
200
TCY
DC
ns
TCY = 4 / FOSC
3
TOSL,
TOSH
Duración entrada reloj externo
(OSC1) alta o baja
100
2,5
15
---
---
---
---
---
---
ns
.
s
ns
Oscilador XT
Oscilador LP
Oscilador HS
4
TOSR,
TOSF
Tiempos de subida y bajada de la
entrada externa de reloj (OSC1)
---
---
---
---
---
---
25
50
15
ns
ns
ns
Oscilador XT
Oscilador LP
Oscilador HS
Símbolo: Dato en columna .Típ. es a 5V, 25ºC, salvo otra especificación. Estos parámetros
son para guía de
diseño, pero no están probados.
Nota 1: Período del ciclo de instrucción (TCY) igual a cuatro períodos de la entrada d
e oscilación. Todos los
valores especificados se basan en la caracterización de los datos para un tipo de
oscilador particular, bajo
condiciones de trabajo estándar, con el dispositivo en ejecución de códigos. Exceder e
stos límites
especificados puede generar oscilaciones inestables y consumos de corriente mayo
res que los ofrecidos.
Todos los dispositivos se han probado trabajando con los valores .Mín.., y con un
reloj externo aplicado
a la patilla OSC1/CLKIN. Cuando se usa una entrada de reloj externo, el límite de
período .Máx.. es DC
(sin reloj) para todos los dispositivos.
TABLA 15-2: NECESIDADES DE TEMPORIZACIÓN DE CLKOUT Y E/S
Parám.

Símbolo
Características
Mín.
Típ.
Máx.
Unid.
Condicio.

10*
TosH2ckL
OSC1..
a CLKOUT.

---
75
200
ns
Nota 1
11*
TosH2ckH
OSC1.
a CLKOUT.

---
75
200
ns
Nota 1
12*
TckR
Tiempo subida CLKOUT
---
35
100
ns
Nota 1
13*
TckF
Tiempo bajada CLKOUT
---
35
100
ns
Nota 1
14*
TckL2ioV
CLKOUT.
a salida válida Puerto
---
---
0,5TCY+20
ns
Nota 1
15*
TioV2ckH
Entrada Puerto válida antes de CLKOUT.

Tosc+200
---
---
ns
Nota 1
16*
TckH2ioI
Mantenimiento entrada puerto después CLKOUT.

0
---
---
ns
Nota 1
17*
TosH2ioV
OSC1.
(ciclo Q1) a salida puerto válida
---
100
255
ns

18*
TosH2ioI
OSC1.
(ciclo Q2) a entrada puerto
válida (tiempo manten. entrada
puerto)
Estándar (F)
100
---
ns

Extendida(LF)
200
---
ns

19*
TioV2osH
Entrada válida puerto a OSC1.

0
---
---
ns

20*
TioR
Tiempo de subida de salida de
puerto
Estándar (F)
---
10
40
ns
Extendida(LF)
---
---
145
ns

21*
TioF
Tiempo de bajada de salida de
Puerto
Estándar (F)
---
10
40
ns

Extendida(LF)
---
---
145
ns

22
Tinp
Tiempo en bajo o alto en patilla INT
TCY
---
---
ns
23
Trbp
Tiempo en bajo o alto para INT por cambio en
patilla RB7 RB4
TCY
---
---
ns

* Estos parámetros son característicos pero no están probados.


Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
Estos parámetros son sucesos asíncronos no relacionados con ningún flanco de reloj inte
rno.
Nota 1: Las medidas se han realizado en modo RC, donde la salida CLKOUT es 4Tosc
.
TABLA 15-2: NECESIDADES DE TEMPORIZACIÓN DE CLKOUT Y E/S
Parám.

Símb.
Características
Mín.
Típ.
Máx.
Unid.
Condicio.

30*
TmcL
Ancho pulso -MCLR
2
---
---
.
s
VDD = 5V,
-40 ºC a + 85 ºC
31*
Twdt
Período temporiz. WDT
7
18
33
ms
VDD = 5V,
-40 ºC a + 85 ºC
32*
Tost
Período arranque oscilación
---
1024Tosc
---
---
Tosc = perío. OSC1
33*
Tpwrt
Período conexión
28
72
132
ms
VDD = 5V,
-40 ºC a + 85 ºC
34*
TIOZ
Tiempo de alta impedancia desde
bajada MCLR o reset WDT
---
---
2,1
.
s

35*
TBOR
Ancho pulso de reset BOR
100
---
---
.
s
VDD .
VBOR (D005)
* Estos parámetros son característicos pero no están probados.
Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
TABLA 15-4: NECESIDADES DE RELOJ EXTERNO PARA TIMER1 Y TIMER2
Parám.

Símb.
Características
Mín
Típ
Máx
Unid.
Condiciones

40*
Tt0H
Ancho pulso alto T0CKI
Sin Prediv.
0,5TCY+20
---
---
ns
Debe coincidir
param. 42
Con Prediv.
10
---
---
ns
41*
Tt0L
Ancho pulso bajo T0CKI
Sin Prediv.
0,5TCY+20
---
---
ns
Debe coincidir
param. 42
Con Prediv.
10
---
---
ns
42*
Tt0P
Período T0CKI
Sin Prediv.
TCY + 40
---
---
ns

Con Prediv.
Mayor que:
20 ó
(TCY+40)/N
---
---
ns
N=valor Prediv.
(2, 4,... 256)
45*
Tt1H
Tiempo alto
T1CKI
Síncrono, Predivisor = 1
0,5TCY+20
---
---
ns
Debe coincidir
también el
parámetro 47
Síncr., Prediv. =
2, 4 y 8
Estándar(F)
---
---
---
ns
Extendida(LF)
---
---
---
ns
Asíncrono
Estándar(F)
---
---
---
ns
Extendida(LF)
---
---
---
ns
46*
Tt1L
Tiempo bajo
T1CKI
Síncrono, Predivisor = 1
0,5TCY+20
---
---
ns
Debe coincidir
también el
parámetro 47
Síncr., Prediv. =
2, 4 y 8
Estándar(F)
15
---
---
ns
Extendida(LF)
25
---
---
ns
Asíncrono
Estándar(F)
30
---
---
ns
Extendida(LF)
50
---
---
ns
47*
Tt1P
Período de
entrada T1CKI
Síncrono
Estándar(F)
Mayor que:
30 ó
(TCY+40)/N
---
---
ns
N=valor Prediv.
(1, 2, 4, 8)
Extendida(LF)
Mayor que:
50 ó
(TCY+40)/N
---
---
ns
N=valor Prediv.
(1, 2, 4, 8)
Asíncrono
Estándar(F)
60
---
---
ns
Extendida(LF)
100
---
---
ns

Ft1
Margen de frecuencia de entrada oscilador Timer1
(Oscilador habilitado activando el bit T1OSCEN)
DC
---
200
KHz

48
TCKEZtmr1
Retardo de increm. de Timer con respecto al
flanco de reloj externo
2Tosc
---
7Tosc
---

* Estos parámetros son característicos pero no están probados.


Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
TABLA 15-5: NECESIDADES DE CAPTURA/COMPARACIÓN/PWM (CCP1 Y CCP2)
Parám.

Símb.
Características
Mín
Típ
Máx
Unid.
Condiciones

50*
TLC
Tiempo bajo
entrada CCP1 y
CCP2
Sin Predivisor
0,5TCY+20
---
---
ns
Con
Predivisor
Estándar(F)
10
---
---
ns
Extendida(LF)
20
---
---
ns
51*
TccH
Tiempo alto
entrada CCP1 y
CCP2
Sin Predivisor
0,5TCY+20

---
ns

Con
Predivisor
10
10
---
---
ns
20
20
---
---
ns
52*
TccP
Período de entrada CCP1 y CCP2

NTcy403
---
---
ns
N=Valor del
Predivisor
(1, 4 o 16)
53*
TccR
Tiempo de subida de la salida
de CCP1 y CCP2
Estándar(F)
---
10
25
ns

Extendida(LF)
---
25
50
ns

54*
TccF
Tiempo de bajada de la salida
de CCP1 y CCP2
Estándar(F)
---
10
25
ns

Extendida(LF)
---
25
45
ns

* Estos parámetros son característicos pero no están probados.


Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
TABLA 15-6: NECESIDADES PUERTO SERVIDOR PARALELO (DISPOSITIVOS DE 40 PATILLAS)
Parám.

Símb.
Características
Mín
Típ
Máx
Unid.
Condiciones

62
TdtV2wrH
Dato válido en la entrada antes de WR.
o
CS.
(tset-up)
20
25

---
---

---
---
ns
ns

Sólo rango
extendido
63*
TwrH2dtI
Mantenimiento dato entrada
después de WR.
o
CS..
(thold)
Estándar(F)
20

Extendida(LF)
35

64
TrdL2dtV

---
---

---
---

80
90
ns
ns

Sólo rango
extendido
65
TrdH2dtI

10
---
30
ns

* Estos parámetros son característicos pero no están probados.


Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
TABLA 15-7: NECESIDADES MODO SPI
Parám.

Símb.
Características
Mín
Típ
Máx
Unid.
Cond.

70*
TssL2scH
Entrada SS.
a SCK.
o SCK.

TCY
---
---
ns

71*
TscH
Tiempo en alto de la entrada SCK (modo servidor)
TCY+20
---
---
ns

72*
TscL
Tiempo en bajo de la entrada SCK (modo servidor)
TCY+20
---
---
ns

73*
TdiV2scH,
TdiV2scL
Tiempo de anticipación de SDI respecto flanco
SCK
100
---
---
ns

74*
TscH2diL,
TscL2diL
Tiempo estable de SDI respecto a flanco de SCK
100
---
---
ns

75*
TdoR
Tiempo de subida del dato de
salida SDO
Estándar (F)
---
10
25
ns

Extendida (LF)
---
25
50
ns

76*
TdoF
Tiempo de bajada del dato de salida SDO
---
10
25
ns

77*
TssH2doZ
-SS.
a salida alta impedancia de SDO
10
---
50
ns

78*
TscR
Tiempo de subida de salida SCK
en modo maestro
Estándar (F)
---
10
25
ns

Extendida (LF)
---
25
50
ns

79*
TscF
Tiempo de bajada salida SCK modo maestro
---
10
25
ns

80*
TscH2doV,
TscL2doV
Dato de salida SDO válido
después de flanco SCK
Estándar (F)
---
---
50
ns

Extendida (LF)
---
---
145
ns

81*
TdoV2scH,
TdoV2scL
Tiempo de bajada del dato de salida SDO
TCY
---
---
ns

82*
TssL2doV
-SS.
a salida alta impedancia de SDO
---
---
50
ns
83*
TscH2ssH,
TscL2ssH
-SS.
después de flanco SCK
1,5TCY+40
---
---
ns

* Estos parámetros son característicos pero no están probados.


Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.

TABLA 15-8: NECESIDADES DE LOS BITS DE START Y STOP DEL BUS I2C
Parám.

Símb.
Características
Mín
Típ
Máx
Unid.
Cond.
90
TSU:STA
Antelación bit START
Modo 100KHz
4700
---
---
ns
Solamente en condición
repetición de START
Modo 400KHz
600
---
---
91
THD:STA
Tiempo estable bit START
Modo 100KHz
4000
---
---
ns
Después de este período
se genera el primer reloj
Modo 400KHz
600
---
---
92
TSU:STO
Antelación bit STOP
Modo 100KHz
4700
---
---
ns

Modo 400KHz
600
---
---
93
THD:STO
Tiempo estable bit STOP
Modo 100KHz
4000
---
---
ns

Modo 400KHz
600
---
---
TABLA 15-9: NECESIDADES DE LOS DATOS DEL BUS I2C
Parám.

Símbolo
Características
Mín
Máx
Unid.
Condiciones

100
THIGH
Tiempo alto de
reloj
100KHz
4,0
---
.
s
Mínima operación
1,5MHz
400KHz
0,6
Mínima operación
10MHz
Módulo SSP
1,5TCY

101
TLOW
Tiempo bajo de
reloj
100KHz
4,7
---
.
s
Mínima operación
1,5MHz
400KHz
1,3
Mínima operación
10MHz
Módulo SSP
1,5TCY

102
TR
Tiempo de subida
de
SDA y SCL
100KHz
---
1000
ns
400KHz
20+0,1Cb
300
Cb entre 10 y 400 pF
103
TF
Tiempo de bajada
de
SDA y SCL
100KHz
---
300
ns

400KHz
20+0,1Cb
Cb entre 10 y 400 pF
90
TSU:STA
Antelación bit
START
100KHz
4,7
---
.
s
Solamente en
condición
repetición de START
400KHz
0,6
91
THD:STA
Tiempo estable del
bit START
100KHz
4,0
---
.
s
Después de este
período
se genera el primer
reloj
400KHz
0,6
106
THD:DAT
Tiempo estable
dato de
entrada
100KHz
0
---
ns

400KHz
0
0,9
.
s
107
TSU:DAT
Antelación del dato
de
entrada
100KHz
250
---
ns
Nota 2
400KHz
100
92
TSU:STO
Antelación bit
STOP
100KHz
4,7
---
.
s

400KHz
0,6
109
TAA
Salida válida desde
reloj
100KHz
---
3500
ns
Nota 1
400KHz
---
---

110
TBUF
Tiempo de bus libre
100KHz
4,7
---
.
s
Tiempo bus libre antes
de
inicio nueva
transmisión
400KHz
1,3

Cb
Capacidad de carga del bus
---
400
pF

Nota 1: Como transmisor, el dispositivo proporciona un retardo mínimo para saltar


la región indefinida del flanco de
bajada de SCL para evitar generaciones indeseadas de condición de START y STOP.
2: Un dispositivo de modo rápido (400KHz) de bus I2C puede usarse en modo estándar d
e 100KHz, pero debe
respetarse el requisito de TSU:DAT .
250 ns. Esto se producirá automáticamente en caso de que el dispositivo
no alargue el período bajo de la señal SCL. Si el dispositivo alarga el período de la
señal SCL, sacará el bit de
datos próximo en la línea SDA TRmáx + TSU:DAT = 1000 + 250 = 1250 ns, antes de abandon
ar la línea SCL.
TABLA 15-10: NECESIDADES DE TRANSMISIÓN SÍNCRONA USART
Parám.

Símbolo
Características
Mín
Típ
Máx
Unid.
Cond.

120
TckH2dtV
SYNC XMIT (Maestro y Servidor)
Dato salida válido respecto a reloj alto
Estándar (F)
---
---
80
ns

Extendida (LF)
100
121
Tckrf
Tiempos de subida y bajada de reloj
(modo Maestro)
Estándar (F)
---
---
45
ns

Extendida (LF)
50
122
Tdtrf
Tiempos de subida y bajada del dato
de salida
Estándar (F)
---
---
45
ns

Extendida (LF)
50
Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.

TABLA 15-11: NECESIDADES DE RECEPCIÓN SÍNCRONA USART


Parám.

Símbolo
Características
Mín
Típ
Máx
Unid.
Cond.

125
TdtV2ckL
SYNC RCV (Maestro y Servidor)
Antelación de dato respecto a CK.
.

15
---
---
ns

126
TckL2dtI
Tiempo estable del dato después de
CK.
.

15
---
---
ns

Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
TABLA 15-12: PIC16F873/874/876/877-04 (COMERCIAL, INDUSTRIAL)
PIC16F873/874/876/877-20 (COMERCIAL, INDUSTRIAL)
PIC16LF873/874/876/877-04 (COMERCIAL, INDUSTRIAL)

Parám.

Símb.
Características

Mín
Típ
Máx
Unid.
Condiciones

A01
NR
Resolución
---
---
10bits
bit
VREF=VDD=5,12V
VSS .
VAIN .
VREF
A03
EIL
Error linealidad integral
---
---
< +/- 1
LSB
VREF=VDD=5,12V
VSS .
VAIN .
VREF
A04
EDL
Error linealidad diferencial
---
---
< +/- 1
LSB
VREF=VDD=5,12V
VSS .
VAIN .
VREF
A06
EOFF
Error desplazamiento (offset)
---
---
< +/- 2
LSB
VREF=VDD=5,12V
VSS .
VAIN .
VREF
A07
EGN
Error de ganancia
---
---
< +/- 1
LSB
VREF=VDD=5,12V
VSS .
VAIN .
VREF
A10
---
Monotonicidad(3)
---
garantizado
---
---
VSS .
VAIN .
VREF
A20
VREF
Voltaje de referencia
(VREF+ - VREF-)
2,0
---
VDD+0,3
V
Mínimo para
aseguarar 10 bits
de precisión
A21
VREF+
Tensión alta de referencia
AVDD-2,5

AVDD+0,3
V

A22
VREF-
Tensión baja de referencia
AVSS-0,3

VREF+ - 2
V

A25
VAIN
Tensión de entrada analógica
VSS 0,3
---
VREF +0,3
V

A30
ZAIN
Impedancia recomendada para
la fuente de tensión analógica
---
---
10,0
K.

A40
IAD
Corriente de
conversión A/D
Estándar
---
220
---
.
A
Corriente media
cuando A/D es
efectivo (Nota 1)
Extendida
---
90
---
.
A
A50
IREF
Corriente de la entrada VREF
(Nota 2)
10
---
1000
.
A
Durante adquisición
de VAIN. Basada en
la diferencia entre
VHOLD y VAIN, que
carga CHOD. Ver
Sección 11.1.
---
---
10
.
A
Durante el ciclo de
conversión A/D
* Estos parámetros son característicos pero no están probados.
Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
Nota 1: Cuando A/D está desactivado, solamente consume la pequeña corriente de fuga.
Las especificaciones de bajo consumo incluyen cualquier fuga desde el módulo A/D.
Nota 2: La corriente VREF se refiere a la patilla RA3 o VDD, la que esté seleccion
ada como entrada de referencia.
Nota 3: El resultado de la conversión A/D nunca disminuye con el incremento de ten
sión en la entrada, y no
pierde códigos.
TABLA 15-13: NECESIDADES DE CONVERSIÓN A/D
Parám.

Símb.
Características
Mín
Típ
Máx
Unid.
Condiciones

130
TAD
Período reloj A/D
Estándar
1,6
---
---
.
s
Basado TOSC, VREF ..
3,0V
Extendida
3,0
---
---
.
s
Basado TOSC, VREF .....
V
Estándar
2,0
4,0
6,0
.
s
Modo RC A/D.
Extendida
3,0
6,0
9,0
.
s
Modo RC A/D.
131
TCNV
Tiempo de conversión (no incluido
el tiempo S/H) (Nota 1)

---
12
TAD

132
TACQ
Tiempo de adquisición
Nota2
40
---
.
s

10*
---
---
.
s
El tiempo mínimo es el de
programación del amplifi-
cador. Éste se usará si la
nueva tensión de entrada no
ha cambiado más de 1 LSB
(p. e., 20,0 mV a 5,12 V)
desde la última tensión cap-
turada (mientras está activo
CHOLD.
134
TGO
Q4 a incio del reloj A/D
---
TOSC/2 .
.

---
---
Si se selecciona reloj RC
como fuente de A/D, se aña-
de un tiempo TCY antes del
inicio del reloj A/D. Esto
permite la ejecución de la
instrucción SLEEP.
* Estos parámetros son característicos pero no están probados.
Dato en columna .Típ.. es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros
sirven como guía de
diseño pero no están verificados.
.
Garantizada, esta especificación, para el diseño.
Nota 1: El registro ADRES se leerá en el siguiente ciclo TCY.
Nota 2: Para condiciones mínimas ver Sección 11.1
Leyenda: MM...M Información del número particular de Microchip.
XX...X Información específica del fabricante.
AA Código de año (últimas 2 cifras del año del calendario).
BB Código de semana (la primera semana de Enero será .01.)
C Código que facilita la planta de fabricación de la base de silicio.
O = Vendedor extranjero.
C = Línea de 5..
S = Línea de 6..
H = Línea de 8..
D Número de revisión de máscara.
E = Código de la planta de montaje, o región de origen en la que se montó el bloque.
Nota: En el caso de que no esté marcado el número particular de Microchip en una línea
, se habrá
juntado en la siguiente, para limitar el número de caracteres disponible por la es
pecificación
del fabricante.

.
La marcación estándar en dispositivos OTP consiste en un número particular de Microchi
p, código
de año, código de semana, código de planta, revisión de máscara y código de montaje.
Unidades

PULGADAS
MILÍMETROS
Límites dimensión

MÍN
NOM
MÁX
MÍN
NOM
MÁX
Distancia entre filas

0,300

7,62

Número de patillas
n

28

28
Paso entre patillas
p

0,100

2,54

Ancho patilla
B
0,016
0,019
0,022
0,41
0,48
0,56
Ancho parte alta de patilla
B1
0,040
0,053
0,065
1,02
1,33
1,65
Radio de taladro en placa
R
0,000
0,005
0,010
0,00
0,13
0,25
Grosor de patilla
c
0,008
0,010
0,012
0,20
0,25
0,30
Altura desde plano de placa
A
0,140
0,150
0,160
3,56
3,81
4,06
Altura desde placa a centro
A1
0,070
0,090
0,110
1,78
2,29
2,79
Separación de la placa base
A2
0,015
0,020
0,025
0,38
0,51
0,64
Largo de patilla en taladro
L
0,125
0,130
0,135
3,18
3,30
3,43
Longitud de encapsulado
D
1,345
1,365
1,385
34,16
34,67
35,18
Ancho hasta doblado de patillas
E
0,280
0,288
0,295
7,11
7,30
7,49
Ancho de cápsula plástica
E1
0,270
0,283
0,295
6,86
7,18
7,49
Distancia extrema entre filas de patillas
eB
0,320
0,350
0,380
8,13
8,89
9,65
Ángulo de biselado de cápsula
.

5
10
15
5
10
15
Ángulo de biselado inferior de cápsula
.

5
10
15
5
10
15
Unidades

PULGADAS
MILÍMETROS
Límites dimensión

MÍN
NOM
MÁX
MÍN
NOM
MÁX
Paso entre patillas
p

0,050

1,27

Número de patillas
n

28

28
Altura desde plano de placa
A
0,093
0,099
0,104
2,36
2,50
2,64
Altura desde placa a centro
A1
0,048
0,058
0,068
1,22
1,47
1,73
Separación de la placa base
A2
0,004
0,008
0,011
0,10
0,19
0,28
Longitud de encapsulado
D
0,700
0,706
0,712
17,78
17,93
18,08
Ancho hasta doblado de patillas
E
0,292
0,296
0,299
7,42
7,51
7,59
Ancho de cápsula plástica
E1
0,394
0,407
0,419
10,01
10,33
10,64
Biselado superior indicativo
X
0,010
0,020
0,029
0,25
0,50
0,74
Radio de doblado superior
R1
0,005
0,005
0,010
0,13
0,13
0,25
Radio de doblado inferior
R2
0,005
0,005
0,010
0,13
0,13
0,25
Largo de apoyo en placa, de patilla
L
0,011
0,016
0,021
0,28
0,41
0,53
Ángulo de apoyo en placa
.
.

0
4
8
0
4
8
Distancia desde cápsula hasta inicio de doblado superior
L1
0,010
0,015
0,020
0,25
0,38
0,51
Grosor de patilla
c
0,009
0,011
0,012
0,23
0,27
0,30
Ancho patilla
B
0,014
0,017
0,019
0,36
0,42
0,48
Ángulo de biselado de cápsula
.

0
12
15
0
12
15
Ángulo de biselado inferior de cápsula
.

0
12
15
0
12
15
Unidades

PULGADAS
MILÍMETROS
Límites dimensión

MÍN
NOM
MÁX
MÍN
NOM
MÁX
Distancia entre filas

0,600

15,24

Número de patillas
n

40

40
Paso entre patillas
p

0,100

2,54

Ancho patilla
B
0,016
0,018
0,020
0,41
0,46
0,51
Ancho parte alta de patilla
B1
0,045
0,050
0,055
1,14
1,27
1,40
Radio de taladro en placa
R
0,000
0,005
0,010
0,00
0,13
0,25
Grosor de patilla
c
0,009
0,010
0,011
0,23
0,25
0,28
Altura desde plano de placa
A
0,110
0,160
0,160
2,79
4,06
4,06
Altura desde placa a centro
A1
0,073
0,093
0,113
1,85
2,36
2,87
Separación de la placa base
A2
0,020
0,020
0,040
0,51
0,51
1,02
Largo de patilla en taladro
L
0,125
0,130
0,135
3,18
3,30
3,43
Longitud de encapsulado
D
2,013
2,018
2,023
51,13
51,26
51,38
Ancho hasta doblado de patillas
E
0,530
0,535
0,540
13,46
13,59
13,72
Ancho de cápsula plástica
E1
0,545
0,565
0,585
13,84
14,35
14,86
Distancia extrema entre filas de patillas
eB
0,630
0,610
0,670
16,00
15,49
17,02
Ángulo de biselado de cápsula
.

5
10
15
5
10
15
Ángulo de biselado inferior de cápsula
.

5
10
15
5
10
15
Unidades

PULGADAS
MILÍMETROS
Límites dimensión

MÍN
NOM
MÁX
MÍN
NOM
MÁX
Paso entre patillas
p

0,031

0,80

Número de patillas
n

44

44
Ancho hasta centro de patillas extremas
n1

11

11

Altura desde plano de placa


A
0,039
0,043
0,047
1,00
1,10
1,20
Altura desde placa a centro
A1
0,015
0,025
0,035
0,38
0,64
0,89
Separación de la placa base
A2
0,002
0,004
0,006
0,05
0,10
0,15
Radio de doblado superior
R1
0,003
0,003
0,010
0,08
0,08
0,25
Radio de doblado inferior
R2
0,003
0,006
0,008
0,08
0,14
0,20
Largo de apoyo en placa, de patilla
L
0,005
0,010
0,015
0,13
0,25
0,38
Ángulo de apoyo en placa
.
.

0
3,5
7
0
3,5
7
Distancia desde cápsula hasta inicio de doblado superior
L1
0,003
0,008
0,013
0,08
0,20
0,33
Grosor de patilla
c
0,004
0,006
0,008
0,09
0,15
0,20
Ancho patilla
B
0,012
0,015
0,018
0,30
0,38
0,45
Longitud entre extremos de patillas extremas lado 1
D1
0,463
0,472
0,482
11,75
12,00
12,25
Longitud entre extremos de patillas extremas lado 2
E1
0,463
0,472
0,482
11,75
12,00
12,25
Longitud de encapsulado lado 1
D
0,390
0,394
0,398
9,90
10,00
10,10
Longitud de encapsulado lado 2
E
0,390
0,394
0,398
9,90
10,00
10,10
Biselado esquina indicativo de patilla 1
X
0,025
0,035
0,045
0,64
0,89
1,14
Ángulo de biselado de cápsula
.

5
10
15
5
10
15
Ángulo de biselado inferior de cápsula
.

5
12
15
5
12
15
Unidades

PULGADAS
MILÍMETROS
Límites dimensión

MÍN
NOM
MÁX
MÍN
NOM
MÁX
Paso entre patillas
p

0,031

0,80

Número de patillas
n

44

44
Ancho hasta centro de patillas extremas
n1

11

11

Altura desde plano de placa


A
0,079
0,086
0,093
2,00
2,18
2,35
Altura desde placa a centro
A1
0,032
0,044
0,056
0,81
1,11
1,41
Separación de la placa base
A2
0,002
0,006
0,010
0,05
0,15
0,25
Radio de doblado superior
R1
0,005
0,005
0,010
0,13
0,13
0,25
Radio de doblado inferior
R2
0,005
0,012
0,015
0,13
0,30
0,38
Largo de apoyo en placa, de patilla
L
0,015
0,020
0,025
0,38
0,51
0,64
Ángulo de apoyo en placa
.
.

0
3,5
7
0
3,5
7
Distancia desde cápsula hasta inicio de doblado superior
L1
0,011
0,016
0,021
0,28
0,41
0,53
Grosor de patilla
c
0,005
0,007
0,009
0,13
0,18
0,23
Ancho patilla
B
0,012
0,015
0,018
0,30
0,37
0,45
Longitud entre extremos de patillas extremas lado 1
D1
0,510
0,520
0,530
12,95
13,20
13,45
Longitud entre extremos de patillas extremas lado 2
E1
0,510
0,520
0,530
12,95
13,20
13,45
Longitud de encapsulado lado 1
D
0,390
0,394
0,398
9,90
10,00
10,10
Longitud de encapsulado lado 2
E
0,390
0,394
0,398
9,90
10,00
10,10
Biselado esquina indicativo de patilla 1
X
0,025
0,035
0,045
0,64
0,89
1,14
Ángulo de biselado de cápsula
.

5
10
15
5
10
15
Ángulo de biselado inferior de cápsula
.

5
12
15
5
12
15
Unidades

PULGADAS
MILÍMETROS
Límites dimensión

MÍN
NOM
MÁX
MÍN
NOM
MÁX
Número de patillas
n

44

44

Paso entre patillas


p

0,050

1,27
Altura desde plano de placa
A
0,165
0,173
0,180
4,19
4,38
4,57
Altura desde placa a centro
A1
0,095
0,103
0,110
2,41
2,60
2,79
Separación de la placa base
A2
0,015
0,023
0,030
0,38
0,57
0,76
Altura del bisel del lado 1
A3
0,024
0,029
0,034
0,61
0,74
0,86
Achaflanado de la esquina 1
CH1
0,040
0,045
0,050
1,02
1,14
1,27
Achaflanado de cualquier otra esquina
CH2
0,000
0,005
0,010
0,00
0,13
0,25
Longitud entre extremos de patillas extremas lado 2
E1
0,685
0,690
0,695
17,40
17,53
17,65
Longitud entre extremos de patillas extremas lado 1
D1
0,685
0,690
0,695
17,40
17,53
17,65
Longitud de encapsulado lado 2
E
0,650
0,653
0,656
16,51
16,59
16,66
Longitud de encapsulado lado 1
D
0,650
0,653
0,656
16,51
16,59
16,66
Ancho de base
E2
0,610
0,620
0,630
15,49
15,75
16,00
Distancia centros de curvatura de patillas extremas
D2
0,610
0,620
0,630
15,49
15,75
16,00
Ancho hasta centro de patillas extremas
n1

11

11

Grosor de patilla
c
0,008
0,010
0,012
0,20
0,25
0,30
Ancho superior de patilla
B1
0,026
0,029
0,032
0,66
0,74
0,81
Ancho inferior de patilla
B
0,015
0,018
0,021
0,38
0,46
0,53
Largo parte superior de patilla
L
0,050
0,058
0,065
1,27
1,46
1,65
Radio de doblado superior
R1
0,003
0,005
0,010
0,08
0,13
0,25
Radio de doblado inferior
R2
0,015
0,025
0,035
0,38
0,64
0,89
Ángulo de biselado de cápsula
.

0
5
10
0
5
10
Ángulo de biselado inferior de cápsula
.

0
5
10
0
5
10

Você também pode gostar