电子工程世界电子工程世界电子工程世界

产品描述

搜索
 

PIC16F887T-E/SO

器件型号:PIC16F887T-E/SO
器件类别:半导体    嵌入式处理器和控制器   
厂商名称:Microchip
厂商官网:https://www.microchip.com
下载文档

器件描述

8-BIT, FLASH, 20 MHz, RISC MICROCONTROLLER, PQCC44

8位, FLASH, 20 MHz, 精简指令集微控制器, PQCC44

参数
PIC16F887T-E/SO功能数量 1
PIC16F887T-E/SO端子数量 44
PIC16F887T-E/SO最大工作温度 85 Cel
PIC16F887T-E/SO最小工作温度 -40 Cel
PIC16F887T-E/SO最大供电/工作电压 5.5 V
PIC16F887T-E/SO最小供电/工作电压 4.5 V
PIC16F887T-E/SO额定供电电压 5 V
PIC16F887T-E/SO外部数据总线宽度 0.0
PIC16F887T-E/SO输入输出总线数量 35
PIC16F887T-E/SO线速度 20 MHz
PIC16F887T-E/SO加工封装描述 8 × 8 MM, 铅 FREE, 塑料, QFN-44
PIC16F887T-E/SO无铅 Yes
PIC16F887T-E/SO欧盟RoHS规范 Yes
PIC16F887T-E/SO中国RoHS规范 Yes
PIC16F887T-E/SO状态 ACTIVE
PIC16F887T-E/SO工艺 CMOS
PIC16F887T-E/SO包装形状 SQUARE
PIC16F887T-E/SO包装尺寸 芯片 CARRIER, HEAT SINK/SLUG, VERY THIN PROFILE
PIC16F887T-E/SO表面贴装 Yes
PIC16F887T-E/SO端子形式 NO 铅
PIC16F887T-E/SO端子间距 0.6500 mm
PIC16F887T-E/SO端子涂层 MATTE 锡
PIC16F887T-E/SO端子位置
PIC16F887T-E/SO包装材料 塑料/环氧树脂
PIC16F887T-E/SO温度等级 INDUSTRIAL
PIC16F887T-E/SOADC通道 Yes
PIC16F887T-E/SO地址总线宽度 0.0
PIC16F887T-E/SO位数 8
PIC16F887T-E/SO最大FCLK时钟频率 20 MHz
PIC16F887T-E/SO微处理器类型 精简指令集微控制器
PIC16F887T-E/SOPWM通道 Yes
PIC16F887T-E/SOROM编程 FLASH

文档预览

PIC16F887T-E/SO器件文档内容

     PIC16F882/883/884/886/887
                           Data Sheet

28/40/44-Pin, Enhanced Flash-Based 8-Bit
                CMOS Microcontrollers with
                         nanoWatt Technology

2007 Microchip Technology Inc.  Preliminary  DS41291D
Note the following details of the code protection feature on Microchip devices:
Microchip products meet the specification contained in their particular Microchip Data Sheet.

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.

Information contained in this publication regarding device         Trademarks
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to     The Microchip name and logo, the Microchip logo, Accuron,
ensure that your application meets with your specifications.       dsPIC, KEELOQ, KEELOQ logo, microID, MPLAB, PIC,
MICROCHIP MAKES NO REPRESENTATIONS OR                              PICmicro, PICSTART, PRO MATE, PowerSmart, rfPIC, and
WARRANTIES OF ANY KIND WHETHER EXPRESS OR                          SmartShunt are registered trademarks of Microchip
IMPLIED, WRITTEN OR ORAL, STATUTORY OR                             Technology Incorporated in the U.S.A. and other countries.
OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION,                        AmpLab, FilterLab, Linear Active Thermistor, Migratable
QUALITY, PERFORMANCE, MERCHANTABILITY OR                           Memory, MXDEV, MXLAB, PS logo, SEEVAL, SmartSensor
FITNESS FOR PURPOSE. Microchip disclaims all liability             and The Embedded Control Solutions Company are
arising from this information and its use. Use of Microchip        registered trademarks of Microchip Technology Incorporated
devices in life support and/or safety applications is entirely at  in the U.S.A.
the buyer's risk, and the buyer agrees to defend, indemnify and
hold harmless Microchip from any and all damages, claims,          Analog-for-the-Digital Age, Application Maestro, CodeGuard,
suits, or expenses resulting from such use. No licenses are        dsPICDEM, dsPICDEM.net, dsPICworks, ECAN,
conveyed, implicitly or otherwise, under any Microchip             ECONOMONITOR, FanSense, FlexROM, fuzzyLAB,
intellectual property rights.                                      In-Circuit Serial Programming, ICSP, ICEPIC, Mindi, MiWi,
                                                                   MPASM, MPLAB Certified logo, MPLIB, MPLINK, PICkit,
                                                                   PICDEM, PICDEM.net, PICLAB, PICtail, PowerCal,
                                                                   PowerInfo, PowerMate, PowerTool, REAL ICE, rfLAB,
                                                                   rfPICDEM, Select Mode, Smart Serial, SmartTel, Total
                                                                   Endurance, UNI/O, WiperLock and ZENA are trademarks of
                                                                   Microchip Technology Incorporated in the U.S.A. and other
                                                                   countries.

                                                                   SQTP is a service mark of Microchip Technology Incorporated
                                                                   in the U.S.A.

                                                                   All other trademarks mentioned herein are property of their
                                                                   respective companies.

                                                                   2007, Microchip Technology Incorporated, Printed in the
                                                                   U.S.A., All Rights Reserved.

                                                                        Printed on recycled paper.

                                                                   Microchip received ISO/TS-16949:2002 certification for its worldwide
                                                                   headquarters, design and wafer fabrication facilities in Chandler and
                                                                   Tempe, Arizona, Gresham, Oregon and Mountain View, California. The
                                                                   Company's quality system processes and procedures are for its PIC
                                                                   MCUs and dsPIC DSCs, KEELOQ code hopping devices, Serial
                                                                   EEPROMs, microperipherals, nonvolatile memory and analog
                                                                   products. In addition, Microchip's quality system for the design and
                                                                   manufacture of development systems is ISO 9001:2000 certified.

DS41291D-page ii  Preliminary                                       2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

28/40/44-Pin Flash-Based, 8-Bit CMOS Microcontrollers with
                         nanoWatt Technology

High-Performance RISC CPU:                          Peripheral Features:

Only 35 instructions to learn:                     24/35 I/O pins with individual direction control:
   - All single-cycle instructions except branches     - High current source/sink for direct LED drive
                                                       - Interrupt-on-Change pin
Operating speed:                                     - Individually programmable weak pull-ups
   - DC 20 MHz oscillator/clock input                - Ultra Low-Power Wake-up (ULPWU)
   - DC 200 ns instruction cycle
                                                    Analog Comparator module with:
Interrupt capability                                 - Two analog comparators
8-level deep hardware stack                          - Programmable on-chip voltage reference
Direct, Indirect and Relative Addressing modes          (CVREF) module (% of VDD)
                                                       - Fixed voltage reference (0.6V)
Special Microcontroller Features:                      - Comparator inputs and outputs externally
                                                          accessible
Precision Internal Oscillator:                       - SR Latch mode
   - Factory calibrated to 1%                         - External Timer1 Gate (count enable)
   - Software selectable frequency range of
      8 MHz to 31 kHz                               A/D Converter:
   - Software tunable                                  - 10-bit resolution and 11/14 channels
   - Two-Speed Start-up mode
   - Crystal fail detect for critical applications   Timer0: 8-bit timer/counter with 8-bit
   - Clock mode switching during operation for         programmable prescaler
      power savings
                                                    Enhanced Timer1:
Power-Saving Sleep mode                              - 16-bit timer/counter with prescaler
Wide operating voltage range (2.0V-5.5V)             - External Gate Input mode
Industrial and Extended Temperature range            - Dedicated low-power 32 kHz oscillator
Power-on Reset (POR)
Power-up Timer (PWRT) and Oscillator Start-up      Timer2: 8-bit timer/counter with 8-bit period
                                                       register, prescaler and postscaler
   Timer (OST)
Brown-out Reset (BOR) with software control       Enhanced Capture, Compare, PWM+ module:
                                                       - 16-bit Capture, max. resolution 12.5 ns
   option                                              - Compare, max. resolution 200 ns
Enhanced low-current Watchdog Timer (WDT)            - 10-bit PWM with 1, 2 or 4 output channels,
                                                          programmable "dead time", max. frequency
   with on-chip oscillator (software selectable           20 kHz
   nominal 268 seconds with full prescaler) with       - PWM output steering control
   software enable
Multiplexed Master Clear with pull-up/input pin    Capture, Compare, PWM module:
Programmable code protection                         - 16-bit Capture, max. resolution 12.5 ns
High Endurance Flash/EEPROM cell:                    - 16-bit Compare, max. resolution 200 ns
   - 100,000 write Flash endurance                     - 10-bit PWM, max. frequency 20 kHz
   - 1,000,000 write EEPROM endurance
   - Flash/Data EEPROM retention: > 40 years         Enhanced USART module:
Program memory Read/Write during run time            - Supports RS-485, RS-232, and LIN 2.0
In-Circuit Debugger (on board)                       - Auto-Baud Detect
                                                       - Auto-Wake-Up on Start bit
Low-Power Features:
                                                    In-Circuit Serial ProgrammingTM (ICSPTM) via two
Standby Current:                                     pins
   - 50 nA @ 2.0V, typical
                                                    Master Synchronous Serial Port (MSSP) module
Operating Current:                                   supporting 3-wire SPI (all 4 modes) and I2CTM
   - 11 A @ 32 kHz, 2.0V, typical                      Master and Slave Modes with I2C address mask
   - 220 A @ 4 MHz, 2.0V, typical

Watchdog Timer Current:
   - 1 A @ 2.0V, typical

2007 Microchip Technology Inc.                    Preliminary  DS41291D-page 1
PIC16F882/883/884/886/887

            Program  Data Memory           10-bit A/D ECCP/                             Timers
            Memory                                                                      8/16-bit
    Device           SRAM  EEPROM     I/O  (ch)    CCP       EUSART  MSSP  Comparators
              Flash
PIC16F882   (words)  (bytes) (bytes)
PIC16F883
PIC16F884     2048   128   128        28   11      1/1       1       1     2            2/1
PIC16F886     4096
PIC16F887     4096   256   256        24   11      1/1       1       1     2            2/1
              8192
              8192   256   256        35   14      1/1       1       1     2            2/1

                     368   256        24   11      1/1       1       1     2            2/1

                     368   256        35   14      1/1       1       1     2            2/1

DS41291D-page 2                       Preliminary                     2007 Microchip Technology Inc.
                                           PIC16F882/883/884/886/887

Pin Diagrams PIC16F882/883/886, 28-Pin PDIP, SOIC, SSOP

     28-pin PDIP, SOIC, SSOP

                RE3/MCLR/VPP                      1                        28     RB7/ICSPDAT

          RA0/AN0/ULPWU/C12IN0-                   2                        27     RB6/ICSPCLK

                RA1/AN1/C12IN1-                   3                        26     RB5/AN13/T1G

          RA2/AN2/VREF-/CVREF/C2IN+               4     PIC16F882/883/886  25     RB4/AN11/P1D

          RA3/AN3/VREF+/C1IN+                     5                        24     RB3/AN9/PGM/C12IN2-

               RA4/T0CKI/C1OUT                    6                        23     RB2/AN8/P1B

          RA5/AN4/SS/C2OUT                        7                        22     RB1/AN10/P1C/C12IN3-

                                      VSS         8                        21     RB0/AN12/INT

                RA7/OSC1/CLKIN                    9                        20     VDD

              RA6/OSC2/CLKOUT                     10                       19     VSS

               RC0/T1OSO/T1CKI                    11                       18     RC7/RX/DT

                RC1/T1OSI/CCP2                    12                       17     RC6/TX/CK

                RC2/P1A/CCP1                      13                       16     RC5/SDO

                  RC3/SCK/SCL                     14                       15     RC4/SDI/SDA

TABLE 1:  PIC16F882/883/886 28-PIN SUMMARY (PDIP, SOIC, SSOP)

I/O Pin Analog Comparators Timers                       ECCP EUSART MSSP Interrupt Pull-up              Basic

RA0  2 AN0/ULPWU  C12IN0-                    --         --                 --     --   --       --      --
RA1               C12IN1-                    --
RA2  3    AN1      C2IN+                     --         --                 --     --   --       --      --
RA3                C1IN+                     --
RA4  4    AN2     C1OUT                    T0CKI        --                 --     --   --       --      VREF-/CVREF
RA5               C2OUT                      --
RA6  5    AN3                                --         --                 --     --   --       --      VREF+
RA7                   --                     --
RB0  6    --          --                     --         --                 --     --   --       --      --
RB1                   --                     --
     7    AN4     C12IN3-                               --                 --     SS   --       --      --

     10   --                                            --                 --     --   --       -- OSC2/CLKOUT

     9    --                                            --                 --     --   --       -- OSC1/CLKIN

     21   AN12                                          --                 --     -- IOC/INT Y          --

     22   AN10                                          P1C                --     --   IOC      Y       --

RB2 23    AN8                     --       --           P1B                --     --   IOC      Y       --
RB3 24    AN9
RB4 25    AN11    C12IN2-                  --           --                 --     --   IOC      Y       PGM
RB5 26    AN13
RB6 27      --                    --       --           P1D                --     --   IOC      Y       --
RB7 28      --
RC0 11      --                    --       T1G          --                 --     --   IOC      Y       --
RC1 12      --
RC2 13      --                    --       --           --                 --     --   IOC      Y       ICSPCLK
RC3 14      --
RC4 15      --                    --       --           --                 --     --   IOC      Y       ICSPDAT
RC5 16      --
RC6 17      --                    --       T1OSO/T1CKI  --                 --     --   --       --      --
RC7 18      --
RE3 1       --                    --       T1OSI        CCP2               --     --   --       --      --
-- 20      --
--8        --                    --       --           CCP1/P1A --               --   --       --      --
-- 19      --
                                  --       --           --                 -- SCK/SCL --        --      --

                                  --       --           --                 -- SDI/SDA --        --      --

                                  --       --           --                 --     SDO  --       --      --

                                  --       --           --                 TX/CK  --   --       --      --

                                  --       --           --                 RX/DT  --   --       --      --

                                  --       --           --                 --     --   --       Y(1)    MCLR/VPP

                                  --       --           --                 --     --   --       --      VDD

                                  --       --           --                 --     --   --       --      VSS

                                  --       --           --                 --     --   --       --      VSS

Note 1: Pull-up activated only with external MCLR configuration.

2007 Microchip Technology Inc.                  Preliminary                                         DS41291D-page 3
PIC16F882/883/884/886/887

Pin Diagrams PIC16F882/883/886, 28-Pin QFN

       28-pin QFN

                                           RA1/AN1/C12IN1-  RA0/AN0/ULPWU/C12IN0-  RE3/MCLR/VPP  RB7/ICSPDAT  RB6/ICSPCLK  RB5/AN13/T1G  RB4/AN11/P1D

                                           28               27                     26            25           24           23            22

RA2/AN2/VREF-/CVREF/C2IN+               1                                                                                                              21  RB3/AN9/PGM/C12IN2-
         RA3/AN3/VREF+/C1IN+                                                                                                                               RB2/AN8/P1B
              RA4/T0CKI/C1OUT           2                                                                                                              20  RB1/AN10/P1C/C12IN3-
           RA5/AN4/SS/C2OUT                                                                                                                                RB0/AN12/INT
                                   VSS  3                                                                                                              19  VDD
               RA7/OSC1/CLKIN                                                                                                                              VSS
            RA6/OSC2/CLKOUT             4 PIC16F882/883/886 18                                                                                             RC7/RX/DT

                                        5                                                                                                              17

                                        6                                                                                                              16

                                        7                                          10            11           12           13            14            15

                                           8                9

                                           RC0/T1OSO/T1CKI  RC1/T1OSI/CCP2         RC2/P1A/CCP1  RC3/SCK/SCL  RC4/SDI/SDA  RC5/SDO       RC6/TX/CK

DS41291D-page 4                            Preliminary                                                                                                      2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

TABLE 2:  PIC16F882/883/886 28-PIN SUMMARY (QFN)

I/O Pin Analog Comparators Timers              ECCP EUSART MSSP Interrupt Pull-up          Basic

RA0  27 AN0/ULPWU  C12IN0-                --        --               --  --   --     --    --
RA1                C12IN1-                --        --               --
RA2  28   AN1       C2IN+                 --        --               --  --   --     --    --
RA3                 C1IN+                 --        --               --
RA4  1    AN2      C1OUT               T0CKI        --               --  --   --     --    VREF-/CVREF
RA5                C2OUT                  --        --               --
RA6  2    AN3                             --        --               --  --   --     --    VREF+
RA7                    --                 --        --               --
RB0  3    --           --                 --        --               --  --   --     --    --
RB1                    --                 --       P1C               --
RB2  4    AN4      C12IN3-                --       P1B               --  SS   --     --    --
RB3                    --                 --        --               --
RB4  7    --       C12IN2-                --       P1D               --  --   --     -- OSC2/CLKOUT
RB5                    --               T1G         --               --
RB6  6    --           --                 --        --               --  --   --     -- OSC1/CLKIN
RB7                    --                 --        --               --
RC0  18   AN12         --         T1OSO/T1CKI       --               --  -- IOC/INT  Y     --
RC1                    --              T1OSI      CCP2               --
RC2  19   AN10         --                 --   CCP1/P1A              --  --   IOC    Y     --
RC3                    --                 --        --               --
RC4  20   AN8          --                 --        --               --  --   IOC    Y     --
RC5                    --                 --        --               --
RC6  21   AN9          --                 --        --            TX/CK  --   IOC    Y     PGM
RC7                    --                 --        --            RX/DT
RE3  22   AN11         --                 --        --               --  --   IOC    Y     --
--                    --                 --        --               --
--  23   AN13         --                 --        --               --  --   IOC    Y     --
--                    --                 --        --               --
     24   --           --                                                --   IOC    Y     ICSPCLK

     25   --                                                             --   IOC    Y     ICSPDAT

     8    --                                                             --   --     --    --

     9    --                                                             --   --     --    --

     10   --                                                             --   --     --    --

     11   --                                                             SCK/SCL --  --    --

     12   --                                                             SDI/SDA --  --    --

     13   --                                                             SDO  --     --    --

     14   --                                                             --   --     --    --

     15   --                                                             --   --     --    --

     26   --                                                             --   --     Y(1)  MCLR/VPP

     17   --                                                             --   --     --    VDD

     5    --                                                             --   --     --    VSS

     16   --                                                             --   --     --    VSS

Note 1: Pull-up activated only with external MCLR configuration.

2007 Microchip Technology Inc.   Preliminary                                             DS41291D-page 5
PIC16F882/883/884/886/887

Pin Diagrams PIC16F884/887, 40-Pin PDIP

     40-pin PDIP

                 RE3/MCLR/VPP     1                       40  RB7/ICSPDAT
                                                              RB6/ICSPCLK
RA0/AN0/ULPWU/C12IN0-             2                       39  RB5/AN13/T1G
                                                              RB4/AN11
                 RA1/AN1/C12IN1-  3                       38  RB3/AN9/PGM/C12IN2-
                                                              RB2/AN8
RA2/AN2/VREF-/CVREF/C2IN+         4                       37  RB1/AN10/C12IN3-
                                                              RB0/AN12/INT
RA3/AN3/VREF+/C1IN+               5                       36  VDD
                                                              VSS
RA4/T0CKI/C1OUT                   6                       35  RD7/P1D
                                                              RD6/P1C
RA5/AN4/SS/C2OUT                  7                       34  RD5/P1B
                                                              RD4
                 RE0/AN5          8        PIC16F884/887  33  RC7/RX/DT
                                                              RC6/TX/CK
                 RE1/AN6          9                       32  RC5/SDO
                                                              RC4/SDI/SDA
                 RE2/AN7          10                      31  RD3
                                                              RD2
                 VDD              11                      30

                 VSS              12                      29

                 RA7/OSC1/CLKIN   13                      28

RA6/OSC2/CLKOUT                   14                      27

RC0/T1OSO/T1CKI                   15                      26

                 RC1/T1OSI/CCP2   16                      25

                 RC2/P1A/CCP1     17                      24

                 RC3/SCK/SCL      18                      23

                 RD0              19                      22

                 RD1              20                      21

DS41291D-page 6                       Preliminary             2007 Microchip Technology Inc.
                                      PIC16F882/883/884/886/887

TABLE 3:  PIC16F884/887 40-PIN SUMMARY (PDIP)

I/O Pin Analog Comparators Timers                  ECCP EUSART MSSP Interrupt Pull-up      Basic

RA0  2 AN0/ULPWU  C12IN0-               --         --             --     --   --     --    --
RA1               C12IN1-               --
RA2  3    AN1      C2IN+                --         --             --     --   --     --    --
RA3                C1IN+                --
RA4  4    AN2     C1OUT               T0CKI        --             --     --   --     --    VREF-/CVREF
RA5               C2OUT                 --
     5    AN3                                      --             --     --   --     --    VREF+

     6    --                                       --             --     --   --     --    --

     7    AN4                                      --             --     SS   --     --    --

RA6 14      --        --                      --        --           --  --   --     -- OSC2/CLKOUT
RA7 13      --        --                      --        --           --
RB0 33    AN12        --                      --        --           --  --   --     -- OSC1/CLKIN
RB1 34    AN10    C12IN3-                     --        --           --
RB2 35    AN8         --                      --        --           --  -- IOC/INT  Y     --
RB3 36    AN9     C12IN2-                     --        --           --
RB4 37    AN11        --                      --        --           --  --   IOC    Y     --
RB5 38    AN13        --                    T1G         --           --
RB6 39      --        --                      --        --           --  --   IOC    Y     --
RB7 40      --        --                      --        --           --
RC0 15      --        --              T1OSO/T1CKI       --           --  --   IOC    Y     PGM
RC1 16      --        --                   T1OSI      CCP2           --
RC2 17      --        --                      --   CCP1/P1A          --  --   IOC    Y     --
RC3 18      --        --                      --        --           --
RC4 23      --        --                      --        --           --  --   IOC    Y     --
RC5 24      --        --                      --        --           --
RC6 25      --        --                      --        --        TX/CK  --   IOC    Y     ICSPCLK
RC7 26      --        --                      --        --        RX/DT
RD0 19      --        --                      --        --           --  --   IOC    Y     ICSPDAT
RD1 20      --        --                      --        --           --
RD2 21      --        --                      --        --           --  --   --     --    --
RD3 22      --        --                      --        --           --
RD4 27      --        --                      --        --           --  --   --     --    --
RD5 28      --        --                      --       P1B           --
                                                                         --   --     --    --

                                                                         SCK/SCL --  --    --

                                                                         SDI/SDA --  --    --

                                                                         SDO  --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

RD6 29    --                      --  --           P1C            --     --   --     --    --

RD7 30    --                      --  --           P1D            --     --   --     --    --

RE0 8     AN5                     --  --           --             --     --   --     --    --

RE1 9     AN6                     --  --           --             --     --   --     --    --

RE2 10    AN7                     --  --           --             --     --   --     --    --

RE3 1     --                      --  --           --             --     --   --     Y(1)  MCLR/VPP

-- 11     --                      --  --           --             --     --   --     --    VDD

-- 32     --                      --  --           --             --     --   --     --    VDD

-- 12     --                      --  --           --             --     --   --     --    VSS

-- 31     --                      --  --           --             --     --   --     --    VSS

Note 1: Pull-up activated only with external MCLR configuration.

2007 Microchip Technology Inc.             Preliminary                                   DS41291D-page 7
PIC16F882/883/884/886/887

Pin Diagrams PIC16F884/887, 44-Pin QFN

    44-pin QFN

                             RC6/TX/CK            RC5/SDO  RC4/SDI/SDA  RD3           RD2          RD1          RD0           RC3/SCK/SCL            RC2/P1A/CCP1     RC1/T1OSCI/CCP2            RC0/T1OSO/T1CKI

          RC7/RX/DT           44                  43       42           41            40           39           38            37                     36               35                         34                    RA6/OSC2/CLKOUT
                    RD4                                                                                                                                                                                                RA7/OSC1/CLKIN
                          1                                                                                                                                                                      33                    VSS
             RD5/P1B                                                                                                                                                                                                   VSS
             RD6/P1C      2                                                                                                                                                                      32                    NC
             RD7/P1D                                                                                                                                                                                                   VDD
                          3                                                                                                                                                                      31                    RE2/AN7
                     VSS                                                                                                                                                                                               RE1/AN6
                    VDD   4                                                                                                                                                                      30                    RE0/AN5
                    VDD                                                                                                                                                                                                RA5/AN4/SS/C2OUT
      RB0/AN12/INT        5                                                                                                                                                                      29                    RA4/T0CKI/C1OUT
RB1/AN10/C12IN3-                                           PIC16F884/887 28
             RB2/AN8      6

                          7                                                                                                                                                                      27

                          8                                                                                                                                                                      26

                          9                                                                                                                                                                      25

                          10                                                                                                                                                                     24
                                                                                                                                                                                                 23
                          11 12                   13       14           15            16           17           18            19                     20               21                         22

                             RB3/AN9/PGM/C12IN2-  NC       RB4/AN11     RB5/AN13/T1G  RB6/ICSPCLK  RB7/ICSPDAT  RE3/MCLR/VPP  RA0/AN0/ULPWU/C12IN0-  RA1/AN1/C12IN1-  RA2/AN2/VREF-/CVREF/C2IN+  RA3/AN3//VREF+/C1IN+

DS41291D-page 8                                            Preliminary                                                                                                                                                 2007 Microchip Technology Inc.
                                      PIC16F882/883/884/886/887

TABLE 4:  PIC16F884/887 44-PIN SUMMARY (QFN)

I/O Pin Analog Comparators Timers                  ECCP EUSART MSSP Interrupt Pull-up      Basic

RA0  19 AN0/ULPWU  C12IN0-              --         --             --     --   --     --    --
RA1                C12IN1-              --
RA2  20   AN1       C2IN+               --         --             --     --   --     --    --
RA3                 C1IN+               --
RA4  21   AN2      C1OUT              T0CKI        --             --     --   --     --    VREF-/CVREF
RA5                C2OUT                --
     22   AN3                                      --             --     --   --     --    VREF+

     23   --                                       --             --     --   --     --    --

     24   AN4                                      --             --     SS   --     --    --

RA6 33      --         --                     --        --           --  --   --     -- OSC2/CLKOUT
RA7 32      --         --                     --        --           --
RB0 9     AN12         --                     --        --           --  --   --     -- OSC1/CLKIN
RB1 10    AN10     C12IN3-                    --        --           --
RB2 11    AN8          --                     --        --           --  -- IOC/INT  Y     --
RB3 12    AN9      C12IN2-                    --        --           --
RB4 14    AN11         --                     --        --           --  --   IOC    Y     --
RB5 15    AN13         --                   T1G         --           --
RB6 16      --         --                     --        --           --  --   IOC    Y     --
RB7 17      --         --                     --        --           --
RC0 34      --         --             T1OSO/T1CKI       --           --  --   IOC    Y     PGM
RC1 35      --         --                  T1OSI      CCP2           --
RC2 36      --         --                     --   CCP1/P1A          --  --   IOC    Y     --
RC3 37      --         --                     --        --           --
RC4 42      --         --                     --        --           --  --   IOC    Y     --
RC5 43      --         --                     --        --           --
RC6 44      --         --                     --        --        TX/CK  --   IOC    Y     ICSPCLK
RC7 1       --         --                     --        --        RX/DT
RD0 38      --         --                     --        --           --  --   IOC    Y     ICSPDAT
RD1 39      --         --                     --        --           --
RD2 40      --         --                     --        --           --  --   --     --    --
RD3 41      --         --                     --        --           --
RD4 2       --         --                     --        --           --  --   --     --    --
RD5 3       --         --                     --       P1B           --
                                                                         --   --     --    --

                                                                         SCK/SCL --  --    --

                                                                         SDI/SDA --  --    --

                                                                         SDO  --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

RD6 4     --                      --  --           P1C            --     --   --     --    --

RD7 5     --                      --  --           P1D            --     --   --     --    --

RE0 25    AN5                     --  --           --             --     --   --     --    --

RE1 26    AN6                     --  --           --             --     --   --     --    --

RE2 27    AN7                     --  --           --             --     --   --     --    --

RE3 18    --                      --  --           --             --     --   --     Y(1)  MCLR/VPP

--7       --                      --  --           --             --     --   --     --    VDD

--8       --                      --  --           --             --     --   --     --    VDD

-- 28     --                      --  --           --             --     --   --     --    VDD

--6       --                      --  --           --             --     --   --     --    VSS

-- 30     --                      --  --           --             --     --   --     --    VSS

-- 31     --                      --  --           --             --     --   --     --    VSS

-- 13     --                      --  --           --             --     --   --     -- NC (no connect)

-- 29     --                      --  --           --             --     --   --     -- NC (no connect)

Note 1: Pull-up activated only with external MCLR configuration.

2007 Microchip Technology Inc.             Preliminary                                   DS41291D-page 9
PIC16F882/883/884/886/887

Pin Diagrams PIC16F884/887, 44-Pin TQFP

    44-pin TQFP

                                   RC6/TX/CK  RC5/SDO  RC4/SDI/SDA  RD3           RD2          RD1          RD0           RC3/SCK/SCL            RC2/P1A/CCP1     RC1/T1OSCI/CCP2            NC

                RC7/RX/DT           44        43       42           41            40           39           38            37                     36               35                         34                    NC
                          RD4                                                                                                                                                                                      RC0/T1OSO/T1CKI
                                1                                                                                                                                                            33                    RA6/OSC2/CLKOUT
                   RD5/P1B                                                                                                                                                                                         RA7/OSC1/CLKIN
                   RD6/P1C      2                                                                                                                                                            32                    VSS
                   RD7/P1D                                                                                                                                                                                         VDD
                                3                                                                                                                                                            31                    RE2/AN7
                           VSS                                                                                                                                                                                     RE1/AN6
                          VDD   4                                                                                                                                                            30                    RE0/AN5
            RB0/AN12/INT                                                                                                                                                                                           RA5/AN4/SS/C2OUT
      RB1/AN10/C12IN3-          5                                                                                                                                                            29                    RA4/T0CKI/C1OUT
                   RB2/AN8                             PIC16F884/887 28
RB3/AN9/PGM/C12IN2-             6

                                7                                                                                                                                                            27

                                8                                                                                                                                                            26

                                9                                                                                                                                                            25

                                10                                                                                                                                                           24
                                                                                                                                                                                             23
                                11 12         13       14           15            16           17           18            19                     20               21                         22

                                   NC         NC       RB4/AN11     RB5/AN13/T1G  RB6/ICSPCLK  RB7/ICSPDAT  RE3/MCLR/VPP  RA0/AN0/ULPWU/C12IN0-  RA1/AN1/C12IN1-  RA2/AN2/VREF-/CVREF/C2IN+  RA3/AN3//VREF+/C1IN+

DS41291D-page 10                                       Preliminary                                                                                                                                                 2007 Microchip Technology Inc.
                                      PIC16F882/883/884/886/887

TABLE 5:  PIC16F884/887 44-PIN SUMMARY (TQFP)

I/O Pin Analog Comparators Timers                  ECCP EUSART MSSP Interrupt Pull-up      Basic

RA0  19 AN0/ULPWU  C12IN0-              --         --             --     --   --     --    --
RA1                C12IN1-              --
RA2  20   AN1       C2IN+               --         --             --     --   --     --    --
RA3                 C1IN+               --
RA4  21   AN2      C1OUT              T0CKI        --             --     --   --     --    VREF-/CVREF
RA5                C2OUT                --
     22   AN3                                      --             --     --   --     --    VREF+

     23   --                                       --             --     --   --     --    --

     24   AN4                                      --             --     SS   --     --    --

RA6 31      --         --                     --        --           --  --   --     -- OSC2/CLKOUT
RA7 31      --         --                     --        --           --
RB0 8     AN12         --                     --        --           --  --   --     -- OSC1/CLKIN
RB1 9     AN10     C12IN3-                    --        --           --
RB2 10    AN8          --                     --        --           --  -- IOC/INT  Y     --
RB3 11    AN9      C12IN2-                    --        --           --
RB4 14    AN11         --                     --        --           --  --   IOC    Y     --
RB5 15    AN13         --                   T1G         --           --
RB6 16      --         --                     --        --           --  --   IOC    Y     --
RB7 17      --         --                     --        --           --
RC0 32      --         --             T1OSO/T1CKI       --           --  --   IOC    Y     PGM
RC1 35      --         --                  T1OSI      CCP2           --
RC2 36      --         --                     --   CCP1/P1A          --  --   IOC    Y     --
RC3 37      --         --                     --        --           --
RC4 42      --         --                     --        --           --  --   IOC    Y     --
RC5 43      --         --                     --        --           --
RC6 44      --         --                     --        --        TX/CK  --   IOC    Y     ICSPCLK
RC7 1       --         --                     --        --        RX/DT
RD0 38      --         --                     --        --           --  --   IOC    Y     ICSPDAT
RD1 39      --         --                     --        --           --
RD2 40      --         --                     --        --           --  --   --     --    --
RD3 41      --         --                     --        --           --
RD4 2       --         --                     --        --           --  --   --     --    --
RD5 3       --         --                     --       P1B           --
                                                                         --   --     --    --

                                                                         SCK/SCL --  --    --

                                                                         SDI/SDA --  --    --

                                                                         SDO  --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

                                                                         --   --     --    --

