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

型号

产品描述

搜索
 

PIC16F7X

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

器件描述

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

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

参数

PIC16F7X功能数量 1
PIC16F7X端子数量 28
PIC16F7X最大工作温度 125 Cel
PIC16F7X最小工作温度 -40 Cel
PIC16F7X最大供电/工作电压 5.5 V
PIC16F7X最小供电/工作电压 4 V
PIC16F7X额定供电电压 5 V
PIC16F7X外部数据总线宽度 0.0
PIC16F7X输入输出总线数量 22
PIC16F7X线速度 20 MHz
PIC16F7X加工封装描述 0.300 INCH, PLASTIC, MS-013, SO-28
PIC16F7X无铅 Yes
PIC16F7X欧盟RoHS规范 Yes
PIC16F7X中国RoHS规范 Yes
PIC16F7X状态 ACTIVE
PIC16F7X工艺 CMOS
PIC16F7X包装形状 RECTANGULAR
PIC16F7X包装尺寸 SMALL OUTLINE
PIC16F7X表面贴装 Yes
PIC16F7X端子形式 GULL WING
PIC16F7X端子间距 1.27 mm
PIC16F7X端子涂层 MATTE TIN
PIC16F7X端子位置 DUAL
PIC16F7X包装材料 PLASTIC/EPOXY
PIC16F7X温度等级 AUTOMOTIVE
PIC16F7XADC通道 Yes
PIC16F7X地址总线宽度 0.0
PIC16F7X位数 8
PIC16F7X最大FCLK时钟频率 20 MHz
PIC16F7X微处理器类型 RISC MICROCONTROLLER
PIC16F7XPWM通道 Yes
PIC16F7XROM编程 FLASH

文档预览

PIC16F7X器件文档内容

                                     M

                                                  PIC16F7X
                                                 Data Sheet

                                 28/40-pin, 8-bit CMOS FLASH
                                                   Microcontrollers

2002 Microchip Technology Inc.  DS30325B
Note the following details of the code protection feature on PICmicro MCUs.

The PICmicro family meets the specifications contained in the Microchip Data Sheet.
Microchip believes that its family of PICmicro microcontrollers is one of the most secure products 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 knowl-

      edge, require using the PICmicro microcontroller in a manner outside the operating specifications contained in the data sheet.
      The person doing so may be 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 product.

If you have any further questions about this matter, please contact the local sales office nearest to you.

Information contained in this publication regarding device       Trademarks
applications and the like is intended through suggestion only
and may be superseded by updates. It is your responsibility to   The Microchip name and logo, the Microchip logo, FilterLab,
ensure that your application meets with your specifications.     KEELOQ, MPLAB, PIC, PICmicro, PICMASTER, PICSTART,
No representation or warranty is given and no liability is       PRO MATE, SEEVAL and The Embedded Control Solutions
assumed by Microchip Technology Incorporated with respect        Company are registered trademarks of Microchip Technology
to the accuracy or use of such information, or infringement of   Incorporated in the U.S.A. and other countries.
patents or other intellectual property rights arising from such
use or otherwise. Use of Microchip's products as critical com-   dsPIC, ECONOMONITOR, FanSense, FlexROM, fuzzyLAB,
ponents in life support systems is not authorized except with    In-Circuit Serial Programming, ICSP, ICEPIC, microID,
express written approval by Microchip. No licenses are con-      microPort, Migratable Memory, MPASM, MPLIB, MPLINK,
veyed, implicitly or otherwise, under any intellectual property  MPSIM, MXDEV, PICC, PICDEM, PICDEM.net, rfPIC, Select
rights.                                                          Mode and Total Endurance are trademarks of Microchip
                                                                 Technology Incorporated in the U.S.A.

                                                                 Serialized Quick Term Programming (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.

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

                                                                       Printed on recycled paper.

DS30325B - page ii                                               Microchip received QS-9000 quality system
                                                                 certification for its worldwide headquarters,
                                                                 design and wafer fabrication facilities in
                                                                 Chandler and Tempe, Arizona in July 1999. The
                                                                 Company's quality system processes and
                                                                 procedures are QS-9000 compliant for its
                                                                 PICmicro 8-bit MCUs, KEELOQ code hopping
                                                                 devices, Serial EEPROMs and microperipheral
                                                                 products. In addition, Microchip's quality
                                                                 system for the design and manufacture of
                                                                 development systems is ISO 9001 certified.

                                                                                                       2002 Microchip Technology Inc.
M                                                                      PIC16F7X

          28/40-Pin 8-Bit CMOS FLASH Microcontrollers

Devices Included in this Data Sheet:                      Peripheral Features:

PIC16F73   PIC16F76                                     Timer0: 8-bit timer/counter with 8-bit prescaler
PIC16F74   PIC16F77                                     Timer1: 16-bit timer/counter with prescaler,

High Performance RISC CPU:                                   can be incremented during SLEEP via external
                                                             crystal/clock
High performance RISC CPU                               Timer2: 8-bit timer/counter with 8-bit period
Only 35 single word instructions to learn                  register, prescaler and postscaler
All single cycle instructions except for program         Two Capture, Compare, PWM modules
                                                             - Capture is 16-bit, max. resolution is 12.5 ns
   branches which are two-cycle                              - Compare is 16-bit, max. resolution is 200 ns
Operating speed: DC - 20 MHz clock input                   - PWM max. resolution is 10-bit
                                                          8-bit, up to 8-channel Analog-to-Digital converter
                           DC - 200 ns instruction cycle   Synchronous Serial Port (SSP) with SPI (Master
Up to 8K x 14 words of FLASH Program Memory,               mode) and I2C (Slave)
                                                          Universal Synchronous Asynchronous Receiver
   Up to 368 x 8 bytes of Data Memory (RAM)                  Transmitter (USART/SCI)
Pinout compatible to the PIC16C73B/74B/76/77             Parallel Slave Port (PSP), 8-bits wide with
Pinout compatible to the PIC16F873/874/876/877             external RD, WR and CS controls (40/44-pin only)
Interrupt capability (up to 12 sources)                  Brown-out detection circuitry for
Eight level deep hardware stack                            Brown-out Reset (BOR)
Direct, Indirect and Relative Addressing modes
Processor read access to program memory                 CMOS Technology:

Special Microcontroller Features:                         Low power, high speed CMOS FLASH technology
                                                          Fully static design
Power-on Reset (POR)                                     Wide operating voltage range: 2.0V to 5.5V
Power-up Timer (PWRT) and                               High Sink/Source Current: 25 mA
                                                          Industrial temperature range
   Oscillator Start-up Timer (OST)                         Low power consumption:
Watchdog Timer (WDT) with its own on-chip RC
                                                             - < 2 mA typical @ 5V, 4 MHz
   oscillator for reliable operation                         - 20 A typical @ 3V, 32 kHz
Programmable code protection                               - < 1 A typical standby current
Power saving SLEEP mode
Selectable oscillator options
In-Circuit Serial Programming (ICSP) via two

   pins

            Program Memory Data                                                 SSP
             (# Single Word SRAM I/O
Device        Instructions) (Bytes)     Interrupts         8-bit    CCP   SPI       I2C     USART  Timers
                                                          A/D (ch)  (PWM)                           8/16-bit
PIC16F73                                      11                                               Yes
PIC16F74                                      12               5           (Master) (Slave)    Yes    2/1
PIC16F76                                      11              8                                Yes    2/1
PIC16F77    4096                 192 22       12               5    2      Yes       Yes       Yes    2/1
            4096                 192 33                       8                                       2/1
            8192                 368 22                             2      Yes       Yes
            8192                 368 33
                                                                    2      Yes       Yes

                                                                    2      Yes       Yes

2002 Microchip Technology Inc.                                                              DS30325B-page 1
PIC16F7X

Pin Diagrams
     DIP, SOIC, SSOP

      MCLR/VPP               1                        28  RB7/PGD

      RA0/AN0                2                        27  RB6/PGC

      RA1/AN1                3                        26  RB5

      RA2/AN2                4                        25  RB4

      RA3/AN3/VREF           5       PIC16F76/73      24  RB3/PGM

      RA4/T0CKI              6                        23  RB2

      RA5/AN4/SS             7                        22  RB1

                 VSS         8                        21  RB0/INT

      OSC1/CLKIN             9                        20  VDD

      OSC2/CLKOUT            10                       19  VSS

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

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

      RC2/CCP1               13                       16  RC5/SDO

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

                                                               MLF               RA1/AN1
                                                                                    RA0/AN0
                                                                                        MCLR/VPP
                                                                                            RB7/PGD
                                                                                                RB6/PGC
                                                                                                    RB5
                                                                                                        RB4

                                                                                 28 27 26 25 24 23 22

                                                                 RA2/AN2      1                                    21  RB3/PGM
                                                          RA3/AN3/VREF                                                 RB2
                                                                              2                                    20  RB1
                                                              RA4/T0CKI                                                RB0/INT
                                                            RA5/AN4/SS        3 PIC16F73 19                            VDD
                                                                                                                       VSS
                                                                         VSS  4                                    18  RC7/RX/DT
                                                              OSC1/CLKI       5 PIC16F76 17
                                                            OSC2/CLKO
                                                                              6                                    16

                                                                              7                                    15

                                                                                 8 9 10 11 12 13 14

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

                 MCLR/VPP        1                40      RB7/PGD

                 RA0/AN0         2                39      RB6/PGC

                 RA1/AN1         3                38      RB5

                 RA2/AN2         4                37      RB4

      RA3/AN3/VREF               5                36      RB3/PGM

                 RA4/T0CKI       6                35      RB2

                 RA5/AN4/SS      7   PIC16F77/74  34      RB1

                 RE0/RD/AN5      8                33      RB0/INT

      RE1/WR/AN6                 9                32      VDD

                 RE2/CS/AN7      10               31      VSS

                      VDD        11               30      RD7/PSP7

                      VSS        12               29      RD6/PSP6

                 OSC1/CLKIN      13               28      RD5/PSP5

      OSC2/CLKOUT                14               27      RD4/PSP4

      RC0/T1OSO/T1CKI            15               26      RC7/RX/DT

      RC1/T1OSI/CCP2             16               25      RC6/TX/CK

                 RC2/CCP1        17               24      RC5/SDO

      RC3/SCK/SCL                18               23      RC4/SDI/SDA

                 RD0/PSP0        19               22      RD3/PSP3

                 RD1/PSP1        20               21      RD2/PSP2

DS30325B-page 2                                                                   2002 Microchip Technology Inc.
                                                                                                                                                                                      PIC16F7X

Pin Diagrams (Continued)
       PLCC

                                       RA3/AN3/VREF    RA2/AN2   RA1/AN1      RA0/AN0   MCLR/VPP  NC        RB7/PGD   RB6/PGC      RB5      RB4        NC

                                       6               5         4            3         2         1         44        43           42       41         40

                 RA4/T0CKI          7                                                                                                                        39            RB3/PGM
              RA5/AN4/SS                                                                                                                                                   RB2
              RE0/RD/AN5            8                                                                                                                        38            RB1
             RE1/WR/AN6                                                                                                                                                    RB0/INT
              RE2/CS/AN7            9                                                                                                                        37            VDD
                                                                                                                                                                           VSS
                          VDD       10                           PIC16F77                                                                                    36            RD7/PSP7
                           VSS      11                                                                                                                       35            RD6/PSP6
              OSC1/CLKIN                                                                                                                                                   RD5/PSP5
           OSC2/CLKOUT              12                           PIC16F74                                                                                    34            RD4/PSP4
     RC0/T1OSO/T1CK1                13                                                                                                                       33            RC7/RX/DT
                            NC
                                    14                                                                                                                       32

                                    15                                                                                                                       31

                                    16                                                                                                                       30

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

                                       RC1/T1OSI/CCP2  RC2/CCP1  RC3/SCK/SCL  RD0/PSP0  RD1/PSP1  RD2/PSP2  RD3/PSP3  RC4/SDI/SDA  RC5/SDO  RC6/TX/CK  NC

QFP                                                                                                                                          RC1/T1OSI/CCP2

                                       RC6/TX/CK  RC5/SDO        RC4/SDI/SDA  RD3/PSP3  RD2/PSP2  RD1/PSP1  RD0/PSP0  RC3/SCK/SCL  RC2/CCP1                  NC

                                     44           43       42                 41        40        39        38        37           36        35              34

     RC7/RX/DT                   1                                                                                                                           33            NC
      RD4/PSP4                                                                                                                                                             RC0/T1OSO/T1CKI
      RD5/PSP5                   2                                                                                                                           32            OSC2/CLKOUT
      RD6/PSP6                                                                                                                                                             OSC1/CLKIN
      RD7/PSP7                   3                                                                                                                           31            VSS
                                                                                                                                                                           VDD
               VSS               4                                                                                                                           30            RE2/AN7/CS
               VDD                                                                                                                                                         RE1/AN6/WR
         RB0/INT                 5 PIC16F77                                                                                                                  29            RE0/AN5/RD
               RB1                                                                                                                                                         RA5/AN4/SS
               RB2               6                     PIC16F74                                                                                              28            RA4/T0CKI
       RB3/PGM                   7                                                                                                                           27

                                 8                                                                                                                           26

                                 9                                                                                                                           25

                                 10                                                                                                                          24

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

                                     NC           NC       RB4                RB5       RB6/PGC   RB7/PGD   MCLR/VPP  RA0/AN0      RA1/AN1   RA2/AN2         RA3/AN3/VREF

2002 Microchip Technology Inc.                                                                                                                                                             DS30325B-page 3
PIC16F7X

Table of Contents

1.0 Device Overview ......................................................................................................................................................................... 5
2.0 Memory Organization................................................................................................................................................................ 13
3.0 Reading Program Memory........................................................................................................................................................ 29
4.0 I/O Ports.................................................................................................................................................................................... 31
5.0 Timer0 Module .......................................................................................................................................................................... 43
6.0 Timer1 Module .......................................................................................................................................................................... 47
7.0 Timer2 Module .......................................................................................................................................................................... 51
8.0 Capture/Compare/PWM Modules ............................................................................................................................................. 53
9.0 Synchronous Serial Port (SSP) Module.................................................................................................................................... 59
10.0 Universal Synchronous Asynchronous Receiver Transmitter (USART) ................................................................................... 69
11.0 Analog-to-Digital Converter (A/D) Module ................................................................................................................................ 83
12.0 Special Features of the CPU .................................................................................................................................................... 89
13.0 Instruction Set Summary......................................................................................................................................................... 105
14.0 Development Support ............................................................................................................................................................. 113
15.0 Electrical Characteristics......................................................................................................................................................... 119
16.0 DC and AC Characteristics Graphs and Tables ..................................................................................................................... 141
17.0 Packaging Information ............................................................................................................................................................ 151
Appendix A: Revision History ........................................................................................................................................................ 161
Appendix B: Device Differences .................................................................................................................................................... 161
Appendix C: Conversion Considerations ....................................................................................................................................... 162
Index ................................................................................................................................................................................................. 163
On-Line Support................................................................................................................................................................................ 169
Reader Response ............................................................................................................................................................................. 170
PIC16F7X Product Identification System .......................................................................................................................................... 171

                                    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@mail.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)
   The Microchip Corporate Literature Center; U.S. FAX: (480) 792-7277
  When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include liter-
  ature number) you are using.

Customer Notification System

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

DS30325B-page 4   2002 Microchip Technology Inc.
                                                                          PIC16F7X

1.0 DEVICE OVERVIEW                                     The available features are summarized in Table 1-1.
                                                        Block diagrams of the PIC16F73/76 and PIC16F74/77
This document contains device specific information      devices are provided in Figure 1-1 and Figure 1-2,
about the following devices:                            respectively. The pinouts for these device families are
                                                        listed in Table 1-2 and Table 1-3.
PIC16F73
PIC16F74                                              Additional information may be found in the PICmicroTM
PIC16F76                                              Mid-Range Reference Manual (DS33023), which may
PIC16F77                                              be obtained from your local Microchip Sales Represen-
                                                        tative or downloaded from the Microchip website. The
PIC16F73/76 devices are available only in 28-pin pack-  Reference Manual should be considered a complemen-
ages, while PIC16F74/77 devices are available in        tary document to this data sheet, and is highly recom-
40-pin and 44-pin packages. All devices in the          mended reading for a better understanding of the device
PIC16F7X family share common architecture, with the     architecture and operation of the peripheral modules.
following differences:

The PIC16F73 and PIC16F76 have one-half of
   the total on-chip memory of the PIC16F74 and
   PIC16F77

The 28-pin devices have 3 I/O ports, while the
   40/44-pin devices have 5

The 28-pin devices have 11 interrupts, while the
   40/44-pin devices have 12

The 28-pin devices have 5 A/D input channels,
   while the 40/44-pin devices have 8

The Parallel Slave Port is implemented only on
   the 40/44-pin devices

TABLE 1-1: PIC16F7X DEVICE FEATURES

                 Key Features      PIC16F73               PIC16F74     PIC16F76     PIC16F77

Operating Frequency              DC - 20 MHz            DC - 20 MHz  DC - 20 MHz  DC - 20 MHz
RESETS (and Delays)               POR, BOR               POR, BOR     POR, BOR     POR, BOR
                                 (PWRT, OST)            (PWRT, OST)  (PWRT, OST)  (PWRT, OST)
FLASH Program Memory
(14-bit words)                          4K                     4K           8K           8K
Data Memory (bytes)
Interrupts                       192                    192          368          368
I/O Ports
Timers                           11                     12           11           12
Capture/Compare/PWM Modules
Serial Communications            Ports A,B,C Ports A,B,C,D,E Ports A,B,C Ports A,B,C,D,E
Parallel Communications
8-bit Analog-to-Digital Module   3                      3            3            3
Instruction Set
Packaging                        2                      2            2            2

                                 SSP, USART SSP, USART SSP, USART SSP, USART

                                 --                     PSP          --           PSP

                                 5 Input Channels 8 Input Channels 5 Input Channels 8 Input Channels

                                 35 Instructions 35 Instructions 35 Instructions 35 Instructions

                                  28-pin DIP            40-pin PDIP   28-pin DIP  40-pin PDIP
                                 28-pin SOIC            44-pin PLCC  28-pin SOIC  44-pin PLCC
                                 28-pin SSOP            44-pin TQFP  28-pin SSOP  44-pin TQFP
                                  28-pin MLF                          28-pin MLF

2002 Microchip Technology Inc.                                                   DS30325B-page 5
PIC16F7X

FIGURE 1-1:      PIC16F73 AND PIC16F76 BLOCK DIAGRAM

                                   13                               Data Bus           8           PORTA
                                          Program Counter                                          PORTB
                 FLASH                                                 RAM                         PORTC        RA0/AN0
                 Program                    8 Level Stack              File                                     RA1/AN1
                 Memory                         (13-bit)            Registers                                   RA2/AN2/
                                                                                                                RA3/AN3/VREF
        Program  14                                              RAM Addr(1)    9                               RA4/T0CKI
           Bus                                                                                                  RA5/AN4/SS

                 Instruction reg                                    Addr MUX                                    RB0/INT
                                                                                                                RB1
                                   Direct Addr 7                                     Indirect                   RB2
                                                                                8 Addr                          RB3/PGM
                                                                                                                RB4
                                                                              FSR reg                           RB5
                                                                                                                RB6/PGC
                                                                                       STATUS reg               RB7/PGD
                                   8
                                                                                                                RC0/T1OSO/T1CKI
                                      Power-up                   3              MUX                             RC1/T1OSI/CCP2
                                        Timer                                                                   RC2/CCP1
                 Instruction                                              ALU                                   RC3/SCK/SCL
                 Decode &             Oscillator                 8                                              RC4/SDI/SDA
                                   Start-up Timer                                                               RC5/SDO
                   Control                                               W reg                                  RC6/TX/CK
                                      Power-on                                                                  RC7/RX/DT
                                        Reset
                   Timing
                 Generation          Watchdog
                                        Timer
OSC1/CLKIN
OSC2/CLKOUT                          Brown-out
                                        Reset

                                   MCLR VDD, VSS

Timer0                     Timer1                        Timer2               8-bit A/D
CCP1
                           CCP2    Synchronous                                  USART
                                    Serial Port

                  Device                                 Program FLASH                             Data Memory
                 PIC16F73                                         4K                                 192 Bytes
                 PIC16F76                                         8K                                 368 Bytes

Note 1: Higher order bits are from the STATUS register.

DS30325B-page 6                                                                                     2002 Microchip Technology Inc.
                                                                                                         PIC16F7X

FIGURE 1-2:      PIC16F74 AND PIC16F77 BLOCK DIAGRAM

                                  13                                Data Bus           8          PORTA
                                         Program Counter                                          PORTB
                                                                                                  PORTC                RA0/AN0
                 FLASH                                                RAM                         PORTD                RA1/AN1
                 Program                                                                          PORTE                RA2/AN2
                 Memory                                                File                                            RA3/AN3/VREF
                                                                    Registers                                          RA4/T0CKI
                                  8 Level Stack                                                                        RA5/AN4/SS
                                     (13-bit)
                                                                                                                       RB0/INT
        Program  14                                              RAM Addr(1)    9                                      RB1
           Bus                                                                                                         RB2
                                                                                                                       RB3/PGM
                 Instruction reg                                    Addr MUX                                           RB4
                                                                                                                       RB5
                                  Direct Addr 7                                      Indirect                          RB6/PGC
                                                                                8 Addr                                 RB7/PGD

                                                                              FSR reg                                  RC0/T1OSO/T1CKI
                                                                                                                       RC1/T1OSI/CCP2
                                                                                      STATUS reg                       RC2/CCP1
                                  8                                                                                    RC3/SCK/SCL
                                                                                                                       RC4/SDI/SDA
                                     Power-up                    3              MUX                                    RC5/SDO
                                       Timer                                                                           RC6/TX/CK
                 Instruction                                              ALU                                          RC7/RX/DT
                 Decode &            Oscillator                  8
                                  Start-up Timer                                                                       RD0/PSP0
                   Control                                               W reg                                         RD1/PSP1
                                     Power-on                                                                          RD2/PSP2
                   Timing              Reset                                                                           RD3/PSP3
                 Generation                                                                                            RD4/PSP4
                                    Watchdog                                                                           RD5/PSP5
OSC1/CLKIN                             Timer                                                                           RD6/PSP6
OSC2/CLKOUT                                                                                                            RD7/PSP7
                                    Brown-out
                                       Reset                                                                           RE0/AN5/RD

                                  MCLR VDD, VSS                                                                        RE1/AN6/WR

                                                                                                                       RE2/AN7/CS

Timer0               Timer1                              Timer2               8-bit A/D

CCP1                   CCP2       Synchronous                                   USART             Parallel Slave Port
                                   Serial Port

              Device                                     Program FLASH                            Data Memory
             PIC16F74                                             4K                                192 Bytes
             PIC16F77                                             8K                                368 Bytes

Note 1: Higher order bits are from the STATUS register.

2002 Microchip Technology Inc.                                                                                        DS30325B-page 7
PIC16F7X

TABLE 1-2: PIC16F73 AND PIC16F76 PINOUT DESCRIPTION

Pin Name                  DIP   MLF   I/O/P      Buffer                                          Description
                         SSOP   Pin#  Type        Type
                         SOIC
                          Pin#

OSC1/CLKI                9      6                ST/CMOS(3) Oscillator crystal or external clock input.
     OSC1
     CLKI                                   I            Oscillator crystal input or external clock source input. ST

OSC2/CLKO                                                buffer when configured in RC mode. Otherwise CMOS.
     OSC2
                                            I            External clock source input. Always associated with pin
     CLKO
                                                         function OSC1 (see OSC1/CLKI, OSC2/CLKO pins).

                         10     7                --      Oscillator crystal or clock output.

                                            O            Oscillator crystal output.

                                                         Connects to crystal or resonator in Crystal Oscillator

                                                         mode.

                                            O            In RC mode, OSC2 pin outputs CLKO, which has 1/4 the

                                                         frequency of OSC1 and denotes the instruction cycle rate.

MCLR/VPP                 1      26               ST      Master Clear (input) or programming voltage (output).
     MCLR
                                            I            Master Clear (Reset) input. This pin is an active low
     VPP
                                                         RESET to the device.

                                            P            Programming voltage input.

                                                         PORTA is a bi-directional I/O port.

RA0/AN0                  2      27               TTL
     RA0
     AN0                                    I/O          Digital I/O.
                                                         Analog input 0.
                                            I

RA1/AN1                  3      28               TTL
     RA1
     AN1                                    I/O          Digital I/O.
                                                         Analog input 1.
                                            I

RA2/AN2                  4      1                TTL
     RA2
     AN2                                    I/O          Digital I/O.
                                                         Analog input 2.
                                            I

RA3/AN3/VREF             5      2                TTL
     RA3
     AN3                                    I/O          Digital I/O.
     VREF                                                Analog input 3.
                                            I            A/D reference voltage input.

                                            I

RA4/T0CKI                6      4                ST
     RA4
     T0CKI                                  I/O          Digital I/O Open drain when configured as output.
                                                         Timer0 external clock input.
                                            I

RA5/SS/AN4               7      5                TTL
     RA5
     SS                                     I/O          Digital I/O.
     AN4                                                 SPI slave select input.
                                            I            Analog input 4.

                                            I

Legend:       I = input         O = output       I/O = input/output                              P = power

Note 1:       -- = Not used     TTL = TTL input  ST = Schmitt Trigger input
          2:
          3:  This buffer is a Schmitt Trigger input when configured as the external interrupt.

              This buffer is a Schmitt Trigger input when used in Serial Programming mode.

              This buffer is a Schmitt Trigger input when configured in RC Oscillator mode and a CMOS input otherwise.

DS30325B-page 8                                                                                   2002 Microchip Technology Inc.
                                                                                                            PIC16F7X

TABLE 1-2: PIC16F73 AND PIC16F76 PINOUT DESCRIPTION (CONTINUED)

     Pin Name             DIP    MLF   I/O/P      Buffer                                         Description
                         SSOP    Pin#  Type        Type
                         SOIC
                          Pin#

                                                             PORTB is a bi-directional I/O port. PORTB can be software

                                                             programmed for internal weak pull-up on all inputs.

RB0/INT                  21      18               TTL/ST(1)
     RB0
     INT                                     I/O             Digital I/O.

                                             I               External interrupt.

RB1                      22      19          I/O  TTL        Digital I/O.

RB2                      23      20          I/O  TTL        Digital I/O.

RB3/PGM                  24      21               TTL
     RB3
     PGM                                     I/O             Digital I/O.
                                                             Low voltage ICSP programming enable pin.
                                             I/O

RB4                      25      22          I/O  TTL        Digital I/O.

RB5                      26      23          I/O  TTL        Digital I/O.

RB6/PGC                  27      24               TTL/ST(2)
     RB6
     PGC                                     I/O             Digital I/O.

RB7/PGD                                      I/O             In-Circuit Debugger and ICSP programming clock.
     RB7
     PGD                 28      25               TTL/ST(2)

                                             I/O             Digital I/O.

                                             I/O             In-Circuit Debugger and ICSP programming data.

                                                             PORTC is a bi-directional I/O port.

RC0/T1OSO/T1CKI          11      8                ST

     RC0                                     I/O             Digital I/O.
                                                             Timer1 oscillator output.
     T1OSO                                   O               Timer1 external clock input.

     T1CKI                                   I

RC1/T1OSI/CCP2           12      9                ST

     RC1                                     I/O             Digital I/O.
                                                             Timer1 oscillator input.
     T1OSI                                   I               Capture2 input, Compare2 output, PWM2 output.

     CCP2                                    I/O

RC2/CCP1                 13      10               ST
     RC2
     CCP1                                    I/O             Digital I/O.
                                                             Capture1 input/Compare1 output/PWM1 output.
                                             I/O

RC3/SCK/SCL              14      11               ST
     RC3
     SCK                                     I/O             Digital I/O.
     SCL
                                             I/O             Synchronous serial clock input/output for SPI mode.
                                                             Synchronous serial clock input/output for I2C mode.
                                             I/O

RC4/SDI/SDA              15      12               ST
     RC4
     SDI                                     I/O             Digital I/O.
     SDA
                                             I               SPI data in.
                                                             I2C data I/O.
                                             I/O

RC5/SDO                  16      13               ST
     RC5
     SDO                                     I/O             Digital I/O.
                                                             SPI data out.
                                             O

RC6/TX/CK                17      14               ST
     RC6
     TX                                      I/O             Digital I/O.
     CK                                                      USART asynchronous transmit.
                                             O               USART 1 synchronous clock.

                                             I/O

RC7/RX/DT                18      15               ST
     RC7
     RX                                      I/O             Digital I/O.
     DT                                                      USART asynchronous receive.
                                             I               USART synchronous data.

                                             I/O

VSS                      8, 19 5, 16         P    --         Ground reference for logic and I/O pins.

VDD                      20      17          P    --         Positive supply for logic and I/O pins.

Legend:       I = input          O = output       I/O = input/output                             P = power

Note 1:       -- = Not used      TTL = TTL input  ST = Schmitt Trigger input
          2:
          3:  This buffer is a Schmitt Trigger input when configured as the external interrupt.

              This buffer is a Schmitt Trigger input when used in Serial Programming mode.

              This buffer is a Schmitt Trigger input when configured in RC Oscillator mode and a CMOS input otherwise.

2002 Microchip Technology Inc.                                                                               DS30325B-page 9
PIC16F7X

TABLE 1-3: PIC16F74 AND PIC16F77 PINOUT DESCRIPTION

Pin Name                 DIP PLCC QFP I/O/P   Buffer                                            Description
                         Pin# Pin# Pin# Type   Type

OSC1/CLKI                13  14  30           ST/CMOS(4) Oscillator crystal or external clock input.
     OSC1
     CLKI                                I                                Oscillator crystal input or external clock source input.

OSC2/CLKO                                                                 ST buffer when configured in RC mode. Otherwise
     OSC2
                                         I                                CMOS.
     CLKO
                                                                          External clock source input. Always associated with pin

                                                                          function OSC1 (see OSC1/CLKI, OSC2/CLKO pins).

                         14  15  31           --                          Oscillator crystal or clock output.

                                         O                                Oscillator crystal output.

                                                                          Connects to crystal or resonator in Crystal Oscillator

                                                                          mode.

                                         O                                In RC mode, OSC2 pin outputs CLKO, which has 1/4

                                                                          the frequency of OSC1 and denotes the instruction

                                                                          cycle rate.

MCLR/VPP                 1   2   18           ST                          Master Clear (input) or programming voltage (output).
     MCLR
                                         I                                Master Clear (Reset) input. This pin is an active low
     VPP
                                                                          RESET to the device.

                                         P                                Programming voltage input.

                                                                          PORTA is a bi-directional I/O port.

RA0/AN0                  2   3   19           TTL
     RA0
     AN0                                 I/O                              Digital I/O.
                                                                          Analog input 0.
                                         I

RA1/AN1                  3   4   20           TTL
     RA1
     AN1                                 I/O                              Digital I/O.
                                                                          Analog input 1.
                                         I

RA2/AN2                  4   5   21           TTL
     RA2
     AN2                                 I/O                              Digital I/O.
                                                                          Analog input 2.
                                         I

RA3/AN3/VREF             5   6   22           TTL
     RA3
     AN3                                 I/O                              Digital I/O.
     VREF                                                                 Analog input 3.
                                         I                                A/D reference voltage input.

                                         I

RA4/T0CKI                6   7   23           ST
     RA4
     T0CKI                               I/O                              Digital I/O Open drain when configured as output.
                                                                          Timer0 external clock input.
                                         I

RA5/SS/AN4               7   8   24           TTL
     RA5
     SS                                  I/O                              Digital I/O.
     AN4                                                                  SPI slave select input.
                                         I                                Analog input 4.

                                         I

Legend:       I = input      O = output       I/O = input/output                 P = power

Note 1:       -- = Not used  TTL = TTL input ST = Schmitt Trigger input
          2:
          3:  This buffer is a Schmitt Trigger input when configured as an external interrupt.

          4:  This buffer is a Schmitt Trigger input when used in Serial Programming mode.

              This buffer is a Schmitt Trigger input when configured as general purpose I/O and a TTL input when used in the Parallel

              Slave Port mode (for interfacing to a microprocessor bus).

              This buffer is a Schmitt Trigger input when configured in RC Oscillator mode and a CMOS input otherwise.

DS30325B-page 10                                                                                 2002 Microchip Technology Inc.
                                                                                                PIC16F7X

TABLE 1-3: PIC16F74 AND PIC16F77 PINOUT DESCRIPTION (CONTINUED)

     Pin Name            DIP PLCC QFP I/O/P        Buffer                                       Description
                         Pin# Pin# Pin# Type        Type

                                                                          PORTB is a bi-directional I/O port. PORTB can be software

                                                                          programmed for internal weak pull-up on all inputs.

RB0/INT                  33  36  8                 TTL/ST(1)
     RB0
     INT                                      I/O                         Digital I/O.

                                              I                           External interrupt.

RB1                      34  37  9            I/O  TTL                    Digital I/O.

RB2                      35  38  10           I/O  TTL                    Digital I/O.

RB3/PGM                  36  39  11                TTL
     RB3
     PGM                                      I/O                         Digital I/O.
                                                                          Low voltage ICSP programming enable pin.
                                              I/O

RB4                      37  41  14           I/O  TTL                    Digital I/O.

RB5                      38  42  15           I/O  TTL                    Digital I/O.

