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

型号

产品描述

搜索
 

PIC16C65B-04/SP

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

器件描述

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

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

参数

PIC16C65B-04/SP功能数量 1
PIC16C65B-04/SP端子数量 44
PIC16C65B-04/SP最大工作温度 85 Cel
PIC16C65B-04/SP最小工作温度 -40 Cel
PIC16C65B-04/SP最大供电/工作电压 5.5 V
PIC16C65B-04/SP最小供电/工作电压 4.5 V
PIC16C65B-04/SP额定供电电压 5 V
PIC16C65B-04/SP外部数据总线宽度 0.0
PIC16C65B-04/SP输入输出总线数量 33
PIC16C65B-04/SP线速度 20 MHz
PIC16C65B-04/SP加工封装描述 10 × 10 MM, 1 MM HEIGHT, 塑料, MS-026, TQFP-44
PIC16C65B-04/SP无铅 Yes
PIC16C65B-04/SP欧盟RoHS规范 Yes
PIC16C65B-04/SP中国RoHS规范 Yes
PIC16C65B-04/SP状态 ACTIVE
PIC16C65B-04/SP工艺 CMOS
PIC16C65B-04/SP包装形状 SQUARE
PIC16C65B-04/SP包装尺寸 FLATPACK, THIN PROFILE
PIC16C65B-04/SP表面贴装 Yes
PIC16C65B-04/SP端子形式 GULL WING
PIC16C65B-04/SP端子间距 0.8000 mm
PIC16C65B-04/SP端子涂层 MATTE 锡
PIC16C65B-04/SP端子位置
PIC16C65B-04/SP包装材料 塑料/环氧树脂
PIC16C65B-04/SP温度等级 INDUSTRIAL
PIC16C65B-04/SPADC通道 Yes
PIC16C65B-04/SP地址总线宽度 0.0
PIC16C65B-04/SP位数 8
PIC16C65B-04/SP最大FCLK时钟频率 20 MHz
PIC16C65B-04/SP微处理器类型 精简指令集微控制器
PIC16C65B-04/SPPWM通道 Yes
PIC16C65B-04/SPROM编程 OTPROM

文档预览

PIC16C65B-04/SP器件文档内容

            PIC16C63A/65B/73B/74B

8-Bit CMOS Microcontrollers with A/D Converter

Devices included in this data sheet:                      PIC16C7X Peripheral Features:

PIC16C63A         PIC16C73B                            Timer0: 8-bit timer/counter with 8-bit prescaler
PIC16C65B         PIC16C74B                            Timer1: 16-bit timer/counter with prescaler

PIC16CXX Microcontroller Core Features:                      can be incremented during SLEEP via external
                                                             crystal/clock
High performance RISC CPU                               Timer2: 8-bit timer/counter with 8-bit period
Only 35 single word instructions to learn                  register, prescaler and postscaler
All single cycle instructions except for program         Capture, Compare, PWM modules
                                                             - Capture is 16-bit, max. resolution is 200 ns
   branches which are two cycle                              - Compare is 16-bit, max. resolution is 200 ns
Operating speed: DC - 20 MHz clock input                   - PWM max. resolution is 10-bit
                                                          8-bit multichannel Analog-to-Digital converter
                           DC - 200 ns instruction cycle   Synchronous Serial Port (SSP) with SPITM
4 K x 14 words of Program Memory,                          and I2CTM
                                                          Universal Synchronous Asynchronous Receiver
   192 x 8 bytes of Data Memory (RAM)                        Transmitter (USART/SCI)
Interrupt capability                                     Parallel Slave Port (PSP), 8-bits wide with
Eight-level deep hardware stack                            external RD, WR and CS controls
Direct, indirect and relative addressing modes          Brown-out detection circuitry for Brown-out Reset
Power-on Reset (POR)                                       (BOR)
Power-up Timer (PWRT) and Oscillator Start-up
                                                          Pin Diagram:
   Timer (OST)
Watchdog Timer (WDT) with its own on-chip RC                  PDIP, Windowed CERDIP

   oscillator for reliable operation                      MCLR/VPP         1                 40  RB7
Programmable code protection
Power-saving SLEEP mode                                 RA0/AN0          2                 39  RB6
Selectable oscillator options
Low power, high speed CMOS EPROM                        RA1/AN1          3                 38  RB5

   technology                                             RA2/AN2          4                 37  RB4
Wide operating voltage range: 2.5V to 5.5V
High Sink/Source Current 25/25 mA                       RA3/AN3/VREF     5                 36  RB3
Commercial, Industrial and Automotive
                                                          RA4/T0CKI        6                 35  RB2
   temperature ranges
Low power consumption:                                  RA5/SS/AN4       7   PIC16C65B     34  RB1
                                                                                  PIC16C74B
   - < 5 mA @ 5V, 4 MHz                                   RE0/RD/AN5       8                 33  RB0/INT
   - 23 A typical @ 3V, 32 kHz
   - < 1.2 A typical standby current                     RE1/WR/AN6       9                 32  VDD

                                                          RE2/CS/AN7       10                31  VSS

                                                          VDD              11                30  RD7/PSP7

                                                          VSS              12                29  RD6/PSP6

                                                          OSC1/CLKIN       13                28  RD5/PSP5

                                                          OSC2/CLKOUT      14                27  RD4/PSP4

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

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

                                                          RC2/CCP1         17                24  RC5/SDO

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

                                                          RD0/PSP0         19                22  RD3/PSP3

              I/O   A/D                                   RD1/PSP1         20                21  RD2/PSP2
             Pins  Chan.
  Devices                        PSP  Interrupts
              22      -
PIC16C63A     33      -           No       10
PIC16C65B     22      5          Yes       11
PIC16C73B     33      8           No       11
PIC16C74B                        Yes       12

2000 Microchip Technology Inc.                                                                  DS30605C-page 1
PIC16C63A/65B/73B/74B

                                                                                                                                                 SDIP, SOIC, Windowed CERDIP

                                                                                                            MCLR/VPP                                  1                  28    RB7

                                                                                                                         RA0/AN0                      2                   27    RB6

                                                                                                                         RA1/AN1                      3                   26    RB5

                                                                                                                         RA2/AN2                      4     PIC16C63A     25    RB4
                                                                                                                                                               PIC16C73B
                                                                                        RA3/AN3/VREF                                                  5                   24    RB3

                                                                                                            RA4/T0CKI                                 6                   23    RB2

                                                                                                  RA5/SS/AN4                                          7                   22    RB1

                                                                                                                                                 VSS  8                   21    RB0/INT

                                                                                                  OSC1/CLKIN                                          9                   20    VDD

                                                                                        OSC2/CLKOUT                                                   10                  19    VSS

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

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

                                                                                                            RC2/CCP1                                  13                  16    RC5/SDO

                                                                                        RC3/SCK/SCL                                                   14                  15    RC4/SDI/SDA                                                                           RC1/T1OSI/CCP2

          PLCC                RA3/AN3/VREF   RA2/AN2   RA1/AN1      RA0/AN0   MCLR/VPP  NC        RB7       RB6          RB5      RB4        NC                           MQFP          RC6/TX/CKRC5/SDORC4/SDI/SDARD3/PSP3RD2/PSP2RD1/PSP1RD0/PSP0RC3/SCK/SCLRC2/CCP1              NC
                                                                                                                                                                          TQFP
           RA4/T0CKI
         RA5/SS/AN4           6              5         4            3         2         1         44        43           42       41         40
        RE0/RD/AN5
        RE1/WR/AN6        7                                                                                                                      39   RB3                               44         43     42         41      40      39      38        37       36      35            34
        RE2/CS/AN7
                          8                                                                                                                      38   RB2        RC7/RX/DT           1                                                                                                    33        NC
                     VDD                                                                                                                              RB1         RD4/PSP4                                                                                                                          RC0/T1OSO/T1CKI
                     VSS                                                                                                                         37   RB0/INT     RD5/PSP5           2                                                                                                    32        OSC2/CLKOUT
        OSC1/CLKIN                                                                                                                                    VDD         RD6/PSP6                                                                                                                          OSC1/CLKIN
     OSC2/CLKOUT          9                                                                                                                      36               RD7/PSP7           3                                                                                                    31        VSS
RC0/T1OSO/T1CKI                                                                                                                                  35   VSS                                                                                                                                           VDD
                      NC  10                     PIC16C65B                                                                                            RD7/PSP7             VSS       4                                                                                                    30        RE2/CS/AN7
                          11                                                                                                                          RD6/PSP6             VDD       5 PIC16C65B 29                                                                                                 RE1/WR/AN6
                                                                                                                                                 34   RD5/PSP5       RB0/INT                                                                                                                        RE0/RD/AN5
                          12                     PIC16C74B                                                                                       33   RD4/PSP4             RB1       6             PIC16C74B                                                                              28        RA5/SS/AN4
                          13                                                                                                                          RC7/RX/DT            RB2       7                                                                                                    27        RA4/T0CKI
                                                                                                                                                 32                        RB3
                          14                                                                                                                                                         8                                                                                                    26

                          15                                                                                                                     31                                  9                                                                                                    25

                          16                                                                                                                     30                                  10                                                                                                   24

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

                              18             19        20           21        22        23        24        25           26       27         28

                             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/VPPRA0/AN0  RA1/AN1   RA2/AN2       RA3/AN3/VREF

                Key Features                                                                                                                     PIC16C63A                PIC16C65B                                  PIC16C73B                                                                      PIC16C74B
PICmicroTM Mid-Range MCU Family
                                                                                                                                             4K                             4K                                4K                                                                                               4K
    Reference Manual (DS33023)                                                                                                              192                            192                               192                                                                                              192
                                                                                                                                             28                             40                                28                                                                                               40
   Program Memory (EPROM) x 14                                                                                                               --                            Yes                                --                                                                                              Yes
        Data Memory (Bytes) x 8
                      Pins                                                                                                                    2                              2                                 2                                                                                                2
             Parallel Slave Port                                                                                                              3                              3                                 3                                                                                                3
                                                                                                                                             --                             --                                 5                                                                                                8
   Capture/Compare/PWM Modules                                                                                                      SPI/I2C, USART                 SPI/I2C, USART                    SPI/I2C, USART                                                                                   SPI/I2C, USART
               Timer Modules                                                                                                                Yes                            Yes                               Yes                                                                                              Yes
                A/D Channels                                                                                                                Yes                            Yes                               Yes                                                                                              Yes
                                                                                                                                             10                             11                                11                                                                                               12
          Serial Communication                                                                                                    28-pin SDIP, SOIC,                 40-pin PDIP;                  28-pin SDIP, SOIC,                                                                                   40-pin PDIP;
     In-Circuit Serial Programming                                                                                                        SSOP,                      44-pin PLCC,                          SSOP,                                                                                        44-pin PLCC,
                                                                                                                                  Windowed CERDIP                   MQFP, TQFP,                    Windowed CERDIP                                                                                     MQFP, TQFP,
              Brown-out Reset                                                                                                                                    Windowed CERDIP                                                                                                                    Windowed CERDIP
             Interrupt Sources

                  Packages

DS30605C-page 2                                                                                                                                                                                                                               2000 Microchip Technology Inc.
                             PIC16C63A/65B/73B/74B

Table of Contents

1.0 General Description...................................................................................................................................................................... 5
2.0 PIC16C63A/65B/73B/74B Device Varieties ................................................................................................................................. 7
3.0 Architectural Overview ................................................................................................................................................................. 9
4.0 Memory Organization ................................................................................................................................................................. 15
5.0 I/O Ports ..................................................................................................................................................................................... 29
6.0 Timer0 Module ........................................................................................................................................................................... 39
7.0 Timer1 Module ........................................................................................................................................................................... 43
8.0 Timer2 Module ........................................................................................................................................................................... 47
9.0 Capture/Compare/PWM Modules .............................................................................................................................................. 49
10.0 Synchronous Serial Port (SSP) Module ..................................................................................................................................... 55
11.0 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART)................................................................ 65
12.0 Analog-to-Digital Converter (A/D) Module ................................................................................................................................. 79
13.0 Special Features of the CPU...................................................................................................................................................... 85
14.0 Instruction Set Summary ............................................................................................................................................................ 99
15.0 Development Support............................................................................................................................................................... 107
16.0 Electrical Characteristics .......................................................................................................................................................... 113
17.0 DC and AC Characteristics Graphs and Tables....................................................................................................................... 139
18.0 Packaging Information.............................................................................................................................................................. 153
Appendix A: Revision History ........................................................................................................................................................ 165
Appendix B: Device Differences..................................................................................................................................................... 165
Appendix C: Device Migrations - PIC16C63/65A/73A/74A  PIC16C63A/65B/73B/74B ............................................................. 166
Appendix D: Migration from Baseline to Mid-Range Devices......................................................................................................... 168
On-Line Support................................................................................................................................................................................. 175
Reader Response .............................................................................................................................................................................. 176
Product Identification System ............................................................................................................................................................ 177

                                    TO OUR VALUED CUSTOMERS

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

Most Current Data Sheet

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

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

Errata

  An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
  devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
  of silicon and revision of document to which it applies.
  To determine if an errata sheet exists for a particular device, please check with one of the following:
   Microchip's Worldwide Web site; http://www.microchip.com
   Your local Microchip sales office (see last page)
   The Microchip Corporate Literature Center; U.S. FAX: (480) 792-7277
  When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include liter-
  ature number) you are using.

Customer Notification System

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

2000 Microchip Technology Inc.  DS30605C-page 3
PIC16C63A/65B/73B/74B

NOTES:

DS30605C-page 4         2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

1.0 GENERAL DESCRIPTION                                     A highly reliable Watchdog Timer (WDT), with its own
                                                            on-chip RC oscillator, provides protection against soft-
The PIC16C63A/65B/73B/74B devices are low cost,             ware lockup, and also provides one way of waking the
high performance, CMOS, fully-static, 8-bit micro-          device from SLEEP.
controllers in the PIC16CXX mid-range family.
                                                            A UV erasable CERDIP packaged version is ideal for
All PICmicro microcontrollers employ an advanced           code development, while the cost effective One-Time-
RISC architecture. The PIC16CXX microcontroller             Programmable (OTP) version is suitable for production
family has enhanced core features, eight-level deep         in any volume.
stack and multiple internal and external interrupt
sources. The separate instruction and data buses of         The PIC16C63A/65B/73B/74B devices fit nicely in
the Harvard architecture allow a 14-bit wide instruction    many applications ranging from security and remote
word with the separate 8-bit wide data. The two stage       sensors to appliance control and automotive. The
instruction pipeline allows all instructions to execute in  EPROM technology makes customization of applica-
a single cycle, except for program branches, which          tion programs (transmitter codes, motor speeds,
require two cycles. A total of 35 instructions (reduced     receiver frequencies, etc.) extremely fast and con-
instruction set) are available. Additionally, a large reg-  venient. The small footprint packages make this micro-
ister set gives some of the architectural innovations       controller series perfect for all applications with space
used to achieve a very high performance.                    limitations. Low cost, low power, high performance,
                                                            ease of use and I/O flexibility make the PIC16C63A/
The PIC16C63A/73B devices have 22 I/O pins. The             65B/73B/74B devices very versatile, even in areas
PIC16C65B/74B devices have 33 I/O pins. Each                where no microcontroller use has been considered
device has 192 bytes of RAM. In addition, several           before (e.g., timer functions, serial communication,
peripheral features are available, including: three timer/  capture and compare, PWM functions and coprocessor
counters, two Capture/Compare/PWM modules, and              applications).
two serial ports. The Synchronous Serial Port (SSP)
can be configured as either a 3-wire Serial Peripheral      1.1 Family and Upward Compatibility
Interface (SPI) or the two-wire Inter-Integrated Circuit
(I2C) bus. The Universal Synchronous Asynchronous           Users familiar with the PIC16C5X microcontroller fam-
Receiver Transmitter (USART) is also known as the           ily will realize that this is an enhanced version of the
Serial Communications Interface or SCI. Also, a 5-          PIC16C5X architecture. Please refer to Appendix A for
channel high speed 8-bit A/D is provided on the             a detailed list of enhancements. Code written for the
PIC16C73B, while the PIC16C74B offers 8 channels.           PIC16C5X can be easily ported to the PIC16CXX fam-
The 8-bit resolution is ideally suited for applications     ily of devices (Appendix B).
requiring low cost analog interface, e.g., thermostat
control, pressure sensing, etc.                             1.2 Development Support

The PIC16C63A/65B/73B/74B devices have special              PICmicro devices are supported by the complete line
features to reduce external components, thus reducing       of Microchip Development tools.
cost, enhancing system reliability and reducing power
consumption. There are four oscillator options, of which    Please refer to Section 15.0 for more details about
the single pin RC oscillator provides a low cost solution,  Microchip's development tools.
the LP oscillator minimizes power consumption, XT is
a standard crystal, and the HS is for high speed crys-
tals. The SLEEP (power-down) feature provides a
power-saving mode. The user can wake-up the chip
from SLEEP through several external and internal
interrupts and RESETS.

2000 Microchip Technology Inc.                             DS30605C-page 5
PIC16C63A/65B/73B/74B

NOTES:

DS30605C-page 6         2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

2.0 PIC16C63A/65B/73B/74B                                 2.3 Quick-Turnaround-Production
         DEVICE VARIETIES                                          (QTP) Devices

A variety of frequency ranges and packaging options       Microchip offers a QTP Programming Service for fac-
are available. Depending on application and production    tory production orders. This service is made available
requirements, the proper device option can be selected    for users who choose not to program a medium to high
using the information in the PIC16C63A/65B/73B/74B        quantity of units and whose code patterns have stabi-
Product Identification System section at the end of this  lized. The devices are identical to the OTP devices but
data sheet. When placing orders, please use that page     with all EPROM locations and configuration options
of the data sheet to specify the correct part number.     already programmed by the factory. Certain code and
                                                          prototype verification procedures apply before produc-
For the PIC16C7X family, there are two device "types"     tion shipments are available. Please contact your local
as indicated in the device number:                        Microchip Technology sales office for more details.

1. C, as in PIC16C74. These devices have                  2.4 Serialized Quick-Turnaround
      EPROM type memory and operate over the                       Production (SQTPSM) Devices
      standard voltage range.
                                                          Microchip offers a unique programming service where
2. LC, as in PIC16LC74. These devices have                a few user-defined locations in each device are pro-
      EPROM type memory and operate over an               grammed with different serial numbers. The serial num-
      extended voltage range.                             bers may be random, pseudo-random or sequential.

2.1 UV Erasable Devices                                   Serial programming allows each device to have a
                                                          unique number, which can serve as an entry code,
The UV erasable version, offered in windowed CERDIP       password or ID number.
packages, is optimal for prototype development and
pilot programs. This version can be erased and
reprogrammed to any of the oscillator modes.
Microchip's PICSTART Plus and PRO MATE II
programmers both support programming of the
PIC16C63A/65B/73B/74B.

2.2 One-Time-Programmable (OTP)
         Devices

The availability of OTP devices is especially useful for
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.

2000 Microchip Technology Inc.                           DS30605C-page 7
PIC16C63A/65B/73B/74B

NOTES:

DS30605C-page 8         2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

3.0 ARCHITECTURAL OVERVIEW                                 PIC16CXX devices contain an 8-bit ALU and working
                                                           register. The ALU is a general purpose arithmetic unit.
The high performance of the PIC16CXX family can be         It performs arithmetic and Boolean functions between
attributed to a number of architectural features com-      the data in the working register and any register file.
monly found in RISC microprocessors. To begin with,
the PIC16CXX uses a Harvard architecture, in which         The ALU is 8-bits wide and capable of addition, sub-
program and data are accessed from separate memo-          traction, shift and logical operations. Unless otherwise
ries using separate buses. This improves bandwidth         mentioned, arithmetic operations are two's comple-
over traditional von Neumann architecture, in which        ment in nature. In two-operand instructions, typically
program and data are fetched from the same memory          one operand is the working register (W register). The
using the same bus. Separating program and data            other operand is a file register or an immediate con-
buses further allows instructions to be sized differently  stant. In single operand instructions, the operand is
than the 8-bit wide data word. Instruction opcodes are     either the W register or a file register.
14-bits wide, making it possible to have all single word
instructions. A 14-bit wide program memory access          The W register is an 8-bit working register used for ALU
bus fetches a 14-bit instruction in a single cycle. A      operations. It is not an addressable register.
two-stage pipeline overlaps fetch and execution of
instructions (Example 3-1). Consequently, most             Depending on the instruction executed, the ALU may
instructions execute in a single cycle (200 ns @           affect the values of the Carry (C), Digit Carry (DC), and
20 MHz) except for program branches.                       Zero (Z) bits in the STATUS register. The C and DC bits
                                                           operate as a borrow bit and a digit borrow out bit,
All devices covered by this data sheet contain             respectively, in subtraction. See the SUBLW and SUBWF
4K x 14-bit program memory and 192 x 8-bit data            instructions for examples.
memory.

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' make programming with the
PIC16CXX simple yet efficient. In addition, the learning
curve is reduced significantly.

2000 Microchip Technology Inc.                            DS30605C-page 9
PIC16C63A/65B/73B/74B

FIGURE 3-1:       PIC16C63A/65B/73B/74B BLOCK DIAGRAM

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

                  Instruction reg                             Addr MUX                                       RB7:RB1

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

Timer0                Timer1       Timer2                                  (3)

                                                                      A/D(2)

CCP1                  CCP2         Synchronous                            USART
                                    Serial Port

Note 1: Higher order bits are from the STATUS register.
         2: A/D is not available on the PIC16C63A/65B.
         3: PSP and Ports D and E are not available on PIC16C63A/73B.

DS30605C-page 10                                                                                    2000 Microchip Technology Inc.
                                                       PIC16C63A/65B/73B/74B

TABLE 3-1: PIC16C63A/73B PINOUT DESCRIPTION

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

OSC1/CLKIN         9             9     I      ST/CMOS(3) Oscillator crystal input/external clock source input.
OSC2/CLKOUT
                   10            10    O               --       Oscillator crystal output. Connects to crystal or resonator in

                                                                crystal oscillator mode. In RC mode, the OSC2 pin outputs

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

                                                                the instruction cycle rate.

MCLR/VPP           1             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/AN0(4)         2             2     I/O             TTL      RA0 can also be analog input 0(4).

RA1/AN1(4)         3             3     I/O             TTL      RA1 can also be analog input 1(4).

RA2/AN2(4)         4             4     I/O             TTL      RA2 can also be analog input 2(4).

RA3/AN3/VREF(4)    5             5     I/O             TTL      RA3 can also be analog input 3 or analog reference

                                                                voltage(4).

RA4/T0CKI          6             6     I/O             ST       RA4 can also be the clock input to the Timer0 module.
RA5/SS/AN4(4)
                                                                Output is open drain type.

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

RB1                22            22    I/O             TTL

RB2                23            23    I/O             TTL

RB3                24            24    I/O             TTL

RB4                25            25    I/O             TTL      Interrupt-on-change pin.

RB5                26            26    I/O             TTL      Interrupt-on-change pin.
RB6
RB7                27            27    I/O    TTL/ST(2)         Interrupt-on-change pin. Serial programming clock.

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

                                                                PORTC is a bi-directional I/O port.

RC0/T1OSO/T1CKI 11               11    I/O             ST       RC0 can also be the Timer1 oscillator output or Timer1

                                                                clock input.

RC1/T1OSI/CCP2     12            12    I/O             ST       RC1 can also be the Timer1 oscillator input or Capture2

                                                                input/Compare2 output/PWM2 output.

RC2/CCP1           13            13    I/O             ST       RC2 can also be the Capture1 input/Compare1

                                                                output/PWM1 output.

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

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

                                                                data I/O (I2C mode).

RC5/SDO            16            16    I/O             ST       RC5 can also be the SPI Data Out (SPI mode).

RC6/TX/CK          17            17    I/O             ST       RC6 can also be the USART Asynchronous Transmit

                                                                or Synchronous Clock.

RC7/RX/DT          18            18    I/O             ST       RC7 can also be the USART Asynchronous Receive

                                                                or Synchronous Data.

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

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

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

         -- = Not used TTL = TTL input ST = Schmitt Trigger input

Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.

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

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

     4: A/D module is not available in the PIC16C63A.

2000 Microchip Technology Inc.                                                                           DS30605C-page 11
PIC16C63A/65B/73B/74B

TABLE 3-2: PIC16C65B/74B PINOUT DESCRIPTION

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

OSC1/CLKIN         13    14          30         I ST/CMOS(4) 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, OSC2 pin outputs

                                                                      CLKOUT 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/AN0(5)         2     3           19 I/O        TTL                RA0 can also be analog input 0(5).

RA1/AN1(5)         3     4           20 I/O        TTL                RA1 can also be analog input 1(5).

RA2/AN2(5)         4     5           21 I/O        TTL                RA2 can also be analog input 2(5).

RA3/AN3/VREF(5)    5     6           22 I/O        TTL                RA3 can also be analog input 3 or analog reference
                                                                      voltage(5).

RA4/T0CKI          6     7           23 I/O        ST                 RA4 can also be the clock input to the Timer0 timer/
RA5/SS/AN4(5)                                                         counter. Output is open drain type.
                   7     8           24 I/O        TTL
                                                                      RA5 can also be analog input 4(5) or 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(1)             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(2)          Interrupt-on-change pin. Serial programming clock.

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

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

         -- = Not used TTL = TTL input ST = Schmitt Trigger input

Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.

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

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

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

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

     5: A/D is not available on the PIC16C65B.

DS30605C-page 12                                                                            2000 Microchip Technology Inc.
                                                       PIC16C63A/65B/73B/74B

TABLE 3-2:       PIC16C65B/74B PINOUT DESCRIPTION (CONTINUED)

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

                                                                    PORTC is a bi-directional I/O port.

RC0/T1OSO/T1CKI 15             16    32 I/O            ST           RC0 can also be the Timer1 oscillator output or a
                                                                    Timer1 clock input.

RC1/T1OSI/CCP2 16              18    35 I/O            ST           RC1 can also be the Timer1 oscillator input or Capture2
                                                                    input/Compare2 output/PWM2 output.

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

RC3/SCK/SCL      18            20    37 I/O            ST           RC3 can also be the synchronous serial clock input/
                                                                    output 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        25            27    44 I/O            ST           RC6 can also be the USART Asynchronous Transmit or
                                                                    Synchronous Clock.

RC7/RX/DT        26            29    1          I/O    ST           RC7 can also be the USART Asynchronous Receive or
                                                                    Synchronous Data.

                                                                    PORTD is a bi-directional I/O port or parallel slave port
                                                                    when interfacing to a microprocessor bus.

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

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

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

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

                                                                    PORTE is a bi-directional I/O port.

RE0/RD/AN5(5)               8  9     25         I/O    ST/TTL(3)    RE0 can also be read control for the parallel slave port,
RE1/WR/AN6(5)                                                       or analog input 5(5).
RE2/CS/AN7(5)
                            9  10    26         I/O    ST/TTL(3)    RE1 can also be write control for the parallel slave port,
                                                                    or analog input 6(5).

                 10            11    27         I/O    ST/TTL(3)    RE2 can also be select control for the parallel slave
                                                                    port, or analog input 7(5).

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

                               40 33,34                             be left unconnected.

Legend: I = input              O = output       I/O = input/output          P = power
             -- = Not used     TTL = TTL input
                                                ST = Schmitt Trigger input

Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.
         2: This buffer is a Schmitt Trigger input when used in Serial Programming mode.
         3: This buffer is a Schmitt Trigger input when configured as general purpose I/O and a TTL input when used in the Parallel
               Slave Port mode (for interfacing to a microprocessor bus).
         4: This buffer is a Schmitt Trigger input when configured in RC oscillator mode and a CMOS input otherwise.

     5: A/D is not available on the PIC16C65B.

2000 Microchip Technology Inc.                                                                               DS30605C-page 13
PIC16C63A/65B/73B/74B

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

FIGURE 3-2:       CLOCK/INSTRUCTION CYCLE

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

OSC1                                                     PC+1                            PC+2
                                                  Fetch INST (PC+1)            Fetch INST (PC+2)
             Q1                                 Execute INST (PC)             Execute INST (PC+1)

             Q2                                                                                    Internal

             Q3                                                                                    phase
                                                                                                   clock

             Q4

             PC   PC

OSC2/CLKOUT           Fetch INST (PC)
      (RC mode)   Execute INST (PC-1)

