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

型号

产品描述

搜索
 

PIC16C63-10I/P

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

器件描述

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

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

参数

PIC16C63-10I/P功能数量 1
PIC16C63-10I/P端子数量 44
PIC16C63-10I/P最大工作温度 85 Cel
PIC16C63-10I/P最小工作温度 -40 Cel
PIC16C63-10I/P最大供电/工作电压 5.5 V
PIC16C63-10I/P最小供电/工作电压 4.5 V
PIC16C63-10I/P额定供电电压 5 V
PIC16C63-10I/P外部数据总线宽度 0.0
PIC16C63-10I/P输入输出总线数量 33
PIC16C63-10I/P线速度 20 MHz
PIC16C63-10I/P加工封装描述 PLASTIC, LCC-44
PIC16C63-10I/P无铅 Yes
PIC16C63-10I/P欧盟RoHS规范 Yes
PIC16C63-10I/P中国RoHS规范 Yes
PIC16C63-10I/P状态 ACTIVE
PIC16C63-10I/P工艺 CMOS
PIC16C63-10I/P包装形状 SQUARE
PIC16C63-10I/P包装尺寸 CHIP CARRIER
PIC16C63-10I/P表面贴装 Yes
PIC16C63-10I/P端子形式 J BEND
PIC16C63-10I/P端子间距 1.27 mm
PIC16C63-10I/P端子涂层 MATTE TIN
PIC16C63-10I/P端子位置 QUAD
PIC16C63-10I/P包装材料 PLASTIC/EPOXY
PIC16C63-10I/P温度等级 INDUSTRIAL
PIC16C63-10I/P地址总线宽度 0.0
PIC16C63-10I/P位数 8
PIC16C63-10I/P最大FCLK时钟频率 20 MHz
PIC16C63-10I/P微处理器类型 RISC MICROCONTROLLER
PIC16C63-10I/PROM编程 OTPROM

文档预览

PIC16C63-10I/P器件文档内容

                                     PIC16C6X

                      8-Bit CMOS Microcontrollers

Devices included in this data sheet:                              Low-power, high-speed CMOS EPROM/ROM
                                                                    technology
PIC16C61             PIC16C64A
PIC16C62             PIC16CR64                                 Fully static design
PIC16C62A            PIC16C65                                  Wide operating voltage range: 2.5V to 6.0V
PIC16CR62            PIC16C65A                                 Commercial, Industrial, and Extended
PIC16C63             PIC16CR65
PIC16CR63            PIC16C66                                    temperature ranges
PIC16C64             PIC16C67                                  Low-power consumption:

PIC16C6X Microcontroller Core Features:                                          < 2 mA @ 5V, 4 MHz
                                                                                 15 A typical @ 3V, 32 kHz
High performance RISC CPU                                                      < 1 A typical standby current
Only 35 single word instructions to learn
All single cycle instructions except for program               PIC16C6X Peripheral Features:

   branches which are two-cycle                                  Timer0: 8-bit timer/counter with 8-bit prescaler
Operating speed: DC - 20 MHz clock input                        Timer1: 16-bit timer/counter with prescaler,

                           DC - 200 ns instruction cycle            can be incremented during sleep via
Interrupt capability                                              external crystal/clock
Eight level deep hardware stack                                 Timer2: 8-bit timer/counter with 8-bit period
Direct, indirect, and relative addressing modes                   register, prescaler and postscaler
Power-on Reset (POR)                                           Capture/Compare/PWM (CCP) module(s)
Power-up Timer (PWRT) and                                       Capture is 16-bit, max resolution is 12.5 ns,
                                                                    Compare is 16-bit, max resolution is 200 ns,
   Oscillator Start-up Timer (OST)                                  PWM max resolution is 10-bit.
Watchdog Timer (WDT) with its own on-chip RC                   Synchronous Serial Port (SSP) with SPITM and I2CTM
                                                                  Universal Synchronous Asynchronous Receiver
   oscillator for reliable operation                                Transmitter (USART/SCI)
Programmable code-protection                                    Parallel Slave Port (PSP) 8-bits wide, with
Power saving SLEEP mode                                           external RD, WR and CS controls
Selectable oscillator options                                  Brown-out detection circuitry for
                                                                    Brown-out Reset (BOR)

PIC16C6X Features 61 62 62A R62 63 R63 64 64A R64 65 65A R65 66                          67

Program Memory        1K 2K 2K -- 4K                         -- 2K 2K -- 4K  4K  --  8K  8K
(EPROM) x 14

(ROM) x 14            -- -- -- 2K --                         4K -- -- 2K --  --  4K  --  --

Data Memory (Bytes) x 8 36 128 128 128 192 192 128 128 128 192 192 192 368 368

I/O Pins              13 22 22 22 22                         22 33 33 33 33  33  33  22  33

Parallel Slave Port   -------- --                            -- Yes Yes Yes Yes Yes Yes -- Yes

Capture/Compare/PWM -- 1 1 1                              2  2   111  2      2   2   2   2

Module(s)

Timer Modules         1333                                3  3   333  3      3   3   3   3
Serial Communication
                      -- SPI/ SPI/ SPI/ SPI/I2C, SPI/I2C, SPI/ SPI/ SPI/ SPI/I2C, SPI/I2C, SPI/I2C, SPI/I2C, SPI/I2C,
                              I2C I2C I2C USART USART I2C I2C I2C USART USART USART USART USART

In-Circuit Serial     Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
Programming

Brown-out Reset       -- -- Yes Yes Yes Yes -- Yes Yes -- Yes Yes Yes Yes

Interrupt Sources     3777               10                  10  888  11     11  11  10  11

Sink/Source Current (mA) 25/20 25/25 25/25 25/25 25/25 25/25 25/25 25/25 25/25 25/25 25/25 25/25 25/25 25/25

1997 Microchip Technology Inc.                                                     DS30234D-page 1
PIC16C6X

Pin Diagrams

PDIP, SOIC, Windowed CERDIP                                                SDIP, SOIC, SSOP, Windowed CERDIP (300 mil)

                        RA2          1      18        RA1                            MCLR/VPP      1                   28      RB7
                                                                                              RA0                              RB6
                        RA3          2      17        RA0                                     RA1  2                   27      RB5
                                                                                              RA2                              RB4
RA4/T0CKI                            3      16        OSC1/CLKIN                              RA3  3                   26      RB3
                                                                                                                               RB2
MCLR/VPP                                    15                                      RA4/T0CKI      4                   25      RB1
                                                                                         RA5/SS                                RB0/INT
                                     4                OSC2/CLKOUT                             VSS  5                   24      VDD
                                                                                                                               VSS
                        VSS          5      14        VDD                         OSC1/CLKIN       6                   23      RC7
                                                                              OSC2/CLKOUT                                      RC6
RB0/INT                              6      13        RB7                  RC0/T1OSI/T1CKI         7                   22      RC5/SDO
                                                                                                                               RC4/SDI/SDA
                        RB1          7      12        RB6                         RC1/T1OSO        8                   21
                                                                                     RC2/CCP1
                        RB2          8      11        RB5                                          9                   20
                                                                                RC3/SCK/SCL
                                                                                                   10                  19

                        RB3          9      10        RB4                                          11                  18

                                                                                                   12                  17

                                     PIC16C61                                                      13                  16

                                                                                                   14                  15

                                                                                                       PIC16C62

SDIP, SOIC, SSOP, Windowed CERDIP (300 mil)                                SDIP, SOIC, Windowed CERDIP (300 mil)

MCLR/VPP                         1               28   RB7                         MCLR/VPP         1                   28      RB7

RA0                              2               27   RB6                         RA0              2                   27      RB6

RA1                              3               26   RB5                         RA1              3                   26      RB5

RA2                              4               25   RB4                         RA2              4                   25      RB4

RA3                              5               24   RB3                         RA3              5                   24      RB3

RA4/T0CKI                        6               23   RB2                      RA4/T0CKI           6                   23      RB2

RA5/SS                           7               22   RB1                         RA5/SS           7                   22      RB1

VSS                              8               21   RB0/INT                     VSS              8                   21      RB0/INT

OSC1/CLKIN                       9               20   VDD                      OSC1/CLKIN          9                   20      VDD

OSC2/CLKOUT                      10              19   VSS                      OSC2/CLKOUT         10                  19      VSS

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

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

RC2/CCP1                         13              16   RC5/SDO                     RC2/CCP1         13                  16      RC5/SDO

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

                                    PIC16C62A                                                          PIC16C63
                                    PIC16CR62                                                          PIC16CR63
                                                                                                       PIC16C66

                                                           PDIP, Windowed CERDIP

          MCLR/VPP           1          40  RB7            MCLR/VPP    1   40     RB7                  MCLR/VPP     1      40       RB7
                   RA0                                                                                                              RB6
                   RA1       2          39  RB6            RA0         2   39     RB6                  RA0          2      39       RB5
                   RA2                                                                                                              RB4
                   RA3       3          38  RB5            RA1         3   38     RB5                  RA1          3      38       RB3
                                                                                                                                    RB2
         RA4/T0CKI           4          37  RB4            RA2         4   37     RB4                  RA2          4      37       RB1
              RA5/SS                                                                                                                RB0/INT
             RE0/RD          5          36  RB3            RA3         5   36     RB3                  RA3          5      36       VDD
             RE1/WR                                                                                                                 VSS
              RE2/CS         6          35  RB2            RA4/T0CKI   6   35     RB2                  RA4/T0CKI    6      35       RD7/PSP7
                   VDD                                                                                                              RD6/PSP6
                   VSS       7          34  RB1            RA5/SS      7   34     RB1                  RA5/SS       7      34       RD5/PSP5
                                                                                                                                    RD4/PSP4
       OSC1/CLKIN            8          33  RB0/INT        RE0/RD      8   33     RB0/INT              RE0/RD       8      33       RC7/RX/DT
   OSC2/CLKOUT                                                                                                                      RC6/TX/CK
RC0/T1OSI/T1CKI              9          32  VDD            RE1/WR      9   32     VDD                  RE1/WR       9      32       RC5/SDO
                                                                                                                                    RC4/SDI/SDA
       RC1/T1OSO             10         31  VSS            RE2/CS      10  31     VSS                  RE2/CS       10     31       RD3/PSP3
          RC2/CCP1                                                                                                                  RD2/PSP2
                             11         30  RD7/PSP7       VDD         11  30     RD7/PSP7             VDD          11     30
     RC3/SCK/SCL
          RD0/PSP0           12         29  RD6/PSP6       VSS         12  29     RD6/PSP6             VSS          12     29
          RD1/PSP1
                             13         28  RD5/PSP5  OSC1/CLKIN       13  28     RD5/PSP5         OSC1/CLKIN       13     28

                             14         27  RD4/PSP4  OSC2/CLKOUT      14  27     RD4/PSP4         OSC2/CLKOUT      14     27

                             15         26  RC7       RC0/T1OSO/T1CKI  15  26     RC7              RC0/T1OSO/T1CKI  15     26

                             16         25  RC6            RC1/T1OSI   16  25     RC6              RC1/T1OSI/CCP2   16     25

                             17         24  RC5/SDO        RC2/CCP1    17  24     RC5/SDO              RC2/CCP1     17     24

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

                             19         22  RD3/PSP3       RD0/PSP0    19  22     RD3/PSP3             RD0/PSP0     19     22

                             20         21  RD2/PSP2       RD1/PSP1    20  21     RD2/PSP2             RD1/PSP1     20     21

                             PIC16C64                                  PIC16C64A                                    PIC16C65
                                                                       PIC16CR64                                    PIC16C65A
                                                                                                                    PIC16CR65
                                                                                                                    PIC16C67