RD6 4     --                      --  --           P1C            --     --   --     --    --

RD7 5     --                      --  --           P1D            --     --   --     --    --

RE0 25    AN5                     --  --           --             --     --   --     --    --

RE1 26    AN6                     --  --           --             --     --   --     --    --

RE2 27    AN7                     --  --           --             --     --   --     --    --

RE3 18    --                      --  --           --             --     --   --     Y(1)  MCLR/VPP

--7       --                      --  --           --             --     --   --     --    VDD

-- 28     --                      --  --           --             --     --   --     --    VDD

--6       --                      --  --           --             --     --   --     --    VSS

-- 13     --                      --  --           --             --     --   --     -- NC (no connect)

-- 29     --                      --  --           --             --     --   --     --    VSS

-- 34     --                      --  --           --             --     --   --     -- NC (no connect)

-- 33     --                      --  --           --             --     --   --     -- NC (no connect)

-- 12     --                      --  --           --             --     --   --     -- NC (no connect)

Note 1: Pull-up activated only with external MCLR configuration.

2007 Microchip Technology Inc.             Preliminary                                 DS41291D-page 11
PIC16F882/883/884/886/887

Table of Contents

1.0 Device Overview ........................................................................................................................................................................ 13
2.0 Memory Organization ................................................................................................................................................................. 21
3.0 I/O Ports ..................................................................................................................................................................................... 39
4.0 Oscillator Module (With Fail-Safe Clock Monitor)....................................................................................................................... 61
5.0 Timer0 Module ........................................................................................................................................................................... 73
6.0 Timer1 Module with Gate Control............................................................................................................................................... 76
7.0 Timer2 Module ........................................................................................................................................................................... 81
8.0 Comparator Module.................................................................................................................................................................... 83
9.0 Analog-to-Digital Converter (ADC) Module ................................................................................................................................ 99
10.0 Data EEPROM and Flash Program Memory Control ............................................................................................................... 111
11.0 Enhanced Capture/Compare/PWM Module ............................................................................................................................. 123
12.0 Enhanced Universal Synchronous Asynchronous Receiver Transmitter (EUSART) ............................................................... 149
13.0 Master Synchronous Serial Port (MSSP) Module .................................................................................................................... 175
14.0 Special Features of the CPU .................................................................................................................................................... 205
15.0 Instruction Set Summary .......................................................................................................................................................... 225
16.0 Development Support............................................................................................................................................................... 235
17.0 Electrical Specifications............................................................................................................................................................ 239
18.0 DC and AC Characteristics Graphs and Tables ....................................................................................................................... 261
19.0 Packaging Information.............................................................................................................................................................. 263
Appendix A: Data Sheet Revision History.......................................................................................................................................... 273
Appendix B: Migrating from other PIC Devices ............................................................................................................................... 273
Index .................................................................................................................................................................................................. 275
The Microchip Web Site ..................................................................................................................................................................... 283
Customer Change Notification Service .............................................................................................................................................. 283
Customer Support .............................................................................................................................................................................. 283
Reader Response .............................................................................................................................................................................. 284
Product Identification System............................................................................................................................................................. 285

                                    TO OUR VALUED CUSTOMERS

It is our intention to provide our valued customers with the best documentation possible to ensure successful use of your Microchip
products. To this end, we will continue to improve our publications to better suit your needs. Our publications will be refined and
enhanced as new volumes and updates are introduced.
If you have any questions or comments regarding this publication, please contact the Marketing Communications Department via E-
mail at docerrors@microchip.com or fax the Reader Response Form in the back of this data sheet to (480) 792-4150. We wel-
come your feedback.

Most Current Data Sheet

To obtain the most up-to-date version of this data sheet, please register at our Worldwide Web site at:
        http://www.microchip.com

You can determine the version of a data sheet by examining its literature number found on the bottom outside corner of any page.
The last character of the literature number is the version number, (e.g., DS30000A is version A of document DS30000).

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)

When contacting a sales office, please specify which device, revision of silicon and data sheet (include literature number) you are
using.

Customer Notification System

Register on our web site at www.microchip.com to receive the most current information on all of our products.

DS41291D-page 12  Preliminary   2007 Microchip Technology Inc.
                         PIC16F882/883/884/886/887

1.0 DEVICE OVERVIEW

The PIC16F882/883/884/886/887 is covered by this
data sheet. The PIC16F882/883/886 is available in 28-
pin PDIP, SOIC, SSOP and QFN packages. The
PIC16F884/887 is available in a 40-pin PDIP and 44-
pin QFN and TQFP packages. Figure 1-1 shows the
block diagram of PIC16F882/883/886 and Figure 1-2
shows a block diagram of the PIC16F884/887 device.
Table 1-1 and Table 1-2 show the corresponding pinout
descriptions.

2007 Microchip Technology Inc.  Preliminary  DS41291D-page 13
PIC16F882/883/884/886/887

FIGURE 1-1:       PIC16F882/883/886 BLOCK DIAGRAM

                            Configuration  13                                                             8                          PORTA      RA0
                                                     Program Counter            Data Bus                                             PORTB      RA1
                                 Flash                                                                                               PORTC      RA2
                             2K(2)/4K(1)/          8-Level Stack           RAM                                                       PORTE      RA3
                                                       (13-Bit)                                                                                 RA4
                               8K X 14                                128(2)/256(1)/                                                            RA5
                               Program                                  368 Bytes                                                               RA6
                               Memory                                                                                                           RA7
                                                                            File
             Program 14                                                 Registers                                                               RB0
                Bus                                                                                                                             RB1
                                                                      RAM Addr  9                                                               RB2
                          Instruction Reg                                                                                                       RB3
                                                                                Addr MUX                                                        RB4
                                                                                                                                                RB5
                                                   Direct Addr 7                                                         Indirect               RB6
                                                                                                                  8 Addr                        RB7

                                                                                                                  FSR Reg                       RC0
                                                                                                                                                RC1
                                                                                                      STATUS Reg                                RC2
                                           8                                                                                                    RC3
                                                                                                                                                RC4
                         Instruction                  Power-up            3                                                                     RC5
                         Decode &                       Timer                              MUX                                                  RC6
                                                                                                                                                RC7
                           Control                    Oscillator                  ALU
OSC1/CLKIN                                        Start-up Timer     8
OSC2/CLKOUT                Timing
                         Generation                   Power-on                   W Reg
                                                        Reset                                 CCP2
                                                                                                                                                RE3
                                                     Watchdog
                                                        Timer

                                                     Brown-out
                                                        Reset

              Internal                                                                                                CCP2
             Oscillator
                                                                                                                  In-Circuit
               Block                                                                                              Debugger

                                           MCLR VDD VSS                                                              (ICD)

T1OSI             Timer1                          TX/CK
T1OSO              32 kHz                                 RX/DT
                  Oscillator                                                   CCP1/P1A
                                                                                     P1B
T0CKI             T1G T1CKI                                                                 P1C
                                                                                                  P1D
                                                                                                                                SDO
                                                                                                                                      SDI/SDA
                                                                                                                                            SCK/SCL
                                                                                                                                                  SS

Timer0            Timer1                   Timer2  EUSART                       ECCP                                                    Master Synchronous
                                                                                                                                         Serial Port (MSSP)

VREF+             Analog-To-Digital Converter                      2 Analog Comparators                                       VREF+  8  EEDATA
VREF-                           (ADC)                                   and Reference                                         VREF-
                                                                                                                              CVREF       128(2)/
                                                                                                                                        256 Bytes
                  AN0
                     AN1                                                                                                                   Data
                         AN2
                            AN3                                                                                                         EEPROM
                                AN4
                                   AN8                                                                                                  EEADDR
                                       AN9
                                           AN10
                                              AN11
                                                  AN12
                                                     AN13
                                                                                 C1IN+
                                                                                     C12IN0-
                                                                                        C12IN1-
                                                                                            C12IN2-
                                                                                                C12IN3-
                                                                                                   C1OUT
                                                                                                       C2IN+
                                                                                                           C2OUT
Note 1: PIC16F883 only.
          2: PIC16F882 only.

DS41291D-page 14                                   Preliminary                                                                      2007 Microchip Technology Inc.
                                                   PIC16F882/883/884/886/887

FIGURE 1-2:  PIC16F884/PIC16F887 BLOCK DIAGRAM

                            Configuration  13                                                             8                         PORTA      RA0
                                                     Program Counter            Data Bus                                            PORTB      RA1
                                 Flash                                                                                              PORTC      RA2
                           4K(1)/8K X 14           8-Level Stack             RAM                                                    PORTD      RA3
                                                       (13-Bit)       256(1)/368 Bytes                                              PORTE      RA4
                               Program                                                                                                         RA5
                               Memory                                         File                                                             RA6
                                                                          Registers                                                            RA7
             Program 14
                Bus                                                   RAM Addr  9                                                              RB0
                          Instruction Reg                                                                                                      RB1
                                                                                Addr MUX                                                       RB2
                                                                                                                                               RB3
                                                   Direct Addr 7                                                        Indirect               RB4
                                                                                                                 8 Addr                        RB5
                                                                                                                                               RB6
                                                                                                                 FSR Reg                       RB7

                                                                                                      STATUS Reg                               RC0
                                           8                                                                                                   RC1
                                                                                                                                               RC2
OSC1/CLKIN              Instruction                  Power-up            3                                                                    RC3
OSC2/CLKOUT              Decode &                       Timer                              MUX                                                 RC4
                                                                                                                                               RC5
                           Control                    Oscillator                  ALU                                                          RC6
                                                   Start-up Timer     8                                                                        RC7
                            Timing
                         Generation                   Power-on                  W Reg                                                          RD0
                                                        Reset                                 CCP2                                             RD1
                                                                                                                                               RD2
                                                     Watchdog                                                                                  RD3
                                                        Timer                                                                                  RD4
                                                                                                                                               RD5
                                                     Brown-out                                                                                 RD6
                                                        Reset                                                                                  RD7

              Internal                                                                                               CCP2                      RE0
             Oscillator                                                                                                                        RE1
                                                                                                                 In-Circuit                    RE2
               Block                                                                                             Debugger                      RE3

                                           MCLR VDD VSS                                                             (ICD)

T1OSI        Timer1                               TX/CK
T1OSO         32 kHz                                      RX/DT
             Oscillator                                                        CCP1/P1A
                                                                                     P1B
T0CKI        T1G T1CKI                                                                      P1C
                                                                                                  P1D
                                                                                                                                 SDO
                                                                                                                                       SDI/SDA
                                                                                                                                             SCK/SCL
                                                                                                                                                   SS

Timer0       Timer1                        Timer2  EUSART                       ECCP                                                   Master Synchronous
                                                                                                                                        Serial Port (MSSP)

VREF+        Analog-To-Digital Converter                           2 Analog Comparators                                      VREF+  8  EEDATA
VREF-                      (ADC)                                        and Reference                                        VREF-
                                                                                                                             CVREF
                                                                                                                                       256 Bytes
                                                                                                                                          Data

                                                                                                                                       EEPROM

             AN0                                                                                                                       EEADDR
                AN1
                    AN2
                       AN3
                           AN4
                              AN5
                                  AN6
                                      AN7
                                         AN8
                                             AN9
                                                AN10
                                                    AN11
                                                        AN12
                                                           AN13
                                                                                C1IN+
                                                                                    C12IN0-
                                                                                        C12IN1-
                                                                                           C12IN2-
                                                                                               C12IN3-
                                                                                                   C1OUT
                                                                                                      C2IN+
                                                                                                          C2OUT

Note 1: PIC16F884 only.

2007 Microchip Technology Inc.                   Preliminary                                                                         DS41291D-page 15
PIC16F882/883/884/886/887

TABLE 1-1: PIC16F882/883/886 PINOUT DESCRIPTION

         Name              Function               Input Output                            Description
                                                  Type Type

RA0/AN0/ULPWU/C12IN0-         RA0                 TTL CMOS General purpose I/O.
RA1/AN1/C12IN1-               AN0
RA2/AN2/VREF-/CVREF/C2IN+  ULPWU                  AN   -- A/D Channel 0 input.
                           C12IN0-
RA3/AN3/VREF+/C1IN+           RA1                 AN   -- Ultra Low-Power Wake-up input.
RA4/T0CKI/C1OUT               AN1
RA5/AN4/SS/C2OUT           C12IN1-                AN   -- Comparator C1 or C2 negative input.
RA6/OSC2/CLKOUT               RA2
RA7/OSC1/CLKIN                AN2                 TTL CMOS General purpose I/O. Individually enabled pull-up.
RB0/AN12/INT                 VREF-
                            CVREF                 AN   -- A/D Channel 1 input.
                            C2IN+
                              RA3                 AN   -- Comparator C1 or C2 negative input.
                              AN3
                            VREF+                 TTL CMOS General purpose I/O.
                            C1IN+
                              RA4                 AN   -- A/D Channel 2.
                            T0CKI
                            C1OUT                 AN   -- A/D Negative Voltage Reference input.
                              RA5
                              AN4                 --   AN Comparator Voltage Reference output.
                               SS
                            C2OUT                 AN   -- Comparator C2 positive input.
                              RA6
                             OSC2                 TTL  -- General purpose I/O.
                           CLKOUT
                              RA7                 AN   -- A/D Channel 3.
                             OSC1
                            CLKIN                 AN   -- Programming voltage.
                              RB0
                                                  AN   -- Comparator C1 positive input.

                                                  TTL CMOS General purpose I/O. Individually enabled pull-up.

                                                  ST   -- Timer0 clock input.

                                                  -- CMOS Comparator C1 output.

                                                  TTL CMOS General purpose I/O.

                                                  AN   -- A/D Channel 4.

                                                  ST   -- Slave Select input.

                                                  -- CMOS Comparator C2 output.

                                                  TTL CMOS General purpose I/O.

                                                  -- XTAL Master Clear with internal pull-up.

                                                  -- CMOS FOSC/4 output.

                                                  TTL CMOS General purpose I/O.

                                                  XTAL -- Crystal/Resonator.

                                                  ST   -- External clock input/RC oscillator connection.

                                                  TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                         Individually enabled pull-up.

                           AN12                   AN   -- A/D Channel 12.
                            INT
                           RB1                    ST   -- External interrupt.

RB1/AN10/P1C/C12IN3-                              TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                         Individually enabled pull-up.

                            AN10                  AN   -- A/D Channel 10.
                             P1C
                           C12IN3-                -- CMOS PWM output.
                             RB2
                                                  AN   -- Comparator C1 or C2 negative input.

RB2/AN8/P1B                                       TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                         Individually enabled pull-up.

                                            AN8   AN   -- A/D Channel 8.

                                             P1B  -- CMOS PWM output.

Legend:  AN = Analog input or output              CMOS = CMOS compatible input or output       OD = Open Drain
         TTL = TTL compatible input
         HV = High Voltage                        ST = Schmitt Trigger input with CMOS levels

                                                  XTAL = Crystal

DS41291D-page 16                                       Preliminary                              2007 Microchip Technology Inc.
                                            PIC16F882/883/884/886/887

TABLE 1-1: PIC16F882/883/886 PINOUT DESCRIPTION (CONTINUED)

           Name                   Function  Input Output                            Description
                                            Type Type

RB3/AN9/PGM/C12IN2-               RB3       TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                   Individually enabled pull-up.

                                    AN9     AN   -- A/D Channel 9.
                                    PGM
                                  C12IN2-   ST   -- Low-voltage ICSPTM Programming enable pin.
                                    RB4
                                            AN   -- Comparator C1 or C2 negative input.

RB4/AN11/P1D                                TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                   Individually enabled pull-up.

                                  AN11      AN   -- A/D Channel 11.
                                  P1D
                                  RB5       -- CMOS PWM output.

RB5/AN13/T1G                                TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                   Individually enabled pull-up.

                                  AN13      AN   -- A/D Channel 13.
                                  T1G
                                  RB6       ST   -- Timer1 Gate input.

RB6/ICSPCLK                                 TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                   Individually enabled pull-up.

                                  ICSPCLK   ST   -- Serial Programming Clock.
                                     RB7
RB7/ICSPDAT                                 TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                   Individually enabled pull-up.

                                  ICSPDAT   ST CMOS ICSPTM Data I/O.

RC0/T1OSO/T1CKI                   RC0       ST CMOS General purpose I/O.

                                  T1OSO     -- CMOS Timer1 oscillator output.

                                  T1CKI     ST   -- Timer1 clock input.

RC1/T1OSI/CCP2                    RC1       ST CMOS General purpose I/O.

                                  T1OSI     ST   -- Timer1 oscillator input.

                                  CCP2      ST CMOS Capture/Compare/PWM2.

RC2/P1A/CCP1                      RC2       ST CMOS General purpose I/O.

                                  P1A       -- CMOS PWM output.

                                  CCP1      ST CMOS Capture/Compare/PWM1.

RC3/SCK/SCL                       RC3       ST CMOS General purpose I/O.

                                  SCK       ST CMOS SPI clock.

                                  SCL       ST   OD I2CTM clock.

RC4/SDI/SDA                       RC4       ST CMOS General purpose I/O.

                                  SDI       ST   -- SPI data input.

                                  SDA       ST   OD I2C data input/output.

RC5/SDO                           RC5       ST CMOS General purpose I/O.

                                  SDO       -- CMOS SPI data output.

RC6/TX/CK                         RC6       ST CMOS General purpose I/O.

                                  TX        -- CMOS EUSART asynchronous transmit.

                                  CK        ST CMOS EUSART synchronous clock.

RC7/RX/DT                         RC7       ST CMOS General purpose I/O.

                                  RX        ST   -- EUSART asynchronous input.

                                  DT        ST CMOS EUSART synchronous data.

RE3/MCLR/VPP                      RE3       TTL  -- General purpose input.

                                  MCLR      ST   -- Master Clear with internal pull-up.

                                  VPP       HV   -- Programming voltage.

VSS                               VSS       Power -- Ground reference.

VDD                               VDD       Power -- Positive supply.

Legend:    AN = Analog input or output      CMOS = CMOS compatible input or output       OD = Open Drain
           TTL = TTL compatible input
           HV = High Voltage                ST = Schmitt Trigger input with CMOS levels

                                            XTAL = Crystal

2007 Microchip Technology Inc.                 Preliminary                                     DS41291D-page 17
PIC16F882/883/884/886/887

TABLE 1-2: PIC16F884/887 PINOUT DESCRIPTION

         Name              Function               Input Output                   Description
                                                  Type Type

RA0/AN0/ULPWU/C12IN0-         RA0                 TTL CMOS General purpose I/O.
RA1/AN1/C12IN1-               AN0
RA2/AN2/VREF-/CVREF/C2IN+  ULPWU                  AN  -- A/D Channel 0 input.
                           C12IN0-
RA3/AN3/VREF+/C1IN+           RA1                 AN  -- Ultra Low-Power Wake-up input.
RA4/T0CKI/C1OUT               AN1
RA5/AN4/SS/C2OUT           C12IN1-                AN  -- Comparator C1 or C2 negative input.
RA6/OSC2/CLKOUT               RA2
RA7/OSC1/CLKIN                AN2                 TTL CMOS General purpose I/O.
RB0/AN12/INT                 VREF-
                            CVREF                 AN  -- A/D Channel 1 input.
                            C2IN+
                              RA3                 AN  -- Comparator C1 or C2 negative input.
                              AN3
                            VREF+                 TTL CMOS General purpose I/O.
                            C1IN+
                              RA4                 AN  -- A/D Channel 2.
                            T0CKI
                            C1OUT                 AN  -- A/D Negative Voltage Reference input.
                              RA5
                              AN4                 --  AN Comparator Voltage Reference output.
                               SS
                            C2OUT                 AN  -- Comparator C2 positive input.
                              RA6
                             OSC2                 TTL CMOS General purpose I/O.
                           CLKOUT
                              RA7                 AN  -- A/D Channel 3.
                             OSC1
                            CLKIN                 AN  -- A/D Positive Voltage Reference input.
                              RB0
                                                  AN  -- Comparator C1 positive input.

                                                  TTL CMOS General purpose I/O.

                                                  ST  -- Timer0 clock input.

                                                  -- CMOS Comparator C1 output.

                                                  TTL CMOS General purpose I/O.

                                                  AN  -- A/D Channel 4.

                                                  ST  -- Slave Select input.

                                                  -- CMOS Comparator C2 output.

                                                  TTL CMOS General purpose I/O.

                                                  -- XTAL Crystal/Resonator.

                                                  -- CMOS FOSC/4 output.

                                                  TTL CMOS General purpose I/O.

                                                  XTAL -- Crystal/Resonator.

                                                  ST  -- External clock input/RC oscillator connection.

                                                  TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                        Individually enabled pull-up.

                           AN12                   AN  -- A/D Channel 12.
                            INT
                           RB1                    ST  -- External interrupt.

RB1/AN10/C12IN3-                                  TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                        Individually enabled pull-up.

                            AN10                  AN  -- A/D Channel 10.
                           C12IN3-
                                                  AN  -- Comparator C1 or C2 negative input.
                             RB2
RB2/AN8                                           TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                        Individually enabled pull-up.

                           AN8                    AN  -- A/D Channel 8.

RB3/AN9/PGM/C12IN2-        RB3                    TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                        Individually enabled pull-up.

                                           AN9    AN  -- A/D Channel 9.

                                           PGM    ST  -- Low-voltage ICSPTM Programming enable pin.

                                         C12IN2-  AN  -- Comparator C1 or C2 negative input.

Legend:  AN = Analog input or output              CMOS = CMOS compatible input or output       OD = Open Drain
         TTL = TTL compatible input
         HV = High Voltage                        ST = Schmitt Trigger input with CMOS levels

                                                  XTAL = Crystal

DS41291D-page 18                                      Preliminary                         2007 Microchip Technology Inc.
                                            PIC16F882/883/884/886/887

TABLE 1-2: PIC16F884/887 PINOUT DESCRIPTION (CONTINUED)

           Name                   Function  Input  Output                      Description
                                            Type    Type

RB4/AN11                          RB4       TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                  Individually enabled pull-up.

                                  AN11      AN     -- A/D Channel 11.
                                  RB5
RB5/AN13/T1G                                TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                  Individually enabled pull-up.

                                  AN13      AN     -- A/D Channel 13.
                                  T1G
                                  RB6       ST     -- Timer1 Gate input.

RB6/ICSPCLK                                 TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                  Individually enabled pull-up.

                                  ICSPCLK   ST     -- Serial Programming Clock.
                                     RB7
RB7/ICSPDAT                                 TTL CMOS General purpose I/O. Individually controlled interrupt-on-change.
                                                                  Individually enabled pull-up.

                                  ICSPDAT   ST TTL ICSPTM Data I/O.

RC0/T1OSO/T1CKI                   RC0       ST CMOS General purpose I/O.

                                  T1OSO     -- XTAL Timer1 oscillator output.

                                  T1CKI     ST     -- Timer1 clock input.

RC1/T1OSI/CCP2                    RC1       ST CMOS General purpose I/O.

                                  T1OSI     XTAL -- Timer1 oscillator input.

                                  CCP2      ST CMOS Capture/Compare/PWM2.

RC2/P1A/CCP1                      RC2       ST CMOS General purpose I/O.

                                  P1A       ST CMOS PWM output.

                                  CCP1      -- CMOS Capture/Compare/PWM1.

RC3/SCK/SCL                       RC3       ST CMOS General purpose I/O.

                                  SCK       ST CMOS SPI clock.

                                  SCL       ST     OD I2CTM clock.

RC4/SDI/SDA                       RC4       ST CMOS General purpose I/O.

                                  SDI       ST     -- SPI data input.

                                  SDA       ST     OD I2C data input/output.

RC5/SDO                           RC5       ST CMOS General purpose I/O.

                                  SDO       -- CMOS SPI data output.

RC6/TX/CK                         RC6       ST CMOS General purpose I/O.

                                  TX        -- CMOS EUSART asynchronous transmit.

                                  CK        ST CMOS EUSART synchronous clock.

RC7/RX/DT                         RC7       ST CMOS General purpose I/O.

                                  RX        ST     -- EUSART asynchronous input.

                                  DT        ST CMOS EUSART synchronous data.

RD0                               RD0       TTL CMOS General purpose I/O.

RD1                               RD1       TTL CMOS General purpose I/O.

RD2                               RD2       TTL CMOS General purpose I/O.

RD3                               RD3       TTL CMOS General purpose I/O.

RD4                               RD4       TTL CMOS General purpose I/O.

RD5/P1B                           RD5       TTL CMOS General purpose I/O.

                                  P1B       -- CMOS PWM output.

RD6/P1C                           RD6       TTL CMOS General purpose I/O.

                                  P1C       -- CMOS PWM output.

Legend:    AN = Analog input or output      CMOS = CMOS compatible input or output       OD = Open Drain
           TTL = TTL compatible input
           HV = High Voltage                ST = Schmitt Trigger input with CMOS levels

                                            XTAL = Crystal

2007 Microchip Technology Inc.                   Preliminary                              DS41291D-page 19
PIC16F882/883/884/886/887

TABLE 1-2: PIC16F884/887 PINOUT DESCRIPTION (CONTINUED)

         Name     Function            Input Output                    Description
                                      Type Type

RD7/P1D           RD7                 TTL CMOS General purpose I/O.

                  P1D                 AN   -- PWM output.

RE0/AN5           RE0                 TTL CMOS General purpose I/O.

                  AN5                 AN   -- A/D Channel 5.

RE1/AN6           RE1                 ST CMOS General purpose I/O.

                  AN6                 AN   -- A/D Channel 6.

RE2/AN7           RE2                 TTL CMOS General purpose I/O.

                  AN7                 AN   -- A/D Channel 7.

RE3/MCLR/VPP      RE3                 TTL  -- General purpose input.

                  MCLR                ST   -- Master Clear with internal pull-up.

                  VPP                 HV   -- Programming voltage.

VSS               VSS                 Power -- Ground reference.

VDD               VDD                 Power -- Positive supply.

Legend:  AN = Analog input or output  CMOS = CMOS compatible input or output       OD = Open Drain
         TTL = TTL compatible input
         HV = High Voltage            ST = Schmitt Trigger input with CMOS levels

                                      XTAL = Crystal

DS41291D-page 20                           Preliminary                         2007 Microchip Technology Inc.
                                      PIC16F882/883/884/886/887

2.0 MEMORY ORGANIZATION                                  FIGURE 2-2:     PROGRAM MEMORY MAP
                                                                         AND STACK FOR THE
2.1 Program Memory Organization                                          PIC16F883/PIC16F884

The PIC16F882/883/884/886/887 has a 13-bit program                       PC<12:0>
counter capable of addressing a 2K x 14 (0000h-07FFh)
for the PIC16F882, 4K x 14 (0000h-0FFFh) for the          CALL, RETURN                  13
PIC16F883/PIC16F884, and 8K x 14 (0000h-1FFFh) for
the PIC16F886/PIC16F887 program memory space.             RETFIE, RETLW
Accessing a location above these boundaries will cause
a wraparound within the first 8K x 14 space. The Reset                   Stack Level 1
vector is at 0000h and the interrupt vector is at 0004h                  Stack Level 2
(see Figures 2-2 and 2-3).
                                                                         Stack Level 8
FIGURE 2-1:    PROGRAM MEMORY MAP                                        Reset Vector       0000h
               AND STACK FOR THE
               PIC16F882

               PC<12:0>                                                  Interrupt Vector   0004h
                                                                              Page 0        0005h
CALL, RETURN                      13                                          Page 1
                                                                                            07FFh
RETFIE, RETLW                                            On-Chip                            0800h
                                                         Program
                                                         Memory                             0FFFh

               Stack Level 1
               Stack Level 2

               Stack Level 8                             FIGURE 2-3:     PROGRAM MEMORY MAP
               Reset Vector                                              AND STACK FOR THE
                                      0000h                              PIC16F886/PIC16F887

                                                                         PC<12:0>

                                                          CALL, RETURN                  13

               Interrupt Vector       0004h               RETFIE, RETLW
                    Page 0            0005h
On-Chip
Program                               07FFh                              Stack Level 1
Memory                                                                   Stack Level 2

                                                                         Stack Level 8      0000h
                                                                         Reset Vector

                                                         On-Chip         Interrupt Vector   0004h
                                                         Program              Page 0        0005h
                                                         Memory               Page 1
                                                                              Page 2        07FFh
                                                                              Page 3        0800h

                                                                                            0FFFh
                                                                                            1000h

                                                                                            17FFh
                                                                                            1800h

                                                                                            1FFFh

2007 Microchip Technology Inc.             Preliminary                                    DS41291D-page 21
PIC16F882/883/884/886/887

2.2 Data Memory Organization

The data memory (see Figures 2-2 and 2-3) is
partitioned into four banks which contain the General
Purpose Registers (GPR) and the Special Function
Registers (SFR). The Special Function Registers are
located in the first 32 locations of each bank. The
General Purpose Registers, implemented as static
RAM, are located in the last 96 locations of each Bank.
Register locations F0h-FFh in Bank 1, 170h-17Fh in
Bank 2 and 1F0h-1FFh in Bank 3, point to addresses
70h-7Fh in Bank 0. The actual number of General
Purpose Resisters (GPR) implemented in each Bank
depends on the device. Details are shown in
Figures 2-5 and 2-6. All other RAM is unimplemented
and returns `0' when read. RP<1:0> of the STATUS
register are the bank select bits:

RP1 RP0

  0 0 Bank 0 is selected

  0 1 Bank 1 is selected

  1 0 Bank 2 is selected

  1 1 Bank 3 is selected

2.2.1  GENERAL PURPOSE REGISTER
       FILE

The register file is organized as 128 x 8 in the
PIC16F882, 256 x 8 in the PIC16F883/PIC16F884, and
368 x 8 in the PIC16F886/PIC16F887. Each register is
accessed, either directly or indirectly, through the File
Select Register (FSR) (see Section 2.4 "Indirect
Addressing, INDF and FSR Registers").

Note:  The IRP and RP1 bits of the STATUS reg-
       ister are reserved and should always be
       maintained as `0's.

2.2.2 SPECIAL FUNCTION REGISTERS

The Special Function Registers are registers used by
the CPU and peripheral functions for controlling the
desired operation of the device (see Table 2-1). These
registers are static RAM.

The special registers can be classified into two sets:
core and peripheral. The Special Function Registers
associated with the "core" are described in this section.
Those related to the operation of the peripheral
features are described in the section of that peripheral
feature.

DS41291D-page 22                 Preliminary                2007 Microchip Technology Inc.
                                                      PIC16F882/883/884/886/887

FIGURE 2-4:              PIC16F882 SPECIAL FUNCTION REGISTERS

     Indirect addr. (1)  File                         File                            File                         File
           TMR0                                                                    Address                      Address
            PCL          Address  Indirect addr. (1)  Address  Indirect addr. (1)           Indirect addr. (1)
                            00h                          80h                         100h   OPTION_REG            180h
         STATUS                                                                      101h                         181h
            FSR          01h      OPTION_REG          81h      TMR0                  102h          PCL            182h
                                                                                     103h       STATUS            183h
          PORTA          02h      PCL                 82h      PCL                   104h                         184h
          PORTB                                                                      105h          FSR            185h
          PORTC          03h      STATUS              83h      STATUS                106h        SRCON            186h
                                                                                     107h         TRISB           187h
          PORTE          04h      FSR                 84h      FSR                   108h      BAUDCTL            188h
         PCLATH                                                                      109h        ANSEL            189h
         INTCON          05h      TRISA               85h      WDTCON                10Ah       ANSELH            18Ah
                                                                                     10Bh       PCLATH            18Bh
            PIR1         06h      TRISB               86h      PORTB                10Ch        INTCON           18Ch
            PIR2                                                                    10Dh        EECON1           18Dh
          TMR1L          07h      TRISC               87h      CM1CON0               10Eh      EECON2(1)          18Eh
          TMR1H                                                                      10Fh       Reserved          18Fh
          T1CON          08h                          88h      CM2CON0               110h       Reserved          190h
           TMR2                                                                      111h                         191h
          T2CON          09h      TRISE               89h      CM2CON1               112h                         192h
         SSPBUF                                                                      113h                         193h
         SSPCON          0Ah      PCLATH              8Ah      PCLATH                114h                         194h
         CCPR1L                                                                      115h                         195h
         CCPR1H          0Bh      INTCON              8Bh      INTCON                116h                         196h
        CCP1CON                                                                      117h                         197h
          RCSTA          0Ch      PIE1                8Ch      EEDAT                 118h                         198h
          TXREG                                                                      119h                         199h
          RCREG          0Dh      PIE2                8Dh      EEADR                 11Ah                         19Ah
         CCPR2L                                                                      11Bh                         19Bh
         CCPR2H          0Eh      PCON                8Eh      EEDATH                11Ch                        19Ch
        CCP2CON                                                                      11Dh                        19Dh
         ADRESH          0Fh      OSCCON              8Fh      EEADRH                11Eh                         19Eh
         ADCON0                                                                      11Fh                         19Fh
                         10h      OSCTUNE             90h                            120h                         1A0h
          General
          Purpose        11h      SSPCON2             91h
         Registers
                         12h      PR2                 92h

                         13h      SSPADD              93h

                         14h      SSPSTAT             94h

                         15h      WPUB                95h

                         16h      IOCB                96h

                         17h      VRCON               97h

                         18h      TXSTA               98h

                         19h      SPBRG               99h

                         1Ah      SPBRGH              9Ah

                         1Bh      PWM1CON             9Bh

                         1Ch      ECCPAS              9Ch

                         1Dh      PSTRCON             9Dh

                         1Eh      ADRESL              9Eh

                         1Fh      ADCON1              9Fh

                         20h      General             A0h

                                  Purpose

                                  Registers

                                  32 Bytes            BFh

                                                      C0h