EXAMPLE 3-1: INSTRUCTION PIPELINE FLOW

                   TCY0                   TCY1                TCY2    TCY3       TCY4              TCY5
                  Fetch 1              Execute 1
1. MOVLW 55h                                               Execute 2
2. MOVWF PORTB                          Fetch 2             Fetch 3

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

Note: 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.

DS30605C-page 14                                                                  2000 Microchip Technology Inc.
                                        PIC16C63A/65B/73B/74B

4.0 MEMORY ORGANIZATION                                4.2 Data Memory Organization

4.1 Program Memory Organization                        The data memory is partitioned into multiple banks
                                                       which contain the General Purpose Registers (GPR)
The PIC16C63A/65B/73B/74B has a 13-bit program         and the Special Function Registers (SFR). Bits RP1
counter capable of addressing an 8K x 14 program       and RP0 are the bank select bits.
memory space. All devices covered by this data sheet
have 4K x 14 bits of program memory. The address       RP1:RP0 (STATUS<6:5>)
range is 0000h - 0FFFh for all devices.                = 00  Bank0
                                                       = 01  Bank1
Accessing a location above 0FFFh will cause a wrap-    = 10  Bank2
around.                                                = 11  Bank3

The RESET vector is at 0000h and the interrupt vector  Each bank extends up to 7Fh (128 bytes). The lower
is at 0004h.                                           locations of each bank are reserved for the SFRs.
                                                       Above the SFRs are GPRs, implemented as static
FIGURE 4-1:   PIC16C63A/65B/73B/74B                    RAM.
              PROGRAM MEMORY MAP
              AND STACK                                All implemented banks contain SFRs. Frequently used
                                                       SFRs from one bank may be mirrored in another bank
              PC<12:0>                                 for code reduction and quicker access.

CALL,RETURN   13                                          Note: Maintain the IRP and RP1 bits clear in
RETFIE,RETLW                                                          these devices.

                                                       4.2.1  GENERAL PURPOSE REGISTER
                                                              FILE
             Stack Level 1

             Stack Level 8                             The register file can be accessed either directly, or indi-
             RESET Vector                              rectly, through the File Select Register (FSR)
                                                       (Section 4.5).

                                 0000h

User Memory   Interrupt Vector   0004h
   Space     On-chip Program     0005h
             Memory (Page 0)
                                 07FFh
             On-chip Program     0800h
             Memory (Page 1)
                                 0FFFh
                                 1000h

                                 1FFFh

2000 Microchip Technology Inc.                               DS30605C-page 15
PIC16C63A/65B/73B/74B

FIGURE 4-2:        REGISTER FILE MAP                    4.2.2 SPECIAL FUNCTION REGISTERS

   File                         File                    The Special Function Registers are registers used by
Address                      Address                    the CPU and Peripheral Modules for controlling the
                                                        desired operation of the device. These registers are
00h INDF(1)        INDF(1)   80h                        implemented as static RAM.

01h TMR0           OPTION_REG 81h                       The Special Function Registers can be classified into
                                                        two sets (core and peripheral). Those registers associ-
02h          PCL   PCL       82h                        ated with the "core" functions are described in this sec-
                                                        tion, and those related to the operation of the peripheral
03h STATUS         STATUS 83h                           features are described in the section of that peripheral
                                                        feature.
04h          FSR   FSR       84h

05h PORTA          TRISA     85h

06h PORTB          TRISB     86h

07h PORTC          TRISC     87h

08h PORTD(2)       TRISD(2) 88h
09h PORTE(2)       TRISE(2) 89h

0Ah PCLATH         PCLATH 8Ah

0Bh INTCON         INTCON 8Bh

0Ch PIR1           PIE1      8Ch

0Dh PIR2           PIE2      8Dh

0Eh TMR1L          PCON      8Eh

0Fh TMR1H                    8Fh

10h T1CON                    90h

11h TMR2                     91h

12h T2CON          PR2       92h

13h SSPBUF         SSPADD 93h

14h SSPCON         SSPSTAT 94h

15h CCPR1L                   95h

16h CCPR1H                   96h

17h CCP1CON                  97h

18h RCSTA          TXSTA     98h

19h TXREG          SPBRG 99h

1Ah RCREG                    9Ah

1Bh CCPR2L                   9Bh

1Ch CCPR2H                   9Ch

1Dh CCP2CON                  9Dh
1Eh ADRES(3)
                             9Eh

1Fh ADCON0(3)      ADCON1(3) 9Fh

20h                          A0h

         General   General
         Purpose   Purpose
         Register  Register

7Fh                                 FFh
           Bank 0  Bank 1

Unimplemented data memory locations, read as '0'.

Note 1: Not a physical register.
         2: These registers are not implemented on the
               PIC16C63A/73B, read as '0'.
         3: These registers are not implemented on the
               PIC16C63A/65B, read as '0'.

DS30605C-page 16                                         2000 Microchip Technology Inc.
                                                           PIC16C63A/65B/73B/74B

TABLE 4-1: SPECIAL FUNCTION REGISTER SUMMARY

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

Bank 0

00h     INDF(4)      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     PCL(4)       Program Counter's (PC) Least Significant Byte                                              0000 0000 0000 0000

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

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

05h     PORTA        --          -- PORTA Data Latch when written: PORTA pins when read                         --0x 0000 --0u 0000

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(5)     PORTD Data Latch when written: PORTD pins when read                                        xxxx xxxx uuuu uuuu

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

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

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