DS30234D-page 2                                                                                        1997 Microchip Technology Inc.
Pin Diagrams (Cont.'d)                             RC4/SDI/SDA  RD3/PSP3  RD2/PSP2  RD1/PSP1  RD0/PSP0     RC3/SCK/SCL  RC2/CCP1        RC1/T1OSO                                           PIC16C6X                                                                        MCLR/VPP
     MQFP
                                      RC5/SDO                                                                                                                                PLCC

                             RC6                                                                                                                                                                                             RA3        RA2          RA1          RA0                 NC        RB7          RB6          RB5        RB4  NC

                                                                                                                                                   NC

                                                                                                                                                                                                                             6          5            4            3         2         1         44           43           42         41   40

        RC7       1          44       43           42           41        40        39        38           37           36              35         34   33  NC                        RA4/T0CKI           7                                                                                                                                   39  RB3
RD4/PSP4                                                                                                                                                                                   RA5/SS                                                                                                                                                 RB2
RD5/PSP5          2                                                                                                                                     32  RC0/T1OSI/T1CKI                RE0/RD         8                                                                                                                                   38  RB1
RD6/PSP6                                                                                                                                                    OSC2/CLKOUT                   RE1/WR                                                                                                                                                  RB0/INT
RD7/PSP7          3                                                                                                                                     31  OSC1/CLKIN                     RE2/CS         9                                                                                                                                   37  VDD
                                                                                                                                                            VSS                                 VDD                                                                                                                                               VSS
         VSS      4                                                                                                                                     30  VDD                                 VSS       10                                                                                                                                  36  RD7/PSP7
         VDD                                                                                                                                                RE2/CS                                                                                                                                                                                RD6/PSP6
   RB0/INT        5                                                                                                                                     29  RE1/WR                  OSC1/CLKIN            11                                                                                                                                  35  RD5/PSP5
        RB1                                                                                                                                                 RE0/RD               OSC2/CLKOUT              12 PIC16C64 34                                                                                                                          RD4/PSP4
        RB2       6 PIC16C64 28                                                                                                                             RA5/SS           RC0/T1OSI/T1CKI              13                                                                                                                                  33  RC7
        RB3       7                                                                                                                                     27  RA4/T0CKI
                                                                                                                                                                                                 NC       14                                                                                                                                  32
                  8                                                                                                                                     26
                                                                                                                                                                                                          15                                                                                                                                  31
                  9                                                                                                                                     25
                                                                                                                                                                                                          16                                                                                                                                  30
                  10                                                                                                                                    24
                                                                                                                                                                                                          17                                                                                                                                  29
                  11                                                                                                                                    23

                             12       13       14               15        16        17        18           19           20              21         22                                                                        18         19           20           21        22        23        24           25           26         27   28

                             NC       NC           RB4          RB5       RB6       RB7       MCLR/VPP     RA0          RA1             RA2        RA3                                                                       RC1/T1OSO  RC2/CCP1     RC3/SCK/SCL  RD0/PSP0  RD1/PSP1  RD2/PSP2  RD3/PSP3     RC4/SDI/SDA  RC5/SDO    RC6  NC

MQFP,                                                                                                                                                                        PLCC                                                                                 MCLR/VPP
TQFP (PIC16C64A only)

                             RC5/SDO  RC4/SDI/SDA  RD3/PSP3     RD2/PSP2  RD1/PSP1  RD0/PSP0  RC3/SCK/SCL  RC2/CCP1     RC1/T1OSI                                                                            RA3             RA2        RA1          RA0                    NC        RB7       RB6          RB5          RB4        NC

                  RC6                                                                                                                   NC

                                                                                                                                                                                                             6               5          4            3            2         1         44        43           42           41         40

                                                                                                                                                                                        RA4/T0CKI      7                                                                                                                                  39      RB3
                                                                                                                                                                                            RA5/SS                                                                                                                                                RB2
        RC7    1  44         43       42           41           40        39        38        37           36           35              34         33       NC                              RE0/RD     8                                                                                                                                  38      RB1
RD4/PSP4                                                                                                                                                                                   RE1/WR                                                                                                                                                 RB0/INT
RD5/PSP5       2                                                                                                                                   32       RC0/T1OSO/T1CKI                 RE2/CS     9                                                                                                                                  37      VDD
RD6/PSP6                                                                                                                                                    OSC2/CLKOUT                           VDD                                                                                                                                             VSS
RD7/PSP7       3                                                                                                                                   31       OSC1/CLKIN                            VSS  10                                                                                                                                 36      RD7/PSP7
                                                                                                                                                            VSS                                                                                                                                                                                   RD6/PSP6
         VSS   4                                                                                                                                   30       VDD                      OSC1/CLKIN        11                    PIC16C64A                                                                                                    35      RD5/PSP5
         VDD                                                                                                                                                RE2/CS                OSC2/CLKOUT          12                                                                                                                                 34      RD4/PSP4
   RB0/INT     5                                                                                                                                   29       RE1/WR                                                                                                                                                                                RC7
        RB1    6 PIC16C64A 28                                                                                                                               RE0/RD           RC0/T1OSO/T1CKI           13                    PIC16CR64                                                                                                    33
        RB2    7                                                                                                                                   27                                              NC  14                                                                                                                                 32
        RB3    8                                                                                                                                   26       RA5/SS
                             PIC16CR64                                                                                                                      RA4/T0CKI                                  15                                                                                                                                 31

               9                                                                                                                                   25                                                  16                                                                                                                                 30

               10                                                                                                                                  24                                                  17                                                                                                                                 29

               11                                                                                                                                  23                                                        18              19         20           21           22        23        24        25           26           27         28

                  12         13       14           15           16        17        18        19           20           21              22

                  NC         NC       RB4          RB5          RB6       RB7       MCLR/VPP  RA0          RA1          RA2             RA3                                                                  RC1/T1OSI       RC2/CCP1   RC3/SCK/SCL  RD0/PSP0     RD1/PSP1  RD2/PSP2  RD3/PSP3  RC4/SDI/SDA  RC5/SDO      RC6        NC

MQFP,                                                                                                                                                                        PLCC
TQFP (Not on PIC16C65)

                  RC6/TX/CK  RC5/SDO  RC4/SDI/SDA  RD3/PSP3     RD2/PSP2  RD1/PSP1  RD0/PSP0  RC3/SCK/SCL  RC2/CCP1     RC1/T1OSI/CCP2                                                                       RA3             RA2        RA1          RA0          MCLR/VPP  NC        RB7       RB6          RB5          RB4        NC

                                                                                                                                        NC

                                                                                                                                                                                                             6               5          4            3            2         1         44        43           42           41         40

                                                                                                                                                                                        RA4/T0CKI      7                                                                                                                                  39      RB3
                                                                                                                                                                                            RA5/SS                                                                                                                                                RB2
RC7/RX/DT      1  44         43       42           41           40        39        38        37           36           35              34         33       NC                              RE0/RD     8                                                                                                                                  38      RB1
RD4/PSP4                                                                                                                                                                                  RE1/WR                                                                                                                                                 RB0/INT
RD5/PSP5      2                                                                                                                                   32       RC0/T1OSO/T1CKI                 RE2/CS     9                                                                                                                                  37      VDD
RD6/PSP6                                                                                                                                                   OSC2/CLKOUT                           VDD                                                                                                                                             VSS
RD7/PSP7      3                                                                                                                                   31       OSC1/CLKIN                            VSS  10                                                                                                                                 36      RD7/PSP7
                                                                                                                                                            VSS                                        11 PIC16C65 35                                                                                                                             RD6/PSP6
          VSS  4 PIC16C65 30                                                                                                                                VDD                      OSC1/CLKIN        12                                                                                                                                 34      RD5/PSP5
          VDD                                                                                                                                               RE2/CS                OSC2/CLKOUT          13                    PIC16C65A                                                                                                    33      RD4/PSP4
    RB0/INT    5             PIC16C65A                                                                                                             29       RE1/WR                                                                                                                                                                                RC7/RX/DT
          RB1  6                                                                                                                                   28       RE0/RD           RC0/T1OSO/T1CKI           14 PIC16CR65 32
          RB2                                                                                                                                                                                      NC
          RB3  7             PIC16CR65                                                                                                             27       RA5/SS                                     15                                                                                                                                 31
               8                                                                                                                                   26       RA4/T0CKI
                                                                                                                                                                                                       16 PIC16C67 30
               9 PIC16C67 25                                                                                                                                                                           17                                                                                                                                 29
               10                                                                                                                                  24

               11                                                                                                                                  23                                                        18              19         20           21           22        23        24        25           26           27         28

                  12         13       14           15           16        17        18        19           20           21              22

                                                                                                                                                                                                             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

                  NC         NC       RB4          RB5          RB6       RB7       MCLR/VPP  RA0          RA1          RA2             RA3

1997 Microchip Technology Inc.                                                                                                                                                                                                                                                                                                              DS30234D-page 3
PIC16C6X

Table Of Contents

1.0 General Description ....................................................................................................................................................................... 5
2.0 PIC16C6X Device Varieties ........................................................................................................................................................... 7
3.0 Architectural Overview ................................................................................................................................................................... 9
4.0 Memory Organization................................................................................................................................................................... 19
5.0 I/O Ports....................................................................................................................................................................................... 51
6.0 Overview of Timer Modules ......................................................................................................................................................... 63
7.0 Timer0 Module ............................................................................................................................................................................. 65
8.0 Timer1 Module ............................................................................................................................................................................. 71
9.0 Timer2 Module ............................................................................................................................................................................. 75
10.0 Capture/Compare/PWM (CCP) Module(s)................................................................................................................................... 77
11.0 Synchronous Serial Port (SSP) Module....................................................................................................................................... 83
12.0 Universal Synchronous Asynchronous Receiver Transmitter (USART) Module ....................................................................... 105
13.0 Special Features of the CPU ..................................................................................................................................................... 123
14.0 Instruction Set Summary............................................................................................................................................................ 143
15.0 Development Support ................................................................................................................................................................ 159
16.0 Electrical Characteristics for PIC16C61 ..................................................................................................................................... 163
17.0 DC and AC Characteristics Graphs and Tables for PIC16C61.................................................................................................. 173
18.0 Electrical Characteristics for PIC16C62/64................................................................................................................................ 183
19.0 Electrical Characteristics for PIC16C62A/R62/64A/R64............................................................................................................ 199
20.0 Electrical Characteristics for PIC16C65 ..................................................................................................................................... 215
21.0 Electrical Characteristics for PIC16C63/65A ............................................................................................................................. 231
22.0 Electrical Characteristics for PIC16CR63/R65........................................................................................................................... 247
23.0 Electrical Characteristics for PIC16C66/67................................................................................................................................ 263
24.0 DC and AC Characteristics Graphs and Tables for:

      PIC16C62, PIC16C62A, PIC16CR62, PIC16C63, PIC16C64, PIC16C64A, PIC16CR64,
      PIC16C65A, PIC16C66, PIC16C67........................................................................................................................................... 281
25.0 Packaging Information ............................................................................................................................................................... 291
Appendix A: Modifications.............................................................................................................................................................. 307
Appendix B: Compatibility .............................................................................................................................................................. 307
Appendix C: What's New................................................................................................................................................................ 308
Appendix D: What's Changed ........................................................................................................................................................ 308
Appendix E: PIC16/17 Microcontrollers ....................................................................................................................................... 309
Pin Compatibility ................................................................................................................................................................................ 315
Index .................................................................................................................................................................................................. 317
List of Equation and Examples........................................................................................................................................................... 326
List of Figures..................................................................................................................................................................................... 326
List of Tables...................................................................................................................................................................................... 330
Reader Response .............................................................................................................................................................................. 334
PIC16C6X Product Identification System........................................................................................................................................... 335

For register and module descriptions in this data sheet, device legends show which devices apply to those sections. For
example, the legend below shows that some features of only the PIC16C62A, PIC16CR62, PIC16C63, PIC16C64A,
PIC16CR64, and PIC16C65A are described in this section.

Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

                             To Our Valued Customers

  We constantly strive to improve the quality of all our products and documentation. We have spent an exceptional
  amount of time to ensure that these documents are correct. However, we realize that we may have missed a few
  things. If you find any information that is missing or appears in error, please use the reader response form in the
  back of this data sheet to inform us. We appreciate your assistance in making this a better document.

DS30234D-page 4   1997 Microchip Technology Inc.
1.0 GENERAL DESCRIPTION                                                      PIC16C6X

The PIC16CXX is a family of low-cost, high-perfor-            ter (USART) is also known as a Serial Communications
mance, CMOS, fully-static, 8-bit microcontrollers.            Interface or SCI. An 8-bit Parallel Slave Port is also pro-
                                                              vided.
All PIC16/17 microcontrollers employ an advanced
RISC architecture. The PIC16CXX microcontroller fam-          The PIC16C6X device family has special features to
ily has enhanced core features, eight-level deep stack,       reduce external components, thus reducing cost,
and multiple internal and external interrupt sources.         enhancing system reliability and reducing power con-
The separate instruction and data buses of the Harvard        sumption. There are four oscillator options, of which the
architecture allow a 14-bit wide instruction word with        single pin RC oscillator provides a low-cost solution,
separate 8-bit wide data. The two stage instruction           the LP oscillator minimizes power consumption, XT is a
pipeline allows all instructions to execute in a single       standard crystal, and the HS is for High Speed crystals.
cycle, except for program branches (which require two         The SLEEP (power-down) mode offers a power saving
cycles). A total of 35 instructions (reduced instruction      mode. The user can wake the chip from SLEEP
set) are available. Additionally, a large register set gives  through several external and internal interrupts, and
some of the architectural innovations used to achieve a       resets.
very high performance.
                                                              A highly reliable Watchdog Timer with its own on-chip
PIC16CXX microcontrollers typically achieve a 2:1             RC oscillator provides protection against software lock-
code compression and a 4:1 speed improvement over             up.
other 8-bit microcontrollers in their class.
                                                              A UV erasable CERDIP packaged version is ideal for
The PIC16C61 device has 36 bytes of RAM and 13 I/O            code development, while the cost-effective
pins. In addition a timer/counter is available.               One-Time-Programmable (OTP) version is suitable for
                                                              production in any volume.
The PIC16C62/62A/R62 devices have 128 bytes of
RAM and 22 I/O pins. In addition, several peripheral          The PIC16C6X family fits perfectly in applications rang-
features are available, including: three timer/counters,      ing from high-speed automotive and appliance control
one Capture/Compare/PWM module and one serial                 to low-power remote sensors, keyboards and telecom
port. The Synchronous Serial Port can be configured           processors. The EPROM technology makes customi-
as either a 3-wire Serial Peripheral Interface (SPITM) or     zation of application programs (transmitter codes,
the two-wire Inter-Integrated Circuit (I2C) bus.              motor speeds, receiver frequencies, etc.) extremely
                                                              fast and convenient. The small footprint packages
The PIC16C63/R63 devices have 192 bytes of RAM,               make this microcontroller series perfect for all applica-
while the PIC16C66 has 368 bytes. All three devices           tions with space limitations. Low-cost, low-power, high
have 22 I/O pins. In addition, several peripheral fea-        performance, ease-of-use, and I/O flexibility make the
tures are available, including: three timer/counters, two     PIC16C6X very versatile even in areas where no micro-
Capture/Compare/PWM modules and two serial ports.             controller use has been considered before (e.g. timer
The Synchronous Serial Port can be configured as              functions, serial communication, capture and compare,
either a 3-wire Serial Peripheral Interface (SPI) or the      PWM functions, and co-processor applications).
two-wire Inter-Integrated Circuit (I2C) bus. The Univer-
sal Synchronous Asynchronous Receiver Transmitter             1.1 Family and Upward Compatibility
(USART) is also know as a Serial Communications
Interface or SCI.                                             Those users familiar with the PIC16C5X family of
                                                              microcontrollers will realize that this is an enhanced
The PIC16C64/64A/R64 devices have 128 bytes of                version of the PIC16C5X architecture. Please refer to
RAM and 33 I/O pins. In addition, several peripheral          Appendix A for a detailed list of enhancements. Code
features are available, including: three timer/counters,      written for PIC16C5X can be easily ported to
one Capture/Compare/PWM module and one serial                 PIC16CXX family of devices (Appendix B).
port. The Synchronous Serial Port can be configured
as either a 3-wire Serial Peripheral Interface (SPI) or       1.2 Development Support
the two-wire Inter-Integrated Circuit (I2C) bus. An 8-bit
Parallel Slave Port is also provided.                         PIC16C6X devices are supported by the complete line
                                                              of Microchip Development tools.
The PIC16C65/65A/R65 devices have 192 bytes of
RAM, while the PIC16C67 has 368 bytes. All four               Please refer to Section 15.0 for more details about
devices have 33 I/O pins. In addition, several peripheral     Microchip's development tools.
features are available, including: three timer/counters,
two Capture/Compare/PWM modules and two serial
ports. The Synchronous Serial Port can be configured
as either a 3-wire Serial Peripheral Interface (SPI) or
the two-wire Inter-Integrated Circuit (I2C) bus. The Uni-
versal Synchronous Asynchronous Receiver Transmit-

1997 Microchip Technology Inc.                              DS30234D-page 5
PIC16C6X

TABLE 1-1: PIC16C6X FAMILY OF DEVICES

                                                       PIC16C61 PIC16C62A PIC16CR62 PIC16C63 PIC16CR63

Clock     Maximum Frequency                        20          20                   20            20                       20
Memory    of Operation (MHz)
                                                   1K          2K                   --            4K                       --
          EPROM Program Memory
          (x14 words)                              --          --                   2K            --                       4K

          ROM Program Memory                       36          128                  128           192                      192
          (x14 words)                              TMR0
                                                               TMR0,                TMR0,         TMR0,                    TMR0,
          Data Memory (bytes)                      --          TMR1,                TMR1,         TMR1,                    TMR1,
                                                               TMR2                 TMR2          TMR2                     TMR2
          Timer Module(s)
                                                               1                    1             2                        2
                  Capture/Compare/
Peripherals PWM Module(s)

          Serial Port(s)                           --          SPI/I2C              SPI/I2C       SPI/I2C,                 SPI/I2C
          (SPI/I2C, USART)                                                                        USART                    USART
                                                                                    --
          Parallel Slave Port                      --          --                   7             --                       --
                                                                                    22
          Interrupt Sources                        3           7                    2.5-6.0       10                       10
                                                                                    Yes
          I/O Pins                                 13          22                   Yes           22                       22
                                                                                    28-pin SDIP,
          Voltage Range (Volts)                    3.0-6.0     2.5-6.0              SOIC, SSOP    2.5-6.0                  2.5-6.0
          In-Circuit Serial Programming
Features                                           Yes         Yes                                Yes                      Yes

          Brown-out Reset                          --          Yes                                Yes                      Yes

          Packages                                 18-pin DIP, SO 28-pin SDIP,                    28-pin SDIP, 28-pin SDIP,
                                                                        SOIC, SSOP
                                                                                                  SOIC                     SOIC

                                                   PIC16C64A PIC16CR64 PIC16C65A PIC16CR65 PIC16C66 PIC16C67

Clock     Maximum Frequency                        20       20          20                 20                        20             20
Memory    of Operation (MHz)
                                                   2K       --          4K                 --                        8K             8K
          EPROM Program Memory
          (x14 words)                              --       2K          --                 4K                        --             --

          ROM Program Memory (x14                  128      128         192                192                       368            368
          words)
                                                   TMR0,    TMR0,       TMR0,              TMR0,                     TMR0,          TMR0,
          Data Memory (bytes)                      TMR1,    TMR1,       TMR1,              TMR1,                     TMR1,          TMR1,
                                                   TMR2     TMR2        TMR2               TMR2                      TMR2           TMR2
          Timer Module(s)
                                                   1        1           2                  2                         2              2
                  Capture/Compare/PWM Mod-
Peripherals ule(s)                                 SPI/I2C  SPI/I2C     SPI/I2C,           SPI/I2C,                  SPI/I2C,       SPI/I2C,
                                                                        USART              USART                     USART          USART
                  Serial Port(s) (SPI/I2C, USART)

          Parallel Slave Port                      Yes      Yes         Yes                Yes                       --             Yes
          Interrupt Sources
          I/O Pins                                 8        8           11                 11                        10             11
          Voltage Range (Volts)
          In-Circuit Serial Programming            33       33          33                 33                        22             33
          Brown-out Reset
          Packages                                 2.5-6.0  2.5-6.0     2.5-6.0            2.5-6.0                   2.5-6.0        2.5-6.0

                                                   Yes      Yes         Yes                Yes                       Yes            Yes

Features                                           Yes      Yes         Yes                Yes                       Yes            Yes

                                                   40-pin DIP; 40-pin DIP; 40-pin DIP; 40-pin DIP;                   28-pin SDIP, 40-pin DIP;
                                                   44-pin PLCC, 44-pin PLCC, 44-pin PLCC, 44-pin
                                                   MQFP, TQFP MQFP, TQFP MQFP, TQFP PLCC,                            SOIC           44-pin

                                                                                                              MQFP,                 PLCC,
                                                                                                              TQFP
                                                                                                                                    MQFP,

                                                                                                                                    TQFP

All PIC16/17 Family devices have Power-on Reset, selectable Watchdog Timer, selectable code protect and high I/O current
capability. All PIC16C6X Family devices use serial programming with clock pin RB6 and data pin RB7.

DS30234D-page 6                                                                                    1997 Microchip Technology Inc.
2.0 PIC16C6X DEVICE VARIETIES                                            PIC16C6X

A variety of frequency ranges and packaging options       2.3 Quick-Turnaround-Production (QTP)
are available. Depending on application and production              Devices
requirements, the proper device option can be selected
using the information in the PIC16C6X Product Identifi-   Microchip offers a QTP Programming Service for fac-
cation System section at the end of this data sheet.      tory production orders. This service is made available
When placing orders, please use that page of the data     for users who choose not to program a medium to high
sheet to specify the correct part number.                 quantity of units and whose code patterns have stabi-
                                                          lized. The devices are identical to the OTP devices but
For the PIC16C6X family of devices, there are four        with all EPROM locations and configuration options
device "types" as indicated in the device number:         already programmed by the factory. Certain code and
                                                          prototype verification procedures apply before produc-
1. C, as in PIC16C64. These devices have                  tion shipments are available. Please contact your local
      EPROM type memory and operate over the              Microchip Technology sales office for more details.
      standard voltage range.
                                                          2.4 Serialized Quick-Turnaround
2. LC, as in PIC16LC64. These devices have                          Production (SQTPSM) Devices
      EPROM type memory and operate over an
      extended voltage range.                             Microchip offers a unique programming service where
                                                          a few user-defined locations in each device are pro-
3. CR, as in PIC16CR64. These devices have                grammed with different serial numbers. The serial num-
      ROM program memory and operate over the             bers may be random, pseudo-random, or sequential.
      standard voltage range.
                                                          Serial programming allows each device to have a
4. LCR, as in PIC16LCR64. These devices have              unique number which can serve as an entry-code,
      ROM program memory and operate over an              password, or ID number.
      extended voltage range.
                                                          ROM devices do not allow serialization information in
2.1 UV Erasable Devices                                   the program memory space. The user may have this
                                                          information programmed in the data memory space.
The UV erasable version, offered in CERDIP package
is optimal for prototype development and pilot            For information on submitting ROM code, please con-
programs. This version can be erased and                  tact your regional sales office.
reprogrammed to any of the oscillator modes.
Microchip's PICSTART Plus and PRO MATE II               2.5 Read Only Memory (ROM) Devices
programmers both support programming of the
PIC16C6X.                                                 Microchip offers masked ROM versions of several of
                                                          the highest volume parts, thus giving customers a low
2.2 One-Time-Programmable (OTP)                           cost option for high volume, mature products.
          Devices
                                                          For information on submitting ROM code, please con-
The availability of OTP devices is especially useful for  tact your regional sales office.
customers who need the flexibility for frequent code
updates and small volume applications.

The OTP devices, packaged in plastic packages, per-
mit the user to program them once. In addition to the
program memory, the configuration bits must also be
programmed.

1997 Microchip Technology Inc.                          DS30234D-page 7
PIC16C6X

NOTES:

DS30234D-page 8   1997 Microchip Technology Inc.
3.0 ARCHITECTURAL OVERVIEW                                                 PIC16C6X

The high performance of the PIC16CXX family can be          The PIC16CXX device contains an 8-bit ALU and work-
attributed to a number of architectural features com-       ing register (W). The ALU is a general purpose arith-
monly found in RISC microprocessors. To begin with,         metic unit. It performs arithmetic and Boolean functions
the PIC16CXX uses a Harvard architecture, in which,         between data in the working register and any register
program and data are accessed from separate memo-           file.
ries using separate buses. This improves bandwidth
over traditional von Neumann architecture where pro-        The ALU is 8-bits wide and capable of addition, sub-
gram and data may be fetched from the same memory           traction, shift, and logical operations. Unless otherwise
using the same bus. Separating program and data bus-        mentioned, arithmetic operations are two's comple-
ses further allows instructions to be sized differently     ment in nature. In two-operand instructions, typically
than 8-bit wide data words. Instruction opcodes are         one operand is the working register (W register), the
14-bits wide making it possible to have all single word     other operand is a file register or an immediate con-
instructions. A 14-bit wide program memory access           stant. In single operand instructions, the operand is
bus fetches a 14-bit instruction in a single cycle. A two-  either the W register or a file register.
stage pipeline overlaps fetch and execution of instruc-
tions (Example 3-1). Consequently, all instructions exe-    The W register is an 8-bit working register used for ALU
cute in a single cycle (200 ns @ 20 MHz) except for         operations. It is not an addressable register.
program branches.
                                                            Depending upon the instruction executed, the ALU may
The PIC16C61 addresses 1K x 14 of program memory.           affect the values of the Carry (C), Digit Carry (DC), and
The PIC16C62/62A/R62/64/64A/R64 address 2K x 14 of          Zero (Z) bits in the STATUS register. Bits C and DC
program memory, and the PIC16C63/R63/65/65A/R65             operate as a borrow and digit borrow out bit, respec-
devices address 4K x 14 of program memory. The              tively, in subtraction. See the SUBLW and SUBWF
PIC16C66/67 address 8K x 14 program memory. All             instructions for examples.
program memory is internal.

The PIC16CXX can directly or indirectly address its
register files or data memory. All special function reg-
isters including the program counter are mapped in
the data memory. The PIC16CXX has an orthogonal
(symmetrical) instruction set that makes it possible to
carry out any operation on any register using any
addressing mode. This symmetrical nature and lack of
"special optimal situations" makes programming with
the PIC16CXX simple yet efficient, thus significantly
reducing the learning curve.

1997 Microchip Technology Inc.                            DS30234D-page 9
PIC16C6X

FIGURE 3-1: PIC16C61 BLOCK DIAGRAM

                                   13                         Data Bus         8                  PORTA
                                          Program Counter                                         PORTB
                  EPROM
                  Program          8 Level Stack                RAM                                      RA0
                  Memory               (13-bit)                  File                                    RA1
                                                              Registers                                  RA2
                  1K x 14                                                                                RA3
                                                                36 x 8                                   RA4/T0CKI

Program           14                               RAM Addr(1)            9                              RB0/INT
   Bus
                                                                                                         RB7:RB1
                  Instruction reg                             Addr MUX

                                   Direct Addr 7                        Indirect
                                                                 8 Addr

                                                                FSR reg

                                                                                      STATUS reg
                                   8

                                      Power-up             3              MUX
                                        Timer
                  Instruction                                       ALU
                  Decode &            Oscillator           8
                                   Start-up Timer
                    Control                                        W reg
                                      Power-on
                     Timing             Reset
                  Generation
                                     Watchdog
                                        Timer

OSC1/CLKIN
OSC2/CLKOUT

                                                                Timer0

                                   MCLR VDD, VSS

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

DS30234D-page 10                                                                                  1997 Microchip Technology Inc.
                                                                                                            PIC16C6X

FIGURE 3-2: PIC16C62/62A/R62/64/64A/R64 BLOCK DIAGRAM

                                      13                         Data Bus         8                  PORTA
                                             Program Counter                                         PORTB
                     EPROM/                                                                          PORTC            RA0
                       ROM            8 Level Stack                RAM                               PORTD            RA1
                                          (13-bit)                  File                                              RA2
                     Program                                     Registers                                            RA3
                     Memory                                                                                           RA4/T0CKI
                                                                  128 x 8                                             RA5/SS
                      2K x 14
                                                                                                                      RB0/INT
            Program  14                                       RAM Addr(1) 9
               Bus                                                                                                    RB7:RB1

                     Instruction reg                             Addr MUX                                             RC0/T1OSO/T1CKI(4)
                                                                                                                      RC1/T1OSI(4)
                                      Direct Addr 7                                Indirect                           RC2/CCP1
                                                                             8 Addr                                   RC3/SCK/SCL
                                                                                                                      RC4/SDI/SDA
                                                                 FSR reg                                              RC5/SDO
                                                                                                                      RC6
                                                                                         STATUS reg                   RC7
                                      8
                                                                                                                      RD0/PSP0
                                         Power-up             3              MUX                                      RD1/PSP1
                                           Timer                                                                      RD2/PSP2
                     Instruction                                       ALU                                            RD3/PSP3
                     Decode &            Oscillator           8                                                       RD4/PSP4
                                      Start-up Timer                                                                  RD5/PSP5
                       Control                                        W reg                                           RD6/PSP6
                                         Power-on                                                                     RD7/PSP7
                        Timing             Reset
                     Generation                                                                                       RE0/RD
                                        Watchdog
OSC1/CLKIN                                 Timer                                                                      RE1/WR
OSC2/CLKOUT
                                        Brown-out                                                                     RE2/CS
                                          Reset(3)

                                      MCLR VDD, VSS

                                                                 Parallel Slave                      PORTE
                                                                       Port

Timer1               Timer2           CCP1

                                                                                                            (Note 2)

Timer0               Synchronous
                      Serial Port

Note 1:     Higher order bits are from the STATUS register.
        2:  PORTD, PORTE and the Parallel Slave Port are not available on the PIC16C62/62A/R62.
        3:  Brown-out Reset is not available on the PIC16C62/64.
        4:  Pin functions T1OSI and T1OSO are swapped on the PIC16C62/64.

1997 Microchip Technology Inc.                                                                                      DS30234D-page 11
PIC16C6X

FIGURE 3-3: PIC16C63/R63/65/65A/R65 BLOCK DIAGRAM

                                13                         Data Bus         8                  PORTA
                                       Program Counter                                         PORTB
                  EPROM                                                                                  RA0
                  Program       8 Level Stack                RAM                                         RA1
                  Memory            (13-bit)                  File                                       RA2
                                                           Registers                                     RA3
                  4K x 14                                                                                RA4/T0CKI
                                                            192 x 8                                      RA5/SS

Program           14                                    RAM Addr(1) 9                                    RB0/INT
   Bus
                                                                                                         RB7:RB1
             Instruction reg                               Addr MUX

                                Direct Addr 7                         Indirect
                                                               8 Addr

                                                              FSR reg

                                                                                   STATUS reg  PORTC
                                8

                                   Power-up             3              MUX                               RC0/T1OSO/T1CKI
                                     Timer                                                               RC1/T1OSI/CCP2
                  Instruction                                    ALU                                     RC2/CCP1
                  Decode &         Oscillator           8                                                RC3/SCK/SCL
                                Start-up Timer                                                           RC4/SDI/SDA
                    Control                                     W reg                                    RC5/SDO
                                   Power-on                                                              RC6/TX/CK
                                     Reset                                                               RC7/RX/DT

                     Timing       Watchdog
                  Generation         Timer

OSC1/CLKIN                        Brown-out                                                    PORTD     RD0/PSP0
OSC2/CLKOUT                         Reset(3)                                                   PORTE     RD1/PSP1
                                                                                                         RD2/PSP2
                                MCLR VDD, VSS                                                            RD3/PSP3
                                                                                                         RD4/PSP4
                                                              Parallel Slave                             RD5/PSP5
                                                                    Port                                 RD6/PSP6
                                                                                                         RD7/PSP7
Timer0                Timer1    Timer2
                                                                                                         RE0/RD

                                                                                                         RE1/WR

                                                                                                         RE2/CS

                                                                                               (Note 2)

USART             Synchronous   CCP1                    CCP2
                   Serial Port

Note 1: Higher order bits are from the STATUS register.
        2: PORTD, PORTE and the Parallel Slave Port are not available on the PIC16C63/R63.
        3: Brown-out Reset is not available on the PIC16C65.

DS30234D-page 12                                                                               1997 Microchip Technology Inc.
                                                                                                        PIC16C6X

FIGURE 3-4: PIC16C66/67 BLOCK DIAGRAM

                                  13                         Data Bus         8                  PORTA
                                         Program Counter                                         PORTB
             EPROM                                                                                         RA0
             Program              8 Level Stack                RAM                                         RA1
             Memory                   (13-bit)                  File                                       RA2
                                                             Registers                                     RA3
             8K x 14                                                                                       RA4/T0CKI
                                                              368 x 8                                      RA5/SS

Program      14                                           RAM Addr(1) 9                                    RB0/INT
   Bus
                                                                                                           RB7:RB1
             Instruction reg                                 Addr MUX

                                  Direct Addr 7                         Indirect
                                                                 8 Addr

                                                                FSR reg

                                                                                     STATUS reg  PORTC
                                  8

                                     Power-up             3              MUX                               RC0/T1OSO/T1CKI
                                       Timer                                                               RC1/T1OSI/CCP2
             Instruction                                           ALU                                     RC2/CCP1
             Decode &                Oscillator           8                                                RC3/SCK/SCL
                                  Start-up Timer                                                           RC4/SDI/SDA
               Control                                            W reg                                    RC5/SDO
                                     Power-on                                                              RC6/TX/CK
                                       Reset                                                               RC7/RX/DT

                Timing              Watchdog
             Generation                Timer

OSC1/CLKIN                          Brown-out                                                    PORTD     RD0/PSP0
OSC2/CLKOUT                            Reset                                                     PORTE     RD1/PSP1
                                                                                                           RD2/PSP2
                                  MCLR VDD, VSS                                                            RD3/PSP3
                                                                                                           RD4/PSP4
                                                                Parallel Slave                             RD5/PSP5
                                                                      Port                                 RD6/PSP6
                                                                                                           RD7/PSP7
Timer0           Timer1           Timer2
                                                                                                           RE0/RD

                                                                                                           RE1/WR

                                                                                                           RE2/CS

                                                                                                 (Note 2)

USART        Synchronous          CCP1                    CCP2
              Serial Port

Note 1: Higher order bits are from the STATUS register.
        2: PORTD, PORTE and the Parallel Slave Port are not available on the PIC16C66.

1997 Microchip Technology Inc.                                                                           DS30234D-page 13
PIC16C6X

TABLE 3-1: PIC16C61 PINOUT DESCRIPTION

Pin Name          DIP   SOIC         Pin Type  Buffer      Description
                  Pin#  Pin#                    Type

OSC1/CLKIN        16    16           I         ST/CMOS(1) Oscillator crystal input/external clock source input.

OSC2/CLKOUT       15    15           O         --          Oscillator crystal output. Connects to crystal or resonator in crystal

                                                           oscillator mode. In RC mode, the pin outputs CLKOUT which has

                                                           1/4 the frequency of OSC1, and denotes the instruction cycle rate.

MCLR/VPP          4               4  I/P       ST          Master clear reset input or programming voltage input. This pin is an

                                                           active low reset to the device.

                                                           PORTA is a bi-directional I/O port.

RA0               17    17           I/O       TTL

RA1               18    18           I/O       TTL

RA2               1               1  I/O       TTL

RA3               2               2  I/O       TTL

RA4/T0CKI         3               3  I/O       ST             RA4 can also be the clock input to the Timer0 timer/counter.
                                                              Output is open drain type.

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

                                                           grammed for internal weak pull-up on all inputs.

RB0/INT           6               6  I/O       TTL/ST(2)      RB0 can also be the external interrupt pin.

RB1               7               7  I/O       TTL

RB2               8               8  I/O       TTL

RB3               9               9  I/O       TTL

RB4               10    10           I/O       TTL            Interrupt on change pin.

RB5               11    11           I/O       TTL            Interrupt on change pin.

RB6               12    12           I/O       TTL/ST(3)      Interrupt on change pin. Serial programming clock.

RB7               13    13           I/O       TTL/ST(3)      Interrupt on change pin. Serial programming data.

VSS               5               5  P         --          Ground reference for logic and I/O pins.

VDD               14    14           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 in RC oscillator mode and a CMOS input otherwise.

            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.

DS30234D-page 14                                                                               1997 Microchip Technology Inc.
                                                                                                   PIC16C6X

TABLE 3-2: PIC16C62/62A/R62/63/R63/66 PINOUT DESCRIPTION

Pin Name              Pin# Pin Type       Buffer              Description
                                          Type

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

OSC2/CLKOUT           10             O    --                  Oscillator crystal output. Connects to crystal or resonator in crys-

                                                              tal oscillator mode. In RC mode, the pin outputs CLKOUT which

                                                              has 1/4 the frequency of OSC1, and denotes the instruction cycle

                                                              rate.

MCLR/VPP              1              I/P  ST                  Master clear reset input or programming voltage input. This pin is

                                                              an active low reset to the device.

                                                              PORTA is a bi-directional I/O port.

RA0                   2              I/O  TTL

RA1                   3              I/O  TTL

RA2                   4              I/O  TTL

RA3                   5              I/O  TTL

RA4/T0CKI             6              I/O  ST                         RA4 can also be the clock input to the Timer0 timer/counter.
                                                                     Output is open drain type.

RA5/SS                7              I/O  TTL                        RA5 can also be the slave select for the synchronous serial
                                                                     port.

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

                                                              grammed for internal weak pull-up on all inputs.

RB0/INT               21             I/O  TTL/ST(4)                  RB0 can also be the external interrupt pin.

RB1                   22             I/O  TTL

RB2                   23             I/O  TTL

RB3                   24             I/O  TTL

RB4                   25             I/O  TTL                        Interrupt on change pin.

RB5                   26             I/O  TTL                        Interrupt on change pin.

RB6                   27             I/O  TTL/ST(5)                  Interrupt on change pin. Serial programming clock.

RB7                   28             I/O  TTL/ST(5)                  Interrupt on change pin. Serial programming data.

                                                              PORTC is a bi-directional I/O port.

RC0/T1OSO(1)/T1CKI    11             I/O  ST                         RC0 can also be the Timer1 oscillator output(1) or Timer1
RC1/T1OSI(1)/CCP2(2)
                                                                     clock input.

                      12             I/O  ST                         RC1 can also be the Timer1 oscillator input(1) or Capture2

                                                                     input/Compare2 output/PWM2 output(2).

RC2/CCP1              13             I/O  ST                         RC2 can also be the Capture1 input/Compare1 out-
                                                                     put/PWM1 output.

RC3/SCK/SCL           14             I/O  ST                         RC3 can also be the synchronous serial clock input/output
                                                                     for both SPI and I2C modes.

RC4/SDI/SDA           15             I/O  ST                         RC4 can also be the SPI Data In (SPI mode) or
                                                                     data I/O (I2C mode).

RC5/SDO               16             I/O  ST                         RC5 can also be the SPI Data Out (SPI mode).
RC6/TX/CK(2)
                      17             I/O  ST                         RC6 can also be the USART Asynchronous Transmit(2) or
RC7/RX/DT(2)                                                         Synchronous Clock(2).
                      18             I/O  ST
                                                                     RC7 can also be the USART Asynchronous Receive(2) or
                                                                     Synchronous Data(2).

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

VDD                   20             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:  Pin functions T1OSO and T1OSI are reversed on the PIC16C62.
        4:
        5:  The USART and CCP2 are not available on the PIC16C62/62A/R62.

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

            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.

1997 Microchip Technology Inc.                                                                        DS30234D-page 15
PIC16C6X

TABLE 3-3: PIC16C64/64A/R64/65/65A/R65/67 PINOUT DESCRIPTION

Pin Name          DIP             PLCC  TQFP    Pin               Buffer     Description
                  Pin#            Pin#  MQFP   Type                Type
                                         Pin#

OSC1/CLKIN        13              14    30     I ST/CMOS(3) Oscillator crystal input/external clock source input.

OSC2/CLKOUT       14              15    31     O                  --         Oscillator crystal output. Connects to crystal or resonator in

                                                                             crystal oscillator mode. In RC mode, the pin outputs CLK-

                                                                             OUT which has 1/4 the frequency of OSC1, and denotes the

                                                                             instruction cycle rate.

MCLR/VPP          1               2     18     I/P                ST         Master clear reset input or programming voltage input. This

                                                                             pin is an active low reset to the device.

                                                                             PORTA is a bi-directional I/O port.

RA0               2               3     19     I/O                TTL

RA1               3               4     20     I/O                TTL

RA2               4               5     21     I/O                TTL

RA3               5               6     22     I/O                TTL

RA4/T0CKI         6               7     23     I/O                ST         RA4 can also be the clock input to the Timer0
                                                                             timer/counter. Output is open drain type.

RA5/SS            7               8     24     I/O                TTL        RA5 can also be the slave select for the synchronous
                                                                             serial port.

                                                                             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      I/O                TTL/ST(4)  RB0 can also be the external interrupt pin.

RB1               34              37    9      I/O                TTL

RB2               35              38    10     I/O                TTL

RB3               36              39    11     I/O                TTL

RB4               37              41    14     I/O                TTL        Interrupt on change pin.

RB5               38              42    15     I/O                TTL        Interrupt on change pin.

RB6               39              43    16     I/O                TTL/ST(5)  Interrupt on change pin. Serial programming clock.

RB7               40              44    17     I/O                TTL/ST(5)  Interrupt on change pin. Serial programming data.

                                                                             PORTC is a bi-directional I/O port.

RC0/T1OSO(1)/T1CKI 15             16    32     I/O                ST         RC0 can also be the Timer1 oscillator output(1) or

                                                                             Timer1 clock input.

RC1/T1OSI(1)/CCP2(2) 16           18    35     I/O                ST         RC1 can also be the Timer1 oscillator input(1) or

                                                                             Capture2 input/Compare2 output/PWM2 output(2).

RC2/CCP1          17              19    36     I/O                ST         RC2 can also be the Capture1 input/Compare1 out-
                                                                             put/PWM1 output.

RC3/SCK/SCL       18              20    37     I/O                ST         RC3 can also be the synchronous serial clock input/out-
                                                                             put for both SPI and I2C modes.

RC4/SDI/SDA       23              25    42     I/O                ST         RC4 can also be the SPI Data In (SPI mode) or
                                                                             data I/O (I2C mode).

RC5/SDO           24              26    43     I/O                ST         RC5 can also be the SPI Data Out (SPI mode).
RC6/TX/CK(2)
                  25              27    44     I/O                ST         RC6 can also be the USART Asynchronous Transmit(2)
RC7/RX/DT(2)                                                                 or Synchronous Clock(2).
                  26              29    1      I/O                ST
                                                                             RC7 can also be the USART Asynchronous Receive(2)
                                                                             or Synchronous Data(2).

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

Note 1:           -- = Not used             TTL = TTL input                  ST = Schmitt Trigger input
        2:
        3:  Pin functions T1OSO and T1OSI are reversed on the PIC16C64.
        4:
        5:  CCP2 and the USART are not available on the PIC16C64/64A/R64.
        6:
            This buffer is a Schmitt Trigger input when configured in RC oscillator mode and a CMOS input otherwise.

            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 as general purpose I/O and a TTL input when used in the Parallel Slave

            Port mode (for interfacing to a microprocessor bus).

DS30234D-page 16                                                                                       1997 Microchip Technology Inc.
                                                                                                         PIC16C6X

TABLE 3-3: PIC16C64/64A/R64/65/65A/R65/67 PINOUT DESCRIPTION (Cont.'d)

Pin Name    DIP                   PLCC  TQFP    Pin               Buffer     Description
            Pin#                  Pin#  MQFP   Type                Type
                                         Pin#

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

                                                                             for interfacing to a microprocessor bus.

RD0/PSP0    19                    21    38     I/O                ST/TTL(6)
RD1/PSP1
RD2/PSP2    20                    22    39     I/O                ST/TTL(6)
RD3/PSP3
RD4/PSP4    21                    23    40     I/O                ST/TTL(6)
RD5/PSP5
RD6/PSP6    22                    24    41     I/O                ST/TTL(6)
RD7/PSP7
            27                    30    2      I/O                ST/TTL(6)

            28                    31    3      I/O                ST/TTL(6)

            29                    32    4      I/O                ST/TTL(6)

            30                    33    5      I/O                ST/TTL(6)

                                                                             PORTE is a bi-directional I/O port.

RE0/RD      8                     9     25     I/O                ST/TTL(6)  RE0 can also be read control for the parallel slave port.
RE1/WR
RE2/CS      9                     10    26     I/O                ST/TTL(6)  RE1 can also be write control for the parallel slave port.

            10                    11    27     I/O                ST/TTL(6)  RE2 can also be select control for the parallel slave port.

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, 12,13, --                                    --         These pins are not internally connected. These pins should

                                  28,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:  Pin functions T1OSO and T1OSI are reversed on the PIC16C64.
        4:
        5:  CCP2 and the USART are not available on the PIC16C64/64A/R64.
        6:
            This buffer is a Schmitt Trigger input when configured in RC oscillator mode and a CMOS input otherwise.

            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 as general purpose I/O and a TTL input when used in the Parallel Slave

            Port mode (for interfacing to a microprocessor bus).

1997 Microchip Technology Inc.                                                                                      DS30234D-page 17
PIC16C6X

3.1 Clocking Scheme/Instruction Cycle                      3.2 Instruction Flow/Pipelining
The clock input (from OSC1) is internally divided by
four to generate four non-overlapping quadrature           An "Instruction Cycle" consists of four Q cycles (Q1,
clocks namely Q1, Q2, Q3, and Q4. Internally, the pro-     Q2, Q3, and Q4). The instruction fetch and execute are
gram counter (PC) is incremented every Q1, the             pipelined such that fetch takes one instruction cycle
instruction is fetched from the program memory and         while decode and execute takes another instruction
latched into the instruction register in Q4. The instruc-  cycle. However, due to the pipelining, each instruction
tion is decoded and executed during the following Q1       effectively executes in one cycle. If an instruction
through Q4. The clock and instruction execution flow is    causes the program counter to change (e.g. GOTO)
shown in Figure 3-5.                                       then two cycles are required to complete the instruction
                                                           (Example 3-1).
FIGURE 3-5: CLOCK/INSTRUCTION CYCLE
                                                           A fetch cycle begins with the program counter (PC)
                                                           incrementing in Q1.

                                                           In the execution cycle, the fetched instruction is latched
                                                           into the "Instruction Register (IR)" in cycle Q1. This
                                                           instruction is then decoded and executed during the
                                                           Q2, Q3, and Q4 cycles. Data memory is read during Q2
                                                           (operand read) and written during Q4 (destination
                                                           write).

                OSC1    Q1 Q2 Q3 Q4               Q1 Q2 Q3 Q4                Q1 Q2 Q3 Q4                  Internal
                    Q1                                                                                    Phase
                                          PC                      PC+1                       PC+2         Clock
                    Q2           Fetch INST (PC)         Fetch INST (PC+1)           Fetch INST (PC+2)
                    Q3       Execute INST (PC-1)          Execute INST (PC)          Execute INST (PC+1)

                   Q4
                   PC
(Program counter)
  OSC2/CLKOUT
         (RC mode)

EXAMPLE 3-1: INSTRUCTION PIPELINE FLOW

                        Tcy0        Tcy1                      Tcy2           Tcy3  Tcy4                   Tcy5
                                 Execute 1
1. MOVLW 55h            Fetch 1                            Execute 2
                                  Fetch 2                   Fetch 3
2. MOVWF PORTB

3. CALL SUB_1                                                         Execute 3

4. BSF PORTA, BIT3 (Forced NOP)                                       Fetch 4      Flush

5. Instruction @ address SUB_1                                                     Fetch SUB_1 Execute SUB_1

All instructions are single cycle, except for any program branches. These take two cycles since the fetch
instruction is "flushed" from the pipeline while the new instruction is being fetched and then executed.

DS30234D-page 18                                                                   1997 Microchip Technology Inc.
                                                                                                        PIC16C6X

4.0 MEMORY ORGANIZATION                                        FIGURE 4-2:                              PIC16C62/62A/R62/64/64A/
                                                                                                        R64 PROGRAM MEMORY
Applicable Devices                                                                                      MAP AND STACK
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                                                                        PC<12:0>
4.1 Program Memory Organization
                                                                                                                           13
                                                               CALL, RETURN

The PIC16C6X family has a 13-bit program counter               RETFIE, RETLW
capable of addressing an 8K x 14 program memory
space. The amount of program memory available to                                                        Stack Level 1
each device is listed below:                                                                                    

                                                                                                        Stack Level 8

Device         Program                Address Range                                                     Reset Vector           0000h
               Memory
                                                               User Memory                              Peripheral Interrupt Vector 0004h
PIC16C61       1K x 14                0000h-03FFh                 Space                                                                             0005h
PIC16C62       2K x 14                0000h-07FFh
PIC16C62A      2K x 14                0000h-07FFh                                                       On-chip Program
PIC16CR62      2K x 14                0000h-07FFh                                                             Memory
PIC16C63       4K x 14                0000h-0FFFh
PIC16CR63      4K x 14                0000h-0FFFh                                                                              07FFh
PIC16C64       2K x 14                0000h-07FFh                                                                              0800h
PIC16C64A      2K x 14                0000h-07FFh
PIC16CR64      2K x 14                0000h-07FFh                                                                              1FFFh
PIC16C65       4K x 14                0000h-0FFFh
PIC16C65A      4K x 14                0000h-0FFFh              FIGURE 4-3:                              PIC16C63/R63/65/65A/R65
PIC16CR65      4K x 14                0000h-0FFFh                                                       PROGRAM MEMORY MAP
PIC16C66       8K x 14                0000h-1FFFh                                                       AND STACK
PIC16C67       8K x 14                0000h-1FFFh
                                                                                                        PC<12:0>

For those devices with less than 8K program memory,            CALL, RETURN                                            13
accessing a location above the physically implemented
address will cause a wraparound.                               RETFIE, RETLW

The reset vector is at 0000h and the interrupt vector is                                                Stack Level 1
at 0004h.                                                                                                      

                                                                                                        Stack Level 8

FIGURE 4-1: PIC16C61 PROGRAM                                                                            Reset Vector           0000h
                     MEMORY MAP AND STACK
                                                                                                        Peripheral Interrupt Vector 0004h
                                                                                                                                                     0005h

               PC<12:0>

CALL, RETURN                      13

RETFIE, RETLW                                                                                           On-chip Program
User Memory                                                                                             Memory (Page 0)
   Space      Stack Level 1                                                                                                    07FFh
                                                                                           User MemoryOn-chip Program       0800h
                                                                                              Space     Memory (Page 1)
              Stack Level 8

               Reset Vector           0000h

           Peripheral Interrupt Vector 0004h
                                                        0005h

              On-chip Program                                                                                                  0FFFh
                    Memory                                                                                                     1000h

                                      03FFh
                                      0400h

                                                                                                                               1FFFh

                                      1FFFh

1997 Microchip Technology Inc.                                                                                           DS30234D-page 19
PIC16C6X

FIGURE 4-4: PIC16C66/67 PROGRAM                                  For the PIC16C61, general purpose register locations
                     MEMORY MAP AND STACK                        8Ch-AFh of Bank 1 are not physically implemented.
                                                                 These locations are mapped into 0Ch-2Fh of Bank 0.

                  PC<12:0>                                       FIGURE 4-5: PIC16C61 REGISTER FILE
                                                                                      MAP
CALL, RETURN                     13

RETFIE, RETLW

                  Stack Level 1                                  File Address                          File Address
                                                                      00h
                                                                         01h    INDF(1)  INDF(1)       80h
                  Stack Level 8                                           02h   TMR0
                                                                          03h    PCL
                                                                          04h  STATUS    OPTION        81h
                                                                          05h    FSR
                  Reset Vector       0000h                                06h  PORTA     PCL           82h
                                                                          07h  PORTB
             Peripheral Interrupt Vector 0004h                            08h            STATUS        83h
                                                          0005h           09h  PCLATH
                                                                          0Ah  INTCON
                                                                          0Bh            FSR           84h
                                                                          0Ch
User Memory  On-chip Program                                                             TRISA         85h
   Space     Memory (Page 0)
                                     07FFh                                               TRISB         86h
             On-chip Program         0800h
             Memory (Page 1)                                                                           87h
                                     0FFFh                                                             88h
             On-chip Program         1000h
             Memory (Page 2)                                                                           89h
                                     17FFh
             On-chip Program         1800h                                               PCLATH        8Ah
             Memory (Page 3)
                                                                                         INTCON        8Bh

                                                                                                       8Ch

                                                                               General     Mapped
                                                                               Purpose   in Bank 0(2)
                                                                               Register

                                     1FFFh

                                                                 2Fh                                   AFh

4.2 Data Memory Organization                                     30h                                   B0h

Applicable Devices                                               7Fh                                   FFh
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                                               Bank 0    Bank 1
The data memory is partitioned into multiple banks
which contain the General Purpose Registers and the              Unimplemented data memory location; read as '0'.
Special Function Registers. Bits RP1 and RP0 are the             Note 1: Not a physical register.
bank select bits.
                                                                         2: These locations are unimplemented in
RP1:RP0 (STATUS<6:5>)                                                         Bank 1. Any access to these locations will
= 00  Bank0                                                                  access the corresponding Bank 0 register.
= 01  Bank1
= 10  Bank2
= 11  Bank3

Each bank extends up to 7Fh (128 bytes). The lower
locations of each bank are reserved for the Special
Function Registers. Above the Special Function Regis-
ters are General Purpose Registers, implemented as
static RAM. All implemented banks contain special
function registers. Some "high use" special function
registers from one bank may be mirrored in another
bank for code reduction and quicker access.

4.2.1 GENERAL PURPOSE REGISTERS

These registers are accessed either directly or indi-
rectly through the File Select Register (FSR)
(Section 4.5).

DS30234D-page 20                                                                        1997 Microchip Technology Inc.
                                                                                   PIC16C6X

FIGURE 4-6: PIC16C62/62A/R62/64/64A/                       FIGURE 4-7: PIC16C63/R63/65/65A/R65
                     R64 REGISTER FILE MAP                                      REGISTER FILE MAP

File Address                              File Address     File Address                      File Address
                                             80h                                                 80h
00h           INDF(1)    INDF(1)             81h           00h           INDF(1)    INDF(1)      81h
                        OPTION               82h                                   OPTION        82h
01h           TMR0                           83h           01h           TMR0                    83h
                          PCL                84h                                     PCL         84h
02h           PCL       STATUS               85h           02h           PCL       STATUS        85h
                                             86h                                                 86h
03h           STATUS      FSR                87h           03h           STATUS      FSR         87h
                         TRISA               88h                                    TRISA        88h
04h           FSR        TRISB               89h           04h           FSR        TRISB        89h
                         TRISC               8Ah                                    TRISC        8Ah
05h           PORTA     TRISD(2)             8Bh           05h           PORTA     TRISD(2)      8Bh
                        TRISE(2)             8Ch                                   TRISE(2)      8Ch
06h           PORTB     PCLATH                             06h           PORTB     PCLATH
                        INTCON                                                     INTCON        8Dh
07h           PORTC                                        07h           PORTC
                           PIE1                                                      PIE1
08h           PORTD(2)                                     08h           PORTD(2)    PIE2

              PORTE(2)                                     09h           PORTE(2)
09h

0Ah           PCLATH                                       0Ah           PCLATH

0Bh           INTCON                                       0Bh           INTCON

0Ch           PIR1                                         0Ch           PIR1

0Dh                                       8Dh              0Dh           PIR2

0Eh           TMR1L               PCON    8Eh              0Eh           TMR1L     PCON      8Eh

0Fh           TMR1H                       8Fh              0Fh           TMR1H               8Fh

10h           T1CON                       90h              10h           T1CON               90h

11h           TMR2                        91h              11h           TMR2                91h

12h           T2CON               PR2     92h              12h           T2CON     PR2       92h

13h           SSPBUF              SSPADD  93h              13h           SSPBUF    SSPADD    93h

14h           SSPCON    SSPSTAT           94h              14h           SSPCON    SSPSTAT   94h

15h           CCPR1L                      95h              15h           CCPR1L              95h

16h           CCPR1H                      96h              16h           CCPR1H              96h

17h           CCP1CON                     97h              17h           CCP1CON             97h

18h                                       98h              18h           RCSTA     TXSTA     98h

                                                           19h           TXREG     SPBRG     99h

                                                           1Ah           RCREG               9Ah

                                                           1Bh           CCPR2L              9Bh

1Fh                                                   9Fh  1Ch           CCPR2H              9Ch
20h
                                                      A0h  1Dh           CCP2CON             9Dh
              General             General
              Purpose             Purpose                  1Eh                               9Eh
              Register            Register
                                                           1Fh                               9Fh
                                                      BFh
                                                     C0h   20h                               A0h

                                                                         General   General

                                                                         Purpose   Purpose

7Fh                                       FFh              7Fh           Register  Register  FFh

              Bank 0              Bank 1                                 Bank 0    Bank 1

Unimplemented data memory location; read as '0'.           Unimplemented data memory location; read as '0'.

Note 1: Not a physical register.                           Note 1: Not a physical register
        2: PORTD and PORTE are not available on                    2: PORTD and PORTE are not available on
             the PIC16C62/62A/R62.                                      the PIC16C63/R63.

1997 Microchip Technology Inc.                                                   DS30234D-page 21
PIC16C6X

FIGURE 4-8: PIC16C66/67 DATA MEMORY MAP

                                                                                                         File
                                                                                                      Address

Indirect addr.(*) 00h   Indirect addr.(*) 80h             Indirect addr.(*)  100h  Indirect addr.(*)  180h
                                                                TMR0         101h       OPTION        181h
TMR0              01h   OPTION 81h                               PCL         102h         PCL         182h
                                                                             103h      STATUS         183h
PCL               02h   PCL        82h                        STATUS         104h         FSR         184h
                                                                 FSR         105h       TRISB         185h
STATUS 03h              STATUS 83h                                           106h                     186h
                                                              PORTB          107h      PCLATH         187h
FSR               04h   FSR        84h                                       108h      INTCON         188h
                                                              PCLATH         109h                     189h
PORTA             05h   TRISA      85h                        INTCON         10Ah       General       18Ah
                                                                             10Bh       Purpose       18Bh
PORTB 06h               TRISB      86h                        General        10Ch       Register      18Ch
                                                              Purpose        10Dh      16 Bytes       18Dh
PORTC 07h               TRISC      87h                        Register       10Eh                     18Eh
                                                              16 Bytes       10Fh                     18Fh
PORTD (1) 08h           TRISD (1) 88h                                        110h                     190h
PORTE (1) 09h                                                                111h                     191h
                        TRISE (1) 89h                                        112h                     192h
                                                                             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

                  1Eh              9Eh

                  1Fh              9Fh

                  20h              A0h                                                                1A0h

General                 General                            General                 General
Purpose                                                    Purpose                 Purpose
Register                Purpose                            Register                Register
96 Bytes                                                   80 Bytes                80 Bytes
                        Register
                   7Fh                                    accesses                 accesses
Bank 0                  80 Bytes                          70h-7Fh            16Fh  70h-7Fh            1EFh
                                           EFh            in Bank 0          170h  in Bank 0          1F0h

                        accesses F0h                      Bank 2             17Fh   Bank 3            1FFh

                        70h-7Fh

                        in Bank 0  FFh

                        Bank 1

       Unimplemented data memory locations, read as '0'.
* Not a physical register.

These registers are not implemented on the PIC16C66.

Note: The upper 16 bytes of data memory in banks 1, 2, and 3 are mapped in Bank 0. This may require
            relocation of data memory usage in the user application code if upgrading to the PIC16C66/67.

DS30234D-page 22                                                                   1997 Microchip Technology Inc.
                                                                                                               PIC16C6X

4.2.2 SPECIAL FUNCTION REGISTERS:                                  The special function registers can be classified into two
                                                                   sets (core and peripheral). The registers associated
The Special Function Registers are registers used by               with the "core" functions are described in this section
the CPU and peripheral modules for controlling the                 and those related to the operation of the peripheral fea-
desired operation of the device. These registers are               tures are described in the section of that peripheral fea-
implemented as static RAM.                                         ture.

TABLE 4-1: SPECIAL FUNCTION REGISTERS FOR THE PIC16C61

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
                                                                                                                          resets(3)

Bank 0

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

01h         TMR0    Timer0 module's register                                                                   xxxx xxxx uuuu uuuu

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

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

04h(1) FSR          Indirect data memory address pointer                                                       xxxx xxxx uuuu uuuu

05h         PORTA   --             --         --     PORTA Data Latch when written: PORTA pins when read       ---x xxxx ---u uuuu

06h         PORTB PORTB Data Latch when written: PORTB pins when read                                          xxxx xxxx uuuu uuuu

07h         --      Unimplemented                                                                              --         --

08h         --      Unimplemented                                                                              --         --

09h         --      Unimplemented                                                                              --         --

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

0Bh(1) INTCON       GIE            --         T0IE         INTE    RBIE   T0IF   INTF   RBIF 0-00 000x 0-00 000u

Bank 1

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

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

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

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

84h(1) FSR          Indirect data memory address pointer                                                       xxxx xxxx uuuu uuuu

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

86h         TRISB   PORTB Data Direction Control Register                                                      1111 1111 1111 1111

87h                Unimplemented                                                                              --         --

88h                Unimplemented                                                                              --         --

89h                Unimplemented                                                                              --         --

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

8Bh(1) INTCON       GIE            --         T0IE         INTE    RBIE   T0IF   INTF   RBIF 0-00 000x 0-00 000u

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented locations read as '0'.
            Shaded locations are unimplemented and read as `0'
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose con-
            tents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer Reset.
        4:  The IRP and RP1 bits are reserved on the PIC16C61, always maintain these bits clear.

1997 Microchip Technology Inc.                                                                               DS30234D-page 23
PIC16C6X

TABLE 4-2: SPECIAL FUNCTION REGISTERS FOR THE PIC16C62/62A/R62

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(3)

Bank 0

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

01h         TMR0     Timer0 module's register                                                                xxxx xxxx uuuu uuuu

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

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

04h(1) FSR           Indirect data memory address pointer                                                    xxxx xxxx uuuu uuuu

05h         PORTA    --             -- PORTA Data Latch when written: PORTA pins when read                   --xx xxxx --uu uuuu

06h         PORTB PORTB Data Latch when written: PORTB pins when read                                        xxxx xxxx uuuu uuuu

07h         PORTC PORTC Data Latch when written: PORTC pins when read                                        xxxx xxxx uuuu uuuu

08h         --       Unimplemented                                                                           --         --

09h         --       Unimplemented                                                                           --         --

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

0Bh(1) INTCON        GIE     PEIE              T0IE        INTE     RBIE     T0IF              INTF   RBIF 0000 000x 0000 000u

0Ch         PIR1     (6)            (6)        --          --       SSPIF CCP1IF TMR2IF TMR1IF 00-- 0000 00-- 0000

0Dh         --       Unimplemented                                                                           --         --

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

11h         TMR2     Timer2 module's register                                                                0000 0000 0000 0000

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

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

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

15h         CCPR1L Capture/Compare/PWM1 (LSB)                                                                xxxx xxxx uuuu uuuu

16h         CCPR1H Capture/Compare/PWM1 (MSB)                                                                xxxx xxxx uuuu uuuu

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

18h-1Fh     --       Unimplemented                                                                           --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The BOR bit is reserved on the PIC16C62, always maintain this bit set.
        5:  The IRP and RP1 bits are reserved on the PIC16C62/62A/R62, always maintain these bits clear.
        6:  PIE1<7:6> and PIR1<7:6> are reserved on the PIC16C62/62A/R62, always maintain these bits clear.

DS30234D-page 24                                                                                       1997 Microchip Technology Inc.
                                                                                                          PIC16C6X

TABLE 4-2: SPECIAL FUNCTION REGISTERS FOR THE PIC16C62/62A/R62 (Cont.'d)

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(3)

Bank 1

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

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

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

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

84h(1) FSR           Indirect data memory address pointer                                                 xxxx xxxx uuuu uuuu

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

86h         TRISB    PORTB Data Direction Register                                                        1111 1111 1111 1111

87h         TRISC    PORTC Data Direction Register                                                        1111 1111 1111 1111

88h              --  Unimplemented                                                                        --         --

89h              --  Unimplemented                                                                        --         --

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

8Bh(1) INTCON        GIE          PEIE       T0IE          INTE     RBIE    T0IF   INTF   RBIF 0000 000x 0000 000u

8Ch         PIE1     (6)            (6)      --            --       SSPIE CCP1IE TMR2IE TMR1IE 00-- 0000 00-- 0000

8Dh              --  Unimplemented                                                                        --         --

8Eh         PCON     --             --       --            --           --  --     POR    BOR(4) ---- --qq ---- --uu

8Fh              --  Unimplemented                                                                        --         --

90h              --  Unimplemented                                                                        --         --

91h              --  Unimplemented                                                                        --         --

92h         PR2      Timer2 Period Register                                                               1111 1111 1111 1111

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

94h         SSPSTAT  --             --       D/A           P            S   R/W    UA     BF --00 0000 --00 0000

95h-9Fh          --  Unimplemented                                                                        --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The BOR bit is reserved on the PIC16C62, always maintain this bit set.
        5:  The IRP and RP1 bits are reserved on the PIC16C62/62A/R62, always maintain these bits clear.
        6:  PIE1<7:6> and PIR1<7:6> are reserved on the PIC16C62/62A/R62, always maintain these bits clear.

1997 Microchip Technology Inc.                                                                          DS30234D-page 25
                                                                                                            PIC16C6X

TABLE 4-3: SPECIAL FUNCTION REGISTERS FOR THE PIC16C63/R63

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(3)

Bank 0

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

01h         TMR0     Timer0 module's register                                                                xxxx xxxx uuuu uuuu

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

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

04h(1) FSR           Indirect data memory address pointer                                                    xxxx xxxx uuuu uuuu

05h         PORTA    --             -- PORTA Data Latch when written: PORTA pins when read                   --xx xxxx --uu uuuu

06h         PORTB PORTB Data Latch when written: PORTB pins when read                                        xxxx xxxx uuuu uuuu

07h         PORTC PORTC Data Latch when written: PORTC pins when read                                        xxxx xxxx uuuu uuuu

08h         --       Unimplemented                                                                           --         --

09h         --       Unimplemented                                                                           --         --

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

0Bh(1) INTCON        GIE          PEIE         T0IE        INTE     RBIE     T0IF              INTF   RBIF 0000 000x 0000 000u

0Ch         PIR1     (5)            (5)        RCIF        TXIF     SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

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

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

11h         TMR2     Timer2 module's register                                                                0000 0000 0000 0000

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

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

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

15h         CCPR1L Capture/Compare/PWM1 (LSB)                                                                xxxx xxxx uuuu uuuu

16h         CCPR1H Capture/Compare/PWM1 (MSB)                                                                xxxx xxxx uuuu uuuu

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

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

19h         TXREG USART Transmit Data Register                                                               0000 0000 0000 0000

1Ah         RCREG USART Receive Data Register                                                                0000 0000 0000 0000

1Bh         CCPR2L Capture/Compare/PWM2 (LSB)                                                                xxxx xxxx uuuu uuuu

1Ch         CCPR2H Capture/Compare/PWM2 (MSB)                                                                xxxx xxxx uuuu uuuu

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

1Eh-1Fh     --       Unimplemented                                                                           --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The IRP and RP1 bits are reserved on the PIC16C63/R63, always maintain these bits clear.
        5:  PIE1<7:6> and PIR1<7:6> are reserved on the PIC16C63/R63, always maintain these bits clear.

1997 Microchip Technology Inc.                                                                             DS30234D-page 26
                                                                                                          PIC16C6X

TABLE 4-3: SPECIAL FUNCTION REGISTERS FOR THE PIC16C63/R63 (Cont.'d)

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(3)

Bank 1

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

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

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

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

84h(1) FSR           Indirect data memory address pointer                                                            xxxx xxxx uuuu uuuu

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

86h         TRISB    PORTB Data Direction Register                                                                   1111 1111 1111 1111

87h         TRISC    PORTC Data Direction Register                                                                   1111 1111 1111 1111

88h              --  Unimplemented                                                                                   --         --

89h              --  Unimplemented                                                                                   --         --

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

8Bh(1) INTCON        GIE          PEIE       T0IE          INTE     RBIE    T0IF   INTF   RBIF                       0000 000x 0000 000u

8Ch         PIE1     (5)            (5)      RCIE          TXIE     SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

8Eh         PCON     --             --       --            --           --  --     POR    BOR ---- --qq ---- --uu

8Fh              --  Unimplemented                                                                                   --         --

90h              --  Unimplemented                                                                                   --         --

91h              --  Unimplemented                                                                                   --         --

92h         PR2      Timer2 Period Register                                                                          1111 1111 1111 1111

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

94h         SSPSTAT  --             --       D/A           P            S   R/W    UA     BF --00 0000 --00 0000

95h              --  Unimplemented                                                                                   --         --

96h              --  Unimplemented                                                                                   --         --

97h              --  Unimplemented                                                                                   --         --

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

99h(2) SPBRG Baud Rate Generator Register                                                                            0000 0000 0000 0000

9Ah              --  Unimplemented                                                                                   --         --

9Bh              --  Unimplemented                                                                                   --         --

9Ch              --  Unimplemented                                                                                   --         --

9Dh              --  Unimplemented                                                                                   --         --

9Eh              --  Unimplemented                                                                                   --         --

9Fh              --  Unimplemented                                                                                   --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The IRP and RP1 bits are reserved on the PIC16C63/R63, always maintain these bits clear.
        5:  PIE1<7:6> and PIR1<7:6> are reserved on the PIC16C63/R63, always maintain these bits clear.

1997 Microchip Technology Inc.                                                                                     DS30234D-page 27
PIC16C6X

TABLE 4-4: SPECIAL FUNCTION REGISTERS FOR THE PIC16C64/64A/R64

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(3)

Bank 0

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

01h         TMR0     Timer0 module's register                                                                xxxx xxxx uuuu uuuu

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

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

04h(1) FSR           Indirect data memory address pointer                                                    xxxx xxxx uuuu uuuu

05h         PORTA    --             -- PORTA Data Latch when written: PORTA pins when read                   --xx xxxx --uu uuuu

06h         PORTB PORTB Data Latch when written: PORTB pins when read                                        xxxx xxxx uuuu uuuu

07h         PORTC PORTC Data Latch when written: PORTC pins when read                                        xxxx xxxx uuuu uuuu

08h         PORTD PORTD Data Latch when written: PORTD pins when read                                        xxxx xxxx uuuu uuuu

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

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

0Bh(1) INTCON        GIE     PEIE              T0IE        INTE     RBIE     T0IF              INTF   RBIF 0000 000x 0000 000u

0Ch         PIR1     PSPIF          (6)        --          --       SSPIF CCP1IF TMR2IF TMR1IF 00-- 0000 00-- 0000

0Dh         --       Unimplemented                                                                           --         --

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

11h         TMR2     Timer2 module's register                                                                0000 0000 0000 0000

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

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

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

15h         CCPR1L Capture/Compare/PWM1 (LSB)                                                                xxxx xxxx uuuu uuuu

16h         CCPR1H Capture/Compare/PWM1 (MSB)                                                                xxxx xxxx uuuu uuuu

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

18h-1Fh     --       Unimplemented                                                                           --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The BOR bit is reserved on the PIC16C64, always maintain this bit set.
        5:  The IRP and RP1 bits are reserved on the PIC16C64/64A/R64, always maintain these bits clear.
        6:  PIE1<6> and PIR1<6> are reserved on the PIC16C64/64A/R64, always maintain these bits clear.

DS30234D-page 28                                                                                       1997 Microchip Technology Inc.
                                                                                                          PIC16C6X

TABLE 4-4: SPECIAL FUNCTION REGISTERS FOR THE PIC16C64/64A/R64 (Cont.'d)

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(3)

Bank 1

80h(1) INDF          Addressing this location uses contents of FSR to address data memory (not a physical register)  0000 0000 0000 0000
                                                                                                                     1111 1111 1111 1111
81h         OPTION   RBPU INTEDG T0CS                      T0SE     PSA     PS2    PS1                 PS0           0000 0000 0000 0000
                                                                                                                     0001 1xxx 000q quuu
82h(1) PCL           Program Counter's (PC) Least Significant Byte                                                   xxxx xxxx uuuu uuuu
                                                                                                                     --11 1111 --11 1111
83h(1) STATUS        IRP(5)  RP1(5)          RP0           TO       PD      Z      DC                  C             1111 1111 1111 1111
                                                                                                                     1111 1111 1111 1111
84h(1) FSR           Indirect data memory address pointer

85h         TRISA    --             -- PORTA Data Direction Register

86h         TRISB    PORTB Data Direction Register

87h         TRISC    PORTC Data Direction Register

88h         TRISD    PORTD Data Direction Register                                                                   1111 1111 1111 1111

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

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

8Bh(1) INTCON        GIE          PEIE       T0IE          INTE     RBIE    T0IF   INTF                RBIF 0000 000x 0000 000u

8Ch         PIE1     PSPIE          (6)      --            --       SSPIE CCP1IE TMR2IE TMR1IE 00-- 0000 00-- 0000

8Dh              --  Unimplemented                                                                                   --         --

8Eh         PCON     --             --       --            --           --  --     POR    BOR(4) ---- --qq ---- --uu

8Fh              --  Unimplemented                                                                                   --         --

90h              --  Unimplemented                                                                                   --         --

91h              --  Unimplemented                                                                                   --         --

92h         PR2      Timer2 Period Register                                                                          1111 1111 1111 1111

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

94h         SSPSTAT  --             --       D/A           P            S   R/W    UA                  BF --00 0000 --00 0000

95h-9Fh          --  Unimplemented                                                                                   --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The BOR bit is reserved on the PIC16C64, always maintain this bit set.
        5:  The IRP and RP1 bits are reserved on the PIC16C64/64A/R64, always maintain these bits clear.
        6:  PIE1<6> and PIR1<6> are reserved on the PIC16C64/64A/R64, always maintain these bits clear.

1997 Microchip Technology Inc.                                                                                     DS30234D-page 29
PIC16C6X

TABLE 4-5: SPECIAL FUNCTION REGISTERS FOR THE PIC16C65/65A/R65

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(3)

Bank 0

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

01h         TMR0     Timer0 module's register                                                                xxxx xxxx uuuu uuuu

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

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

04h(1) FSR           Indirect data memory address pointer                                                    xxxx xxxx uuuu uuuu

05h         PORTA    --             -- PORTA Data Latch when written: PORTA pins when read                   --xx xxxx --uu uuuu

06h         PORTB PORTB Data Latch when written: PORTB pins when read                                        xxxx xxxx uuuu uuuu

07h         PORTC PORTC Data Latch when written: PORTC pins when read                                        xxxx xxxx uuuu uuuu

08h         PORTD PORTD Data Latch when written: PORTD pins when read                                        xxxx xxxx uuuu uuuu

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

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

0Bh(1) INTCON        GIE     PEIE              T0IE        INTE     RBIE     T0IF              INTF   RBIF 0000 000x 0000 000u

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

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

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

11h         TMR2     Timer2 module's register                                                                0000 0000 0000 0000

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

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

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

15h         CCPR1L Capture/Compare/PWM1 (LSB)                                                                xxxx xxxx uuuu uuuu

16h         CCPR1H Capture/Compare/PWM1 (MSB)                                                                xxxx xxxx uuuu uuuu

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

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

19h         TXREG USART Transmit Data Register                                                               0000 0000 0000 0000

1Ah         RCREG USART Receive Data Register                                                                0000 0000 0000 0000

1Bh         CCPR2L Capture/Compare/PWM2 (LSB)                                                                xxxx xxxx uuuu uuuu

1Ch         CCPR2H Capture/Compare/PWM2 (MSB)                                                                xxxx xxxx uuuu uuuu

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

1Eh-1Fh     --       Unimplemented                                                                           --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The BOR bit is reserved on the PIC16C65, always maintain this bit set.
        5:  The IRP and RP1 bits are reserved on the PIC16C65/65A/R65, always maintain these bits clear.
        6:  PIE1<6> and PIR1<6> are reserved on the PIC16C65/65A/R65, always maintain these bits clear.

DS30234D-page 30                                                                                       1997 Microchip Technology Inc.
                                                                                                          PIC16C6X

TABLE 4-5: SPECIAL FUNCTION REGISTERS FOR THE PIC16C65/65A/R65 (Cont.'d)

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(3)

Bank 1

80h(1) INDF          Addressing this location uses contents of FSR to address data memory (not a physical register)  0000 0000 0000 0000
                                                                                                                     1111 1111 1111 1111
81h         OPTION   RBPU INTEDG T0CS                      T0SE     PSA     PS2    PS1                 PS0           0000 0000 0000 0000
                                                                                                                     0001 1xxx 000q quuu
82h(1) PCL           Program Counter's (PC) Least Significant Byte                                                   xxxx xxxx uuuu uuuu
                                                                                                                     --11 1111 --11 1111
83h(1) STATUS        IRP(5)  RP1(5)          RP0           TO       PD      Z      DC                  C             1111 1111 1111 1111
                                                                                                                     1111 1111 1111 1111
84h(1) FSR           Indirect data memory address pointer

85h         TRISA    --             -- PORTA Data Direction Register

86h         TRISB    PORTB Data Direction Register

87h         TRISC    PORTC Data Direction Register

88h         TRISD    PORTD Data Direction Register                                                                   1111 1111 1111 1111

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

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

8Bh(1) INTCON        GIE          PEIE       T0IE          INTE     RBIE    T0IF   INTF                RBIF 0000 000x 0000 000u

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

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

8Eh         PCON     --             --       --            --           --  --     POR    BOR(4) ---- --qq ---- --uu

8Fh              --  Unimplemented                                                                                   --         --

90h              --  Unimplemented                                                                                   --         --

91h              --  Unimplemented                                                                                   --         --

92h         PR2      Timer2 Period Register                                                                          1111 1111 1111 1111

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

94h         SSPSTAT  --             --       D/A           P            S   R/W    UA                  BF --00 0000 --00 0000

95h              --  Unimplemented                                                                                   --         --

96h              --  Unimplemented                                                                                   --         --

97h              --  Unimplemented                                                                                   --         --

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

99h         SPBRG Baud Rate Generator Register                                                                       0000 0000 0000 0000

9Ah              --  Unimplemented                                                                                   --         --

9Bh              --  Unimplemented                                                                                   --         --

9Ch              --  Unimplemented                                                                                   --         --

9Dh              --  Unimplemented                                                                                   --         --

9Eh              --  Unimplemented                                                                                   --         --

9Fh              --  Unimplemented                                                                                   --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from either bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  The BOR bit is reserved on the PIC16C65, always maintain this bit set.
        5:  The IRP and RP1 bits are reserved on the PIC16C65/65A/R65, always maintain these bits clear.
        6:  PIE1<6> and PIR1<6> are reserved on the PIC16C65/65A/R65, always maintain these bits clear.

1997 Microchip Technology Inc.                                                                                     DS30234D-page 31
PIC16C6X

TABLE 4-6: SPECIAL FUNCTION REGISTERS FOR THE PIC16C66/67

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(3)

Bank 0

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

01h         TMR0     Timer0 module's register                                                                xxxx xxxx uuuu uuuu

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

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

04h(1) FSR           Indirect data memory address pointer                                                    xxxx xxxx uuuu uuuu

05h         PORTA    --             -- PORTA Data Latch when written: PORTA pins when read                   --xx xxxx --uu uuuu

06h         PORTB PORTB Data Latch when written: PORTB pins when read                                        xxxx xxxx uuuu uuuu

07h         PORTC PORTC Data Latch when written: PORTC pins when read                                        xxxx xxxx uuuu uuuu

08h(5) PORTD PORTD Data Latch when written: PORTD pins when read                                             xxxx xxxx uuuu uuuu

09h(5) PORTE         --             --         --          --       --       RE2               RE1    RE0 ---- -xxx ---- -uuu

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

0Bh(1) INTCON        GIE       PEIE            T0IE        INTE     RBIE     T0IF              INTF   RBIF 0000 000x 0000 000u

0Ch         PIR1     PSPIF(6)       (4)        RCIF        TXIF     SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

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

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

11h         TMR2     Timer2 module's register                                                                0000 0000 0000 0000

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

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

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

15h         CCPR1L Capture/Compare/PWM1 (LSB)                                                                xxxx xxxx uuuu uuuu

16h         CCPR1H Capture/Compare/PWM1 (MSB)                                                                xxxx xxxx uuuu uuuu

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

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

19h         TXREG USART Transmit Data Register                                                               0000 0000 0000 0000

1Ah         RCREG USART Receive Data Register                                                                0000 0000 0000 0000

1Bh         CCPR2L Capture/Compare/PWM2 (LSB)                                                                xxxx xxxx uuuu uuuu

1Ch         CCPR2H Capture/Compare/PWM2 (MSB)                                                                xxxx xxxx uuuu uuuu

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

1Eh-1Fh     --       Unimplemented                                                                           --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from any bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  PIE1<6> and PIR1<6> are reserved on the PIC16C66/67, always maintain these bits clear.
        5:  PORTD, PORTE, TRISD, and TRISE are not implemented on the PIC16C66, read as '0'.
        6:  PSPIF (PIR1<7>) and PSPIE (PIE1<7>) are reserved on the PIC16C66, maintain these bits clear.

DS30234D-page 32                                                                                       1997 Microchip Technology Inc.
                                                                                                          PIC16C6X

TABLE 4-6: SPECIAL FUNCTION REGISTERS FOR THE PIC16C66/67 (Cont.'d)

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(3)

Bank 1

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

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

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

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

84h(1) FSR           Indirect data memory address pointer                                                     xxxx xxxx uuuu uuuu

85h         TRISA    --             -- PORTA Data Direction Register                                          --11 1111 --11 1111
                                                                                                              1111 1111 1111 1111
86h         TRISB    PORTB Data Direction Register                                                            1111 1111 1111 1111

87h         TRISC    PORTC Data Direction Register

88h(5) TRISD         PORTD Data Direction Register                                                            1111 1111 1111 1111

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

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

8Bh(1) INTCON        GIE          PEIE       T0IE          INTE     RBIE    T0IF   INTF                RBIF 0000 000x 0000 000u

8Ch         PIE1     PSPIE(6)       (4)      RCIE          TXIE     SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

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

8Eh         PCON     --             --       --            --           --  --     POR                 BOR ---- --qq ---- --uu

8Fh              --  Unimplemented                                                                            --         --

90h              --  Unimplemented                                                                            --         --

91h              --  Unimplemented                                                                            --         --

92h         PR2      Timer2 Period Register                                                                   1111 1111 1111 1111

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

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

95h              --  Unimplemented                                                                            --         --

96h              --  Unimplemented                                                                            --         --

97h              --  Unimplemented                                                                            --         --

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

99h         SPBRG Baud Rate Generator Register                                                                0000 0000 0000 0000

9Ah              --  Unimplemented                                                                            --         --

9Bh              --  Unimplemented                                                                            --         --

9Ch              --  Unimplemented                                                                            --         --

9Dh              --  Unimplemented                                                                            --         --

9Eh              --  Unimplemented                                                                            --         --

9Fh              --  Unimplemented                                                                            --         --

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from any bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  PIE1<6> and PIR1<6> are reserved on the PIC16C66/67, always maintain these bits clear.
        5:  PORTD, PORTE, TRISD, and TRISE are not implemented on the PIC16C66, read as '0'.
        6:  PSPIF (PIR1<7>) and PSPIE (PIE1<7>) are reserved on the PIC16C66, maintain these bits clear.

1997 Microchip Technology Inc.                                                                              DS30234D-page 33
PIC16C6X

TABLE 4-6: SPECIAL FUNCTION REGISTERS FOR THE PIC16C66/67 (Cont.'d)

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(3)

Bank 2

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

101h TMR0          Timer0 module's register                                                                        xxxx xxxx uuuu uuuu

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

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

104h(1) FSR        Indirect data memory address pointer                                                            xxxx xxxx uuuu uuuu

105h         --    Unimplemented                                                                                   --         --
                   PORTB Data Latch when written: PORTB pins when read
106h PORTB         Unimplemented                                                                                   xxxx xxxx uuuu uuuu
                   Unimplemented
107h         --    Unimplemented                                                                                   --         --

108h         --                                                                                                    --         --

109h         --                                                                                                    --         --

10Ah(1,2) PCLATH   --             --         -- Write Buffer for the upper 5 bits of the Program Counter           ---0 0000 ---0 0000

10Bh(1) INTCON     GIE    PEIE               T0IE        INTE     RBIE   T0IF   INTF   RBIF                        0000 000x 0000 000u

10Ch-        --    Unimplemented                                                                                   --         --
10Fh

Bank 3

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

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

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

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

184h(1) FSR        Indirect data memory address pointer                                                            xxxx xxxx uuuu uuuu

185h         --    Unimplemented                                                                                   --         --

186h        TRISB  PORTB Data Direction Register                                                                   1111 1111 1111 1111

187h         --    Unimplemented                                                                                   --         --

188h         --    Unimplemented                                                                                   --         --

189h         --    Unimplemented                                                                                   --         --

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

18Bh(1) INTCON     GIE    PEIE               T0IE        INTE     RBIE   T0IF   INTF   RBIF 0000 000x 0000 000u

18Ch-        --    Unimplemented                                                                                   --         --
19Fh

Legend:     x = unknown, u = unchanged, q = value depends on condition, - = unimplemented location read as '0'.
            Shaded locations are unimplemented, read as `0'.
Note 1:     These registers can be addressed from any bank.
        2:  The upper byte of the Program Counter (PC) is not directly accessible. PCLATH is a holding register for the PC whose
            contents are transferred to the upper byte of the program counter. (PC<12:8>)
        3:  Other (non power-up) resets include external reset through MCLR and the Watchdog Timer reset.
        4:  PIE1<6> and PIR1<6> are reserved on the PIC16C66/67, always maintain these bits clear.
        5:  PORTD, PORTE, TRISD, and TRISE are not implemented on the PIC16C66, read as '0'.
        6:  PSPIF (PIR1<7>) and PSPIE (PIE1<7>) are reserved on the PIC16C66, maintain these bits clear.

DS30234D-page 34                                                                        1997 Microchip Technology Inc.
                                                                                         PIC16C6X

4.2.2.1 STATUS REGISTER                                         It is recommended, therefore, that only BCF, BSF,
                                                                SWAPF and MOVWF instructions are used to alter the
Applicable Devices                                              STATUS register because these instructions do not
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                affect the Z, C or DC bits from the STATUS register. For
                                                                other instructions, not affecting any status bits, see the
The STATUS register, shown in Figure 4-9, contains the          "Instruction Set Summary."
arithmetic status of the ALU, the RESET status and the
bank select bits for data memory.                                   Note 1: For those devices that do not use bits IRP
                                                                                and RP1 (STATUS<7:6>), maintain these
The STATUS register can be the destination for any                              bits clear to ensure upward compatibility
instruction, as with any other register. If the STATUS                          with future products.
register is the destination for an instruction that affects
the Z, DC or C bits, then the write to these three bits is          Note 2: The C and DC bits operate as a borrow
disabled. These bits are set or cleared according to the                        and digit borrow bit, respectively, in sub-
device logic. Furthermore, the TO and PD bits are not                           traction. See the SUBLW and SUBWF
writable. Therefore, the result of an instruction with the                      instructions for examples.
STATUS register as destination may be different than
intended.

For example, CLRF STATUS will clear the upper-three
bits and set the Z bit. This leaves the STATUS register
as 000u u1uu (where u = unchanged).

FIGURE 4-9: 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
                                                                                 C
IRP       RP1  RP0                TO   PD                    Z            DC             R = Readable bit
                                                                                   bit0  W = Writable bit
bit7                                                                                     - n = Value at POR reset
                                                                                         x = unknown

bit 7:    IRP: RegIster Bank Select bit (used for indirect addressing)
          1 = Bank 2, 3 (100h - 1FFh)
          0 = Bank 0, 1 (00h - FFh)

bit 6-5:  RP1:RP0: Register Bank Select bits (used for direct addressing)
          11 = Bank 3 (180h - 1FFh)
          10 = Bank 2 (100h - 17Fh)
          01 = Bank 1 (80h - FFh)
          00 = Bank 0 (00h - 7Fh)
          Each bank is 128 bytes.

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

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

bit 2:    Z: Zero bit
          1 = The result of an arithmetic or logic operation is zero
          0 = The result of an arithmetic or logic operation is not zero

bit 1:    DC: Digit carry/borrow bit (for ADDWF, ADDLW,SUBLW, and SUBWF instructions) (For borrow the polarity is reversed).
          1 = A carry-out from the 4th low order bit of the result occurred
          0 = No carry-out from the 4th low order bit of the result

bit 0:    C: Carry/borrow bit (for ADDWF, ADDLW,SUBLW, and SUBWF instructions)( For borrow the polarity is reversed).
          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
          Note: 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.

1997 Microchip Technology Inc.                                                         DS30234D-page 35
PIC16C6X

4.2.2.2 OPTION REGISTER                                   Note:           To achieve a 1:1 prescaler assignment for
                                                                          TMR0 register, assign the prescaler to the
Applicable Devices                                                        Watchdog Timer.
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

The OPTION register is a readable and writable regis-
ter which contains various control bits to configure the
TMR0/WDT prescaler, the external INT interrupt,
TMR0, and the weak pull-ups on PORTB.

FIGURE 4-10: OPTION 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       R = Readable bit
  RBPU    INTEDG  T0CS     T0SE    PSA    PS2              PS1             PS0        W = Writable bit
bit7                                                                                  U = Unimplemented bit,
                                                                                bit0
                                                                                              read as `0'
                                                                                      - n = Value at POR reset

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

DS30234D-page 36                                                                      1997 Microchip Technology Inc.
                                                                                           PIC16C6X

4.2.2.3 INTCON REGISTER                                                 Note:  Interrupt flag bits get set when an interrupt
                                                                               condition occurs regardless of the state of
Applicable Devices                                                             its corresponding enable bit or the global
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                               enable bit, GIE (INTCON<7>).

The INTCON Register is a readable and writable regis-
ter which contains the various enable and flag bits for
the TMR0 register overflow, RB port change and exter-
nal RB0/INT pin interrupts.

FIGURE 4-11: 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       R = Readable bit
    GIE     PEIE    T0IE          INTE   RBIE                 T0IF      INTF   RBIF        W = Writable bit
                                                                                           U = Unimplemented bit,
bit7                                                                                 bit0
                                                                                                   read as `0'
                                                                                           - n = Value at POR reset
                                                                                           x = unknown

bit 7:      GIE:(1) Global Interrupt Enable bit
bit 6:      1 = Enables all un-masked interrupts
            0 = Disables all interrupts

            PEIE:(2) Peripheral Interrupt Enable bit
            1 = Enables all un-masked peripheral interrupts
            0 = Disables all peripheral interrupts

bit 5:      T0IE: TMR0 Overflow Interrupt Enable bit
            1 = Enables the TMR0 overflow interrupt
            0 = Disables the TMR0 overflow 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:      T0IF: TMR0 Overflow Interrupt Flag bit
            1 = TMR0 register 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
            1 = At least one of the RB7:RB4 pins changed state (see Section 5.2 to clear the interrupt)
            0 = None of the RB7:RB4 pins have changed state

Note 1:     For the PIC16C61/62/64/65, if an interrupt occurs while the GIE bit is being cleared, the GIE bit may unintentionally
        2:  be re-enabled by the RETFIE instruction in the user's Interrupt Service Routine. Refer to Section 13.5 for a detailed
            description.
            The PEIE bit (bit6) is unimplemented on the PIC16C61, read as '0'.

Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the
global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to
enabling an interrupt.

1997 Microchip Technology Inc.                                                                         DS30234D-page 37
PIC16C6X                                                       Note: Bit PEIE (INTCON<6>) must be set to
                                                                           enable any peripheral interrupt.
4.2.2.4 PIE1 REGISTER
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
This register contains the individual enable bits for the
peripheral interrupts.

FIGURE 4-12: PIE1 REGISTER FOR PIC16C62/62A/R62 (ADDRESS 8Ch)

RW-0 R/W-0        U-0  U-0  R/W-0 R/W-0                         R/W-0   R/W-0
                                                               TMR2IE  TMR1IE
      --  --      --   --   SSPIE CCP1IE                                            R = Readable bit
                                                                              bit0  W = Writable bit
bit7                                                                                U = Unimplemented bit,

                                                                                            read as `0'
                                                                                    - n = Value at POR reset

bit 7-6:  Reserved: Always maintain these bits clear.
bit 5-4:
bit 3:    Unimplemented: Read as '0'

bit 2:    SSPIE: Synchronous Serial Port Interrupt Enable bit
          1 = Enables the SSP interrupt
bit 1:    0 = Disables the SSP interrupt

bit 0:    CCP1IE: CCP1 Interrupt Enable bit
          1 = Enables the CCP1 interrupt
          0 = Disables the CCP1 interrupt

          TMR2IE: TMR2 to PR2 Match Interrupt Enable bit
          1 = Enables the TMR2 to PR2 match interrupt
          0 = Disables the TMR2 to PR2 match interrupt

          TMR1IE: TMR1 Overflow Interrupt Enable bit
          1 = Enables the TMR1 overflow interrupt
          0 = Disables the TMR1 overflow interrupt

DS30234D-page 38                                                                     1997 Microchip Technology Inc.
                                                                                           PIC16C6X

FIGURE 4-13: PIE1 REGISTER FOR PIC16C63/R63/66 (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       R = Readable bit
     --     --   RCIE             TXIE       SSPIE    CCP1IE          TMR2IE  TMR1IE       W = Writable bit
                                                                                           U = Unimplemented bit,
bit7                                                                                 bit0
                                                                                                   read as `0'
                                                                                           - n = Value at POR reset

bit 7-6: Reserved: Always maintain these bits clear.

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

FIGURE 4-14: PIE1 REGISTER FOR PIC16C64/64A/R64 (ADDRESS 8Ch)

R/W-0 R/W-0      U-0              U-0        R/W-0 R/W-0 R/W-0                 R/W-0
                                                                              TMR1IE
PSPIE     --     --               --         SSPIE CCP1IE TMR2IE                           R = Readable bit
                                                                                     bit0  W = Writable bit
bit7                                                                                       U = Unimplemented bit,

                                                                                                   read as `0'
                                                                                           - n = Value at POR reset

bit 7:    PSPIE: Parallel Slave Port Read/Write Interrupt Enable bit
          1 = Enables the PSP read/write interrupt
bit 6:    0 = Disables the PSP read/write interrupt
bit 5-4:
bit 3:    Reserved: Always maintain this bit clear.

bit 2:    Unimplemented: Read as '0'

bit 1:    SSPIE: Synchronous Serial Port Interrupt Enable bit
          1 = Enables the SSP interrupt
bit 0:    0 = Disables the SSP interrupt

          CCP1IE: CCP1 Interrupt Enable bit
          1 = Enables the CCP1 interrupt
          0 = Disables the CCP1 interrupt

          TMR2IE: TMR2 to PR2 Match Interrupt Enable bit
          1 = Enables the TMR2 to PR2 match interrupt
          0 = Disables the TMR2 to PR2 match interrupt

          TMR1IE: TMR1 Overflow Interrupt Enable bit
          1 = Enables the TMR1 overflow interrupt
          0 = Disables the TMR1 overflow interrupt

1997 Microchip Technology Inc.                                                           DS30234D-page 39
PIC16C6X

FIGURE 4-15: PIE1 REGISTER FOR PIC16C65/65A/R65/67 (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       R = Readable bit
  PSPIE    --     RCIE   TXIE   SSPIE  CCP1IE TMR2IE                 TMR1IE       W = Writable bit
bit7                                                                              U = Unimplemented bit,
                                                                            bit0
                                                                                          read as `0'
                                                                                  - n = Value at POR reset

bit 7:   PSPIE: Parallel Slave Port Read/Write Interrupt Enable bit
bit 6:   1 = Enables the PSP read/write interrupt
bit 5:   0 = Disables the PSP read/write interrupt
bit 4:
bit 3:   Reserved: Always maintain this bit clear.
bit 2:
bit 1:   RCIE: USART Receive Interrupt Enable bit
bit 0:   1 = Enables the USART receive interrupt
         0 = Disables the USART receive interrupt

         TXIE: USART Transmit Interrupt Enable bit
         1 = Enables the USART transmit interrupt
         0 = Disables the USART transmit interrupt

         SSPIE: Synchronous Serial Port Interrupt Enable bit
         1 = Enables the SSP interrupt
         0 = Disables the SSP interrupt

         CCP1IE: CCP1 Interrupt Enable bit
         1 = Enables the CCP1 interrupt
         0 = Disables the CCP1 interrupt

         TMR2IE: TMR2 to PR2 Match Interrupt Enable bit
         1 = Enables the TMR2 to PR2 match interrupt
         0 = Disables the TMR2 to PR2 match interrupt

         TMR1IE: TMR1 Overflow Interrupt Enable bit
         1 = Enables the TMR1 overflow interrupt
         0 = Disables the TMR1 overflow interrupt

DS30234D-page 40                                                                   1997 Microchip Technology Inc.
                                                                                          PIC16C6X

4.2.2.5 PIR1 REGISTER                                    Note:               Interrupt flag bits get set when an interrupt
                                                                             condition occurs regardless of the state of
Applicable Devices                                                           its corresponding enable bit or the global
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                             enable bit, GIE (INTCON<7>). User soft-
This register contains the individual flag bits for the                      ware should ensure the appropriate inter-
peripheral interrupts.                                                       rupt flag bits are clear prior to enabling an
                                                                             interrupt.

FIGURE 4-16: PIR1 REGISTER FOR PIC16C62/62A/R62 (ADDRESS 0Ch)

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

      --  --  --                  --   SSPIF CCP1IF TMR2IF TMR1IF                         R = Readable bit
                                                                                          W = Writable bit
bit7                                                                                bit0  U = Unimplemented bit,

                                                                                                  read as `0'
                                                                                          - n = Value at POR reset

bit 7-6: Reserved: Always maintain these bits clear.

bit 5-4: Unimplemented: Read as '0'

bit 3:    SSPIF: Synchronous Serial Port Interrupt Flag bit
          1 = The transmission/reception is complete (must be cleared in software)
          0 = Waiting to transmit/receive

bit 2:    CCP1IF: CCP1 Interrupt Flag bit
          Capture Mode
          1 = A TMR1 register capture occurred (must be cleared in software)
          0 = No TMR1 register capture occurred
          Compare Mode
          1 = A TMR1 register compare match occurred (must be cleared in software)
          0 = No TMR1 register compare match occurred
          PWM Mode
          Unused in this mode

bit 1:    TMR2IF: TMR2 to PR2 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 overflow occurred (must be cleared in software)
          0 = No TMR1 register overflow occurred

      Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the
      global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to
      enabling an interrupt.

1997 Microchip Technology Inc.                                                          DS30234D-page 41
PIC16C6X

FIGURE 4-17: PIR1 REGISTER FOR PIC16C63/R63/66 (ADDRESS 0Ch)

  R/W-0  R/W-0     R-0  R-0   R/W-0                    R/W-0   R/W-0         R/W-0       R = Readable bit
     --    --     RCIF  TXIF  SSPIF                   CCP1IF  TMR2IF        TMR1IF       W = Writable bit
                                                                                         U = Unimplemented bit,
bit7                                                                               bit0
                                                                                                 read as `0'
                                                                                         - n = Value at POR reset

bit 7-6: Reserved: Always maintain these bits clear.

bit 5:   RCIF: USART Receive Interrupt Flag bit
         1 = The USART receive buffer is full (cleared by reading RCREG)
         0 = The USART receive buffer is empty

bit 4:   TXIF: USART Transmit Interrupt Flag bit
         1 = The USART transmit buffer is empty (cleared by writing to TXREG)
         0 = The USART transmit buffer is full

bit 3:   SSPIF: Synchronous Serial Port Interrupt Flag bit
         1 = The transmission/reception is complete (must be cleared in software)
         0 = Waiting to transmit/receive

bit 2:   CCP1IF: CCP1 Interrupt Flag bit
         Capture Mode
         1 = A TMR1 register capture occurred (must be cleared in software)
         0 = No TMR1 register capture occurred
         Compare Mode
         1 = A TMR1 register compare match occurred (must be cleared in software)
         0 = No TMR1 register compare match occurred
         PWM Mode
         Unused in this mode

bit 1:   TMR2IF: TMR2 to PR2 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 overflow occurred (must be cleared in software)
         0 = No TMR1 register overflow occurred

Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the
global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to
enabling an interrupt.

DS30234D-page 42                                                                         1997 Microchip Technology Inc.
                                                                                         PIC16C6X

FIGURE 4-18: PIR1 REGISTER FOR PIC16C64/64A/R64 (ADDRESS 0Ch)

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

PSPIF     --  --                  --   SSPIF CCP1IF TMR2IF TMR1IF                        R = Readable bit
                                                                                         W = Writable bit
bit7                                   bit0                                              U = Unimplemented bit,

                                                                                                 read as `0'
                                                                                         - n = Value at POR reset

bit 7:    PSPIF: Parallel Slave Port Interrupt Flag bit
bit 6:    1 = A read or a write operation has taken place (must be cleared in software)
bit 5-4:  0 = No read or write operation has taken place
bit 3:
bit 2:    Reserved: Always maintain this bit clear.

bit 1:    Unimplemented: Read as '0'
bit 0:
          SSPIF: Synchronous Serial Port Interrupt Flag bit
          1 = The transmission/reception is complete (must be cleared in software)
          0 = Waiting to transmit/receive

          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

          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

          TMR1IF: TMR1 Overflow Interrupt Flag bit
          1 = TMR1 register overflow occurred (must be cleared in software)
          0 = No TMR1 register occurred

      Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the
      global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to
      enabling an interrupt.

1997 Microchip Technology Inc.                                                         DS30234D-page 43
PIC16C6X

FIGURE 4-19: PIR1 REGISTER FOR PIC16C65/65A/R65/67 (ADDRESS 0Ch)

  R/W-0  R/W-0     R-0  R-0   R/W-0   R/W-0   R/W-0   R/W-0                             R = Readable bit
  PSPIF    --     RCIF  TXIF  SSPIF  CCP1IF  TMR2IF  TMR1IF                             W = Writable bit
bit7                                                                                    U = Unimplemented bit,
                                                            bit0
                                                                                                read as `0'
                                                                                        - n = Value at POR reset

bit 7:   PSPIF: Parallel Slave Port Interrupt Flag bit
bit 6:   1 = A read or a write operation has taken place (must be cleared in software)
bit 5:   0 = No read or write operation has taken place
bit 4:
bit 3:   Reserved: Always maintain this bit clear.
bit 2:
         RCIF: USART Receive Interrupt Flag bit
bit 1:   1 = The USART receive buffer is full (cleared by reading RCREG)
bit 0:   0 = The USART receive buffer is empty

         TXIF: USART Transmit Interrupt Flag bit
         1 = The USART transmit buffer is empty (cleared by writing to TXREG)
         0 = The USART transmit buffer is full

         SSPIF: Synchronous Serial Port Interrupt Flag bit
         1 = The transmission/reception is complete (must be cleared in software)
         0 = Waiting to transmit/receive

         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

         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

         TMR1IF: TMR1 Overflow Interrupt Flag bit
         1 = TMR1 register overflow occurred (must be cleared in software)
         0 = No TMR1 register overflow occurred

Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the
global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to
enabling an interrupt.

DS30234D-page 44                                                                         1997 Microchip Technology Inc.
                                                                        PIC16C6X

4.2.2.6 PIE2 REGISTER

Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
This register contains the CCP2 interrupt enable bit.

FIGURE 4-20: PIE2 REGISTER (ADDRESS 8Dh)

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

      --  --   --                 --         --        --   --   CCP2IE R = Readable bit

bit7                                                             bit0 W = Writable bit
                                                                         U = Unimplemented bit,

                                                                        read as `0'

                                                                        - n = Value at POR reset

bit 7-1:  Unimplemented: Read as '0'
bit 0:
          CCP2IE: CCP2 Interrupt Enable bit
          1 = Enables the CCP2 interrupt
          0 = Disables the CCP2 interrupt

1997 Microchip Technology Inc.                                        DS30234D-page 45
PIC16C6X

4.2.2.7 PIR2 REGISTER                                     .         Interrupt flag bits get set when an interrupt
                                                                    condition occurs regardless of the state of
Applicable Devices                                           Note:  its corresponding enable bit or the global
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                    enable bit, GIE (INTCON<7>). User soft-
This register contains the CCP2 interrupt flag bit.                 ware should ensure the appropriate inter-
                                                                    rupt flag bits are clear prior to enabling an
                                                                    interrupt.

FIGURE 4-21: PIR2 REGISTER (ADDRESS 0Dh)

    U-0   U-0     U-0  U-0  U-0                      U-0  U-0       R/W-0
     --
bit7      --      --   --   --                       --   --        CCP2IF                R = Readable bit
                                                                                          W = Writable bit
bit 7-1:                                                                            bit0  U = Unimplemented bit,
bit 0:
                                                                                                  read as `0'
                                                                                          - n = Value at POR reset

          Unimplemented: Read as '0'

          CCP2IF: CCP2 Interrupt Flag bit
          Capture Mode
          1 = A TMR1 register capture occurred (must be cleared in software)
          0 = No TMR1 register capture occurred
          Compare Mode
          1 = A TMR1 register compare match occurred (must be cleared in software)
          0 = No TMR1 register compare match occurred
          PWM Mode
          Unused in this mode

Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the
global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to
enabling an interrupt.

DS30234D-page 46                                                                           1997 Microchip Technology Inc.
                                                                                                   PIC16C6X

4.2.2.8 PCON REGISTER                                            Note:  BOR is unknown on Power-on Reset. It
                                                                        must then be set by the user and checked
Applicable Devices                                                      on subsequent resets to see if BOR is
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                        clear, indicating a brown-out has occurred.
                                                                        The BOR status bit is a "don't care" and is
The Power Control register (PCON) contains a flag bit                   not necessarily predictable if the brown-out
to allow differentiation between a Power-on Reset to an                 circuit is disabled (by clearing the BODEN
external MCLR reset or WDT reset. Those devices with                    bit in the Configuration word).
brown-out detection circuitry contain an additional bit to
differentiate a Brown-out Reset condition from a
Power-on Reset condition.

FIGURE 4-22: PCON REGISTER FOR PIC16C62/64/65 (ADDRESS 8Eh)

    U-0   U-0  U-0                U-0  U-0                  U-0  R/W-0 R/W-q
     --
bit7      --   --                 --   --                   --   POR    --    R = Readable bit

bit 7-2:                                                                    bit0 W = Writable bit
bit 1:                                                                              U = Unimplemented bit,

bit 0:                                                                                           read as `0'

                                                                              - n = Value at POR reset

                                                                              q = value depends on conditions

          Unimplemented: Read as '0'

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

          Reserved
          This bit should be set upon a Power-on Reset by user software and maintained as set. Use of this bit as a general
          purpose read/write bit is not recommended, since this may affect upward compatibility with future products.

FIGURE 4-23: PCON REGISTER FOR PIC16C62A/R62/63/R63/64A/R64/65A/R65/66/67
                     (ADDRESS 8Eh)

    U-0   U-0  U-0                U-0  U-0                  U-0  R/W-0 R/W-q
     --
bit7      --   --                 --   --                   --   POR    BOR R = Readable bit

bit 7-2:                                                                    bit0 W = Writable bit
bit 1:                                                                              U = Unimplemented bit,

bit 0:                                                                                           read as `0'

                                                                              - n = Value at POR reset

                                                                              q = value depends on conditions

          Unimplemented: Read as '0'

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

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

1997 Microchip Technology Inc.                                                                   DS30234D-page 47
PIC16C6X

4.3 PCL and PCLATH                                                   Note 1: There are no status bits to indicate stack
                                                                                 overflows or stack underflow conditions.
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                     Note 2: There are no instructions mnemonics
                                                                                 called PUSH or POP. These are actions
The program counter (PC) is 13-bits wide. The low byte                           that occur from the execution of the CALL,
comes from the PCL register, which is a readable and                             RETURN, RETLW, and RETFIE instruc-
writable register. The upper bits (PC<12:8>) are not                             tions, or the vectoring to an interrupt
readable, but are indirectly writable through the                                address
PCLATH register. On any reset, the upper bits of the PC
will be cleared. Figure 4-24 shows the two situations for            4.4 Program Memory Paging
the loading of the PC. The upper example in the figure
shows how the PC is loaded on a write to PCL                         Applicable Devices
(PCLATH<4:0>  PCH). The lower example in the fig-                    61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
ure shows how the PC is loaded during a CALL or GOTO
instruction (PCLATH<4:3>  PCH).                                      PIC16C6X devices are capable of addressing a contin-
                                                                     uous 8K word block of program memory. The CALL and
FIGURE 4-24: 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 two
        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
                                 8      PCL as                       that the desired program memory page is addressed. If
PC                                      destination                  a return from a CALL instruction (or interrupt) is exe-
                                                                     cuted, the entire 13-bit PC is pushed onto the stack.
                    PCLATH<4:0>         ALU                          Therefore, manipulation of the PCLATH<4:3> bits are
        5                                                            not required for the return instructions (which POPs the
                                                                     address from the stack).
                   PCLATH

              PCH  87      PCL                                       Note:  PIC16C6X devices with 4K or less of pro-
      12 11 10                                 0                            gram memory ignore paging bit
PC                                                    GOTO, CALL            PCLATH<4>. The use of PCLATH<4> as a
                                                                            general purpose read/write bit is not rec-
    2 PCLATH<4:3>                     11                                    ommended since this may affect upward
                                                      Opcode <10:0>         compatibility with future products.

                   PCLATH

4.3.1 COMPUTED GOTO

A computed GOTO is accomplished by adding an offset
to the program counter (ADDWF PCL). When doing a
table read using a computed GOTO method, care
should be exercised if the table location crosses a PCL
memory boundary (each 256 word block). Refer to the
application note "Implementing a Table Read" (AN556).

4.3.2 STACK

The PIC16CXX family has an 8 deep x 13-bit wide
hardware stack. The stack space is not part of either
program or data space and the stack pointer is not
readable or writable. The PC is PUSHed onto the stack
when a CALL instruction is executed or an interrupt
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 a POP operation.

The stack operates as a circular buffer. This means that
after the stack has been PUSHed eight times, the ninth
push overwrites the value that was stored from the first
push. The tenth push overwrites the second push (and
so on).

DS30234D-page 48                                                             1997 Microchip Technology Inc.
                                                                                           PIC16C6X

Example 4-1 shows the calling of a subroutine in                 4.5 Indirect Addressing, INDF and FSR
page 1 of the program memory. This example assumes                         Registers
that the PCLATH is saved and restored by the interrupt
service routine (if interrupts are used).                        Applicable Devices
                                                                 61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
EXAMPLE 4-1:   CALL OF A SUBROUTINE IN
               PAGE 1 FROM PAGE 0                                The INDF register is not a physical register. Address-
ORG 0x500                                                        ing the INDF register will cause indirect addressing.
BSF PCLATH,3   ;Select page 1 (800h-FFFh)
BCF PCLATH,4   ;Only on >4K devices                              Indirect addressing is possible by using the INDF reg-
CALL SUB1_P1   ;Call subroutine in                               ister. Any instruction using the INDF register actually
               ;page 1 (800h-FFFh)                               accesses the register pointed to by the File Select Reg-
            :                                                    ister, FSR. Reading the INDF register itself indirectly
            :  ;called subroutine                                (FSR = '0') will produce 00h. Writing to the INDF regis-
            :  ;page 1 (800h-FFFh)                               ter indirectly results in a no-operation (although status
ORG 0x900                                                        bits may be affected). An effective 9-bit address is
SUB1_P1:       ;return to Call subroutine                        obtained by concatenating the 8-bit FSR register and
            :  ;in page 0 (000h-7FFh)                            the IRP bit (STATUS<7>), as shown in Figure 4-25.
            :
RETURN                                                           A simple program to clear RAM location 20h-2Fh using
                                                                 indirect addressing is shown in Example 4-2.

                                                                 EXAMPLE 4-2: INDIRECT ADDRESSING

                                                                 NEXT      movlw  0x20     ;initialize pointer
                                                                 CONTINUE  movwf  FSR      ; to RAM
                                                                           clrf   INDF     ;clear INDF register
                                                                           incf   FSR,F    ;inc pointer
                                                                           btfss  FSR,4    ;all done?
                                                                           goto   NEXT     ;NO, clear next

                                                                           :               ;YES, continue

FIGURE 4-25: DIRECT/INDIRECT ADDRESSING

Direct Addressing                                                                 Indirect Addressing

RP1: RP0 6     from opcode             0                                   IRP 7           FSR         0

bank select location select                                                   bank select       location select
                                                                      11
                                       00      01            10
                                  00h      80h          100h     180h

            Data
            Memory

                                  7Fh      FFh          17Fh     1FFh

                                  Bank 0 Bank 1 Bank 2 Bank 3

For memory map detail see Figure 4-5, Figure 4-6, Figure 4-7, and Figure 4-8.

1997 Microchip Technology Inc.                                                           DS30234D-page 49
PIC16C6X

NOTES:

DS30234D-page 50   1997 Microchip Technology Inc.
                                                                                       PIC16C6X

5.0 I/O PORTS                                                  FIGURE 5-1:  BLOCK DIAGRAM OF THE
                                                                            RA3:RA0 PINS AND THE RA5
Applicable Devices                                                          PIN
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                               Data     D   Q
Some pins for these I/O ports are multiplexed with an          bus
alternate function(s) for the peripheral features on the                CK Q                       VDD
device. In general, when a peripheral is enabled, that         WR                                  P
pin may not be used as a general purpose I/O pin.              Port

5.1 PORTA and TRISA Register                                            Data Latch

Applicable Devices                                                      D   Q                      N    I/O pin(1)
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                               WR        CK Q                      VSS
All devices have a 6-bit wide PORTA, except for the            TRIS     TRIS Latch
PIC16C61 which has a 5-bit wide PORTA.                                                          TTL
                                                                                                input
Pin RA4/T0CKI is a Schmitt Trigger input and an open                                            buffer
drain output. All other RA port pins have TTL input lev-
els and full CMOS output drivers. All pins have data                        RD TRIS
direction bits (TRIS registers) which can configure
these pins as output or input.                                                         Q     D

Setting a bit in the TRISA register puts the correspond-                                  EN
ing output driver in a hi-impedance mode. Clearing a bit
in the TRISA register puts the contents of the output          RD PORT
latch on the selected pin.
                                                               Note 1: I/O pins have protection diodes to VDD and
Reading PORTA register reads the status of the pins                         VSS.
whereas writing to it will write to the port latch. All write
operations are read-modify-write operations. There-                    2: The PIC16C61 does not have an RA5 pin.
fore, a write to a port implies that the port pins are read,
this value is modified, and then written to the port data
latch.

Pin RA4 is multiplexed with Timer0 module clock input
to become the RA4/T0CKI pin.

EXAMPLE 5-1: INITIALIZING PORTA                                FIGURE 5-2: BLOCK DIAGRAM OF THE
                                                                                    RA4/T0CKI PIN
BCF    STATUS, RP0  ;
BCF    STATUS, RP1  ; PIC16C66/67 only                         Data          DQ
CLRF   PORTA        ; Initialize PORTA by                      bus
                    ; clearing output                                         CK Q
BSF    STATUS, RP0  ; data latches                             WR          Data Latch
MOVLW  0xCF         ; Select Bank 1                            PORT
                    ; Value used to
MOVWF  TRISA        ; initialize data                                                           N       I/O pin(1)
                    ; direction
                    ; Set RA<3:0> as inputs                    WR             DQ                VSS
                    ; RA<5:4> as outputs                       TRIS           CK Q
                    ; TRISA<7:6> are always                                TRIS Latch     Schmitt
                    ; read as '0'.                                                        Trigger
                                                                                          input
                                                                                          buffer

                                                                            RD TRIS

                                                                                       Q  D

                                                                                          ENEN

                                                               RD PORT

                                                                TMR0 clock input
                                                               Note 1: I/O pin has protection diodes to VSS only.

1997 Microchip Technology Inc.                                                          DS30234D-page 51
PIC16C6X

TABLE 5-1: PORTA FUNCTIONS

Name              Bit#  Buffer Type Function

RA0               bit0  TTL     Input/output

RA1               bit1  TTL     Input/output

RA2               bit2  TTL     Input/output

RA3               bit3  TTL     Input/output

RA4/T0CKI         bit4  ST      Input/output or external clock input for Timer0.

                                Output is open drain type.

RA5/SS (1)        bit5  TTL     Input/output or slave select input for synchronous serial port.

Legend: TTL = TTL input, ST = Schmitt Trigger input
Note 1: The PIC16C61 does not have PORTA<5> or TRISA<5>, read as `0'.

TABLE 5-2: REGISTERS/BITS ASSOCIATED WITH PORTA

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

05h   PORTA -- --       RA5(1)  RA4    RA3                   RA2    RA1    RA0 --xx xxxx --uu uuuu

85h   TRISA       --    -- PORTA Data Direction Register(1)                       --11 1111 --11 1111

Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used by PORTA.
Note 1: PORTA<5> and TRISA<5> are not implemented on the PIC16C61, read as '0'.

DS30234D-page 52                                                            1997 Microchip Technology Inc.
                                                                                      PIC16C6X

5.2 PORTB and TRISB Register                              This interrupt can wake the device from SLEEP. The
                                                          user, in the interrupt service routine, can clear the inter-
Applicable Devices                                        rupt in the following manner:
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                          a) Any read or write of PORTB. This will end the
PORTB is an 8-bit wide bi-directional port. The corre-          mismatch condition.
sponding data direction register is TRISB. Setting a bit
in the TRISB register puts the corresponding output       b) Clear flag bit RBIF.
driver in a hi-impedance mode. Clearing a bit in the
TRISB register puts the contents of the output latch on   A mismatch condition will continue to set flag bit RBIF.
the selected pin(s).                                      Reading PORTB will end the mismatch condition, and
                                                          allow flag bit RBIF to be cleared.
EXAMPLE 5-2: INITIALIZING PORTB
                                                          This interrupt on mismatch feature, together with soft-
BCF    STATUS, RP0  ;                                     ware configurable pull-ups on these four pins allow
CLRF   PORTB        ; Initialize PORTB by                 easy interface to a keypad and make it possible for
                    ; clearing output                     wake-up on key-depression. Refer to the Embedded
BSF    STATUS, RP0  ; data latches                        Control Handbook, Application Note, "Implementing
MOVLW  0xCF         ; Select Bank 1                       Wake-up on Key Stroke" (AN552).
                    ; Value used to
MOVWF  TRISB        ; initialize data                     Note:     For PIC16C61/62/64/65, if a change on the
                    ; direction                                     I/O pin should occur when a read operation
                    ; Set RB<3:0> as inputs                         is being executed (start of the Q2 cycle),
                    ; RB<5:4> as outputs                            then interrupt flag bit RBIF may not get set.
                    ; RB<7:6> as inputs
                                                          The interrupt on change feature is recommended for
Each of the PORTB pins has a weak internal pull-up. A     wake-up on key depression operation and operations
single control bit can turn on all the pull-ups. This is  where PORTB is only used for the interrupt on change
performed by clearing bit RBPU (OPTION<7>). The           feature. Polling of PORTB is not recommended while
weak pull-up is automatically turned off when the port    using the interrupt on change feature.
pin is configured as an output. The pull-ups are also
disabled on a Power-on Reset.                             FIGURE 5-3:   BLOCK DIAGRAM OF THE
                                                                        RB7:RB4 PINS FOR
Four of PORTB's pins, RB7:RB4, have an interrupt on           RBPU(2)   PIC16C61/62/64/65
change feature. Only pins configured as inputs can            Data bus
cause this interrupt to occur (i.e., any RB7:RB4 pin          WR Port                                  VDD
configured as an output is excluded from the interrupt
on change comparison). The input pins (of RB7:RB4)                                                     P  weak
are compared with the old value latched on the last                                                       pull-up
read of PORTB. The "mismatch" outputs of RB7:RB4
are OR'ed together to generate the RB port change                       Data Latch                          I/O
interrupt with flag bit RBIF (INTCON<0>).                                DQ                                 pin(1)

                                                                          CK

                                                                        TRIS Latch
                                                                         DQ

                                                          WR TRIS                 CK          TTL
                                                                                              Input
                                                                                              Buffer      ST
                                                                                                          Buffer

                                                                        RD TRIS                 Latch
                                                                                              QD

                                                                        RD Port               EN

                                                          Set RBIF

                                                                    From other        QD
                                                                    RB7:RB4 pins

                                                                                              EN

                                                                                                       RD Port

                                                          RB7:RB6 in serial programming mode

                                                          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 RPBU bit (OPTION<7>).

1997 Microchip Technology Inc.                                                              DS30234D-page 53
PIC16C6X

FIGURE 5-4:   BLOCK DIAGRAM OF THE                                  FIGURE 5-5:   BLOCK DIAGRAM OF THE
              RB7:RB4 PINS FOR                                                    RB3:RB0 PINS
  RBPU(2)     PIC16C62A/63/R63/64A/65A/                               RBPU(2)
Data bus     R65/66/67                                              Data bus                                                   VDD
  WR Port                                                            WR Port
                                                                                                              P  weak
                                                                     WR TRIS                                     pull-up
                                        VDD
                                                                                  Data Latch
                                            P  weak                                DQ
                                               pull-up

              Data Latch                                                            CK                                               I/O
               DQ                                                                 TRIS Latch                                         pin(1)
                                                                                   DQ
                CK                             I/O                                                    TTL
                                               pin(1)                               CK                Input
                                                                                                      Buffer
              TRIS Latch
               DQ

WR TRIS           CK                TTL
                                    Input
                                    Buffer     ST                                 RD TRIS
                                               Buffer                             RD Port

              RD TRIS        Latch                                                            QD
                          QD                                                                          EN

              RD Port               EN         Q1                   RB0/INT

Set RBIF

                                                                                  Schmitt Trigger             RD Port
                                                                                  Buffer

From other                QD                   RD Port
RB7:RB4 pins                     EN                 Q3

RB7:RB6 in serial programming mode                                  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 RPBU bit (OPTION<7>).

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 RPBU bit (OPTION<7>).

TABLE 5-3: PORTB FUNCTIONS

Name          Bit# Buffer Type Function

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

RB1                                     weak pull-up.
RB2
RB3           bit1        TTL           Input/output pin. Internal software programmable weak pull-up.
RB4
              bit2        TTL           Input/output pin. Internal software programmable weak pull-up.
RB5
              bit3        TTL           Input/output pin. Internal software programmable weak pull-up.
RB6
              bit4        TTL           Input/output pin (with interrupt on change). Internal software programmable
RB7
                                        weak pull-up.

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

                                        weak pull-up.

              bit6        TTL/ST(2) Input/output pin (with interrupt on change). Internal software programmable

                                        weak pull-up. Serial programming clock.

              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 5-4: SUMMARY OF REGISTERS ASSOCIATED WITH PORTB                                      Value on:  Value on all
                                                                                              POR,    other resets
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0                                 BOR

06h, 106h PORTB RB7 RB6 RB5 RB4 RB3 RB2                                      RB1  RB0 xxxx xxxx uuuu uuuuu
86h, 186h TRISB PORTB Data Direction Register                                PS1            1111 1111 1111 1111
81h, 181h OPTION RBPU INTEDG T0CS T0SE PSA PS2
Legend: x = unknown, u = unchanged. Shaded cells are not used by PORTB.           PS0 1111 1111 1111 1111

DS30234D-page 54                                                                   1997 Microchip Technology Inc.
                                                                                         PIC16C6X

5.3 PORTC and TRISC Register                                 FIGURE 5-6: PORTC BLOCK DIAGRAM

Applicable Devices                                            PORT/PERIPHERAL Select(2)
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                             Peripheral Data Out      0                 VDD
PORTC is an 8-bit wide bi-directional port. Each pin is                                                  P
individually configurable as an input or output through      Data bus D Q
the TRISC register. PORTC is multiplexed with several        WR                                                I/O
peripheral functions (Table 5-5). PORTC pins have            PORT                     1                        pin(1)
Schmitt Trigger input buffers.                                                                          N
                                                                             CK Q
When enabling peripheral functions, care should be                                                     VSS
taken in defining TRIS bits for each PORTC pin. Some                     Data Latch            Schmitt
peripherals override the TRIS bit to make a pin an out-                                        Trigger
put, while other peripherals override the TRIS bit to        WR              DQ             D
make a pin an input. Since the TRIS bit override is in       TRIS             CK Q
effect while the peripheral is enabled, read-modify-
write instructions (BSF, BCF, XORWF) with TRISC as                       TRIS Latch
destination should be avoided. The user should refer to
the corresponding peripheral section for the correct                         RD TRIS
TRIS bit settings.
                                                             Peripheral

                                                             OE(3)                       Q

                                                                         RD                 EN

                                                                         PORT

EXAMPLE 5-3: INITIALIZING PORTC                              Peripheral input

BCF    STATUS, RP0  ;                                        Note 1:     I/O pins have diode protection to VDD and VSS.
BCF    STATUS, RP1  ; PIC16C66/67 only                               2:  Port/Peripheral select signal selects between port
CLRF   PORTC        ; Initialize PORTC by                                data and peripheral output.
                    ; clearing output                                3:  Peripheral OE (output enable) is only activated if
BSF    STATUS, RP0  ; data latches                                       peripheral select is active.
MOVLW  0xCF         ; Select Bank 1
                    ; Value used to
MOVWF  TRISC        ; initialize data
                    ; direction
                    ; Set RC<3:0> as inputs
                    ; RC<5:4> as outputs
                    ; RC<7:6> as inputs

TABLE 5-5: PORTC FUNCTIONS FOR PIC16C62/64

Name                Bit# Buffer Type Function

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

RC1/T1OSO           bit1          ST  Input/output port pin or Timer1 oscillator output
RC2/CCP1
RC3/SCK/SCL         bit2          ST  Input/output port pin or Capture1 input/Compare1 output/PWM1 output
RC4/SDI/SDA
RC5/SDO             bit3          ST  RC3 can also be the synchronous serial clock for both SPI and I2C modes.
RC6
RC7                 bit4          ST  RC4 can also be the SPI Data In (SPI mode) or data I/O (I2C mode).

                    bit5          ST  Input/output port pin or synchronous serial port data output

                    bit6          ST  Input/output port pin

                    bit7          ST  Input/output port pin

Legend: ST = Schmitt Trigger input

1997 Microchip Technology Inc.                                                                DS30234D-page 55
PIC16C6X

TABLE 5-6: PORTC FUNCTIONS FOR PIC16C62A/R62/64A/R64

Name              Bit# Buffer Type Function

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

RC1/T1OSI         bit1  ST           Input/output port pin or Timer1 oscillator input
                                     Input/output port pin or Capture input/Compare output/PWM1 output
RC2/CCP1          bit2  ST           RC3 can also be the synchronous serial clock for both SPI and I2C modes.
                                     RC4 can also be the SPI Data In (SPI mode) or data I/O (I2C mode).
RC3/SCK/SCL       bit3  ST           Input/output port pin or synchronous serial port data output

RC4/SDI/SDA       bit4  ST           Input/output port pin
RC5/SDO                              Input/output port pin
RC6               bit5  ST
RC7
                  bit6  ST

                  bit7  ST

Legend: ST = Schmitt Trigger input

TABLE 5-7: PORTC FUNCTIONS FOR PIC16C63/R63/65/65A/R65/66/67

Name              Bit# Buffer Type Function

RC0/T1OSO/T1CKI bit0    ST           Input/output port pin or Timer1 oscillator output or 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
RC4/SDI/SDA       bit3  ST           RC3 can also be the synchronous serial clock for both SPI and I2C modes.
RC5/SDO
RC6/TX/CK         bit4  ST           RC4 can also be the SPI Data In (SPI mode) or data I/O (I2C mode).
                                     Input/output port pin or synchronous serial port data output
                  bit5  ST
                                     Input/output port pin or USART Asynchronous Transmit, or USART Syn-
                  bit6  ST           chronous Clock

RC7/RX/DT         bit7  ST           Input/output port pin or USART Asynchronous Receive, or USART Syn-
                                     chronous Data

Legend: ST = Schmitt Trigger input

TABLE 5-8: SUMMARY OF REGISTERS ASSOCIATED WITH PORTC

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

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

Legend: x = unknown, u = unchanged.

DS30234D-page 56                                              1997 Microchip Technology Inc.
                                                                                           PIC16C6X

5.4 PORTD and TRISD Register                                        FIGURE 5-7: PORTD BLOCK DIAGRAM
                                                                                         (IN I/O PORT MODE)
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                    Data     D    Q
                                                                    bus
PORTD is an 8-bit port with Schmitt Trigger input buff-             WR          CK                              I/O pin(1)
ers. Each pin is individually configurable as input or out-         PORT
put.                                                                         Data Latch       Schmitt
                                                                    WR         DQ             Trigger
PORTD can be configured as an 8-bit wide micropro-                  TRIS                      input
cessor port (parallel slave port) by setting control bit                                      buffer
PSPMODE (TRISE<4>). In this mode, the input buffers
are TTL.

                                                                              CK
                                                                           TRIS Latch

                                                                                  RD TRIS

                                                                                           Q  D

                                                                                              ENEN

                                                                    RD PORT

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

TABLE 5-9: PORTD FUNCTIONS

Name         Bit#  Buffer Type             Function

RD0/PSP0     bit0   ST/TTL(1)              Input/output port pin or parallel slave port bit0
                    ST/TTL(1)              Input/output port pin or parallel slave port bit1
RD1/PSP1     bit1   ST/TTL(1)              Input/output port pin or parallel slave port bit2
                    ST/TTL(1)              Input/output port pin or parallel slave port bit3
RD2/PSP2     bit2   ST/TTL(1)              Input/output port pin or parallel slave port bit4
                    ST/TTL(1)              Input/output port pin or parallel slave port bit5
RD3/PSP3     bit3   ST/TTL(1)              Input/output port pin or parallel slave port bit6
                    ST/TTL(1)              Input/output port pin or parallel slave port bit7
RD4/PSP4     bit4

RD5/PSP5     bit5

RD6/PSP6     bit6

RD7/PSP7     bit7

Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Buffer is a Schmitt Trigger when in I/O mode, and a TTL buffer when in Parallel Slave Port mode.

TABLE 5-10: SUMMARY OF REGISTERS ASSOCIATED WITH PORTD

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

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

88h   TRISD PORTD Data Direction Register                                                     1111 1111 1111 1111

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

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

1997 Microchip Technology Inc.                                                              DS30234D-page 57
PIC16C6X

5.5 PORTE and TRISE Register                                          FIGURE 5-8: PORTE BLOCK DIAGRAM
                                                                                            (IN I/O PORT MODE)
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                      Data     DQ                           I/O pin(1)
                                                                      bus      CK
PORTE has three pins, RE2/CS, RE1/WR, and
RE0/RD which are individually configurable as inputs                  WR
or outputs. These pins have Schmitt Trigger input buff-               PORT
ers.
                                                                      WR     Data Latch     Schmitt
I/O PORTE becomes control inputs for the micropro-                    TRIS      DQ          Trigger
cessor port when bit PSPMODE (TRISE<4>) is set. In                                          input
this mode, the user must make sure that the                                     CK          buffer
TRISE<2:0> bits are set (pins are configured as digital                      TRIS Latch
inputs). In this mode the input buffers are TTL.
                                                                               RD TRIS
Figure 5-9 shows the TRISE register, which controls
the parallel slave port operation and also controls the
direction of the PORTE pins.

                                                                                         Q  D

                                                                                            ENEN

                                                                      RD PORT

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

FIGURE 5-9: 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
bit7              IBOV PSPMODE --                                                  bit0  R = Readable bit
                                                                                         W = Writable bit
bit 7 :                                                                                  U = Unimplemented bit,
bit 6:
bit 5:                                                                                           read as `0'
bit 4:                                                                                   - n = Value at POR reset
bit 3:
bit 2:   IBF: Input Buffer Full Status bit
bit 1:   1 = A word has been received and is waiting to be read by the CPU
bit 0:   0 = No word has been received

         OBF: Output Buffer Full Status bit
         1 = The output buffer still holds a previously written word
         0 = The output buffer has been read

         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

         PSPMODE: Parallel Slave Port Mode Select bit
         1 = Parallel slave port mode
         0 = General purpose I/O mode

         Unimplemented: Read as '0'

         PORTE Data Direction Bits

         Bit2: Direction Control bit for pin RE2/CS
         1 = Input
         0 = Output

         Bit1: Direction Control bit for pin RE1/WR
         1 = Input
         0 = Output

         Bit0: Direction Control bit for pin RE0/RD
         1 = Input
         0 = Output

DS30234D-page 58                                                                         1997 Microchip Technology Inc.
                                                                                PIC16C6X

TABLE 5-11: PORTE FUNCTIONS

Name    Bit# Buffer Type Function
RE0/RD
        bit0                      ST/TTL(1) Input/output port pin or Read control input in parallel slave port mode.
RE1/WR
                                             RD
RE2/CS
                                             1 = Not a read operation

                                             0 = Read operation. The system reads the PORTD register (if

                                                 chip selected)

        bit1                      ST/TTL(1) Input/output port pin or Write control input in parallel slave port mode.

                                             WR

                                             1 = Not a write operation

                                             0 = Write operation. The system writes to the PORTD register (if

                                                 chip selected)

        bit2                      ST/TTL(1) Input/output port pin or Chip select control input in parallel slave port

                                      mode.

                                             CS

                                             1 = Device is not selected

                                             0 = Device is selected

Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Buffer is a Schmitt Trigger when in I/O mode, and a TTL buffer when in Parallel Slave Port (PSP) mode.

TABLE 5-12: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

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

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

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

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

1997 Microchip Technology Inc.                                                DS30234D-page 59
PIC16C6X

5.6 I/O Programming Considerations                                  EXAMPLE 5-4: READ-MODIFY-WRITE
                                                                                            INSTRUCTIONS ON AN
Applicable Devices                                                                          I/O PORT
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                                    ;Initial PORT settings: PORTB<7:4> Inputs
5.6.1 BI-DIRECTIONAL I/O PORTS
                                                                    ;                     PORTB<3:0> Outputs
Any instruction which writes, operates internally as a
read followed by a write operation. The BCF and BSF                 ;PORTB<7:6> have external pull-ups and are
instructions, for example, read the register into the
CPU, execute the bit operation and write the result back            ;not connected to other circuitry
to the register. Caution must be used when these
instructions are applied to a port with both inputs and             ;
outputs defined. For example, a BSF operation on bit5
of PORTB will cause all eight bits of PORTB to be read              ;                     PORT latch PORT pins
into the CPU. Then the BSF operation takes place on
bit5 and PORTB is written to the output latches. If                 ;                     ---------- ---------
another bit of PORTB is used as a bi-directional I/O pin
(e.g., bit0) and it is defined as an input at this time, the           BCF PORTB, 7  ; 01pp pppp 11pp pppp
input signal present on the pin itself would be read into
the CPU and rewritten to the data latch of this particular             BCF PORTB, 6  ; 10pp pppp 11pp pppp
pin, overwriting the previous content. As long as the pin
stays in the input mode, no problem occurs. However, if                BSF STATUS, RP0 ;
bit0 is switched into output mode later on, the content
of the data latch may now be unknown.                                  BCF TRISB, 7  ; 10pp pppp 11pp pppp

Reading the port register, reads the values of the port                BCF TRISB, 6  ; 10pp pppp 10pp pppp
pins. Writing to the port register writes the value to the
port latch. When using read-modify-write instructions               ;
(ex. BCF, BSF, etc.) on a port, the value of the port pins
is read, the desired operation is done to this value, and           ;Note that the user may have expected the
this value is then written to the port latch.
                                                                    ;pin values to be 00pp pppp. The 2nd BCF
Example 5-4 shows the effect of two sequential
read-modify-write instructions on an I/O port.                      ;caused RB7 to be latched as the pin value

                                                                    ;(high).

                                                                    A pin actively outputting a Low or High should not be
                                                                    driven from external devices at the same time in order
                                                                    to change the level on this pin ("wired-or", "wired-and").
                                                                    The resulting high output currents may damage the
                                                                    chip.

                                                                    5.6.2 SUCCESSIVE OPERATIONS ON I/O PORTS

                                                                    The actual write to an I/O port happens at the end of an
                                                                    instruction cycle, whereas for reading, the data must be
                                                                    valid at the beginning of the instruction cycle
                                                                    (Figure 5-10). Therefore, care must be exercised if a
                                                                    write followed by a read operation is carried out on the
                                                                    same I/O port. The sequence of instructions should be
                                                                    such to allow the pin voltage to stabilize (load depen-
                                                                    dent) before the next instruction which causes that file
                                                                    to be read into the CPU is executed. Otherwise, the
                                                                    previous state of that pin may be read into the CPU
                                                                    rather than the new state. When in doubt, it is better to
                                                                    separate these instructions with a NOP or another
                                                                    instruction not accessing this I/O port.

FIGURE 5-10: SUCCESSIVE I/O OPERATION

              Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4                        Note:

          PC      PC  PC + 1            PC + 2                         PC + 3        This example shows a write to PORTB
Instruction                             NOP                            NOP           followed by a read from PORTB.
              MOVWF PORTB MOVF PORTB,W
   fetched         write to                                                          Note that:
                   PORTB
                                                                                     data setup time = (0.25TCY - TPD)
RB7:RB0
                                                                                     where TCY = instruction cycle
Instruction                                           Port pin         NOP                     TPD = propagation delay
executed                                             sampled here
                                               TPD                                   Therefore, at higher clock frequencies,
                                                                                     a write followed by a read may be prob-
                      MOVWF PORTB MOVF PORTB,W                                       lematic.
                           write to
                           PORTB

DS30234D-page 60                                                                      1997 Microchip Technology Inc.
                                                                                      PIC16C6X

5.7 Parallel Slave Port                                      FIGURE 5-11: PORTD AND PORTE AS A
                                                                                  PARALLEL SLAVE PORT
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67             Data bus                                 RDx
                                                                                  DQ                  pin
PORTD operates as an 8-bit wide parallel slave port
(microprocessor port) when control bit PSPMODE                      WR                TTL
(TRISE<4>) is set. In slave mode it is asynchronously               PORT
readable and writable by the external world through
RD control input (RE0/RD) and WR control input pin                                CK
(RE1/WR).
                                                                   Q               D
It can directly interface to an 8-bit microprocessor data
bus. The external microprocessor can read or write the       RD       ENEN
PORTD latch as an 8-bit latch. Setting PSPMODE               PORT
enables port pin RE0/RD to be the RD input, RE1/WR
to be the WR input and RE2/CS to be the CS (chip             One bit of PORTD
select) input. For this functionality, the corresponding
data direction bits of the TRISE register (TRISE<2:0>)         Set interrupt flag
must be configured as inputs (set).                            PSPIF (PIR1<7>)

There are actually two 8-bit latches, one for data-out                                Read            RD
(from the PIC16/17) and one for data input. The user
writes 8-bit data to PORTD data latch and reads data                                             TTL
from the port pin latch (note that they have the same
address). In this mode, the TRISD register is ignored                                 Chip Select
since the microprocessor is controlling the direction of
data flow.                                                                                   TTL      CS

A write to the PSP occurs when both the CS and WR                                     Write           WR
lines are first detected low. When either the CS or WR
lines become high (level triggered), then the Input                                          TTL
Buffer Full status flag bit IBF (TRISE<7>) is set on the
Q4 clock cycle, following the next Q2 cycle, to signal       Note: I/O pin has protection diodes to VDD and VSS.
the write is complete (Figure 5-12). The interrupt flag bit
PSPIF (PIR1<7>) is also set on the same Q4 clock
cycle. IBF can only be cleared by reading the PORTD
input latch. The input Buffer Overflow status flag bit
IBOV (TRISE<5>) is set if a second write to the Parallel
Slave Port is attempted when the previous byte has not
been read out of the buffer.

A read from the PSP occurs when both the CS and RD
lines are first detected low. The Output Buffer Full sta-
tus flag bit OBF (TRISE<6>) is cleared immediately
(Figure 5-13) indicating that the PORTD latch is waiting
to be read by the external bus. When either the CS or
RD pin becomes high (level triggered), the interrupt flag
bit PSPIF is set on the Q4 clock cycle, following the
next Q2 cycle, indicating that the read is complete.
OBF remains low until data is written to PORTD by the
user firmware.

When not in Parallel Slave Port mode, the IBF and OBF
bits are held clear. However, if flag bit IBOV was previ-
ously set, it must be cleared in firmware.

An interrupt is generated and latched into flag bit
PSPIF when a read or write operation is completed.
PSPIF must be cleared by the user in firmware and the
interrupt can be disabled by clearing the interrupt
enable bit PSPIE (PIE1<7>).

1997 Microchip Technology Inc.                                                      DS30234D-page 61
PIC16C6X

FIGURE 5-12: 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 5-13: 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 5-13: 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 all
                                                                        POR,    other resets
                                                                        BOR

08h  PORTD PSP7 PSP6 PSP5 PSP4 PSP3 PSP2 PSP1 PSP0 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) RCIF(2) TXIF(2) SSPIF CCP1IF TMR2IF TRM1IF 0000 0000 0000 0000

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

Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used by the PSP.
Note 1: These bits are reserved, always maintain these bits clear.

        2: These bits are implemented on the PIC16C65/65A/R65/67 only.

DS30234D-page 62                                                      1997 Microchip Technology Inc.
6.0 OVERVIEW OF TIMER                                                     PIC16C6X
         MODULES
                                                           6.3 Timer2 Overview
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67           Applicable Devices
                                                           61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
All PIC16C6X devices have three timer modules except
for the PIC16C61, which has one timer module. Each         Timer2 is an 8-bit timer with a programmable prescaler
module can generate an interrupt to indicate that an       and a programmable postscaler, as well as an 8-bit
event has occurred (i.e., timer overflow). Each of these   Period Register (PR2). Timer2 can be used with the
modules are detailed in the following sections. The        CCP module (in PWM mode) as well as the Baud Rate
timer modules are:                                         Generator for the Synchronous Serial Port (SSP). The
                                                           prescaler option allows Timer2 to increment at the fol-
Timer0 module (Section 7.0)                              lowing rates: 1:1, 1:4, and 1:16.
Timer1 module (Section 8.0)
Timer2 module (Section 9.0)                              The postscaler allows TMR2 register to match the
                                                           period register (PR2) a programmable number of times
6.1 Timer0 Overview                                        before generating an interrupt. The postscaler can be
                                                           programmed from 1:1 to 1:16 (inclusive).
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67           6.4 CCP Overview

The Timer0 module is a simple 8-bit overflow counter.      Applicable Devices
The clock source can be either the internal system         61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
clock (Fosc/4) or an external clock. When the clock
source is an external clock, the Timer0 module can be      The CCP module(s) can operate in one of three modes:
selected to increment on either the rising or falling      16-bit capture, 16-bit compare, or up to 10-bit Pulse
edge.                                                      Width Modulation (PWM).

The Timer0 module also has a programmable pres-            Capture mode captures the 16-bit value of TMR1 into
caler option. This prescaler can be assigned to either     the CCPRxH:CCPRxL register pair. The capture event
the Timer0 module or the Watchdog Timer. Bit PSA           can be programmed for either the falling edge, rising
(OPTION<3>) assigns the prescaler, and bits PS2:PS0        edge, fourth rising edge, or sixteenth rising edge of the
(OPTION<2:0>) determine the prescaler value. TMR0          CCPx pin.
can increment at the following rates: 1:1 when the pres-
caler is assigned to Watchdog Timer, 1:2, 1:4, 1:8,        Compare mode compares the TMR1H:TMR1L register
1:16, 1:32, 1:64, 1:128, and 1:256.                        pair to the CCPRxH:CCPRxL register pair. When a
                                                           match occurs, an interrupt can be generated and the
Synchronization of the external clock occurs after the     output pin CCPx can be forced to a given state (High or
prescaler. When the prescaler is used, the external        Low) and Timer1 can be reset. This depends on control
clock frequency may be higher then the device's fre-       bits CCPxM3:CCPxM0.
quency. The maximum frequency is 50 MHz, given the
high and low time requirements of the clock.               PWM mode compares the TMR2 register to a 10-bit
                                                           duty cycle register (CCPRxH:CCPRxL<5:4>) as well as
6.2 Timer1 Overview                                        to an 8-bit period register (PR2). When the TMR2 reg-
                                                           ister = Duty Cycle register, the CCPx pin will be forced
Applicable Devices                                         low. When TMR2 = PR2, TMR2 is cleared to 00h, an
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67           interrupt can be generated, and the CCPx pin (if an out-
                                                           put) will be forced high.
Timer1 is a 16-bit timer/counter. The clock source can
be either the internal system clock (Fosc/4), an external
clock, or an external crystal. Timer1 can operate as
either a timer or a counter. When operating as a
counter (external clock source), the counter can either
operate synchronized to the device or asynchronously
to the device. Asynchronous operation allows Timer1 to
operate during sleep, which is useful for applications
that require a real-time clock as well as the power sav-
ings of SLEEP mode.

TImer1 also has a prescaler option which allows TMR1
to increment at the following rates: 1:1, 1:2, 1:4, and
1:8. TMR1 can be used in conjunction with the Capture/
Compare/PWM module. When used with a CCP mod-
ule, Timer1 is the time-base for 16-bit capture or 16-bit
compare and must be synchronized to the device.

1997 Microchip Technology Inc.                           DS30234D-page 63
PIC16C6X

NOTES:

DS30234D-page 64   1997 Microchip Technology Inc.
7.0 TIMER0 MODULE                                                               PIC16C6X

Applicable Devices                                               (OPTION<4>). Clearing bit T0SE selects the rising
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                 edge. Restrictions on the external clock input are dis-
                                                                 cussed in detail in Section 7.2.
The Timer0 module has the following features:
                                                                 The prescaler is mutually exclusively shared between
8-bit timer/counter register, TMR0                             the Timer0 module and the Watchdog Timer. The pres-
   - Read and write capability                                   caler assignment is controlled in software by control bit
   - Interrupt on overflow from FFh to 00h                       PSA (OPTION<3>). Clearing bit PSA will assign the
                                                                 prescaler to the Timer0 module. The prescaler is not
8-bit software programmable prescaler                          readable or writable. When the prescaler is assigned to
Internal or external clock select                              the Timer0 module, prescale values of 1:2, 1:4, ...,
                                                                 1:256 are selectable. Section 7.3 details the operation
   - Edge select for external clock                              of the prescaler.

Figure 7-1 is a simplified block diagram of the Timer0           7.1 TMR0 Interrupt
module.
                                                                 Applicable Devices
Timer mode is selected by clearing bit T0CS                      61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
(OPTION<5>). In timer mode, the Timer0 module will               The TMR0 interrupt is generated when the register
increment every instruction cycle (without prescaler). If        (TMR0) overflows from FFh to 00h. This overflow sets
TMR0 register is written, the increment is inhibited for         interrupt flag bit T0IF (INTCON<2>). The interrupt can
the following two instruction cycles (Figure 7-2 and             be masked by clearing enable bit T0IE (INTCON<5>).
Figure 7-3). The user can work around this by writing            Flag bit T0IF must be cleared in software by the TImer0
an adjusted value to the TMR0 register.                          interrupt service routine before re-enabling this inter-
                                                                 rupt. The TMR0 interrupt cannot wake the processor
Counter mode is selected by setting bit T0CS. In this            from SLEEP since the timer is shut off during SLEEP.
mode, Timer0 will increment either on every rising or            Figure 7-4 displays the Timer0 interrupt timing.
falling edge of pin RA4/T0CKI. The incrementing edge
is determined by the source edge select bit T0SE

FIGURE 7-1: TIMER0 BLOCK DIAGRAM

                                                                                                    Data bus

RA4/T0CKI FOSC/4                     0                               PSout  Sync with                           8
pin                                  1                           1           Internal               TMR0 reg
                                                                              clocks
              T0SE                T0CS  Programmable             0                           PSout
                                            Prescaler
                                                                            (2 cycle delay)
                                                    3
                                        PS2, PS1, PS0      PSA                                                     Set bit T0IF
                                                                                                                   on overflow

Note 1: Bits, T0CS, T0SE, PSA, and PS2, PS1, PS0 are (OPTION<5:0).
        2: The prescaler is shared with Watchdog Timer (refer to Figure 7-6 for detailed diagram).

FIGURE 7-2: TIMER0 TIMING: INTERNAL CLOCK/NO PRESCALER

PC           Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
(Program
Counter)         PC-1             PC    PC+1               PC+2  PC+3                  PC+4         PC+5           PC+6

Instruction            MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W
Fetch

TMR0         T0        T0+1             T0+2        NT0          NT0        NT0                     NT0+1          NT0+2

Instruction                             Write TMR0  Read TMR0    Read TMR0  Read TMR0               Read TMR0      Read TMR0
Executed                                executed    reads NT0    reads NT0  reads NT0

                                                                                                    reads NT0 + 1 reads NT0 + 2

1997 Microchip Technology Inc.                                                                               DS30234D-page 65
PIC16C6X

FIGURE 7-3: TIMER0 TIMING: INTERNAL CLOCK/PRESCALE 1:2

PC           Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
(Program
Counter)         PC-1       PC      PC+1         PC+2            PC+3                    PC+4       PC+5       PC+6

Instruction               MOVWF TMR0 MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W MOVF TMR0,W
Fetch
             T0             T0+1                                                    NT0                        NT0+1          T0
TMR0

Instruction                         Write TMR0   Read TMR0       Read TMR0               Read TMR0  Read TMR0  Read TMR0
Execute                             executed     reads NT0       reads NT0               reads NT0  reads NT0  reads NT0 + 1

FIGURE 7-4: TMR0 INTERRUPT TIMING

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

OSC1

CLKOUT(3)

Timer0                 FEh          FFh                     00h                          01h                   02h

                       1                 1

T0IF bit

(INTCON<2>)

GIE bit
(INTCON<7>)

INSTRUCTION
FLOW

            PC             PC        PC +1                    PC +1                           0004h               0005h
                       Inst (PC)    Inst (PC+1)             Dummy cycle                   Inst (0004h)         Inst (0005h)
Instruction            Inst (PC-1)   Inst (PC)                                           Dummy cycle           Inst (0004h)
fetched

Instruction
executed

             Note 1: Interrupt flag bit T0IF is sampled here (every Q1).

                   2: Interrupt latency = 4Tcy where Tcy = instruction cycle time.
                   3: CLKOUT is available only in RC oscillator mode.

DS30234D-page 66                                                                                     1997 Microchip Technology Inc.
                                                                      PIC16C6X

7.2 Using Timer0 with External Clock                          When a prescaler is used, the external clock input is
                                                              divided by the asynchronous ripple-counter type pres-
Applicable Devices                                            caler so that the prescaler output is symmetrical. For
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67              the external clock to meet the sampling requirement,
                                                              the ripple-counter must be taken into account. There-
When an external clock input is used for Timer0, it must      fore, it is necessary for T0CKI to have a period of at
meet certain requirements. The requirements ensure            least 4Tosc (and a small RC delay of 40 ns) divided by
the external clock can be synchronized with the internal      the prescaler value. The only requirement on T0CKI
phase clock (TOSC). Also, there is a delay in the actual      high and low time is that they do not violate the mini-
incrementing of Timer0 after synchronization.                 mum pulse width requirement of 10 ns. Refer to param-
                                                              eters 40, 41 and 42 in the electrical specification of the
7.2.1 EXTERNAL CLOCK SYNCHRONIZATION                          desired device.

When no prescaler is used, the external clock input is        7.2.2 TIMER0 INCREMENT DELAY
the same as the prescaler output. The synchronization
of T0CKI with the internal phase clocks is accom-             Since the prescaler output is synchronized with the
plished by sampling the prescaler output on the Q2 and        internal clocks, there is a small delay from the time the
Q4 cycles of the internal phase clocks (Figure 7-5).          external clock edge occurs to the time the Timer0 mod-
Therefore, it is necessary for T0CKI to be high for at        ule is actually incremented. Figure 7-5 shows the delay
least 2Tosc (and a small RC delay of 20 ns) and low for       from the external clock edge to the timer incrementing.
at least 2Tosc (and a small RC delay of 20 ns). Refer to
the electrical specification of the desired device.

FIGURE 7-5: TIMER0 TIMING WITH EXTERNAL CLOCK

External Clock Input or           Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Prescaler output (2)                                                                                                        Small pulse
                                                                                                                            misses sampling
External Clock/Prescaler
Output after sampling                                 (1)
                                  (3)
   Increment Timer0 (Q4)

Timer0                                                    T0  T0 + 1  T0 + 2

Note 1: Delay from clock input change to Timer0 increment is 3Tosc to 7Tosc. (Duration of Q = Tosc).
          Therefore, the error in measuring the interval between two edges on Timer0 input = 4Tosc max.

       2: External clock if no prescaler selected, prescaler output otherwise.

       3: The arrows indicate the points in time where sampling occurs.

1997 Microchip Technology Inc.                                                                          DS30234D-page 67
PIC16C6X

7.3 Prescaler                                                          The PSA and PS2:PS0 bits (OPTION<3:0>) determine
                                                                       the prescaler assignment and prescale ratio.
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                       When assigned to the Timer0 module, all instructions
                                                                       writing to the TMR0 register (e.g. CLRF TMR0,
An 8-bit counter is available as a prescaler for the                   MOVWF TMR0, BSF TMR0,bitx) will clear the pres-
Timer0 module or as a postscaler for the Watchdog                      caler count. When assigned to the Watchdog Timer, a
Timer (WDT), respectively (Figure 7-6). For simplicity,                CLRWDT instruction will clear the Watchdog Timer and
this counter is being referred to as "prescaler" through-              the prescaler count. The prescaler is not readable or
out this data sheet. Note that the prescaler may be                    writable.
used by either the Timer0 module or the Watchdog
Timer, but not both. Thus, a prescaler assignment for                  Note:  Writing to TMR0 when the prescaler is
the Timer0 module means that there is no prescaler for                        assigned to Timer0 will clear the prescaler
the Watchdog Timer, and vice-versa.                                           count, but will not change the prescaler
                                                                              assignment.

FIGURE 7-6: BLOCK DIAGRAM OF THE TIMER0/WDT PRESCALER                                 Data Bus

      CLKOUT (=Fosc/4)

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

                  T0SE            T0CS

                                                              PSA

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

                           PSA

                                        0                  1

                                           MUX

                                                             WDT
                                                          Time-out

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

DS30234D-page 68                                                                      1997 Microchip Technology Inc.
                                                                                                 PIC16C6X

7.3.1 SWITCHING PRESCALER ASSIGNMENT

The prescaler assignment is fully under software con-
trol, i.e., it can be changed "on the fly" during program
execution.

Note:   To avoid an unintended device RESET, the
        following instruction sequence (shown in
        Example 7-1) must be executed when
        changing the prescaler assignment from
        Timer0 to the WDT. This precaution must
        be followed even if the WDT is disabled.

EXAMPLE 7-1: CHANGING PRESCALER (TIMER0WDT)

                                      1) BSF STATUS, RP0          ;Bank 1
                                                                  ;Select clock source and prescale value of
