datasheet

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

型号

产品描述

搜索
 

PIC16F946E/PT301

器件型号:PIC16F946E/PT301
厂商名称:Microchip
厂商官网:https://www.microchip.com
下载文档

文档预览

PIC16F946E/PT301器件文档内容

                       PIC16F946
                       Data Sheet

               64-Pin Flash-Based, 8-Bit
           CMOS Microcontrollers with
LCD Driver and nanoWatt Technology

2005 Microchip Technology Inc.  Preliminary  DS41265A
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, microID, MPLAB, PIC, PICmicro, PICSTART,
MICROCHIP MAKES NO REPRESENTATIONS OR WAR-                           PRO MATE, PowerSmart, rfPIC, and SmartShunt are
RANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED,                      registered trademarks of Microchip Technology Incorporated
WRITTEN OR ORAL, STATUTORY OR OTHERWISE,                             in the U.S.A. and other countries.
RELATED TO THE INFORMATION, INCLUDING BUT NOT
LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE,                      AmpLab, FilterLab, Migratable Memory, MXDEV, MXLAB,
MERCHANTABILITY OR FITNESS FOR PURPOSE.                              PICMASTER, SEEVAL, SmartSensor and The Embedded
Microchip disclaims all liability arising from this information and  Control Solutions Company are registered trademarks of
its use. Use of Microchip's products as critical components in       Microchip Technology Incorporated in the U.S.A.
life support systems is not authorized except with express
written approval by Microchip. No licenses are conveyed,             Analog-for-the-Digital Age, Application Maestro, dsPICDEM,
implicitly or otherwise, under any Microchip intellectual property   dsPICDEM.net, dsPICworks, ECAN, ECONOMONITOR,
rights.                                                              FanSense, FlexROM, fuzzyLAB, In-Circuit Serial
                                                                     Programming, ICSP, ICEPIC, Linear Active Thermistor,
                                                                     MPASM, MPLIB, MPLINK, MPSIM, PICkit, PICDEM,
                                                                     PICDEM.net, PICLAB, PICtail, PowerCal, PowerInfo,
                                                                     PowerMate, PowerTool, rfLAB, rfPICDEM, Select Mode,
                                                                     Smart Serial, SmartTel, Total Endurance and WiperLock 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.

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

                                                                          Printed on recycled paper.

                                                                     Microchip received ISO/TS-16949:2002 quality system certification for
                                                                     its worldwide headquarters, design and wafer fabrication facilities in
                                                                     Chandler and Tempe, Arizona and Mountain View, California in
                                                                     October 2003. The Company's quality system processes and
                                                                     procedures are for its PICmicro 8-bit MCUs, 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.

DS41265A-page ii  Preliminary                                        2005 Microchip Technology Inc.
                                                                 PIC16F946

64-Pin Flash-Based, 8-Bit CMOS Microcontrollers with
          LCD Driver and nanoWatt Technology

High-Performance RISC CPU:                          Low-Power Features:

Only 35 instructions to learn:                     Standby Current:
   - All single-cycle instructions except branches     - <100 nA @ 2.0V, typical

Operating speed:                                  Operating Current:
   - DC 20 MHz oscillator/clock input                - 8.5 A @ 32 kHz, 2.0V, typical
   - DC 200 ns instruction cycle                     - 100 A @ 1 MHz, 2.0V, typical

Program Memory Read (PMR) capability               Watchdog Timer Current:
Interrupt capability                                 - 1 A @ 2.0V, typical
8-level deep hardware stack
Direct, Indirect and Relative Addressing modes    Peripheral Features:

Special Microcontroller Features:                   Liquid Crystal Display module:

Precision Internal Oscillator:                       - Up to 168 pixel drive capability
   - Factory calibrated to 1%                         - Selectable clock source
   - Software selectable frequency range of            - Four commons
      8 MHz to 32 kHz
   - Software tunable                               Up to 53 I/O pins and 1 input-only pin:
   - Two-Speed Start-up mode                           - High-current source/sink for direct LED drive
   - Crystal fail detect for critical applications     - Interrupt-on-pin change
   - Clock mode switching during operation for         - Individually programmable weak pull-ups
      power savings
                                                    In-Circuit Serial ProgrammingTM (ICSPTM) via two
Power-saving Sleep mode                              pins
Wide operating voltage range (2.0V-5.5V)
Industrial and Extended temperature range          Analog comparator module with:
Power-on Reset (POR)                                 - Two analog comparators
Power-up Timer (PWRT) and Oscillator Start-up        - Programmable on-chip voltage reference
                                                          (CVREF) module (% of VDD)
   Timer (OST)                                         - Comparator inputs and outputs externally
Brown-out Reset (BOR) with software control             accessible

   option                                           A/D Converter:
Enhanced Low-Current Watchdog Timer (WDT)            - 10-bit resolution and 8 channels

   with on-chip oscillator (software selectable      Timer0: 8-bit timer/counter with 8-bit
   nominal 268 seconds with full prescaler) with       programmable prescaler
   software enable
Multiplexed Master Clear with pull-up/input pin    Enhanced Timer1:
Programmable code protection                         - 16-bit timer/counter with prescaler
High-Endurance Flash/EEPROM cell:                    - External Gate Input mode
   - 100,000 write Flash endurance                     - Option to use OSC1 and OSC2 as Timer1
   - 1,000,000 write EEPROM endurance                     oscillator if INTOSCIO or LP mode is
   - Flash/Data EEPROM retention: > 40 years              selected

                                                    Timer2: 8-bit timer/counter with 8-bit period
                                                       register, prescaler and postscaler

                                                    Addressable Universal Synchronous
                                                       Asynchronous Receiver Transmitter (AUSART)

                                                    2 Capture, Compare, PWM modules:
                                                       - 16-bit Capture, max. resolution 12.5 ns
                                                       - 16-bit Compare, max. resolution 200 ns
                                                       - 10-bit PWM, max. frequency 20 kHz

                                                    Synchronous Serial Port (SSP) with I2CTM

2005 Microchip Technology Inc.                    Preliminary  DS41265A-page 1
PIC16F946

   Device  Program      Data Memory    I/O  10-bit A/D                                                                    LCD          CCP       Timers
           Memory    SRAM EEPROM                (ch)                                                                   (segment                  8/16-bit
PIC16F946                                                                                                               drivers)         2
             Flash                                                                                                                                  2/1
           (words)   (bytes)  (bytes)

                8K       336  256      53       8                                                                      42

Pin Diagram PIC16F946

TQFP                     RD5/SEG18
                             RD4/SEG17
                                  RC7/RX/DT/SDI/SDA/SEG8
                                       RC6/TX/CK/SCK/SCL/SEG9
                                           RC5/T1CKI/CCP1/SEG10
                                                RC4/T1G/SDO/SEG11
                                                     RD3/SEG16
                                                         VDD
                                                              VSS
                                                                   RD2/CCP2
                                                                        RD1
                                                                            RD0/COM3
                                                                                 RC3/SEG6
                                                                                      RC2/VLCD3
                                                                                           RC1/VLCD2
                                                                                               RC0/VLCD1

                         64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49

RD6/SEG19        1                                                                                                     48         RF7/SEG31

RD7/SEG20        2                                                                                                     47         RF6/SEG30

RG0/SEG36        3                                                                                                     46         RF5/SEG29

RG1/SEG37        4                                                                                                     45         RF4/SEG28

RG2/SEG38        5                                                                                                     44         RE7/SEG27

RG3/SEG39        6                                                                                                     43         RE6/SEG26

RG4/SEG40        7                                                                                                     42         RE5/SEG25

RG5/SEG41        8            PIC16F946                                                                                41         VSS

           VSS   9                                                                                                     40         RA6/OSC2/CLKO/T1OSO

           VDD   10                                                                                                    39         RA7/OSC1/CLKI/T1OSI

RF0/SEG32        11                                                                                                    38         VDD

RF1/SEG33        12                                                                                                    37         RE4/SEG24

RF2/SEG34        13                                                                                                    36         RE3/MCLR/VPP

RF3/SEG35        14                                                                                                    35         RE2/AN7/SEG23

RB0/INT/SEG0     15                                                                                                    34         RE1/AN6/SEG22

RB1/SEG1         16                                                                                                    33         RE0/AN5/SEG21

                         17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

                         RB2/SEG2
                             RB3/SEG3

                                  VDD
                                       VSS
                                           RB4/COM0
                                                RB5/COM1
                                                     RB6/ICSPCLK/ICDCK/SEG14
                                                          RB7/ICSPDAT/ICDDAT/SEG13
                                                              AVSS
                                                                   AVDD
                                                                        RA0/AN0/C1-/SEG12
                                                                             RA1/AN1/C2-/SEG7
                                                                                  RA2/AN2/C2+/VREF-/COM2
                                                                                      RA3/AN3/C1+/VREF+/SEG15
                                                                                           RA4/C1OUT/T0CKI/SEG4
                                                                                                RA5/AN4/C2OUT/SS/SEG5

DS41265A-page 2                    Preliminary                                                                              2005 Microchip Technology Inc.
                                                 PIC16F946

Table of Contents

1.0 Device Overview .......................................................................................................................................................................... 5
2.0 Memory Organization ................................................................................................................................................................. 11
3.0 I/O Ports ..................................................................................................................................................................................... 27
4.0 Clock Sources ............................................................................................................................................................................ 71
5.0 Timer0 Module ........................................................................................................................................................................... 83
6.0 Timer1 Module With Gate Control.............................................................................................................................................. 87
7.0 Timer2 Module ........................................................................................................................................................................... 93
8.0 Comparator Module.................................................................................................................................................................... 95
9.0 Liquid Crystal Display (LCD) Driver Module............................................................................................................................. 103
10.0 Programmable Low-Voltage Detect (PLVD) Module................................................................................................................ 131
11.0 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART).............................................................. 133
12.0 Analog-to-Digital Converter (A/D) Module................................................................................................................................ 149
13.0 Data EEPROM and Flash Program Memory Control ............................................................................................................... 159
14.0 SSP Module Overview ............................................................................................................................................................. 165
15.0 Capture/Compare/PWM Modules ............................................................................................................................................ 183
16.0 Special Features of the CPU.................................................................................................................................................... 191
17.0 Instruction Set Summary .......................................................................................................................................................... 213
18.0 Development Support............................................................................................................................................................... 223
19.0 Electrical Specifications............................................................................................................................................................ 229
20.0 DC and AC Characteristics Graphs and Tables....................................................................................................................... 231
21.0 Packaging Information.............................................................................................................................................................. 255
Appendix A: Data Sheet Revision History.......................................................................................................................................... 259
Appendix B: Migrating From Other PICmicro Devices .................................................................................................................... 259
Appendix C: Conversion Considerations ........................................................................................................................................... 260
Index .................................................................................................................................................................................................. 261
On-line Support .................................................................................................................................................................................. 269
Systems Information and Upgrade Hot Line ...................................................................................................................................... 269
Reader Response .............................................................................................................................................................................. 270
Product Identification System ............................................................................................................................................................ 271

                                    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
  welcome 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.

2005 Microchip Technology Inc.  Preliminary  DS41265A-page 3
PIC16F946

NOTES:

DS41265A-page 4  Preliminary   2005 Microchip Technology Inc.
                                                        PIC16F946

1.0 DEVICE OVERVIEW

This document contains device specific information for
the PIC16F946. Additional information may be found in
the "PICmicro Mid-Range MCU Family Reference
Manual" (DS33023), downloaded from the Microchip
web site. The Reference Manual should be considered
a complementary document to this data sheet and is
highly recommended reading for a better
understanding of the device architecture and operation
of the peripheral modules.

The PIC16F946 devices are covered by this data
sheet. It is available in a 64-pin package. Figure 1-1
shows a block diagram of the device and Table 1-1
shows the pinout description.

2005 Microchip Technology Inc.  Preliminary           DS41265A-page 5
PIC16F946

FIGURE 1-1:      PIC16F946 BLOCK DIAGRAM

           Configuration             13                                Data Bus             8  PORTA  RA0/AN0/C1-/SEG12
                                             Program Counter                                   PORTB  RA1/AN1/C2-/SEG7
                Flash                                                       RAM                PORTC  RA2/AN2/C2+/VREF-/COM2
              8k x 14                     8-Level Stack (13-bit)       336 x 8 bytes                  RA3/AN3/C1+/VREF+/SEG15
              Program                                                                                 RA4/C1OUT/T0CKI/SEG4
              Memory                                                         File                     RA5/AN4/C2OUT/SS/SEG5
                                                                         Registers                    RA6/OSC2/CLKO/T1OSO
                                                                                                      RA7/OSC1/CLKI/T1OSI
Program 14                           Program Memory Read                            RAM Addr
   Bus                                          (PRM)                             9                    RB0/INT/SEG0
                                                                                                       RB1/SEG1
         Instruction Reg                                               Addr MUX                        RB2/SEG2
                                                                                                       RB3/SEG3
                                     Direct Addr       7                             Indirect          RB4/COM0
                                                                                                       RB5/COM1
                                                                                8     Addr             RB6/ICSPCLK/ICDCK/SEG14
                                                                                                       RB7/ICSPDAT/ICDDAT/SEG13
                                                                                FSR Reg
                                                                                                       RC0/VLCD1
                                  8                                    Status Reg                      RC1/VLCD2
                                                                                                       RC2/VLCD3
                                          Power-up                3             MUX                    RC3/SEG6
                                             Timer                                                     RC4/T1G/SDO/SEG11
              Instruction                                                 ALU                  PORTD   RC5/T1CKI/CCP1/SEG10
             Decode and                    Oscillator             8                            PORTE   RC6/TX/CK/SCK/SCL/SEG9
                                       Start-up Timer                                                  RC7/RX/DT/SDI/SDA/SEG8
                Control                                                  W Reg
                                          Power-on                                                     RD0/COM3
OSC1/CLKI                                    Reset                                                     RD1
                                                                                                       RD2/CCP2
                          Timing          Watchdog                                                     RD3/SEG16
OSC2/CLKO Generation                         Timer                                                     RD4/SEG17
                                                                                                       RD5/SEG18
Internal                                 Brown-out                                                    RD6/SEG19
Oscillator                                   Reset                                                     RD7/SEG20

  Block                              VDD VSS                                                          RE0/AN5/SEG21
                                                                                                      RE1/AN6/SEG22
                                                                                               PORTF  RE2/AN7/SEG23
                                                                                                      RE3/MCLR/VPP
                                                                                               PORTG  RE4/SEG24
                                                                                                      RE5/SEG25
                                                                                                      RE6/SEG26
                                                                                                      RE7/SEG27

                                                                                                       RF0/SEG32
                                                                                                       RF1/SEG33
                                                                                                       RF2/SEG34
                                                                                                       RF3/SEG35
                                                                                                       RF4/SEG28
                                                                                                       RF5/SEG29
                                                                                                       RF6/SEG30
                                                                                                       RF7/SEG31

                                                                                                       RG0/SEG36
                                                                                                       RG1/SEG37
                                                                                                       RG2/SEG38
                                                                                                       RG3/SEG39
                                                                                                       RG4/SEG40
                                                                                                       RG5/SEG41

                 Timer0              Timer1               Timer2                10-bit A/D     Data EEPROM
                                                                                                  256 bytes

Comparators      CCP1                CCP2                         SSP  Addressable             BOR           PLVD  LCD
                                                                          USART

DS41265A-page 6                                                   Preliminary                         2005 Microchip Technology Inc.
                                                                                    PIC16F946

TABLE 1-1: PIC16F946 PINOUT DESCRIPTIONS

          Name                    Function  Input  Output                      Description
                                            Type    Type

RA0/AN0/C1-/SEG12                 RA0       TTL CMOS General purpose I/O.

                                  AN0       AN     -- Analog input Channel 0/Comparator 1 input negative.

                                  C1-       --     AN Comparator 1 negative input.

                                  SEG12 --         AN LCD analog output.

RA1/AN1/C2-/SEG7                  RA1       TTL CMOS General purpose I/O.

                                  AN1       AN     -- Analog input Channel 1/Comparator 2 input negative.

                                  C2-       --     AN Comparator 2 negative input.

                                  SEG7      --     AN LCD analog output.

RA2/AN2/C2+/VREF-/COM2            RA2       TTL CMOS General purpose I/O.

                                  AN2       AN     -- Analog input Channel 2/Comparator 2 input positive.

                                  C2+       --     AN Comparator 2 positive input.

                                  VREF-     AN     -- External Voltage Reference negative.

                                  COM2 --          AN LCD analog output.

RA3/AN3/C1+/VREF+/SEG15           RA3       TTL CMOS General purpose I/O.

                                  AN3       AN     -- Analog input Channel 3/Comparator 1 input positive.

                                  C1+       --     AN Comparator 1 positive input.

                                  VREF+     AN     -- External Voltage Reference positive.

                                  SEG15 --         AN LCD analog output.

RA4/C1OUT/T0CKI/SEG4              RA4       TTL CMOS General purpose I/O.

                                  C1OUT -- CMOS Comparator 1 output.

                                  T0CKI ST         -- Timer0 clock input.

                                  SEG4      --     AN LCD analog output.

RA5/AN4/C2OUT/SS/SEG5             RA5       TTL CMOS General purpose I/O.

                                  AN4       AN     -- Analog input Channel 4.

                                  C2OUT -- CMOS Comparator 2 output.

                                  SS        TTL    -- Slave select input.

                                  SEG5      --     AN LCD analog output.

RA6/OSC2/CLKO/T1OSO               RA6       TTL CMOS General purpose I/O.

                                  OSC2      -- XTAL Crystal/Resonator.

                                  CLKO      -- CMOS TOSC/4 reference clock.

                                  T1OSO -- XTAL Timer1 oscillator output.

RA7/OSC1/CLKI/T1OSI               RA7       TTL CMOS General purpose I/O.

                                  OSC1 XTAL -- Crystal/Resonator.

                                  CLKI      ST     -- Clock input.

                                  T1OSI XTAL -- Timer1 oscillator input.

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

                                  INT       ST     -- External interrupt pin.

                                  SEG0      --     AN LCD analog output.

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

                                  SEG1      --     AN LCD analog output.

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

                                  SEG2      --     AN LCD analog output.

Legend: AN = Analog input or output         CMOS = CMOS compatible input or output D = Direct
               TTL = TTL compatible input   ST = Schmitt Trigger input with CMOS levels
               HV = High Voltage            XTAL = Crystal

2005 Microchip Technology Inc.                   Preliminary                                 DS41265A-page 7
PIC16F946

TABLE 1-1: PIC16F946 PINOUT DESCRIPTIONS (CONTINUED)

           Name           Function         Input  Output                  Description
                                           Type    Type

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

                          SEG3             --     AN LCD analog output.

RB4/COM0                  RB4              TTL CMOS General purpose I/O. Individually controlled interrupt-on-

                                                          change. Individually enabled pull-up.

                          COM0 --                 AN LCD analog output.

RB5/COM1                  RB5              TTL CMOS General purpose I/O. Individually controlled interrupt-on-

                                                          change. Individually enabled pull-up.

                          COM1 --                 AN LCD analog output.

RB6/ICSPCLK/ICDCK/SEG14   RB6              TTL CMOS General purpose I/O. Individually controlled interrupt-on-

                                                          change. Individually enabled pull-up.

                          ICSPCLK ST              -- ICSPTM clock.

                          ICDCK ST                -- ICD clock I/O.

                          SEG14 --                AN LCD analog output.

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

                          ICSPDAT ST CMOS ICSP Data I/O.

                          ICDDAT ST CMOS ICD Data I/O.

                          SEG13 --                AN LCD analog output.

RC0/VLCD1                 RC0              ST CMOS General purpose I/O.

                          VLCD1 AN                -- LCD analog input.

RC1/VLCD2                 RC1              ST CMOS General purpose I/O.

                          VLCD2 AN                -- LCD analog input.

RC2/VLCD3                 RC2              ST CMOS General purpose I/O.

                          VLCD3 AN                -- LCD analog input.

RC3/SEG6                  RC3              ST CMOS General purpose I/O.

                          SEG6             --     AN LCD analog output.

RC4/T1G/SDO/SEG11         RC4              ST CMOS General purpose I/O.

                          T1G              ST     -- Timer1 gate input.

                          SDO              -- CMOS Serial data output.

                          SEG11 --                AN LCD analog output.

RC5/T1CKI/CCP1/SEG10      RC5              ST CMOS General purpose I/O.

                          T1CKI ST                -- Timer1 clock input.

                          CCP1 ST CMOS Capture 1 input/Compare 1 output/PWM 1 output.

                          SEG10 --                AN LCD analog output.

RC6/TX/CK/SCK/SCL/SEG9    RC6              ST CMOS General purpose I/O.

                          TX               -- CMOS USART asynchronous serial transmit.

                          CK               ST CMOS USART synchronous serial clock.

                          SCK              ST CMOS SPITM clock.
                          SCL              ST CMOS I2CTM clock.

                          SEG9             --     AN LCD analog output.

Legend: AN = Analog input or output        CMOS = CMOS compatible input or output D = Direct
               TTL = TTL compatible input  ST = Schmitt Trigger input with CMOS levels
               HV = High Voltage           XTAL = Crystal

DS41265A-page 8                                   Preliminary             2005 Microchip Technology Inc.
                                                                               PIC16F946

TABLE 1-1: PIC16F946 PINOUT DESCRIPTIONS (CONTINUED)

           Name                   Function  Input  Output                   Description
                                            Type    Type

RC7/RX/DT/SDI/SDA/SEG8            RC7       ST CMOS General purpose I/O.

                                  RX        ST     -- USART asynchronous serial receive.

                                  DT        ST CMOS USART synchronous serial data.

                                  SDI       ST CMOS SPITM data input.
                                  SDA       ST CMOS I2CTM data.

                                  SEG8      --     AN LCD analog output.

RD0/COM3                          RD0       ST CMOS General purpose I/O.

                                  COM3 --          AN LCD analog output.

RD1                               RD1       ST CMOS General purpose I/O.

RD2/CCP2                          RD2       ST CMOS General purpose I/O.

                                  CCP2 ST CMOS Capture 2 input/Compare 2 output/PWM 2 output.

RD3/SEG16                         RD3       ST CMOS General purpose I/O.

                                  SEG16 --         AN LCD analog output.

RD4/SEG17                         RD4       ST CMOS General purpose I/O.

                                  SEG17 --         AN LCD analog output.

RD5/SEG18                         RD5       ST CMOS General purpose I/O.

                                  SEG18 --         AN LCD analog output.

RD6/SEG19                         RD6       ST CMOS General purpose I/O.

                                  SEG19 --         AN LCD analog output.

RD7/SEG20                         RD7       ST CMOS General purpose I/O.

                                  SEG20 --         AN LCD analog output.

RE0/AN5/SEG21                     RE0       ST CMOS General purpose I/O.

                                  AN5       AN     -- Analog input Channel 5.

                                  SEG21 --         AN LCD analog output.

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

                                  AN6       AN     -- Analog input Channel 6.

                                  SEG22 --         AN LCD analog output.

RE2/AN7/SEG23                     RE2       ST CMOS General purpose I/O.

                                  AN7       AN     -- Analog input Channel 7.

                                  SEG23 --         AN LCD analog output.

RE3/MCLR/VPP                      RE3       ST     -- Digital input only.

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

                                  VPP       HV     -- Programming voltage.

RE4/SEG24                         RE4       ST CMOS General purpose I/O.

                                  SEG24 --         AN LCD analog output.

RE5/SEG25                         RE5       ST CMOS General purpose I/O.

                                  SEG25 --         AN LCD analog output.

RE6/SEG26                         RE6       ST CMOS General purpose I/O.

                                  SEG26 --         AN LCD analog output.

RE7/SEG27                         RE7       ST CMOS General purpose I/O.

                                  SEG27 --         AN LCD analog output.

RF0/SEG32                         RF0       ST CMOS General purpose I/O.

                                  SEG32 --         AN LCD analog output.

Legend: AN = Analog input or output         CMOS = CMOS compatible input or output D = Direct
               TTL = TTL compatible input   ST = Schmitt Trigger input with CMOS levels
               HV = High Voltage            XTAL = Crystal

2005 Microchip Technology Inc.                   Preliminary                                 DS41265A-page 9
PIC16F946

TABLE 1-1: PIC16F946 PINOUT DESCRIPTIONS (CONTINUED)

           Name   Function                 Input  Output                 Description
                                           Type    Type

RF1/SEG33         RF1                      ST CMOS General purpose I/O.

                  SEG33                    --     AN LCD analog output.

RF2/SEG34         RF2                      ST CMOS General purpose I/O.

                  SEG34                    --     AN LCD analog output.

RF3/SEG35         RF3                      ST CMOS General purpose I/O.

                  SEG35                    --     AN LCD analog output.

RF4/SEG28         RF4                      ST CMOS General purpose I/O.

                  SEG28                    --     AN LCD analog output.

RF5/SEG29         RF5                      ST CMOS General purpose I/O.

                  SEG29                    --     AN LCD analog output.

RF6/SEG30         RF6                      ST CMOS General purpose I/O.

                  SEG30                    --     AN LCD analog output.

RF7/SEG31         RF7                      ST CMOS General purpose I/O.

                  SEG31                    --     AN LCD analog output.

RG0/SEG36         RG0                      ST CMOS General purpose I/O.

                  SEG36                    --     AN LCD analog output.

RG1/SEG37         RG1                      ST CMOS General purpose I/O.

                  SEG37                    --     AN LCD analog output.

RG2/SEG38         RG2                      ST CMOS General purpose I/O.

                  SEG38                    --     AN LCD analog output.

RG3/SEG39         RG3                      ST CMOS General purpose I/O.

                  SEG39                    --     AN LCD analog output.

RG4/SEG40         RG4                      ST CMOS General purpose I/O.

                  SEG10                    --     AN LCD analog output.

RG5/SEG41         RG5                      ST CMOS General purpose I/O.

                  SEG41                    --     AN LCD analog output.

VDD               VDD                      D      -- Power supply for microcontroller.

VSS               VSS                      D      -- Ground reference for microcontroller.

Legend: AN = Analog input or output        CMOS = CMOS compatible input or output D = Direct
               TTL = TTL compatible input  ST = Schmitt Trigger input with CMOS levels
               HV = High Voltage           XTAL = Crystal

DS41265A-page 10                                  Preliminary             2005 Microchip Technology Inc.
                                                            PIC16F946

2.0 MEMORY ORGANIZATION                              2.2 Data Memory Organization

2.1 Program Memory Organization                      The data memory is partitioned into multiple banks
                                                     which contain the General Purpose Registers (GPRs)
The PIC16F946 has a 13-bit program counter capable   and the Special Function Registers (SFRs). Bits RP0
of addressing an 8k x 14 program memory space        and RP1 are bank select bits.
(0000h-1FFFh). The Reset vector is at 0000h and the
interrupt vector is at 0004h.                           RP0 RP1 (STATUS<6:5>)

FIGURE 2-1:  PROGRAM MEMORY MAP                      = 00:  Bank 0
             AND STACK FOR THE
             PIC16F946                               = 01:  Bank 1

             pc<12:0>                                = 10:  Bank 2

CALL, RETURN                      13                 = 11:  Bank 3