0Ch     PIR1         PSPIF(5) ADIF(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/PWM Register1 (LSB)                                                        xxxx xxxx uuuu uuuu

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

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

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/PWM Register2 (LSB)                                                        xxxx xxxx uuuu uuuu

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

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

1Eh     ADRES(6)     A/D Result register                                                                        xxxx xxxx uuuu uuuu

1Fh     ADCON0(6)    ADCS1 ADCS0               CHS2        CHS1     CHS0 GO/DONE                  --     ADON 0000 00-0 0000 00-0

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

Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the PC<12:8>.
         2: The IRP and RP1 bits are reserved; always maintain these bits clear.
         3: Other (non power-up) RESETS include external RESET through MCLR and Watchdog Timer Reset.
         4: These registers can be addressed from either bank.
         5: PORTD, PORTE and the parallel slave port are not implemented on the PIC16C63A/73B; always maintain these bits and
               registers clear.
         6: The A/D is not implemented on the PIC16C63A/65B; always maintain these bits and registers clear.

2000 Microchip Technology Inc.                                                                                 DS30605C-page 17
PIC16C63A/65B/73B/74B

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

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

Bank 1

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

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

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

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

84h      FSR(4)       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      TRISD(5)     PORTD Data Direction register                                                           1111 1111 1111 1111

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

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

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

8Ch      PIE1         PSPIE(5) ADIE(6)  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
                      Synchronous Serial Port (I2C mode) Address register                                         0000 0000 0000 0000
93h      SSPADD                                                                                        BF --00 0000 --00 0000

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

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      ADCON1(6)    --      --        --                  --       --     PCFG2 PCFG1 PCFG0 ---- -000 ---- -000

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

Note 1: The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the PC<12:8>.
         2: The IRP and RP1 bits are reserved; always maintain these bits clear.
         3: Other (non power-up) RESETS include external RESET through MCLR and Watchdog Timer Reset.
         4: These registers can be addressed from either bank.
         5: PORTD, PORTE and the parallel slave port are not implemented on the PIC16C63A/73B; always maintain these bits and
               registers clear.
         6: The A/D is not implemented on the PIC16C63A/65B; always maintain these bits and registers clear.

DS30605C-page 18                                                                           2000 Microchip Technology Inc.
                                         PIC16C63A/65B/73B/74B

4.2.2.1 STATUS Register                                          It is recommended that only BCF, BSF, SWAPF and
                                                                 MOVWF instructions be used to alter the STATUS regis-
The STATUS register, shown in Register 4-1, contains             ter. These instructions do not affect the Z, C or DC bits
the arithmetic status of the ALU, the RESET status and           in the STATUS register. For other instructions which do
the bank select bits for data memory.                            not affect status bits, see the "Instruction Set Sum-
                                                                 mary."
The STATUS register can be the destination for any
instruction, as with any other register. If the STATUS reg-          Note 1: These devices do not use bits IRP and
ister is the destination for an instruction that affects the Z,                  RP1 (STATUS<7:6>), maintain these bits
DC or C bits, then the write to these three bits is disabled.                    clear to ensure upward compatibility with
These bits are set or cleared according to the device                            future products.
logic. Furthermore, the TO and PD bits are not writable.
Therefore, the result of an instruction with the STATUS                      2: The C and DC bits operate as borrow and
register as destination may be different than intended.                          digit borrow bits, respectively, in subtrac-
                                                                                 tion. See the SUBLW and SUBWF instruc-
For example, CLRF STATUS will clear the upper three                              tions for examples.
bits and set the Z bit. This leaves the STATUS register
as 000u u1uu (where u = unchanged).

REGISTER 4-1: STATUS REGISTER (ADDRESS 03h, 83h)

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

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

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

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

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

         DC: Digit carry/borrow bit (ADDWF,ADDLW,SUBLW,SUBWF instructions) (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
         C(2): Carry/borrow bit (ADDWF,ADDLW,SUBLW,SUBWF instructions)
         1 = A carry-out from the most significant bit of the result occurred
         0 = No carry-out from the most significant bit of the result occurred

         Note 1: Maintain the IRP and RP1 bits clear.
                 2: For borrow and digit borrow, the polarity is reversed. A subtraction is executed by
                      adding the two's complement of the second operand. For rotate (RRF,RLF) instruc-
                      tions, this bit is loaded with either the high or low order bit of the source register.

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

2000 Microchip Technology Inc.                                                   DS30605C-page 19
PIC16C63A/65B/73B/74B

4.2.2.2 OPTION Register                                     Note:  To achieve a 1:1 prescaler assignment for
                                                                   the TMR0 register, assign the prescaler to
The OPTION_REG register is a readable and writable                 the watchdog timer.
register, which contains various control bits to configure
the TMR0/WDT prescaler, the external INT Interrupt,
TMR0 and the weak pull-ups on PORTB.

REGISTER 4-2:     OPTION_REG REGISTER (ADDRESS 81h)

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

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

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

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

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

                  PS2:PS0: Prescaler Rate Select bits

                  Bit Value TMR0 Rate WDT Rate

                         000  1:2      1:1

                         001  1:4      1:2

                         010  1:8      1:4

                         011  1 : 16   1:8

                         100  1 : 32   1 : 16

                         101  1 : 64   1 : 32

                         110  1 : 128  1 : 64

                         111  1 : 256  1 : 128

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

DS30605C-page 20                                                                   2000 Microchip Technology Inc.
                                            PIC16C63A/65B/73B/74B

4.2.2.3 INTCON Register                                   Note:  Interrupt flag bits are set when an interrupt
                                                                 condition occurs, regardless of the state of
The INTCON register is a readable and writable regis-            its corresponding enable bit, or the global
ter, which contains various enable and flag bits for the         enable bit, GIE (INTCON<7>). User soft-
TMR0 register overflow, RB Port change and external              ware should ensure the appropriate inter-
RB0/INT pin interrupts.                                          rupt flag bits are clear prior to enabling an
                                                                 interrupt.

REGISTER 4-3:  INTCON REGISTER (ADDRESS 0Bh, 8Bh)

               R/W-0             R/W-0      R/W-0         R/W-0  R/W-0  R/W-0  R/W-0      R/W-x
                                                                 RBIE    T0IF  INTF       RBIF
               GIE               PEIE       T0IE          INTE
                                                                                               bit 0
               bit 7

bit 7          GIE: Global Interrupt Enable bit

               1 = Enables all unmasked interrupts

               0 = Disables all interrupts

bit 6          PEIE: Peripheral Interrupt Enable bit

               1 = Enables all unmasked peripheral interrupts

               0 = Disables all peripheral interrupts

bit 5          T0IE: TMR0 Overflow Interrupt Enable bit

               1 = Enables the TMR0 interrupt

               0 = Disables the TMR0 interrupt

bit 4          INTE: RB0/INT 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 has overflowed (must be cleared in software)

               0 = TMR0 register did not overflow

bit 1          INTF: RB0/INT External Interrupt Flag bit

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

               0 = The RB0/INT external interrupt did not occur

bit 0          RBIF: RB Port Change Interrupt Flag bit

               1 = At least one of the RB7:RB4 pins changed state(1)

               0 = None of the RB7:RB4 pins have changed state

               Note 1: A mismatch condition will exist until PORTB is read. After reading PORTB, the RBIF
                            flag bit can be cleared.

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

2000 Microchip Technology Inc.                                                           DS30605C-page 21
PIC16C63A/65B/73B/74B

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

REGISTER 4-4:     PIE1 REGISTER (ADDRESS 8Ch)

                   R/W-0    R/W-0    R/W-0                 R/W-0  R/W-0           R/W-0 R/W-0    R/W-0
                  PSPIE(1)  ADIE(2)  RCIE                  TXIE   SSPIE          CCP1IE TMR2IE  TMR1IE

                  bit 7                                                                               bit 0

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

                  1 = Enables the PSP read/write interrupt

                  0 = Disables the PSP read/write interrupt

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

                  1 = Enables the A/D interrupt

                  0 = Disables the A/D interrupt

bit 5             RCIE: USART Receive Interrupt Enable bit

                  1 = Enables the USART receive interrupt

                  0 = Disables the USART receive interrupt

bit 4             TXIE: USART Transmit Interrupt Enable bit

                  1 = Enables the USART transmit interrupt

                  0 = Disables the USART transmit interrupt

bit 3             SSPIE: Synchronous Serial Port Interrupt Enable bit

                  1 = Enables the SSP interrupt

                  0 = Disables the SSP interrupt

bit 2             CCP1IE: CCP1 Interrupt Enable bit

                  1 = Enables the CCP1 interrupt

                  0 = Disables the CCP1 interrupt

bit 1             TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

                  1 = Enables the TMR2 to PR2 match interrupt

                  0 = Disables the TMR2 to PR2 match interrupt

bit 0             TMR1IE: TMR1 Overflow Interrupt Enable bit

                  1 = Enables the TMR1 overflow interrupt

                  0 = Disables the TMR1 overflow interrupt

                  Note 1: PIC16C63A/73B devices do not have a parallel slave port implemented; always
                               maintain this bit clear.

                          2: PIC16C63A/65B devices do not have an A/D implemented; always maintain this bit
                               clear.

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

DS30605C-page 22                                                                  2000 Microchip Technology Inc.
                                          PIC16C63A/65B/73B/74B

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

REGISTER 4-5:   PIR1 REGISTER (ADDRESS 0Ch)

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

                bit 7                                                                                bit 0

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

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

                0 = No read or write has occurred

         bit 6  ADIF(2): A/D Converter Interrupt Flag bit

                1 = An A/D conversion completed (must be cleared in software)

                0 = The A/D conversion is not complete

         bit 5  RCIF: USART Receive Interrupt Flag bit

                1 = The USART receive buffer is full (clear 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 (clear 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 overflowed (must be cleared in software)

                0 = TMR1 register did not overflow

                Note 1: PIC16C63A/73B devices do not have a parallel slave port implemented. This bit loca-
                             tion is reserved on these devices.

                        2: PIC16C63A/65B devices do not have an A/D implemented. This bit location is
                             reserved on these devices.

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

2000 Microchip Technology Inc.                                                           DS30605C-page 23
PIC16C63A/65B/73B/74B

4.2.2.6 PIE2 Register

This register contains the individual enable bit for the
CCP2 peripheral interrupt.

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

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

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

                  bit 7                                                                     bit 0

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

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

4.2.2.7 PIR2 Register                                     Note:        Interrupt flag bits are set when an interrupt
This register contains the CCP2 interrupt flag bit.                    condition occurs, regardless of the state of
                                                                       its corresponding enable bit, or the global
                                                                       enable bit, GIE (INTCON<7>). User soft-
                                                                       ware should ensure the appropriate inter-
                                                                       rupt flag bits are clear prior to enabling an
                                                                       interrupt.

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

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

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

                  bit 7                                                                     bit 0

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

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

DS30605C-page 24                                                             2000 Microchip Technology Inc.
                                      PIC16C63A/65B/73B/74B

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

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

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

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

               bit 7                                                        bit 0

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

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

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

2000 Microchip Technology Inc.                                        DS30605C-page 25
PIC16C63A/65B/73B/74B

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

              PCH  87      PCL                                           Note 1: The contents of PCLATH are unchanged
      12 11 10                                 0                                     after a return or RETFIE instruction is
PC                                                    GOTO,CALL                      executed. The user must set up PCLATH
                                                                                     for any subsequent CALL's or GOTO's
2 PCLATH<4:3>                         11
                                                      Opcode <10:0>              2: PCLATH<4> is not used in these
                                                                                     PICmicro devices. The use of
                   PCLATH                                                            PCLATH<4> as a general purpose read/
                                                                                     write bit is not recommended, since this
4.3.1 COMPUTED GOTO                                                                  may affect upward compatibility with
                                                                                     future products.
A computed GOTO is accomplished by adding an offset
to the program counter (ADDWF PCL). When doing a                     Example 4-1 shows the calling of a subroutine in
table read using a computed GOTO method, care                        page 1 of the program memory. This example assumes
should be exercised if the table location crosses a PCL              that PCLATH is saved and restored by the Interrupt
memory boundary (each 256 byte block). Refer to the                  Service Routine (if interrupts are used).
application note "Implementing a Table Read" (AN556).
                                                                     EXAMPLE 4-1:  CALL OF A SUBROUTINE
4.3.2 STACK                                                                        IN PAGE 1 FROM PAGE 0

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

                                                                     :             ;page 1 (800h-FFFh)

                                                                     :

                                                                     RETURN        ;return to Call subroutine

                                                                                   ;in page 0 (000h-7FFh)

DS30605C-page 26                                                                    2000 Microchip Technology Inc.
                                                  PIC16C63A/65B/73B/74B

4.5 Indirect Addressing, INDF and                                   EXAMPLE 4-2:        INDIRECT ADDRESSING
         FSR Registers
                                                                    NEXT      movlw  0x20   ;initialize pointer
The INDF register is not a physical register. Addressing            CONTINUE  movwf  FSR    ;to RAM
the INDF register will cause indirect addressing.                             clrf   INDF   ;clear INDF register
                                                                              incf   FSR,F  ;inc pointer
Indirect addressing is possible by using the INDF reg-                        btfss  FSR,4  ;all done?
ister. Any instruction using the INDF register actually                       goto   NEXT   ;no clear next
accesses the register pointed to by the File Select Reg-
ister, FSR. Reading the INDF register itself indirectly                       :             ;yes continue
(FSR = '0') will read 00h. Writing to the INDF register
indirectly results in a no-operation (although status bits          Note: Maintain the IRP and RP1 bits clear.
may be affected). An effective 9-bit address is obtained
by concatenating the 8-bit FSR register and the IRP bit
(STATUS<7>), as shown in Figure 4-4.

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

FIGURE 4-4:     DIRECT/INDIRECT ADDRESSING

             Direct Addressing                                                       Indirect Addressing

RP1:RP0      6  from opcode           0                                       IRP    7      FSR register        0
  0
                                                                              0

bank select location select                                                   bank select   location select

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

                                                                  not used

                Data
                Memory

                                 7Fh       FFh              17Fh    1FFh

                                 Bank 0 Bank 1 Bank 2 Bank 3

Note 1: For register file map detail, see Figure 4-2.
        2: Shaded portions are not implemented; maintain the IRP and RP1 bits clear.

2000 Microchip Technology Inc.                                                             DS30605C-page 27
PIC16C63A/65B/73B/74B

NOTES:

DS30605C-page 28        2000 Microchip Technology Inc.
                                             PIC16C63A/65B/73B/74B

5.0 I/O PORTS                                                  FIGURE 5-1:       BLOCK DIAGRAM OF
                                                                                 RA3:RA0 AND RA5 PINS
Some pins for these I/O ports are multiplexed with an
alternate function for the peripheral features on the          Data  D      Q
device. In general, when a peripheral is enabled, that         Bus
pin may not be used as a general purpose I/O pin.                     CK Q                       VDD
                                                               WR    Data Latch                  P
5.1 PORTA and TRISA Registers                                  Port

PORTA is a 6-bit latch.                                              D      Q                    N    I/O pin(1)

The RA4/T0CKI pin is a Schmitt Trigger input and an            WR     CK Q                      VSS
open drain output. All other RA port pins have TTL             TRIS  TRIS Latch
input levels and full CMOS output drivers. All pins have                                Analog
data direction bits (TRIS registers), which can config-                                 Input
ure these pins as output or input.                                                      mode

Setting a TRISA register bit puts the corresponding out-                    RD TRIS                   TTL
put driver in a hi-impedance mode. Clearing a bit in the                                              Input
TRISA register puts the contents of the output latch on                                               Buffer
the selected pin(s).
                                                                                     Q     D
Reading the PORTA register reads the status of the
pins, whereas writing to it will write to the port latch. All                                                     EN
write operations are read-modify-write operations.             RD Port
Therefore, a write to a port implies that the port pins are    To A/D Converter
read, the value is modified and then written to the port       Note 1: I/O pins have protection diodes to VDD and VSS.
data latch.
                                                               FIGURE 5-2:       BLOCK DIAGRAM OF
Pin RA4 is multiplexed with the Timer0 module clock                              RA4/T0CKI PIN
input to become the RA4/T0CKI pin.
                                                               Data       DQ
On the PIC16C73B/74B, PORTA pins are multiplexed               Bus
with analog inputs and analog VREF input. The opera-                      CK Q
tion of each pin is selected by clearing/setting the con-      WR       Data Latch
trol bits in the ADCON1 register (A/D Control                  Port
Register1).
                                                                                                      I/O pin(1)
   Note: On all RESETS, pins with analog functions
               are configured as analog and digital inputs.

The TRISA register controls the direction of the RA
pins, even when they are being used as analog inputs.
The user must ensure the bits in the TRISA register are
maintained set when using them as analog inputs.

                                                                                              N

EXAMPLE 5-1:        INITIALIZING PORTA
                    (PIC16C73B/74B)
                                                                          DQ                  VSS
BCF    STATUS, RP0  ;                                          WR
CLRF   PORTA        ; Initialize PORTA by                      TRIS        CK Q         Schmitt
                    ; clearing output                                   TRIS Latch      Trigger
BSF    STATUS, RP0  ; data latches                                                      Input
MOVLW  0x06         ; Select Bank 1                                                     Buffer
MOVWF  ADCON1       ; Configure all pins
MOVLW  0xCF         ; as digital inputs                                     RD TRIS
                    ; Value used to
MOVWF  TRISA        ; initialize data                                                Q  D
                    ; direction
                    ; Set RA<3:0> as inputs                                             ENEN
                    ; RA<5:4> as outputs
                    ; TRISA<7:6> are always                    RD Port
                    ; read as '0'.

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

2000 Microchip Technology Inc.                                                            DS30605C-page 29
PIC16C63A/65B/73B/74B

TABLE 5-1: PORTA FUNCTIONS

Name              Bit# Buffer Function
RA0/AN0(1)          bit0 TTL Digital input/output or analog input.

RA1/AN1(1)        bit1 TTL Digital input/output or analog input.

RA2/AN2(1)        bit2 TTL Digital input/output or analog input.

RA3/AN3/VREF(1) bit3 TTL Digital input/output or analog input or VREF.

RA4/T0CKI         bit4  ST  Digital input/output or external clock input for Timer0.
RA5/SS/AN4(1)               Output is open drain type.

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

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

   Note 1: The A/D is not implemented on the PIC16C63A/65B. Pins will operate as digital I/O only. ADCON1 is not
               implemented; maintain this register clear.

TABLE 5-2: SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

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

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

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

9Fh  ADCON1(1) --       --  --   --   -- PCFG2 PCFG1 PCFG0 ---- -000 ---- -000

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

   Note 1: The A/D is not implemented on the PIC16C63A/65B. Pins will operate as digital I/O only. ADCON1 is not implemented;
                 maintain this register clear.

DS30605C-page 30                                                         2000 Microchip Technology Inc.
                                                               PIC16C63A/65B/73B/74B

5.2 PORTB and TRISB Registers                                  This interrupt can wake the device from SLEEP. The
                                                               user, in the Interrupt Service Routine, can clear the
PORTB is an 8-bit wide, bi-directional port. The corre-        interrupt in the following manner:
sponding data direction register is TRISB. Setting a bit
in the TRISB register puts the corresponding output            a) Any read or write of PORTB. This will end the
driver in a hi-impedance input mode. Clearing a bit in               mismatch condition.
the TRISB register puts the contents of the output latch
on the selected pin(s).                                        b) Clear flag bit RBIF.

Each of the PORTB pins has a weak internal pull-up. A          A mismatch condition will continue to set flag bit RBIF.
single control bit can turn on all the pull-ups. This is per-  Reading PORTB will end the mismatch condition, and
formed by clearing bit RBPU (OPTION_REG<7>). The               allow flag bit RBIF to be cleared.
weak pull-up is automatically turned off when the port
pin is configured as an output. The pull-ups are dis-          This interrupt-on-mismatch feature, together with soft-
abled on a Power-on Reset.                                     ware configurable pull-ups on these four pins, allow
                                                               easy interface to a keypad and make it possible for
FIGURE 5-3:    BLOCK DIAGRAM OF                                wake-up on key depression. Refer to the Embedded
               RB3:RB0 PINS                                    Control Handbook, "Implementing Wake-up on Key
     RBPU(2)                                                   Stroke" (AN552).
     Data Bus                               VDD
     WR Port                                                   The interrupt-on-change feature is recommended for
                                            P  Weak            wake-up on key depression operation and operations
     WR TRIS                                   Pull-up         where PORTB is only used for the interrupt-on-change
                                                               feature. Polling of PORTB is not recommended while
               Data Latch                      I/O pin(1)      using the interrupt-on-change feature.
                DQ
                                                               RB0/INT is an external interrupt input pin and is config-
                 CK                                            ured using the INTEDG bit (OPTION_REG<6>).
               TRIS Latch
                DQ                                             RB0/INT is discussed in detail in Section 13.5.1.

                 CK              TTL                           FIGURE 5-4:            BLOCK DIAGRAM OF
                                 Input                                                RB7:RB4 PINS
                                 Buffer

                                                                                                       VDD

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

                                                                               CK

RB0/INT                                                                      TRIS Latch
                                                                              DQ

               Schmitt Trigger              RD Port            WR TRIS                             TTL
               Buffer                                                                              Input
                                                                             CK                    Buffer

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

                                                                             RD TRIS        Latch
                                                                                         QD
Four of PORTB's pins, RB7:RB4, have an
interrupt-on-change feature. Only pins configured as                         RD Port               EN         Q1
inputs can cause this interrupt to occur (i.e., any
RB7:RB4 pin configured as an output is excluded from           Set RBIF
the interrupt-on-change comparison). The input pins (of
RB7:RB4) are compared with the value latched on the            From other                QD                   RD Port
last read of PORTB. The "mismatch" outputs of                  RB7:RB4 pins                     EN                 Q3
RB7:RB4 are OR'd together to generate the RB Port
Change Interrupt with flag bit RBIF (INTCON<0>).               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 RBPU bit (OPTION_REG<7>).

2000 Microchip Technology Inc.                                                                    DS30605C-page 31
PIC16C63A/65B/73B/74B

TABLE 5-3: PORTB FUNCTIONS

Name            Bit#  Buffer       Function
RB0/INT
                bit0  TTL/ST(1)    Input/output pin or external interrupt input. Internal software

                                   programmable weak pull-up.

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

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

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

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

                                   pull-up.

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

                                   pull-up.

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

                                   pull-up. Serial programming clock.

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

                                   pull-up. Serial programming data.

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

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

TABLE 5-4: SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

Address  Name         Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0                       Value on:   Value on
                                                                                               POR,      all other
06h      PORTB        RB7     RB6  RB5 RB4 RB3 RB2 RB1 RB0                                     BOR       RESETS

86h      TRISB        PORTB Data Direction register                                        xxxx xxxx   uuuu uuuu

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

                                                                                           1111 1111   1111 1111

Legend: x = unknown, u = unchanged. Shaded cells are not used by PORTB.

DS30605C-page 32                                                                            2000 Microchip Technology Inc.
                                           PIC16C63A/65B/73B/74B

5.3 PORTC and TRISC Registers                                   FIGURE 5-5:             PORTC BLOCK DIAGRAM

PORTC is an 8-bit bi-directional port. Each pin is indi-        PORT/PERIPHERAL Select(2)
vidually configurable as an input or output through the
TRISC register. PORTC is multiplexed with several               Peripheral Data Out
peripheral functions (Table 5-5). PORTC pins have
Schmitt Trigger input buffers.                                  Data Bus D                   0                            VDD
                                                                                                                         P
When enabling peripheral functions, care should be                                   Q
taken in defining TRIS bits for each PORTC pin. Some                                                                            I/O pin(1)
peripherals override the TRIS bit to make a pin an out-         WR
put, while other peripherals override the TRIS bit to           Port                                                     N
make a pin an input. Since the TRIS bit override is in                      CK Q             1                          VSS
effect while the peripheral is enabled, read-modify-write
instructions (BSF, BCF, XORWF) with TRISC as des-                           Data Latch
tination should be avoided. The user should refer to the
corresponding peripheral section for the correct TRIS           WR          DQ
bit settings.                                                   TRIS          CK Q
                                                                            TRIS Latch

                                                                            RD TRIS                           Schmitt
                                                                                                              Trigger
                                                                Peripheral
                                                                OE(3)                           QD

                                                                                                                    EN
                                                                            RD
                                                                            Port

                                                                Peripheral Input

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

TABLE 5-5: PORTC FUNCTIONS

Name             Bit# Buffer Type         Function

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

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

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

Legend: ST = Schmitt Trigger input

TABLE 5-6: SUMMARY OF REGISTERS ASSOCIATED WITH PORTC                                           Value on:               Value on
                                                                                                   POR,                 all other
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0                                      BOR                  RESETS

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

87h   TRISC PORTC Data Direction register                                                       1111 1111 1111 1111

Legend: x = unknown, u = unchanged

2000 Microchip Technology Inc.                                                                                         DS30605C-page 33
PIC16C63A/65B/73B/74B

5.4 PORTD and TRISD Registers                                    FIGURE 5-6:     PORTD BLOCK DIAGRAM

Note:     The PIC16C63A and PIC16C73B do not                     Data
          provide PORTD. The PORTD and TRISD                     Bus
          registers are not implemented.                                      D  Q
                                                                 WR
                                                                 Port                                           I/O pin(1)

PORTD is an 8-bit port with Schmitt Trigger input buff-                      CK
ers. Each pin is individually configured as an input or                   Data Latch
output.
                                                                 WR         DQ                       Schmitt
PORTD can be configured as an 8-bit wide micropro-               TRIS                                Trigger
cessor port (parallel slave port) by setting control bit                     CK                      Input
PSPMODE (TRISE<4>). In this mode, the input buffers                       TRIS Latch                 Buffer
are TTL.

                                                                                 RD TRIS

                                                                                                  Q  D

                                                                                                     ENEN

                                                                 RD Port

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

TABLE 5-7: 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: Input buffers are Schmitt Triggers when in I/O mode and TTL buffer when in Parallel Slave Port mode.

TABLE 5-8: SUMMARY OF REGISTERS ASSOCIATED WITH PORTD

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

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

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, read as '0'. Shaded cells are not used by PORTD.

DS30605C-page 34                                                                       2000 Microchip Technology Inc.
                                                    PIC16C63A/65B/73B/74B

5.5 PORTE and TRISE Register                                  FIGURE 5-7:                 PORTE BLOCK DIAGRAM

    Note 1: The PIC16C63A and PIC16C73B do not                Data              DQ
                provide PORTE. The PORTE and TRISE            Bus
                registers are not implemented.
                                                              WR                                               I/O pin(1)
            2: The PIC16C63A/65B does not provide an          Port
                A/D module. A/D functions are not imple-
                mented.                                                          CK

PORTE has three pins: RE0/RD/AN5, RE1/WR/AN6                                    Data Latch
and RE2/CS/AN7, which are individually configured as
inputs or outputs. These pins have Schmitt Trigger            WR                  DQ                  Schmitt
input buffers.                                                TRIS                                    Trigger
                                                                                   CK                 Input
I/O PORTE becomes control inputs for the micropro-                              TRIS Latch            Buffer
cessor port when bit PSPMODE (TRISE<4>) is set. In
this mode, the user must make sure that the                                               RD TRIS
TRISE<2:0> bits are set (pins are configured as digital
inputs) and that register ADCON1 is configured for dig-                                            Q  D
ital I/O. In this mode, the input buffers are TTL.
                                                                                                      ENEN
Register 5-1 shows the TRISE register, which also con-
trols the parallel slave port operation.                      RD Port

PORTE pins may be multiplexed with analog inputs              Note 1: I/O pins have protection diodes to VDD and VSS.
(PIC16C74B only). The operation of these pins is
selected by control bits in the ADCON1 register. When
selected as an analog input, these pins will read as '0's.

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

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

TABLE 5-9: PORTE FUNCTIONS

Name        Bit#                 Buffer Type Function

RE0/RD/AN5  bit0                 ST/TTL(1)  Input/output port pin or read control input in Parallel Slave Port mode or analog
RE1/WR/AN6
RE2/CS/AN7                                  input:

                                                    RD

                                                    1 = Idle

                                                    0 = Read operation. Contents of PORTD register is output to PORTD

                                                            I/O pins (if chip selected).

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

                                            input:

                                                    WR

                                                    1 = Idle

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

                                                            register (if chip selected).

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

                                            analog input:

                                                    CS

                                                    1 = Device is not selected

                                                    0 = Device is selected

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

2000 Microchip Technology Inc.                                                                             DS30605C-page 35
PIC16C63A/65B/73B/74B

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

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

                  IBF               OBF  IBOV PSPMODE               --         TRISE2 TRISE1 TRISE0

                  bit 7                                                                                  bit 0

     bit 7        IBF: Input Buffer Full Status bit

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

                  0 = No word has been received

     bit 6        OBF: Output Buffer Full Status bit

                  1 = The output buffer still holds a previously written word

                  0 = The output buffer has been read

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

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

                         software)

                  0 = No overflow occurred

     bit 4        PSPMODE: Parallel Slave Port Mode Select bit

                  1 = Parallel Slave Port mode

                  0 = General purpose I/O mode

     bit 3        Unimplemented: Read as '0'

     bit 2        TRISE2: Direction Control bit for pin RE2/CS/AN7

                  1 = Input

                  0 = Output

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

                  1 = Input

                  0 = Output

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

                  1 = Input

                  0 = Output

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

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

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

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

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

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

DS30605C-page 36                                                                2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

5.6 Parallel Slave Port (PSP)                               When not in PSP mode, the IBF and OBF bits are held
                                                            clear. However, if flag bit IBOV was previously set, it
Note:  The PIC16C63A and PIC16C73B do not                   must be cleared in firmware.
       provide a parallel slave port. The PORTD,
       PORTE, TRISD and TRISE registers are                 An interrupt is generated and latched into flag bit
       not implemented.                                     PSPIF when a read or write operation is completed.
                                                            PSPIF must be cleared by the user in firmware and the
PORTD operates as an 8-bit wide Parallel Slave Port         interrupt can be disabled by clearing the interrupt
(PSP), or microprocessor port when control bit PSP-         enable bit PSPIE (PIE1<7>).
MODE (TRISE<4>) is set. In Slave mode, it is asyn-
chronously readable and writable by the external world,     FIGURE 5-8:           PORTD AND PORTE
through RD control input pin RE0/RD/AN5 and WR                                    BLOCK DIAGRAM
control input pin RE1/WR/AN6.                                                     (PARALLEL SLAVE
                                                                                  PORT)
It can directly interface to an 8-bit microprocessor data
bus. The external microprocessor can read or write the      Data Bus     DQ                          RDx
PORTD latch as an 8-bit latch. Setting bit PSPMODE                       CK                          pin
enables port pin RE0/RD/AN5 to be the RD input,                    WR
RE1/WR/AN6 to be the WR input and RE2/CS/AN7 to                    Port              TTL
be the CS (chip select) input. For this functionality, the
corresponding data direction bits of the TRISE register                  Q        D
(TRISE<2:0>) must be configured as inputs (set) and
the A/D port configuration bits PCFG2:PCFG0                 RD              ENEN
(ADCON1<2:0>) must be set, which will configure pins
RE2:RE0 as digital I/O.                                     Port

There are actually two 8-bit latches, one for data out      One bit of PORTD
(from the PICmicro MCU) and one for data input. The
user writes 8-bit data to PORTD data latch and reads          Set Interrupt Flag
data from the port pin latch (note that they have the         PSPIF (PIR1<7>)
same address). In this mode, the TRISD register is
ignored since the external device is controlling the                                 Read            RD
direction of data flow.
                                                                                                TTL
A write to the PSP occurs when both the CS and WR
lines are first detected low. When either the CS or WR                               Chip Select
lines become high (level triggered), then the Input
Buffer Full (IBF) status flag bit (TRISE<7>) is set on the                                  TTL      CS
Q4 clock cycle, following the next Q2 cycle, to signal
the write is complete (Figure 5-9). The interrupt flag bit                           Write           WR
PSPIF (PIR1<7>) is also set on the same Q4 clock
cycle. IBF can only be cleared by reading the PORTD                                         TTL
input latch. The Input Buffer Overflow (IBOV) status
flag bit (TRISE<5>) is set if a second write to the PSP     Note 1: I/O pins have protection diodes to VDD and VSS.
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
(OBF) status flag bit (TRISE<6>) is cleared immedi-
ately (Figure 5-10), 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 inter-
rupt flag bit PSPIF is set on the Q4 clock cycle, follow-
ing the next Q2 cycle, indicating that the read is
complete. OBF remains low until data is written to
PORTD by the user firmware.

2000 Microchip Technology Inc.                                                      DS30605C-page 37
PIC16C63A/65B/73B/74B

FIGURE 5-9:       PARALLEL SLAVE PORT WRITE WAVEFORMS

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

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

FIGURE 5-10:      PARALLEL SLAVE PORT READ WAVEFORMS

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

           CS
           WR
           RD

PORTD<7:0>
           IBF
          OBF

      PSPIF

TABLE 5-11: REGISTERS ASSOCIATED WITH PARALLEL SLAVE PORT

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

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

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

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

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

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

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

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

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

DS30605C-page 38                                                         2000 Microchip Technology Inc.
                                             PIC16C63A/65B/73B/74B

6.0 TIMER0 MODULE                                                        Counter mode is selected by setting bit T0CS
                                                                         (OPTION_REG<5>). In counter mode, Timer0 will
The Timer0 module timer/counter has the following fea-                   increment, either on every rising, or falling edge of pin
tures:                                                                   RA4/T0CKI. The incrementing edge is determined by
                                                                         the Timer0 Source Edge Select bit T0SE
8-bit timer/counter                                                    (OPTION_REG<4>). Clearing bit T0SE selects the ris-
Readable and writable                                                  ing edge. Restrictions on the external clock input are
8-bit software programmable prescaler                                  discussed in detail in Section 6.2.
Internal or external clock select
Interrupt on overflow from FFh to 00h                                  The prescaler is mutually exclusively shared between
Edge select for external clock                                         the Timer0 module and the watchdog timer. The
                                                                         prescaler is not readable or writable. Section 6.3
Figure 6-1 is a block diagram of the Timer0 module and                   details the operation of the prescaler.
the prescaler shared with the WDT.
                                                                         6.1 Timer0 Interrupt
Additional information on the Timer0 module is
available in the PICmicroTM Mid-Range MCU Family                         The TMR0 interrupt is generated when the TMR0 reg-
Reference Manual (DS33023).                                              ister overflows from FFh to 00h. This overflow sets bit
                                                                         T0IF (INTCON<2>). The interrupt can be masked by
Timer mode is selected by clearing bit T0CS                              clearing bit T0IE (INTCON<5>). Bit T0IF must be
(OPTION_REG<5>). In Timer mode, the Timer0                               cleared in software by the Timer0 module Interrupt Ser-
module will increment every instruction cycle (without                   vice Routine before re-enabling this interrupt. The
prescaler). If the TMR0 register is written, the incre-                  TMR0 interrupt cannot awaken the processor from
ment is inhibited for the following two instruction cycles.              SLEEP, since the timer is shut-off during SLEEP.
The user can work around this by writing an adjusted
value to the TMR0 register.

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

CLKOUT (= FOSC/4)                                                                      Data Bus

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

                T0SE               T0CS

                                                    PSA
                                             PRESCALER

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

                         PSA

                                          0                  1

                                             MUX                         PSA

                                                                  WDT
                                                               Time-out

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

2000 Microchip Technology Inc.                                                                  DS30605C-page 39
PIC16C63A/65B/73B/74B

6.2 Using Timer0 with an External                         module means that there is no prescaler for the Watch-
         Clock                                            dog Timer, and vice-versa. This prescaler is not read-
                                                          able or writable (see Figure 6-1).
The synchronization of T0CKI with the internal phase
clocks is accomplished by sampling the synchronized       The PSA and PS2:PS0 bits (OPTION_REG<3:0>)
input on the Q2 and Q4 cycles of the internal phase       determine the prescaler assignment and prescale ratio.
clocks. Therefore, it is necessary for T0CKI to be high
for at least 2 TOSC (and a small RC delay of 20 ns) and   When assigned to the Timer0 module, all instructions
low for at least 2 TOSC (and a small RC delay of 20 ns).  writing to the TMR0 register (e.g., CLRF 1, MOVWF 1,
Refer to the electrical specification for the desired     BSF 1,x....etc.) will clear the prescaler. When assigned
device.                                                   to WDT, a CLRWDT instruction will clear the prescaler
                                                          along with the Watchdog Timer. The prescaler is not
6.3 Prescaler                                             readable or writable.

There is only one prescaler available which is mutually   Note:  Writing to TMR0, when the prescaler is
exclusively shared between the Timer0 module and the             assigned to Timer0, will clear the prescaler
watchdog timer. A prescaler assignment for the Timer0            count, but will not change the prescaler
                                                                 assignment.

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

       bit 7      RBPU
       bit 6
       bit 5      INTEDG

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

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

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

                  PS2:PS0: Prescaler Rate Select bits

                  Bit Value TMR0 Rate WDT Rate

                  000  1:2           1:1

                  001  1:4           1:2

                  010  1:8           1:4

                  011  1 : 16        1:8

                  100  1 : 32        1 : 16

                  101  1 : 64        1 : 32

                  110  1 : 128       1 : 64

                  111  1 : 256       1 : 128

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

Note:  To avoid an unintended device RESET, the instruction sequence shown in the PICmicroTM Mid-Range MCU
       Family Reference Manual (DS33023, Section 11.6) must be executed when changing the prescaler assign-
       ment from Timer0 to the WDT. This sequence must be followed even if the WDT is disabled.

DS30605C-page 40                                                         2000 Microchip Technology Inc.
                                          PIC16C63A/65B/73B/74B

TABLE 6-1: REGISTERS ASSOCIATED WITH TIMER0

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

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

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

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

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

2000 Microchip Technology Inc.                                              DS30605C-page 41
PIC16C63A/65B/73B/74B

NOTES:

DS30605C-page 42        2000 Microchip Technology Inc.
                                      PIC16C63A/65B/73B/74B

7.0 TIMER1 MODULE                                         In Timer mode, Timer1 increments every instruction
                                                          cycle. In Counter mode, it increments on every rising
The Timer1 module is a 16-bit timer/counter consisting    edge of the external clock input.
of two 8-bit registers (TMR1H and TMR1L), which are
readable and writable. The TMR1 Register pair             Timer1 can be enabled/disabled by setting/clearing
(TMR1H:TMR1L) increments from 0000h to FFFFh              control bit TMR1ON (T1CON<0>).
and rolls over to 0000h. The TMR1 Interrupt, if enabled,
is generated on overflow, which is latched in interrupt   Timer1 also has an internal "RESET input". This
flag bit TMR1IF (PIR1<0>). This interrupt can be          RESET can be generated by either of the two CCP
enabled/disabled by setting/clearing TMR1 interrupt       modules (Section 9.0) using the special event trigger.
enable bit TMR1IE (PIE1<0>).                              Register 7-1 shows the Timer1 control register.

Timer1 can operate in one of two modes:                   When the Timer1 oscillator is enabled (T1OSCEN is
                                                          set), the RC1/T1OSI/CCP2 and RC0/T1OSO/T1CKI
As a timer                                              pins become inputs. That is, the TRISC<1:0> value is
As a counter                                            ignored, and these pins read as `0'.

The operating mode is determined by the clock select      Additional information on timer modules is available in
bit, TMR1CS (T1CON<1>).                                   the PICmicroTM Mid-range MCU Family Reference
                                                          Manual (DS33023).

REGISTER 7-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

               --                -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

               bit 7                                                                                        bit 0

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

               T1SYNC: Timer1 External Clock Input Synchronization Control bit
               TMR1CS = 1:
               1 = Do not synchronize external clock input
               0 = Synchronize external clock input

               TMR1CS = 0:
               This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0.

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

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

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

2000 Microchip Technology Inc.                                  DS30605C-page 43
PIC16C63A/65B/73B/74B

7.1 Timer1 Operation in Timer Mode                    7.2 Timer1 Operation in Synchronized
                                                               Counter Mode
Timer mode is selected by clearing the TMR1CS
(T1CON<1>) bit. In this mode, the input clock to the  Counter mode is selected by setting bit TMR1CS. In
timer is FOSC/4. The synchronize control bit T1SYNC   this mode, the timer increments on every rising edge of
(T1CON<2>) has no effect since the internal clock is  clock input on pin RC1/T1OSI/CCP2, when bit
always in sync.                                       T1OSCEN is set, or on pin RC0/T1OSO/T1CKI, when
                                                      bit T1OSCEN is cleared.

                                                      If T1SYNC is cleared, then the external clock input is
                                                      synchronized with internal phase clocks. The synchro-
                                                      nization is done after the prescaler stage. The
                                                      prescaler stage is an asynchronous ripple counter.

                                                      In this configuration during SLEEP mode, Timer1 will
                                                      not increment even if the external clock is present,
                                                      since the synchronization circuit is shut-off. The
                                                      prescaler, however, will continue to increment.

FIGURE 7-1:       TIMER1 BLOCK DIAGRAM

               Set Flag bit            TMR1                                0                  Synchronized
               TMR1IF on     TMR1H TMR1L
               Overflow                                                                       Clock Input

RC0/T1OSO/T1CKI                                                            1
RC1/T1OSI/CCP2(2)
                             T1OSC                            TMR1ON            T1SYNC
                                                                 On/Off
                                                                                 Prescaler    Synchronize
                                                      (2)                         1, 2, 4, 8          det

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

                                                                TMR1CS

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

DS30605C-page 44                                                               2000 Microchip Technology Inc.
                                    PIC16C63A/65B/73B/74B

7.3 Timer1 Operation in                                      TABLE 7-1: CAPACITOR SELECTION FOR
         Asynchronous Counter Mode                                                THE TIMER1 OSCILLATOR

If control bit T1SYNC (T1CON<2>) is set, the external        Osc Type  Freq     C1          C2
clock input is not synchronized. The timer continues to
increment asynchronous to the internal phase clocks.         LP        32 kHz   33 pF       33 pF
The timer will continue to run during SLEEP and can
generate an interrupt-on-overflow, which will wake-up                  100 kHz  15 pF       15 pF
the processor. However, special precautions in soft-
ware are needed to read/write the timer (Section 7.3.1).               200 kHz  15 pF       15 pF

In Asynchronous Counter mode, Timer1 can not be              These values are for design guidance only.
used as a time-base for capture or compare opera-
tions.                                                       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

7.3.1  READING AND WRITING TIMER1 IN                         Note 1: Higher capacitance increases the stability
       ASYNCHRONOUS COUNTER                                               of oscillator, but also increases the start-up
       MODE                                                               time.

Reading TMR1H or TMR1L while the timer is running                    2: Since each resonator/crystal has its own
from an external asynchronous clock will guarantee a                      characteristics, the user should consult the
valid read (taken care of in hardware). However, the                      resonator/crystal manufacturer for appro-
user should keep in mind that reading the 16-bit timer                    priate values of external components.
in two 8-bit values itself poses certain problems, since
the timer may overflow between the reads.                    7.5 Resetting Timer1 using a CCP
                                                                      Trigger Output
For writes, it is recommended that the user simply stop
the timer and write the desired values. A write conten-      If the CCP1 or CCP2 module is configured in Compare
tion may occur by writing to the timer registers, while      mode to generate a "special event trigger"
the register is incrementing. This may produce an            (CCP1M3:CCP1M0 = 1011), this signal will reset
unpredictable value in the timer register.                   Timer1.

Reading the 16-bit value requires some care. Exam-           Note:    The special event triggers from the CCP1
ples 12-2 and 12-3 in the PICmicroTM Mid-Range MCU                    and CCP2 modules will not set interrupt
Family Reference Manual (DS33023) show how to                         flag bit TMR1IF (PIR1<0>).
read and write Timer1 when it is running in Asynchro-
nous mode.                                                   Timer1 must be configured for either timer or Synchro-
                                                             nized Counter mode to take advantage of this feature.
7.4 Timer1 Oscillator                                        If Timer1 is running in Asynchronous Counter mode,
                                                             this RESET operation may not work.

A crystal oscillator circuit is built-in between pins T1OSI  In the event that a write to Timer1 coincides with a spe-
(input) and T1OSO (amplifier output). It is enabled by       cial event trigger from CCP1 or CCP2, the write will
setting control bit T1OSCEN (T1CON<3>). The oscilla-         take precedence.
tor is a low power oscillator rated up to 200 kHz. It will
continue to run during SLEEP. It is primarily intended       In this mode of operation, the CCPRxH:CCPRxL regis-
for use with a 32 kHz crystal. Table 7-1 shows the           ter pair effectively becomes the period register for
capacitor selection for the Timer1 oscillator.               Timer1.

The Timer1 oscillator is identical to the LP oscillator.     7.6 Resetting of Timer1 Register Pair
The user must provide a software time delay to ensure                 (TMR1H, TMR1L)
proper oscillator start-up.
                                                             TMR1H and TMR1L registers are not reset to 00h on a
                                                             POR, or any other RESET, except by the CCP1 and
                                                             CCP2 special event triggers.

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

                                                             7.7 Timer1 Prescaler

                                                             The prescaler counter is cleared on writes to the
                                                             TMR1H or TMR1L registers.

2000 Microchip Technology Inc.                                                     DS30605C-page 45
PIC16C63A/65B/73B/74B

TABLE 7-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
0Ch      PIR1     PSPIF(1)  ADIF(2)  RCIF   TXIF   SSPIF  CCP1IF                            TMR2IF  TMR1IF  0000 0000 0000 0000
8Ch      PIE1     PSPIE(1)  ADIE(2)  RCIE   TXIE   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
                                                                                                            xxxx xxxx uuuu uuuu
0Fh      TMR1H Holding register for the Most Significant Byte of the 16-bit TMR1 register

10h      T1CON    --        -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

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

         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

DS30605C-page 46                                                                                     2000 Microchip Technology Inc.
                                  PIC16C63A/65B/73B/74B

8.0 TIMER2 MODULE                                         8.1 Timer2 Prescaler and Postscaler

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

Register 8-1 shows the Timer2 control register.           Postscaler                                       2
                                                                                      Comparator
Additional information on timer modules is available in                                           T2CKPS1:
the PICmicroTM Mid-Range MCU Family Reference             1:1 to 1:16 EQ                          T2CKPS0
Manual (DS33023).
                                                                    4                PR2 reg

                                                          T2OUTPS3:
                                                          T2OUTPS0

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

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

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

               -- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

               bit 7                                                                                              bit 0

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

               TMR2ON: Timer2 On bit
               1 = Timer2 is on
               0 = Timer2 is off

               T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
               00 = Prescaler is 1
               01 = Prescaler is 4
               1x = Prescaler is 16

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

2000 Microchip Technology Inc.                                                                   DS30605C-page 47
PIC16C63A/65B/73B/74B

TABLE 8-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

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

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

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, read as '0'. Shaded cells are not used by the Timer2 module.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16C63A/73B; always maintain these bits clear.

         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

DS30605C-page 48                                                              2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

9.0 CAPTURE/COMPARE/PWM                                   CCP2 Module:
         MODULES
                                                          Capture/Compare/PWM Register2 (CCPR2) is com-
Each Capture/Compare/PWM (CCP) module contains            prised of two 8-bit registers: CCPR2L (low byte) and
a 16-bit register which can operate as a:                 CCPR2H (high byte). The CCP2CON register controls
                                                          the operation of CCP2. The special event trigger is
16-bit Capture register                                 generated by a compare match and will reset Timer1
16-bit Compare register                                 and start an A/D conversion (if the A/D module is
PWM Master/Slave Duty Cycle register                    enabled).

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

CCP1 Module:                                              CCP Mode     Timer Resource

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

TABLE 9-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.

2000 Microchip Technology Inc.                                        DS30605C-page 49
PIC16C63A/65B/73B/74B

REGISTER 9-1:     CCP1CON REGISTER/CCP2CON REGISTER

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

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

                  Compare mode:
                  Unused

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

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

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

                            CCP1 resets TMR1; CCP2 resets TMR1 and starts an A/D conversion (if A/D module
                            is enabled)
                  11xx = PWM mode

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

DS30605C-page 50                                               2000 Microchip Technology Inc.
                                                  PIC16C63A/65B/73B/74B

9.1 Capture Mode                                         9.1.2 TIMER1 MODE SELECTION

In Capture mode, CCPR1H:CCPR1L captures the              Timer1 must be running in Timer mode or Synchro-
16-bit value of the TMR1 register when an event occurs   nized Counter mode for the CCP module to use the
on pin RC2/CCP1. An event is defined as one of the fol-  capture feature. In Asynchronous Counter mode, the
lowing and is configured using CCPxCON<3:0>:             capture operation may not work.

Every falling edge                                     9.1.3 SOFTWARE INTERRUPT
Every rising edge
Every 4th rising edge                                  When the Capture mode is changed, a false capture
Every 16th rising edge                                 interrupt may be generated. The user should keep bit
                                                         CCP1IE (PIE1<2>) clear to avoid false interrupts and
An event is selected by control bits CCP1M3:CCP1M0       should clear the flag bit CCP1IF following any such
(CCP1CON<3:0>). When a capture is made, the inter-       change in operating mode.
rupt request flag bit CCP1IF (PIR1<2>) is set. The
interrupt flag must be cleared in software. If another   9.1.4 CCP PRESCALER
capture occurs before the value in register CCPR1 is
read, the previous captured value is overwritten by the  There are four prescaler settings, specified by bits
new captured value.                                      CCP1M3:CCP1M0. Whenever the CCP module is
                                                         turned off, or the CCP module is not in Capture mode,
9.1.1 CCP PIN CONFIGURATION                              the prescaler counter is cleared. Any RESET will clear
                                                         the prescaler counter.
In Capture mode, the RC2/CCP1 pin should be config-
ured as an input by setting the TRISC<2> bit.            Switching from one capture prescaler to another may
                                                         generate an interrupt. Also, the prescaler counter will
Note:     If the RC2/CCP1 pin is configured as an        not be cleared, therefore, the first capture may be from
          output, a write to the port can cause a        a non-zero prescaler. Example 9-1 shows the recom-
          capture condition.                             mended method for switching between capture pres-
                                                         calers. This example also clears the prescaler counter
FIGURE 9-1:            CAPTURE MODE                      and will not generate the "false" interrupt.
                       OPERATION BLOCK
                       DIAGRAM                           EXAMPLE 9-1:    CHANGING BETWEEN
                                                                         CAPTURE PRESCALERS

                      Set Flag bit CCP1IF

          Prescaler    (PIR1<2>)                         CLRF   CCP1CON  ; Turn CCP module off
                                                         MOVLW
          1, 4, 16                                            NEW_CAPT_PS ; Load the W reg with
                                                         MOVWF
RC2/CCP1                          CCPR1H CCPR1L                          ; the new prescaler
     pin
                                                                         ; move value and CCP ON

               and     Capture                                  CCP1CON  ; Load CCP1CON with this
          Edge Detect  Enable
                                                                         ; value

                                  TMR1H    TMR1L

                 CCP1CON<3:0>
          Q's

2000 Microchip Technology Inc.                                                   DS30605C-page 51
PIC16C63A/65B/73B/74B

9.2 Compare Mode                                                    9.2.4 SPECIAL EVENT TRIGGER

In Compare mode, the 16-bit CCPR1 register value is                 In this mode, an internal hardware trigger is generated,
constantly compared against the TMR1 register pair                  which may be used to initiate an action.
value. When a match occurs, the RC2/CCP1 pin is:
                                                                    The special event trigger output of CCP1 resets the
Driven high                                                       TMR1 register pair. This allows the CCPR1 register to
Driven low                                                        effectively be a 16-bit programmable period register for
Remains unchanged                                                 Timer1.

The action on the pin is based on the value of control              The special event trigger output of CCP2 resets the
bits CCP1M3:CCP1M0 (CCP1CON<3:0>). At the                           TMR1 register pair and starts an A/D conversion (if the
same time, interrupt flag bit CCP1IF is set.                        A/D module is enabled).

                                                                    Note:  The special event trigger from the
                                                                           CCP1and CCP2 modules will not set inter-
FIGURE 9-2:               COMPARE MODE                                     rupt flag bit TMR1IF (PIR1<0>).
                          OPERATION BLOCK
                          DIAGRAM                                   9.3 PWM Mode (PWM)

Special event trigger will:                                         In Pulse Width Modulation mode, the CCPx pin pro-
    reset Timer1, but not set interrupt flag bit TMR1IF (PIR1<0>),  duces up to a 10-bit resolution PWM output. Since the
    and set bit GO/DONE (ADCON0<2>).                                CCP1 pin is multiplexed with the PORTC data latch, the
                                                                    TRISC<2> bit must be cleared to make the CCP1 pin
                          Special Event Trigger                     an output.

                          Set Flag bit CCP1IF                       Note:  Clearing the CCP1CON register will force
                          (PIR1<2>)                                        the CCP1 PWM output latch to the default
                                                                           low level. This is not the PORTC I/O data
                                           CCPR1H CCPR1L                   latch.

                       Q  S Output  Match           Comparator
                          R Logic                TMR1H TMR1L
RC2/CCP1
     pin                  CCP1CON<3:0>                              Figure 9-3 shows a simplified block diagram of the
        TRISC<2>          Mode Select                               CCP module in PWM mode.
       Output Enable

                                                                    For a step-by-step procedure on how to set up the CCP
                                                                    module for PWM operation, see Section 9.3.3.

9.2.1 CCP PIN CONFIGURATION                                         FIGURE 9-3:        SIMPLIFIED PWM BLOCK
                                                                                       DIAGRAM
The user must configure the RC2/CCP1 pin as an out-
put by clearing the TRISC<2> bit.                                                             CCP1CON<5:4>

Note:  Clearing the CCP1CON register will force                         Duty Cycle Registers
       the RC2/CCP1 compare output latch to the                     CCPR1L
       default low level. This is not the PORTC
       I/O data latch.

9.2.2 TIMER1 MODE SELECTION                                         CCPR1H (Slave)

Timer1 must be running in Timer mode or Synchro-                           Comparator         R         Q
nized Counter mode if the CCP module is using the
compare feature. In Asynchronous Counter mode, the                                                          RC2/CCP1
compare operation may not work.
                                                                           TMR2     (Note 1)

                                                                                                     S

9.2.3 SOFTWARE INTERRUPT MODE                                       Comparator                             TRISC<2>
                                                                        PR2
When Generate Software Interrupt mode is chosen, the                                   Clear Timer,
CCP1 pin is not affected. The CCPIF bit is set, causing                                CCP1 pin and
a CCP interrupt (if enabled).                                                          latch D.C.

                                                                    Note 1: 8-bit timer is concatenated with 2-bit internal Q clock,
                                                                               or 2 bits of the prescale, to create 10-bit time-base.

DS30605C-page 52                                                                               2000 Microchip Technology Inc.
                                                       PIC16C63A/65B/73B/74B

A PWM output (Figure 9-4) has a time-base (period)       9.3.2 PWM DUTY CYCLE
and a time that the output stays high (duty cycle). The
frequency of the PWM is the inverse of the period        The PWM duty cycle is specified by writing to the
(1/period).                                              CCPR1L register and to the CCP1CON<5:4> bits. Up
                                                         to 10-bit resolution is available: the CCPR1L contains
FIGURE 9-4:          PWM OUTPUT                          the eight MSbs and the CCP1CON<5:4> contains the
                                                         two LSbs. This 10-bit value is represented by
             Period                                      CCPR1L:CCP1CON<5:4>. The following equation is
                                                         used to calculate the PWM duty cycle in time:
     Duty Cycle
                            TMR2 = PR2 (Timer2 RESET)        PWM duty cycle = (CCPR1L:CCP1CON<5:4>)
                                                                                     TOSC (TMR2 prescale value)
                  TMR2 = Duty Cycle
TMR2 = PR2 (Timer2 RESET)                                CCPR1L and CCP1CON<5:4> can be written to at any
                                                         time, but the duty cycle value is not latched into
9.3.1 PWM PERIOD                                         CCPR1H until after a match between PR2 and TMR2
                                                         occurs (i.e., the period is complete). In PWM mode,
The PWM period is specified by writing to the PR2        CCPR1H is a read-only register.
register. The PWM period can be calculated using the
following formula:                                       The CCPR1H register and a 2-bit internal latch are
                                                         used to double buffer the PWM duty cycle. This double
    PWM period = [(PR2) + 1] 4 TOSC                 buffering is essential for glitchless PWM operation.
                         (TMR2 prescale value)
                                                         When the CCPR1H and 2-bit latch match TMR2, con-
PWM frequency is defined as 1 / [PWM period].            catenated with an internal 2-bit Q clock, or 2 bits of the
                                                         TMR2 prescaler, the CCP1 pin is cleared.
When TMR2 is equal to PR2, the following three events
occur on the next increment cycle:                       Maximum PWM resolution (bits) for a given PWM
                                                         frequency:
TMR2 is cleared
The CCP1 pin is set (exception: if PWM duty                                ( ) FOSC
                                                               = Resolution  log FPWM
   cycle = 0%, the CCP1 pin will not be set)                                                   bits
The PWM duty cycle is latched from CCPR1L into                             log(2)

   CCPR1H                                                      Note:  If the PWM duty cycle value is longer than
                                                                      the PWM period, the CCP1 pin will not be
                                                                      cleared.

                                                         9.3.3 SET-UP FOR PWM OPERATION

Note:  The Timer2 postscaler (see Section 8.1) is        The following steps should be taken when configuring
       not used in the determination of the PWM          the CCP module for PWM operation:
       frequency. The postscaler could be used to
       have a servo update rate at a different fre-      1. Set the PWM period by writing to the PR2 register.
       quency than the PWM output.                       2. Set the PWM duty cycle by writing to the

                                                               CCPR1L register and CCP1CON<5:4> bits.
                                                         3. Make the CCP1 pin an output by clearing the

                                                               TRISC<2> bit.
                                                         4. Set the TMR2 prescale value and enable Timer2

                                                               by writing to T2CON.
                                                         5. Configure the CCP1 module for PWM operation.

TABLE 9-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
                                                                                                      5.5
       Maximum Resolution (bits)    10                    10           10      8         7

2000 Microchip Technology Inc.                                                        DS30605C-page 53
PIC16C63A/65B/73B/74B

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

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

0Bh,8Bh  INTCON   GIE    PEIE               T0IE   INTE   RBIE     T0IF                      INTF       RBIF 0000 000x 0000 000u
0Ch      PIR1                               RCIF   TXIF   SSPIF  CCP1IF                    TMR2IF     TMR1IF 0000 0000 0000 0000
                  PSPIF(1) ADIF(2)

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

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

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

87h      TRISC    PORTC Data Direction register                                                              1111 1111 1111 1111

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

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

10h      T1CON    --     -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

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

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

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

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

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

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

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

        2: The A/D is not implemented on the PIC16C63A/65B; always maintain these bits clear.

TABLE 9-5: REGISTERS ASSOCIATED WITH PWM AND TIMER2

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

0Bh,8Bh  INTCON   GIE    PEIE               T0IE   INTE   RBIE     T0IF    INTF                         RBIF 0000 000x 0000 000u
0Ch      PIR1                               RCIF   TXIF   SSPIF  CCP1IF  TMR2IF                       TMR1IF 0000 0000 0000 0000
                  PSPIF(1) ADIF(2)

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

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

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

87h      TRISC PORTC Data Direction register                                                                      1111 1111 1111 1111

11h      TMR2     Timer2 Module'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/PWM register1 (LSB)                                                               xxxx xxxx uuuu uuuu

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

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

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

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

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

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

         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

DS30605C-page 54                                                                                       2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

10.0 SYNCHRONOUS SERIAL PORT                            FIGURE 10-1:  SSP BLOCK DIAGRAM
         (SSP) MODULE                                                 (SPI MODE)

10.1 SSP Module Overview                                                                          Internal
                                                                                                 Data Bus
The Synchronous Serial Port (SSP) module is a serial
interface useful for communicating with other periph-                 Read               Write
eral or microcontroller devices. These peripheral
devices may be Serial EEPROMs, shift registers, dis-                        SSPBUF reg
play drivers, A/D converters, etc. The SSP module can
operate in one of two modes:                            RC4/SDI/SDA          SSPSR reg           Shift
                                                          RC5/SDO     bit0                       Clock
Serial Peripheral Interface (SPI)
Inter-Integrated Circuit (I2C)                        RA5/SS/AN4    SS Control
An overview of I2C operations and additional informa-    RC3/SCK/          Enable
tion on the SSP module can be found in the PICmicroTM
Mid-Range MCU Family Reference Manual                        SCL          Edge
(DS33023).                                                               Select

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

10.2 SPI Mode                                                          SSPM3:SSPM0       TMR2 Output
                                                                                      4          2
This section contains register definitions and opera-
tional characteristics of the SPI module.                                Edge            Prescaler TCY
                                                                        Select           4, 16, 64
SPI mode allows 8 bits of data to be synchronously
transmitted and received simultaneously. To accom-                    TRISC<3>
plish communication, typically three pins are used:
                                                        To enable the serial port, SSP enable bit, SSPEN
Serial Data Out (SDO) RC5/SDO                         (SSPCON<5>) must be set. To reset or reconfigure SPI
Serial Data In (SDI) RC4/SDI/SDA                      mode, clear bit SSPEN, re-initialize the SSPCON reg-
Serial Clock (SCK) RC3/SCK/SCL                        ister, and then set bit SSPEN. This configures the SDI,
                                                        SDO, SCK, and SS pins as serial port pins. For the pins
Additionally, a fourth pin may be used when in a Slave  to behave as the serial port function, they must have
mode of operation:                                      their data direction bits (in the TRISC register) appro-
                                                        priately programmed. That is:
Slave Select (SS) RA5/SS/AN4
                                                         SDI must have TRISC<4> set
When initializing the SPI, several options need to be    SDO must have TRISC<5> cleared
specified. This is done by programming the appropriate
control bits in the SSPCON register (SSPCON<5:0>)       SCK (Master mode) must have TRISC<3> cleared
and SSPSTAT<7:6>. These control bits allow the fol-      SCK (Slave mode) must have TRISC<3> set
lowing to be specified:                                  SS must have TRISA<5> set

Master mode (SCK is the clock output)                  ADCON1 must configure RA5 as a digital I/O pin.
Slave mode (SCK is the clock input)                   .
Clock Polarity (Idle state of SCK)
Clock edge (output data on rising/falling edge of         Note 1: When the SPI is in Slave mode with SS
                                                                        pin control enabled (SSPCON<3:0> =
   SCK)                                                                 0100), the SPI module will reset if the SS
Clock Rate (Master mode only)                                         pin is set to VDD.
Slave Select mode (Slave mode only)
                                                                    2: If the SPI is used in Slave mode with
                                                                        CKE = '1', then the SS pin control must be
                                                                        enabled.

2000 Microchip Technology Inc.                                                    DS30605C-page 55
PIC16C63A/65B/73B/74B

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

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

bit 7             SMP: SPI Data Input Sample Phase

                  SPI Master mode:

                  1 = Input data sampled at end of data output time

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

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

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

                  SPI mode:

                  CKP = 0:

                  1 = Data transmitted on rising edge of SCK (Microwire alternate)

                  0 = Data transmitted on falling edge of SCK

                  CKP = 1:

                  1 = Data transmitted on falling edge of SCK (Microwire default)

                  0 = Data transmitted on rising edge of SCK

                  I2C mode:

                  This bit must be maintained clear

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

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

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

bit 4             P: STOP bit (I2C mode only). This bit is cleared when the SSP module is disabled, or when the

                  START bit is detected last. SSPEN is cleared.

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

                  0 = STOP bit was not detected last

bit 3             S: START bit (I2C mode only). This bit is cleared when the SSP module is disabled, or when

                  the STOP bit is detected last. SSPEN is cleared.

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

                  0 = START bit was not detected last

bit 2             R/W: Read/Write bit information (I2C mode only). This bit holds the R/W bit information follow-

                  ing the last address match. This bit is only valid from the address match to the next START bit,

                  STOP bit, or ACK bit.

                  1 = Read

                  0 = Write

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

                  1 = Indicates that the user needs to update the address in the SSPADD register

                  0 = Address does not need to be updated

bit 0             BF: Buffer Full Status bit

                  Receive (SPI and I2C modes):

                  1 = Receive complete, SSPBUF is full

                  0 = Receive not complete, SSPBUF is empty

                  Transmit (I2C mode only):

                  1 = Transmit in progress, SSPBUF is full

                  0 = Transmit complete, SSPBUF is empty

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

DS30605C-page 56                                                                    2000 Microchip Technology Inc.
                                   PIC16C63A/65B/73B/74B

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

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

                WCOL SSPOV SSPEN CKP                 SSPM3 SSPM2 SSPM1 SSPM0

                bit 7                                                    bit 0

bit 7           WCOL: Write Collision Flag bit
bit 6           1 = The SSPBUF register was written while still transmitting the previous word (must be

bit 5                 cleared in software)
bit 4           0 = No collision
bit 3-0
                SSPOV: Synchronous Serial Port Overflow Flag bit
                In SPI mode:
                1 = A new byte was received while the SSPBUF register is still holding the previous unread

                      data. In case of overflow, the data in SSPSR is lost. Overflow can only occur in Slave
                      mode. The user must read the SSPBUF, even if only transmitting data, to avoid setting
                      overflow. In Master mode, the overflow bit is not set since each new reception (and trans-
                      mission) is initiated by writing to the SSPBUF register.
                0 = No overflow
                In I2C mode:
                1 = A byte was received while the SSPBUF register is still holding the previous unread byte.
                      SSPOV is a "don't care" in transmit mode. SSPOV must be cleared in software in either
                      mode.
                0 = No overflow

                SSPEN: Synchronous Serial Port Enable bit. When enabled, the SSP pins must be properly
                configured as input or output.
                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

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

                SSPM3:SSPM0: Synchronous Serial Port Mode Select bits
                0000 = SPI Master mode, clock = FOSC/4
                0001 = SPI Master mode, clock = FOSC/16
                0010 = SPI Master mode, clock = FOSC/64
                0011 = SPI Master mode, clock = TMR2 output/2
                0100 = SPI Slave mode, clock = SCK pin. SS pin control enabled.
                0101 = SPI Slave mode, clock = SCK pin. SS pin control disabled. SS can be used as I/O pin.
                0110 = I2C Slave mode, 7-bit address
                0111 = I2C Slave mode, 10-bit address
                1011 = I2C firmware controlled Master mode (Slave idle)
                1110 = I2C Slave mode, 7-bit address with START and STOP bit interrupts enabled
                1111 = I2C Slave mode, 10-bit address with START and STOP bit interrupts enabled

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

2000 Microchip Technology Inc.                      DS30605C-page 57
PIC16C63A/65B/73B/74B

FIGURE 10-2:       SPI MODE TIMING, MASTER MODE

SCK (CKP = 0,      bit7         bit6  bit5  bit4  bit3        bit2  bit1  bit0
        CKE = 0)

SCK (CKP = 0,
        CKE = 1)

SCK (CKP = 1,
        CKE = 0)

SCK (CKP = 1,
        CKE = 1)

SDO

SDI (SMP = 0)      bit7                                                   bit0
SDI (SMP = 1)             bit7                                                  bit0
SSPIF

FIGURE 10-3:       SPI MODE TIMING (SLAVE MODE WITH CKE = 0)

    SS (optional)

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

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

DS30605C-page 58                                                     2000 Microchip Technology Inc.
                                                PIC16C63A/65B/73B/74B

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

  SS

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

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

TABLE 10-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
0Ch      PIR1    PSPIF(1)        ADIF(2)  RCIF  TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
8Ch      PIE1    PSPIE(1)        ADIE(2)  RCIE  TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

87h      TRISC PORTC Data Direction register                                           1111 1111 1111 1111

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

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

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

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

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

         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

2000 Microchip Technology Inc.                                                        DS30605C-page 59
PIC16C63A/65B/73B/74B

10.3 SSP I2C Operation                                     The SSPCON register allows control of the I2C opera-
                                                           tion. Four mode selection bits (SSPCON<3:0>) allow
The SSP module in I2C mode fully implements all slave      one of the following I2C modes to be selected:
functions, except general call support, and provides
interrupts on START and STOP bits in hardware to            I2C Slave mode (7-bit address)
facilitate firmware implementation of the master func-      I2C Slave mode (10-bit address)
tions. The SSP module implements the standard mode          I2C Slave mode (7-bit address), with START and
specifications as well as 7-bit and 10-bit addressing.
                                                              STOP bit interrupts enabled to support firmware
Two pins are used for data transfer, the RC3/SCK/SCL          Master mode
pin, which is the clock (SCL), and the RC4/SDI/SDA          I2C Slave mode (10-bit address), with START and
pin, which is the data (SDA). The user must configure         STOP bit interrupts enabled to support firmware
these pins as inputs or outputs through the                   Master mode
TRISC<4:3> bits. External pull-up resistors for the SCL    I2C START and STOP bit interrupts enabled to
and SDA pins must be provided in the application cir-         support firmware Master mode, Slave is idle
cuit for proper operation of the I2C module.
                                                           Selection of any I2C mode with the SSPEN bit set,
The SSP module functions are enabled by setting SSP        forces the SCL and SDA pins to be open drain, pro-
enable bit SSPEN (SSPCON<5>).                              vided these pins are programmed to inputs by setting
                                                           the appropriate TRISC bits.
FIGURE 10-5:        SSP BLOCK DIAGRAM
                    (I2C MODE)                             Additional information on SSP I2C operation can be
                                                           found in the PICmicroTM Mid-Range MCU Family Ref-
              Read                            Internal     erence Manual (DS33023).
                                              Data Bus
                                                           10.3.1 SLAVE MODE
                                          Write
                                                           In Slave mode, the SCL and SDA pins must be config-
RC3/SCK/SCL              SSPBUF reg                        ured as inputs (TRISC<4:3> set). The SSP module will
                                                           override the input state with the output data when
  RC4/SDI/        Shift                                    required (slave-transmitter).
     SDA          Clock
                                                           When an address is matched or the data transfer after
                         SSPSR reg                         an address match is received, the hardware automati-
                                                           cally generates the acknowledge (ACK) pulse, and
                  MSb                  LSb                 then loads the SSPBUF register with the received
                                                           value currently in the SSPSR register.
                         Match Detect       Addr Match
                                                           There are certain conditions that will cause the SSP
                         SSPADD reg                        module not to give this ACK pulse. They include (either
                                                           or both):
                           START and           Set, Reset
                         STOP bit Detect       S, P bits   a) The buffer full bit BF (SSPSTAT<0>) was set
                                            (SSPSTAT reg)        before the transfer was received.

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

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

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

DS30605C-page 60                                            2000 Microchip Technology Inc.
                                      PIC16C63A/65B/73B/74B

10.3.1.1 Addressing                                         1. Receive first (high) byte of address (bits SSPIF,
                                                                  BF, and bit UA (SSPSTAT<1>) are set).
Once the SSP module has been enabled, it waits for a
START condition to occur. Following the START condi-        2. Update the SSPADD register with second (low)
tion, 8-bits are shifted into the SSPSR register. All             byte of Address (clears bit UA and releases the
incoming bits are sampled with the rising edge of the             SCL line).
clock (SCL) line. The value of register SSPSR<7:1> is
compared to the value of the SSPADD register. The           3. Read the SSPBUF register (clears bit BF) and
address is compared on the falling edge of the eighth             clear flag bit SSPIF.
clock (SCL) pulse. If the addresses match, and the BF
and SSPOV bits are clear, the following events occur:       4. Receive second (low) byte of address (bits
                                                                  SSPIF, BF, and UA are set).
a) The SSPSR register value is loaded into the
      SSPBUF register.                                      5. Update the SSPADD register with the first (high)
                                                                  byte of address, if match releases SCL line, this
b) The buffer full bit, BF is set.                                will clear bit UA.

c) An ACK pulse is generated.                               6. Read the SSPBUF register (clears bit BF) and
                                                                  clear flag bit SSPIF.
d) SSP interrupt flag bit, SSPIF (PIR1<3>) is set
      (interrupt is generated if enabled) - on the falling  7. Receive Repeated START condition.
      edge of the ninth SCL pulse.
                                                            8. Receive first (high) byte of address (bits SSPIF
In 10-bit address mode, two address bytes need to be              and BF are set).
received by the slave (Figure 10-7). The five Most Sig-
nificant bits (MSbs) of the first address byte specify if   9. Read the SSPBUF register (clears bit BF) and
this is a 10-bit address. Bit R/W (SSPSTAT<2>) must               clear flag bit SSPIF.
specify a write so the slave device will receive the sec-
ond address byte. For a 10-bit address, the first byte
would equal `1111 0 A9 A8 0', where A9 and A8 are
the two MSbs of the address. The sequence of events
for 10-bit address is as follows, with steps 7 - 9 for
slave-transmitter:

TABLE 10-2: DATA TRANSFER RECEIVED BYTE ACTIONS

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

BF      SSPOV                                                                    if enabled)

     0  0                        Yes                        Yes           Yes
     1
     1  0                        No                         No            Yes, SSPOV is set
     0