Lines 2 and 3 do NOT have to 2)           MOVLW  b'xx0x0xxx'      ;other than 1:1
                                          MOVWF  OPTION_REG       ;Bank 0
be included if the final desired 3)       BCF    STATUS, RP0      ;Clear TMR0 and prescaler
                                          CLRF   TMR0             ;Bank 1
prescale value is other than 1:1. 4)      BSF    STATUS, RP1      ;Select WDT, do not change prescale value
If 1:1 is final desired value, then       MOVLW  b'xxxx1xxx'      ;
a temporary prescale value is 5)          MOVWF  OPTION_REG       ;Clears WDT and prescaler
set in lines 2 and 3 and the final 6)                             ;Select new prescale value and WDT
                                                                  ;
prescale value will be set in lines 7)                            ;Bank 0

10 and 11.                            8)

                                      9) CLRWDT

                                      10) MOVLW b'xxxx1xxx'

                                      11) MOVWF OPTION_REG

                                      12) BCF STATUS, RP0

To change prescaler from the WDT to the Timer0 mod-
ule, use the sequence shown in Example 7-2.

EXAMPLE 7-2: CHANGING PRESCALER (WDTTIMER0)

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

TABLE 7-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 all
                                                                                                    POR,    other resets
                                                                                                    BOR

