Professional Documents
Culture Documents
Data Sheet
18/20/28-Pin Enhanced FLASH
Microcontrollers with
nanoWatt Technology
• Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.
• There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip's Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
• Microchip is willing to work with the customer who is concerned about the integrity of their code.
• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
PIC16F88
4 15 RA6/OSC2/CLKO
• Two-Speed Oscillator Start-up
VSS 5 14 VDD
RB7/AN6/PGD/
Oscillators: RB0/INT/CCP1(1) 6 13 T1OSI
• Three Crystal modes: RB1/SDI/SDA 7 12 RB6/AN5/PGC/
T1OSO/T1CKI
- LP, XT, HS: up to 20 MHz RB2/SDO/RX/DT 8 11 RB5/SS/TX/CK
• Two External RC modes (1)
RB3/PGM/CCP1 9 10 RB4/SCK/SCL
• One External Clock mode:
- ECIO: up to 20 MHz Note 1: The CCP1 pin is determined by CCPMX in
• Internal oscillator block: Configuration Word 1 register.
RA2/AN2/CVREF 1 18 RA1/AN1
RA3/AN3/C1OUT 2 17 RA0/AN0
RA4/T0CKI/C2OUT 3 16 RA7/OSC1/CLKI
PIC16F87
RA5/MCLR/VPP 4 15 RA6/OSC2/CLKO
VSS 5 14 VDD
RB0/INT/CCP1(1) 6 13 RB7/PGD/T1OSI
RB1/SDI/SDA 7 12 RB6/PGC/T1OSO/T1CKI
RB2/SDO/RX/DT 8 11 RB5/SS/TX/CK
RB3/PGM/CCP1(1) 9 10 RB4/SCK/SCL
20-Pin SSOP
RA2/AN2/CVREF 1 20 RA1/AN1
RA3/AN3/C1OUT 2 19 RA0/AN0
RA4/T0CKI/C2OUT 3 18 RA7/OSC1/CLKI
PIC16F87
RA5/MCLR/VPP 4 17 RA6/OSC2/CLKO
VSS 5 16 VDD
AVSS 6 15 AVDD
RB0/INT/CCP1(1) 7 14 RB7/PGD/T1OSI
RB1/SDI/SDA 8 13 RB6/PGC/T1OSO/T1CKI
RB2/SDO/RX/DT 9 12 RB5/SS/TX/CK
RB3/PGM/CCP1(1) 10 11 RB4/SCK/SCL
RA2/AN2/CVREF/VREF- 1 18 RA1/AN1
RA3/AN3/VREF+/C1OUT 2 17 RA0/AN0
RA4/AN4/T0CKI/C2OUT 3 16 RA7/OSC1/CLKI
PIC16F88
RA5/MCLR/VPP 4 15 RA6/OSC2/CLKO
VSS 5 14 VDD
RB0/INT/CCP1(1) 6 13 RB7/AN6/PGD/T1OSI
RB1/SDI/SDA 7 12 RB6/AN5/PGC/T1OSO/T1CKI
RB2/SDO/RX/DT 8 11 RB5/SS/TX/CK
RB3/PGM/CCP1(1) 9 10 RB4/SCK/SCL
20-Pin SSOP
RA2/AN2/CVREF/VREF- 1 20 RA1/AN1
RA3/AN3/VREF+/C1OUT 2 19 RA0/AN0
RA4/AN4/T0CKI/C2OUT 3 18 RA7/OSC1/CLKI
PIC16F88
RA5/MCLR1/VPP 4 17 RA6/OSC2/CLKO
VSS 5 16 VDD
AVSS 6 15 AVDD
RB0/INT/CCP1(1) 7 14 RB7/AN6/PGD/T1OSI
RB1/SDI/SDA 8 13 RB6/AN5/PGC/T1OSO/T1CKI
RB2/SDO/RX/DT 9 12 RB5/SS/TX/CK
RB3/PGM/CCP1(1) 10 11 RB4/SCK/SCL
RA4/T0CKI/C2OUT
RA3/AN3/C1OUT
RA2/AN2/CVREF
28-Pin QFN
RA1/AN1
RA0/AN0
NC
NC
28
27
26
25
24
23
22
RA5/MCLR/VPP 1 21 RA7/OSC1/CLKI
NC 2 20 RA6/OSC2/CLKO
VSS 3 19 VDD
NC 4 PIC16F87 18 NC
AVSS 5 17 AVDD
NC 6 16 RB7/PGD/T1OSI
RB0/INT/CCP1(1) 7 15 RB6/PGC/T1OSO/T1CKI
10
11
12
13
14
8
9
NC
NC
RB1/SDI/SDA
RB2/SDO/RX/DT
RB3/PGM/CCP1(1)
RB5/SS/TX/CK
RB4/SCK/SCL
RA4/AN4/T0CKI/C2OUT
RA3/AN3/VREF+/C1OUT
RA2/AN2/CVREF/VREF-
28-Pin QFN
RA1/AN1
RA0/AN0
NC
NC
28
27
26
25
24
23
22
RA5/MCLR/VPP 1 21 RA7/OSC1/CLKI
NC 2 20 RA6/OSC2/CLKO
VSS 3 19 VDD
NC 4 PIC16F88 18 NC
AVSS 5 17 AVDD
NC 6 16 RB7/AN6/PGD/T1OSI
RB0/INT/CCP1(1) 7 15 RB6/AN5/PGC/T1OSO/T1CKI
10
11
12
13
14
8
9
NC
NC
RB1/SDI/SDA
RB2/SDO/RX/DT
RB3/PGM/CCP1(1)
RB5/SS/TX/CK
RB4/SCK/SCL
Errata
An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
of silicon and revision of document to which it applies.
To determine if an errata sheet exists for a particular device, please check with one of the following:
• Microchip’s Worldwide Web site; http://www.microchip.com
• Your local Microchip sales office (see last page)
• The Microchip Corporate Literature Center; U.S. FAX: (480) 792-7277
When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include liter-
ature number) you are using.
3 MUX
Power-up
Timer
Instruction Oscillator
Decode & Start-up Timer
ALU
Control
Power-on
Reset 8
Timing Watchdog
Generation Timer W reg
OSC1/CLKI Brown-out
OSC2/CLKO Reset
Data EE
USART CCP1 Comparators
256 Bytes
3 MUX
Power-up
Timer
Instruction Oscillator
Decode & Start-up Timer
ALU
Control
Power-on
Reset 8
Timing Watchdog
Generation Timer W reg
OSC1/CLKI Brown-out
OSC2/CLKO Reset
Data EE
USART CCP1 Comparators
256 Bytes
RA7/OSC1/CLKI 16 18 21
RA7 I/O ST Bidirectional I/O pin.
OSC1 I ST/CMOS(3) Oscillator crystal input.
CLKI I – External clock source input.
Legend: I = Input O = Output I/O = Input/Output P = Power
– = Not used TTL = TTL Input ST = Schmitt Trigger Input
Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.
2: This buffer is a Schmitt Trigger input when used in Serial Programming mode.
3: This buffer is a Schmitt Trigger input when configured in RC Oscillator mode and a CMOS input otherwise.
4: PIC16F88 devices only.
5: The CCP1 pin is determined by CCPMX in Configuration Word 1 register.
RP1:RP0 Bank
00 0
01 1
10 2
11 3
Each bank extends up to 7Fh (128 bytes). The lower
locations of each bank are reserved for the Special
Function Registers. Above the Special Function Regis-
ters are General Purpose Registers, implemented as
static RAM. All implemented banks contain SFRs.
Some “high use” SFRs from one bank may be mirrored
in another bank for code reduction and quicker access
(e.g., the STATUS register is in Banks 0-3).
Note: EEPROM data memory description can be
found in Section 3.0 “Data EEPROM and
FLASH Program Memory” of this data
sheet.
Indirect addr.(*) 00h Indirect addr.(*) 80h Indirect addr.(*) 100h Indirect addr.(*) 180h
TMR0 01h OPTION 81h TMR0 101h OPTION 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 WDTCON 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
07h 87h 107h 187h
08h 88h 108h 188h
09h 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 Reserved(1) 18Eh
TMR1H 0Fh OSCCON 8Fh EEADRH 10Fh Reserved(1) 18Fh
T1CON 10h OSCTUNE 90h 110h 190h
TMR2 11h 91h
T2CON 12h PR2 92h
SSPBUF 13h SSPADD 93h
SSPCON1 14h SSPSTAT 94h
CCPR1L 15h 95h
CCPR1H 16h 96h
General General
CCP1CON 17h 97h Purpose Purpose
RCSTA 18h TXSTA 98h Register Register
TXREG 19h SPBRG 99h 16 Bytes 16 Bytes
RCREG 1Ah 9Ah
1Bh 9Bh
1Ch CMCON 9Ch
1Dh CVRCON 9Dh
1Eh 9Eh
1Fh 9Fh 11Fh 19Fh
20h A0h 120h 1A0h
General General General
Purpose Purpose Purpose
General Register Register Register
Purpose 80 Bytes 80 Bytes 80 Bytes
Register EFh 16Fh 1EFh
F0h 170h 1F0h
96 Bytes accesses accesses accesses
70h-7Fh 70h-7Fh 70h - 7Fh
Indirect addr.(*) 00h Indirect addr.(*) 80h Indirect addr.(*) 100h Indirect addr.(*) 180h
TMR0 01h OPTION 81h TMR0 101h OPTION 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 WDTCON 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
07h 87h 107h 187h
08h 88h 108h 188h
09h 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 Reserved(1) 18Eh
TMR1H 0Fh OSCCON 8Fh EEADRH 10Fh Reserved(1) 18Fh
T1CON 10h OSCTUNE 90h 110h 190h
TMR2 11h 91h
T2CON 12h PR2 92h
SSPBUF 13h SSPADD 93h
SSPCON1 14h SSPSTAT 94h
CCPR1L 15h 95h
CCPR1H 16h 96h
General General
CCP1CON 17h 97h Purpose Purpose
RCSTA 18h TXSTA 98h Register Register
TXREG 19h SPBRG 99h 16 Bytes 16 Bytes
RCREG 1Ah 9Ah
1Bh ANSEL 9Bh
1Ch CMCON 9Ch
1Dh CVRCON 9Dh
ADRESH 1Eh ADRESL 9Eh
ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh
20h A0h 120h 1A0h
General General General
Purpose Purpose Purpose
General Register Register Register
Purpose 80 Bytes 80 Bytes 80 Bytes
Register EFh 16Fh 1EFh
F0h 170h 1F0h
96 Bytes
accesses accesses accesses
70h-7Fh 70h-7Fh 70h - 7Fh
Bank 0
00h(2) INDF Addressing this location uses contents of FSR to address data memory 0000 0000 26, 135
(not a physical register)
01h TMR0 Timer0 Module Register xxxx xxxx 69
02h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000
03h(2) STATUS IRP RP1 RP0 TO PD Z DC C 0001 1xxx 17
04h(2) FSR Indirect Data Memory Address Pointer xxxx xxxx 135
05h PORTA PORTA Data Latch when written; PORTA pins when read (PIC16F87) xxxx 0000 52
PORTA Data Latch when written; PORTA pins when read (PIC16F88) xxx0 0000
06h PORTB PORTB Data Latch when written; PORTB pins when read (PIC16F87) xxxx xxxx 58
PORTB Data Latch when written; PORTB pins when read (PIC16F88) 00xx xxxx
07h — Unimplemented — —
08h — Unimplemented — —
09h — Unimplemented — —
0Ah(1,2) PCLATH — — — Write Buffer for the upper 5 bits of the Program Counter ---0 0000 135
0Bh(2) INTCON GIE PEIE TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 19, 69,
77
0Ch PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF -000 0000 21, 77
0Dh PIR2 OSFIF CMIF — EEIF — — — — 00-0 ---- 23, 34
0Eh TMR1L Holding Register for the Least Significant Byte of the 16-bit TMR1 Register xxxx xxxx 77, 83
0Fh TMR1H Holding Register for the Most Significant Byte of the 16-bit TMR1 Register xxxx xxxx 77, 83
10h T1CON — T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON -000 0000 72, 83
11h TMR2 Timer2 Module Register 0000 0000 80, 85
12h T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 80, 85
13h SSPBUF Synchronous Serial Port Receive Buffer/Transmit Register xxxx xxxx 90, 95
14h SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 89, 95
15h CCPR1L Capture/Compare/PWM Register 1 (LSB) xxxx xxxx 83, 85
16h CCPR1H Capture/Compare/PWM Register 1 (MSB) xxxx xxxx 83, 85
17h CCP1CON — — CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 81, 83
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 98, 99
19h TXREG USART Transmit Data Register 0000 0000 103
1Ah RCREG USART Receive Data Register 0000 0000 105
1Bh — Unimplemented — —
1Ch — Unimplemented — —
1Dh — Unimplemented — —
1Eh ADRESH(4) A/D Result Register High Byte xxxx xxxx 120
1Fh ADCON0(4) ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON 0000 00-0 114, 120
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
Shaded locations are unimplemented, read as ‘0’.
Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for PC<12:8>, whose
contents are transferred to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: RA5 is an input only; the state of the TRISA5 bit has no effect and will always read ‘1’.
4: PIC16F88 device only.
Bank 1
80h(2) INDF Addressing this location uses contents of FSR to address data memory 0000 0000 26, 135
(not a physical register)
81h OPTION RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 18, 69
82h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 135
83h(2) STATUS IRP RP1 RP0 TO PD Z DC C 0001 1xxx 17
84h(2) FSR Indirect Data Memory Address Pointer xxxx xxxx 135
85h TRISA TRISA7 TRISA6 TRISA5(3) PORTA Data Direction Register (TRISA<4:0>) 1111 1111 52, 126
86h TRISB PORTB Data Direction Register 1111 1111 58, 85
87h — Unimplemented — —
88h — Unimplemented — —
89h — Unimplemented — —
8Ah(1,2) PCLATH — — — Write Buffer for the upper 5 bits of the Program Counter ---0 0000 135
8Bh(2) INTCON GIE PEIE TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 19, 69,
77
8Ch PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE -000 0000 20, 80
8Dh PIE2 OSFIE CMIE — EEIE — — — — 00-0 ---- 22, 34
8Eh PCON — — — — — — POR BOR ---- --qq 24
8Fh OSCCON — IRCF2 IRCF1 IRCF0 OSTS IOFS SCS1 SCS0 -000 0000 40
90h OSCTUNE — — TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 --00 0000 38
91h — Unimplemented — —
92h PR2 Timer2 Period Register 1111 1111 80, 85
93h SSPADD Synchronous Serial Port (I2C mode) Address Register 0000 0000 95
94h SSPSTAT SMP CKE D/A P S R/W UA BF 0000 0000 88, 95
95h — Unimplemented — —
96h — Unimplemented — —
97h — Unimplemented — —
98h TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000 -010 97, 99
99h SPBRG Baud Rate Generator Register 0000 0000 99, 103
9Ah — Unimplemented — 120
9Bh ANSEL(4) — ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0 -111 1111 120
9Ch CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0111 121,
126, 128
9Dh CVRCON CVREN CVROE CVRR — CVR3 CVR2 CVR1 CVR0 000- 0000 126, 128
9Eh ADRESL(4) A/D Result Register Low Byte xxxx xxxx 120
9Fh ADCON1(4) ADFM ADCS2 VCFG1 VCFG0 — — — — 0000 ---- 52, 115,
120
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
Shaded locations are unimplemented, read as ‘0’.
Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for PC<12:8>, whose
contents are transferred to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: RA5 is an input only; the state of the TRISA5 bit has no effect and will always read ‘1’.
4: PIC16F88 device only.
Bank 2
100h(2) INDF Addressing this location uses contents of FSR to address data memory 0000 0000 26, 135
(not a physical register)
101h TMR0 Timer0 Module Register xxxx xxxx 69
102h(2) PCL Program Counter's (PC) Least Significant Byte 0000 0000 135
103h(2) STATUS IRP RP1 RP0 TO PD Z DC C 0001 1xxx 17
(2) 135
104h FSR Indirect Data Memory Address Pointer xxxx xxxx
105h WDTCON — — — WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN ---0 1000 142
106h PORTB PORTB Data Latch when written; PORTB pins when read xxxx xxxx 58
107h — Unimplemented — —
108h — Unimplemented — —
109h — Unimplemented — —
10Ah(1,2) PCLATH — — — Write Buffer for the upper 5 bits of the Program Counter ---0 0000 135
10Bh(2) INTCON GIE PEIE TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 19, 69,
77
10Ch EEDATA EEPROM Data Register Low Byte xxxx xxxx 34
10Dh EEADR EEPROM Address Register Low Byte xxxx xxxx 34
10Eh EEDATH — — EEPROM Data Register High Byte --xx xxxx 34
10Fh EEADRH — — — — EEPROM Address Register High Byte ---- xxxx 34
Bank 3
180h(2) INDF Addressing this location uses contents of FSR to address data memory 0000 0000 135
(not a physical register)
181h OPTION RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 18, 69
182h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 135
(2) 17
183h STATUS IRP RP1 RP0 TO PD Z DC C 0001 1xxx
(2) 135
184h FSR Indirect Data Memory Address Pointer xxxx xxxx
185h — Unimplemented — —
186h TRISB PORTB Data Direction Register 1111 1111 58, 83
187h — Unimplemented — —
188h — Unimplemented — —
189h — Unimplemented — —
18Ah(1,2) PCLATH — — — Write Buffer for the upper 5 bits of the Program Counter ---0 0000 135
18Bh(2) INTCON GIE PEIE TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 19, 69,
77
18Ch EECON1 EEPGD — — FREE WRERR WREN WR RD x--x x000 28, 34
18Dh EECON2 EEPROM Control Register2 (not a physical register) ---- ---- 34
18Eh — Reserved, maintain clear 0000 0000 —
18Fh — Reserved, maintain clear 0000 0000 —
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
Shaded locations are unimplemented, read as ‘0’.
Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for PC<12:8>, whose
contents are transferred to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: RA5 is an input only; the state of the TRISA5 bit has no effect and will always read ‘1’.
4: PIC16F88 device only.
bit 7 IRP: Register Bank Select bit (used for indirect addressing)
1 = Bank 2, 3 (100h - 1FFh)
0 = Bank 0, 1 (00h - FFh)
bit 6-5 RP<1:0>: Register Bank Select bits (used for direct addressing)
11 = Bank 3 (180h - 1FFh)
10 = Bank 2 (100h - 17Fh)
01 = Bank 1 (80h - FFh)
00 = Bank 0 (00h - 7Fh)
Each bank is 128 bytes.
bit 4 TO: Time-out bit
1 = After power-up, CLRWDT instruction, or SLEEP instruction
0 = A WDT time-out occurred
bit 3 PD: Power-down bit
1 = After power-up or by the CLRWDT instruction
0 = By execution of the SLEEP instruction
bit 2 Z: Zero bit
1 = The result of an arithmetic or logic operation is zero
0 = The result of an arithmetic or logic operation is not zero
bit 1 DC: Digit carry/borrow bit (ADDWF, ADDLW, SUBLW and SUBWF instructions)(1)
1 = A carry-out from the 4th low order bit of the result occurred
0 = No carry-out from the 4th low order bit of the result
bit 0 C: Carry/borrow bit (ADDWF, ADDLW, SUBLW and SUBWF instructions)(1,2)
1 = A carry-out from the Most Significant bit of the result occurred
0 = No carry-out from the Most Significant bit of the result occurred
Note 1: For borrow, the polarity is reversed. A subtraction is executed by adding the two’s
complement of the second operand.
2: For rotate (RRF, RLF) instructions, this bit is loaded with either the high or low order
bit of the source register.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
REGISTER 2-3: INTCON: INTERRUPT CONTROL REGISTER (ADDRESS 0Bh, 8Bh, 10Bh, 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 TMR0IE INTE RBIE TMR0IF INTF RBIF
bit 7 bit 0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
The INDF register is not a physical register. Addressing EXAMPLE 2-2: INDIRECT ADDRESSING
the INDF register will cause indirect addressing.
MOVLW 0x20 ;initialize pointer
Indirect addressing is possible by using the INDF reg- MOVWF FSR ;to RAM
ister. Any instruction using the INDF register actually NEXT CLRF INDF ;clear INDF register
accesses the register pointed to by the File Select Reg- INCF FSR,F ;inc pointer
ister, FSR. Reading the INDF register itself, indirectly BTFSS FSR,4 ;all done?
GOTO NEXT ;no clear next
(FSR = 0) will read 00h. Writing to the INDF register
CONTINUE
indirectly results in a no operation (although status bits
: ;yes continue
may be affected). An effective 9-bit address is obtained
by concatenating the 8-bit FSR register and the IRP bit
(STATUS<7>) as shown in Figure 2-5.
Data
Memory(1)
Note 1: For register file map detail, see Figure 2-2 or Figure 2-3.
• EECON1 If the device contains less memory than the full address
reach of the address register pair, the Most Significant
• EECON2
bits of the registers are not implemented. For example,
• EEDATA if the device has 128 bytes of data EEPROM, the Most
• EEDATH Significant bit of EEADR is not implemented on access
• EEADR to data EEPROM.
• EEADRH
When interfacing the data memory block, EEDATA
3.2 EECON1 and EECON2 Registers
holds the 8-bit data for read/write and EEADR holds the EECON1 is the control register for memory accesses.
address of the EEPROM location being accessed. The
Control bit EEPGD determines if the access will be a
PIC16F87/88 devices have 256 bytes of data
program or data memory access. When clear, as it is
EEPROM with an address range from 00h to 0FFh.
when reset, any subsequent operations will operate on
When writing to unimplemented locations, the charge
the data memory. When set, any subsequent
pump will be turned off.
operations will operate on the program memory.
When interfacing the program memory block, the
Control bits RD and WR initiate read and write,
EEDATA and EEDATH registers form a two-byte word
respectively. These bits cannot be cleared, only set in
that holds the 14-bit data for read/write, and the
software. They are cleared in hardware at completion
EEADR and EEADRH registers form a two-byte word
of the read or write operation. The inability to clear the
that holds the 13-bit address of the EEPROM location
WR bit in software prevents the accidental, premature
being accessed. The PIC16F87/88 devices have 4K
termination of a write operation.
words of program FLASH with an address range from
0000h to 0FFFh. Addresses above the range of the The WREN bit, when set, will allow a write or erase
respective device will wraparound to the beginning of operation. On power-up, the WREN bit is clear. The
program memory. WRERR bit is set when a write (or erase) operation is
interrupted by a MCLR, or a WDT Time-out Reset dur-
The EEPROM data memory allows single byte read
ing normal operation. In these situations, following
and write. The FLASH program memory allows single
RESET, the user can check the WRERR bit and rewrite
word reads and four-word block writes. Program mem-
the location. The data and address will be unchanged
ory writes must first start with a 32-word block erase,
in the EEDATA and EEADR registers.
then write in 4-word blocks. A byte write in data
EEPROM memory automatically erases the location Interrupt flag bit, EEIF in the PIR2 register, is set when
and writes the new data (erase before write). write is complete. It must be cleared in software.
The write time is controlled by an on-chip timer. The EECON2 is not a physical register. Reading EECON2
write/erase voltages are generated by an on-chip will read all ‘0’s. The EECON2 register is used
charge pump, rated to operate over the voltage range exclusively in the EEPROM write sequence.
of the device for byte or word operations.
When the device is code protected, the CPU may
continue to read and write the data EEPROM memory.
Depending on the settings of the write protect bits, the
device may or may not be able to write certain blocks
of the program memory; however, reads of the program
memory are allowed. When code protected, the device
programmer can no longer access data or program
memory; this does NOT inhibit internal reads or writes.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’ S = Set only
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
To read a data memory location, the user must write the 1. If step 10 is not implemented, check the WR bit
address to the EEADR register, clear the EEPGD con- to see if a write is in progress.
trol bit (EECON1<7>) and then set control bit RD 2. Write the address to EEADR. Make sure that the
(EECON1<0>). The data is available in the very next address is not larger than the memory size of
cycle in the EEDATA register; therefore, it can be read the device.
in the next instruction (see Example 3-1). EEDATA will 3. Write the 8-bit data value to be programmed in
hold this value until another read or until it is written to the EEDATA register.
by the user (during a write operation). 4. Clear the EEPGD bit to point to EEPROM data
The steps to reading the EEPROM data memory are: memory.
1. Write the address to EEADR. Make sure that the 5. Set the WREN bit to enable program operations.
address is not larger than the memory size of 6. Disable interrupts (if enabled).
the device. 7. Execute the special five instruction sequence:
2. Clear the EEPGD bit to point to EEPROM data Write 55h to EECON2 in two steps (first to W,
memory. then to EECON2).
3. Set the RD bit to start the read operation. Write AAh to EECON2 in two steps (first to W,
4. Read the data from the EEDATA register. then to EECON2).
Set the WR bit.
EXAMPLE 3-1: DATA EEPROM READ
8. Enable interrupts (if using interrupts).
BANKSEL EEADR ; Select Bank of EEADR
MOVF ADDR,W ; 9. Clear the WREN bit to disable program
MOVWF EEADR ; Data Memory Address operations.
; to read 10. At the completion of the write cycle, the WR bit
BANKSEL EECON1 ; Select Bank of EECON1 is cleared and the EEIF interrupt flag bit is set
BCF EECON1,EEPGD ; Point to Data memory
(EEIF must be cleared by firmware). If step 1 is
BSF EECON1,RD ; EE Read
not implemented, then firmware should check
BANKSEL EEDATA ; Select Bank of EEDATA
MOVF EEDATA,W ; W = EEDATA for EEIF to be set, or WR to clear, to indicate the
end of the program cycle.
3.4 Writing to Data EEPROM Memory EXAMPLE 3-2: DATA EEPROM WRITE
BANKSEL EECON1 ; Select Bank of
To write an EEPROM data location, the user must first ; EECON1
write the address to the EEADR register and the data to BTFSC EECON1,WR ; Wait for write
the EEDATA register. Then, the user must follow a GOTO $-1 ; to complete
specific write sequence to initiate the write for each byte. BANKSEL EEADR ; Select Bank of
; EEADR
The write will not initiate if the write sequence is not MOVF ADDR,W ;
exactly followed (write 55h to EECON2, write AAh to MOVWF EEADR ; Data Memory
EECON2, then set WR bit) for each byte. We strongly ; Address to write
recommend that interrupts be disabled during this MOVF VALUE,W ;
code segment (see Example 3-2). MOVWF EEDATA ; Data Memory Value
; to write
Additionally, the WREN bit in EECON1 must be set to
BANKSEL EECON1 ; Select Bank of
enable write. This mechanism prevents accidental ; EECON1
writes to data EEPROM due to errant (unexpected) BCF EECON1,EEPGD; Point to DATA
code execution (i.e., lost programs). The user should ; memory
keep the WREN bit clear at all times except when BSF EECON1,WREN ; Enable writes
updating EEPROM. The WREN bit is not cleared
by hardware BCF INTCON,GIE ; Disable INTs.
MOVLW 55h ;
After a write sequence has been initiated, clearing the
Sequence
WREN bit will not affect this write cycle. The WR bit will MOVLW AAh ;
be inhibited from being set unless the WREN bit is set. MOVWF EECON2 ; Write AAh
At the completion of the write cycle, the WR bit is BSF EECON1,WR ; Set WR bit to
cleared in hardware and the EE Write Complete ; begin write
Interrupt Flag bit (EEIF) is set. The user can either BSF INTCON,GIE ; Enable INTs.
enable this interrupt or poll this bit. EEIF must be BCF EECON1,WREN ; Disable writes
cleared by software.
14 14 14 14
Program Memory
BANKSEL word_block
MOVLW .4
MOVWF word_block ;prepare for 4 words to be written
BANKSEL EECON1
MOVLW 0x55 ;required sequence
MOVWF EECON2
Sequence
Required
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR ;set WR bit to begin write
NOP ;instructions here are ignored as processor
NOP
BANKSEL EEADR
INCF EEADR,f ;load next word address
BANKSEL word_block
DECFSZ word_block,f ;have 4 words been written?
GOTO loop ;NO, continue with writing
BANKSEL EECON1
BCF EECON1,WREN ;YES, 4 words complete, disable writes
BSF INTCON,GIE ;enable interrupts
REXT
OSC1 Internal
Clock
CEXT
VSS PIC16F87/88
RA6 I/O (OSC2)
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Config1(FOSC2:FOSC0)
Primary Oscillator
SCS<1:0>(T1OSC)
OSC2
SLEEP
LP, XT, HS, RC, EC
OSC1
Secondary Oscillator Peripherals
T1OSC
MUX
T1OSO
T1OSCEN To Timer1
Enable
T1OSI Oscillator OSCCON<6:4> Internal Oscillator
8 MHz CPU
111
4 MHz
Internal 110
Oscillator 2 MHz
101
Block
Postscaler
1 MHz
MUX
100
500 kHz
8 MHz 011
31.25 kHz (INTOSC) 250 kHz
Source 010
125 kHz
001
31.25 kHz
31.25 kHz 000
WDT, FSCM
(INTRC)
FIGURE 4-7: TIMING DIAGRAM FOR XT, HS, LP, EC AND EXTRC TO RC_RUN MODE
Q1 Q2 Q3 Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1
TINP(1)
INTOSC
TSCS(3)
OSC1
TOSC(2)
System
Clock
TDLY(4)
SCS<1:0>
Program
Counter PC PC + 1 PC + 2 PC + 3
Q1 Q2 Q3 Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1
TT1P(1)
T1OSI
TSCS(3)
OSC1
TOSC(2)
System
Clock
TDLY(4)
SCS<1:0>
Program PC PC +1 PC + 2 PC +3
Counter
Sec. Osc
OSC1
TOST
OSC2
TOSC(3) TSCS(4)
Primary Clock
System Clock
SCS<1:0> TDLY(5)
OSTS
Program PC PC + 1 PC + 2 PC +3
Counter
FIGURE 4-10: PRIMARY SYSTEM CLOCK AFTER RESET (HS, XT, LP)
TT1P(1)
Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
T1OSI
OSC1
TOST
OSC2
TCPU(3)
TOSC(2)
CPU Start-up
System Clock
Peripheral
Clock
RESET
SLEEP
OSTS
Program PC 0000h 0001h 0003h 0004h 0005h
Counter
Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
T1OSI
OSC1
OSC2 TCPU(2)
CPU Start-up
System Clock
MCLR
OSTS
Program PC 0000h 0001h 0002h 0003h 0004h
Counter
05h PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 xxxx 0000(1) uuuu 0000(1)
xxx0 0000(2) uuu0 0000(2)
85h TRISA TRISA7 TRISA6 TRISA5(3) PORTA Data Direction Register 1111 1111 1111 1111
9Fh ADCON1 ADFM ADCS2 VCFG1 VCFG0 — — — — 0000 ---- 0000 ----
(4)
9Bh ANSEL — ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0 -111 1111 -111 1111
Legend: x = unknown, u = unchanged, - = unimplemented locations read as ‘0’. Shaded cells are not used by PORTA.
Note 1: This value applies only to the PIC16F87.
2: This value applies only to the PIC16F88.
3: Pin 5 is an input only; the state of the TRISA5 bit has no effect and will always read ‘1’.
4: PIC16F88 device only.
Data
Bus D Q
VDD
WR
PORTA VDD
CK Q
P
Data Latch
D Q
N I/O pin
WR
TRISA
CK Q
VSS
TRIS Latch
Analog
Input Mode
TTL
Input Buffer
RD TRISA
Q D
EN
RD PORTA
To Comparator
D Q
RA3 pin
WR N
TRISA
CK Q
VSS
VSS
TRIS Latch Analog
Input Mode
TTL
Input Buffer
RD TRISA
Q D
EN
RD PORTA
To Comparator
D Q
N RA2 pin
WR
TRISA CK Q
VSS
TRIS Latch Analog
Input Mode
TTL
RD TRISA Input Buffer
Q D
EN
RD PORTA
To Comparator
To A/D Module VREF- (PIC16F88 only)
To A/D Module Channel Input (PIC16F88 only)
CVROE
CVREF
D Q
N RA4 pin
WR
TRISA
CK Q
VSS
TRIS Latch Analog
Input Mode
Schmitt Trigger
Input Buffer
RD TRISA
Q D
EN
RD PORTA
Data Bus
EN
MCLRE
RD Port
VDD VDD
RA6/OSC2/CLKO pin
Data
Bus
D Q
VSS VDD
WR
PORTA
CK Q
P
Data Latch
D Q
WR N
TRISA
CK Q (FOSC = 1x0, 011)
TRIS Latch
VSS
Schmitt Trigger
RD TRISA Input Buffer
Q D
EN
VDD
(FOSC = 011)
Data
Bus
D Q VDD RA7/OSC1/CLKI pin(1)
WR
PORTA Q VSS
CK P
Data Latch
D Q
WR
TRISA N
CK Q
TRIS Latch FOSC = 10x
VSS
Schmitt Trigger
RD TRISA Input Buffer
Q D
EN FOSC = 10x
RD PORTA
Each of the PORTB pins has a weak internal pull-up. A RB0/INT is an external interrupt input pin and is
single control bit can turn on all the pull-ups. This is per- configured using the INTEDG bit (OPTION<6>).
formed by clearing bit RBPU (OPTION<7>). The weak PORTB is multiplexed with several peripheral functions
pull-up is automatically turned off when the port pin is (see Table 5-3). PORTB pins have Schmitt Trigger
configured as an output. The pull-ups are disabled on a input buffers.
Power-on Reset. When enabling peripheral functions, care should be
Four of PORTB’s pins, RB7:RB4, have an interrupt-on- taken in defining TRIS bits for each PORTB pin. Some
change feature. Only pins configured as inputs can peripherals override the TRIS bit to make a pin an out-
cause this interrupt to occur (i.e., any RB7:RB4 pin put, while other peripherals override the TRIS bit to
configured as an output is excluded from the interrupt- make a pin an input. Since the TRIS bit override is in
on-change comparison). The input pins (of RB7:RB4) effect while the peripheral is enabled, read-modify-
are compared with the old value latched on the last write instructions (BSF, BCF, XORWF) with TRISB as
read of PORTB. The “mismatch” outputs of RB7:RB4 destination should be avoided. The user should refer to
are OR’d together to generate the RB port change the corresponding peripheral section for the correct
interrupt with flag bit RBIF (INTCON<0>). TRIS bit settings.
This interrupt can wake the device from SLEEP. The
user, in the Interrupt Service Routine, can clear the
interrupt in the following manner:
a) Any read or write of PORTB. This will end the
mismatch condition.
b) Clear flag bit RBIF.
CCP 0
CCP1<M3:M0> = 000
1
VDD
RBPU(2)
P Weak
Pull-up
Data Latch
Data Bus
D Q
WR PORTB I/O pin(1)
CK
TRIS Latch
D Q
TTL
WR TRISB Input
CK Buffer
RD TRISB
Q D
RD PORTB EN
To INT0 or CCP
RD PORTB
I2C™ Mode
PORT/SSPEN Select
SDA Output
1
VDD
RBPU(2)
Weak
P Pull-up
I/O pin(1)
N
VSS
TRIS Latch
D Q
WR
TRISB
CK Q
RD TRISB
TTL
SDA Drive Input
Buffer
Q D
RD PORTB
EN
Schmitt Trigger
Buffer RD PORTB
SDA(3)
SDI
SDO
1
SSPEN + SPEN
SPEN
DT
1
VDD
RBPU(2) Weak
P Pull-up
I/O pin(1)
N
VSS
TRIS Latch
D Q
WR TRISB
CK Q
RD TRISB
TTL
DT Drive Input
Buffer
Q D
RD PORTB
EN
Schmitt Trigger
Buffer RD PORTB
RX/DT
VDD
RBPU(2)
Weak
P Pull-up
Data Latch
Data Bus
D Q
WR
PORTB
CK I/O pin(1)
TRIS Latch
D Q
WR TTL
TRISB Input
CK Buffer
RD TRISB
Q D
RD PORTB
EN
To PGM or CCP
RD PORTB
PORT/SSPEN
SCK/SCL
1
0 VDD
RBPU(2)
Weak
P Pull-up
VDD
SCL Drive
P
Data Latch
Data Bus
D Q
WR
PORTB N I/O pin(1)
CK
TRIS Latch
D Q VSS
WR
TRISB
CK
TTL
Input
RD TRISB Buffer
Latch
Q D
RD PORTB EN Q1
Set RBIF
From Other Q D
RB7:RB4 pins RD PORTB
EN
Q3
SCK
SCL(3)
RBPU(2) VDD
PORT/SSPEN Weak
P Pull-up
Data Latch
Data Bus
D Q
WR
PORTB I/O pin(1)
CK
TRIS Latch
D Q
WR
TRISB
CK
TTL
Input
RD TRISB Buffer
Latch
Q D
RD PORTB EN Q1
Set RBIF
From Other Q D
RB7:RB4 pins RD PORTB
EN
Q3
SS/TX/CK
Analog VDD
RBPU(2)
Input Mode
Weak
P Pull-up
Data Latch
Data Bus
D Q
I/O pin(1)
WR PORTB CK
TRIS Latch
D Q
WR TRISB
CK
Analog
Input Mode
TTL
RD TRISB Input Buffer
T1OSCEN/ICD/PROG
Mode
Latch
Q D
RD PORTB EN Q1
Set RBIF
From other Q D
RB7:RB4 pins RD PORTB
EN
Q3
PGC/T1CKI
PORT/Program Mode/ICD
PGD
1
VDD
RBPU(2)
Weak
P Pull-up
Data Latch
Data Bus
D Q
WR
PORTB I/O pin(1)
CK
TRIS Latch
D Q
0
WR
TRISB
CK 1
RD TRISB T1OSCEN
T1OSCEN Analog
Input Mode
PGD DRVEN TTL
Input Buffer
Latch
Q D
RD PORTB EN Q1
Set RBIF
From Other Q D
RB7:RB4 pins RD PORTB
EN
Q3
PGD
To T1OSCI Input
To A/D Module Channel Input (PIC16F88 only)
CLKO (= FOSC/4)
Data Bus
8
M 1
0
RA4/T0CKI U M
X Sync
pin U 2 TMR0 reg
1 0
X Cycles
T0SE
T0CS Set Flag bit TMR0IF
PSA
on Overflow
Prescaler
0
M 8-bit Prescaler
WDT Timer
U
1 X
16-bit 8
31.25 kHz
Prescaler
8 - to - 1 MUX PS2:PS0
0 1
MUX PSA
WDT
Time-out
Note: To avoid an unintended device RESET, the instruction sequence shown in the
PICmicro® Mid-Range MCU Family Reference Manual (DS33023) must be exe-
cuted when changing the prescaler assignment from Timer0 to the WDT. This
sequence must be followed even if the WDT is disabled.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
T1CKI
(Default High)
T1CKI
(Default Low)
Note 1: When the T1OSCEN bit is cleared, the inverter is turned off. This eliminates power drain.
T1OSO OSC2
C2
33 pF
Note: See the Notes with Table 7-1 for additional
information about capacitor selection. RB7
RB6
TABLE 7-1: CAPACITOR SELECTION FOR
THE TIMER1 OSCILLATOR
RB5
Osc Type Freq C1 C2
LP 32 kHz 33 pF 33 pF
7.8 Resetting Timer1 Using a CCP
Note 1: Microchip suggests this value as a starting Trigger Output
point in validating the oscillator circuit.
If the CCP1 module is configured in Compare mode to
2: Higher capacitance increases the stability generate a “special event trigger" signal
of the oscillator, but also increases the (CCP1M3:CCP1M0 = 1011), the signal will reset
start-up time. Timer1 and start an A/D conversion (if the A/D module
3: Since each resonator/crystal has its own is enabled).
characteristics, the user should consult
Note: The special event triggers from the CCP1
the resonator/crystal manufacturer for
module will not set interrupt flag bit
appropriate values of external
TMR1IF (PIR1<0>).
components.
Timer1 must be configured for either Timer or Synchro-
4: Capacitor values are for design guidance
nized Counter mode to take advantage of this feature.
only.
If Timer1 is running in Asynchronous Counter mode,
this RESET operation may not work.
In the event that a write to Timer1 coincides with a
special event trigger from CCP1, the write will take
precedence.
In this mode of operation, the CCPR1H:CCPR1L regis-
ter pair effectively becomes the period register for
Timer1.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
TMR1H TMR1L
CCP1CON<3:0>
Q’s
A PWM output (Figure 9-4) has a time base (period) CCPR1L and CCP1CON<5:4> can be written to at any
and a time that the output stays high (duty cycle). The time, but the duty cycle value is not latched into
frequency of the PWM is the inverse of the period CCPR1H until after a match between PR2 and TMR2
(1/period). occurs (i.e., the period is complete). In PWM mode,
CCPR1H is a read only register.
FIGURE 9-4: PWM OUTPUT The CCPR1H register and a 2-bit internal latch
are used to double-buffer the PWM duty cycle. This
Period double-buffering is essential for glitchless PWM
operation.
When the CCPR1H and 2-bit latch match TMR2,
concatenated with an internal 2-bit Q clock or 2 bits of
Duty Cycle
the TMR2 prescaler, the CCP1 pin is cleared.
TMR2 = PR2
TMR2 = Duty Cycle
TMR2 = PR2
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
SCK (CKP = 0,
CKE = 0)
SCK (CKP = 0,
CKE = 1)
SCK (CKP = 1,
CKE = 0)
SCK (CKP = 1,
CKE = 1)
SDI (SMP = 0)
bit 7 bit 0
SDI (SMP = 1)
bit 7 bit 0
SSPIF
SCK (CKP = 0)
SCK (CKP = 1)
SDI (SMP = 0)
bit 7 bit 0
SSPIF
SCK (CKP = 0)
SCK (CKP = 1)
SDI (SMP = 0)
bit 7 bit 0
SSPIF
SCL S 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 P
SSPOV (SSPCON<6>)
Bit SSPOV is set because the SSPBUF register is still full
ACK is not sent
SCL 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S P
Data is SCL held low
sampled while CPU
responds to SSPIF
SSPIF (PIR1<3>) Cleared in software
BF (SSPSTAT<0>)
From SSP Interrupt
SSPBUF is written in software Service Routine
CKP (SSPCON<4>)
REGISTER 11-1: TXSTA: TRANSMIT STATUS AND CONTROL REGISTER (ADDRESS 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
bit 7 bit 0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Word 1
TRMT bit Transmit Shift Reg
(Transmit Shift
Reg. Empty Flag)
RB2/SDO/RX/DT
Pin Buffer Data RX9
and Control Recovery
Interrupt RCIF 8
RCIF
(Interrupt Flag)
OERR bit
CREN
Note: This timing diagram shows three words appearing on the RX input. The RCREG (receive buffer) is read after the third word,
causing the OERR (overrun) bit to be set.
RB2/SDO/RX/DT
Pin Buffer Data
and Control Recovery RX9
SPEN
RX9 Enable
ADDEN Load of
RX9 Receive
Buffer
ADDEN
RSR<8> 8
Interrupt RCIF
Data Bus
RCIE
Load RSR
Bit 8 = 0, Data Byte Bit 8 = 1, Address Byte Word 1
RCREG
Read
RCIF
Note: This timing diagram shows a data byte followed by an address byte. The data byte is not read into the RCREG (receive buffer)
because ADDEN = 1.
Load RSR
Bit 8 = 1, Address Byte Bit 8 = 0, Data Byte Word 1
RCREG
Read
RCIF
Note: This timing diagram shows a data byte followed by an address byte. The data byte is not read into the RCREG (receive buffer)
because ADDEN was not updated and still = 0.
RB2/SDO/
RX/DT pin bit 0 bit 1 bit 2 bit 7 bit 0 bit 1 bit 7
Word 1 Word 2
RB5/SS/TX/
CK pin
Write to
TXREG Reg
Write Word 1 Write Word 2
TXIF bit
(Interrupt Flag)
TRMT bit
‘1’ ‘1’
TXEN bit
Note: Sync Master mode; SPBRG = 0. Continuous transmission of two 8-bit words.
RB5/SS/TX/CK pin
Write to
TXREG Reg
TXIF bit
TRMT bit
TXEN bit
RB5/SS/TX/CK
pin
Write to
bit SREN
SREN bit
CREN bit ‘0’ ‘0’
RCIF bit
(Interrupt)
Read
RXREG
Note: Timing diagram demonstrates Sync Master mode with bit SREN = 1 and bit BRG = 0.
11.4 USART Synchronous Slave Mode e) If enable bit TXIE is set, the interrupt will wake
the chip from SLEEP and if the global interrupt
Synchronous Slave mode differs from the Master mode is enabled, the program will branch to the
in the fact that the shift clock is supplied externally at interrupt vector (0004h).
the RB5/SS/TX/CK pin (instead of being supplied inter-
nally in Master mode). This allows the device to trans- When setting up a synchronous slave transmission,
fer or receive data while in SLEEP mode. Slave mode follow these steps:
is entered by clearing bit CSRC (TXSTA<7>). 1. Enable the synchronous slave serial port by set-
ting bits SYNC and SPEN and clearing bit
11.4.1 USART SYNCHRONOUS SLAVE CSRC.
TRANSMIT 2. Clear bits CREN and SREN.
The operation of the Synchronous Master and Slave 3. If interrupts are desired, then set enable bit
modes is identical, except in the case of the SLEEP mode. TXIE.
If two words are written to the TXREG and then the 4. If 9-bit transmission is desired, then set bit TX9.
SLEEP instruction is executed, the following will occur: 5. Enable the transmission by setting enable bit
a) The first word will immediately transfer to the TXEN.
TSR register and transmit. 6. If 9-bit transmission is selected, the ninth bit
b) The second word will remain in the TXREG register. should be loaded in bit TX9D.
c) Flag bit TXIF will not be set. 7. Start transmission by loading data to the TXREG
register.
d) When the first word has been shifted out of TSR,
the TXREG register will transfer the second word 8. If using interrupts, ensure that GIE and PEIE
to the TSR and flag bit TXIF will now be set. (bits 7 and 6) of the INTCON register are set.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Note: The ANSEL bits for AN3 and AN2 inputs must be configured as analog inputs for the
VREF+ and VREF- external pins to be used.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
110
RB7/AN6/PGD/T1OSI
101
RB6/AN5/PGC/T1OSO/T1CKI
100
RA4/AN4/T0CKI/C2OUT
011
RA3/AN3/VREF+/C1OUT
010
VIN RA2/AN2/CVREF/VREF-
AVDD 000
RA0/AN0
A/D
Converter
VREF+
(Reference
Voltage)
VCFG1:VCFG0
VREF-
(Reference
Voltage)
AVSS
VCFG1:VCFG0
= TAMP + TC + TCOFF
= 2 µs + TC + [(Temperature -25°C)(0.05 µs/°C)]
TC = CHOLD (RIC + RSS + RS) In(1/2047)
= -120 pF (1 kΩ + 7 kΩ + 10 kΩ) In(0.0004885)
= 16.47 µs
TACQ = 2 µs + 16.47 µs + [(50°C – 25°C)(0.05 µs/°C)
= 19.72 µs
Note 1: The reference voltage (VREF) has no effect on the equation, since it cancels itself out.
2: The charge holding capacitor (CHOLD) is not discharged after each conversion.
3: The maximum recommended impedance for analog sources is 10 kΩ. This is required to meet the pin
leakage specification.
4: After a conversion has completed, a 2.0 TAD delay must complete before acquisition can begin again.
During this time, the holding capacitor is not connected to the selected A/D input channel.
VDD
Sampling
Switch
VT = 0.6V
Rs ANx RIC ≤ 1k SS RSS
CHOLD
VA CPIN I leakage = DAC capacitance
5 pF VT = 0.6V ± 500 nA = 51.2 pF
VSS
TABLE 12-1: TAD vs. MAXIMUM DEVICE OPERATING FREQUENCIES – STANDARD DEVICES (C)
AD Clock Source (TAD) Maximum Device Frequency
TCY to TAD TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Conversion starts
Set GO bit
ADRES is loaded,
GO bit is cleared,
ADIF bit is set,
holding capacitor is connected to analog input
10-bit Result
ADFM = 1 ADFM = 0
7 2107 0 7 0765 0
0000 00 0000 00
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
A VIN- D VIN-
RA1/AN1 RA1/AN1
A VIN+ C2 Off (Read as ‘0’) D VIN+ C2 Off (Read as ‘0’)
RA2/AN2 RA2/AN2
A
RA1/AN1 VIN-
A VIN- CIS = 0
RA1/AN1 A CIS = 1
C2 C2OUT RA2/AN2 C2 C2OUT
A VIN+ VIN+
RA2/AN2
Two Common Reference Comparators Two Common Reference Comparators with Outputs
CM2:CM0 = 011 CM2:CM0 = 110
A VIN- A VIN-
RA0/AN0 RA0/AN0
D VIN+ C1 C1OUT D VIN+ C1 C1OUT
RA3/AN3 RA3/AN3
A VIN- A VIN-
RA1/AN1 RA1/AN1
A VIN+ C2 C2OUT A VIN+ C2 C2OUT
RA2/AN2 RA2/AN2
RA4/T0CKI
One Independent Comparator Three Inputs Multiplexed to Two Comparators
CM2:CM0 = 101 CM2:CM0 = 001
D VIN- A
RA0/AN0 RA0/AN0 CIS = 0 VIN-
D VIN+ C1 Off (Read as ‘0’) A
RA3/AN3 RA3/AN3 CIS = 1
VIN+ C1 C1OUT
A VIN- A VIN-
RA1/AN1 RA1/AN1
A VIN+ C2 C2OUT A VIN+ C2 C2OUT
RA2/AN2 RA2/AN2
Port Pins
MULTIPLEX
CnINV
To Data Bus Q D
EN Q1
RD_CMCON
EN Q3 * RD_CMCON
CL
VDD
VT = 0.6V RIC
RS < 10K
AIN
CPIN ILEAKAGE
VA VT = 0.6V ±500 nA
5 pF
VSS
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
16 Stages
CVREN
8R R R R R
8R CVRR
RA2/AN2/CVREF/VREF- pin
CVROE
CVREF CVR3
Input to 16-1 Analog MUX CVR2
Comparator CVR1
CVR0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
External
RESET
MCLR
SLEEP
WDT
WDT
Module Time-out
Reset
VDD Rise
Detect
Power-on Reset
VDD
Brown-out
Reset S
BOREN
OST/PWRT
OST
Chip_Reset
10-bit Ripple Counter R Q
OSC1
PWRT
INTRC 11-bit Ripple Counter
31.25 kHz
Enable PWRT
Enable OST
VDD
MCLR
INTERNAL POR
TPWRT
OST TIME-OUT
INTERNAL RESET
VDD
MCLR
INTERNAL POR
TPWRT
OST TIME-OUT
INTERNAL RESET
VDD
MCLR
INTERNAL POR
TPWRT
OST TIME-OUT
INTERNAL RESET
MCLR
INTERNAL POR
TPWRT
PWRT TIME-OUT
TOST
OST TIME-OUT
INTERNAL RESET
15.10 Interrupts The RB0/INT pin interrupt, the RB port change interrupt
and the TMR0 overflow interrupt flags are contained in
The PIC16F87/88 has up to 12 sources of interrupt. the INTCON register.
The Interrupt Control register (INTCON) records indi-
vidual interrupt requests in flag bits. It also has The peripheral interrupt flags are contained in the
individual and global interrupt enable bits. Special Function Register, PIR1. The corresponding
interrupt enable bits are contained in Special Function
Note: Individual interrupt flag bits are set, Register, PIE1, and the peripheral interrupt enable bit
regardless of the status of their is contained in Special Function Register, INTCON.
corresponding mask bit or the GIE bit.
When an interrupt is serviced, the GIE bit is cleared to
A global interrupt enable bit, GIE (INTCON<7>), disable any further interrupt, the return address is
enables (if set) all unmasked interrupts, or disables (if pushed onto the stack, and the PC is loaded with
cleared) all interrupts. When bit GIE is enabled, and an 0004h. Once in the Interrupt Service Routine, the
interrupt’s flag bit and mask bit are set, the interrupt will source(s) of the interrupt can be determined by polling
vector immediately. Individual interrupts can be dis- the interrupt flag bits. The interrupt flag bit(s) must be
abled through their corresponding enable bits in vari- cleared in software before re-enabling interrupts to
ous registers. Individual interrupt bits are set avoid recursive interrupts.
regardless of the status of the GIE bit. The GIE bit is
For external interrupt events, such as the INT pin or
cleared on RESET.
PORTB change interrupt, the interrupt latency will be
The “return from interrupt” instruction, RETFIE, exits three or four instruction cycles. The exact latency
the interrupt routine, as well as sets the GIE bit, which depends on when the interrupt event occurs, relative to
re-enables interrupts. the current Q cycle. The latency is the same for one or
two cycle instructions. Individual interrupt flag bits are
set, regardless of the status of their corresponding
mask bit, PEIE bit or the GIE bit.
EEIF
EEIE
OSFIF
OSFIE
ADIF
ADIE
Wake-up (If in SLEEP mode)
RCIF TMR0IF
RCIE TMR0IE
INTF
TXIF
INTE
TXIE Interrupt to CPU
RBIF
SSPIF RBIE
SSPIE
PEIE
CCP1IF
CCP1IE
GIE
TMR2IF
TMR2IE
TMR1IF
TMR1IE
CMIF
CMIE
Postscaler
1
16-bit Programmable Prescaler WDT
PSA
PS<2:0>
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
81h,181h OPTION RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
2007h Configuration bits LVP BOREN MVCLRE FOSC2 PWRTEN WDTEN FOSC1 FOSC0
105h WDTCON — — — WDTPS3 WDTPS2 WSTPS1 WDTPS0 SWDTEN
Legend: Shaded cells are not used by the Watchdog Timer.
Note 1: See Register 15-1 for operation of these bits.
CPU Start-up
Q1 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
INTRC
OSC1
TOST
OSC2
System Clock
SLEEP
OSTS
Program PC 0000h 0001h 0003h 0004h 0005h
Counter
Sample Clock
System Oscillator
Clock Failure
Output
CM Output
(Q)
Failure
Detected
OSCFIF
Note: The system clock is normally at a much higher frequency than the sample clock. The relative frequencies in
this example have been chosen for clarity.
INT pin
INTF Flag
(INTCON<1>) Interrupt Latency
(Note 2)
GIE bit(3)
(INTCON<7>) Processor in
SLEEP
INSTRUCTION FLOW
PC PC PC+1 PC+2 PC+2 PC + 2 0004h 0005h
Instruction Inst(0004h)
Fetched Inst(PC) = SLEEP Inst(PC + 1) Inst(PC + 2) Inst(0005h)
Instruction SLEEP Inst(PC + 1) Dummy Cycle Dummy Cycle
Executed Inst(PC - 1) Inst(0004h)
15.16 ID Locations
Four memory locations (2000h - 2003h) are designated * * *
as ID locations, where the user can store checksum or VDD
other code identification numbers. These locations are To Normal
not accessible during normal execution, but are read- Connections
able and writable during program/verify. It is recom-
mended that only the four Least Significant bits of the * Isolation devices (as required).
ID location are used. †
RB3 only used in LVP mode.
Note: Additional information on the mid-range instruction set is available in the PICmicro® Mid-Range MCU
Family Reference Manual (DS33023).
6.0V
5.5V
5.0V
4.5V
Voltage
4.0V
3.5V
3.0V
2.5V
2.0V
16 MHz 20 MHz
Frequency
6.0V
5.5V
5.0V
4.5V
Voltage
4.0V
3.5V
3.0V
2.5V
2.0V
4 MHz 10 MHz
Frequency
FMAX = (12 MHz/V) (VDDAPPMIN – 2.5V) + 4 MHz
Note 1: VDDAPPMIN is the minimum voltage of the PICmicro® device in the application.
Note 2: FMAX has a maximum frequency of 10 MHz.
Param
Symbol Characteristic Min Typ Max Units Conditions
No.
VDD Supply Voltage
D001 PIC16LF87/88 2.0 — 5.5 V HS, XT, RC and LP Osc mode
D001 PIC16F87/88 4.0 — 5.5 V
D002 VDR RAM Data Retention 1.5 — — V
Voltage(1)
D003 VPOR VDD Start Voltage — — 0.7 V See Section 15.4 “Power-on Reset (POR)”
to ensure internal for details
Power-on Reset signal
D004 SVDD VDD Rise Rate 0.05 — — V/ms See Section 15.4 “Power-on Reset (POR)”
to ensure internal for details
Power-on Reset signal
VBOR Brown-out Reset Voltage
D005 PIC16LF87/88 3.65 — 4.35 V
D005 PIC16F87/88 3.65 — 4.35 V FMAX = 14 MHz(2)
Legend: Shading of rows is to assist in readability of the table.
Note 1: This is the limit to which VDD can be lowered in SLEEP mode, or during a device RESET, without losing RAM data.
2: When BOR is enabled, the device will operate correctly until the VBOR voltage trip point is reached.
Param
Device Typ Max Units Conditions
No.
Param
Device Typ Max Units Conditions
No.
Param
Device Typ Max Units Conditions
No.
Param
Device Typ Max Units Conditions
No.
Param
Device Typ Max Units Conditions
No.
Param
Device Typ Max Units Conditions
No.
Param
Device Min Typ Max Units Conditions
No.
INTOSC Accuracy @ Freq = 8 MHz, 4 MHz, 2 MHz, 1 MHz, 500 kHz, 250 kHz, 125 kHz(1)
PIC16LF87/88 -2 ±1 2 % 25°C VDD = 2.7-3.3V
-5 — 5 % -10°C - +85°C VDD = 2.7-3.3V
-10 — 10 % -40°C - +85°C VDD = 2.7-3.3V
PIC16F87/88 -2 ±1 2 % 25°C VDD = 4.5-5.5V
-5 — 5 % -10°C - +85°C VDD = 4.5-5.5V
-10 — 10 % -40°C - +85°C VDD = 4.5-5.5V
INTRC Accuracy @ Freq = 31 kHz(2)
PIC16LF87/88 26.562 — 35.938 kHz -40°C - +85°C VDD = 2.7-3.3V
PIC16F87/88 26.562 — 35.938 kHz -40°C - +85°C VDD = 4.5-5.5V
Legend: Shading of rows is to assist in readability of the table.
Note 1: Frequency calibrated at 25°C. OSCTUNE register can be used to compensate for temperature drift.
2: INTRC frequency after calibration.
Param
Characteristics Sym Min Typ Max Units Comments
No.
D300 Input Offset Voltage VIOFF — ± 5.0 ± 10 mV
D301 Input Common Mode Voltage* VICM 0 - VDD – 1.5 V
D302 Common Mode Rejection Ratio* CMRR 55 - — dB
300 Response Time(1)* TRESP — 150 400 ns PIC16F87/88
300A 600 ns PIC16LF87/88
301 Comparator Mode Change to TMC2OV — — 10 µs
Output Valid*
* These parameters are characterized but not tested.
Note 1: Response time measured with one comparator input at (VDD – 1.5)/2 while the other input transitions from
VSS to VDD.
Spec
Characteristics Sym Min Typ Max Units Comments
No.
D310 Resolution VRES VDD/24 — VDD/32 LSb
D311 Absolute Accuracy VRAA — — 1/4 LSb Low Range (VRR = 1)
— — 1/2 LSb High Range (VRR = 0)
D312 Unit Resistor Value (R)* VRUR — 2k — Ω
310 Settling Time (1)* TSET — — 10 µs
* These parameters are characterized but not tested.
Note 1: Settling time measured while VRR = 1 and VR<3:0> transitions from ‘0000’ to ‘1111’.
VDD/2
RL
CL CL
Pin Pin
VSS VSS
RL = 464Ω
CL = 50 pF for all pins except OSC2, but including PORTD and PORTE outputs as ports
15 pF for OSC2 output
OSC1
1 3 3 4 4
2
CLKO
Q4 Q1 Q2 Q3
OSC1
10 11
CLKO
13 12
19 18
14 16
I/O Pin
(Input)
17 15
20, 21
Note: Refer to Figure 18-3 for load conditions.
VDD
MCLR
30
Internal
POR
33
PWRT
Time-out
32
OSC
Time-out
Internal
RESET
Watchdog
Timer
Reset
31
34
34
I/O Pins
VDD VBOR
35
TABLE 18-5: RESET, WATCHDOG TIMER, OSCILLATOR START-UP TIMER, POWER-UP TIMER
AND BROWN-OUT RESET REQUIREMENTS
Parameter
Sym Characteristic Min Typ† Max Units Conditions
No.
RA4/T0CKI
40 41
42
RB6/T1OSO/T1CKI
45 46
47 48
TMR0 or TMR1
40* Tt0H T0CKI High Pulse Width No Prescaler 0.5 TCY + 20 — — ns Must also meet
With Prescaler 10 — — ns parameter 42
41* Tt0L T0CKI Low Pulse Width No Prescaler 0.5 TCY + 20 — — ns Must also meet
With Prescaler 10 — — ns parameter 42
CCP1
(Capture Mode)
50 51
52
CCP1
(Compare or PWM Mode)
53 54
SS
70
SCK
(CKP = 0)
71 72
78 79
SCK
(CKP = 1)
79 78
80
75, 76
74
73
SS
81
SCK
(CKP = 0)
71 72
79
73
SCK
(CKP = 1)
80
78
75, 76
74
SS
70
SCK
(CKP = 0) 83
71 72
78 79
SCK
(CKP = 1)
79 78
80
75, 76 77
74
73
82
SS
70
SCK
83
(CKP = 0)
71 72
SCK
(CKP = 1)
80
75, 76 77
SDI
MSb In Bit 6 - - - -1 LSb In
74
SCL
91 93
90 92
SDA
START STOP
Condition Condition
SDA
Out
RB5/TX/CK
pin 121
121
RB2/RX/DT
pin
120
122
Note: Refer to Figure 18-3 for load conditions.
RB5/TX/CK
pin 125
RB2/RX/DT
pin
126
ADIF
GO DONE
SAMPLING STOPPED
SAMPLE
Note 1: If the A/D clock source is selected as RC, a time of TCY is added before the A/D clock starts. This allows the
SLEEP instruction to be executed.
130 TAD A/D clock period PIC16F87/88 1.6 — — µs TOSC based, VREF ≥ 3.0V
PIC16LF87/88 3.0 — — µs TOSC based, VREF ≥ 2.0V
PIC16F87/88 2.0 4.0 6.0 µs A/D RC mode
PIC16LF87/88 3.0 6.0 9.0 µs A/D RC mode
131 TCNV Conversion time (not including S/H time) — 12 TAD
(Note 1)
132 TACQ Acquisition time (Note 2) 40 — µs
10* — — µs The minimum time is the
amplifier settling time. This may be
used if the “new” input voltage has
not changed by more than 1 LSb
(i.e., 20.0 mV @ 5.12V) from the last
sampled voltage (as stated on
CHOLD).
134 TGO Q4 to A/D clock start — TOSC/2 — — If the A/D clock source is selected as
RC, a time of TCY is added before the
A/D clock starts. This allows the
SLEEP instruction to be executed.
* These parameters are characterized but not tested.
† Data in “Typ” column is at 5V, 25°C unless otherwise stated. These parameters are for design guidance only and are not
tested.
Note 1: ADRES register may be read on the following TCY cycle.
2: See Section 12.1 “A/D Acquisition Requirements” for minimum conditions.
XXXXXXXXXXX PIC16F87-
XXXXXXXXXXX 20/SS
YYWWNNN 0310017
XXXXXXXX PIC16F87
XXXXXXXX -I/ML
YYWWNNN 0310017
Note: In the event the full Microchip part number cannot be marked on one line, it will
be carried over to the next line thus limiting the number of available characters
for customer specific information.
* Standard PICmicro device marking consists of Microchip part number, year code, week code, and
traceability code. For PICmicro device marking beyond this, certain price adders apply. Please check
with your Microchip Sales Office. For QTP devices, any special marking adders are included in QTP
price.
E1
n 1 α
E A2
c L
A1
B1
β
B p
eB
E
p
E1
2
B n 1
h
α
45°
c
A A2
φ
β L A1
E1
p
B 2
n 1
c
A A2
L A1
β
E EXPOSED
METAL
E1 PADS
D1 D D2
p
2
1 B
n
R
E2
CH X 45° L
TOP VIEW BOTTOM VIEW
α
A2 A
A1
A3
From: Name
Company
Address
City / State / ZIP / Country
Telephone: (_______) _________ - _________ FAX: (______) _________ - _________
Application (optional):
Would you like a reply? Y N
Questions:
2. How does this document meet your hardware and software development needs?
3. Do you find the organization of this document easy to follow? If not, why?
4. What additions to the document do you think would enhance the structure and subject?
5. What deletions from the document could be made without affecting the overall usefulness?
Package P = PDIP
SO = SOIC
SS = SSOP
ML = QFN
Note 1: F = CMOS FLASH
LF = Low-power CMOS FLASH
Pattern QTP, SQTP, ROM Code (factory specified) or 2: T = in tape and reel - SOIC, SSOP
Special Requirements. Blank for OTP and packages only.
Windowed devices.