Note:   1                        No                         No            Yes

        1                        No                         No            Yes

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

2000 Microchip Technology Inc.                                           DS30605C-page 61
PIC16C63A/65B/73B/74B

10.3.1.2 Reception                                                           a) The Buffer Full flag bit, BF(SSPSTAT<0>) was
                                                                                   set, indicating that the byte in SSPBUF was
When the R/W bit of the address byte is clear and an                               waiting to be read when another byte was
address match occurs, the R/W bit of the SSPSTAT                                   received. This sets the SSPOV flag.
register is cleared. The received address is loaded into
the SSPBUF register.                                                         b) The overflow flag, SSPOV (SSPCON1<6>) was
                                                                                   set.
When the address byte overflow condition exists, then
no acknowledge (ACK) pulse is given. An overflow con-                        An SSP interrupt is generated for each data transfer
dition is defined as any situation where a received byte                     byte. Flag bit SSPIF (PIR1<3>) must be cleared in soft-
in SSPBUF is overwritten by the next received byte                           ware. The SSPSTAT register is used to determine the
before it has been read. An overflow has occurred                            status of the byte.
when:

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

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

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

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

SSPOV (SSPCON<6>)

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

DS30605C-page 62                                                                             2000 Microchip Technology Inc.
                                             PIC16C63A/65B/73B/74B

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

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

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

SCL              1 23456789                                              1234 56789                                                     P
              S
                 Data in                                   SCL held low

                 sampled                                      while CPU
                                                           responds to SSPIF

SSPIF (PIR1<3>)                                                               Cleared in software

BF (SSPSTAT<0>)

                                                                                                                    From SSP Interrupt
                                                                         SSPBUF is written in software Service Routine

CKP (SSPCON<4>)

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

                                                                              before the CKP bit can be set)

2000 Microchip Technology Inc.                                                                    DS30605C-page 63
PIC16C63A/65B/73B/74B

10.3.2 MASTER MODE                                               10.3.3 MULTI-MASTER MODE

Master mode of operation is supported in firmware                In Multi-Master mode, the interrupt generation on the
using interrupt generation on the detection of the               detection of the START and STOP conditions allows
START and STOP conditions. The STOP (P) and                      the determination of when the bus is free. The STOP
START (S) bits are cleared from a RESET, or when the             (P) and START (S) bits are cleared from a RESET or
SSP module is disabled. The STOP (P) and START (S)               when the SSP module is disabled. The STOP (P) and
bits will toggle based on the START and STOP condi-              START (S) bits will toggle based on the START and
tions. Control of the I2C bus may be taken when the P            STOP conditions. Control of the I2C bus may be taken
bit is set, or the bus is idle and both the S and P bits are     when bit P (SSPSTAT<4>) is set, or the bus is idle and
clear.                                                           both the S and P bits clear. When the bus is busy,
                                                                 enabling the SSP Interrupt will generate the interrupt
In Master mode, the SCL and SDA lines are manipu-                when the STOP condition occurs.
lated by clearing the corresponding TRISC<4:3> bit(s).
The output level is always low, irrespective of the              In Multi-Master operation, the SDA line must be moni-
value(s) in PORTC<4:3>. So when transmitting data, a             tored to see if the signal level is the expected output
'1' data bit must have the TRISC<4> bit set (input) and          level. This check only needs to be done when a high
a '0' data bit must have the TRISC<4> bit cleared (out-          level is output. If a high level is expected and a low level
put). The same scenario is true for the SCL line with the        is present, the device needs to release the SDA and
TRISC<3> bit.                                                    SCL lines (set TRISC<4:3>). There are two stages
                                                                 where this arbitration can be lost, these are:
The following events will cause SSP Interrupt Flag bit,
SSPIF, to be set (an SSP Interrupt will occur, if                Address Transfer
enabled):
                                                                  Data Transfer
START condition
                                                                 When the slave logic is enabled, the slave continues to
STOP condition                                                 receive. If arbitration was lost during the address trans-
                                                                 fer stage, communication to the device may be in
Data transfer byte transmitted/received                        progress. If addressed, an ACK pulse will be gener-
                                                                 ated. If arbitration was lost during the data transfer
Master mode of operation can be done with either the             stage, the device will need to re-transfer the data at a
Slave mode idle (SSPM3:SSPM0 = 1011), or with the                later time.
slave active. When both Master and Slave modes are
enabled, the software needs to differentiate the
source(s) of the interrupt.

TABLE 10-3: REGISTERS ASSOCIATED WITH I2C OPERATION

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

0Bh, 8Bh  INTCON  GIE  PEIE         T0IE       INTE RBIE T0IF INTF RBIF                         0000 000x  0000 000u
0Ch       PIR1                      RCIF       TXIF SSPIF CCP1IF TMR2IF TMR1IF                  0000 0000  0000 0000
8Ch       PIE1    PSPIF(1) ADIF(2)  RCIE       TXIE SSPIE CCP1IE TMR2IE TMR1IE                  0000 0000  0000 0000
                                                                                                xxxx xxxx  uuuu uuuu
                  PSPIE(1) ADIE(2)                                                              0000 0000  0000 0000
                                                                                                0000 0000  0000 0000
13h       SSPBUF Synchronous Serial Port Receive Buffer/Transmit register                       0000 0000  0000 0000
                                                                                                1111 1111  1111 1111
93h       SSPADD Synchronous Serial Port (I2C mode) Address register

14h       SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0

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

87h       TRISC PORTC Data Direction register

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

Note 1: PSPIF and PSPIE are reserved on the PIC16C63A/73B; always maintain these bits clear.

         2: ADIF and ADIE are reserved on the PIC16C63A/65B; always maintain these bits clear.
         3: Maintain these bits clear in I2C mode.

DS30605C-page 64                                                            2000 Microchip Technology Inc.
                                            PIC16C63A/65B/73B/74B

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

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

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

                CSRC             TX9   TXEN SYNC                    --   BRGH TRMT TX9D

                bit 7                                                                bit 0

bit 7           CSRC: Clock Source Select bit

                Asynchronous mode:

                Don't care

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

bit 6           TX9: 9-bit Transmit Enable bit

                1 = Selects 9-bit transmission

                0 = Selects 8-bit transmission

bit 5           TXEN: Transmit Enable bit

                1 = Transmit enabled

                0 = Transmit disabled

                Note: SREN/CREN overrides TXEN in SYNC mode.

bit 4           SYNC: USART Mode Select bit

                1 = Synchronous mode

                0 = Asynchronous mode