01h, 101h TMR0 Timer0 module's register                                                              xxxx xxxx uuuu uuuu
                                                                                          RBIF 0000 000x 0000 000u
0Bh,8Bh, INTCON GIE PEIE(1)               T0IE   INTE      RBIE             T0IF   INTF
10Bh,18Bh

81h, 181h OPTION RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

85h         TRISA  --             --      PORTA Data Direction Register(1)                       --11 1111 --11 1111

Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used by Timer0.
Note 1: TRISA<5> and bit PEIE are not implemented on the PIC16C61, read as '0'.

1997 Microchip Technology Inc.                                                                 DS30234D-page 69
PIC16C6X

NOTES:

DS30234D-page 70   1997 Microchip Technology Inc.
8.0 TIMER1 MODULE                                                        PIC16C6X

Applicable Devices                                        Timer1 also has an internal "reset input". This reset can
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67          be generated by CCP1 or CCP2 (Capture/Compare/
                                                          PWM) module. See Section 10.0 for details. Figure 8-1
Timer1 is a 16-bit timer/counter consisting of two 8-bit  shows the Timer1 control register.
registers (TMR1H and TMR1L) which are readable and
writable. Register TMR1 (TMR1H:TMR1L) increments          For the PIC16C62A/R62/63/R63/64A/R64/65A/R65/
from 0000h to FFFFh and rolls over to 0000h. The          R66/67, when the Timer1 oscillator is enabled
TMR1 Interrupt, if enabled, is generated on overflow      (T1OSCEN is set), the RC1 and RC0 pins become
which is latched in interrupt flag bit TMR1IF (PIR1<0>).  inputs. That is, the TRISC<1:0> value is ignored.
This interrupt can be enabled/disabled by setting/clear-
ing the TMR1 interrupt enable bit TMR1IE (PIE1<0>).       For the PIC16C62/64/65, when the Timer1 oscillator is
                                                          enabled (T1OSCEN is set), RC1 pin becomes an input,