96 Bytes

                                                      EFh                          16Fh                         1EFh

                                  accesses            F0h      accesses            170h     accesses            1F0h

                         7Fh      70h-7Fh             FFh      70h-7Fh             17Fh     70h-7Fh             1FFh

Bank 0                            Bank 1                       Bank 2                       Bank 3

     Unimplemented data memory locations, read as `0'.
Note 1: Not a physical register.

2007 Microchip Technology Inc.                      Preliminary                                   DS41291D-page 23
PIC16F882/883/884/886/887

FIGURE 2-5:       PIC16F883/PIC16F884 SPECIAL FUNCTION REGISTERS

                  File                File                         File                File

                  Address             Address                      Address             Address

Indirect addr. (1) 00h Indirect addr. (1) 80h Indirect addr. (1) 100h Indirect addr. (1) 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               WDTCON     105h     SRCON      185h

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

PORTC             07h       TRISC     87h               CM1CON0    107h     BAUDCTL    187h
                           TRISD(2)
PORTD(2)          08h                 88h               CM2CON0    108h     ANSEL      188h

PORTE             09h      TRISE      89h               CM2CON1    109h     ANSELH     189h

PCLATH            0Ah      PCLATH     8Ah               PCLATH     10Ah     PCLATH     18Ah

INTCON            0Bh      INTCON     8Bh               INTCON     10Bh     INTCON     18Bh

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

PIR2              0Dh      PIE2       8Dh               EEADR      10Dh     EECON2(1)  18Dh

TMR1L             0Eh      PCON       8Eh               EEDATH     10Eh     Reserved   18Eh

TMR1H             0Fh      OSCCON     8Fh               EEADRH     10Fh     Reserved   18Fh

T1CON             10h      OSCTUNE    90h                          110h                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      WPUB       95h                          115h                195h

CCPR1H            16h      IOCB       96h                          116h                196h

CCP1CON           17h      VRCON      97h                          117h                197h

RCSTA             18h      TXSTA      98h                          118h                198h

TXREG             19h      SPBRG      99h                          119h                199h

RCREG             1Ah      SPBRGH     9Ah                          11Ah                19Ah

CCPR2L            1Bh      PWM1CON    9Bh                          11Bh                19Bh

CCPR2H            1Ch      ECCPAS     9Ch                          11Ch                19Ch

CCP2CON           1Dh      PSTRCON    9Dh                          11Dh                19Dh

ADRESH            1Eh      ADRESL     9Eh                          11Eh                19Eh

ADCON0            1Fh      ADCON1     9Fh                          11Fh                19Fh

                  20h      General    A0h               General    120h                1A0h

General                    Purpose                      Purpose
Purpose                    Registers                    Registers

Registers                  80 Bytes                     80 Bytes

96 Bytes                              EFh                          16Fh                1EFh

                           accesses   F0h               accesses   170h     accesses   1F0h

                  7Fh      70h-7Fh    FFh               70h-7Fh    17Fh     70h-7Fh    1FFh

Bank 0                     Bank 1                       Bank 2              Bank 3

     Unimplemented data memory locations, read as `0'.
Note 1: Not a physical register.

        2: PIC16F884 only.

DS41291D-page 24                      Preliminary                            2007 Microchip Technology Inc.
                                             PIC16F882/883/884/886/887

FIGURE 2-6:  PIC16F886/PIC16F887 SPECIAL FUNCTION REGISTERS

             File                            File                  File                File

             Address                         Address               Address             Address

Indirect addr. (1) 00h Indirect addr. (1) 80h Indirect addr. (1) 100h Indirect addr. (1) 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        WDTCON     105h     SRCON      185h

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

PORTC        07h                   TRISC     87h        CM1CON0    107h     BAUDCTL    187h
                                  TRISD(2)
PORTD(2)     08h                             88h        CM2CON0    108h     ANSEL      188h

PORTE        09h                  TRISE      89h        CM2CON1    109h     ANSELH     189h

PCLATH       0Ah                  PCLATH     8Ah        PCLATH     10Ah     PCLATH     18Ah

INTCON       0Bh                  INTCON     8Bh        INTCON     10Bh     INTCON     18Bh

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

PIR2         0Dh                  PIE2       8Dh        EEADR      10Dh     EECON2(1)  18Dh

TMR1L        0Eh                  PCON       8Eh        EEDATH     10Eh     Reserved   18Eh

TMR1H        0Fh                  OSCCON     8Fh        EEADRH     10Fh     Reserved   18Fh

T1CON        10h                  OSCTUNE    90h                   110h                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                  WPUB       95h                   115h                195h

CCPR1H       16h                   IOCB      96h        General    116h     General    196h
                                  VRCON
CCP1CON      17h                  TXSTA      97h        Purpose    117h     Purpose    197h

RCSTA        18h                             98h        Registers  118h     Registers  198h

TXREG        19h                  SPBRG      99h        16 Bytes   119h     16 Bytes   199h

RCREG        1Ah                  SPBRGH     9Ah                   11Ah                19Ah

CCPR2L       1Bh                  PWM1CON    9Bh                   11Bh                19Bh

CCPR2H       1Ch                  ECCPAS     9Ch                   11Ch                19Ch

CCP2CON      1Dh                  PSTRCON    9Dh                   11Dh                19Dh

ADRESH       1Eh                  ADRESL     9Eh                   11Eh                19Eh

ADCON0       1Fh                  ADCON1     9Fh                   11Fh                19Fh

             20h                  General    A0h                   120h                1A0h

             3Fh                  Purpose                General             General
                                                        Purpose             Purpose
General      40h                  Registers             Registers           Registers
Purpose

Registers                         80 Bytes              80 Bytes            80 Bytes

96 Bytes     6Fh                             EFh                   16Fh                1EFh

             70h                  accesses   F0h        accesses   170h     accesses   1F0h

             7Fh                  70h-7Fh    FFh        70h-7Fh    17Fh     70h-7Fh    1FFh

Bank 0                            Bank 1                Bank 2              Bank 3

     Unimplemented data memory locations, read as `0'.
Note 1: Not a physical register.

        2: PIC16F887 only.

2007 Microchip Technology Inc.             Preliminary                            DS41291D-page 25
PIC16F882/883/884/886/887

TABLE 2-1: PIC16F882/883/884/886/887 SPECIAL FUNCTION REGISTERS SUMMARY BANK 0

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

Bank 0

00h INDF          Addressing this location uses contents of FSR to address data memory (not a physical register) xxxx xxxx 37,213

01h TMR0          Timer0 Module Register                                                                       xxxx xxxx 73,213

02h PCL           Program Counter's (PC) Least Significant Byte                                                0000 0000 37,213

03h STATUS        IRP    RP1              RP0           TO        PD        Z                  DC      C       0001 1xxx 29,213

04h FSR           Indirect Data Memory Address Pointer                                                         xxxx xxxx  37,213
                                                                                                               xxxx xxxx  39,213
05h PORTA(3)      RA7    RA6              RA5           RA4       RA3        RA2                RA1     RA0    xxxx xxxx  48,213
                                                                  RB3        RB2                RB1     RB0    xxxx xxxx  53,213
06h PORTB(3)      RB7    RB6              RB5           RB4       RC3        RC2                RC1     RC0    xxxx xxxx  57,213
                                                                  RD3        RD2                RD1     RD0    ---- xxxx  59,213
07h PORTC(3)      RC7    RC6              RC5           RC4       RE3       RE2(4)             RE1(4)  RE0(4)

08h PORTD(3,4)    RD7    RD6              RD5           RD4

09h PORTE(3)      --     --               --            --

0Ah PCLATH        --     --               --     Write Buffer for upper 5 bits of Program Counter              ---0 0000 37,213
0Bh INTCON
                  GIE    PEIE             T0IE          INTE      RBIE      T0IF               INTF    RBIF(1) 0000 000x 31,213

0Ch PIR1          --     ADIF             RCIF          TXIF      SSPIF CCP1IF TMR2IF TMR1IF -000 0000 34,213

0Dh PIR2          OSFIF  C2IF             C1IF          EEIF      BCLIF ULPWUIF                --      CCP2IF 0000 00-0 35,213

0Eh TMR1L         Holding Register for the Least Significant Byte of the 16-bit TMR1 Register                  xxxx xxxx 76,213

0Fh TMR1H         Holding Register for the Most Significant Byte of the 16-bit TMR1 Register                   xxxx xxxx 76,213

10h T1CON         T1GINV TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 79,213

11h TMR2          Timer2 Module Register                                                                       0000 0000 81,213

12h T2CON         --     TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 82,213

13h SSPBUF        Synchronous Serial Port Receive Buffer/Transmit Register                                     xxxx xxxx  179,213
                                                                                                               0000 0000  177,213
14h SSPCON(2)     WCOL SSPOV SSPEN                      CKP      SSPM3      SSPM2              SSPM1   SSPM0

15h CCPR1L        Capture/Compare/PWM Register 1 Low Byte (LSB)                                                xxxx xxxx 126,213

16h CCPR1H        Capture/Compare/PWM Register 1 High Byte (MSB)                                               xxxx xxxx 126,213

17h CCP1CON       P1M1   P1M0             DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000 124,213

18h RCSTA         SPEN   RX9              SREN          CREN ADDEN FERR                        OERR    RX9D 0000 000x 159,213

19h TXREG         EUSART Transmit Data Register                                                                0000 0000 151,213

1Ah RCREG         EUSART Receive Data Register                                                                 0000 0000 156,213

1Bh CCPR2L        Capture/Compare/PWM Register 2 Low Byte (LSB)                                                xxxx xxxx 126,213

1Ch CCPR2H        Capture/Compare/PWM Register 2 High Byte (MSB)                                               xxxx xxxx 126,214

1Dh CCP2CON       --     --               DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 125,214

1Eh ADRESH        A/D Result Register High Byte                                                                xxxx xxxx 99,214

1Fh ADCON0        ADCS1 ADCS0             CHS3          CHS2      CHS1      CHS0 GO/DONE ADON 0000 0000 104,214

Legend:       = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1:       MCLR and WDT Reset do not affect the previous value data latch. The RBIF bit will be cleared upon Reset but will set again if the
              mismatch exists.
          2:  When SSPCON register bits SSPM<3:0> = 1001, any reads or writes to the SSPADD SFR address are accessed through the SSPMSK
          3:  register. See Registers and 13-4 for more detail.
          4:  Port pins with analog functions controlled by the ANSEL and ANSELH registers will read `0' immediately after a Reset even though the
              data latches are either undefined (POR) or unchanged (other Resets).
              PIC16F884/PIC16F887 only.

DS41291D-page 26                                        Preliminary                                     2007 Microchip Technology Inc.
                                                  PIC16F882/883/884/886/887

TABLE 2-2: PIC16F882/883/884/886/887 SPECIAL FUNCTION REGISTERS SUMMARY BANK 1

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

Bank 1

80h INDF            Addressing this location uses contents of FSR to address data memory (not a physical register) xxxx xxxx 37,213

81h OPTION_REG RBPU INTEDG T0CS                           T0SE     PSA       PS2    PS1    PS0 1111 1111 30,214

82h PCL             Program Counter's (PC) Least Significant Byte                                           0000 0000 37,213

83h STATUS          IRP           RP1    RP0              TO       PD        Z      DC     C                0001 1xxx 29,213

84h FSR             Indirect Data Memory Address Pointer                                                    xxxx xxxx 37,213

85h TRISA           TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 1111 1111 39,214

86h TRISB           TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 48,214

87h TRISC           TRISC7  TRISC6       TRISC5           TRISC4   TRISC3     TRISC2 TRISC1 TRISC0 1111 1111           53,214
88h TRISD(3)        TRISD7  TRISD6       TRISD5           TRISD4   TRISD3     TRISD2 TRISD1 TRISD0 1111 1111           57,214
89h TRISE                                                          TRISE3    TRISE2(3) TRISE1(3) TRISE0(3) ---- 1111   59,214
                       --      --           --               --

8Ah PCLATH          --            --     --       Write Buffer for the upper 5 bits of the Program Counter  ---0 0000 37,213
8Bh INTCON
                    GIE           PEIE   T0IE             INTE     RBIE      T0IF   INTF   RBIF(1) 0000 000x 31,213

8Ch PIE1            --            ADIE   RCIE             TXIE     SSPIE CCP1IE TMR2IE TMR1IE -000 0000 32,214

8Dh PIE2            OSFIE         C2IE   C1IE             EEIE     BCLIE ULPWUIE    --     CCP2IE 0000 00-0 33,214

8Eh PCON            --            --     ULPWUE SBOREN                   --  --     POR    BOR --01 --qq 36,214

8Fh OSCCON          --            IRCF2  IRCF1            IRCF0    OSTS      HTS    LTS    SCS -110 q000 62,214

90h OSCTUNE         --            --     --               TUN4     TUN3      TUN2   TUN1   TUN0 ---0 0000 66,214

91h SSPCON2         GCEN ACKSTAT ACKDT ACKEN RCEN                            PEN    RSEN   SEN 0000 0000 177,214

92h PR2             Timer2 Period Register                                                                  1111 1111  81,214
93h SSPADD(2)       Synchronous Serial Port (I2C mode) Address Register                                     0000 0000  185,214
93h SSPMSK(2)                                                                                               1111 1111  204,214
                    MSK7          MSK6   MSK5             MSK4     MSK3      MSK2   MSK1   MSK0

94h SSPSTAT         SMP           CKE    D/A              P              S   R/W    UA     BF               0000 0000 185,214

95h WPUB            WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 1111 1111 49,214

96h IOCB            IOCB7 IOCB6 IOCB5 IOCB4 IOCB3 IOCB2 IOCB1 IOCB0 0000 0000 49,214

97h VRCON           VREN          VROE   VRR              VRSS     VR3       VR2    VR1    VR0 0000 0000 97,214

98h TXSTA           CSRC          TX9    TXEN             SYNC SENDB BRGH           TRMT   TX9D 0000 0010 158,214

99h SPBRG           BRG7          BRG6   BRG5             BRG4     BRG3      BRG2   BRG1   BRG0 0000 0000 161,214

9Ah SPBRGH          BRG15 BRG14 BRG13 BRG12 BRG11 BRG10 BRG9                               BRG8 0000 0000 161,214

9Bh PWM1CON         PRSEN PDC6           PDC5             PDC4     PDC3      PDC2   PDC1   PDC0 0000 0000 144,214

9Ch ECCPAS          ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0 0000 0000 141,214

9Dh PSTRCON         --            --     --       STRSYNC STRD               STRC   STRB   STRA ---0 0001 145,214

9Eh ADRESL          A/D Result Register Low Byte                                                            xxxx xxxx 99,214

9Fh ADCON1          ADFM          --     VCFG1 VCFG0                     --  --     --     --               0-00 ---- 105,214

Legend:       = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1:       MCLR and WDT Reset do not affect the previous value data latch. The RBIF bit will be cleared upon Reset but will set again if the
              mismatch exists.
          2:  Accessible only when SSPCON register bits SSPM<3:0> = 1001.
          3:  PIC16F884/PIC16F887 only.

2007 Microchip Technology Inc.                          Preliminary                                       DS41291D-page 27
PIC16F882/883/884/886/887

TABLE 2-3: PIC16F882/883/884/886/887 SPECIAL FUNCTION REGISTERS SUMMARY BANK 2

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

Bank 2

100h INDF           Addressing this location uses contents of FSR to address data memory (not a physical register)  xxxx xxxx 37,213

101h TMR0           Timer0 Module Register                                                                          xxxx xxxx 73,213

102h PCL            Program Counter's (PC) Least Significant Byte                                                   0000 0000 37,213

103h STATUS         IRP     RP1             RP0           TO       PD        Z      DC        C                     0001 1xxx 29,213

104h FSR            Indirect Data Memory Address Pointer                                                            xxxx xxxx 37,213

105h WDTCON         --      --              --            WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN ---0 1000 221,214

106h PORTB          RB7     RB6             RB5           RB4      RB3       RB2    RB1    RB0 xxxx xxxx 48,213

107h CM1CON0 C1ON C1OUT C1OE                              C1POL          --  C1R    C1CH1 C1CH0 0000 -000 88,214

108h CM2CON0 C2ON C2OUT C2OE                              C2POL          --  C2R    C2CH1 C2CH0 0000 -000 89,214

109h CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL                                 --  --     T1GSS C2SYNC 0000 --10 91,215

10Ah PCLATH         --      --              --            Write Buffer for the upper 5 bits of the Program Counter  ---0 0000  37,213
10Bh INTCON                                                                                                         0000 000x  31,213
                    GIE     PEIE            T0IE          INTE     RBIE      T0IF   INTF   RBIF(1)

10Ch EEDAT          EEDAT7 EEDAT6 EEDAT5 EEDAT4 EEDAT3 EEDAT2 EEDAT1 EEDAT0 0000 0000 112,215

10Dh EEADR          EEADR7 EEADR6 EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0 0000 0000 112,215

10Eh EEDATH         --      --              EEDATH5 EEDATH4 EEDATH3 EEDATH2 EEDATH1 EEDATH0 --00 0000 112,215

10Fh EEADRH         --      --              --       EEADRH4(2) EEADRH3 EEADRH2 EEADRH1 EEADRH0 ---- 0000 112,215

Legend:       = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1:       MCLR and WDT Reset does not affect the previous value data latch. The RBIF bit will be cleared upon Reset but will set again if the
              mismatch exists.
          2:  PIC16F886/PIC16F887 only.

TABLE 2-4: PIC16F882/883/884/886/887 SPECIAL FUNCTION REGISTERS SUMMARY BANK 3

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

Bank 3

180h INDF           Addressing this location uses contents of FSR to address data memory (not a physical register) xxxx xxxx 37,213

181h OPTION_REG RBPU INTEDG T0CS                          T0SE     PSA       PS2    PS1    PS0                      1111 1111 30,214

182h PCL            Program Counter's (PC) Least Significant Byte                                                   0000 0000 37,213

183h STATUS         IRP     RP1             RP0           TO       PD        Z      DC     C                        0001 1xxx 29,213

184h FSR            Indirect Data Memory Address Pointer                                                            xxxx xxxx 37,213

185h SRCON          SR1     SR0             C1SEN C2REN PULSS PULSR                 --     FVREN 0000 00-0 93,215

186h TRISB          TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 48,214

187h BAUDCTL        ABDOVF RCIDL               --         SCKP     BRG16       --   WUE    ABDEN                    01-0 0-00  160,215
188h ANSEL          ANS7(2) ANS6(2)         ANS5(2)       ANS4      ANS3     ANS2   ANS1    ANS0                    1111 1111  40,215

189h ANSELH             --      --          ANS13 ANS12 ANS11 ANS10 ANS9                   ANS8 --11 1111 99,215

18Ah PCLATH             --      --              --        Write Buffer for the upper 5 bits of the Program Counter  ---0 0000 37,213
18Bh INTCON
                    GIE     PEIE            T0IE          INTE     RBIE      T0IF   INTF   RBIF(1) 0000 000x 31,213

18Ch EECON1         EEPGD       --              --        --       WRERR WREN       WR     RD                       x--- x000 113,215

18Dh EECON2         EEPROM Control Register 2 (not a physical register)                                             ---- ---- 111,215

Legend:       = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1:       MCLR and WDT Reset does not affect the previous value data latch. The RBIF bit will be cleared upon Reset but will set again if the
              mismatch exists.
          2:  PIC16F884/PIC16F887 only.

DS41291D-page 28                                          Preliminary                      2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

2.2.2.1 STATUS Register                                      For example, CLRF STATUS, will clear the upper three
                                                             bits and set the Z bit. This leaves the STATUS register
The STATUS register, shown in Register 2-1, contains:        as `000u u1uu' (where u = unchanged).

the arithmetic status of the ALU                           It is recommended, therefore, that only BCF, BSF,
the Reset status                                           SWAPF and MOVWF instructions are used to alter the
the bank select bits for data memory (GPR and              STATUS register, because these instructions do not
                                                             affect any Status bits. For other instructions not affect-
   SFR)                                                      ing any Status bits, see Section 15.0 "Instruction Set
                                                             Summary"
The STATUS register can be the destination for any
instruction, like any other register. If the STATUS              Note 1: The C and DC bits operate as a Borrow
register is the destination for an instruction that affects                  and Digit Borrow out bit, respectively, in
the Z, DC or C bits, then the write to these three bits is                   subtraction.
disabled. These bits are set or cleared according to the
device logic. Furthermore, the TO and PD bits are not
writable. Therefore, the result of an instruction with the
STATUS register as destination may be different than
intended.

REGISTER 2-1: STATUS: STATUS REGISTER

R/W-0              R/W-0          R/W-0             R-1      R-1                   R/W-x  R/W-x  R/W-x
                                                                                      Z   DC(1)   C(1)
       IRP         RP1            RP0               TO       PD                                         bit 0

bit 7

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7       IRP: Register Bank Select bit (used for indirect addressing)
bit 6-5     1 = Bank 2, 3 (100h-1FFh)
            0 = Bank 0, 1 (00h-FFh)
bit 4
bit 3       RP<1:0>: Register Bank Select bits (used for direct addressing)
bit 2       00 = Bank 0 (00h-7Fh)
bit 1       01 = Bank 1 (80h-FFh)
bit 0       10 = Bank 2 (100h-17Fh)
            11 = Bank 3 (180h-1FFh)

            TO: Time-out bit
            1 = After power-up, CLRWDT instruction or SLEEP instruction
            0 = A WDT time-out occurred

            PD: Power-down bit
            1 = After power-up or by the CLRWDT instruction
            0 = By execution of the SLEEP instruction

            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
            DC: Digit Carry/Borrow bit (ADDWF, ADDLW,SUBLW,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
            C: Carry/Borrow bit (ADDWF, ADDLW, SUBLW, SUBWF instructions)(1)
            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. For rotate (RRF, RLF) instructions, this bit is loaded with either the high-order or low-order
              bit of the source register.

2007 Microchip Technology Inc.                    Preliminary                                  DS41291D-page 29
PIC16F882/883/884/886/887

2.2.2.2 OPTION Register                                 Note:  To achieve a 1:1 prescaler assignment for
                                                               Timer0, assign the prescaler to the WDT by
The OPTION register, shown in Register 2-2, is a               setting PSA bit of the OPTION register to
readable and writable register, which contains various         `1'. See Section 6.3 "Timer1 Prescaler".
control bits to configure:

Timer0/WDT prescaler
External INT interrupt
Timer0
Weak pull-ups on PORTB

REGISTER 2-2: OPTION_REG: OPTION REGISTER

     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
bit 7
                                                                                                   bit 0

Legend:                   W = Writable bit              U = Unimplemented bit, read as `0'
R = Readable bit          `1' = Bit is set
-n = Value at POR                                       `0' = Bit is cleared         x = Bit is unknown

bit 7       RBPU: PORTB Pull-up Enable bit
bit 6       1 = PORTB pull-ups are disabled
bit 5       0 = PORTB pull-ups are enabled by individual PORT latch values
bit 4
bit 3       INTEDG: Interrupt Edge Select bit
bit 2-0     1 = Interrupt on rising edge of INT pin
            0 = Interrupt on falling edge of INT pin

            T0CS: Timer0 Clock Source Select bit
            1 = Transition on T0CKI pin
            0 = Internal instruction cycle clock (FOSC/4)

            T0SE: Timer0 Source Edge Select bit
            1 = Increment on high-to-low transition on T0CKI pin
            0 = Increment on low-to-high transition on T0CKI pin

            PSA: Prescaler Assignment bit
            1 = Prescaler is assigned to the WDT
            0 = Prescaler is assigned to the Timer0 module

            PS<2:0>: Prescaler Rate Select bits

                   Bit Value Timer0 Rate WDT Rate

                          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

DS41291D-page 30                            Preliminary                               2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

2.2.2.3 INTCON Register                                     Note:      Interrupt flag bits are set when an interrupt
                                                                       condition occurs, regardless of the state of
The INTCON register, shown in Register 2-3, is a                       its corresponding enable bit or the Global
readable and writable register, which contains the various             Enable bit, GIE of the INTCON register.
enable and flag bits for TMR0 register overflow, PORTB                 User software should ensure the
change and external INT pin interrupts.                                appropriate interrupt flag bits are clear
                                                                       prior to enabling an interrupt.

REGISTER 2-3: INTCON: INTERRUPT CONTROL REGISTER

     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(1,3)  T0IF(2)     INTF         RBIF

bit 7                                                                                                  bit 0

Legend:                           W = Writable bit          U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                           `0' = Bit is cleared   x = Bit is unknown

bit 7       GIE: Global Interrupt Enable bit

            1 = Enables all unmasked interrupts
            0 = Disables all interrupts

bit 6       PEIE: Peripheral Interrupt Enable bit

            1 = Enables all unmasked peripheral interrupts

            0 = Disables all peripheral interrupts

bit 5       T0IE: Timer0 Overflow Interrupt Enable bit

            1 = Enables the Timer0 interrupt

            0 = Disables the Timer0 interrupt

bit 4       INTE: INT External Interrupt Enable bit

            1 = Enables the INT external interrupt

            0 = Disables the INT external interrupt

bit 3       RBIE: PORTB Change Interrupt Enable bit(1,3)

            1 = Enables the PORTB change interrupt

            0 = Disables the PORTB change interrupt

bit 2       T0IF: Timer0 Overflow Interrupt Flag bit(2)

            1 = TMR0 register has overflowed (must be cleared in software)

            0 = TMR0 register did not overflow

bit 1       INTF: INT External Interrupt Flag bit

            1 = The INT external interrupt occurred (must be cleared in software)

            0 = The INT external interrupt did not occur

bit 0       RBIF: PORTB Change Interrupt Flag bit

            1 = When at least one of the PORTB general purpose I/O pins changed state (must be cleared in

                   software)

            0 = None of the PORTB general purpose I/O pins have changed state

Note 1:     IOCB register must also be enabled.
        2:  T0IF bit is set when Timer0 rolls over. Timer0 is unchanged on Reset and should be initialized before
            clearing T0IF bit.
        3:  Includes ULPWU interrupt.

2007 Microchip Technology Inc.                    Preliminary                                 DS41291D-page 31
PIC16F882/883/884/886/887

2.2.2.4 PIE1 Register                                         Note: Bit PEIE of the INTCON register must be
                                                                          set to enable any peripheral interrupt.
The PIE1 register contains the interrupt enable bits, as
shown in Register 2-4.

REGISTER 2-4: PIE1: PERIPHERAL INTERRUPT ENABLE REGISTER 1

       U-0         R/W-0  R/W-0                R/W-0        R/W-0   R/W-0         R/W-0        R/W-0
                   ADIE   RCIE                 TXIE         SSPIE  CCP1IE        TMR2IE       TMR1IE
          --
                                                                                                      bit 0
bit 7

Legend:                   W = Writable bit                U = Unimplemented bit, read as `0'
R = Readable bit          `1' = Bit is set
-n = Value at POR                                         `0' = Bit is cleared   x = Bit is unknown

bit 7         Unimplemented: Read as `0'

bit 6         ADIE: A/D Converter (ADC) Interrupt Enable bit

              1 = Enables the ADC interrupt
              0 = Disables the ADC interrupt

bit 5         RCIE: EUSART Receive Interrupt Enable bit

              1 = Enables the EUSART receive interrupt
              0 = Disables the EUSART receive interrupt

bit 4         TXIE: EUSART Transmit Interrupt Enable bit

              1 = Enables the EUSART transmit interrupt
              0 = Disables the EUSART transmit interrupt

bit 3         SSPIE: Master Synchronous Serial Port (MSSP) Interrupt Enable bit

              1 = Enables the MSSP interrupt
              0 = Disables the MSSP interrupt

bit 2         CCP1IE: CCP1 Interrupt Enable bit

              1 = Enables the CCP1 interrupt
              0 = Disables the CCP1 interrupt

bit 1         TMR2IE: Timer2 to PR2 Match Interrupt Enable bit

              1 = Enables the Timer2 to PR2 match interrupt
              0 = Disables the Timer2 to PR2 match interrupt

bit 0         TMR1IE: Timer1 Overflow Interrupt Enable bit

              1 = Enables the Timer1 overflow interrupt
              0 = Disables the Timer1 overflow interrupt

DS41291D-page 32                               Preliminary                        2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

2.2.2.5 PIE2 Register                                       Note: Bit PEIE of the INTCON register must be
                                                                        set to enable any peripheral interrupt.
The PIE2 register contains the interrupt enable bits, as
shown in Register 2-5.

REGISTER 2-5: PIE2: PERIPHERAL INTERRUPT ENABLE REGISTER 2

     R/W-0         R/W-0          R/W-0             R/W-0  R/W-0                 R/W-0  U-0         R/W-0
     OSFIE                                                                                         CCP2IE
bit 7              C2IE           C1IE              EEIE   BCLIE   ULPWUIE                     --
                                                                                                           bit 0

Legend:                           W = Writable bit         U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                          `0' = Bit is cleared         x = Bit is unknown

bit 7       OSFIE: Oscillator Fail Interrupt Enable bit

            1 = Enables oscillator fail interrupt
            0 = Disables oscillator fail interrupt

bit 6       C2IE: Comparator C2 Interrupt Enable bit

            1 = Enables Comparator C2 interrupt
            0 = Disables Comparator C2 interrupt

bit 5       C1IE: Comparator C1 Interrupt Enable bit

            1 = Enables Comparator C1 interrupt
            0 = Disables Comparator C1 interrupt

bit 4       EEIE: EEPROM Write Operation Interrupt Enable bit

            1 = Enables EEPROM write operation interrupt
            0 = Disables EEPROM write operation interrupt

bit 3       BCLIE: Bus Collision Interrupt Enable bit

            1 = Enables Bus Collision interrupt
            0 = Disables Bus Collision interrupt

bit 2       ULPWUIE: Ultra Low-Power Wake-up Interrupt Enable bit

            1 = Enables Ultra Low-Power Wake-up interrupt
            0 = Disables Ultra Low-Power Wake-up interrupt

bit 1       Unimplemented: Read as `0'

bit 0       CCP2IE: CCP2 Interrupt Enable bit

            1 = Enables CCP2 interrupt
            0 = Disables CCP2 interrupt

2007 Microchip Technology Inc.                    Preliminary                                    DS41291D-page 33
PIC16F882/883/884/886/887

2.2.2.6 PIR1 Register                                             Note:       Interrupt flag bits are set when an interrupt
                                                                              condition occurs, regardless of the state of
The PIR1 register contains the interrupt flag bits, as                        its corresponding enable bit or the Global
shown in Register 2-6.                                                        Enable bit, GIE of the INTCON register.
                                                                              User software should ensure the
                                                                              appropriate interrupt flag bits are clear prior
                                                                              to enabling an interrupt.

REGISTER 2-6: PIR1: PERIPHERAL INTERRUPT REQUEST REGISTER 1

        U-0        R/W-0           R-0        R-0                 R/W-0           R/W-0         R/W-0          R/W-0
         --        ADIF           RCIF        TXIF                SSPIF          CCP1IF        TMR2IF         TMR1IF
bit 7
                                                                                                                       bit 0

Legend:                     W = Writable bit               U = Unimplemented bit, read as `0'
R = Readable bit            `1' = Bit is set
-n = Value at POR                                          `0' = Bit is cleared           x = Bit is unknown

bit 7        Unimplemented: Read as `0'

bit 6        ADIF: A/D Converter Interrupt Flag bit

             1 = A/D conversion complete (must be cleared in software)
             0 = A/D conversion has not completed or has not been started

bit 5        RCIF: EUSART Receive Interrupt Flag bit

             1 = The EUSART receive buffer is full (cleared by reading RCREG)

             0 = The EUSART receive buffer is not full

bit 4        TXIF: EUSART Transmit Interrupt Flag bit

             1 = The EUSART transmit buffer is empty (cleared by writing to TXREG)

             0 = The EUSART transmit buffer is full

bit 3        SSPIF: Master Synchronous Serial Port (MSSP) Interrupt Flag bit

             1 = The MSSP interrupt condition has occurred, and must be cleared in software before returning from the
                   Interrupt Service Routine. The conditions that will set this bit are:

                   SPI

                        A transmission/reception has taken place
                   I2C Slave/Master

                        A transmission/reception has taken place
                   I2C Master

                        The initiated Start condition was completed by the MSSP module

                        The initiated Stop condition was completed by the MSSP module

                        The initiated restart condition was completed by the MSSP module

                        The initiated Acknowledge condition was completed by the MSSP module

                        A Start condition occurred while the MSSP module was idle (Multi-master system)

                        A Stop condition occurred while the MSSP module was idle (Multi-master system)

             0 = No MSSP interrupt condition has occurred

bit 2        CCP1IF: CCP1 Interrupt Flag bit

             Capture mode:

                   1 = A TMR1 register capture occurred (must be cleared in software)

                   0 = No TMR1 register capture occurred

             Compare mode:

                   1 = A TMR1 register compare match occurred (must be cleared in software)

                   0 = No TMR1 register compare match occurred

             PWM mode:

             Unused in this mode