bit 3           Unimplemented: Read as '0'

bit 2           BRGH: High Baud Rate Select bit

                Asynchronous mode:

                1 = High speed

                0 = Low speed

                Synchronous mode:
                Unused in this mode

bit 1           TRMT: Transmit Shift Register Status bit

                1 = TSR empty

                0 = TSR full

bit 0           TX9D: 9th bit of Transmit Data. Can be parity bit.

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

2000 Microchip Technology Inc.                                                 DS30605C-page 65
PIC16C63A/65B/73B/74B

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

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

                  SPEN        RX9           SREN CREN               --     FERR OERR RX9D

                  bit 7                                                                                  bit 0

bit 7             SPEN: Serial Port Enable bit

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

                  0 = Serial port disabled

bit 6             RX9: 9-bit Receive Enable bit

                  1 = Selects 9-bit reception

                  0 = Selects 8-bit reception

bit 5             SREN: Single Receive Enable bit

                  Asynchronous mode:

                  Don't care

                  Synchronous mode - Master:

                  1 = Enables single receive
                  0 = Disables single receive
                  This bit is cleared after reception is complete.

                  Synchronous mode - Slave:
                  Don't care

bit 4             CREN: Continuous Receive Enable bit

                  Asynchronous mode:
                  1 = Enables continuous receive

                  0 = Disables continuous receive

                  Synchronous mode:

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

bit 3             Unimplemented: Read as '0'

bit 2             FERR: Framing Error bit

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

                  0 = No framing error

bit 1             OERR: Overrun Error bit

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

                  0 = No overrun error

bit 0             RX9D: 9th bit of Received Data. (Can be parity bit. Calculated by firmware.)

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

DS30605C-page 66                                                            2000 Microchip Technology Inc.
                                              PIC16C63A/65B/73B/74B

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

TABLE 11-1:  BAUD RATE FORMULA                                         BRGH = 1 (High Speed)
    SYNC
        0                      BRGH = 0 (Low Speed)              Baud Rate = FOSC/(16(SPBRG+1))
        1    (Asynchronous) Baud Rate = FOSC/(64(SPBRG+1))                            N/A

              (Synchronous) Baud Rate = FOSC/(4(SPBRG+1))

TABLE 11-2: REGISTERS ASSOCIATED WITH BAUD RATE GENERATOR

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

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

99h  SPBRG Baud Rate Generator register                                                                0000 0000

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

2000 Microchip Technology Inc.                                                             DS30605C-page 67
PIC16C63A/65B/73B/74B

11.2 USART Asynchronous Mode                                   This interrupt can be enabled/disabled by setting/clear-
                                                               ing the USART Transmit Enable bit TXIE (PIE1<4>).
In this mode, the USART uses standard non-                     The flag bit TXIF will be set, regardless of the state of
return-to-zero (NRZ) format (one START bit, eight or           enable bit TXIE and cannot be cleared in software. It
nine data bits, and one STOP bit). The most common             will reset only when new data is loaded into the TXREG
data format is 8 bits. An on-chip, dedicated, 8-bit baud       register. While flag bit TXIF indicates the status of the
rate generator can be used to derive standard baud             TXREG register, another bit TRMT (TXSTA<1>) shows
rate frequencies from the oscillator. The USART trans-         the status of the TSR register. Status bit TRMT is a read
mits and receives the LSb first. The USART's transmit-         only bit, which is set when the TSR register is empty. No
ter and receiver are functionally independent, but use         interrupt logic is tied to this bit, so the user has to poll this
the same data format and baud rate. The baud rate              bit in order to determine if the TSR register is empty.
generator produces a clock, either x16 or x64 of the bit
shift rate, depending on bit BRGH (TXSTA<2>). Parity               Note 1: The TSR register is not mapped in data
is not supported by the hardware, but can be imple-                            memory, so it is not available to the user.
mented in software (and stored as the ninth data bit).
Asynchronous mode is stopped during SLEEP.                                 2: Flag bit TXIF is set when enable bit TXEN
                                                                               is set. TXIF is cleared by loading TXREG.
Asynchronous mode is selected by clearing bit SYNC
(TXSTA<4>).                                                    Transmission is enabled by setting enable bit TXEN
                                                               (TXSTA<5>). The actual transmission will not occur
The USART Asynchronous module consists of the fol-             until the TXREG register has been loaded with data
lowing important elements:                                     and the baud rate generator (BRG) has produced a
                                                               shift clock (Figure 11-2). The transmission can also be
Baud Rate Generator                                          started by first loading the TXREG register and then
                                                               setting enable bit TXEN. Normally, when transmission
Sampling Circuit                                             is first started, the TSR register is empty. At that point,
Asynchronous Transmitter                                     transfer to the TXREG register will result in an immedi-
Asynchronous Receiver                                        ate transfer to TSR, resulting in an empty TXREG. A
                                                               back-to-back transfer is thus possible (Figure 11-3).
11.2.1  USART ASYNCHRONOUS                                     Clearing enable bit TXEN during a transmission will
        TRANSMITTER                                            cause the transmission to be aborted and will reset the
                                                               transmitter. As a result, the RC6/TX/CK pin will revert
The USART transmitter block diagram is shown in                to hi-impedance.
Figure 11-1. The heart of the transmitter is the transmit
(serial) shift register (TSR). The shift register obtains its  In order to select 9-bit transmission, transmit bit TX9
data from the read/write transmit buffer, TXREG. The           (TXSTA<6>) should be set and the ninth bit should be
TXREG register is loaded with data in software. The            written to TX9D (TXSTA<0>). The ninth bit must be
TSR register is not loaded until the STOP bit has been         written before writing the 8-bit data to the TXREG reg-
transmitted from the previous load. As soon as the             ister. This is because a data write to the TXREG regis-
STOP bit is transmitted, the TSR is loaded with new            ter can result in an immediate transfer of the data to the
data from the TXREG register (if available). Once the          TSR register (if the TSR is empty). In such a case, an
TXREG register transfers the data to the TSR register          incorrect ninth data bit may be loaded in the TSR
(occurs in one TCY), the TXREG register is empty and           register.
the USART Transmit Flag bit TXIF (PIR1<4>) is set.

FIGURE 11-1:      USART TRANSMIT BLOCK DIAGRAM

                                                               Data Bus

                         TXIF                 TXREG register

        TXIE                                                   8
                                                                                    LSb
                               MSb
                                (8)                                   0                     Pin Buffer
                                                                                               and Control

                                              TSR register                                                  RC6/TX/CK pin

              Interrupt

                         TXEN Baud Rate CLK

                                                                                         TRMT  SPEN

                                 SPBRG              TX9
                         Baud Rate Generator  TX9D

DS30605C-page 68                                                                                2000 Microchip Technology Inc.
                                                       PIC16C63A/65B/73B/74B

Steps to follow when setting up an Asynchronous                 4. If 9-bit transmission is desired, then set transmit
Transmission:                                                         bit TX9.

1. Initialize the SPBRG register for the appropriate            5. Enable the transmission by setting bit TXEN,
      baud rate. If a high speed baud rate is desired,                which will also set flag bit TXIF.
      set bit BRGH. (Section 11.1)
                                                                6. If 9-bit transmission is selected, the ninth bit
2. Enable the asynchronous serial port by clearing                    should be loaded in bit TX9D.
      bit SYNC and setting bit SPEN.
                                                                7. Load data to the TXREG register (starts trans-
3. If interrupts are desired, set interrupt enable bits               mission).
      TXIE (PIE1<4>), PEIE (INTCON<6>), and GIE
      (INTCON<7>), as required.

FIGURE 11-2:               ASYNCHRONOUS MASTER TRANSMISSION

Write to TXREG            Word 1

      BRG output                   START Bit    Bit 0           Bit 1            Bit 7/8 STOP Bit
      (shift clock)                                               Word 1

RC6/TX/CK (pin)

TXIF bit
(Transmit buffer
reg. empty flag)

     TRMT bit              Word 1
                           Transmit Shift Reg
     (Transmit shift
     reg. empty flag)

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

      Write to TXREG       Word 1  Word 2

           BRG output              START Bit Bit 0              Bit 1     Bit 7/8  STOP Bit START Bit             Bit 0
           (shift clock)                                          Word 1                                  Word 2
    RC6/TX/CK (pin)
    TXIF bit
    (interrupt reg. flag)

TRMT bit                   Word 1                                                Word 2
(Transmit shift            Transmit Shift Reg.                                   Transmit Shift Reg.
reg. empty flag)

Note: This timing diagram shows two consecutive transmissions.

TABLE 11-3: REGISTERS ASSOCIATED WITH ASYNCHRONOUS TRANSMISSION

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

0Bh,8Bh INTCON GIE                 PEIE T0IE INTE RBIE T0IF               INTF     RBIF 0000 000x     0000 000u
                                                                                                      0000 0000
0Ch  PIR1                  PSPIF(1) ADIF(2) RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000            0000 -00x
                                                                                                      0000 0000
18h  RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x                                             0000 0000
                                                                                                      0000 -010
19h  TXREG USART Transmit Register                                                        0000 0000   0000 0000

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

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

99h  SPBRG Baud Rate Generator Register                                                   0000 0000

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

Note 1: Bits PSPIE and PSPIF are reserved on the PIC16C63A/73B; always maintain these bits clear.
         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

2000 Microchip Technology Inc.                                                                       DS30605C-page 69
PIC16C63A/65B/73B/74B

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

FIGURE 11-4:       USART RECEIVE BLOCK DIAGRAM

                   x64 Baud Rate CLK                                    OERR                 FERR

        FOSC       SPBRG                CREN

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

                                           16

        RC7/RX/DT

                   Pin Buffer           Data                  RX9
                   and Control          Recovery

                   SPEN                                              RX9D     RCREG Register

                                                                                                   FIFO

                                        Interrupt             RCIF            8
                                                               RCIE            Data Bus

DS30605C-page 70                                                               2000 Microchip Technology Inc.
                                                  PIC16C63A/65B/73B/74B

Steps to follow when setting up an Asynchronous                  5. Enable the reception by setting bit CREN.
Reception:
                                                                 6. Flag bit RCIF will be set when reception is com-
1. Initialize the SPBRG register for the appropriate                   plete and an interrupt will be generated if enable
      baud rate. If a high speed baud rate is desired,                 bit RCIE was set.
      set bit BRGH. (Section 11.1).
                                                                 7. Read the RCSTA register to get the ninth bit (if
2. Enable the asynchronous serial port by clearing                     enabled) and determine if any error occurred
      bit SYNC, and setting bit SPEN.                                  during reception.

3. If interrupts are desired, set interrupt enable bits          8. Read the 8-bit received data by reading the
      RCIE (PIE1<5>), PEIE (INTCON<6>), and GIE                        RCREG register.
      (INTCON<7>), as required.
                                                                 9. If any error occurred, clear the error by clearing
4. If 9-bit reception is desired, then set bit RX9.                    enable bit CREN.

FIGURE 11-5:               ASYNCHRONOUS RECEPTION

         RX (pin)          START                              START                     START        bit7/8 STOP
                             bit bit0 bit1  bit7/8 STOP bit bit0     bit7/8 STOP bit                              bit
         Rcv shift
         reg                                           bit                       bit
         Rcv buffer reg
                                                         Word 1       Word 2
         Read Rcv                                        RCREG        RCREG
         buffer reg
         RCREG

         RCIF
         (interrupt flag)

         OERR bit
         CREN

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

TABLE 11-4: REGISTERS ASSOCIATED WITH ASYNCHRONOUS RECEPTION

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

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

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

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

99h      SPBRG Baud Rate Generator register                                                    0000 0000

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

Note 1: Bits PSPIE and PSPIF are reserved on the PIC16C73/73A/76; always maintain these bits clear.
         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

2000 Microchip Technology Inc.                                                                      DS30605C-page 71
PIC16C63A/65B/73B/74B

11.2.3  USART SYNCHRONOUS MASTER                               Clearing enable bit TXEN, during a transmission, will
        MODE                                                   cause the transmission to be aborted and will reset the
                                                               transmitter. The DT and CK pins will revert to
In Synchronous Master mode, the data is transmitted in         hi-impedance. If either bit CREN, or bit SREN is set
a half-duplex manner, i.e., transmission and reception         during a transmission, the transmission is aborted and
do not occur at the same time. When transmitting data,         the DT pin reverts to a hi-impedance state (for a recep-
the reception is inhibited and vice versa. Synchronous         tion). The CK pin will remain an output if bit CSRC is set
mode is entered by setting bit SYNC (TXSTA<4>). In             (internal clock). The transmitter logic, however, is not
addition, enable bit SPEN (RCSTA<7>) is set in order           reset, although it is disconnected from the pins. In order
to configure the RC6/TX/CK and RC7/RX/DT I/O pins              to reset the transmitter, the user has to clear bit TXEN.
to CK (clock) and DT (data) lines, respectively. The           If bit SREN is set (to interrupt an on-going transmission
Master mode indicates that the processor transmits the         and receive a single word), then after the single word is
master clock on the CK line. The Master mode is                received, bit SREN will be cleared and the serial port
entered by setting bit CSRC (TXSTA<7>).                        will revert back to transmitting, since bit TXEN is still
                                                               set. The DT line will immediately switch from
11.2.4  USART SYNCHRONOUS MASTER                               Hi-impedance Receive mode to transmit and start driv-
        TRANSMISSION                                           ing. To avoid this, bit TXEN should be cleared.

The USART transmitter block diagram is shown in                In order to select 9-bit transmission, the TX9
Figure 11-1. The heart of the transmitter is the transmit      (TXSTA<6>) bit should be set and the ninth bit should
(serial) shift register (TSR). The shift register obtains its  be written to bit TX9D (TXSTA<0>). The ninth bit must
data from the read/write transmit buffer register,             be written before writing the 8-bit data to the TXREG
TXREG. The TXREG register is loaded with data in               register. This is because a data write to the TXREG can
software. The TSR register is not loaded until the last        result in an immediate transfer of the data to the TSR
bit has been transmitted from the previous load. As            register (if the TSR is empty). If the TSR was empty and
soon as the last bit is transmitted, the TSR is loaded         the TXREG was written before writing the "new" TX9D,
with new data from the TXREG (if available). Once the          the "present" value of bit TX9D is loaded.
TXREG register transfers the data to the TSR register
(occurs in one TCYCLE), the TXREG is empty and inter-          Steps to follow when setting up a Synchronous Master
rupt flag bit TXIF (PIR1<4>) is set. The interrupt can be      Transmission:
enabled/disabled by setting/clearing enable bit TXIE
(PIE1<4>). Flag bit TXIF will be set, regardless of the        1. Initialize the SPBRG register for the appropriate
state of enable bit TXIE and cannot be cleared in soft-              baud rate (Section 11.1).
ware. It will reset only when new data is loaded into the
TXREG register. While flag bit TXIF indicates the status       2. Enable the synchronous master serial port by
of the TXREG register, another bit TRMT (TXSTA<1>)                   setting bits SYNC, SPEN and CSRC.
shows the status of the TSR register. TRMT is a read
only bit which is set when the TSR is empty. No inter-         3. If interrupts are desired, set interrupt enable bits
rupt logic is tied to this bit, so the user has to poll this         TXIE (PIE1<4>), PEIE (INTCON<6>), and GIE
bit in order to determine if the TSR register is empty.              (INTCON<7>), as required.
The TSR is not mapped in data memory, so it is not
available to the user.                                         4. If 9-bit transmission is desired, set bit TX9.

Transmission is enabled by setting enable bit TXEN             5. Enable the transmission by setting bit TXEN.
(TXSTA<5>). The actual transmission will not occur
until the TXREG register has been loaded with data.            6. If 9-bit transmission is selected, the ninth bit
The first data bit will be shifted out on the next available         should be loaded in bit TX9D.
rising edge of the clock on the CK line. Data out is sta-
ble around the falling edge of the synchronous clock           7. Start transmission by loading data to the TXREG
(Figure 11-6). The transmission can also be started by               register.
first loading the TXREG register and then setting bit
TXEN (Figure 11-7). This is advantageous when slow
baud rates are selected, since the BRG is kept in
RESET when bits TXEN, CREN and SREN are clear.
Setting enable bit TXEN will start the BRG, creating a
shift clock immediately. Normally, when transmission is
first started, the TSR register is empty, so a transfer to
the TXREG register will result in an immediate transfer
to TSR resulting in an empty TXREG. Back-to-back
transfers are possible.

DS30605C-page 72                                                2000 Microchip Technology Inc.
                                                            PIC16C63A/65B/73B/74B

TABLE 11-5: REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER TRANSMISSION

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

0Bh,8Bh  INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x                                            0000 000u
0Ch                                                                                                         0000 0000
         PIR1     PSPIF(1) ADIF(2) RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000                           0000 -00x
                                                                                                            0000 0000
18h      RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x                                               0000 0000
                                                                                                            0000 -010
19h      TXREG USART Transmit Register                                                           0000 0000  0000 0000

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

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

99h      SPBRG Baud Rate Generator Register                                                      0000 0000

Legend: u = unchanged, x = unknown, - = unimplemented, read as '0'.
             Shaded cells are not used for synchronous master transmission.

Note 1: Bits PSPIE and PSPIF are reserved on the PIC16C63A/73B; always maintain these bits clear.
         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

FIGURE 11-6:      SYNCHRONOUS TRANSMISSION

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

RC7/RX/DT                        bit 0  bit 1        bit 2         bit 7          bit 0  bit 1              bit 7
pin
                                        Word 1                                           Word 2
RC6/TX/CK
pin               Write word1           Write word2
Write to
TXREG reg

TXIF bit
(Interrupt Flag)

TRMT biTtRMT

TXEN bit '1'                                                                                                       '1'

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

FIGURE 11-7:      SYNCHRONOUS TRANSMISSION (THROUGH TXEN)

         RC7/RX/DT pin                         bit0          bit1  bit2                  bit6        bit7

         RC6/TX/CK pin

              Write to
         TXREG reg

                  TXIF bit

                  TRMT bit
                  TXEN bit

2000 Microchip Technology Inc.                                                                      DS30605C-page 73
PIC16C63A/65B/73B/74B

11.2.5  USART SYNCHRONOUS MASTER                             Steps to follow when setting up a Synchronous Master
        RECEPTION                                            Reception:

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

DS30605C-page 74                                              2000 Microchip Technology Inc.
                                             PIC16C63A/65B/73B/74B

TABLE 11-6: REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER RECEPTION

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

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

0Ch  PIR1          PSPIF(1) ADIF(2) RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000                         0000 0000
                                                                                                           0000 -00x
18h  RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x                                                  0000 0000
                                                                                                           0000 0000
1Ah  RCREG USART Receive register                                                               0000 0000  0000 -010
                                                                                                           0000 0000
8Ch  PIE1          PSPIE(1) ADIE(2) RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000

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

99h  SPBRG Baud Rate Generator register                                                         0000 0000

Legend: u = unchanged, x = unknown, - = unimplemented, read as '0'.
             Shaded cells are not used for synchronous master reception.

Note 1: Bits PSPIE and PSPIF are reserved on the PIC16C63A/73B; always maintain these bits clear.
         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

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

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

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

RC6/TX/CK pin

         Write to
         bit SREN

     SREN bit

     CREN bit '0'                                                                                          '0'

     RCIF bit
     (interrupt)

     Read
     RXREG

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

2000 Microchip Technology Inc.                                                                            DS30605C-page 75
PIC16C63A/65B/73B/74B

11.3 USART Synchronous Slave Mode                           11.3.2  USART SYNCHRONOUS SLAVE
                                                                    RECEPTION
Synchronous Slave mode differs from the Master mode
in the fact that the shift clock is supplied externally at  The operation of the synchronous Master and Slave
the RC6/TX/CK pin (instead of being supplied internally     modes is identical, except in the case of the SLEEP
in Master mode). This allows the device to transfer or      mode. Also, bit SREN is a "don't care" in Slave mode.
receive data while in SLEEP mode. Slave mode is
entered by clearing bit CSRC (TXSTA<7>).                    If receive is enabled by setting bit CREN prior to the
                                                            SLEEP instruction, a word may be received during
11.3.1  USART SYNCHRONOUS SLAVE                             SLEEP. On completely receiving the word, the RSR
        TRANSMIT                                            register will transfer the data to the RCREG register. If
                                                            interrupt enable bits RCIE and PEIE are set, the inter-
The operation of the Synchronous Master and Slave           rupt generated will wake the chip from SLEEP. If the
modes are identical, except in the case of the SLEEP        global interrupt is enabled, the program will branch to
mode.                                                       the interrupt vector (0004h), otherwise execution will
                                                            resume from the instruction following the SLEEP
If two words are written to the TXREG and then the          instruction.
SLEEP instruction is executed, the following will occur:
                                                            Steps to follow when setting up a Synchronous Slave
a) The first word will immediately transfer to the          Reception:
      TSR register and transmit.
                                                            1. Enable the synchronous master serial port by
b) The second word will remain in TXREG register.                 setting bits SYNC and SPEN and clearing bit
                                                                  CSRC.
c) Flag bit TXIF will not be set.
                                                            2. If interrupts are desired, set interrupt enable bits
d) When the first word has been shifted out of TSR,               RCIE (PIE1<5>), PEIE (INTCON<6>), and GIE
      the TXREG register will transfer the second                 (INTCON<7>), as required.
      word to the TSR and flag bit TXIF will now be
      set.                                                  3. If 9-bit reception is desired, set bit RX9.

e) If interrupt enable bits TXIE and PEIE are set,          4. To enable reception, set enable bit CREN.
      the interrupt will wake the chip from SLEEP. If
      GIE is set, the program will branch to the inter-     5. Flag bit RCIF will be set when reception is com-
      rupt vector (0004h), otherwise execution will               plete and an interrupt will be generated, if
      resume from the instruction following the SLEEP             enable bit RCIE was set.
      instruction.
                                                            6. Read the RCSTA register to get the ninth bit (if
Steps to follow when setting up a Synchronous Slave               enabled) and determine if any error occurred
Transmission:                                                     during reception.

1. Enable the synchronous slave serial port by set-         7. Read the 8-bit received data by reading the
      ting bits SYNC and SPEN and clearing bit                    RCREG register.
      CSRC.
                                                            8. If any error occurred, clear the error by clearing
2. Clear bits CREN and SREN.                                      bit CREN.

3. If interrupts are desired, set interrupt enable bits
      TXIE (PIE1<4>), PEIE (INTCON<6>), and GIE
      (INTCON<7>), as required.

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

5. Enable the transmission by setting enable bit
      TXEN.

6. If 9-bit transmission is selected, the ninth bit
      should be loaded in bit TX9D.

7. Start transmission by loading data to the TXREG
      register.

DS30605C-page 76                                                     2000 Microchip Technology Inc.
                                             PIC16C63A/65B/73B/74B

TABLE 11-7: REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE TRANSMISSION

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

0Bh,8Bh  INTCON GIE              PEIE T0IE INTE RBIE T0IF  INTF RBIF 0000 000x                       0000 000u
0Ch                                                                                                  0000 0000
         PIR1  PSPIF(1) ADIF(2) RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000                       0000 -00x
                                                                                                     0000 0000
18h      RCSTA SPEN RX9 SREN CREN -- FERR OERR RX9D 0000 -00x                                        0000 0000
                                                                                                     0000 -010
19h      TXREG USART Transmit register                                   0000 0000                   0000 0000

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

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

99h      SPBRG Baud Rate Generator register                              0000 0000

Legend: u = unchanged, x = unknown, - = unimplemented, read as '0'.
             Shaded cells are not used for synchronous slave transmission.

Note 1: Bits PSPIE and PSPIF are reserved on the PIC16C63A/73B; always maintain these bits clear.
         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

TABLE 11-8: REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE RECEPTION

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

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

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

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

99h      SPBRG Baud Rate Generator register                              0000 0000

Legend: u = unchanged, x = unknown, - = unimplemented, read as '0'.
             Shaded cells are not used for synchronous slave reception.

Note 1: Bits PSPIE and PSPIF are reserved on the PIC16C63A/73B; always maintain these bits clear.
         2: Bits ADIE and ADIF are reserved on the PIC16C63A/65B; always maintain these bits clear.

2000 Microchip Technology Inc.                                                                      DS30605C-page 77
PIC16C63A/65B/73B/74B

NOTES:

DS30605C-page 78        2000 Microchip Technology Inc.
                                   PIC16C63A/65B/73B/74B

12.0 ANALOG-TO-DIGITAL                                     The A/D converter has a unique feature of being able
         CONVERTER (A/D) MODULE                            to operate while the device is in SLEEP mode. To oper-
                                                           ate in SLEEP, the A/D conversion clock must be
Note:  The PIC16C63A and PIC16C65B do not                  derived from the A/D's internal RC oscillator.
       include A/D modules. ADCON0, ADCON1
       and ADRES registers are not imple-                  The A/D module has three registers. These registers
       mented. ADIF and ADIE bits are reserved             are:
       and should be maintained clear.
                                                            A/D Result Register (ADRES)
The 8-bit Analog-to-Digital (A/D) converter module has      A/D Control Register 0 (ADCON0)
five inputs for the PIC16C73B and eight for the             A/D Control Register 1 (ADCON1)
PIC16C74B.
                                                           The ADCON0 register, shown in Register 12-1, con-
The A/D allows conversion of an analog input signal to     trols the operation of the A/D module. The ADCON1
a corresponding 8-bit digital number. The output of the    register, shown in Register 12-2, configures the func-
sample and hold is the input into the converter, which     tions of the port pins. The port pins can be configured
generates the result via successive approximation. The     as analog inputs (RA3 can also be a voltage reference),
analog reference voltage is software selectable to         or as digital I/O.
either the device's positive supply voltage (VDD), or the
voltage level on the RA3/AN3/VREF pin.                     Additional information on using the A/D module can be
                                                           found in the PICmicroTM Mid-Range MCU Family Ref-
                                                           erence Manual (DS33023) and in Application Note,
                                                           AN546.