RETFIE, RETLW                                        Each bank extends up to 7Fh (128 bytes). The lower
                                                     locations of each bank are reserved for the Special
             Stack Level 1                           Function Registers. Above the Special Function
             Stack Level 2                           Registers are the General Purpose Registers,
                                                     implemented as static RAM. All implemented banks
             Stack Level 8                           contain Special Function Registers. Some frequently
             Reset Vector                            used Special Function Registers from one bank are
                                                     mirrored in another bank for code reduction and
                                                     quicker access.

                                      0000h          2.2.1  GENERAL PURPOSE REGISTER
                                                            FILE

             Interrupt Vector         0004h          The register file is organized as 336 x 8 in the
                  Page 0              0005h          PIC16F946. Each register is accessed either directly or
                  Page 1                             indirectly through the File Select Register (FSR) (see
                  Page 2              07FFh          Section 2.5 "Indirect Addressing, INDF and FSR
                  Page 3              0800h          Registers").

On-chip                               0FFFh          2.2.2 SPECIAL FUNCTION REGISTERS
Program                               1000h
Memory                                               The Special Function Registers are registers used by
                                      17FFh          the CPU and peripheral functions for controlling the
                                      1800h          desired operation of the device (see Tables 2-1,
                                                     2-2, 2-3 and 2-4). These registers are static RAM.
                                      1FFFh
                                                     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.

2005 Microchip Technology Inc.             Preliminary    DS41265A-page 11
PIC16F946

FIGURE 2-2:       PIC16F946 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                     TRISF     185h

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

PORTC 07h                       TRISC     87h                   LCDCON 107h                     TRISG     187h

PORTD 08h                       TRISD     88h                   LCDPS     108h                  PORTF 188h

PORTE 09h                       TRISE     89h                   LVDCON 109h                     PORTG 189h

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

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

PIR1              0Ch           PIE1      8Ch                   EEDATL 10Ch                      EECON1 18Ch
                                                                                                EECON2(1) 18Dh
PIR2              0Dh           PIE2      8Dh                   EEADRL 10Dh

TMR1L             0Eh           PCON      8Eh                   EEDATH 10Eh                               18Eh

TMR1H 0Fh                       OSCCON 8Fh                      EEADRH 10Fh                               18Fh

T1CON 10h                       OSCTUNE 90h                     LCDDATA0 110h                   LCDDATA12 190h

TMR2              11h           ANSEL     91h                   LCDDATA1 111h                   LCDDATA13 191h

T2CON 12h                       PR2       92h                   LCDDATA2 112h                   LCDDATA14 192h

SSPBUF 13h                      SSPADD 93h                      LCDDATA3 113h                   LCDDATA15 193h

SSPCON 14h                      SSPSTAT 94h                     LCDDATA4 114h                   LCDDATA16 194h

CCPR1L 15h                      WPUB      95h                   LCDDATA5 115h                   LCDDATA17 195h

CCPR1H 16h                      IOCB      96h                   LCDDATA6 116h                   LCDDATA18 196h

CCP1CON 17h                     CMCON1 97h                      LCDDATA7 117h                   LCDDATA19 197h

RCSTA 18h                       TXSTA     98h                   LCDDATA8 118h                   LCDDATA20 198h

TXREG 19h                       SPBRG 99h                       LCDDATA9 119h                   LCDDATA21 199h

RCREG 1Ah                                 9Ah                   LCDDATA10 11Ah                  LCDDATA22 19Ah

CCPR2L 1Bh                                9Bh                   LCDDATA11 11Bh                  LCDDATA23 19Bh

CCPR2H 1Ch                      CMCON0 9Ch                      LCDSE0 11Ch                     LCDSE3 19Ch

CCP2CON 1Dh                     VRCON 9Dh                       LCDSE1 11Dh                     LCDSE4 19Dh

ADRESH 1Eh                      ADRESL 9Eh                      LCDSE2 11Eh                     LCDSE5 19Eh

ADCON0 1Fh                      ADCON1 9Fh                                11Fh                            19Fh

                  20h                     A0h                             120h                  General   1A0h
                                                                                                Purpose
                                General                         General                         Register
                                Purpose                         Purpose
General                         Register                        Register                        80 Bytes
Purpose
Register                        80 Bytes                        80 Bytes

96 Bytes

                 7Fh                               EFh          accesses  16Fh                  accesses  1EFh
Bank 0                          accesses F0h                    70h-7Fh   170h                  70h-7Fh   1F0h
                                70h-7Fh FFh                               17Fh                            1FFh
                                                                 Bank 2                          Bank 3
                                 Bank 1

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

DS41265A-page 12                          Preliminary                                           2005 Microchip Technology Inc.
                                                                                             PIC16F946

TABLE 2-1: PIC16F946 SPECIAL REGISTERS SUMMARY BANK 0

Addr 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)
                                                                                                       Reset

Bank 0

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

01h TMR0    Timer0 Module Register                                                                   xxxx xxxx uuuu uuuu

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

03h STATUS  IRP     RP1             RP0           TO       PD                 Z     DC       C       0001 1xxx 000q quuu

04h FSR     Indirect Data Memory Address Pointer                                                     xxxx xxxx uuuu uuuu

05h PORTA   RA7     RA6             RA5           RA4      RA3               RA2    RA1      RA0 xxxx xxxx uuuu uuuu

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

07h PORTC   RC7     RC6             RC5           RC4      RC3               RC2    RC1      RC0 xxxx xxxx uuuu uuuu

08h PORTD   RD7     RD6             RD5           RD4      RD3               RD2    RD1      RD0 xxxx xxxx uuuu uuuu

09h PORTE   RE7     RE6             RE5           RE4      RE3               RE2    RE1      RE0 xxxx xxxx uuuu uuuu

0Ah PCLATH  --      --              --     Write Buffer for upper 5 bits of Program Counter          ---0 0000 ---0 0000

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

0Ch PIR1    EEIF    ADIF            RCIF          TXIF     SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

0Dh PIR2    OSFIF   C2IF            C1IF          LCDIF    --        LVDIF          --       CCP2IF 0000 -0-0 0000 -0-0

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

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

10h T1CON   T1GINV T1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 uuuu uuuu

11h TMR2    Timer2 Module Register                                                                   0000 0000 0000 0000

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

13h SSPBUF Synchronous Serial Port Receive Buffer/Transmit Register                                  xxxx xxxx uuuu uuuu

14h SSPCON WCOL SSPOV SSPEN                       CKP      SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000

15h CCPR1L Capture/Compare/PWM Register 1 (LSB)                                                      xxxx xxxx uuuu uuuu

16h CCPR1H Capture/Compare/PWM Register 1 (MSB)                                                      xxxx xxxx uuuu uuuu

17h CCP1CON --      --              CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

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

19h TXREG USART Transmit Data Register                                                               0000 0000 0000 0000

1Ah     RCREG USART Receive Data Register                                                            0000 0000  0000 0000
1Bh(2)                                                                                               xxxx xxxx  uuuu uuuu
1Ch(2)  CCPR2L Capture/Compare/PWM Register 2 (LSB)                                                  xxxx xxxx  uuuu uuuu
1Dh(2)                                                                                               --00 0000  --00 0000
        CCPR2H Capture/Compare/PWM Register 2 (MSB)

        CCP2CON --  --              CCP2X CCP2Y            CCP2M3    CCP2M2         CCP2M1   CCP2M0

1Eh ADRESH A/D Result Register High Byte                                                             xxxx xxxx uuuu uuuu

1Fh ADCON0 ADFM VCFG1 VCFG0                       CHS2     CHS1      CHS0 GO/DONE ADON 0000 0000 0000 0000

Legend: = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1: Other (non Power-up) Resets include MCLR Reset and Watchdog Timer Reset during normal operation.

2005 Microchip Technology Inc.                     Preliminary                                     DS41265A-page 13
PIC16F946

TABLE 2-2: PIC16F946 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  Value on
                                                                                                              POR/BOR   all other
                                                                                                                        Resets(1)
                                                                                                                Reset

Bank 1

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

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

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

83h STATUS          IRP    RP1     RP0            TO               PD     Z      DC                       C   0001 1xxx 000q quuu

84h FSR             Indirect Data Memory Address Pointer                                                      xxxx xxxx uuuu uuuu

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

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

87h TRISC           TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 1111 1111 1111 1111

88h TRISD           TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2                    TRISD1  TRISD0               1111 1111 1111 1111
89h TRISE           TRISE7 TRISE6 TRISE5 TRISE4 TRISE3(3) TRISE2                 TRISE1  TRISE0               1111 1111 1111 1111

8Ah PCLATH          --     --      --             Write Buffer for the upper 5 bits of the Program Counter    ---0 0000 ---0 0000

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

8Ch PIE1            EEIE   ADIE    RCIE           TXIE             SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

8Dh PIE2            OSFIE C2IE     C1IE           LCDIE            --     LVDIE  --      CCP2IE 0000 -0-0 0000 -0-0

8Eh PCON            --     --      --             SBOREN           --     --     POR     BOR ---1 --qq ---u --uu
8Fh OSCCON
                    --     IRCF2 IRCF1 IRCF0 OSTS(2)                      HTS    LTS     SCS -110 q000 -110 x000

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

91h ANSEL           ANS7 ANS6 ANS5 ANS4                            ANS3   ANS2   ANS1    ANS0 1111 1111 1111 1111

92h PR2             Timer2 Period Register                                                                    1111 1111 1111 1111
93h SSPADD          Synchronous Serial Port (I2C mode) Address Register                                       0000 0000 0000 0000

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

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

96h IOCB            IOCB7 IOCB6 IOCB5 IOCB4                        --     --     --                       --  0000 ---- 0000 ----

97h CMCON1          --     --      --                     --       --     --     T1GSS C2SYNC ---- --10 ---- --10

98h TXSTA           CSRC   TX9     TXEN SYNC                       --     BRGH   TRMT    TX9D 0000 -010 0000 -010

99h SPBRG           SPBRG7 SPBRG6 SPBRG5 SPBRG4 SPBRG3 SPBRG2 SPBRG1 SPBRG0 0000 0000 0000 0000

9Ah           --    Unimplemented                                                                             --        --

9Bh           --    Unimplemented                                                                             --        --

9Ch CMCON0          C2OUT C1OUT C2INV C1INV                        CIS    CM2    CM1     CM0 0000 0000 0000 0000

9Dh VRCON           VREN   --      VRR                    --       VR3    VR2    VR1     VR0 0-0- 0000 0-0- 0000

9Eh ADRESL          A/D Result Register Low Byte                                                              xxxx xxxx uuuu uuuu

9Fh ADCON1          --     ADCS2 ADCS1 ADCS0                       --     --     --                       --  -000 ---- -000 ---

Legend:       = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1:       Other (non Power-up) Resets include MCLR Reset and Watchdog Timer Reset during normal operation.
              The value of the OSTS bit is dependent on the value of the Configuration Word (CONFIG) of the device. See Section 4.0 "Clock
          2:  Sources".
              Bit is read-only; TRISE = 1 always.
          3:

DS41265A-page 14                                          Preliminary                                     2005 Microchip Technology Inc.
                                                                                        PIC16F946

TABLE 2-3: PIC16F946 SPECIAL REGISTERS SUMMARY BANK 2

Addr          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)
                                                                                                 Reset

Bank 2

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

101h TMR0           Timer0 Module Register                                                     xxxx xxxx uuuu uuuu

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

103h STATUS         IRP           RP1       RP0           TO       PD     Z      DC     C      0001 1xxx 000q quuu

104h FSR            Indirect Data Memory Address Pointer                                       xxxx xxxx uuuu uuuu

105h WDTCON         --             --       --     WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN ---0 1000 ---0 1000

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

107h LCDCON         LCDEN SLPEN WERR VLCDEN                        CS1    CS0    LMUX1 LMUX0 0001 0011 0001 0011

108h LCDPS          WFT BIASMD LCDA                       WA       LP3    LP2    LP1    LP0 0000 0000 0000 0000

109h LVDCON         --             --       IRVST LVDEN            --     LVDL2  LVDL1  LVDL0 --00 -100 --00 -100

10Ah PCLATH         --             --       --            Write Buffer for the upper 5 bits of the Program Counter ---0 0000 ---0 0000

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

10Ch EEDATL         EEDATL7 EEDATL6 EEDATL5 EEDATL4 EEDATL3 EEDATL2 EEDATL1 EEDATL0 0000 0000 0000 0000

10Dh EEADRL         EEADRL7 EEADRL6 EEADRL5 EEADRL4 EEADRL3 EEADRL2 EEADRL1 EEADRL0 0000 0000 0000 0000

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

10Fh EEADRH         --             --       --     EEADRH4 EEADRH3 EEADRH2 EEADRH1 EEADRH0 ---0 0000 ---0 0000

110h LCDDATA0       SEG7   SEG6             SEG5          SEG4     SEG3   SEG2   SEG1   SEG0 xxxx xxxx uuuu uuuu
                    COM0   COM0             COM0          COM0     COM0   COM0   COM0   COM0

111h LCDDATA1       SEG15  SEG14            SEG13         SEG12    SEG11  SEG10  SEG9   SEG8 xxxx xxxx uuuu uuuu
                    COM0   COM0             COM0          COM0     COM0   COM0   COM0   COM0

112h LCDDATA2       SEG23  SEG22            SEG21         SEG20    SEG19  SEG18  SEG17  SEG16 xxxx xxxx uuuu uuuu
                    COM0   COM0             COM0          COM0     COM0   COM0   COM0   COM0

113h LCDDATA3       SEG7   SEG6             SEG5          SEG4     SEG3   SEG2   SEG1   SEG0 xxxx xxxx uuuu uuuu
                    COM1   COM1             COM1          COM1     COM1   COM1   COM1   COM1

114h LCDDATA4       SEG15  SEG14            SEG13         SEG12    SEG11  SEG10  SEG9   SEG8 xxxx xxxx uuuu uuuu
                    COM1   COM1             COM1          COM1     COM1   COM1   COM1   COM1

115h LCDDATA5       SEG23  SEG22            SEG21         SEG20    SEG19  SEG18  SEG17  SEG16 xxxx xxxx uuuu uuuu
                    COM1   COM1             COM1          COM1     COM1   COM1   COM1   COM1

116h LCDDATA6       SEG7   SEG6             SEG5          SEG4     SEG3   SEG2   SEG1   SEG0 xxxx xxxx uuuu uuuu
                    COM2   COM2             COM2          COM2     COM2   COM2   COM2   COM2

117h LCDDATA7       SEG15  SEG14            SEG13         SEG12    SEG11  SEG10  SEG9   SEG8 xxxx xxxx uuuu uuuu
                    COM2   COM2             COM2          COM2     COM2   COM2   COM2   COM2

118h LCDDATA8       SEG23  SEG22            SEG21         SEG20    SEG19  SEG18  SEG17  SEG16 xxxx xxxx uuuu uuuu
                    COM2   COM2             COM2          COM2     COM2   COM2   COM2   COM2

119h LCDDATA9       SEG7   SEG6             SEG5          SEG4     SEG3   SEG2   SEG1   SEG0 xxxx xxxx uuuu uuuu
                    COM3   COM3             COM3          COM3     COM3   COM3   COM3   COM3

11Ah LCDDATA10      SEG15  SEG14            SEG13         SEG12    SEG11  SEG10  SEG9   SEG8 xxxx xxxx uuuu uuuu
                    COM3   COM3             COM3          COM3     COM3   COM3   COM3   COM3

11Bh LCDDATA11      SEG23  SEG22            SEG21         SEG20    SEG19  SEG18  SEG17  SEG16  xxxx xxxx uuuu uuuu
                    COM3   COM3             COM3          COM3     COM3   COM3   COM3   COM3
11Ch LCDSE0(2)                                                                                 0000 0000 uuuu uuuu
11Dh LCDSE1(2)        SE7    SE6              SE5           SE4      SE3    SE2    SE1    SE0  0000 0000 uuuu uuuu
11Eh LCDSE2(2)       SE15   SE14             SE13          SE12     SE11   SE10    SE9    SE8  0000 0000 uuuu uuuu
                     SE23   SE22             SE21          SE20     SE19   SE18   SE17   SE16

11Fh          --    Unimplemented                                                              --        --

Legend:       = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1:       Other (non Power-up) Resets include MCLR Reset and Watchdog Timer Reset during normal operation.
              This register is only initialized by a POR or BOR reset and is unchanged by other Resets.
          2:

2005 Microchip Technology Inc.                          Preliminary                          DS41265A-page 15
PIC16F946

TABLE 2-4: PIC16F946 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  Value on
                                                                                                               POR/BOR   all other
                                                                                                                         Resets(1)
                                                                                                                 Reset

Bank 3

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

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

182h          PCL        Program Counter (PC) Least Significant Byte                                           0000 0000 0000 0000

183h          STATUS     IRP    RP1     RP0    TO                     PD      Z      DC     C                  0001 1xxx 000q quuu

184h          FSR        Indirect Data Memory Address Pointer                                                  xxxx xxxx uuuu uuuu

185h          TRISF      TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0 1111 1111 1111 1111

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

187h          TRISG      --     --      TRISG5 TRISG4 TRISG3 TRISG2 TRISG1 TRISG0 --11 1111 --11 1111

188h          PORTF      RF7    RF6     RF5    RF4                    RF3     RF2    RF1    RF0 xxxx xxxx uuuu uuuu

189h          PORTG      --     --      RG5    RG4                    RG3     RG2    RG1    RG0 --xx xxxx --uu uuuu

18Ah PCLATH              --     --      -- Write Buffer for the upper 5 bits of the Program Counter ---0 0000 ---0 0000

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

18Ch EECON1              EEPGD  --      --                     --     WRERR WREN     WR     RD 0--- x000 0--- q000

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

190h          LCDDATA12  SEG31 SEG30 SEG29 SEG28 SEG27 SEG26 SEG25 SEG24 xxxx xxxx uuuu uuuu
                         COM0 COM0 COM0 COM0 COM0 COM0 COM0 COM0

191h          LCDDATA13  SEG39 SEG38 SEG37 SEG36 SEG35 SEG34                         SE33   SEG32 xxxx xxxx uuuu uuuu
                         COM0 COM0 COM0 COM0 COM0 COM0                               COM0   COM0

192h          LCDDATA14  --     --      --                     --     --      --     SEG41 SEG40 ---- --xx ---- --uu

                                                                                     COM0 COM0

193h          LCDDATA15  SEG31 SEG30 SEG29 SEG28 SEG27 SEG26 SEG25 SEG24 xxxx xxxx uuuu uuuu
                         COM1 COM1 COM1 COM1 COM1 COM1 COM1 COM1

194h          LCDDATA16  SEG39 SEG38 SEG37 SEG36 SEG35 SEG34 SEG33 SEG32 xxxx xxxx uuuu uuuu
                         COM1 COM1 COM1 COM1 COM1 COM1 COM1 COM1

195h          LCDDATA17  --     --      --                     --     --      --     SEG41 SEG40 ---- --xx ---- --uu

                                                                                     COM1 COM1

196h          LCDDATA18  SEG31 SEG30 SEG29 SEG28 SEG27 SEG26 SEG25 SEG24 xxxx xxxx uuuu uuuu
                         COM2 COM2 COM2 COM2 COM2 COM2 COM2 COM2

197h          LCDDATA19  SEG39 SEG38 SEG37 SEG36 SEG35 SEG34 SEG33 SEG32 xxxx xxxx uuuu uuuu
                         COM2 COM2 COM2 COM2 COM2 COM2 COM2 COM2

198h          LCDDATA20  --     --      --                     --     --      --     SEG41 SEG40 ---- --xx ---- --uu

                                                                                     COM2 COM2

199h          LCDDATA21  SEG31 SEG30 SEG29 SEG28 SEG27 SEG26 SEG25 SEG24 xxxx xxxx uuuu uuuu
                         COM3 COM3 COM3 COM3 COM3 COM3 COM3 COM3

19Ah          LCDDATA22  SEG39 SEG38 SEG37 SEG36 SEG35 SEG34 SEG33 SEG32 xxxx xxxx uuuu uuuu
                         COM3 COM3 COM3 COM3 COM3 COM3 COM3 COM3

19Bh          LCDDATA23    --     --      --     --                     --      --   SEG41  SEG40              ---- --xx ---- --uu
                                                                                     COM3   COM3
19Ch          LCDSE3(2)  SE31   SE30    SE29   SE28                   SE27    SE26                             0000 0000 uuuu uuuu
19Dh          LCDSE4(2)  SE39   SE38    SE37   SE36                   SE35    SE34    SE25   SE24              0000 0000 uuuu uuuu
19Eh          LCDSE5(2)                                                               SE33   SE32              ---- --00 ---- --uu
                           --     --      --     --                     --      --    SE41   SE40

19Fh                --   Unimplemented                                                                         --        --

Legend:       = Unimplemented locations read as `0', u = unchanged, x = unknown, q = value depends on condition, shaded = unimplemented
Note 1:       Other (non Power-up) Resets include MCLR Reset and Watchdog Timer Reset during normal operation.
              This register is only initialized by a POR or BOR reset and is unchanged by other Resets.
          2:

DS41265A-page 16                               Preliminary                                  2005 Microchip Technology Inc.
                                                                           PIC16F946

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 as
The Status register, shown in Register 2-1, contains:         `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 (SRAM)                 Status register, because these instructions do not affect
                                                              any Status bits. For other instructions not affecting any