Timer1 can operate in one of two modes:                   however the RC0 pin will have to be configured as an
                                                          input by setting the TRISC<0> bit.
As a timer
As a counter                                            The Timer1 module also has a software programmable
                                                          prescaler.
The operating mode is determined by clock select bit,
TMR1CS (T1CON<1>) (Figure 8-2).

In timer mode, Timer1 increments every instruction
cycle. In counter mode, it increments on every rising
edge of the external clock input.

Timer1 can be enabled/disabled by setting/clearing
control bit TMR1ON (T1CON<0>).

FIGURE 8-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
     --                                                   TMR1CS TMR1ON
bit7      -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC                                            R = Readable bit
                                                                                 bit0  W = Writable bit
bit 7-6:                                                                               U = Unimplemented bit,
bit 5-4:
                                                                                               read as `0'
bit 3:                                                                                 - n = Value at POR reset

          Unimplemented: Read as '0'

          T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits
          11 = 1:8 Prescale value
          10 = 1:4 Prescale value
          01 = 1:2 Prescale value
          00 = 1:1 Prescale value

          T1OSCEN: Timer1 Oscillator Enable Control bit
          1 = Oscillator is enabled
          0 = Oscillator is shut off
          Note: The oscillator inverter and feedback resistor are turned off to eliminate power drain.

bit 2:    T1SYNC: Timer1 External Clock Input Synchronization Control bit

bit 1:    TMR1CS = 1
bit 0:    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 T1OSI (on the rising edge) (See pinouts for pin with T1OSI function)
          0 = Internal clock (Fosc/4)

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

1997 Microchip Technology Inc.                                                                        DS30234D-page 71
PIC16C6X

8.1 Timer1 Operation in Timer Mode                         8.2.1 EXTERNAL CLOCK INPUT TIMING FOR
                                                                       SYNCHRONIZED COUNTER MODE
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67           When an external clock input is used for Timer1 in syn-
                                                           chronized counter mode, it must meet certain require-
Timer mode is selected by clearing bit TMR1CS              ments. The external clock requirement is due to
(T1CON<1>). In this mode, the input clock to the timer     internal phase clock (Tosc) synchronization. Also, there
is Fosc/4. The synchronize control bit T1SYNC              is a delay in the actual incrementing of TMR1 after syn-
(T1CON<2>) has no effect since the internal clock is       chronization.
always in sync.
                                                           When the prescaler is 1:1, the external clock input is
8.2 Timer1 Operation in Synchronized                       the same as the prescaler output. The synchronization
          Counter Mode                                     of T1CKI with the internal phase clocks is accom-
                                                           plished by sampling the prescaler output on the Q2 and
Applicable Devices                                         Q4 cycles of the internal phase clocks. Therefore, it is
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67           necessary for T1CKI to be high for at least 2Tosc (and
                                                           a small RC delay of 20 ns) and low for at least 2Tosc
Counter mode is selected by setting bit TMR1CS. In         (and a small RC delay of 20 ns). Refer to appropriate
this mode the timer increments on every rising edge of     electrical specification section, parameters 45, 46, and
clock input on T1OSI when enable bit T1OSCEN is set        47.
or pin with T1CKI when bit T1OSCEN is cleared.
                                                           When a prescaler other than 1:1 is used, the external
Note:  The T1OSI function is multiplexed to differ-        clock input is divided by the asynchronous ripple-
       ent pins, depending on the device. See the          counter type prescaler so that the prescaler output is
       pinout descriptions to see which pin has            symmetrical. In order for the external clock to meet the
       the T1OSI function.                                 sampling requirement, the ripple counter must be taken
                                                           into account. Therefore, it is necessary for T1CKI to
If T1SYNC is cleared, then the external clock input is     have a period of at least 4Tosc (and a small RC delay
synchronized with internal phase clocks. The synchro-      of 40 ns) divided by the prescaler value. The only
nization is done after the prescaler stage. The pres-      requirement on T1CKI high and low time is that they do
caler stage is an asynchronous ripple counter.             not violate the minimum pulse width requirements of
                                                           10 ns). Refer to applicable electrical specification sec-
In this configuration, during SLEEP mode, Timer1 will      tion, parameters 40, 42, 45, 46, and 47.
not increment even if an external clock is present, since
the synchronization circuit is shut off. The prescaler,
however, will continue to increment.

FIGURE 8-2: TIMER1 BLOCK DIAGRAM

             TMR1IF               TMR1                                   0          Synchronized
             Overflow   TMR1H TMR1L                                                   clock input
             Interrupt                                                   1
             flag bit   T1OSC                          TMR1ON      T1SYNC              Synchronize
                                                         on/off                                det
       T1OSO(2)                                                     Prescaler
                                              (3)                   1, 2, 4, 8         SLEEP input
       T1OSI(2)
                                                                1            2

                               T1OSCEN Fosc/4
                               Enable
                               Oscillator(1)  Internal        0
                                              Clock        TMR1CS

                                                                   T1CKPS1:T1CKPS0

Note 1: When enable bit T1OSCEN is cleared, the inverter and feedback resistor are turned off. This eliminates power drain.
        2: See pinouts for pins with T1OSO and T1OSI functions.
        3: For the PIC16C62/64/65, the Schmitt Trigger is not implemented in external clock mode.

DS30234D-page 72                                                                1997 Microchip Technology Inc.
                                                                                 PIC16C6X

8.3 Timer1 Operation in Asynchronous                        EXAMPLE 8-1: READING A 16-BIT
          Counter Mode                                                              FREE-RUNNING TIMER

Applicable Devices                                          ; All Interrupts are disabled
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                            MOVF TMR1H, W          ;Read high byte
If control bit T1SYNC (T1CON<2>) is set, the external
clock input is not synchronized. The timer continues to     MOVWF TMPH             ;
increment asynchronous to the internal phase clocks.
The timer will continue to run during SLEEP and gener-      MOVF TMR1L, W          ;Read low byte
ate an interrupt on overflow which will wake the proces-
sor. However, special precautions in software are           MOVWF TMPL             ;
needed to read-from or write-to the Timer1 register
pair, TMR1L and TMR1H (Section 8.3.2).                      MOVF TMR1H, W          ;Read high byte

In asynchronous counter mode, Timer1 cannot be used         SUBWF TMPH, W          ;Sub 1st read
as a time-base for capture or compare operations.
                                                                                   ;with 2nd read
8.3.1 EXTERNAL CLOCK INPUT TIMING WITH
            UNSYNCHRONIZED CLOCK                            BTFSC STATUS,Z         ;is result = 0

If control bit T1SYNC is set, the timer will increment      GOTO CONTINUE          ;Good 16-bit read
completely asynchronously. The input clock must meet
certain minimum high time and low time requirements,        ; TMR1L may have rolled over between the read
as specified in timing parameters (45 - 47).
                                                            ; of the high and low bytes. Reading the high
8.3.2 READING AND WRITING TMR1 IN
            ASYNCHRONOUS COUNTER MODE                       ; and low bytes now will read a good value.

Reading TMR1H or TMR1L, while the timer is running          MOVF TMR1H, W          ;Read high byte
from an external asynchronous clock, will ensure a
valid read (taken care of in hardware). However, the        MOVWF TMPH             ;
user should keep in mind that reading the 16-bit timer
in two 8-bit values itself poses certain problems since     MOVF TMR1L, W          ;Read low byte
the timer may overflow between the reads.
                                                            MOVWF TMPL             ;
For writes, it is recommended that the user simply stop
the timer and write the desired values. A write conten-     ; Re-enable Interrupt (if required)
tion may occur by writing to the timer registers while the
register is incrementing. This may produce an unpre-        CONTINUE               ;Continue with
dictable value in the timer register.
                                                            :                      ;your code
Reading the 16-bit value requires some care.
Example 8-1 is an example routine to read the 16-bit        8.4 Timer1 Oscillator
timer value. This is useful if the timer cannot be
stopped.                                                    Applicable Devices
                                                            61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

                                                            A crystal oscillator circuit is built in-between pins T1OSI
                                                            (input) and T1OSO (amplifier output). It is enabled by
                                                            setting control bit T1OSCEN (T1CON<3>). The oscilla-
                                                            tor is a low power oscillator rated up to 200 kHz. It will
                                                            continue to run during SLEEP. It is primarily intended
                                                            for a 32 kHz crystal. Table 8-1 shows the capacitor
                                                            selection for the Timer1 oscillator.

                                                            The Timer1 oscillator is identical to the LP oscillator.
                                                            The user must allow a software time delay to ensure
                                                            proper oscillator start-up.

                                                            TABLE 8-1:        CAPACITOR SELECTION
                                                                              FOR THE TIMER1
                                                                              OSCILLATOR

                                                            Osc Type    Freq          C1         C2

                                                            LP          32 kHz     33 pF         33 pF

                                                                        100 kHz    15 pF         15 pF

                                                                        200 kHz    15 pF         15 pF

                                                            These values are for design guidance only.

                                                            Crystals Tested:

                                                            32.768 kHz Epson C-001R32.768K-A 20 PPM

                                                            100 kHz Epson C-2 100.00 KC-P 20 PPM

                                                            200 kHz     STD XTL 200.000 kHz    20 PPM

                                                            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 appropri-
                                                                      ate values of external components.

1997 Microchip Technology Inc.                                                          DS30234D-page 73
PIC16C6X

8.5 Resetting Timer1 using a CCP Trigger                          8.6 Resetting of TMR1 Register Pair
          Output                                                            (TMR1H:TMR1L)

Applicable Devices                                                Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                  61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                                  The TMR1H and TMR1L registers are not reset to 00h
CCP2 is implemented on the PIC16C63/R63/65/65A/                   on a POR or any other reset except by the CCP1 or
R65/66/67 only.                                                   CCP2 special event trigger.

If CCP1 or CCP2 module is configured in Compare                   The T1CON register is reset to 00h on a Power-on
mode to generate a "special event trigger"                        Reset or a Brown-out Reset, which shuts off the timer
(CCPxM3:CCPxM0 = 1011), this signal will reset                    and leaves a 1:1 prescaler. In all other resets, the reg-
Timer1.                                                           ister is unaffected.

Note:  The "special event trigger" from the                       8.7 Timer1 Prescaler
       CCP1and CCP2 modules will not set inter-
       rupt flag bit TMR1IF(PIR1<0>).                             Applicable Devices
                                                                  61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
Timer1 must be configured for either timer or synchro-            The prescaler counter is cleared on writes to the
nized counter mode to take advantage of this feature.             TMR1H or TMR1L registers.
If the Timer1 is running in asynchronous counter mode,
this reset operation may not work.

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

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

TABLE 8-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 T0IE    INTE                       RBIE   T0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh

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

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

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

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

10h    T1CON      --  -- 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: The USART is implemented on the PIC16C63/R63/65/65A/R65/66/67 only.

        2: Bits PSPIE and PSPIF are reserved on the PIC16C62/62A/R62/63/R63/66, always maintain these bits clear.
        3: PIR1<6> and PIE1<6> are reserved, always maintain these bits clear.

DS30234D-page 74                                                                           1997 Microchip Technology Inc.
                                                                                                                     PIC16C6X

9.0 TIMER2 MODULE                                           9.1 Timer2 Prescaler and Postscaler

Applicable Devices                                          Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67            61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                            The prescaler and postscaler counters are cleared
Timer2 is an 8-bit timer with a prescaler and a             when any of the following occurs:
postscaler. It is especially suitable as PWM time-base
for PWM mode of CCP module(s). TMR2 is a readable            a write to the TMR2 register
and writable register, and is cleared on any device          a write to the T2CON register
reset.                                                       any device reset (POR, BOR, MCLR Reset, or

The input clock (FOSC/4) has a prescale option of 1:1,         WDT Reset).
1:4 or 1:16, selected by control bits
T2CKPS1:T2CKPS0 (T2CON<1:0>).                               TMR2 is not cleared when T2CON is written.

The Timer2 module has an 8-bit period register, PR2.        9.2 Output of TMR2
Timer2 increments from 00h until it matches PR2 and
then resets to 00h on the next increment cycle. PR2 is      Applicable Devices
a readable and writable register. The PR2 register is ini-  61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
tialized to FFh upon reset.                                 The output of TMR2 (before the postscaler) is fed to the
                                                            Synchronous Serial Port module which optionally uses
The match output of the TMR2 register goes through a        it to generate shift clock.
4-bit postscaler (which gives a 1:1 to 1:16 scaling,
inclusive) to generate a TMR2 interrupt (latched in flag    FIGURE 9-1: TIMER2 BLOCK DIAGRAM
bit TMR2IF (PIR1<1>)).
                                                            Sets          ToMutRpu2t(1)
The Timer2 module can be shut off by clearing control       TMR2           Reset
bit TMR2ON (T2CON<2>) to minimize power con-                interrupt                    TMR2 reg
sumption.                                                   flag bit,

Figure 9-2 shows the Timer2 control register. T2CON is      TMR2IF
cleared upon reset which initializes Timer2 as shut off
with the prescaler and postscaler at a 1:1 value.           Postscaler                                               Comparator    Prescaler
                                                                                                                                 1:1, 1:4, 1:16 Fosc/4

                                                                                                                                             2

                                                            1:1 to 1:16 EQ

                                                                       4                                             PR2 reg

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

FIGURE 9-2: 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                                                               R = Readable bit
     --   TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0                                                     W = Writable bit
bit7                                                                                                                 U = Unimplemented bit,
                                                                                                               bit0
bit 7:                                                                                                                       read as `0'
bit 6-3:  Unimplemented: Read as '0'                                                                                 - n = Value at POR reset
          TOUTPS3:TOUTPS0: Timer2 Output Postscale Select bits