REGISTER 12-1:  ADCON0 REGISTER (ADDRESS 1Fh)
                   R/W-0 R/W-0 R/W-0 R/W-0
                  ADCS1 ADCS0 CHS2 CHS1                    R/W-0  R/W-0  U-0            R/W-0
                                                                                        ADON
                 bit 7                                     CHS0 GO/DONE --
                                                                                             bit 0

       bit 7-6  ADCS1:ADCS0: A/D Conversion Clock Select bits
       bit 5-3  00 = FOSC/2
                01 = FOSC/8
       bit 2    10 = FOSC/32
       bit 1    11 = FRC (clock derived from the internal A/D module RC oscillator)
       bit 0
                CHS2:CHS0: Analog Channel Select bits
                000 = channel 0, (RA0/AN0)
                001 = channel 1, (RA1/AN1)
                010 = channel 2, (RA2/AN2)
                011 = channel 3, (RA3/AN3)
                100 = channel 4, (RA5/AN4)
                101 = channel 5, (RE0/AN5)(1)
                110 = channel 6, (RE1/AN6)(1)
                111 = channel 7, (RE2/AN7)(1)

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

                     conversion is complete)

                Unimplemented: Read as '0'

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

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

                Legend:

                R = Readable bit   W = Writable bit U = Unimplemented bit, read as `0'

                -n = Value at POR  '1' = Bit is set        '0' = Bit is cleared x = Bit is unknown

2000 Microchip Technology Inc.                                          DS30605C-page 79
PIC16C63A/65B/73B/74B

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

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

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

                  bit 7                                                                         bit 0

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

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

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

                                     D  D             D                   D  D     D

                                     D = Digital I/O

                  Note 1: RE0, RE1 and RE2 are implemented on the PIC16C74B only.

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

DS30605C-page 80                                                           2000 Microchip Technology Inc.
                                                        PIC16C63A/65B/73B/74B

The following steps should be followed for doing an A/D        3. Wait the required acquisition time.
conversion:                                                    4. Set GO/DONE bit (ADCON0) to start conversion.
                                                               5. Wait for A/D conversion to complete, by either:
1. Configure the A/D module:
       Configure analog pins, voltage reference,                    Polling for the GO/DONE bit to be cleared (if
         and digital I/O (ADCON1)                                    interrupts are disabled);
       Select A/D input channel (ADCON0)
       Select A/D conversion clock (ADCON0)                         OR
       Turn on A/D module (ADCON0)
                                                                     Waiting for the A/D interrupt.
2. Configure A/D interrupt (if desired):
       Clear ADIF bit (PIR1<6>)                               6. Read A/D result register (ADRES), clear bit
       Set ADIE bit (PIE1<6>)                                       ADIF if required.
       Set PEIE bit (INTCON<6>)
       Set GIE bit (INTCON<7>)                                7. For next conversion, go to step 1 or step 2 as
                                                                     required. The A/D conversion time per bit is
                                                                     defined as TAD. A minimum wait of 2 TAD is
                                                                     required before next acquisition starts.

FIGURE 12-1:  A/D BLOCK DIAGRAM

                                                                  CHS2:CHS0

                                                                  111
                                                                                               RE2/AN7(1)

                                                                  110        RE1/AN6(1)

                                                                  101        RE0/AN5(1)

                                             VIN                  100
                                       (Input Voltage)                                          RA5/AN4

                                                                  011
                                                                                                RA3/AN3/VREF

    A/D                                                           010
Converter                                                                                      RA2/AN2

                                                                  001
                                                                                               RA1/AN1

                                                         VDD      000
                                                                                               RA0/AN0
                                                          000 or

                                 VREF                     010 or

                                                          100 or

                                                          11x

                                 (Reference               001 or
                                  Voltage)                011 or

                                                          101

                                             PCFG2:PCFG0

Note 1: Not available on PIC16C73B.

2000 Microchip Technology Inc.                                              DS30605C-page 81
PIC16C63A/65B/73B/74B

12.1 A/D Acquisition Requirements                                     The maximum recommended impedance for ana-
                                                                      log sources is 10 k. After the analog input channel is
For the A/D converter to meet its specified accuracy,                 selected (changed), the acquisition time (TACQ) must
the charge holding capacitor (CHOLD) must be allowed                  pass before the conversion can be started.
to fully charge to the input channel voltage level. The
analog input model is shown in Figure 12-2. The                       To calculate the minimum acquisition time,
source impedance (RS) and the internal sampling                       Equation 12-1 may be used. This equation assumes
switch (RSS) impedance directly affect the time                       that 1/2 LSb error is used (512 steps for the A/D). The
required to charge the capacitor CHOLD. The sampling                  1/2 LSb error is the maximum error allowed for the A/D
switch (RSS) impedance varies over the device voltage                 to meet its specified resolution.
(VDD), Figure 12-2. The source impedance affects the
offset voltage at the analog input (due to pin leakage                For more information, see the PICmicroTM Mid-Range
current).                                                             MCU Family Reference Manual (DS33023). In general,
                                                                      however, given a maximum source impedance of
                                                                      10 k and a worst case temperature of 100C, TACQ
                                                                      will be no more than 16 sec.

FIGURE 12-2:      ANALOG INPUT MODEL

                                                         VDD                     Sampling
                                                                                 Switch
                       Rs ANx                       VT = 0.6 V
                                                                                 SS RSS
                                                                      RIC 1k

                  VA         CPIN                                     I leakage              CHOLD
                                                                      500 nA               = DAC capacitance
                             5 pF                 VT = 0.6 V                                 = 51.2 pF

                                                                                           VSS

              Legend:  CPIN    = input capacitance                                     6V
                                                                                       5V
                       VT      = threshold voltage                               VDD 4V
                                                                                       3V
                       I leakage = leakage current at the pin due to                   2V
                                       various junctions
                                                                                                    5 6 7 8 9 10 11
                       RIC     = interconnect resistance                                            Sampling Switch

                       SS      = sampling switch                                                           (k)

                       CHOLD = sample/hold capacitance (from DAC)

EQUATION 12-1: ACQUISITION TIME

  TACQ = Amplifier Settling Time +
                  Hold Capacitor Charging Time +
                  Temperature Coefficient

            = TAMP + TC + TCOFF
                  TAMP = 5 S
                  TC = - (51.2 pF)(1 k + RSS + RS) In(1/511)
                  TCOFF = (Temp -25C)(0.05 S/C)

DS30605C-page 82                                                                            2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

12.2 Selecting the A/D Conversion                             12.5 A/D Operation During SLEEP
         Clock
                                                              The A/D module can operate during SLEEP mode. This
The A/D conversion time per bit is defined as TAD. The        requires that the A/D clock source be set to RC
A/D conversion requires 9.5 TAD per 8-bit conversion.         (ADCS1:ADCS0 = 11). When the RC clock source is
The source of the A/D conversion clock is software            selected, the A/D module waits one instruction cycle
selectable. The four possible options for TAD are:            before starting the conversion. This allows the SLEEP
                                                              instruction to be executed, which eliminates all digital
2 TOSC                                                      switching noise from the conversion. When the conver-
8 TOSC                                                      sion is completed, the GO/DONE bit will be cleared,
32 TOSC                                                     and the result loaded into the ADRES register. If the
Internal RC oscillator (2 - 6 S)                           A/D interrupt is enabled, the device will wake-up from
                                                              SLEEP. If the A/D interrupt is not enabled, the A/D mod-
For correct A/D conversions, the A/D conversion clock         ule will then be turned off, although the ADON bit will
(TAD) must be selected to ensure a minimum TAD time           remain set.
(parameter #130).
                                                              When the A/D clock source is another clock option (not
12.3 Configuring Analog Port Pins                             RC), a SLEEP instruction will cause the present conver-
                                                              sion to be aborted and the A/D module to be turned off,
The ADCON1, TRISA and TRISE registers control the             though the ADON bit will remain set.
operation of the A/D port pins. The port pins that are
desired as analog inputs must have their correspond-          Turning off the A/D places the A/D module in its lowest
ing TRIS bits set (input). If the TRIS bit is cleared (out-   current consumption state.
put), the digital output level (VOH or VOL) will be
converted.                                                    Note:  For the A/D module to operate in SLEEP,
                                                                     the A/D clock source must be set to RC
The A/D operation is independent of the state of the                 (ADCS1:ADCS0 = 11). To perform an A/D
CHS2:CHS0 bits and the TRIS bits.                                    conversion in SLEEP, ensure the SLEEP
                                                                     instruction immediately follows the instruc-
    Note 1: When reading the port register, all pins                 tion that sets the GO/DONE bit.
                configured as analog input channels will
                read as cleared (a low level). Pins config-   12.6 Effects of a RESET
                ured as digital inputs will convert an ana-
                log input. Analog levels on a digitally       A device RESET forces all registers to their RESET
                configured input will not affect the conver-  state. The A/D module is disabled and any conversion
                sion accuracy.                                in progress is aborted. All pins with analog functions
                                                              are configured as analog inputs.
            2: Analog levels on any pin that is defined as
                a digital input, but not as an analog input,  The ADRES register will contain unknown data after a
                may cause the input buffer to consume         Power-on Reset.
                current that is out of the devices specifi-
                cation.                                       12.7 Use of the CCP Trigger

            3: The TRISE register is not provided on the      An A/D conversion can be started by the "special event
                PIC16C73B.                                    trigger" of the CCP2 module. This requires that the
                                                              CCP2M3:CCP2M0 bits (CCP2CON<3:0>) be pro-
12.4 A/D Conversions                                          grammed as 1011 and that the A/D module is enabled
                                                              (ADON bit is set). When the trigger occurs, the
   Note: The GO/DONE bit should NOT be set in                 GO/DONE bit will be set, starting the A/D conversion,
               the same instruction that turns on the A/D.    and the Timer1 counter will be reset to zero. Timer1 is
                                                              reset to automatically repeat the A/D acquisition period
Clearing the GO/DONE bit during a conversion will             with minimal software overhead (moving the ADRES to
abort the current conversion. The ADRES register will         the desired location). The appropriate analog input
NOT be updated with the partially completed A/D con-          channel must be selected and the minimum acquisition
version sample. That is, the ADRES register will con-         done before the "special event trigger" sets the
tinue to contain the value of the last completed              GO/DONE bit (starts a conversion).
conversion (or the last value written to the ADRES reg-
ister). After the A/D conversion is aborted, a 2 TAD wait     If the A/D module is not enabled (ADON is cleared),
is required before the next acquisition is started. After     then the "special event trigger" will be ignored by the
this 2 TAD wait, an acquisition is automatically started      A/D module, but will still reset the Timer1 counter.
on the selected channel. The GO/DONE bit can then
be set to start another conversion.

2000 Microchip Technology Inc.                                                        DS30605C-page 83
PIC16C63A/65B/73B/74B

TABLE 12-1: SUMMARY OF A/D REGISTERS (PIC16C73B/74B ONLY)

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
0Ch      PIR1     PSPIF(1)  ADIF    RCIF  TXIF    SSPIF       CCP1IF  TMR2IF  TMR1IF  0000 0000                    0000 0000
8Ch      PIE1     PSPIE(1)  ADIE    RCIE  TXIE    SSPIE       CCP1IE  TMR2IE  TMR1IE  0000 0000                    0000 0000

0Dh      PIR2     --        --      --    --      --          --      --      CCP1IF ---- ---0 ---- ---0

8Dh      PIE2     --        --      --    --      --          --      --      CCP1IE ---- ---0 ---- ---0

1Eh      ADRES A/D Result register                                                    xxxx xxxx uuuu uuuu

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

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

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

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

09h      PORTE    --        --      --    --      --          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, read as '0'. Shaded cells are not used for A/D conversion.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC6C63A/73B; always maintain these bits clear.

DS30605C-page 84                                                               2000 Microchip Technology Inc.
                                              PIC16C63A/65B/73B/74B

13.0 SPECIAL FEATURES OF THE                               timers that offer necessary delays on power-up. One is
         CPU                                               the Oscillator Start-up Timer (OST), intended to keep the
                                                           chip in RESET until the crystal oscillator is stable. The
What sets a microcontroller apart from other proces-       other is the Power-up Timer (PWRT), which provides a
sors are special circuits to deal with the needs of real-  fixed delay of 72 ms (nominal) on power-up only and is
time applications. The PIC16CXX family has a host of       designed to keep the part in RESET, while the power
such features intended to maximize system reliability,     supply stabilizes. With these two timers on-chip, most
minimize cost through elimination of external compo-       applications need no external RESET circuitry.
nents, provide power saving operating modes and offer
code protection. These are:                                SLEEP mode is designed to offer a very low current
                                                           power-down mode. The user can wake-up from SLEEP
Oscillator selection                                     through external RESET, WDT wake-up or through an
RESET                                                    interrupt.

   - Power-on Reset (POR)                                  Several oscillator options are also made available to
   - Power-up Timer (PWRT)                                 allow the part to fit the application. The RC oscillator
   - Oscillator Start-up Timer (OST)                       option saves system cost, while the LP crystal option
   - Brown-out Reset (BOR)                                 saves power. A set of configuration bits are used to
Interrupts                                               select various options.
Watchdog Timer (WDT)
SLEEP                                                    13.1 Configuration Bits
Code protection
ID locations                                             The configuration bits can be programmed (read as '0')
In-Circuit Serial Programming (ICSP)                     or left unprogrammed (read as '1') to select various
                                                           device configurations. These bits are mapped in pro-
The PIC16CXX has a Watchdog Timer which can be             gram memory location 2007h.
shut off only through configuration bits. It runs off its
own RC oscillator for added reliability. There are two     The user will note that address 2007h is beyond the
                                                           user program memory space, and can be accessed
                                                           only during programming.

REGISTER 13-1: CONFIGURATION WORD (CONFIG 2007h)

  CP1 CP0 CP1 CP0 CP1 CP0                                  -- BODEN CP1  CP0 PWRTE WDTE FOSC1 FOSC0
bit 13                                                                                                                     bit 0

bits 13-8, CP1:CP0: Code Protection bits(2)
      5-4 11 = Code protection off
              10 = Upper half of program memory code protected
              01 = Upper 3/4th of program memory code protected
              00 = All memory is code protected

bit 7    Unimplemented: Read as '1'

bit 6    BODEN: Brown-out Reset Enable bit(1)

         1 = BOR enabled

         0 = BOR disabled

bit 3    PWRTE: Power-up Timer Enable bit(1)

         1 = PWRT disabled

         0 = PWRT enabled

bit 2    WDTE: Watchdog Timer Enable bit

         1 = WDT enabled

         0 = WDT disabled

bit 1-0  FOSC1:FOSC0: Oscillator Selection bits
         11 = RC oscillator
         10 = HS oscillator
         01 = XT oscillator
         00 = LP oscillator

         Note 1: Enabling Brown-out Reset automatically enables Power-up Timer (PWRT), regardless of the value of
                     PWRTE.

                 2: All of the CP1:CP0 pairs have to be given the same value to enable the code protection scheme listed.

2000 Microchip Technology Inc.                                          DS30605C-page 85
PIC16C63A/65B/73B/74B

13.2 Oscillator Configurations                             FIGURE 13-1:            CRYSTAL/CERAMIC
                                                                                   RESONATOR OPERATION
13.2.1 OSCILLATOR TYPES                                                            (HS, XT OR LP
                                                                                   OSC CONFIGURATION)
The PIC16CXX can be operated in four different oscil-
lator modes. The user can program two configuration                          OSC1                     To internal
bits (FOSC1 and FOSC0) to select one of these four                                                    logic
modes:                                                     C1
                                                                                                  SLEEP
LP  Low Power Crystal                                                XTAL                         PIC16CXX
XT  Crystal/Resonator                                                                       RF
HS  High Speed Crystal/Resonator
RC  Resistor/Capacitor                                                     OSC2
                                                                        RS
                                                           C2 (Note 1)

13.2.2 CRYSTAL OSCILLATOR/CERAMIC                          See Table 13-1 and Table 13-2 for recommended values of C1
              RESONATORS                                   and C2.

In XT, LP, or HS modes, a crystal or ceramic resonator     Note 1: A series resistor may be required for AT strip cut crystals.
is connected to the OSC1/CLKIN and OSC2/CLKOUT
pins to establish oscillation (Figure 13-1). The           FIGURE 13-2:            EXTERNAL CLOCK INPUT
PIC16CXX oscillator design requires the use of a par-                              OPERATION (HS, XT OR
allel cut crystal. Use of a series cut crystal may give a                          LP OSC CONFIGURATION)
frequency out of the crystal manufacturers specifica-
tions. When in XT, LP or HS modes, the device can          Clock from              OSC1
have an external clock source to drive the OSC1/           ext. system                       PIC16CXX
CLKIN pin (Figure 13-2). See the PICmicroTM Mid-
Range MCU Reference Manual (DS33023) for details                             Open  OSC2
on building an external oscillator.

DS30605C-page 86                                                                    2000 Microchip Technology Inc.
                                                           PIC16C63A/65B/73B/74B

TABLE 13-1: CERAMIC RESONATORS                                 Note 1: Higher capacitance increases the stability
                                                                           of the oscillator, but also increases the
Ranges Tested:                                                             start-up time.

Mode            Freq     OSC1        OSC2                              2: Since each resonator/crystal has its own
                                                                           characteristics, the user should consult
XT              455 kHz  68 - 100 pF 68 - 100 pF                           the resonator/crystal manufacturer for
                                                                           appropriate values of external compo-
          2.0 MHz        15 - 68 pF  15 - 68 pF                            nents.

          4.0 MHz        15 - 68 pF  15 - 68 pF                        3: Rs may be required in HS mode, as well
                                                                           as XT mode, to avoid overdriving crystals
HS        8.0 MHz        10 - 68 pF  10 - 68 pF                            with low drive level specification.

          16.0 MHz       10 - 22 pF  10 - 22 pF                        4: Oscillator performance should be verified
                                                                           at the expected voltage and temperature
Note: These values are for design guidance only.                           extremes in which the application is
           See notes following Table 13-1 and Table 13-2.                  expected to operate.

Resonators Used:                                           13.2.3 RC OSCILLATOR

455 kHz Panasonic EFO-A455K04B       0.3%                For timing insensitive applications, the "RC" device
                                                           option offers additional cost savings. The RC oscillator
2.0 MHz Murata Erie CSA2.00MG         0.5%                frequency is a function of the supply voltage, the resis-
                                                           tor (REXT) and capacitor (CEXT) values, and the operat-
4.0 MHz Murata Erie CSA4.00MG         0.5%                ing temperature. The oscillator frequency will vary from
                                                           unit to unit due to normal process variation. The differ-
8.0 MHz Murata Erie CSA8.00MT         0.5%                ence in lead frame capacitance between package
                                                           types will also affect the oscillation frequency, espe-
16.0 MHz Murata Erie CSA16.00MX       0.5%                cially for low CEXT values. The user also needs to take
                                                           into account variation due to tolerance of external R
Note: Resonators used did not have built-in capacitors.    and C components used. Figure 13-3 shows how the
                                                           R/C combination is connected to the PIC16CXX.
TABLE 13-2: CAPACITOR SELECTION FOR
                     CRYSTAL OSCILLATOR                    The oscillator frequency, divided by 4, is available on
                                                           the OSC2/CLKOUT pin, and can be used for test pur-
Osc Type        Crystal  Cap. Range Cap. Range             poses or to synchronize other logic (see Figure 3-2 for
                 Freq                                      waveform).
                                 C1  C2

LP              32 kHz   33 pF       33 pF

                200 kHz  15 pF       15 pF

XT              200 kHz  47-68 pF    47-68 pF

                1 MHz    15 pF       15 pF

                4 MHz    15 pF       15 pF

HS              4 MHz    15 pF       15 pF

                8 MHz    15-33 pF    15-33 pF

                20 MHz   15-33 pF    15-33 pF              FIGURE 13-3:    RC OSCILLATOR MODE

Note: These values are for design guidance only.                     V DD
           See notes following Table 13-1 and Table 13-2.

Crystals Used:                                             REXT

32 kHz Epson C-001R32.768K-A          20 PPM                              OSC1  Internal
                                                                                  Clock

200 kHz STD XTL 200.000KHz            20 PPM              CEXT                                         PIC16CXX
                                                            VSS              OSC2/CLKOUT
1 MHz ECS ECS-10-13-1                50 PPM                    FOSC/4

4 MHz ECS ECS-40-20-1                50 PPM

8 MHz EPSON CA-301 8.000M-C          30 PPM              Recommended Values: REXT = 3 kW to 100 kW
                                                                                           CEXT = 20 pf to 30 pF
20 MHz EPSON CA-301 20.000M-C 30 PPM

2000 Microchip Technology Inc.                                                  DS30605C-page 87
PIC16C63A/65B/73B/74B

13.3 RESET                                             on MCLR Reset during SLEEP, and on BOR. The TO
                                                       and PD bits are set or cleared differently in different
The PIC16CXX differentiates between various kinds of   RESET situations, as indicated in Table 13-4. These
RESET:                                                 bits are used in software to determine the nature of the
                                                       RESET. See Table 13-6 for a full description of RESET
Power-on Reset (POR)                                 states of all registers.
MCLR Reset during normal operation
MCLR Reset during SLEEP                              A simplified block diagram of the on-chip RESET circuit
WDT Reset (normal operation)                         is shown in Figure 13-4.
Brown-out Reset (BOR)
                                                       The PICmicro devices have a MCLR noise filter in the
Some registers are not affected in any RESET condi-    MCLR Reset path. The filter will detect and ignore
tion; their status is unknown on POR and unchanged in  small pulses.
any other RESET. Most other registers are reset to a
"RESET state" on POR, on the MCLR and WDT Reset,       It should be noted that internal RESET sources do not
                                                       drive MCLR pin low.

FIGURE 13-4:      SIMPLIFIED BLOCK DIAGRAM OF ON-CHIP RESET CIRCUIT

                            External
                            RESET

MCLR                     SLEEP

              WDT WDT

              Module Time-out

                         Reset

              VDD Rise

              Detect

VDD                      Power-on Reset

              Brown-out

                  Reset  BODEN                                                       S

      OST/PWRT

                  OST                                                                        Chip Reset
                                                                                        Q
                         10-bit Ripple Counter                                       R

OSC1

      (Note 1) PWRT
      On-chip
                         10-bit Ripple Counter
      RC OSC

                                                                        Enable PWRT
                                                                        Enable OST
Note 1: This is a separate oscillator from the RC oscillator of the CLKIN pin.

DS30605C-page 88                                                                      2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

13.4 RESETS                                               13.4.4 BROWN-OUT RESET (BOR)

13.4.1 POWER-ON RESET (POR)                               The configuration bit, BODEN, can enable or disable
                                                          the Brown-out Reset circuit. If VDD falls below VBOR
A Power-on Reset pulse is generated on-chip when          (parameter D005, about 4V) for longer than TBOR
VDD rise is detected (parameters D003 and D004, in        (parameter #35, about 100S), the brown-out situation
the range of 1.5V - 2.1V). To take advantage of the       will reset the device. If VDD falls below VBOR for less
POR, just tie the MCLR pin directly (or through a resis-  than TBOR, a RESET may not occur.
tor) to VDD. This will eliminate external RC components
usually needed to create a POR.                           Once the brown-out occurs, the device will remain in
                                                          Brown-out Reset until VDD rises above VBOR. The
When the device starts normal operation (exits the        Power-up Timer then keeps the device in RESET for
RESET condition), device operating parameters (volt-      TPWRT (parameter #33, about 72mS). If VDD should fall
age, frequency, temperature) must be met to ensure        below VBOR during TPWRT, the Brown-out Reset pro-
operation. If these conditions are not met, the device    cess will restart when VDD rises above VBOR with the
must be held in RESET until the operating conditions      Power-up Timer Reset. The Power-up Timer is always
are met. The device may be held in RESET by keeping       enabled when the Brown-out Reset circuit is enabled,
MCLR at Vss.                                              regardless of the state of the PWRT configuration bit.

For additional information, refer to Application Note     13.4.5 TIME-OUT SEQUENCE
AN607, "Power-up Trouble Shooting."
                                                          On power-up, the time-out sequence is as follows: the
13.4.2 POWER-UP TIMER (PWRT)                              PWRT delay starts (if enabled) when a POR occurs.
                                                          Then, OST starts counting 1024 oscillator cycles when
The Power-up Timer provides a fixed 72 ms nominal         PWRT ends (LP, XT, HS). When the OST ends, the
time-out on power-up from the POR. The PWRT oper-         device comes out of RESET.
ates on an internal RC oscillator. The device is kept in
RESET as long as the PWRT is active. The PWRT's           If MCLR is kept low long enough, the time-outs will
time delay allows VDD to rise to an acceptable level. A   expire. Bringing MCLR high will begin execution imme-
configuration bit is provided to enable/disable the       diately. This is useful for testing purposes or to synchro-
PWRT.                                                     nize more than one PIC16CXX device operating in
                                                          parallel.
The power-up time delay will vary from chip to chip, due
to VDD, temperature and process variation. See DC         Table 13-5 shows the RESET conditions for the
parameters for details (TPWRT, parameter #33).            STATUS, PCON and PC registers, while Table 13-6
                                                          shows the RESET conditions for all the registers.
13.4.3 OSCILLATOR START-UP TIMER
              (OST)                                       13.4.6 POWER CONTROL/STATUS
                                                                        REGISTER (PCON)
The Oscillator Start-up Timer provides a delay of 1024
oscillator cycles (from OSC1 input) after the PWRT        The Brown-out Reset Status bit, BOR, is unknown on a
delay, if enabled. This helps to ensure that the crystal  POR. It must be set by the user and checked on sub-
oscillator or resonator has started and stabilized.       sequent RESETS to see if bit BOR was cleared, indi-
                                                          cating a BOR occurred. The BOR bit is not predictable
The OST time-out is invoked only for XT, LP and HS        if the Brown-out Reset circuitry is disabled.
modes and only on Power-on Reset or wake-up from
SLEEP.                                                    The Power-on Reset Status bit, POR, is cleared on a
                                                          POR and unaffected otherwise. The user must set this
                                                          bit following a POR and check it on subsequent
                                                          RESETS to see if it has been cleared.

2000 Microchip Technology Inc.                           DS30605C-page 89
PIC16C63A/65B/73B/74B

TABLE 13-3: TIME-OUT IN VARIOUS SITUATIONS

Oscillator Configuration               Power-up                 Brown-out         Wake-up from SLEEP

                              PWRTE = 0    PWRTE = 1

     XT, HS, LP           72 ms + 1024TOSC 1024TOSC             72 ms + 1024TOSC  1024TOSC
                                                                        72 ms          --
     RC                       72 ms                  --

TABLE 13-4: STATUS BITS AND THEIR SIGNIFICANCE

POR BOR TO PD

0          x      1 1 Power-on Reset

0          x      0 x Illegal, TO is set on POR

0          x      x 0 Illegal, PD is set on POR

1          0      1 1 Brown-out Reset

1          1      0 1 WDT Reset

1          1      0 0 WDT Wake-up

1          1      u u MCLR Reset during normal operation

1          1      1 0 MCLR Reset during SLEEP or interrupt wake-up from SLEEP

Legend: x = don't care, u = unchanged

TABLE 13-5: RESET CONDITION FOR SPECIAL REGISTERS

                  Condition                          Program    STATUS             PCON
                                                     Counter    Register          Register

Power-on Reset                                       000h       0001 1xxx         ---- --0x

MCLR Reset during normal operation                   000h       000u uuuu         ---- --uu

MCLR Reset during SLEEP                              000h       0001 0uuu         ---- --uu

WDT Reset                                            000h       0000 1uuu         ---- --uu

WDT Wake-up                                          PC + 1     uuu0 0uuu         ---- --uu

Brown-out Reset                                      000h       000x xuuu         ---- --u0

Interrupt wake-up from SLEEP                         PC + 1(1)  uuu1 0uuu         ---- --uu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0'
Note 1: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector

             (0004h).

REGISTER 13-2: STATUS REGISTER

IRP        RP1    RP0 TO               PD        Z         DC   C

REGISTER 13-3: PCON REGISTER

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

DS30605C-page 90                                                            2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

TABLE 13-6: INITIALIZATION CONDITIONS FOR ALL REGISTERS

   Register  Applicable Devices  Power-on Reset   MCLR Resets   Wake-up via WDT or
                                 Brown-out Reset   WDT Reset            Interrupt

W            63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

INDF         63A 65B 73B 74B     N/A              N/A           N/A

TMR0         63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

PCL          63A 65B 73B 74B     0000h            0000h         PC + 1(2)

STATUS       63A 65B 73B 74B     0001 1xxx        000q quuu(3)  uuuq quuu(3)

FSR          63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTA        63A 65B 73B 74B     --0x 0000        --0u 0000     --uu uuuu

PORTB        63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTC        63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTD        63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

PORTE        63A 65B 73B 74B     ---- -xxx        ---- -uuu     ---- -uuu

PCLATH       63A 65B 73B 74B     ---0 0000        ---0 0000     ---u uuuu

INTCON       63A 65B 73B 74B     0000 000x        0000 000u     uuuu uuuu(1)

             63A 65B 73B 74B     -0-- 0000        -0-- 0000     -u-- uuuu(1)

PIR1         63A 65B 73B 74B     -000 0000        -000 0000     -uuu uuuu(1)
             63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu(1)

             63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu(1)

PIR2         63A 65B 73B 74B     ---- ---0        ---- ---0     ---- ---u(1)

TMR1L        63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

TMR1H        63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

T1CON        63A 65B 73B 74B     --00 0000        --uu uuuu     --uu uuuu

TMR2         63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

T2CON        63A 65B 73B 74B     -000 0000        -000 0000     -uuu uuuu

SSPBUF       63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

SSPCON       63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

CCPR1L       63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

CCPR1H       63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

CCP1CON      63A 65B 73B 74B     --00 0000        --00 0000     --uu uuuu

RCSTA        63A 65B 73B 74B     0000 -00x        0000 -00x     uuuu -uuu

TXREG        63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

RCREG        63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

CCPR2L       63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

CCPR2H       63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

CCP2CON      63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

ADRES        63A 65B 73B 74B     xxxx xxxx        uuuu uuuu     uuuu uuuu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition
Note 1: One or more bits in INTCON, PIR1 and/or PIR2 will be affected (to cause wake-up).

        2: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector
             (0004h).

        3: See Table 13-5 for RESET value for specific condition.

2000 Microchip Technology Inc.                                 DS30605C-page 91
PIC16C63A/65B/73B/74B

TABLE 13-6: INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)

Register          Applicable Devices  Power-on Reset   MCLR Resets  Wake-up via WDT or
                                      Brown-out Reset   WDT Reset           Interrupt

ADCON0            63A 65B 73B 74B     0000 00-0        0000 00-0     uuuu uu-u

OPTION_REG 63A 65B 73B 74B            1111 1111        1111 1111     uuuu uuuu

TRISA             63A 65B 73B 74B     --11 1111        --11 1111     --uu uuuu

TRISB             63A 65B 73B 74B     1111 1111        1111 1111     uuuu uuuu

TRISC             63A 65B 73B 74B     1111 1111        1111 1111     uuuu uuuu

TRISD             63A 65B 73B 74B     1111 1111        1111 1111     uuuu uuuu

TRISE             63A 65B 73B 74B     0000 -111        0000 -111     uuuu -uuu

                  63A 65B 73B 74B     --00 0000        --00 0000     --uu uuuu

PIE1              63A 65B 73B 74B     0-00 0000        0-00 0000     u-uu uuuu
                  63A 65B 73B 74B     -000 0000        -000 0000     -uuu uuuu

                  63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

PIE2              63A 65B 73B 74B     ---- ---0        ---- ---0     ---- ---u

PCON              63A 65B 73B 74B     ---- --0q(3)     ---- --uu     ---- --uu

PR2               63A 65B 73B 74B     1111 1111        1111 1111     1111 1111

SSPADD            63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

SSPSTAT           63A 65B 73B 74B     --00 0000        --00 0000     --uu uuuu

TXSTA             63A 65B 73B 74B     0000 -010        0000 -010     uuuu -uuu

SPBRG             63A 65B 73B 74B     0000 0000        0000 0000     uuuu uuuu

ADCON1            63A 65B 73B 74B     ---- -000        ---- -000     ---- -uuu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition
Note 1: One or more bits in INTCON, PIR1 and/or PIR2 will be affected (to cause wake-up).

        2: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector
             (0004h).

        3: See Table 13-5 for RESET value for specific condition.

DS30605C-page 92                                                   2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

13.5 Interrupts                                                Note:  If an interrupt occurs while the Global Inter-
                                                                      rupt Enable (GIE) bit is being cleared, the
The Interrupt Control register (INTCON) records indi-                 GIE bit may unintentionally be re-enabled
vidual interrupt requests in flag bits. It also has individ-          by the user's Interrupt Service Routine (the
ual and global interrupt enable bits.                                 RETFIE instruction). The events that
                                                                      would cause this to occur are:
Note:  Individual interrupt flag bits are set, regard-
       less of the status of their corresponding
       mask bit, or the GIE bit.                               1. An instruction clears the GIE bit while an
                                                                    interrupt is acknowledged.
A global interrupt enable bit, GIE (INTCON<7>),
enables (if set) all unmasked interrupts, or disables (if      2. The program branches to the interrupt
cleared) all interrupts. When bit GIE is enabled, and an            vector and executes the Interrupt
interrupt's flag bit and mask bit are set, the interrupt will       Service Routine.
vector immediately. Individual interrupts can be dis-
abled through their corresponding enable bits in vari-         3. The Interrupt Service Routine completes
ous registers. Individual interrupt bits are set,                   the execution of the RETFIE instruction.
regardless of the status of the GIE bit. The GIE bit is             This causes the GIE bit to be set
cleared on RESET.                                                   (enables interrupts), and the program
                                                                    returns to the instruction after the one
                                                                    which was meant to disable interrupts.

The "return from interrupt" instruction, RETFIE, exits                Perform the following to ensure that inter-
the interrupt routine, as well as sets the GIE bit, which             rupts are globally disabled:
re-enables interrupts.

The RB0/INT pin interrupt, the RB port change interrupt        LOOP BCF INTCON, GIE        ; Disable global
and the TMR0 overflow interrupt flags are contained in                                     ; interrupt bit
the INTCON register.                                                    BTFSC INTCON, GIE  ; Global interrupt
                                                                                           ; disabled?
The peripheral interrupt flags are contained in the spe-                GOTO LOOP          ; NO, try again
cial function registers PIR1 and PIR2. The correspond-                       :             ; Yes, continue
ing interrupt enable bits are contained in special                                         ; with program
function registers PIE1 and PIE2 and the peripheral                                        ; flow
interrupt enable bit is contained in special function reg-
ister INTCON.

When an interrupt is responded to, the GIE bit is
cleared to disable any further interrupt, the return
address is pushed onto the stack, and the PC is loaded
with 0004h. Once in the Interrupt Service Routine, the
source(s) of the interrupt can be determined by polling
the interrupt flag bits. The interrupt flag bit(s) must be
cleared in software before re-enabling interrupts to
avoid recursive interrupts.

For external interrupt events, such as the INT pin or
PORTB change interrupt, the interrupt latency will be
three or four instruction cycles. The exact latency
depends when the interrupt event occurs. The latency
is the same for one or two cycle instructions. Individual
interrupt flag bits are set, regardless of the status of
their corresponding mask bit, PEIE bit, or the GIE bit.

2000 Microchip Technology Inc.                                                            DS30605C-page 93
PIC16C63A/65B/73B/74B

FIGURE 13-5:      INTERRUPT LOGIC

PSPIF
PSPIE

       ADIF                                                     T0IF                   Wake-up (If in SLEEP mode)
       ADIE                                                     T0IE                               Interrupt to CPU
                                                                INTF
                  RCIF                                          INTE
                  RCIE                                          RBIF
                                                                RBIE
                                        TXIF
                                        TXIE                    PEIE

                                        SSPIF                   GIE
                                        SSPIE

                                        CCP1IF
                                        CCP1IE
                           TMR2IF
                           TMR2IE
              TMR1IF
              TMR1IE

CCP2IF
CCP2IE

The following table shows which devices have which interrupts.

Device T0IF INTF RBIF PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF CCP2IF

PIC16C63A Yes Yes Yes                              Yes Yes Yes             Yes  Yes  Yes  Yes

PIC16C65B Yes Yes Yes Yes                           Yes Yes Yes             Yes  Yes  Yes  Yes

PIC16C73B Yes Yes Yes                             Yes Yes Yes Yes           Yes  Yes  Yes  Yes

PIC16C74B Yes Yes Yes Yes Yes Yes Yes Yes                                    Yes  Yes  Yes  Yes

13.5.1 INT INTERRUPT                                            13.5.3 PORTB INTERRUPT-ON-CHANGE

The external interrupt on RB0/INT pin is edge trig-             An input change on PORTB<7:4> sets flag bit RBIF
gered: either rising if bit INTEDG (OPTION_REG<6>)              (INTCON<0>). The interrupt can be enabled/disabled
is set, or falling if the INTEDG bit is clear. When a valid     by setting/clearing enable bit RBIE (INTCON<4>).
edge appears on the RB0/INT pin, flag bit INTF                  (Section 5.2)
(INTCON<1>) is set. This interrupt can be disabled by
clearing enable bit INTE (INTCON<4>). Flag bit INTF                   Note:  If a change on the I/O pin should occur
must be cleared in software in the Interrupt Service                         when the read operation is being executed
Routine before re-enabling this interrupt. The INT inter-                    (start of the Q2 cycle), then the RBIF inter-
rupt can wake-up the processor from SLEEP, if bit INTE                       rupt flag may not get set.
was set prior to going into SLEEP. The status of global
interrupt enable bit GIE decides whether or not the pro-
cessor branches to the interrupt vector following wake-
up. See Section 13.8 for details on SLEEP mode.

13.5.2 TMR0 INTERRUPT

An overflow (FFh  00h) in the TMR0 register will set
flag bit T0IF (INTCON<2>). The interrupt can be
enabled/disabled by setting/clearing enable bit T0IE
(INTCON<5>) (see Section 6.0).

DS30605C-page 94                                                                   2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

13.6 Context Saving During Interrupts                     The example:

During an interrupt, only the return PC value is saved    a) Stores the W register.
on the stack. Users may wish to save key registers dur-   b) Stores the STATUS register in bank 0.
ing an interrupt i.e., W register and STATUS register.    c) Stores the PCLATH register.
This will have to be implemented in software.             d) Executes the ISR code.
                                                          e) Restores the STATUS register
Example 13-1 stores and restores the STATUS, W, and
PCLATH registers. The register W_TEMP must be                   (and bank select bit).
defined in each bank and must be defined at the same      f) Restores the W and PCLATH registers.
offset from the bank base address (i.e., if W_TEMP is
defined at 0x20 in bank 0, it must also be defined at
0xA0 in bank 1).

EXAMPLE 13-1: SAVING STATUS, W, AND PCLATH REGISTERS IN RAM

MOVWF  W_TEMP                    ;Copy W to TEMP register, could be bank one or zero
SWAPF  STATUS,W                  ;Swap status to be saved into W
CLRF   STATUS                    ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF  STATUS_TEMP               ;Save status to bank zero STATUS_TEMP register
MOVF   PCLATH, W                 ;Only required if using pages 1, 2 and/or 3
MOVWF  PCLATH_TEMP               ;Save PCLATH into W
:
(ISR)  PCLATH_TEMP, W               ;User ISR code goes here
:      PCLATH
MOVF   STATUS_TEMP, W            ;Restore PCLATH
MOVWF                            ;Move W into PCLATH
SWAPF  STATUS                    ;Swap STATUS_TEMP register into W
       W_TEMP,F                  ;(sets bank to original state)
MOVWF  W_TEMP,W                  ;Move W into STATUS register
SWAPF                            ;Swap W_TEMP
SWAPF                            ;Swap W_TEMP into W

13.7 Watchdog Timer (WDT)                                 13.7.1 WDT PERIOD

The Watchdog Timer is a free running on-chip RC oscil-    The WDT has a nominal time-out period of 18 ms
lator, which does not require any external components.    (parameter #31, TWDT). The time-out periods vary with
This RC oscillator is separate from the RC oscillator of  temperature, VDD, and process variations. If longer
the OSC1/CLKIN pin. The WDT will run, even if the         time-out periods are desired, a prescaler with a division
clock on the OSC1/CLKIN and OSC2/CLKOUT pins of           ratio of up to 1:128 can be assigned to the WDT under
the device has been stopped, for example, by execu-       software control, by writing to the OPTION register.
tion of a SLEEP instruction.                              Time-out periods up to 128 TWDT can be realized.

During normal operation, a WDT time-out generates a       The CLRWDT and SLEEP instructions clear the WDT
device RESET (Watchdog Timer Reset). If the device is     and the postscaler, if assigned to the WDT. In addition,
in SLEEP mode, a WDT time-out causes the device to        the SLEEP instruction prevents the WDT from generat-
wake-up and resume normal operation (Watchdog             ing a RESET, but will allow the WDT to wake the device
Timer Wake-up).                                           from SLEEP mode.

The WDT can be permanently disabled by clearing           The TO bit in the STATUS register will be cleared upon
configuration bit WDTE (Section 13.1).                    a WDT time-out.

2000 Microchip Technology Inc.                              DS30605C-page 95
PIC16C63A/65B/73B/74B

13.7.2 WDT PROGRAMMING
              CONSIDERATIONS

It should also be taken into account that under worst
case conditions (VDD = Min., Temperature = Max., and
max. WDT prescaler), it may take several seconds
before a WDT time-out occurs.

Note:    When a CLRWDT instruction is executed
         and the prescaler is assigned to the WDT,
         the prescaler count will be cleared, but the
         prescaler assignment is not changed.

FIGURE 13-6:      WATCHDOG TIMER BLOCK DIAGRAM

                        From TMR0 Clock Source
                        (Figure 6-1)

                                    0

                  WDT Timer         1      M                         Postscaler
                                           U                                  8

                                           X

                                                             8 - to - 1 MUX           PS2:PS0

                           WDT             PSA
                        Enable Bit

                                                                                 To TMR0 MUX (Figure 6-1)

                                                          0          1

                                                             MUX                 PSA

                                                               WDT
                                                             Time-out

Note: PSA and PS2:PS0 are bits in the OPTION register.

TABLE 13-7: SUMMARY OF WATCHDOG TIMER REGISTERS

Address           Name  Bit 7       Bit 6               Bit 5 Bit 4    Bit 3      Bit 2   Bit 1             Bit 0
                                                                                 WDTE    FOSC1             FOSC0
2007h    Config. bits              BODEN(1) CP1 CP0 PWRTE(1)
                                                                                  PS2      PS1               PS0
81h      OPTION_REG RBPU INTEDG T0CS                      T0SE         PSA

Legend: Shaded cells are not used by the Watchdog Timer.
Note 1: See Register 13-1 for operation of these bits.

DS30605C-page 96                                                                  2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

13.8 Power-down Mode (SLEEP)                                  Other peripherals cannot generate interrupts since dur-
                                                              ing SLEEP, no on-chip Q clocks are present.
Power-down mode is entered by executing a SLEEP
instruction.                                                  When the SLEEP instruction is being executed, the next
                                                              instruction (PC + 1) is pre-fetched. For the device to
If enabled, the WDT will be cleared but keeps running,        wake-up through an interrupt event, the corresponding
the PD bit (STATUS<3>) is cleared, the TO (STA-               interrupt enable bit must be set (enabled). Wake-up is
TUS<4>) bit is set, and the oscillator driver is turned off.  regardless of the state of the GIE bit. If the GIE bit is
The I/O ports maintain the status they had, before the        clear (disabled), the device continues execution at the
SLEEP instruction was executed (driving high, low, or         instruction after the SLEEP instruction. If the GIE bit is
hi-impedance).                                                set (enabled), the device executes the instruction after
                                                              the SLEEP instruction and then branches to the inter-
For lowest current consumption in this mode, place all        rupt address (0004h). In cases where the execution of
I/O pins at either VDD or VSS, ensure no external cir-        the instruction following SLEEP is not desirable, the
cuitry is drawing current from the I/O pin, power-down        user should have a NOP after the SLEEP instruction.
the A/D, and disable external clocks. Pull all I/O pins
that are hi-impedance inputs, high or low externally, to      13.8.2 WAKE-UP USING INTERRUPTS
avoid switching currents caused by floating inputs. The
T0CKI input should also be at VDD or VSS for lowest           When global interrupts are disabled (GIE cleared) and
current consumption. The contribution from on-chip            any interrupt source has both its interrupt enable bit
pull-ups on PORTB should also be considered.                  and interrupt flag bit set, one of the following will occur:

The MCLR pin must be at a logic high level (VIHMC).            If the interrupt occurs before the execution of a
                                                                 SLEEP instruction, the SLEEP instruction will com-
13.8.1 WAKE-UP FROM SLEEP                                        plete as a NOP. Therefore, the WDT and WDT
                                                                 postscaler will not be cleared, the TO bit will not
The device can wake up from SLEEP through one of                 be set and PD bit will not be cleared.
the following events:
                                                               If the interrupt occurs during or after the execu-
1. External RESET input on MCLR pin.                             tion of a SLEEP instruction, the device will imme-
2. Watchdog Timer Wake-up (if WDT was                            diately wake up from sleep. The SLEEP
                                                                 instruction will be completely executed before the
      enabled).                                                  wake-up. Therefore, the WDT and WDT
3. Interrupt from INT pin, RB port change or a                   postscaler will be cleared, the TO bit will be set
                                                                 and the PD bit will be cleared.
      Peripheral Interrupt.
                                                              Even if the flag bits were checked before executing a
External MCLR Reset will cause a device RESET. All            SLEEP instruction, it may be possible for flag bits to
other events are considered a continuation of program         become set before the SLEEP instruction completes. To
execution and cause a "wake-up". The TO and PD bits           determine whether a SLEEP instruction executed, test
in the STATUS register can be used to determine the           the PD bit. If the PD bit is set, the SLEEP instruction
cause of device RESET. The PD bit, which is set on            was executed as a NOP.
power-up, is cleared when SLEEP is invoked. The TO
bit is cleared if a WDT time-out occurred (and caused         To ensure that the WDT is cleared, a CLRWDT instruc-
wake-up).                                                     tion should be executed before a SLEEP instruction.

The following peripheral interrupts can wake the device
from SLEEP:

1. TMR1 interrupt. Timer1 must be operating as an
      asynchronous counter.

2. SSP (START/STOP) bit detect interrupt.
3. SSP transmit or receive in Slave mode

      (SPI/I2C).
4. CCP Capture mode interrupt.
5. Parallel Slave port read or write

      (PIC16C65B/74B only).
6. A/D conversion (when A/D clock source is RC).
7. USART TX or RX (Synchronous Slave mode).

2000 Microchip Technology Inc.                               DS30605C-page 97
PIC16C63A/65B/73B/74B

FIGURE 13-7:          WAKE-UP FROM SLEEP THROUGH INTERRUPT

                      Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1                 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
           OSC1                                   TOST(2)
   CLKOUT(4)
                                                                                            Interrupt Latency (2)
         INT pin

INTF Flag
(INTCON<1>)

GIE bit                                      Processor in
(INTCON<7>)                                     SLEEP

INSTRUCTION FLOW                                         PC+2

       PC         PC             PC+1                               PC+2           PC + 2     0004h                                           0005h
                               Inst(PC + 1)                    Inst(PC + 2)  Dummy cycle   Inst(0004h)                                     Inst(0005h)
Instruction  Inst(PC) = SLEEP  SLEEP                           Inst(PC + 1)                Dummy cycle                                     Inst(0004h)
Fetched          Inst(PC - 1)

Instruction
Executed

Note   1: XT, HS or LP oscillator mode assumed.
       2: TOST = 1024Tosc (drawing not to scale). This delay is not present in RC osc mode.
       3: GIE = '1' assumed. After wake- up, the processor jumps to the interrupt routine. If GIE = '0', execution will continue in-line.
       4: CLKOUT is not available in these osc modes, but shown here for timing reference.

13.9 Program Verification/Code                                 The device is placed into a Program/Verify mode by
         Protection                                            holding the RB6 and RB7 pins low, while raising the
                                                               MCLR (VPP) pin from VIL to VIHH (see programming
If the code protection bit(s) have not been pro-               specification). RB6 becomes the programming clock
grammed, the on-chip program memory can be read                and RB7 becomes the programming data. Both RB6
out for verification purposes.                                 and RB7 are Schmitt Trigger inputs in this mode.

Note:  Microchip does not recommend code pro-                  After RESET, to place the device into Programming/
       tecting windowed devices. Devices that                  Verify mode, the program counter (PC) is at location
       are code protected may be erased, but not               00h. A 6-bit command is then supplied to the device.
       programmed again.                                       Depending on the command, 14 bits of program data are
                                                               then supplied to or from the device, depending if the
13.10 ID Locations                                             command was a load or a read. For complete details of
                                                               serial programming, please refer to the PIC16C6X/7X
Four memory locations (2000h - 2003h) are designated           Programming Specifications (Literature #DS30228).
as ID locations where the user can store checksum or
other code identification numbers. These locations are         FIGURE 13-8:                TYPICAL IN-CIRCUIT
not accessible during normal execution, but are read-                                      SERIAL PROGRAMMING
able and writable during program/verify. It is recom-                External              CONNECTION
mended that only the four least significant bits of the ID           Connector
location are used.                                                   Signals               To Normal
                                                                                           Connections
13.11 In-Circuit Serial Programming                                        +5V
                                                                             0V                                                            PIC16CXX
PIC16CXX microcontrollers can be serially pro-
grammed while in the end application circuit. This is                      VPP                                                             VDD
simply done with two lines for clock and data, and three                   CLK                                                             VSS
other lines for power, ground and the programming                    Data I/O                                                              MCLR/VPP
voltage. This allows customers to manufacture boards
with unprogrammed devices, and then program the                                                                                            RB6
microcontroller just before shipping the product. This
also allows the most recent firmware or a custom firm-                                                                                     RB7
ware to be programmed.

                                                                                                                           VDD

                                                                                           To Normal
                                                                                           Connections

DS30605C-page 98                                                                            2000 Microchip Technology Inc.
                                                             PIC16C63A/65B/73B/74B

14.0 INSTRUCTION SET SUMMARY                                      The instruction set is highly orthogonal and is grouped
                                                                  into three basic categories:
Each PIC16CXX instruction is a 14-bit word divided
into an OPCODE, which specifies the instruction type               Byte-oriented operations
and one or more operands, which further specify the
operation of the instruction. The PIC16CXX instruction             Bit-oriented operations
set summary in Table 14-2 lists byte-oriented, bit-ori-
ented, and literal and control operations. Table 14-1             Literal and control operations
shows the opcode field descriptions.
                                                                  All instructions are executed within one single instruc-
For byte-oriented instructions, 'f' represents a file reg-        tion cycle, unless a conditional test is true or the pro-
ister designator and 'd' represents a destination desig-          gram counter is changed as a result of an instruction.
nator. The file register designator specifies which file          In this case, the execution takes two instruction cycles
register is to be used by the instruction.                        with the second cycle executed as a NOP. One instruc-
                                                                  tion cycle consists of four oscillator periods. Thus, for
The destination designator specifies where the result of          an oscillator frequency of 4 MHz, the normal instruction
the operation is to be placed. If 'd' is zero, the result is      execution time is 1 s. If a conditional test is true or the
placed in the W register. If 'd' is one, the result is placed     program counter is changed as a result of an instruc-
in the file register specified in the instruction.                tion, the instruction execution time is 2 s.

For bit-oriented instructions, 'b' represents a bit field         Table 14-2 lists the instructions recognized by the
designator which selects the number of the bit affected           MPASMTM assembler.
by the operation, while 'f' represents the address of the
file in which the bit is located.                                 Figure 14-1 shows the general formats that the instruc-
                                                                  tions can have.
For literal and control operations, 'k' represents an
eight or eleven bit constant or literal value.                    Note:  To maintain upward compatibility with
                                                                         future PIC16CXX products, do not use the
                                                                         OPTION and TRIS instructions.

TABLE 14-1:     OPCODE FIELD                                      All examples use the following format to represent a
Field          DESCRIPTIONS                                      hexadecimal number:

                        Description                               0xhh

f Register file address (0x00 to 0x7F)                            where h signifies a hexadecimal digit.

   W Working register (accumulator)                               FIGURE 14-1:      GENERAL FORMAT FOR
                                                                                    INSTRUCTIONS
   b Bit address within an 8-bit file register
                                                                  Byte-oriented file register operations
   k Literal field, constant data or label
                                                                  13                8 76                              0
          Don't care location (= 0 or 1)
          The assembler will generate code with x = 0. It is the         OPCODE        d                  f (FILE #)
   x recommended form of use for compatibility with all
          Microchip software tools.                                      d = 0 for destination W
                                                                         d = 1 for destination f
          Destination select; d = 0: store result in W,                  f = 7-bit file register address
   d d = 1: store result in file register f.
                                                                  Bit-oriented file register operations
          Default is d = 1
                                                                  13                10 9 7 6                          0
label Label name

TOS Top-of-Stack                                                        OPCODE        b (BIT #) f (FILE #)
  PC Program Counter
PCLATH Program Counter High Latch                                        b = 3-bit bit address
GIE Global Interrupt Enable bit                                         f = 7-bit file register address
WDT Watchdog Timer/Counter
                                                                  Literal and control operations

TO Time-out bit                                                  General              87                                  0
PD Power-down bit                                                   13                                   k (literal)
                                                                            OPCODE
         Destination either the W register or the specified
dest register file location                                              k = 8-bit immediate value

[ ] Options                                                       CALL and GOTO instructions only

( ) Contents

Assigned to                                                      13            11 10                                 0

< > Register bit field                                                   OPCODE           k (literal)

In the set of                                                           k = 11-bit immediate value

italics User defined term (font is courier)

2000 Microchip Technology Inc.                                                                           DS30605C-page 99
PIC16C63A/65B/73B/74B

TABLE 14-2:  PIC16CXX INSTRUCTION SET           Cycles       14-Bit Opcode        Status Notes

Mnemonic,     Description
Operands
                                                        MSb                 LSb Affected

BYTE-ORIENTED FILE REGISTER OPERATIONS

ADDWF   f, d Add W and f                         1 00        0111  dfff     ffff  C,DC,Z  1,2
ANDWF                                            1 00        0101  dfff     ffff  Z       1,2
CLRF    f, d AND W with f                        1 00        0001  lfff     ffff  Z       2
CLRW                                             1 00        0001  0000     0011  Z
COMF    f          Clear f                       1 00        1001  dfff     ffff  Z       1,2
DECF                                             1 00        0011  dfff     ffff  Z       1,2
DECFSZ  -          Clear W                      1(2) 00      1011  dfff     ffff          1,2,3
INCF                                             1 00        1010  dfff     ffff  Z       1,2
INCFSZ  f, d Complement f                       1(2) 00      1111  dfff     ffff          1,2,3
IORWF                                            1 00        0100  dfff     ffff  Z       1,2
MOVF    f, d Decrement f                         1 00        1000  dfff     ffff  Z       1,2
MOVWF                                            1 00        0000  lfff     ffff
NOP     f, d Decrement f, Skip if 0              1 00        0000  0xx0     0000  C       1,2
RLF                                              1 00        1101  dfff     ffff  C       1,2
RRF     f, d Increment f                         1 00        1100  dfff     ffff  C,DC,Z  1,2
SUBWF                                            1 00        0010  dfff     ffff          1,2
SWAPF   f, d Increment f, Skip if 0              1 00        1110  dfff     ffff  Z       1,2
XORWF                                            1 00        0110  dfff     ffff
        f, d Inclusive OR W with f

        f, d Move f

        f          Move W to f

        -          No Operation

        f, d Rotate Left f through Carry

        f, d Rotate Right f through Carry

        f, d Subtract W from f

        f, d Swap nibbles in f

        f, d Exclusive OR W with f

BIT-ORIENTED FILE REGISTER OPERATIONS

BCF     f, b Bit Clear f                        1 01 00bb bfff ffff                       1,2
BSF     f, b Bit Set f
BTFSC   f, b Bit Test f, Skip if Clear          1 01 01bb bfff ffff                       1,2
BTFSS   f, b Bit Test f, Skip if Set
                                                1 (2) 01 10bb bfff ffff                   3

                                                1 (2) 01 11bb bfff ffff                   3

LITERAL AND CONTROL OPERATIONS

ADDLW   k          Add literal and W            1 11 111x kkkk kkkk C,DC,Z
                   AND literal with W           1 11 1001 kkkk kkkk Z
ANDLW   k          Call subroutine              2 10 0kkk kkkk kkkk
                   Clear Watchdog Timer         1 00 0000 0110 0100 TO,PD
CALL    k          Go to address                2 10 1kkk kkkk kkkk
                   Inclusive OR literal with W  1 11 1000 kkkk kkkk Z
CLRWDT -           Move literal to W            1 11 00xx kkkk kkkk
                   Return from interrupt        2 00 0000 0000 1001
GOTO    k          Return with literal in W     2 11 01xx kkkk kkkk
                   Return from Subroutine       2 00 0000 0000 1000
IORLW   k          Go into standby mode         1 00 0000 0110 0011 TO,PD
                   Subtract W from literal      1 11 110x kkkk kkkk C,DC,Z
MOVLW k            Exclusive OR literal with W  1 11 1010 kkkk kkkk Z

RETFIE  -

RETLW   k

RETURN -

SLEEP   -

SUBLW   k

XORLW   k

Note 1: When an I/O register is modified as a function of itself ( e.g., MOVF PORTB, 1), the value used will be that value present
               on the pins themselves. For example, if the data latch is '1' for a pin configured as input and is driven low by an external
               device, the data will be written back with a '0'.

         2: If this instruction is executed on the TMR0 register (and, where applicable, d = 1), the prescaler will be cleared if
               assigned to the Timer0 Module.

         3: If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is
               executed as a NOP.

Note: Additional information on the mid-range instruction set is available in the PICmicroTM Mid-Range MCU
            Family Reference Manual (DS33023).

DS30605C-page 100                                                   2000 Microchip Technology Inc.
                                                                 PIC16C63A/65B/73B/74B

14.1 Instruction Descriptions

ADDLW             Add Literal and W                              ANDWF             AND W with f
Syntax:           [label] ADDLW k                                Syntax:
Operands:         0  k  255                                      Operands:         [label] ANDWF f,d
Operation:        (W) + k  (W)
Status Affected:  C, DC, Z                                       Operation:        0  f  127
Description:                                                     Status Affected:  d  [0,1]
                  The contents of the W register are             Description:
                  added to the eight bit literal 'k' and the                       (W) .AND. (f)  (destination)
                  result is placed in the W register.
                                                                                   Z

                                                                                   AND the W register with register 'f'. If
                                                                                   'd' is 0, the result is stored in the W
                                                                                   register. If 'd' is 1, the result is stored
                                                                                   back in register 'f'.

ADDWF             Add W and f                                    BCF               Bit Clear f
Syntax:                                                          Syntax:           [label] BCF f,b
Operands:         [label] ADDWF f,d                              Operands:         0  f  127
                                                                                   0b7
Operation:        0  f  127                                      Operation:        0  (f)
Status Affected:  d  [0,1]                                       Status Affected:  None
Description:                                                     Description:
                  (W) + (f)  (destination)                                         Bit 'b' in register 'f' is cleared.

                  C, DC, Z

                  Add the contents of the W register
                  with register 'f'. If 'd' is 0, the result is
                  stored in the W register. If 'd' is 1, the
                  result is stored back in register 'f'.

ANDLW             AND Literal with W                             BSF               Bit Set f
Syntax:           [label] ANDLW k                                Syntax:           [label] BSF f,b
Operands:         0  k  255                                      Operands:         0  f  127
Operation:        (W) .AND. (k)  (W)                                               0b7
Status Affected:  Z                                              Operation:        1  (f)
Description:                                                     Status Affected:  None
                  The contents of W register are                 Description:
                  AND'ed with the eight bit literal 'k'.                           Bit 'b' in register 'f' is set.
                  The result is placed in the W register.

2000 Microchip Technology Inc.                                                    DS30605C-page 101
PIC16C63A/65B/73B/74B

BTFSS             Bit Test f, Skip if Set                        CLRF              Clear f
Syntax:                                                          Syntax:
Operands:         [label] BTFSS f,b                              Operands:         [label] CLRF f
                                                                 Operation:        0  f  127
Operation:        0  f  127                                                        00h  (f)
Status Affected:  0b<7                                           Status Affected:  1Z
Description:                                                     Description:      Z
                  skip if (f) = 1
                                                                                   The contents of register 'f' are cleared
                  None                                                             and the Z bit is set.

                  If bit 'b' in register 'f' is '0', the next
                  instruction is executed.
                  If bit 'b' is '1', then the next instruction
                  is discarded and a NOP is executed
                  instead making this a 2TCY instruction.

BTFSC             Bit Test, Skip if Clear                        CLRW              Clear W
Syntax:                                                          Syntax:           [ label ] CLRW
Operands:         [label] BTFSC f,b                              Operands:         None
                                                                 Operation:        00h  (W)
Operation:        0  f  127                                                        1Z
Status Affected:  0b7                                            Status Affected:  Z
Description:                                                     Description:
                  skip if (f) = 0                                               W register is cleared. Zero bit (Z) is
                                                                                   set.
                  None

                  If bit 'b' in register 'f' is '1', the next
                  instruction is executed.
                  If bit 'b', in register 'f', is '0', the next
                  instruction is discarded, and a NOP is
                  executed instead, making this a 2 TCY
                  instruction.

CALL              Call Subroutine                                CLRWDT            Clear Watchdog Timer
Syntax:                                                          Syntax:
Operands:         [ label ] CALL k                               Operands:         [ label ] CLRWDT
Operation:                                                       Operation:
                  0  k  2047                                                       None
Status Affected:                                                 Status Affected:
Description:      (PC)+ 1 TOS,                                   Description:      00h  WDT
                  k  PC<10:0>,                                                     0  WDT prescaler,
                  (PCLATH<4:3>)  PC<12:11>                                         1  TO
                                                                                   1  PD
                  None
                                                                                   TO, PD
                  Call Subroutine. First, return address
                  (PC+1) is pushed onto the stack. The                             CLRWDT instruction resets the Watch-
                  eleven bit immediate address is                                  dog Timer. It also resets the prescaler
                  loaded into PC bits <10:0>. The upper                            of the WDT. Status bits TO and PD
                  bits of the PC are loaded from                                   are set.
                  PCLATH. CALL is a two-cycle
                  instruction.

DS30605C-page 102                                                                   2000 Microchip Technology Inc.
                                                                 PIC16C63A/65B/73B/74B

COMF              Complement f                                   GOTO              Unconditional Branch
Syntax:                                                          Syntax:
Operands:         [ label ] COMF f,d                             Operands:         [ label ] GOTO k
                                                                 Operation:
Operation:        0  f  127                                                        0  k  2047
Status Affected:  d  [0,1]                                       Status Affected:
Description:                                                     Description:      k  PC<10:0>
                  (f)  (destination)                                               PCLATH<4:3>  PC<12:11>

                  Z                                                                None

                  The contents of register 'f' are comple-                         GOTO is an unconditional branch. The
                  mented. If 'd' is 0, the result is stored                        eleven bit immediate value is loaded
                  in W. If 'd' is 1, the result is stored                          into PC bits <10:0>. The upper bits of
                  back in register 'f'.                                            PC are loaded from PCLATH<4:3>.
                                                                                   GOTO is a two-cycle instruction.

DECF              Decrement f                                    INCF              Increment f
Syntax:                                                          Syntax:
Operands:         [label] DECF f,d                               Operands:         [ label ] INCF f,d

Operation:        0  f  127                                      Operation:        0  f  127
Status Affected:  d  [0,1]                                       Status Affected:  d  [0,1]
Description:                                                     Description:
                  (f) - 1  (destination)                                           (f) + 1  (destination)

                  Z                                                                Z

                  Decrement register 'f'. If 'd' is 0, the                         The contents of register 'f' are incre-
                  result is stored in the W register. If 'd'                       mented. If 'd' is 0, the result is placed
                  is 1, the result is stored back in                               in the W register. If 'd' is 1, the result is
                  register 'f'.                                                    placed back in register 'f'.

DECFSZ            Decrement f, Skip if 0                         INCFSZ            Increment f, Skip if 0
Syntax:                                                          Syntax:
Operands:         [ label ] DECFSZ f,d                           Operands:         [ label ] INCFSZ f,d

Operation:        0  f  127                                      Operation:        0  f  127
                  d  [0,1]                                                         d  [0,1]
Status Affected:                                                 Status Affected:
Description:      (f) - 1  (destination);                        Description:      (f) + 1  (destination),
                  skip if result = 0                                               skip if result = 0

                  None                                                             None

                  The contents of register 'f' are decre-                          The contents of register 'f' are incre-
                  mented. If 'd' is 0, the result is placed                        mented. If 'd' is 0, the result is placed
                  in the W register. If 'd' is 1, the result is                    in the W register. If 'd' is 1, the result is
                  placed back in register 'f'.                                     placed back in register 'f'.
                  If the result is 1, the next instruction is                      If the result is 1, the next instruction is
                  executed. If the result is 0, then a NOP                         executed. If the result is 0, a NOP is
                  is executed instead making it a 2 TCY                            executed instead making it a 2 TCY
                  instruction.
                                                                                   instruction.

2000 Microchip Technology Inc.                                                    DS30605C-page 103
PIC16C63A/65B/73B/74B

IORLW              Inclusive OR Literal with W                  MOVLW             Move Literal to W
Syntax:            [ label ] IORLW k                            Syntax:           [ label ] MOVLW k
Operands:          0  k  255                                    Operands:         0  k  255
Operation:         (W) .OR. k  (W)                              Operation:        k  (W)
Status Affected:   Z                                            Status Affected:  None
Description:                                                    Description:
                   The contents of the W register are                             The eight bit literal 'k' is loaded into
                   OR'ed with the eight bit literal 'k'. The                      W register. The don't cares will
                   result is placed in the W register.                            assemble as 0's.

IORWF             Inclusive OR W with f                         MOVWF             Move W to f
Syntax:                                                         Syntax:           [ label ] MOVWF f
Operands:         [ label ] IORWF f,d                           Operands:         0  f  127
                                                                Operation:        (W)  (f)
Operation:        0  f  127                                     Status Affected:  None
Status Affected:  d  [0,1]                                      Description:
Description:                                                                      Move data from W register to
                  (W) .OR. (f)  (destination)                                     register 'f'.

                  Z

                  Inclusive OR the W register with regis-
                  ter 'f'. If 'd' is 0 the result is placed in
                  the W register. If 'd' is 1 the result is
                  placed back in register 'f'.

MOVF              Move f                                        NOP               No Operation
Syntax:                                                         Syntax:           [ label ] NOP
Operands:         [ label ] MOVF f,d                            Operands:         None
                                                                Operation:        No operation
Operation:        0  f  127                                     Status Affected:  None
Status Affected:  d  [0,1]                                      Description:
Description:                                                                      No operation.
                  (f)  (destination)

                  Z

                  The contents of register f are moved
                  to a destination dependant upon the
                  status of d. If d = 0, destination is W
                  register. If d = 1, the destination is file
                  register f itself. d = 1 is useful to test a
                  file register since status flag Z is
                  affected.

DS30605C-page 104                                                                  2000 Microchip Technology Inc.
                                                           PIC16C63A/65B/73B/74B

RETFIE            Return from Interrupt                    RLF               Rotate Left f through Carry
Syntax:           [ label ] RETFIE                         Syntax:
Operands:         None                                     Operands:         [ label ] RLF f,d
Operation:        TOS  PC,
                  1  GIE                                   Operation:        0  f  127
Status Affected:                                           Status Affected:  d  [0,1]
                  None                                     Description:
                                                                             See description below

                                                                             C

                                                                             The contents of register 'f' are rotated
                                                                             one bit to the left through the Carry
                                                                             Flag. If 'd' is 0, the result is placed in
                                                                             the W register. If 'd' is 1, the result is
                                                                             stored back in register 'f'.

                                                                                C       Register f

RETLW             Return with Literal in W                 RRF               Rotate Right f through Carry
Syntax:                                                    Syntax:
Operands:         [ label ] RETLW k                        Operands:         [ label ] RRF f,d
Operation:
                  0  k  255                                Operation:        0  f  127
Status Affected:                                           Status Affected:  d  [0,1]
Description:      k  (W);                                  Description:
                  TOS  PC                                                    See description below

                  None                                                       C

                  The W register is loaded with the eight                    The contents of register 'f' are rotated
                  bit literal 'k'. The program counter is                    one bit to the right through the Carry
                  loaded from the top of the stack (the                      Flag. If 'd' is 0, the result is placed in
                  return address). This is a two-cycle                       the W register. If 'd' is 1, the result is
                  instruction.                                               placed back in register 'f'.

                                                                                C       Register f

RETURN            Return from Subroutine                   SLEEP             [ label ] SLEEP
Syntax:                                                    Syntax:
Operands:         [ label ] RETURN                         Operands:         None
Operation:                                                 Operation:
Status Affected:  None                                                       00h  WDT,
Description:      TOS  PC                                  Status Affected:  0  WDT prescaler,
                  None                                     Description:      1  TO,
                                                                             0  PD
                  Return from subroutine. The stack is
                  POPed and the top of the stack (TOS)                       TO, PD
                  is loaded into the program counter.
                  This is a two-cycle instruction.                           The power-down status bit, PD is
                                                                             cleared. Time-out status bit, TO is
                                                                             set. Watchdog Timer and its
                                                                             prescaler are cleared.
                                                                             The processor is put into SLEEP
                                                                             mode with the oscillator stopped. See
                                                                             Section 13.8 for more details.

2000 Microchip Technology Inc.                                                         DS30605C-page 105
PIC16C63A/65B/73B/74B

SUBLW             Subtract W from Literal                        XORLW             Exclusive OR Literal with W
                                                                 Syntax:
Syntax:           [ label ] SUBLW k                              Operands:         [label] XORLW k
                                                                 Operation:
Operands:         0  k  255                                      Status Affected:  0  k  255
                                                                 Description:      (W) .XOR. k  (W)
Operation:        k - (W)  (W)
                                                                                   Z
Status Affected: C, DC, Z
                                                                                   The contents of the W register are
Description:      The W register is subtracted (2's com-                           XOR'ed with the eight bit literal 'k'.
                  plement method) from the eight bit lit-                          The result is placed in the W
                  eral 'k'. The result is placed in the W                          register.
                  register.

SUBWF             Subtract W from f                              XORWF             Exclusive OR W with f
                                                                 Syntax:
Syntax:           [ label ] SUBWF f,d                            Operands:         [label] XORWF f,d

Operands:         0  f  127                                      Operation:        0  f  127
                  d  [0,1]                                       Status Affected:  d  [0,1]
                                                                 Description:
Operation:        (f) - (W)  (destination)                                         (W) .XOR. (f)  (destination)

Status Affected: C, DC, Z                                                          Z

Description:      Subtract (2's complement method) W                               Exclusive OR the contents of the W
                  register from register 'f'. If 'd' is 0, the                     register with register 'f'. If 'd' is 0, the
                  result is stored in the W register. If 'd' is                    result is stored in the W register. If 'd'
                  1, the result is stored back in register 'f'.                    is 1, the result is stored back in
                                                                                   register 'f'.

SWAPF             Swap Nibbles in f
Syntax:
Operands:         [ label ] SWAPF f,d

Operation:        0  f  127
                  d  [0,1]
Status Affected:
Description:      (f<3:0>)  (destination<7:4>),
                  (f<7:4>)  (destination<3:0>)

                  None

                  The upper and lower nibbles of regis-
                  ter 'f' are exchanged. If 'd' is 0, the
                  result is placed in W register. If 'd' is 1,
                  the result is placed in register 'f'.

DS30605C-page 106                                                                   2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

15.0 DEVELOPMENT SUPPORT                                The MPLAB IDE allows you to:

The PICmicro microcontrollers are supported with a      Edit your source files (either assembly or `C')
full range of hardware and software development tools:   One touch assemble (or compile) and download