bit 1        TMR2IF: Timer2 to PR2 Interrupt Flag bit

             1 = A Timer2 to PR2 match occurred (must be cleared in software)

             0 = No Timer2 to PR2 match occurred

bit 0        TMR1IF: Timer1 Overflow Interrupt Flag bit

             1 = The TMR1 register overflowed (must be cleared in software)

             0 = The TMR1 register did not overflow

DS41291D-page 34                                     Preliminary                           2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

2.2.2.7 PIR2 Register                                      Note:  Interrupt flag bits are set when an interrupt
                                                                  condition occurs, regardless of the state of
The PIR2 register contains the interrupt flag bits, as            its corresponding enable bit or the Global
shown in Register 2-7.                                            Enable bit, GIE of the INTCON register.
                                                                  User software should ensure the
                                                                  appropriate interrupt flag bits are clear prior
                                                                  to enabling an interrupt.

REGISTER 2-7: PIR2: PERIPHERAL INTERRUPT REQUEST REGISTER 2

R/W-0              R/W-0          R/W-0             R/W-0  R/W-0                 R/W-0  U-0         R/W-0
                                                                                                   CCP2IF
OSFIF              C2IF           C1IF              EEIF   BCLIF  ULPWUIF                      --
                                                                                                           bit 0
bit 7

Legend:                           W = Writable bit         U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                          `0' = Bit is cleared         x = Bit is unknown

bit 7  OSFIF: Oscillator Fail Interrupt Flag bit

       1 = System oscillator failed, clock input has changed to INTOSC (must be cleared in software)
       0 = System clock operating

bit 6  C2IF: Comparator C2 Interrupt Flag bit

       1 = Comparator output (C2OUT bit) has changed (must be cleared in software)
       0 = Comparator output (C2OUT bit) has not changed

bit 5  C1IF: Comparator C1 Interrupt Flag bit

       1 = Comparator output (C1OUT bit) has changed (must be cleared in software)
       0 = Comparator output (C1OUT bit) has not changed

bit 4  EEIF: EE Write Operation Interrupt Flag bit

       1 = Write operation completed (must be cleared in software)
       0 = Write operation has not completed or has not started

bit 3  BCLIF: Bus Collision Interrupt Flag bit

       1 = A bus collision has occurred in the MSSP when configured for I2C Master mode

       0 = No bus collision has occurred

bit 2  ULPWUIF: Ultra Low-Power Wake-up Interrupt Flag bit

       1 = Wake-up condition has occurred (must be cleared in software)
       0 = No Wake-up condition has occurred

bit 1  Unimplemented: Read as `0'

bit 0  CCP2IF: CCP2 Interrupt Flag bit

       Capture mode:
             1 = A TMR1 register capture occurred (must be cleared in software)
             0 = No TMR1 register capture occurred

       Compare mode:
             1 = A TMR1 register compare match occurred (must be cleared in software)
             0 = No TMR1 register compare match occurred

       PWM mode:
       Unused in this mode

2007 Microchip Technology Inc.                    Preliminary                                    DS41291D-page 35
PIC16F882/883/884/886/887

2.2.2.8 PCON Register

The Power Control (PCON) register (see Register 2-8)
contains flag bits to differentiate between a:

Power-on Reset (POR)
Brown-out Reset (BOR)
Watchdog Timer Reset (WDT)
External MCLR Reset

The PCON register also controls the Ultra Low-Power
Wake-up and software enable of the BOR.

REGISTER 2-8: PCON: POWER CONTROL REGISTER

       U-0         U-0  R/W-0             R/W-1       U-0                   U-0  R/W-0               R/W-x
        --
bit 7              --   ULPWUE SBOREN(1)              --                    --   POR                 BOR

                                                                                                     bit 0

Legend:                 W = Writable bit              U = Unimplemented bit, read as `0'
R = Readable bit        `1' = Bit is set
-n = Value at POR                                     `0' = Bit is cleared       x = Bit is unknown

bit 7-6     Unimplemented: Read as `0'
bit 5
            ULPWUE: Ultra Low-Power Wake-up Enable bit
bit 4       1 = Ultra Low-Power Wake-up enabled
            0 = Ultra Low-Power Wake-up disabled
bit 3-2     SBOREN: Software BOR Enable bit(1)
bit 1       1 = BOR enabled
            0 = BOR disabled
bit 0
            Unimplemented: Read as `0'

            POR: Power-on Reset Status bit
            1 = No Power-on Reset occurred
            0 = A Power-on Reset occurred (must be set in software after a Power-on Reset occurs)

            BOR: Brown-out Reset Status bit
            1 = No Brown-out Reset occurred
            0 = A Brown-out Reset occurred (must be set in software after a Brown-out Reset occurs)

Note 1: BOREN<1:0> = 01 in the Configuration Word Register 1 for this bit to control the BOR.

DS41291D-page 36                          Preliminary                            2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

2.3 PCL and PCLATH                                                 2.3.2 STACK

The Program Counter (PC) is 13 bits wide. The low byte             The PIC16F882/883/884/886/887 devices have an
comes from the PCL register, which is a readable and               8-level x 13-bit wide hardware stack (see Figures 2-2
writable register. The high byte (PC<12:8>) is not directly        and 2-3). The stack space is not part of either program
readable or writable and comes from PCLATH. On any                 or data space and the Stack Pointer is not readable or
Reset, the PC is cleared. Figure 2-7 shows the two                 writable. The PC is PUSHed onto the stack when a
situations for the loading of the PC. The upper example            CALL instruction is executed or an interrupt causes a
in Figure 2-7 shows how the PC is loaded on a write to             branch. The stack is POPed in the event of a RETURN,
PCL (PCLATH<4:0>  PCH). The lower example in                       RETLW or a RETFIE instruction execution. PCLATH is
Figure 2-7 shows how the PC is loaded during a CALL or             not affected by a PUSH or POP operation.
GOTO instruction (PCLATH<4:3>  PCH).
                                                                   The stack operates as a circular buffer. This means that
FIGURE 2-7:                LOADING OF PC IN                        after the stack has been PUSHed eight times, the ninth
                           DIFFERENT SITUATIONS                    push overwrites the value that was stored from the first
                                                                   push. The tenth push overwrites the second push (and
          PCH              PCL                                     so on).

      12           87                 0   Instruction with             Note 1: There are no Status bits to indicate stack
PC                                8                 PCL as                         overflow or stack underflow conditions.

                  PCLATH<4:0>                  Destination                    2: There are no instructions/mnemonics
          5                                                                        called PUSH or POP. These are actions
                                         ALU Result                                that occur from the execution of the
                                                                                   CALL, RETURN, RETLW and RETFIE
                   PCLATH                                                          instructions or the vectoring to an
                                                                                   interrupt address.
              PCH          PCL
      12 11 10     87                          0
PC                                                    GOTO, CALL
                                                                   2.4 Indirect Addressing, INDF and
2 PCLATH<4:3>                         11                                    FSR Registers
                                                     OPCODE<10:0>
                                                                   The INDF register is not a physical register. Addressing
                   PCLATH                                          the INDF register will cause indirect addressing.

2.3.1 MODIFYING PCL                                                Indirect addressing is possible by using the INDF
                                                                   register. Any instruction using the INDF register actually
Executing any instruction with the PCL register as the             accesses data pointed to by the File Select Register
destination simultaneously causes the Program                      (FSR). Reading INDF itself indirectly will produce 00h.
Counter PC<12:8> bits (PCH) to be replaced by the                  Writing to the INDF register indirectly results in a no
contents of the PCLATH register. This allows the entire            operation (although Status bits may be affected). An
contents of the program counter to be changed by                   effective 9-bit address is obtained by concatenating the
writing the desired upper 5 bits to the PCLATH register.           8-bit FSR and the IRP bit of the STATUS register, as
When the lower 8 bits are written to the PCL register, all         shown in Figure 2-8.
13 bits of the program counter will change to the values
contained in the PCLATH register and those being                   A simple program to clear RAM location 20h-2Fh using
written to the PCL register.                                       indirect addressing is shown in Example 2-1.

A computed GOTO is accomplished by adding an offset                EXAMPLE 2-1: INDIRECT ADDRESSING
to the program counter (ADDWF PCL). Care should be
exercised when jumping into a look-up table or                                  MOVLW  0x20   ;initialize pointer
program branch table (computed GOTO) by modifying                               MOVWF  FSR    ;to RAM
the PCL register. Assuming that PCLATH is set to the               NEXT CLRF           INDF   ;clear INDF register
table start address, if the table length is greater than                        INCF   FSR    ;inc pointer
255 instructions or if the lower 8 bits of the memory                           BTFSS  FSR,4  ;all done?
address rolls over from 0xFF to 0x00 in the middle of                           GOTO   NEXT   ;no clear next
the table, then PCLATH must be incremented for each                CONTINUE                   ;yes continue
address rollover that occurs between the table
beginning and the target location within the table.

For more information refer to Application Note AN556,
"Implementing a Table Read" (DS00556).

2007 Microchip Technology Inc.         Preliminary                                          DS41291D-page 37
PIC16F882/883/884/886/887

FIGURE 2-8:       DIRECT/INDIRECT ADDRESSING PIC16F882/883/884/886/887

             Direct Addressing                                                Indirect Addressing

RP1 RP0 6         From Opcode 0                               IRP             7 File Select Register  0

Bank Select       Location Select                             Bank Select     Location Select

                                   00      01  10         11

                          00h                                 180h

                  Data
                  Memory

                          7Fh              Bank 1 Bank 2                1FFh
                                   Bank 0                 Bank 3

Note: For memory map detail, see Figures 2-2 and 2-3.

DS41291D-page 38                           Preliminary                         2007 Microchip Technology Inc.
                                                    PIC16F882/883/884/886/887

3.0 I/O PORTS                                                     operations. Therefore, a write to a port implies that the
                                                                  port pins are read, this value is modified and then
There are as many as thirty-five general purpose I/O              written to the PORT data latch.
pins available. Depending on which peripherals are
enabled, some or all of the pins may not be available as          The TRISA register (Register 3-2) controls the PORTA
general purpose I/O. In general, when a peripheral is             pin output drivers, even when they are being used as
enabled, the associated pin may not be used as a                  analog inputs. The user should ensure the bits in the
general purpose I/O pin.                                          TRISA register are maintained set when using them as
                                                                  analog inputs. I/O pins configured as analog input always
3.1 PORTA and the TRISA Registers                                 read `0'.

PORTA is a 8-bit wide, bidirectional port. The                    Note:   The ANSEL register must be initialized to
corresponding data direction register is TRISA                            configure an analog channel as a digital
(Register 3-2). Setting a TRISA bit (= 1) will make the                   input. Pins configured as analog inputs will
corresponding PORTA pin an input (i.e., disable the                       read `0'.
output driver). Clearing a TRISA bit (= 0) will make the
corresponding PORTA pin an output (i.e., enables                  EXAMPLE 3-1: INITIALIZING PORTA
output driver and puts the contents of the output latch
on the selected pin). Example 3-1 shows how to                    BANKSEL PORTA            ;
initialize PORTA.
                                                                  CLRF PORTA               ;Init PORTA
Reading the PORTA register (Register 3-1) reads the
status of the pins, whereas writing to it will write to the       BANKSEL ANSEL            ;
PORT latch. All write operations are read-modify-write
                                                                  CLRF ANSEL               ;digital I/O

                                                                  BCF     STATUS,RP1 ;Bank 1

                                                                  BANKSEL TRISA            ;

                                                                  MOVLW 0Ch                ;Set RA<3:2> as inputs

                                                                  MOVWF TRISA              ;and set RA<5:4,1:0>

                                                                                           ;as outputs

REGISTER 3-1: PORTA: PORTA REGISTER

      R/W-x        R/W-x          R/W-x             R/W-x         R/W-x            R/W-x         R/W-x            R/W-x
       RA7          RA6            RA5               RA4           RA3              RA2           RA1              RA0
bit 7
                                                                                                                          bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared             x = Bit is unknown

bit 7-0        RA<7:0>: PORTA I/O Pin bit
               1 = Port pin is > VIH
               0 = Port pin is < VIL

REGISTER 3-2: TRISA: PORTA TRI-STATE REGISTER

     R/W-1(1)      R/W-1(1)        R/W-1             R/W-1         R/W-1            R/W-1         R/W-1            R/W-1
     TRISA7        TRISA6         TRISA5            TRISA4        TRISA3           TRISA2        TRISA1           TRISA0
bit 7
                                                                                                                           bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared             x = Bit is unknown

bit 7-0        TRISA<7:0>: PORTA Tri-State Control bit
               1 = PORTA pin configured as an input (tri-stated)
               0 = PORTA pin configured as an output

Note 1: TRISA<7:6> always reads `1' in XT, HS and LP Oscillator modes.

2007 Microchip Technology Inc.                    Preliminary                                          DS41291D-page 39
PIC16F882/883/884/886/887

3.2 Additional Pin Functions

RA0 also has an Ultra Low-Power Wake-up option. The
next three sections describe these functions.

3.2.1 ANSEL REGISTER

The ANSEL register (Register 3-3) is used to configure
the Input mode of an I/O pin to analog. Setting the
appropriate ANSEL bit high will cause all digital reads
on the pin to be read as `0' and allow analog functions
on the pin to operate correctly.

The state of the ANSEL bits has no affect on digital out-
put functions. A pin with TRIS clear and ANSEL set will
still operate as a digital output, but the Input mode will
be analog. This can cause unexpected behavior when
executing read-modify-write instructions on the
affected port.

REGISTER 3-3: ANSEL: ANALOG SELECT REGISTER

     R/W-1         R/W-1    R/W-1            R/W-1          R/W-1  R/W-1          R/W-1         R/W-1
   ANS7(2)        ANS6(2)  ANS5(2)           ANS4           ANS3   ANS2           ANS1          ANS0

bit 7                                                                                                  bit 0

Legend:                    W = Writable bit                 U = Unimplemented bit, read as `0'
R = Readable bit           `1' = Bit is set
-n = Value at POR                                           `0' = Bit is cleared  x = Bit is unknown

bit 7-0     ANS<7:0>: Analog Select bits

            Analog select between analog or digital function on pins AN<7:0>, respectively.
            1 = Analog input. Pin is assigned as analog input(1).
            0 = Digital I/O. Pin is assigned to port or special function.

Note 1:     Setting a pin to an analog input automatically disables the digital input circuitry, weak pull-ups, and
        2:  interrupt-on-change if available. The corresponding TRIS bit must be set to Input mode in order to allow
            external control of the voltage on the pin.

            Not implemented on PIC16F883/886.

DS41291D-page 40                             Preliminary                           2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

3.2.2 ULTRA LOW-POWER WAKE-UP                              A series resistor between RA0 and the external
                                                           capacitor provides overcurrent protection for the
The Ultra Low-Power Wake-up (ULPWU) on RA0 allows          RA0/AN0/ULPWU/C12IN0- pin and can allow for
a slow falling voltage to generate an interrupt-on-change  software calibration of the time-out (see Figure 3-1). A
on RA0 without excess current consumption. The mode        timer can be used to measure the charge time and
is selected by setting the ULPWUE bit of the PCON          discharge time of the capacitor. The charge time can
register. This enables a small current sink, which can be  then be adjusted to provide the desired interrupt delay.
used to discharge a capacitor on RA0.                      This technique will compensate for the affects of
                                                           temperature, voltage and component accuracy. The
Follow these steps to use this feature:                    Ultra Low-Power Wake-up peripheral can also be
                                                           configured as a simple Programmable Low Voltage
a) Charge the capacitor on RA0 by configuring the          Detect or temperature sensor.
      RA0 pin to output (= 1).
                                                           Note:  For more information, refer to AN879,
b) Configure RA0 as an input.                                     "Using the Microchip Ultra Low-Power
c) Enable interrupt-on-change for RA0.                            Wake-up Module" Application Note
d) Set the ULPWUE bit of the PCON register to                     (DS00879).

      begin the capacitor discharge.                       EXAMPLE 3-2:    ULTRA LOW-POWER
e) Execute a SLEEP instruction.                                            WAKE-UP INITIALIZATION

When the voltage on RA0 drops below VIL, an interrupt      BANKSEL PORTA        ;
will be generated which will cause the device to                                ;Set RA0 data latch
wake-up and execute the next instruction. If the GIE bit   BSF    PORTA,0       ;
of the INTCON register is set, the device will then call                        ;RA0 to digital I/O
the interrupt vector (0004h). See Section 3.4.3 "Inter-    BANKSEL ANSEL        ;
rupt-on-Change" for more information.                                           ;Output high to
                                                           BCF    ANSEL,0       ;charge capacitor
This feature provides a low-power technique for                                 ;
periodically waking up the device from Sleep. The          BANKSEL TRISA        ;Clear flag
time-out is dependent on the discharge time of the RC                           ;Enable ULP Wake-up
circuit on RA0. See Example 3-2 for initializing the       BCF    TRISA,0       ;Select RA0 IOC
Ultra Low-Power Wake-up module.                                                 ;RA0 to input
                                                           CALL CapDelay        ;Enable interrupt
                                                                                ;and clear flag
                                                           BANKSEL PIR2         ;Wait for IOC
                                                                                ;
                                                           BCF    PIR2,ULPWUIF

                                                           BSF    PCON,ULPWUE

                                                           BSF    IOCB,0

                                                           BSF    TRISA,0

                                                           MOVLW B'10001000'

                                                           MOVWF INTCON

                                                           SLEEP

                                                           NOP

2007 Microchip Technology Inc.  Preliminary                                   DS41291D-page 41
PIC16F882/883/884/886/887

3.2.3  PIN DESCRIPTIONS AND                                    3.2.3.1 RA0/AN0/ULPWU/C12IN0-
       DIAGRAMS                                                Figure 3-1 shows the diagram for this pin. This pin is
                                                               configurable to function as one of the following:
Each PORTA pin is multiplexed with other functions. The         a general purpose I/O
pins and their combined functions are briefly described         an analog input for the ADC
here. For specific information about individual functions       a negative analog input to Comparator C1 or C2
such as the comparator or the A/D Converter (ADC),             an analog input for the Ultra Low-Power Wake-up
refer to the appropriate section in this data sheet.
                                                                                                            VDD
FIGURE 3-1:           BLOCK DIAGRAM OF RA0

             Data Bus

                  WR   DQ                                                                I/O Pin
             PORTA      CK Q

                                                                                    VSS

                                                               -
                                                               +              VTRG

                WR     DQ                                              IULP
             TRISA      CK Q
                                                                         VSS
                  RD                             01               ULPWUE
              TRISA           Analog(1)
                              Input Mode
                  RD
             PORTA

                                              To Comparator
                                             To A/D Converter

             Note 1: ANSEL determines Analog Input mode.

DS41291D-page 42              Preliminary                                     2007 Microchip Technology Inc.
                                             PIC16F882/883/884/886/887

3.2.3.2 RA1/AN1/C12IN1-                                 3.2.3.3 RA2/AN2/VREF-/CVREF/C2IN+

Figure 3-2 shows the diagram for this pin. This pin is  Figure 3-3 shows the diagram for this pin. This pin is
configurable to function as one of the following:       configurable to function as one of the following:

a general purpose I/O                                  a general purpose I/O
an analog input for the ADC                            an analog input for the ADC
a negative analog input to Comparator C1 or C2         a negative voltage reference input for the ADC

FIGURE 3-2:   BLOCK DIAGRAM OF RA1                         and CVREF
                                                         a comparator voltage reference output
  Data Bus                                              a positive analog input to Comparator C2

       DQ                              VDD              FIGURE 3-3:   BLOCK DIAGRAM OF RA2

  WR   CK Q                                   I/O Pin     Data Bus
PORTA
                                       VSS                            VROE
               Analog(1)                                                           CVREF
              Input Mode
                                                               DQ                                 VDD

       DQ                                                 WR   CK Q
        CK Q                                            PORTA
WR
TRISA                                                                                               I/O Pin

  RD                                                     WR    DQ                            VSS
TRISA                                                   TRISA   CK Q   Analog(1)
                                                                      Input Mode
  RD                                                      RD
PORTA                                                   TRISA

            To Comparator                                 RD
            To A/D Converter                            PORTA
Note 1: ANSEL determines Analog Input mode.
                                                               To Comparator (positive input)
                                                               To Comparator (VREF-)
                                                               To A/D Converter (VREF-)
                                                               To A/D Converter (analog channel)

                                                        Note 1: ANSEL determines Analog Input mode.

2007 Microchip Technology Inc.             Preliminary              DS41291D-page 43
PIC16F882/883/884/886/887

3.2.3.4 RA3/AN3/VREF+/C1IN+                                          3.2.3.5 RA4/T0CKI/C1OUT

Figure 3-4 shows the diagram for this pin. This pin is               Figure 3-5 shows the diagram for this pin. This pin is
configurable to function as one of the following:                    configurable to function as one of the following:

a general purpose input                                             a general purpose I/O
an analog input for the ADC                                        a clock input for Timer0
a positive voltage reference input for the ADC and                  a digital output from Comparator C1

   CVREF                                                             FIGURE 3-5:          BLOCK DIAGRAM OF RA4
a positive analog input to Comparator C1

FIGURE 3-4:       BLOCK DIAGRAM OF RA3                               Data Bus             C1OUT

  Data Bus                                           VDD                                  Enable          VDD

                                                            I/O Pin            DQ

       DQ                                            VSS               WR      CK Q       C1OUT 1
                             Analog(1)                               PORTA                             0
                            Input Mode
  WR   CK Q                                                                                                    I/O Pin
PORTA
                                                                               DQ
       DQ                                                             WR        CK Q                      VSS
        CK Q                                                         TRISA

WR                                                                    RD
TRISA                                                                TRISA

  RD
TRISA

  RD                                                                   RD
PORTA                                                                PORTA

                                                                               To Timer0

       To Comparator (positive input)
       To Comparator (VREF+)
       To A/D Converter (VREF+)
       To A/D Converter (analog channel)

Note 1: ANSEL determines Analog Input mode.

DS41291D-page 44                             Preliminary                                  2007 Microchip Technology Inc.
                                                 PIC16F882/883/884/886/887

3.2.3.6 RA5/AN4/SS/C2OUT                                3.2.3.7 RA6/OSC2/CLKOUT

Figure 3-6 shows the diagram for this pin. This pin is  Figure 3-7 shows the diagram for this pin. This pin is
configurable to function as one of the following:       configurable to function as one of the following:

a general purpose I/O                                  a general purpose I/O
an analog input for the ADC                            a crystal/resonator connection
a slave select input                                  a clock output
a digital output from Comparator C2

                                                        FIGURE 3-7:               BLOCK DIAGRAM OF RA6

FIGURE 3-6:      BLOCK DIAGRAM OF RA5

                                                        Data Bus                               Oscillator
                                                                                                 Circuit
Data Bus          C2OUT
                  Enable                                                          OSC2
          DQ                      VDD                                                        CLKOUT        VDD
                 C2OUT 1                 I/O Pin                                              Enable              I/O Pin
  WR      CK Q                0                                   DQ
PORTA                                                              CK Q             FOSC/4 1               VSS

                                                          WR                                      0
                                                        PORTA
                                                                                         CLKOUT
WR       DQ                             VSS                      DQ                       Enable
TRISA      CK Q   Analog(1)                                        CK Q
                 Input Mode                                                          INTOSCIO/
  RD                                                     WR                       EXTRCIO/EC(1)
TRISA                                                   TRISA
                                                                                          CLKOUT
                                                          RD                               Enable
                                                        TRISA

  RD                                                      RD
PORTA                                                   PORTA

               To SS Input                              Note 1: With I/O option.
              To A/D Converter

    Note 1: ANSEL determines Analog Input mode.

2007 Microchip Technology Inc.                 Preliminary                      DS41291D-page 45
PIC16F882/883/884/886/887

3.2.3.8 RA7/OSC1/CLKIN

Figure 3-8 shows the diagram for this pin. This pin is
configurable to function as one of the following:

a general purpose I/O
a crystal/resonator connection
a clock input

FIGURE 3-8:         BLOCK DIAGRAM OF RA7

Data Bus                   Oscillator
                             Circuit

                    OSC1               VDD

  WR      DQ
PORTA      CK Q

WR       DQ                                 I/O Pin
TRISA      CK Q                        VSS

  RD                     INTOSC
TRISA                     Mode

  RD
PORTA

          CLKIN

TABLE 3-1: SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

Name         Bit 7  Bit 6  Bit 5       Bit 4          Bit 3  Bit 2  Bit 1  Bit 0   Value on                        Value on
                                                                                  POR, BOR                          all other
                                                                                                                     Resets
ADCON0       ADCS1 ADCS0 CHS3          CHS2           CHS1   CHS0 GO/DONE ADON    0000 0000
                                                                                                                  0000 0000
ANSEL        ANS7   ANS6   ANS5        ANS4           ANS3   ANS2   ANS1   ANS0   1111 1111
                                                                                                                  1111 1111
CM1CON0      C1ON C1OUT C1OE C1POL                      --   C1R    C1CH1 C1CH0 0000 -000                         0000 -000
                                                                                                                  0000 -000
CM2CON0      C2ON C2OUT C2OE C2POL                      --   C2R    C2CH1 C2CH0 0000 -000                         0000 --10
                                                                                                                  --0u --uu
CM2CON1   MC1OUT MC2OUT C1RSEL C2RSEL                   --   --     T1GSS C2SYNC 0000 --10                        1111 1111
                                                                                                                  uuuu uuuu
PCON         --     --     ULPWUE SBOREN                --   --     POR    BOR    --01 --qq                       0000 0000
                                                                                                                  1111 1111
OPTION_REG RBPU INTEDG T0CS            T0SE           PSA    PS2    PS1    PS0    1111 1111

PORTA        RA7    RA6    RA5         RA4            RA3    RA2    RA1    RA0    xxxx xxxx

SSPCON       WCOL SSPOV SSPEN          CKP    SSPM3 SSPM2 SSPM1 SSPM0 0000 0000

TRISA     TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 1111 1111

Legend: x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTA.

DS41291D-page 46                              Preliminary                   2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

3.3 PORTB and TRISB Registers                                3.4.1 ANSELH REGISTER