bit 2:    0000 = 1:1 postscale
bit 1-0:  0001 = 1:2 postscale

               
               
          1111 = 1:16 postscale
          TMR2ON: Timer2 On bit
          1 = Timer2 is on
          0 = Timer2 is off
          T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
          00 = 1:1 prescale
          01 = 1:4 prescale
          1x = 1:16 prescale

1997 Microchip Technology Inc.                                                                                                 DS30234D-page 75
PIC16C6X

TABLE 9-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         T0IE     INTE     RBIE   T0IF   INTF RBIF 0000 000x 0000 000u

10Bh,18Bh                   (3)
                            (3)
0Ch        PIR1 PSPIF(2)               RCIF(1)  TXIF(1)  SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
                                       RCIE(1)  TXIE(1)  SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
8Ch        PIE1 PSPIE(2)

11h        TMR2 Timer2 module's 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 locations read as '0'. Shaded cells are not used by Timer2.
Note 1: The USART is implemented on the PIC16C63/R63/65/65A/R65/66/67 only.

        2: Bits PSPIE and PSPIF are reserved on the PIC16C62/62A/R62/63/R63/66, always maintain these bits clear.
        3: PIR1<6> and PIE1<6> are reserved, always maintain these bits clear.

DS30234D-page 76                                                               1997 Microchip Technology Inc.
                                                                       PIC16C6X