Integrated Development Environment                       to PICmicro emulator and simulator tools (auto-
   - MPLAB IDE Software                                   matically updates all project information)
                                                         Debug using:
Assemblers/Compilers/Linkers                             - source files
   - MPASMTM Assembler                                     - absolute listing file
   - MPLAB C17 and MPLAB C18 C Compilers                   - machine code
   - MPLINKTM Object Linker/
      MPLIBTM Object Librarian                          The ability to use MPLAB IDE with multiple debugging
                                                        tools allows users to easily switch from the cost-
Simulators                                            effective simulator to a full-featured emulator with
   - MPLAB SIM Software Simulator                       minimal retraining.

Emulators                                             15.2 MPASM Assembler
   - MPLAB ICE 2000 In-Circuit Emulator
   - ICEPICTM In-Circuit Emulator                       The MPASM assembler is a full-featured universal
                                                        macro assembler for all PICmicro MCU's.
In-Circuit Debugger
   - MPLAB ICD for PIC16F87X                            The MPASM assembler has a command line interface
                                                        and a Windows shell. It can be used as a stand-alone
Device Programmers                                    application on a Windows 3.x or greater system, or it
   - PRO MATE II Universal Device Programmer           can be used through MPLAB IDE. The MPASM assem-
   - PICSTART Plus Entry-Level Development             bler generates relocatable object files for the MPLINK
      Programmer                                        object linker, Intel standard HEX files, MAP files to
                                                        detail memory usage and symbol reference, an abso-