RB6/PGC                  39  43  16                TTL/ST(2)              Digital I/O.
     RB6                                                                  In-Circuit Debugger and ICSP programming clock.
     PGC                                      I/O
                                                                          Digital I/O.
RB7/PGD                                       I/O                         In-Circuit Debugger and ICSP programming data.
     RB7
     PGD                 40  44  17                TTL/ST(2)

                                              I/O

                                              I/O

                                                                          PORTC is a bi-directional I/O port.

RC0/T1OSO/T1CKI 15           16  32                ST

RC0                                           I/O                         Digital I/O.
                                                                          Timer1 oscillator output.
T1OSO                                         O                           Timer1 external clock input.

T1CKI                                         I

RC1/T1OSI/CCP2 16            18  35                ST

RC1                                           I/O                         Digital I/O.
                                                                          Timer1 oscillator input.
T1OSI                                         I                           Capture2 input, Compare2 output, PWM2 output.

CCP2                                          I/O

RC2/CCP1                 17  19  36                ST
     RC2
     CCP1                                     I/O                         Digital I/O.
                                                                          Capture1 input/Compare1 output/PWM1 output
                                              I/O

RC3/SCK/SCL              18  20  37                ST

RC3                                           I/O                         Digital I/O

SCK                                           I/O                         Synchronous serial clock input/output for SPI mode.
                                                                          Synchronous serial clock input/output for I2C mode.
SCL                                           I/O

RC4/SDI/SDA              23  25  42                ST
     RC4
     SDI                                      I/O                         Digital I/O.
     SDA
                                              I                           SPI data in.
                                                                          I2C data I/O.
                                              I/O

RC5/SDO                  24  26  43                ST
     RC5
     SDO                                      I/O                         Digital I/O.
                                                                          SPI data out.
                                              O

RC6/TX/CK                25  27  44                ST
     RC6
     TX                                       I/O                         Digital I/O.
     CK                                                                   USART asynchronous transmit.
                                              O                           USART 1 synchronous clock.

                                              I/O

RC7/RX/DT                26  29  1                 ST
     RC7
     RX                                       I/O                         Digital I/O.
     DT                                                                   USART asynchronous receive.
                                              I                           USART synchronous data.

                                              I/O

Legend:       I = input      O = output            I/O = input/output          P = power

Note 1:       -- = Not used  TTL = TTL input       ST = Schmitt Trigger input
          2:
          3:  This buffer is a Schmitt Trigger input when configured as an external interrupt.

          4:  This buffer is a Schmitt Trigger input when used in Serial Programming mode.

              This buffer is a Schmitt Trigger input when configured as general purpose I/O and a TTL input when used in the Parallel

              Slave Port mode (for interfacing to a microprocessor bus).

              This buffer is a Schmitt Trigger input when configured in RC Oscillator mode and a CMOS input otherwise.

2002 Microchip Technology Inc.                                                                                DS30325B-page 11
PIC16F7X

TABLE 1-3: PIC16F74 AND PIC16F77 PINOUT DESCRIPTION (CONTINUED)

     Pin Name            DIP PLCC QFP I/O/P     Buffer                                          Description
                         Pin# Pin# Pin# Type     Type

                                                                          PORTD is a bi-directional I/O port or parallel slave port

                                                                          when interfacing to a microprocessor bus.

RD0/PSP0                 19  21  38             ST/TTL(3)
     RD0
     PSP0                                  I/O                            Digital I/O.

RD1/PSP1                                   I/O                            Parallel Slave Port data.
     RD1
     PSP1                20  22  39        I    ST/TTL(3)

RD2/PSP2                                   I/O                            Digital I/O.
     RD2
     PSP2                                  I/O                            Parallel Slave Port data.

RD3/PSP3                 21  23  40        I    ST/TTL(3)
     RD3
     PSP3                                  I/O                            Digital I/O.

RD4/PSP4                                   I/O                            Parallel Slave Port data.
     RD4
     PSP4                22  24  41             ST/TTL(3)

RD5/PSP5                                   I/O                            Digital I/O.
     RD5
     PSP5                                  I/O                            Parallel Slave Port data.

RD6/PSP6                 27  30  2              ST/TTL(3)
     RD6
     PSP6                                  I/O                            Digital I/O.

RD7/PSP7                                   I/O                            Parallel Slave Port data.
     RD7
     PSP7                28  31  3              ST/TTL(3)

                                           I/O                            Digital I/O.

                                           I/O                            Parallel Slave Port data.

                         29  32  4              ST/TTL(3)

                                           I/O                            Digital I/O.

                                           I/O                            Parallel Slave Port data.

                         30  33  5              ST/TTL(3)

                                           I/O                            Digital I/O.

                                           I/O                            Parallel Slave Port data.

                                                                          PORTE is a bi-directional I/O port.

RE0/RD/AN5               8   9   25             ST/TTL(3)
     RE0
     RD                                    I/O                            Digital I/O.
     AN5
                                           I                              Read control for parallel slave port .
RE1/WR/AN6
     RE1                                   I                              Analog input 5.
     WR
     AN6                 9   10  26             ST/TTL(3)

RE2/CS/AN7                                 I/O                            Digital I/O.
     RE2
     CS                                    I                              Write control for parallel slave port .
     AN7
                                           I                              Analog input 6.

                         10  11  27             ST/TTL(3)

                                           I/O                            Digital I/O.

                                           I                              Chip select control for parallel slave port .

                                           I                              Analog input 7.

VSS                      12,31 13,34 6,29  P    --                        Ground reference for logic and I/O pins.

VDD                      11,32 12,35 7,28  P    --                        Positive supply for logic and I/O pins.

NC                       -- 1,17,2 12,13,       --                        These pins are not internally connected. These pins should

                             8, 40 33, 34                                 be left unconnected.

Legend:       I = input      O = output         I/O = input/output        P = power

Note 1:       -- = Not used  TTL = TTL input ST = Schmitt Trigger input
          2:
          3:  This buffer is a Schmitt Trigger input when configured as an external interrupt.

          4:  This buffer is a Schmitt Trigger input when used in Serial Programming mode.

              This buffer is a Schmitt Trigger input when configured as general purpose I/O and a TTL input when used in the Parallel

              Slave Port mode (for interfacing to a microprocessor bus).

              This buffer is a Schmitt Trigger input when configured in RC Oscillator mode and a CMOS input otherwise.

DS30325B-page 12                                                                                 2002 Microchip Technology Inc.
                                                                             PIC16F7X

2.0 MEMORY ORGANIZATION                                2.2 Data Memory Organization

There are two memory blocks in each of these           The Data Memory is partitioned into multiple banks,
PICmicro MCUs. The Program Memory and Data            which contain the General Purpose Registers and the
Memory have separate buses so that concurrent          Special Function Registers. Bits RP1 (STATUS<6>)
access can occur and is detailed in this section. The  and RP0 (STATUS<5>) are the bank select bits:
Program Memory can be read internally by user code
(see Section 3.0).                                            RP1:RP0                      Bank

Additional information on device memory may be found          00                           0
in the PICmicro Mid-Range Reference Manual
(DS33023).                                                    01                           1

2.1 Program Memory Organization                               10                           2

The PIC16F7X devices have a 13-bit program counter            11                           3
capable of addressing an 8K word x 14-bit program
memory space. The PIC16F77/76 devices have             Each bank extends up to 7Fh (128 bytes). The lower
8K words of FLASH program memory and the               locations of each bank are reserved for the Special
PIC16F73/74 devices have 4K words. The program         Function Registers. Above the Special Function Regis-
memory maps for PIC16F7X devices are shown in          ters are General Purpose Registers, implemented as
Figure 2-1. Accessing a location above the physically  static RAM. All implemented banks contain Special
implemented address will cause a wraparound.           Function Registers. Some frequently used Special
                                                       Function Registers from one bank may be mirrored in
The RESET Vector is at 0000h and the Interrupt Vector  another bank for code reduction and quicker access.
is at 0004h.
                                                       2.2.1  GENERAL PURPOSE REGISTER
                                                              FILE

                                                       The register file (shown in Figure 2-2 and Figure 2-3)
                                                       can be accessed either directly, or indirectly, through
                                                       the File Select Register FSR.

FIGURE 2-1:    PROGRAM MEMORY MAPS AND STACKS FOR PIC16F7X DEVICES

             PIC16F76/77                                               PIC16F73/74

               PC<12:0>                                                      PC<12:0>

CALL, RETURN                     13                           CALL, RETURN             13

RETFIE, RETLW                                                 RETFIE, RETLW

             Stack Level 1                                             Stack Level 1
             Stack Level 2                                             Stack Level 2

             Stack Level 8                                             Stack Level 8

             RESET Vector            0000h                    On-Chip  RESET Vector           0000h
             Interrupt Vector        0004h                    Program  Interrupt Vector
                                     0005h                    Memory                          0004h
                  Page 0                                                    Page 0            0005h
On-Chip                              07FFh
Program           Page 1             0800h                                  Page 1            07FFh
Memory            Page 2                                                                      0800h
                  Page 3             0FFFh                             Unimplemented
                                     1000h                               Read as `0'          0FFFh
                                                                                              1000h
                                     17FFh
                                     1800h                                                    1FFFh

                                     1FFFh

2002 Microchip Technology Inc.                                                        DS30325B-page 13
PIC16F7X

FIGURE 2-2:       PIC16F77/76 REGISTER FILE MAP

                     File               File                             File                        File
                  Address            Address                          Address                     Address

Indirect addr.(*) 00h      Indirect addr.(*) 80h   Indirect addr.(*)  100h     Indirect addr.(*)  180h
                                                         TMR0         101h      OPTION_REG        181h
TMR0              01h      OPTION_REG 81h                 PCL         102h                        182h
                                                                      103h            PCL         183h
PCL               02h      PCL       82h               STATUS         104h         STATUS         184h
                                                          FSR         105h                        185h
STATUS 03h                 STATUS 83h                                 106h            FSR         186h
                                                       PORTB          107h          TRISB         187h
FSR               04h      FSR       84h                              108h                        188h
                                                       PCLATH         109h         PCLATH         189h
PORTA             05h      TRISA     85h               INTCON         10Ah         INTCON         18Ah
                                                       PMDATA         10Bh        PMCON1          18Bh
PORTB 06h                  TRISB     86h                PMADR         10Ch                        18Ch
                                                       PMDATH         10Dh          General       18Dh
PORTC 07h                 TRISC     87h               PMADRH         10Eh          Purpose       18Eh
PORTD(1) 08h                                                          10Fh          Register      18Fh
PORTE(1) 09h               TRISD(1) 88h                General        110h         16 Bytes       190h
                                                       Purpose        111h                        191h
                           TRISE(1)  89h               Register       112h                        192h
                                                       16 Bytes       113h                        193h
PCLATH 0Ah                 PCLATH 8Ah                                 114h                        194h
                                                                      115h                        195h
INTCON 0Bh                 INTCON 8Bh                                 116h                        196h
                                                                      117h                        197h
PIR1              0Ch      PIE1      8Ch                              118h                        198h
                                                                      119h                        199h
PIR2              0Dh      PIE2      8Dh                              11Ah                        19Ah
                                                                      11Bh                        19Bh
TMR1L             0Eh      PCON      8Eh                              11Ch                        19Ch
                                                                      11Dh                        19Dh
TMR1H 0Fh                            8Fh                              11Eh                        19Eh
                                                                      11Fh                        19Fh
T1CON 10h                            90h                              120h

TMR2              11h                91h

T2CON 12h                  PR2       92h

SSPBUF 13h                 SSPADD 93h

SSPCON 14h                 SSPSTAT 94h

CCPR1L 15h                           95h

CCPR1H 16h                           96h

CCP1CON 17h                          97h

RCSTA 18h                  TXSTA     98h

TXREG 19h                  SPBRG     99h

RCREG 1Ah                            9Ah

CCPR2L 1Bh                           9Bh

CCPR2H 1Ch                           9Ch

CCP2CON 1Dh                          9Dh

ADRES 1Eh                            9Eh

ADCON0 1Fh                 ADCON1 9Fh

                  20h                A0h                                                          1A0h

General                    General                  General           16Fh      General           1EFh
Purpose                    Purpose                  Purpose           170h      Purpose           1F0h
Register                   Register                 Register                    Register
96 Bytes                                           80 Bytes           17Fh     80 Bytes           1FFh
                           80 Bytes
                   7Fh                        EFh  accesses                    accesses
Bank 0                                             70h-7Fh                     70h - 7Fh
                           accesses F0h
                                                   Bank 2                       Bank 3
                           70h-7Fh
                                              FFh

                            Bank 1

            Unimplemented data memory locations, read as '0'.
        * Not a physical register.
Note 1: These registers are not implemented on 28-pin devices.

DS30325B-page 14                                                                2002 Microchip Technology Inc.
                                                                                PIC16F7X

FIGURE 2-3:  PIC16F74/73 REGISTER FILE MAP

                File                          File                   File                     File
             Address                       Address                Address                  Address

Indirect addr.(*) 00h            Indirect addr.(*) 80h  Indirect addr.(*) 100h  Indirect addr.(*)  180h
                                                                                OPTION_REG         181h
TMR0         01h                 OPTION_REG 81h         TMR0      101h                             182h
                                                                                       PCL         183h
PCL          02h                 PCL       82h          PCL       102h              STATUS         184h
                                                                                                   185h
STATUS 03h                       STATUS 83h             STATUS 103h                    FSR         186h
                                                                                                   187h
FSR          04h                 FSR       84h          FSR       104h               TRISB         188h
                                                                                                   189h
PORTA        05h                 TRISA     85h                    105h              PCLATH         18Ah
                                                                                    INTCON         18Bh
PORTB 06h                        TRISB     86h          PORTB     106h             PMCON1          18Ch
                                                                                                   18Dh
PORTC 07h                       TRISC     87h                    107h                             18Eh
PORTD(1) 08h                                                                                       18Fh
PORTE(1) 09h                     TRISD(1) 88h                     108h                             190h

                                 TRISE(1)  89h                    109h

PCLATH 0Ah                       PCLATH 8Ah             PCLATH 10Ah

INTCON 0Bh                       INTCON 8Bh             INTCON 10Bh

PIR1         0Ch                 PIE1      8Ch          PMDATA 10Ch

PIR2         0Dh                 PIE2      8Dh          PMADR 10Dh

TMR1L        0Eh                 PCON      8Eh          PMDATH    10Eh
                                                        PMADRH    10Fh
TMR1H 0Fh                                  8Fh

T1CON 10h                                  90h                    110h

TMR2         11h                           91h

T2CON 12h                        PR2       92h

SSPBUF 13h                       SSPADD 93h

SSPCON 14h                       SSPSTAT 94h

CCPR1L 15h                                 95h

CCPR1H 16h                                 96h

CCP1CON 17h                                97h

RCSTA 18h                        TXSTA     98h

TXREG 19h                        SPBRG     99h

RCREG 1Ah                                  9Ah

CCPR2L 1Bh                                 9Bh

CCPR2H 1Ch                                 9Ch

CCP2CON 1Dh                                9Dh

ADRES 1Eh                                  9Eh

ADCON0 1Fh                       ADCON1 9Fh                       120h                             1A0h

             20h                           A0h

General                          General                accesses                accesses
Purpose                          Purpose                20h-7Fh                 A0h - FFh
Register                         Register
                                                                  16Fh            Bank 3           1EFh
96 Bytes                         96 Bytes                         170h                             1F0h

                   7Fh                            FFh             17Fh                             1FFh
Bank 0                           Bank 1
                                                        Bank 2

            Unimplemented data memory locations, read as '0'.
        * Not a physical register.
Note 1: These registers are not implemented on 28-pin devices.

2002 Microchip Technology Inc.                                                 DS30325B-page 15
PIC16F7X

2.2.2 SPECIAL FUNCTION REGISTERS                                The Special Function Registers can be classified into
                                                                two sets: core (CPU) and peripheral. Those registers
The Special Function Registers are registers used by            associated with the core functions are described in
the CPU and peripheral modules for controlling the              detail in this section. Those related to the operation of
desired operation of the device. These registers are            the peripheral features are described in detail in the
implemented as static RAM. A list of these registers is         peripheral feature section.
given in Table 2-1.

TABLE 2-1: SPECIAL FUNCTION REGISTER SUMMARY

Address Name      Bit 7  Bit 6              Bit 5        Bit 4  Bit 3       Bit 2              Bit 1  Bit 0  Value on:          Details
                                                                                                               POR,             on page
                                                                                                                BOR

Bank 0

00h(4) INDF       Addressing this location uses contents of FSR to address data memory (not a physical register) 0000 0000 27, 96

01h     TMR0      Timer0 Module Register                                                                     xxxx xxxx 45, 96

02h(4) PCL        Program Counter (PC) Least Significant Byte                                                0000 0000 26, 96

03h(4) STATUS     IRP    RP1                RP0          TO     PD          Z                  DC     C      0001 1xxx 19, 96

04h(4) FSR        Indirect Data Memory Address Pointer                                                       xxxx xxxx 27, 96

05h     PORTA     --     -- PORTA Data Latch when written: PORTA pins when read                              --0x 0000 32, 96

06h     PORTB     PORTB Data Latch when written: PORTB pins when read                                        xxxx xxxx 34, 96

07h     PORTC     PORTC Data Latch when written: PORTC pins when read                                        xxxx xxxx 35, 96

08h(5) PORTD      PORTD Data Latch when written: PORTD pins when read                                        xxxx xxxx 36, 96

09h(5) PORTE      --     --                 --           --     --          RE2                RE1    RE0 ---- -xxx 39, 96

0Ah(1,4) PCLATH   --     --                 -- Write Buffer for the upper 5 bits of the Program Counter      ---0 0000 26, 96

0Bh(4) INTCON     GIE    PEIE TMR0IE                     INTE   RBIE TMR0IF INTF                      RBIF 0000 000x 21, 96

0Ch     PIR1      PSPIF(3) ADIF             RCIF         TXIF   SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 23, 96

0Dh     PIR2      --     --                 --           --     --          --                 --     CCP2IF ---- ---0 24, 96

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

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

10h     T1CON     --     --      T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 47, 96

11h     TMR2      Timer2 Module Register                                                                     0000 0000 52, 96

12h     T2CON     -- TOUTPS3 TOUTPS2 TOUTPS TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 52, 96

13h     SSPBUF    Synchronous Serial Port Receive Buffer/Transmit Register                                   xxxx xxxx 64, 68, 96

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

15h     CCPR1L    Capture/Compare/PWM Register1 (LSB)                                                        xxxx xxxx 56, 96

16h     CCPR1H    Capture/Compare/PWM Register1 (MSB)                                                        xxxx xxxx 56, 96

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

18h     RCSTA     SPEN   RX9                SREN        CREN    --          FERR               OERR   RX9D 0000 -00x 70, 96

19h     TXREG     USART Transmit Data Register                                                               0000 0000 74, 96

1Ah     RCREG     USART Receive Data Register                                                                0000 0000 76, 96

1Bh     CCPR2L    Capture/Compare/PWM Register2 (LSB)                                                        xxxx xxxx 58, 96

1Ch     CCPR2H    Capture/Compare/PWM Register2 (MSB)                                                        xxxx xxxx 58, 96

1Dh     CCP2CON   --     --                 CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 54, 96

1Eh     ADRES     A/D Result Register Byte                                                                   xxxx xxxx 88, 96

1Fh     ADCON0    ADCS1 ADCS0 CHS2                      CHS1    CHS0         GO/               --     ADON 0000 00-0 83, 96
                                                                            DONE

Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as '0', r = reserved.
              Shaded locations are unimplemented, read as `0'.

Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the PC<12:8>, whose
                contents are transferred to the upper byte of the program counter during branches (CALL or GOTO).

          2: Other (non power-up) RESETS include external RESET through MCLR and Watchdog Timer Reset.
          3: Bits PSPIE and PSPIF are reserved on the 28-pin devices; always maintain these bits clear.
          4: These registers can be addressed from any bank.
          5: PORTD, PORTE, TRISD, and TRISE are not physically implemented on the 28-pin devices, read as `0'.
          6: This bit always reads as a `1'.

DS30325B-page 16                                                                                2002 Microchip Technology Inc.
                                                                                        PIC16F7X

TABLE 2-1: SPECIAL FUNCTION REGISTER SUMMARY (CONTINUED)

Address Name     Bit 7           Bit 6   Bit 5         Bit 4    Bit 3     Bit 2  Bit 1  Bit 0           Value on:               Details
                                                                                                          POR,                  on page
                                                                                                           BOR

Bank 1

80h(4) INDF      Addressing this location uses contents of FSR to address data memory (not a physical register) 0000 0000 27, 96

81h     OPTION_REG RBPU INTEDG T0CS                    T0SE     PSA       PS2    PS1    PS0 1111 1111 20, 44, 96

82h(4) PCL       Program Counter's (PC) Least Significant Byte                                          0000 0000 26, 96

83h(4) STATUS    IRP             RP1     RP0           TO       PD        Z      DC                  C  0001 1xxx 19, 96

84h(4) FSR       Indirect data memory address pointer                                                   xxxx xxxx 27, 96

85h     TRISA    --              -- PORTA Data Direction Register                                       --11 1111 32, 96

86h     TRISB    PORTB Data Direction Register                                                          1111 1111 34, 96

87h     TRISC    PORTC Data Direction Register                                                          1111 1111 35, 96

88h(5) TRISD     PORTD Data Direction Register                                                          1111 1111 36, 96

89h(5) TRISE     IBF             OBF     IBOV PSPMODE                 --  PORTE Data Direction Bits     0000 -111 38, 96

8Ah(1,4) PCLATH  --              --      -- Write Buffer for the upper 5 bits of the Program Counter    ---0 0000 21, 96

8Bh(4) INTCON    GIE             PEIE TMR0IE           INTE     RBIE TMR0IF INTF        RBIF 0000 000x 23, 96

8Ch     PIE1     PSPIE(3) ADIE           RCIE          TXIE     SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 22, 96

8Dh     PIE2     --              --      --            --             --  --     --     CCP2IE ---- ---0 24, 97

8Eh     PCON     --              --      --            --             --  --     POR    BOR ---- --qq 25, 97

8Fh     --       Unimplemented                                                                          --                      --

90h     --       Unimplemented                                                                          --                      --

91h     --       Unimplemented                                                                          --                      --

92h     PR2      Timer2 Period Register                                                                 1111 1111 52, 97

93h     SSPADD   Synchronous Serial Port (I2C mode) Address Register                                    0000 0000 68, 97

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

95h     --       Unimplemented                                                                          --                      --

96h     --       Unimplemented                                                                          --                      --

97h     --       Unimplemented                                                                          --                      --

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

99h     SPBRG    Baud Rate Generator Register                                                           0000 0000 71, 97

9Ah     --       Unimplemented                                                                          --

9Bh     --       Unimplemented                                                                          --

9Ch     --       Unimplemented                                                                          --

9Dh     --       Unimplemented                                                                          --

9Eh     --       Unimplemented                                                                          --

9Fh     ADCON1   --              --      --            --             --  PCFG2 PCFG1 PCFG0 ---- -000 84, 97

Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as '0', r = reserved.
              Shaded locations are unimplemented, read as `0'.

Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the PC<12:8>, whose
                contents are transferred to the upper byte of the program counter during branches (CALL or GOTO).

          2: Other (non power-up) RESETS include external RESET through MCLR and Watchdog Timer Reset.
          3: Bits PSPIE and PSPIF are reserved on the 28-pin devices; always maintain these bits clear.
          4: These registers can be addressed from any bank.
          5: PORTD, PORTE, TRISD, and TRISE are not physically implemented on the 28-pin devices, read as `0'.
          6: This bit always reads as a `1'.

2002 Microchip Technology Inc.                                                                         DS30325B-page 17
PIC16F7X

TABLE 2-1: SPECIAL FUNCTION REGISTER SUMMARY (CONTINUED)

Address Name      Bit 7   Bit 6            Bit 5        Bit 4  Bit 3        Bit 2  Bit 1  Bit 0                   Value on:     Details
                                                                                                                    POR,        on page
                                                                                                                     BOR

  Bank 2          Addressing this location uses contents of FSR to address data memory (not a physical register)  0000 0000     27, 96
100h(4) INDF                                                                                                      xxxx xxxx     45, 96
101h TMR0         Timer0 Module Register                                                                          0000 0000     26, 96
102h(4) PCL                                                                                                       0001 1xxx     19, 96
103h(4) STATUS    Program Counter (PC) Least Significant Byte                                                     xxxx xxxx     27, 96
104h(4) FSR
105h --           IRP     RP1              RP0          TO     PD           Z      DC     C                             --        --
106h PORTB                                                                                                        xxxx xxxx     34, 96
107h --           Indirect Data Memory Address Pointer
108h --                                                                                                                 --        --
109h --           Unimplemented                                                                                         --        --
10Ah(1,4) PCLATH  PORTB Data Latch when written: PORTB pins when read                                                   --        --
10Bh(4) INTCON    Unimplemented                                                                                   ---0 0000     21, 96
10Ch PMDATA       Unimplemented                                                                                   0000 000x     23, 96
10Dh PMADR        Unimplemented                                                                                   xxxx xxxx     29, 97
10Eh PMDATH                                                                                                       xxxx xxxx     29, 97
10Fh PMADRH       --      --                 -- Write Buffer for the upper 5 bits of the Program Counter          xxxx xxxx     29, 97
                                                                                                                  xxxx xxxx     29, 97
                  GIE     PEIE TMR0IE                   INTE   RBIE TMR0IF INTF           RBIF

                  Data Register Low Byte

                  Address Register Low Byte

                  --      -- Data Register High Byte

                  --      --                 -- Address Register High Byte

Bank 3

180h(4) INDF      Addressing this location uses contents of FSR to address data memory (not a physical register) 0000 0000 27, 96

181h OPTION_REG RBPU INTEDG T0CS                        T0SE   PSA          PS2    PS1    PS0 1111 1111 20, 44, 96

182h(4) PCL       Program Counter (PC) Least Significant Byte                                                     0000 0000 26, 96

183h(4) STATUS    IRP     RP1              RP0          TO     PD           Z      DC     C                       0001 1xxx 19, 96

184h(4) FSR       Indirect Data Memory Address Pointer                                                            xxxx xxxx 27, 96

185h --           Unimplemented                                                                                   --            --

186h TRISB        PORTB Data Direction Register                                                                   1111 1111 34, 96

187h --           Unimplemented                                                                                   --            --

188h --           Unimplemented                                                                                   --            --

189h --           Unimplemented                                                                                   --            --

18Ah(1,4) PCLATH  --      --                 -- Write Buffer for the upper 5 bits of the Program Counter          ---0 0000 21, 96

18Bh(4) INTCON    GIE     PEIE TMR0IE                   INTE   RBIE TMR0IF INTF           RBIF 0000 000x 23, 96

18Ch PMCON1       -- (6)  --                 --         --     --           --     --     RD 1--- ---0 29, 97

18Dh --           Unimplemented                                                                                   --

18Eh --           Reserved maintain clear                                                                         0000 0000

18Fh --           Reserved maintain clear                                                                         0000 0000

Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as '0', r = reserved.
              Shaded locations are unimplemented, read as `0'.

Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the PC<12:8>, whose
                contents are transferred to the upper byte of the program counter during branches (CALL or GOTO).

          2: Other (non power-up) RESETS include external RESET through MCLR and Watchdog Timer Reset.
          3: Bits PSPIE and PSPIF are reserved on the 28-pin devices; always maintain these bits clear.
          4: These registers can be addressed from any bank.
          5: PORTD, PORTE, TRISD, and TRISE are not physically implemented on the 28-pin devices, read as `0'.
          6: This bit always reads as a `1'.

DS30325B-page 18                                                                    2002 Microchip Technology Inc.
                                                                          PIC16F7X

2.2.2.1 STATUS Register                                      For example, CLRF STATUS will clear the upper three
                                                             bits and set the Z bit. This leaves the STATUS register
The STATUS register contains the arithmetic status of        as 000u u1uu (where u = unchanged).
the ALU, the RESET status and the bank select bits for
data memory.                                                 It is recommended, therefore, that only BCF, BSF,
                                                             SWAPF and MOVWF instructions are used to alter the
The STATUS register can be the destination for any           STATUS register, because these instructions do not
instruction, as with any other register. If the STATUS       affect the Z, C, or DC bits from the STATUS register.
register is the destination for an instruction that affects  For other instructions not affecting any status bits, see
the Z, DC, or C bits, then the write to these three bits is  the "Instruction Set Summary."
disabled. These bits are set or cleared according to the
device logic. Furthermore, the TO and PD bits are not            Note 1: The C and DC bits operate as a borrow
writable, therefore, the result of an instruction with the                   and digit borrow bit, respectively, in sub-
STATUS register as destination may be different than                         traction. See the SUBLW and SUBWF
intended.                                                                    instructions for examples.

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

               R/W-0             R/W-0   R/W-0               R-1  R-1  R/W-x          R/W-x  R/W-x
                                                                                       DC       C
               IRP               RP1     RP0                 TO   PD   Z                          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          RP1:RP0: Register Bank Select bits (used for direct addressing)
bit 2          11 = Bank 3 (180h - 1FFh)
bit 1          10 = Bank 2 (100h - 17Fh)
bit 0          01 = Bank 1 (80h - FFh)
               00 = Bank 0 (00h - 7Fh)
               Each bank is 128 bytes

               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 = 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 = 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:             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 reset

2002 Microchip Technology Inc.                                                       DS30325B-page 19
PIC16F7X

2.2.2.2 OPTION_REG Register                                         Note:  To achieve a 1:1 prescaler assignment for
                                                                           the TMR0 register, assign the prescaler to
The OPTION_REG register is a readable and writable                         the Watchdog Timer.
register, which contains various control bits to configure
the TMR0 prescaler/WDT postscaler (single assign-
able register known also as the prescaler), the External
INT Interrupt, TMR0 and the weak pull-ups on PORTB.

REGISTER 2-2:     OPTION_REG REGISTER (ADDRESS 81h, 181h)

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

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

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

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

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

                  PS2:PS0: 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 reset

DS30325B-page 20                                                                   2002 Microchip Technology Inc.
                                                                                 PIC16F7X

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 regis-             its corresponding enable bit or the global
ter, which contains various enable and flag bits for the          enable bit, GIE (INTCON<7>). User soft-
TMR0 register overflow, RB Port change and External               ware should ensure the appropriate inter-
RB0/INT pin interrupts.                                           rupt flag bits are clear prior to enabling an
                                                                  interrupt.

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

                  R/W-0          R/W-0     R/W-0          R/W-0   R/W-0   R/W-0  R/W-0            R/W-x
                   GIE           PEIE     TMR0IE          INTE    RBIE   TMR0IF  INTF             RBIF

                bit 7                                                                                 bit 0

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

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

         bit 4  INTE: RB0/INT External Interrupt Enable bit

                1 = Enables the RB0/INT external interrupt
                0 = Disables the RB0/INT external interrupt

         bit 3  RBIE: RB Port Change Interrupt Enable bit

                1 = Enables the RB port change interrupt
                0 = Disables the RB port change interrupt

         bit 2  TMR0IF: TMR0 Overflow Interrupt Flag bit

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

         bit 1  INTF: RB0/INT External Interrupt Flag bit

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

         bit 0  RBIF: RB Port Change Interrupt Flag bit

                A mismatch condition will continue to set flag bit RBIF. Reading PORTB will end the mismatch

                condition and allow flag bit RBIF to be cleared.

                1 = At least one of the RB7:RB4 pins changed state (must be cleared in software)
                0 = None of the RB7:RB4 pins have changed state

                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 reset

2002 Microchip Technology Inc.                                                            DS30325B-page 21
PIC16F7X

2.2.2.4 PIE1 Register                                        Note: Bit PEIE (INTCON<6>) must be set to
                                                                         enable any peripheral interrupt.
The PIE1 register contains the individual enable bits for
the peripheral interrupts.