The Status register can be the destination for any            Status bits (see Section 17.0 "Instruction Set
instruction, like any other register. If the Status register  Summary").
is the destination for an instruction that affects the Z,
DC or C bits, then the write to these three bits is               Note 1: The C and DC bits operate as a Borrow
disabled. These bits are set or cleared according to the                      and Digit Borrow out bit, respectively, in
device logic. Furthermore, the TO and PD bits are not                         subtraction. See the SUBLW and SUBWF
writable. Therefore, the result of an instruction with the                    instructions for examples.
Status register as destination may be different than
intended.

REGISTER 2-1:  STATUS STATUS REGISTER (ADDRESS: 03h, 83h, 103h OR 183h)

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

               bit 7

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 or low-order bit of the source register.

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

2005 Microchip Technology Inc.       Preliminary                         DS41265A-page 17
PIC16F946

2.2.2.2 Option Register                                   Note:    To achieve a 1:1 prescaler assignment for
                                                                   TMR0, assign the prescaler to the WDT by
The Option register is a readable and writable register,           setting PSA bit to `1' (OPTION_REG<3>).
which contains various control bits to configure:                  See Section 5.4 "Prescaler".

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

REGISTER 2-2:     OPTION_REG OPTION REGISTER (ADDRESS: 81h OR 181h)

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

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 RB0/INT/SEG0 pin
                  0 = Interrupt on falling edge of RB0/INT/SEG0 pin

                  T0CS: TMR0 Clock Source Select bit
                  1 = Transition on RA4/C1OUT/T0CKI/SEG4 pin
                  0 = Internal instruction cycle clock (CLKO)

                  T0SE: TMR0 Source Edge Select bit
                  1 = Increment on high-to-low transition on RA4/C1OUT/T0CKI/SEG4 pin
                  0 = Increment on low-to-high transition on RA4/C1OUT/T0CKI/SEG4 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

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

DS41265A-page 18                      Preliminary                         2005 Microchip Technology Inc.
                                                                               PIC16F946

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 is a readable and writable                    its corresponding enable bit or the global
register, which contains the various enable and flag bits         enable bit, GIE (INTCON<7>). User
for TMR0 register overflow, PORTB change and                      software should ensure the appropriate
external RB0/INT/SEG0 pin interrupts.                             interrupt flag bits are clear prior to
                                                                  enabling an interrupt.

REGISTER 2-3:  INTCON INTERRUPT CONTROL REGISTER (ADDRESS: 0Bh, 8Bh, 10Bh OR
               18Bh)

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

               GIE                PEIE  T0IE               INTE   RBIE   T0IF  INTF            RBIF

               bit 7                                                                           bit 0

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: TMR0 Overflow Interrupt Enable bit

               1 = Enables the TMR0 interrupt
               0 = Disables the TMR0 interrupt

bit 4          INTE: RB0/INT/SEG0 External Interrupt Enable bit

               1 = Enables the RB0/INT/SEG0 external interrupt

               0 = Disables the RB0/INT/SEF0 external interrupt

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

               1 = Enables the PORTB change interrupt

               0 = Disables the PORTB change interrupt

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

               1 = TMR0 register has overflowed (must be cleared in software)
               0 = TMR0 register did not overflow

bit 1          INTF: RB0/INT/SEG0 External Interrupt Flag bit

               1 = The RB0/INT/SEG0 external interrupt occurred (must be cleared in software)
               0 = The RB0/INT/SEG0 external interrupt did not occur

bit 0          RBIF: PORTB Change Interrupt Flag bit

               1 = When at least one of the PORTB <5:0> pins changed state (must be cleared in software)
               0 = None of the PORTB <7:4> 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.

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

2005 Microchip Technology Inc.        Preliminary                            DS41265A-page 19
PIC16F946

2.2.2.4 PIE1 Register                                       Note: Bit PEIE (INTCON<6>) must be set to
                                                                        enable any peripheral interrupt.
The PIE1 register contains the interrupt enable bits, as
shown in Register 2-1.

REGISTER 2-4:     PIE1 PERIPHERAL INTERRUPT ENABLE REGISTER 1 (ADDRESS: 8Ch)

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

                  EEIE          ADIE  RCIE                TXIE  SSPIE CCP1IE TMR2IE TMR1IE

                  bit 7                                                         bit 0

bit 7             EEIE: EE Write Complete Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 6             ADIE: A/D Converter Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 5             RCIE: USART Receive Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 4             TXIE: USART Transmit Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 3             SSPIE: Synchronous Serial Port (SSP) Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 2             CCP1IE: CCP1 Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 1             TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 0             TMR1IE: TMR1 Overflow Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

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

DS41265A-page 20                      Preliminary                            2005 Microchip Technology Inc.
                                                                    PIC16F946

2.2.2.5 PIE2 Register                                       Note: Bit PEIE (INTCON<6>) 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 (ADDRESS: 8Dh)

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

               OSFIE              C2IE  C1IE LCDIE             --   LVDIE           --   CCP2IE

               bit 7                                                                     bit 0

bit 7          OSFIE: Oscillator Fail Interrupt Enable bit

               1 = Enabled
               0 = Disabled

bit 6          C2IE: Comparator 2 Interrupt Enable bit

               1 = Enables Comparator 2 interrupt
               0 = Disables Comparator 2 interrupt

bit 5          C1IE: Comparator 1 Interrupt Enable bit

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

bit 4          LCDIE: LCD Module Interrupt Enable bit

               1 = LCD interrupt is enabled
               0 = LCD interrupt is disabled

bit 3          Unimplemented: Read as `0'

bit 2          LVDIE: Low Voltage Detect Interrupt Enable bit

               1 = Enables LVD Interrupt
               0 = Disables LVD Interrupt

bit 1          Unimplemented: Read as `0'

bit 0          CCP2IE: CCP2 Interrupt Enable bit (only available in PIC16F914/917)

               1 = Enables the CCP2 interrupt
               0 = Disables the CCP2 interrupt

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

2005 Microchip Technology Inc.           Preliminary                              DS41265A-page 21
PIC16F946

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 (INTCON<7>). 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 (ADDRESS: 0Ch)

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

                  EEIF       ADIF             RCIF      TXIF          SSPIF CCP1IF TMR2IF TMR1IF

                  bit 7                                                                            bit 0

bit 7             EEIF: EE Write Operation Interrupt Flag bit

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

bit 6             ADIF: A/D Converter Interrupt Flag bit

                  1 = The A/D conversion completed (must be cleared in software)
                  0 = The A/D conversion is not complete

bit 5             RCIF: USART Receive Interrupt Flag bit

                  1 = The USART receive buffer is full (cleared by reading RCREG)
                  0 = The USART receive buffer is not full

bit 4             TXIF: USART Transmit Interrupt Flag bit

                  1 = The USART transmit buffer is empty (cleared by writing to TXREG)
                  0 = The USART transmit buffer is full

bit 3             SSPIF: Synchronous Serial Port (SSP) Interrupt Flag bit

                  1 = The Transmission/Reception is complete (must be cleared in software)
                  0 = Waiting to Transmit/Receive

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: TMR2 to PR2 Interrupt Flag bit

                  1 = A TMR2 to PR2 match occurred (must be cleared in software)
                  0 = No TMR2 to PR2 match occurred

bit 0             TMR1IF: TMR1 Overflow Interrupt Flag bit

                  1 = The TMR1 register overflowed (must be cleared in software)
                  0 = The TMR1 register did not overflow

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

DS41265A-page 22                              Preliminary                     2005 Microchip Technology Inc.
                                                                         PIC16F946

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 (INTCON<7>). 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 (ADDRESS: 0Dh)

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

               OSFIF              C2IF     C1IF         LCDIF       --   LVDIF            --    CCP2IF

               bit 7                                                                            bit 0

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 2 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 1 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          LCDIF: LCD Module Interrupt bit

               1 = LCD has generated an interrupt
               0 = LCD has not generated an interrupt

bit 3          Unimplemented: Read as `0'

bit 2          LVDIF: Low Voltage Detect Interrupt Flag bit

               1 = LVD has generated an interrupt
               0 = LVD has not generated an interrupt

bit 1          Unimplemented: Read as `0'

bit 0          CCP2IF: CCP2 Interrupt Flag bit (only available in PIC16F914/917)

               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

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

2005 Microchip Technology Inc.           Preliminary                                    DS41265A-page 23
PIC16F946

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 software enable of
the BOR.

The PCON register bits are shown in Register 2-8.

REGISTER 2-8:     PCON POWER CONTROL REGISTER (ADDRESS: 8Eh)

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

bit 7-5           Unimplemented: Read as `0'
bit 4             SBOREN: Software BOR Enable bit(1)
                  1 = BOR enabled
bit 3-2           0 = BOR disabled
bit 1             Unimplemented: Read as `0'
                  POR: Power-on Reset Status bit
bit 0             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 for this bit to control the BOR.

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

DS41265A-page 24                      Preliminary                     2005 Microchip Technology Inc.
                                                                                          PIC16F946

2.3 PCL and PCLATH                                                 Note 1: There are no Status bits to indicate stack
                                                                               overflow or stack underflow conditions.
The Program Counter (PC) is 13 bits wide. The low
byte comes from the PCL register, which is a readable                     2: There are no instructions/mnemonics
and writable register. The high byte (PC<12:8>) is not                         called PUSH or POP. These are actions
directly readable or writable and comes from                                   that occur from the execution of the CALL,
PCLATH. On any Reset, the PC is cleared. Figure 2-3                            RETURN, RETLW and RETFIE instruc-
shows the two situations for the loading of the PC. The                        tions or the vectoring to an interrupt
upper example in Figure 2-3 shows how the PC is                                address.
loaded on a write to PCL (PCLATH<4:0>  PCH).
The lower example in Figure 2-3 shows how the PC is                2.4 Program Memory Paging
loaded during a CALL or GOTO instruction
(PCLATH<4:3>  PCH).

FIGURE 2-3:                LOADING OF PC IN                        The PIC16F946 device is capable of addressing a
                           DIFFERENT SITUATIONS                    continuous 8K word block of program memory. The
                                                                   CALL and GOTO instructions provide only 11 bits of
          PCH              PCL                                     address to allow branching within any 2K program
                                                                   memory page. When doing a CALL or GOTO instruction,
      12           87                 0   Instruction with         the upper 2 bits of the address are provided by
PC                                8                 PCL as         PCLATH<4:3>. When doing a CALL or GOTO instruction,
                                                                   the user must ensure that the page select bits are
                  PCLATH<4:0>                  Destination         programmed so that the desired program memory page
          5                                                        is addressed. If a return from a CALL instruction (or
                                         ALU Result                interrupt) is executed, the entire 13-bit PC is POPed off
                                                                   the stack. Therefore, manipulation of the PCLATH<4:3>
                   PCLATH                                          bits is not required for the RETURN instructions (which
                                                                   POPs the address from the stack).
              PCH  87      PCL
      12 11 10                                 0
PC                                                    GOTO, CALL   Note:    The contents of the PCLATH register are
                                                                            unchanged after a RETURN or RETFIE
2 PCLATH<4:3>                         11                                    instruction is executed. The user must
                                                     OPCODE<10:0>           rewrite the contents of the PCLATH regis-
                                                                            ter for any subsequent subroutine calls or
                   PCLATH                                                   GOTO instructions.

2.3.1 COMPUTED GOTO                                                Example 2-1 shows the calling of a subroutine in
                                                                   page 1 of the program memory. This example assumes
A computed GOTO is accomplished by adding an offset                that PCLATH is saved and restored by the Interrupt
to the program counter (ADDWF PCL). When perform-                  Service Routine (if interrupts are used).
ing a table read using a computed GOTO method, care
should be exercised if the table location crosses a PCL            EXAMPLE 2-1:     CALL OF A SUBROUTINE
memory boundary (each 256-byte block). Refer to the                                 IN PAGE 1 FROM PAGE 0
Application Note AN556, "Implementing a Table Read"
(DS00556).                                                                  ORG 0x500     ;Select page 1
                                                                            BCF PCLATH,4  ;(800h-FFFh)
2.3.2 STACK                                                                 BSF PCLATH,3  ;Call subroutine in
                                                                                          ;page 1 (800h-FFFh)
The PIC16F946 has an 8-level x 13-bit wide hardware                SUB1_P1  CALL SUB1_P1
stack (see Figure 2-1). The stack space is not part of                      :             ;page 1 (800h-FFFh)
either program or data space and the Stack Pointer is                       :
not readable or writable. The PC is PUSHed onto the                         ORG 0x900     ;called subroutine
stack when a CALL instruction is executed or an                                           ;page 1 (800h-FFFh)
interrupt causes a branch. The stack is POPed in the                        :
event of a RETURN, RETLW or a RETFIE instruction                                          ;return to
execution. PCLATH is not affected by a PUSH or POP                          :             ;Call subroutine
operation.                                                                  RETURN        ;in page 0
                                                                                          ;(000h-7FFh)
The stack operates as a circular buffer. This means that
after the stack has been PUSHed eight times, the ninth
PUSH overwrites the value that was stored from the
first PUSH. The tenth PUSH overwrites the second
PUSH (and so on).

2005 Microchip Technology Inc.         Preliminary                                      DS41265A-page 25
PIC16F946

2.5 Indirect Addressing, INDF and                                 EXAMPLE 2-2: INDIRECT ADDRESSING
         FSR Registers
                                                                        MOVLW      0x20      ;initialize pointer
The INDF register is not a physical register. Addressing                MOVWF      FSR       ;to RAM
the INDF register will cause indirect addressing.                 NEXTCLRF         INDF      ;clear INDF register
                                                                        INCF       FSR       ;inc pointer
Indirect addressing is possible by using the INDF                       BTFSS      FSR,4     ;all done?
register. Any instruction using the INDF register                       GOTO       NEXT      ;no clear next
actually accesses data pointed to by the File Select              CONTINUE                   ;yes continue
Register (FSR). Reading INDF itself indirectly will
produce 00h. Writing to the INDF register indirectly
results in a no operation (although Status bits may be
affected). An effective 9-bit address is obtained by
concatenating the 8-bit FSR register and the IRP bit
(STATUS<7>), as shown in Figure 2-4.

A simple program to clear RAM location 20h-2Fh using
indirect addressing is shown in Example 2-2.

FIGURE 2-4:       DIRECT/INDIRECT ADDRESSING PIC16F946

             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                                                1FFh

                                     Bank 0  Bank 1       Bank 2      Bank 3

Note:        For memory map detail, see Figure 2-1.

DS41265A-page 26                                         Preliminary                         2005 Microchip Technology Inc.
                                                                                PIC16F946

3.0 I/O PORTS                                                EXAMPLE 3-1: INITIALIZING PORTA

This device includes four 8-bit port registers along with    BCF    STATUS,RP0  ;Bank 0
their corresponding TRIS registers and one four bit          BCF    STATUS,RP1  ;
port:                                                        CLRF   PORTA       ;Init PORTA
                                                             BSF    STATUS,RP0  ;Bank 1
PORTA and TRISA                                            BCF    STATUS,RP1  ;
PORTB and TRISB                                            MOVLW  07h         ;Set RA<2:0> to
PORTC and TRISC                                            MOVWF  CMCON0      ;digital I/O
PORTD and TRISD                                            CLF    ANSEL       ;Make all PORTA I/O
PORTE and TRISE                                            MOVLW  F0h         ;Set RA<7:4> as inputs
PORTF and TRISF                                            MOVWF  TRISA       ;and set RA<3:0>
PORTG and TRISG                                                               ; as outputs
                                                             BCF    STATUS,RP0  ;Bank 0
3.1 PORTA and TRISA Registers                                                   ;
                                                             BCF    STATUS,RP1
PORTA is a 8-bit wide, bidirectional port. The
corresponding data direction register is TRISA
(Register 3-2). Setting a TRISA bit (= 1) will make the
corresponding PORTA pin an input (i.e., put the
corresponding output driver in a High-impedance mode).
Clearing a TRISA bit (= 0) will make the corresponding
PORTA pin an output (i.e., put the contents of the output
latch on the selected pin). Example 3-1 shows how to
initialize PORTA.

Five of the pins of PORTA can be configured as analog
inputs. These pins, RA5 and RA<3:0>, are configured
as analog inputs on device power-up and must be
reconfigured by the user to be used as I/O's. This is
done by writing the appropriate values to the CMCON0
and ANSEL registers (see Example 3-1).

Reading the PORTA register (Register 3-1) reads the
status of the pins, whereas writing to it will write to the
port latch. All write operations are read-modify-write
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.

The TRISA register controls the direction of the
PORTA pins, even when they are being used as analog
inputs. The user must ensure the bits in the TRISA
register are maintained set when using them as analog
inputs. I/O pins configured as analog input always read
`0'.

    Note 1: The CMCON0 (9Ch) register must be
                initialized to configure an analog channel
                as a digital input. Pins configured as
                analog inputs will read `0'.

           2: Analog lines that carry LCD signals
                (i.e., SEGx, COMy, where x and y are
                segment and common identifiers) are
                shown as direct connections to the device
                pins. The signals are outputs from the
                LCD module and may be tri-stated,
                depending on the configuration of the
                LCD module.

2005 Microchip Technology Inc.  Preliminary                                   DS41265A-page 27
PIC16F946

REGISTER 3-1:     PORTA PORTA REGISTER (ADDRESS: 05h)

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

bit 7-0           RA<7:0>: PORTA I/O Pin bits

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

REGISTER 3-2:     TRISA PORTA TRI-STATE REGISTER (ADDRESS: 85h)
                     R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
                    TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2                       R/W-1   R/W-1
                                                                                   TRISA1  TRISA0
                   bit 7
                                                                                                 bit 0

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

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

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

DS41265A-page 28                      Preliminary             2005 Microchip Technology Inc.
                                                                                   PIC16F946

3.1.1  PIN DESCRIPTIONS AND
       DIAGRAMS

Each PORTA pin is multiplexed with other functions. The
pins and their combined functions are briefly described
here. For specific information about individual functions,
refer to the appropriate section in this data sheet.

3.1.1.1 RA0/AN0/C1-/SEG12

Figure 3-1 shows the diagram for this pin. The
RA0/AN0/C1-/SEG12 pin is configurable to function as
one of the following:

a general purpose I/O
an analog input for the A/D
an analog input for Comparator 1
an analog output for the LCD

FIGURE 3-1:  BLOCK DIAGRAM OF RA0/AN0/C1-/SEG12

          Data Bus                D  Q
       WR PORTA
                                   CK Q                                       VDD
        WR TRISA                  Data Latch

                                  D  Q

                                                                                            I/O Pin

                      CK Q
                    TRIS Latch

                                                                  Analog Input or
                                                               SE12 and LCDEN

                                     RD TRISA  SE12 and LCDEN                      TTL
                                                                              Input Buffer

                                     RD PORTA

                    SEG12                                   SE12 and LCDEN

                                              To A/D Converter or Comparator

2005 Microchip Technology Inc.               Preliminary                                  DS41265A-page 29
PIC16F946

3.1.1.2 RA1/AN1/C2-/SEG7

Figure 3-2 shows the diagram for this pin. The
RA1/AN1/C2-/SEG7 pin is configurable to function as
one of the following:

a general purpose I/O
an analog input for the A/D
an analog input for Comparator 2
an analog output for the LCD

FIGURE 3-2:       BLOCK DIAGRAM OF RA1/AN1/C2-/SEG7

   Data Bus       D     Q
WR PORTA
                   CK Q                                             VDD
WR TRISA         Data Latch

                  D     Q

                                                                         I/O Pin

                    CK Q
                  TRIS Latch

                        RD TRISA  SE7 and LCDEN        Analog Input or
                                                     SE7 and LCDEN

                                                                TTL
                                                           Input Buffer

                        RD PORTA

                  SEG7                               SE7 and LCDEN

                                  To A/D Converter or Comparator

DS41265A-page 30                  Preliminary                        2005 Microchip Technology Inc.
                                                              PIC16F946

3.1.1.3 RA2/AN2/C2+/VREF-/COM2

Figure 3-3 shows the diagram for this pin. The
RA2/AN2/C2+/VREF-/COM2 pin is configurable to
function as one of the following:

a general purpose I/O
an analog input for the A/D
an analog input for Comparator 2
a voltage reference input for the A/D
an analog output for the LCD

FIGURE 3-3:  BLOCK DIAGRAM OF RA2/AN2/C2+/VREF-/COM2

   Data Bus  D                    Q
WR PORTA
               CK Q                                                        VDD
WR TRISA    Data Latch
                                                                Analog Input or
             D                    Q                                  LCDEN and

                                                              LMUX<1:0> = 1X      I/O Pin
                                                                         TTL
               CK Q
             TRIS Latch                                             Input Buffer

                                  RD TRISA  LCDEN and
                                            LMUX<1:0> = 1X

                                  RD PORTA

             COM2                                  LCDEN and
                                            LMUX<1:0> = 1X

             To A/D Converter or Comparator

             To A/D Module VREF- Input

2005 Microchip Technology Inc.            Preliminary                           DS41265A-page 31
PIC16F946

3.1.1.4 RA3/AN3/C1+/VREF+/SEG15

Figure 3-4 shows the diagram for this pin. The

RA3/AN3/C1+/VREF+/COM3/SEG15             pin       is

configurable to function as one of the following:

a general purpose input
an analog input for the A/D
a voltage reference input for the A/D
analog outputs for the LCD

FIGURE 3-4:       BLOCK DIAGRAM OF RA3/AN3/C1+/VREF+/SEG15

                Data Bus  D              Q
             WR PORTA
                                                                       VDD
              WR TRISA
                           CK Q
                          Data Latch

                          D              Q                                             I/O Pin

                            CK Q                                                  VSS
                          TRIS Latch
                                                                      Analog Input or
                                                                   SE15 and LCDEN

                              RD TRISA             SE15 and LCDEN           TTL
                                                                       Input Buffer

                                      RD PORTA         SE15 and LCDEN
                          SEG15

                          To A/D Module VREF+ Input

DS41265A-page 32                                   Preliminary          2005 Microchip Technology Inc.
                                                                               PIC16F946

3.1.1.5 RA4/C1OUT/T0CKI/SEG4

Figure 3-5 shows the diagram for this pin. The
RA4/C1OUT/T0CKI/SEG4 pin is configurable to
function as one of the following:

a general purpose I/O
a digital output from Comparator 1
a clock input for TMR0
an analog output for the LCD

FIGURE 3-5:  BLOCK DIAGRAM OF RA4/C1OUT/T0CKI/SEG4

                                     CM<2:0> = 110 or 101

                                                  C1OUT
                                                              1

                Data Bus          D  Q            0
             WR PORTA
                                                                          VDD
              WR TRISA
                                   CK Q
                                  Data Latch

                                  D  Q                                                   I/O Pin

                                    CK Q                                  VSS
                                  TRIS Latch
                                                  SE4 and LCDEN    Analog Input or
                                        RD TRISA                 SE4 and LCDEN

                                                                            TTL
                                                                       Input Buffer

                                     RD PORTA

                                                                          SE4 and LCDEN

                          T0CKI                                  Schmitt
                          SEG4                                   Trigger

                                        SE4 and LCDEN

2005 Microchip Technology Inc.                  Preliminary                            DS41265A-page 33
PIC16F946

3.1.1.6 RA5/AN4/C2OUT/SS/SEG5

Figure 3-6 shows the diagram for this pin. The
RA5/AN4/C2OUT/SS/SEG5 pin is configurable to
function as one of the following:

a general purpose I/O
a digital output from Comparator 2
a slave select input
an analog output for the LCD
an analog input for the A/D

FIGURE 3-6:       BLOCK DIAGRAM OF RA5/AN4/C2OUT/SS/SEG5

                       CM<2:0> = 110 or 101

                               C2OUT
                                           1

   Data Bus       D     Q                       0
WR PORTA
                   CK Q                                         VDD
WR TRISA         Data Latch
                                                                VSS
                  D     Q                            Analog Input or  I/O Pin
                                                   SE5 and LCDEN
                    CK Q
                  TRIS Latch                                  TTL

                  RD TRISA SE5 and LCDEN

                        RD PORTA

                  To SS Input

                               SE5 and LCDEN

                  SEG5

                  AN4

DS41265A-page 34               Preliminary                2005 Microchip Technology Inc.
                                                                                 PIC16F946

3.1.1.7 RA6/OSC2/CLKO/T1OSO

Figure 3-7 shows the diagram for this pin. The
RA6/OSC2/CLKO/T1OSO pin is configurable to
function as one of the following:

a general purpose I/O
a crystal/resonator connection
a clock output
a TMR1 oscillator connection

FIGURE 3-7:         BLOCK DIAGRAM OF RA6/OSC2/CLKO/T1OSO

                                     FOSC = 1x1               From OSC1 Oscillator
                                                                                   Circuit

                                  CLKO (FOSC/4)
                                                        1

          Data Bus  D             Q              0
       WR PORTA
                                                                                 VDD
        WR TRISA
FOSC = 00x, 010      CK Q
                    Data Latch
     or T1OSCEN
                    D             Q                                                        RA6/OSC2/
                                                                                           CLKO/T1OSO
                      CK Q                                                                 Pin
                    TRIS Latch
                                                                                 VSS

                                                              FOSC = 00x, 010
                                                                  or T1OSCEN

                                                                         TTL
                                                                   Input Buffer

                    RD TRISA

                                  RD PORTA

2005 Microchip Technology Inc.                 Preliminary                                DS41265A-page 35
PIC16F946

3.1.1.8 RA7/OSC1/CLKI/T1OSI

Figure 3-8 shows the diagram for this pin. The
RA7/OSC1/CLKI/T1OSI pin is configurable to function
as one of the following:

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

FIGURE 3-8:        BLOCK DIAGRAM OF RA7/OSC1/CLKI/T1OSI

                                 From OSC1 Oscillator                    FOSC = 011
                                                    Circuit                                    VDD

         Data Bus  D      Q
      WR PORTA
                    CK Q
                   Data Latch

                   D      Q                                                                                       RA7/OSC1/
                                                                                                                  CLKI/T1OSI
         WR TRISA    CK Q                                                                                         Pin
      FOSC = 10x   TRIS Latch
                                                                       FOSC = 10x

                                                                            TTL
                                                                       Input Buffer

                          RD TRISA

                               RD PORTA

TABLE 3-1: SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

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

05h   PORTA        RA7    RA6       RA5    RA4       RA3          RA2    RA1         RA0 xxxx xxxx uuuu uuuu

10h   T1CON        T1GINV T1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 uuuu uuuu

14h   SSPCON       WCOL SSPOV SSPEN        CKP       SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000

1Fh   ADCON0       ADFM VCFG1 VCFG0 CHS2             CHS1         CHS0 GO/DONE ADON 0000 0000 0000 0000

81h/181h OPTION_REG RBPU INTEDG T0CS       T0SE      PSA          PS2    PS1         PS0 1111 1111 1111 1111

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

91h   ANSEL        ANS7 ANS6 ANS5          ANS4      ANS3         ANS2   ANS1        ANS0 1111 1111 1111 1111

9Ch   CMCON0       C2OUT C1OUT C2INV C1INV                   CIS  CM2    CM1         CM0 0000 0000 0000 0000

107h  LCDCON       LCDEN  SLPEN  WERR      VLCDEN    CS1          CS0    LMUX1       LMUX0  0001 0011 0001 0011
11Ch  LCDSE0(1)      SE7    SE6   SE5         SE4    SE3          SE2      SE1         SE0  0000 0000 uuuu uuuu
11Dh  LCDSE1(1)     SE15   SE14  SE13        SE12    SE11         SE10     SE9         SE8  0000 0000 uuuu uuuu

Legend: x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTA.
Note 1: This register is only initialized by a POR or BOR and is unchanged by other Resets.

DS41265A-page 36                           Preliminary                               2005 Microchip Technology Inc.
                                                                PIC16F946

3.2 PORTB and TRISB Registers                            3.3 Additional PORTB Pin Functions

PORTB is a general purpose I/O port with similar         RB<7:6> are used as data and clock signals, respectively,
functionality as the PIC16F914. All PORTB pins can have  for both serial programming and the in-circuit debugger
a weak pull-up feature, and PORTB<7:4> implements an     features on the device. Also, RB0 can be configured as an
interrupt-on-input change function.                      external interrupt input.

PORTB is also used for the Serial Flash programming      3.3.1 WEAK PULL-UPS
interface.
                                                         Each of the PORTB pins has an individually configurable
Note:  Analog lines that carry LCD signals               internal weak pull-up. Control bits WPUB<7:0> enable or
       (i.e., SEGx, COMy, where x and y are seg-         disable each pull-up. Refer to Register 3-6. Each weak
       ment and common identifiers) are shown            pull-up is automatically turned off when the port pin is
       as direct connections to the device pins.         configured as an output. The pull-ups are disabled on a
       The signals are outputs from the LCD              Power-on Reset by the RBPU bit (OPTION_REG<7>).
       module and may be tri-stated, depending
       on the configuration of the LCD module.           3.3.2 INTERRUPT-ON-CHANGE

EXAMPLE 3-2: INITIALIZING PORTB                          Four of the PORTB pins are individually configurable
                                                         as an interrupt-on-change pin. Control bits IOCB<7:4>
BCF    STATUS,RP0 ;Bank 0                                enable or disable the interrupt function for each pin.
BCF                                                      Refer to Register 3-5. The interrupt-on-change feature
CLRF   STATUS,RP1 ;                                      is disabled on a Power-on Reset.
BSF
BCF    PORTB  ;Init PORTB                                For enabled interrupt-on-change pins, the values are
MOVLW                                                    compared with the old value latched on the last read of
MOVWF  STATUS,RP0 ;Bank 1                                PORTB. The `mismatch' outputs of the last read are
BCF                                                      OR'd together to set the PORTB Change Interrupt Flag
BCF    STATUS,RP1 ;                                      bit (RBIF) in the INTCON register (Register 2-3).

       FFh    ;Set RB<7:0> as inputs

       TRISB  ;

       STATUS,RP0 ;Bank 0

       STATUS,RP1 ;

                                                         This interrupt can wake the device from Sleep. The user,
                                                         in the Interrupt Service Routine, clears the interrupt by:

                                                         a) Any read or write of PORTB. This will end the
                                                               mismatch condition.

                                                         b) Clear the flag bit RBIF.

                                                         A mismatch condition will continue to set flag bit RBIF.
                                                         Reading or writing PORTB will end the mismatch con-
                                                         dition and allow flag bit RBIF to be cleared. The latch
                                                         holding the last read value is not affected by a MCLR
                                                         nor Brown-out Reset. After these Resets, the RBIF flag
                                                         will 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.

2005 Microchip Technology Inc.      Preliminary               DS41265A-page 37
PIC16F946

REGISTER 3-3:     PORTB PORTB REGISTER (ADDRESS: 06h OR 106h)

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

bit 7-0           RB<7:0>: PORTB I/O Pin bits

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

REGISTER 3-4:     TRISB PORTB TRI-STATE REGISTER (ADDRESS: 86h, 186h)
                     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                       R/W-1
                                                                                          TRISB0
                   bit 7
                                                                                                bit 0

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

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

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

REGISTER 3-5:     IOCB PORTB INTERRUPT-ON-CHANGE REGISTER (ADDRESS: 96h)

                  R/W-0 R/W-0 R/W-0 R/W-0                   U-0  U-0               U-0    U-0
                                                                                          --
                  IOCB7 IOCB6 IOCB5 IOCB4                   --   --                --
                                                                                             bit 0
                  bit 7