PORTB is an 8-bit wide, bidirectional port. The              The ANSELH register (Register 3-4) is used to
corresponding data direction register is TRISB               configure the Input mode of an I/O pin to analog.
(Register 3-6). Setting a TRISB bit (= 1) will make the      Setting the appropriate ANSELH bit high will cause all
corresponding PORTB pin an input (i.e., put the              digital reads on the pin to be read as `0' and allow
corresponding output driver in a High-Impedance mode).       analog functions on the pin to operate correctly.
Clearing a TRISB bit (= 0) will make the corresponding
PORTB pin an output (i.e., enable the output driver and      The state of the ANSELH bits has no affect on digital
put the contents of the output latch on the selected pin).   output functions. A pin with TRIS clear and ANSELH
Example 3-3 shows how to initialize PORTB.                   set will still operate as a digital output, but the Input
                                                             mode will be analog. This can cause unexpected
Reading the PORTB register (Register 3-5) reads the          behavior when executing read-modify-write
status of the pins, whereas writing to it will write to the  instructions on the affected port.
PORT latch. All write operations are read-modify-write
operations. Therefore, a write to a port implies that the    3.4.2 WEAK PULL-UPS
port pins are read, this value is modified and then written
to the PORT data latch.                                      Each of the PORTB pins has an individually configurable
                                                             internal weak pull-up. Control bits WPUB<7:0> enable or
The TRISB register (Register 3-6) controls the PORTB         disable each pull-up (see Register 3-7). Each weak
pin output drivers, even when they are being used as         pull-up is automatically turned off when the port pin is
analog inputs. The user should ensure the bits in the        configured as an output. All pull-ups are disabled on a
TRISB register are maintained set when using them as         Power-on Reset by the RBPU bit of the OPTION register.
analog inputs. I/O pins configured as analog input always
read `0'. Example 3-3 shows how to initialize PORTB.         3.4.3 INTERRUPT-ON-CHANGE

EXAMPLE 3-3: INITIALIZING PORTB                              All of the PORTB pins are individually configurable as an
                                                             interrupt-on-change pin. Control bits IOCB<7:0> enable
BANKSEL PORTB  ;                                             or disable the interrupt function for each pin. Refer to
                                                             Register 3-8. The interrupt-on-change feature is
CLRF PORTB     ;Init PORTB                                   disabled on a Power-on Reset.

BANKSEL TRISB  ;

MOVLW B`11110000' ;Set RB<7:4> as inputs                     For enabled interrupt-on-change pins, the present value
                                                             is compared with the old value latched on the last read
               ;and RB<3:0> as outputs                       of PORTB to determine which bits have changed or
                                                             mismatched the old value. The `mismatch' outputs of
MOVWF TRISB    ;                                             the last read are OR'd together to set the PORTB
                                                             Change Interrupt flag bit (RBIF) in the INTCON register.

Note:  The ANSELH register must be initialized               This interrupt can wake the device from Sleep. The user,
       to configure an analog channel as a digital           in the Interrupt Service Routine, clears the interrupt by:
       input. Pins configured as analog inputs will
       read `0'.                                             a) Any read or write of PORTB. This will end the
                                                                   mismatch condition.
3.4 Additional PORTB Pin Functions
                                                             b) Clear the flag bit RBIF.
PORTB pins RB<7:0> on the device family device have
an interrupt-on-change option and a weak pull-up             A mismatch condition will continue to set flag bit RBIF.
option. The following three sections describe these          Reading or writing PORTB will end the mismatch
PORTB pin functions.                                         condition and allow flag bit RBIF to be cleared. The latch
                                                             holding the last read value is not affected by a MCLR nor
Every PORTB pin on this device family has an                 Brown-out Reset. After these Resets, the RBIF flag will
interrupt-on-change option and a weak pull-up option.        continue to be set if a mismatch is present.

                                                             Note:  If a change on the I/O pin should occur when
                                                                    the read operation is being executed (start of
                                                                    the Q2 cycle), then the RBIF interrupt flag
                                                                    may not get set. Furthermore, since a read
                                                                    or write on a port affects all bits of that port,
                                                                    care must be taken when using multiple pins
                                                                    in Interrupt-on-Change mode. Changes on
                                                                    one pin may not be seen while servicing
                                                                    changes on another pin.

2007 Microchip Technology Inc.          Preliminary               DS41291D-page 47
PIC16F882/883/884/886/887

REGISTER 3-4: ANSELH: ANALOG SELECT HIGH REGISTER

      U-0          U-0     R/W-1             R/W-1   R/W-1                 R/W-1  R/W-1       R/W-1
       --                                                                         ANS9        ANS8
bit 7              --      ANS13             ANS12   ANS11     ANS10
                                                                                                     bit 0

Legend:                    W = Writable bit          U = Unimplemented bit, read as `0'
R = Readable bit           `1' = Bit is set
-n = Value at POR                                    `0' = Bit is cleared         x = Bit is unknown

bit 7-6     Unimplemented: Read as `0'
bit 5-0
            ANS<13:8>: Analog Select bits
            Analog select between analog or digital function on pins AN<13:8>, respectively.
            1 = Analog input. Pin is assigned as analog input(1).
            0 = Digital I/O. Pin is assigned to port or special function.

Note 1: Setting a pin to an analog input automatically disables the digital input circuitry, weak pull-ups, and
              interrupt-on-change if available. The corresponding TRIS bit must be set to Input mode in order to allow
              external control of the voltage on the pin.

REGISTER 3-5: PORTB: PORTB REGISTER

     R/W-x         R/W-x   R/W-x             R/W-x   R/W-x                 R/W-x  R/W-x       R/W-x
      RB7           RB6     RB5               RB4     RB3                   RB2    RB1         RB0
bit 7
                                                                                                     bit 0

Legend:                    W = Writable bit          U = Unimplemented bit, read as `0'
R = Readable bit           `1' = Bit is set
-n = Value at POR                                    `0' = Bit is cleared         x = Bit is unknown

bit 7-0     RB<7:0>: PORTB I/O Pin bit
            1 = Port pin is > VIH
            0 = Port pin is < VIL

REGISTER 3-6: TRISB: PORTB TRI-STATE REGISTER

     R/W-1          R/W-1   R/W-1             R/W-1   R/W-1     R/W-1              R/W-1       R/W-1
    TRISB7         TRISB6  TRISB5            TRISB4  TRISB3    TRISB2             TRISB1      TRISB0
bit 7
                                                                                                      bit 0

Legend:                    W = Writable bit          U = Unimplemented bit, read as `0'
R = Readable bit           `1' = Bit is set
-n = Value at POR                                    `0' = Bit is cleared         x = Bit is unknown

bit 7-0     TRISB<7:0>: PORTB Tri-State Control bit
            1 = PORTB pin configured as an input (tri-stated)
            0 = PORTB pin configured as an output

DS41291D-page 48                             Preliminary                           2007 Microchip Technology Inc.
                                          PIC16F882/883/884/886/887

REGISTER 3-7: WPUB: WEAK PULL-UP PORTB REGISTER

     R/W-1          R/W-1          R/W-1             R/W-1   R/W-1   R/W-1         R/W-1                  R/W-1
    WPUB7          WPUB6          WPUB5             WPUB4   WPUB3   WPUB2         WPUB1                  WPUB0
bit 7
                                                                                                                 bit 0

Legend:                           W = Writable bit          U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                           `0' = Bit is cleared  x = Bit is unknown

bit 7-0     WPUB<7:0>: Weak Pull-up Register bit
            1 = Pull-up enabled
            0 = Pull-up disabled

Note 1: Global RBPU bit of the OPTION register must be cleared for individual pull-ups to be enabled.

         2: The weak pull-up device is automatically disabled if the pin is in configured as an output.

REGISTER 3-8: IOCB: INTERRUPT-ON-CHANGE PORTB REGISTER

     R/W-0         R/W-0          R/W-0             R/W-0   R/W-0   R/W-0         R/W-0                  R/W-0
     IOCB7         IOCB6          IOCB5             IOCB4   IOCB3   IOCB2         IOCB1                  IOCB0
bit 7
                                                                                                                bit 0

Legend:                           W = Writable bit          U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                           `0' = Bit is cleared  x = Bit is unknown

bit 7-0     IOCB<7:0>: Interrupt-on-Change PORTB Control bit
            1 = Interrupt-on-change enabled
            0 = Interrupt-on-change disabled

2007 Microchip Technology Inc.                    Preliminary                                 DS41291D-page 49
PIC16F882/883/884/886/887

3.4.4  PIN DESCRIPTIONS AND                                   FIGURE 3-9:         BLOCK DIAGRAM OF
       DIAGRAMS                                                                   RB<3:0>

Each PORTB pin is multiplexed with other functions. The       Data Bus             Analog(1)
                                                                              DQ  Input Mode
pins and their combined functions are briefly described
                                                                WR   CK Q                                        VDD
here. For specific information about individual functions     WPUB                                                  Weak
such as the SSP, I2C or interrupts, refer to the appropriate
                                                                                              RBPU
section in this data sheet.
                                                                                     CCP1OUT Enable
3.4.4.1 RB0/AN12/INT                                            RD                                                    VDD
                                                              WPUB
Figure 3-9 shows the diagram for this pin. This pin is                            CCP1OUT 1
configurable to function as one of the following:                    DQ
                                                                                                 0
a general purpose I/O                                         WR   CK Q                                                    I/O Pin
an analog input for the ADC                                 PORTB
an external edge triggered interrupt                                                                                VSS
                                                               WR    DQ
3.4.4.2 RB1/AN10/P1C(1)/C12IN3-                               TRISB   CK Q                     Analog(1)
                                                                                             Input Mode
Figure 3-9 shows the diagram for this pin. This pin is          RD
configurable to function as one of the following:             TRISB

a general purpose I/O                                          RD
an analog input for the ADC                                 PORTB
a PWM output(1)
an analog input to Comparator C1 or C2                                    DQ

    Note 1: P1C is available on PIC16F882/883/886              WR    CK Q         QD
                only.                                         IOCB

3.4.4.3 RB2/AN8/P1B(1)                                                                      EN  Q3

Figure 3-9 shows the diagram for this pin. This pin is         RD                 QD
configurable to function as one of the following:             IOCB                      EN

a general purpose I/O                                       Interrupt-on-
an analog input for the ADC                                    Change
a PWM output(1)
                                                                                  RD PORTB
    Note 1: P1B is available on PIC16F882/883/886
                only.                                                     RB0/INT
                                                                          RB3/PGM
3.4.4.4 RB3/AN9/PGM/C12IN2-                                               To A/D Converter

Figure 3-9 shows the diagram for this pin. This pin is                    To Comparator (RB1, RB3)
configurable to function as one of the following:
                                                              Note 1: ANSELH determines Analog Input mode.
a general purpose I/O
an analog input for the ADC
Low-voltage In-Circuit Serial Programming enable

   pin
an analog input to Comparator C1 or C2

DS41291D-page 50             Preliminary                                           2007 Microchip Technology Inc.
                                        PIC16F882/883/884/886/887

3.4.4.5  RB4/AN11/P1D(1)                                           3.4.4.7 RB6/ICSPCLK
                                                                   Figure 3-10 shows the diagram for this pin. This pin is
Figure 3-10 shows the diagram for this pin. This pin is            configurable to function as one of the following:
configurable to function as one of the following:                   a general purpose I/O
                                                                   In-Circuit Serial Programming clock
a general purpose I/O
                                                                   3.4.4.8 RB7/ICSPDAT
an analog input for the ADC                                      Figure 3-10 shows the diagram for this pin. This pin is
a PWM output(1)                                                  configurable to function as one of the following:
                                                                   a general purpose I/O
Note 1: P1D is available on PIC16F882/883/886                      In-Circuit Serial Programming data
            only.

3.4.4.6 RB5/AN13/T1G

Figure 3-10 shows the diagram for this pin. This pin is
configurable to function as one of the following:

a general purpose I/O
an analog input for the ADC
a Timer1 gate input

FIGURE 3-10:           BLOCK DIAGRAM OF RB<7:4>

                                        Analog(1) Input Mode              VDD
                                                                             Weak
         Data Bus

                       DQ

                WR                CK Q                       RBPU
              WPUB

                 RD    DQ               CCP1OUT Enable                             VDD
              WPUB       CK Q           CCP1OUT 101                                           I/O Pin

                WR                                       010
              PORTB

                       DQ

               WR                 CK Q                                             VSS
              TRISB

                 RD                                            Analog(1)
              TRISB                                           Input Mode

                 RD    DQ                                          QD                                  ICSPTM(2)
              PORTB      CK Q

                WR                                                 EN       Q3
               IOCB
                                                               QD
                 RD                                                   EN
               IOCB
                                                              RD PORTB
                       Interrupt-on-
                          Change

                                        To Timer1 T1G(3)

                                        To A/D Converter

                                        To ICSPCLK (RB6) and ICSPDAT (RB7)

         Available on PIC16F882/PIC16F883/PIC16F886 only.

         Note 1:       ANSELH determines Analog Input mode.
                   2:  Applies to RB<7:6> pins only).
                   3:  Applies to RB5 pin only.

2007 Microchip Technology Inc.        Preliminary                                                    DS41291D-page 51
PIC16F882/883/884/886/887

TABLE 3-2: SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

Name     Bit 7        Bit 6  Bit 5  Bit 4  Bit 3  Bit 2  Bit 1  Bit 0   Value on                         Value on
                                                                       POR, BOR                          all other
                                                                                                          Resets

ANSELH            --  --     ANS13 ANS12 ANS11 ANS10 ANS9 ANS8 --11 1111 --11 1111

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

CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL --            --     T1GSS C2SYNC 0000 --10 0000 --10

IOCB     IOCB7 IOCB6 IOCB5 IOCB4 IOCB3 IOCB2 IOCB1 IOCB0 0000 0000 0000 0000

INTCON   GIE          PEIE   T0IE INTE RBIE       T0IF   INTF   RBIF 0000 000x 0000 000x

OPTION_REG RBPU INTEDG T0CS T0SE PSA              PS2    PS1    PS0 1111 1111 1111 1111

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

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

WPUB     WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 1111 1111 1111 1111

Legend: x = unknown, u = unchanged, -- = unimplemented read as `0'. Shaded cells are not used by PORTB.

DS41291D-page 52                    Preliminary                  2007 Microchip Technology Inc.
                                          PIC16F882/883/884/886/887

3.5 PORTC and TRISC Registers                                The TRISC register (Register 3-10) controls the PORTC
                                                             pin output drivers, even when they are being used as
PORTC is a 8-bit wide, bidirectional port. The               analog inputs. The user should ensure the bits in the
corresponding data direction register is TRISC               TRISC register are maintained set when using them as
(Register 3-10). Setting a TRISC bit (= 1) will make the     analog inputs. I/O pins configured as analog input always
corresponding PORTC pin an input (i.e., put the              read `0'.
corresponding output driver in a High-Impedance mode).
Clearing a TRISC bit (= 0) will make the corresponding       EXAMPLE 3-4: INITIALIZING PORTC
PORTC pin an output (i.e., enable the output driver and
put the contents of the output latch on the selected pin).   BANKSEL PORTC                ;
Example 3-4 shows how to initialize PORTC.                   CLRF PORTC                   ;Init PORTC
                                                             BANKSEL TRISC                ;
Reading the PORTC register (Register 3-9) reads the          MOVLW B`00001100'            ;Set RC<3:2> as inputs
status of the pins, whereas writing to it will write to the  MOVWF TRISC                  ;and set RC<7:4,1:0>
PORT latch. All write operations are read-modify-write                                    ;as outputs
operations. Therefore, a write to a port implies that the
port pins are read, this value is modified and then written
to the PORT data latch.

REGISTER 3-9: PORTC: PORTC REGISTER

     R/W-x         R/W-x          R/W-x             R/W-x    R/W-x                 R/W-x  R/W-x     R/W-x
      RC7           RC6            RC5               RC4      RC3                   RC2    RC1       RC0
bit 7
                                                                                                           bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7-0     RC<7:0>: PORTC General Purpose I/O Pin bit
            1 = Port pin is > VIH
            0 = Port pin is < VIL

REGISTER 3-10: TRISC: PORTC TRI-STATE REGISTER

     R/W-1          R/W-1          R/W-1             R/W-1    R/W-1   R/W-1               R/W-1(1)  R/W-1(1)
    TRISC7         TRISC6         TRISC5            TRISC4   TRISC3  TRISC2               TRISC1    TRISC0
bit 7
                                                                                                            bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7-0           TRISC<7:0>: PORTC Tri-State Control bit
Note 1:           1 = PORTC pin configured as an input (tri-stated)
                  0 = PORTC pin configured as an output

            TRISC<1:0> always reads `1' in LP Oscillator mode.

2007 Microchip Technology Inc.                    Preliminary                                  DS41291D-page 53
PIC16F882/883/884/886/887

3.5.1 RC0/T1OSO/T1CKI                                                 3.5.3 RC2/P1A/CCP1

Figure 3-11 shows the diagram for this pin. This pin is               Figure 3-13 shows the diagram for this pin. This pin is
configurable to function as one of the following:                     configurable to function as one of the following:

a general purpose I/O                                                a general purpose I/O
a Timer1 oscillator output                                           a PWM output
a Timer1 clock input                                                 a Capture input and Compare output for

                                                                         Comparator C1

FIGURE 3-11:      BLOCK DIAGRAM OF RC0

Data Bus                   Timer1 Oscillator                          FIGURE 3-13:    BLOCK DIAGRAM OF RC2
                                  Circuit
          T1OSCEN                                                       Data bus    CCP1CON
                                                                                                                             VDD
          DQ                                  VDD
                                                                                     CCP1/P1A 01
                                                                             DQ

  WR      CK Q                                                          WR   CK Q
PORTC                                                                 PORTC

          DQ                                        I/O Pin                                    10       I/O Pin
           CK Q                               VSS
  WR                                                                    WR   DQ
TRISC                                                                 TRISC   CK Q

                                                                                                   VSS

  RD                                                                    RD
TRISC                                                                 TRISC

   RD                                                                    RD
PORTC                                                                 PORTC

                                                                             To Enhanced CCP1

          To Timer1 clock input

3.5.2     RC1/T1OSI/CCP2

Figure 3-12 shows the diagram for this pin. This pin is
configurable to function as one of the following:

a general purpose I/O
a Timer1 oscillator input
a Capture input and Compare/PWM output for

   Comparator C2

FIGURE 3-12:      BLOCK DIAGRAM OF RC1

Data Bus  T1OSCEN          Timer1 Oscillator
               T1OSI              Circuit

                  CCP2CON                     VDD

          DQ

  WR      CK Q    CCP2 01
PORTC

                                 10                          I/O Pin

  WR      DQ                                            VSS
TRISC      CK Q                      T1OSCEN

  RD
TRISC

   RD
PORTC

                  To CCP2

DS41291D-page 54                                             Preliminary             2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

3.5.4 RC3/SCK/SCL                                        3.5.6 RC5/SDO

Figure 3-14 shows the diagram for this pin. This pin is  Figure 3-16 shows the diagram for this pin. This pin is
configurable to function as one of the following:        configurable to function as one of the following:

a general purpose I/O                                  a general purpose I/O
a SPI clock                                             a serial data output
an I2CTM clock

                                                         FIGURE 3-16:    BLOCK DIAGRAM OF RC5

FIGURE 3-14:  BLOCK DIAGRAM OF RC3                                             Port/SDO
                                                                                  Select
  Data Bus
                                                         Data Bus

       DQ            SSPEN        VDD                              DQ    SDO 01           VDD
              SCK 01                     I/O Pin                                      10         I/O Pin

  WR   CK Q              10       VSS                      WR      CK Q
PORTC                                                    PORTC

       DQ                                                          DQ
        CK Q
  WR                                                       WR      CK Q                   VSS
TRISC                                                    TRISC

  RD                                                       RD
TRISC                                                    TRISC

   RD                                                       RD
PORTC                                                    PORTC

              To SSPSR

3.5.5 RC4/SDI/SDA

Figure 3-15 shows the diagram for this pin. This pin is
configurable to function as one of the following:

a general purpose I/O
a SPI data I/O
an I2C data I/O

FIGURE 3-15:  BLOCK DIAGRAM OF RC4

  Data Bus

       DQ               SSPEN     VDD
              SDI/SDA                    I/O Pin
  WR   CK Q
PORTC                       01    VSS

                            10

  WR   DQ
TRISC   CK Q

  RD
TRISC

   RD
PORTC

              To SSPSR

2007 Microchip Technology Inc.  Preliminary                                             DS41291D-page 55
PIC16F882/883/884/886/887

3.5.7 RC6/TX/CK                                                         3.5.8 RC7/RX/DT

Figure 3-17 shows the diagram for this pin. This pin is                 Figure 3-18 shows the diagram for this pin. This pin is
configurable to function as one of the following:                       configurable to function as one of the following:

a general purpose I/O                                                 a general purpose I/O
an asynchronous serial output                                          an asynchronous serial input
a synchronous clock I/O                                                a synchronous serial data I/O

FIGURE 3-17:          BLOCK DIAGRAM OF RC6                              FIGURE 3-18:  BLOCK DIAGRAM OF RC7

                      SPEN                                                Data Bus      SPEN
                      TXEN                                                              SYNC

Data Bus                    SYNC                                               DQ     EUSART                        VDD
                                                                                              DT
   WR            EUSART                                                   WR   CK Q                 01                     I/O Pin
PORTC                    CK 01                                          PORTC                                       VSS
                                                 VDD                                                10
          D      EUSART
           CK             TX 10                         I/O Pin                DQ
                                                 VSS                            CK Q
               Q                                                          WR
                                                                        TRISC
                                      01
               Q

                                      10

  WR      DQ                                                              RD
TRISC      CK Q                                                         TRISC

  RD                                                                       RD
TRISC                                                                   PORTC

                                                                                      EUSART RX/DT

   RD
PORTC

TABLE 3-3: SUMMARY OF REGISTERS ASSOCIATED WITH PORTC

Name           Bit 7  Bit 6               Bit 5  Bit 4           Bit 3  Bit 2  Bit 1  Bit 0          Value on        Value on
                                                                                                    POR, BOR          all other
                                                                                                                       Resets
CCP1CON        P1M1   P1M0                DC1B1  DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000
CCP2CON                                                                                                             0000 0000
PORTC          --     --                  DC2B1  DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000                        --00 0000
PSTRCON                                                                                                             uuuu uuuu
RCSTA          RC7    RC6                 RC5    RC4             RC3    RC2    RC1    RC0    xxxx xxxx              ---0 0001
SSPCON                                                                                                              0000 000x
T1CON          --     --                  --     STRSYNC STRD           STRC   STRB   STRA   ---0 0001              0000 0000
TRISC                                                                                                               0000 0000
Legend:        SPEN   RX9                 SREN   CREN            ADDEN FERR    OERR   RX9D   0000 000x              1111 1111

          WCOL SSPOV SSPEN                       CKP             SSPM3 SSPM2 SSPM1 SSPM0 0000 0000

          T1GINV TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000

          TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 1111 1111

          x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTC.

DS41291D-page 56                                        Preliminary                   2007 Microchip Technology Inc.
                                          PIC16F882/883/884/886/887

3.6 PORTD and TRISD Registers                                The TRISD register (Register 3-12) controls the PORTD
                                                             pin output drivers, even when they are being used as
PORTD(1) is a 8-bit wide, bidirectional port. The            analog inputs. The user should ensure the bits in the
corresponding data direction register is TRISD               TRISD register are maintained set when using them as
(Register 3-12). Setting a TRISD bit (= 1) will make the     analog inputs. I/O pins configured as analog input always
corresponding PORTD pin an input (i.e., put the              read `0'.
corresponding output driver in a High-Impedance mode).
Clearing a TRISD bit (= 0) will make the corresponding       EXAMPLE 3-5: INITIALIZING PORTD
PORTD pin an output (i.e., enable the output driver and
put the contents of the output latch on the selected pin).   BANKSEL PORTD                ;
Example 3-5 shows how to initialize PORTD.                   CLRF PORTD                   ;Init PORTD
                                                             BANKSEL TRISD                ;
Reading the PORTD register (Register 3-11) reads the         MOVLW B`00001100'            ;Set RD<3:2> as inputs
status of the pins, whereas writing to it will write to the  MOVWF TRISD                  ;and set RD<7:4,1:0>
PORT latch. All write operations are read-modify-write                                    ;as outputs
operations. Therefore, a write to a port implies that the
port pins are read, this value is modified and then written
to the PORT data latch.

    Note 1: PORTD is available on PIC16F884/887
                only.

REGISTER 3-11: PORTD: PORTD REGISTER

     R/W-x         R/W-x          R/W-x             R/W-x    R/W-x                 R/W-x  R/W-x   R/W-x
      RD7           RD6            RD5               RD4      RD3                   RD2    RD1     RD0
bit 7
                                                                                                         bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7-0     RD<7:0>: PORTD General Purpose I/O Pin bit
            1 = Port pin is > VIH
            0 = Port pin is < VIL

REGISTER 3-12: TRISD: PORTD TRI-STATE REGISTER

     R/W-1          R/W-1          R/W-1             R/W-1    R/W-1   R/W-1                R/W-1   R/W-1
    TRISD7         TRISD6         TRISD5            TRISD4   TRISD3  TRISD2               TRISD1  TRISD0
bit 7
                                                                                                          bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7-0     TRISD<7:0>: PORTD Tri-State Control bit
            1 = PORTD pin configured as an input (tri-stated)
            0 = PORTD pin configured as an output

2007 Microchip Technology Inc.                    Preliminary                                  DS41291D-page 57
PIC16F882/883/884/886/887

3.6.1 RD<4:0>                                                   3.6.3     RD6/P1C(1)

Figure 3-19 shows the diagram for these pins. These             Figure 3-20 shows the diagram for this pin. This pin is
pins are configured to function as general purpose              configurable to function as one of the following:
I/O's.
                                                                a general purpose I/O
   Note: RD<4:0> is available on PIC16F884/887                   a PWM output
               only.
                                                                Note 1: RD6/P1C is available on PIC16F884/887
FIGURE 3-19:      BLOCK DIAGRAM OF                                          only. See RB1/AN10/P1C/C12IN3- for
                  RD<4:0>                                                   this function on PIC16F882/883/886.

                                                                3.6.4     RD7/P1D(1)

Data Bus

                                       VDD                      Figure 3-20 shows the diagram for this pin. This pin is
                                                                configurable to function as one of the following:
                                              I/O Pin
   WR     DQ                           VSS                      a general purpose I/O
PORTD      CK Q                                                 a PWM output

          DQ                                                    Note 1: RD7/P1D is available on PIC16F884/887
           CK Q                                                             only. See RB4/AN11/P1D for this function
                                                                            on PIC16F882/883/886.

  WR
TRISD

                                                                FIGURE 3-20:     BLOCK DIAGRAM OF
                                                                                 RD<7:5>
  RD
TRISD                                                           Data Bus         PSTRCON
                                                                                        CCP1 01
   RD                                                                     DQ                                        VDD
PORTD
                                                                                                                           I/O Pin
          RD5/P1B(1)                                               WR     CK Q                                      VSS
                                                                PORTD
3.6.2

Figure 3-20 shows the diagram for this pin. This pin is                                                       10
configurable to function as one of the following:                         DQ

a general purpose I/O                                           WR      CK Q
a PWM output                                                  TRISD

Note 1: RD5/P1B is available on PIC16F884/887                     RD
           only. See RB2/AN8/P1B for this function              TRISD
            on PIC16F882/883/886.
                                                                   RD
                                                                PORTD

TABLE 3-4: SUMMARY OF REGISTERS ASSOCIATED WITH PORTD

Name      Bit 7          Bit 6  Bit 5  Bit 4             Bit 3  Bit 2     Bit 1  Bit 0    Value on                   Value on
                                                                                         POR, BOR                     all other
                                                                                                                       Resets
PORTD     RD7            RD6    RD5    RD4               RD3    RD2       RD1    RD0     xxxx xxxx
PSTRCON                                                                                                             uuuu uuuu
TRISD     --             --     --     STRSYNC STRD             STRC      STRB   STRA    ---0 0001
Legend:                                                                                                             ---0 0001
          TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 1111 1111
                                                                                                                    1111 1111

          x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTD.

DS41291D-page 58                              Preliminary                         2007 Microchip Technology Inc.
                                       PIC16F882/883/884/886/887

3.7 PORTE and TRISE Registers                                The TRISE register (Register 3-14) controls the PORTE
                                                             pin output drivers, even when they are being used as
PORTE(1) is a 4-bit wide, bidirectional port. The            analog inputs. The user should ensure the bits in the
corresponding data direction register is TRISE. Setting a    TRISE register are maintained set when using them as
TRISE bit (= 1) will make the corresponding PORTE pin        analog inputs. I/O pins configured as analog input always
an input (i.e., put the corresponding output driver in a     read `0'.
High-Impedance mode). Clearing a TRISE bit (= 0) will
make the corresponding PORTE pin an output (i.e.,            Note:   The ANSEL register must be initialized to
enable the output driver and put the contents of the                 configure an analog channel as a digital
output latch on the selected pin). The exception is RE3,             input. Pins configured as analog inputs will
which is input only and its TRIS bit will always read as             read `0'.
`1'. Example 3-6 shows how to initialize PORTE.
                                                             EXAMPLE 3-6: INITIALIZING PORTE
Reading the PORTE register (Register 3-13) reads the
status of the pins, whereas writing to it will write to the  BANKSEL PORTE                ;
PORT latch. All write operations are read-modify-write                                    ;Init PORTE
operations. Therefore, a write to a port implies that the    CLRF PORTE                   ;
port pins are read, this value is modified and then written                               ;digital I/O
to the PORT data latch. RE3 reads `0' when MCLRE =           BANKSEL ANSEL                ;Bank 1
1.                                                                                        ;
                                                             CLRF ANSEL                   ;Set RE<3:2> as inputs
    Note 1: RE<2:0> pins are available on                                                 ;and set RE<1:0>
                PIC16F884/887 only.                          BCF     STATUS,RP1           ;as outputs

                                                             BANKSEL TRISE

                                                             MOVLW B`00001100'

                                                             MOVWF TRISE

REGISTER 3-13: PORTE: PORTE REGISTER

       U-0         U-0            U-0               U-0      R-x                   R/W-x  R/W-x   R/W-x
        --
bit 7              --             --                --       RE3                   RE2    RE1                 RE0

                                                                                                                   bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7-4     Unimplemented: Read as `0'
bit 3-0
            RD<3:0>: PORTE General Purpose I/O Pin bit
            1 = Port pin is > VIH
            0 = Port pin is < VIL

REGISTER 3-14: TRISE: PORTE TRI-STATE REGISTER

       U-0         U-0            U-0               U-0      R-1(1)   R/W-1                R/W-1   R/W-1
        --                                                           TRISE2               TRISE1  TRISE0
bit 7              --             --                --       TRISE3
                                                                                                          bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7-4           Unimplemented: Read as `0'
bit 3-0
                  TRISE<3:0>: PORTE Tri-State Control bit
Note 1:           1 = PORTE pin configured as an input (tri-stated)
                  0 = PORTE pin configured as an output

            TRISE<3> always reads `1'.

2007 Microchip Technology Inc.                    Preliminary                                  DS41291D-page 59
PIC16F882/883/884/886/887

3.7.1     RE0/AN5(1)                                                        3.7.4 RE3/MCLR/VPP

This pin is configurable to function as one of the                          Figure 3-22 shows the diagram for this pin. This pin is
following:                                                                  configurable to function as one of the following:

a general purpose I/O                                                      a general purpose input
an analog input for the ADC                                                as Master Clear Reset with weak pull-up

Note 1: RE0/AN5 is available on PIC16F884/887                               FIGURE 3-22:     BLOCK DIAGRAM OF RE3
            only.
                                                                                                                           VDD

3.7.2     RE1/AN6(1)                                                                         MCLRE                 Weak

This pin is configurable to function as one of the                          Data Bus                        MCLRE
following:
                                                                              RD
a general purpose I/O                                                     TRISE            Reset                       Input
an analog input for the ADC                                                 RD                       VSS               Pin
                                                                            PORTE
Note 1: RE1/AN6 is available on PIC16F884/887                                                               MCLRE  VSS
            only.

3.7.3     RE2/AN7(1)

This pin is configurable to function as one of the
following:

a general purpose I/O
an analog input for the ADC

Note 1: RE2/AN7 is available on PIC16F884/887
            only.

FIGURE 3-21:      BLOCK DIAGRAM OF
                  RE<2:0>
Data Bus
                                                     VDD
          DQ
                                                            I/O Pin
  WR      CK Q
PORTE                                                VSS
                             Analog(1)
WR       DQ                Input Mode
TRISE      CK Q

  RD
TRISE

   RD
PORTE

          To A/D Converter

Note 1: ANSEL determines Analog Input mode.

TABLE 3-5: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

Name      Bit 7 Bit 6 Bit 5 Bit 4 Bit 3                              Bit 2  Bit 1     Bit 0   Value on           Value on
                                                                                             POR, BOR       all other Resets

ANSEL     ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0                                            1111 1111             1111 1111
PORTE
TRISE     --      --           --  --        RE3                     RE2    RE1       RE0    ---- xxxx             ---- uuuu
Legend:
          --      --           --  -- TRISE3 TRISE2 TRISE1 TRISE0 ---- 1111                                        ---- 1111

          x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTE

DS41291D-page 60                             Preliminary                                     2007 Microchip Technology Inc.
                                            PIC16F882/883/884/886/887

4.0 OSCILLATOR MODULE (WITH                                   The Oscillator module can be configured in one of eight
         FAIL-SAFE CLOCK MONITOR)                             clock modes.

4.1 Overview                                                  1. EC External clock with I/O on OSC2/CLKOUT.
                                                              2. LP 32 kHz Low-Power Crystal mode.
The Oscillator module has a wide variety of clock             3. XT Medium Gain Crystal or Ceramic Resonator
sources and selection features that allow it to be used
in a wide range of applications while maximizing perfor-            Oscillator mode.
mance and minimizing power consumption. Figure 4-1            4. HS High Gain Crystal or Ceramic Resonator
illustrates a block diagram of the Oscillator module.
                                                                    mode.
Clock sources can be configured from external                 5. RC External Resistor-Capacitor (RC) with
oscillators, quartz crystal resonators, ceramic resonators
and Resistor-Capacitor (RC) circuits. In addition, the              FOSC/4 output on OSC2/CLKOUT.
system clock source can be configured from one of two         6. RCIO External Resistor-Capacitor (RC) with
internal oscillators, with a choice of speeds selectable via
software. Additional clock features include:                        I/O on OSC2/CLKOUT.
                                                              7. INTOSC Internal oscillator with FOSC/4 output
Selectable system clock source between external
   or internal via software.                                        on OSC2 and I/O on OSC1/CLKIN.
                                                              8. INTOSCIO Internal oscillator with I/O on
Two-Speed Start-up mode, which minimizes
   latency between external oscillator start-up and                 OSC1/CLKIN and OSC2/CLKOUT.
   code execution.
                                                              Clock Source modes are configured by the FOSC<2:0>
Fail-Safe Clock Monitor (FSCM) designed to                  bits in the Configuration Word Register 1 (CONFIG1).
   detect a failure of the external clock source (LP,         The internal clock can be generated from two internal
   XT, HS, EC or RC modes) and switch                         oscillators. The HFINTOSC is a calibrated
   automatically to the internal oscillator.                  high-frequency oscillator. The LFINTOSC is an
                                                              uncalibrated low-frequency oscillator.

FIGURE 4-1:  PIC MCU CLOCK SOURCE BLOCK DIAGRAM

             External Oscillator                                                     FOSC<2:0>
                                     Sleep                              (Configuration Word Register 1)

                                                                                       SCS<0>
                                                                               (OSCCON Register)

OSC2                                                          LP, XT, HS, RC, RCIO, EC
OSC1

                                            Postscaler   IRCF<2:0>                                                                               System Clock
                                                                           MUX(OSCCON Register)                                      (CPU and Peripherals)
                                                                                                                                MUX
                                              8 MHz                     INTOSC
                                                           111
             Internal Oscillator
                                              4 MHz
                  HFINTOSC                                 110
                     8 MHz
                                              2 MHz
                  LFINTOSC                                 101
                     31 kHz
                                              1 MHz
                                                           100

                                            500 kHz
                                                           011

                                            250 kHz
                                                           010

                                            125 kHz
                                                           001

                                             31 kHz
                                                           000

                                                                        Power-up Timer (PWRT)
                                                                        Watchdog Timer (WDT)
                                                                        Fail-Safe Clock Monitor (FSCM)

2007 Microchip Technology Inc.            Preliminary                                                                              41291D-page 61
PIC16F882/883/884/886/887

4.2 Oscillator Control

The Oscillator Control (OSCCON) register (Figure 4-1)
controls the system clock and frequency selection
options. The OSCCON register contains the following
bits:

Frequency selection bits (IRCF)
Frequency Status bits (HTS, LTS)
System clock control bits (OSTS, SCS)

REGISTER 4-1: OSCCON: OSCILLATOR CONTROL REGISTER

      U-0          R/W-1  R/W-1             R/W-0         R-1                R-0  R-0      R/W-0
       --          IRCF2  IRCF1             IRCF0      OSTS(1)               HTS
bit 7                                                                             LTS                 SCS

                                                                                                            bit 0

Legend:                   W = Writable bit             U = Unimplemented bit, read as `0'
R = Readable bit          `1' = Bit is set
-n = Value at POR                                      `0' = Bit is cleared       x = Bit is unknown

bit 7           Unimplemented: Read as `0'
bit 6-4
                IRCF<2:0>: Internal Oscillator Frequency Select bits
bit 3           111 = 8 MHz
bit 2           110 = 4 MHz (default)
bit 1           101 = 2 MHz
bit 0           100 = 1 MHz
                011 = 500 kHz
                010 = 250 kHz
                001 = 125 kHz
                000 = 31 kHz (LFINTOSC)
                OSTS: Oscillator Start-up Time-out Status bit(1)
                1 = Device is running from the external clock defined by FOSC<2:0> of the CONFIG1 register
                0 = Device is running from the internal oscillator (HFINTOSC or LFINTOSC)

                HTS: HFINTOSC Status bit (High Frequency 8 MHz to 125 kHz)
                1 = HFINTOSC is stable
                0 = HFINTOSC is not stable

                LTS: LFINTOSC Stable bit (Low Frequency 31 kHz)
                1 = LFINTOSC is stable
                0 = LFINTOSC is not stable

                SCS: System Clock Select bit
                1 = Internal oscillator is used for system clock
                0 = Clock source defined by FOSC<2:0> of the CONFIG1 register

Note 1: Bit resets to `0' with Two-Speed Start-up and LP, XT or HS selected as the Oscillator mode or Fail-Safe
              mode is enabled.

41291D-page 62                              Preliminary                            2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

4.3 Clock Source Modes                                       4.4 External Clock Modes

Clock Source modes can be classified as external or          4.4.1 OSCILLATOR START-UP TIMER (OST)
internal.
                                                             If the Oscillator module is configured for LP, XT or HS
External Clock modes rely on external circuitry for        modes, the Oscillator Start-up Timer (OST) counts
   the clock source. Examples are: Oscillator mod-           1024 oscillations from OSC1. This occurs following a
   ules (EC mode), quartz crystal resonators or              Power-on Reset (POR) and when the Power-up Timer
   ceramic resonators (LP, XT and HS modes) and              (PWRT) has expired (if configured), or a wake-up from
   Resistor-Capacitor (RC) mode circuits.                    Sleep. During this time, the program counter does not
                                                             increment and program execution is suspended. The
Internal clock sources are contained internally            OST ensures that the oscillator circuit, using a quartz
   within the Oscillator module. The Oscillator              crystal resonator or ceramic resonator, has started and
   module has two internal oscillators: the 8 MHz            is providing a stable system clock to the Oscillator
   High-Frequency Internal Oscillator (HFINTOSC)             module. When switching between clock sources, a
   and the 31 kHz Low-Frequency Internal Oscillator          delay is required to allow the new clock to stabilize.
   (LFINTOSC).                                               These oscillator delays are shown in Table 4-1.

The system clock can be selected between external or         In order to minimize latency between external oscillator
internal clock sources via the System Clock Select           start-up and code execution, the Two-Speed Clock
(SCS) bit of the OSCCON register. See Section 4.6            Start-up mode can be selected (see Section 4.7
"Clock Switching" for additional information.                "Two-Speed Clock Start-up Mode").

TABLE 4-1: OSCILLATOR DELAY EXAMPLES

Switch From        Switch To      Frequency                               Oscillator Delay

Sleep/POR          LFINTOSC       31 kHz                                  Oscillator Warm-up Delay (TWARM)
                   HFINTOSC       125 kHz to 8 MHz