10.0 CAPTURE/COMPARE/PWM                                  CCP2 module:
         (CCP) MODULE(s)
                                                          Capture/Compare/PWM Register2 (CCPR2) is com-
Applicable Devices                                        prised of two 8-bit registers: CCPR2L (low byte) and
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67 CCP1     CCPR2H (high byte). The CCP2CON register controls
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67 CCP2     the operation of CCP2. All are readable and writable.

Each CCP (Capture/Compare/PWM) module contains            For use of the CCP modules, refer to the Embedded
a 16-bit register which can operate as a 16-bit capture   Control Handbook, "Using the CCP Modules" (AN594).
register, as a 16-bit compare register, or as a PWM
master/slave duty cycle register. Both the CCP1 and       TABLE 10-1: CCP MODE - TIMER
CCP2 modules are identical in operation, with the                              RESOURCE
exception of the operation of the special event trigger.
Table 10-1 and Table 10-2 show the resources and          CCP Mode     Timer Resource
interactions of the CCP modules(s). In the following
sections, the operation of a CCP module is described        Capture          Timer1
with respect to CCP1. CCP2 operates the same as            Compare           Timer1
CCP1, except where noted.                                                    Timer2
                                                             PWM
CCP1 module:

Capture/Compare/PWM Register1 (CCPR1) is com-
prised of two 8-bit registers: CCPR1L (low byte) and
CCPR1H (high byte). The CCP1CON register controls
the operation of CCP1. All are readable and writable.

TABLE 10-2: INTERACTION OF TWO CCP MODULES

CCPx Mode CCPy Mode                                       Interaction

Capture  Capture     Same TMR1 time-base.
Capture  Compare     The compare should be configured for the special event trigger, which clears TMR1.
Compare  Compare     The compare(s) should be configured for the special event trigger, which clears TMR1.
PWM      PWM         The PWMs will have the same frequency, and update rate (TMR2 interrupt).
PWM      Capture     None
PWM      Compare     None

1997 Microchip Technology Inc.                                       DS30234D-page 77
PIC16C6X

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

U-0   U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0                                                        R = Readable bit
  --   -- CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0                                                     W = Writable bit