bit 7-4           IOCB<7:4>: Interrupt-on-Change bits
bit 3-0           1 = Interrupt-on-change enabled
                  0 = Interrupt-on-change disabled

                  Unimplemented: Read as `0'

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

DS41265A-page 38                      Preliminary                2005 Microchip Technology Inc.
                                                     PIC16F946

REGISTER 3-6:  WPUB WEAK PULL-UP REGISTER (ADDRESS: 95h)
                  R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
                 WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2         R/W-1   R/W-1
                                                            WPUB1   WPUB0
               bit 7
                                                                          bit 0

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

                  Note 1: Global RBPU must be enabled for individual pull-ups to be enabled.
                         2: The weak pull-up device is automatically disabled if the pin is in Output mode
                              (TRISB<7:0> = 0).

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

2005 Microchip Technology Inc.   Preliminary              DS41265A-page 39
PIC16F946

3.3.3  PIN DESCRIPTIONS AND
       DIAGRAMS

Each PORTB pin is multiplexed with other functions. The
pins and their combined functions are briefly described
here. For specific information about individual functions
such as the LCD or interrupts, refer to the appropriate
section in this data sheet.

3.3.3.1 RB0/INT/SEG0

Figure 3-9 shows the diagram for this pin. The
RB0/INT/SEG0 pin is configurable to function as one of
the following:

a general purpose I/O
an external edge triggered interrupt
an analog output for the LCD

3.3.3.2 RB1/SEG1

Figure 3-9 shows the diagram for this pin. The
RB1/SEG1 pin is configurable to function as one of the
following:

a general purpose I/O
an analog output for the LCD

3.3.3.3 RB2/SEG2

Figure 3-9 shows the diagram for this pin. The
RB2/SEG2 pin is configurable to function as one of the
following:

a general purpose I/O
an analog output for the LCD

3.3.3.4 RB3/SEG3

Figure 3-9 shows the diagram for this pin. The
RB3/SEG3 pin is configurable to function as one of the
following:

a general purpose I/O
an analog output for the LCD

DS41265A-page 40             Preliminary                   2005 Microchip Technology Inc.
                                                                                       PIC16F946

FIGURE 3-9:  BLOCK DIAGRAM OF RB<3:0>

                                                    SE<3:0>                       VDD

RBPU(1)                                                                           P  Weak     VDD
                                                                                     Pull-up

Data Bus D                        Q

WR PORTB                                                                                           I/O Pin

              CK
             Data Latch

             D                    Q

WR TRISB       CK
             TRIS Latch
                                     SE<3:0> and LCDEN
                   RD TRISB
                                                                          TTL
                                                                    Input Buffer

             SEG<3:0>                RD PORTB
             INT(2)                                SE<3:0> and LCDEN

                                     SE0 and LCDEN

                                                    Schmitt
                                                    Trigger

Note 1: To enable weak pull-ups, set the appropriate TRIS bit(s) and clear the RBPU bit.
        2: RB0 only.

2005 Microchip Technology Inc.     Preliminary                                              DS41265A-page 41
PIC16F946

3.3.3.5 RB4/COM0

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

a general purpose I/O
an analog output for the LCD

FIGURE 3-10:      BLOCK DIAGRAM OF RB4/COM0

                                                        LCDEN         VDD

     RBPU(1)                                                          P  Weak     VDD
   Data Bus                                                              Pull-up
WR PORTB
                  D  Q
WR TRISB
                                                                                          I/O Pin

                   CK
                  Data Latch

                  D  Q

                    CK        LCDEN
                  TRIS Latch

                                                             TTL
                                                        Input Buffer

                  RD TRISB

                  RD PORTB                                     Q  D

Set RBIF                      LCDEN                               EN        RD PORTB
                                                                           FOSC/4
From other                                                     Q  D
RB<7:4> pins
                                                                  EN

COM0                          LCDEN

Note 1: To enable weak pull-ups, set the appropriate TRIS bit(s) and clear the RBPU bit.

DS41265A-page 42                     Preliminary                         2005 Microchip Technology Inc.
                                                                                     PIC16F946

3.3.3.6 RB5/COM1

Figure 3-11 shows the diagram for this pin. The
RB5/COM1 pin is configurable to function as one of the
following:

a general purpose I/O
an analog output for the LCD

FIGURE 3-11:  BLOCK DIAGRAM OF RB5/COM1

                                     LCDEN and LMUX<1:0>  00                      VDD

     RBPU(1)                                                                      P  Weak     VDD
   Data Bus                                                                          Pull-up
WR PORTB
              D                   Q
WR TRISB
                                                                                                   I/O Pin

               CK
              Data Latch

              D                   Q

                CK                   LCDEN and LMUX<1:0>  00
              TRIS Latch
                                                                          TTL
                                                                    Input Buffer

              RD TRISB

              RD PORTB                                        Q  D

Set RBIF                                                         EN                     FOSC/4
                                                                                       RD PORTB
From other                                                    Q  D
RB<7:4> pins
                                     LCDEN and                   EN

                                     LMUX<1:0>  00

COM1                              LCDEN and LMUX<1:0>  00

Note 1: To enable weak pull-ups, set the appropriate TRIS bit(s) and clear the RBPU bit.

2005 Microchip Technology Inc.     Preliminary                                              DS41265A-page 43
PIC16F946

3.3.3.7 RB6/ICSPCLK/ICDCK/SEG14

Figure 3-12 shows the diagram for this pin. The
RB6/ICSPCLK/ICDCK/SEG14 pin is configurable to
function as one of the following:

a general purpose I/O
an In-Circuit Serial ProgrammingTM clock
an ICD clock I/O
an analog output for the LCD

FIGURE 3-12:      BLOCK DIAGRAM OF RB6/ICSPCLK/ICDCK/SEG14

                  Program Mode/ICD                           VDD
                  RBPU(1)
                  SE14 and LCDEN                             P  Weak                 VDD
                                                                Pull-up

   Data Bus       D  Q
WR PORTB
                                                                                               I/O Pin
WR TRISB
                   CK
                  Data Latch

                  D  Q

                    CK                                                      TTL
                  TRIS Latch                                           Input Buffer

                  RD TRISB                            SE14 and LCDEN

                  RD PORTB                            Q  D

Set RBIF                                                 EN                          RD PORTB
                                                                                     FOSC/4
From other                                            Q  D
RB<7:4> pins
                                    Program Mode/ICD

                                                         EN

                  SE14 and LCDEN

PGC                                 Schmitt
                                    Trigger Buffer

                                                        SE14 and LCDEN

SEG14

Note 1: To enable weak pull-ups, set the appropriate TRIS bit(s) and clear the RBPU bit.

DS41265A-page 44                    Preliminary                   2005 Microchip Technology Inc.
                                                                                     PIC16F946

3.3.3.8 RB7/ICSPDAT/ICDDAT/SEG13

Figure 3-13 shows the diagram for this pin. The
RB7/ICSPDAT/ICDDAT/SEG13 pin is configurable to
function as one of the following:

a general purpose I/O
an In-Circuit Serial ProgrammingTM I/O
an ICD data I/O
an analog output for the LCD

FIGURE 3-13:  BLOCK DIAGRAM OF RB7/ICSPDAT/ICDDAT/SEG13

PORT/Program Mode/ICD                                                      VDD

                            PGD                                            P         Weak
                                     RBPU(1)                                         Pull-up
                                     SE13 and LCDEN

                                                                                              VDD

     Data Bus                     D  Q                    1
WR PORTB                                                 0
                                                                                                   I/O Pin
   WR TRISB                                          0
PGD DRVEN                          CK                1
                                  Data Latch

                                  D  Q

                                    CK
                                  TRIS Latch

                                                                            TTL
                                                                       Input Buffer

                                  RD TRISB             SE13 and LCDEN

                                  RD PORTB                        Q    D

Set RBIF                                                               EN            RD PORTB

From other                                                        Q    D
RB<7:4> pins
                                     Program Mode/ICD
     PGD
     SEG13                                                             EN            FOSC/4

                                  SE13 and LCDEN

                                                       Schmitt         SE13 and LCDEN
                                                       Trigger Buffer

Note 1: To enable weak pull-ups, set the appropriate TRIS bit(s) and clear the RBPU bit.

2005 Microchip Technology Inc.                     Preliminary                              DS41265A-page 45
PIC16F946

TABLE 3-2: SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

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

06h/106h   PORTB        RB7     RB6     RB5     RB4     RB3     RB2     RB1     RB0   xxxx xxxx                      uuuu uuuu
86h/186h   TRISB      TRISB7  TRISB6  TRISB5  TRISB4  TRISB3  TRISB2  TRISB1  TRISB0  1111 1111                      1111 1111
0Bh/8Bh/   INTCON                                                                     0000 000x                      0000 000x
10Bh/18Bh               GIE    PEIE     T0IE   INTE    RBIE     T0IF   INTF    RBIF
95h                                                                                                                  1111 1111
96h        WPUB       WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 1111 1111                                      0000 ----
107h                                                                                                                 0001 0011
11Ch       IOCB       IOCB7 IOCB6 IOCB5 IOCB4         --      --      --      --      0000 ----                      uuuu uuuu
11Dh                                                                                                                 uuuu uuuu
Legend:    LCDCON     LCDEN   SLPEN   WERR    VLCDEN  CS1     CS0     LMUX1   LMUX0   0001 0011
Note 1:    LCDSE0(1)    SE7     SE6    SE5       SE4  SE3     SE2       SE1     SE0   0000 0000
           LCDSE1(1)   SE15    SE14   SE13      SE12  SE11    SE10      SE9     SE8   0000 0000

           x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTB.
           This register is only initialized by a POR or BOR and is unchanged by other Resets.

DS41265A-page 46                              Preliminary                      2005 Microchip Technology Inc.
                                                                             PIC16F946

3.4 PORTC and TRISC Registers                           EXAMPLE 3-3: INITIALIZING PORTC

PORTC is an 8-bit bidirectional port. PORTC is          BCF    STATUS,RP0 ;Bank 0
multiplexed with several peripheral functions. PORTC    BCF
pins have Schmitt Trigger input buffers.                CLRF   STATUS,RP1 ;
                                                        BSF
All PORTC pins have latch bits (PORTC register).        BCF    PORTC   ;Init PORTC
They, when written, will modify the contents of the     MOVLW
PORTC latch; thus, modifying the value driven out on    MOVWF  STATUS,RP0 ;Bank 1
a pin if the corresponding TRISC bit is configured for  BCF
output.                                                 BSF    STATUS,RP1 ;
                                                        CLRF
                                                               FFh     ;Set RC<7:0> as inputs
                                                        BCF
                                                        BCF    TRISC   ;

                                                               STATUS,RP0 ;Bank 2

                                                               STATUS,RP1 ;

                                                               LCDCON  ;Disable VLCD<3:1>

Note:  Analog lines that carry LCD signals                             ;inputs on RC<2:0>
       (i.e., SEGx, VLCDy, where x and y are
       segment and LCD bias voltage identifiers)               STATUS,RP0 ;Bank 0
       are shown as direct connections to the
       device pins. The signals are outputs from               STATUS,RP1 ;
       the LCD module and may be tri-stated,
       depending on the configuration of the LCD
       module.

REGISTER 3-7:   PORTC PORTC REGISTER (ADDRESS: 07h)

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

       bit 7-0  RC<7:0>: PORTC I/O Pin bits

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

REGISTER 3-8:   TRISC PORTC TRI-STATE REGISTER (ADDRESS: 87h)
                   R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
                  TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2                         R/W-1   R/W-1
                                                                                   TRISC1  TRISC0
                 bit 7
                                                                                                 bit 0

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

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

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

2005 Microchip Technology Inc.       Preliminary                                 DS41265A-page 47
PIC16F946

3.4.1  PIN DESCRIPTIONS AND                                3.4.1.3 RC2/VLCD3
       DIAGRAMS
                                                           Figure 3-16 shows the diagram for this pin. The
Each PORTC pin is multiplexed with other functions. The    RC2/VLCD3 pin is configurable to function as one of
pins and their combined functions are briefly described    the following:
here. For specific information about individual functions
such as the LCD or SSP, refer to the appropriate section    a general purpose I/O
in this data sheet.                                        an analog input for the LCD bias voltage

3.4.1.1 RC0/VLCD1

Figure 3-14 shows the diagram for this pin. The
RC0/VLCD1 pin is configurable to function as one of
the following:

a general purpose I/O
an analog input for the LCD bias voltage

3.4.1.2 RC1/VLCD2

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

a general purpose I/O
an analog input for the LCD bias voltage

FIGURE 3-14:         BLOCK DIAGRAM OF RC0/VLCD1

           Data Bus  D  Q                                                  VDD
       WR PORTC
                      CK Q                                                           RC0/VLCD1
        WR TRISC     Data Latch                                                      Pin

                     D  Q

                       CK Q
                     TRIS Latch

                                 (VLCDEN and LMUX<1:0>  00)

                     RD TRISC

                                                                  Schmitt
                                                                  Trigger

                     RD PORTC

                                      (VLCDEN and LMUX<1:0>  00)

       VLCD1

DS41265A-page 48                 Preliminary                      2005 Microchip Technology Inc.
                                                                 PIC16F946

FIGURE 3-15:  BLOCK DIAGRAM OF RC1/VLCD2

    Data Bus  D                   Q                                       VDD
WR PORTC
               CK Q                                                                 RC1/VLCD2
WR TRISC     Data Latch                                                            Pin

              D                   Q

                CK Q
              TRIS Latch

                                     (VLCDEN and LMUX<1:0>  00)

              RD TRISC

                                                                 Schmitt
                                                                 Trigger

               RD PORTC              (VLCDEN and LMUX<1:0>  00)
VLCD2

FIGURE 3-16:  BLOCK DIAGRAM OF RC2/VLCD3

    Data Bus  D                   Q                                                    VDD
WR PORTC                                                                                          RC2/VLCD3
              CK Q                                                                                Pin
WR TRISC
              Data Latch                                            Schmitt
                                                                    Trigger
              D                   Q
                                                  VLCDEN
                CK Q
              TRIS Latch

                                     VLCDEN

              RD TRISC

                 RD PORTC
VLCD3

2005 Microchip Technology Inc.     Preliminary                          DS41265A-page 49
PIC16F946

3.4.1.4 RC3/SEG6

Figure 3-17 shows the diagram for this pin. The
RC3/SEG6 pin is configurable to function as one of the
following:

a general purpose I/O
an analog output for the LCD

FIGURE 3-17:      BLOCK DIAGRAM OF RC3/SEG6

    Data Bus      D  Q                                                                   VDD
WR PORTC                                                                                            RC3/SEG6
                  CK Q                                                                              Pin
WR TRISC
                  Data Latch                                           Schmitt
                                                                       Trigger
                  D  Q

                    CK Q
                  TRIS Latch

                              SE6 and LCDEN

                  RD TRISC

                  RD PORTC

SEG6                                                    SE6 and LCDEN

DS41265A-page 50              Preliminary                               2005 Microchip Technology Inc.
                                                                             PIC16F946

3.4.1.5 RC4/T1G/SDO/SEG11

Figure 3-18 shows the diagram for this pin. The
RC4//T1G/SDO/SEG11pin is configurable to function
as one of the following:

a general purpose I/O
a TMR1 gate input
a serial data output
an analog output for the LCD

FIGURE 3-18:  BLOCK DIAGRAM OF RC4/T1G/SDO/SEG11

                                  PORT/SDO Select

                                     SDO
                                                    0

    Data Bus  D                   Q                1
WR PORTC
                CK Q                                                         VDD
WR TRISC     Data Latch
                                                                                    RC4/T1G/
              D                   Q                                                 SDO/SEG11
                                                                                    Pin
                CK Q                                                         VSS
              TRIS Latch

              RD TRISC

                                     SE11 and LCDEN                 Schmitt
                                                                    Trigger

                                                       Q        D

                                                                EN  Q1

                                  RD PORTC

              Timer1 Gate            SE11 and LCDEN
              SEG11

2005 Microchip Technology Inc.                   Preliminary               DS41265A-page 51
PIC16F946

3.4.1.6 RC5/T1CKI/CCP1/SEG10

Figure 3-19 shows the diagram for this pin. The
RC5/T1CKI/CCP1/SEG10 pin is configurable to
function as one of the following:

a general purpose I/O
a TMR1 clock input
a Capture input, Compare output or PWM output
an analog output for the LCD

FIGURE 3-19:      BLOCK DIAGRAM OF RC5/T1CKI/CCP1/SEG10

(PORT/CCP1 Select) and CCPMX

                     CCP1 Data Out
                                                  0

Data Bus          D  Q         1

WR PORTC            CK Q                                                   VDD
                  Data Latch
                                                                                   RC5/T1CKI/
                  D  Q                                                             CCP1/SEG10
                                                                                   Pin
WR TRISC            CK Q                                                   VSS
                  TRIS Latch

                  RD TRISC                                        Schmitt
                                SE10 and LCDEN                    Trigger

                     RD PORTC

                  Timer1 Gate  SE10 and LCDEN
                  SEG10

DS41265A-page 52                                     Preliminary            2005 Microchip Technology Inc.
                                                                          PIC16F946

3.4.1.7 RC6/TX/CK/SCK/SCL/SEG9

Figure 3-20 shows the diagram for this pin. The
RC6/TX/CK/SCK/SCL/SEG9 pin is configurable to
function as one of the following:

a general purpose I/O
an asynchronous serial output
a synchronous clock I/O
a SPI clock I/O
an I2C data I/O
an analog output for the LCD

FIGURE 3-20:         BLOCK DIAGRAM OF RC6/TX/CK/SCK/SCL/SEG9

PORT/SCEN/SSP Mode Select(1)

                                  I2CTM Data Out
                                                              0

                        TX/CK Data Out
                                                      1

                                  SCK Data Out  2

Data Bus D                        Q             3

WR PORTC               CK Q                                                                             VDD
                     Data Latch
                                                                                                               RC6/TX/
                     D            Q                                                                            CK/SCK/
                                                                                                               SCL/SEG9
WR TRISC               CK Q                                                                             VSS Pin
                     TRIS Latch

SCEN or I2CTM Drive  RD TRISC

                                     SE9 and LCDEN               Schmitt
                                                                 Trigger

                                  RD PORTC

                     CK/SCL/SCK Input

                                     SE9 and LCDEN

                     SEG9

Note 1:       If all three data output sources are enabled, the following priority order will be used:
               USART data
               SSP data
               PORT data

2005 Microchip Technology Inc.                Preliminary                                             DS41265A-page 53
PIC16F946

3.4.1.8 RC7/RX/DT/SDI/SDA/SEG8

Figure 3-21 shows the diagram for this pin. The
RC7/RX/DT/SDI/SDA/SEG8 pin is configurable to
function as one of the following:

a general purpose I/O
an asynchronous serial input
a synchronous serial data I/O
a SPI data I/O
an I2C data I/O
an analog output for the LCD

FIGURE 3-21:      BLOCK DIAGRAM OF RC7/RX/DT/SDI/SDA/SEG8

SCEN/I2CTM Mode Select(1)

                 DT Data Out
                                      0

              I2CTM Data Out 1

PORT/(SCEN or I2CTM) Select                                      VDD

                                         0                                  RC7/RX/DT/
                                         1                                  SDI/SDA/
                                                                            SEG8
    Data Bus        DQ                                                      Pin
WR PORTC            CK Q
                  Data Latch
WR TRISC           DQ
                     CK Q
                  TRIS Latch

                                         SE8 and LCDEN

     I2CTM Drive  RD TRISC                              Schmitt
or SCEN Drive                                           Trigger

                  RD PORTC

RX/SDI Input

                                         SE8 and LCDEN

SEG8

Note 1: If SSP and USART outputs are both enabled, the USART data output will have priority over the
              SSP data output. Both SSP and USART data outputs will have priority over the PORT data
              output.

DS41265A-page 54                         Preliminary             2005 Microchip Technology Inc.
                                                                             PIC16F946

TABLE 3-3: SUMMARY OF REGISTERS ASSOCIATED WITH PORTC

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

07h   PORTC      RC7              RC6    RC5    RC4     RC3    RC2    RC1    RC0 xxxx xxxx uuuu uuuu

10h   T1CON      T1GINV T1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 uuuu uuuu

14h   SSPCON     WCOL SSPOV SSPEN               CKP     SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000

17h   CCP1CON    --               --     CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

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

87h   TRISC      TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 1111 1111 1111 1111

107h  LCDCON     LCDEN            SLPEN  WERR   VLCDEN  CS1    CS0    LMUX1  LMUX0  0001 0011 0001 0011
11Ch  LCDSE0(1)    SE7              SE6   SE5      SE4  SE3    SE2      SE1    SE0  0000 0000 uuuu uuuu
11Dh  LCDSE1(1)   SE15             SE14  SE13     SE12  SE11   SE10     SE9    SE8  0000 0000 uuuu uuuu

Legend: x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTC.
Note 1: This register is only initialized by a POR or BOR and is unchanged by other Resets.

2005 Microchip Technology Inc.                Preliminary                                                       DS41265A-page 55
PIC16F946

3.5 PORTD and TRISD Registers                               EXAMPLE 3-4: INITIALIZING PORTD

PORTD is an 8-bit port with Schmitt Trigger input buffers.  BCF    STATUS,RP0 ;Bank 0
Each pin is individually configured as an input or output.  BCF
                                                            CLRF   STATUS,RP1 ;
PORTD is only available on the PIC16F946 and                BSF
PIC16F946.                                                  BCF    PORTD  ;Init PORTD
                                                            MOVLW
                                                            MOVWF  STATUS,RP0 ;Bank 1
                                                            BCF
                                                            BCF    STATUS,RP1 ;

Note:  Analog lines that carry LCD signals                         FFh    ;Set RD<7:0> as inputs
       (i.e., SEGx, COMy, where x and y are seg-
       ment and common identifiers) are shown                      TRISD  ;
       as direct connections to the device pins.
       The signals are outputs from the LCD                        STATUS,RP0 ;Bank 0
       module and may be tri-stated, depending
       on the configuration of the LCD module.                     STATUS,RP1 ;

REGISTER 3-9:     PORTD PORTD REGISTER (ADDRESS: 08h)

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

       bit 7-0    RD<7:0>: PORTD I/O Pin bits

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

REGISTER 3-10:    TRISD PORTD TRI-STATE REGISTER (ADDRESS: 88h)
                     R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
                    TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2                           R/W-1   R/W-1
                                                                                       TRISD1  TRISD0
                   bit 7
                                                                                                     bit 0

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

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

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

DS41265A-page 56                      Preliminary                         2005 Microchip Technology Inc.
3.5.1  PIN DESCRIPTIONS AND                                              PIC16F946
       DIAGRAMS
                                                           3.5.1.7 RD6/SEG19
Each PORTD pin is multiplexed with other functions. The    Figure 3-25 shows the diagram for this pin. The
pins and their combined functions are briefly described    RD6/SEG19 pin is configurable to function as one of
here. For specific information about individual functions  the following:
such as the comparator or the A/D, refer to the             a general purpose I/O
appropriate section in this data sheet.                     an analog output for the LCD

3.5.1.1 RD0/COM3                                           3.5.1.8 RD7/SEG20
                                                           Figure 3-25 shows the diagram for this pin. The
Figure 3-22 shows the diagram for this pin. The            RD7/SEG20 pin is configurable to function as one of
RD0/COM3 pin is configurable to function as one of the     the following:
following:                                                 a general purpose I/O
                                                            an analog output for the LCD
a general purpose I/O
an analog input from Comparator 1

3.5.1.2 RD1

Figure 3-23 shows the diagram for this pin. The RD1
pin is configurable to function as one of the following:
a general purpose I/O

3.5.1.3 RD2/CCP2

Figure 3-24 shows the diagram for this pin. The
RD2/CCP2 pin is configurable to function as one of the
following:

a general purpose I/O
a Capture input, Compare output or PWM output

3.5.1.4 RD3/SEG16

Figure 3-25 shows the diagram for this pin. The
RD3/SEG16 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.5.1.5 RD4/SEG17

Figure 3-25 shows the diagram for this pin. The
RD4/SEG17 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.5.1.6 RD5/SEG18

Figure 3-25 shows the diagram for this pin. The
RD5/SEG18 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

2005 Microchip Technology Inc.  Preliminary              DS41265A-page 57
PIC16F946

FIGURE 3-22:      BLOCK DIAGRAM OF RD0/COM3

   Data Bus        DQ                                                        VDD
WR PORTD             CK Q
                  Data Latch                                                            RD0/COM3
WR TRISD           DQ                                                                  Pin
                     CK Q
                  TRIS Latch                                        Schmitt
                                                                    Trigger
                      RD TRISD
                                LCDEN and LMUX<1:0> = 11

                  RD PORTD

COM3                                           LCDEN and
                                        LMUX<1:0> = 11

FIGURE 3-23:      BLOCK DIAGRAM OF RD1

    Data Bus       DQ                                                VDD
WR PORTD             CK Q                                                        RD1 Pin
                  Data Latch
WR TRISD           DQ                       Schmitt
                     CK Q                    Trigger
                  TRIS Latch

                  RD TRISD

                  RD PORTD

DS41265A-page 58                Preliminary                                  2005 Microchip Technology Inc.
FIGURE 3-24:  BLOCK DIAGRAM OF RD2/CCP2                                              PIC16F946

(PORT/CCP2 Select) and CCPMX                                                          VDD
                                                                                                 RD2/CCP2
CCP2 Data Out                                                                                    Pin
                                                            0

Data Bus         DQ                         1

WR PORTD         CK Q

                 Data Latch

WR TRISD           DQ
                    CK Q
                 TRIS Latch                                    Schmitt
                                                               Trigger

                                  RD TRISD

                   RD PORTD
CCP2 Input

FIGURE 3-25:  BLOCK DIAGRAM OF RD<7:3>

    Data Bus  D                   Q                                                  VDD
WR PORTD                                                                                        RD<7:3> Pin
                CK Q
WR TRISD     Data Latch

              DQ

                 CK Q
              TRIS Latch

                 RD TRISD                   SE<20:16> and LCDEN
                                                                            Schmitt
                                                                            Trigger

              RD PORTD

                                     SE<20:16> and LCDEN

SEG<20:16>

2005 Microchip Technology Inc.            Preliminary                              DS41265A-page 59
PIC16F946

TABLE 3-4: SUMMARY OF REGISTERS ASSOCIATED WITH PORTD

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

08h   PORTD       RD7    RD6    RD5    RD4     RD3    RD2    RD1    RD0 xxxx xxxx uuuu uuuu

1Dh(2) CCP2CON    --     --     CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000

88h   TRISD       TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 1111 1111 1111 1111

107h  LCDCON      LCDEN SLPEN   WERR   VLCDEN  CS1    CS0    LMUX1  LMUX0 0001 0011 0001 0011
11Eh  LCDSE2(1)    SE23 SE22    SE21     SE20  SE19   SE18    SE17   SE16 0000 0000 uuuu uuuu

Legend: x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTD.
Note 1: This register is only initialized by a POR or BOR and is unchanged by other Resets.

DS41265A-page 60                       Preliminary                   2005 Microchip Technology Inc.
                                                                              PIC16F946

3.6 PORTE and TRISE Registers                              EXAMPLE 3-5: INITIALIZING PORTE

PORTE is a 4-bit port with Schmitt Trigger input buffers.  BCF    STATUS,RP0  ;Bank 0
                                                           BCF    STATUS,RP1  ;
RE<7:0> are individually configured as inputs or out-      CLRF   PORTE       ;Init PORTE
puts. RE3 is only available as an input if MCLRE is `0'    BSF    STATUS,RP0  ;Bank 1
in Configuration Word (Register 16-1)..                    BCF    STATUS,RP1  ;
                                                           MOVLW  0Fh         ;Set RE<3:0> as inputs
Note:  Analog lines that carry LCD signals                 MOVWF  TRISE       ;
       (i.e., SEGx, where x are segment identifi-          CLRF   ANSEL       ;Make RE<2:0> as I/O's
       ers) are shown as direct connections to             BCF    STATUS,RP0  ;Bank 0
       the device pins. The signals are outputs            BCF    STATUS,RP1  ;
       from the LCD module and may be
       tri-stated, depending on the configuration
       of the LCD module.

REGISTER 3-11:  PORTE PORTE REGISTER (ADDRESS: 09h)

                R/W-x R/W-x R/W-x R/W-x R/W-x                          R/W-x  R/W-x                    R/W-x
                                                                        RE2    RE1                      RE0
                RE7               RE6  RE5                 RE4    RE3
                                                                                                            bit 0
                bit 7

       bit 7-0  RE<7:0>: PORTE I/O Pin bits

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

REGISTER 3-12:  TRISE PORTE TRI-STATE REGISTER (ADDRESS: 89h)

                R/W-1 R/W-1 R/W-1 R/W-1                           R-1  R/W-1   R/W-1                    R/W-1
                                                                              TRISE1                   TRISE0
                TRISE7 TRISE6 TRISE5 TRISE4 TRISE3 TRISE2
                                                                                                             bit 0
                bit 7

       bit 7-4  TRISE<7:4>: Data Direction bits
       bit 3    TRISE3: Data Direction bit. RE3 is always an input, so this bit always reads as a `1'
       bit 2-0  TRISE<2:0>: Data Direction bits

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

2005 Microchip Technology Inc.       Preliminary                            DS41265A-page 61
PIC16F946

3.6.1  PIN DESCRIPTIONS AND                                3.6.1.7 RE6/SEG26
       DIAGRAMS
                                                           Figure 3-26 shows the diagram for this pin. The
Each PORTE pin is multiplexed with other functions. The    RE6/SEG26 pin is configurable to function as one of
pins and their combined functions are briefly described    the following:
here. For specific information about individual functions   a general purpose I/O
such as the comparator or the A/D, refer to the             an analog output for the LCD
appropriate section in this data sheet.
                                                           3.6.1.8 RE7/SEG27
3.6.1.1 RE0/AN5/SEG21
                                                           Figure 3-26 shows the diagram for this pin. The
Figure 3-26 shows the diagram for this pin. The            RE7/SEG27 pin is configurable to function as one of
RE0/AN5/SEG21 pin is configurable to function as one       the following:
of the following:                                           a general purpose I/O
                                                            an analog output for the LCD
a general purpose I/O
an analog input for the A/D
an analog output for the LCD

3.6.1.2 RE1/AN6/SEG22

Figure 3-26 shows the diagram for this pin. The
RE1/AN6/SEG22 pin is configurable to function as one
of the following:

a general purpose I/O
an analog input for the A/D
an analog output for the LCD

3.6.1.3 RE2/AN7/SEG23

Figure 3-26 shows the diagram for this pin. The
RE2/AN7/SEG23 pin is configurable to function as one
of the following:

a general purpose I/O
an analog input for the A/D
an analog output for the LCD

3.6.1.4 RE3/MCLR/VPP

Figure 3-27 shows the diagram for this pin. The
RE3/MCLR/VPP pin is configurable to function as one
of the following:

a digital input only
as Master Clear Reset with weak pull-up
a programming voltage reference input

3.6.1.5 RE4/SEG24

Figure 3-26 shows the diagram for this pin. The
RE4/SEG24 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.6.1.6 RE5/SEG25

Figure 3-26 shows the diagram for this pin. The
RE5/SEG25 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

DS41265A-page 62             Preliminary                   2005 Microchip Technology Inc.
FIGURE 3-26:  BLOCK DIAGRAM OF RE<7:4, 2:0>                        PIC16F946

   Data Bus    DQ                                                       VDD
WR PORTE         CK Q
              Data Latch                                                             RE<7:4,2:0>
WR TRISE       DQ                                                                   Pins
                 CK Q
              TRIS Latch

              RD TRISE            Analog Mode or          Schmitt

                                  SE<27:21> and LCDEN Trigger

                     RD PORTE     SE<27:21> and LCDEN
SEG<27:21>

AN<7:5>(1)

Note 1: Analog input for A/D apply to RE<2:0> pins only.

2005 Microchip Technology Inc.  Preliminary                      DS41265A-page 63
PIC16F946

FIGURE 3-27:             BLOCK DIAGRAM OF RE3/MCLR/VPP

              MCLR circuit                    MCLR Filter                        HV

                                                                         Schmitt Trigger
                                                                               Buffer

              Programming mode                HV Detect

                                                                  MCLRE                                                 RE3/MCLR/VPP(1)

Data Bus                                                                         HV

                                                                         Schmitt Trigger
                                                                               Buffer

                         RE TRISE

                           RE PORTE
      Note 1: RE3 will read `0' when pin is MCLR.

TABLE 3-5: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

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

09h           PORTE      RE7    R6     RE5    RE4          RE3    RE2    RE1    RE0 xxxx xxxx uuuu uuuu

1Fh           ADCON0     ADFM VCFG1 VCFG0 CHS2             CHS1   CHS0 GO/DONE ADON 0000 0000 0000 0000

89h           TRISE      TRISE7 TRISE6 TRISE5 TRISE4 TRISE3(2) TRISE2 TRISE1 TRISE0 1111 1111 1111 1111

91h           ANSEL      ANS7 ANS6     ANS5   ANS4         ANS3   ANS2   ANS1   ANS0 1111 1111 1111 1111

107h          LCDCON     LCDEN  SLPEN  WERR   VLCDEN       CS1    CS0    LMUX1  LMUX0     0001 0011 0001 0011
11Eh          LCDSE2(1)   SE23   SE22  SE21     SE20       SE19   SE18    SE17   SE16     0000 0000 uuuu uuuu
19Ch          LCDSE3(1)   SE31   SE30  SE29     SE28       SE27   SE26    SE25   SE24     0000 0000 uuuu uuuu

Legend:       x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTE.
Note 1:       This register is only initialized by a POR or BOR and is unchanged by other Resets.
              Bit is read-only; TRISE = 1 always.
          2:

DS41265A-page 64                              Preliminary                        2005 Microchip Technology Inc.
                                                                                 PIC16F946

3.7 PORTF and TRISF Registers                              EXAMPLE 3-6: INITIALIZING PORTF

PORTF is an 8-bit port with Schmitt Trigger input          BCF    STATUS,RP0     ;Bank 3
buffers. RF<7:0> are individually configured as inputs     BCF                   ;
or outputs, depending on the state of the port direction.  CLRF   STATUS,RP1     ;Init PORTF
The port bits are also multiplexed with LCD segment        BSF                   ;Bank 1
functions.                                                 BCF    PORTF          ;
                                                           MOVLW                 ;Set RF<3:0> as inputs
                                                           MOVWF  STATUS,RP0
                                                           CLRF                  ;Make RF<2:0> as I/O's
                                                           BCF    STATUS,RP1     ;Bank 0
                                                           BCF                   ;
                                                                  0Fh

Note:  Analog lines that carry LCD signals                        TRISF       ;
       (i.e., SEGx, where x are segment identifiers)
       are shown as direct connections to the                     ANSEL
       device pins. The signals are outputs from
       the LCD module and may be tri-stated,                      STATUS,RP0
       depending on the configuration of the LCD
       module.                                                    STATUS,RP1

REGISTER 3-13:  PORTF PORTF REGISTER (ADDRESS: 188h)

                R/W-x R/W-x R/W-x R/W-x R/W-x                            R/W-x   R/W-x   R/W-x
                                                                          RF2     RF1     RF0
                RF7               RF6  RF5                 RF4    RF3
                                                                                              bit 0
                bit 7

       bit 7-0  RF<7:0>: PORTF I/O Pin bits

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

REGISTER 3-14:  TRISF PORTF TRI-STATE REGISTER (ADDRESS: 185h)
                   R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
                  TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2                      R/W-1   R/W-1
                                                                                 TRISF1  TRISF0
                 bit 7
                                                                                               bit 0

       bit 7-0  TRISF<7:0>: Data Direction bits

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

2005 Microchip Technology Inc.       Preliminary                               DS41265A-page 65
PIC16F946

3.7.1  PIN DESCRIPTIONS AND                                 3.7.1.7 RF6/SEG30
       DIAGRAMS
                                                            Figure 3-28 shows the diagram for this pin. The