REGISTER 2-4:     PIE1 REGISTER (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
                  PSPIE(1)  ADIE            RCIE           TXIE   SSPIE  CCP1IE  TMR2IE         TMR1IE

                  bit 7                                                                               bit 0

bit 7             PSPIE(1): Parallel Slave Port Read/Write Interrupt Enable bit

                  1 = Enables the PSP read/write interrupt
                  0 = Disables the PSP read/write interrupt

bit 6             ADIE: A/D Converter Interrupt Enable bit

                  1 = Enables the A/D converter interrupt
                  0 = Disables the A/D converter interrupt

bit 5             RCIE: USART Receive Interrupt Enable bit

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

bit 4             TXIE: USART Transmit Interrupt Enable bit

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

bit 3             SSPIE: Synchronous Serial Port Interrupt Enable bit

                  1 = Enables the SSP interrupt
                  0 = Disables the SSP interrupt

bit 2             CCP1IE: CCP1 Interrupt Enable bit

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

bit 1             TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

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

bit 0             TMR1IE: TMR1 Overflow Interrupt Enable bit

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

                  Note 1: PSPIE is reserved on 28-pin devices; always maintain this bit 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 reset

DS30325B-page 22                                                                  2002 Microchip Technology Inc.
                                                                                      PIC16F7X

2.2.2.5 PIR1 Register                                    Note:  Interrupt flag bits are set when an interrupt
The PIR1 register contains the individual flag bits for         condition occurs, regardless of the state of
the peripheral interrupts.                                      its corresponding enable bit or the global
                                                                enable bit, GIE (INTCON<7>). User soft-
REGISTER 2-5: PIR1 REGISTER (ADDRESS 0Ch)                       ware should ensure the appropriate interrupt
                                                                bits are clear prior to enabling an interrupt.

         R/W-0                   R/W-0   R-0    R-0             R/W-0   R/W-0          R/W-0            R/W-0
       PSPIF(1)                  ADIF   RCIF    TXIF            SSPIF  CCP1IF         TMR2IF           TMR1IF
       bit 7
                                                                                                             bit 0

bit 7  PSPIF(1): Parallel Slave Port Read/Write Interrupt Flag bit

       1 = A read or a write operation has taken place (must be cleared in software)

       0 = No read or write has occurred

bit 6  ADIF: A/D Converter Interrupt Flag bit

       1 = An A/D conversion is 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

       0 = The USART receive buffer is empty

bit 4  TXIF: USART Transmit Interrupt Flag bit

       1 = The USART transmit buffer is empty

       0 = The USART transmit buffer is full

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

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

       SPI

       A transmission/reception has taken place.
       I2C Slave

       A transmission/reception has taken place.
       I2C Master

       A transmission/reception has taken place.

       The initiated START condition was completed by the SSP module.

       The initiated STOP condition was completed by the SSP module.

       The initiated Restart condition was completed by the SSP module.

       The initiated Acknowledge condition was completed by the SSP module.

       A START condition occurred while the SSP module was IDLE (multi-master system).

       A STOP condition occurred while the SSP module was IDLE (multi-master system).

       0 = No SSP interrupt condition has occurred

bit 2  CCP1IF: CCP1 Interrupt Flag bit

       Capture mode:

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

       0 = No TMR1 register capture occurred

       Compare mode:

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

       0 = No TMR1 register compare match occurred

       PWM mode:

       Unused in this mode

bit 1  TMR2IF: TMR2 to PR2 Match Interrupt Flag bit

       1 = 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 = TMR1 register overflowed (must be cleared in software)

       0 = TMR1 register did not overflow

       Note 1: PSPIF is reserved on 28-pin devices; always maintain this bit clear.

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

2002 Microchip Technology Inc.                                                       DS30325B-page 23
PIC16F7X

2.2.2.6 PIE2 Register

The PIE2 register contains the individual enable bits for
the CCP2 peripheral interrupt.

REGISTER 2-6: PIE2 REGISTER (ADDRESS 8Dh)

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

                  --     --                 --             --     --   --   --              CCP2IE

                  bit 7                                                                     bit 0

bit 7-1           Unimplemented: Read as '0'
bit 0
                  CCP2IE: CCP2 Interrupt Enable bit
                  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 reset

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 flag bits for the CCP2             its corresponding enable bit or the global
interrupt.                                                        enable bit, GIE (INTCON<7>). User soft-
                                                                  ware should ensure the appropriate inter-
                                                                  rupt flag bits are clear prior to enabling an
                                                                  interrupt.

REGISTER 2-7: PIR2 REGISTER (ADDRESS 0Dh)

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

                  --     --                 --             --     --   --   --              CCP2IF

                  bit 7                                                                     bit 0

bit 7-1           Unimplemented: Read as '0'
bit 0
                  CCP2IF: CCP2 Interrupt Flag bit
                  Capture mode:
                  1 = A TMR1 register capture occurred (must be cleared in software)
                  0 = No TMR1 register capture occurred
                  Compare mode:
                  1 = A TMR1 register compare match occurred (must be cleared in software)
                  0 = No TMR1 register compare match occurred
                  PWM mode:
                  Unused

                  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 reset

DS30325B-page 24                                                        2002 Microchip Technology Inc.
                                                                       PIC16F7X

2.2.2.8 PCON Register                                 Note:  BOR is unknown on POR. It must be set by
                                                             the user and checked on subsequent
The Power Control (PCON) register contains flag bits         RESETS to see if BOR is clear, indicating
to allow differentiation between a Power-on Reset            a brown-out has occurred. The BOR status
(POR), a Brown-out Reset (BOR), a Watchdog Reset             bit is not predictable if the brown-out circuit
(WDT) and an external MCLR Reset.                            is disabled (by clearing the BODEN bit in
                                                             the configuration word).

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

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

         --                      --   --              --     --   --   POR  BOR

         bit 7                                                              bit 0

bit 7-2  Unimplemented: Read as '0'
bit 1
         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)

         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 reset

2002 Microchip Technology Inc.                                        DS30325B-page 25
PIC16F7X

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 and                         2: There are no instructions/mnemonics
writable register. The upper bits (PC<12:8>) are not                             called PUSH or POP. These are actions
readable, but are indirectly writable through the                                that occur from the execution of the
PCLATH register. On any RESET, the upper bits of the                             CALL, RETURN, RETLW and RETFIE
PC will be cleared. Figure 2-4 shows the two situations                          instructions, or the vectoring to an inter-
for the loading of the PC. The upper example in the fig-                         rupt address.
ure shows how the PC is loaded on a write to PCL
(PCLATH<4:0>  PCH). The lower example in the fig-                    2.4 Program Memory Paging
ure shows how the PC is loaded during a CALL or GOTO
instruction (PCLATH<4:3>  PCH).                                      PIC16F7X devices are capable of addressing a contin-
                                                                     uous 8K word block of program memory. The CALL and
FIGURE 2-4:                LOADING OF PC IN                          GOTO instructions provide only 11 bits of address to
                           DIFFERENT SITUATIONS                      allow branching within any 2K program memory page.
                                                                     When doing a CALL or GOTO instruction, the upper 2
          PCH              PCL                                       bits of the address are provided by PCLATH<4:3>.
                                                                     When doing a CALL or GOTO instruction, the user must
      12           87               0  Instruction with              ensure that the page select bits are programmed so
PC                              8      PCL as                        that the desired program memory page is addressed. If
                                       Destination                   a return from a CALL instruction (or interrupt) is exe-
                  PCLATH<4:0>                                        cuted, the entire 13-bit PC is popped off the stack.
          5                            ALU                           Therefore, manipulation of the PCLATH<4:3> bits are
                                                                     not required for the RETURN instructions (which POPs
                   PCLATH                                            the address from the stack).

              PCH          PCL                                       Note:       The contents of the PCLATH are
      12 11 10                                 0                                 unchanged after a RETURN or RETFIE
PC                 87                                 GOTO,CALL                  instruction is executed. The user must
                                                                                 setup the PCLATH for any subsequent
2 PCLATH<4:3>                         11                                         CALLS or GOTOS.
                                                      Opcode <10:0>

                   PCLATH                                            Example 2-1 shows the calling of a subroutine in
                                                                     page 1 of the program memory. This example assumes
2.3.1 COMPUTED GOTO                                                  that PCLATH is saved and restored by the Interrupt
                                                                     Service Routine (if interrupts are used).
A computed GOTO is accomplished by adding an offset
to the program counter (ADDWF PCL). When doing a                     EXAMPLE 2-1:  CALL OF A SUBROUTINE
table read using a computed GOTO method, care                                      IN PAGE 1 FROM PAGE 0
should be exercised if the table location crosses a PCL
memory boundary (each 256 byte block). Refer to the                           ORG 0x500
Application Note, "Implementing a Table Read"
(AN556).                                                                      BCF PCLATH,4

2.3.2 STACK                                                                   BSF PCLATH,3 ;Select page 1

The PIC16F7X family has an 8-level deep x 13-bit wide                                       ;(800h-FFFh)
hardware stack. The stack space is not part of either
program or data space and the stack pointer is not                            CALL SUB1_P1 ;Call subroutine in
readable or writable. The PC is PUSHed onto the stack
when a CALL instruction is executed, or an interrupt                          :             ;page 1 (800h-FFFh)
causes a branch. The stack is POPed in the event of a
RETURN, RETLW or a RETFIE instruction execution.                              :
PCLATH is not affected by a PUSH or POP operation.
                                                                              ORG 0x900 ;page 1 (800h-FFFh)
The stack operates as a circular buffer. This means that
after the stack has been PUSHed eight times, the ninth               SUB1_P1
push overwrites the value that was stored from the first
push. The tenth push overwrites the second push (and                          :             ;called subroutine
so on).
                                                                              :             ;page 1 (800h-FFFh)

                                                                              :

                                                                     RETURN                 ;return to Call

                                                                                            ;subroutine in page 0

                                                                                            ;(000h-7FFh)

DS30325B-page 26                                                                          2002 Microchip Technology Inc.
                                                                                               PIC16F7X

2.5 Indirect Addressing, INDF and FSR                               EXAMPLE 2-2: INDIRECT ADDRESSING
        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.                   NEXT CLRF           INDF   ;clear INDF register
                                                                                 INCF   FSR,F  ;inc pointer
Indirect addressing is possible by using the INDF reg-                           BTFSS  FSR,4  ;all done?
ister. Any instruction using the INDF register actually                          GOTO   NEXT   ;no clear next
accesses the register pointed to by the File Select Reg-            CONTINUE
ister, FSR. Reading the INDF register itself indirectly                   :                    ;yes continue
(FSR = '0') will read 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-5.

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

FIGURE 2-5:  DIRECT/INDIRECT ADDRESSING

             Direct Addressing                                                          Indirect Addressing

RP1:RP0 6    From Opcode 0                                                 IRP          7      FSR Register  0

Bank Select Location Select                                                Bank Select         Location Select

                                       00     01                10     11
                                 00h       80h              100h    180h

             Data
             Memory(1)

                                 7Fh       FFh              17Fh    1FFh

                                 Bank 0 Bank 1 Bank 2 Bank 3

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

2002 Microchip Technology Inc.                                                                DS30325B-page 27
PIC16F7X

NOTES:

DS30325B-page 28   2002 Microchip Technology Inc.
3.0 READING PROGRAM MEMORY                                                  PIC16F7X

The FLASH Program Memory is readable during nor-             When interfacing to the program memory block, the
mal operation over the entire VDD range. It is indirectly    PMDATH:PMDATA registers form a two-byte word,
addressed through Special Function Registers (SFR).          which holds the 14-bit data for reads. The
Up to 14-bit numbers can be stored in memory for use         PMADRH:PMADR registers form a two-byte word,
as calibration parameters, serial numbers, packed 7-bit      which holds the 13-bit address of the FLASH location
ASCII, etc. Executing a program memory location con-         being accessed. These devices can have up to 8K
taining data that forms an invalid instruction results in a  words of program FLASH, with an address range from
NOP.                                                         0h to 3FFFh. The unused upper bits in both the
                                                             PMDATH and PMADRH registers are not implemented
There are five SFRs used to read the program and             and read as "0's".
memory. These registers are:
                                                             3.1 PMADR
PMCON1
PMDATA                                                     The address registers can address up to a maximum of
PMDATH                                                     8K words of program FLASH.
PMADR
PMADRH                                                     When selecting a program address value, the MSByte
                                                             of the address is written to the PMADRH register and
The program memory allows word reads. Program                the LSByte is written to the PMADR register. The upper
memory access allows for checksum calculation and            MSbits of PMADRH must always be clear.
reading calibration tables.
                                                             3.2 PMCON1 Register

                                                             PMCON1 is the control register for memory accesses.

                                                             The control bit RD initiates read operations. This bit
                                                             cannot be cleared, only set, in software. It is cleared in
                                                             hardware at the completion of the read operation.

REGISTER 3-1: PMCON1 REGISTER (ADDRESS 18Ch)

         R-1                     U-0  U-0                    U-0  U-x  U-0  U-0  R/S-0

         reserved                --   --                     --   --   --   --   RD

         bit 7                                                                   bit 0

bit 7    Reserved: Read as `1'
bit 6-1
bit 0    Unimplemented: Read as '0'

         RD: Read Control bit
         1 = Initiates a FLASH read, RD is cleared in hardware. The RD bit can only be set (not cleared)

              in software.
         0 = FLASH read completed

         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 reset

2002 Microchip Technology Inc.                                             DS30325B-page 29
PIC16F7X

3.3 Reading the FLASH Program                                      3.4 Operation During Code Protect
         Memory
                                                                   FLASH program memory has its own code protect
A program memory location may be read by writing two               mechanism. External Read and Write operations by
bytes of the address to the PMADR and PMADRH reg-                  programmers are disabled if this mechanism is
isters and then setting control bit RD (PMCON1<0>).                enabled.
Once the read control bit is set, the microcontroller will
use the next two instruction cycles to read the data. The          The microcontroller can read and execute instructions
data is available in the PMDATA and PMDATH regis-                  out of the internal FLASH program memory, regardless
ters after the second NOP instruction. Therefore, it can           of the state of the code protect configuration bits.
be read as two bytes in the following instructions. The
PMDATA and PMDATH registers will hold this value
until the next read operation.

EXAMPLE 3-1: FLASH PROGRAM READ

      BSF                STATUS, RP1   ;
      BCF                STATUS, RP0   ; Bank 2
      MOVF               ADDRH, W      ;
      MOVWF              PMADRH        ; MSByte of Program Address to read
      MOVF               ADDRL, W      ;
      MOVWF              PMADR         ; LSByte of Program Address to read
      BSF                STATUS, RP0   ; Bank 3 Required

Required BSF             PMCON1, RD    ; EEPROM Read Sequence
Sequence NOP                           ; memory is read in the next two cycles after BSF PMCON1,RD
                                       ;
                    NOP

      BCF                STATUS, RP0   ; Bank 2
      MOVF               PMDATA, W     ; W = LSByte of Program PMDATA
      MOVF               PMDATH, W     ; W = MSByte of Program PMDATA

TABLE 3-1: REGISTERS ASSOCIATED WITH PROGRAM FLASH

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

10Dh  PMADR Address Register Low Byte                                                   xxxx xxxx uuuu uuuu

10Fh  PMADRH --                 --     -- Address Register High Byte                    xxxx xxxx uuuu uuuu

10Ch  PMDATA Data Register Low Byte                                                     xxxx xxxx uuuu uuuu

10Eh  PMDATH --                 -- Data Register High Byte                              xxxx xxxx uuuu uuuu

18Ch  PMCON1 --(1)              --     --     --            --     --     --     RD 1--- ---0 1--- ---0

Legend: x = unknown, u = unchanged, r = reserved, - = unimplemented read as '0'. Shaded cells are not used during FLASH access.
Note 1: This bit always reads as a `1'.

DS30325B-page 30                                                                  2002 Microchip Technology Inc.
                                                                                        PIC16F7X

4.0 I/O PORTS                                                  FIGURE 4-1:           BLOCK DIAGRAM OF
                                                                                     RA3:RA0 AND RA5 PINS
Some pins for these I/O ports are multiplexed with an
alternate function for the peripheral features on the          Data Bus  D     Q
device. In general, when a peripheral is enabled, that
pin may not be used as a general purpose I/O pin.              WR Port    CK Q                        VDD
                                                                         Data Latch                   P
Additional information on I/O ports may be found in the
PICmicroTM Mid-Range Reference Manual,                                                                N            I/O pin(1)
(DS33023).
                                                                         D     Q
4.1 PORTA and the TRISA Register
                                                               WR TRIS     CK Q                   VSS