Low Cost Demonstration Boards                         lute LST file that contains source lines and generated
   - PICDEMTM 1 Demonstration Board                     machine code, and a COD file for debugging.
   - PICDEM 2 Demonstration Board
   - PICDEM 3 Demonstration Board                       The MPASM assembler features include:
   - PICDEM 17 Demonstration Board
   - KEELOQ Demonstration Board                         Integration into MPLAB IDE projects.
                                                         User-defined macros to streamline assembly
15.1 MPLAB Integrated Development
         Environment Software                              code.
                                                         Conditional assembly for multi-purpose source
The MPLAB IDE software brings an ease of software
development previously unseen in the 8-bit microcon-       files.
troller market. The MPLAB IDE is a Windows-based       Directives that allow complete control over the
application that contains:
                                                           assembly process.
An interface to debugging tools
   - simulator                                          15.3 MPLAB C17 and MPLAB C18
   - programmer (sold separately)                                C Compilers
   - emulator (sold separately)
   - in-circuit debugger (sold separately)              The MPLAB C17 and MPLAB C18 Code Development
                                                        Systems are complete ANSI `C' compilers for
A full-featured editor                                Microchip's PIC17CXXX and PIC18CXXX family of
A project manager                                     microcontrollers, respectively. These compilers provide
Customizable toolbar and key mapping                  powerful integration capabilities and ease of use not
A status bar                                          found with other compilers.
On-line help
                                                        For easier source level debugging, the compilers pro-
                                                        vide symbol information that is compatible with the
                                                        MPLAB IDE memory display.

2000 Microchip Technology Inc.                         DS30605C-page 107
PIC16C63A/65B/73B/74B

15.4 MPLINK Object Linker/                                   15.6 MPLAB ICE High Performance
         MPLIB Object Librarian                                       Universal In-Circuit Emulator with
                                                                      MPLAB IDE
The MPLINK object linker combines relocatable
objects created by the MPASM assembler and the               The MPLAB ICE universal in-circuit emulator is intended
MPLAB C17 and MPLAB C18 C compilers. It can also             to provide the product development engineer with a
link relocatable objects from pre-compiled libraries,        complete microcontroller design tool set for PICmicro
using directives from a linker script.                       microcontrollers (MCUs). Software control of the
                                                             MPLAB ICE in-circuit emulator is provided by the
The MPLIB object librarian is a librarian for pre-           MPLAB Integrated Development Environment (IDE),
compiled code to be used with the MPLINK object              which allows editing, building, downloading and source
linker. When a routine from a library is called from         debugging from a single environment.
another source file, only the modules that contain that
routine will be linked in with the application. This allows  The MPLAB ICE 2000 is a full-featured emulator sys-
large libraries to be used efficiently in many different     tem with enhanced trace, trigger and data monitoring
applications. The MPLIB object librarian manages the         features. Interchangeable processor modules allow the
creation and modification of library files.                  system to be easily reconfigured for emulation of differ-
                                                             ent processors. The universal architecture of the
The MPLINK object linker features include:                   MPLAB ICE in-circuit emulator allows expansion to
                                                             support new PICmicro microcontrollers.
Integration with MPASM assembler and MPLAB
   C17 and MPLAB C18 C compilers.                            The MPLAB ICE in-circuit emulator system has been
                                                             designed as a real-time emulation system, with
Allows all memory areas to be defined as sections          advanced features that are generally found on more
   to provide link-time flexibility.                         expensive development tools. The PC platform and
                                                             Microsoft Windows environment were chosen to best
The MPLIB object librarian features include:                 make these features available to you, the end user.

Easier linking because single libraries can be             15.7 ICEPIC In-Circuit Emulator
   included instead of many smaller files.
                                                             The ICEPIC low cost, in-circuit emulator is a solution
Helps keep code maintainable by grouping                   for the Microchip Technology PIC16C5X, PIC16C6X,
   related modules together.                                 PIC16C7X and PIC16CXXX families of 8-bit One-
                                                             Time-Programmable (OTP) microcontrollers. The mod-
Allows libraries to be created and modules to be           ular system can support different subsets of PIC16C5X
   added, listed, replaced, deleted or extracted.            or PIC16CXXX products through the use of inter-
                                                             changeable personality modules, or daughter boards.
15.5 MPLAB SIM Software Simulator                            The emulator is capable of emulating without target
                                                             application circuitry being present.
The MPLAB SIM software simulator allows code devel-
opment in a PC-hosted environment by simulating the
PICmicro series microcontrollers on an instruction
level. On any given instruction, the data areas can be
examined or modified and stimuli can be applied from
a file, or user-defined key press, to any of the pins. The
execution can be performed in single step, execute
until break, or trace mode.

The MPLAB SIM simulator fully supports symbolic debug-
ging using the MPLAB C17 and the MPLAB C18 C com-
pilers and the MPASM assembler. The software simulator
offers the flexibility to develop and debug code outside of
the laboratory environment, making it an excellent multi-
project software development tool.

DS30605C-page 108                                             2000 Microchip Technology Inc.
                                 PIC16C63A/65B/73B/74B

15.8 MPLAB ICD In-Circuit Debugger                         15.11 PICDEM 1 Low Cost PICmicro
                                                                    Demonstration Board
Microchip's In-Circuit Debugger, MPLAB ICD, is a pow-
erful, low cost, run-time development tool. This tool is   The PICDEM 1 demonstration board is a simple board
based on the FLASH PIC16F87X and can be used to            which demonstrates the capabilities of several of
develop for this and other PICmicro microcontrollers       Microchip's microcontrollers. The microcontrollers sup-
from the PIC16CXXX family. The MPLAB ICD utilizes          ported are: PIC16C5X (PIC16C54 to PIC16C58A),
the in-circuit debugging capability built into the         PIC16C61, PIC16C62X, PIC16C71, PIC16C8X,
PIC16F87X. This feature, along with Microchip's            PIC17C42, PIC17C43 and PIC17C44. All necessary
In-Circuit Serial ProgrammingTM protocol, offers cost-     hardware and software is included to run basic demo
effective in-circuit FLASH debugging from the graphical    programs. The user can program the sample microcon-
user interface of the MPLAB Integrated Development         trollers provided with the PICDEM 1 demonstration
Environment. This enables a designer to develop and        board on a PRO MATE II device programmer, or a
debug source code by watching variables, single-           PICSTART Plus development programmer, and easily
stepping and setting break points. Running at full         test firmware. The user can also connect the
speed enables testing hardware in real-time.               PICDEM 1 demonstration board to the MPLAB ICE in-
                                                           circuit emulator and download the firmware to the emu-
15.9 PRO MATE II Universal Device                          lator for testing. A prototype area is available for the
         Programmer                                        user to build some additional hardware and connect it
                                                           to the microcontroller socket(s). Some of the features
The PRO MATE II universal device programmer is a           include an RS-232 interface, a potentiometer for simu-
full-featured programmer, capable of operating in          lated analog input, push button switches and eight
stand-alone mode, as well as PC-hosted mode. The           LEDs connected to PORTB.
PRO MATE II device programmer is CE compliant.
                                                           15.12 PICDEM 2 Low Cost PIC16CXX
The PRO MATE II device programmer has program-                      Demonstration Board
mable VDD and VPP supplies, which allow it to verify
programmed memory at VDD min and VDD max for max-          The PICDEM 2 demonstration board is a simple dem-
imum reliability. It has an LCD display for instructions   onstration board that supports the PIC16C62,
and error messages, keys to enter commands and a           PIC16C64, PIC16C65, PIC16C73 and PIC16C74
modular detachable socket assembly to support various      microcontrollers. All the necessary hardware and soft-
package types. In stand-alone mode, the PRO MATE II        ware is included to run the basic demonstration pro-
device programmer can read, verify, or program             grams. The user can program the sample
PICmicro devices. It can also set code protection in this  microcontrollers provided with the PICDEM 2 demon-
mode.                                                      stration board on a PRO MATE II device programmer,
                                                           or a PICSTART Plus development programmer, and
15.10 PICSTART Plus Entry Level                            easily test firmware. The MPLAB ICE in-circuit emula-
         Development Programmer                            tor may also be used with the PICDEM 2 demonstration
                                                           board to test firmware. A prototype area has been pro-
The PICSTART Plus development programmer is an             vided to the user for adding additional hardware and
easy-to-use, low cost, prototype programmer. It con-       connecting it to the microcontroller socket(s). Some of
nects to the PC via a COM (RS-232) port. MPLAB             the features include a RS-232 interface, push button
Integrated Development Environment software makes          switches, a potentiometer for simulated analog input, a
using the programmer simple and efficient.                 serial EEPROM to demonstrate usage of the I2CTM bus
                                                           and separate headers for connection to an LCD
The PICSTART Plus development programmer sup-              module and a keypad.
ports all PICmicro devices with up to 40 pins. Larger pin
count devices, such as the PIC16C92X and
PIC17C76X, may be supported with an adapter socket.
The PICSTART Plus development programmer is CE
compliant.

2000 Microchip Technology Inc.                            DS30605C-page 109
PIC16C63A/65B/73B/74B

15.13 PICDEM 3 Low Cost PIC16CXXX                        15.14 PICDEM 17 Demonstration Board
         Demonstration Board
                                                         The PICDEM 17 demonstration board is an evaluation
The PICDEM 3 demonstration board is a simple dem-        board that demonstrates the capabilities of several
onstration board that supports the PIC16C923 and         Microchip microcontrollers, including PIC17C752,
PIC16C924 in the PLCC package. It will also support      PIC17C756A, PIC17C762 and PIC17C766. All neces-
future 44-pin PLCC microcontrollers with an LCD Mod-     sary hardware is included to run basic demo programs,
ule. All the necessary hardware and software is          which are supplied on a 3.5-inch disk. A programmed
included to run the basic demonstration programs. The    sample is included and the user may erase it and
user can program the sample microcontrollers pro-        program it with the other sample programs using the
vided with the PICDEM 3 demonstration board on a         PRO MATE II device programmer, or the PICSTART
PRO MATE II device programmer, or a PICSTART Plus        Plus development programmer, and easily debug and
development programmer with an adapter socket, and       test the sample code. In addition, the PICDEM 17 dem-
easily test firmware. The MPLAB ICE in-circuit emula-    onstration board supports downloading of programs to
tor may also be used with the PICDEM 3 demonstration     and executing out of external FLASH memory on board.
board to test firmware. A prototype area has been pro-   The PICDEM 17 demonstration board is also usable
vided to the user for adding hardware and connecting it  with the MPLAB ICE in-circuit emulator, or the
to the microcontroller socket(s). Some of the features   PICMASTER emulator and all of the sample programs
include a RS-232 interface, push button switches, a      can be run and modified using either emulator. Addition-
potentiometer for simulated analog input, a thermistor   ally, a generous prototype area is available for user
and separate headers for connection to an external       hardware.
LCD module and a keypad. Also provided on the
PICDEM 3 demonstration board is a LCD panel, with 4      15.15 KEELOQ Evaluation and
commons and 12 segments, that is capable of display-              Programming Tools
ing time, temperature and day of the week. The
PICDEM 3 demonstration board provides an additional      KEELOQ evaluation and programming tools support
RS-232 interface and Windows software for showing        Microchip's HCS Secure Data Products. The HCS eval-
the demultiplexed LCD signals on a PC. A simple serial   uation kit includes a LCD display to show changing
interface allows the user to construct a hardware        codes, a decoder to decode transmissions and a pro-
demultiplexer for the LCD signals.                       gramming interface to program test transmitters.

DS30605C-page 110                                         2000 Microchip Technology Inc.
2000 Microchip Technology Inc.                                                                                  PIC12CXXX                                                                                                                                                                                                                         TABLE 15-1: DEVELOPMENT TOOLS FROM MICROCHIP
                                                                                                                             PIC14000
                                                                                                                                          PIC16C5X                                                                                                                                                                                          
                                                                                                                                                      PIC16C6X

                                                                                                                                                                   PIC16CXXX
                                                                                                                                                                               PIC16F62X
                                                                                                                                                                                            PIC16C7X
                                                                                                                                                                                                        PIC16C7XX
                                                                                                                                                                                                                     PIC16C8X
                                                                                                                                                                                                                                 PIC16F8XX
                                                                                                                                                                                                                                              PIC16C9XX
                                                                                                                                                                                                                                                          PIC17C4X
                                                                                                                                                                                                                                                                       PIC17C7XX
                                                                                                                                                                                                                                                                                    PIC18CXX2

                                                                                                                                                                                                                                                                                             24CXX/
                                                                                                                                                                                                                                                                                                 25CXX/
                                                                                                                                                                                                                                                                                                    93CXX
                                                                                                                                                                                                                                                                                                             HCSXXX
                                                                                                                                                                                                                                                                                                                         MCRFXXX
                                                                                                                                                                                                                                                                                                                                      MCP2510

                                 Programmers Debugger Emulators Software Tools  MPLAB Integrated                                                                                
                                                                                Development Environment

                                                                                MPLAB C17 C Compiler

                                                                                MPLAB C18 C Compiler

                                                                                MPASMTM Assembler/                                                                            
                                                                                MPLINKTM Object Linker

                                                                                MPLAB ICE In-Circuit Emulator                                 **

                                                                                ICEPICTM In-Circuit Emulator

                                                                                MPLAB ICD In-Circuit                            *                  *
                                                                                Debugger                                                                        

                                                                                PICSTART Plus Entry Level                              **
                                                                                Development Programmer                                                                                
                                                                                                                                       
                                                                                PRO MATE II                                                    **                                                                                                                                                                                                                                             PIC16C63A/65B/73B/74B
                                                                                Universal Device Programmer