Sleep/POR          EC, RC         DC 20 MHz                             2 cycles
LFINTOSC (31 kHz)  EC, RC         DC 20 MHz                             1 cycle of each
Sleep/POR          LP, XT, HS     32 kHz to 20 MHz                        1024 Clock Cycles (OST)
                                                                          1 s (approx.)
LFINTOSC (31 kHz)  HFINTOSC       125 kHz to 8 MHz

4.4.2 EC MODE                                                FIGURE 4-2:               EXTERNAL CLOCK (EC)
                                                                                       MODE OPERATION
The External Clock (EC) mode allows an externally
generated logic level as the system clock source. When       Clock from                OSC1/CLKIN
operating in this mode, an external clock source is          Ext. System                     PIC MCU
connected to the OSC1 input and the OSC2 is available
for general purpose I/O. Figure 4-2 shows the pin                                 I/O  OSC2/CLKOUT(1)
connections for EC mode.
                                                             Note 1: Alternate pin functions are listed in the
The Oscillator Start-up Timer (OST) is disabled when                         Section 1.0 "Device Overview".
EC mode is selected. Therefore, there is no delay in
operation after a Power-on Reset (POR) or wake-up
from Sleep. Because the PIC MCU design is fully
static, stopping the external clock input will have the
effect of halting the device while leaving all data intact.
Upon restarting the external clock, the device will
resume operation as if no time had elapsed.

2007 Microchip Technology Inc.  Preliminary                                          41291D-page 63
PIC16F882/883/884/886/887

4.4.3 LP, XT, HS MODES                                      Note 1: Quartz crystal characteristics vary according
                                                                        to type, package and manufacturer. The
The LP, XT and HS modes support the use of quartz                       user should consult the manufacturer data
crystal resonators or ceramic resonators connected to                   sheets for specifications and recommended
OSC1 and OSC2 (Figure 4-3). The mode selects a low,                     application.
medium or high gain setting of the internal
inverter-amplifier to support various resonator types              2: Always verify oscillator performance over
and speed.                                                              the VDD and temperature range that is
                                                                        expected for the application.
LP Oscillator mode selects the lowest gain setting of the
internal inverter-amplifier. LP mode current consumption           3: For oscillator design assistance, reference
is the least of the three modes. This mode is designed to               the following Microchip Applications Notes:
drive only 32.768 kHz tuning-fork type crystals (watch
crystals).                                                               AN826, "Crystal Oscillator Basics and
                                                                         Crystal Selection for rfPIC and PIC
XT Oscillator mode selects the intermediate gain                         Devices" (DS00826)
setting of the internal inverter-amplifier. XT mode
current consumption is the medium of the three modes.                   AN849, "Basic PIC Oscillator Design"
This mode is best suited to drive resonators with a                      (DS00849)
medium drive level specification.
                                                                         AN943, "Practical PIC Oscillator
HS Oscillator mode selects the highest gain setting of the               Analysis and Design" (DS00943)
internal inverter-amplifier. HS mode current consumption
is the highest of the three modes. This mode is best                     AN949, "Making Your Oscillator Work"
suited for resonators that require a high drive setting.                 (DS00949)

Figure 4-3 and Figure 4-4 show typical circuits for         FIGURE 4-4:         CERAMIC RESONATOR
quartz crystal and ceramic resonators, respectively.                            OPERATION
                                                                                (XT OR HS MODE)

FIGURE 4-3:            QUARTZ CRYSTAL                                           PIC MCU
                       OPERATION (LP, XT OR
                       HS MODE)                                                 OSC1/CLKIN

                       PIC MCU                               C1                             To Internal

                                                                                             Logic

                       OSC1/CLKIN                                        RP(3)  RF(2)        Sleep
                            RF(2)
C1                                  To Internal               C2 Ceramic RS(1)  OSC2/CLKOUT
                                    Logic                           Resonator
            Quartz
            Crystal                 Sleep

C2              RS(1)  OSC2/CLKOUT                          Note 1: A series resistor (RS) may be required for
                                                                          ceramic resonators with low drive level.
Note 1: A series resistor (RS) may be required for
              quartz crystals with low drive level.                  2: The value of RF varies with the Oscillator mode
                                                                          selected (typically between 2 M to 10 M).
        2: The value of RF varies with the Oscillator mode
              selected (typically between 2 M to 10 M).              3: An additional parallel feedback resistor (RP)
                                                                          may be required for proper ceramic resonator
                                                                          operation.

41291D-page 64                                   Preliminary                     2007 Microchip Technology Inc.
                                       PIC16F882/883/884/886/887

4.4.4 EXTERNAL RC MODES                                     4.5 Internal Clock Modes

The external Resistor-Capacitor (RC) modes support          The Oscillator module has two independent, internal
the use of an external RC circuit. This allows the          oscillators that can be configured or selected as the
designer maximum flexibility in frequency choice while      system clock source.
keeping costs to a minimum when clock accuracy is not
required. There are two modes: RC and RCIO.                 1. The HFINTOSC (High-Frequency Internal
                                                                  Oscillator) is factory calibrated and operates at
In RC mode, the RC circuit connects to OSC1.                      8 MHz. The frequency of the HFINTOSC can be
OSC2/CLKOUT outputs the RC oscillator frequency                   user-adjusted via software using the OSCTUNE
divided by 4. This signal may be used to provide a clock          register (Register 4-2).
for external circuitry, synchronization, calibration, test
or other application requirements. Figure 4-5 shows         2. The LFINTOSC (Low-Frequency Internal
the external RC mode connections.                                 Oscillator) is uncalibrated and operates at
                                                                  31 kHz.
FIGURE 4-5:      EXTERNAL RC MODES
                                                            The system clock speed can be selected via software
      VDD                    PIC MCU  Internal             using the Internal Oscillator Frequency Select bits
REXT             OSC1/CLKIN             Clock               IRCF<2:0> of the OSCCON register.

CEXT             OSC2/CLKOUT(1)                             The system clock can be selected between external or
VSS                                                        internal clock sources via the System Clock Selection
                                                            (SCS) bit of the OSCCON register. See Section 4.6
      FOSC/4 or                                             "Clock Switching" for more information.
      I/O(2)
                                                            4.5.1 INTOSC AND INTOSCIO MODES
Recommended values: 10 k  REXT  100 k, <3V
                                3 k  REXT  100 k, 3-5V      The INTOSC and INTOSCIO modes configure the
                                CEXT > 20 pF, 2-5V          internal oscillators as the system clock source when
                                                            the device is programmed using the oscillator selection
Note 1:      Alternate pin functions are listed in the      or the FOSC<2:0> bits in the Configuration Word
         2:  Section 1.0 "Device Overview".                 Register 1 (CONFIG1).
             Output depends upon RC or RCIO Clock
             mode.                                          In INTOSC mode, OSC1/CLKIN is available for general
                                                            purpose I/O. OSC2/CLKOUT outputs the selected
In RCIO mode, the RC circuit is connected to OSC1.          internal oscillator frequency divided by 4. The CLKOUT
OSC2 becomes an additional general purpose I/O pin.         signal may be used to provide a clock for external
                                                            circuitry, synchronization, calibration, test or other
The RC oscillator frequency is a function of the supply     application requirements.
voltage, the resistor (REXT) and capacitor (CEXT) values
and the operating temperature. Other factors affecting      In INTOSCIO mode, OSC1/CLKIN and OSC2/CLKOUT
the oscillator frequency are:                               are available for general purpose I/O.

threshold voltage variation                               4.5.2 HFINTOSC
component tolerances
packaging variations in capacitance                       The High-Frequency Internal Oscillator (HFINTOSC) is
                                                            a factory calibrated 8 MHz internal clock source. The
The user also needs to take into account variation due      frequency of the HFINTOSC can be altered via
to tolerance of external RC components used.                software using the OSCTUNE register (Register 4-2).

                                                            The output of the HFINTOSC connects to a postscaler
                                                            and multiplexer (see Figure 4-1). One of seven
                                                            frequencies can be selected via software using the
                                                            IRCF<2:0> bits of the OSCCON register. See
                                                            Section 4.5.4 "Frequency Select Bits (IRCF)" for
                                                            more information.

                                                            The HFINTOSC is enabled by selecting any frequency
                                                            between 8 MHz and 125 kHz by setting the IRCF<2:0>
                                                            bits of the OSCCON register  000. Then, set the
                                                            System Clock Source (SCS) bit of the OSCCON
                                                            register to `1' or enable Two-Speed Start-up by setting
                                                            the IESO bit in the Configuration Word Register 1
                                                            (CONFIG1) to `1'.

                                                            The HF Internal Oscillator (HTS) bit of the OSCCON
                                                            register indicates whether the HFINTOSC is stable or not.

2007 Microchip Technology Inc.                        Preliminary  41291D-page 65
PIC16F882/883/884/886/887

4.5.2.1 OSCTUNE Register                               When the OSCTUNE register is modified, the
                                                       HFINTOSC frequency will begin shifting to the new
The HFINTOSC is factory calibrated but can be          frequency. Code execution continues during this shift.
adjusted in software by writing to the OSCTUNE         There is no indication that the shift has occurred.
register (Register 4-2).
                                                       OSCTUNE does not affect the LFINTOSC frequency.
The default value of the OSCTUNE register is `0'. The  Operation of features that depend on the LFINTOSC
value is a 5-bit two's complement number.              clock source frequency, such as the Power-up Timer
                                                       (PWRT), Watchdog Timer (WDT), Fail-Safe Clock
                                                       Monitor (FSCM) and peripherals, are not affected by the
                                                       change in frequency.

REGISTER 4-2: OSCTUNE: OSCILLATOR TUNING REGISTER

      U-0          U-0  U-0               R/W-0        R/W-0  R/W-0                R/W-0   R/W-0
       --                                                                          TUN1    TUN0
bit 7              --   --                TUN4         TUN3                  TUN2
                                                                                                  bit 0

Legend:                 W = Writable bit               U = Unimplemented bit, read as `0'
R = Readable bit        `1' = Bit is set
-n = Value at POR                                      `0' = Bit is cleared        x = Bit is unknown

bit 7-5         Unimplemented: Read as `0'
bit 4-0
                TUN<4:0>: Frequency Tuning bits
                01111 = Maximum frequency
                01110 =
               
               
               
                00001 =
                00000 = Oscillator module is running at the calibrated frequency.
                11111 =
               
               
               
                10000 = Minimum frequency

41291D-page 66                            Preliminary                               2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

4.5.3 LFINTOSC                                            4.5.5  HFINTOSC AND LFINTOSC CLOCK
                                                                 SWITCH TIMING
The Low-Frequency Internal Oscillator (LFINTOSC) is
an uncalibrated 31 kHz internal clock source.             When switching between the LFINTOSC and the
                                                          HFINTOSC, the new oscillator may already be shut
The output of the LFINTOSC connects to a postscaler       down to save power (see Figure 4-6). If this is the case,
and multiplexer (see Figure 4-1). Select 31 kHz, via      there is a delay after the IRCF<2:0> bits of the
software, using the IRCF<2:0> bits of the OSCCON          OSCCON register are modified before the frequency
register. See Section 4.5.4 "Frequency Select Bits        selection takes place. The LTS and HTS bits of the
(IRCF)" for more information. The LFINTOSC is also the    OSCCON register will reflect the current active status
frequency for the Power-up Timer (PWRT), Watchdog         of the LFINTOSC and HFINTOSC oscillators. The
Timer (WDT) and Fail-Safe Clock Monitor (FSCM).           timing of a frequency selection is as follows:

The LFINTOSC is enabled by selecting 31 kHz               1. IRCF<2:0> bits of the OSCCON register are
(IRCF<2:0> bits of the OSCCON register = 000) as the            modified.
system clock source (SCS bit of the OSCCON
register = 1), or when any of the following are enabled:  2. If the new clock is shut down, a clock start-up
                                                                delay is started.
Two-Speed Start-up IESO bit of the Configuration
   Word Register 1 = 1 and IRCF<2:0> bits of the          3. Clock switch circuitry waits for a falling edge of
   OSCCON register = 000                                        the current clock.

Power-up Timer (PWRT)                                   4. CLKOUT is held low and the clock switch
Watchdog Timer (WDT)                                          circuitry waits for a rising edge in the new clock.
Fail-Safe Clock Monitor (FSCM)
                                                          5. CLKOUT is now connected with the new clock.
The LF Internal Oscillator (LTS) bit of the OSCCON              LTS and HTS bits of the OSCCON register are
register indicates whether the LFINTOSC is stable or            updated as required.
not.
                                                          6. Clock switch is complete.

                                                          See Figure 4-1 for more details.

4.5.4 FREQUENCY SELECT BITS (IRCF)                        If the internal oscillator speed selected is between
                                                          8 MHz and 125 kHz, there is no start-up delay before
The output of the 8 MHz HFINTOSC and 31 kHz               the new frequency is selected. This is because the old
LFINTOSC connects to a postscaler and multiplexer         and new frequencies are derived from the HFINTOSC
(see Figure 4-1). The Internal Oscillator Frequency       via the postscaler and multiplexer.
Select bits IRCF<2:0> of the OSCCON register select
the frequency output of the internal oscillators. One of  Start-up delay specifications are located in the
eight frequencies can be selected via software:           oscillator tables of Section 17.0 "Electrical
                                                          Specifications".
8 MHz
4 MHz (Default after Reset)
2 MHz
1 MHz
500 kHz
250 kHz
125 kHz
31 kHz (LFINTOSC)

Note:  Following any Reset, the IRCF<2:0> bits of
       the OSCCON register are set to `110' and
       the frequency selection is set to 4 MHz.
       The user can modify the IRCF bits to
       select a different frequency.

2007 Microchip Technology Inc.  Preliminary                                               41291D-page 67
PIC16F882/883/884/886/887

FIGURE 4-6:     INTERNAL OSCILLATOR SWITCH TIMING

HFINTOSC LFINTOSC (FSCM and WDT disabled)

HFINTOSC            Start-up Time      2-cycle Sync           Running
LFINTOSC                                                      Running

IRCF <2:0>      0                  =0

System Clock

HFINTOSC LFINTOSC (Either FSCM or WDT enabled)

HFINTOSC                                        2-cycle Sync
LFINTOSC
IRCF <2:0>          0                           =0

System Clock

LFINTOSC HFINTOSC

LFINTOSC            Start-up Time 2-cycle Sync      LFINTOSC turns off unless WDT or FSCM is enabled
HFINTOSC                                                                            Running

IRCF <2:0>      =0                 0

System Clock

41291D-page 68         Preliminary                            2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

4.6 Clock Switching                                        When the Oscillator module is configured for LP, XT or
                                                           HS modes, the Oscillator Start-up Timer (OST) is