PORTA is a 6-bit wide, bi-directional port. The corre-                   TRIS Latch
sponding data direction register is TRISA. Setting a                                    Analog
TRISA bit (= `1') will make the corresponding PORTA                                     Input
pin an input (i.e., put the corresponding output driver in                              Mode
a Hi-Impedance mode). Clearing a TRISA bit (= `0') will
make the corresponding PORTA pin an output (i.e., put          RD TRIS                                             TTL
the contents of the output latch on the selected pin).         RD PORT                                             Input
                                                                                                                   Buffer
Reading the PORTA register reads the status of the
pins, whereas writing to it will write to the port latch. All                           QD
write operations are read-modify-write operations.                                           ENEN
Therefore, a write to a port implies that the port pins are
read, the value is modified and then written to the port         To A/D Converter
data latch.                                                    Note 1: I/O pins have protection diodes to VDD and VSS.

Pin RA4 is multiplexed with the Timer0 module clock            FIGURE 4-2:           BLOCK DIAGRAM OF
input to become the RA4/T0CKI pin. The RA4/T0CKI                                     RA4/T0CKI PIN
pin is a Schmitt Trigger input and an open drain output.
All other PORTA pins have TTL input levels and full            Data Bus     D        Q
CMOS output drivers.                                           WR PORT
                                                                              CK Q                 N               I/O pin(1)
Other PORTA pins are multiplexed with analog inputs            WR TRIS      Data Latch
and analog VREF input. The operation of each pin is
selected by clearing/setting the control bits in the                        D        Q      VSS
ADCON1 register (A/D Control Register1).
                                                                                        Schmitt
   Note: On a Power-on Reset, these pins are con-                                       Trigger
               figured as analog inputs and read as '0'.                                Input
                                                                                        Buffer
The TRISA register controls the direction of the RA
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.

EXAMPLE 4-1: INITIALIZING PORTA                                               CK Q
                                                                            TRIS Latch

BCF    STATUS, RP0  ;                                          RD TRIS
BCF    STATUS, RP1  ; Bank0
CLRF   PORTA        ; Initialize PORTA by                                               QD
                    ; clearing output                                                        ENEN
BSF    STATUS, RP0  ; data latches
MOVLW  0x06         ; Select Bank 1                            RD PORT
MOVWF  ADCON1       ; Configure all pins
MOVLW  0xCF         ; as digital inputs                           TMR0 Clock Input
                    ; Value used to                            Note 1: I/O pin has protection diodes to VSS only.
MOVWF  TRISA        ; initialize data
                    ; direction
                    ; Set RA<3:0> as inputs
                    ; RA<5:4> as outputs
                    ; TRISA<7:6>are always
                    ; read as '0'.

2002 Microchip Technology Inc.                                                                    DS30325B-page 31
PIC16F7X

TABLE 4-1: PORTA FUNCTIONS

     Name         Bit# Buffer                               Function

RA0/AN0           bit0 TTL Input/output or analog input.
RA1/AN1           bit1 TTL Input/output or analog input.

RA2/AN2           bit2 TTL Input/output or analog input.

RA3/AN3/VREF      bit3  TTL Input/output or analog input or VREF.

RA4/T0CKI         bit4  ST Input/output or external clock input for Timer0. Output is open drain type.

RA5/SS/AN4        bit5 TTL Input/output or slave select input for synchronous serial port or analog input.

Legend: TTL = TTL input, ST = Schmitt Trigger input

TABLE 4-2: SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

                                                                                 Value on: Value on all

Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3           Bit 2         Bit 1  Bit 0  POR,  other

                                                                                 BOR   RESETS

05h      PORTA    --    -- RA5 RA4 RA3               RA2           RA1 RA0 --0x 0000 --0u 0000

85h      TRISA    -- -- PORTA Data Direction Register                            --11 1111 --11 1111

9Fh      ADCON1 -- -- --       --                    -- PCFG2 PCFG1 PCFG0 ---- -000 ---- -000

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

Note: When using the SSP module in SPI Slave mode and SS enabled, the A/D converter must be set to one of
            the following modes where PCFG2:PCFG0 = 100, 101, 11x.

DS30325B-page 32                                                           2002 Microchip Technology Inc.
                                                                                        PIC16F7X

4.2 PORTB and the TRISB Register                               This interrupt can wake the device from SLEEP. The
                                                               user, in the Interrupt Service Routine, can clear the
PORTB is an 8-bit wide, bi-directional port. The corre-        interrupt in the following manner:
sponding data direction register is TRISB. Setting a
TRISB bit (= `1') will make the corresponding PORTB            a) Any read or write of PORTB. This will end the
pin an input (i.e., put the corresponding output driver in           mismatch condition.
a Hi-Impedance mode). Clearing a TRISB bit (= `0') will
make the corresponding PORTB pin an output (i.e., put          b) Clear flag bit RBIF.
the contents of the output latch on the selected pin).
                                                               A mismatch condition will continue to set flag bit RBIF.
Each of the PORTB pins has a weak internal pull-up. A          Reading PORTB will end the mismatch condition and
single control bit can turn on all the pull-ups. This is per-  allow flag bit RBIF to be cleared.
formed by clearing bit RBPU (OPTION_REG<7>). The
weak pull-up is automatically turned off when the port         The interrupt-on-change feature is recommended for
pin is configured as an output. The pull-ups are dis-          wake-up on key depression operation and operations
abled on a Power-on Reset.                                     where PORTB is only used for the interrupt-on-change
                                                               feature. Polling of PORTB is not recommended while
FIGURE 4-3:      BLOCK DIAGRAM OF                              using the interrupt-on-change feature.
                 RB3:RB0 PINS
       RBPU(2)                                                 This interrupt on mismatch feature, together with soft-
       Data Bus  Data Latch                  VDD               ware configureable pull-ups on these four pins, allow
       WR Port    DQ                             Weak          easy interface to a keypad and make it possible for
                                                               wake-up on key depression. Refer to the Embedded
       WR TRIS     CK                         P Pull-up        Control Handbook, "Implementing Wake-up on Key
                                                               Stroke" (AN552).
                                                     I/O
                                                    pin(1)     RB0/INT is an external interrupt input pin and is config-
                                                               ured using the INTEDG bit (OPTION_REG<6>).

                                                               RB0/INT is discussed in detail in Section 12.11.1.

                 TRIS Latch       TTL                          FIGURE 4-4:   BLOCK DIAGRAM OF
                  DQ              Input                                      RB7:RB4 PINS
                                  Buffer
                   CK

                                                                                                       VDD

RD TRIS                                                        RBPU(2)                                     P  Weak
RD Port                                                        Data Bus                                       Pull-up
                                                               WR Port
                                 QD                                         Data Latch                        I/O
                                         EN                    WR TRIS       DQ                               pin(1)

RB0/INT                                                        RD TRIS        CK
                                                               RD Port      TRIS Latch
                 Schmitt Trigger             RD Port           Set RBIF      DQ                    TTL
                 Buffer                                                                            Input
                                                                              CK                   Buffer

Note 1: I/O pins have diode protection to VDD and VSS.                                                            ST
                                                                                                              Buffer
       2: To enable weak pull-ups, set the appropriate TRIS
             bit(s) and clear the RBPU bit (OPTION_REG<7>).                               Latch
                                                                                        QD

Four of the PORTB pins (RB7:RB4) have an inter-                                                    EN         Q1
rupt-on-change feature. Only pins configured as inputs
can cause this interrupt to occur (i.e., any RB7:RB4 pin       From other               QD                    RD Port
configured as an output is excluded from the inter-            RB7:RB4 pins                    EN                  Q3
rupt-on-change comparison). The input pins (of
RB7:RB4) are compared with the old value latched on            RB7:RB6 in Serial Programming mode
the last read of PORTB. The "mismatch" outputs of
RB7:RB4 are ORed together to generate the RB Port
Change Interrupt with flag bit RBIF (INTCON<0>).

                                                               Note 1: I/O pins have diode protection to VDD and VSS.
                                                                      2: To enable weak pull-ups, set the appropriate TRIS bit(s)
                                                                           and clear the RBPU bit (OPTION_REG<7>).

2002 Microchip Technology Inc.                                                                    DS30325B-page 33
PIC16F7X

TABLE 4-3: PORTB FUNCTIONS

Name     Bit#           Buffer                                Function

RB0/INT  bit0           TTL/ST(1) Input/output pin or external interrupt input. Internal software

                                programmable weak pull-up.

RB1      bit1           TTL     Input/output pin. Internal software programmable weak pull-up.

RB2      bit2           TTL     Input/output pin. Internal software programmable weak pull-up.

RB3      bit3           TTL     Input/output pin. Internal software programmable weak pull-up.

RB4      bit4           TTL     Input/output pin (with interrupt-on-change). Internal software programmable

                                weak pull-up.

RB5      bit5           TTL     Input/output pin (with interrupt-on-change). Internal software programmable

                                weak pull-up.

RB6      bit6           TTL/ST(2) Input/output pin (with interrupt-on-change).

                                Internal software programmable weak pull-up. Serial programming clock.

RB7      bit7           TTL/ST(2) Input/output pin (with interrupt-on-change).

                                Internal software programmable weak pull-up. Serial programming data.

Legend: TTL = TTL input, ST = Schmitt Trigger input
Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.

        2: This buffer is a Schmitt Trigger input when used in Serial Programming mode.

TABLE 4-4: 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
                                                                                              POR,    all other
                                                                                              BOR     RESETS

06h, 106h PORTB         RB7     RB6    RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
86h, 186h TRISB
                        PORTB Data Direction Register                                      1111 1111 1111 1111

81h, 181h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
Legend: x = unknown, u = unchanged. Shaded cells are not used by PORTB.

DS30325B-page 34                                                                 2002 Microchip Technology Inc.
                                                                                                      PIC16F7X

4.3 PORTC and the TRISC Register                                   FIGURE 4-5:                PORTC BLOCK DIAGRAM
                                                                                              (PERIPHERAL OUTPUT
PORTC is an 8-bit wide, bi-directional port. The corre-                                       OVERRIDE)
sponding data direction register is TRISC. Setting a
TRISC bit (= `1') will make the corresponding PORTC                Port/Peripheral Select(2)
pin an input (i.e., put the corresponding output driver in
a Hi-Impedance mode). Clearing a TRISC bit (= `0') will            Peripheral Data Out         0                                    VDD
make the corresponding PORTC pin an output (i.e., put                                                                                P
the contents of the output latch on the selected pin).             Data Bus  DQ
                                                                                                                                             I/O
PORTC is multiplexed with several peripheral functions             WR Port                         1                                        pin(1)
(Table 4-5). PORTC pins have Schmitt Trigger input                              CK Q                                                N
buffers.
                                                                             Data Latch                                            VSS
When enabling peripheral functions, care should be                                                                          Schmitt
taken in defining TRIS bits for each PORTC pin. Some               WR TRIS    DQ                                            Trigger
peripherals override the TRIS bit to make a pin an                             CK Q                                   D
output, while other peripherals override the TRIS bit to                     TRIS Latch
make a pin an input. Since the TRIS bit override is
in effect while the peripheral is enabled,                         RD TRIS
read-modify-write instructions (BSF, BCF, XORWF)
with TRISC as destination should be avoided. The user              Peripheral
should refer to the corresponding peripheral section for           OE(3)
the correct TRIS bit settings, and to Section 13.1 for
additional information on read-modify-write operations.                                                            Q

                                                                                                                          EN
                                                                   RD Port

                                                                   Peripheral Input

                                                                   Note 1: I/O pins have diode protection to VDD and VSS.
                                                                           2: Port/Peripheral select signal selects between port data
                                                                               and peripheral output.
                                                                           3: Peripheral OE (output enable) is only activated if
                                                                               peripheral select is active.

TABLE 4-5: PORTC FUNCTIONS

     Name    Bit# Buffer Type                                                Function

RC0/T1OSO/T1CKI bit0                ST  Input/output port pin or Timer1 oscillator output/Timer1 clock input.

RC1/T1OSI/CCP2 bit1                 ST  Input/output port pin or Timer1 oscillator input or Capture2
                                        input/Compare2 output/PWM2 output.
RC2/CCP1     bit2                   ST
RC3/SCK/SCL                             Input/output port pin or Capture1 input/Compare1 output/PWM1 output.
             bit3                   ST  RC3 can also be the synchronous serial clock for both SPI and I2C
                                        modes.
RC4/SDI/SDA  bit4                   ST  RC4 can also be the SPI Data In (SPI mode) or Data I/O (I2C mode).
RC5/SDO
RC6/TX/CK    bit5                   ST  Input/output port pin or Synchronous Serial Port data output.

             bit6                   ST  Input/output port pin or USART Asynchronous Transmit or
                                        Synchronous Clock.
RC7/RX/DT    bit7                   ST
                                        Input/output port pin or USART Asynchronous Receive or
                                        Synchronous Data.

Legend: ST = Schmitt Trigger input

TABLE 4-6: 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
                                                            RC3    RC2       RC1                         POR,                 all other
                                                                                                         BOR                  RESETS

07h  PORTC RC7 RC6 RC5 RC4                                                              RC0 xxxx xxxx uuuu uuuu
                                                                                                 1111 1111 1111 1111
87h  TRISC PORTC Data Direction Register

Legend: x = unknown, u = unchanged

2002 Microchip Technology Inc.                                                                                       DS30325B-page 35
PIC16F7X                                                     FIGURE 4-6:            PORTD BLOCK DIAGRAM
                                                                                    (IN I/O PORT MODE)
4.4 PORTD and TRISD Registers
                                                             Data Bus            D  Q
This section is not applicable to the PIC16F73 or            WR Port
PIC16F76.                                                                          CK                                   I/O pin(1)
PORTD is an 8-bit port with Schmitt Trigger input buff-      WR TRIS             Data Latch
ers. Each pin is individually configureable as an input or                        DQ                    Schmitt
output.                                                                                                 Trigger
PORTD can be configured as an 8-bit wide micro-                                    CK                   Input
processor port (parallel slave port) by setting control bit                      TRIS Latch             Buffer
PSPMODE (TRISE<4>). In this mode, the input buffers
are TTL.

                                                             RD TRIS                         Q          D
                                                             RD Port
                                                                                                ENEN

                                                             Note 1: I/O pins have protection diodes to VDD and VSS.

TABLE 4-7: PORTD FUNCTIONS

Name         Bit#       Buffer Type                                       Function

RD0/PSP0          bit0  ST/TTL(1)    Input/output port pin or parallel slave port bit0

RD1/PSP1          bit1  ST/TTL(1)    Input/output port pin or parallel slave port bit1

RD2/PSP2          bit2  ST/TTL(1)    Input/output port pin or parallel slave port bit2

RD3/PSP3          bit3  ST/TTL(1)    Input/output port pin or parallel slave port bit3

RD4/PSP4          bit4  ST/TTL(1)    Input/output port pin or parallel slave port bit4

RD5/PSP5          bit5  ST/TTL(1)    Input/output port pin or parallel slave port bit5

RD6/PSP6          bit6  ST/TTL(1)    Input/output port pin or parallel slave port bit6

RD7/PSP7          bit7  ST/TTL(1)    Input/output port pin or parallel slave port bit7

Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port mode.

TABLE 4-8: 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
                                                                                                POR,       all other
                                                                                                BOR        RESETS

08h   PORTD RD7 RD6 RD5              RD4                     RD3 RD2      RD1       RD0 xxxx xxxx          uuuu uuuu
                                                                                                           1111 1111
88h   TRISD PORTD Data Direction Register                                                    1111 1111     0000 -111

89h   TRISE             IBF OBF IBOV PSPMODE -- PORTE Data Direction bits                    0000 -111

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

DS30325B-page 36                                                                     2002 Microchip Technology Inc.
                                                                                     PIC16F7X

4.5 PORTE and TRISE Register                                FIGURE 4-7:     PORTE BLOCK DIAGRAM
                                                                            (IN I/O PORT MODE)
This section is not applicable to the PIC16F73 or
PIC16F76.                                                   Data Bus     D  Q
                                                            WR Port
PORTE has three pins, RE0/RD/AN5, RE1/WR/AN6                               CK                           I/O pin(1)
and RE2/CS/AN7, which are individually configureable        WR TRIS      Data Latch
as inputs or outputs. These pins have Schmitt Trigger                     DQ            Schmitt
input buffers.                                                                          Trigger
                                                                           CK           Input
I/O PORTE becomes control inputs for the micro-                          TRIS Latch     Buffer
processor port when bit PSPMODE (TRISE<4>) is set.
In this mode, the user must make sure that the              RD TRIS
TRISE<2:0> bits are set (pins are configured as digital
inputs). Ensure ADCON1 is configured for digital I/O. In                             Q  D
this mode, the input buffers are TTL.
                                                                                        ENEN
Register 4-1 shows the TRISE register, which also con-
trols the parallel slave port operation.                    RD Port

PORTE pins are multiplexed with analog inputs. When         Note 1: I/O pins have protection diodes to VDD and VSS.
selected as an analog input, these pins will read as '0's.

TRISE controls the direction of the RE pins, even when
they are being used as analog inputs. The user must
make sure to keep the pins configured as inputs when
using them as analog inputs.

   Note: On a Power-on Reset, these pins are con-
               figured as analog inputs and read as `0'.

2002 Microchip Technology Inc.                                                               DS30325B-page 37
PIC16F7X

REGISTER 4-1: TRISE REGISTER (ADDRESS 89h)

                     R-0      R-0           R/W-0     R/W-0       U-0          R/W-1   R/W-1  R/W-1
                      IBF     OBF                                               Bit2    Bit1   Bit0
                  bit 7                     IBOV PSPMODE          --                              bit 0

bit 7             Parallel Slave Port Status/Control bits:

                  IBF: Input Buffer Full Status bit

                  1 = A word has been received and is waiting to be read by the CPU
                  0 = No word has been received

bit 6             OBF: Output Buffer Full Status bit

                  1 = The output buffer still holds a previously written word
                  0 = The output buffer has been read

bit 5             IBOV: Input Buffer Overflow Detect bit (in Microprocessor mode)

                  1 = A write occurred when a previously input word has not been read
                       (must be cleared in software)

                  0 = No overflow occurred

bit 4             PSPMODE: Parallel Slave Port Mode Select bit

                  1 = Parallel Slave Port mode
                  0 = General Purpose I/O mode

bit 3             Unimplemented: Read as '0'

bit 2             PORTE Data Direction bits:

                  Bit2: Direction Control bit for pin RE2/CS/AN7

                  1 = Input
                  0 = Output

bit 1             Bit1: Direction Control bit for pin RE1/WR/AN6

                  1 = Input
                  0 = Output

bit 0             Bit0: Direction Control bit for pin RE0/RD/AN5

                  1 = Input
                  0 = Output

                  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 reset

DS30325B-page 38                                                                2002 Microchip Technology Inc.
                                                                                    PIC16F7X

TABLE 4-9: PORTE FUNCTIONS

Name        Bit# Buffer Type                                              Function

RE0/RD/AN5  bit0                 ST/TTL(1) Input/output port pin or read control input in Parallel Slave Port mode or

                                     analog input.

                                     For RD (PSP mode):

                                     1 = IDLE

                                     0 = Read operation. Contents of PORTD register output to PORTD I/O

                                            pins (if chip selected).

RE1/WR/AN6  bit1                 ST/TTL(1) Input/output port pin or write control input in Parallel Slave Port mode

                                     or analog input.

                                     For WR (PSP mode):

                                     1 = IDLE

                                     0 = Write operation. Value of PORTD I/O pins latched into PORTD

                                            register (if chip selected).

RE2/CS/AN7  bit2                 ST/TTL(1) Input/output port pin or chip select control input in Parallel Slave Port

                                     mode or analog input.

                                     For CS (PSP mode):

                                     1 = Device is not selected

                                     0 = Device is selected

Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port mode.

TABLE 4-10: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

Addr Name Bit 7 Bit 6 Bit 5          Bit 4     Bit 3   Bit 2          Bit 1  Bit 0  Value on:            Value on all
                                                                                       POR,                  other
                                                                                       BOR
                                                                                                           RESETS
09h PORTE   --    --             --  --        --      RE2            RE1    RE0 ---- -xxx
                                                                                                         ---- -uuu
89h TRISE   IBF OBF IBOV PSPMODE -- PORTE Data Direction bits 0000 -111                                  0000 -111
                                                                                                         ---- -000
9Fh ADCON1 --     --             --  --        -- PCFG2 PCFG1 PCFG0 ---- -000

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

2002 Microchip Technology Inc.                                                                          DS30325B-page 39
PIC16F7X                                                      When either the CS or RD pins are detected high, the
                                                              PORTD outputs are disabled, and the interrupt flag bit
4.6 Parallel Slave Port                                       PSPIF is set on the Q4 clock cycle following the next
                                                              Q2 cycle, indicating that the read is complete. OBF
The Parallel Slave Port (PSP) is not implemented on           remains low until firmware writes new data to PORTD.
the PIC16F73 or PIC16F76.
                                                              When not in PSP mode, the IBF and OBF bits are held
PORTD operates as an 8-bit wide Parallel Slave Port,          clear. Flag bit IBOV remains unchanged. The PSPIF bit
or Microprocessor Port, when control bit PSPMODE              must be cleared by the user in firmware; the interrupt
(TRISE<4>) is set. In Slave mode, it is asynchronously        can be disabled by clearing the interrupt enable bit
readable and writable by an external system using the         PSPIE (PIE1<7>).
read control input pin RE0/RD, the write control input
pin RE1/WR, and the chip select control input pin             FIGURE 4-8:           PORTD AND PORTE
RE2/CS.                                                                             BLOCK DIAGRAM
                                                                                    (PARALLEL SLAVE PORT)
The PSP can directly interface to an 8-bit micro-
processor data bus. The external microprocessor can           Data Bus      DQ                              RDx
read or write the PORTD latch as an 8-bit latch. Setting                    CK                              pin
bit PSPMODE enables port pin RE0/RD to be the RD                      WR
input, RE1/WR to be the WR input and RE2/CS to be                     Port                TTL
the CS (chip select) input. For this functionality, the cor-
responding data direction bits of the TRISE register                        Q       D
(TRISE<2:0>) must be configured as inputs (i.e., set).
The A/D port configuration bits PCFG3:PCFG0                   RD                    ENEN
(ADCON1<3:0>) must be set to configure pins
RE2:RE0 as digital I/O.                                       Port

There are actually two 8-bit latches, one for data output     One bit of PORTD
(external reads) and one for data input (external
writes). The firmware writes 8-bit data to the PORTD            Set Interrupt Flag
output data latch and reads data from the PORTD input           PSPIF (PIR1<7>)
data latch (note that they have the same address). In
this mode, the TRISD register is ignored, since the                                       Read                     RD
external device is controlling the direction of data flow.                                         TTL

An external write to the PSP occurs when the CS and                                       Chip Select
WR lines are both detected low. Firmware can read the
actual data on the PORTD pins during this time. When                                             TTL               CS
either the CS or WR lines become high (level trig-
gered), the data on the PORTD pins is latched, and the                                    Write                    WR
Input Buffer Full (IBF) status flag bit (TRISE<7>) and
interrupt flag bit PSPIF (PIR1<7>) are set on the Q4                                             TTL
clock cycle, following the next Q2 cycle to signal the
write is complete (Figure 4-9). Firmware clears the IBF       Note: I/O pin has protection diodes to VDD and VSS.
flag by reading the latched PORTD data, and clears the
PSPIF bit.

The Input Buffer Overflow (IBOV) status flag bit
(TRISE<5>) is set if an external write to the PSP occurs
while the IBF flag is set from a previous external write.
The previous PORTD data is overwritten with the new
data. IBOV is cleared by reading PORTD and clearing
IBOV.

A read from the PSP occurs when both the CS and RD
lines are detected low. The data in the PORTD output
latch is output to the PORTD pins. The Output Buffer
Full (OBF) status flag bit (TRISE<6>) is cleared imme-
diately (Figure 4-10), indicating that the PORTD latch is
being read, or has been read by the external bus. If
firmware writes new data to the output latch during this
time, it is immediately output to the PORTD pins, but
OBF will remain cleared.

DS30325B-page 40                                                                           2002 Microchip Technology Inc.
                                                                                 PIC16F7X

FIGURE 4-9:            PARALLEL SLAVE PORT WRITE WAVEFORMS

                         Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

                  CS
                  WR
                  RD
     PORTD<7:0>
                  IBF
                OBF
              PSPIF

FIGURE 4-10:           PARALLEL SLAVE PORT READ WAVEFORMS

                         Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

                  CS
                  WR
                  RD

     PORTD<7:0>
                  IBF
                OBF

              PSPIF

TABLE 4-11: REGISTERS ASSOCIATED WITH PARALLEL SLAVE PORT

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

08h  PORTD Port data latch when written: Port pins when read                     xxxx xxxx uuuu uuuu

09h  PORTE             --        ----      --    --           RE2  RE1    RE0 ---- -xxx ---- -uuu

89h  TRISE             IBF OBF IBOV PSPMODE -- PORTE Data Direction Bits 0000 -111 0000 -111

0Ch  PIR1              PSPIF(1) ADIF RCIF  TXIF  SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch  PIE1              PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

9Fh  ADCON1 --                   ----      --    -- PCFG2 PCFG1 PCFG0 ---- -000 ---- -000

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Parallel Slave Port.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76; always maintain these bits clear.

2002 Microchip Technology Inc.                                                  DS30325B-page 41
PIC16F7X

NOTES:

DS30325B-page 42   2002 Microchip Technology Inc.
                                                                                       PIC16F7X

5.0 TIMER0 MODULE                                                        Counter mode is selected by setting bit T0CS
                                                                         (OPTION_REG<5>). In Counter mode, Timer0 will
The Timer0 module timer/counter has the following                        increment, either on every rising or falling edge of pin
features:                                                                RA4/T0CKI. The incrementing edge is determined by
                                                                         the Timer0 Source Edge Select bit T0SE
8-bit timer/counter                                                    (OPTION_REG<4>). Clearing bit T0SE selects the ris-
Readable and writable                                                  ing edge. Restrictions on the external clock input are
8-bit software programmable prescaler                                  discussed in detail in Section 5.2.
Internal or external clock select
Interrupt on overflow from FFh to 00h                                  The prescaler is mutually exclusively shared between
Edge select for external clock                                         the Timer0 module and the Watchdog Timer. The pres-
                                                                         caler is not readable or writable. Section 5.3 details the
Additional information on the Timer0 module is avail-                    operation of the prescaler.
able in the PICmicroTM Mid-Range MCU Family Refer-
ence Manual (DS33023).                                                   5.1 Timer0 Interrupt

Figure 5-1 is a block diagram of the Timer0 module and                   The TMR0 interrupt is generated when the TMR0 reg-
the prescaler shared with the WDT.                                       ister overflows from FFh to 00h. This overflow sets bit
                                                                         TMR0IF (INTCON<2>). The interrupt can be masked
Timer0 operation is controlled through the                               by clearing bit TMR0IE (INTCON<5>). Bit TMR0IF
OPTION_REG register (Register 5-1 on the following                       must be cleared in software by the Timer0 module
page). Timer mode is selected by clearing bit T0CS                       Interrupt Service Routine, before re-enabling this inter-
(OPTION_REG<5>). In Timer mode, the Timer0 mod-                          rupt. The TMR0 interrupt cannot awaken the processor
ule will increment every instruction cycle (without pres-                from SLEEP, since the timer is shut-off during SLEEP.
caler). If the TMR0 register 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 MODULE AND PRESCALER

CLKOUT (= FOSC/4)                                                                      Data Bus

RA4/T0CKI                        0M                        1                  SYNC              8
     pin                              U                          M               2     TMR0 reg
                                       X
                                                           0  U               Cycles              Set Flag bit TMR0IF
                                 1                            X                                        on Overflow

                T0SE               T0CS

                                                    PSA
                                             PRESCALER

  Watchdog            0                   8-bit Prescaler                     PS2:PS0
     Timer                 M                  8
                           U
WDT Enable bit                            8 - to - 1MUX
                      1X

                         PSA

                                          0                1

                                             MUX                         PSA

                                                                  WDT
                                                               Time-out

Note: T0CS, T0SE, PSA, PS2:PS0 are (OPTION_REG<5:0>).

2002 Microchip Technology Inc.                                                                  DS30325B-page 43
PIC16F7X

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

REGISTER 5-1:     OPTION_REG REGISTER

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

bit 7             RBPU: PORTB Pull-up Enable bit (see Section 2.2.2.2)
bit 6             INTEDG: Interrupt Edge Select bit (see Section 2.2.2.2)
bit 5             T0CS: TMR0 Clock Source Select bit
                  1 = Transition on T0CKI pin
bit 4             0 = Internal instruction cycle clock (CLKOUT)
                  T0SE: TMR0 Source Edge Select bit
bit 3             1 = Increment on high-to-low transition on T0CKI pin
                  0 = Increment on low-to-high transition on T0CKI pin
bit 2-0           PSA: Prescaler Assignment bit
                  1 = Prescaler is assigned to the WDT
                  0 = Prescaler is assigned to the Timer0 module
                  PS2:PS0: 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 reset

                  Note:    To avoid an unintended device RESET, the instruction sequences shown in
                           Example 5-1 and Example 5-2 (page 45) must be executed when changing the pres-
                           caler assignment between Timer0 and the WDT. This sequence must be followed
                           even if the WDT is disabled.

DS30325B-page 44                                                            2002 Microchip Technology Inc.
                                                                                                 PIC16F7X

5.3 Prescaler                                                  however, these lines must be used to set a temporary
                                                               value. The final 1:1 value is then set in lines 10 and 11
There is only one prescaler available on the microcon-         (highlighted). (Line numbers are included in the exam-
troller; it is shared exclusively between the Timer0           ple for illustrative purposes only, and are not part of the
module and the Watchdog Timer. The usage of the                actual code.)
prescaler is also mutually exclusive: that is, a prescaler
assignment for the Timer0 module means that there is           When assigned to the Timer0 module, all instructions
no prescaler for the Watchdog Timer, and vice versa.           writing to the TMR0 register (e.g. CLRF 1, MOVWF 1,
This prescaler is not readable or writable (see                BSF 1,x....etc.) will clear the prescaler. When assigned
Figure 5-1).                                                   to WDT, a CLRWDT instruction will clear the prescaler
                                                               along with the Watchdog Timer.
The PSA and PS2:PS0 bits (OPTION_REG<3:0>)
determine the prescaler assignment and prescale ratio.         Note:        Writing to TMR0 when the prescaler is
Examples of code for assigning the prescaler assign-                        assigned to Timer0, will clear the prescaler
ment are shown in Example 5-1 and Example 5-2.                              count but will not change the prescaler
Note that when the prescaler is being assigned to the                       assignment.
WDT with ratios other than 1:1, lines 2 and 3 (high-
lighted) are optional. If a prescale ratio of 1:1 is to used,

EXAMPLE 5-1: CHANGING THE PRESCALER ASSIGNMENT FROM TIMER0 TO WDT

1) BSF     STATUS, RP0           ; Bank1
2) MOVLW   b'xx0x0xxx'           ; Select clock source and prescale value of
3) MOVWF   OPTION_REG            ; other than 1:1
4) BCF     STATUS, RP0           ; Bank0
5) CLRF    TMR0                  ; Clear TMR0 and prescaler
6) BSF     STATUS, RP1           ; Bank1
7) MOVLW   b'xxxx1xxx'           ; Select WDT, do not change prescale value
8) MOVWF   OPTION_REG
9) CLRWDT                        ; Clears WDT and prescaler
10) MOVLW  b'xxxx1xxx'           ; Select new prescale value and WDT
11) MOVWF  OPTION_REG
12) BCF    STATUS, RP0           ; Bank0

EXAMPLE 5-2: CHANGING THE PRESCALER ASSIGNMENT FROM WDT TO TIMER0

CLRWDT   STATUS, RP0    ; Clear WDT and prescaler
BSF      b'xxxx0xxx'    ; Bank1
MOVLW    OPTION_REG     ; Select TMR0, new prescale
MOVWF    STATUS, RP0    ; value and clock source
BCF                     ; Bank0

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,    all other
                                                                                                    BOR     RESETS

01h,101h TMR0         Timer0 Module Register                                                     xxxx xxxx uuuu uuuu

0Bh,8Bh,   INTCON       GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh

81h,181h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used by Timer0.

2002 Microchip Technology Inc.                                                                  DS30325B-page 45
PIC16F7X

NOTES:

DS30325B-page 46   2002 Microchip Technology Inc.
                                                                               PIC16F7X

6.0 TIMER1 MODULE                                         In Timer mode, Timer1 increments every instruction
                                                          cycle. In Counter mode, it increments on every rising
The Timer1 module is a 16-bit timer/counter consisting    edge of the external clock input.
of two 8-bit registers (TMR1H and TMR1L), which are
readable and writable. The TMR1 Register pair             Timer1 can be enabled/disabled by setting/clearing
(TMR1H:TMR1L) increments from 0000h to FFFFh              control bit TMR1ON (T1CON<0>).
and rolls over to 0000h. The TMR1 Interrupt, if enabled,
is generated on overflow, which is latched in interrupt   Timer1 also has an internal "RESET input". This
flag bit TMR1IF (PIR1<0>). This interrupt can be          RESET can be generated by either of the two CCP
enabled/disabled by setting/clearing TMR1 interrupt       modules as the special event trigger (see Sections 8.1
enable bit TMR1IE (PIE1<0>).                              and 8.2). Register 6-1 shows the Timer1 Control
                                                          register.
Timer1 can operate in one of two modes:
                                                          When the Timer1 oscillator is enabled (T1OSCEN is
As a timer                                              set), the RC1/T1OSI/CCP2 and RC0/T1OSO/T1CKI
As a counter                                            pins become inputs. That is, the TRISC<1:0> value is
                                                          ignored and these pins read as `0'.
The operating mode is determined by the clock select
bit, TMR1CS (T1CON<1>).                                   Additional information on timer modules is available in
                                                          the PICmicroTM Mid-Range MCU Family Reference
                                                          Manual (DS33023).

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

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

bit 7-6        Unimplemented: Read as `0'
bit 5-4
               T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits
bit 3          11 = 1:8 Prescale value
bit 2          10 = 1:4 Prescale value
               01 = 1:2 Prescale value
bit 1          00 = 1:1 Prescale value
bit 0
               T1OSCEN: Timer1 Oscillator Enable Control bit
               1 = Oscillator is enabled
               0 = Oscillator is shut-off (the oscillator inverter is turned off to eliminate power drain)

               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 when TMR1CS = 0.

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

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

               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 reset

2002 Microchip Technology Inc.                                                DS30325B-page 47
PIC16F7X

6.1 Timer1 Operation in Timer Mode                           6.2 Timer1 Counter Operation

Timer mode is selected by clearing the TMR1CS                Timer1 may operate in Asynchronous or Synchronous
(T1CON<1>) bit. In this mode, the input clock to the         mode, depending on the setting of the TMR1CS bit.
timer is FOSC/4. The synchronize control bit T1SYNC
(T1CON<2>) has no effect, since the internal clock is        When Timer1 is being incremented via an external
always in sync.                                              source, increments occur on a rising edge. After Timer1
                                                             is enabled in Counter mode, the module must first have
                                                             a falling edge before the counter begins to increment.

FIGURE 6-1:       TIMER1 INCREMENTING EDGE

T1CKI
(Default high)

T1CKI
(Default low)

  Note: Arrows indicate counter increments.

6.3 Timer1 Operation in Synchronized                         If T1SYNC is cleared, then the external clock input is
         Counter Mode                                        synchronized with internal phase clocks. The synchro-
                                                             nization is done after the prescaler stage. The pres-
Counter mode is selected by setting bit TMR1CS. In           caler stage is an asynchronous ripple counter.
this mode, the timer increments on every rising edge of
clock input on pin RC1/T1OSI/CCP2, when bit                  In this configuration, during SLEEP mode, Timer1 will
T1OSCEN is set, or on pin RC0/T1OSO/T1CKI, when              not increment even if the external clock is present,
bit T1OSCEN is cleared.                                      since the synchronization circuit is shut-off. The
                                                             prescaler, however, will continue to increment.

FIGURE 6-2:       TIMER1 BLOCK DIAGRAM

                Set Flag bit                                                     0                       Synchronized
                TMR1IF on
                Overflow      TMR1                                                                       Clock Input

RC0/T1OSO/T1CKI               TMR1H TMR1L
RC1/T1OSI/CCP2(2)                                                                                     1

                              T1OSC                                 TMR1ON            T1SYNC
                                                                       On/Off
                                                                                       Prescaler         Synchronize
                                                            (2)                         1, 2, 4, 8               det

                                                                              1                  2         Q Clock
                                                                                 T1CKPS1:T1CKPS0
                                             T1OSCEN FOSC/4
                                             Enable
                                             Oscillator(1)  Internal  0
                                                            Clock

                                                                      TMR1CS

Note 1: When the T1OSCEN bit is cleared, the inverter is turned off. This eliminates power drain.
         2: For the PIC16F73/76, the Schmitt Trigger is not implemented in External Clock mode.

DS30325B-page 48                                                                                          2002 Microchip Technology Inc.
                                                                          PIC16F7X

6.4 Timer1 Operation in                                   6.4.1  READING AND WRITING TIMER1 IN
         Asynchronous Counter Mode                               ASYNCHRONOUS COUNTER MODE

If control bit T1SYNC (T1CON<2>) is set, the external     Reading TMR1H or TMR1L, while the timer is running
clock input is not synchronized. The timer continues to   from an external asynchronous clock, will ensure a
increment asynchronous to the internal phase clocks.      valid read (taken care of in hardware). However, the
The timer will continue to run during SLEEP and can       user should keep in mind that reading the 16-bit timer
generate an interrupt on overflow, which will wake-up     in two 8-bit values itself, poses certain problems, since
the processor. However, special precautions in soft-      the timer may overflow between the reads.
ware are needed to read/write the timer (Section 6.4.1).
                                                          For writes, it is recommended that the user simply stop
In Asynchronous Counter mode, Timer1 cannot be            the timer and write the desired values. A write conten-
used as a time-base for capture or compare operations.    tion may occur by writing to the timer registers, while
                                                          the register is incrementing. This may produce an
                                                          unpredictable value in the timer register.

                                                          Reading the 16-bit value requires some care. The
                                                          example code provided in Example 6-1 and
                                                          Example 6-2 demonstrates how to write to and read
                                                          Timer1 while it is running in Asynchronous mode.

EXAMPLE 6-1: WRITING A 16-BIT FREE-RUNNING TIMER

; All interrupts are disabled

CLRF TMR1L  ; Clear Low byte, Ensures no rollover into TMR1H

MOVLW HI_BYTE ; Value to load into TMR1H

MOVWF TMR1H, F ; Write High byte

MOVLW LO_BYTE ; Value to load into TMR1L

MOVWF TMR1H, F ; Write Low byte

; Re-enable the Interrupt (if required)

CONTINUE    ; Continue with your code

EXAMPLE 6-2: READING A 16-BIT FREE-RUNNING TIMER

; All interrupts are disabled

MOVF TMR1H, W ; Read high byte

MOVWF TMPH

MOVF TMR1L, W ; Read low byte

MOVWF TMPL

MOVF TMR1H, W ; Read high byte

SUBWF TMPH, W ; Sub 1st read with 2nd read

BTFSC STATUS,Z ; Is result = 0

GOTO CONTINUE ; Good 16-bit read

; TMR1L may have rolled over between the read of the high and low bytes.

; Reading the high and low bytes now will read a good value.

MOVF TMR1H, W ; Read high byte

MOVWF TMPH

MOVF TMR1L, W ; Read low byte

MOVWF TMPL  ; Re-enable the Interrupt (if required)

CONTINUE    ; Continue with your code

2002 Microchip Technology Inc.                                           DS30325B-page 49
PIC16F7X

6.5 Timer1 Oscillator                                        TABLE 6-1: CAPACITOR SELECTION FOR
                                                                                  THE TIMER1 OSCILLATOR
A crystal oscillator circuit is built-in between pins T1OSI
(input) and T1OSO (amplifier output). It is enabled by                                           Capacitors Used:
setting control bit T1OSCEN (T1CON<3>). The oscilla-
tor is a low power oscillator rated up to 200 kHz. It will          Osc Type Frequency
continue to run during SLEEP. It is primarily intended
for use with a 32 kHz crystal. Table 6-1 shows the                                               OSC1       OSC2
capacitor selection for the Timer1 oscillator.
                                                                    LP          32 kHz           47 pF      47 pF
The Timer1 oscillator is identical to the LP oscillator.
The user must provide a software time delay to ensure                           100 kHz          33 pF      33 pF
proper oscillator start-up.
                                                                                200 kHz          15 pF      15 pF

                                                                    Capacitor values are for design guidance only.

6.6 Resetting Timer1 using a CCP                                    These capacitors were tested with the crystals listed
         Trigger Output                                             below for basic start-up and operation. These values
                                                                    were not optimized.

If the CCP1 or CCP2 module is configured in Compare                 Different capacitor values may be required to produce
mode to generate a "special event trigger"                          acceptable oscillator operation. The user should test
(CCP1M3:CCP1M0 = `1011'), this signal will reset                    the performance of the oscillator over the expected
Timer1.                                                             VDD and temperature range for the application.

                                                                    See the notes (below) table for additional information.

Note:  The special event triggers from the CCP1                                 Commonly Used Crystals:
       and CCP2 modules will not set interrupt
       flag bit TMR1IF (PIR1<0>).                                   32.768 kHz         Epson C-001R32.768K-A

                                                                    100 kHz            Epson C-2 100.00 KC-P

Timer1 must be configured for either Timer or Synchro-              200 kHz               STD XTL 200.000 kHz
nized Counter mode, to take advantage of this feature.
If Timer1 is running in Asynchronous Counter mode,                  Note 1: Higher capacitance increases the stability
this RESET operation may not work.                                               of the oscillator, but also increases the
                                                                                 start-up time.
In the event that a write to Timer1 coincides with a spe-
cial event trigger from CCP1 or CCP2, the write will                        2: Since each resonator/crystal has its own
take precedence.                                                                 characteristics, the user should consult the
                                                                                 resonator/crystal manufacturer for appro-
                                                                                 priate values of external components.

In this mode of operation, the CCPRxH:CCPRxL regis-          T1CON register is reset to 00h on a Power-on Reset or
ter pair effectively becomes the period register for         a Brown-out Reset, which shuts off the timer and
Timer1.                                                      leaves a 1:1 prescale. In all other RESETS, the register
                                                             is unaffected.
6.7 Resetting of Timer1 Register Pair
         (TMR1H, TMR1L)                                      6.8 Timer1 Prescaler

TMR1H and TMR1L registers are not reset to 00h on a          The prescaler counter is cleared on writes to the
POR, or any other RESET, except by the CCP1 and              TMR1H or TMR1L registers.
CCP2 special event triggers.

TABLE 6-2: REGISTERS ASSOCIATED WITH TIMER1 AS A TIMER/COUNTER

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

0Bh,8Bh, INTCON GIE         PEIE  TMR0IE  INTE               RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh
                            ADIF    RCIF  TXIF               SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
0Ch    PIR1       PSPIF(1)  ADIE   RCIE   TXIE               SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

8Ch    PIE1       PSPIE(1)

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      --        -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Timer1 module.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76; always maintain these bits clear.

DS30325B-page 50                                                                           2002 Microchip Technology Inc.
                                                                                     PIC16F7X

7.0 TIMER2 MODULE                                         7.1 Timer2 Prescaler and Postscaler

Timer2 is an 8-bit timer with a prescaler and a           The prescaler and postscaler counters are cleared
postscaler. It can be used as the PWM time-base for       when any of the following occurs:
the PWM mode of the CCP module(s). The TMR2 reg-
ister is readable and writable, and is cleared on any      a write to the TMR2 register
device RESET.                                              a write to the T2CON register
                                                          any device RESET (POR, MCLR Reset, WDT
The input clock (FOSC/4) has a prescale option of 1:1,
1:4 or 1:16, selected by control bits                        Reset or BOR)
T2CKPS1:T2CKPS0 (T2CON<1:0>).
                                                          TMR2 is not cleared when T2CON is written.
The Timer2 module has an 8-bit period register, PR2.
Timer2 increments from 00h until it matches PR2 and       7.2 Output of TMR2
then resets to 00h on the next increment cycle. PR2 is
a readable and writable register. The PR2 register is     The output of TMR2 (before the postscaler) is fed to the
initialized to FFh upon RESET.                            SSP module, which optionally uses it to generate shift
                                                          clock.
The match output of TMR2 goes through a 4-bit
postscaler (which gives a 1:1 to 1:16 scaling inclusive)  FIGURE 7-1:                TIMER2 BLOCK DIAGRAM
to generate a TMR2 interrupt (latched in flag bit
TMR2IF, (PIR1<1>)).                                       Sets Flag   TOMuRtp2ut(1)
                                                          bit TMR2IF
Timer2 can be shut-off by clearing control bit TMR2ON
(T2CON<2>) to minimize power consumption.                             Reset                      Prescaler       FOSC/4
                                                                                   TMR2 reg
Register 7-1 shows the Timer2 control register.                                                  1:1, 1:4, 1:16

Additional information on timer modules is available in   Postscaler                 Comparator  2
the PICmicroTM Mid-Range MCU Family Reference
Manual (DS33023).                                         1:1 to 1:16 EQ

                                                                    4                PR2 reg     T2CKPS1:
                                                                                                 T2CKPS0
                                                          T2OUTPS3:
                                                          T2OUTPS0

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

2002 Microchip Technology Inc.                                                                  DS30325B-page 51
PIC16F7X

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
                      --                           TOUTPS1    TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
                  bit 7   TOUTPS3 TOUTPS2
                                                                                                                    bit 0

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

                  TMR2ON: Timer2 On bit

                  1 = Timer2 is on
                  0 = Timer2 is off

                  T2CKPS1:T2CKPS0: 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 reset

TABLE 7-1: REGISTERS ASSOCIATED WITH TIMER2 AS A TIMER/COUNTER

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

0Bh,8Bh, INTCON GIE       PEIE TMR0IE INTE         RBIE TMR0IF INTF        RBIF 0000 000x 0000 000u
10Bh, 18Bh

0Ch  PIR1 PSPIF(1) ADIF          RCIF       TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch  PIE1 PSPIE(1) ADIE          RCIE       TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

11h  TMR2 Timer2 Module Register                                                  0000 0000 0000 0000

12h  T2CON -- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 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.
   Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76; always maintain these bits clear.

DS30325B-page 52                                                            2002 Microchip Technology Inc.
                                                                       PIC16F7X

8.0 CAPTURE/COMPARE/PWM                                   8.2 CCP2 Module
         MODULES
                                                          Capture/Compare/PWM Register1 (CCPR1) is com-
Each Capture/Compare/PWM (CCP) module contains            prised of two 8-bit registers: CCPR1L (low byte) and
a 16-bit register which can operate as a:                 CCPR1H (high byte). The CCP2CON register controls
                                                          the operation of CCP2. The special event trigger is
16-bit Capture register                                 generated by a compare match; it will clear both
16-bit Compare register                                 TMR1H and TMR1L registers, and start an A/D conver-
PWM Master/Slave Duty Cycle register                    sion (if the A/D module is enabled).

Both the CCP1 and CCP2 modules are identical in           Additional information on CCP modules is available in
operation, with the exception being the operation of the  the PICmicroTM Mid-Range MCU Family Reference
special event trigger. Table 8-1 and Table 8-2 show the   Manual (DS33023) and in Application Note AN594,
resources and interactions of the CCP module(s). In       "Using the CCP Modules" (DS00594).
the following sections, the operation of a CCP module
is described with respect to CCP1. CCP2 operates the      TABLE 8-1: CCP MODE - TIMER
same as CCP1, except where noted.                                              RESOURCES REQUIRED

8.1 CCP1 Module                                           CCP Mode     Timer Resource

Capture/Compare/PWM Register1 (CCPR1) is com-               Capture          Timer1
prised of two 8-bit registers: CCPR1L (low byte) and       Compare           Timer1
CCPR1H (high byte). The CCP1CON register controls                            Timer2
the operation of CCP1. The special event trigger is          PWM
generated by a compare match and will clear both
TMR1H and TMR1L registers.

TABLE 8-2: INTERACTION OF TWO CCP MODULES

CCPx Mode CCPy Mode                                       Interaction

Capture  Capture     Same TMR1 time-base.
Capture  Compare
Compare  Compare     Same TMR1 time-base.
PWM      PWM
                     Same TMR1 time-base.
PWM      Capture     The PWMs will have the same frequency and update rate (TMR2 interrupt).
PWM      Compare     The rising edges are aligned.
                     None.
                     None.

2002 Microchip Technology Inc.                                        DS30325B-page 53
PIC16F7X

REGISTER 8-1:     CCP1CON REGISTER/CCP2CON REGISTER (ADDRESS: 17h/1Dh)

                     U-0  U-0               R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
                      --
                  bit 7   --                CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

                                                                        bit 0

bit 7-6           Unimplemented: Read as '0'
bit 5-4
                  CCPxX:CCPxY: PWM Least Significant bits
bit 3-0
                  Capture mode:
                  Unused

                  Compare mode:
                  Unused

                  PWM mode:
                  These bits are the two LSbs of the PWM duty cycle. The eight MSbs are found in CCPRxL.

                  CCPxM3:CCPxM0: CCPx Mode Select bits

                  0000 = Capture/Compare/PWM disabled (resets CCPx module)
                  0100 = Capture mode, every falling edge
                  0101 = Capture mode, every rising edge
                  0110 = Capture mode, every 4th rising edge
                  0111 = Capture mode, every 16th rising edge
                  1000 = Compare mode, set output on match (CCPxIF bit is set)
                  1001 = Compare mode, clear output on match (CCPxIF bit is set)
                  1010 = Compare mode, generate software interrupt on match (CCPxIF bit is set, CCPx pin is

                            unaffected)
                  1011 = Compare mode, trigger special event (CCPxIF bit is set, CCPx pin is unaffected);

                            CCP1 clears Timer1; CCP2 clears Timer1 and starts an A/D conversion (if A/D module
                            is enabled)
                  11xx = PWM 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 reset

DS30325B-page 54                                               2002 Microchip Technology Inc.
                                                                                     PIC16F7X

8.3 Capture Mode                                         8.3.4 CCP PRESCALER

In Capture mode, CCPR1H:CCPR1L captures the              There are four prescaler settings, specified by bits
16-bit value of the TMR1 register when an event occurs   CCP1M3:CCP1M0. Whenever the CCP module is
on pin RC2/CCP1. An event is defined as one of the fol-  turned off, or the CCP module is not in Capture mode,
lowing and is configured by CCPxCON<3:0>:                the prescaler counter is cleared. Any RESET will clear
                                                         the prescaler counter.
Every falling edge
Every rising edge                                      Switching from one capture prescaler to another may
Every 4th rising edge                                  generate an interrupt. Also, the prescaler counter will
Every 16th rising edge                                 not be cleared, therefore, the first capture may be from
                                                         a non-zero prescaler. Example 8-1 shows the recom-
An event is selected by control bits CCP1M3:CCP1M0       mended method for switching between capture pres-
(CCP1CON<3:0>). When a capture is made, the inter-       calers. This example also clears the prescaler counter
rupt request flag bit CCP1IF (PIR1<2>) is set. The       and will not generate the "false" interrupt.
interrupt flag must be cleared in software. If another
capture occurs before the value in register CCPR1 is     EXAMPLE 8-1:   CHANGING BETWEEN
read, the old captured value is overwritten by the new                  CAPTURE PRESCALERS
captured value.
                                                         CLRF      CCP1CON ;Turn CCP module off
8.3.1 CCP PIN CONFIGURATION                              MOVLW     NEW_CAPT_PS ;Load the W reg with

In Capture mode, the RC2/CCP1 pin should be config-      MOVWF                         ;the new prescaler
ured as an input by setting the TRISC<2> bit.                                          ;move value and CCP ON
                                                                   CCP1CON ;Load CCP1CON with this
                                                                                       ;value

Note:     If the RC2/CCP1 pin is configured as an
          output, a write to the port can cause a
          capture condition.                             8.4 Compare Mode

FIGURE 8-1:            CAPTURE MODE                      In Compare mode, the 16-bit CCPR1 register value is
                       OPERATION BLOCK                   constantly compared against the TMR1 register pair
                       DIAGRAM                           value. When a match occurs, the RC2/CCP1 pin is:

                      Set Flag bit CCP1IF                Driven high
                                                          Driven low
          Prescaler    (PIR1<2>)                         Remains unchanged

          1, 4, 16                                     The action on the pin is based on the value of control
                                                         bits CCP1M3:CCP1M0 (CCP1CON<3:0>). At the
RC2/CCP1                          CCPR1H   CCPR1L        same time, interrupt flag bit CCP1IF is set.
pin                                        TMR1L

               and             Capture
          Edge Detect          Enable

                                  TMR1H                  FIGURE 8-2:         COMPARE MODE
                                                                             OPERATION BLOCK
                 CCP1CON<3:0>                                                DIAGRAM
          Q's
                                                                        CCP1CON<3:0>
8.3.2 TIMER1 MODE SELECTION                                               Mode Select

Timer1 must be running in Timer mode or Synchro-                        Set Flag bit CCP1IF
nized Counter mode for the CCP module to use the                             (PIR1<2>)
capture feature. In Asynchronous Counter mode, the
capture operation may not work.                                                            CCPR1H CCPR1L

8.3.3 SOFTWARE INTERRUPT                                 RC2/CCP1     Q S Output     Match Comparator
                                                              Pin           R Logic              TMR1H TMR1L
When the Capture mode is changed, a false capture
interrupt may be generated. The user should keep bit      TRISC<2>
CCP1IE (PIE1<2>) clear to avoid false interrupts and     Output Enable
should clear the flag bit CCP1IF following any such
change in operating mode.                                             Special Event Trigger

                                                         Special Event Trigger will:

                                                          clear TMR1H and TMR1L registers
                                                          NOT set interrupt flag bit TMR1F (PIR1<0>)
                                                          (for CCP2 only) set the GO/DONE bit (ADCON0<2>)

2002 Microchip Technology Inc.                                                              DS30325B-page 55
PIC16F7X

8.4.1 CCP PIN CONFIGURATION                                8.4.4 SPECIAL EVENT TRIGGER

The user must configure the RC2/CCP1 pin as an out-        In this mode, an internal hardware trigger is generated,
put by clearing the TRISC<2> bit.                          which may be used to initiate an action.

Note:  Clearing the CCP1CON register will force            The special event trigger output of CCP1 resets the
       the RC2/CCP1 compare output latch to the            TMR1 register pair. This allows the CCPR1 register to
       default low level. This is not the PORTC            effectively be a 16-bit programmable period register for
       I/O data latch.                                     Timer1.

8.4.2 TIMER1 MODE SELECTION                                The special event trigger output of CCP2 resets the
                                                           TMR1 register pair and starts an A/D conversion (if the
Timer1 must be running in Timer mode or Synchro-           A/D module is enabled).
nized Counter mode if the CCP module is using the
compare feature. In Asynchronous Counter mode, the            Note:  The special event trigger from the CCP1
compare operation may not work.                                      and CCP2 modules will not set interrupt
                                                                     flag bit TMR1IF (PIR1<0>).

8.4.3 SOFTWARE INTERRUPT MODE

When Generate Software Interrupt mode is chosen, the
CCP1 pin is not affected. The CCP1IF or CCP2IF bit is
set, causing a CCP interrupt (if enabled).

TABLE 8-3: REGISTERS ASSOCIATED WITH CAPTURE, COMPARE, AND TIMER1

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

0Bh,8Bh, INTCON      GIE PEIE    TMR0IE     INTE       RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh         PSPIF(1) ADIF   RCIF      TXIF       SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

0Ch    PIR1

0Dh    PIR2       --  --         --         --         --     --     -- CCP2IF ---- ---0 ---- ---0

8Ch    PIE1       PSPIE(1) ADIE RCIE        TXIE       SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

8Dh    PIE2       --  --         --         --         --     --     -- CCP2IE ---- ---0 ---- ---0

87h    TRISC PORTC Data Direction Register                                                       1111 1111 1111 1111

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      --  -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

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

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

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

1Bh    CCPR2L Capture/Compare/PWM Register2 (LSB)                                                xxxx xxxx uuuu uuuu

1Ch    CCPR2H Capture/Compare/PWM Register2 (MSB)                                                xxxx xxxx uuuu uuuu

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

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by Capture and Timer1.
Note 1: The PSP is not implemented on the PIC16F73/76; always maintain these bits clear.

DS30325B-page 56                                                                           2002 Microchip Technology Inc.
                                                                                                  PIC16F7X

8.5 PWM Mode (PWM)                                                           8.5.1 PWM PERIOD

In Pulse Width Modulation mode, the CCPx pin pro-                            The PWM period is specified by writing to the PR2
duces up to a 10-bit resolution PWM output. Since the                        register. The PWM period can be calculated using the
CCP1 pin is multiplexed with the PORTC data latch, the                       following formula:
TRISC<2> bit must be cleared to make the CCP1 pin
an output.                                                                       PWM period = [(PR2) + 1] 4 TOSC
                                                                                                      (TMR2 prescale value)
Note:  Clearing the CCP1CON register will force
       the CCP1 PWM output latch to the default                              PWM frequency is defined as 1 / [PWM period].
       low level. This is not the PORTC I/O data
       latch.                                                                When TMR2 is equal to PR2, the following three events
                                                                             occur on the next increment cycle:
Figure 8-3 shows a simplified block diagram of the
CCP module in PWM mode.                                                       TMR2 is cleared
                                                                              The CCP1 pin is set (exception: if PWM duty
For a step-by-step procedure on how to set up the CCP
module for PWM operation, see Section 8.5.3.                                    cycle = 0%, the CCP1 pin will not be set)
                                                                              The PWM duty cycle is latched from CCPR1L into

                                                                                CCPR1H

FIGURE 8-3:              SIMPLIFIED PWM BLOCK                                Note:  The Timer2 postscaler (see Section 8.3) is
                         DIAGRAM                                                    not used in the determination of the PWM
                                                                                    frequency. The postscaler could be used to
Duty Cycle Registers     CCP1CON<5:4>                                               have a servo update rate at a different fre-
                                                                                    quency than the PWM output.
CCPR1L

                                                                             8.5.2 PWM DUTY CYCLE

CCPR1H (Slave)                                                               The PWM duty cycle is specified by writing to the
                                                                             CCPR1L register and to the CCP1CON<5:4> bits. Up
Comparator                       R         Q                                 to 10-bit resolution is available. The CCPR1L contains
                                                      RC2/CCP1               the eight MSbs and the CCP1CON<5:4> contains the
       TMR2      (1)                                                         two LSbs. This 10-bit value is represented by
(Note 1)                                S    TRISC<2>                        CCPR1L:CCP1CON<5:4>. The following equation is
                                                                             used to calculate the PWM duty cycle in time:
     Comparator   Clear Timer,
                  CCP1 pin and                                               PWM duty cycle = (CCPR1L:CCP1CON<5:4>)
         PR2      latch D.C.                                                                         TOSC (TMR2 prescale value)

      Note 1: The 8-bit timer is concatenated with the 2-bit inter-          CCPR1L and CCP1CON<5:4> can be written to at any
                   nal Q clock or the 2 bits of the prescaler to create the  time, but the duty cycle value is not latched into
                   10-bit time-base.                                         CCPR1H until after a match between PR2 and TMR2
                                                                             occurs (i.e., the period is complete). In PWM mode,
A PWM output (Figure 8-4) has a time-base (period)                           CCPR1H is a read only register.
and a time that the output stays high (duty cycle). The
frequency of the PWM is the inverse of the period                            The CCPR1H register and a 2-bit internal latch are
(1/period).                                                                  used to double buffer the PWM duty cycle. This double
                                                                             buffering is essential for glitchless PWM operation.

FIGURE 8-4:              PWM OUTPUT                                          When the CCPR1H and 2-bit latch match TMR2, con-
                                                                             catenated with an internal 2-bit Q clock or 2 bits of the
                                                                             TMR2 prescaler, the CCP1 pin is cleared.

TMR2                     TMR2                                                The maximum PWM resolution (bits) for a given PWM
RESET                    RESET                                               frequency is given by the formula:

                 Period                                                                           ( ) FOSC

                                                                                    = Resolution  log FPWM
                                                                                                                    bits
                                                                                                  log(2)

     Duty Cycle                                                              Note:  If the PWM duty cycle value is longer than
                              TMR2 = PR2                                            the PWM period, the CCP1 pin will not be
                                                                                    cleared.
                    TMR2 = Duty Cycle
TMR2 = PR2

2002 Microchip Technology Inc.                                                                           DS30325B-page 57
PIC16F7X

8.5.3 SETUP FOR PWM OPERATION                                  3. Make the CCP1 pin an output by clearing the
                                                                     TRISC<2> bit.
The following steps should be taken when configuring
the CCP module for PWM operation:                              4. Set the TMR2 prescale value and enable Timer2
                                                                     by writing to T2CON.
1. Set the PWM period by writing to the PR2 register.
2. Set the PWM duty cycle by writing to the                    5. Configure the CCP1 module for PWM operation.

      CCPR1L register and CCP1CON<5:4> bits.

TABLE 8-4: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS (FOSC = 20 MHz)

        PWM Frequency       1.22 kHz             4.88 kHz  19.53 kHz  78.12 kHz       156.3 kHz  208.3 kHz
Timer Prescale (1, 4, 16)       16                    4          1          1               1          1
PR2 Value
Maximum Resolution (bits)     0xFF                 0xFF       0xFF       0x3F            0x1F       0x17
                                10                   10         10          8               7        5.5

TABLE 8-5: REGISTERS ASSOCIATED WITH PWM AND TIMER2

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

0Bh,8Bh, INTCON      GIE    PEIE  TMR0IE         INTE      RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh         PSPIF(1)  ADIF   RCIF          TXIF      SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

0Ch      PIR1

0Dh      PIR2     --        --        --         --        --     --  -- CCP2IF ---- ---0 ---- ---0

8Ch      PIE1     PSPIE(1) ADIE   RCIE           TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

8Dh      PIE2     --        --        --         --        --     --  -- CCP2IE ---- ---0 ---- ---0

87h      TRISC PORTC Data Direction Register                                          1111 1111 1111 1111

11h      TMR2 Timer2 Module Register                                                  0000 0000 0000 0000

92h      PR2      Timer2 Module Period Register                                       1111 1111 1111 1111

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

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

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

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

1Bh      CCPR2L Capture/Compare/PWM Register2 (LSB)                                   xxxx xxxx uuuu uuuu

1Ch      CCPR2H Capture/Compare/PWM Register2 (MSB)                                   xxxx xxxx uuuu uuuu

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

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by PWM and Timer2.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76; always maintain these bits clear.

DS30325B-page 58                                                                2002 Microchip Technology Inc.
9.0 SYNCHRONOUS SERIAL PORT                                           PIC16F7X
         (SSP) MODULE
                                                       9.2 SPI Mode
9.1 SSP Module Overview
                                                       This section contains register definitions and opera-
The Synchronous Serial Port (SSP) module is a serial   tional characteristics of the SPI module. Additional
interface useful for communicating with other periph-  information on the SPI module can be found in the
eral or microcontroller devices. These peripheral      PICmicroTM Mid-Range MCU Family Reference Man-
devices may be Serial EEPROMs, shift registers, dis-   ual (DS33023A).
play drivers, A/D converters, etc. The SSP module can
operate in one of two modes:                           SPI mode allows 8 bits of data to be synchronously
                                                       transmitted and received simultaneously. To accom-
Serial Peripheral Interface (SPI)                    plish communication, typically three pins are used:
Inter-Integrated Circuit (I2C)
An overview of I2C operations and additional informa-   Serial Data Out (SDO) RC5/SDO
tion on the SSP module can be found in the PICmicroTM   Serial Data In (SDI) RC4/SDI/SDA
Mid-Range MCU Family Reference Manual                   Serial Clock (SCK) RC3/SCK/SCL
(DS33023).
                                                       Additionally, a fourth pin may be used when in a Slave
Refer to Application Note AN578, "Use of the SSP       mode of operation:
Module in the I 2C Multi-Master Environment"
(DS00578).                                              Slave Select (SS) RA5/SS/AN4

                                                       When initializing the SPI, several options need to be
                                                       specified. This is done by programming the appropriate
                                                       control bits in the SSPCON register (SSPCON<5:0>)
                                                       and SSPSTAT<7:6>. These control bits allow the fol-
                                                       lowing to be specified:

                                                       Master mode (SCK is the clock output)
                                                       Slave mode (SCK is the clock input)
                                                       Clock Polarity (IDLE state of SCK)
                                                       Clock edge (output data on rising/falling edge of

                                                          SCK)
                                                       Clock Rate (Master mode only)
                                                       Slave Select mode (Slave mode only)

2002 Microchip Technology Inc.                        DS30325B-page 59
PIC16F7X

REGISTER 9-1:     SSPSTAT: SYNC SERIAL PORT STATUS REGISTER (ADDRESS 94h)

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

bit 7             SMP: SPI Data Input Sample Phase bit

                  SPI Master mode:

                  1 = Input data sampled at end of data output time
                  0 = Input data sampled at middle of data output time (Microwire)

                  SPI Slave mode:
                  SMP must be cleared when SPI is used in Slave mode
                  I2C mode:
                  This bit must be maintained clear

bit 6             CKE: SPI Clock Edge Select bit (Figure 9-2, Figure 9-3, and Figure 9-4)

                  SPI mode, CKP = 0:
                  1 = Data transmitted on rising edge of SCK (Microwire alternate)

                  0 = Data transmitted on falling edge of SCK

                  SPI mode, CKP = 1:
                  1 = Data transmitted on falling edge of SCK (Microwire default)

                  0 = Data transmitted on rising edge of SCK

                  I2C mode:

                  This bit must be maintained clear

bit 5             D/A: Data/Address bit (I2C mode only)

                  1 = Indicates that the last byte received or transmitted was data

                  0 = Indicates that the last byte received or transmitted was address

bit 4             P: STOP bit (I2C mode only)

                  This bit is cleared when the SSP module is disabled, or when the START bit is detected last.

                  SSPEN is cleared.

                  1 = Indicates that a STOP bit has been detected last (this bit is '0' on RESET)

                  0 = STOP bit was not detected last

bit 3             S: START bit (I2C mode only)

                  This bit is cleared when the SSP module is disabled, or when the STOP bit is detected last.

                  SSPEN is cleared.

                  1 = Indicates that a START bit has been detected last (this bit is '0' on RESET)

                  0 = START bit was not detected last

bit 2             R/W: Read/Write bit Information (I2C mode only)

                  This bit holds the R/W bit information following the last address match. This bit is only valid from

                  the address match to the next START bit, STOP bit, or ACK bit.

                  1 = Read

                  0 = Write

bit 1             UA: Update Address bit (10-bit I2C mode only)

                  1 = Indicates that the user needs to update the address in the SSPADD register
                  0 = Address does not need to be updated

bit 0             BF: Buffer Full Status bit

                  Receive (SPI and I2C modes):

                  1 = Receive complete, SSPBUF is full
                  0 = Receive not complete, SSPBUF is empty
                  Transmit (I2C mode only):

                  1 = Transmit in progress, SSPBUF is full
                  0 = Transmit complete, SSPBUF is empty

                  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 reset

DS30325B-page 60                                                                      2002 Microchip Technology Inc.
                                                                  PIC16F7X

REGISTER 9-2:  SSPCON: SYNC SERIAL PORT CONTROL REGISTER (ADDRESS 14h)

                R/W-0            R/W-0  R/W-0  R/W-0       R/W-0  R/W-0  R/W-0  R/W-0
                WCOL             SSPOV  SSPEN   CKP        SSPM3  SSPM2  SSPM1  SSPM0
               bit 7
                                                                                     bit 0

bit 7          WCOL: Write Collision Detect bit
bit 6
               1 = The SSPBUF register is written while it is still transmitting the previous word
bit 5               (must be cleared in software)
bit 4
bit 3-0        0 = No collision

               SSPOV: Receive Overflow Indicator bit

               In SPI mode:
               1 = A new byte is received while the SSPBUF register is still holding the previous data. In case

                    of overflow, the data in SSPSR is lost. Overflow can only occur in Slave mode. The user
                    must read the SSPBUF, even if only transmitting data, to avoid setting overflow. In
                    Master mode, the overflow bit is not set since each new reception (and transmission) is
                    initiated by writing to the SSPBUF register.
               0 = No overflow
               In I2C mode:

               1 = A byte is received while the SSPBUF register is still holding the previous byte. SSPOV
                    is a "don't care" in Transmit mode. SSPOV must be cleared in software in either mode.

               0 = No overflow

               SSPEN: Synchronous Serial Port Enable bit

               In SPI mode:
               1 = Enables serial port and configures SCK, SDO, and SDI as serial port pins
               0 = Disables serial port and configures these pins as I/O port pins
               In I2C mode:

               1 = Enables the serial port and configures the SDA and SCL pins as serial port pins
               0 = Disables serial port and configures these pins as I/O port pins

               In both modes, when enabled, these pins must be properly configured as input or output.

               CKP: Clock Polarity Select bit

               In SPI mode:
               1 = IDLE state for clock is a high level (Microwire default)
               0 = IDLE state for clock is a low level (Microwire alternate)
               In I2C mode:
               SCK release control
               1 = Enable clock
               0 = Holds clock low (clock stretch). (Used to ensure data setup time.)

               SSPM3:SSPM0: Synchronous Serial Port Mode Select bits

               0000 = SPI Master mode, clock = FOSC/4
               0001 = SPI Master mode, clock = FOSC/16
               0010 = SPI Master mode, clock = FOSC/64
               0011 = SPI Master mode, clock = TMR2 output/2
               0100 = SPI Slave mode, clock = SCK pin. SS pin control enabled.
               0101 = SPI Slave mode, clock = SCK pin. SS pin control disabled. SS can be used as I/O pin.
               0110 = I2C Slave mode, 7-bit address
               0111 = I2C Slave mode, 10-bit address
               1011 = I2C Firmware Controlled Master mode (slave IDLE)
               1110 = I2C Slave mode, 7-bit address with START and STOP bit interrupts enabled
               1111 = I2C Slave mode, 10-bit address with START and STOP bit interrupts 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 reset

2002 Microchip Technology Inc.                                          DS30325B-page 61
PIC16F7X

FIGURE 9-1:        SSP BLOCK DIAGRAM                 To enable the serial port, SSP enable bit, SSPEN
                   (SPI MODE)                        (SSPCON<5>) must be set. To reset or reconfigure SPI
                                                     mode, clear bit SSPEN, re-initialize the SSPCON reg-
             Read                          Internal  ister, and then set bit SSPEN. This configures the SDI,
                                          Data Bus   SDO, SCK, and SS pins as serial port pins. For the pins
                                                     to behave as the serial port function, they must have
                                    Write            their data direction bits (in the TRISC register) appro-
                                                     priately programmed. That is:
                   SSPBUF reg
                                                      SDI must have TRISC<4> set
RC4/SDI/SDA              SSPSR reg      Shift
                  bit0                  Clock         SDO must have TRISC<5> cleared

RC5/SDO Peripheral OE                                 SCK (Master mode) must have TRISC<3>
                                                        cleared
RA5/SS/AN4   SS Control
                  Enable                              SCK (Slave mode) must have TRISC<3> set

                Edge                                  SS must have TRISA<5> set and ADCON must
                Select                                  be configured such that RA5 is a digital I/O

                                 2                   .
                          Clock Select
                                                         Note 1: When the SPI is in Slave mode with SS pin
                   SSPM3:SSPM0                                       control enabled (SSPCON<3:0> = 0100),
                                                                     the SPI module will reset if the SS pin is set
                            4           TMR2 Output                  to VDD.

                                               2                 2: If the SPI is used in Slave mode with
                                                                     CKE = '1', then the SS pin control must be
RC3/SCK/             Edge           Prescaler TCY                    enabled.
SCL                 Select          4, 16, 64
                                                                 3: When the SPI is in Slave mode with SS
                  TRISC<3>                                           pin control enabled (SSPCON<3:0> =
                                                                     `0100'), the state of the SS pin can affect
                                                                     the state read back from the TRISC<5>
                                                                     bit. The Peripheral OE signal from the
                                                                     SSP module into PORTC controls the
                                                                     state that is read back from the
                                                                     TRISC<5> bit (see Section 4.3 for infor-
                                                                     mation on PORTC). If Read-Modify-Write
                                                                     instructions, such as BSF are performed
                                                                     on the TRISC register while the SS pin is
                                                                     high, this will cause the TRISC<5> bit to
                                                                     be set, thus disabling the SDO output.

DS30325B-page 62                                      2002 Microchip Technology Inc.
                                                                                                         PIC16F7X

FIGURE 9-2:         SPI MODE TIMING, MASTER MODE

  SCK (CKP = 0,                  bit7        bit6        bit5        bit4        bit3        bit2        bit1        bit0
          CKE = 0)
                             bit7                                                                                    bit0
  SCK (CKP = 0,                      bit7                                                                                  bit0
          CKE = 1)
                    SPI MODE TIMING (SLAVE MODE WITH CKE = 0)
  SCK (CKP = 1,
          CKE = 0)

  SCK (CKP = 1,
          CKE = 1)

   SDO

   SDI (SMP = 0)

   SDI (SMP = 1)

    SSPIF

FIGURE 9-3:

    SS (optional)

SCK (CKP = 0)
SCK (CKP = 1)

SDO                              bit7        bit6        bit5        bit4        bit3        bit2        bit1        bit0

SDI (SMP = 0)

                          bit7                                                                                       bit0

SSPIF

FIGURE 9-4:         SPI MODE TIMING (SLAVE MODE WITH CKE = 1)

  SS

SCK (CKP = 0)
SCK (CKP = 1)

SDO                 bit7               bit6        bit5        bit4        bit3        bit2        bit1        bit0
SDI (SMP = 0)
SSPIF               bit7                                                                                       bit0

2002 Microchip Technology Inc.                                                                                DS30325B-page 63
PIC16F7X

TABLE 9-1: REGISTERS ASSOCIATED WITH SPI OPERATION

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

0Bh,8Bh. INTCON   GIE    PEIE TMR0IE INTE        RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh
                                                 SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
0Ch      PIR1      PSPIF(1) ADIF RCIF TXIF       SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
                   PSPIE(1) ADIE RCIE TXIE
8Ch      PIE1     PORTC Data Direction Register                                                       1111 1111 1111 1111

87h      TRISC

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

85h      TRISA    --     -- PORTA Data Direction Register                               --11 1111 --11 1111

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

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the SSP in SPI mode.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76; always maintain these bits clear.

DS30325B-page 64                                                                  2002 Microchip Technology Inc.
9.3 SSP I2C Operation                                                   PIC16F7X

The SSP module in I2C mode, fully implements all slave   The SSPCON register allows control of the I2C opera-
functions, except general call support, and provides     tion. Four mode selection bits (SSPCON<3:0>) allow
interrupts on START and STOP bits in hardware to facil-  one of the following I2C modes to be selected:
itate firmware implementations of the master functions.   I2C Slave mode (7-bit address)
The SSP module implements the standard mode speci-       I2C Slave mode (10-bit address)
fications as well as 7-bit and 10-bit addressing.         I2C Slave mode (7-bit address), with START and

Two pins are used for data transfer. These are the RC3/     STOP bit interrupts enabled to support Firmware
SCK/SCL pin, which is the clock (SCL), and the RC4/         Master mode
SDI/SDA pin, which is the data (SDA). The user must       I2C Slave mode (10-bit address), with START and
configure these pins as inputs or outputs through the       STOP bit interrupts enabled to support Firmware
TRISC<4:3> bits.                                            Master mode
                                                          I2C START and STOP bit interrupts enabled to
The SSP module functions are enabled by setting SSP         support Firmware Master mode, Slave is IDLE
enable bit SSPEN (SSPCON<5>).                            Selection of any I2C mode with the SSPEN bit set,
                                                         forces the SCL and SDA pins to be open drain, pro-
FIGURE 9-5:         SSP BLOCK DIAGRAM                    vided these pins are programmed to inputs by setting
                    (I2C MODE)                           the appropriate TRISC bits. Pull-up resistors must be
                                                         provided externally to the SCL and SDA pins for proper
             Read                        Internal        operation of the I2C module.
                                         Data Bus        Additional information on SSP I2C operation can be
                                                         found in the PICmicroTM Mid-Range MCU Family Ref-
                                     Write               erence Manual (DS33023A).

RC3/SCK/SCL         SSPBUF reg                           9.3.1 SLAVE MODE

             Shift                                       In Slave mode, the SCL and SDA pins must be config-
             Clock                                       ured as inputs (TRISC<4:3> set). The SSP module will
                                                         override the input state with the output data when
                    SSPSR reg                            required (slave-transmitter).

RC4/         MSb                 LSb                     When an address is matched, or the data transfer after
SDI/                                                     an address match is received, the hardware automati-
                                                         cally will generate the Acknowledge (ACK) pulse, and
SDA                                                      then load the SSPBUF register with the received value
                                                         currently in the SSPSR register.
                    Match Detect      Addr Match
                                                         There are certain conditions that will cause the SSP
                    SSPADD reg                           module not to give this ACK pulse. They include (either
                                                         or both):
                      START and         Set, RESET
                    STOP bit Detect      S, P bits       a) The buffer full bit BF (SSPSTAT<0>) was set
                                      (SSPSTAT reg)            before the transfer was received.

The SSP module has five registers for I2C operation.     b) The overflow bit SSPOV (SSPCON<6>) was set
These are the:                                                 before the transfer was received.

SSP Control Register (SSPCON)                          In this case, the SSPSR register value is not loaded
SSP Status Register (SSPSTAT)                          into the SSPBUF, but bit SSPIF (PIR1<3>) is set.
Serial Receive/Transmit Buffer (SSPBUF)                Table 9-2 shows what happens when a data transfer
SSP Shift Register (SSPSR) - Not directly accessible   byte is received, given the status of bits BF and
SSP Address Register (SSPADD)                          SSPOV. The shaded cells show the condition where
                                                         user software did not properly clear the overflow condi-
                                                         tion. Flag bit BF is cleared by reading the SSPBUF reg-
                                                         ister, while bit SSPOV is cleared through software.

                                                         The SCL clock input must have a minimum high and
                                                         low for proper operation. The high and low times of the
                                                         I2C specification, as well as the requirements of the
                                                         SSP module, are shown in timing parameter #100 and
                                                         parameter #101.

2002 Microchip Technology Inc.                          DS30325B-page 65
PIC16F7X                                                    The sequence of events for 10-bit address is as fol-
                                                            lows, with steps 7 - 9 for slave-transmitter:
9.3.1.1 Addressing
                                                            1. Receive first (high) byte of address (bits SSPIF,
Once the SSP module has been enabled, it waits for a              BF, and bit UA (SSPSTAT<1>) are set).
START condition to occur. Following the START condi-
tion, the 8-bits are shifted into the SSPSR register. All   2. Update the SSPADD register with second (low)
incoming bits are sampled with the rising edge of the             byte of address (clears bit UA and releases the
clock (SCL) line. The value of register SSPSR<7:1> is             SCL line).
compared to the value of the SSPADD register. The
address is compared on the falling edge of the eighth       3. Read the SSPBUF register (clears bit BF) and
clock (SCL) pulse. If the addresses match, and the BF             clear flag bit SSPIF.
and SSPOV bits are clear, the following events occur:
                                                            4. Receive second (low) byte of address (bits
a) The SSPSR register value is loaded into the                    SSPIF, BF, and UA are set).
      SSPBUF register.
                                                            5. Update the SSPADD register with the first (high)
b) The buffer full bit, BF is set.                                byte of address, if match releases SCL line, this
c) An ACK pulse is generated.                                     will clear bit UA.
d) SSP interrupt flag bit, SSPIF (PIR1<3>) is set
                                                            6. Read the SSPBUF register (clears bit BF) and
      (interrupt is generated if enabled) - on the falling        clear flag bit SSPIF.
      edge of the ninth SCL pulse.
                                                            7. Receive Repeated START condition.
In 10-bit Address mode, two address bytes need to be
received by the slave (Figure 9-7). The five Most Sig-      8. Receive first (high) byte of address (bits SSPIF
nificant bits (MSbs) of the first address byte specify if         and BF are set).
this is a 10-bit address. Bit R/W (SSPSTAT<2>) must
specify a write so the slave device will receive the sec-   9. Read the SSPBUF register (clears bit BF) and
ond address byte. For a 10-bit address, the first byte            clear flag bit SSPIF.
would equal `1111 0 A9 A8 0', where A9 and A8 are
the two MSbs of the address.

TABLE 9-2: DATA TRANSFER RECEIVED BYTE ACTIONS

Status Bits as Data  SSPSR  SSPBUF                         Generate ACK        Set bit SSPIF
Transfer is Received                                              Pulse   (SSP Interrupt occurs

BF      SSPOV                                                                    if enabled)

     0            0   Yes                                   Yes           Yes
     1
     1            0   No                                    No            Yes
     0
Note:             1   No                                    No            Yes

                  1   No                                    No            Yes

        Shaded cells show the conditions where the user software did not properly clear the overflow condition.

9.3.1.2 Reception                                           An SSP interrupt is generated for each data transfer
                                                            byte. Flag bit SSPIF (PIR1<3>) must be cleared in soft-
When the R/W bit of the address byte is clear and an        ware. The SSPSTAT register is used to determine the
address match occurs, the R/W bit of the SSPSTAT            status of the byte.
register is cleared. The received address is loaded into
the SSPBUF register.

When the address byte overflow condition exists, then
no Acknowledge (ACK) pulse is given. An overflow
condition is defined as either bit BF (SSPSTAT<0>) is
set, or bit SSPOV (SSPCON<6>) is set. This is an error
condition due to the user's firmware.

DS30325B-page 66                                                           2002 Microchip Technology Inc.
                                                                                                    PIC16F7X

FIGURE 9-6:               I2C WAVEFORMS FOR RECEPTION (7-BIT ADDRESS)

                 Receiving Address R/W=0     Receiving Data                    ACK  Receiving Data                                     ACK

SDA              A7 A6 A5 A4 A3 A2 A1     ACKD7 D6 D5 D4 D3 D2 D1 D0                D7 D6 D5 D4 D3 D2 D1 D0

SCL S 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9                                                                                 P

SSPIF (PIR1<3>)                                   Cleared in software                                                                       Bus Master
BF (SSPSTAT<0>)                              SSPBUF register is read                                                                        terminates
                                                                                                                                            transfer

SSPOV (SSPCON<6>)

                                                            Bit SSPOV is set because the SSPBUF register is still full.
                                                                                                                     ACK is not sent.

9.3.1.3 Transmission                                         An SSP interrupt is generated for each data transfer
                                                             byte. Flag bit SSPIF must be cleared in software, and
When the R/W bit of the incoming address byte is set         the SSPSTAT register is used to determine the status
and an address match occurs, the R/W bit of the              of the byte. Flag bit SSPIF is set on the falling edge of
SSPSTAT register is set. The received address is             the ninth clock pulse.
loaded into the SSPBUF register. The ACK pulse will
be sent on the ninth bit, and pin RC3/SCK/SCL is held        As a slave-transmitter, the ACK pulse from the master-
low. The transmit data must be loaded into the               receiver is latched on the rising edge of the ninth SCL
SSPBUF register, which also loads the SSPSR regis-           input pulse. If the SDA line was high (not ACK), then
ter. Then, pin RC3/SCK/SCL should be enabled by set-         the data transfer is complete. When the ACK is latched
ting bit CKP (SSPCON<4>). The master must monitor            by the slave, the slave logic is reset (resets SSPSTAT
the SCL pin prior to asserting another clock pulse. The      register) and the slave then monitors for another occur-
slave devices may be holding off the master by stretch-      rence of the START bit. If the SDA line was low (ACK),
ing the clock. The eight data bits are shifted out on the    the transmit data must be loaded into the SSPBUF reg-
falling edge of the SCL input. This ensures that the         ister, which also loads the SSPSR register. Then pin
SDA signal is valid during the SCL high time (Figure 9-7).   RC3/SCK/SCL should be enabled by setting bit CKP.

FIGURE 9-7:               I2C WAVEFORMS FOR TRANSMISSION (7-BIT ADDRESS)

                          Receiving Address  R/W = 1                                                    Transmitting Data ACK
                                                                          D7 D6 D5 D4 D3 D2 D1 D0
SDA              A7 A6 A5 A4 A3 A2 A1        ACK

SCL              1 23456789                                               1 2 34 56 789                                                        P
              S
                 Data in                                    SCL held low

                 sampled                                       while CPU
                                                            responds to SSPIF

SSPIF (PIR1<3>)                                                                Cleared in software

BF (SSPSTAT<0>)

                                                                                                                     From SSP Interrupt
                                                                          SSPBUF is written in software Service Routine

CKP (SSPCON<4>)

                                                                               Set bit after writing to SSPBUF
                                                                               (the SSPBUF must be written to

                                                                               before the CKP bit can be set)

2002 Microchip Technology Inc.                                                                                 DS30325B-page 67
PIC16F7X

9.3.2 MASTER MODE                                             9.3.3 MULTI-MASTER MODE

Master mode of operation is supported in firmware             In Multi-Master mode, the interrupt generation on the
using interrupt generation on the detection of the            detection of the START and STOP conditions, allows
START and STOP conditions. The STOP (P) and                   the determination of when the bus is free. The STOP
START (S) bits are cleared from a RESET or when the           (P) and START (S) bits are cleared from a RESET or
SSP module is disabled. The STOP (P) and START (S)            when the SSP module is disabled. The STOP (P) and
bits will toggle based on the START and STOP condi-           START (S) bits will toggle based on the START and
tions. Control of the I2C bus may be taken when the P         STOP conditions. Control of the I2C bus may be taken
bit is set, or the bus is IDLE and both the S and P bits      when bit P (SSPSTAT<4>) is set, or the bus is IDLE
are clear.                                                    and both the S and P bits clear. When the bus is busy,
                                                              enabling the SSP Interrupt will generate the interrupt
In Master mode, the SCL and SDA lines are manipu-             when the STOP condition occurs.
lated by clearing the corresponding TRISC<4:3> bit(s).
The output level is always low, irrespective of the           In Multi-Master operation, the SDA line must be moni-
value(s) in PORTC<4:3>. So when transmitting data, a          tored to see if the signal level is the expected output
'1' data bit must have the TRISC<4> bit set (input) and       level. This check only needs to be done when a high
a '0' data bit must have the TRISC<4> bit cleared (out-       level is output. If a high level is expected and a low level
put). The same scenario is true for the SCL line with the     is present, the device needs to release the SDA and
TRISC<3> bit. Pull-up resistors must be provided              SCL lines (set TRISC<4:3>). There are two stages
externally to the SCL and SDA pins for proper opera-          where this arbitration can be lost, these are:
tion of the I2C module.
                                                               Address Transfer
The following events will cause SSP Interrupt Flag bit,
SSPIF, to be set (SSP Interrupt will occur if enabled):       Data Transfer

START condition                                             When the slave logic is enabled, the slave continues to
                                                              receive. If arbitration was lost during the address trans-
STOP condition                                              fer stage, communication to the device may be in
                                                              progress. If addressed, an ACK pulse will be gener-
Data transfer byte transmitted/received                     ated. If arbitration was lost during the data transfer
                                                              stage, the device will need to retransfer the data at a
Master mode of operation can be done with either the          later time.
Slave mode IDLE (SSPM3:SSPM0 = 1011), or with the
Slave active. When both Master and Slave modes are
enabled, the software needs to differentiate the
source(s) of the interrupt.

TABLE 9-3: REGISTERS ASSOCIATED WITH I2C OPERATION

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

0Bh, 8Bh, INTCON  GIE       PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh

0Ch  PIR1         PSPIF(1)  ADIF  RCIF  TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
                  PSPIE(1)  ADIE  RCIE  TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
8Ch  PIE1

13h  SSPBUF Synchronous Serial Port Receive Buffer/Transmit Register      xxxx xxxx  uuuu uuuu
                                                                          0000 0000  0000 0000
93h  SSPADD Synchronous Serial Port (I2C mode) Address Register

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

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

87h  TRISC PORTC Data Direction Register                                  1111 1111 1111 1111

Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used by SSP module in I2C mode.

Note 1: PSPIF and PSPIE are reserved on the PIC16F73/76; always maintain these bits clear.
         2: Maintain these bits clear in I2C mode.

DS30325B-page 68                                                       2002 Microchip Technology Inc.
                                                                            PIC16F7X

10.0 UNIVERSAL SYNCHRONOUS                                The USART can be configured in the following modes:
         ASYNCHRONOUS RECEIVER
         TRANSMITTER (USART)                               Asynchronous (full duplex)
                                                          Synchronous - Master (half duplex)
The Universal Synchronous Asynchronous Receiver            Synchronous - Slave (half duplex)
Transmitter (USART) module is one of the two serial
I/O modules. (USART is also known as a Serial Com-        Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have to
munications Interface or SCI.) The USART can be con-      be set in order to configure pins RC6/TX/CK and
figured as a full duplex asynchronous system that can     RC7/RX/DT as the Universal Synchronous Asynchro-
communicate with peripheral devices, such as CRT ter-     nous Receiver Transmitter.
minals and personal computers, or it can be configured
as a half duplex synchronous system that can commu-
nicate with peripheral devices, such as A/D or D/A inte-
grated circuits, serial EEPROMs, etc.

REGISTER 10-1: TXSTA: TRANSMIT STATUS AND CONTROL REGISTER (ADDRESS 98h)

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

       CSRC                      TX9  TXEN                SYNC  --   BRGH   TRMT  TX9D

       bit 7                                                                      bit 0

bit 7  CSRC: Clock Source Select bit

       Asynchronous mode:
       Don't care

       Synchronous mode:
       1 = Master mode (clock generated internally from BRG)
       0 = Slave mode (clock from external source)

bit 6  TX9: 9-bit Transmit Enable bit

       1 = Selects 9-bit transmission

       0 = Selects 8-bit transmission

bit 5  TXEN: Transmit Enable bit

       1 = Transmit enabled

       0 = Transmit disabled

       Note: SREN/CREN overrides TXEN in Sync mode.

bit 4  SYNC: USART Mode Select bit

       1 = Synchronous mode

       0 = Asynchronous mode

bit 3  Unimplemented: Read as '0'

bit 2  BRGH: High Baud Rate Select bit

       Asynchronous mode:
       1 = High speed
       0 = Low speed

       Synchronous mode:
       Unused in this mode

bit 1  TRMT: Transmit Shift Register Status bit

       1 = TSR empty

       0 = TSR full

bit 0  TX9D: 9th bit of Transmit Data

       Can be parity 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 reset

2002 Microchip Technology Inc.                                             DS30325B-page 69
PIC16F7X

REGISTER 10-2: RCSTA: RECEIVE STATUS AND CONTROL REGISTER (ADDRESS 18h)

                   R/W-0      R/W-0         R/W-0      R/W-0        U-0        R-0  R-0  R-x
                    SPEN       RX9          SREN       CREN
                  bit 7                                                    --  FERR OERR RX9D

                                                                                                         bit 0

bit 7             SPEN: Serial Port Enable bit

                  1 = Serial port enabled (configures RC7/RX/DT and RC6/TX/CK pins as serial port pins)

                  0 = Serial port disabled

bit 6             RX9: 9-bit Receive Enable bit

                  1 = Selects 9-bit reception

                  0 = Selects 8-bit reception

bit 5             SREN: Single Receive Enable bit

                  Asynchronous mode:

                  Don't care

                  Synchronous mode - Master:
                  1 = Enables single receive
                  0 = Disables single receive
                  This bit is cleared after reception is complete.

                  Synchronous mode - Slave:
                  Don't care

bit 4             CREN: Continuous Receive Enable bit

                  Asynchronous mode:

                  1 = Enables continuous receive
                  0 = Disables continuous receive

                  Synchronous mode:

                  1 = Enables continuous receive until enable bit CREN is cleared (CREN overrides SREN)
                  0 = Disables continuous receive

bit 3             Unimplemented: Read as '0'

bit 2             FERR: Framing Error bit

                  1 = Framing error (can be updated by reading RCREG register and receive next valid byte)

                  0 = No framing error

bit 1             OERR: Overrun Error bit

                  1 = Overrun error (can be cleared by clearing bit CREN)

                  0 = No overrun error

bit 0             RX9D: 9th bit of Received Data

                  Can be parity bit (parity to be calculated by firmware)

                  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 reset

DS30325B-page 70                                                                2002 Microchip Technology Inc.
                                                                                      PIC16F7X

10.1 USART Baud Rate Generator                                   It may be advantageous to use the high baud rate
         (BRG)                                                   (BRGH = 1), even for slower baud clocks. This is
                                                                 because the FOSC/(16(X + 1)) equation can reduce the
The BRG supports both the Asynchronous and Syn-                  baud rate error in some cases.
chronous modes of the USART. It is a dedicated 8-bit
baud rate generator. The SPBRG register controls the             Writing a new value to the SPBRG register causes the
period of a free running 8-bit timer. In Asynchronous            BRG timer to be reset (or cleared). This ensures the
mode, bit BRGH (TXSTA<2>) also controls the baud                 BRG does not wait for a timer overflow before output-
rate. In Synchronous mode, bit BRGH is ignored.                  ting the new baud rate.
Table 10-1 shows the formula for computation of the
baud rate for different USART modes which only apply             10.1.1 SAMPLING
in Master mode (internal clock).
                                                                 The data on the RC7/RX/DT pin is sampled three times
Given the desired baud rate and FOSC, the nearest                by a majority detect circuit to determine if a high or a
integer value for the SPBRG register can be calculated           low level is present at the RX pin.
using the formula in Table 10-1. From this, the error in
baud rate can be determined.

TABLE 10-1: BAUD RATE FORMULA

SYNC                             BRGH = 0 (Low Speed)                            BRGH = 1 (High Speed)

     0  (Asynchronous) Baud Rate = FOSC/(64(X+1))                              Baud Rate = FOSC/(16(X+1))
                                                                                               N/A
     1  (Synchronous) Baud Rate = FOSC/(4(X+1))

X = value in SPBRG (0 to 255)

TABLE 10-2: REGISTERS ASSOCIATED WITH BAUD RATE GENERATOR

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

98h     TXSTA CSRC TX9 TXEN SYNC -- BRGH TRMT TX9D 0000 -010                                     0000 -010
                                                                                                 0000 -00x
18h     RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x                                     0000 0000

99h     SPBRG Baud Rate Generator Register                                            0000 0000

Legend: x = unknown, - = unimplemented, read as '0'. Shaded cells are not used by the BRG.

2002 Microchip Technology Inc.                                                             DS30325B-page 71
PIC16F7X

TABLE 10-3: BAUD RATES FOR ASYNCHRONOUS MODE (BRGH = 0)

                  FOSC = 20 MHz                      FOSC = 16 MHz                      FOSC = 10 MHz

BAUD                  %            SPBRG                 %            SPBRG                 %            SPBRG
RATE              ERROR            VALUE             ERROR            VALUE             ERROR            VALUE
                                 (DECIMAL)                          (DECIMAL)                          (DECIMAL)
         BAUD                               BAUD                               BAUD

  1200    1,221   1.73%          255        1,202    0.16%              207    1,202    0.16%                129
  2400    2,404   0.16%
  9600    9,470   -1.36%         129        2,404    0.16%              103    2,404    0.16%                64
19,200   19,531   1.73%
38,400   39,063   1.73%          32         9,615    0.16%              25     9,766    1.73%                15
57,600   62,500   8.51%
76,800   78,125   1.73%          15         19,231   0.16%              12     19,531   1.73%                7
96,000   104,167  8.51%
115,200  104,167  -9.58%         7          35,714   -6.99%             6      39,063   1.73%                3
250,000  312,500  25.00%
                                 4          62,500   8.51%              3      52,083   -9.58%               2

                                 3          83,333   8.51%              2      78,125   1.73%                1

                                 2          83,333   -13.19%            2      78,125   -18.62%              1

                                 2          125,000  8.51%              1      78,125   -32.18%              1

                                 0          250,000  0.00%              0      156,250  -37.50%              0

                  FOSC = 4 MHz                       FOSC = 3.6864 MHz                  FOSC = 3.579545 MHz

BAUD     BAUD         %            SPBRG    BAUD         %            SPBRG    BAUD         %            SPBRG
RATE              ERROR            VALUE             ERROR            VALUE             ERROR            VALUE
           300                   (DECIMAL)                          (DECIMAL)                          (DECIMAL)
  300    1,202
1200    2,404    0.16%          207        300      0.00%              191    301      0.23%                185
2400    8,929
9600    20,833   0.16%          51         1,200    0.00%              47     1,190    -0.83%               46
19,200   31,250
38,400   62,500   0.16%          25         2,400    0.00%              23     2,432    1.32%                22
57,600   62,500
76,800            -6.99%         6          9,600    0.00%              5      9,322    -2.90%               5

                  8.51%          2          19,200   0.00%              2      18,643   -2.90%               2

                  -18.62%        1          28,800   -25.00%            1      27,965   -27.17%              1

                  8.51%          0          57,600   0.00%              0      55,930   -2.90%               0

                  -18.62%        0          --       --                 --     --       --                   --

TABLE 10-4: BAUD RATES FOR ASYNCHRONOUS MODE (BRGH = 1)

                  FOSC = 20 MHz                      FOSC = 16 MHz                      FOSC = 10 MHz

BAUD                  %            SPBRG                 %            SPBRG                 %            SPBRG
RATE              ERROR            VALUE             ERROR            VALUE             ERROR            VALUE
                                 (DECIMAL)                          (DECIMAL)                          (DECIMAL)
         BAUD                               BAUD                               BAUD

2400     --       --             --         --       --                 --     2,441    1.73%                255

9600     9,615    0.16%          129        9,615    0.16%              103    9,615    0.16%                64

19,200   19,231   0.16%          64         19,231   0.16%              51     18,939   -1.36%               32

38,400   37,879   -1.36%         32         38,462   0.16%              25     39,063   1.73%                15

57,600   56,818   -1.36%         21         58,824   2.12%              16     56,818   -1.36%               10

76,800   78,125   1.73%          15         76,923   0.16%              12     78,125   1.73%                7

96,000   96,154   0.16%          12         100,000  4.17%              9      89,286   -6.99%               6

115,200 113,636   -1.36%         10         111,111  -3.55%             8      125,000  8.51%                4

250,000 250,000   0.00%          4          250,000  0.00%              3      208,333  -16.67%              2

300,000 312,500   4.17%          3          333,333  11.11%             2      312,500  4.17%                1

                  FOSC = 4 MHz                       FOSC = 3.6864 MHz                  FOSC = 3.579545 MHz

BAUD     BAUD        %            SPBRG    BAUD         %            SPBRG    BAUD         %            SPBRG
RATE             ERROR            VALUE             ERROR            VALUE             ERROR            VALUE
          1,202                  (DECIMAL)                          (DECIMAL)                          (DECIMAL)
   (K)    2,404
          9,615   0.16%          207        1,200    0.00%              191    1,203    0.23%                185
  1200   19,231
  2400   35,714   0.16%          103        2,400    0.00%              95     2,406    0.23%                92
  9600   62,500
19,200   83,333   0.16%          25         9,600    0.00%              23     9,727    1.32%                22
38,400   83,333
57,600   125,000  0.16%          12         19,200   0.00%              11     18,643   -2.90%               11
76,800   250,000
96,000            -6.99%         6          38,400   0.00%              5      37,287   -2.90%               5
115,200
250,000           8.51%          3          57,600   0.00%              3      55,930   -2.90%               3

                  8.51%          2          76,800   0.00%              2      74,574   -2.90%               2

                  -13.19%        2          115,200  20.00%             1      111,861  16.52%               1

                  8.51%          1          115,200  0.00%              1      111,861  -2.90%               1

                  0.00%          0          230,400  -7.84%             0      223,722  -10.51%              0

DS30325B-page 72                                                                2002 Microchip Technology Inc.
                                                                                          PIC16F7X

10.2 USART Asynchronous Mode                                      are set. The TXIF interrupt can be enabled/disabled by
                                                                  setting/clearing enable bit TXIE (PIE1<4>). Flag bit TXIF
In this mode, the USART uses standard non-return-to-              will be set, regardless of the state of enable bit TXIE and
zero (NRZ) format (one START bit, eight or nine data              cannot be cleared in software. It will reset only when new
bits, and one STOP bit). The most common data format              data is loaded into the TXREG register. While flag bit
is 8-bits. An on-chip, dedicated, 8-bit baud rate gener-          TXIF indicates the status of the TXREG register, another
ator can be used to derive standard baud rate frequen-            bit TRMT (TXSTA<1>) shows the status of the TSR reg-
cies from the oscillator. The USART transmits and                 ister. Status bit TRMT is a read only bit, which is set one
receives the LSb first. The USART's transmitter and               instruction cycle after the TSR register becomes empty,
receiver are functionally independent, but use the                and is cleared one instruction cycle after the TSR regis-
same data format and baud rate. The baud rate gener-              ter is loaded. No interrupt logic is tied to this bit, so the
ator produces a clock, either x16 or x64 of the bit shift         user has to poll this bit in order to determine if the TSR
rate, depending on bit BRGH (TXSTA<2>). Parity is not             register is empty.
supported by the hardware, but can be implemented in
software (and stored as the ninth data bit). Asynchro-                Note 1: The TSR register is not mapped in data
nous mode is stopped during SLEEP.                                                memory, so it is not available to the user.

Asynchronous mode is selected by clearing bit SYNC                            2: Flag bit TXIF is set when enable bit TXEN
(TXSTA<4>).                                                                       is set. TXIF is cleared by loading TXREG.

The USART Asynchronous module consists of the fol-                Transmission is enabled by setting enable bit TXEN
lowing important elements:                                        (TXSTA<5>). The actual transmission will not occur until
                                                                  the TXREG register has been loaded with data and the
Baud Rate Generator                                             baud rate generator (BRG) has produced a shift clock
Sampling Circuit                                                (Figure 10-2). The transmission can also be started by
Asynchronous Transmitter                                        first loading the TXREG register and then setting enable
                                                                  bit TXEN. Normally, when transmission is first started,
Asynchronous Receiver                                           the TSR register is empty. At that point, transfer to the
                                                                  TXREG register will result in an immediate transfer to
10.2.1 USART ASYNCHRONOUS                                         TSR, resulting in an empty TXREG. A back-to-back
              TRANSMITTER                                         transfer is thus possible (Figure 10-3). Clearing enable
                                                                  bit TXEN during a transmission will cause the transmis-
The USART transmitter block diagram is shown in                   sion to be aborted and will reset the transmitter. As a
Figure 10-1. The heart of the transmitter is the transmit         result, the RC6/TX/CK pin will revert to hi-impedance.
(serial) shift register (TSR). The shift register obtains its
data from the read/write transmit buffer, TXREG. The              In order to select 9-bit transmission, transmit bit TX9
TXREG register is loaded with data by firmware. The               (TXSTA<6>) should be set and the ninth bit should be
TSR register is not loaded until the STOP bit has been            written to TX9D (TXSTA<0>). The ninth bit must be writ-
transmitted from the previous load. As soon as the                ten before writing the 8-bit data to the TXREG register.
STOP bit is transmitted, the TSR is loaded with new data          This is because a data write to the TXREG register can
from the TXREG register (if available). Once the TXREG            result in an immediate transfer of the data to the TSR
register transfers the data to the TSR register, the              register (if the TSR is empty). In such a case, an incor-
TXREG register is empty. One instruction cycle later,             rect ninth data bit may be loaded in the TSR register.
flag bit TXIF (PIR1<4>) and flag bit TRMT (TXSTA<1>)

FIGURE 10-1:  USART TRANSMIT BLOCK DIAGRAM

                                                               Data Bus

              TXIF                    TXREG Register

TXIE                                                           8

                                 MSb                                     LSb
                                 (8)
                                                                      0          Pin Buffer
                                                                                    and Control
                                      TSR Register
                                                                                                       RC6/TX/CK pin
Interrupt

              TXEN Baud Rate CLK

                                                                              TRMT  SPEN

                     SPBRG                 TX9
              Baud Rate Generator     TX9D

2002 Microchip Technology Inc.                                                           DS30325B-page 73
PIC16F7X

Steps to follow when setting up an Asynchronous                 5. Enable the transmission by setting bit TXEN,
Transmission:                                                         which will also set bit TXIF.

1. Initialize the SPBRG register for the appropriate            6. If 9-bit transmission is selected, the ninth bit
      baud rate. If a high speed baud rate is desired,                should be loaded in bit TX9D.
      set bit BRGH (Section 10.1).
                                                                7. Load data to the TXREG register (starts
2. Enable the asynchronous serial port by clearing                    transmission).
      bit SYNC and setting bit SPEN.
                                                                8. If using interrupts, ensure that GIE and PEIE in
3. If interrupts are desired, then set enable bit TXIE.               the INTCON register are set.

4. If 9-bit transmission is desired, then set transmit
      bit TX9.

FIGURE 10-2:                ASYNCHRONOUS MASTER TRANSMISSION

     Write to TXREG               Word 1
          BRG Output
          (Shift Clock)     START Bit Bit 0                     Bit 1           Bit 7/8 STOP Bit
                                                                 Word 1
    RC6/TX/CK (pin)

                TXIF bit
     (Transmit Buffer
   Reg. Empty Flag)

           TRMT bit         Word 1
    (Transmit Shift         Transmit Shift Reg

Reg. Empty Flag)

FIGURE 10-3:                ASYNCHRONOUS MASTER TRANSMISSION (BACK TO BACK)

       Write to TXREG              Word 1 Word 2

            BRG Output      START Bit Bit 0              Bit 1                  Bit 7/8 STOP Bit START Bit Bit 0
            (Shift Clock)                                 Word 1                                                 Word 2

      RC6/TX/CK (pin)
                  TXIF bit

(Interrupt Reg. Flag)

           TRMT bit         Word 1                                              Word 2
    (Transmit Shift         Transmit Shift Reg.                                 Transmit Shift Reg.
Reg. Empty Flag)

Note: This timing diagram shows two consecutive transmissions.

TABLE 10-5: REGISTERS ASSOCIATED WITH ASYNCHRONOUS TRANSMISSION

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

0Bh, 8Bh, INTCON GIE        PEIE TMR0IE INTE RBIE TMR0IF INTF                   RBIF 0000 000x 0000 000u
10Bh,18Bh

0Ch  PIR1                   PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h  RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x 0000 -00x

19h  TXREG USART Transmit Register                                                     0000 0000 0000 0000

8Ch  PIE1                   PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

99h  SPBRG Baud Rate Generator Register                                                0000 0000 0000 0000

Legend: x = unknown, - = unimplemented locations read as '0'. Shaded cells are not used for asynchronous transmission.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76; always maintain these bits clear.

DS30325B-page 74                                                                 2002 Microchip Technology Inc.
                                                                          PIC16F7X

10.2.2 USART ASYNCHRONOUS                                     is possible for two bytes of data to be received and
              RECEIVER                                        transferred to the RCREG FIFO and a third byte to
                                                              begin shifting to the RSR register. On the detection of
The receiver block diagram is shown in Figure 10-4.           the STOP bit of the third byte, if the RCREG register is
The data is received on the RC7/RX/DT pin and drives          still full, the overrun error bit OERR (RCSTA<1>) will be
the data recovery block. The data recovery block is           set. The word in the RSR will be lost. The RCREG reg-
actually a high speed shifter operating at x16 times the      ister can be read twice to retrieve the two bytes in the
baud rate, whereas the main receive serial shifter oper-      FIFO. Overrun bit OERR has to be cleared in software.
ates at the bit rate, or at FOSC.                             This is done by resetting the receive logic (CREN is
                                                              cleared and then set). If bit OERR is set, transfers from
Once Asynchronous mode is selected, reception is              the RSR register to the RCREG register are inhibited
enabled by setting bit CREN (RCSTA<4>).                       and no further data will be received, therefore, it is
                                                              essential to clear error bit OERR if it is set. Framing
The heart of the receiver is the receive (serial) shift reg-  error bit FERR (RCSTA<2>) is set if a STOP bit is
ister (RSR). After sampling the STOP bit, the received        detected as clear. Bit FERR and the 9th receive bit are
data in the RSR is transferred to the RCREG register (if      buffered the same way as the receive data. Reading
it is empty). If the transfer is complete, flag bit RCIF      the RCREG will load bits RX9D and FERR with new
(PIR1<5>) is set. The actual interrupt can be enabled/        values, therefore, it is essential for the user to read the
disabled by setting/clearing enable bit RCIE                  RCSTA register before reading RCREG register, in
(PIE1<5>). Flag bit RCIF is a read only bit which is          order not to lose the old FERR and RX9D information.
cleared by the hardware. It is cleared when the RCREG
register has been read and is empty. The RCREG is a
double buffered register (i.e., it is a two deep FIFO). It

FIGURE 10-4:  USART RECEIVE BLOCK DIAGRAM

              x64 Baud Rate CLK                                     OERR  FERR

FOSC          SPBRG                     CREN
                                   64
                                                              MSb   RSR Register     LSb
                                    or
              Baud Rate Generator  16                        STOP (8) 7 1 0 START

RC7/RX/DT

              Pin Buffer           Data                       RX9
              and Control          Recovery

              SPEN                                                  RX9D RCREG Register
                                                                                                              FIFO

                                   Interrupt                  RCIF        8
                                                              RCIE         Data Bus

2002 Microchip Technology Inc.                                                      DS30325B-page 75
PIC16F7X

FIGURE 10-5:               ASYNCHRONOUS RECEPTION

         RX (pin)          START                               START                     START  bit7/8 STOP
                              bit bit0 bit1  bit7/8 STOP bit bit0     bit7/8 STOP bit                        bit
         Rcv Shift
         Reg                                            bit                       bit
         Rcv Buffer Reg
                                                        Word 1         Word 2
         Read Rcv                                       RCREG          RCREG
         Buffer reg
         RCREG

         RCIF
         (Interrupt Flag)

         OERR bit
         CREN

     Note: This timing diagram shows three words appearing on the RX input. The RCREG (receive buffer) is read after the third word,
                causing the OERR (overrun) bit to be set. An overrun error indicates an error in user firmware.

Steps to follow when setting up an Asynchronous                 6. Flag bit RCIF will be set when reception is com-
Reception:                                                            plete and an interrupt will be generated if enable
                                                                      bit RCIE is set.
1. Initialize the SPBRG register for the appropriate
      baud rate. If a high speed baud rate is desired,          7. Read the RCSTA register to get the ninth bit (if
      set bit BRGH (Section 10.1).                                    enabled) and determine if any error occurred
                                                                      during reception.
2. Enable the asynchronous serial port by clearing
      bit SYNC and setting bit SPEN.                            8. Read the 8-bit received data by reading the
                                                                      RCREG register.
3. If interrupts are desired, then set enable bit
      RCIE.                                                     9. If any error occurred, clear the error by clearing
                                                                      enable bit CREN.
4. If 9-bit reception is desired, then set bit RX9.
5. Enable the reception by setting bit CREN.                    10. If using interrupts, ensure that GIE and PEIE in
                                                                      the INTCON register are set.

TABLE 10-6: REGISTERS ASSOCIATED WITH ASYNCHRONOUS RECEPTION

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

0Bh, 8Bh, INTCON GIE       PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh

0Ch  PIR1                  PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h  RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x 0000 -00x

1Ah  RCREG USART Receive Register                                                               0000 0000 0000 0000

8Ch  PIE1                  PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

99h  SPBRG Baud Rate Generator Register                                                         0000 0000 0000 0000

Legend: x = unknown, - = unimplemented locations read as '0'. Shaded cells are not used for asynchronous reception.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76 devices; always maintain these bits clear.

DS30325B-page 76                                                              2002 Microchip Technology Inc.
10.3 USART Synchronous Master                                                 PIC16F7X
         Mode
                                                               Clearing enable bit TXEN during a transmission will
In Synchronous Master mode, the data is transmitted in         cause the transmission to be aborted and will reset the
a half-duplex manner (i.e., transmission and reception         transmitter. The DT and CK pins will revert to hi-
do not occur at the same time). When transmitting data,        impedance. If either bit CREN or bit SREN is set during
the reception is inhibited and vice versa. Synchronous         a transmission, the transmission is aborted and the DT
mode is entered by setting bit SYNC (TXSTA<4>). In             pin reverts to a hi-impedance state (for a reception).
addition, enable bit SPEN (RCSTA<7>) is set in order           The CK pin will remain an output if bit CSRC is set
to configure the RC6/TX/CK and RC7/RX/DT I/O pins              (internal clock). The transmitter logic, however, is not
to CK (clock) and DT (data) lines, respectively. The           reset, although it is disconnected from the pins. In order
Master mode indicates that the processor transmits the         to reset the transmitter, the user has to clear bit TXEN.
master clock on the CK line. The Master mode is                If bit SREN is set (to interrupt an on-going transmission
entered by setting bit CSRC (TXSTA<7>).                        and receive a single word), then after the single word is
                                                               received, bit SREN will be cleared and the serial port
10.3.1 USART SYNCHRONOUS MASTER                                will revert back to transmitting, since bit TXEN is still
              TRANSMISSION                                     set. The DT line will immediately switch from Hi-
                                                               impedance Receive mode to transmit and start driving.
The USART transmitter block diagram is shown in                To avoid this, bit TXEN should be cleared.
Figure 10-1. The heart of the transmitter is the transmit
(serial) shift register (TSR). The shift register obtains its  In order to select 9-bit transmission, the TX9
data from the read/write transmit buffer register              (TXSTA<6>) bit should be set and the ninth bit should
TXREG. The TXREG register is loaded with data in               be written to bit TX9D (TXSTA<0>). The ninth bit must
software. The TSR register is not loaded until the last        be written before writing the 8-bit data to the TXREG
bit has been transmitted from the previous load. As            register. This is because a data write to the TXREG can
soon as the last bit is transmitted, the TSR is loaded         result in an immediate transfer of the data to the TSR
with new data from the TXREG (if available). Once the          register (if the TSR is empty). If the TSR was empty and
TXREG register transfers the data to the TSR register          the TXREG was written before writing the "new" TX9D,
(occurs in one TCYCLE), the TXREG is empty and inter-          the "present" value of bit TX9D is loaded.
rupt bit TXIF (PIR1<4>) is set. The interrupt can be
enabled/disabled by setting/clearing enable bit TXIE           Steps to follow when setting up a Synchronous Master
(PIE1<4>). Flag bit TXIF will be set, regardless of the        Transmission:
state of enable bit TXIE and cannot be cleared in soft-
ware. It will reset only when new data is loaded into the      1. Initialize the SPBRG register for the appropriate
TXREG register. While flag bit TXIF indicates the status             baud rate (Section 10.1).
of the TXREG register, another bit TRMT (TXSTA<1>)
shows the status of the TSR register. TRMT is a read           2. Enable the synchronous master serial port by
only bit, which is set when the TSR is empty. No inter-              setting bits SYNC, SPEN and CSRC.
rupt logic is tied to this bit, so the user has to poll this
bit in order to determine if the TSR register is empty.        3. If interrupts are desired, set enable bit TXIE.
The TSR is not mapped in data memory, so it is not             4. If 9-bit transmission is desired, set bit TX9.
available to the user.                                         5. Enable the transmission by setting bit TXEN.
                                                               6. If 9-bit transmission is selected, the ninth bit
Transmission is enabled by setting enable bit TXEN
(TXSTA<5>). The actual transmission will not occur                   should be loaded in bit TX9D.
until the TXREG register has been loaded with data.            7. Start transmission by loading data to the TXREG
The first data bit will be shifted out on the next available
rising edge of the clock on the CK line. Data out is                 register.
stable around the falling edge of the synchronous clock        8. If using interrupts, ensure that GIE and PEIE in
(Figure 10-6). The transmission can also be started by
first loading the TXREG register and then setting bit                the INTCON register are set.
TXEN (Figure 10-7). This is advantageous when slow
baud rates are selected, since the BRG is kept in
RESET when bits TXEN, CREN and SREN are clear.
Setting enable bit TXEN will start the BRG, creating a
shift clock immediately. Normally, when transmission is
first started, the TSR register is empty, so a transfer to
the TXREG register will result in an immediate transfer
to TSR, resulting in an empty TXREG. Back-to-back
transfers are possible.

2002 Microchip Technology Inc.                                DS30325B-page 77
PIC16F7X

FIGURE 10-6:       SYNCHRONOUS TRANSMISSION

         Q1Q2 Q3Q4 Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2 Q3Q4        Q3Q4 Q1Q2 Q3Q4 Q1Q2 Q3Q4 Q1Q2 Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4

  RC7/RX/DT                      bit 0  bit 1        bit 2         bit 7               bit 0  bit 1                  bit 7
              pin
                                        Word 1                                                Word 2
  RC6/TX/CK
              pin  Write Word 1  Write Word 2

        Write to
  TXREG reg

       TXIF bit
(Interrupt Flag)

      TRMTTbRitMT

     TXEN bit '1'                                                                                                           '1'

     Note: Sync Master mode; SPBRG = '0'. Continuous transmission of two 8-bit words.

FIGURE 10-7:       SYNCHRONOUS TRANSMISSION (THROUGH TXEN)

         RC7/RX/DT pin                         bit0          bit1  bit2                       bit6    bit7

         RC6/TX/CK pin

              Write to
         TXREG reg

                   TXIF bit

                   TRMT bit
                   TXEN bit

TABLE 10-7: REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER TRANSMISSION

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

0Bh, 8Bh, INTCON GIE             PEIE TMR0IE INTE RBIE TMR0IF INTF                            RBIF 0000 000x 0000 000u
10Bh,18Bh

0Ch      PIR1      PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h      RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x 0000 -00x

19h      TXREG USART Transmit Register                                                                0000 0000 0000 0000

8Ch      PIE1      PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

99h      SPBRG Baud Rate Generator Register                                                           0000 0000 0000 0000

Legend: x = unknown, - = unimplemented, read as '0'. Shaded cells are not used for synchronous master transmission.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76 devices; always maintain these bits clear.

DS30325B-page 78                                                                                       2002 Microchip Technology Inc.
                                                                                                       PIC16F7X

10.3.2 USART SYNCHRONOUS MASTER                                      receive data. Reading the RCREG register will load bit
              RECEPTION                                              RX9D with a new value, therefore, it is essential for the
                                                                     user to read the RCSTA register before reading RCREG,
Once synchronous mode is selected, reception is                      in order not to lose the old RX9D information.
enabled by setting either enable bit SREN (RCSTA<5>),
or enable bit CREN (RCSTA<4>). Data is sampled on                    Steps to follow when setting up a Synchronous Master
the RC7/RX/DT pin on the falling edge of the clock. If               Reception:
enable bit SREN is set, then only a single word is
received. If enable bit CREN is set, the reception is con-           1. Initialize the SPBRG register for the appropriate
tinuous until CREN is cleared. If both bits are set, CREN                  baud rate (Section 10.1).
takes precedence. After clocking the last bit, the
received data in the Receive Shift Register (RSR) is                 2. Enable the synchronous master serial port by
transferred to the RCREG register (if it is empty). When                   setting bits SYNC, SPEN and CSRC.
the transfer is complete, interrupt flag bit RCIF
(PIR1<5>) is set. The actual interrupt can be enabled/               3. Ensure bits CREN and SREN are clear.
disabled by setting/clearing enable bit RCIE (PIE1<5>).              4. If interrupts are desired, then set enable bit
Flag bit RCIF is a read only bit, which is reset by the
hardware. In this case, it is reset when the RCREG reg-                    RCIE.
ister has been read and is empty. The RCREG is a dou-                5. If 9-bit reception is desired, then set bit RX9.
ble buffered register (i.e., it is a two deep FIFO). It is           6. If a single reception is required, set bit SREN.
possible for two bytes of data to be received and trans-
ferred to the RCREG FIFO and a third byte to begin shift-                  For continuous reception set bit CREN.
ing into the RSR register. On the clocking of the last bit           7. Interrupt flag bit RCIF will be set when reception
of the third byte, if the RCREG register is still full, then
overrun error bit OERR (RCSTA<1>) is set. The word in                      is complete and an interrupt will be generated if
the RSR will be lost. The RCREG register can be read                       enable bit RCIE was set.
twice to retrieve the two bytes in the FIFO. Bit OERR has            8. Read the RCSTA register to get the ninth bit (if
to be cleared in software (by clearing bit CREN). If bit                   enabled) and determine if any error occurred
OERR is set, transfers from the RSR to the RCREG are                       during reception.
inhibited, so it is essential to clear bit OERR if it is set.
The ninth receive bit is buffered the same way as the                9. Read the 8-bit received data by reading the
                                                                           RCREG register.

                                                                     10. If any error occurred, clear the error by clearing
                                                                           bit CREN.

                                                                     11. If using interrupts, ensure that GIE and PEIE in
                                                                           the INTCON register are set.

FIGURE 10-8:        SYNCHRONOUS RECEPTION (MASTER MODE, SREN)

                    Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

RC7/RX/DT pin                    bit0  bit1  bit2              bit3  bit4                  bit5  bit6  bit7

RC6/TX/CK pin

          Write to
        bit SREN

SREN bit

CREN bit '0'                                                                                                 '0'

  RCIF bit
(Interrupt)

     Read
  RXREG

Note: Timing diagram demonstrates Sync Master mode with bit SREN = '1' and bit BRG = '0'.

2002 Microchip Technology Inc.                                                                              DS30325B-page 79
PIC16F7X

TABLE 10-8: REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER RECEPTION

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 TMR0IE INTE RBIE TMR0IF INTF          RBIF 0000 000x 0000 000u
10Bh,18Bh

0Ch      PIR1     PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h      RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x 0000 -00x

1Ah      RCREG USART Receive Register                                      0000 0000 0000 0000

8Ch      PIE1     PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

99h      SPBRG Baud Rate Generator Register                                0000 0000 0000 0000

Legend: x = unknown, - = unimplemented, read as '0'. Shaded cells are not used for synchronous master reception.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76 devices; always maintain these bits clear.

10.4 USART Synchronous Slave Mode                            Follow these steps when setting up a Synchronous
                                                             Slave Transmission:
Synchronous Slave mode differs from the Master
mode, in that the shift clock is supplied externally at the  1. Enable the synchronous slave serial port by set-
RC6/TX/CK pin (instead of being supplied internally in             ting bits SYNC and SPEN and clearing bit
Master mode). This allows the device to transfer or                CSRC.
receive data while in SLEEP mode. Slave mode is
entered by clearing bit CSRC (TXSTA<7>).                     2. Clear bits CREN and SREN.
                                                             3. If interrupts are desired, then set enable bit
10.4.1 USART SYNCHRONOUS SLAVE
              TRANSMIT                                             TXIE.
                                                             4. If 9-bit transmission is desired, then set bit TX9.
The operation of the Synchronous Master and Slave            5. Enable the transmission by setting enable bit
modes are identical except in the case of the SLEEP
mode.                                                              TXEN.
                                                             6. If 9-bit transmission is selected, the ninth bit
If two words are written to the TXREG and then the
SLEEP instruction is executed, the following will occur:           should be loaded in bit TX9D.
                                                             7. Start transmission by loading data to the TXREG
a) The first word will immediately transfer to the
      TSR register and transmit when the master                    register.
      device drives the CK line.                             8. If using interrupts, ensure that GIE and PEIE in

b) The second word will remain in TXREG register.                  the INTCON register are set.
c) Flag bit TXIF will not be set.
d) When the first word has been shifted out of TSR,

      the TXREG register will transfer the second
      word to the TSR and flag bit TXIF will now be
      set.