Each PORTF pin is multiplexed with other functions. The     RF6/SEG30 pin is configurable to function as one of
pins and their combined functions are briefly described     the following:
here. For specific information about individual functions,   a general purpose I/O
refer to the appropriate section in this data sheet.         an analog output for the LCD

3.7.1.1 RF0/SEG32                                           3.7.1.8 RF7/SEG31

Figure 3-28 shows the diagram for this pin. The             Figure 3-28 shows the diagram for this pin. The
RF0/SEG32 pin is configurable to function as one of         RF7/SEG31 pin is configurable to function as one of
the following:                                              the following:
                                                             a general purpose I/O
a general purpose I/O                                     an analog output for the LCD
an analog output for the LCD

3.7.1.2 RF1/SEG33

Figure 3-28 shows the diagram for this pin. The
RF1/SEG33 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.7.1.3 RF2/SEG34

Figure 3-28 shows the diagram for this pin. The
RF2/SEG34 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.7.1.4 RF3/SEG35

Figure 3-28 shows the diagram for this pin. The
RF3/SEG35 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.7.1.5 RF4/SEG28

Figure 3-28 shows the diagram for this pin. The
RF4/SEG28 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.7.1.6 RF5/SEG29

Figure 3-28 shows the diagram for this pin. The
RF5/SEG29 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

DS41265A-page 66             Preliminary                     2005 Microchip Technology Inc.
FIGURE 3-28:     BLOCK DIAGRAM OF RF<7:0>                                                    PIC16F946

   Data Bus       DQ                                                                              VDD
WR PORTF            CK Q
                 Data Latch                                                                                      RF<7:0>
WR TRISF          DQ                                                                                            Pin
                    CK Q
                 TRIS Latch

                 RD TRISF                  Analog Mode or

                                         SE<31:28, 35:32> and LCDEN Schmitt
                                                                                    Trigger

                 RD PORTF

                                  SE<31:28, 35:32> and LCDEN

      SEG<31:28, 35:32>

TABLE 3-6: SUMMARY OF REGISTERS ASSOCIATED WITH PORTF

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

1Fh   ADCON0     ADFM VCFG1 VCFG0 CHS2                 CHS1   CHS0 GO/DONE ADON 0000 0000 0000 0000

91h   ANSEL      ANS7 ANS6               ANS5   ANS4   ANS3   ANS2   ANS1                    ANS0 1111 1111 1111 1111

107h  LCDCON     LCDEN SLPEN WERR VLCDEN CS1                  CS0    LMUX1 LMUX0 0001 0011 0001 0011

185h  TRISF      TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0 1111 1111 1111 1111

188h  PORTF      RF7              RF6    RF5    RF4    RF3    RF2    RF1                     RF0 xxxx xxxx uuuu uuuu

19Ch  LCDSE3(1)  SE31 SE30               SE29   SE28   SE27   SE26   SE25                    SE24 0000 0000 uuuu uuuu

19Dh  LCDSE4(1)  SE39 SE38               SE37   SE36   SE35   SE34   SE33                    SE32 0000 0000 uuuu uuuu

Legend: x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTF.
Note 1: This register is only initialized by a POR or BOR and is unchanged by other Resets.

2005 Microchip Technology Inc.                Preliminary                                                       DS41265A-page 67
PIC16F946

3.8 PORTG and TRISG Registers                              EXAMPLE 3-7: INITIALIZING PORTG

PORTG is an 8-bit port with Schmitt Trigger input          BCF    STATUS,RP0     ;Bank 3
buffers. RG<5:0> are individually configured as inputs     BCF                   ;
or outputs, depending on the state of the port direction.  CLRF   STATUS,RP1     ;Init PORTG
The port bits are also multiplexed with LCD segment        BSF                   ;Bank 1
functions.                                                 BCF    PORTG          ;
                                                           MOVLW                 ;Set RG<3:0> as inputs
                                                           MOVWF  STATUS,RP0
                                                           CLRF                  ;Make RG<2:0> as I/O's
                                                           BCF    STATUS,RP1     ;Bank 0
                                                           BCF                   ;
                                                                  0Fh

Note:  Analog lines that carry LCD signals                        TRISF       ;
       (i.e., SEGx, where x are segment identifiers)
       are shown as direct connections to the                     ANSEL
       device pins. The signals are outputs from
       the LCD module and may be tri-stated,                      STATUS,RP0
       depending on the configuration of the LCD
       module.                                                    STATUS,RP1

REGISTER 3-15:    PORTG PORTG REGISTER (ADDRESS: 189h)

                  U-0    U-0          R/W-x R/W-x R/W-x                  R/W-x   R/W-x   R/W-x
                                                                          RG2     RG1     RG0
                  --     --           RG5                  RG4    RG3
                                                                                              bit 0
                  bit 7

       bit 7-6    Unimplemented: Read as `0'
       bit 5-0
                  RG<5:0>: PORTG I/O Pin bits
                  1 = Port pin is >VIH
                  0 = Port pin is
                  Legend:             W = Writable bit            U = Unimplemented bit, read as `0'
                  R = Readable bit    `1' = Bit is set            `0' = Bit is cleared x = Bit is unknown
                  - n = Value at POR

REGISTER 3-16:    TRISG PORTG TRI-STATE REGISTER (ADDRESS: 187h)

                  U-0    U-0          R/W-1 R/W-1 R/W-1 R/W-1                     R/W-1   R/W-1
                                                                                 TRISG1  TRISG0
                  --     --           TRISG5 TRISG4 TRISG3 TRISG2
                                                                                               bit 0
                  bit 7

       bit 7-6    Unimplemented: Read as `0'
       bit 5-0    TRISG<5:0>: Data Direction bits

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

DS41265A-page 68                      Preliminary                              2005 Microchip Technology Inc.
                                                            PIC16F946

3.8.1  PIN DESCRIPTIONS AND
       DIAGRAMS

Each PORTG pin is multiplexed with other functions. The
pins and their combined functions are briefly described
here. For specific information about individual functions,
refer to the appropriate section in this data sheet.

3.8.1.1 RG0/SEG36

Figure 3-29 shows the diagram for this pin. The
RG0/SEG36 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.8.1.2 RG1/SEG37

Figure 3-29 shows the diagram for this pin. The
RG1/SEG37 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.8.1.3 RG2/SEG38

Figure 3-29 shows the diagram for this pin. The
RG2/SEG38 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.8.1.4 RG3/SEG39

Figure 3-29 shows the diagram for this pin. The
RG3/SEG39 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.8.1.5 RG4/SEG40

Figure 3-29 shows the diagram for this pin. The
RG4/SEG40 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

3.8.1.6 RG5/SEG41

Figure 3-29 shows the diagram for this pin. The
RG5/SEG41 pin is configurable to function as one of
the following:

a general purpose I/O
an analog output for the LCD

2005 Microchip Technology Inc.  Preliminary               DS41265A-page 69
PIC16F946

FIGURE 3-29:      BLOCK DIAGRAM OF RG<5:0>

    Data Bus       DQ                                                                VDD
WR PORTG             CK Q
                  Data Latch                                                                        RG<5:0>
WR TRISG           DQ                                                                              Pin
                     CK Q
                  TRIS Latch

                      RD TRISG           Analog Mode or              Schmitt
                                         SE<41:36> and LCDEN         Trigger

                           RD PORTG  SE<41:36> and LCDEN
      SEG<41:36>

TABLE 3-7: SUMMARY OF REGISTERS ASSOCIATED WITH PORTG

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

1Fh   ADCON0      ADFM VCFG1 VCFG0 CHS2            CHS1       CHS0 GO/DONE ADON 0000 0000 0000 0000

91h   ANSEL       ANS7 ANS6          ANS5   ANS4   ANS3       ANS2   ANS1     ANS0 1111 1111 1111 1111

107h  LCDCON      LCDEN SLPEN WERR VLCDEN CS1                 CS0    LMUX1 LMUX0 0001 0011 0001 0011

187h  TRISG       --     --          TRISG5 TRISG4 TRISG3 TRISG2 TRISG1 TRISG0 --11 1111 --11 1111

189h  PORTG       --     --          RG5    RG4    RG3        RG2    RG1      RG0 --xx xxxx --uu uuuu

19Dh  LCDSE4(1)   SE39 SE38          SE37   SE36   SE35       SE34   SE33     SE32 0000 0000 uuuu uuuu

19Eh  LCDSE5(1)   --     --          --     --     --         --     SE41     SE40 ---- --00 ---- --uu

Legend: x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by PORTG.
Note 1: This register is only initialized by a POR or BOR and is unchanged by other Resets.

DS41265A-page 70                            Preliminary                        2005 Microchip Technology Inc.
                                                                                      PIC16F946

4.0 CLOCK SOURCES                                           The PIC16F946 can be configured in one of eight clock
                                                            modes.
4.1 Overview
                                                            1. EC External clock with I/O on RA6.
The PIC16F946 has a wide variety of clock sources
and selection features to allow it to be used in a wide     2. LP Low-gain Crystal or Ceramic Resonator
range of applications while maximizing performance                Oscillator mode.
and minimizing power consumption. Figure 4-1
illustrates a block diagram of the PIC16F946 clock          3. XT Medium-gain Crystal or Ceramic Resonator
sources.                                                          Oscillator mode.

Clock sources can be configured from external oscillators,  4. HS High-gain Crystal or Ceramic Resonator
quartz crystal resonators, ceramic resonators, and                mode.
Resistor-Capacitor (RC) circuits. In addition, the system
clock source can be configured from one of two internal     5. RC External Resistor-Capacitor (RC) with
oscillators, with a choice of speeds selectable via               FOSC/4 output on RA6.
software. Additional clock features include:
                                                            6. RCIO External Resistor-Capacitor with I/O on
Selectable system clock source between external                 RA6.
   or internal via software.
                                                            7. INTOSC Internal oscillator with FOSC/4 output
Two-Speed Clock Start-up mode, which                            on RA6 and I/O on RA7.
   minimizes latency between external oscillator
   start-up and code execution.                             8. INTOSCIO Internal oscillator with I/O on RA6
                                                                  and RA7.
Fail-Safe Clock Monitor (FSCM) designed to
   detect a failure of the external clock source (LP,       Clock source modes are configured by the FOSC<2:0>
   XT, HS, EC or RC modes) and switch to the                bits in the Configuration Word register (see
   Internal Oscillator.                                     Section 16.0 "Special Features of the CPU"). The
                                                            internal clock can be generated by two oscillators. The
                                                            HFINTOSC is a high-frequency calibrated oscillator.
                                                            The LFINTOSC is a low-frequency uncalibrated
                                                            oscillator.

FIGURE 4-1:  PIC16F946 SYSTEM CLOCK BLOCK DIAGRAM

OSC2  External Oscillator                                        FOSC<2:0>
OSC1                      Sleep                             (Configuration Word)

                                                                      SCS
                                                               (OSCCON<0>)

                                                            LP, XT, HS, RC, RCIO, EC

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

                                    1 MHz
                                  500 kHz 100

                                                 011
                                  250 kHz

                                                 010
                                  125 kHz

                                                 001
                                   31 kHz 000

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

2005 Microchip Technology Inc.  Preliminary                                                              DS41265A-page 71
PIC16F946

REGISTER 4-1:          OSCCON OSCILLATOR CONTROL REGISTER (ADDRESS: 8Fh)

              bit 7    U-0      R/W-1 R/W-1 R/W-0                        R-q  R-0    R-0            R/W-0
              bit 6-4                                                                                SCS
                       --       IRCF2      IRCF1       IRCF0 OSTS(1)          HTS    LTS
              bit 3                                                                                      bit 0
              bit 2    bit 7
              bit 1
              bit 0    Unimplemented: Read as `0'

                       IRCF<2:0>: Internal Oscillator Frequency Select bits

                       000 =    31 kHz
                       001 =    125 kHz
                       010 =    250 kHz
                       011 =    500 kHz
                       100 =    1 MHz
                       101 =    2 MHz
                       110 =    4 MHz
                       111 =    8 MHz

                       OSTS: Oscillator Start-up Time-out Status bit

                       1 = Device is running from the external system clock defined by FOSC<2:0>
                       0 = Device is running from the internal system clock (HFINTOSC or LFINTOSC)

                       HTS: HFINTOSC (High Frequency 8 MHz to 125 kHz) Status bit

                       1 = HFINTOSC is stable
                       0 = HFINTOSC is not stable

                       LTS: LFINTOSC (Low Frequency 31 kHz) Stable bit

                       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>

                       Note 1: The value of the OSTS bit on device power-up is dependent on the value of the
                                   Configuration Word (CONFIG) of the device. The value of the OSTS bit will be `0'
                                   on a device Power-on Reset (POR) or any automatic clock switch, which may occur
                                   from Two-Speed Start-up or Fail-Safe Clock Monitor, if the following conditions are
                                   true:
                                   OSTS = 0 if:
                                   FOSC<2:0> = 000 (LP) or 001 (XT) or 010 (HS)
                                   and
                                   IESO = 1 or FSCM = 1
                                   (IESO will be enabled automatically if FSCM is enabled)
                                   If any of the above conditions are not met, the value of the OSTS bit will be `1' on
                                   a device POR. See Section 4.6 "Two-Speed Clock Start-up Mode" and
                                   Section 4.7 "Fail-Safe Clock Monitor" for more details.

                       Legend:

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

                       q = value depends on condition

DS41265A-page 72                           Preliminary                         2005 Microchip Technology Inc.
                                                                 PIC16F946

4.2 Clock Source Modes                                    4.3.1.1 Special Case

Clock source modes can be classified as external or       An exception to this is when the device is put to Sleep
internal.                                                 while the following conditions are true:

External clock modes rely on external circuitry for      LP is the selected primary oscillator mode.
   the clock source. Examples are oscillator modules
   (EC mode), quartz crystal resonators or ceramic         T1OSCEN = 1 (Timer1 oscillator is enabled).
   resonators (LP, XT and HS modes), and
   Resistor-Capacitor (RC mode) circuits.                  SCS = 0 (oscillator mode is defined by
                                                             FOSC<2:0>).
Internal clock sources are contained internally
   within the PIC16F946. The PIC16F946 has two             OSTS = 1 (device is running from primary system
   internal oscillators: the 8 MHz High-Frequency            clock).
   Internal Oscillator (HFINTOSC) and 31 kHz
   Low-Frequency Internal Oscillator (LFINTOSC).          For this case, the OST is not necessary after a wake-up
                                                          from Sleep, since Timer1 continues to run during Sleep
The system clock can be selected between external or      and uses the same LP oscillator circuit as its clock
internal clock sources via the System Clock Selection     source. For these devices, this case is typically seen
(SCS) bit (see Section 4.5 "Clock Switching").            when the LCD module is running during Sleep.

4.3 External Clock Modes                                  In applications where the OSCTUNE register is used to
                                                          shift the FINTOSC frequency, the application should not
4.3.1  OSCILLATOR START-UP TIMER                          expect the FINTOSC frequency to stabilize immediately.
       (OST)                                              In this case, the frequency may shift gradually toward
                                                          the new value. The time for this frequency shift is less
                                                          than eight cycles of the base frequency.

If the PIC16F946 is configured for LP, XT or HS modes,    Note:  When the OST is invoked, the WDOG is
the Oscillator Start-up Timer (OST) counts 1024 oscil-           held in Reset, because the WDOG ripple
lations from the OSC1 pin, following a Power-on Reset            counter is used by the OST to perform the
(POR), and the Power-up Timer (PWRT) has expired (if             oscillator delay count. When the OST
configured), or a wake-up from Sleep. During this time,          count has expired, the WDOG will begin
the program counter does not increment and program               counting (if enabled).
execution is suspended. The OST ensures that the
oscillator circuit, using a quartz crystal resonator or   Table 4-1 shows examples where the oscillator delay is
ceramic resonator, has started and is providing a stable  invoked.
system clock to the PIC16F946. When switching
between clock sources a delay is required to allow the    In order to minimize latency between external oscillator
new clock to stabilize. These oscillator delays are       start-up and code execution, the Two-Speed Clock
shown in Table 4-1.                                       Start-up mode can be selected (see Section 4.6
                                                          "Two-Speed Clock Start-up Mode").

2005 Microchip Technology Inc.  Preliminary                                   DS41265A-page 73
PIC16F946

TABLE 4-1: OSCILLATOR DELAY EXAMPLES

System Clock      Frequency      Switching From   Oscillator Delay   Comments
    Source                                               (TOST)

LFIOSC                 31 kHz    Sleep            10 s internal delay Following a wake-up from Sleep mode
HFIOSC            125 kHz-8 MHz                                               or POR, an internal delay is invoked to
XT or HS                                                                      allow the memory bias to stabilize
LP                   4-20 MHz                                                 before program execution can begin.
LP with T1OSC          32 kHz
enabled                32 kHz    Sleep            10 s internal delay Following a wake-up from Sleep mode
                                                                              or POR, an internal delay is invoked to
EC, RC               0-20 MHz                                                 allow the memory bias to stabilize
EC, RC               0-20 MHz                                                 before program execution can begin.

                                 INTOSC or Sleep 1024 clock cycles Following a change from INTOSC, an
                                                                                       OST of 1024 cycles must occur.

                                 INTOSC or Sleep  1024 clock cycles  Following a change from INTOSC, an
                                                                     OST of 1024 cycles must occur. See
                                                                     Section 4.3.1.1 "Special Case" for
                                                                     special case conditions.

                                 Sleep            10 s internal delay Following a wake-up from Sleep mode,
                                                                              an internal delay is invoked to allow the
                                                                              memory bias to stabilize before
                                                                              program execution can begin. See
                                                                              Section 4.3.1.1 "Special Case" for
                                                                              details about this special case.

                                 Sleep            10 s internal delay Following a wake-up from Sleep mode
                                                                              or POR, an internal delay is invoked to
                                                                              allow the memory bias to stabilize
                                                                              before program execution can begin.

                                 LFIOSC           10 s internal delay Following a switch from a LFIOSC or
                                                                              POR, an internal delay is invoked to
                                                                              allow the memory bias to stabilize
                                                                              before program execution can begin.

DS41265A-page 74                         Preliminary                  2005 Microchip Technology Inc.
                                                                    PIC16F946

4.3.2 EC MODE                                                4.3.3 LP, XT, HS MODES

The External Clock (EC) mode allows an externally            The LP, XT and HS modes support the use of quartz
generated logic level as the system clock source.            crystal resonators or ceramic resonators connected to
When operating in this mode, an external clock source        the OSC1 and OSC2 pins (Figures 4-3 and 4-4). The
is connected to the OSC1 pin and the RA6 pin is              mode selects a low, medium or high gain setting of the
available for general purpose I/O. Figure 4-2 shows the      internal inverter-amplifier to support various resonator
pin connections for EC mode.                                 types and speed.

The Oscillator Start-up Timer (OST) is disabled when         LP Oscillator mode selects the lowest gain setting of the
EC mode is selected. Therefore, there is no delay in         internal inverter-amplifier. LP mode current consumption
operation after a Power-on Reset (POR) or wake-up            is the least of the three modes. This mode is best suited
from Sleep. Because the PIC16F946 design is fully            to drive resonators with a low drive level specification, for
static, stopping the external clock input will have the      example, tuning fork type crystals.
effect of halting the device while leaving all data intact.
Upon restarting the external clock, the device will          Note:  In the past, the sources for the LP oscilla-
resume operation as if no time had elapsed.                         tor and Timer1 oscillator have been sepa-
                                                                    rate circuits. In this family of devices, the
FIGURE 4-2:    EXTERNAL CLOCK (EC)                                  LP oscillator and Timer1 oscillator use the
               MODE OPERATION                                       same oscillator circuitry. When using a
                                                                    device configured for the LP oscillator and
                      PIC16F946                                     with T1OSCEN = 1, the source of the
                                                                    clock for each function comes from the
                                                                    same oscillator block.

  Clock        OSC1/              FOSC Internal              XT Oscillator mode selects the intermediate gain
(External      CLKIN                        Clock            setting of the internal inverter-amplifier. XT mode
System)                                                      current consumption is the medium of the three modes.
                      FOSC<2:0> = 011                        This mode is best suited to drive resonators with a
          RA6                                                medium drive level specification, for example,
               RA6/OSC2/CLKO/T1OSO                           low-frequency/AT-cut quartz crystal resonators.

                                                             HS Oscillator mode selects the highest gain setting of
                                                             the internal inverter-amplifier. HS mode current
                                                             consumption is the highest of the three modes. This
                                                             mode is best suited for resonators that require a high
                                                             drive setting, for example, high-frequency/AT-cut
                                                             quartz crystal resonators or ceramic resonators.

                                                             Figures 4-3 and 4-4 show typical circuits for quartz
                                                             crystal and ceramic resonators, respectively.

2005 Microchip Technology Inc.       Preliminary                                   DS41265A-page 75
PIC16F946

FIGURE 4-3:        QUARTZ CRYSTAL                          FIGURE 4-4:  CERAMIC RESONATOR
                   OPERATION (LP, XT OR                                 OPERATION
                   HS MODE)                                             (XT OR HS MODE)

                   PIC16F946                                                       PIC16F946

           OSC1    RF(2)        To Int.                                     OSC1   RF(2)       To Int.
C1                              Logic                      C1                                  Logic

          Quartz          Sleep(3)                                         RF(3)          Sleep
          Crystal
                                                                            OSC2
           OSC2                                                             RS(1)
            RS(1)                                          C2 Ceramic
C2                                                              Resonator

Note 1: A series resistor (RS) may be required for         Note 1: A series resistor (RS) may be required for
            quartz crystals with low drive level.                      ceramic resonators with low drive level.

       2: The value of RF varies with the oscillator              2: The value of RF varies with the oscillator
            mode selected (typically between 2 M to                    mode selected (typically between 2 M to
            10 M).                                                     10 M).

       3: If using LP mode and T1OSC in enable,                   3: An additional parallel feedback resistor
            the LP oscillator will continue to run during              (RP) may be required for proper ceramic
            Sleep.                                                     resonator operation (typical value 1 M).

Note 1: Quartz crystal characteristics vary
            according to type, package and manufac-
            turer. The user should consult the
            manufacturer data sheets for specifica-
            tions and recommended application.

       2: Always verify oscillator performance over
            the VDD and temperature range that is
            expected for the application.

DS41265A-page 76                         Preliminary                     2005 Microchip Technology Inc.
                                                              PIC16F946

4.3.4 EXTERNAL RC MODES                                      4.4 Internal Clock Modes

The External Resistor-Capacitor (RC) modes support           The PIC16F946 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 the OSC1 pin.               8 MHz. The frequency of the HFINTOSC can be
The OSC2/CLKO pin outputs the RC oscillator                        user adjusted 12% via software using the
frequency divided by 4. This signal may be used to                 OSCTUNE register (Register 4-2).
provide a clock for external circuitry, synchronization,
calibration, test or other application requirements.         2. The LFINTOSC (Low-Frequency Internal
Figure 4-5 shows the RC mode connections.                          Oscillator) is uncalibrated and operates at
                                                                   approximately 31 kHz.
FIGURE 4-5:      RC MODE
                                                             The system clock speed can be selected via software
     VDD                          PIC16F946                  using the Internal Oscillator Frequency Select (IRCF)
REXT                                                         bits.
                 OSC1                  Internal
           CEXT                         Clock                The system clock can be selected between external or
                                                             internal clock sources via the System Clock Selection
VSS                                                          (SCS) bit (see Section 4.5 "Clock Switching").
                           OSC2/CLKO
                                                             4.4.1 INTOSC AND INTOSCIO MODES
               FOSC/4
                                                             The INTOSC and INTOSCIO modes configure the
Recommended values:3 k  REXT  100 k                          internal oscillators as the system clock source when the
                               CEXT > 20 pF                  device is programmed using the Oscillator Selection
                                                             (FOSC) bits in the Configuration Word register
In RCIO mode, the RC circuit is connected to the OSC1        (Register 16-1).
pin. The OSC2 pin becomes an additional general
purpose I/O pin. The I/O pin becomes bit 4 of PORTA          In INTOSC mode, the OSC1 pin is available for general
(RA4). Figure 4-6 shows the RCIO mode connections.           purpose I/O. The OSC2/CLKO pin outputs the selected
                                                             internal oscillator frequency divided by 4. The CLKO
FIGURE 4-6:      RCIO MODE                                   signal may be used to provide a clock for external
                                                             circuitry, synchronization, calibration, test or other
     VDD                          PIC16F946                  application requirements.
REXT
                 OSC1                  Internal              In INTOSCIO mode, the OSC1 and OSC2 pins are
           CEXT                         Clock                available for general purpose I/O.

VSS                                                          4.4.2 HFINTOSC
                           I/O (OSC2)
                                                             The High-Frequency Internal Oscillator (HFINTOSC) is
                RA6                                          a factory calibrated 8 MHz internal clock source. The
                                                             frequency of the HFINTOSC can be altered
Recommended values:3 k  REXT  100 k                          approximately 12% via software using the OSCTUNE
                               CEXT > 20 pF                  register (Register 4-2).