The system clock source can be switched between            enabled (see Section 4.4.1 "Oscillator Start-up Timer
external and internal clock sources via software using     (OST)"). The OST will suspend program execution until
the System Clock Select (SCS) bit of the OSCCON            1024 oscillations are counted. Two-Speed Start-up
register.                                                  mode minimizes the delay in code execution by
                                                           operating from the internal oscillator as the OST is
4.6.1 SYSTEM CLOCK SELECT (SCS) BIT                        counting. When the OST count reaches 1024 and the
                                                           OSTS bit of the OSCCON register is set, program
The System Clock Select (SCS) bit of the OSCCON            execution switches to the external oscillator.
register selects the system clock source that is used for
the CPU and peripherals.

When the SCS bit of the OSCCON register = 0,             4.7.1  TWO-SPEED START-UP MODE
   the system clock source is determined by                       CONFIGURATION
   configuration of the FOSC<2:0> bits in the
   Configuration Word Register 1 (CONFIG1).                Two-Speed Start-up mode is configured by the
                                                           following settings:

When the SCS bit of the OSCCON register = 1,             IESO (of the Configuration Word Register 1) = 1;
   the system clock source is chosen by the internal          Internal/External Switchover bit (Two-Speed
   oscillator frequency selected by the IRCF<2:0>             Start-up mode enabled).
   bits of the OSCCON register. After a Reset, the
   SCS bit of the OSCCON register is always                SCS (of the OSCCON register) = 0.
   cleared.
                                                            FOSC<2:0> bits in the Configuration Word
Note:  Any automatic clock switch, which may                  Register 1 (CONFIG1) configured for LP, XT or
       occur from Two-Speed Start-up or Fail-Safe             HS mode.
       Clock Monitor, does not update the SCS bit
       of the OSCCON register. The user can                Two-Speed Start-up mode is entered after:
       monitor the OSTS bit of the OSCCON
       register to determine the current system             Power-on Reset (POR) and, if enabled, after
       clock source.                                          Power-up Timer (PWRT) has expired, or

                                                            Wake-up from Sleep.

4.6.2  OSCILLATOR START-UP TIME-OUT                        If the external clock oscillator is configured to be
       STATUS (OSTS) BIT                                   anything other than LP, XT or HS mode, then
                                                           Two-speed Start-up is disabled. This is because the
The Oscillator Start-up Time-out Status (OSTS) bit of      external clock oscillator does not require any
the OSCCON register indicates whether the system           stabilization time after POR or an exit from Sleep.
clock is running from the external clock source, as
defined by the FOSC<2:0> bits in the Configuration         4.7.2  TWO-SPEED START-UP
Word Register 1 (CONFIG1), or from the internal clock             SEQUENCE
source. In particular, OSTS indicates that the Oscillator
Start-up Timer (OST) has timed out for LP, XT or HS        1. Wake-up from Power-on Reset or Sleep.
modes.                                                     2. Instructions begin execution by the internal

4.7 Two-Speed Clock Start-up Mode                                oscillator at the frequency set in the IRCF<2:0>
                                                                 bits of the OSCCON register.
Two-Speed Start-up mode provides additional power
savings by minimizing the latency between external         3. OST enabled to count 1024 clock cycles.
oscillator start-up and code execution. In applications    4. OST timed out, wait for falling edge of the
that make heavy use of the Sleep mode, Two-Speed
Start-up will remove the external oscillator start-up            internal oscillator.
time from the time spent awake and can reduce the          5. OSTS is set.
overall power consumption of the device.                   6. System clock held low until the next falling edge

This mode allows the application to wake-up from                 of new clock (LP, XT or HS mode).
Sleep, perform a few instructions using the INTOSC         7. System clock is switched to external clock
as the clock source and go back to Sleep without
waiting for the primary oscillator to become stable.             source.

Note:  Executing a SLEEP instruction will abort
       the oscillator start-up time and will cause
       the OSTS bit of the OSCCON register to
       remain clear.

2007 Microchip Technology Inc.                Preliminary       41291D-page 69
PIC16F882/883/884/886/887

4.7.3  CHECKING TWO-SPEED CLOCK
       STATUS

Checking the state of the OSTS bit of the OSCCON
register will confirm if the microcontroller is running
from the external clock source, as defined by the
FOSC<2:0> bits in the Configuration Word Register 1
(CONFIG1), or the internal oscillator.

FIGURE 4-7:      TWO-SPEED START-UP

       HFINTOSC

                        TOST

       OSC1 0 1 1022 1023

       OSC2

Program Counter PC - N        PC                         PC + 1

System Clock

41291D-page 70                    Preliminary                     2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

4.8 Fail-Safe Clock Monitor                                     4.8.3 FAIL-SAFE CONDITION CLEARING

The Fail-Safe Clock Monitor (FSCM) allows the device            The Fail-Safe condition is cleared after a Reset,
to continue operating should the external oscillator fail.      executing a SLEEP instruction or toggling the SCS bit
The FSCM can detect oscillator failure any time after           of the OSCCON register. When the SCS bit is toggled,
the Oscillator Start-up Timer (OST) has expired. The            the OST is restarted. While the OST is running, the
FSCM is enabled by setting the FCMEN bit in the                 device continues to operate from the INTOSC selected
Configuration Word Register 1 (CONFIG1). The FSCM               in OSCCON. When the OST times out, the Fail-Safe
is applicable to all external Oscillator modes (LP, XT,         condition is cleared and the device will be operating
HS, EC, RC and RCIO).                                           from the external clock source. The Fail-Safe condition
                                                                must be cleared before the OSFIF flag can be cleared.

FIGURE 4-8:      FSCM BLOCK DIAGRAM                             4.8.4 RESET OR WAKE-UP FROM SLEEP

       External             Clock Monitor                       The FSCM is designed to detect an oscillator failure
         Clock                    Latch                         after the Oscillator Start-up Timer (OST) has expired.
                                SQ                              The OST is used after waking up from Sleep and after
                                                                any type of Reset. The OST is not used with the EC or
LFINTOSC            64           RQ                            RC Clock modes so that the FSCM will be active as
Oscillator                                                     soon as the Reset or wake-up has completed. When
                 488 Hz                                 Clock   the FSCM is enabled, the Two-Speed Start-up is also
  31 kHz         (~2 ms)                               Failure  enabled. Therefore, the device will always be executing
(~32 s)                                            Detected    code while the OST is operating.

                                                                Note:  Due to the wide range of oscillator start-up
                                                                       times, the Fail-Safe circuit is not active
Sample Clock                                                           during oscillator start-up (i.e., after exiting
                                                                       Reset or Sleep). After an appropriate
4.8.1 FAIL-SAFE DETECTION                                              amount of time, the user should check the
                                                                       OSTS bit of the OSCCON register to verify
The FSCM module detects a failed oscillator by                         the oscillator start-up and that the system
comparing the external oscillator to the FSCM sample                   clock switchover has successfully
clock. The sample clock is generated by dividing the                   completed.
LFINTOSC by 64. See Figure 4-8. Inside the fail
detector block is a latch. The external clock sets the
latch on each falling edge of the external clock. The
sample clock clears the latch on each rising edge of the
sample clock. A failure is detected when an entire
half-cycle of the sample clock elapses before the
primary clock goes low.

4.8.2 FAIL-SAFE OPERATION

When the external clock fails, the FSCM switches the
device clock to an internal clock source and sets the bit
flag OSFIF of the PIR2 register. Setting this flag will
generate an interrupt if the OSFIE bit of the PIE2
register is also set. The device firmware can then take
steps to mitigate the problems that may arise from a
failed clock. The system clock will continue to be
sourced from the internal clock source until the device
firmware successfully restarts the external oscillator
and switches back to external operation.

The internal clock source chosen by the FSCM is
determined by the IRCF<2:0> bits of the OSCCON
register. This allows the internal oscillator to be
configured before a failure occurs.

2007 Microchip Technology Inc.  Preliminary                          41291D-page 71
PIC16F882/883/884/886/887

FIGURE 4-9:                  FSCM TIMING DIAGRAM

         Sample Clock                                           Oscillator
                                                                Failure
                  System
                     Clock                                                                     Failure
                                                                                            Detected
                   Output

Clock Monitor Output
                        (Q)

             OSCFIF

                                           Test                 Test                Test

             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.

TABLE 4-2: SUMMARY OF REGISTERS ASSOCIATED WITH CLOCK SOURCES

Name                Bit 7    Bit 6  Bit 5  Bit 4  Bit 3  Bit 2        Bit 1  Bit 0   Value on           Value on
                                                                                    POR, BOR
                                                                                                        all other
                                                                                                        Resets(1)

CONFIG1(2) CPD               CP MCLRE PWRTE WDTE FOSC2 FOSC1 FOSC0                  --                  --

OSCCON              --       IRCF2 IRCF1 IRCF0 OSTS      HTS          LTS    SCS -110 x000 -110 x000

OSCTUNE             --       --     --     TUN4 TUN3     TUN2         TUN1 TUN0 ---0 0000 ---u uuuu

PIE2                OSFIE C2IE      C1IE   EEIE BCLIE ULPWUIE         --     CCP2IE 0000 00-0 0000 00-0

PIR2                OSFIF C2IF      C1IF   EEIF BCLIF ULPWUIF         --     CCP2IF 0000 00-0 0000 00-0

Legend:      x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by oscillators.
Note 1:      Other (non Power-up) Resets include MCLR Reset and Watchdog Timer Reset during normal operation.
             See Configuration Word Register 1 (Register 14-1) for operation of all register bits.
         2:

41291D-page 72                                    Preliminary                2007 Microchip Technology Inc.
                                     PIC16F882/883/884/886/887

5.0 TIMER0 MODULE                                                   5.1 Timer0 Operation

The Timer0 module is an 8-bit timer/counter with the                When used as a timer, the Timer0 module can be used
following features:                                                 as either an 8-bit timer or an 8-bit counter.
8-bit timer/counter register (TMR0)
8-bit prescaler (shared with Watchdog Timer)                      5.1.1 8-BIT TIMER MODE
Programmable internal or external clock source
Programmable external clock edge selection                        When used as a timer, the Timer0 module will
Interrupt on overflow                                             increment every instruction cycle (without prescaler).
Figure 5-1 is a block diagram of the Timer0 module.                 Timer mode is selected by clearing the T0CS bit of the
                                                                    OPTION register to `0'.

                                                                    When TMR0 is written, the increment is inhibited for
                                                                    two instruction cycles immediately following the write.

                                                                    Note:   The value written to the TMR0 register can
                                                                            be adjusted, in order to account for the two
                                                                            instruction cycle delay when TMR0 is
                                                                            written.

                                                                    5.1.2 8-BIT COUNTER MODE

                                                                    When used as a counter, the Timer0 module will
                                                                    increment on every rising or falling edge of the T0CKI
                                                                    pin. The incrementing edge is determined by the T0SE
                                                                    bit of the OPTION register. Counter mode is selected by
                                                                    setting the T0CS bit of the OPTION register to `1'.

FIGURE 5-1:     TIMER0/WDT PRESCALER BLOCK DIAGRAM

FOSC/4                                                                                              Data Bus
                               0                                                                    8

T0CKI              1                    8-bit                                 1                       TMR0
  pin                                Prescaler                                             Sync
                                  0                                                       2 Tcy     Set Flag bit T0IF
         T0SE   T0CS                                                                                   on Overflow
                                                                              0
                                  1
                                                                            PSA

   WDTE                                                         8
SWDTEN                            PSA

        31 kHz                                                     PS<2:0>    1
       INTOSC                                                                               WDT
                                    16-bit
                                  Prescaler 16                                            Time-out
                                                                              0
                Watchdog
                  Timer                                                     PSA

                                     WDTPS<3:0>

Note 1: T0SE, T0CS, PSA, PS<2:0> are bits in the OPTION register.
         2: SWDTEN and WDTPS<3:0> are bits in the WDTCON register.
         3: WDTE bit is in the Configuration Word Register1.

2007 Microchip Technology Inc.                Preliminary                                         DS41291D-page 73
PIC16F882/883/884/886/887

5.1.3    SOFTWARE PROGRAMMABLE                              When changing the prescaler assignment from the
         PRESCALER                                          WDT to the Timer0 module, the following instruction
                                                            sequence must be executed (see Example 5-2).
A single software programmable prescaler is available
for use with either Timer0 or the Watchdog Timer            EXAMPLE 5-2:  CHANGING PRESCALER
(WDT), but not both simultaneously. The prescaler                         (WDT  TIMER0)
assignment is controlled by the PSA bit of the OPTION
register. To assign the prescaler to Timer0, the PSA bit    CLRWDT        ;Clear WDT and
must be cleared to a `0'.
                                                                          ;prescaler

There are 8 prescaler options for the Timer0 module         BANKSEL OPTION_REG ;
ranging from 1:2 to 1:256. The prescale values are
selectable via the PS<2:0> bits of the OPTION register.     MOVLW b'11110000' ;Mask TMR0 select and
In order to have a 1:1 prescaler value for the Timer0
module, the prescaler must be assigned to the WDT           ANDWF OPTION_REG,W ;prescaler bits
module.
                                                            IORLW b'00000011' ;Set prescale to 1:16

                                                            MOVWF OPTION_REG ;

The prescaler is not readable or writable. When             5.1.4 TIMER0 INTERRUPT
assigned to the Timer0 module, all instructions writing to
the TMR0 register will clear the prescaler.                 Timer0 will generate an interrupt when the TMR0
                                                            register overflows from FFh to 00h. The T0IF interrupt
When the prescaler is assigned to WDT, a CLRWDT             flag bit of the INTCON register is set every time the
instruction will clear the prescaler along with the WDT.    TMR0 register overflows, regardless of whether or not
                                                            the Timer0 interrupt is enabled. The T0IF bit must be
5.1.3.1  Switching Prescaler Between                        cleared in software. The Timer0 interrupt enable is the
         Timer0 and WDT Modules                             T0IE bit of the INTCON register.

As a result of having the prescaler assigned to either      Note:   The Timer0 interrupt cannot wake the
Timer0 or the WDT, it is possible to generate an                    processor from Sleep since the timer is
unintended device Reset when switching prescaler                    frozen during Sleep.
values. When changing the prescaler assignment from
Timer0 to the WDT module, the instruction sequence          5.1.5   USING TIMER0 WITH AN
shown in Example 5-1, must be executed.                             EXTERNAL CLOCK

EXAMPLE 5-1:      CHANGING PRESCALER                        When Timer0 is in Counter mode, the synchronization
                  (TIMER0  WDT)                             of the T0CKI input and the Timer0 register is accom-
                                                            plished by sampling the prescaler output on the Q2 and
BANKSEL  TMR0            ;                                  Q4 cycles of the internal phase clocks. Therefore, the
CLRWDT                   ;Clear WDT                         high and low periods of the external clock source must
CLRF     TMR0            ;Clear TMR0 and                    meet the timing requirements as shown in the
                         ;prescaler                         Section 17.0 "Electrical Specifications".
BANKSEL  OPTION_REG      ;
BSF      OPTION_REG,PSA  ;Select WDT
CLRWDT                   ;
         b'11111000'     ;
MOVLW    OPTION_REG,W    ;Mask prescaler
ANDWF    b'00000101'     ;bits
IORLW    OPTION_REG      ;Set WDT prescaler
MOVWF                    ;to 1:32

DS41291D-page 74                      Preliminary                         2007 Microchip Technology Inc.
                                           PIC16F882/883/884/886/887

REGISTER 5-1: OPTION_REG: OPTION REGISTER

     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
bit 7
                                                                                                            bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared         x = Bit is unknown

bit 7       RBPU: PORTB Pull-up Enable bit
bit 6       1 = PORTB pull-ups are disabled
bit 5       0 = PORTB pull-ups are enabled by individual PORT latch values
bit 4
bit 3       INTEDG: Interrupt Edge Select bit
bit 2-0     1 = Interrupt on rising edge of INT pin
            0 = Interrupt on falling edge of INT pin

            T0CS: TMR0 Clock Source Select bit
            1 = Transition on T0CKI pin
            0 = Internal instruction cycle clock (FOSC/4)

            T0SE: TMR0 Source Edge Select bit
            1 = Increment on high-to-low transition on T0CKI pin
            0 = Increment on low-to-high transition on T0CKI pin

            PSA: Prescaler Assignment bit
            1 = Prescaler is assigned to the WDT
            0 = Prescaler is assigned to the Timer0 module

            PS<2:0>: Prescaler Rate Select bits

                   BIT VALUE TMR0 RATE WDT RATE

                    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

Note 1: A dedicated 16-bit WDT postscaler is available. See Section 14.5 "Watchdog Timer (WDT)" for more
              information.

TABLE 5-1: SUMMARY OF REGISTERS ASSOCIATED WITH TIMER0

Name        Bit 7   Bit 6         Bit 5 Bit 4 Bit 3 Bit 2           Bit 1          Bit 0   Value on  Value on
                                                                                          POR, BOR   all other
                                                                                                      Resets

TMR0        Timer0 Module Register         INTE RBIE         T0IF   INTF                     xxxx xxxx uuuu uuuu
INTCON        GIE PEIE T0IE                                                        RBIF 0000 000x 0000 000x

OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

TRISA       TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 1111 1111 1111 1111

Legend: = Unimplemented locations, read as `0', u = unchanged, x = unknown. Shaded cells are not used by the
              Timer0 module.

2007 Microchip Technology Inc.                    Preliminary                                  DS41291D-page 75
PIC16F882/883/884/886/887

6.0 TIMER1 MODULE WITH GATE                                   6.1 Timer1 Operation
         CONTROL
                                                              The Timer1 module is a 16-bit incrementing counter
The Timer1 module is a 16-bit timer/counter with the          which is accessed through the TMR1H:TMR1L register
following features:                                           pair. Writes to TMR1H or TMR1L directly update the
                                                              counter.
16-bit timer/counter register pair (TMR1H:TMR1L)
Programmable internal or external clock source              When used with an internal clock source, the module is
3-bit prescaler                                             a timer. When used with an external clock source, the
Optional LP oscillator                                      module can be used as either a timer or counter.
Synchronous or asynchronous operation
Timer1 gate (count enable) via comparator or                6.2 Clock Source Selection

   T1G pin                                                    The TMR1CS bit of the T1CON register is used to select
Interrupt on overflow                                       the clock source. When TMR1CS = 0, the clock source
Wake-up on overflow (external clock,                        is FOSC/4. When TMR1CS = 1, the clock source is
                                                              supplied externally.
   Asynchronous mode only)
Time base for the Capture/Compare function                               Clock Source                       TMR1CS
Special Event Trigger (with ECCP)                           FOSC/4                                               0
Comparator output synchronization to Timer1                 T1CKI pin                                            1

   clock

Figure 6-1 is a block diagram of the Timer1 module.

FIGURE 6-1:       TIMER1 BLOCK DIAGRAM

                                                                                 TMR1GE                       T1GINV

                                                                  TMR1ON

Set flag bit                                                  To C2 Comparator Module
TMR1IF on
Overflow          TMR1(2)                                     Timer1 Clock

                                                                  0                      Synchronized

                  TMR1H             EN                                                   clock input
                          TMR1L

                                                                  1

                  T1 OSC

                           (1)                                    T1SYNC

T1OSI                               1
T1OSO
                                                              1                          Synchronize(3)
                                                                                                  det
                           0                          FOSC/4        Prescaler
                                                                    1, 2, 4, 8            Sleep input
                                                      Internal 0
                                                                             2
                                                      Clock       T1CKPS<1:0>

T1OSCEN                                 TMR1CS                              T1G          1

T1CKI                                                                       C2OUT        0

                                                                                         T1GSS

Note 1:           ST Buffer is low power type when using LP oscillator, or high speed type when using T1CKI.
         2:       Timer1 register increments on rising edge.
         3:       Synchronize does not operate while in Sleep.

DS41291D-page 76           Preliminary                                           2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

6.2.1 INTERNAL CLOCK SOURCE                                6.5 Timer1 Operation in
                                                                    Asynchronous Counter Mode
When the internal clock source is selected the
TMR1H:TMR1L register pair will increment on multiples      If control bit T1SYNC of the T1CON register is set, the
of FOSC as determined by the Timer1 prescaler.             external clock input is not synchronized. The timer
                                                           continues to increment asynchronous to the internal
6.2.2 EXTERNAL CLOCK SOURCE                                phase clocks. The timer will continue to run during
                                                           Sleep and can generate an interrupt on overflow,
When the external clock source is selected, the Timer1     which will wake-up the processor. However, special
module may work as a timer or a counter.                   precautions in software are needed to read/write the
                                                           timer (see Section 6.5.1 "Reading and Writing
When counting, Timer1 is incremented on the rising         Timer1 in Asynchronous Counter Mode").
edge of the external clock input T1CKI. In addition, the
Counter mode clock can be synchronized to the              Note:  When switching from synchronous to
microcontroller system clock or run asynchronously.               asynchronous operation, it is possible to
                                                                  skip an increment. When switching from
If an external clock oscillator is needed (and the                asynchronous to synchronous operation,
microcontroller is using the INTOSC without CLKOUT),              it is possible to produce a single spurious
Timer1 can use the LP oscillator as a clock source.               increment.

Note:  In Counter mode, a falling edge must be
       registered by the counter prior to the first
       incrementing rising edge.                           6.5.1  READING AND WRITING TIMER1 IN
                                                                  ASYNCHRONOUS COUNTER
6.3 Timer1 Prescaler                                              MODE

Timer1 has four prescaler options allowing 1, 2, 4 or 8    Reading TMR1H or TMR1L while the timer is running
divisions of the clock input. The T1CKPS bits of the       from an external asynchronous clock will ensure a valid
T1CON register control the prescale counter. The           read (taken care of in hardware). However, the user
prescale counter is not directly readable or writable;     should keep in mind that reading the 16-bit timer in two
however, the prescaler counter is cleared upon a write to  8-bit values itself, poses certain problems, since the
TMR1H or TMR1L.                                            timer may overflow between the reads.

6.4 Timer1 Oscillator                                      For writes, it is recommended that the user simply stop
                                                           the timer and write the desired values. A write
A low-power 32.768 kHz crystal oscillator is built-in      contention may occur by writing to the timer registers,
between pins T1OSI (input) and T1OSO (amplifier            while the register is incrementing. This may produce an
output). The oscillator is enabled by setting the          unpredictable value in the TMR1H:TTMR1L register
T1OSCEN control bit of the T1CON register. The             pair.
oscillator will continue to run during Sleep.
                                                           6.6 Timer1 Gate
The Timer1 oscillator is identical to the LP oscillator.
The user must provide a software time delay to ensure      Timer1 gate source is software configurable to be the
proper oscillator start-up.                                T1G pin or the output of Comparator C2. This allows the
                                                           device to directly time external events using T1G or
TRISC0 and TRISC1 bits are set when the Timer1             analog events using Comparator C2. See the
oscillator is enabled. RC0 and RC1 bits read as `0' and    CM2CON1 register (Register 8-3) for selecting the
TRISC0 and TRISC1 bits read as `1'.                        Timer1 gate source. This feature can simplify the
                                                           software for a Delta-Sigma A/D converter and many
Note:  The oscillator requires a start-up and              other applications. For more information on Delta-Sigma
       stabilization time before use. Thus,                A/D converters, see the Microchip web site
       T1OSCEN should be set and a suitable                (www.microchip.com).
       delay observed prior to enabling Timer1.

                                                           Note:  TMR1GE bit of the T1CON register must
                                                                  be set to use either T1G or C2OUT as the
                                                                  Timer1 gate source. See Register 8-3 for
                                                                  more information on selecting the Timer1
                                                                  gate source.

                                                           Timer1 gate can be inverted using the T1GINV bit of
                                                           the T1CON register, whether it originates from the T1G
                                                           pin or Comparator C2 output. This configures Timer1 to
                                                           measure either the active-high or active-low time
                                                           between events.

2007 Microchip Technology Inc.  Preliminary                               DS41291D-page 77
PIC16F882/883/884/886/887

6.7 Timer1 Interrupt                                         In Compare mode, an event is triggered when the value
                                                             CCPRxH:CCPRxL register pair matches the value in
The Timer1 register pair (TMR1H:TMR1L) increments            the TMR1H:TMR1L register pair. This event can be a
to FFFFh and rolls over to 0000h. When Timer1 rolls          Special Event Trigger.
over, the Timer1 interrupt flag bit of the PIR1 register is
set. To enable the interrupt on rollover, you must set       See Section 11.0 "Capture/Compare/PWM Modules
these bits:                                                  (CCP1 and CCP2)" for more information.

Timer1 interrupt enable bit of the PIE1 register           6.10 ECCP Special Event Trigger
PEIE bit of the INTCON register
GIE bit of the INTCON register                             If an ECCP is configured to trigger a special event, the
                                                             trigger will clear the TMR1H:TMR1L register pair. This
The interrupt is cleared by clearing the TMR1IF bit in       special event does not cause a Timer1 interrupt. The
the Interrupt Service Routine.                               ECCP module may still be configured to generate a
                                                             ECCP interrupt.
Note:  The TMR1H:TTMR1L register pair and the
       TMR1IF bit should be cleared before                   In this mode of operation, the CCPRxH:CCPRxL
       enabling interrupts.                                  register pair effectively becomes the period register for
                                                             Timer1.
6.8 Timer1 Operation During Sleep
                                                             Timer1 should be synchronized to the FOSC to utilize
Timer1 can only operate during Sleep when setup in           the Special Event Trigger. Asynchronous operation of
Asynchronous Counter mode. In this mode, an external         Timer1 can cause a Special Event Trigger to be
crystal or clock source can be used to increment the         missed.
counter. To set up the timer to wake the device:
                                                             In the event that a write to TMR1H or TMR1L coincides
TMR1ON bit of the T1CON register must be set               with a Special Event Trigger from the ECCP, the write
TMR1IE bit of the PIE1 register must be set                will take precedence.
PEIE bit of the INTCON register must be set
                                                             For more information, see Section 11.0
The device will wake-up on an overflow and execute           "Capture/Compare/PWM Modules (CCP1 and
the next instruction. If the GIE bit of the INTCON           CCP2)".
register is set, the device will call the Interrupt Service
Routine (0004h).                                             6.11 Comparator Synchronization

6.9 ECCP Capture/Compare Time Base                           The same clock used to increment Timer1 can also be
                                                             used to synchronize the comparator output. This
The ECCP module uses the TMR1H:TMR1L register                feature is enabled in the Comparator module.
pair as the time base when operating in Capture or
Compare mode.                                                When using the comparator for Timer1 gate, the
                                                             comparator output should be synchronized to Timer1.
In Capture mode, the value in the TMR1H:TMR1L                This ensures Timer1 does not miss an increment if the
register pair is copied into the CCPRxH:CCPRxL               comparator changes.
register pair on a configured event.
                                                             For more information, see Section 8.0 "Comparator
                                                             Module".

FIGURE 6-2:       TIMER1 INCREMENTING EDGE

T1CKI = 1
when TMR1
Enabled

T1CKI = 0
when TMR1
Enabled

   Note 1: Arrows indicate counter increments.
            2: In Counter mode, a falling edge must be registered by the counter prior to the first incrementing rising edge of
                  the clock.

DS41291D-page 78      Preliminary                            2007 Microchip Technology Inc.
                                           PIC16F882/883/884/886/887

6.12 Timer1 Control Register

The Timer1 Control register (T1CON), shown in
Register 6-1, is used to control Timer1 and select the
various features of the Timer1 module.

REGISTER 6-1: T1CON: TIMER1 CONTROL REGISTER

     R/W-0      R/W-0               R/W-0             R/W-0    R/W-0   R/W-0        R/W-0          R/W-0
  T1GINV(1)  TMR1GE(2)            T1CKPS1           T1CKPS0  T1OSCEN  T1SYNC       TMR1CS        TMR1ON
bit 7
                                                                                                          bit 0

Legend:                           W = Writable bit           U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared  x = Bit is unknown

bit 7        T1GINV: Timer1 Gate Invert bit(1)
bit 6
             1 = Timer1 gate is active-high (Timer1 counts when gate is high)
bit 5-4      0 = Timer1 gate is active-low (Timer1 counts when gate is low)
bit 3        TMR1GE: Timer1 Gate Enable bit(2)
bit 2        If TMR1ON = 0:
             This bit is ignored
bit 1        If TMR1ON = 1:
bit 0        1 = Timer1 is on if Timer1 gate is not active
             0 = Timer1 is on

             T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits
             11 = 1:8 Prescale Value
             10 = 1:4 Prescale Value
             01 = 1:2 Prescale Value
             00 = 1:1 Prescale Value

             T1OSCEN: LP Oscillator Enable Control bit
             1 = LP oscillator is enabled for Timer1 clock
             0 = LP oscillator is off

             T1SYNC: Timer1 External Clock Input Synchronization Control bit

             TMR1CS = 1:
             1 = Do not synchronize external clock input
             0 = Synchronize external clock input
             TMR1CS = 0:
             This bit is ignored. Timer1 uses the internal clock

             TMR1CS: Timer1 Clock Source Select bit
             1 = External clock from T1CKI pin (on the rising edge)
             0 = Internal clock (FOSC/4)

             TMR1ON: Timer1 On bit
             1 = Enables Timer1
             0 = Stops Timer1

Note 1: T1GINV bit inverts the Timer1 gate logic, regardless of source.

        2: TMR1GE bit must be set to use either T1G pin or C2OUT, as selected by the T1GSS bit of the CM2CON1
              register, as a Timer1 gate source.

2007 Microchip Technology Inc.                    Preliminary                                  DS41291D-page 79
PIC16F882/883/884/886/887

TABLE 6-1: SUMMARY OF REGISTERS ASSOCIATED WITH TIMER1

Name    Bit 7     Bit 6  Bit 5  Bit 4  Bit 3  Bit 2                                  Bit 1  Bit 0   Value on         Value on
                                                                                                   POR, BOR           all other
                                                                                                                       Resets
CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL    --     --                                     T1GSS C2SYNC 0000 --10
                                                                                                                     0000 --10
INTCON  GIE       PEIE   T0IE   INTE   RBIE   T0IF                                   INTF   RBIF   0000 000x         0000 000x
                                                                                                                     -000 0000
PIE1    --        ADIE   RCIE   TXIE   SSPIE CCP1IE TMR2IE TMR1IE -000 0000                                          -000 0000
                                                                                                                     uuuu uuuu
PIR1    --        ADIF   RCIF   TXIF   SSPIF CCP1IF TMR2IF TMR1IF -000 0000                                          uuuu uuuu

TMR1H Holding Register for the Most Significant Byte of the 16-bit TMR1 Register                   xxxx xxxx         uuuu uuuu

TMR1L   Holding Register for the Least Significant Byte of the 16-bit TMR1 Register                xxxx xxxx

T1CON   T1GINV TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000

Legend: x = unknown, u = unchanged, = unimplemented, read as `0'. Shaded cells are not used by the Timer1 module.

DS41291D-page 80                       Preliminary                                           2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

7.0 TIMER2 MODULE                                          The TMR2 and PR2 registers are both fully readable
                                                           and writable. On any Reset, the TMR2 register is set to
The Timer2 module is an eight-bit timer with the           00h and the PR2 register is set to FFh.
following features:
                                                           Timer2 is turned on by setting the TMR2ON bit in the
8-bit timer register (TMR2)                              T2CON register to a `1'. Timer2 is turned off by clearing
8-bit period register (PR2)                              the TMR2ON bit to a `0'.
Interrupt on TMR2 match with PR2
Software programmable prescaler (1:1, 1:4, 1:16)         The Timer2 prescaler is controlled by the T2CKPS bits
Software programmable postscaler (1:1 to 1:16)           in the T2CON register. The Timer2 postscaler is
                                                           controlled by the TOUTPS bits in the T2CON register.
See Figure 7-1 for a block diagram of Timer2.              The prescaler and postscaler counters are cleared
                                                           when:
7.1 Timer2 Operation
                                                            A write to TMR2 occurs.
The clock input to the Timer2 module is the system          A write to T2CON occurs.
instruction clock (FOSC/4). The clock is fed into the       Any device Reset occurs (Power-on Reset, MCLR
Timer2 prescaler, which has prescale options of 1:1,
1:4 or 1:16. The output of the prescaler is then used to      Reset, Watchdog Timer Reset, or Brown-out
increment the TMR2 register.                                  Reset).

The values of TMR2 and PR2 are constantly compared            Note: TMR2 is not cleared when T2CON is
to determine when they match. TMR2 will increment                         written.
from 00h until it matches the value in PR2. When a
match occurs, two things happen:

TMR2 is reset to 00h on the next increment cycle
The Timer2 postscaler is incremented

The match output of the Timer2/PR2 comparator is
then fed into the Timer2 postscaler. The postscaler has
postscale options of 1:1 to 1:16 inclusive. The output of
the Timer2 postscaler is used to set the TMR2IF
interrupt flag bit in the PIR1 register.

FIGURE 7-1:  TIMER2 BLOCK DIAGRAM

                                                                  TMR2        Sets Flag
                                                                  Output      bit TMR2IF

FOSC/4           Prescaler        TMR2                     Reset
              1:1, 1:4, 1:16
                                  Comparator                      Postscaler
                         2
                                                           EQ 1:1 to 1:16
             T2CKPS<1:0>

                                  PR2                             4

                                                           TOUTPS<3:0>

2007 Microchip Technology Inc.  Preliminary                                 DS41291D-page 81
PIC16F882/883/884/886/887

REGISTER 7-1: T2CON: TIMER2 CONTROL REGISTER

      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
bit 7
                                                                                                                              bit 0

Legend:                   W = Writable bit                        U = Unimplemented bit, read as `0'
R = Readable bit          `1' = Bit is set
-n = Value at POR                                                 `0' = Bit is cleared         x = Bit is unknown

bit 7           Unimplemented: Read as `0'
bit 6-3
                TOUTPS<3:0>: Timer2 Output Postscaler Select bits
bit 2
bit 1-0         0000 = 1:1 Postscaler
                0001 = 1:2 Postscaler
                0010 = 1:3 Postscaler
                0011 = 1:4 Postscaler
                0100 = 1:5 Postscaler
                0101 = 1:6 Postscaler
                0110 = 1:7 Postscaler
                0111 = 1:8 Postscaler
                1000 = 1:9 Postscaler
                1001 = 1:10 Postscaler
                1010 = 1:11 Postscaler
                1011 = 1:12 Postscaler
                1100 = 1:13 Postscaler
                1101 = 1:14 Postscaler
                1110 = 1:15 Postscaler
                1111 = 1:16 Postscaler

                TMR2ON: Timer2 On bit

                1 = Timer2 is on
                0 = Timer2 is off

                T2CKPS<1:0>: Timer2 Clock Prescale Select bits

                00 = Prescaler is 1
                01 = Prescaler is 4
                1x = Prescaler is 16

TABLE 7-1: SUMMARY OF ASSOCIATED TIMER2 REGISTERS

Name Bit 7         Bit 6  Bit 5           Bit 4          Bit 3    Bit 2    Bit 1        Bit 0   Value on             Value on
                                                                                               POR, BOR              all other
                                                                                                                      Resets

INTCON     GIE     PEIE   T0IE            INTE           RBIE     T0IF     INTF         RBIF 0000 000x               0000 000x
PIE1                                                                                                                  -000 0000
PIR1       --      ADIE   RCIE            TXIE           SSPIE    CCP1IE TMR2IE TMR1IE -000 0000                      -000 0000
PR2                                                                                                                  1111 1111
TMR2       --      ADIF   RCIF            TXIF           SSPIF    CCP1IF TMR2IF TMR1IF -000 0000                     0000 0000
T2CON                                                                                                                -000 0000
Legend:    Timer2 Module Period Register                                                       1111 1111

           Holding Register for the 8-bit TMR2 Register                                        0000 0000

           -- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000

           x = unknown, u = unchanged, -- = unimplemented read as `0'. Shaded cells are not used for Timer2 module.

DS41291D-page 82                                         Preliminary                     2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

8.0 COMPARATOR MODULE                                         8.1 Comparator Overview

Comparators are used to interface analog circuits to a        A single comparator is shown in Figure 8-1 along with
digital circuit by comparing two analog voltages and          the relationship between the analog input levels and
providing a digital indication of their relative magnitudes.  the digital output. When the analog voltage at VIN+ is
The comparators are very useful mixed signal building         less than the analog voltage at VIN-, the output of the
blocks because they provide analog functionality              comparator is a digital low level. When the analog
independent of the program execution. The analog              voltage at VIN+ is greater than the analog voltage at
Comparator module includes the following features:            VIN-, the output of the comparator is a digital high level.

Independent comparator control                              FIGURE 8-1:  SINGLE COMPARATOR
Programmable input selection
Comparator output is available internally/externally        VIN+         +
Programmable output polarity
Interrupt-on-change                                                        Output
Wake-up from Sleep
PWM shutdown                                                VIN-
Timer1 gate (count enable)
Output synchronization to Timer1 clock input                VIN-
SR Latch                                                    VIN+
Programmable and fixed voltage reference

   Note: Only Comparator C2 can be linked to
               Timer1.

                                                              Output

                                                              Note:   The black areas of the output of the
                                                                      comparator represents the uncertainty
                                                                      due to input offsets and response time.

2007 Microchip Technology Inc.  Preliminary                                 DS41291D-page 83
PIC16F882/883/884/886/887

FIGURE 8-2:        COMPARATOR C1 SIMPLIFIED BLOCK DIAGRAM

             C1CH<1:0>                                                                        C1POL                      To
                               2                                                  DQ                            Data Bus
                                                                          Q1 EN                      RD_CM1CON0
       C12IN0-                 0                                                                                Set C1IF
       C12IN1-                                                                         DQ
       C12IN2-                 1                           Q3*RD_CM1CON0 EN                              To PWM Logic
       C12IN3-                  MUX
                               2                                                         CL
                                                                              Reset
                               3

                                               C1ON(1)

                   C1R

        C1IN+           0            C1VIN- -
                         MUX
                        1            C1VIN+   C1                          C1OUT
                                             +
                   C1VREF                                                                            C1OUT (to SR Latch)
FixedRef
               0

              MUX                                 C1POL
             1
CVREF

C1RSEL

             Note 1:           When C1ON = 0, the C1 comparator will produce a `0' output to the XOR Gate.
                      2:       Q1 and Q3 are phases of the four-phase system clock (FOSC).
                      3:       Q1 is held high during Sleep mode.

FIGURE 8-3:        COMPARATOR C2 SIMPLIFIED BLOCK DIAGRAM

                                                                               C2POL                                     To
                                                                   DQ                                            Data Bus
                                                           Q1 EN
                                                                                                     RD_CM2CON0
             C2CH<1:0>
                                2                                                                                Set C2IF

C12IN0-                        0                  C2ON(1)                              DQ
C12IN1-                                                    Q3*RD_CM2CON0 EN
                               1     C2VIN-
C2IN2-                         MUX  C2VIN+ C2                                           CL
C2IN3-                        2                                              Reset

                               3                                            C2OUT

                                                                                   C2SYNC

                   C2R                         C2POL                             0                            SYNCC2OUT
                                                                                 MUX
                                                                          DQ     1                   To Timer1 Gate, SR Latch
                                                                                                     and other peripherals
       C2IN+            0
                         MUX
FixedRef                1                                  From Timer1
               0                                                   Clock
                   C2VREF
CVREF         MUX
             1

C2RSEL

                  Note 1:          When C2ON = 0, the C2 comparator will produce a `0' output to the XOR Gate.
                           2:      Q1 and Q3 are phases of the four-phase system clock (FOSC).
                           3:      Q1 is held high during Sleep mode.

DS41291D-page 84                                  Preliminary                                        2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

8.2 Comparator Control                                     Note 1: The CxOE bit overrides the PORT data
                                                                       latch. Setting the CxON has no impact on
Each comparator has a separate control and                             the port override.
configuration register: CM1CON0 for Comparator C1 and
CM2CON0 for Comparator C2. In addition, Comparator                2: The internal output of the comparator is
C2 has a second control register, CM2CON1, for                         latched with each instruction cycle.
controlling the interaction with Timer1 and simultaneous               Unless otherwise specified, external
reading of both comparator outputs.                                    outputs are not latched.

The CM1CON0 and CM2CON0 registers (see Registers           8.2.5 COMPARATOR OUTPUT POLARITY
8-1 and 8-2, respectively) contain the control and Status
bits for the following:                                    Inverting the output of the comparator is functionally
                                                           equivalent to swapping the comparator inputs. The
Enable                                                   polarity of the comparator output can be inverted by
Input selection                                          setting the CxPOL bit of the CMxCON0 register.
Reference selection                                      Clearing the CxPOL bit results in a non-inverted output.
Output selection
Output polarity                                          Table 8-1 shows the output state versus  input
                                                           conditions, including polarity control.
8.2.1 COMPARATOR ENABLE
                                                           TABLE 8-1: COMPARATOR OUTPUT
Setting the CxON bit of the CMxCON0 register enables                            STATE VS. INPUT
the comparator for operation. Clearing the CxON bit                             CONDITIONS
disables the comparator resulting in minimum current
consumption.                                               Input Condition CxPOL  CxOUT

8.2.2 COMPARATOR INPUT SELECTION                           CxVIN- > CxVIN+  0     0

The CxCH<1:0> bits of the CMxCON0 register direct          CxVIN- < CxVIN+  0     1
one of four analog input pins to the comparator
inverting input.                                           CxVIN- > CxVIN+  1     1

                                                           CxVIN- < CxVIN+  1     0

Note:  To use CxIN+ and CxIN- pins as analog               8.3 Comparator Response Time
       inputs, the appropriate bits must be set in
       the ANSEL and ANSELH registers and the              The comparator output is indeterminate for a period of
       corresponding TRIS bits must also be set            time after the change of an input source or the selection
       to disable the output drivers.                      of a new reference voltage. This period is referred to as
                                                           the response time. The response time of the
8.2.3  COMPARATOR REFERENCE                                comparator differs from the settling time of the voltage
       SELECTION                                           reference. Therefore, both of these times must be
                                                           considered when determining the total response time
Setting the CxR bit of the CMxCON0 register directs an     to a comparator input change. See the Comparator and
internal voltage reference or an analog input pin to the   Voltage Reference specifications in Section 17.0
non-inverting input of the comparator. See                 "Electrical Specifications" for more details.
Section 8.10 "Comparator Voltage Reference" for
more information on the internal Voltage Reference
module.

8.2.4  COMPARATOR OUTPUT
       SELECTION

The output of the comparator can be monitored by
reading either the CxOUT bit of the CMxCON0 register
or the MCxOUT bit of the CM2CON1 register. In order
to make the output available for an external connection,
the following conditions must be true:

CxOE bit of the CMxCON0 register must be set
Corresponding TRIS bit must be cleared
CxON bit of the CMxCON0 register must be set

2007 Microchip Technology Inc.                Preliminary                       DS41291D-page 85
PIC16F882/883/884/886/887

8.4 Comparator Interrupt Operation                               FIGURE 8-4:           COMPARATOR
                                                                                       INTERRUPT TIMING W/O
The comparator interrupt flag can be set whenever                                      CMxCON0 READ
there is a change in the output value of the comparator.
Changes are recognized by means of a mismatch                    Q1
circuit which consists of two latches and an exclusive-
or gate (see Figures 8-2 and 8-3). One latch is updated          Q3
with the comparator output level when the CMxCON0
register is read. This latch retains the value until the         CxIN+            TRT
next read of the CMxCON0 register or the occurrence
of a Reset. The other latch of the mismatch circuit is           CxOUT
updated on every Q1 system clock. A mismatch
condition will occur when a comparator output change             Set CxIF (edge)
is clocked through the second latch on the Q1 clock
cycle. At this point the two mismatch latches have               CxIF
opposite output levels which is detected by the
exclusive-or gate and fed to the interrupt circuitry. The                                          reset by software
mismatch condition persists until either the CMxCON0
register is read or the comparator output returns to the         FIGURE 8-5:           COMPARATOR
previous state.                                                                        INTERRUPT TIMING WITH
                                                                                       CMxCON0 READ
    Note 1: A write operation to the CMxCON0
                register will also clear the mismatch            Q1
                condition because all writes include a read
                operation at the beginning of the write          Q3
                cycle.
                                                                 CxIN+            TRT
           2: Comparator interrupts will operate correctly
                regardless of the state of CxOE.                 CxOUT

The comparator interrupt is set by the mismatch edge             Set CxIF (edge)
and not the mismatch level. This means that the inter-
rupt flag can be reset without the additional step of            CxIF                              reset by software
reading or writing the CMxCON0 register to clear the                      cleared by CMxCON0 read
mismatch registers. When the mismatch registers are
cleared, an interrupt will occur upon the comparator's           Note 1: If a change in the CMxCON0 register
return to the previous state, otherwise no interrupt will                    (CxOUT) should occur when a read oper-
be generated.                                                                ation is being executed (start of the Q2
                                                                             cycle), then the CxIF of the PIR2 register
Software will need to maintain information about the                         interrupt flag may not get set.
status of the comparator output, as read from the
CMxCON0 register, or CM2CON1 register, to determine                      2: When either comparator is first enabled,
the actual change that has occurred.                                         bias circuitry in the Comparator module
                                                                             may cause an invalid output from the
The CxIF bit of the PIR2 register is the comparator                          comparator until the bias circuitry is stable.
interrupt flag. This bit must be reset in software by                        Allow about 1 s for bias settling then clear
clearing it to `0'. Since it is also possible to write a `1' to              the mismatch condition and interrupt flags
this register, an interrupt can be generated.                                before enabling comparator interrupts.

The CxIE bit of the PIE2 register and the PEIE and GIE
bits of the INTCON register must all be set to enable
comparator interrupts. If any of these bits are cleared,
the interrupt is not enabled, although the CxIF bit of the
PIR2 register will still be set if an interrupt condition
occurs.

DS41291D-page 86  Preliminary                                                          2007 Microchip Technology Inc.
                         PIC16F882/883/884/886/887

8.5 Operation During Sleep

The comparator, if enabled before entering Sleep mode,
remains active during Sleep. The additional current
consumed by the comparator is shown separately in the
Section 17.0 "Electrical Specifications". If the
comparator is not used to wake the device, power
consumption can be minimized while in Sleep mode by
turning off the comparator. Each comparator is turned off
by clearing the CxON bit of the CMxCON0 register.

A change to the comparator output can wake-up the
device from Sleep. To enable the comparator to wake
the device from Sleep, the CxIE bit of the PIE2 register
and the PEIE bit of the INTCON register must be set.
The instruction following the Sleep instruction always
executes following a wake from Sleep. If the GIE bit of
the INTCON register is also set, the device will then
execute the Interrupt Service Routine.

8.6 Effects of a Reset

A device Reset forces the CMxCON0 and CM2CON1
registers to their Reset states. This forces both
comparators and the voltage references to their Off
states.

2007 Microchip Technology Inc.  Preliminary  DS41291D-page 87
PIC16F882/883/884/886/887

REGISTER 8-1: CM1CON0: COMPARATOR C1 CONTROL REGISTER 0

R/W-0              R-0   R/W-0             R/W-0  U-0   R/W-0           R/W-0         R/W-0
                                                         C1R            C1CH1         C1CH0
C1ON              C1OUT  C1OE              C1POL  --
                                                                                             bit 0
bit 7

Legend:                  W = Writable bit         U = Unimplemented bit, read as `0'
R = Readable bit         `1' = Bit is set
-n = Value at POR                                 `0' = Bit is cleared  x = Bit is unknown

bit 7    C1ON: Comparator C1 Enable bit
bit 6    1 = Comparator C1 is enabled
         0 = Comparator C1 is disabled
bit 5
bit 4    C1OUT: Comparator C1 Output bit
bit 3    If C1POL = 1 (inverted polarity):
bit 2    C1OUT = 0 when C1VIN+ > C1VIN-
bit 1-0  C1OUT = 1 when C1VIN+ < C1VIN-
         If C1POL = 0 (non-inverted polarity):
         C1OUT = 1 when C1VIN+ > C1VIN-
         C1OUT = 0 when C1VIN+ < C1VIN-

         C1OE: Comparator C1 Output Enable bit
         1 = C1OUT is present on the C1OUT pin(1)
         0 = C1OUT is internal only

         C1POL: Comparator C1 Output Polarity Select bit
         1 = C1OUT logic is inverted
         0 = C1OUT logic is not inverted

         Unimplemented: Read as `0'

         C1R: Comparator C1 Reference Select bit (non-inverting input)
         1 = C1VIN+ connects to C1VREF output
         0 = C1VIN+ connects to C1IN+ pin

         C1CH<1:0>: Comparator C1 Channel Select bit
         00 = C12IN0- pin of C1 connects to C1VIN-
         01 = C12IN1- pin of C1 connects to C1VIN-
         10 = C12IN2- pin of C1 connects to C1VIN-
         11 = C12IN3- pin of C1 connects to C1VIN-

Note 1: Comparator output requires the following three conditions: C1OE = 1, C1ON = 1 and corresponding port
              TRIS bit = 0.

DS41291D-page 88                           Preliminary                   2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

REGISTER 8-2: CM2CON0: COMPARATOR C2 CONTROL REGISTER 0

R/W-0              R-0            R/W-0             R/W-0  U-0   R/W-0           R/W-0         R/W-0
                                                                  C2R            C2CH1         C2CH0
C2ON     C2OUT                    C2OE              C2POL  --
                                                                                                      bit 0
bit 7

Legend:                           W = Writable bit         U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                          `0' = Bit is cleared  x = Bit is unknown

bit 7    C2ON: Comparator C2 Enable bit
bit 6    1 = Comparator C2 is enabled
         0 = Comparator C2 is disabled
bit 5
bit 4    C2OUT: Comparator C2 Output bit
bit 3    If C2POL = 1 (inverted polarity):
bit 2    C2OUT = 0 when C2VIN+ > C2VIN-
bit 1-0  C2OUT = 1 when C2VIN+ < C2VIN-
         If C2POL = 0 (non-inverted polarity):
         C2OUT = 1 when C2VIN+ > C2VIN-
         C2OUT = 0 when C2VIN+ < C2VIN-

         C2OE: Comparator C2 Output Enable bit
         1 = C2OUT is present on C2OUT pin(1)
         0 = C2OUT is internal only

         C2POL: Comparator C2 Output Polarity Select bit
         1 = C2OUT logic is inverted
         0 = C2OUT logic is not inverted

         Unimplemented: Read as `0'

         C2R: Comparator C2 Reference Select bits (non-inverting input)
         1 = C2VIN+ connects to C2VREF
         0 = C2VIN+ connects to C2IN+ pin

         C2CH<1:0>: Comparator C2 Channel Select bits
         00 = C12IN0- pin of C2 connects to C2VIN-
         01 = C12IN1- pin of C2 connects to C2VIN-
         10 = C12IN2- pin of C2 connects to C2VIN-
         11 = C12IN3- pin of C2 connects to C2VIN-

Note 1: Comparator output requires the following three conditions: C2OE = 1, C2ON = 1 and corresponding port
              TRIS bit = 0.

2007 Microchip Technology Inc.                    Preliminary                                DS41291D-page 89
PIC16F882/883/884/886/887

8.7 Analog Input Connection                                Note 1: When reading a PORT register, all pins
         Considerations                                                configured as analog inputs will read as a
                                                                       `0'. Pins configured as digital inputs will
A simplified circuit for an analog input is shown in                   convert as an analog input, according to
Figure 8-6. Since the analog input pins share their con-               the input specification.
nection with a digital input, they have reverse biased
ESD protection diodes to VDD and VSS. The analog                  2: Analog levels on any pin defined as a
input, therefore, must be between VSS and VDD. If the                  digital input, may cause the input buffer to
input voltage deviates from this range by more than                    consume more current than is specified.
0.6V in either direction, one of the diodes is forward
biased and a latch-up may occur.

A maximum source impedance of 10 k is recommended
for the analog sources. Also, any external component
connected to an analog input pin, such as a capacitor or
a Zener diode, should have very little leakage current to
minimize inaccuracies introduced.

FIGURE 8-6:       ANALOG INPUT MODEL
                                                VDD

Rs < 10K                                 VT  0.6V                   RIC

                       AIN                                 ILEAKAGE               To ADC Input
                                                           500 nA
VA                          CPIN         VT  0.6V
                            5 pF

                                                           Vss

Legend:           CPIN = Input Capacitance

                  ILEAKAGE = Leakage Current at the pin due to various junctions

                  RIC  = Interconnect Resistance

                  RS   = Source Impedance

                  VA   = Analog Voltage

                  VT   = Threshold Voltage

DS41291D-page 90                            Preliminary                            2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

8.8 Additional Comparator Features                         8.8.2  SYNCHRONIZING COMPARATOR
                                                                  C2 OUTPUT TO TIMER1
There are three additional comparator features:
                                                           The Comparator C2 output can be synchronized with
Timer1 count enable (gate)                               Timer1 by setting the C2SYNC bit of the CM2CON1
Synchronizing output with Timer1                         register. When enabled, the C2 output is latched on the
Simultaneous read of comparator outputs                  falling edge of the Timer1 clock source. If a prescaler is
                                                           used with Timer1, the comparator output is latched after
8.8.1 COMPARATOR C2 GATING TIMER1                          the prescaling function. To prevent a race condition, the
                                                           comparator output is latched on the falling edge of the
This feature can be used to time the duration or interval  Timer1 clock source and Timer1 increments on the
of analog events. Clearing the T1GSS bit of the            rising edge of its clock source. See the Comparator
CM2CON1 register will enable Timer1 to increment           Block Diagram (Figures 8-2 and 8-3) and the Timer1
based on the output of Comparator C2. This requires        Block Diagram (Figure 6-1) for more information.
that Timer1 is on and gating is enabled. See
Section 6.0 "Timer1 Module with Gate Control" for          8.8.3  SIMULTANEOUS COMPARATOR
details.                                                          OUTPUT READ

It is recommended to synchronize the comparator with       The MC1OUT and MC2OUT bits of the CM2CON1
Timer1 by setting the C2SYNC bit when the comparator       register are mirror copies of both comparator outputs.
is used as the Timer1 gate source. This ensures Timer1     The ability to read both outputs simultaneously from a
does not miss an increment if the comparator changes       single register eliminates the timing skew of reading
during an increment.                                       separate registers.

                                                           Note 1: Obtaining the status of C1OUT or C2OUT
                                                                       by reading CM2CON1 does not affect the
                                                                       comparator interrupt mismatch registers.

REGISTER 8-3: CM2CON1: COMPARATOR C2 CONTROL REGISTER 1

       R-0         R-0            R/W-0             R/W-0  U-0                   U-0  R/W-1     R/W-0
                                                                                      T1GSS    C2SYNC
MC1OUT MC2OUT C1RSEL C2RSEL                                --                    --
                                                                                                        bit 0
bit 7

Legend:                           W = Writable bit         U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                          `0' = Bit is cleared       x = Bit is unknown

bit 7       MC1OUT: Mirror Copy of C1OUT bit
bit 6
bit 5       MC2OUT: Mirror Copy of C2OUT bit

bit 4       C1RSEL: Comparator C1 Reference Select bit
            1 = CVREF routed to C1VREF input of Comparator C1
bit 3-2     0 = Absolute voltage reference (0.6) routed to C1VREF input of Comparator C1 (or 1.2V precision
bit 1
                  reference on parts so equipped)
bit 0
            C2RSEL: Comparator C2 Reference Select bit
            1 = CVREF routed to C2VREF input of Comparator C2
            0 = Absolute voltage reference (0.6) routed to C2VREF input of Comparator C2 (or 1.2V precision

                  reference on parts so equipped)

            Unimplemented: Read as `0'

            T1GSS: Timer1 Gate Source Select bit
            1 = Timer1 gate source is T1G
            0 = Timer1 gate source is SYNCC2OUT.

            C2SYNC: Comparator C2 Output Synchronization bit
            1 = Output is synchronous to falling edge of Timer1 clock
            0 = Output is asynchronous

2007 Microchip Technology Inc.                    Preliminary                                DS41291D-page 91
PIC16F882/883/884/886/887

8.9 Comparator SR Latch                                         8.9.2 LATCH OUTPUT

The SR Latch module provides additional control of the          The SR<1:0> bits of the SRCON register control the
comparator outputs. The module consists of a single             latch output multiplexers and determine four possible
SR latch and output multiplexers. The SR latch can be           output configurations. In these four configurations, the
set, reset or toggled by the comparator outputs. The SR         CxOUT I/O port logic is connected to:
latch may also be set or reset, independent of
comparator output, by control bits in the SRCON control          C1OUT and C2OUT
register. The SR latch output multiplexers select                C1OUT and SR latch Q
whether the latch outputs or the comparator outputs are          C2OUT and SR latch Q
directed to the I/O port logic for eventual output to a pin.    SR latch Q and Q

8.9.1 LATCH OPERATION                                           After any Reset, the default output configuration is the
                                                                unlatched C1OUT and C2OUT mode. This maintains
The latch is a Set-Reset latch that does not depend on a        compatibility with devices that do not have the SR latch
clock source. Each of the Set and Reset inputs are              feature.
active-high. Each latch input is connected to a
comparator output and a software controlled pulse               The applicable TRIS bits of the corresponding ports
generator. The latch can be set by C1OUT or the PULSS           must be cleared to enable the port pin output drivers.
bit of the SRCON register. The latch can be reset by            Additionally, the CxOE comparator output enable bits of
C2OUT or the PULSR bit of the SRCON register. The               the CMxCON0 registers must be set in order to make the
latch is reset-dominant, therefore, if both Set and Reset       comparator or latch outputs available on the output pins.
inputs are high the latch will go to the Reset state. Both      The latch configuration enable states are completely
the PULSS and PULSR bits are self resetting which               independent of the enable states for the comparators.
means that a single write to either of the bits is all that is
necessary to complete a latch set or Reset operation.

FIGURE 8-7:       SR LATCH SIMPLIFIED BLOCK DIAGRAM

PULSS             Pulse                                         SR0                            C1OE
                  Gen(2)                                                                               C1OUT pin(3)
                                                                              0
C1OUT (from comparator)      SQ                                                MUX
                             SR                                               1
                             Latch(1)
C1SEN                        RQ

SYNCC2OUT (from comparator)                                                   1                C2OE
C2REN                                                                          MUX                      C2OUT pin(3)
                                                                              0
PULSR             Pulse
                  Gen(2)                                        SR1

Note 1:      If R = 1 and S = 1 simultaneously, Q = 0, Q = 1
         2:  Pulse generator causes a 1/2 Q-state (1 Tosc) pulse width.
         3:  Output shown for reference only. See I/O port pin block diagram for more detail.

DS41291D-page 92             Preliminary                                                       2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

REGISTER 8-4: SRCON: SR LATCH CONTROL REGISTER

     R/W-0         R/W-0          R/W-0             R/W-0   R/S-0   R/S-0         U-0              R/W-0
    SR1(2)         SR0(2)         C1SEN             C2REN  PULSS   PULSR
bit 7                                                                             --               FVREN

                                                                                                      bit 0

Legend:                                                    S = Bit is set only -
R = Readable bit
-n = Value at POR                 W = Writable bit         U = Unimplemented bit, read as `0'
                                  `1' = Bit is set
                                                           `0' = Bit is cleared   x = Bit is unknown

bit 7       SR1: SR Latch Configuration bit(2)

            1 = C2OUT pin is the latch Q output

            0 = C2OUT pin is the C2 comparator output

bit 6       SR0: SR Latch Configuration bits(2)

            1 = C1OUT pin is the latch Q output
            0 = C1OUT pin is the C1 Comparator output

bit 5       C1SEN: C1 Set Enable bit

            1 = C1 comparator output sets SR latch
            0 = C1 comparator output has no effect on SR latch

bit 4       C2REN: C2 Reset Enable bit

            1 = C2 comparator output resets SR latch
            0 = C2 comparator output has no effect on SR latch

bit 3       PULSS: Pulse the SET Input of the SR Latch bit

            1 = Triggers pulse generator to set SR latch. Bit is immediately reset by hardware.

            0 = Does not trigger pulse generator

bit 2       PULSR: Pulse the Reset Input of the SR Latch bit

            1 = Triggers pulse generator to reset SR latch. Bit is immediately reset by hardware.
            0 = Does not trigger pulse generator

bit 1       Unimplemented: Read as `0'

bit 0       FVREN: Fixed Voltage Reference Enable bit

            1 = 0.6V Reference FROM INTOSC LDO is enabled
            0 = 0.6V Reference FROM INTOSC LDO is disabled

Note 1:     The CxOUT bit in the CMxCON0 register will always reflect the actual comparator output (not the level on
        2:  the pin), regardless of the SR latch operation.

            To enable an SR Latch output to the pin, the appropriate CxOE and TRIS bits must be properly
            configured.

2007 Microchip Technology Inc.                    Preliminary                                  DS41291D-page 93
PIC16F882/883/884/886/887

8.10 Comparator Voltage Reference                        8.10.3 OUTPUT CLAMPED TO VSS

The Comparator Voltage Reference module provides         The CVREF output voltage can be set to Vss with no
an internally generated voltage reference for the com-   power consumption by configuring VRCON as follows:
parators. The following features are available:
Independent from Comparator operation                   VREN = 0
Two 16-level voltage ranges                            VRR = 1
Output clamped to VSS                                  VR<3:0> = 0000
Ratiometric with VDD
Fixed Reference (0.6V)                                 This allows the comparator to detect a zero-crossing
The VRCON register (Register 8-5) controls the           while not consuming additional CVREF module current.
Voltage Reference module shown in Figure 8-8.
The voltage source is selectable through both ends of    8.10.4 OUTPUT RATIOMETRIC TO VDD
the 16 connection resistor ladder network. Bit VRSS of
the VRCON register selects either the internal or        The comparator voltage reference is VDD derived and
external voltage source.                                 therefore, the CVREF output changes with fluctuations in
The PIC16F883/884/886/887 allows the CVREF signal        VDD. The tested absolute accuracy of the Comparator
to be output to the RA2 pin of PORTA under certain       Voltage Reference can be found in Section 17.0
configurations only. For more details, see Figure 8-9.   "Electrical Specifications".

8.10.1 INDEPENDENT OPERATION                             8.10.5 FIXED VOLTAGE REFERENCE
The comparator voltage reference is independent of
the comparator configuration. Setting the VREN bit of    The fixed voltage reference is independent of VDD, with
the VRCON register will enable the voltage reference.    a nominal output voltage of 0.6V. This reference can be
                                                         enabled by setting the FVREN bit of the SRCON
8.10.2 OUTPUT VOLTAGE SELECTION                          register to `1'. This reference is always enabled when
The CVREF voltage reference has 2 ranges with 16         the HFINTOSC oscillator is active.
voltage levels in each range. Range selection is
controlled by the VRR bit of the VRCON register. The     8.10.6 FIXED VOLTAGE REFERENCE
16 levels are set with the VR<3:0> bits of the VRCON                   STABILIZATION PERIOD
register.
The CVREF output voltage is determined by the following  When the fixed Voltage Reference module is enabled,
equations:                                               it will require some time for the reference and its
                                                         amplifier circuits to stabilize. The user program must
EQUATION 8-1: CVREF OUTPUT VOLTAGE                       include a small delay routine to allow the module to
                                                         settle. See the electrical specifications section for the
  VRR = 1 (low range):                                   minimum delay requirement.
    CVREF = (VR<3:0>/24) VLADDER
                                                         8.10.7 VOLTAGE REFERENCE
VRR = 0 (high range):                                                 SELECTION
     CVREF = (VLADDER/4) + (VR<3:0> VLADDER/32)
                                                         Multiplexers on the output of the Voltage Reference
VLADDER = VDD or ([VREF+] - [VREF-]) or VREF+           module enable selection of either the CVREF or fixed
                                                         voltage reference for use by the comparators.
The full range of VSS to VDD cannot be realized due to
the construction of the module. See Figure 8-8.          Setting the C1VREN bit of the VRCON register enables
                                                         current to flow in the CVREF voltage divider and selects
                                                         the CVREF voltage for use by C1. Clearing the C1VREN
                                                         bit selects the fixed voltage for use by C1.

                                                         Setting the C2VREN bit of the VRCON register enables
                                                         current to flow in the CVREF voltage divider and selects
                                                         the CVREF voltage for use by C2. Clearing the C2VREN
                                                         bit selects the fixed voltage for use by C2.

                                                         When both the C1VREN and C2VREN bits are cleared,
                                                         current flow in the CVREF voltage divider is disabled
                                                         minimizing the power drain of the voltage reference
                                                         peripheral.

DS41291D-page 94  Preliminary                            2007 Microchip Technology Inc.
                                                PIC16F882/883/884/886/887

FIGURE 8-8:      COMPARATOR VOLTAGE REFERENCE BLOCK DIAGRAM

                                                             16 Stages

        VREF+                     8R     R      R                        R    R
         VRSS = 1
         VRSS = 0                                                                             8R             VRR
  VDD
                                         Analog                                                         VREF-
        CVREF                             MUX                                                     VRSS = 1
    To Comparators                                                                                VRSS = 0
    and ADC Module                       15
                                                                                    FVREN
                VROE                      0
CVREF                                            VR<3:0>(1)                         Sleep
                                                                                    HFINTOSC enable
             FixedRef                        4
         To Comparators               VREN
         and ADC Module               C1RSEL
                                      C2RSEL

                                         0.6V          EN
                                                Fixed Voltage

                                                  Reference

Note 1: Care should be taken when using VREF- with Comparator.

FIGURE 8-9:      COMPARATOR AND ADC VOLTAGE REFERENCE BLOCK DIAGRAM

          VREF+

                 AVDD                 1                                 AVDD     1

                                      0                                          0
                                          VRSS                                         VCFG0

                                         CVREF

                         VROE                                Comparator                              ADC
                         VCFG1                                 Voltage                             Voltage
                                                                                                  Reference
                                                              Reference

                         VRSS

                                      0                                       AVSS            0
                                                                                              1
                         AVSS         1
                                                                                                   VCFG1

VREF-

2007 Microchip Technology Inc.                Preliminary                                       DS41291D-page 95
PIC16F882/883/884/886/887

TABLE 8-2: COMPARATOR AND ADC VOLTAGE REFERENCE PRIORITY

RA3    RA2            Comp.          Comp.            ADC           ADC       CFG1  CFG0  VRSS  VROE
                  Reference (+)  Reference (-)  Reference (+)  Reference (-)
                                                                                       0     0     0
  I/O    I/O      AVDD           AVSS           AVDD           AVSS           0        0     0     1
  I/O  CVREF      AVDD           AVSS           AVDD                                   0     1     0
VREF+  VREF-      VREF+          VREF-          AVDD           AVSS           0        0     1     1
VREF+  CVREF      VREF+          AVSS           AVDD                                   1     0     0
VREF+             AVDD           AVSS           VREF+          AVSS           0        1     0     1
VREF+    I/O      AVDD           AVSS           VREF+                                  1     1     0
VREF+  CVREF      VREF+          VREF-          VREF+          AVSS           0        1     1     1
VREF+  VREF-      VREF+          AVSS           VREF+                                  0     0     0
  I/O  CVREF      AVDD           AVSS           AVDD           AVSS           0        0     0     1
  I/O  VREF-      AVDD           AVSS           AVDD                                   0     1     0
VREF+  VREF-      VREF+          VREF-          AVDD           AVSS           0        0     1     1
VREF+  VREF-      VREF+          VREF-          AVDD                                   1     0     0
VREF+  VREF-      AVDD           AVSS           VREF+          AVSS           0        1     0     1
VREF+  VREF-      AVDD           AVSS           VREF+                                  1     1     0
VREF+  VREF-      VREF+          VREF-          VREF+          AVSS           0        1     1     1
VREF+  VREF-      VREF+          VREF-          VREF+
       VREF-                                                   VREF-          1

                                                               VREF-          1

                                                               VREF-          1

                                                               VREF-          1

                                                               VREF-          1

                                                               VREF-          1

                                                               VREF-          1

                                                               VREF-          1

DS41291D-page 96                                Preliminary                   2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

REGISTER 8-5: VRCON: VOLTAGE REFERENCE CONTROL REGISTER

     R/W-0         R/W-0          R/W-0             R/W-0  R/W-0         R/W-0          R/W-0                  R/W-0
     VREN          VROE            VRR              VRSS    VR3           VR2            VR1                    VR0
bit 7
                                                                                                                      bit 0

Legend:                           W = Writable bit         U = Unimplemented bit, read as `0'
R = Readable bit                  `1' = Bit is set
-n = Value at POR                                          `0' = Bit is cleared         x = Bit is unknown

bit 7       VREN: Comparator C1 Voltage Reference Enable bit
bit 6       1 = CVREF circuit powered on
bit 5       0 = CVREF circuit powered down
bit 4
bit 3-0     VROE: Comparator C2 Voltage Reference Enable bit
            1 = CVREF voltage level is also output on the RA2/AN2/VREF-/CVREF/C2IN+ pin
            0 = CVREF voltage is disconnected from the RA2/AN2/VREF-/CVREF/C2IN+ pin

            VRR: CVREF Range Selection bit
            1 = Low range
            0 = High range

            VRSS: Comparator VREF Range Selection bit
            1 = Comparator Reference Source, CVRSRC = (VREF+) - (VREF-)
            0 = Comparator Reference Source, CVRSRC = VDD - VSS

            VR<3:0>: CVREF Value Selection 0  VR<3:0>  15
            When VRR = 1: CVREF = (VR<3:0>/24) * VDD
            When VRR = 0: CVREF = VDD/4 + (VR<3:0>/32) * VDD

TABLE 8-3: SUMMARY OF REGISTERS ASSOCIATED WITH THE COMPARATOR AND VOLTAGE
                     REFERENCE MODULES

Name        Bit 7  Bit 6          Bit 5  Bit 4      Bit 3  Bit 2  Bit 1          Bit 0   Value on              Value on
                                                                                        POR, BOR               all other
                                                                                                                Resets

ANSEL       ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0 1111 1111 1111 1111

ANSELH      --     --             ANS13 ANS12 ANS11 ANS10 ANS9 ANS8 --11 1111 --11 1111

CM1CON0 C1ON C1OUT C1OE C1POL                       --     C1R C1CH1 C1CH0 0000 -000 0000 -000

CM2CON0 C2ON C2OUT C2OE C2POL                       --     C2R C2CH1 C2CH0 0000 -000 0000 -000

CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL --                     --     T1GSS C2SYNC 0000 --10 0000 --10

INTCON      GIE    PEIE           T0IE   INTE       RBIE   T0IF   INTF           RBIF 0000 000x 0000 000x

PIE2        OSFIE C2IE            C1IE   EEIE BCLIE ULPWUIE --                   CCP2IE 0000 00-0 0000 00-0

PIR2        OSFIF C2IF            C1IF   EEIF BCLIF ULPWUIF --                   CCP2IF 0000 00-0 0000 00-0

PORTA       RA7    RA6            RA5    RA4        RA3    RA2    RA1            RA0 xxxx xxxx uuuu uuuu

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

SRCON       SR1    SR0 C1SEN C2SEN PULSS PULSR                    --             FVREN 0000 00-0 0000 00-0

TRISA       TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 1111 1111 1111 1111

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

VRCON       VREN VROE VRR VRSS VR3                         VR2    VR1            VR0 0000 0000 0000 0000

Legend: x = unknown, u = unchanged, = unimplemented, read as `0'. Shaded cells are not used for comparator.

2007 Microchip Technology Inc.                    Preliminary                                DS41291D-page 97
PIC16F882/883/884/886/887

NOTES:

DS41291D-page 98  Preliminary   2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

9.0 ANALOG-TO-DIGITAL
         CONVERTER (ADC) MODULE

The Analog-to-Digital Converter (ADC) allows
conversion of an analog input signal to a 10-bit binary
representation of that signal. This device uses analog
inputs, which are multiplexed into a single sample and
hold circuit. The output of the sample and hold is
connected to the input of the converter. The converter
generates a 10-bit binary result via successive
approximation and stores the conversion result into the
ADC result registers (ADRESL and ADRESH).

The ADC voltage reference is software selectable to
either VDD or a voltage applied to the external reference
pins.

The ADC can generate an interrupt upon completion of
a conversion. This interrupt can be used to wake-up the
device from Sleep.

Figure 9-1 shows the block diagram of the ADC.

FIGURE 9-1:  ADC BLOCK DIAGRAM

             VREF-                       AVSS VCFG1 = 0
                                                    VCFG1 = 1

                                            AVDD
                                                    VCFG0 = 0

                                  VREF+  VCFG0 = 1

       AN0                        0000
       AN1
       AN2                        0001
       AN3
       AN4                        0010
       AN5
       AN6                        0011
       AN7
       AN8                        0100
       AN9
     AN10                         0101
     AN11
     AN12                         0110
     AN13
    CVREF                         0111                         ADC
Fixed Ref
                                  1000 GO/DONE                            10
                                  1001

                                  1010                              ADFM  0 = Left Justify
                                                                          1 = Right Justify
                                  1011   ADON
                                  1100             VSS                                10
                                  1101
                                                                          ADRESH ADRESL

                                  1110

                                  1111

             CHS<3:0>

2007 Microchip Technology Inc.         Preliminary                                         DS41291D-page 99
PIC16F882/883/884/886/887

9.1 ADC Configuration                                      9.1.3 ADC VOLTAGE REFERENCE

When configuring and using the ADC the following           The VCFG bits of the ADCON0 register provide
functions must be considered:                              independent control of the positive and negative
                                                           voltage references. The positive voltage reference can
Port configuration                                       be either VDD or an external voltage source. Likewise,
Channel selection                                        the negative voltage reference can be either VSS or an
ADC voltage reference selection                          external voltage source.
ADC conversion clock source
Interrupt control                                        9.1.4  CONVERSION CLOCK
Results formatting
                                                           The source of the conversion clock is software select-
9.1.1 PORT CONFIGURATION                                   able via the ADCS bits of the ADCON0 register. There
                                                           are four possible clock options:

The ADC can be used to convert both analog and digital      FOSC/2
signals. When converting analog signals, the I/O pin       FOSC/8
should be configured for analog by setting the associated   FOSC/32
TRIS and ANSEL bits. See the corresponding Port             FRC (dedicated internal oscillator)
section for more information.
                                                           The time to complete one bit conversion is defined as
Note:  Analog voltages on any pin that is defined          TAD. One full 10-bit conversion requires 11 TAD periods
       as a digital input may cause the input              as shown in Figure 9-3.
       buffer to conduct excess current.
                                                           For correct conversion, the appropriate TAD specification
9.1.2 CHANNEL SELECTION                                    must be met. See A/D conversion requirements in
                                                           Section 17.0 "Electrical Specifications" for more
The CHS bits of the ADCON0 register determine which        information. Table 9-1 gives examples of appropriate
channel is connected to the sample and hold circuit.       ADC clock selections.

When changing channels, a delay is required before         Note:  Unless using the FRC, any changes in the
starting the next conversion. Refer to Section 9.2                system clock frequency will change the
"ADC Operation" for more information.                             ADC clock frequency, which may
                                                                  adversely affect the ADC result.

DS41291D-page 100         Preliminary                              2007 Microchip Technology Inc.
                                       PIC16F882/883/884/886/887

TABLE 9-1: ADC CLOCK PERIOD (TAD) VS. DEVICE OPERATING FREQUENCIES (VDD > 3.0V)

       ADC Clock Period (TAD)                                Device Frequency (FOSC)

ADC Clock Source  ADCS<2:0>            20 MHz                8 MHz       4 MHz         1 MHz

FOSC/2                            000  100 ns(2)             250 ns(2)   500 ns(2)     2.0 s
FOSC/8
FOSC/32                           001  400 ns(2)             1.0 s(2)    2.0 s         8.0 s(3)

  FRC                             010  1.6 s                 4.0 s       8.0 s(3)      32.0 s(3)

                                  x11  2-6 s(1,4)            2-6 s(1,4)  2-6 s(1,4)    2-6 s(1,4)

Legend: Shaded cells are outside of recommended range.
Note 1: The FRC source has a typical TAD time of 4 s for VDD > 3.0V.

2: These values violate the minimum required TAD time.

3: For faster conversion times, the selection of another clock source is recommended.

4: When the device frequency is greater than 1 MHz, the FRC clock source is only recommended if the
      conversion will be performed during Sleep.

FIGURE 9-2:       ANALOG-TO-DIGITAL CONVERSION TAD CYCLES

       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
           Holding Capacitor is Disconnected from Analog Input (typically 100 ns)

       Set GO/DONE bit                                       ADRESH and ADRESL registers are loaded,
                                                             GO bit is cleared,
                                                             ADIF bit is set,
                                                             Holding capacitor is connected to analog input

9.1.5 INTERRUPTS

The ADC module allows for the ability to generate an
interrupt upon completion of an Analog-to-Digital
conversion. The ADC interrupt flag is the ADIF bit in the
PIR1 register. The ADC interrupt enable is the ADIE bit
in the PIE1 register. The ADIF bit must be cleared in
software.

Note:  The ADIF bit is set at the completion of
       every conversion, regardless of whether
       or not the ADC interrupt is enabled.

This interrupt can be generated while the device is
operating or while in Sleep. If the device is in Sleep, the
interrupt will wake-up the device. Upon waking from
Sleep, the next instruction following the SLEEP
instruction is always executed. If the user is attempting
to wake-up from Sleep and resume in-line code
execution, the global interrupt must be disabled. If the
global interrupt is enabled, execution will switch to the
Interrupt Service Routine.

Please see Section 14.3 "Interrupts" for more
information.

2007 Microchip Technology Inc.       Preliminary                                     DS41291D-page 101
PIC16F882/883/884/886/887

9.1.6 RESULT FORMATTING

The 10-bit A/D conversion result can be supplied in two
formats, left justified or right justified. The ADFM bit of
the ADCON0 register controls the output format.

Figure 9-3 shows the two output formats.

FIGURE 9-3:        10-BIT A/D CONVERSION RESULT FORMAT

                          ADRESH                                                     ADRESL

(ADFM = 0) MSB                                                                  LSB

                   bit 7                                          bit 0  bit 7               bit 0

                          10-bit A/D Result                                          Unimplemented: Read as `0'

(ADFM = 1)                                                   MSB                             LSB

                   bit 7                                          bit 0  bit 7               bit 0

                   Unimplemented: Read as `0'                                        10-bit A/D Result

9.2 ADC Operation                                                 9.2.4 ADC OPERATION DURING SLEEP

9.2.1 STARTING A CONVERSION                                       The ADC module can operate during Sleep. This
                                                                  requires the ADC clock source to be set to the FRC
To enable the ADC module, the ADON bit of the                     option. When the FRC clock source is selected, the
ADCON0 register must be set to a `1'. Setting the                 ADC waits one additional instruction before starting the
GO/DONE bit of the ADCON0 register to a `1' will start            conversion. This allows the SLEEP instruction to be
the Analog-to-Digital conversion.                                 executed, which can reduce system noise during the
                                                                  conversion. If the ADC interrupt is enabled, the device
Note:  The GO/DONE bit should not be set in the                   will wake-up from Sleep when the conversion
       same instruction that turns on the ADC.                    completes. If the ADC interrupt is disabled, the ADC
       Refer to Section 9.2.6 "A/D Conversion                     module is turned off after the conversion completes,
       Procedure".                                                although the ADON bit remains set.

9.2.2 COMPLETION OF A CONVERSION                                  When the ADC clock source is something other than
                                                                  FRC, a SLEEP instruction causes the present conver-
When the conversion is complete, the ADC module will:             sion to be aborted and the ADC module is turned off,
                                                                  although the ADON bit remains set.
Clear the GO/DONE bit
Set the ADIF flag bit                                           9.2.5 SPECIAL EVENT TRIGGER
Update the ADRESH:ADRESL registers with new
                                                                  The ECCP Special Event Trigger allows periodic ADC
   conversion result                                              measurements without software intervention. When
                                                                  this trigger occurs, the GO/DONE bit is set by hardware
9.2.3 TERMINATING A CONVERSION                                    and the Timer1 counter resets to zero.

If a conversion must be terminated before completion,             Using the Special Event Trigger does not assure proper
the GO/DONE bit can be cleared in software. The                   ADC timing. It is the user's responsibility to ensure that
ADRESH:ADRESL registers will not be updated with                  the ADC timing requirements are met.
the partially complete Analog-to-Digital conversion
sample. Instead, the ADRESH:ADRESL register pair                  See Section 11.0 "Capture/Compare/PWM Modules
will retain the value of the previous conversion. Addi-           (CCP1 and CCP2)" for more information.
tionally, a 2 TAD delay is required before another acqui-
sition can be initiated. Following this delay, an input
acquisition is automatically started on the selected
channel.

Note:  A device Reset forces all registers to their
       Reset state. Thus, the ADC module is
       turned off and any pending conversion is
       terminated.

DS41291D-page 102                              Preliminary                            2007 Microchip Technology Inc.
                                  PIC16F882/883/884/886/887

9.2.6 A/D CONVERSION PROCEDURE                            EXAMPLE 9-1: A/D CONVERSION

This is an example procedure for using the ADC to         ;This code block configures the ADC
perform an Analog-to-Digital conversion:
                                                          ;for polling, Vdd and Vss as reference, Frc
1. Configure Port:
       Disable pin output driver (See TRIS register)     clock and AN0 input.
       Configure pin as analog
                                                          ;
2. Configure the ADC module:
       Select ADC conversion clock                       ;Conversion start & polling for completion
       Configure voltage reference
       Select ADC input channel                          ; are included.
       Select result format
       Turn on ADC module                                ;

3. Configure ADC interrupt (optional):                    BANKSEL ADCON1        ;
       Clear ADC interrupt flag
       Enable ADC interrupt                              MOVLW  B'10000000' ;right justify
       Enable peripheral interrupt
       Enable global interrupt(1)                        MOVWF  ADCON1         ;Vdd and Vss as Vref

4. Wait the required acquisition time(2).                 BANKSEL TRISA         ;
5. Start conversion by setting the GO/DONE bit.
6. Wait for ADC conversion to complete by one of          BSF    TRISA,0        ;Set RA0 to input

      the following:                                      BANKSEL ANSEL         ;
       Polling the GO/DONE bit
       Waiting for the ADC interrupt (interrupts         BSF    ANSEL,0        ;Set RA0 to analog

         enabled)                                         BANKSEL ADCON0        ;
7. Read ADC Result
8. Clear the ADC interrupt flag (required if interrupt    MOVLW  B'11000001' ;ADC Frc clock,

      is enabled).                                        MOVWF  ADCON0         ;AN0, On

    Note 1: The global interrupt can be disabled if the   CALL   SampleTime ;Acquisiton delay
                user is attempting to wake-up from Sleep
                and resume in-line code execution.        BSF    ADCON0,GO ;Start conversion

           2: See Section 9.3 "A/D Acquisition            BTFSC  ADCON0,GO ;Is conversion done?
                Requirements".
                                                          GOTO   $-1            ;No, test again

                                                          BANKSEL ADRESH        ;

                                                          MOVF   ADRESH,W       ;Read upper 2 bits

                                                          MOVWF  RESULTHI       ;store in GPR space

                                                          BANKSEL ADRESL        ;

                                                          MOVF   ADRESL,W       ;Read lower 8 bits

                                                          MOVWF  RESULTLO       ;Store in GPR space

2007 Microchip Technology Inc.  Preliminary                                      DS41291D-page 103
PIC16F882/883/884/886/887

9.2.7 ADC REGISTER DEFINITIONS

The following registers are used to control the opera-
tion of the ADC.

   Note: For ANSEL and ANSELH registers, see
               Register 3-3 and Register 3-4, respectively.

REGISTER 9-1: ADCON0: A/D CONTROL REGISTER 0

     R/W-0   R/W-0  R/W-0             R/W-0                  R/W-0  R/W-0             R/W-0            R/W-0
   ADCS1    ADCS0   CHS3              CHS2                   CHS1   CHS0           GO/DONE             ADON
bit 7
                                                                                                              bit 0

Legend:             W = Writable bit                         U = Unimplemented bit, read as `0'
R = Readable bit    `1' = Bit is set
-n = Value at POR                                            `0' = Bit is cleared  x = Bit is unknown

bit 7-6     ADCS<1:0>: A/D Conversion Clock Select bits
bit 5-2
            00 = FOSC/2
bit 1       01 = FOSC/8
bit 0       10 = FOSC/32
            11 = FRC (clock derived from a dedicated internal oscillator = 500 kHz max)

            CHS<3:0>: Analog Channel Select bits

            0000 = AN0
            0001 = AN1
            0010 = AN2
            0011 = AN3
            0100 = AN4
            0101 = AN5
            0110 = AN6
            0111 = AN7
            1000 = AN8
            1001 = AN9
            1010 = AN10
            1011 = AN11
            1100 = AN12
            1101 = AN13
            1110 = CVREF
            1111 = Fixed Ref (0.6 volt fixed reference)

            GO/DONE: A/D Conversion Status bit

            1 = A/D conversion cycle in progress. Setting this bit starts an A/D conversion cycle.
                 This bit is automatically cleared by hardware when the A/D conversion has completed.

            0 = A/D conversion completed/not in progress

            ADON: ADC Enable bit

            1 = ADC is enabled
            0 = ADC is disabled and consumes no operating current

DS41291D-page 104                     Preliminary                                  2007 Microchip Technology Inc.
                                         PIC16F882/883/884/886/887

REGISTER 9-2: ADCON1: A/D CONTROL REGISTER 1

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

ADFM               --             VCFG1             VCFG0  --                    --   --                  --

bit 7                                                              &n