e) If enable bit TXIE is set, the interrupt will wake
      the chip from SLEEP and if the global interrupt
      is enabled, the program will branch to the inter-
      rupt vector (0004h).

DS30325B-page 80                                                     2002 Microchip Technology Inc.
                                                                                 PIC16F7X

TABLE 10-9: REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE TRANSMISSION

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

0Bh, 8Bh, INTCON GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh

0Ch  PIR1     PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

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

19h  TXREG USART Transmit Register                                               0000 0000 0000 0000

8Ch  PIE1     PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

99h  SPBRG Baud Rate Generator Register                                          0000 0000 0000 0000

Legend: x = unknown, - = unimplemented, read as '0'. Shaded cells are not used for synchronous slave transmission.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76 devices; always maintain these bits clear.

10.4.2 USART SYNCHRONOUS SLAVE                              Follow these steps when setting up a Synchronous
              RECEPTION                                     Slave Reception:

The operation of the Synchronous Master and Slave           1. Enable the synchronous master serial port by
modes is identical, except in the case of the SLEEP               setting bits SYNC and SPEN and clearing bit
mode. Bit SREN is a "don't care" in Slave mode.                   CSRC.

If receive is enabled by setting bit CREN prior to the      2. If interrupts are desired, set enable bit RCIE.
SLEEP instruction, then a word may be received during
SLEEP. On completely receiving the word, the RSR            3. If 9-bit reception is desired, set bit RX9.
register will transfer the data to the RCREG register       4. To enable reception, set enable bit CREN.
and if enable bit RCIE bit is set, the interrupt generated  5. Flag bit RCIF will be set when reception is com-
will wake the chip from SLEEP. If the global interrupt is
enabled, the program will branch to the interrupt vector          plete and an interrupt will be generated, if
(0004h).                                                          enable bit RCIE was set.
                                                            6. Read the RCSTA register to get the ninth bit (if
                                                                  enabled) and determine if any error occurred
                                                                  during reception.

                                                            7. Read the 8-bit received data by reading the
                                                                  RCREG register.

                                                            8. If any error occurred, clear the error by clearing
                                                                  bit CREN.

                                                            9. If using interrupts, ensure that GIE and PEIE in
                                                                  the INTCON register are set.