The RC oscillator frequency is a function of the supply      The output of the HFINTOSC connects to a postscaler
voltage, the resistor (REXT) and capacitor (CEXT)            and multiplexer (see Figure 4-1). One of seven
values and the operating temperature. In addition to         frequencies can be selected via software using the
this, the oscillator frequency will vary from unit to unit   IRCF bits (see Section 4.4.4 "Frequency Select Bits
due to normal threshold voltage. Furthermore, the            (IRCF)").
difference in lead frame capacitance between package
types will also affect the oscillation frequency or for low  The HFINTOSC is enabled by selecting any frequency
CEXT values. The user also needs to take into account        between 8 MHz and 125 kHz (IRCF  000) as the
variation due to tolerance of external RC components         System Clock Source (SCS = 1), or when Two-Speed
used.                                                        Start-up is enabled (IESO = 1 and IRCF  000).

                                                             The HF Internal Oscillator (HTS) bit (OSCCON<2>)
                                                             indicates whether the HFINTOSC is stable or not.

2005 Microchip Technology Inc.                 Preliminary  DS41265A-page 77
PIC16F946

4.4.2.1 OSCTUNE Register                                When the OSCTUNE register is modified, the HFINTOSC
                                                        frequency will begin shifting to the new frequency. The
The HFINTOSC is factory calibrated but can be           HFINTOSC clock will stabilize within 1 ms. Code
adjusted in software by writing to the OSCTUNE          execution continues during this shift. There is no
register (Register 4-2).                                indication that the shift has occurred.

The OSCTUNE register has a tuning range of 12%.        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. Due to        clock source frequency, such as the Power-up Timer
process variation, the monotonicity and frequency step  (PWRT), Watchdog Timer (WDT), Fail-Safe Clock
cannot be specified.                                    Monitor (FSCM) and peripherals, are not affected by the
                                                        change in frequency.

REGISTER 4-2:     OSCTUNE OSCILLATOR TUNING RESISTOR (ADDRESS: 90h)

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

bit 7-5           Unimplemented: Read as `0'
bit 4-0
                  TUN<4:0>: Frequency Tuning bits

                  01111 = Maximum frequency
                  01110 =
                  
                  
                  
                  00001 =
                  00000 = Center frequency. Oscillator module is running at the calibrated frequency.
                  11111 =
                  
                  
                  
                  10000 = Minimum frequency

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

DS41265A-page 78                      Preliminary                   2005 Microchip Technology Inc.
                                                                   PIC16F946

4.4.3 LFINTOSC                                              4.4.5  HF AND LF INTOSC CLOCK
                                                                   SWITCH TIMING
The Low-Frequency Internal Oscillator (LFINTOSC) is
an uncalibrated (approximate) 31 kHz internal clock         When switching between the LFINTOSC and the
source.                                                     HFINTOSC, the new oscillator may already be shut
                                                            down to save power. If this is the case, there is a 10 s
The output of the LFINTOSC connects to a postscaler         delay after the IRCF bits are modified before the
and multiplexer (see Figure 4-1). 31 kHz can be             frequency selection takes place. The LTS/HTS bits will
selected via software using the IRCF bits (see              reflect the current active status of the LFINTOSC and
Section 4.4.4 "Frequency Select Bits (IRCF)"). The          the HFINTOSC oscillators. The timing of a frequency
LFINTOSC is also the frequency for the Power-up             selection is as follows:
Timer (PWRT), Watchdog Timer (WDT) and Fail-Safe
Clock Monitor (FSCM).                                       1. IRCF bits are modified.
                                                            2. If the new clock is shut down, a 10 s clock
The LFINTOSC is enabled by selecting 31 kHz
(IRCF = 000) as the System Clock Source (SCS = 1),                start-up delay is started.
or when any of the following are enabled:
                                                            3. Clock switch circuitry waits for a falling edge of
Two-Speed Start-up (IESO = 1 and IRCF = 000)                    the current clock.
Power-up Timer (PWRT)
Watchdog Timer (WDT)                                      4. CLKO is held low and the clock switch circuitry
Fail-Safe Clock Monitor (FSCM)                                  waits for a rising edge in the new clock.
Selected as LCD module clock source
                                                            5. CLKO is now connected with the new clock.
The LF Internal Oscillator (LTS) bit (OSCCON<1>)                  HTS/LTS bits are updated as required.
indicates whether the LFINTOSC is stable or not.
                                                            6. Clock switch is complete.

4.4.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 connect to a postscaler and multiplexer            and the new frequencies are derived from the
(see Figure 4-1). The Internal Oscillator Frequency         HFINTOSC via the postscaler and multiplexer.
select bits, IRCF<2:0> (OSCCON<6:4>), select the
frequency output of the internal oscillators. One of eight  4.5 Clock Switching
frequencies can be selected via software:
                                                            The system clock source can be switched between
8 MHz                                                     external and internal clock sources via software using
                                                            the System Clock Select (SCS) bit.

4 MHz (Default after Reset)                               4.5.1 SYSTEM CLOCK SELECT (SCS) BIT
2 MHz
1 MHz                                                     The System Clock Select (SCS) bit (OSCCON<0>)
500 kHz                                                   selects the system clock source that is used for the
250 kHz                                                   CPU and peripherals.
125 kHz
31 kHz                                                    When SCS = 0, the system clock source is
                                                               determined by configuration of the FOSC<2:0>
Note:    Following any Reset, the IRCF bits are set            bits in the Configuration Word register (CONFIG).
         to `110' and the frequency selection is set
         to 4 MHz. The user can modify the IRCF             When SCS = 1, the system clock source is
         bits to select a different frequency.                 chosen by the internal oscillator frequency
                                                               selected by the IRCF bits. After a Reset, SCS is
                                                               always cleared.

                                                            Note:  Any automatic clock switch, which may
                                                                   occur from Two-Speed Start-up or
                                                                   Fail-Safe Clock Monitor, does not update
                                                                   the SCS bit. The user can monitor the
                                                                   OSTS (OSCCON<3>) to determine the
                                                                   current system clock source.

2005 Microchip Technology Inc.  Preliminary                                    DS41265A-page 79
PIC16F946

4.5.2  OSCILLATOR START-UP TIME-OUT                            4.6.2  TWO-SPEED START-UP
       STATUS BIT                                                     SEQUENCE

The Oscillator Start-up Time-out Status (OSTS) bit             1. Wake-up from Power-on Reset or Sleep.
(OSCCON<3>) indicates whether the system clock is
running from the external clock source, as defined by          2. Instructions begin execution by the internal
the FOSC bits, or from the internal clock source. In                 oscillator at the frequency set in the IRCF bits
particular, OSTS indicates that the Oscillator Start-up              (OSCCON<6:4>).
Timer (OST) has timed out for LP, XT or HS modes.
                                                               3. OST enabled to count 1024 clock cycles.
4.6 Two-Speed Clock Start-up Mode
                                                               4. OST timed out, wait for falling edge of the
Two-Speed Start-up mode provides additional power                    internal oscillator.
savings by minimizing the latency between external
oscillator start-up and code execution. In applications        5. OSTS is set.
that make heavy use of the Sleep mode, Two-Speed               6. System clock held low until the next falling edge
Start-up will remove the external oscillator start-up
time from the time spent awake and can reduce the                    of new clock (LP, XT or HS mode).
overall power consumption of the device.                       7. System clock is switched to external clock

This mode allows the application to wake-up from                     source.
Sleep, perform a few instructions using the INTOSC
as the clock source and go back to Sleep without               4.6.3  CHECKING EXTERNAL/INTERNAL
waiting for the primary oscillator to become stable.                  CLOCK STATUS

                                                               Checking the state of the OSTS bit (OSCCON<3>) will
                                                               confirm if the PIC16F946 is running from the external
                                                               clock source as defined by the FOSC bits in the
                                                               Configuration Word (CONFIG) or the internal oscillator.

Note:  Executing a SLEEP instruction will abort
       the oscillator start-up time and will cause
       the OSTS bit (OSCCON<3>) to remain
       clear.

When the PIC16F946 is configured for LP, XT or HS
modes, the Oscillator Start-up Timer (OST) is enabled
(see Section 4.3.1 "Oscillator Start-up Timer
(OST)"). The OST timer will suspend program
execution until 1024 oscillations are counted.
Two-Speed Start-up mode minimizes the delay in code
execution by operating from the internal oscillator as
the OST is counting. When the OST count reaches
1024 and the OSTS bit (OSCCON<3>) is set, program
execution switches to the external oscillator.

4.6.1  TWO-SPEED START-UP MODE
       CONFIGURATION

Two-Speed Start-up mode is configured by the
following settings:

IESO = 1 (CONFIG<10>) Internal/External
   Switchover bit.

SCS = 0.
FOSC configured for LP, XT or HS mode.

Two-Speed Start-up mode is entered after:

Power-on Reset (POR) and, if enabled, after
   PWRT has expired, or

Wake-up from Sleep.

If the external clock oscillator is configured to be anything
other than LP, XT or HS mode, then Two-Speed Start-up
is disabled. This is because the external clock oscillator
does not require any stabilization time after POR or an
exit from Sleep.

DS41265A-page 80                               Preliminary             2005 Microchip Technology Inc.
                                                                        PIC16F946

FIGURE 4-7:       TWO-SPEED START-UP

                  Q1 Q2 Q3 Q4 Q1                            Q2  Q3      Q4  Q1

INTOSC

                                  TOST

            OSC1   0              1 1022 1023

            OSC2

Program Counter                         PC                      PC + 1      PC + 2

System Clock

4.7 Fail-Safe Clock Monitor                                 The frequency of the internal oscillator will depend upon
                                                            the value contained in the IRCF bits (OSCCON<6:4>).
The Fail-Safe Clock Monitor (FSCM) is designed to           Upon entering the Fail-Safe condition, the OSTS bit
allow the device to continue to operate in the event of     (OSCCON<3>) is automatically cleared to reflect that
an oscillator failure. The FSCM can detect oscillator       the internal oscillator is active and the WDT is cleared.
failure at any point after the device has exited a Reset    The SCS bit (OSCCON<0>) is not updated. Enabling
or Sleep condition and the Oscillator Start-up Timer        FSCM does not affect the LTS bit.
(OST) has expired.
                                                            The FSCM sample clock is generated by dividing the
FIGURE 4-8:       FSCM BLOCK DIAGRAM                        INTOSC clock by 64. This will allow enough time
                                                            between FSCM sample clocks for a system clock edge
Primary                Clock            Clock               to occur. Figure 4-8 shows the FSCM block diagram.
Clock                   Fail           Failure
                      Detector          Detected            On the rising edge of the sample clock, a monitoring
LFINTOSC                                                    latch (CM = 0) will be cleared. On a falling edge of the
             64                                           primary system clock, the monitoring latch will be set
Oscillator                                                  (CM = 1). In the event that a falling edge of the sample
                                                            clock occurs, and the monitoring latch is not set, a clock
The FSCM function is enabled by setting the FCMEN           failure has been detected. The assigned internal
bit in the Configuration Word (CONFIG). It is applicable    oscillator is enabled when FSCM is enabled as
to all external clock options (LP, XT, HS, EC or RC         reflected by the IRCF.
modes).
                                                                Note 1: Two-Speed Start-up is automatically
In the event of an external clock failure, the FSCM will                    enabled when the Fail-Safe Clock Monitor
set the OSFIF bit (PIR2<7>) and generate an oscillator                      mode is enabled.
fail interrupt if the OSFIE bit (PIE2<7>) is set. The
device will then switch the system clock to the internal               2: Primary clocks with a frequency  ~488
oscillator. The system clock will continue to come from                     Hz will be considered failed by the FSCM.
the internal oscillator unless the external clock recovers                  A slow starting oscillator can cause an
and the Fail-Safe condition is exited.                                      FSCM interrupt.

2005 Microchip Technology Inc.            Preliminary                     DS41265A-page 81
PIC16F946

4.7.1 FAIL-SAFE CONDITION CLEARING

The Fail-Safe condition is cleared after a Reset, the
execution of a SLEEP instruction, or a modification of
the SCS bit. While in Fail-Safe condition, the
PIC16F946 uses the internal oscillator as the system
without exiting the Fail-Safe condition.

The Fail-Safe condition must be cleared before the
OSFIF flag can be cleared.

FIGURE 4-9:          FSCM TIMING DIAGRAM

Sample Clock                                                      Oscillator
                                                                  Failure
        System
           Clock                                                                            Failure
                                                                                         Detected
         Output

     CM Output
               (Q)

             OSCFIF

                              CM Test                             CM Test                CM 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.

4.7.2 RESET OR WAKE-UP FROM SLEEP                                 Note:    Due to the wide range of oscillator start-up
                                                                           times, the Fail-Safe circuit is not active
The FSCM is designed to detect oscillator failure at                       during oscillator start-up (i.e., after exiting
any point after the device has exited a Reset or Sleep                     Reset or Sleep). After an appropriate
condition and the Oscillator Start-up Timer (OST) has                      amount of time, the user should check the
expired. If the external clock is EC or RC mode,                           OSTS bit (OSCCON<3>) to verify the
monitoring will begin immediately following these                          oscillator start-up and system clock
events.                                                                    switchover has successfully completed.

For LP, XT or HS mode the external oscillator may
require a start-up time considerably longer than the
FSCM sample clock time, a false clock failure may be
detected (see Figure 4-9). To prevent this, the internal
oscillator is automatically configured as the system
clock and functions until the external clock is stable
(the OST has timed out). This is identical to
Two-Speed Start-up mode. Once the external
oscillator is stable, the LFINTOSC returns to its role as
the FSCM source.

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

Addr         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

8Fh          OSCCON  --   IRCF2 IRCF1 IRCF0 OSTS(2) HTS                    LTS    SCS -110 q000 -110 x000

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

2007h(1) CONFIG      CPD  CP MCLRE PWRTE WDTE FOSC2 FOSC1 FOSC0                                      --  --

Legend:      x = unknown, u = unchanged, = unimplemented locations read as `0'. Shaded cells are not used by oscillators.
Note 1:      See Register 16-1 for operation of all Configuration Word bits.
             See Register 4-1 for details.
         2:

DS41265A-page 82                        Preliminary                               2005 Microchip Technology Inc.
                                                                            PIC16F946

5.0 TIMER0 MODULE                                                  Counter mode is selected by setting the T0CS bit
                                                                   (OPTION_REG<5>). In this mode, the Timer0 module
The Timer0 module timer/counter has the following                  will increment either on every rising or falling edge of pin
features:                                                          RA4/C1OUT/T0CKI/SEG4. The incrementing edge is
                                                                   determined by the source edge (T0SE) control bit
8-bit timer/counter                                              (OPTION_REG<4>). Clearing the T0SE bit selects the
Readable and writable                                            rising edge.
8-bit software programmable prescaler
Internal or external clock select                                5.2 Timer0 Interrupt
Interrupt on overflow from FFh to 00h
Edge select for external clock                                   A Timer0 interrupt is generated when the TMR0
                                                                   register timer/counter overflows from FFh to 00h. This
Figure 5-1 is a block diagram of the Timer0 module and             overflow sets the T0IF bit (INTCON<2>). The interrupt
the prescaler shared with the WDT.                                 can be masked by clearing the T0IE bit (INTCON<5>).
                                                                   The T0IF bit must be cleared in software by the Timer0
5.1 Timer0 Operation                                               module Interrupt Service Routine before re-enabling
                                                                   this interrupt. The Timer0 interrupt cannot wake the
Timer mode is selected by clearing the T0CS bit                    processor from Sleep, since the timer is shut off during
(OPTION_REG<5>). In Timer mode, the Timer0                         Sleep.
module will increment every instruction cycle (without
prescaler). If TMR0 is written, the increment is inhibited
for the following two instruction cycles. The user can
work around this by writing an adjusted value to the
TMR0 register.

FIGURE 5-1:        BLOCK DIAGRAM OF THE TIMER0/WDT PRESCALER

         CLKO        0                    8-bit                               1                     Data Bus
      (= FOSC/4)                       Prescaler                                         SYNC 2     8
                     1                                                                   Cycles
T0CKI                              0                                                                 TMR0
   pin                                                                        0
             T0SE  T0CS                                                                             Set Flag bit T0IF
                                    1                                       PSA                        on Overflow

   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: T0SE, T0CS, PSA and PS<2:0> are bits in the Option register; WDTPS<3:0> are bits in the WDTCON register.

2005 Microchip Technology Inc.                Preliminary                                         DS41265A-page 83
PIC16F946

5.3 Using Timer0 with an External
         Clock

When no prescaler is used, the external clock input is the
same as the prescaler output. The synchronization of
T0CKI, with the internal phase clocks, is accomplished by
sampling the prescaler output on the Q2 and Q4 cycles of
the internal phase clocks. Therefore, it is necessary for
T0CKI to be high for at least 2 TOSC (and a small RC delay
of 20 ns) and low for at least 2 TOSC (and a small RC delay
of 20 ns). Refer to the electrical specification of the
desired device.

REGISTER 5-1:     OPTION_REG OPTION REGISTER (ADDRESS: 81h OR 181h)

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

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 in WPUA register
bit 4
bit 3             INTEDG: Interrupt Edge Select bit
bit 2-0           1 = Interrupt on rising edge of RB0/INT/SEG0 pin
                  0 = Interrupt on falling edge of RB0/INT/SEG0 pin

                  T0CS: TMR0 Clock Source Select bit
                  1 = Transition on RA4/C1OUT/T0CKI/SEG4 pin
                  0 = Internal instruction cycle clock (CLKO)

                  T0SE: TMR0 Source Edge Select bit
                  1 = Increment on high-to-low transition on RA4/C1OUT/T0CKI/SEG4 pin
                  0 = Increment on low-to-high transition on RA4/C1OUT/T0CKI/SEG4 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(1)

                         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 for the PIC16F946. See
                              Section 16.6 "Watchdog Timer (WDT)" for more information.

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

DS41265A-page 84                      Preliminary                         2005 Microchip Technology Inc.
                                                                                      PIC16F946

5.4 Prescaler                                               EXAMPLE 5-1:              CHANGING PRESCALER
                                                                                      (TIMER0  WDT)
An 8-bit counter is available as a prescaler for the
Timer0 module, or as a postscaler for the Watchdog          BCF         STATUS,RP0           ;Bank 0
Timer. For simplicity, this counter will be referred to as                                   ;Clear WDT
"prescaler" throughout this data sheet. The prescaler       CLRWDT                           ;Clear TMR0 and
assignment is controlled in software by the control bit                                      ; prescaler
PSA (OPTION_REG<3>). Clearing the PSA bit will              CLRF TMR0                        ;Bank 1
assign the prescaler to Timer0. Prescale values are
selectable via the PS<2:0> bits (OPTION_REG<2:0>).          BSF         STATUS,RP0

The prescaler is not readable or writable. When             MOVLW b'00101111'                ;Required if desired
assigned to the Timer0 module, all instructions writing     MOVWF OPTION_REG                 ; PS2:PS0 is
to the TMR0 register (e.g., CLRF 1, MOVWF 1,                CLRWDT                           ; 000 or 001
BSF 1, x....etc.) will clear the prescaler. When                                             ;
assigned to WDT, a CLRWDT instruction will clear the        MOVLW       b'00101xxx'          ;Set postscaler to
prescaler along with the Watchdog Timer.                    MOVWF       OPTION_REG           ; desired WDT rate
                                                            BCF         STATUS,RP0           ;Bank 0

5.4.1    SWITCHING PRESCALER                                To change prescaler from the WDT to the TMR0
         ASSIGNMENT                                         module, use the sequence shown in Example 5-2. This
                                                            precaution must be taken even if the WDT is disabled.

The prescaler assignment is fully under software control    EXAMPLE 5-2:              CHANGING PRESCALER
(i.e., it can be changed "on-the-fly" during program                                  (WDT  TIMER0)
execution). To avoid an unintended device Reset, the
following instruction sequence (Example 5-1 and             CLRWDT                           ;Clear WDT and
Example 5-2) must be executed when changing the                                              ; prescaler
prescaler assignment from Timer0 to WDT.                    BSF           STATUS,RP0         ;Bank 1

                                                            MOVLW b'xxxx0xxx'                ;Select TMR0,
                                                                                             ; prescale, and
                                                            MOVWF OPTION_REG                 ; clock source
                                                                                             ;
                                                            BCF           STATUS,RP0         ;Bank 0

TABLE 5-1: REGISTERS ASSOCIATED WITH TIMER0

Address  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

01h      TMR0    Timer0 Module register                                                      xxxx xxxx uuuu uuuu

0Bh/10Bh INTCON  GIE              PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000x

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

85h      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.

2005 Microchip Technology Inc.                Preliminary                                  DS41265A-page 85
PIC16F946

NOTES:

DS41265A-page 86  Preliminary   2005 Microchip Technology Inc.
                                                                                        PIC16F946

6.0 TIMER1 MODULE WITH GATE                                  The Timer1 Control register (T1CON), shown in
         CONTROL                                             Register 6-1, is used to enable/disable Timer1 and
                                                             select the various features of the Timer1 module.
The PIC16F946 has a 16-bit timer. Figure 6-1 shows
the basic block diagram of the Timer1 module. Timer1
has the following features:

16-bit timer/counter (TMR1H:TMR1L)
Readable and writable
Internal or external clock selection
Synchronous or asynchronous operation
Interrupt-on-overflow from FFFFh to 0000h
Wake-up upon overflow (Asynchronous mode)
Optional external enable input:

   - Selectable gate source: T1G or C2 output
      (T1GSS)

   - Selectable gate polarity (T1GINV)
Optional LP oscillator

FIGURE 6-1:    TIMER1 ON THE PIC16F946 BLOCK DIAGRAM

                                                                                  TMR1ON              T1GINV
                                                                                  T1GE

                                  Clear on special                                TMR1ON
                                    event trigger
                                                                                  T1GE
Set Flag bit
TMR1IF on                                                    To C2 Comparator Module
Overflow
                                  TMR1(1)                    TMR1 Clock

                                                                         0            Synchronized

               TMR1H              TMR1L                                                 Clock Input

               LP OSC                                                    1

                                           (2)                       T1SYNC
                                                                      Prescaler
OSC1/T1OSI                                         1        1        1, 2, 4, 8

OSC2/T1OSO                                                   FOSC/4           2         Synchronize
  FOSC = 000                                        0 Internal 0                               det
   FOSC = x00
     T1OSCEN                                                  Clock                     Sleep Input

                                                                     T1CKPS<1:0>

                                                       T1CS          RC4/T1G/           1

                                                                     SDO/SEG11

  RC5/T1CKI/                                                                C2OUT       0
CCP1/SEG10

                                                                                        T1GSS

Note 1: Timer1 increments on the rising edge.
        2: ST Buffer is low-power type when using LP oscillator or high-speed type when using T1CKI.

2005 Microchip Technology Inc.                       Preliminary                                    DS41265A-page 87
PIC16F946

6.1 Timer1 Modes of Operation                               6.3 Timer1 Prescaler

Timer1 can operate in one of three modes:                   Timer1 has four prescaler options allowing 1, 2, 4 or 8
                                                            divisions of the clock input. The T1CKPS bits
16-bit timer with prescaler                               (T1CON<5:4>) control the prescale counter. The
16-bit synchronous counter                                prescale counter is not directly readable or writable;
16-bit asynchronous counter                               however, the prescaler counter is cleared upon a write
                                                            to TMR1H or TMR1L.
In Timer mode, Timer1 is incremented on every
instruction cycle. In Counter mode, Timer1 is incremented   6.4 Timer1 Gate
on the rising edge of the external clock input T1CKI. In
addition, the Counter mode clock can be synchronized to     Timer1 gate source is software configurable to be the
the microcontroller system clock or run asynchronously.     T1G pin or the output of Comparator 2. This allows the
                                                            device to directly time external events using T1G or
In the Timer1 module, the module clock can be gated         analog events using Comparator 2. See CMCON1
by the Timer1 gate, which can be selected as either the     (Register 8-2) for selecting the Timer1 gate source.
T1G pin or Comparator 2 output.                             This feature can simplify the software for a Delta-Sigma
                                                            A/D converter and many other applications. For more
If an external clock oscillator is needed (and the          information on Delta-Sigma A/D converters, see the
microcontroller is using the INTOSC without CLKO),          Microchip web site (www.microchip.com).
Timer1 can use the LP oscillator as a clock source.

Note:  In Counter mode, a falling edge must be              Note:  T1GE bit (T1CON<6>) must be set to use
       registered by the counter prior to the first                either T1G or C2OUT as the Timer1 gate
       incrementing rising edge.                                   source. See Register 8-2 for more
                                                                   information on selecting the Timer1 gate
6.2 Timer1 Interrupt                                               source.

The Timer1 register pair (TMR1H:TMR1L) increments           Timer1 gate can be inverted using the T1GINV bit
to FFFFh and rolls over to 0000h. When Timer1 rolls         (T1CON<7>), whether it originates from the T1G pin or
over, the Timer1 Interrupt Flag bit (PIR1<0>) is set. To    Comparator 2 output. This configures Timer1 to
enable the interrupt on rollover, you must set these bits:  measure either the active-high or active-low time
                                                            between events.
Timer1 Interrupt Enable bit (PIE1<0>)
PEIE bit (INTCON<6>)
GIE bit (INTCON<7>)

The interrupt is cleared by clearing the TMR1IF bit in
the Interrupt Service Routine.

Note:  The TMR1H:TTMR1L register pair and the
       TMR1IF bit should be cleared before
       enabling interrupts.

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.

DS41265A-page 88               Preliminary                         2005 Microchip Technology Inc.
                                                            PIC16F946

REGISTER 6-1:  T1CON TIMER1 CONTROL REGISTER (ADDRESS: 10h)

               R/W-0 R/W-0 R/W-0 R/W-0               R/W-0  R/W-0   R/W-0    R/W-0
                                                                   TMR1CS  TMR1ON
               T1GINV T1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC
                                                                                  bit 0
               bit 7

bit 7          T1GINV: Timer1 Gate Invert bit(1)
bit 6
bit 5-4        1 = Timer1 gate is inverted
bit 3          0 = Timer1 gate is not inverted
               T1GE: Timer1 Gate Enable bit(2)
bit 2          If TMR1ON = 0:
               This bit is ignored.
bit 1          If TMR1ON = 1:
bit 0          1 = Timer1 gate is enabled
               0 = Timer1 gate is disabled

               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
               If INTOSC without CLKO oscillator is active:
               1 = LP oscillator is enabled for Timer1 clock
               0 = LP oscillator is off

               Else:
               This bit is ignored.

               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 RC5/T1CKI/CCP1/SEG10 pin or T1OSC (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: T1GE bit must be set to use either T1G pin or C2OUT, as selected by the T1GSS
                           bit (CMCON1<1>), as a Timer1 gate source.

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

2005 Microchip Technology Inc.   Preliminary                     DS41265A-page 89
PIC16F946

6.5 Timer1 Operation in                                    6.6 TIMER1 OSCILLATOR
         Asynchronous Counter Mode
                                                           To minimize the multiplexing of peripherals on the I/O
If control bit T1SYNC (T1CON<2>) is set, the external      ports, the dedicated TMR1 oscillator, which is normally
clock input is not synchronized. The timer continues to    used for TMR1 real-time clock applications, is eliminated.
increment asynchronous to the internal phase clocks.       Instead, the TMR1 module can enable the LP oscillator.
The timer will continue to run during Sleep and can
generate an interrupt-on-overflow, which will wake-up      If the microcontroller is programmed to run from
the processor. However, special precautions in             INTOSC with no CLKO or LP oscillator:
software are needed to read/write the timer (see
Section 6.5.1 "Reading and Writing Timer1 in               1. Setting the T1OSCEN and TMR1CS bits to `1'
Asynchronous Counter Mode").                                     will enable the LP oscillator to clock TMR1 while
                                                                 the microcontroller is clocked from either the
Note:  The ANSEL (91h) and CMCON0 (9Ch)                          INTOSC or LP oscillator. Note that the T1OSC
       registers must be initialized to configure an             and LP oscillators share the same circuitry.
       analog channel as a digital input. Pins                   Therefore, when LP oscillator is selected and
       configured as analog inputs will read `0'.                T1OSC is enabled, both the microcontroller and
                                                                 the Timer1 module share the same clock
6.5.1  READING AND WRITING TIMER1 IN                             source.
       ASYNCHRONOUS COUNTER
       MODE                                                2. Sleep mode does not shut off the LP oscillator
                                                                 operation (i.e., if the INTOSC oscillator runs
Reading TMR1H or TMR1L, while the timer is running               the microcontroller, T1OSCEN = 1 and
from an external asynchronous clock, will ensure a               TMR1CS = 1, TMR1 is running from the LP
valid read (taken care of in hardware). However, the             oscillator), then the LP oscillator will continue to
user should keep in mind that reading the 16-bit timer           run during Sleep mode.
in two 8-bit values itself, poses certain problems, since
the timer may overflow between the reads.                  In all oscillator modes except for INTOSC with no
                                                           CLKOUT and LP, the T1OSC enable option is unavail-
                                                           able and is ignored.

For writes, it is recommended that the user simply stop    Note:  When INTOSC without CLKO oscillator is
the timer and write the desired values. A write                   selected and T1OSCEN = 1, the LP
contention may occur by writing to the timer registers,           oscillator will run continuously independent
while the register is incrementing. This may produce an           of the TMR1ON bit.
unpredictable value in the timer register.

Reading the 16-bit value requires some care.               6.7 Resetting Timer1 Using a CCP
Examples in the "PICmicro Mid-Range MCU Family                     Trigger Output

Reference Manual" (DS33023) show how to read and           If the CCP1 or CCP2 module is configured in Compare
                                                           mode to generate a "special event trigger"
write Timer1 when it is running in Asynchronous mode.      (CCP1M<3:0> = 1011), this signal will reset Timer1.

                                                           Note:  The special event triggers from the CCP1
                                                                  and CCP2 modules will not set interrupt
                                                                  flag bit, TMR1IF (PIR1<0>).

                                                           Timer1 must be configured for either Timer or Synchro-
                                                           nized Counter mode to take advantage of this feature.
                                                           If Timer1 is running in Asynchronous Counter mode,
                                                           this Reset operation may not work.

                                                           In the event that a write to Timer1 coincides with a
                                                           special event trigger from CCP1 or CCP2, the write will
                                                           take precedence.

                                                           In this mode of operation, the CCPRxH:CCPRxL register
                                                           pair effectively becomes the period register for Timer1.

DS41265A-page 90                    Preliminary                   2005 Microchip Technology Inc.
                                                                                       PIC16F946

6.8 Resetting of Timer1 Register Pair
         (TMR1H, TMR1L)

TMR1H and TMR1L registers are not reset to 00h on a
POR, or any other Reset, except by the CCP1 and
CCP2 special event triggers.

T1CON register is reset to 00h on a Power-on Reset,
or a Brown-out Reset, which shuts off the timer and
leaves a 1:1 prescale. In all other Resets, the register
is unaffected.

6.9 Timer1 Operation During Sleep

Timer1 can only operate during Sleep when setup in
Asynchronous Counter mode. In this mode, an external
crystal or clock source can be used to increment the
counter. To set up the timer to wake the device:

Timer1 must be on (T1CON<0>)
TMR1IE bit (PIE1<0>) must be set
PEIE bit (INTCON<6>) must be set

The device will wake-up on an overflow. If the GIE bit
(INTCON<7>) is set, the device will wake-up and jump
to the Interrupt Service Routine (0004h) on an overflow.
If the GIE bit is clear, execution will continue with the
next instruction.

TABLE 6-1: REGISTERS ASSOCIATED WITH TIMER1

Addr 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

0Bh/ INTCON GIE  PEIE             T0IE   INTE              RBIE   T0IF  INTF RBIF 0000 000x 0000 000x
8Bh

0Ch PIR1  EEIF ADIF               RCIF   TXIF              SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

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

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

10h T1CON T1GINV T1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 uuuu uuuu

97h CMCON1 --    --               --     --                --     -- T1GSS C2SYNC ---- --10 ---- --10

8Ch PIE1  EEIE ADIE RCIE                 TXIE              SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

2005 Microchip Technology Inc.         Preliminary                                          DS41265A-page 91
PIC16F946

NOTES:

DS41265A-page 92  Preliminary   2005 Microchip Technology Inc.
                                                                 PIC16F946

7.0 TIMER2 MODULE                                       7.1 Timer2 Operation

The Timer2 module timer has the following features:     Timer2 can be used as the PWM time base for the
                                                        PWM mode of the CCP module. The TMR2 register is
8-bit timer (TMR2 register)                           readable and writable, and is cleared on any device
8-bit period register (PR2)                           Reset. The input clock (FOSC/4) has a prescale option
Readable and writable (both registers)                of 1:1, 1:4 or 1:16, selected by control bits T2CKPSx
Software programmable prescaler (1:1, 1:4, 1:16)      (T2CON<1:0>). The match output of TMR2 goes
Software programmable postscaler (1:1 to 1:16)        through a 4-bit postscaler (which gives a 1:1 to 1:16
Interrupt on TMR2 match with PR2                      scaling inclusive) to generate a TMR2 interrupt (latched
                                                        in flag bit TMR2IF, (PIR1<1>)).
Timer2 has a control register shown in Register 7-1.
TMR2 can be shut-off by clearing control bit TMR2ON     The prescaler and postscaler counters are cleared
(T2CON<2>) to minimize power consumption.               when any of the following occurs:
Figure 7-1 is a simplified block diagram of the Timer2
module. The prescaler and postscaler selection of       A write to the TMR2 register
Timer2 are controlled by this register.                  A write to the T2CON register
                                                         Any device Reset (Power-on Reset, MCLR Reset,

                                                           Watchdog Timer Reset, or Brown-out Reset)

                                                        TMR2 is not cleared when T2CON is written.

REGISTER 7-1:  T2CON TIMER2 CONTROL REGISTER (ADDRESS: 12h)

               U-0                R/W-0  R/W-0          R/W-0  R/W-0 R/W-0    R/W-0    R/W-0
                                                                            T2CKPS1  T2CKPS0
               -- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON
                                                                                             bit 0
               bit 7

bit 7          Unimplemented: Read as `0'
bit 6-3
               TOUTPS<3:0>: Timer2 Output Postscale Select bits
bit 2          0000 =1:1 Postscale
bit 1-0        0001 =1:2 Postscale
               
               
               
               1111 =1:16 Postscale

               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

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

2005 Microchip Technology Inc.         Preliminary                        DS41265A-page 93
PIC16F946

7.2 Timer2 Interrupt                                           7.3 Timer2 Output

The Timer2 module has an 8-bit period register, PR2.           The output of TMR2 (before the postscaler) is fed to the
Timer2 increments from 00h until it matches PR2 and            SSP module, which optionally uses it to generate the
then resets to 00h on the next increment cycle. PR2 is         shift clock.
a readable and writable register. The PR2 register is
initialized to FFh upon Reset.

FIGURE 7-1:       TIMER2 BLOCK DIAGRAM

                                                                       TMR2               Sets Flag
                                                                      Output(1)          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>

             Note 1: TMR2 register output can be software selected by the SSP module as a baud clock.

TABLE 7-1: REGISTERS ASSOCIATED WITH TIMER2

Addr 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

0Bh/ INTCON GIE   PEIE               T0IE   INTE        RBIE   T0IF   INTF        RBIF 0000 000x 0000 000x
8Bh

0Ch PIR1          EEIF ADIF          RCIF   TXIF        SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

11h TMR2 Holding Register for the 8-bit TMR2 Register                                    0000 0000 0000 0000

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

8Ch PIE1          EEIE ADIE          RCIE   TXIE        SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

92h PR2      Timer2 Period Register                                                      1111 1111 1111 1111

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

DS41265A-page 94                            Preliminary                            2005 Microchip Technology Inc.
                                                                PIC16F946

8.0 COMPARATOR MODULE                                      The CMCON0 register (Register 8-1) controls the
                                                           comparator input and output multiplexers. A block
The Comparator module contains two analog                  diagram of the various comparator configurations is
comparators. The inputs to the comparators are             shown in Figure 8-3.
multiplexed with I/O port pins RA<3:0>, while the outputs
are multiplexed to pins RA<5:4>. An on-chip Comparator
Voltage Reference (CVREF) can also be applied to the
inputs of the comparators.

REGISTER 8-1:  CMCON0 COMPARATOR CONFIGURATION REGISTER (ADDRESS: 9Ch)

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

               C2OUT C1OUT C2INV C1INV                     CIS  CM2  CM1  CM0

               bit 7                                                      bit 0

bit 7          C2OUT: Comparator 2 Output bit
bit 6
bit 5          When C2INV = 0:
bit 4                1 = C2 VIN+ > C2 VIN-
bit 3                0 = C2 VIN+ < C2 VIN-

bit 2-0        When C2INV = 1:
                     0 = C2 VIN+ > C2 VIN-
                     1 = C2 VIN+ < C2 VIN-

               C1OUT: Comparator 1 Output bit

               When C1INV = 0:
                     1 = C1 VIN+ > C1 VIN-
                     0 = C1 VIN+ < C1 VIN-

               When C1INV = 1:
                     0 = C1 VIN+ > C1 VIN-
                     1 = C1 VIN+ < C1 VIN-

               C2INV: Comparator 2 Output Inversion bit

               1 = C2 Output inverted
               0 = C2 Output not inverted

               C1INV: Comparator 1 Output Inversion bit
               1 = C1 Output inverted
               0 = C1 Output not inverted

               CIS: Comparator Input Switch bit
               When CM<2:0> = 010:

                     1 = C1 VIN- connects to RA3/AN3/C1+/VREF+/SEG15
                           C2 VIN- connects to RA2/AN2/C2+/VREF-/COM2

                     0 = C1 VIN- connects to RA0/AN0/C1-/SEG12
                           C2 VIN- connects to RA1/AN1/C2-/SEG7

               When CM<2:0> = 001:
                     1 = C1 VIN- connects to RA3/AN3/C1+/VREF+/SEG15
                     0 = C1 VIN- connects to RA0/AN0/C1-/SEG12

               When CM<2:0> = 101:
                     1 = C2 VIN+ connects to internal 0.6V reference
                     0 = C2 VIN+ connects to RA2/AN2/C2+/VREF-/COM2

               CM<2:0>: Comparator Mode bits(1)

               See Figure 8-3 for comparator modes and CM<2:0> bit settings.

                  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.

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

2005 Microchip Technology Inc.       Preliminary                   DS41265A-page 95
PIC16F946

8.1 Comparator Operation                                     FIGURE 8-1:                        SINGLE COMPARATOR
                                                                                               +
A single comparator is shown in Figure 8-1 along with                 VIN+
the relationship between the analog input levels and                  VIN-                                             Output
the digital output. When the analog input at VIN+ is less                                      
than the analog input VIN-, the output of the comparator
is a digital low level. When the analog input at VIN+ is       VIVNI-N
greater than the analog input VIN-, the output of the
comparator is a digital high level. The shaded areas of        VVININ++
the output of the comparator in Figure 8-1 represent
the uncertainty due to input offsets and response time.        OOuuttppuutt

Note:  To use CIN+ and CIN- pins as analog                   8.2 Analog Input Connection
       inputs, the appropriate bits must be                           Considerations
       programmed in the CMCON0 (9Ch)
       register.                                             A simplified circuit for an analog input is shown in
                                                             Figure 8-2. Since the analog pins are connected to a
The polarity of the comparator output can be inverted        digital output, they have reverse biased diodes to VDD
by setting the CxINV bits (CMCON0<5:4>). Clearing            and VSS. The analog input, therefore, must be between
CxINV results in a non-inverted output. A complete           VSS and VDD. If the input voltage deviates from this
table showing the output state versus input conditions       range by more than 0.6V in either direction, one of the
and the polarity bit is shown in Table 8-1.                  diodes is forward biased and a latch-up may occur. A
                                                             maximum source impedance of 10 k is recommended
TABLE 8-1: OUTPUT STATE VS. INPUT                            for the analog sources. Any external component
                     CONDITIONS                              connected to an analog input pin, such as a capacitor
                                                             or a Zener diode, should have very little leakage.
Input Conditions            CINV  CxOUT

VIN- > VIN+                 0     0
VIN- < VIN+
VIN- > VIN+                 0     1
VIN- < VIN+
                            1     1

                            1     0

FIGURE 8-2:       ANALOG INPUT MODEL
                                                        VDD

             Rs < 10K                                      VT = 0.6V                           RIC

                       AIN

       VA                   CPIN                           VT = 0.6V  Leakage
                                                                      500 nA
                            5 pF

                                                                                          Vss

             Legend: CPIN = Input Capacitance
                          VT = Threshold Voltage
                          ILEAKAGE= Leakage Current at the pin due to various junctions
                          RIC = Interconnect Resistance
                          RS = Source Impedance
                          VA = Analog Voltage

DS41265A-page 96                     Preliminary                                                    2005 Microchip Technology Inc.
                                                                                            PIC16F946

8.3 Comparator Configuration                                    If the Comparator mode is changed, the comparator
                                                                output level may not be valid for the specified mode
There are eight modes of operation for the comparators.         change delay shown in Section 19.0 "Electrical
The CMCON0 register is used to select these modes.              Specifications".
Figure 8-3 shows the eight possible modes.

                                                                Note:     Comparator interrupts should be disabled
                                                                          during a Comparator mode change.
                                                                          Otherwise, a false interrupt may occur.

FIGURE 8-3:        COMPARATOR I/O OPERATING MODES

Comparators Reset (POR Default Value)                          Comparators Off
CM<2:0> = 000                                                  CM<2:0> = 111

RA0/AN0/        A VIN-                                         RA0/AN0/         D  VIN-
C1-/SEG12       A VIN+ C1                                                          VIN+ C1
                                            Off (Read as `0')  C1-/SEG12        D           Off (Read as `0')
RA3/AN3/
                                                               RA3/AN3/

C1+/VREF+/SEG15                                                C1+/VREF+/SEG15

RA1/AN1/        A  VIN-                                        RA1/AN1/         D  VIN-
                   VIN+ C2                                                         VIN+ C2
C2-/SEG7                                    Off (Read as `0')  C2-/SEG7                     Off (Read as `0')
                                             C1OUT
RA2/AN2/        A                            C2OUT             RA2/AN2/         D

C2+/VREF-/COM2                                                 C2+/VREF-/COM2

Two Independent Comparators                                    Four Inputs Multiplexed to Two Comparators
CM<2:0> = 100                                                  CM<2:0> = 010

RA0/AN0/        A  VIN-                                        RA0/AN0/ A          CIS = 0  VIN-
                   VIN+ C1                                     C1-/SEG12           CIS = 1  VIN+ C1
C1-/SEG12                                                      RA3/AN3/ A                                   C1OUT
                                                                                                            C2OUT
RA3/AN3/        A                                              C1+/VREF+/SEG15

C1+/VREF+/SEG15                                                RA1/AN1/ A
                                                               C2-/SEG7
RA1/AN1/        A  VIN-                                        RA2/AN2/ A          CIS = 0  VIN-
                   VIN+ C2                                     C2+/VREF-/COM2      CIS = 1  VIN+ C2

C2-/SEG7

RA2/AN2/        A

C2+/VREF-/COM2                                                                              From CVREF Module

Two Common Reference Comparators                               Two Common Reference Comparators with Outputs
CM<2:0> = 011                                                  CM<2:0> = 110

RA0/AN0/        A  VIN-                                        RA0/AN0/   A        VIN-
                   VIN+ C1                                                         VIN+ C1
C1-/SEG12                                   C1OUT              C1-/SEG12                    C1OUT
                                            C2OUT
RA3/AN3/        D

C1+/VREF+/SEG15                                                                             RA4

RA1/AN1/        A                                              RA1/AN1/   A        VIN-     C2OUT
                                                                                   VIN+ C2   RA5
C2-/SEG7           VIN-                                        C2-/SEG7
                   VIN+ C2
RA2/AN2/        A                                              RA2/AN2/   A

C2+/VREF-/COM2                                                 C2+/VREF-/COM2

One Independent Comparator with Reference Option               Three Inputs Multiplexed to Two Comparators
CM<2:0> = 101                                                  CM<2:0> = 001

RA0/AN0/ D         VIN-                                        RA0/AN0/         A
C1-/SEG12          VIN+ C1
RA3/AN3/ D                                  Off (Read as `0')  C1-/SEG12           CIS = 0  VIN-
C1+/VREF+/                                                                         CIS = 1  VIN+ C1
SEG15                                                          RA3/AN3/         A                             C1OUT
                                                                                                              C2OUT
                                                               C1+/VREF+/SEG15

RA1/AN1/     A     VIN-                                        RA1/AN1/         A           VIN-
C2-/SEG7                                                                                    VIN+ C2
                                                               C2-/SEG7
RA2/AN2/
C2+/VREF-/   A CIS = 0 VIN+ C2              C2OUT              RA2/AN2/         A
COM2         A CIS = 1                       RA5
                                                               C2+/VREF-/COM2

                Internal 0.6V reference

Legend:                                     D = Digital Input.  CIS (CMCON0<3>) is the computer Input Switch.
A = Analog Input, port reads zeros always.

2005 Microchip Technology Inc.                   Preliminary                              DS41265A-page 97
PIC16F946

FIGURE 8-4:       COMPARATOR C1 OUTPUT BLOCK DIAGRAM

                                      MULTIPLEX                                             C1INV
                            Port Pins

To C1OUT pin                Q                        D
To Data Bus

                                                 EN

                  RD CMCON

Set C1IF bit                                     Q      D

                                                       EN                                   RD CMCON

                                                     CL

                                                           NReset

FIGURE 8-5:       COMPARATOR C2 OUTPUT BLOCK DIAGRAM

                                      MULTIPLEX                                             C2INV
                            Port Pins

To TMR1          C2SYNC
To C2OUT pin            0
                        1
                            Q                        D

                                                 EN        TMR1
                                                           Clock Source(1)

To Data Bus                 Q                        D

                                                 EN

                  RD CMCON

Set C2IF bit                                     Q      D

                                                       EN                                   RD CMCON
                                                     CL

                                                                                     Reset
Note 1: Comparator 2 output is latched on falling edge of T1 clock source.

DS41265A-page 98            Preliminary                                                      2005 Microchip Technology Inc.
                                                                              PIC16F946

REGISTER 8-2:  CMCON1 COMPARATOR CONFIGURATION REGISTER (ADDRESS: 97h)

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

               --                 --   --                 --         --   --   T1GSS C2SYNC

               bit 7                                                                        bit 0

bit 7-2:       Unimplemented: Read as `0'
bit 1
               T1GSS: Timer1 Gate Source Select bit
bit 0          1 = Timer1 gate source is T1G pin (RC4 must be configured as digital input)
               0 = Timer1 gate source is Comparator 2 Output

               C2SYNC: Comparator 2 Synchronize bit
               1 = C2 output synchronized with falling edge of Timer1 clock
               0 = C2 output not synchronized with Timer1 clock

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

8.4 Comparator Outputs                                    8.5 Comparator Interrupts

The comparator outputs are read through the               The comparator interrupt flags are set whenever there is
CMCON0 register. These bits are read-only. The            a change in the output value of its respective comparator.
comparator outputs may also be directly output to the     Software will need to maintain information about the
RA4 and RA5 I/O pins. When enabled, multiplexers in       status of the output bits, as read from CMCON0<7:6>, to
the output path of the RA4 and RA5 pins will switch       determine the actual change that has occurred. The CxIF
and the output of each pin will be the unsynchronized     bits, PIR2<6:5>, are the Comparator Interrupt flags. This
output of the comparator. The uncertainty of each of      bit must be reset in software by clearing it to `0'. Since it
the comparators is related to the input offset voltage    is also possible to write a `1' to this register, a simulated
and the response time given in the specifications.        interrupt may be initiated.
Figure 8-4 and Figure 8-5 show the output block
diagram for Comparator 1 and 2.                           The CxIE bits (PIE2<6:5>) and the PEIE bit
                                                          (INTCON<6>) must be set to enable the interrupts. In
The TRIS bits will still function as an output            addition, the GIE bit must also be set. If any of these
enable/disable for the RA4 and RA5 pins while in this     bits are cleared, the interrupt is not enabled, though the
mode.                                                     CxIF bits will still be set if an interrupt condition occurs.

The polarity of the comparator outputs can be changed     The user, in the Interrupt Service Routine, can clear the
using the C1INV and C2INV bits (CMCON0<5:4>).             interrupt in the following manner:

Timer1 gate source can be configured to use the T1G       a) Any read or write of CMCON0. This will end the
pin or Comparator 2 output as selected by the T1GSS             mismatch condition.
bit (CMCON1<1>). This feature can be used to time
the duration or interval of analog events. The output of  b) Clear flag bit CxIF
Comparator 2 can also be synchronized with Timer1
by setting the C2SYNC bit (CMCON1<0>). When               A mismatch condition will continue to set flag bit CxIF.
enabled, the output of Comparator 2 is latched on the     Reading CMCON0 will end the mismatch condition and
falling edge of Timer1 clock source. If a prescaler is    allow flag bits CxIF to be cleared.
used with Timer1, Comparator 2 is latched after the
prescaler. To prevent a race condition, the Comparator        Note:  If a change in the CMCON0 register
2 output is latched on the falling edge of the Timer1                (CxOUT) should occur when a read
clock source and Timer1 increments on the rising edge                operation is being executed (start of the Q2
of its clock source. See (Figure 8-5), Comparator 2                  cycle), then the CxIF (PIR2<6:5>) interrupt
Block Diagram and (Figure 5-1), Timer1 Block                         flag may not get set.
Diagram for more information.

It is recommended to synchronize Comparator 2 with
Timer1 by setting the C2SYNC bit when Comparator 2
is used as the Timer1 gate source. This ensures Timer1
does not miss an increment if Comparator 2 changes
during an increment.

2005 Microchip Technology Inc.       Preliminary                                          DS41265A-page 99
PIC16F946

8.6 Comparator Reference                                8.6.2     VOLTAGE REFERENCE
                                                                  ACCURACY/ERROR
The Comparator module also allows the selection of an
internally generated voltage reference for one of the   The full range of VSS to VDD cannot be realized due to
comparator inputs. The VRCON register, Register 8-3,    the construction of the module. The transistors on the
controls the voltage reference module shown in          top and bottom of the resistor ladder network
Figure 8-6.                                             (Figure 8-6) keep CVREF from approaching VSS or
                                                        VDD. The exception is when the module is disabled by
8.6.1  CONFIGURING THE VOLTAGE                          clearing the VREN bit (VRCON<7>). When disabled,
       REFERENCE                                        the reference voltage is VSS when VR<3:0> = 0000.
                                                        This allows the comparators to detect a zero-crossing
The voltage reference can output 32 distinct voltage    and not consume CVREF module current.
levels; 16 in a high range and 16 in a low range.

The following equation determines the output voltages:  The voltage reference is VDD derived and therefore, the
                                                        CVREF output changes with fluctuations in VDD. The
EQUATION 8-1:                                           tested absolute accuracy of the comparator voltage
   VRR = 1 (low range): CVREF = (VR3:VR0/24) x VDD      reference can be found in Section 19.0 "Electrical
   VRR = 0 (high range):                                Specifications".
              CVREF = (VDD/4) + (VR3:VR0 x VDD/32)

FIGURE 8-6:          COMPARATOR VOLTAGE REFERENCE BLOCK DIAGRAM
                                                                  16 Stages

                     8R           R                 R          R  R

VDD                                                                          8R      VRR

              VREN   16-1 Analog
        CVREF to         MUX
     Comparator

              Input

                     VR<3:0>

                              VREN
                              VR <3:0> = `0000'

DS41265A-page 100                    Preliminary                      2005 Microchip Technology Inc.
8.7 Comparator Response Time                                           PIC16F946

Response time is the minimum time, after selecting a     8.9 Effects of a Reset
new reference voltage or input source, before the
comparator output is ensured to have a valid level. If   A device Reset forces the CMCON0, CMCON1 and
the internal reference is changed, the maximum delay     VRCON registers to their Reset states. This forces the
of the internal voltage reference must be considered     Comparator module to be in the Comparator Reset
when using the comparator outputs. Otherwise, the        mode, CM<2:0> = 000 and the voltage reference to its
maximum delay of the comparators should be used          OFF state. Thus, all potential inputs are analog inputs
(Table 19-9).                                            with the comparator and voltage reference disabled to
                                                         consume the smallest current possible.
8.8 Operation During Sleep

The comparators and voltage reference, if enabled
before entering Sleep mode, remain active during
Sleep. This results in higher Sleep currents than shown
in the power-down specifications. The additional
current consumed by the comparator and the voltage
reference is shown separately in the specifications. To
minimize power consumption while in Sleep mode, turn
off the comparator, CM<2:0> = 111, and voltage
reference, VRCON<7> = 0.

While the comparator is enabled during Sleep, an
interrupt will wake-up the device. If the GIE bit
(INTCON<7>) is set, the device will jump to the inter-
rupt vector (0004h), and if clear, continues execution
with the next instruction. If the device wakes up from
Sleep, the contents of the CMCON0, CMCON1 and
VRCON registers are not affected.

2005 Microchip Technology Inc.  Preliminary            DS41265A-page 101
PIC16F946

REGISTER 8-3:      VRCON VOLTAGE REFERENCE CONTROL REGISTER (ADDRESS: 9Dh)

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

                   VREN          --      VRR           --         VR3    VR2      VR1        VR0

                   bit 7                                                                     bit 0

         bit 7     VREN: CVREF Enable bit
                   1 = CVREF circuit powered on
         bit 6     0 = CVREF circuit powered down, no IDD drain and CVREF = VSS.
         bit 5
                   Unimplemented: Read as `0'
         bit 4
         bit 3-0   VRR: CVREF Range Selection bit
                   1 = Low range
                   0 = High range

                   Unimplemented: Read as `0'

                   VR<3:0>: CVREF Value Selection bits 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

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

TABLE 8-2: REGISTERS ASSOCIATED WITH COMPARATOR MODULE

Address 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

0Bh/8Bh  INTCON    GIE    PEIE   T0IE    INTE   RBIE       T0IF   INTF   RBIF 0000 000x 0000 000x
0Dh
9Ch      PIR2      OSFIF C2IF    C1IF    LCDIF  --         LVDIF  --     CCP2IF 0000 -0-0 0000 -0-0
97h
85h      CMCON0 C2OUT C1OUT C2INV C1INV         CIS        CM2    CM1    CM0 0000 0000 0000 0000
8Dh
9Dh      CMCON1    --     --         --  --     --         --     T1GSS C2SYNC ---- --10 ---- --10
Legend:
         TRISA     TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 1111 1111 1111 1111

         PIE2      OSFIE C2IE    C1IE    LCDIE  --         LVDIE  --     CCP2IE 0000 -0-0 0000 -0-0

         VRCON     VREN   --     VRR     --     VR3        VR2    VR1    VR0 0-0- 0000 0-0- 0000

         x = unknown, u = unchanged, = unimplemented, read as `0'. Shaded cells are not used by the comparator or Comparator Voltage
         Reference module.

DS41265A-page 102                        Preliminary                      2005 Microchip Technology Inc.
9.0 LIQUID CRYSTAL DISPLAY                                           PIC16F946
         (LCD) DRIVER MODULE
                                                       Once the module is initialized for the LCD panel, the
The Liquid Crystal Display (LCD) driver module         individual bits of the LCDDATA<11:0> registers are
generates the timing control to drive a static or      cleared/set to represent a clear/dark pixel,
multiplexed LCD panel. In the PIC16F946 device, the    respectively:
module drives the panels of up to four commons and up
to 42 segments. It also provides control of the LCD    LCDDATA0 SEG7COM0:SEG0COM0
pixel data.                                             LCDDATA1 SEG15COM0:SEG8COM0
                                                       LCDDATA2 SEG23COM0:SEG16COM0
The LCD driver module supports:                         LCDDATA3 SEG7COM1:SEG0COM1
                                                       LCDDATA4 SEG15COM1:SEG8COM1
Direct driving of LCD panel                           LCDDATA5 SEG23COM1:SEG16COM1
Three LCD clock sources with selectable prescaler    LCDDATA6 SEG7COM2:SEG0COM2
Up to four commons:                                  LCDDATA7 SEG15COM2:SEG8COM2
                                                       LCDDATA8 SEG23COM2:SEG16COM2
   - Static                                             LCDDATA9 SEG7COM3:SEG0COM3
   - 1/2 multiplex                                     LCDDATA10 SEG15COM3:SEG8COM3
   - 1/3 multiplex                                     LCDDATA11 SEG23COM3:SEG16COM3
   - 1/4 multiplex                                     LCDDATA12 SEG31COM0:SEG24COM0
42 segments                                           LCDDATA13 SEG39COM0:SEG32COM0
Static, 1/2 or 1/3 LCD Bias                           LCDDATA14 SEG41COM0:SEG40COM0
                                                       LCDDATA15 SEG31COM1:SEG24COM1
The module has 32 registers:                            LCDDATA16 SEG39COM1:SEG32COM1
                                                       LCDDATA17 SEG41COM1:SEG40COM1
LCD Control Register (LCDCON)                         LCDDATA18 SEG31COM2:SEG24COM2
LCD Phase Register (LCDPS)                            LCDDATA19 SEG39COM2:SEG32COM2
Six LCD Segment Enable Registers                      LCDDATA20 SEG41COM2:SEG40COM2
                                                       LCDDATA21 SEG31COM3:SEG24COM3
   (LCDSE<5:0>)                                        LCDDATA22 SEG39COM3:SEG32COM3
24 LCD Data Registers (LCDDATA<11:0>)                LCDDATA23 SEG41COM3:SEG40COM3

The LCDCON register, shown in Register 9-1, controls   As an example, LCDDATAx is detailed in Register 9-4.
the operation of the LCD driver module. The LCDPS
register, shown in Register 9-2, configures the LCD    Once the module is configured, the LCDEN
clock source prescaler and the type of waveform;       (LCDCON<7>) bit is used to enable or disable the LCD
Type-A or Type-B. The LCDSE<2:0> registers configure   module. The LCD panel can also operate during Sleep
the functions of the port pins:                        by clearing the SLPEN (LCDCON<6>) bit.

LCDSE0  SE<7:0>
LCDSE1  SE<15:8>
LCDSE2  SE<23:16>
LCDSE3  SE<31:24>
LCDSE4  SE<39:32>
LCDSE5  SE<41:40>

As an example, LCDSEn is detailed in Register 9-3.

2005 Microchip Technology Inc.         Preliminary   DS41265A-page 103
PIC16F946

FIGURE 9-1:        LCD DRIVER MODULE BLOCK DIAGRAM

                   Data Bus     LCDDATAx        168       SEG<42:0>
                                Registers         to                         To I/O Pads(1)
                                                 42
                                  24 x 8        MUX
                                (= 4 x 24)

                                Timing Control

                                LCDCON          COM<3:0>  To I/O Pads(1)
                                 LCDPS
                                LCDSEn

                   FOSC/8192

                   T10SC/32     Clock Source
                   LFINTOSC/32   Select and
                                  Prescaler

Note 1: These signals are connected directly to the I/O pads, but may be tri-stated, depending on the
              configuration of the LCD module.

DS41265A-page 104                           Preliminary    2005 Microchip Technology Inc.
                                                              PIC16F946

REGISTER 9-1:  LCDCON LIQUID CRYSTAL DISPLAY CONTROL REGISTER (ADDRESS: 107h)

               R/W-0 R/W-0 R/C-0 R/W-1 R/W-0 R/W-0                          R/W-1               R/W-1

               LCDEN SLPEN WERR VLCDEN CS1               CS0                LMUX1 LMUX0

               bit 7                                                                            bit 0

bit 7          LCDEN: LCD Driver Enable bit
bit 6          1 = LCD driver module is enabled
bit 5          0 = LCD driver module is disabled
bit 4
bit 3-2        SLPEN: LCD Driver Enable in Sleep mode bit
               1 = LCD driver module is disabled in Sleep mode
bit 1-0        0 = LCD driver module is enabled in Sleep mode

               WERR: LCD Write Failed Error bit
               1 = LCDDATAx register written while LCDPS = 0 (must be cleared in software)
               0 = No LCD write error

               VLCDEN: LCD Bias Voltage Pins Enable bit
               1 = VLCD pins are enabled
               0 = VLCD pins are disabled

               CS<1:0>: Clock Source Select bits
               00 = FOSC/8192
               01 = T1OSC (Timer1)/32
               1x = LFINTOSC (31 kHz)/32

               LMUX<1:0>: Commons Select bits

               LMUX<1:0>              Multiplex   Maximum Number of Pixels     Bias
                     00            Static (COM0)                    42        Static
                     01           1/2 (COM<1:0>)                    84      1/2 or 1/3
                     10           1/3 (COM<2:0>)                   126      1/2 or 1/3
                     11           1/4 (COM<3:0>)                   168
                                                                                1/3

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

2005 Microchip Technology Inc.       Preliminary                          DS41265A-page 105
PIC16F946

REGISTER 9-2:      LCDPS LCD PRESCALER SELECT REGISTER (ADDRESS: 108h)

                   R/W-0 R/W-0         R-0  R-0          R/W-0 R/W-0 R/W-0           R/W-0
                                                                                      LP0
                   WFT BIASMD LCDA          WA           LP3  LP2               LP1       bit 0

                   bit 7

bit 7              WFT: Waveform Type Select bit
bit 6
                   1 = Type-B waveform (phase changes on each frame boundary)
bit 5              0 = Type-A waveform (phase changes within each common type)
bit 4
bit 3-0            BIASMD: Bias Mode Select bit

                   When LMUX<1:0> = 00:

                   0 = Static Bias mode (do not set this bit to `1')
                   When LMUX<1:0> = 01:

                   1 = 1/2 Bias mode
                   0 = 1/3 Bias mode
                   When LMUX<1:0> = 10:

                   1 = 1/2 Bias mode
                   0 = 1/3 Bias mode
                   When LMUX<1:0> = 11:

                   0 = 1/3 Bias mode (do not set this bit to `1')

                   LCDA: LCD Active Status bit

                   1 = LCD driver module is active
                   0 = LCD driver module is inactive

                   WA: LCD Write Allow Status bit

                   1 = Write into the LCDDATAx registers is allowed
                   0 = Write into the LCDDATAx registers is not allowed

                   LP<3:0>: LCD Prescaler Select bits

                   1111 = 1:16
                   1110 = 1:15
                   1101 = 1:14
                   1100 = 1:13
                   1011 = 1:12
                   1010 = 1:11
                   1001 = 1:10
                   1000 = 1:9
                   0111 = 1:8
                   0110 = 1:7
                   0101 = 1:6
                   0100 = 1:5
                   0011 = 1:4
                   0010 = 1:3
                   0001 = 1:2
                   0000 = 1:1

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

DS41265A-page 106                      Preliminary             2005 Microchip Technology Inc.
                                                                  PIC16F946

REGISTER 9-3:  LCDSEn LCD SEGMENT REGISTERS (ADDRESS: 11Ch, 11Dh, 11Eh, 19Ch,
               19Dh, OR 19Eh)

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

               SEn                SEn    SEn    SEn        SEn    SEn    SEn    SEn

               bit 7                                                            bit 0

bit 7-0        SEn: Segment Enable bits

               1 = Segment function of the pin is enabled
               0 = I/O function of the pin is enabled

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

REGISTER 9-4:  LCDDATAx LCD DATA REGISTERS (ADDRESS: 110h-119h, 11Ah, 11Bh,
               190h-199h, 19Ah, OR 19Bh)

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

               SEGx-              SEGx-  SEGx-  SEGx-      SEGx-  SEGx-  SEGx-  SEGx-
               COMy               COMy   COMy   COMy       COMy   COMy   COMy   COMy

               bit 7                                                            bit 0

bit 7-0        SEGx-COMy: Pixel On bits

               1 = Pixel on (dark)
               0 = Pixel off (clear)

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

2005 Microchip Technology Inc.         Preliminary                     DS41265A-page 107
PIC16F946

9.1 LCD Clock Source Selection                            9.1.1 LCD PRESCALER

The LCD driver module has 3 possible clock sources:       A 16-bit counter is available as a prescaler for the LCD
                                                          clock. The prescaler is not directly readable or writable;
FOSC/8192                                               its value is set by the LP<3:0> bits (LCDPS<3:0>), which
T1OSC/32                                                determine the prescaler assignment and prescale ratio.
LFINTOSC/32
                                                          The prescale values from 1:1 through 1:16.
The first clock source is the system clock divided by
8192 (FOSC/8192). This divider ratio is chosen to         9.2 LCD Bias Types
provide about 1 kHz output when the system clock is
8 MHz. The divider is not programmable. Instead, the      The LCD driver module can be configured into three
LCD prescaler bits, LCDPS<3:0>, are used to set the       bias types:
LCD frame clock rate.
                                                          Static Bias (2 voltage levels: VSS and VDD)
The second clock source is the T1OSC/32. This also         1/2 Bias (3 voltage levels: VSS, 1/2 VDD and VDD)
gives about 1 kHz when a 32.768 kHz crystal is used       1/3 Bias (4 voltage levels: VSS, 1/3 VDD, 2/3 VDD
with the Timer1 oscillator. To use the Timer1 oscillator
as a clock source, the T1OSCEN (T1CON<3>) bit                and VDD)
should be set.
                                                          This module uses an external resistor ladder to
The third clock source is the 31 kHz LFINTOSC/32, which   generate the LCD bias voltages.
provides approximately 1 kHz output.
                                                          The external resistor ladder should be connected to the
The second and third clock sources may be used to         Bias 1 pin, Bias 2 pin, Bias 3 pin and VSS. The Bias 3
continue running the LCD while the processor is in        pin should also be connected to VDD.
Sleep.
                                                          Figure 9-2 shows the proper way to connect the
Using the bits, CS<1:0> (LCDCON<3:2>), any of these       resistor ladder to the Bias pins.
clock sources can be selected.
                                                          Note:              VLCD pins used to supply LCD bias
                                                                             voltage are enabled on power-up (POR)
                                                                             and must be disabled by the user by
                                                                             clearing LCDCON<4>, the VLCDEN bit,
                                                                             (see Register 9-1).

FIGURE 9-2:        LCD BIAS RESISTOR LADDER CONNECTION DIAGRAM

                                                                                     Static  1/2 Bias 1/3 Bias
                                                                                     Bias
                                                          VLCD 3 To          VLCD 0            VSS           VSS
                                                          VLCD 2 LCD         VLCD 1   VSS    1/2 VDD       1/3 VDD
                                                          VLCD 1             VLCD 2    --    1/2 VDD       2/3 VDD
                                                          VLCD 0(1)  Driver  VLCD 3    --
                                                                                      VDD      VDD           VDD

      LCD Bias 3 LCD Bias 2 LCD Bias 1                                  Connections for External R-ladder
                                                                                Static Bias
VDD*         10 k*         10 k*
VDD*                                                                               1/2 Bias
                                                                     VSS

VDD*         10 k*  10 k*  10 k*                                                   1/3 Bias
                                                                     VSS

          * These values are provided for design guidance only and should be optimized for the application by the
              designer.

Note 1: Internal connection.

DS41265A-page 108          Preliminary                                                       2005 Microchip Technology Inc.
                                                                               PIC16F946

9.3 LCD Multiplex Types                                    TABLE 9-2: FRAME FREQUENCY
                                                                                FORMULAS
The LCD driver module can be configured into four
multiplex types:                                           Multiplex       Frame Frequency =

Static (only COM0 used)                                   Static        Clock source/(4 x 1 x (LP<3:0> + 1))
1/2 multiplex (COM0 and COM1 are used)                      1/2         Clock source/(2 x 2 x (LP<3:0> + 1))
1/3 multiplex (COM0, COM1 and COM2 are used)                1/3         Clock source/(1 x 3 x (LP<3:0> + 1))
1/4 multiplex (all COM0, COM1, COM2 and COM3                1/4         Clock source/(1 x 4 x (LP<3:0> + 1))
                                                                      Clock source is FOSC/8192, T1OSC/32 or
   are used)                                               Note:      LFINTOSC/32.

The LMUX<1:0> setting decides the function of RB5,         TABLE 9-3:  APPROXIMATE FRAME
RA2 and RD0 pins (see Table 9-1 for details).                          FREQUENCY (IN Hz) USING
                                                              LP<3:0>  FOSC @ 8 MHz, TIMER1 @
If the pin is a digital I/O, the corresponding TRIS bit            2   32.768 kHz OR INTOSC
controls the data direction. If the pin is a COM drive,            3
then the TRIS setting of that pin is overridden.                   4   Static  1/2  1/3       1/4
                                                                   5
   Note: On a Power-on Reset, the LMUX<1:0>                        6
               bits are `11'.                                      7

TABLE 9-1: RD0, RA2, RB5 FUNCTION                                      85      85   114       85

LMUX                                                                   64      64   85        64
<1:0>
       RD0  RA2                   RB5                                  51      51   68        51

00     Digital I/O Digital I/O Digital I/O                             43      43   57        43

01     Digital I/O Digital I/O COM1 Driver                             37      37   49        37

10     Digital I/O COM2 Driver COM1 Driver                             32      32   43        32

11 COM3 Driver COM2 Driver COM1 Driver

9.4 Segment Enables

The LCDSEn registers are used to select the pin
function for each segment pin. The selection allows
each pin to operate as either an LCD segment driver or
as one of the pin's alternate functions. To configure the
pin as a segment pin, the corresponding bits in the
LCDSEn registers must be set to `1'. See Figures 9-4
and 9-5 for more details.

If the pin is a digital I/O, the corresponding TRIS bit
controls the data direction. Any bit set in the LCDSEn
registers overrides any bit settings in the corresponding
TRIS register.

   Note: On a Power-on Reset, these pins are
               configured as digital I/O.

9.5 Pixel Control

The LCDDATAx registers contain bits which define the
state of each pixel. Each bit defines one unique pixel.

Register 9-4 shows the correlation of each bit in the
LCDDATAx registers to the respective common and
segment signals.

Any LCD pixel location not being used for display can
be used as general purpose RAM.

9.6 LCD Frame Frequency

The rate at which the COM and SEG outputs change is
called the LCD frame frequency.

2005 Microchip Technology Inc.       Preliminary                                  DS41265A-page 109
PIC16F946

FIGURE 9-3:        LCD CLOCK GENERATION

FOSC 8192                                                              COM0
                                                                            COM1
                                                                                COM2
                                                                                    COM3

T1OSC 32 kHz                           4 STAT
Crystal Osc.
                   32                                                      1, 2, 3, 4
                                                                          Ring Counter
                                       2 DUP         4-bit Prog Presc
                                                                           LMUX<1:0>
     LFINTOSC           32              TRIP                           (LCDCON<1:0>)
Nom FRC = 31 kHz                         QUAD

                                                          LP<3:0>
                                                      (LCDPS<3:0>)

                             CS<1:0>      LMUX<1:0>
                        (LCDCON<3:2>)  (LCDCON<1:0>)

DS41265A-page 110                      Preliminary    2005 Microchip Technology Inc.
2005 Microchip Technology Inc.      LCD   COM0                  COM1                  COM2                  COM3                    Pin No.   PORT       Alternate  FIGURE 9-4:
                                  Function                                                                                           28/40-pin             Functions
                                            LCDDATAx        LCD   LCDDATAx        LCD   LCDDATAx        LCD   LCDDATAx         LCD               RB0
                                  SEG0       Address     Segment   Address     Segment   Address     Segment   Address      Segment    21/33     RB1           INT
                                  SEG1                                                                                                 22/34     RB2
                                  SEG2      LCDDATA0, 0           LCDDATA3, 0           LCDDATA6, 0           LCDDATA9, 0              23/35     RB3    C1OUT/T0CKI
                                  SEG3                                                                                                 24/36     RA4   C2OUT/AN4/SS
                                  SEG4      LCDDATA0, 1           LCDDATA3, 1           LCDDATA6, 1           LCDDATA9, 1                        RA5                  LCD SEGMENT MAPPING WORKSHEET (PART 1 OF 2)
                                  SEG5                                                                                                   6/6     RC3           AN1
                                  SEG6      LCDDATA0, 2           LCDDATA3, 2           LCDDATA6, 2           LCDDATA9, 2                7/7     RA1   RX/DT/SDI/SDA
                                  SEG7                                                                                                 14/18     RC7   TX/CK/SCK/SCL
                                  SEG8      LCDDATA0, 3           LCDDATA3, 3           LCDDATA6, 3           LCDDATA9, 3                3/3     RC6
                                  SEG9                                                                                                 18/26     RC5     T1CKI/CCP1
                                  SEG10     LCDDATA0, 4           LCDDATA3, 4           LCDDATA6, 4           LCDDATA9, 4              17/25     RC4       T1G/SDO
                                  SEG11                                                                                                16/24     RA0           AN0
                                  SEG12     LCDDATA0, 5           LCDDATA3, 5           LCDDATA6, 5           LCDDATA9, 5              15/23     RB7
                                  SEG13                                                                                                  2/2     RB6  ICSPDAT/ICDDAT
                                  SEG14     LCDDATA0, 6           LCDDATA3, 6           LCDDATA6, 6           LCDDATA9, 6              28/40     RA3   ICSPCK/ICDCK
                                  SEG15                                                                                                27/39     RD3      AN3/VREF+
                                  SEG16     LCDDATA0, 7           LCDDATA3, 7           LCDDATA6, 7           LCDDATA9, 7                5/5     RD4
                                  SEG17                                                                                                 -/26     RD5           AN5
Preliminary                       SEG18     LCDDATA1, 0           LCDDATA4, 0           LCDDATA7, 0           LCDDATA10, 0              -/27     RD6           AN6
                                  SEG19                                                                                                 -/28     RD7           AN7
                                  SEG20     LCDDATA1, 1           LCDDATA4, 1           LCDDATA7, 1           LCDDATA10, 1              -/29     RE0
                                  SEG21                                                                                                 -/30     RE1
                                  SEG22     LCDDATA1, 2           LCDDATA4, 2           LCDDATA7, 2           LCDDATA10, 2               -/8     RE2
                                  SEG23                                                                                                  -/9
                                            LCDDATA1, 3           LCDDATA4, 3           LCDDATA7, 3           LCDDATA10, 3              -/10

                                            LCDDATA1, 4           LCDDATA4, 4           LCDDATA7, 4           LCDDATA10, 4

                                            LCDDATA1, 5           LCDDATA4, 5           LCDDATA7, 5           LCDDATA10, 5

                                            LCDDATA1, 6           LCDDATA4, 6           LCDDATA7, 6           LCDDATA10, 6

                                            LCDDATA1, 7           LCDDATA4, 7           LCDDATA7, 7           LCDDATA10, 7

                                            LCDDATA2, 0           LCDDATA5, 0           LCDDATA8, 0           LCDDATA11, 0

                                            LCDDATA2, 1           LCDDATA5, 1           LCDDATA8, 1           LCDDATA11, 1

                                            LCDDATA2, 2           LCDDATA5, 2           LCDDATA8, 2           LCDDATA11, 2

                                            LCDDATA2, 3           LCDDATA5, 3           LCDDATA8, 3           LCDDATA11, 3                                                                                         PIC16F946

                                            LCDDATA2, 4           LCDDATA5, 4           LCDDATA8, 4           LCDDATA11, 4

DS41265A-page 111                           LCDDATA2, 5           LCDDATA5, 5           LCDDATA8, 5           LCDDATA11, 5

                                            LCDDATA2, 6           LCDDATA5, 6           LCDDATA8, 6           LCDDATA11, 6

                                            LCDDATA2, 7           LCDDATA5, 7           LCDDATA8, 7           LCDDATA11, 7
DS41265A-page 112                    LCD    COM0                   COM1                   COM2                   COM3                    Pin No.   PORT  Alternate  FIGURE 9-5:                                  PIC16F946
                                  Function                                                                                              28/40-pin        Functions
                                                                                                                                                    RE4
                                  SEG24     LCDDATAx         LCD   LCDDATAx         LCD   LCDDATAx         LCD   LCDDATAx         LCD       37      RE5
                                  SEG25      Address      Segment   Address      Segment   Address      Segment   Address      Segment      42      RE6
                                  SEG26                                                                                                     43      RE7
                                  SEG27     LCDDATA12, 0           LCDDATA15, 0           LCDDATA18, 0           LCDDATA21, 0               44      RF4
                                  SEG28                                                                                                     45      RF5
                                  SEG29     LCDDATA12, 1           LCDDATA15, 1           LCDDATA18, 1           LCDDATA21, 1               46      RF6             LCD SEGMENT MAPPING WORKSHEET (PART 2 OF 2)
                                  SEG30                                                                                                     47      RF7
                                  SEG31     LCDDATA12, 2           LCDDATA15, 2           LCDDATA18, 2           LCDDATA21, 2               48      RF0
                                  SEG32                                                                                                     11      RF1
                                  SEG33     LCDDATA12, 3           LCDDATA15, 3           LCDDATA18, 3           LCDDATA21, 3               12      RF2
                                  SEG34                                                                                                     13      RF3
                                  SEG35     LCDDATA12, 4           LCDDATA15, 4           LCDDATA18, 4           LCDDATA21, 4               14      RG0
                                  SEG36                                                                                                      3      RG1
                                  SEG37     LCDDATA12, 5           LCDDATA15, 5           LCDDATA18, 5           LCDDATA21, 5                4      RG2
                                  SEG38                                                                                                      5      RG3
                                  SEG39     LCDDATA12, 6           LCDDATA15, 6           LCDDATA18, 6           LCDDATA21, 6                6      RG4
                                  SEG40                                                                                                      7      RG5
                                  SEG41     LCDDATA12, 7           LCDDATA15, 7           LCDDATA18, 7           LCDDATA21, 7                8

                                            LCDDATA13, 0           LCDDATA16, 0           LCDDATA19, 0           LCDDATA22, 0

Preliminary                                 LCDDATA13, 1           LCDDATA16, 1           LCDDATA19, 1           LCDDATA22, 1

                                            LCDDATA13, 2           LCDDATA16, 2           LCDDATA19, 2           LCDDATA22, 2

                                            LCDDATA13, 3           LCDDATA16, 3           LCDDATA19, 3           LCDDATA22, 3

                                            LCDDATA13, 4           LCDDATA16, 4           LCDDATA19, 4           LCDDATA22, 4

                                            LCDDATA13, 5           LCDDATA16, 5           LCDDATA19, 5           LCDDATA22, 5

                                            LCDDATA13, 6           LCDDATA16, 6           LCDDATA19, 6           LCDDATA22, 6

                                            LCDDATA13, 7           LCDDATA16, 7           LCDDATA19, 7           LCDDATA22, 7

                                            LCDDATA14, 0           LCDDATA17, 0           LCDDATA20, 0           LCDDATA23, 0

                                            LCDDATA14, 1           LCDDATA17, 1           LCDDATA20, 1           LCDDATA23, 1

2005 Microchip Technology Inc.
                                                                           PIC16F946

9.7 LCD Waveform Generation                               The LCDs can be driven by two types of waveform:
                                                          Type-A and Type-B. In Type-A waveform, the phase
LCD waveforms are generated so that the net AC            changes within each common type, whereas in Type-B
voltage across the dark pixel should be maximized and     waveform, the phase changes on each frame
the net AC voltage across the clear pixel should be       boundary. Thus, Type-A waveform maintains `0' VDC
minimized. The net DC voltage across any pixel should     over a single frame, whereas Type-B waveform takes
be zero.                                                  two frames.

The COM signal represents the time slice for each             Note 1: If Sleep has to be executed with LCD
common, while the SEG contains the pixel data.                            Sleep enabled (LCDCON is
                                                                          `1'), then care must be taken to execute
The pixel signal (COM-SEG) will have no DC compo-                         Sleep only when VDC on all the pixels is
nent and it can take only one of the two rms values. The                  `0'.
higher rms value will create a dark pixel and a lower
rms value will create a clear pixel.                                 2: When the LCD clock source is FOSC/8192,
                                                                          if Sleep is executed, irrespective of the
As the number of commons increases, the delta                             LCDCON setting, the LCD goes
between the two rms values decreases. The delta                           into Sleep. Thus, take care to see that VDC
represents the maximum contrast that the display can                      on all pixels is `0' when Sleep is executed.
have.
                                                          Figure 9-6 through Figure 9-16 provide waveforms for
                                                          static, half-multiplex, one-third-multiplex and
                                                          quarter-multiplex drives for Type-A and Type-B
                                                          waveforms.

FIGURE 9-6:  TYPE-A/TYPE-B WAVEFORMS IN STATIC DRIVE

                                                                           V1

                                          COM0                             V0

COM0

                                                                                                                                     V1
                                          SEG0

                                                                                                                                     V0

                                                                                                                                     V1
                                          SEG1

                                                                                                                                     V0

                                                                           V1

                                          COM0-SEG0                        V0

                                                                           -V1

                                          COM0-SEG1                        V0

                                                                  1 Frame

      SEG7
         SEG6
            SEG5
               SEG4
                  SEG3
                         SEG2
                                 SEG1
                                    SEG0

2005 Microchip Technology Inc.                     Preliminary           DS41265A-page 113
PIC16F946

FIGURE 9-7:        TYPE-A WAVEFORMS IN 1/2 MUX, 1/2 BIAS DRIVE

                                                                V2

                                    COM0                        V1

COM1                                                            V0

                                                                V2

COM0                                COM1                        V1

                                                                V0

                                                                V2

                                    SEG0                        V1

                                                                V0

                                                                V2

                                    SEG1                        V1

                                                                V0

      SEG3                                                      V2
                   SEG2
                          SEG1                                  V1
                              SEG0

                   COM0-SEG0                                    V0

                                                                -V1

                                                                -V2

                                                                V2

                                                                V1

                   COM0-SEG1                                    V0

                                                                -V1

                                                                                                           -V2
                                                       1 Frame

DS41265A-page 114                         Preliminary            2005 Microchip Technology Inc.
                                                          PIC16F946

FIGURE 9-8:  TYPE-B WAVEFORMS IN 1/2 MUX, 1/2 BIAS DRIVE

                                                          V2

COM1                                COM0                  V1

                                                          V0

COM0
                                                                                                                                             V2

                                    COM1                  V1

                                                          V0

                                                                                                                                  V2
                                    SEG0

                                                                                                                                  V1
                                                                                                                                  V0

      SEG3                                                                                                                        V2
                  SEG2              SEG1
                          SEG1
                              SEG0                                                                                                V1
                                                                                                                                  V0

                                                          V2

                                                          V1

                                  COM0-SEG0               V0

                                                          -V1

                                                          -V2

                                                          V2

                                                          V1

                                  COM0-SEG1               V0

                                                          -V1

                                                                                                               -V2
                                                          2 Frames

2005 Microchip Technology Inc.             Preliminary  DS41265A-page 115
PIC16F946

FIGURE 9-9:        TYPE-A WAVEFORMS IN 1/2 MUX, 1/3 BIAS DRIVE

                                                                                                                                               V3
                                                                                                                                               V2
                                               COM0
                                                                                                                                               V1
COM1
                                                                                                                                               V0

                                                                                                                                               V3
COM0

                                                                                                                                               V2
                                               COM1

                                                                                                                                               V1

                                                                                                                                               V0

                                                                                                                                               V3
                                                                                                                                               V2
                                                SEG0
                                                                                                                                               V1

                                                                                                                                               V0

                                                                                                                                               V3

                                                                                                                                               V2
                                                SEG1

                                                                                                                                               V1

                                                                                                                                               V0
SEG3
             SEG2
                    SEG1
                        SEG0

                                                                V3

                                                                V2

                                                                V1

                   COM0-SEG0                                    V0

                                                                -V1

                                                                -V2

                                                                -V3

                                                                V3

                                                                V2

                                                                V1

                   COM0-SEG1                                    V0

                                                                -V1

                                                                                               -V2
                                           1 Frame

                                                                                               -V3

DS41265A-page 116             Preliminary                        2005 Microchip Technology Inc.
                                                           PIC16F946

FIGURE 9-10:  TYPE-B WAVEFORMS IN 1/2 MUX, 1/3 BIAS DRIVE

                                                           V3

                                                                                                                                   V2
                                    COM0

COM1                                                       V1

                                                           V0

                                                                                                                                               V3
COM0

                                                                                                                                               V2
                                               COM1

                                                                                                                                               V1

                                                           V0

                                                           V3

                                                                                                                                   V2
                                    SEG0

                                                                                                                                   V1

                                                           V0

                                                           V3

      SEG3                                                                                                                         V2
                   SEG2             SEG1
                          SEG1
                              SEG0                                                                                                 V1

                                                           V0

                                                           V3

                                                           V2

                                                           V1

                                  COM0-SEG0                V0

                                                           -V1

                                                           -V2

                                                           -V3

                                                           V3

                                                           V2

                                                           V1

                                  COM0-SEG1                V0

                                                           -V1

                                                                                                               -V2
                                                          2 Frames

                                                                                                               -V3

2005 Microchip Technology Inc.             Preliminary   DS41265A-page 117
PIC16F946

FIGURE 9-11:       TYPE-A WAVEFORMS IN 1/3 MUX, 1/2 BIAS DRIVE

                                                                         V2

                                 COM0                                    V1

                                                                         V0

                                                                         V2

COM2                             COM1                                    V1

                                                                         V0

COM1                                                                     V2

COM0                             COM2                                    V1

                                                                         V0

                                                                         V2

                                 SEG0                                    V1
                                 SEG2

                                                                         V0

                                                                         V2

                                 SEG1                                    V1

      SEG2                                                               V0
                SEG1
                           SEG0

                                                                         V2

                                                                         V1

                                 COM0-SEG0                               V0

                                                                         -V1

                                                                         -V2

                                                                         V2

                                                                         V1

                                 COM0-SEG1                               V0

                                                                         -V1

                                                                         -V2

                                                                1 Frame

DS41265A-page 118                           Preliminary          2005 Microchip Technology Inc.
                                                           PIC16F946

FIGURE 9-12:  TYPE-B WAVEFORMS IN 1/3 MUX, 1/2 BIAS DRIVE

                                                                                                                         V2
                                  COM0

                                                                                                                         V1
                                                                                                                         V0

COM2

                                  COM1                     V2

COM1                                                       V1

COM0                                                       V0

                                                                                                                         V2
                                  COM2

                                                                                                                         V1
                                                                                                                         V0

      SEG2                                                                                                               V2
                SEG1              SEG0
                           SEG0
                                                                                                                         V1
                                                                                                                         V0

                                                                                                                         V2
                                  SEG1

                                                                                                                         V1
                                                                                                                         V0

                                                           V2

                                                           V1

                                  COM0-SEG0                V0

                                                           -V1

                                                           -V2

                                  COM0-SEG1                                                V2
                                                                                           V1
                                                                                           V0
                                                                                          -V1
                                                                                          -V2

                                                           2 Frames

2005 Microchip Technology Inc.             Preliminary   DS41265A-page 119
PIC16F946

FIGURE 9-13:       TYPE-A WAVEFORMS IN 1/3 MUX, 1/3 BIAS DRIVE

COM2                                      COM0                                                  V3
                                          COM1                                                  V2
COM1                                      COM2                                                  V1
COM0                                      SEG0                                                  V0
                                          SEG2                                                  V3
      SEG2                                SEG1                                                  V2
                SEG1                                                                            V1
                           SEG0  COM0-SEG0                                                      V0
                                                                                                V3
                                 COM0-SEG1                                                      V2
                                                                                                V1
                                                                                                V0
                                                                                                V3
                                                                                                V2
                                                                                                V1
                                                                                                V0
                                                                                                V3
                                                                                                V2
                                                                                                V1
                                                                                                V0
                                                                                                V3
                                                                                                V2
                                                                                                V1
                                                                                                V0
                                                                                               -V1
                                                                                               -V2
                                                                                               -V3
                                                                                                V3
                                                                                                V2
                                                                                                V1
                                                                                                V0
                                                                                               -V1
                                                                                               -V2
                                                                                               -V3
                                                                1 Frame

DS41265A-page 120                               Preliminary      2005 Microchip Technology Inc.
                                                              PIC16F946

FIGURE 9-14:  TYPE-B WAVEFORMS IN 1/3 MUX, 1/3 BIAS DRIVE

COM2                                       COM0                                               V3
                                           COM1                                               V2
COM1                                       COM2                                               V1
COM0                                       SEG0                                               V0
                                           SEG1                                               V3
      SEG2                                                                                    V2
                SEG1              COM0-SEG0                                                   V1
                           SEG0                                                               V0
                                                                                              V3
                                  COM0-SEG1                                                   V2
                                                                                              V1
                                                                                              V0
                                                                                              V3
                                                                                              V2
                                                                                              V1
                                                                                              V0
                                                                                              V3
                                                                                              V2
                                                                                              V1
                                                                                              V0
                                                                                              V3
                                                                                              V2
                                                                                              V1
                                                                                              V0
                                                                                             -V1
                                                                                             -V2
                                                                                             -V3
                                                                                              V3
                                                                                              V2
                                                                                              V1
                                                                                              V0
                                                                                             -V1
                                                                                             -V2
                                                                                             -V3
                                                              2 Frames

2005 Microchip Technology Inc.                 Preliminary  DS41265A-page 121
PIC16F946

FIGURE 9-15:       TYPE-A WAVEFORMS IN 1/4 MUX, 1/3 BIAS DRIVE

COM3

                                                                V3

COM2                    COM0                                    V2
                                                                V1
                                                                V0

COM1                                                            V3
COM0
                        COM1                                    V2
                                                                V1
                                                                V0

                                                                V3

                        COM2                                    V2
                                                                V1
                                                                V0

                                                                V3

                        COM3                                    V2
                                                                V1
                                                                V0

                                                                V3

                        SEG0                                    V2
                                                                V1
                                                                V0

      SEG1                                                      V3
                  SEG0
                        SEG1                                    V2
                                                                V1
                                                                V0

                                                                V3

                                                                V2
                                                                V1
                                                                V0
                        COM0-SEG0
                                                                -V1
                                                                -V2

                                                                -V3

                                                                V3
                                                                V2
                                                                V1
                                                                V0
                        COM0-SEG1
                                                                -V1
                                                                -V2

                                                1 Frame         -V3

DS41265A-page 122                  Preliminary                   2005 Microchip Technology Inc.
                                                                    PIC16F946

FIGURE 9-16:  TYPE-B WAVEFORMS IN 1/4 MUX, 1/3 BIAS DRIVE

COM3

                                                                    V3

COM2                              COM0                              V2
                                                                    V1
                                                                    V0

COM1                                                                V3
COM0
                                  COM1                              V2
                                                                    V1
                                                                    V0

                                                                    V3

                                  COM2                              V2
                                                                    V1