bit7                                                                                                  U = Unimplemented bit,
                                                                                                bit0
                                                                                                            read as `0'
                                                                                                      - n =Value at POR reset

bit 7-6: Unimplemented: Read as '0'

bit 5-4: CCPxX:CCPxY: PWM Least Significant bits
            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.

bit 3-0: CCPxM3:CCPxM0: CCPx Mode Select bits
            0000 = Capture/Compare/PWM off (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 (bit CCPxIF is set)
            1001 = Compare mode, clear output on match (bit CCPxIF is set)
            1010 = Compare mode, generate software interrupt on match (bit CCPxIF is set, CCPx pin is unaffected)
            1011 = Compare mode, trigger special event (CCPxIF bit is set; CCP1 resets TMR1; CCP2 resets TMR1)
            11xx = PWM mode

10.1 Capture Mode                                         FIGURE 10-2: CAPTURE MODE
                                                                               OPERATION BLOCK
Applicable Devices                                                             DIAGRAM
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                                    Prescaler                         Set CCP1IF
In Capture mode, CCPR1H:CCPR1L captures the                         1, 4, 16                          PIR1<2>
16-bit value of the TMR1 register when an event occurs
on pin RC2/CCP1 (Figure 10-2). An event is defined as:    RC2/CCP1                                                     CCPR1H  CCPR1L
                                                          pin                                                                  TMR1L
Every falling edge
Every rising edge                                                     and                           Capture
Every 4th rising edge                                             edge detect                       Enable
Every 16th rising edge
                                                                                                            TMR1H
An event is selected by control bits CCP1M3:CCP1M0
(CCP1CON<3:0>). When a capture is made, the inter-                       CCP1CON<3:0>
rupt request flag bit CCP1IF (PIR1<2>) is set. It must              Q's
be cleared in software. If another capture occurs before
the value in register CCPR1 is read, the old captured     10.1.2 TIMER1 MODE SELECTION
value will be lost.
                                                          Timer1 must be running in Timer mode or Synchro-
10.1.1 CCP PIN CONFIGURATION                              nized Counter mode for the CCP module to use the
                                                          capture feature. In Asynchronous Counter mode, the
In Capture mode, the RC2/CCP1 pin should be config-       capture operation may not work consistently.
ured as an input by setting the TRISC<2> bit.
                                                          10.1.3 SOFTWARE INTERRUPT
Note:  If the RC2/CCP1 pin is configured as an
       output, a write to PORTC can cause a cap-          When the Capture event is changed, a false capture
       ture condition.                                    interrupt may be generated. The user should clear
                                                          enable bit CCP1IE (PIE1<2>) to avoid false interrupts
                                                          and should clear flag bit CCP1IF following any such
                                                          change in operating mode.

DS30234D-page 78                                                                                       1997 Microchip Technology Inc.
                                                                   PIC16C6X

10.1.4 CCP PRESCALER                                        10.2.1 CCP PIN CONFIGURATION

There are four prescaler settings, specified by bits        The user must configure the RC2/CCP1 pin as an out-
CCP1M3:CCP1M0. Whenever the CCP module is                   put by clearing the TRISC<2> bit.
turned off, or the CCP module is not in Capture mode,
the prescaler counter is cleared. This means that any       Note:  Clearing the CCP1CON register will force
reset will clear the prescaler counter.                            the RC2/CCP1 compare output latch to the
                                                                   default low level. This is not the data latch.
Switching from one capture prescaler to another may
generate an interrupt. Also, the prescaler counter will     10.2.1 TIMER1 MODE SELECTION
not be cleared, therefore the first capture may be from
a non-zero prescaler. Example 10-1 shows the recom-         Timer1 must be running in Timer mode or Synchro-
mended method for switching between capture pres-           nized Counter mode if the CCP module is using the
calers. This example also clears the prescaler counter      compare feature. In Asynchronous Counter mode, the
and will not generate the "false" interrupt.                compare operation may not work.

EXAMPLE 10-1: CHANGING BETWEEN                              10.2.2 SOFTWARE INTERRUPT MODE
                        CAPTURE PRESCALERS
                                                            When Generate Software Interrupt is chosen, the
CLRF   CCP1CON  ; Turn CCP module off                       CCP1 pin is not affected. Only a CCP interrupt is gen-
MOVLW                                                       erated (if enabled).
       NEW_CAPT_PS ; Load the W reg with
MOVWF
                ; the new prescaler                         10.2.3 SPECIAL EVENT TRIGGER

                ; mode value and CCP ON

       CCP1CON  ; Load CCP1CON with                         In this mode, an internal hardware trigger is generated
                                                            which may be used to initiate an action.
                ; this value
                                                            The special event trigger output of CCP1 and CCP2
10.2 Compare Mode                                           resets the TMR1 register pair. This allows the
                                                            CCPR1H:CCPR1L and CCPR2H:CCPR2L registers to
Applicable Devices                                          effectively be 16-bit programmable period register(s)
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67            for Timer1.
In Compare mode, the 16-bit CCPR1 register value is
constantly compared against the TMR1 register pair          For compatibility issues, the special event trigger out-
value. When a match occurs, the RC2/CCP1 pin is:            put of CCP1 (PIC16C72) and CCP2 (all other
                                                            PIC16C7X devices) also starts an A/D conversion.
Driven High
Driven Low                                                Note:  The "special event trigger" from the
Remains Unchanged                                                CCP1and CCP2 modules will not set inter-
                                                                   rupt flag bit TMR1IF (PIR1<0>).
The action on the pin is based on the value of control
bits CCP1M3:CCP1M0 (CCP1CON<3:0>). At the
same time interrupt flag bit CCP1IF is set.

FIGURE 10-3: COMPARE MODE
                     OPERATION BLOCK
                     DIAGRAM

          Special event trigger will reset Timer1, but not
          set interrupt flag bit TMR1IF (PIR1<0>).

                Special Event Trigger

                Set CCP1IF
                PIR1<2>

                                 CCPR1H CCPR1L

RC2/CCP1  Q S Output              match    Comparator
                R Logic                  TMR1H TMR1L

TRISC<2>
Output Enable

                  CCP1CON<3:0>
                     Mode Select

1997 Microchip Technology Inc.                                   DS30234D-page 79
PIC16C6X

10.3 PWM Mode                                                     10.3.1 PWM PERIOD

Applicable Devices                                                The PWM period is specified by writing to the PR2 reg-
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67                  ister. The PWM period can be calculated using the fol-
                                                                  lowing formula:
In Pulse Width Modulation (PWM) mode, the CCP1 pin
produces up to a 10-bit resolution PWM output. Since                   PWM period = [(PR2) + 1] 4 TOSC
the CCP1 pin is multiplexed with the PORTC data latch,                                     (TMR2 prescale value)
the TRISC<2> bit must be cleared to make the CCP1
pin an output.                                                    PWM frequency is defined as 1 / [PWM period].

Note:  Clearing the CCP1CON register will force                   When TMR2 is equal to PR2, the following three events
       the CCP1 PWM output latch to the default                   occur on the next increment cycle:
       low level. This is not the PORTC I/O data
       latch.                                                      TMR2 is cleared
                                                                   The PWM duty cycle is latched from CCPR1L into
Figure 10-4 shows a simplified block diagram of the
CCP module in PWM mode.                                              CCPR1H
                                                                   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 10.3.3.                        cycle = 0%, the CCP1 pin will not be set)

FIGURE 10-4: SIMPLIFIED PWM BLOCK                                 Note:  The Timer2 postscaler (see Section 9.1) 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-
CCPR1L                                                                   quency than the PWM output.

                                                                  10.3.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               (Note 1)                                       two LSbs. This 10-bit value is represented by
                                             TRISC2               CCPR1L:CCP1CON<5:4>. The following equation is
                                        S                         used to calculate the PWM duty cycle in time:

Comparator                Clear Timer,                                PWM duty cycle = (CCPR1L:CCP1CON<5:4>)
    PR2                   CCP1 pin and                                                        Tosc (TMR2 prescale value)
                          latch D.C.
                                                                  CCPR1L and CCP1CON<5:4> can be written to at any
Note 1: 8-bit timer is concatenated with 2-bit internal Q clock   time, but the duty cycle value is not latched into
          or 2 bits of the prescaler to create 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 10-5) 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 10-5: 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.

                                                                  Maximum PWM resolution (bits) for a given PWM
                                                                  frequency:

                Period                                                     ( ) logFOSC
                                                                         FPWM
                                                                         =
                                                                                         bits

     Duty Cycle                                                          log(2)
                           TMR2 = PR2
                                                                  Note:  If the PWM duty cycle value is longer than
                  TMR2 = Duty Cycle                                      the PWM period the CCP1 pin will not be
TMR2 = PR2                                                               forced to the low level.

DS30234D-page 80                                                          1997 Microchip Technology Inc.
                                                                                                 PIC16C6X

EXAMPLE 10-2: PWM PERIOD AND DUTY                            In order to achieve higher resolution, the PWM fre-
                        CYCLE CALCULATION                    quency must be decreased. In order to achieve higher
                                                             PWM frequency, the resolution must be decreased.
Desired PWM frequency is 78.125 kHz,
Fosc = 20 MHz                                                Table 10-3 lists example PWM frequencies and resolu-
TMR2 prescale = 1                                            tions for Fosc = 20 MHz. The TMR2 prescaler and PR2
                                                             values are also shown.
     1/78.125 kHz = [(PR2) + 1] 4 1/20 MHz 1
                                                             10.3.3 SET-UP FOR PWM OPERATION
     12.8 s         = [(PR2) + 1] 4 50 ns 1
                                                             The following steps should be taken when configuring
     PR2             = 63                                    the CCP module for PWM operation:

Find the maximum resolution of the duty cycle that can       1. Set the PWM period by writing to the PR2 regis-
be used with a 78.125 kHz frequency and 20 MHz                     ter.
oscillator:
                                                             2. Set the PWM duty cycle by writing to the
     1/78.125 kHz = 2PWM RESOLUTION 1/20 MHz 1                 CCPR1L register and CCP1CON<5:4> bits.

     12.8 s         = 2PWM RESOLUTION 50 ns 1           3. Make the CCP1 pin an output by clearing the
     256             = 2PWM RESOLUTION                             TRISC<2> bit.

     log(256)        = (PWM Resolution) log(2)             4. Set the TMR2 prescale value and enable Timer2
                                                                   by writing to T2CON.
     8.0             = PWM Resolution
                                                             5. Configure the CCP1 module for PWM operation.
At most, an 8-bit resolution duty cycle can be obtained
from a 78.125 kHz frequency and a 20 MHz oscillator,
i.e., 0  CCPR1L:CCP1CON<5:4>  255. Any value
greater than 255 will result in a 100% duty cycle.

TABLE 10-3: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 20 MHz

               PWM Frequency                        1.22 kHz 4.88 kHz 19.53 kHz 78.12 kHz 156.3 kHz 208.3 kHz

Timer Prescaler (1, 4, 16)                           16        4      1     1                      1     1
PR2 Value                                           0xFF     0xFF   0xFF  0x3F                   0x1F  0x17
Maximum Resolution (bits)                                                                               5.5
                                                     10       10     10     8                      7

TABLE 10-4: REGISTERS ASSOCIATED WITH TIMER1, CAPTURE AND COMPARE

                                                                                                 Value on: Value on

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

                                                                                                 BOR   Resets

0Bh,8Bh INTCON             GIE PEIE     T0IE         INTE    RBIE   T0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh
                                       RCIF(1)      TXIF(1)
0Ch           PIR1   PSPIF(2) (3)         --           --    SSPIF  CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
0Dh(4)        PIR2                                             --
                           --     --   RCIE(1)      TXIE(1)         --    -- CCP2IF ---- ---0 ---- ---0
                                          --           --    SSPIE
8Ch           PIE1   PSPIE(2) (3)                              --   CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
8Dh(4)        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/PWM1 (LSB)                                                  xxxx xxxx uuuu uuuu

16h           CCPR1H Capture/Compare/PWM1 (MSB)                                                  xxxx xxxx uuuu uuuu

17h           CCP1CON --          -- CCP1X CCP1Y             CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000
1Bh(4)                                                                                                              xxxx xxxx uuuu uuuu
1Ch(4)        CCPR2L Capture/Compare/PWM2 (LSB)                                                                     xxxx xxxx uuuu uuuu
1Dh(4)
              CCPR2H Capture/Compare/PWM2 (MSB)              CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000

              CCP2CON --          -- CCP2X CCP2Y

Legend:     x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used in these modes.
Note 1:     These bits are associated with the USART module, which is implemented on the PIC16C63/R63/65/65A/R65/66/67 only.
            Bits PSPIE and PSPIF are reserved on the PIC16C62/62A/R62/63/R63/66, always maintain these bits clear.
        2:  The PIR1<6> and PIE1<6> bits are reserved, always maintain these bits clear.
        3:  These registers are associated with the CCP2 module, which is only implemented on the PIC16C63/R63/65/65A/R65/66/67.
        4:

1997 Microchip Technology Inc.                                                                 DS30234D-page 81
PIC16C6X

TABLE 10-5: REGISTERS ASSOCIATED WITH PWM AND TIMER2

                                                                                           Value on: Value on

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

                                                                                           BOR  Resets

0Bh,8Bh INTCON     GIE       PEIE  T0IE              INTE    RBIE   T0IF    INTF    RBIF 0000 000x 0000 000u
10Bh,18Bh
                                                    TXIF(1)
0Ch         PIR1   PSPIF(2)  (3)   RCIF(1)             --    SSPIF  CCP1IF  TMR2IF  TMR1IF 0000 0000 0000 0000
0Dh(4)      PIR2                                               --      --       --  CCP2IF ---- ---0 ---- ---0
                   --        --       --            TXIE(1)                         TMR1IE 0000 0000 0000 0000
                                   RCIE(1)             --    SSPIE  CCP1IE  TMR2IE  CCP2IE ---- ---0 ---- ---0
8Ch         PIE1   PSPIE(2)  (3)                               --      --       --
8Dh(4)      PIE2                                                                                 1111 1111 1111 1111
87h         TRISC  --        --              --

                   PORTC Data Direction register

11h         TMR2   Timer2 module's register                                                0000 0000 0000 0000

92h         PR2    Timer2 module's Period register                                         1111 1111 1111 1111

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

15h         CCPR1L Capture/Compare/PWM1 (LSB)                                              xxxx xxxx uuuu uuuu

16h         CCPR1H Capture/Compare/PWM1 (MSB)                                              xxxx xxxx uuuu uuuu

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

1Bh(4)      CCPR2L Capture/Compare/PWM2 (LSB)                                              xxxx xxxx uuuu uuuu

1Ch(4)      CCPR2H Capture/Compare/PWM2 (MSB)                                              xxxx xxxx uuuu uuuu

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

Legend:     x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used in this mode.
Note 1:     These bits are associated with the USART module, which is implemented on the PIC16C63/R63/65/65A/R65/66/67 only.
            Bits PSPIE and PSPIF are reserved on the PIC16C62/62A/R62/63/R63/66, always maintain these bits clear.
        2:  The PIR1<6> and PIE1<6> bits are reserved, always maintain these bits clear.
        3:  These registers are associated with the CCP2 module, which is only implemented on the PIC16C63/R63/65/65A/R65/66/67.
        4:

DS30234D-page 82                                                             1997 Microchip Technology Inc.
                                            Applicable Devices                                PIC16C6X
                                            61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

11.0 SYNCHRONOUS SERIAL
         PORT (SSP) MODULE

11.1 SSP Module Overview

The Synchronous Serial Port (SSP) module is a serial
interface useful for communicating with other peripheral
or microcontroller devices. These peripheral devices
may be Serial EEPROMs, shift registers, display driv-
ers, A/D converters, etc. The SSP module can operate
in one of two modes:
Serial Peripheral Interface (SPI)
Inter-Integrated Circuit (I2C)
The SSP module in I2C mode works the same in all
PIC16C6X devices that have an SSP module. However
the SSP Module in SPI mode has differences between
the PIC16C66/67 and the other PIC16C6X devices.
The register definitions and operational description of
SPI mode has been split into two sections because of
the differences between the PIC16C66/67 and the
other PIC16C6X devices. The default reset values of
both the SPI modules is the same regardless of the
device:
11.2 SPI Mode for PIC16C62/62A/R62/63/R63/64/

       64A/R64/65/65A/R65 .......................................84
11.3 SPI Mode for PIC16C66/67..............................89
11.4 I2CTM Overview ................................................95
11.5 SSP I2C Operation...........................................99

Refer to Application Note AN578, "Use of the SSP Mod-
ule in the I 2C Multi-Master Environment."

1997 Microchip Technology Inc.                                                              DS30234D-page 83
PIC16C6X               Applicable Devices
                       61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

11.2 SPI Mode for PIC16C62/62A/R62/63/
          R63/64/64A/R64/65/65A/R65

This section contains register definitions and opera-
tional characteristics of the SPI module for the
PIC16C62, PIC16C62A, PIC16CR62, PIC16C63,
PIC16CR63, PIC16C64, PIC16C64A, PIC16CR64,
PIC16C65, PIC16C65A, PIC16CR65.

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

U-0 U-0 R-0            R-0            R-0  R-0         R-0  R-0

   --     --      D/A  P              S    R/W         UA   BF                  R = Readable bit
bit7
                                                                                bit0 W = Writable bit
bit 7-6:                                                                                 U = Unimplemented bit,
bit 5:
bit 4:                                                                                    read as `0'
bit 3:
bit 2:                                                                          - n =Value at POR reset

bit 1:    Unimplemented: Read as '0'

          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

          P: Stop bit (I2C mode only. This bit is cleared when the SSP module is disabled, 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

          S: Start bit (I2C mode only. This bit is cleared when the SSP module is disabled, 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

          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 valid from the address
          match to the next start bit, stop bit, or ACK bit.
          1 = Read
          0 = Write

          UA: Update Address (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

DS30234D-page 84                                                                1997 Microchip Technology Inc.
        Applicable Devices                                                                   PIC16C6X
        61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

FIGURE 11-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                             R = Readable bit
bit7                                                                                 bit0  W = Writable bit
                                                                                           U = Unimplemented bit,

                                                                                                 read as `0'
                                                                                           - n =Value at POR reset

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

bit 6: SSPOV: Receive Overflow Detect 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 register is lost. Overflow can only occur in slave mode. The user must read the SSP-
        BUF, 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

bit 5: 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.

bit 4: CKP: Clock Polarity Select bit

        In SPI mode
        1 = Idle state for clock is a high level. Transmit happens on falling edge, receive on rising edge.
        0 = Idle state for clock is a low level. Transmit happens on rising edge, receive on falling edge.

        In I2C mode
        SCK release control
        1 = Enable clock
        0 = Holds clock low (clock stretch) (Used to ensure data setup time)

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

1997 Microchip Technology Inc.                                                             DS30234D-page 85
PIC16C6X  Applicable Devices
          61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

11.2.1 OPERATION OF SSP MODULE IN SPI                       EXAMPLE 11-1: LOADING THE SSPBUF
            MODE                                                                    (SSPSR) REGISTER

Applicable Devices                                          BSF STATUS, RP0 ;Specify Bank 1
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67
                                                            LOOP BTFSS SSPSTAT, BF    ;Has data been
The SPI mode allows 8-bits of data to be synchro-                                     ;received
nously transmitted and received simultaneously. To                                    ;(transmit
accomplish communication, typically three pins are
used:                                                       GOTO LOOP                 ;complete)?
                                                                                      ;No
Serial Data Out (SDO)
Serial Data In (SDI)                                      BCF STATUS, RP0           ;Specify Bank 0
Serial Clock (SCK)                                        MOVF SSPBUF, W            ;W reg = contents

Additionally a fourth pin may be used when in a slave       MOVWF RXDATA              ;of SSPBUF
mode of operation:                                                                    ;Save in user RAM

Slave Select (SS)                                         MOVF TXDATA, W            ;W reg = contents
                                                                                      ; of TXDATA
When initializing the SPI, several options need to be
specified. This is done by programming the appropriate      MOVWF SSPBUF              ;New data to xmit
control bits in the SSPCON register (SSPCON<5:0>).
These control bits allow the following to be specified:     The block diagram of the SSP module, when in SPI
                                                            mode (Figure 11-3), shows that the SSPSR register is
Master Mode (SCK is the clock output)                     not directly readable or writable, and can only be
Slave Mode (SCK is the clock input)                       accessed from addressing the SSPBUF register. Addi-
Clock Polarity (Output/Input data on the Rising/          tionally, the SSP status register (SSPSTAT) indicates
                                                            the various status conditions.
   Falling edge of SCK)
Clock Rate (Master mode only)                             FIGURE 11-3: SSP BLOCK DIAGRAM
Slave Select Mode (Slave mode only)                                            (SPI MODE)

The SSP consists of a transmit/receive Shift Register                    Read                     Internal
(SSPSR) and a Buffer register (SSPBUF). The SSPSR                                                 data bus
shifts the data in and out of the device, MSb first. The
SSPBUF holds the data that was written to the SSPSR,                                       Write
until the received data is ready. Once the 8-bits of data
have been received, that byte is moved to the SSPBUF                           SSPBUF reg
register. Then the Buffer Full bit, BF (SSPSTAT<0>)
and flag bit SSPIF are set. This double buffering of the    RC4/SDI/SDA         SSPSR reg           shift
received data (SSPBUF) allows the next byte to start        RC5/SDO      bit0                       clock
reception before reading the data that was just
received. Any write to the SSPBUF register during           RA5/SS       SS Control
transmission/reception of data will be ignored, and the                       Enable
write collision detect bit, WCOL (SSPCON<7>) will be        RC3/SCK/
set. User software must clear bit WCOL so that it can       SCL             Edge
be determined if the following write(s) to the SSPBUF                       Select
completed successfully. When the application software
is expecting to receive valid data, the SSPBUF register                                      2
should be read before the next byte of data to transfer                               Clock Select
is written to the SSPBUF register. The Buffer Full bit BF
(SSPSTAT<0>) indicates when the SSPBUF register                          SSPM3:SSPM0          TMR2 output
has been loaded with the received data (transmission                                   4              2
is complete). When the SSPBUF is read, bit BF is
cleared. This data may be irrelevant if the SPI is only a                 Edge             Prescaler TCY
transmitter. Generally the SSP Interrupt is used to                      Select            4, 16, 64
determine when the transmission/reception has com-
pleted. The SSPBUF register must be read and/or writ-                    TRISC<3>
ten. If the interrupt method is not going to be used, then
software polling can be done to ensure that a write col-                        1997 Microchip Technology Inc.
lision does not occur. Example 11-1 shows the loading
of the SSPBUF (SSPSR) register for data transmis-
sion. The shaded instruction is only required if the
received data is meaningful.

DS30234D-page 86
     Applicable Devices                                                  PIC16C6X
     61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

To enable the serial port, SSP enable bit SSPEN             The master can initiate the data transfer at any time
(SSPCON<5>) must be set. To reset or reconfigure SPI        because it controls the SCK. The master determines
mode, clear enable bit SSPEN, re-initialize SSPCON          when the slave (Processor 2) is to broadcast data by
register, and then set enable bit SSPEN. This config-       the software protocol.
ures the SDI, SDO, SCK, and SS pins as serial port
pins. For the pins to behave as the serial port function,   In master mode the data is transmitted/received as
they must have their data direction bits (in the TRIS reg-  soon as the SSPBUF register is written to. If the SPI is
ister) appropriately programmed. That is:                   only going to receive, the SCK output could be disabled
                                                            (programmed as an input). The SSPSR register will
SDI must have TRISC<4> set                                continue to shift in the signal present on the SDI pin at
                                                            the programmed clock rate. As each byte is received, it
SDO must have TRISC<5> cleared                            will be loaded into the SSPBUF register as if a normal
                                                            received byte (interrupts and status bits appropriately
SCK (Master mode) must have TRISC<3>                      set). This could be useful in receiver applications as a
   cleared                                                  "line activity monitor" mode.

SCK (Slave mode) must have TRISC<3> set                   In slave mode, the data is transmitted and received as
                                                            the external clock pulses appear on SCK. When the
SS must have TRISA<5> set (if implemented)                last bit is latched interrupt flag bit SSPIF (PIR1<3>) is
                                                            set.
Any serial port function that is not desired may be over-
ridden by programming the corresponding data direc-         The clock polarity is selected by appropriately program-
tion (TRIS) register to the opposite value. An example      ming bit CKP (SSPCON<4>). This then would give
would be in master mode where you are only sending          waveforms for SPI communication as shown in
data (to a display driver), then both SDI and SS could      Figure 11-5 and Figure 11-6 where the MSB is trans-
be used as general purpose outputs by clearing their        mitted first. In master mode, the SPI clock rate (bit rate)
corresponding TRIS register bits.                           is user programmable to be one of the following:

Figure 11-4 shows a typical connection between two          Fosc/4 (or TCY)
microcontrollers. The master controller (Processor 1)       Fosc/16 (or 4 TCY)
initiates the data transfer by sending the SCK signal.       Fosc/64 (or 16 TCY)
Data is shifted out of both shift registers on their pro-    Timer2 output/2
grammed clock edge, and latched on the opposite edge
of the clock. Both processors should be programmed to       This allows a maximum bit clock frequency (at 20 MHz)
the same Clock Polarity (CKP), then both controllers        of 5 MHz. When in slave mode the external clock must
would send and receive data at the same time.               meet the minimum high and low times.
Whether the data is meaningful (or dummy data)
depends on the application software. This leads to          In sleep mode, the slave can transmit and receive data
three scenarios for data transmission:                      and wake the device from sleep.

Master sends data -- Slave sends dummy data

Master sends data -- Slave sends data

Master sends dummy data -- Slave sends data

FIGURE 11-4: SPI MASTER/SLAVE CONNECTION

SPI Master SSPM3:SSPM0 = 00xxb                                           SPI Slave SSPM3:SSPM0 = 010xb
                                                     SDO       SDI

               Serial Input Buffer                                                Serial Input Buffer
               (SSPBUF register)                                                  (SSPBUF register)

     Shift Register                    SDI                     SDO       Shift Register
       (SSPSR)                                                             (SSPSR)
                                                 Serial Clock
MSb                               LSb  SCK                          MSb                  LSb

                                                               SCK

PROCESSOR 1                                                              PROCESSOR 2

1997 Microchip Technology Inc.                                                              DS30234D-page 87
PIC16C6X                             Applicable Devices
                                     61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

The SS pin allows a synchronous slave mode. The                        point at which it was taken high. External pull-up/
SPI must be in slave mode (SSPCON<3:0> = 04h)                          pull-down resistors may be desirable, depending on the
and the TRISA<5> bit must be set the for synchro-                      application.
nous slave mode to be enabled. When the SS pin is
low, transmission and reception are enabled and                        To emulate two-wire communication, the SDO pin can
the SDO pin is driven. When the SS pin goes high,                      be connected to the SDI pin. When the SPI needs to
the SDO pin is no longer driven, even if in the mid-                   operate as a receiver the SDO pin can be configured as
dle of a transmitted byte, and becomes a floating                      an input. This disables transmissions from the SDO.
output. If the SS pin is taken low without resetting                   The SDI can always be left as an input (SDI function)
SPI mode, the transmission will continue from the                      since it cannot create a bus conflict.

FIGURE 11-5: SPI MODE TIMING, MASTER MODE OR SLAVE MODE W/O SS CONTROL

     SCK
     (CKP = 0)

     SCK
     (CKP = 1)

            SDO             bit7         bit6        bit5        bit4        bit3        bit2        bit1         bit0

            SDI

                         bit7                                                                                     bit0

            SSPIF

FIGURE 11-6: SPI MODE TIMING, SLAVE MODE WITH SS CONTROL

            SS

     SCK
     (CKP = 0)

     SCK
     (CKP = 1)

            SDO                   bit7         bit6        bit5        bit4        bit3        bit2         bit1        bit0

            SDI

                               bit7                                                                                     bit0

            SSPIF

TABLE 11-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    T0IE        INTE       RBIE          T0IF INTF RBIF 0000 000x                       0000 000u
                     PSPIF(2)            RCIF(1)     TXIF(1)     SSPIF       CCP1IF TMR2IF TMR1IF 0000 0000                   0000 0000
0Ch         PIR1     PSPIE(2)       (3)  RCIE(1)     TXIE(1)     SSPIE       CCP1IE TMR2IE TMR1IE 0000 0000                   0000 0000

8Ch         PIE1                    (3)

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

87h         TRISC PORTC Data Direction Register                                                             1111 1111 1111 1111

94h         SSPSTAT  --              --        D/A         P     S           R/W         UA          BF --00 0000 --00 0000

Legend:     x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used by SSP module in SPI
            mode.
Note 1:     These bits are associated with the USART which is implemented on the PIC16C63/R63/65/65A/R65 only.
        2:  PSPIF and PSPIE are reserved on the PIC16C62/62A/R62/63/R63, always maintain these bits clear.
        3:  PIR1<6> and PIE1<6> are reserved, always maintain these bits clear.

DS30234D-page 88                                                                                     1997 Microchip Technology Inc.
                 Applicable Devices                                    PIC16C6X
                 61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

11.3 SPI Mode for PIC16C66/67

This section contains register definitions and opera-
tional characterisitics of the SPI module on the
PIC16C66 and PIC16C67 only.

FIGURE 11-7: SSPSTAT: SYNC SERIAL PORT STATUS REGISTER (ADDRESS 94h)(PIC16C66/67)

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

SMP CKE D/A                       P    S    R/W    UA         BF       R = Readable bit
                                                                 bit0  W = Writable bit
bit7                                                                   U = Unimplemented bit,

                                                                             read as `0'
                                                                       - n =Value at POR reset

bit 7:  SMP: SPI data input sample phase
        SPI Master Mode
        1 = Input data sampled at end of data output time
        0 = Input data sampled at middle of data output time
        SPI Slave Mode
        SMP must be cleared when SPI is used in slave mode

bit 6:  CKE: SPI Clock Edge Select (Figure 11-11, Figure 11-12, and Figure 11-13)
        CKP = 0
bit 5:  1 = Data transmitted on rising edge of SCK
bit 4:  0 = Data transmitted on falling edge of SCK
bit 3:  CKP = 1
bit 2:  1 = Data transmitted on falling edge of SCK
bit 1:  0 = Data transmitted on rising edge of SCK

        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

        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

        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

        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

        UA: Update Address (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

1997 Microchip Technology Inc.                                       DS30234D-page 89
PIC16C6X           Applicable Devices
                   61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

FIGURE 11-8: SSPCON: SYNC SERIAL PORT CONTROL REGISTER (ADDRESS 14h)(PIC16C66/67)

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

WCOL SSPOV SSPEN  CKP  SSPM3 SSPM2 SSPM1 SSPM0                               R = Readable bit
bit7                                                                  bit0    W = Writable bit
                                                                              U = Unimplemented bit,

                                                                                    read as `0'
                                                                              - n =Value at POR reset

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

bit 6: 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 over-
        flow, 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

bit 5: 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.

bit 4:  CKP: Clock Polarity Select bit
        In SPI mode
        1 = Idle state for clock is a high level
        0 = Idle state for clock is a low level
        In I2C mode
        SCK release control
        1 = Enable clock
        0 = Holds clock low (clock stretch) (Used to ensure data setup time)

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

DS30234D-page 90                                                               1997 Microchip Technology Inc.
Applicable Devices                                                                    PIC16C6X
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67

11.3.1 SSP MODULE IN SPI MODE FOR                           EXAMPLE 11-2: LOADING THE SSPBUF
            PIC16C66/67                                                             (SSPSR) REGISTER
                                                                                    (PIC16C66/67)
The SPI mode allows 8-bits of data to be synchro-
nously transmitted and received simultaneously. To                   BCF STATUS, RP1  ;Specify Bank 1
accomplish communication, typically three pins are                   BSF STATUS, RP0  ;
used:                                                       LOOP BTFSS SSPSTAT, BF    ;Has data been
                                                                                      ;received
Serial Data Out (SDO) RC5/SDO                                      GOTO LOOP        ;(transmit
                                                                     BCF STATUS, RP0  ;complete)?
Serial Data In (SDI) RC4/SDI/SDA                                   MOVF SSPBUF, W   ;No
                                                                                      ;Specify Bank 0
Serial Clock (SCK) RC3/SCK/SCL                                     MOVWF RXDATA     ;W reg = contents
                                                                     MOVF TXDATA, W   ; of SSPBUF
Additionally a fourth pin may be used when in a slave                                 ;Save in user RAM
mode of operation:                                                   MOVWF SSPBUF
                                                                                      ;W reg = contents
Slave Select (SS) RA5/SS                                                            ; of TXDATA
                                                                                      ;New data to xmit
When initializing the SPI, several options need to be
specified. This is done by programming the appropriate      The block diagram of the SSP module, when in SPI
control bits in the SSPCON register (SSPCON<5:0>)           mode (Figure 11-9), shows that the SSPSR is not
and SSPSTAT<7:6>. These control bits allow the fol-         directly readable or writable, and can only be accessed
lowing to be specified:                                     from addressing the SSPBUF register. Additionally, the
                                                            SSP status register (SSPSTAT) indicates the various
Master Mode (SCK is the clock output)                     status conditions.

Slave Mode (SCK is the clock input)                       FIGURE 11-9: SSP BLOCK DIAGRAM
                                                                                 (SPI MODE)(PIC16C66/67)
Clock Polarity (Idle stat