TABLE 10-10: REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE RECEPTION

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

0Bh, 8Bh, INTCON GIE             PEIE TMR0IE INTE RBIE TMR0IF INTF        RBIF 0000 000x                         0000 000u
10Bh,18Bh
                                                                                                                 0000 0000
0Ch  PIR1     PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000                                       0000 000x
                                                                                                                 0000 0000
18h  RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x                                                     0000 0000
                                                                                                                 0000 -010
1Ah  RCREG USART Receive Register                                                0000 0000                       0000 0000

8Ch  PIE1     PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000

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

99h  SPBRG Baud Rate Generator Register                                          0000 0000

Legend: x = unknown, - = unimplemented, read as '0'. Shaded cells are not used for synchronous slave reception.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76 devices, always maintain these bits clear.

2002 Microchip Technology Inc.                                                  DS30325B-page 81
PIC16F7X

NOTES:

DS30325B-page 82   2002 Microchip Technology Inc.
                                                                         PIC16F7X

11.0 ANALOG-TO-DIGITAL                                     The A/D module has three registers. These registers
         CONVERTER (A/D) MODULE                            are:

The 8-bit analog-to-digital (A/D) converter module has            A/D Result Register ((ADRES)
five inputs for the PIC16F73/76 and eight for the                A/D Control Register 0 (ADCON0)
PIC16F74/77.                                                      A/D Control Register 1 ((ADCON1)

The A/D allows conversion of an analog input signal to     The ADCON0 register, shown in Register 11-1, con-
a corresponding 8-bit digital number. The output of the    trols the operation of the A/D module. The ADCON1
sample and hold is the input into the converter, which     register, shown in Register 11-2, configures the func-
generates the result via successive approximation. The     tions of the port pins. The port pins can be configured
analog reference voltage is software selectable to         as analog inputs (RA3 can also be a voltage reference),
either the device's positive supply voltage (VDD), or the  or as digital I/O.
voltage level on the RA3/AN3/VREF pin.
                                                           Additional information on using the A/D module can be
The A/D converter has a unique feature of being able       found in the PICmicroTM Mid-Range MCU Family Ref-
to operate while the device is in SLEEP mode. To oper-     erence Manual (DS33023) and in Application Note,
ate in SLEEP, the A/D conversion clock must be             AN546 (DS00546).
derived from the A/D's internal RC oscillator.

REGISTER 11-1: ADCON0 REGISTER (ADDRESS 1Fh)

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

         ADCS1 ADCS0 CHS2                                  CHS1   CHS0 GO/DONE  --  ADON

         bit 7                                                                      bit 0

bit 7-6  ADCS1:ADCS0: A/D Conversion Clock Select bits
bit 5-3
         00 = FOSC/2
bit 2    01 = FOSC/8
bit 1    10 = FOSC/32
bit 0    11 = FRC (clock derived from the internal A/D module RC oscillator)

         CHS2:CHS0: Analog Channel Select bits

         000 = Channel 0 (RA0/AN0)
         001 = Channel 1 (RA1/AN1)
         010 = Channel 2 (RA2/AN2)
         011 = Channel 3 (RA3/AN3)
         100 = Channel 4 (RA5/AN4)
         101 = Channel 5 (RE0/AN5)(1)
         110 = Channel 6 (RE1/AN6)(1)
         111 = Channel 7 (RE2/AN7)(1)

         GO/DONE: A/D Conversion Status bit

         If ADON = 1:
         1 = A/D conversion in progress (setting this bit starts the A/D conversion)
         0 = A/D conversion not in progress (this bit is automatically cleared by hardware when the

              A/D conversion is complete)

         Unimplemented: Read as '0'

         ADON: A/D On bit

         1 = A/D converter module is operating
         0 = A/D converter module is shut-off and consumes no operating current

            Note 1: A/D channels 5, 6 and 7 are implemented on the PIC16F74/77 only.

         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 reset

2002 Microchip Technology Inc.                                                 DS30325B-page 83
PIC16F7X

REGISTER 11-2: ADCON1 REGISTER (ADDRESS 9Fh)

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

                  --     --                 --   --                 --  PCFG2 PCFG1 PCFG0

                  bit 7                                                                       bit 0

bit 7-3           Unimplemented: Read as '0'
bit 2-0           PCFG2:PCFG0: A/D Port Configuration Control bits

                    PCFG2:PCFG0     RA0     RA1  RA2  RA5     RA3       RE0(1) RE1(1) RE2(1)  VREF

                            000       A       A    A    A       A       A  A         A        VDD
                            001       A       A    A    A     VREF                            RA3
                            010       A       A    A    A               A  A         A        VDD
                            011       A       A    A    A       A                             RA3
                            100       A       A   D    D      VREF      D  D         D        VDD
                            101       A       A   D    D                                      RA3
                            11x      D       D    D    D        A       D  D         D        VDD
                  A = Analog input                            VREF
                  D = Digital I/O                                       D  D         D
                                                                D
                                                                        D  D         D

                                                                        D  D         D

                  Note 1: RE0, RE1 and RE2 are implemented on the PIC16F74/77 only.

                  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 reset

DS30325B-page 84                                                            2002 Microchip Technology Inc.
                                                                       PIC16F7X

The following steps should be followed for doing an            4. Wait for at least an appropriate acquisition
A/D conversion:                                                      period.

1. Configure the A/D module:                                   5. Start conversion:
       Configure analog pins, voltage reference,                     Set GO/DONE bit (ADCON0)
         and digital I/O (ADCON1)
       Select A/D conversion clock (ADCON0)                   6. Wait for the A/D conversion to complete, by
       Turn on A/D module (ADCON0)                                  either:
                                                                      Polling for the GO/DONE bit to be cleared
2. Configure the A/D interrupt (if desired):                            (interrupts disabled)
       Clear ADIF bit                                               OR
       Set ADIE bit                                                 Waiting for the A/D interrupt
       Set PEIE bit
       Set GIE bit                                            7. Read A/D result register (ADRES), and clear bit
                                                                     ADIF if required.
3. Select an A/D input channel (ADCON0).
                                                               8. For next conversion, go to step 3 or step 4, as
FIGURE 11-1:  A/D BLOCK DIAGRAM                                      required.

                                                                           CHS2:CHS0

                                                                  111
                                                                                               RE2/AN7(1)

                                                                  110  RE1/AN6(1)

                                                                  101  RE0/AN5(1)

                                             VIN                  100
                                       (Input Voltage)                                          RA5/AN4

                                                                  011
                                                                                                RA3/AN3/VREF

    A/D                                                           010
Converter                                                                                      RA2/AN2

                                                                  001
                                                                                               RA1/AN1

                                                        VDD       000
                                                                                               RA0/AN0
                                                          000 or

                                 VREF                     010 or

                                                          100 or

                                                          11x

                                 (Reference               001 or
                                  Voltage)                011 or

                                                          101

                                             PCFG2:PCFG0

Note 1: Not available on PIC16F73/76.

2002 Microchip Technology Inc.                                        DS30325B-page 85
PIC16F7X                                                             The maximum recommended impedance for ana-
                                                                     log sources is 10 k. After the analog input channel is
11.1 A/D Acquisition Requirements                                    selected (changed), the acquisition period must pass
                                                                     before the conversion can be started.
For the A/D converter to meet its specified accuracy,
the charge holding capacitor (CHOLD) must be allowed                 To calculate the minimum acquisition time, TACQ, see
to fully charge to the input channel voltage level. The              the PICmicroTM Mid-Range MCU Family Reference
analog input model is shown in Figure 11-2. The source               Manual (DS33023). In general, however, given a max-
impedance (RS) and the internal sampling switch (RSS)                imum source impedance of 10 k and at a temperature
impedance directly affect the time required to charge                of 100C, TACQ will be no more than 16 sec.
the capacitor CHOLD. The sampling switch (RSS)
impedance varies over the device voltage (VDD), see
Figure 11-2. The source impedance affects the offset
voltage at the analog input (due to pin leakage current).

FIGURE 11-2:         ANALOG INPUT MODEL

                                       VDD                                      Sampling
                                                                                Switch
                      RS ANx                VT = 0.6V
                                                                                SS RSS
                                                                       RIC  1k

                  VA             CPIN                                I leakage              CHOLD
                                                                      500 nA               = DAC Capacitance
                                 5 pF       VT = 0.6V                                       = 51.2 pF

                                                                                          VSS

                  Legend CPIN    = input capacitance                                  6V
                             VT  = threshold voltage                                  5V
                                                                                VDD 4V
                      I leakage = leakage current at the pin due to                   3V
                                      various junctions                               2V

                      RIC        = interconnect resistance                                         5 6 7 8 9 10 11
                      SS         = sampling switch                                                 Sampling Switch
                      CHOLD      = sample/hold capacitance (from DAC)
                                                                                                          (k)

TABLE 11-1: TAD vs. MAXIMUM DEVICE OPERATING FREQUENCIES (STANDARD DEVICES (C))

                      AD Clock Source (TAD)                                               Maximum Device Frequency

Operation                                             ADCS1:ADCS0                         Max.

              2TOSC                                        00                             1.25 MHz

              8TOSC                                        01                             5 MHz

32TOSC                                                    10                             20 MHz
RC(1, 2, 3)
                                                           11                             (Note 1)

Note 1: The RC source has a typical TAD time of 4 s but can vary between 2-6 s.
        2: When the device frequencies are greater than 1 MHz, the RC A/D conversion clock source is only
             recommended for SLEEP operation.
        3: For extended voltage devices (LC), please refer to the Electrical Specifications section.

DS30325B-page 86                                                                           2002 Microchip Technology Inc.
                                                                     PIC16F7X

11.2 Selecting the A/D Conversion                             Clearing the GO/DONE bit during a conversion will
         Clock                                                abort the current conversion. The ADRES register will
                                                              NOT be changed, and the ADIF flag will not be set.
The A/D conversion time per bit is defined as TAD. The
A/D conversion requires 9.0 TAD per 8-bit conversion.         After the GO/DONE bit is cleared at either the end of a
The source of the A/D conversion clock is software            conversion, or by firmware, another conversion can be
selectable. The four possible options for TAD are:            initiated by setting the GO/DONE bit. Users must still
                                                              take into account the appropriate acquisition time for
       2 TOSC (FOSC/2)                                       the application.
       8 TOSC (FOSC/8)
       32 TOSC (FOSC/32)                                     11.5 A/D Operation During SLEEP
       Internal RC oscillator (2-6 s)
                                                              The A/D module can operate during SLEEP mode. This
For correct A/D conversions, the A/D conversion clock         requires that the A/D clock source be set to RC
(TAD) must be selected to ensure a minimum TAD time           (ADCS1:ADCS0 = `11'). When the RC clock source is
as small as possible, but no less than 1.6 s.                selected, the A/D module waits one instruction cycle
                                                              before starting the conversion. This allows the SLEEP
11.3 Configuring Analog Port Pins                             instruction to be executed, which eliminates all digital
                                                              switching noise from the conversion. When the conver-
The ADCON1, TRISA and TRISE registers control the             sion is completed, the GO/DONE bit will be cleared,
operation of the A/D port pins. The port pins that are        and the result loaded into the ADRES register. If the
desired as analog inputs must have their correspond-          A/D interrupt is enabled, the device will wake-up from
ing TRIS bits set (input). If the TRIS bit is cleared (out-   SLEEP. If the A/D interrupt is not enabled, the A/D mod-
put), the digital output level (VOH or VOL) will be           ule will then be turned off, although the ADON bit will
converted.                                                    remain set.

The A/D operation is independent of the state of the          When the A/D clock source is another clock option (not
CHS2:CHS0 bits and the TRIS bits.                             RC), a SLEEP instruction will cause the present conver-
                                                              sion to be aborted and the A/D module to be turned off,
    Note 1: When reading the port register, all pins          though the ADON bit will remain set.
                configured as analog input channels will
                read as cleared (a low level). Pins config-   Turning off the A/D places the A/D module in its lowest
                ured as digital inputs will convert an ana-   current consumption state.
                log input. Analog levels on a digitally
                configured input will not affect the conver-  Note:  For the A/D module to operate in SLEEP,
                sion accuracy.                                       the A/D clock source must be set to RC
                                                                     (ADCS1:ADCS0 = 11). To perform an A/D
            2: Analog levels on any pin that is defined as           conversion in SLEEP, ensure the SLEEP
                a digital input, but not as an analog input,         instruction immediately follows the instruc-
                may cause the digital input buffer to con-           tion that sets the GO/DONE bit.
                sume current that is out of the device's
                specification.                                11.6 Effects of a RESET

11.4 A/D Conversions                                          A device RESET forces all registers to their RESET
                                                              state. The A/D module is disabled and any conversion
   Note: The GO/DONE bit should NOT be set in                 in progress is aborted. All A/D input pins are configured
               the same instruction that turns on the A/D.    as analog inputs.

Setting the GO/DONE bit begins an A/D conversion.             The ADRES register will contain unknown data after a
When the conversion completes, the 8-bit result is            Power-on Reset.
placed in the ADRES register, the GO/DONE bit is
cleared, and the ADIF flag (PIR<6>) is set.

If both the A/D interrupt bit ADIE (PIE1<6>) and the
peripheral interrupt enable bit PEIE (INTCON<6>) are
set, the device will wake from SLEEP whenever ADIF
is set by hardware. In addition, an interrupt will also
occur if the global interrupt bit GIE (INTCON<7>) is set.

2002 Microchip Technology Inc.                                      DS30325B-page 87
PIC16F7X

11.7 Use of the CCP Trigger                                   with minimal software overhead (moving the ADRES to
                                                              the desired location). The appropriate analog input
An A/D conversion can be started by the "special event        channel must be selected and an appropriate acquisi-
trigger" of the CCP2 module. This requires that the           tion time should pass before the "special event trigger"
CCP2M3:CCP2M0 bits (CCP2CON<3:0>) be pro-                     sets the GO/DONE bit (starts a conversion).
grammed as 1011 and that the A/D module is enabled
(ADON bit is set). When the trigger occurs, the               If the A/D module is not enabled (ADON is cleared),
GO/DONE bit will be set, starting the A/D conversion,         then the "special event trigger" will be ignored by the
and the Timer1 counter will be reset to zero. Timer1 is       A/D module, but will still reset the Timer1 counter.
reset to automatically repeat the A/D acquisition period

TABLE 11-2: SUMMARY OF A/D REGISTERS

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

0Bh,8Bh, INTCON   GIE PEIE TMR0IE           INTE          RBIE TMR0IF INTF RBIF 0000 000x 0000 000u
10Bh, 18Bh
                                            TXIF
0Ch  PIR1         PSPIF(1) ADIF RCIF          --          SSPIF  CCP1IF  TMR2IF TMR1IF 0000 0000 0000 0000
                                                            --       --      -- CCP2IF ---- ---0 ---- ---0
0Dh  PIR2         --   --              --   TXIE
                                              --          SSPIE  CCP1IE  TMR2IE TMR1IE 0000 0000 0000 0000
8Ch  PIE1         PSPIE(1) ADIE RCIE                        --       --      -- CCP2IE ---- ---0 ---- ---0
                                                                                                   xxxx xxxx uuuu uuuu
8Dh  PIE2         --   --              --

1Eh  ADRES        A/D Result Register

1Fh  ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE -- ADON 0000 00-0 0000 00-0

9Fh  ADCON1 --         --              --   --            -- PCFG2 PCFG1 PCFG0 ---- -000 ---- -000

05h  PORTA        --   --              RA5  RA4           RA3    RA2     RA1 RA0 --0x 0000 --0u 0000

85h  TRISA        --   -- PORTA Data Direction Register                                          --11 1111 --11 1111

09h  PORTE(2) --       --              --   --            --     RE2     RE1 RE0 ---- -xxx ---- -uuu

89h  TRISE(2)     IBF  OBF IBOV PSPMODE -- PORTE Data Direction Bits 0000 -111 0000 -111

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used for A/D conversion.

Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F73/76; always maintain these bits clear.
         2: These registers are reserved on the PIC16F73/76.

DS30325B-page 88                                                                 2002 Microchip Technology Inc.
12.0 SPECIAL FEATURES OF THE                                                PIC16F7X
         CPU
                                                             SLEEP mode is designed to offer a very low current
These devices have a host of features intended to max-       power-down mode. The user can wake-up from SLEEP
imize system reliability, minimize cost through elimina-     through external RESET, Watchdog Timer Wake-up, or
tion of external components, provide power saving            through an interrupt.
operating modes and offer code protection. These are:
                                                             Several oscillator options are also made available to
Oscillator Selection                                       allow the part to fit the application. The RC oscillator
RESET                                                      option saves system cost while the LP crystal option
                                                             saves power. Configuration bits are used to select the
   - Power-on Reset (POR)                                    desired oscillator mode.
   - Power-up Timer (PWRT)
   - Oscillator Start-up Timer (OST)                         Additional information on special features is available
   - Brown-out Reset (BOR)                                   in the PICmicroTM Mid-Range Reference Manual
Interrupts                                                 (DS33023).
Watchdog Timer (WDT)
SLEEP                                                      12.1 Configuration Bits
Code Protection
ID Locations                                               The configuration bits can be programmed (read as '0'),
In-Circuit Serial Programming                              or left unprogrammed (read as '1'), to select various
                                                             device configurations. These bits are mapped in pro-
These devices have a Watchdog Timer, which can be            gram memory location 2007h.
enabled or disabled, using a configuration bit. It runs off
its own RC oscillator for added reliability.                 The user will note that address 2007h is beyond the
                                                             user program memory space, which can be accessed
There are two timers that offer necessary delays on          only during programming.
power-up. One is the Oscillator Start-up Timer (OST),
intended to keep the chip in RESET until the crystal
oscillator is stable. The other is the Power-up Timer
(PWRT), which provides a fixed delay of 72 ms (nomi-
nal) on power-up only. It is designed to keep the part in
RESET while the power supply stabilizes, and is
enabled or disabled, using a configuration bit. With
these two timers on-chip, most applications need no
external RESET circuitry.

2002 Microchip Technology Inc.                              DS30325B-page 89
PIC16F7X

REGISTER 12-1: CONFIGURATION WORD (ADDRESS 2007h)(1)

U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/P-1 U-0 R/P-1 R/P-1 R/P-1 R/P-1 R/P-1

-- -- -- -- -- -- -- BOREN -- CP0 PWRTEN WDTEN FOSC1 FOSC0

bit13                                                                                          bit0

bit 13-7  Unimplemented: Read as `1'
bit 6     BOREN: Brown-out Reset Enable bit
          1 = BOR enabled
bit 5     0 = BOR disabled
bit 4     Unimplemented: Read as `1'
          CP0: FLASH Program Memory Code Protection bit
bit 3     1 = Code protection off
          0 = All memory locations code protected
bit 2     PWRTEN: Power-up Timer Enable bit
          1 = PWRT disabled
bit 1-0   0 = PWRT enabled
          WDTEN: Watchdog Timer Enable bit
          1 = WDT enabled
          0 = WDT disabled
          FOSC1:FOSC0: Oscillator Selection bits
          11 = RC oscillator
          10 = HS oscillator
          01 = XT oscillator
          00 = LP oscillator

                  Note 1: The erased (unprogrammed) value of the configuration word is 3FFFh.

Legend:

R = Readable bit  P = Programmable bit   U = Unimplemented bit, read as `0'
                                         u = Unchanged from programmed state
- n = Value when device is unprogrammed

DS30325B-page 90                                          2002 Microchip Technology Inc.
                                                                                   PIC16F7X

12.2 Oscillator Configurations                             FIGURE 12-2:            EXTERNAL CLOCK INPUT
                                                                                   OPERATION (HS OSC
12.2.1 OSCILLATOR TYPES                                                            CONFIGURATION)

The PIC16F7X can be operated in four different oscil-      Clock from              OSC1
lator modes. The user can program two configuration        Ext. System                      PIC16F7X
bits (FOSC1 and FOSC0) to select one of these four                                          (HS Mode)
modes:                                                                       Open
                                                                                   OSC2
LP  Low Power Crystal
XT  Crystal/Resonator
HS  High Speed Crystal/Resonator
RC  Resistor/Capacitor

12.2.2 CRYSTAL OSCILLATOR/CERAMIC                          TABLE 12-1: CERAMIC RESONATORS
              RESONATORS                                                        (FOR DESIGN GUIDANCE
                                                                                ONLY)
In XT, LP or HS modes, a crystal or ceramic resonator is
connected to the OSC1/CLKIN and OSC2/CLKOUT                      Typical Capacitor Values Used:
pins to establish oscillation (Figure 12-1). The
PIC16F7X oscillator design requires the use of a parallel  Mode      Freq          OSC1                OSC2
cut crystal. Use of a series cut crystal may give a fre-
quency out of the crystal manufacturers specifications.    XT        455 kHz       56 pF               56 pF
When in HS mode, the device can accept an external                                 47 pF               47 pF
clock source to drive the OSC1/CLKIN pin (Figure 12-2).              2.0 MHz       33 pF               33 pF
See Figure 15-1 or Figure 15-2 (depending on the part
number and VDD range) for valid external clock                       4.0 MHz
frequencies.
                                                           HS        8.0 MHz       27 pF               27 pF
                                                                                   22 pF               22 pF
                                                                     16.0 MHz

FIGURE 12-1:       CRYSTAL/CERAMIC                         Capacitor values are for design guidance only.
                   RESONATOR OPERATION
                   (HS, XT OR LP                           These capacitors were tested with the resonators
                   OSC CONFIGURATION)                      listed below for basic start-up and operation. These
                                                           values were not optimized.

      C1(1)        OSC1                                    Different capacitor values may be required to produce
                                                           acceptable oscillator operation. The user should test
                                           To              the performance of the oscillator over the expected
                                            Internal       VDD and temperature range for the application.
                                            Logic
             XTAL          RF(3)                           See the notes at the bottom of page 92 for additional
                                  SLEEP                    information.
                     OSC2
             RS(2)                PIC16F7X                               Resonators Used:

      C2(1)

Note 1: See Table 12-1 and Table 12-2 for recom-           455 kHz                 Panasonic EFO-A455K04B
             mended values of C1 and C2.                   2.0 MHz                  Murata Erie CSA2.00MG
                                                           4.0 MHz                  Murata Erie CSA4.00MG
       2: A series resistor (RS) may be required for AT    8.0 MHz                  Murata Erie CSA8.00MT
             strip cut crystals.                           16.0 MHz                Murata Erie CSA16.00MX

       3: RF varies with the crystal chosen.

2002 Microchip Technology Inc.                                                           DS30325B-page 91
PIC16F7X

TABLE 12-2:       CAPACITOR SELECTION FOR                 12.2.3 RC OSCILLATOR
                  CRYSTAL OSCILLATOR
                  (FOR DESIGN GUIDANCE                    For timing insensitive applications, the "RC" device
                  ONLY)                                   option offers additional cost savings. The RC oscillator
                                                          frequency is a function of the supply voltage, the resis-
Osc Type     Crystal  Typical Capacitor Values            tor (REXT) and capacitor (CEXT) values, and the operat-
              Freq                Tested:                 ing temperature. In addition to this, the oscillator
                                                          frequency will vary from unit to unit due to normal pro-
                      C1                 C2               cess parameter variation. Furthermore, the difference
                                                          in lead frame capacitance between package types will
LP           32 kHz   33 pF            33 pF              also affect the oscillation frequency, especially for low
                                                          CEXT values. The user also needs to take into account
          200 kHz     15 pF            15 pF              variation due to tolerance of external R and C compo-
                                                          nents used. Figure 12-3 shows how the R/C combina-
XT        200 kHz     56 pF            56 pF              tion is connected to the PIC16F7X.

             1 MHz    15 pF            15 pF

             4 MHz    15 pF            15 pF

HS           4 MHz    15 pF            15 pF              FIGURE 12-3:         RC OSCILLATOR MODE

             8 MHz    15 pF            15 pF

             20 MHz   15 pF            15 pF                    VDD

Capacitor values are for design guidance only.            REXT

These capacitors were tested with the crystals listed                          OSC1  Internal
below for basic start-up and operation. These values                                  Clock
were not optimized.
                                                          CEXT                                            PIC16F7X
Different capacitor values may be required to produce     VSS                     OSC2/CLKOUT
acceptable oscillator operation. The user should test                FOSC/4
the performance of the oscillator over the expected
VDD and temperature range for the application.            Recommended values:  3 k  REXT  100 k
                                                                               CEXT > 20pF
See the notes following this table for additional
information.

                  Crystals Used:

32 kHz            Epson C-001R32.768K-A

200 kHz           STD XTL 200.000KHz

1 MHz                 ECS ECS-10-13-1

4 MHz                 ECS ECS-40-20-1

8 MHz             EPSON CA-301 8.000M-C

20 MHz            EPSON CA-301 20.000M-C

Note 1: Higher capacitance increases the stability
            of oscillator, but also increases the start-
            up time.

        2: Since each resonator/crystal has its own
            characteristics, the user should consult
            the resonator/crystal manufacturer for
            appropriate values of external compo-
            nents.

        3: Rs may be required in HS mode, as well
            as XT mode, to avoid overdriving crystals
            with low drive level specification.

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

DS30325B-page 92                                                                2002 Microchip Technology Inc.
12.3 RESET                                                           PIC16F7X

The PIC16F7X differentiates between various kinds of  Some registers are not affected in any RESET condi-
RESET:                                                tion. Their status is unknown on POR and unchanged
                                                      in any other RESET. Most other registers are reset to a
Power-on Reset (POR)                                "RESET state" on Power-on Reset (POR), on the
MCLR Reset during normal operation                  MCLR and WDT Reset, on MCLR Reset during
MCLR Reset during SLEEP                             SLEEP, and Brown-out Reset (BOR). They are not
WDT Reset (during normal operation)                 affected by a WDT Wake-up, which is viewed as the
WDT Wake-up (during SLEEP)                          resumption of normal operation. The TO and PD bits
Brown-out Reset (BOR)                               are set or cleared differently in different RESET situa-
                                                      tions, as indicated in Table 12-4. These bits are used in
                                                      software to determine the nature of the RESET. See
                                                      Table 12-6 for a full description of RESET states of all
                                                      registers.

                                                      A simplified block diagram of the on-chip RESET circuit
                                                      is shown in Figure 12-4.

FIGURE 12-4:       SIMPLIFIED BLOCK DIAGRAM OF ON-CHIP RESET CIRCUIT

                                 External
                                 RESET

MCLR

                WDT                SLEEP
              Module
                           WDT
              VDD Rise
               Detect      Time-out
                           Reset

VDD                        Power-on Reset

              Brown-out

              Reset                                                             S

                           BODEN

      OST/PWRT
                      OST

                         10-bit Ripple Counter                                  R        Chip_Reset
                                                                                   Q

OSC1

              (1)  PWRT
                         10-bit Ripple Counter
      On-chip
      RC OSC

                                                                                   Enable PWRT
                                                                                   Enable OST

Note 1: This is a separate oscillator from the RC oscillator of the CLKIN pin.

2002 Microchip Technology Inc.                                                    DS30325B-page 93
PIC16F7X

12.4 MCLR                                                  12.6 Power-up Timer (PWRT)

PIC16F7X devices have a noise filter in the MCLR           The Power-up Timer provides a fixed 72 ms nominal
Reset path. The filter will detect and ignore small        time-out on power-up only from the POR. The Power-
pulses.                                                    up Timer operates on an internal RC oscillator. The
                                                           chip is kept in RESET as long as the PWRT is active.
It should be noted that a WDT Reset does not drive         The PWRT's time delay allows VDD to rise to an accept-
MCLR pin low.                                              able level. A configuration bit is provided to enable/
                                                           disable the PWRT.
The behavior of the ESD protection on the MCLR pin
has been altered from previous devices of this family.     The power-up time delay will vary from chip to chip, due
Voltages applied to the pin that exceed its specification  to VDD, temperature and process variation. See DC
can result in both MCLR Resets and excessive current       parameters for details (TPWRT, parameter #33).
beyond the device specification during the ESD event.
For this reason, Microchip recommends that the MCLR        12.7 Oscillator Start-up Timer (OST)
pin no longer be tied directly to VDD. The use of an RC
network, as shown in Figure 12-5, is suggested.            The Oscillator Start-up Timer (OST) provides 1024 oscil-
                                                           lator cycles (from OSC1 input) delay after the PWRT
FIGURE 12-5:      RECOMMENDED MCLR                         delay is over (if enabled). This helps to ensure that the
                  CIRCUIT                                  crystal oscillator or resonator has started and stabilized.
        VDD
                                         PIC16F7X          The OST time-out is invoked only for XT, LP and HS
                                                           modes and only on Power-on Reset, or wake-up from
R1                         MCLR                            SLEEP.
1 k (or greater)
                                                           12.8 Brown-out Reset (BOR)
C1
0.1 F                                                    The configuration bit, BODEN, can enable or disable
(optional, not critical)                                  the Brown-out Reset circuit. If VDD falls below VBOR
                                                           (parameter D005, about 4V) for longer than TBOR
12.5 Power-on Reset (POR)                                  (parameter #35, about 100 S), the brown-out situation
                                                           will reset the device. If VDD falls below VBOR for less
A Power-on Reset pulse is generated on-chip when           than TBOR, a RESET may not occur.
VDD rise is detected (in the range of 1.2V - 1.7V). To
take advantage of the POR, tie the MCLR pin to VDD as      Once the brown-out occurs, the device will remain in
described in Section 12.4. A maximum rise time for         Brown-out Reset until VDD rises above VBOR. The
VDD is specified. See the Electrical Specifications for    Power-up Timer then keeps the device in RESET for
details.                                                   TPWRT (parameter #33, about 72 mS). If VDD should fall
                                                           below VBOR during TPWRT, the Brown-out Reset pro-
When the device starts normal operation (exits the         cess will restart when VDD rises above VBOR, with the
RESET condition), device operating parameters (volt-       Power-up Timer Reset. The Power-up Timer is always
age, frequency, temperature,...) must be met to ensure     enabled when the Brown-out Reset circuit is enabled,
operation. If these conditions are not met, the device     regardless of the state of the PWRT configuration bit.
must be held in RESET until the operating conditions
are met. For additional information, refer to Application  12.9 Time-out Sequence
Note, AN607, "Power-up Trouble Shooting"
(DS00607).                                                 On power-up, the time-out sequence is as follows: the
                                                           PWRT delay starts (if enabled) when a POR Reset
                                                           occurs. Then, OST starts counting 1024 oscillator
                                                           cycles when PWRT ends (LP, XT, HS). When the OST
                                                           ends, the device comes out of RESET.

                                                           If MCLR is kept low long enough, all delays will expire.
                                                           Bringing MCLR high will begin execution immediately.
                                                           This is useful for testing purposes or to synchronize
                                                           more than one PIC16F7X device operating in parallel.

                                                           Table 12-5 shows the RESET conditions for the
                                                           STATUS, PCON and PC registers, while Table 12-6
                                                           shows the RESET conditions for all the registers.

DS30325B-page 94                                            2002 Microchip Technology Inc.
                                                                                   PIC16F7X

12.10 Power Control/Status Register                     if bit BOR cleared, indicating a Brown-out Reset
         (PCON)                                         occurred. When the Brown-out Reset is disabled, the
                                                        state of the BOR bit is unpredictable.
The Power Control/Status Register, PCON, has two
bits to indicate the type of RESET that last occurred.  Bit1 is POR (Power-on Reset Status bit). It is cleared on
                                                        a Power-on Reset and unaffected otherwise. The user
Bit0 is Brown-out Reset Status bit, BOR. Bit BOR is     must set this bit following a Power-on Reset.
unknown on a Power-on Reset. It must then be set by
the user and checked on subsequent RESETS to see

TABLE 12-3: TIME-OUT IN VARIOUS SITUATIONS

Oscillator Configuration             Power-up                           Brown-out           Wake-up from
                                                                                                 SLEEP
         XT, HS, LP                  PWRTE = 0          PWRTE = 1  72 ms + 1024 TOSC
               RC                72 ms + 1024 TOSC      1024 TOSC          72 ms              1024 TOSC
                                                                                                    --
                                         72 ms                --

TABLE 12-4: STATUS BITS AND THEIR SIGNIFICANCE

POR              BOR             TO                 PD                   Significance

(PCON<1>) (PCON<0>) (STATUS<4>) (STATUS<3>)

0                x               1                  1   Power-on Reset

0                x               0                  x   Illegal, TO is set on POR

0                x               x                  0   Illegal, PD is set on POR

1                0               1                  1   Brown-out Reset

1                1               0                  1   WDT Reset

1                1               0                  0   WDT Wake-up

1                1               u                  u   MCLR Reset during normal operation

1                1               1                  0   MCLR Reset during SLEEP or interrupt wake-up from

                                                        SLEEP

TABLE 12-5: RESET CONDITION FOR SPECIAL REGISTERS

                 Condition                              Program    STATUS                    PCON
                                                        Counter    Register                 Register

Power-on Reset                                          000h       0001 1xxx           ---- --0x

MCLR Reset during normal operation                      000h       000u uuuu           ---- --uu

MCLR Reset during SLEEP                                 000h       0001 0uuu           ---- --uu

WDT Reset                                               000h       0000 1uuu           ---- --uu

WDT Wake-up                                             PC + 1     uuu0 0uuu           ---- --uu

Brown-out Reset                                         000h       0001 1uuu           ---- --u0

Interrupt wake-up from SLEEP                            PC + 1(1)  uuu1 0uuu           ---- --uu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0'
Note 1: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector

             (0004h).

2002 Microchip Technology Inc.                                                             DS30325B-page 95
PIC16F7X

TABLE 12-6: INITIALIZATION CONDITIONS FOR ALL REGISTERS

   Register       Devices      Power-on Reset,  MCLR Reset,   Wake-up via WDT or
                               Brown-out Reset   WDT Reset            Interrupt

W                 73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

INDF              73 74 76 77  N/A              N/A           N/A

TMR0              73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

PCL               73 74 76 77  0000h            0000h         PC + 1(2)

STATUS            73 74 76 77  0001 1xxx        000q quuu(3)  uuuq quuu(3)

FSR               73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTA             73 74 76 77  --0x 0000        --0u 0000     --uu uuuu

PORTB             73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTC             73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTD             73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTE             73 74 76 77  ---- -xxx        ---- -uuu     ---- -uuu

PCLATH            73 74 76 77  ---0 0000        ---0 0000     ---u uuuu

INTCON            73 74 76 77  0000 000x        0000 000u     uuuu uuuu(1)

PIR1              73 74 76 77  r000 0000        r000 0000     ruuu uuuu(1)

                  73 74 76 77  0000 0000        0000 0000     uuuu uuuu(1)

PIR2              73 74 76 77  ---- ---0        ---- ---0     ---- ---u(1)

TMR1L             73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

TMR1H             73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

T1CON             73 74 76 77  --00 0000        --uu uuuu     --uu uuuu

TMR2              73 74 76 77  0000 0000        0000 0000     uuuu uuuu

T2CON             73 74 76 77  -000 0000        -000 0000     -uuu uuuu

SSPBUF            73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

SSPCON            73 74 76 77  0000 0000        0000 0000     uuuu uuuu

CCPR1L            73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

CCPR1H            73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

CCP1CON           73 74 76 77  --00 0000        --00 0000     --uu uuuu

RCSTA             73 74 76 77  0000 -00x        0000 -00x     uuuu -uuu

TXREG             73 74 76 77  0000 0000        0000 0000     uuuu uuuu

RCREG             73 74 76 77  0000 0000        0000 0000     uuuu uuuu

CCPR2L            73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

CCPR2H            73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

CCP2CON           73 74 76 77  0000 0000        0000 0000     uuuu uuuu

ADRES             73 74 76 77  xxxx xxxx        uuuu uuuu     uuuu uuuu

ADCON0            73 74 76 77  0000 00-0        0000 00-0     uuuu uu-u

OPTION_REG 73 74 76 77         1111 1111        1111 1111     uuuu uuuu

TRISA             73 74 76 77  --11 1111        --11 1111     --uu uuuu

TRISB             73 74 76 77  1111 1111        1111 1111     uuuu uuuu

TRISC             73 74 76 77  1111 1111        1111 1111     uuuu uuuu

TRISD             73 74 76 77  1111 1111        1111 1111     uuuu uuuu

TRISE             73 74 76 77  0000 -111        0000 -111     uuuu -uuu

PIE1              73 74 76 77  r000 0000        r000 0000     ruuu uuuu

                  73 74 76 77  0000 0000        0000 0000     uuuu uuuu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition,
            r = reserved, maintain clear

Note 1: One or more bits in INTCON, PIR1 and/or PIR2 will be affected (to cause wake-up).
        2: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector (0004h).
        3: See Table 12-5 for RESET value for specific condition.

DS30325B-page 96                                            2002 Microchip Technology Inc.
                                                                            PIC16F7X

TABLE 12-6: INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)

Register                       Devices  Power-on Reset,        MCLR Reset,  Wake-up via WDT or
                                        Brown-out Reset         WDT Reset           Interrupt

PIE2          73 74 76 77               ---- ---0              ---- ---0    ---- ---u

PCON          73 74 76 77               ---- --qq              ---- --uu    ---- --uu

PR2           73 74 76 77               1111 1111              1111 1111    1111 1111

SSPSTAT       73 74 76 77               --00 0000              --00 0000    --uu uuuu

SSPADD        73 74 76 77               0000 0000              0000 0000    uuuu uuuu

TXSTA         73 74 76 77               0000 -010              0000 -010    uuuu -uuu

SPBRG         73 74 76 77               0000 0000              0000 0000    uuuu uuuu

ADCON1        73 74 76 77               ---- -000              ---- -000    ---- -uuu

PMDATA        73 74 76 77               0--- 0000              0--- 0000    u--- uuuu

PMADR         73 74 76 77               xxxx xxxx              uuuu uuuu    uuuu uuuu

PMDATH        73 74 76 77               xxxx xxxx              uuuu uuuu    uuuu uuuu

PMADRH        73 74 76 77               xxxx xxxx              uuuu uuuu    uuuu uuuu

PMCON1        73 74 76 77               1--- ---0              1--- ---0    1--- ---u

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition,
            r = reserved, maintain clear

Note 1: One or more bits in INTCON, PIR1 and/or PIR2 will be affected (to cause wake-up).
        2: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector (0004h).
        3: See Table 12-5 for RESET value for specific condition.

FIGURE 12-6:                   TIME-OUT SEQUENCE ON POWER-UP (MCLR TIED TO VDD THROUGH
                               RC NETWORK)

                          VDD           TPWRT
                       MCLR
         INTERNAL POR                                    TOST

       PWRT TIME-OUT
          OST TIME-OUT

      INTERNAL RESET

2002 Microchip Technology Inc.                                             DS30325B-page 97
PIC16F7X

FIGURE 12-7:             TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 1

                    VDD                 TPWRT
                 MCLR
   INTERNAL POR                                      TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

FIGURE 12-8:             TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 2

                    VDD                 TPWRT
                 MCLR
   INTERNAL POR                                      TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

FIGURE 12-9:             SLOW RISE TIME (MCLR TIED TO VDD THROUGH RC NETWORK)

                                        5V

                  VDD    0V         1V

                  MCLR

INTERNAL POR

                             TPWRT

PWRT TIME-OUT                                  TOST
  OST TIME-OUT

INTERNAL RESET

DS30325B-page 98                                            2002 Microchip Technology Inc.
                                                                           PIC16F7X

12.11 Interrupts                                                   The RB0/INT pin interrupt, the RB port change interrupt
                                                                   and the TMR0 overflow interrupt flags are contained in
The PIC16F7X family has up to 12 sources of interrupt.             the INTCON register.
The interrupt control register (INTCON) records individ-
ual interrupt requests in flag bits. It also has individual        The peripheral interrupt flags are contained in the Spe-
and global interrupt enable bits.                                  cial Function Registers, PIR1 and PIR2. The corre-
                                                                   sponding interrupt enable bits are contained in Special
Note:  Individual interrupt flag bits are set, regard-             Function Registers, PIE1 and PIE2, and the peripheral
       less of the status of their corresponding                   interrupt enable bit is contained in Special Function
       mask bit or the GIE bit.                                    Register, INTCON.

A global interrupt enable bit, GIE (INTCON<7>)                     When an interrupt is responded to, the GIE bit is
enables (if set) all unmasked interrupts, or disables (if          cleared to disable any further interrupt, the return
cleared) all interrupts. When bit GIE is enabled and an            address is pushed onto the stack and the PC is loaded
interrupt's flag bit and mask bit are set, the interrupt will      with 0004h. Once in the Interrupt Service Routine, the
vector immediately. Individual interrupts can be dis-              source(s) of the interrupt can be determined by polling
abled through their corresponding enable bits in vari-             the interrupt flag bits. The interrupt flag bit(s) must be
ous registers. Individual interrupt bits are set,                  cleared in software before re-enabling interrupts to
regardless of the status of the GIE bit. The GIE bit is            avoid recursive interrupts.
cleared on RESET.
                                                                   For external interrupt events, such as the INT pin or
The "return from interrupt" instruction, RETFIE, exits             PORTB change interrupt, the interrupt latency will be
the interrupt routine, as well as sets the GIE bit, which          three or four instruction cycles. The exact latency
re-enables interrupts.                                             depends when the interrupt event occurs, relative to
                                                                   the current Q cycle. The latency is the same for one or
                                                                   two-cycle instructions. Individual interrupt flag bits are
                                                                   set, regardless of the status of their corresponding
                                                                   mask bit, PEIE bit, or the GIE bit.

FIGURE 12-10: INTERRUPT LOGIC

PSPIF(1)                                                           TMR0IF  Wake-up (If in SLEEP mode)
PSPIE(1)                                                           TMR0IE              Interrupt to CPU

             ADIF                                                    INTF
             ADIE                                                    INTE
                                                                     RBIF
                           RCIF                                      RBIE
                           RCIE
                                                                     PEIE
                                        TXIF
                                        TXIE                         GIE
                                        SSPIF
                                        SSPIE

                                        CCP1IF
                                        CCP1IE
                           TMR2IF
                           TMR2IE
              TMR1IF
              TMR1IE

CCP2IF
CCP2IE

Note 1: PSP interrupt is implemented only on PIC16F74/77 devices.

2002 Microchip Technology Inc.                                            DS30325B-page 99
PIC16F7X

12.11.1 INT INTERRUPT                                      12.12 Context Saving During Interrupts

External interrupt on the RB0/INT pin is edge triggered,   During an interrupt, only the return PC value is saved
either rising, if bit INTEDG (OPTION_REG<6>) is set,       on the stack. Typically, users may wish to save key reg-
or falling, if the INTEDG bit is clear. When a valid edge  isters during an interrupt (i.e., W, PCLATH and STA-
appears on the RB0/INT pin, flag bit INTF                  TUS registers). This will have to be implemented in
(INTCON<1>) is set. This interrupt can be disabled by      software, as shown in Example 12-1.
clearing enable bit INTE (INTCON<4>). Flag bit INTF
must be cleared in software in the Interrupt Service       For the PIC16F73/74 devices, the register W_TEMP
Routine before re-enabling this interrupt. The INT inter-  must be defined in both banks 0 and 1 and must be
rupt can wake-up the processor from SLEEP, if bit INTE     defined at the same offset from the bank base address
was set prior to going into SLEEP. The status of global    (i.e., If W_TEMP is defined at 20h in bank 0, it must
interrupt enable bit GIE decides whether or not the pro-   also be defined at A0h in bank 1.). The registers,
cessor branches to the interrupt vector following wake-    PCLATH_TEMP and STATUS_TEMP, are only defined
up. See Section 12.14 for details on SLEEP mode.           in bank 0.

12.11.2 TMR0 INTERRUPT                                     Since the upper 16 bytes of each bank are common in
                                                           the PIC16F76/77 devices, temporary holding registers
An overflow (FFh  00h) in the TMR0 register will set       W_TEMP, STATUS_TEMP and PCLATH_TEMP
flag bit TMR0IF (INTCON<2>). The interrupt can be          should be placed in here. These 16 locations don't
enabled/disabled by setting/clearing enable bit            require banking and, therefore, make it easier for con-
TMR0IE (INTCON<5>). (Section 5.0)                          text save and restore. The same code shown in
                                                           Example 12-1 can be used.
12.11.3 PORTB INTCON CHANGE

An input change on PORTB<7:4> sets flag bit RBIF
(INTCON<0>). The interrupt can be enabled/disabled
by setting/clearing enable bit RBIE (INTCON<4>), see
Section 4.2.

EXAMPLE 12-1: SAVING STATUS, W, AND PCLATH REGISTERS IN RAM

MOVWF   W_TEMP          ;Copy W to TEMP register
SWAPF   STATUS,W        ;Swap status to be saved into W
CLRF    STATUS          ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF   STATUS_TEMP     ;Save status to bank zero STATUS_TEMP register
MOVF    PCLATH, W       ;Only required if using pages 1, 2 and/or 3
MOVWF   PCLATH_TEMP     ;Save PCLATH into W
CLRF    PCLATH          ;Page zero, regardless of current page
:
:(ISR)  PCLATH_TEMP, W  ;Insert user code here
:       PCLATH
MOVF    STATUS_TEMP,W   ;Restore PCLATH
MOVWF                   ;Move W into PCLATH
SWAPF                   ;Swap STATUS_TEMP register into W
                        ;(sets bank to original state)
MOVWF   STATUS          ;Move W into STATUS register
SWAPF   W_TEMP,F        ;Swap W_TEMP
SWAPF   W_TEMP,W        ;Swap W_TEMP into W

DS30325B-page 100                                           2002 Microchip Technology Inc.
                                                                                    PIC16F7X

12.13 Watchdog Timer (WDT)                                  WDT time-out period values may be found in the Elec-
                                                            trical Specifications section under parameter #31. Val-
The Watchdog Timer is a free running on-chip RC oscil-      ues for the WDT prescaler (actually a postscaler, but
lator, which does not require any external components.      shared with the Timer0 prescaler) may be assigned
This RC oscillator is separate from the RC oscillator of    using the OPTION_REG register.
the OSC1/CLKIN pin. That means that the WDT will
run, even if the clock on the OSC1/CLKIN and OSC2/              Note 1: The CLRWDT and SLEEP instructions
CLKOUT pins of the device has been stopped, for                             clear the WDT and the postscaler, if
example, by execution of a SLEEP instruction.                               assigned to the WDT, and prevent it from
                                                                            timing out and generating a device
During normal operation, a WDT time-out generates a                         RESET condition.
device RESET (Watchdog Timer Reset). If the device is
in SLEEP mode, a WDT time-out causes the device to                      2: When a CLRWDT instruction is executed
wake-up and continue with normal operation (Watch-                          and the prescaler is assigned to the WDT,
dog Timer Wake-up). The TO bit in the STATUS regis-                         the prescaler count will be cleared, but
ter will be cleared upon a Watchdog Timer time-out.                         the prescaler assignment is not changed.

The WDT can be permanently disabled by clearing
configuration bit, WDTE (Section 12.1).

FIGURE 12-11:  WATCHDOG TIMER BLOCK DIAGRAM

                                 From TMR0 Clock Source
                                 (Figure 5-1)

                                        0

               WDT Timer                1      M                   Postscaler
                                               U                            8

                                               X

                                                               8 - to - 1 MUX       PS2:PS0

                  WDT                          PSA
               Enable Bit

                                                                               To TMR0 (Figure 5-1)

                                                            0       1

                                                               MUX             PSA

                                                                 WDT
                                                               Time-out

Note: PSA and PS2:PS0 are bits in the OPTION_REG register.

TABLE 12-7: SUMMARY OF WATCHDOG TIMER REGISTERS

Address        Name              Bit 7  Bit 6       Bit 5   Bit 4      Bit 3    Bit 2   Bit 1         Bit 0
                                                                    PWRTE(1)
2007h    Config. bits            (1) BODEN(1) --            CP0                WDTE    FOSC1         FOSC0
                                                            T0SE       PSA      PS2      PS1           PS0
81h,181h OPTION_REG RBPU INTEDG T0CS

Legend: Shaded cells are not used by the Watchdog Timer.

Note 1: See Register 12-1 for operation of these bits.

2002 Microchip Technology Inc.                                                              DS30325B-page 101
PIC16F7X                                                  When the SLEEP instruction is being executed, the next
                                                          instruction (PC + 1) is pre-fetched. For the device to
12.14 Power-down Mode (SLEEP)                             wake-up through an interrupt event, the corresponding
                                                          interrupt enable bit must be set (enabled). Wake-up
Power-down mode is entered by executing a SLEEP           occurs, regardless of the state of the GIE bit. If the GIE
instruction.                                              bit is clear (disabled), the device continues execution at
                                                          the instruction after the SLEEP instruction. If the GIE bit
If enabled, the Watchdog Timer will be cleared but        is set (enabled), the device executes the instruction
keeps running, the PD bit (STATUS<3>) is cleared, the     after the SLEEP instruction and then branches to the
TO (STATUS<4>) bit is set, and the oscillator driver is   interrupt address (0004h). In cases where the execu-
turned off. The I/O ports maintain the status they had    tion of the instruction following SLEEP is not desirable,
before the SLEEP instruction was executed (driving        the user should have a NOP after the SLEEP instruction.
high, low, or hi-impedance).
                                                          12.14.2 WAKE-UP USING INTERRUPTS
For lowest current consumption in this mode, place all
I/O pins at either VDD or VSS, ensure no external cir-    When global interrupts are disabled (GIE cleared) and
cuitry is drawing current from the I/O pin, power-down    any interrupt source has both its interrupt enable bit
the A/D and disable external clocks. Pull all I/O pins    and interrupt flag bit set, one of the following will occur:
that are hi-impedance inputs, high or low externally, to
avoid switching currents caused by floating inputs. The    If the interrupt occurs before the execution of a
T0CKI input should also be at VDD or VSS for lowest          SLEEP instruction, the SLEEP instruction will com-
current consumption. The contribution from on-chip           plete as a NOP. Therefore, the WDT and WDT
pull-ups on PORTB should also be considered.                 postscaler will not be cleared, the TO bit will not
                                                             be set and PD bits will not be cleared.
The MCLR pin must be at a logic high level (VIHMC).
                                                          If the interrupt occurs during or after the execu-
12.14.1 WAKE-UP FROM SLEEP                                   tion of a SLEEP instruction, the device will imme-
                                                             diately wake-up from SLEEP. The SLEEP
The device can wake-up from SLEEP through one of             instruction will be completely executed before the
the following events:                                        wake-up. Therefore, the WDT and WDT
                                                             postscaler will be cleared, the TO bit will be set
1. External RESET input on MCLR pin.                         and the PD bit will be cleared.
2. Watchdog Timer wake-up (if WDT was
                                                          Even if the flag bits were checked before executing a
      enabled).                                           SLEEP instruction, it may be possible for flag bits to
3. Interrupt from INT pin, RB port change or a            become set before the SLEEP instruction completes. To
                                                          determine whether a SLEEP instruction executed, test
      Peripheral Interrupt.                               the PD bit. If the PD bit is set, the SLEEP instruction
                                                          was executed as a NOP.
External MCLR Reset will cause a device RESET. All
other events are considered a continuation of program     To ensure that the WDT is cleared, a CLRWDT instruc-
execution and cause a "wake-up". The TO and PD bits       tion should be executed before a SLEEP instruction.
in the STATUS register can be used to determine the
cause of device RESET. The PD bit, which is set on
power-up, is cleared when SLEEP is invoked. The TO
bit is cleared if a WDT time-out occurred and caused
wake-up.

The following peripheral interrupts can wake the device
from SLEEP:

1. PSP read or write (PIC16F74/77 only).
2. TMR1 interrupt. Timer1 must be operating as

      an asynchronous counter.
3. CCP Capture mode interrupt.
4. Special event trigger (Timer1 in Asynchronous

      mode, using an external clock).
5. SSP (START/STOP) bit detect interrupt.
6. SSP transmit or receive in Slave mode

      (SPI/I2C).
7. USART RX or TX (Synchronous Slave mode).
8. A/D conversion (when A/D clock source is RC).

Other peripherals cannot generate interrupts, since
during SLEEP, no on-chip clocks are present.

DS30325B-page 102                                          2002 Microchip Technology Inc.
                                                                                                            PIC16F7X

FIGURE 12-12: WAKE-UP FROM SLEEP THROUGH INTERRUPT

                 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1                   Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
                                                 TOST(2)
OSC1
CLKOUT(4)

INT pin

INTF Flag                                                                        Interrupt Latency
(INTCON<1>)                                                                           (Note 2)

GIE bit                                          Processor in
(INTCON<7>)                                         SLEEP

INSTRUCTION FLOW                                             PC+2

             PC          PC          PC+1                              PC+2           PC + 2                  0004h        0005h
Instruction      Inst(PC) = SLEEP  Inst(PC + 1)                    Inst(PC + 2)  Dummy cycle                Inst(0004h)  Inst(0005h)
Fetched                            SLEEP                           Inst(PC + 1)                             Dummy cycle  Inst(0004h)
Instruction         Inst(PC - 1)
Executed

Note 1: XT, HS or LP oscillator mode assumed.
          2: TOST = 1024 TOSC (drawing not to scale) This delay will not be there for RC osc mode.
          3: GIE = '1' assumed. In this case after wake- up, the processor jumps to the interrupt routine.
                 If GIE = '0', execution will continue in-line.
          4: CLKOUT is not available in these osc modes, but shown here for timing reference.

12.15 Program Verification/Code                                    For general information of serial programming, please
         Protection                                                refer to the In-Circuit Serial Programming (ICSPTM)
                                                                   Guide (DS30277). For specific details on programming
If the code protection bit(s) have not been pro-                   commands and operations for the PIC16F7X devices,
grammed, the on-chip program memory can be read                    please refer to the latest version of the PIC16F7X
out for verification purposes.                                     FLASH Program Memory Programming Specification
                                                                   (DS30324).
12.16 ID Locations
                                                                   FIGURE 12-13:                            TYPICAL IN-CIRCUIT
Four memory locations (2000h - 2003h) are designated                                                        SERIAL PROGRAMMING
as ID locations, where the user can store checksum or                                                       CONNECTION
other code identification numbers. These locations are
not accessible during normal execution, but are read-                                                       To Normal
able and writable during program/verify. It is recom-                                                       Connections
mended that only the 4 Least Significant bits of the ID
location are used.                                                 External                                 *            PIC16F7X
                                                                   Connector
12.17 In-Circuit Serial Programming                                Signals                                     VDD
                                                                                                               VSS
PIC16F7X microcontrollers can be serially pro-                           +5V                                   MCLR/VPP
grammed while in the end application circuit. This is
simply done, with two lines for clock and data and three                   0V
other lines for power, ground, and the programming                       VPP
voltage (see Figure 12-13 for an example). This allows
customers to manufacture boards with unprogrammed                  CLK                                         RB6
devices, and then program the microcontroller just
before shipping the product. This also allows the most             Data I/O                                    RB7
recent firmware or a custom firmware to be pro-
grammed.                                                                                                    ***

                                                                                                                                             VDD

                                                                                                              To Normal
                                                                                                              Connections

                                                                   * Isolation devices (as required).

2002 Microchip Technology Inc.                                                                                DS30325B-page 103
PIC16F7X

NOTES:

DS30325B-page 104   2002 Microchip Technology Inc.
                                                                                            PIC16F7X

13.0 INSTRUCTION SET SUMMARY                                   For example, a "clrf PORTB" instruction will read
                                                               PORTB, clear all the data bits, then write the result
The PIC16 instruction set is highly orthogonal and is          back to PORTB. This example would have the unin-
comprised of three basic categories:                           tended result that the condition that sets the RBIF flag
                                                               would be cleared for pins configured as inputs and
Byte-oriented operations                                     using the PORTB interrupt-on-change feature.

Bit-oriented operations

Literal and control operations                               TABLE 13-1: OPCODE FIELD
                                                                                    DESCRIPTIONS
Each PIC16 instruction is a 14-bit word divided into an
opcode, which specifies the instruction type and one or        Field                 Description
more operands, which further specify the operation of
the instruction. The formats for each of the categories        f Register file address (0x00 to 0x7F)
are presented in Figure 13-1, while the various opcode         W Working register (accumulator)
fields are summarized in Table 13-1.
                                                               b Bit address within an 8-bit file register
Table 13-2 lists the instructions recognized by the
MPASMTM Assembler. A complete description of each              k Literal field, constant data or label
instruction is also available in the PICmicroTM Mid-           x Don't care location (= 0 or 1).
Range Reference Manual (DS33023).
                                                                        The assembler will generate code with x = 0.
For byte-oriented instructions, `f' represents a file reg-              It is the recommended form of use for
ister designator and `d' represents a destination desig-                compatibility with all Microchip software tools.
nator. The file register designator specifies which file
register is to be used by the instruction.                     d Destination select; d = 0: store result in W,
                                                                        d = 1: store result in file register f.
The destination designator specifies where the result of                Default is d = 1.
the operation is to be placed. If `d' is zero, the result is
placed in the W register. If `d' is one, the result is placed  PC Program Counter
in the file register specified in the instruction.
                                                               TO Time-out bit
                                                               PD Power-down bit

For bit-oriented instructions, `b' represents a bit field      FIGURE 13-1:          GENERAL FORMAT FOR
designator, which selects the bit affected by the opera-                             INSTRUCTIONS
tion, while `f' represents the address of the file in which
the bit is located.                                            Byte-oriented file register operations

For literal and control operations, `k' represents an                 13             8 76                              0
eight- or eleven-bit constant or literal value
                                                                          OPCODE         d                 f (FILE #)
One instruction cycle consists of four oscillator periods;
for an oscillator frequency of 4 MHz, this gives a normal                 d = 0 for destination W
instruction execution time of 1 s. All instructions are                  d = 1 for destination f
executed within a single instruction cycle, unless a con-                 f = 7-bit file register address
ditional test is true, or the program counter is changed
as a result of an instruction. When this occurs, the exe-      Bit-oriented file register operations
cution takes two instruction cycles, with the second
cycle executed as a NOP.                                              13             10 9 7 6                          0

                                                                          OPCODE         b (BIT #) f (FILE #)

Note:  To maintain upward compatibility with                              b = 3-bit bit address
       future PIC16F7X products, do not use the                           f = 7-bit file register address
       OPTION and TRIS instructions.

All instruction examples use the format `0xhh' to repre-       Literal and control operations
sent a hexadecimal number, where `h' signifies a hexa-
decimal digit.                                                 General

                                                                      13                 87                                 0
                                                                             OPCODE                        k (literal)

13.1 READ-MODIFY-WRITE                                                    k = 8-bit immediate value
         OPERATIONS
                                                               CALL and GOTO instructions only
Any instruction that specifies a file register as part of
the instruction performs a Read-Modify-Write (R-M-W)                  13          11 10                                0
operation. The register is read, the data is modified,
and the result is stored according to either the instruc-                 OPCODE                     k (literal)
tion, or the destination designator `d'. A read operation
is performed on a register even if the instruction writes                 k = 11-bit immediate value
to that register.

2002 Microchip Technology Inc.                                                                            DS30325B-page 105
PIC16F7X

TABLE 13-2: PIC16F7X INSTRUCTION SET

Mnemonic,