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

产品描述

搜索
 

PIC17C42AT-33/P

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

器件描述

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

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

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

文档预览

PIC17C42AT-33/P器件文档内容

                       PIC17C4X

High-Performance 8-Bit CMOS EPROM/ROM Microcontroller

Devices included in this data sheet:                      Pin Diagram

PIC17CR42                                               PDIP, CERDIP, Windowed CERDIP
PIC17C42A
PIC17C43                                                VDD                        1             40  RD0/AD8
PIC17CR43                                                                                            RD1/AD9
PIC17C44                                                RC0/AD0                    2             39  RD2/AD10
PIC17C42                                                                                             RD3/AD11
                                                          RC1/AD1                    3             38  RD4/AD12
Microcontroller Core Features:                                                                         RD5/AD13
                                                          RC2/AD2                    4             37  RD6/AD14
                                                                                                       RD7/AD15
                                                          RC3/AD3                    5             36  MCLR/VPP
                                                                                                       VSS
                                                          RC4/AD4                    6             35  RE0/ALE
                                                                                                       RE1/OE
                                                          RC5/AD5                    7   PIC17C4X  34  RE2/WR
                                                                                                       TEST
                                                          RC6/AD6                    8             33  RA0/INT
                                                                                                       RA1/T0CKI
                                                          RC7/AD7                    9             32  RA2
                                                                                                       RA3
                                                          VSS                        10            31  RA4/RX/DT
                                                                                                       RA5/TX/CK
                                                          RB0/CAP1                   11            30

      Only 58 single word instructions to learn          RB1/CAP2                   12            29

      All single cycle instructions (121 ns) except for  RB2/PWM1                   13            28
        program branches and table reads/writes which
        are two-cycle                                     RB3/PWM2                   14            27

      Operating speed:                                   RB4/TCLK12                 15            26

B - DC - 33 MHz clock input                               RB5/TCLK3                  16            25

        - DC - 121 ns instruction cycle                   RB6                        17            24

                                                          RB7                        18            23

                                                          OSC1/CLKIN                 19            22

                                                          OSC2/CLKOUT                20            21

Device     Program Memory                                  TMR2: 8-bit timer/counter
                                        Data Memory       TMR3: 16-bit timer/counter
                                                          Universal Synchronous Asynchronous Receiver
           EPROM ROM
                                                             Transmitter (USART/SCI)
PIC17CR42               -  2K         232
                                                          Special Microcontroller Features:
PIC17C42A  2K              -          232
                                                          Power-on Reset (POR), Power-up Timer (PWRT)
PIC17C43   4K              -          454                    and Oscillator Start-up Timer (OST)

PIC17CR43               -  4K         454                  Watchdog Timer (WDT) with its own on-chip RC
                                                             oscillator for reliable operation
PIC17C44   8K              -          454
                                                          Code-protection
PIC17C42   2K              -          232                  Power saving SLEEP mode
                                                          Selectable oscillator options
B Hardware Multiplier
                                                          CMOS Technology:
(Not available on the PIC17C42)
                                                          Low-power, high-speed CMOS EPROM/ROM
Interrupt capability                                       technology

16 levels deep hardware stack                            Fully static design
                                                          Wide operating voltage range (2.5V to 6.0V)
Direct, indirect and relative addressing modes          Commercial and Industrial Temperature Range
                                                          Low-power consumption
Internal/External program memory execution
                                                             - < 5 mA @ 5V, 4 MHz
64K x 16 addressable program memory space                  - 100 A typical @ 4.5V, 32 kHz
                                                             - < 1 A typical standby current @ 5V
Peripheral Features:

33 I/O pins with individual direction control
High current sink/source for direct LED drive

   - RA2 and RA3 are open drain, high voltage
      (12V), high current (60 mA), I/O

Two capture inputs and two PWM outputs
   - Captures are 16-bit, max resolution 160 ns
   - PWM resolution is 1- to 10-bit

TMR0: 16-bit timer/counter with 8-bit programma-
   ble prescaler

TMR1: 8-bit timer/counter

NOT recommended for new designs, use 17C42A.

1996 Microchip Technology Inc.                                                                       DS30412C-page 1

                                    This document was created with FrameMaker 4 0 4
PIC17C4X             RC3/AD3  RC2/AD2  RC1/AD1  RC0/AD0                RD0/AD8  RD1/AD9  RD2/AD10  RD3/AD11                MQFP                                        RA4/RX/DT  RA5/TX/CK  OSC2/CLKOUT  OSC1/CLKIN            RB5/TCLK3
                                                                                                                           TQFP
Pin Diagrams Cont.'d

  PLCC

                                                         NC  VDD  VDD                                                                    RA0/INT  RA1/T0CKI

                                                                                                                                                             RA2  RA3                                                 RB7  RB6

                     6        5        4        3        2   1    44   43       42       41        40

RC4/AD4          7                                                                                           39  RD4/AD12

RC5/AD5          8                                                                                           38  RD5/AD13

RC6/AD6          9                                      28                                                   37  RD6/AD14                44       43         42   41   40         39         38           37          36   35   34
                                                     27
RC7/AD7          10                              26                                                          36  RD7/AD15  TEST      1                                                                                                     33  RB4/TCLK12
                                              25
VSS              11                       24                                                                 35  MCLR/VPP  RE2/WR    2                                 PIC17C4X                                                            32  RB3/PWM2

VSS              12          PIC17C4X 23                                                                     34  VSS       RE1/OE    3                                                                                                     31  RB2/PWM1
                                   22
RB0/CAP1         13            21                                                                            33  VSS       RE0/ALE   4                                                                                                     30  RB1/CAP2
                            20
RB1/CAP2         14     19                                                                                   32  RE0/ALE   VSS       5                                                                                                     29  RB0/CAP1
                     18
RB2/PWM1         15                                                                                          31  RE1/OE    VSS       6                                                                                                     28  VSS

RB3/PWM2         16                                                                                          30  RE2/WR    MCLR/VPP  7                                                                                                     27  VSS

RB4/TCLK12       17                                                                                          29  TEST      RD7/AD15  8                                                                                                     26  RC7/AD7

                                                                                                                           RD6/AD14  9                                                                                                     25  RC6/AD6

                                                                                                                           RD5/AD13  10                                                                                                    24  RC5/AD5

                                                                                                                           RD4/AD12  11                                                                                                    23  RC4/AD4

                                                                                                                                         12       13         14   15   16            18                   19          20   21   22
                                                                                                                                                                                  17

                                                        RA0/INT                                                                                                          RC3/AD3
                                                     RA1/T0CKI                                                                                                        RC2/AD2
                                                 RA2                                                                                                               RC1/AD1
                                              RA3                                                                                                              RC0/AD0
                                          RA4/RX/DT                                                                                                         NC
                                      RA5/TX/CK                                                                                                          VDD
                                   OSC2/CLKOUT                                                                                                       VDD
                               OSC1/CLKIN                                                                                                         RD0/AD8
                            RB7                                                                                                                RD1/AD9
                        RB6                                                                                                                 RD2/AD10
                     RB5/TCLK3                                                                                                           RD3/AD11

All devices are available in all package types, listed in Section 21.0, with the following exceptions:
ROM devices are not available in Windowed CERDIP Packages
TQFP is not available for the PIC17C42.

DS30412C-page 2                                                                                                                                                    1996 Microchip Technology Inc.
                                                  PIC17C4X

Table of Contents

1.0 Overview .............................................................................................................................................................. 5
2.0 PIC17C4X Device Varieties ................................................................................................................................. 7
3.0 Architectural Overview ......................................................................................................................................... 9
4.0 Reset .................................................................................................................................................................. 15
5.0 Interrupts ............................................................................................................................................................ 21
6.0 Memory Organization ......................................................................................................................................... 29
7.0 Table Reads and Table Writes........................................................................................................................... 43
8.0 Hardware Multiplier ............................................................................................................................................ 49
9.0 I/O Ports ............................................................................................................................................................. 53
10.0 Overview of Timer Resources ............................................................................................................................ 65
11.0 Timer0 ................................................................................................................................................................ 67
12.0 Timer1, Timer2, Timer3, PWMs and Captures................................................................................................... 71
13.0 Universal Synchronous Asynchronous Receiver Transmitter (USART) Module................................................ 83
14.0 Special Features of the CPU.............................................................................................................................. 99
15.0 Instruction Set Summary .................................................................................................................................. 107
16.0 Development Support....................................................................................................................................... 143
17.0 PIC17C42 Electrical Characteristics ................................................................................................................ 147
18.0 PIC17C42 DC and AC Characteristics............................................................................................................. 163
19.0 PIC17CR42/42A/43/R43/44 Electrical Characteristics..................................................................................... 175
20.0 PIC17CR42/42A/43/R43/44 DC and AC Characteristics ................................................................................. 193
21.0 Packaging Information...................................................................................................................................... 205
Appendix A: Modifications .......................................................................................................................................... 211
Appendix B: Compatibility........................................................................................................................................... 211
Appendix C: What's New ............................................................................................................................................ 212
Appendix D: What's Changed..................................................................................................................................... 212
Appendix E: PIC16/17 Microcontrollers ...................................................................................................................... 213
Appendix F: Errata for PIC17C42 Silicon ................................................................................................................... 223
Index ............................................................................................................................................................................ 226
PIC17C4X Product Identification System .................................................................................................................... 237

For register and module descriptions in this data sheet, device legends show which devices apply to those sections.
For example, the legend below shows that some features of only the PIC17C43, PIC17CR43, PIC17C44 are described
in this section.

Applicable Devices
42 R42 42A 43 R43 44

                                       To Our Valued Customers

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

     To assist you in the use of this document, Appendix C contains a list of new information in this data sheet,
     while Appendix D contains information that has changed

1996 Microchip Technology Inc.  DS30412C-page 3
PIC17C4X

NOTES:

DS30412C-page 4   1996 Microchip Technology Inc.
1.0 OVERVIEW                                                               PIC17C4X

This data sheet covers the PIC17C4X group of the            power saving. The user can wake-up the chip from
PIC17CXX family of microcontrollers. The following          SLEEP through several external and internal interrupts
devices are discussed in this data sheet:                   and device resets.

PIC17C42                                                  There are four configuration options for the device oper-
                                                            ational modes:
PIC17CR42
                                                             Microprocessor
PIC17C42A                                                 Microcontroller
                                                             Extended microcontroller
PIC17C43                                                   Protected microcontroller

PIC17CR43                                                 The microprocessor and extended microcontroller
                                                            modes allow up to 64K-words of external program
PIC17C44                                                  memory.

The PIC17CR42, PIC17C42A, PIC17C43,                         A highly reliable Watchdog Timer with its own on-chip
PIC17CR43, and PIC17C44 devices include architec-           RC oscillator provides protection against software mal-
tural enhancements over the PIC17C42. These                 function.
enhancements will be discussed throughout this data
sheet.                                                      Table 1-1 lists the features of the PIC17C4X devices.

The PIC17C4X devices are 40/44-Pin,                         A UV-erasable CERDIP-packaged version is ideal for
EPROM/ROM-based members of the versatile                    code development while the cost-effective One-Time
PIC17CXX family of low-cost, high-performance,              Programmable (OTP) version is suitable for production
CMOS, fully-static, 8-bit microcontrollers.                 in any volume.

All PIC16/17 microcontrollers employ an advanced            The PIC17C4X fits perfectly in applications ranging
RISC architecture. The PIC17CXX has enhanced core           from precise motor control and industrial process con-
features, 16-level deep stack, and multiple internal and    trol to automotive, instrumentation, and telecom appli-
external interrupt sources. The separate instruction and    cations. Other applications that require extremely fast
data buses of the Harvard architecture allow a 16-bit       execution of complex software programs or the flexibil-
wide instruction word with a separate 8-bit wide data.      ity of programming the software code as one of the last
The two stage instruction pipeline allows all instructions  steps of the manufacturing process would also be well
to execute in a single cycle, except for program            suited. The EPROM technology makes customization
branches (which require two cycles). A total of 55          of application programs (with unique security codes,
instructions (reduced instruction set) are available in     combinations, model numbers, parameter storage,
the PIC17C42 and 58 instructions in all the other           etc.) fast and convenient. Small footprint package
devices. Additionally, a large register set gives some of   options make the PIC17C4X ideal for applications with
the architectural innovations used to achieve a very        space limitations that require high performance. High
high performance. For mathematical intensive applica-       speed execution, powerful peripheral features, flexible
tions all devices, except the PIC17C42, have a single       I/O, and low power consumption all at low cost make
cycle 8 x 8 Hardware Multiplier.                            the PIC17C4X ideal for a wide range of embedded con-
                                                            trol applications.
PIC17CXX microcontrollers typically achieve a 2:1
code compression and a 4:1 speed improvement over           1.1 Family and Upward Compatibility
other 8-bit microcontrollers in their class.
                                                            Those users familiar with the PIC16C5X and
PIC17C4X devices have up to 454 bytes of RAM and            PIC16CXX families of microcontrollers will see the
33 I/O pins. In addition, the PIC17C4X adds several         architectural enhancements that have been imple-
peripheral features useful in many high performance         mented. These enhancements allow the device to be
applications including:                                     more efficient in software and hardware requirements.
                                                            Please refer to Appendix A for a detailed list of
Four timer/counters                                       enhancements and modifications. Code written for
Two capture inputs                                        PIC16C5X or PIC16CXX can be easily ported to
Two PWM outputs                                           PIC17CXX family of devices (Appendix B).
A Universal Synchronous Asynchronous Receiver
                                                            1.2 Development Support
   Transmitter (USART)
                                                            The PIC17CXX family is supported by a full-featured
These special features reduce external components,          macro assembler, a software simulator, an in-circuit
thus reducing cost, enhancing system reliability and        emulator, a universal programmer, a "C" compiler, and
reducing power consumption. There are four oscillator       fuzzy logic support tools.
options, of which the single pin RC oscillator provides a
low-cost solution, the LF oscillator is for low frequency
crystals and minimizes power consumption, XT is a
standard crystal, and the EC is for external clock input.
The SLEEP (power-down) mode offers additional

1996 Microchip Technology Inc.                                                     DS30412C-page 5

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

TABLE 1-1: PIC17CXX FAMILY OF DEVICES

                Features            PIC17C42 PIC17CR42 PIC17C42A PIC17C43 PIC17CR43 PIC17C44

Maximum Frequency of Operation         25 MHz        33 MHz        33 MHz        33 MHz        33 MHz        33 MHz
                                      4.5 - 5.5V    2.5 - 6.0V    2.5 - 6.0V    2.5 - 6.0V    2.5 - 6.0V    2.5 - 6.0V
Operating Voltage Range
                                           2K             -            2K            4K             -            8K
Program Memory x16 (EPROM)                  -            2K             -             -            4K             -
                                          232           232           232           454           454           454
                             (ROM)          -           Yes           Yes           Yes           Yes           Yes
                                          Yes           Yes           Yes           Yes           Yes           Yes
Data Memory (bytes)                       Yes           Yes           Yes           Yes           Yes           Yes
                                          Yes           Yes           Yes           Yes           Yes           Yes
Hardware Multiplier (8 x 8)               Yes           Yes           Yes           Yes           Yes           Yes
                                            2             2             2             2             2             2
Timer0 (16-bit + 8-bit postscaler)          2             2             2             2             2             2
                                          Yes           Yes           Yes           Yes           Yes           Yes
Timer1 (8-bit)                            Yes           Yes           Yes           Yes           Yes           Yes
                                          Yes           Yes           Yes           Yes           Yes           Yes
Timer2 (8-bit)                            Yes           Yes           Yes           Yes           Yes           Yes
                                           11            11            11            11            11            11
Timer3 (16-bit)                           Yes           Yes           Yes           Yes           Yes           Yes
                                           33            33            33            33            33            33
Capture inputs (16-bit)                 25 mA         25 mA         25 mA         25 mA         25 mA         25 mA
                                       25 mA(1)      25 mA(1)      25 mA(1)      25 mA(1)      25 mA(1)      25 mA(1)
PWM outputs (up to 10-bit)           40-pin DIP    40-pin DIP    40-pin DIP    40-pin DIP    40-pin DIP    40-pin DIP
                                    44-pin PLCC   44-pin PLCC   44-pin PLCC   44-pin PLCC   44-pin PLCC   44-pin PLCC
USART/SCI                           44-pin MQFP   44-pin MQFP   44-pin MQFP   44-pin MQFP   44-pin MQFP   44-pin MQFP
                                                  44-pin TQFP   44-pin TQFP   44-pin TQFP   44-pin TQFP   44-pin TQFP
Power-on Reset

Watchdog Timer

External Interrupts

Interrupt Sources

Program Memory Code Protect

I/O Pins

I/O High Current Capabil- Source

ity                          Sink

Package Types

Note 1: Pins RA2 and RA3 can sink up to 60 mA.

DS30412C-page 6                                                                1996 Microchip Technology Inc.
2.0 PIC17C4X DEVICE VARIETIES                                            PIC17C4X

A variety of frequency ranges and packaging options       2.3 Quick-Turnaround-Production (QTP)
are available. Depending on application and production              Devices
requirements, the proper device option can be selected
using the information in the PIC17C4X Product Selec-      Microchip offers a QTP Programming Service for fac-
tion System section at the end of this data sheet. When   tory production orders. This service is made available
placing orders, please use the "PIC17C4X Product          for users who choose not to program a medium to high
Identification System" at the back of this data sheet to  quantity of units and whose code patterns have stabi-
specify the correct part number.                          lized. The devices are identical to the OTP devices but
                                                          with all EPROM locations and configuration options
For the PIC17C4X family of devices, there are four        already programmed by the factory. Certain code and
device "types" as indicated in the device number:         prototype verification procedures apply before produc-
                                                          tion shipments are available. Please contact your local
1. C, as in PIC17C42. These devices have                  Microchip Technology sales office for more details.
      EPROM type memory and operate over the
      standard voltage range.                             2.4 Serialized Quick-Turnaround
                                                                    Production (SQTPSM) Devices
2. LC, as in PIC17LC42. These devices have
      EPROM type memory, operate over an                  Microchip offers a unique programming service where
      extended voltage range, and reduced frequency       a few user-defined locations in each device are pro-
      range.                                              grammed with different serial numbers. The serial num-
                                                          bers may be random, pseudo-random or sequential.
3. CR, as in PIC17CR42. These devices have
      ROM type memory and operate over the stan-          Serial programming allows each device to have a
      dard voltage range.                                 unique number which can serve as an entry-code,
                                                          password or ID number.
4. LCR, as in PIC17LCR42. These devices have
      ROM type memory, operate over an extended           ROM devices do not allow serialization information in
      voltage range, and reduced frequency range.         the program memory space.

2.1 UV Erasable Devices                                   For information on submitting ROM code, please con-
                                                          tact your regional sales office.
The UV erasable version, offered in CERDIP package,
is optimal for prototype development and pilot pro-       2.5 Read Only Memory (ROM) Devices
grams.
                                                          Microchip offers masked ROM versions of several of
The UV erasable version can be erased and repro-          the highest volume parts, thus giving customers a low
grammed to any of the configuration modes.                cost option for high volume, mature products.
Microchip's PRO MATETM programmer supports pro-
gramming of the PIC17C4X. Third party programmers         For information on submitting ROM code, please con-
also are available; refer to the Third Party Guide for a  tact your regional sales office.
list of sources.

2.2 One-Time-Programmable (OTP)
          Devices

The availability of OTP devices is especially useful for
customers expecting frequent code changes and
updates.

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.

1996 Microchip Technology Inc.                                                     DS30412C-page 7

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

NOTES:

DS30412C-page 8   1996 Microchip Technology Inc.
                                                                                     PIC17C4X

3.0 ARCHITECTURAL OVERVIEW                                  The PIC17CXX devices contain an 8-bit ALU and work-
                                                            ing register. The ALU is a general purpose arithmetic
The high performance of the PIC17C4X can be attrib-         unit. It performs arithmetic and Boolean functions
uted to a number of architectural features commonly         between data in the working register and any register
found in RISC microprocessors. To begin with, the           file.
PIC17C4X uses a modified Harvard architecture. This
architecture has the program and data accessed from         The ALU is 8-bits wide and capable of addition, sub-
separate memories. So the device has a program              traction, shift, and logical operations. Unless otherwise
memory bus and a data memory bus. This improves             mentioned, arithmetic operations are two's comple-
bandwidth over traditional von Neumann architecture,        ment in nature.
where program and data are fetched from the same
memory (accesses over the same bus). Separating             The WREG register is an 8-bit working register used for
program and data memory further allows instructions to      ALU operations.
be sized differently than the 8-bit wide data word.
PIC17C4X opcodes are 16-bits wide, enabling single          All PIC17C4X devices (except the PIC17C42) have an
word instructions. The full 16-bit wide program memory      8 x 8 hardware multiplier. This multiplier generates a
bus fetches a 16-bit instruction in a single cycle. A two-  16-bit result in a single cycle.
stage pipeline overlaps fetch and execution of instruc-
tions. Consequently, all instructions execute in a single   Depending on the instruction executed, the ALU may
cycle (121 ns @ 33 MHz), except for program branches        affect the values of the Carry (C), Digit Carry (DC), and
and two special instructions that transfer data between     Zero (Z) bits in the STATUS register. The C and DC bits
program and data memory.                                    operate as a borrow and digit borrow out bit, respec-
                                                            tively, in subtraction. See the SUBLW and SUBWF
The PIC17C4X can address up to 64K x 16 of program          instructions for examples.
memory space.
                                                            Although the ALU does not perform signed arithmetic,
The PIC17C42 and PIC17C42A integrate 2K x 16 of             the Overflow bit (OV) can be used to implement signed
EPROM program memory on-chip, while the                     math. Signed arithmetic is comprised of a magnitude
PIC17CR42 has 2K x 16 of ROM program memory on-             and a sign bit. The overflow bit indicates if the magni-
chip.                                                       tude overflows and causes the sign bit to change state.
                                                            Signed math can have greater than 7-bit values (mag-
The PIC17C43 integrates 4K x 16 of EPROM program            nitude), if more than one byte is used. The use of the
memory, while the PIC17CR43 has 4K x 16 of ROM              overflow bit only operates on bit6 (MSb of magnitude)
program memory.                                             and bit7 (sign bit) of the value in the ALU. That is, the
                                                            overflow bit is not useful if trying to implement signed
The PIC17C44 integrates 8K x 16 EPROM program               math where the magnitude, for example, is 11-bits. If
memory.                                                     the signed math values are greater than 7-bits (15-, 24-
                                                            or 31-bit), the algorithm must ensure that the low order
Program execution can be internal only (microcontrol-       bytes ignore the overflow status bit.
ler or protected microcontroller mode), external only
(microprocessor mode) or both (extended microcon-           Care should be taken when adding and subtracting
troller mode). Extended microcontroller mode does not       signed numbers to ensure that the correct operation is
allow code protection.                                      executed. Example 3-1 shows an item that must be
                                                            taken into account when doing signed arithmetic on an
The PIC17CXX can directly or indirectly address its         ALU which operates as an unsigned machine.
register files or data memory. All special function regis-
ters, including the Program Counter (PC) and Working        EXAMPLE 3-1: SIGNED MATH
Register (WREG), are mapped in the data memory.
The PIC17CXX has an orthogonal (symmetrical)                Hex Value  Signed Value  Unsigned Value
instruction set that makes it possible to carry out any                Math          Math
operation on any register using any addressing mode.           FFh
This symmetrical nature and lack of `special optimal sit-   + 01h         -127          255
uations' make programming with the PIC17CXX simple          =?         +1            +1
yet efficient. In addition, the learning curve is reduced              = -126 (FEh)  = 0 (00h);
significantly.                                                                       Carry bit = 1

One of the PIC17CXX family architectural enhance-           Signed math requires the result in REG to
ments from the PIC16CXX family allows two file regis-       be FEh (-126). This would be accomplished
ters to be used in some two operand instructions. This      by subtracting one as opposed to adding
allows data to be moved directly between two registers      one.
without going through the WREG register. This
increases performance and decreases program mem-            Simplified block diagrams are shown in Figure 3-1 and
ory usage.                                                  Figure 3-2. The descriptions of the device pins are
                                                            listed in Table 3-1.

1996 Microchip Technology Inc.                                                     DS30412C-page 9

                                    This document was created with FrameMaker 4 0 4
DS30412C-page 10                                       IR BUS <16>                                                                                                      IR BUS <16>                                                                        PIC17C4X

                                                                                                                         8 IR BUS <7:0>                                                                                                                FIGURE 3-1: PIC17C42 BLOCK DIAGRAM

                                                                                                                 RAM ADDR BUFFER                                                      IR LATCH <16>

                                                       BITOP           WREG <8>                 READ/WRITE              DATA RAM                               INSTRUCTION             8              8
                                                                                                   DECODE                   232x8                                DECODER

                                                                                              FOR REGISTERS                                         LITERAL
                                                                                                   MAPPED
                                                                                                    IN DATA
                                                                                                     SPACE

                                                                                                                                                               CONTROL OUTPUTS                                        FSR0
                                                                                                                                                                                                                      FSR1
                                                                                                                                                                                                                                         DECODE
                                                                                                                                                                                                                          8
                                                          ALU                                 RDF           WRF
                                                       SHIFTER
                                                                                                                 DATA LATCH                                    TABLE LATCH <16>       ROM LATCH <16>

                                                                                              DATA BUS <8>

                                                                                                                         BSR

                                                                                                                                       4  3                                                         DATA LATCH

                                         PORTB      8           6                                                IR <7>                   IR <2:0>                                                  PROGRAM                                AD <15:0>
                                                                                                                                                                                                     MEMORY                               PORTC and
                                  RB0/CAP1                             Timer1, Timer2, Timer3                                                       PCLATH<8>                                     (EPROM/ROM)                SYSTEM       PORTD
                                  RB1/CAP2                                     CAPTURE                                                                                                                 2K x 16
                                  RB2/PWM1                                        PWM                                    DATA BUS <8>                                   TABLE PTR<16>                                           BUS      ALE, WR, OE
                                  RB2/PWM2                                                                                                                              16                       ADDRESS LATCH                INTER-         PORTE
                                  RB4/TCLK12                                                                                                                                                                                   FACE
                                  RB5/TCLK3                                                                                                                                                                                              OSC1, OSC2
                                  RB6                           8                                                                                   PCH        PCL                                                                          VDD, VSS
                                  RB7                                                                                                                                                                                                      MCLR/VPP
                                                                                 DIGITAL I/O                                                                        STACK                                         11
                                          PORTA                                 PORTS A, B                                                                          16 x 16                      16
                                                                6
                                   RA0/INT                                                                                                                                        16
                                   RA1/T0CKI     6              2
                                   RA2
                                   RA3                                 SERIAL PORT                                                                                               Q1, Q2, Q3, Q4
                                   RA4/RX/DT
1996 Microchip Technology Inc.   RA5/TX/CK                                                                                                        INTERRUPT  CONTROL                                                CLOCK GENERATOR
                                                                                                                                                      MODULE   SIGNALS                                                 POWER ON RESET
                                                                                                                                                                TO CPU                                                 WATCHDOG TIMER
                                                                RA1/   Timer0 MODULE                                                                                                  CHIP_RESET                      OSC STARTUP TIMER
                                                                T0CKI                                                                                                                 AND OTHER                       TEST MODE SELECT
                                                                                                                                                                                        CONTROL

                                                                                                                                                                                        SIGNALS

                                                                       PERIPHERALS                                                                                                                                                               TEST
                                                                             RA1/T0CKI
                                                                             RA0/INT
1996 Microchip Technology Inc.                                     IR BUS <16>                                                                                       IR BUS <16>                                                                       FIGURE 3-2: PIC17CR42/42A/43/R43/44 BLOCK DIAGRAM
                                                                   WREG <8>
                                                                                                                          12 BSR<7:4>                                                IR LATCH <16>
                                                                                 8 x 8 mult                                      IR BUS<7:0>
                                                      BITOP               PRODH PRODL          READ/WRITE                                                     INSTRUCTION             8              8
                                                                                                  DECODE        RAM ADDR BUFFER                                 DECODER
                                                       ALU
                                                                                             FOR REGISTERS            DATA RAM                     LITERAL
                                                    SHIFTER                                       MAPPED
                                                                                                   IN DATA      232 x 8 PIC17CR42
                                         PORTB                                                      SPACE       232 x 8 PIC17C42A
                                                                8                                               454 x 8 PIC17C43
                                                                                                                454 x 8 PIC17CR43                             CONTROL OUTPUTS                                        FSR0
                                  RB0/CAP1                                                                      454 x 8 PIC17C44                                                                                     FSR1
                                  RB1/CAP2                                                                                                                                                                                              DECODE
                                  RB2/PWM1                                                                            DATA LATCH                                                                                         8
                                  RB2/PWM2                                                   RDF           WRF
                                  RB4/TCLK12
                                  RB5/TCLK3                                                                                                                   TABLE LATCH <16>       ROM LATCH <16>
                                  RB6
                                  RB7                                                        DATA BUS <8>

                                          PORTA                                                                         BSR
                                                              6
                                                                                                                                      4  3                                                           DATA LATCH
                                   RA0/INT
                                   RA1/T0CKI                       6                                            IR <7>                   IR <2:0>                                                     PROGRAM                             AD <15:0>
                                   RA2                                        Timer1, Timer2, Timer3                                                                                                   MEMORY                            PORTC and
                                   RA3                                                CAPTURE                                                      PCLATH<8>                                       (EPROM/ROM)              SYSTEM       PORTD
                                   RA4/RX/DT                                              PWM
                                   RA5/TX/CK                                                                            DATA BUS <8>                                   TABLE PTR<16>            2K x 16 - PIC17CR42            BUS      ALE, WR, OE
                                                                   8                                                                                                   16                       2K x 16 - PIC17C42A          INTER-         PORTE
                                                                                                                                                                                                4K x 16 - PIC17C43            FACE
                                                                                    DIGITAL I/O                                                                                                 4K x 16 - PIC17CR43                        OSC1, OSC2
                                                                                    PORTS A, B                                                     PCH        PCL                               8K x 16 - PIC17C44                             VDD, VSS
                                                                    6                                                                                                                                                                        MCLR/VPP
                                                                                                                                                                                                  ADDRESS LATCH
                                                                    2
                                                                                                                                                                   STACK                                         13
                                                                                    SERIAL PORT                                                                    16 x 16                      16

                                                                                                                                                                                 16

                                                                                                                                                                                Q1, Q2, Q3, Q4

                                                                                                                                                   INTERRUPT  CONTROL                                                CLOCK GENERATOR                                                                        PIC17C4X
                                                                                                                                                     MODULE   SIGNALS                                                 POWER ON RESET
                                                                                                                                                               TO CPU                                                 WATCHDOG TIMER
                                                                   RA1/   Timer0 MODULE                                                                                              CHIP_RESET                      OSC STARTUP TIMER
                                                                   T0CKI                                                                                                             AND OTHER                       TEST MODE SELECT
                                                                                                                                                                                       CONTROL

                                                                                                                                                                                       SIGNALS

DS30412C-page 11                                                          PERIPHERALS                                                                                                                                                           TEST
                                                                                RA1/T0CKI
                                                                                RA0/INT
PIC17C4X

TABLE 3-1: PINOUT DESCRIPTIONS

     Name         DIP  PLCC  QFP  I/O/P  Buffer  Description
                  No.   No.  No.  Type   Type

OSC1/CLKIN        19 21 37        I      ST Oscillator input in crystal/resonator or RC oscillator mode.

                                                 External clock input in external clock mode.

OSC2/CLKOUT 20 22 38 O -- Oscillator output. Connects to crystal or resonator in crystal
                                                                          oscillator mode. In RC oscillator or external clock modes
                                                                          OSC2 pin outputs CLKOUT which has one fourth the fre-
                                                                          quency of OSC1 and denotes the instruction cycle rate.

MCLR/VPP          32 35      7 I/P ST Master clear (reset) input/Programming Voltage (VPP) input.
                                                        This is the active low reset input to the chip.

                                                 PORTA is a bi-directional I/O Port except for RA0 and RA1
                                                 which are input only.

RA0/INT           26 28 44 I ST                  RA0/INT can also be selected as an external interrupt
                                                 input. Interrupt can be configured to be on positive or
                                                 negative edge.

RA1/T0CKI         25 27 43        I      ST      RA1/T0CKI can also be selected as an external interrupt
                                                 input, and the interrupt can be configured to be on posi-
                                                 tive or negative edge. RA1/T0CKI can also be selected
                                                 to be the clock input to the Timer0 timer/counter.

RA2               24 26 42 I/O ST                High voltage, high current, open drain input/output port

                                                 pins.

RA3               23 25 41 I/O ST                High voltage, high current, open drain input/output port

                                                 pins.

RA4/RX/DT         22 24 40 I/O ST                RA4/RX/DT can also be selected as the USART (SCI)
                                                 Asynchronous Receive or USART (SCI) Synchronous
                                                 Data.

RA5/TX/CK         21 23 39 I/O ST                RA5/TX/CK can also be selected as the USART (SCI)
                                                 Asynchronous Transmit or USART (SCI) Synchronous
                                                 Clock.

                                                 PORTB is a bi-directional I/O Port with software configurable
                                                 weak pull-ups.

RB0/CAP1          11 13 29 I/O ST                RB0/CAP1 can also be the CAP1 input pin.

RB1/CAP2          12 14 30 I/O ST                RB1/CAP2 can also be the CAP2 input pin.

RB2/PWM1          13 15 31 I/O ST                RB2/PWM1 can also be the PWM1 output pin.

RB3/PWM2          14 16 32 I/O ST                RB3/PWM2 can also be the PWM2 output pin.

RB4/TCLK12        15 17 33 I/O ST                RB4/TCLK12 can also be the external clock input to
                                                 Timer1 and Timer2.

RB5/TCLK3         16 18 34 I/O ST                RB5/TCLK3 can also be the external clock input to
                                                 Timer3.

RB6               17 19 35 I/O ST

RB7               18 20 36 I/O ST

                                                 PORTC is a bi-directional I/O Port.

RC0/AD0           2    3     19 I/O TTL          This is also the lower half of the 16-bit wide system bus
RC1/AD1                                          in microprocessor mode or extended microcontroller
RC2/AD2           3    4     20 I/O TTL          mode. In multiplexed system bus configuration, these
RC3/AD3                                          pins are address output as well as data input or output.
                  4    5     21 I/O TTL

                  5    6     22 I/O TTL

RC4/AD4           6    7     23 I/O TTL

RC5/AD5           7    8     24 I/O TTL

RC6/AD6           8    9     25 I/O TTL

RC7/AD7           9 10 26 I/O TTL

Legend: I = Input only; O = Output only; I/O = Input/Output; P = Power; -- = Not Used; TTL = TTL input;
            ST = Schmitt Trigger input.

DS30412C-page 12                                              1996 Microchip Technology Inc.
                                                                                           PIC17C4X

TABLE 3-1: PINOUT DESCRIPTIONS

     Name  DIP  PLCC              QFP  I/O/P  Buffer  Description
           No.   No.              No.  Type   Type

                                                      PORTD is a bi-directional I/O Port.

RD0/AD8    40 43 15 I/O TTL                           This is also the upper byte of the 16-bit system bus in
RD1/AD9    39 42 14 I/O TTL                           microprocessor mode or extended microprocessor mode
RD2/AD10   38 41 13 I/O TTL                           or extended microcontroller mode. In multiplexed system
RD3/AD11   37 40 12 I/O TTL                           bus configuration these pins are address output as well
RD4/AD12   36 39 11 I/O TTL                           as data input or output.

RD5/AD13   35 38 10 I/O TTL

RD6/AD14   34 37                  9 I/O TTL

RD7/AD15   33 36                  8 I/O TTL

                                                      PORTE is a bi-directional I/O Port.

RE0/ALE    30 32                  4 I/O TTL           In microprocessor mode or extended microcontroller
                                                      mode, it is the Address Latch Enable (ALE) output.
                                                      Address should be latched on the falling edge of ALE
                                                      output.

RE1/OE     29 31                  3 I/O TTL           In microprocessor or extended microcontroller mode, it is
                                                      the Output Enable (OE) control output (active low).

RE2/WR     28 30                  2 I/O TTL           In microprocessor or extended microcontroller mode, it is
                                                      the Write Enable (WR) control output (active low).

TEST       27 29                  1    I ST Test mode selection control input. Always tie to VSS for nor-
                                                        mal operation.

VSS        10, 11, 5, 6, P                            Ground reference for logic and I/O pins.

           31 12, 27, 28

                33, 34

VDD        1 1, 44 16, 17 P                           Positive supply for logic and I/O pins.

Legend: I = Input only; O = Output only; I/O = Input/Output; P = Power; -- = Not Used; TTL = TTL input;
            ST = Schmitt Trigger input.

1996 Microchip Technology Inc.                                                                DS30412C-page 13
PIC17C4X

3.1 Clocking Scheme/Instruction Cycle                      3.2 Instruction Flow/Pipelining

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

                                                           A fetch cycle begins with the program counter incre-
                                                           menting 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-3: 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
                                                                                                   phase
              Q3                                                                                   clock

              Q4

              PC  PC

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

EXAMPLE 3-2: INSTRUCTION PIPELINE FLOW

                  Tcy0                 Tcy1                   Tcy2    Tcy3       Tcy4              Tcy5

1. MOVLW 55h      Fetch 1 Execute 1                        Execute 2
                                                            Fetch 3
2. MOVWF PORTB                         Fetch 2

3. CALL SUB_1                                                         Execute 3
                                                                       Fetch 4
4. BSF PORTA, BIT3 (Forced NOP)                                                       Flush
                                                                                 Fetch SUB_1 Execute SUB_1
5. Instruction @ address SUB_1

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

DS30412C-page 14                                                                  1996 Microchip Technology Inc.
4.0 RESET                                                                      PIC17C4X

The PIC17CXX differentiates between various kinds of            4.1 Power-on Reset (POR), Power-up
reset:                                                                    Timer (PWRT), and Oscillator Start-up
                                                                          Timer (OST)
Power-on Reset (POR)
                                                                4.1.1 POWER-ON RESET (POR)
MCLR reset during normal operation
                                                                The Power-on Reset circuit holds the device in reset
WDT Reset (normal operation)                                  until VDD is above the trip point (in the range of 1.4V -
                                                                2.3V). The PIC17C42 does not produce an internal
Some registers are not affected in any reset condition;         reset when VDD declines. All other devices will produce
their status is unknown on POR and unchanged in any             an internal reset for both rising and falling VDD. To take
other reset. Most other registers are forced to a "reset        advantage of the POR, just tie the MCLR/VPP pin
state" on Power-on Reset (POR), on MCLR or WDT                  directly (or through a resistor) to VDD. This will eliminate
Reset and on MCLR reset during SLEEP. They are not              external RC components usually needed to create
affected by a WDT Reset during SLEEP, since this reset          Power-on Reset. A minimum rise time for VDD is
is viewed as the resumption of normal operation. The            required. See Electrical Specifications for details.
TO and PD bits are set or cleared differently in different
reset situations as indicated in Table 4-3. These bits are      4.1.2 POWER-UP TIMER (PWRT)
used in software to determine the nature of reset. See
Table 4-4 for a full description of reset states of all reg-    The Power-up Timer provides a fixed 96 ms time-out
isters.                                                         (nominal) on power-up. This occurs from rising edge of
                                                                the POR signal and after the first rising edge of MCLR
Note:  While the device is in a reset state, the                (detected high). The Power-up Timer operates on an
       internal phase clock is held in the Q1 state.            internal RC oscillator. The chip is kept in RESET as
       Any processor mode that allows external                  long as the PWRT is active. In most cases the PWRT
       execution will force the RE0/ALE pin as a                delay allows the VDD to rise to an acceptable level.
       low output and the RE1/OE and RE2/WR
       pins as high outputs.                                    The power-up time delay will vary from chip to chip and
                                                                to VDD and temperature. See DC parameters for
A simplified block diagram of the on-chip reset circuit is      details.
shown in Figure 4-1.

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

                               External
                                 Reset

MCLR

              WDT      WDT
             Module
                       Time_Out
                       Reset

             VDD rise

             detect Power_On_Reset                                                   S

VDD

       OST/PWRT

                 OST                                                                 R       Chip_Reset
                                                                                        Q

                       10-bit Ripple counter

OSC1             PWRT

        On-chip        10-bit Ripple counter
       RC OSC

This RC oscillator is shared with the WDT    Enable OST        Power_Up
   when not in a power-up sequence.                Enable PWRT  (Enable the PWRT timer
                                                                only during Power_Up)

                                                                (Power_Up + Wake_Up) (XT + LF)
                                                                (Enable the OST if it is Power_Up or Wake_Up
                                                                from SLEEP and OSC type is XT or LF)

1996 Microchip Technology Inc.                                                        DS30412C-page 15

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

4.1.3 OSCILLATOR START-UP TIMER (OST)                         TABLE 4-1: TIME-OUT IN VARIOUS
                                                                                   SITUATIONS
The Oscillator Start-up Timer (OST) provides a 1024
oscillator cycle (1024TOSC) delay after MCLR is                 Oscillator    Power-up      Wake up        MCLR
detected high or a wake-up from SLEEP event occurs.           Configuration                    from        Reset

The OST time-out is invoked only for XT and LF oscilla-               XT, LF  Greater of:    SLEEP           --
tor modes on a Power-on Reset or a Wake-up from                       EC, RC   96 ms or    1024TOSC
SLEEP.                                                                        1024TOSC                       --
                                                                                                --
The OST counts the oscillator pulses on the                                   Greater of:
OSC1/CLKIN pin. The counter only starts incrementing                           96 ms or
after the amplitude of the signal reaches the oscillator                      1024TOSC
input thresholds. This delay allows the crystal oscillator
or resonator to stabilize before the device exits reset.      The time-out sequence begins from the first rising edge
The length of time-out is a function of the crystal/reso-     of MCLR.
nator frequency.
                                                              Table 4-3 shows the reset conditions for some special
4.1.4 TIME-OUT SEQUENCE                                       registers, while Table 4-4 shows the initialization condi-
                                                              tions for all the registers. The shaded registers (in
On power-up the time-out sequence is as follows: First        Table 4-4) are for all devices except the PIC17C42. In
the internal POR signal goes high when the POR trip           the PIC17C42, the PRODH and PRODL registers are
point is reached. If MCLR is high, then both the OST          general purpose RAM.
and PWRT timers start. In general the PWRT time-out
is longer, except with low frequency crystals/resona-         TABLE 4-2: STATUS BITS AND THEIR
tors. The total time-out also varies based on oscillator                           SIGNIFICANCE
configuration. Table 4-1 shows the times that are asso-
ciated with the oscillator configuration. Figure 4-2 and      TO PD                        Event
Figure 4-3 display these time-out sequences.
                                                              1 1 Power-on Reset, MCLR Reset during normal
If the device voltage is not within electrical specification                operation, or CLRWDT instruction executed
at the end of a time-out, the MCLR/VPP pin must be
held low until the voltage is within the device specifica-    1 0 MCLR Reset during SLEEP or interrupt wake-up
tion. The use of an external RC delay is sufficient for                     from SLEEP
many of these applications.
                                                              0 1 WDT Reset during normal operation

                                                              0 0 WDT Reset during SLEEP

TABLE 4-3:                                                                    In Figure 4-2, Figure 4-3 and Figure 4-4, TPWRT >
                                                                              TOST, as would be the case in higher frequency crys-
                                                                              tals. For lower frequency crystals, (i.e., 32 kHz) TOST
                                                                              would be greater.

                  RESET CONDITION FOR THE PROGRAM COUNTER AND THE CPUSTA REGISTER

                  Event                                       PCH:PCL         CPUSTA              OST Active

Power-on Reset                                                0000h           --11 11--           Yes

MCLR Reset during normal operation                            0000h           --11 11--           No

MCLR Reset during SLEEP                                       0000h           --11 10--           Yes (2)

WDT Reset during normal operation                             0000h           --11 01--           No

WDT Reset during SLEEP (3)                                    0000h           --11 00--           Yes (2)

Interrupt wake-up from SLEEP GLINTD is set                    PC + 1          --11 10--           Yes (2)

                            GLINTD is clear                   PC + 1 (1)      --10 10--           Yes (2)

Legend: u = unchanged, x = unknown, - = unimplemented read as '0'.
Note 1: On wake-up, this instruction is executed. The instruction at the appropriate interrupt vector is fetched and

            then executed.
       2: The OST is only active when the Oscillator is configured for XT or LF modes.
       3: The Program Counter = 0, that is the device branches to the reset vector. This is different from the

            mid-range devices.

DS30412C-page 16                                                               1996 Microchip Technology Inc.
                                                                 PIC17C4X

FIGURE 4-2: TIME-OUT SEQUENCE ON POWER-UP (MCLR TIED TO VDD)

VDD

               MCLR                         TPWRT
INTERNAL POR                     TOST

PWRT TIME-OUT
  OST TIME-OUT

     INTERNAL RESET

FIGURE 4-3: TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD)

VDD

               MCLR                                       TPWRT
INTERNAL POR                                          TOST

PWRT TIME-OUT
  OST TIME-OUT

INTERNAL RESET

FIGURE 4-4: SLOW RISE TIME (MCLR TIED TO VDD)

                                                         5V

                     VDD          0V               1V

MCLR

INTERNAL POR

                                      TPWRT

PWRT TIME-OUT

                                                   TOST

OST TIME-OUT

INTERNAL RESET

1996 Microchip Technology Inc.                                  DS30412C-page 17
PIC17C4X                                                      FIGURE 4-8:  PIC17C42 EXTERNAL
                                                                           POWER-ON RESET CIRCUIT
FIGURE 4-5: OSCILLATOR START-UPTIME                                        (FOR SLOW VDD
                                                                           POWER-UP)
VDD

                                                              VDD VDD

            MCLR                                              D            R
           OSC2
                                                                           C      R1
                       TOSC1                                                                 MCLR
OST TIME_OUT
                                                                                              PIC17C42

                              TOST

     PWRT TIME_OUT                                            Note 1: An external Power-on Reset circuit is
                                                                          required only if VDD power-up time is too
                                             TPWRT                        slow. The diode D helps discharge the
     INTERNAL RESET                                                       capacitor quickly when VDD powers
    This figure shows in greater detail the timings involved              down.
    with the oscillator start-up timer. In this example the
    low frequency crystal start-up time is larger than               2: R < 40 k is recommended to ensure
    power-up time (TPWRT).                                                that the voltage drop across R does not
    Tosc1 = time for the crystal oscillator to react to an                exceed 0.2V (max. leakage current spec.
    oscillation level detectable by the Oscillator Start-up               on the MCLR/VPP pin is 5 A). A larger
    Timer (ost).                                                          voltage drop will degrade VIH level on the
    TOST = 1024TOSC.                                                      MCLR/VPP pin.

FIGURE 4-6: USING ON-CHIP POR                                        3: R1 = 100 to 1 k will limit any current
                                                                          flowing into MCLR from external capaci-
                                     VDD                                  tor C in the event of MCLR/VPP pin
                                                                          breakdown due to Electrostatic Dis-
                                                 VDD                      charge (ESD) or (Electrical Overstress)
                                                                          EOS.
                                                 MCLR

                              PIC17CXX

FIGURE 4-7: BROWN-OUT PROTECTION                              FIGURE 4-9: BROWN-OUT PROTECTION
                     CIRCUIT 1                                                     CIRCUIT 2

                                                                VDD               VDD
                                                              R1

   VDD                                 VDD                                        Q1
33k                                                                                         MCLR
                                       MCLR
              10k             40 k PIC17CXX                   R2                  40 k PIC17CXX

                                                              This brown-out circuit is less expensive, albeit less
                                                              accurate. Transistor Q1 turns off when VDD is below a
                                                              certain level such that:

This circuit will activate reset when VDD goes below                       VDD      R1 = 0.7V
(Vz + 0.7V) where Vz = Zener voltage.                                             R1 + R2

DS30412C-page 18                                                                   1996 Microchip Technology Inc.
                                                              PIC17C4X

TABLE 4-4: INITIALIZATION CONDITIONS FOR SPECIAL FUNCTION REGISTERS

Register     Address              Power-on Reset  MCLR Reset  Wake-up from SLEEP
                                                  WDT Reset      through interrupt

Unbanked

INDF0        00h                  0000 0000       0000 0000   0000 0000
                                  xxxx xxxx       uuuu uuuu   uuuu uuuu
FSR0         01h
                                     0000h           0000h     PC + 1(2)
PCL          02h                  0000 0000       0000 0000   uuuu uuuu
                                  1111 xxxx       1111 uuuu   1111 uuuu
PCLATH       03h                  0000 000-       0000 000-   0000 000-
                                  --11 11--       --11 qq--   --uu qq--
ALUSTA       04h                  0000 0000       0000 0000   uuuu uuuu(1)
                                  0000 0000       0000 0000   uuuu uuuu
T0STA        05h                  xxxx xxxx       uuuu uuuu   uuuu uuuu
                                  xxxx xxxx       uuuu uuuu   uuuu uuuu
CPUSTA(3)    06h                  xxxx xxxx       uuuu uuuu   uuuu uuuu
                                  xxxx xxxx       uuuu uuuu   uuuu uuuu
INTSTA       07h                  xxxx xxxx       uuuu uuuu   uuuu uuuu
                                  xxxx xxxx       uuuu uuuu   uuuu uuuu
INDF1        08h                  0000 0000       0000 0000   uuuu uuuu
                                  0000 0000       0000 0000   uuuu uuuu
FSR1         09h                  0000 0000       0000 0000   uuuu uuuu

WREG         0Ah

TMR0L        0Bh

TMR0H        0Ch

TBLPTRL (4)  0Dh

TBLPTRH (4)  0Eh

TBLPTRL (5)  0Dh

TBLPTRH (5)  0Eh

BSR          0Fh

Bank 0

PORTA        10h                  0-xx xxxx       0-uu uuuu   uuuu uuuu
                                  1111 1111       1111 1111   uuuu uuuu
DDRB         11h                  xxxx xxxx       uuuu uuuu   uuuu uuuu
                                  0000 -00x       0000 -00u   uuuu -uuu
PORTB        12h                  xxxx xxxx       uuuu uuuu   uuuu uuuu
                                  0000 --1x       0000 --1u   uuuu --uu
RCSTA        13h                  xxxx xxxx       uuuu uuuu   uuuu uuuu
                                  xxxx xxxx       uuuu uuuu   uuuu uuuu
RCREG        14h

TXSTA        15h

TXREG        16h

SPBRG        17h

Bank 1

DDRC         10h                  1111 1111       1111 1111   uuuu uuuu

PORTC        11h                  xxxx xxxx       uuuu uuuu   uuuu uuuu

DDRD         12h                  1111 1111       1111 1111   uuuu uuuu

PORTD        13h                  xxxx xxxx       uuuu uuuu   uuuu uuuu

DDRE         14h                  ---- -111       ---- -111   ---- -uuu

PORTE        15h                  ---- -xxx       ---- -uuu   ---- -uuu

PIR          16h                  0000 0010       0000 0010   uuuu uuuu(1)

PIE          17h                  0000 0000       0000 0000   uuuu uuuu

Legend: u = unchanged, x = unknown, - = unimplemented read as '0', q = value depends on condition.
Note 1: One or more bits in INTSTA, PIR will be affected (to cause wake-up).

       2: When the wake-up is due to an interrupt and the GLINTD bit is cleared, the PC is loaded with the interrupt
            vector.

       3: See Table 4-3 for reset value of specific condition.
       4: Only applies to the PIC17C42.
       5: Does not apply to the PIC17C42.

1996 Microchip Technology Inc.                              DS30412C-page 19
PIC17C4X

TABLE 4-4: INITIALIZATION CONDITIONS FOR SPECIAL FUNCTION REGISTERS (Cont.'d)

Register          Address  Power-on Reset  MCLR Reset  Wake-up from SLEEP
                                           WDT Reset      through interrupt

Bank 2

TMR1              10h      xxxx xxxx       uuuu uuuu   uuuu uuuu
                           xxxx xxxx       uuuu uuuu   uuuu uuuu
TMR2              11h      xxxx xxxx       uuuu uuuu   uuuu uuuu
                           xxxx xxxx       uuuu uuuu   uuuu uuuu
TMR3L             12h      xxxx xxxx       uuuu uuuu   uuuu uuuu
                           xxxx xxxx       uuuu uuuu   uuuu uuuu
TMR3H             13h      xxxx xxxx       uuuu uuuu   uuuu uuuu
                           xxxx xxxx       uuuu uuuu   uuuu uuuu
PR1               14h

PR2               15h

PR3/CA1L          16h

PR3/CA1H          17h

Bank 3

PW1DCL            10h      xx-- ----       uu-- ----   uu-- ----
                           xx-- ----       uu-- ----   uu-- ----
PW2DCL            11h      xxxx xxxx       uuuu uuuu   uuuu uuuu
                           xxxx xxxx       uuuu uuuu   uuuu uuuu
PW1DCH            12h      xxxx xxxx       uuuu uuuu   uuuu uuuu
                           xxxx xxxx       uuuu uuuu   uuuu uuuu
PW2DCH            13h      0000 0000       0000 0000   uuuu uuuu
                           0000 0000       0000 0000   uuuu uuuu
CA2L              14h

CA2H              15h

TCON1             16h

TCON2             17h

Unbanked

PRODL (5)         18h      xxxx xxxx       uuuu uuuu   uuuu uuuu

PRODH (5)         19h      xxxx xxxx       uuuu uuuu   uuuu uuuu

Legend: u = unchanged, x = unknown, - = unimplemented read as '0', q = value depends on condition.
Note 1: One or more bits in INTSTA, PIR will be affected (to cause wake-up).

       2: When the wake-up is due to an interrupt and the GLINTD bit is cleared, the PC is loaded with the interrupt
            vector.

       3: See Table 4-3 for reset value of specific condition.
       4: Only applies to the PIC17C42.
       5: Does not apply to the PIC17C42.

DS30412C-page 20                                        1996 Microchip Technology Inc.
                                                                                     PIC17C4X

5.0 INTERRUPTS                                               When an interrupt is responded to, the GLINTD bit is
                                                             automatically set to disable any further interrupt, the
The PIC17C4X devices have 11 sources of interrupt:           return address is pushed onto the stack and the PC is
                                                             loaded with the interrupt vector address. There are four
External interrupt from the RA0/INT pin                    interrupt vectors. Each vector address is for a specific
Change on RB7:RB0 pins                                     interrupt source (except the peripheral interrupts which
TMR0 Overflow                                              have the same vector address). These sources are:
TMR1 Overflow
TMR2 Overflow                                              External interrupt from the RA0/INT pin
TMR3 Overflow                                              TMR0 Overflow
USART Transmit buffer empty                                 T0CKI edge occurred
USART Receive buffer full                                  Any peripheral interrupt
Capture1
Capture2                                                   When program execution vectors to one of these inter-
T0CKI edge occurred                                        rupt vector addresses (except for the peripheral inter-
                                                             rupt address), the interrupt flag bit is automatically
There are four registers used in the control and status      cleared. Vectoring to the peripheral interrupt vector
of interrupts. These are:                                    address does not automatically clear the source of the
                                                             interrupt. In the peripheral interrupt service routine, the
CPUSTA                                                     source(s) of the interrupt can be determined by testing
INTSTA                                                     the interrupt flag bits. The interrupt flag bit(s) must be
PIE                                                        cleared in software before re-enabling interrupts to
PIR                                                        avoid infinite interrupt requests.

The CPUSTA register contains the GLINTD bit. This is         All of the individual interrupt flag bits will be set regard-
the Global Interrupt Disable bit. When this bit is set, all  less of the status of their corresponding mask bit or the
interrupts are disabled. This bit is part of the controller  GLINTD bit.
core functionality and is described in the Memory Orga-
nization section.                                            For external interrupt events, there will be an interrupt
                                                             latency. For two cycle instructions, the latency could be
                                                             one instruction cycle longer.

                                                             The "return from interrupt" instruction, RETFIE, can be
                                                             used to mark the end of the interrupt service routine.
                                                             When this instruction is executed, the stack is
                                                             "POPed", and the GLINTD bit is cleared (to re-enable
                                                             interrupts).

FIGURE 5-1: INTERRUPT LOGIC

TMR1IF                                                           T0IF                Wake-up (If in SLEEP mode)
TMR1IE                                                           T0IE                or terminate long write

             TMR2IF                                             INTF                             Interrupt to CPU
             TMR2IE                                             INTE

                     TMR3IF                                  T0CKIF
                     TMR3IE                                  T0CKIE

                             CA1IF                              PEIF
                             CA1IE                              PEIE

                             CA2IF                           GLINTD
                             CA2IE

                             TXIF
                             TXIE

                     RCIF
                     RCIE

RBIF
RBIE

1996 Microchip Technology Inc.                                                     DS30412C-page 21

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

5.1 Interrupt Status Register (INTSTA)                       Note:  T0IF, INTF, T0CKIF, or PEIF will be set by
                                                                    the specified condition, even if the corre-
The Interrupt Status/Control register (INTSTA) records              sponding interrupt enable bit is clear (inter-
the individual interrupt requests in flag bits, and con-            rupt disabled) or the GLINTD bit is set (all
tains the individual interrupt enable bits (not for the             interrupts disabled).
peripherals).
                                                             Care should be taken when clearing any of the INTSTA
The PEIF bit is a read only, bit wise OR of all the periph-  register enable bits when interrupts are enabled
eral flag bits in the PIR register (Figure 5-4).             (GLINTD is clear). If any of the INTSTA flag bits (T0IF,
                                                             INTF, T0CKIF, or PEIF) are set in the same instruction
                                                             cycle as the corresponding interrupt enable bit is
                                                             cleared, the device will vector to the reset address
                                                             (0x00).

                                                             When disabling any of the INTSTA enable bits, the
                                                             GLINTD bit should be set (disabled).

FIGURE 5-2: INTSTA REGISTER (ADDRESS: 07h, UNBANKED)

  R-0   R/W - 0 R/W - 0 R/W - 0 R/W - 0 R/W - 0 R/W - 0 R/W - 0
  PEIF
bit7    T0CKIF T0IF INTF  PEIE T0CKIE T0IE                          INTE     R = Readable bit
                                                                       bit0  W = Writable bit
bit 7:                                                                       - n = Value at POR reset

        PEIF: Peripheral Interrupt Flag bit

        This bit is the OR of all peripheral interrupt flag bits AND'ed with their corresponding enable bits.

        1 = A peripheral interrupt is pending

        0 = No peripheral interrupt is pending

bit 6:  T0CKIF: External Interrupt on T0CKI Pin Flag bit
        This bit is cleared by hardware, when the interrupt logic forces program execution to vector (18h).
        1 = The software specified edge occurred on the RA1/T0CKI pin
        0 = The software specified edge did not occur on the RA1/T0CKI pin

bit 5:  T0IF: TMR0 Overflow Interrupt Flag bit
        This bit is cleared by hardware, when the interrupt logic forces program execution to vector (10h).
        1 = TMR0 overflowed
        0 = TMR0 did not overflow

bit 4:  INTF: External Interrupt on INT Pin Flag bit
        This bit is cleared by hardware, when the interrupt logic forces program execution to vector (08h).
        1 = The software specified edge occurred on the RA0/INT pin
        0 = The software specified edge did not occur on the RA0/INT pin

bit 3:  PEIE: Peripheral Interrupt Enable bit
        This bit enables all peripheral interrupts that have their corresponding enable bits set.
        1 = Enable peripheral interrupts
        0 = Disable peripheral interrupts

bit 2:  T0CKIE: External Interrupt on T0CKI Pin Enable bit
        1 = Enable software specified edge interrupt on the RA1/T0CKI pin
        0 = Disable interrupt on the RA1/T0CKI pin

bit 1:  T0IE: TMR0 Overflow Interrupt Enable bit
        1 = Enable TMR0 overflow interrupt
        0 = Disable TMR0 overflow interrupt

bit 0:  INTE: External Interrupt on RA0/INT Pin Enable bit
        1 = Enable software specified edge interrupt on the RA0/INT pin
        0 = Disable software specified edge interrupt on the RA0/INT pin

DS30412C-page 22                                                             1996 Microchip Technology Inc.
                                                                 PIC17C4X

5.2 Peripheral Interrupt Enable Register
          (PIE)

This register contains the individual flag bits for the
Peripheral interrupts.

FIGURE 5-3: PIE REGISTER (ADDRESS: 17h, BANK 1)

R/W - 0 R/W - 0 R/W - 0 R/W - 0 R/W - 0 R/W - 0 R/W - 0 R/W - 0  R = Readable bit
RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE TXIE RCIE                 W = Writable bit
                                                                 -n = Value at POR reset
bit7                                                     bit0

bit 7:  RBIE: PORTB Interrupt on Change Enable bit
bit 6:  1 = Enable PORTB interrupt on change
bit 5:  0 = Disable PORTB interrupt on change
bit 4:
bit 3:  TMR3IE: Timer3 Interrupt Enable bit
bit 2:  1 = Enable Timer3 interrupt
bit 1:  0 = Disable Timer3 interrupt
bit 0:
        TMR2IE: Timer2 Interrupt Enable bit
        1 = Enable Timer2 interrupt
        0 = Disable Timer2 interrupt

        TMR1IE: Timer1 Interrupt Enable bit
        1 = Enable Timer1 interrupt
        0 = Disable Timer1 interrupt

        CA2IE: Capture2 Interrupt Enable bit
        1 = Enable Capture interrupt on RB1/CAP2 pin
        0 = Disable Capture interrupt on RB1/CAP2 pin

        CA1IE: Capture1 Interrupt Enable bit
        1 = Enable Capture interrupt on RB2/CAP1 pin
        0 = Disable Capture interrupt on RB2/CAP1 pin

        TXIE: USART Transmit Interrupt Enable bit
        1 = Enable Transmit buffer empty interrupt
        0 = Disable Transmit buffer empty interrupt

        RCIE: USART Receive Interrupt Enable bit
        1 = Enable Receive buffer full interrupt
        0 = Disable Receive buffer full interrupt

1996 Microchip Technology Inc.                                                          DS30412C-page 23
PIC17C4X                                                 Note:  These bits will be set by the specified con-
                                                                dition, even if the corresponding interrupt
5.3 Peripheral Interrupt Request Register                       enable bit is cleared (interrupt disabled), or
          (PIR)                                                 the GLINTD bit is set (all interrupts dis-
                                                                abled). Before enabling an interrupt, the
This register contains the individual flag bits for the         user may wish to clear the interrupt flag to
peripheral interrupts.                                          ensure that the program does not immedi-
                                                                ately branch to the peripheral interrupt ser-
                                                                vice routine.

FIGURE 5-4: PIR REGISTER (ADDRESS: 16h, BANK 1)

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

  RBIF  TMR3IF TMR2IF TMR1IF CA2IF               CA1IF   TXIF  RCIF    R = Readable bit
bit7                                                             bit0  W = Writable bit
                                                                       -n = Value at POR reset

bit 7: RBIF: PORTB Interrupt on Change Flag bit

        1 = One of the PORTB inputs changed (Software must end the mismatch condition)

        0 = None of the PORTB inputs have changed

bit 6:  TMR3IF: Timer3 Interrupt Flag bit
        If Capture1 is enabled (CA1/PR3 = 1)
        1 = Timer3 overflowed
        0 = Timer3 did not overflow

        If Capture1 is disabled (CA1/PR3 = 0)
        1 = Timer3 value has rolled over to 0000h from equalling the period register (PR3H:PR3L) value
        0 = Timer3 value has not rolled over to 0000h from equalling the period register (PR3H:PR3L) value

bit 5:  TMR2IF: Timer2 Interrupt Flag bit
        1 = Timer2 value has rolled over to 0000h from equalling the period register (PR2) value
        0 = Timer2 value has not rolled over to 0000h from equalling the period register (PR2) value

bit 4:  TMR1IF: Timer1 Interrupt Flag bit
        If Timer1 is in 8-bit mode (T16 = 0)
        1 = Timer1 value has rolled over to 0000h from equalling the period register (PR) value
        0 = Timer1 value has not rolled over to 0000h from equalling the period register (PR2) value

        If Timer1 is in 16-bit mode (T16 = 1)
        1 = TMR1:TMR2 value has rolled over to 0000h from equalling the period register (PR1:PR2) value
        0 = TMR1:TMR2 value has not rolled over to 0000h from equalling the period register (PR1:PR2) value

bit 3:  CA2IF: Capture2 Interrupt Flag bit
        1 = Capture event occurred on RB1/CAP2 pin
        0 = Capture event did not occur on RB1/CAP2 pin

bit 2:  CA1IF: Capture1 Interrupt Flag bit
        1 = Capture event occurred on RB0/CAP1 pin
        0 = Capture event did not occur on RB0/CAP1 pin

bit 1:  TXIF: USART Transmit Interrupt Flag bit
        1 = Transmit buffer is empty
        0 = Transmit buffer is full

bit 0:  RCIF: USART Receive Interrupt Flag bit
        1 = Receive buffer is full
        0 = Receive buffer is empty

DS30412C-page 24                                                       1996 Microchip Technology Inc.
                                                                               PIC17C4X

5.4 Interrupt Operation                                     Note 1: Individual interrupt flag bits are set regard-
                                                                        less of the status of their corresponding
Global Interrupt Disable bit, GLINTD (CPUSTA<4>),                       mask bit or the GLINTD bit.
enables all unmasked interrupts (if clear) or disables all
interrupts (if set). Individual interrupts can be disabled  Note 2: When disabling any of the INTSTA enable
through their corresponding enable bits in the INTSTA                   bits, the GLINTD bit should be set
register. Peripheral interrupts need either the global                  (disabled).
peripheral enable PEIE bit disabled, or the specific
peripheral enable bit disabled. Disabling the peripher-     Note 3: For the PIC17C42 only:
als via the global peripheral enable bit, disables all                  If an interrupt occurs while the Global Inter-
peripheral interrupts. GLINTD is set on reset (interrupts               rupt Disable (GLINTD) bit is being set, the
disabled).                                                              GLINTD bit may unintentionally be re-
                                                                        enabled by the user's Interrupt Service
The RETFIE instruction allows returning from interrupt                  Routine (the RETFIE instruction). The
and re-enable interrupts at the same time.                              events that would cause this to occur are:

When an interrupt is responded to, the GLINTD bit is              1. An interrupt occurs simultaneously
automatically set to disable any further interrupt, the                 with an instruction that sets the
return address is pushed onto the stack and the PC is                   GLINTD bit.
loaded with interrupt vector. There are four interrupt
vectors to reduce interrupt latency.                              2. The program branches to the Interrupt
                                                                        vector and executes the Interrupt Ser-
The peripheral interrupt vector has multiple interrupt                  vice Routine.
sources. Once in the peripheral interrupt service rou-
tine, the source(s) of the interrupt can be determined by         3. The Interrupt Service Routine com-
polling the interrupt flag bits. The peripheral interrupt               pletes with the execution of the RET-
flag bit(s) must be cleared in software before re-                      FIE instruction. This causes the
enabling interrupts to avoid continuous interrupts.                     GLINTD bit to be cleared (enables
                                                                        interrupts), and the program returns to
The PIC17C4X devices have four interrupt vectors.                       the instruction after the one which was
These vectors and their hardware priority are shown in                  meant to disable interrupts.
Table 5-1. If two enabled interrupts occur "at the same
time", the interrupt of the highest priority will be ser-         The method to ensure that interrupts are
viced first. This means that the vector address of that           globally disabled is:
interrupt will be loaded into the program counter (PC).
                                                                  1. Ensure that the GLINTD bit was set by
TABLE 5-1: INTERRUPT VECTORS/                                           the instruction, as shown in the follow-
                     PRIORITIES                                         ing code:

                                                            LOOP  BSF    CPUSTA, GLINTD ; Disable Global
                                                                  BTFSS
                                                                  GOTO         ; Interrupt

Address  Vector                         Priority                         CPUSTA, GLINTD ; Global Interrupt
                                      1 (Highest)
                                                                               ; Disabled?
                                            2
0008h    External Interrupt on RA0/         3                            LOOP  ; NO, try again
0010h    INT pin (INTF)               4 (Lowest)
0018h                                                                          ; YES, continue
0020h    TMR0 overflow interrupt
         (T0IF)                                                                ; with program

         External Interrupt on T0CKI                                           ; low
         (T0CKIF)

         Peripherals (PEIF)

1996 Microchip Technology Inc.                                               DS30412C-page 25
PIC17C4X                                                  5.7 T0CKI Interrupt

5.5 RA0/INT Interrupt                                     The external interrupt on the RA1/T0CKI pin is edge
                                                          triggered. Either the rising edge, if the T0SE bit
The external interrupt on the RA0/INT pin is edge trig-   (T0STA<6>) is set, or the falling edge, if the T0SE bit is
gered. Either the rising edge, if INTEDG bit              clear. When a valid edge appears on the RA1/T0CKI
(T0STA<7>) is set, or the falling edge, if INTEDG bit is  pin, the T0CKIF bit (INTSTA<6>) is set. This interrupt
clear. When a valid edge appears on the RA0/INT pin,      can be disabled by clearing the T0CKIE control bit
the INTF bit (INTSTA<4>) is set. This interrupt can be    (INTSTA<2>). The T0CKI interrupt can wake up the
disabled by clearing the INTE control bit (INTSTA<0>).    processor from SLEEP. See Section 14.4 for details on
The INT interrupt can wake the processor from SLEEP.      SLEEP operation.
See Section 14.4 for details on SLEEP operation.
                                                          5.8 Peripheral Interrupt
5.6 TMR0 Interrupt
                                                          The peripheral interrupt flag indicates that at least one
An overflow (FFFFh  0000h) in TMR0 will set the           of the peripheral interrupts occurred (PEIF is set). The
T0IF (INTSTA<5>) bit. The interrupt can be enabled/       PEIF bit is a read only bit, and is a bit wise OR of all the
disabled by setting/clearing the T0IE control bit         flag bits in the PIR register AND'ed with the corre-
(INTSTA<1>). For operation of the Timer0 module, see      sponding enable bits in the PIE register. Some of the
Section 11.0.                                             peripheral interrupts can wake the processor from
                                                          SLEEP. See Section 14.4 for details on SLEEP opera-
                                                          tion.

FIGURE 5-5: INT PIN / T0CKI PIN INTERRUPT TIMING

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

       OSC1    PC  PC + 1                                 Addr (Vector)  YY  YY + 1                              PC + 1

       OSC2    PC Inst (PC) Addr Inst (PC+1) Addr Inst (PC+1) Addr Inst (Vector) Addr RETFIE Addr Inst (YY + 1)

RA0/INT or         Inst (PC)  Dummy                       Dummy              RETFIE                              Dummy
RA1/T0CKI

     INTF or
    T0CKIF

    GLINTD

           PC

System Bus
  Instruction
    Fetched

Instruction
executed

DS30412C-page 26                                                             1996 Microchip Technology Inc.
                                                                      PIC17C4X

5.9 Context Saving During Interrupts                      Example 5-1 shows the saving and restoring of infor-
                                                          mation for an interrupt service routine. The PUSH and
During an interrupt, only the returned PC value is saved  POP routines could either be in each interrupt service
on the stack. Typically, users may wish to save key reg-  routine or could be subroutines that were called.
isters during an interrupt; e.g. WREG, ALUSTA and the     Depending on the application, other registers may also
BSR registers. This requires implementation in soft-      need to be saved, such as PCLATH.
ware.

EXAMPLE 5-1: SAVING STATUS AND WREG IN RAM

;

; The addresses that are used to store the CPUSTA and WREG values

; must be in the data memory address range of 18h - 1Fh. Up to

; 8 locations can be saved and restored using

; the MOVFP instruction. This instruction neither affects the status

; bits, nor corrupts the WREG register.

;

;

PUSH MOVFP WREG, TEMP_W           ; Save WREG

     MOVFP ALUSTA, TEMP_STATUS ; Save ALUSTA

     MOVFP BSR, TEMP_BSR          ; Save BSR

ISR  :                            ; This is the interrupt service routine

     :

POP  MOVFP TEMP_W, WREG           ; Restore WREG

     MOVFP TEMP_STATUS, ALUSTA ; Restore ALUSTA

     MOVFP TEMP_BSR, BSR          ; Restore BSR

     RETFIE                       ; Return from Interrupts enabled

1996 Microchip Technology Inc.                                           DS30412C-page 27
PIC17C4X

NOTES:

DS30412C-page 28   1996 Microchip Technology Inc.
                                                                                          PIC17C4X

6.0 MEMORY ORGANIZATION                                   FIGURE 6-1: PROGRAM MEMORY MAP
                                                                               AND STACK
There are two memory blocks in the PIC17C4X; pro-
gram memory and data memory. Each block has its                                      PC<15:0>
own bus, so that access to each block can occur during
the same oscillator cycle.                                CALL, RETURN                               16

The data memory can further be broken down into Gen-      RETFIE, RETLW
eral Purpose RAM and the Special Function Registers
(SFRs). The operation of the SFRs that control the                                   Stack Level 1
"core" are described here. The SFRs used to control
the peripheral modules are described in the section dis-                             
cussing each individual peripheral module.
                                                                                     Stack Level 16
6.1 Program Memory Organization
                                                                                     Reset Vector        0000h
PIC17C4X devices have a 16-bit program counter
capable of addressing a 64K x 16 program memory                                 INT Pin Interrupt Vector 0008h
space. The reset vector is at 0000h and the interrupt
vectors are at 0008h, 0010h, 0018h, and 0020h                                   Timer0 Interrupt Vector 0010h
(Figure 6-1).
                                                                                T0CKI Pin Interrupt Vector 0018h
6.1.1 PROGRAM MEMORY OPERATION
                                                                                Peripheral Interrupt Vector 0020h
The PIC17C4X can operate in one of four possible pro-                                                                        0021h
gram memory configurations. The configuration is
selected by two configuration bits. The possible modes    User Memory                                    7FFh
are:                                                        Space (1)                                    (PIC17C42,
                                                                                                         PIC17CR42,
Microprocessor                                                                                         PIC17C42A)
Microcontroller
Extended Microcontroller                                                                               FFFh
Protected Microcontroller                                                                              (PIC17C43
                                                                                                          PIC17CR43)
The microcontroller and protected microcontroller
modes only allow internal execution. Any access                                                          1FFFh
beyond the program memory reads unknown data.                                                            (PIC17C44)
The protected microcontroller mode also enables the
code protection feature.                                  Configuration Memory          FOSC0            FDFFh
                                                             Space                      FOSC1            FE00h
The extended microcontroller mode accesses both the                                    WDTPS0            FE01h
internal program memory as well as external program                                    WDTPS1            FE02h
memory. Execution automatically switches between                                                         FE03h
internal and external memory. The 16-bits of address                                      PM0            FE04h
allow a program memory range of 64K-words.                                             Reserved          FE05h
                                                                                                         FE06h
The microprocessor mode only accesses the external                                        PM1            FE07h
program memory. The on-chip program memory is                                          Reserved          FE08h
ignored. The 16-bits of address allow a program mem-
ory range of 64K-words. Microprocessor mode is the                                     Reserved          FE0Eh
default mode of an unprogrammed device.                                                                  FE0Fh
                                                                                         PM2(2)          FE10h
The different modes allow different access to the con-                                                   FF5Fh
figuration bits, test memory, and boot ROM. Table 6-1                                Test EPROM          FF60h
lists which modes can access which areas in memory.
Test Memory and Boot Memory are not required for                                      Boot ROM           FFFFh
normal operation of the device. Care should be taken to
ensure that no unintended branches occur to these         Note 1:               User memory space may be internal, external, or
areas.                                                            2:            both. The memory configuration depends on the
                                                                                processor mode.
                                                                                This location is reserved on the PIC17C42.

1996 Microchip Technology Inc.                                                                         DS30412C-page 29

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

TABLE 6-1: MODE MEMORY ACCESS                               The PIC17C4X can operate in modes where the pro-
                                                            gram memory is off-chip. They are the microprocessor
    Operating      Internal  Configuration Bits,            and extended microcontroller modes. The micropro-
       Mode        Program       Test Memory,               cessor mode is the default for an unprogrammed
                   Memory          Boot ROM                 device.
Microprocessor
                  No Access        No Access                Regardless of the processor mode, data memory is
Microcontroller                                             always on-chip.
                    Access           Access
Extended
Microcontroller   Access              No Access

Protected         Access              Access
Microcontroller

FIGURE 6-2: MEMORY MAP IN DIFFERENT MODES

                          Microprocessor                    Extended                  Microcontroller
                                Mode                        Microcontroller                Modes
                                                            Mode
PIC17C42,         0000h                                                                         0000h
PIC17CR42,                                                        0000h
PIC17C42A                                                                                       07FFh        On-chip
                                                                             On-chip            0800h
                                                                             Program                         Program
                                                                             Memory                          Memory
                                                                  07FFh
                                                                                                                        PROGRAM SPACE
                         External                 0800h
                         Program
                         Memory

                                                          External
                                                          Program
                                                          Memory

                  FFFFh                                                                         FE00h Config. Bits
                                                                                                          Test Memory
                                                  FFFFh
                                                            OFF-CHIP                            FFFFh Boot ROM

                         OFF-CHIP      ON-CHIP                           ON-CHIP      OFF-CHIP               ON-CHIP
                                      00h                              00h
                                                                                                             00h        DATA SPACE

                         OFF-CHIP     FFh                 OFF-CHIP     FFh            OFF-CHIP               FFh
                                         ON-CHIP                          ON-CHIP                              ON-CHIP

PIC17C43,         0000h                                             0000h                       0000h        On-chip
PIC17CR43,                                                0FFFh/1FFFh
PIC17C44                                                                   On-chip    0FFFh/1FFFh            Program
                                                                                      1000h/2000h            Memory
                                                                           Program
                                                                           Memory

                         External                 1000h/                                                                PROGRAM SPACE
                         Program                  2000h
                         Memory

                                                          External
                                                          Program
                                                          Memory

                  FFFFh                           FFFFh                                         FE00h Config. Bits
                            OFF-CHIP                         OFF-CHIP                                     Test Memory

                                                                                                FFFFh Boot ROM

                                      ON-CHIP                              ON-CHIP    OFF-CHIP               ON-CHIP

                             00h                            00h                                 00h                     DATA SPACE
                                          120h                           120h                                120h

                             FFh      1FFh                  FFh            1FFh                         FFh     1FFh
                                                                                      OFF-CHIP               ON-CHIP
                  OFF-CHIP            ON-CHIP     OFF-CHIP             ON-CHIP

DS30412C-page 30                                                                      1996 Microchip Technology Inc.
                                                                                           PIC17C4X

6.1.2 EXTERNAL MEMORY INTERFACE                                      In extended microcontroller mode, when the device is
                                                                     executing out of internal memory, the control signals
When either microprocessor or extended microcontrol-                 will continue to be active. That is, they indicate the
ler mode is selected, PORTC, PORTD and PORTE are                     action that is occurring in the internal memory. The
configured as the system bus. PORTC and PORTD are                    external memory access is ignored.
the multiplexed address/data bus and PORTE is for the
control signals. External components are needed to                   This following selection is for use with Microchip
demultiplex the address and data. This can be done as                EPROMs. For interfacing to other manufacturers mem-
shown in Figure 6-4. The waveforms of address and                    ory, please refer to the electrical specifications of the
data are shown in Figure 6-3. For complete timings,                  desired PIC17C4X device, as well as the desired mem-
please refer to the electrical specification section.                ory device to ensure compatibility.

FIGURE 6-3:  EXTERNAL PROGRAM                                        TABLE 6-2: EPROM MEMORY ACCESS
             MEMORY ACCESS                                                                TIME ORDERING SUFFIX
             WAVEFORMS
                                                                                                EPROM Suffix
        Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1                                   PIC17C4X Instruction
                                                                     Oscillator Cycle                        PIC17C43
    AD  Address out Data in  Address out Data out                    Frequency Time (TCY)  PIC17C42 PIC17C44
<15:0>                                     Write cycle
        '1'                                                          8 MHz   500 ns        -25   -25
   ALE           Read cycle
    OE                                                               16 MHz  250 ns        -12   -15
   WR

                                                                     20 MHz  200 ns        -90   -10

The system bus requires that there is no bus conflict                25 MHz  160 ns        N.A.  -70
(minimal leakage), so the output value (address) will be
capacitively held at the desired value.                              33 MHz  121 ns        N.A.  (1)

As the speed of the processor increases, external                    Note 1: The access times for this requires the use of
EPROM memory with faster access time must be used.                               fast SRAMS.
Table 6-2 lists external memory speed requirements for
a given PIC17C4X device frequency.

                                                                     Note: The external memory interface is not sup-
                                                                                 ported for the LC devices.

FIGURE 6-4: TYPICAL EXTERNAL PROGRAM MEMORY CONNECTION DIAGRAM

                                                                   AD15-AD0

              AD7-AD0                             A15-A0                       Memory             Memory
        PIC17C4X                  373                                           (MSB)               (LSB)

                                                                             Ax-A0               Ax-A0

                                                                             D7-D0               D7-D0
                                                                             CE                  CE
                                                                             OE WR (2)           OE WR(2)

              AD15-AD8                                               138(1)
                                                                373

                      ALE

                     I/O(1)

                        OE
                       WR

Note 1: Use of I/O pins is only required for paged memory.
        2: This signal is unused for ROM and EPROM devices.

1996 Microchip Technology Inc.                                                                 DS30412C-page 31
PIC17C4X                                                      6.2.1 GENERAL PURPOSE REGISTER (GPR)

6.2 Data Memory Organization                                  All devices have some amount of GPR area. The GPRs
                                                              are 8-bits wide. When the GPR area is greater than
Data memory is partitioned into two areas. The first is       232, it must be banked to allow access to the additional
the General Purpose Registers (GPR) area, while the           memory space.
second is the Special Function Registers (SFR) area.
The SFRs control the operation of the device.                 Only the PIC17C43 and PIC17C44 devices have
                                                              banked memory in the GPR area. To facilitate switching
Portions of data memory are banked, this is for both          between these banks, the MOVLR bank instruction has
areas. The GPR area is banked to allow greater than           been added to the instruction set. GPRs are not initial-
232 bytes of general purpose RAM. SFRs are for the            ized by a Power-on Reset and are unchanged on all
registers that control the peripheral functions. Banking      other resets.
requires the use of control bits for bank selection.
These control bits are located in the Bank Select Reg-        6.2.2 SPECIAL FUNCTION REGISTERS (SFR)
ister (BSR). If an access is made to a location outside
this banked region, the BSR bits are ignored.                 The SFRs are used by the CPU and peripheral func-
Figure 6-5 shows the data memory map organization             tions to control the operation of the device (Figure 6-5
for the PIC17C42 and Figure 6-6 for all of the other          and Figure 6-6). These registers are static RAM.
PIC17C4X devices.
                                                              The SFRs can be classified into two sets, those associ-
Instructions MOVPF and MOVFP provide the means to             ated with the "core" function and those related to the
move values from the peripheral area ("P") to any loca-       peripheral functions. Those registers related to the
tion in the register file ("F"), and vice-versa. The defini-  "core" are described here, while those related to a
tion of the "P" range is from 0h to 1Fh, while the "F"        peripheral feature are described in the section for each
range is 0h to FFh. The "P" range has six more loca-          peripheral feature.
tions than peripheral registers (eight locations for the
PIC17C42 device) which can be used as General Pur-            The peripheral registers are in the banked portion of
pose Registers. This can be useful in some applications       memory, while the core registers are in the unbanked
where variables need to be copied to other locations in       region. To facilitate switching between the peripheral
the general purpose RAM (such as saving status infor-         banks, the MOVLB bank instruction has been provided.
mation during an interrupt).

The entire data memory can be accessed either directly
or indirectly through file select registers FSR0 and
FSR1 (Section 6.4). Indirect addressing uses the
appropriate control bits of the BSR for accesses into the
banked areas of data memory. The BSR is explained in
greater detail in Section 6.8.

DS30412C-page 32                                              1996 Microchip Technology Inc.
                                                                         PIC17C4X

FIGURE 6-5: PIC17C42 REGISTER FILE                        FIGURE 6-6: PIC17CR42/42A/43/R43/44
                     MAP                                                       REGISTER FILE MAP

Addr Unbanked                                             Addr Unbanked

00h  INDF0                                                00h  INDF0

01h  FSR0                                                 01h  FSR0

02h  PCL                                                  02h  PCL

03h PCLATH                                                03h PCLATH

04h ALUSTA                                                04h ALUSTA

05h  T0STA                                                05h  T0STA

06h CPUSTA                                                06h CPUSTA

07h INTSTA                                                07h INTSTA

08h  INDF1                                                08h  INDF1

09h  FSR1                                                 09h  FSR1

0Ah WREG                                                  0Ah WREG

0Bh   TMR0L                                               0Bh TMR0L
0Ch   TMR0H
0Dh  TBLPTRL                                              0Ch TMR0H
0Eh  TBLPTRH
0Fh                                                       0Dh TBLPTRL
        BSR
                                                          0Eh TBLPTRH
      Bank 0
                                                          0Fh  BSR

               Bank 1 (1)         Bank 2 (1)  Bank 3 (1)       Bank 0 Bank 1 (1) Bank 2 (1) Bank 3 (1)

10h PORTA      DDRC               TMR1        PW1DCL      10h  PORTA     DDRC     TMR1       PW1DCL
                                  TMR2        PW2DCL                              TMR2       PW2DCL
11h  DDRB      PORTC                                      11h  DDRB      PORTC

12h PORTB      DDRD               TMR3L PW1DCH            12h PORTB      DDRD        TMR3L   PW1DCH
                                                                         PORTD       TMR3H   PW2DCH
13h  RCSTA     PORTD              TMR3H PW2DCH            13h  RCSTA     DDRE
                                                                         PORTE         PR1     CA2L
14h RCREG      DDRE               PR1         CA2L        14h RCREG                    PR2     CA2H
                                                                           PIR    PR3L/CA1L   TCON1
15h  TXSTA     PORTE              PR2         CA2H        15h  TXSTA       PIE    PR3H/CA1H   TCON2

16h TXREG      PIR                PR3L/CA1L TCON1         16h TXREG

17h SPBRG      PIE                PR3H/CA1H TCON2         17h SPBRG

18h                                                       18h PRODL

                                                          19h PRODH

1Fh  General                                              1Ah
     Purpose
20h

     RAM                                                  1Fh

                                                          20h  General
                                                               Purpose
FFh                                                            RAM (2)   General
                                                                         Purpose
Note 1: SFR file locations 10h - 17h are banked. All                     RAM (2)
            other SFRs ignore the Bank Select Register
            (BSR) bits.                                   FFh

                                                          Note 1: SFR file locations 10h - 17h are banked. All
                                                                      other SFRs ignore the Bank Select Register
                                                                      (BSR) bits.

                                                                 2: General Purpose Registers (GPR) locations
                                                                      20h - FFh and 120h - 1FFh are banked. All
                                                                      other GPRs ignore the Bank Select Register
                                                                      (BSR) bits.

1996 Microchip Technology Inc.                                                  DS30412C-page 33
PIC17C4X

TABLE 6-3: SPECIAL FUNCTION REGISTERS

Address Name        Bit 7  Bit 6              Bit 5    Bit 4     Bit 3  Bit 2               Bit 1  Bit 0  Value on   Value on all
                                                                                                          Power-on       other

                                                                                                            Reset     resets (3)

Unbanked            Uses contents of FSR0 to address data memory (not a physical register)                ---- ----  ---- ----
  00h INDF0                                                                                               xxxx xxxx  uuuu uuuu
  01h FSR0          Indirect data memory address pointer 0                                                0000 0000  0000 0000
  02h PCL                                                                                                 0000 0000  uuuu uuuu
  03h(1) PCLATH     Low order 8-bits of PC
  04h ALUSTA
  05h T0STA         Holding register for upper 8-bits of PC

                    FS3    FS2                FS1      FS0       OV     Z                   DC     C      1111 xxxx 1111 uuuu

                    INTEDG T0SE              T0CS      PS3       PS2    PS1                 PS0    --     0000 000- 0000 000-

06h(2)     CPUSTA   --     --               STKAV GLINTD         TO     PD                  --      --    --11 11-- --11 qq--
07h        INTSTA                                                                                  INTE
08h        INDF1    PEIF T0CKIF T0IF                   INTF      PEIE T0CKIE                T0IE          0000 0000  0000 0000
09h        FSR1                                                                                           ---- ----  ---- ----
0Ah        WREG     Uses contents of FSR1 to address data memory (not a physical register)                xxxx xxxx  uuuu uuuu
0Bh        TMR0L                                                                                          xxxx xxxx  uuuu uuuu
0Ch        TMR0H    Indirect data memory address pointer 1                                                xxxx xxxx  uuuu uuuu
0Dh        TBLPTRL                                                                                        xxxx xxxx  uuuu uuuu
0Eh        TBLPTRH  Working register
0Fh        BSR                                                                                                 (4)        (4)
                    TMR0 register; low byte                                                                    (4)        (4)
                                                                                                          0000 0000  0000 0000
                    TMR0 register; high byte

                    Low byte of program memory table pointer

                    High byte of program memory table pointer

                    Bank select register

Bank 0

10h PORTA           RBPU   --                 RA5      RA4       RA3     RA2   RA1/T0CKI RA0/INT          0-xx xxxx  0-uu uuuu
11h DDRB                                                                                                  1111 1111  1111 1111
12h PORTB           Data direction register for PORTB             --    FERR                              xxxx xxxx  uuuu uuuu
13h RCSTA                                                         --      --                              0000 -00x  0000 -00u
14h RCREG           PORTB data latch                                                                      xxxx xxxx  uuuu uuuu
15h TXSTA                                                                                                 0000 --1x  0000 --1u
16h TXREG           SPEN RX9                 SREN      CREN                                 OERR   RX9D   xxxx xxxx  uuuu uuuu
17h SPBRG                                                                                   TRMT   TX9D   xxxx xxxx  uuuu uuuu
                    Serial port receive register

                    CSRC TX9                 TXEN      SYNC

                    Serial port transmit register

                    Baud rate generator register

Bank 1              Data direction register for PORTC                                                     1111 1111 1111 1111
   10h DDRC                                                                                               xxxx xxxx uuuu uuuu
   11h PORTC        RC7/   RC6/              RC5/      RC4/      RC3/   RC2/                RC1/   RC0/   1111 1111 1111 1111
   12h DDRD         AD7    AD6               AD5       AD4       AD3    AD2                 AD1    AD0    xxxx xxxx uuuu uuuu
   13h PORTD                                                                                              ---- -111 ---- -111
   14h DDRE         Data direction register for PORTD  RD4/      RD3/   RD2/                RD1/   RD0/
                                                       AD12      AD11   AD10                AD9    AD8
                    RD7/   RD6/              RD5/
                    AD15   AD14              AD13

                    Data direction register for PORTE

   15h     PORTE    --     --                 --             --  --     RE2/WR RE1/OE RE0/ALE ---- -xxx ---- -uuu
   16h
   17h     PIR      RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF                                   TXIF   RCIF 0000 0010 0000 0010
Legend:
Note 1:    PIE      RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE                                   TXIE   RCIE 0000 0000 0000 0000

       2:  x = unknown, u = unchanged, - = unimplemented read as '0', q - value depends on condition. Shaded cells are unimplemented, read as '0'.
       3:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for PC<15:8> whose contents are updated
       4:  from or transferred to the upper byte of the program counter.
           The TO and PD status bits in CPUSTA are not affected by a MCLR reset.
       5:  Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.
           The following values are for both TBLPTRL and TBLPTRH:
           All PIC17C4X devices (Power-on Reset 0000 0000) and (All other resets 0000 0000)
           except the PIC17C42 (Power-on Reset xxxx xxxx) and (All other resets uuuu uuuu)
           The PRODL and PRODH registers are not implemented on the PIC17C42.

DS30412C-page 34                                                                                    1996 Microchip Technology Inc.
                                                                                                     PIC17C4X

TABLE 6-3: SPECIAL FUNCTION REGISTERS (Cont.'d)

Address Name          Bit 7       Bit 6   Bit 5  Bit 4   Bit 3                        Bit 2  Bit 1   Bit 0   Value on   Value on all
                                                                                                             Power-on       other

                                                                                                               Reset     resets (3)

Bank 2     TMR1       Timer1                                                                                 xxxx xxxx  uuuu uuuu
   10h     TMR2       Timer2                                                                                 xxxx xxxx  uuuu uuuu
   11h     TMR3L      TMR3 register; low byte                                                                xxxx xxxx  uuuu uuuu
   12h     TMR3H      TMR3 register; high byte                                                               xxxx xxxx  uuuu uuuu
   13h     PR1        Timer1 period register                                                                 xxxx xxxx  uuuu uuuu
   14h     PR2        Timer2 period register                                                                 xxxx xxxx  uuuu uuuu
   15h     PR3L/CA1L  Timer3 period register, low byte/capture1 register; low byte                           xxxx xxxx  uuuu uuuu
   16h     PR3H/CA1H  Timer3 period register, high byte/capture1 register; high byte                         xxxx xxxx  uuuu uuuu
   17h

Bank 3     PW1DCL     DC1         DC0     --         --   --                     --              --      --  xx-- ----  uu-- ----
   10h     PW2DCL                                    --   --                     --              --      --  xx0- ----  uu0- ----
   11h     PW1DCH     DC1         DC0 TM2PW2       DC6   DC5                    DC4             DC3     DC2  xxxx xxxx  uuuu uuuu
   12h     PW2DCH                                  DC6   DC5                    DC4             DC3     DC2  xxxx xxxx  uuuu uuuu
   13h     CA2L       DC9         DC8     DC7                                                                xxxx xxxx  uuuu uuuu
   14h     CA2H                                  CA1ED0  T16                 TMR3CS          TMR2CS  TMR1CS  xxxx xxxx  uuuu uuuu
   15h     TCON1      DC9         DC8     DC7                                                                0000 0000  0000 0000
   16h
                      Capture2 low byte

                      Capture2 high byte

                      CA2ED1 CA2ED0 CA1ED1

17h TCON2             CA2OVF CA1OVF PWM2ON PWM1ON CA1/PR3 TMR3ON TMR2ON TMR1ON 0000 0000 0000 0000

Unbanked

18h (5) PRODL         Low Byte of 16-bit Product (8 x 8 Hardware Multiply)                                   xxxx xxxx uuuu uuuu

19h (5) PRODH         High Byte of 16-bit Product (8 x 8 Hardware Multiply)                                  xxxx xxxx uuuu uuuu

Legend:    x = unknown, u = unchanged, - = unimplemented read as '0', q - value depends on condition. Shaded cells are unimplemented, read as '0'.
Note 1:    The upper byte of the program counter is not directly accessible. PCLATH is a holding register for PC<15:8> whose contents are updated
           from or transferred to the upper byte of the program counter.
       2:  The TO and PD status bits in CPUSTA are not affected by a MCLR reset.
       3:  Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.
       4:  The following values are for both TBLPTRL and TBLPTRH:
           All PIC17C4X devices (Power-on Reset 0000 0000) and (All other resets 0000 0000)
       5:  except the PIC17C42 (Power-on Reset xxxx xxxx) and (All other resets uuuu uuuu)
           The PRODL and PRODH registers are not implemented on the PIC17C42.

1996 Microchip Technology Inc.                                                                             DS30412C-page 35
PIC17C4X

6.2.2.1 ALU STATUS REGISTER (ALUSTA)                         It is recommended, therefore, that only BCF, BSF, SWAPF
                                                             and MOVWF instructions be used to alter the ALUSTA
The ALUSTA register contains the status bits of the          register because these instructions do not affect any
Arithmetic and Logic Unit and the mode control bits for      status bit. To see how other instructions affect the sta-
the indirect addressing register.                            tus bits, see the "Instruction Set Summary."

As with all the other registers, the ALUSTA register can         Note 1: The C and DC bits operate as a borrow
be the destination for any instruction. If the ALUSTA                        out bit in subtraction. See the SUBLW and
register is the destination for an instruction that affects                  SUBWF instructions for examples.
the Z, DC or C bits, then the write to these three bits is
disabled. These bits are set or cleared according to the         Note 2: The overflow bit will be set if the 2's com-
device logic. Therefore, the result of an instruction with                   plement result exceeds +127 or is less
the ALUSTA register as destination may be different                          than -128.
than intended.
                                                             Arithmetic and Logic Unit (ALU) is capable of carrying
For example, CLRF ALUSTA will clear the upper four bits      out arithmetic or logical operations on two operands or
and set the Z bit. This leaves the ALUSTA register as        a single operand. All single operand instructions oper-
0000u1uu (where u = unchanged).                              ate either on the WREG register or a file register. For
                                                             two operand instructions, one of the operands is the
                                                             WREG register and the other one is either a file register
                                                             or an 8-bit immediate constant.

FIGURE 6-7: ALUSTA REGISTER (ADDRESS: 04h, UNBANKED)

R/W - 1 R/W - 1 R/W - 1 R/W - 1 R/W - x        R/W - x       R/W - x R/W - x
                                                  Z
FS3 FS2 FS1 FS0   OV                                         DC              C     R = Readable bit
                                                                                   W = Writable bit
bit7                                                                         bit0  -n = Value at POR reset

                                                                                        (x = unknown)

bit 7-6:  FS3:FS2: FSR1 Mode Select bits
          00 = Post auto-decrement FSR1 value
          01 = Post auto-increment FSR1 value
          1x = FSR1 value does not change

bit 5-4:  FS1:FS0: FSR0 Mode Select bits
          00 = Post auto-decrement FSR0 value
          01 = Post auto-increment FSR0 value
          1x = FSR0 value does not change

bit 3:    OV: Overflow bit
          This bit is used for signed arithmetic (2's complement). It indicates an overflow of the 7-bit magnitude,
          which causes the sign bit (bit7) to change state.
          1 = Overflow occurred for signed arithmetic, (in this arithmetic operation)
          0 = No overflow occurred

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

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

bit 0:    C: carry/borrow bit
          For ADDWF and ADDLW instructions.
          1 = A carry-out from the most significant bit of the result occurred
          Note that a subtraction is executed by adding the two's complement of the second operand. For rotate
          (RRCF, RLCF) instructions, this bit is loaded with either the high or low order bit of the source register.
          0 = No carry-out from the most significant bit of the result
          Note: For borrow the polarity is reversed.

DS30412C-page 36                                                                   1996 Microchip Technology Inc.
                                                                               PIC17C4X

6.2.2.2 CPU STATUS REGISTER (CPUSTA)

The CPUSTA register contains the status and control
bits for the CPU. This register is used to globally
enable/disable interrupts. If only a specific interrupt is
desired to be enabled/disabled, please refer to the
INTerrupt STAtus (INTSTA) register and the Peripheral
Interrupt Enable (PIE) register. This register also indi-
cates if the stack is available and contains the
Power-down (PD) and Time-out (TO) bits. The TO, PD,
and STKAV bits are not writable. These bits are set and
cleared according to device logic. Therefore, the result
of an instruction with the CPUSTA register as destina-
tion may be different than intended.

FIGURE 6-8: CPUSTA REGISTER (ADDRESS: 06h, UNBANKED)

  U-0   U - 0 R - 1 R/W - 1 R - 1                           R-1  U-0  U-0      R = Readable bit
    --   -- STKAV GLINTD TO                                  PD   --   --      W = Writable bit
                                                                               U = Unimplemented bit,
bit7                                                                     bit0
                                                                                    Read as `0'
                                                                               - n = Value at POR reset

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

bit 5:  STKAV: Stack Available bit
        This bit indicates that the 4-bit stack pointer value is Fh, or has rolled over from Fh  0h (stack overflow).
        1 = Stack is available
        0 = Stack is full, or a stack overflow may have occurred (Once this bit has been cleared by a

            stack overflow, only a device reset will set this bit)

bit 4:  GLINTD: Global Interrupt Disable bit
        This bit disables all interrupts. When enabling interrupts, only the sources with their enable bits set can
        cause an interrupt.
        1 = Disable all interrupts
        0 = Enables all un-masked interrupts

bit 3:  TO: WDT Time-out Status bit
        1 = After power-up or by a CLRWDT instruction
        0 = A Watchdog Timer time-out occurred

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

bit 1-0: Unimplemented: Read as '0'

1996 Microchip Technology Inc.                                               DS30412C-page 37
PIC17C4X

6.2.2.3 TMR0 STATUS/CONTROL REGISTER
               (T0STA)

This register contains various control bits. Bit7
(INTEDG) is used to control the edge upon which a sig-
nal on the RA0/INT pin will set the RB0/INT interrupt
flag. The other bits configure the Timer0 prescaler and
clock source. (Figure 11-1).

FIGURE 6-9: T0STA REGISTER (ADDRESS: 05h, UNBANKED)

R/W - 0  R/W - 0  R/W - 0  R/W - 0  R/W - 0              R/W - 0  R/W - 0  U-0       R = Readable bit
INTEDG    T0SE     T0CS      PS3      PS2                  PS1      PS0     --       W = Writable bit
                                                                                     U = Unimplemented,
bit7                                                                           bit0
                                                                                          reads as `0'
                                                                                     -n = Value at POR reset

bit 7:   INTEDG: RA0/INT Pin Interrupt Edge Select bit
         This bit selects the edge upon which the interrupt is detected.
         1 = Rising edge of RA0/INT pin generates interrupt
         0 = Falling edge of RA0/INT pin generates interrupt

bit 6:   T0SE: Timer0 Clock Input Edge Select bit
         This bit selects the edge upon which TMR0 will increment.
         When T0CS = 0
         1 = Rising edge of RA1/T0CKI pin increments TMR0 and/or generates a T0CKIF interrupt
         0 = Falling edge of RA1/T0CKI pin increments TMR0 and/or generates a T0CKIF interrupt
         When T0CS = 1
         Don't care

bit 5:   T0CS: Timer0 Clock Source Select bit
         This bit selects the clock source for Timer0.
         1 = Internal instruction clock cycle (TCY)
         0 = T0CKI pin

bit 4-1: PS3:PS0: Timer0 Prescale Selection bits
            These bits select the prescale value for Timer0.

         PS3:PS0  Prescale Value

         0000               1:1
         0001               1:2
         0010               1:4
         0011               1:8
         0100              1:16
         0101              1:32
         0110              1:64
         0111              1:128
         1xxx              1:256

bit 0: Unimplemented: Read as '0'

DS30412C-page 38                                                                      1996 Microchip Technology Inc.
                                                                                  PIC17C4X

6.3 Stack Operation                                            6.4 Indirect Addressing

The PIC17C4X devices have a 16 x 16-bit wide hard-             Indirect addressing is a mode of addressing data
ware stack (Figure 6-1). The stack is not part of either       memory where the data memory address in the
the program or data memory space, and the stack                instruction is not fixed. That is, the register that is to be
pointer is neither readable nor writable. The PC is            read or written can be modified by the program. This
"PUSHed" onto the stack when a CALL instruction is             can be useful for data tables in the data memory.
executed or an interrupt is acknowledged. The stack is         Figure 6-10 shows the operation of indirect address-
"POPed" in the event of a RETURN, RETLW, or a RETFIE           ing. This shows the moving of the value to the data
instruction execution. PCLATH is not affected by a             memory address specified by the value of the FSR
"PUSH" or a "POP" operation.                                   register.

The stack operates as a circular buffer, with the stack        Example 6-1 shows the use of indirect addressing to
pointer initialized to '0' after all resets. There is a stack  clear RAM in a minimum number of instructions. A
available bit (STKAV) to allow software to ensure that         similar concept could be used to move a defined num-
the stack has not overflowed. The STKAV bit is set after       ber of bytes (block) of data to the USART transmit reg-
a device reset. When the stack pointer equals Fh,              ister (TXREG). The starting address of the block of
STKAV is cleared. When the stack pointer rolls over            data to be transmitted could easily be modified by the
from Fh to 0h, the STKAV bit will be held clear until a        program.
device reset.
                                                               FIGURE 6-10: INDIRECT ADDRESSING
    Note 1: There is not a status bit for stack under-
                flow. The STKAV bit can be used to detect                                                       RAM
                the underflow which results in the stack
                pointer being at the top of stack.             Instruction        Address
                                                               Executed                      File = INDFx
    Note 2: There are no instruction mnemonics
                called PUSH or POP. These are actions                     Opcode  File                     FSR
                that occur from the execution of the CALL,
                RETURN, RETLW, and RETFIE instruc-              Instruction
                tions, or the vectoring to an interrupt vec-    Fetched
                tor.
                                                                          Opcode
    Note 3: After a reset, if a "POP" operation occurs
                before a "PUSH" operation, the STKAV bit
                will be cleared. This will appear as if the
                stack is full (underflow has occurred). If a
                "PUSH" operation occurs next (before
                another "POP"), the STKAV bit will be
                locked clear. Only a device reset will
                cause this bit to set.

After the device is "PUSHed" sixteen times (without a
"POP"), the seventeenth push overwrites the value
from the first push. The eighteenth push overwrites the
second push (and so on).

1996 Microchip Technology Inc.                                                        DS30412C-page 39
PIC17C4X                                                     A simple program to clear RAM from 20h - FFh is
                                                             shown in Example 6-1.
6.4.1 INDIRECT ADDRESSING REGISTERS
                                                             EXAMPLE 6-1: INDIRECT ADDRESSING
The PIC17C4X has four registers for indirect address-
ing. These registers are:                                           MOVLW   0x20         ;
                                                                    MOVWF   FSR0         ; FSR0 = 20h
INDF0 and FSR0                                                    BCF     ALUSTA, FS1  ; Increment FSR
INDF1 and FSR1                                                    BSF     ALUSTA, FS0  ; after access
                                                                    BCF     ALUSTA, C    ;C=0
Registers INDF0 and INDF1 are not physically imple-                 MOVLW   END_RAM + 1  ;
mented. Reading or writing to these registers activates      LP CLRF        INDF0        ; Addr(FSR) = 0
indirect addressing, with the value in the correspond-              CPFSEQ  FSR0         ; FSR0 = END_RAM+1?
ing FSR register being the address of the data. The                 GOTO    LP           ; NO, clear next
FSR is an 8-bit register and allows addressing any-                 :                    ; YES, All RAM is
where in the 256-byte data memory address range.                    :                    ; cleared
For banked memory, the bank of memory accessed is
specified by the value in the BSR.                           6.5 Table Pointer (TBLPTRL and
                                                                       TBLPTRH)
If file INDF0 (or INDF1) itself is read indirectly via an
FSR, all '0's are read (Zero bit is set). Similarly, if      File registers TBLPTRL and TBLPTRH form a 16-bit
INDF0 (or INDF1) is written to indirectly, the operation     pointer to address the 64K program memory space.
will be equivalent to a NOP, and the status bits are not     The table pointer is used by instructions TABLWT and
affected.                                                    TABLRD.

6.4.2 INDIRECT ADDRESSING OPERATION                          The TABLRD and the TABLWT instructions allow trans-
                                                             fer of data between program and data space. The table
The indirect addressing capability has been enhanced         pointer serves as the 16-bit address of the data word
over that of the PIC16CXX family. There are two con-         within the program memory. For a more complete
trol bits associated with each FSR register. These two       description of these registers and the operation of Table
bits configure the FSR register to:                          Reads and Table Writes, see Section 7.0.

Auto-decrement the value (address) in the FSR              6.6 Table Latch (TBLATH, TBLATL)
   after an indirect access
                                                             The table latch (TBLAT) is a 16-bit register, with
Auto-increment the value (address) in the FSR              TBLATH and TBLATL referring to the high and low
   after an indirect access                                  bytes of the register. It is not mapped into data or pro-
                                                             gram memory. The table latch is used as a temporary
No change to the value (address) in the FSR after          holding latch during data transfer between program and
   an indirect access                                        data memory (see descriptions of instructions TABLRD,
                                                             TABLWT, TLRD and TLWT). For a more complete
These control bits are located in the ALUSTA register.       description of these registers and the operation of Table
The FSR1 register is controlled by the FS3:FS2 bits          Reads and Table Writes, see Section 7.0.
and FSR0 is controlled by the FS1:FS0 bits.

When using the auto-increment or auto-decrement
features, the effect on the FSR is not reflected in the
ALUSTA register. For example, if the indirect address
causes the FSR to equal '0', the Z bit will not be set.

If the FSR register contains a value of 0h, an indirect
read will read 0h (Zero bit is set) while an indirect write
will be equivalent to a NOP (status bits are not
affected).

Indirect addressing allows single cycle data transfers
within the entire data space. This is possible with the
use of the MOVPF and MOVFP instructions, where either
'p' or 'f' is specified as INDF0 (or INDF1).

If the source or destination of the indirect address is in
banked memory, the location accessed will be deter-
mined by the value in the BSR.

DS30412C-page 40                                                             1996 Microchip Technology Inc.
6.7 Program Counter Module                                              PIC17C4X

The Program Counter (PC) is a 16-bit register. PCL, the  Using Figure 6-11, the operations of the PC and
low byte of the PC, is mapped in the data memory. PCL    PCLATH for different instructions are as follows:
is readable and writable just as is any other register.
PCH is the high byte of the PC and is not directly       a) LCALL instructions:
addressable. Since PCH is not mapped in data or pro-           An 8-bit destination address is provided in the
gram memory, an 8-bit register PCLATH (PC high latch)          instruction (opcode). PCLATH is unchanged.
is used as a holding latch for the high byte of the PC.        PCLATH  PCH
PCLATH is mapped into data memory. The user can                Opcode<7:0>  PCL
read or write PCH through PCLATH.
                                                         b) Read instructions on PCL:
The 16-bit wide PC is incremented after each instruc-          Any instruction that reads PCL.
tion fetch during Q1 unless:                                   PCL  data bus  ALU or destination
                                                               PCH  PCLATH
Modified by GOTO, CALL, LCALL, RETURN, RETLW,
   or RETFIE instruction                                 c) Write instructions on PCL:
                                                               Any instruction that writes to PCL.
Modified by an interrupt response                            8-bit data  data bus  PCL
Due to destination write to PCL by an instruction            PCLATH  PCH

"Skips" are equivalent to a forced NOP cycle at the      d) Read-Modify-Write instructions on PCL:
skipped address.                                               Any instruction that does a read-write-modify
                                                               operation on PCL, such as ADDWF PCL.
Figure 6-11 and Figure 6-12 show the operation of the          Read: PCL  data bus  ALU
program counter for various situations.                        Write: 8-bit result  data bus  PCL
                                                                           PCLATH  PCH
FIGURE 6-11: PROGRAM COUNTER
                     OPERATION                           e) RETURN instruction:
                                                               PCH  PCLATH
                          Internal data bus <8>                Stack  PC<15:0>

                    8                                    Using Figure 6-12, the operation of the PC and
                                                         PCLATH for GOTO and CALL instructions is a follows:
               PCLATH             8
                                                               CALL, GOTO instructions:
                      8                                        A 13-bit destination address is provided in the
                 PCH PCL                                       instruction (opcode).
                                                               Opcode<12:0>  PC <12:0>
FIGURE 6-12: PROGRAM COUNTER USING                             PC<15:13>  PCLATH<7:5>
                     THE CALL AND GOTO                         Opcode<12:8>  PCLATH <4:0>
                     INSTRUCTIONS
                                                         The read-modify-write only affects the PCL with the
15 13 12 8 7                            0                result. PCH is loaded with the value in the PCLATH.
                                                         For example, ADDWF PCL will result in a jump within the
                       Opcode                            current page. If PC = 03F0h, WREG = 30h and
                                                         PCLATH = 03h before instruction, PC = 0320h after the
Last write                                               instruction. To accomplish a true 16-bit computed jump,
                                                         the user needs to compute the 16-bit destination
to PCLATH        5                                       address, write the high byte to PCLATH and then write
                                                         the low value to PCL.
    3
                                                         The following PC related operations do not change
7 54                0                8                   PCLATH:

            PCLATH                                       a) LCALL, RETLW, and RETFIE instructions.
                                                         b) Interrupt vector is forced onto the PC.
            8                                            c) Read-modify-write instructions on PCL (e.g.BSF

15                  87                  0                      PCL).

            PCH                   PCL

1996 Microchip Technology Inc.                         DS30412C-page 41
PIC17C4X

6.8 Bank Select Register (BSR)                                 For the PIC17C43, PIC17CR43, and PIC17C44
                                                               devices, the need for a large general purpose memory
The BSR is used to switch between banks in the data            space dictated a general purpose RAM banking
memory area (Figure 6-13). In the PIC17C42,                    scheme. The upper nibble of the BSR selects the cur-
PIC17CR42, and PIC17C42A only the lower nibble is              rently active general purpose RAM bank. To assist this,
implemented. While in the PIC17C43, PIC17CR43,                 a MOVLR bank instruction has been provided in the
and PIC17C44 devices, the entire byte is implemented.          instruction set.
The lower nibble is used to select the peripheral regis-
ter bank. The upper nibble is used to select the general       If the currently selected bank is not implemented (such
purpose memory bank.                                           as Bank 13), any read will read all '0's. Any write is com-
                                                               pleted to the bit bucket and the ALU status bits will be
All the Special Function Registers (SFRs) are mapped           set/cleared as appropriate.
into the data memory space. In order to accommodate
the large number of registers, a banking scheme has            Note:    Registers in Bank 15 in the Special Func-
been used. A segment of the SFRs, from address 10h                      tion Register area, are reserved for
to address 17h, is banked. The lower nibble of the bank                 Microchip use. Reading of registers in this
select register (BSR) selects the currently active                      bank may cause random values to be read.
"peripheral bank." Effort has been made to group the
peripheral registers of related functionality in one bank.
However, it will still be necessary to switch from bank
to bank in order to address all peripherals related to a
single task. To assist this, a MOVLB bank instruction is
in the instruction set.

FIGURE 6-13: BSR OPERATION (PIC17C43/R43/44)

     BSR

     7 43 0

         (2)      (1)

Address                0  1  2                              3  4             15
Range
                                                                                      SFR
10h
17h                                                                               Banks

                       Bank 0 Bank 1 Bank 2 Bank 3 Bank 4                    Bank 15

                       0  1  2                                                  15
                                                                             Bank 15
20h                                                                                   GPR
                                                                                      Banks
                                                               

FFh

                       Bank 0 Bank 1 Bank 2

Note 1: Only Banks 0 through Bank 3 are implemented. Selection of an unimplemented bank is not recommended.
             Bank 15 is reserved for Microchip use, reading of registers in this bank may cause random values to be read.

        2: Only Banks 0 and Bank 1 are implemented. Selection of an unimplemented bank is not recommended.

DS30412C-page 42                                                             1996 Microchip Technology Inc.
                                                                                     PIC17C4X

7.0 TABLE READS AND TABLE                                FIGURE 7-2: TABLWT INSTRUCTION
         WRITES                                                               OPERATION

The PIC17C4X has four instructions that allow the pro-   TABLE POINTER               TBLPTRL
cessor to move data from the data memory space to                  TBLPTRH
the program memory space, and vice versa. Since the
program memory space is 16-bits wide and the data        TABLE LATCH (16-bit)
memory space is 8-bits wide, two operations are                     TABLATH TABLATL
required to move 16-bit values to/from the data mem-
ory.                                                                       3                               3
                                                               TABLWT 1,i,f                     TABLWT 0,i,f
The TLWT t,f and TABLWT t,i,f instructions are
used to write data from the data memory space to the       DATA                                   PROGRAM MEMORY
program memory space. The TLRD t,f and TABLRD            MEMORY
t,i,f instructions are used to write data from the pro-
gram memory space to the data memory space.              f

The program memory can be internal or external. For                 1
the program memory access to be external, the device
needs to be operating in extended microcontroller or                                 Prog-Mem
microprocessor mode.                                                                 (TBLPTR)

Figure 7-1 through Figure 7-4 show the operation of                                          2
these four instructions.

FIGURE 7-1: TLWT INSTRUCTION
                     OPERATION

TABLE POINTER           TBLPTRL
          TBLPTRH

TABLE LATCH (16-bit)

              TABLATH TABLATL                            Note 1: 8-bit value, from register 'f', loaded into
                                                                     the high or low byte in TABLAT (16-bit).
              TLWT 1,f  TLWT 0,f
                         PROGRAM MEMORY                         2: 16-bit TABLAT value written to address
  DATA                                                               Program Memory (TBLPTR).
MEMORY
                                                                3: If "i" = 1, then TBLPTR = TBLPTR + 1,
                                                                     If "i" = 0, then TBLPTR is unchanged.

f

           1

Note 1: 8-bit value, from register 'f', loaded into the
            high or low byte in TABLAT (16-bit).

1996 Microchip Technology Inc.                                                                DS30412C-page 43

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

FIGURE 7-3: TLRD INSTRUCTION                       FIGURE 7-4: TABLRD INSTRUCTION
                     OPERATION                                          OPERATION

TABLE POINTER        TBLPTRL                       TABLE POINTER      TBLPTRL
            TBLPTRH                                          TBLPTRH

TABLE LATCH (16-bit)                               TABLE LATCH (16-bit)
           TABLATH TABLATL
                                                                 TABLATH TABLATL

TLRD 1,f             TLRD 0,f

  DATA               PROGRAM MEMORY                                3                         3
MEMORY                                                  TABLRD 1,i,f             TABLRD 0,i,f

                                                     DATA                         PROGRAM MEMORY
                                                   MEMORY

f

           1

                                                   f

                                                              1

                                                                      Prog-Mem
                                                                      (TBLPTR)

                                                                              2

Note 1: 8-bit value, from TABLAT (16-bit) high or  Note 1: 8-bit value, from TABLAT (16-bit) high or
            low byte, loaded into register 'f'.                low byte, loaded into register 'f'.

                                                          2: 16-bit value at Program Memory (TBLPTR)
                                                               loaded into TABLAT register.

                                                          3: If "i" = 1, then TBLPTR = TBLPTR + 1,
                                                               If "i" = 0, then TBLPTR is unchanged.

DS30412C-page 44                                                       1996 Microchip Technology Inc.
7.1 Table Writes to Internal Memory                                              PIC17C4X

A table write operation to internal memory causes a               7.1.1 TERMINATING LONG WRITES
long write operation. The long write is necessary for
programming the internal EPROM. Instruction execu-                An interrupt source or reset are the only events that
tion is halted while in a long write cycle. The long write        terminate a long write operation. Terminating the long
will be terminated by any enabled interrupt. To ensure            write from an interrupt source requires that the inter-
that the EPROM location has been well programmed,                 rupt enable and flag bits are set. The GLINTD bit only
a minimum programming time is required (see specifi-              enables the vectoring to the interrupt address.
cation #D114 ). Having only one interrupt enabled to
terminate the long write ensures that no unintentional            If the T0CKI, RA0/INT, or TMR0 interrupt source is
interrupts will prematurely terminate the long write.             used to terminate the long write; the interrupt flag, of
                                                                  the highest priority enabled interrupt, will terminate the
The sequence of events for programming an internal                long write and automatically be cleared.
program memory location should be:
                                                                       Note 1: If an interrupt is pending, the TABLWT is
1. Disable all interrupt sources, except the source                                aborted (an NOP is executed). The
      to terminate EPROM program write.                                            highest priority pending interrupt, from
                                                                                   the T0CKI, RA0/INT, or TMR0 sources
2. Raise MCLR/VPP pin to the programming volt-                                     that is enabled, has its flag cleared.
      age.
                                                                       Note 2: If the interrupt is not being used for the
3. Clear the WDT.                                                                  program write timing, the interrupt
4. Do the table write. The interrupt will terminate                                should be disabled. This will ensure that
                                                                                   the interrupt is not lost, nor will it termi-
      the long write.                                                              nate the long write prematurely.
5. Verify the memory location (table read).
                                                                  If a peripheral interrupt source is used to terminate the
Note:  Programming requirements must be met.                      long write, the interrupt enable and flag bits must be
       See timing specification in electrical spec-               set. The interrupt flag will not be automatically cleared
       ifications for the desired device. Violating               upon the vectoring to the interrupt vector address.
       these specifications (including tempera-
       ture) may result in EPROM locations that                   If the GLINTD bit is cleared prior to the long write,
       are not fully programmed and may lose                      when the long write is terminated, the program will
       their state over time.                                     branch to the interrupt vector.

                                                                  If the GLINTD bit is set prior to the long write, when
                                                                  the long write is terminated, the program will not vector
                                                                  to the interrupt address.

TABLE 7-1: INTERRUPT - TABLE WRITE INTERACTION

     Interrupt  GLINTD            Enable                    Flag                               Action
      Source                        Bit                      Bit
                    0                                             Terminate long table write (to internal program
RA0/INT, TMR0,                        1                       1   memory), branch to interrupt vector (branch clears
T0CKI               0                                             flag bit).
                    1                 1                       0   None
                    1                 0                       x   None
                                      1                       1   Terminate table write, do not branch to interrupt
Peripheral      0                                                 vector (flag is automatically cleared).
                                      1                       1
                0                     1                       0   Terminate table write, branch to interrupt vector.
                                      0                       x   None
                1                     1                       1   None
                                                                  Terminate table write, do not branch to interrupt
                1                                                 vector (flag is set).

1996 Microchip Technology Inc.                                  DS30412C-page 45
PIC17C4X

7.2 Table Writes to External Memory                          7.2.2 TABLE WRITE CODE

Table writes to external memory are always two-cycle         The "i" operand of the TABLWT instruction can specify
instructions. The second cycle writes the data to the        that the value in the 16-bit TBLPTR register is auto-
external memory location. The sequence of events for         matically incremented for the next write. In
an external memory write are the same for an internal        Example 7-1, the TBLPTR register is not automatically
write.                                                       incremented.

                                                             EXAMPLE 7-1: TABLE WRITE

Note:  If an interrupt is pending or occurs during           CLRWDT                         ; Clear WDT
       the TABLWT, the two cycle table write                 MOVLW
       completes. The RA0/INT, TMR0, or T0CKI                MOVWF   HIGH (TBL_ADDR) ; Load the Table
       interrupt flag is automatically cleared or            MOVLW
       the pending peripheral interrupt is                   MOVWF   TBLPTRH                ; address
       acknowledged.                                         MOVLW
                                                             TLWT    LOW (TBL_ADDR) ;
                                                             MOVLW
                                                             TABLWT  TBLPTRL                ;

                                                                     HIGH (DATA)            ; Load HI byte

                                                                     1, WREG                ; in TABLATCH

                                                                     LOW (DATA)             ; Load LO byte

                                                                     0,0,WREG               ; in TABLATCH

                                                                                            ; and write to

                                                                                            ; program memory

                                                                                            ; (Ext. SRAM)

FIGURE 7-5: TABLWT WRITE TIMING (EXTERNAL MEMORY)

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

       AD15:AD0                    PC               PC+1     TBL     Data out PC+2

       Instruction                 TABLWT       INST (PC+1)                                 INST (PC+2)
       fetched                                                                              INST (PC+1)
                                   INST (PC-1)  TABLWT cycle1 TABLWT cycle2
       Instruction                                                        Data write cycle
       executed

                  ALE

                   OE

                              '1'
                  WR

Note: If external write GLINTD = '1', Enable bit = '1', '1'  Flag bit, Do table write. The highest pending interrupt is cleared.

DS30412C-page 46                                                                            1996 Microchip Technology Inc.
                                                                          PIC17C4X

FIGURE 7-6: CONSECUTIVE TABLWT WRITE TIMING (EXTERNAL MEMORY)

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

AD15:AD0      PC                  PC+1     TBL1 Data out 1 PC+2           TBL2 Data out 2 PC+3

Instruction   TABLWT1             TABLWT2                    INST (PC+2)                    INST (PC+3)
fetched
Instruction   INST (PC-1) TABLWT1 cycle1 TABLWT1 cycle2 TABLWT2 cycle1 TABLWT2 cycle2       INST (PC+2)
executed
                                           Data write cycle               Data write cycle
        ALE
          OE

        WR

1996 Microchip Technology Inc.                                                            DS30412C-page 47
PIC17C4X

7.3 Table Reads                                               EXAMPLE 7-2: TABLE READ

The table read allows the program memory to be read.              MOVLW   HIGH (TBL_ADDR) ; Load the Table
This allows constant data to be stored in the program             MOVWF
memory space, and retrieved into data memory when                 MOVLW   TBLPTRH          ; address
needed. Example 7-2 reads the 16-bit value at pro-                MOVWF
gram memory address TBLPTR. After the dummy byte                  TABLRD  LOW (TBL_ADDR) ;
has been read from the TABLATH, the TABLATH is
loaded with the 16-bit data from program memory                   TLRD    TBLPTRL          ;
address TBLPTR + 1. The first read loads the data into
the latch, and can be considered a dummy read                     TABLRD  0,0,DUMMY        ; Dummy read,
(unknown data loaded into 'f'). INDF0 should be con-
figured for either auto-increment or auto-decrement.                                       ; Updates TABLATCH

                                                                          1, INDF0         ; Read HI byte

                                                                                           ; of TABLATCH

                                                                          0,1,INDF0        ; Read LO byte

                                                                                           ; of TABLATCH and

                                                                                           ; Update TABLATCH

FIGURE 7-7: TABLRD TIMING

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

             AD15:AD0               PC           PC+1             TBL Data in        PC+2

             Instruction            TABLRD       INST (PC+1)                         INST (PC+2)
             fetched                                                                 INST (PC+1)
                                    INST (PC-1)  TABLRD cycle1    TABLRD cycle2
             Instruction                                          Data read cycle
             executed

                  ALE
                   OE

                               '1'
                  WR

FIGURE 7-8: TABLRD TIMING (CONSECUTIVE TABLRD INSTRUCTIONS)

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

AD15:AD0          PC                PC+1         TBL1 Data in 1   PC+2               TBL2 Data in 2  PC+3

Instruction       TABLRD1           TABLRD2                       INST (PC+2)                        INST (PC+3)
fetched
                  INST (PC-1) TABLRD1 cycle1 TABLRD1 cycle2 TABLRD2 cycle1 TABLRD2 cycle2 INST (PC+2)
Instruction
executed

                                                 Data read cycle                   Data read cycle

ALE

OE

           '1'
WR

DS30412C-page 48                                                                      1996 Microchip Technology Inc.
                                                                                     PIC17C4X

8.0 HARDWARE MULTIPLIER                                   Example 8-2 shows the sequence to do an 8 x 8 signed
                                                          multiply. To account for the sign bits of the arguments,
All PIC17C4X devices except the PIC17C42, have an         each argument's most significant bit (MSb) is tested
8 x 8 hardware multiplier included in the ALU of the      and the appropriate subtractions are done.
device. By making the multiply a hardware operation, it
completes in a single instruction cycle. This is an       EXAMPLE 8-1: 8 x 8 MULTIPLY ROUTINE
unsigned multiply that gives a 16-bit result. The result
is stored into the 16-bit PRODuct register                MOVFP  ARG1, WREG
(PRODH:PRODL). The multiplier does not affect any         MULWF
flags in the ALUSTA register.                                    ARG2                ; ARG1 * ARG2 ->

Making the 8 x 8 multiplier execute in a single cycle                                ; PRODH:PRODL
gives the following advantages:
                                                          EXAMPLE 8-2: 8 x 8 SIGNED MULTIPLY
Higher computational throughput                                                 ROUTINE
Reduces code size requirements for multiply
                                                          MOVFP  ARG1, WREG          ; ARG1 * ARG2 ->
   algorithms                                             MULWF  ARG2
                                                                                     ; PRODH:PRODL
The performance increase allows the device to be used     BTFSC  ARG2, SB
in applications previously reserved for Digital Signal    SUBWF  PRODH, F            ; Test Sign Bit
Processors.
                                                          MOVFP  ARG2, WREG          ; PRODH = PRODH
Table 8-1 shows a performance comparison between          BTFSC  ARG1, SB
the PIC17C42 and all other PIC17CXX devices, which        SUBWF  PRODH, F            ;          - ARG1
have the single cycle hardware multiply.
                                                                                     ; Test Sign Bit
Example 8-1 shows the sequence to do an 8 x 8
unsigned multiply. Only one instruction is required                                  ; PRODH = PRODH
when one argument of the multiply is already loaded in
the WREG register.                                                                   ;          - ARG2

TABLE 8-1: PERFORMANCE COMPARISON

                                              Program Memory                            Time
                                                    (Words)
Routine           Device                                         Cycles (Max)
                                                        13
8 x 8 unsigned    PIC17C42                               1              69           @ 25 MHz   @ 33 MHz
8 x 8 signed      All other PIC17CXX devices             --              1
16 x 16 unsigned  PIC17C42                               6              --            11.04 s      N/A
16 x 16 signed    All other PIC17CXX devices            21               6             160 ns     121 ns
                  PIC17C42                              24             242
                  All other PIC17CXX devices            52              24                --        N/A
                  PIC17C42                              36             254             960 ns     727 ns
                  All other PIC17CXX devices                            36            38.72 s
                                                                                       3.84 s      N/A
                                                                                      40.64 s    2.91 s
                                                                                       5.76 s
                                                                                                    N/A
                                                                                                  4.36 s

1996 Microchip Technology Inc.                                                        DS30412C-page 49

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

Example 8-3 shows the sequence to do a 16 x 16            EXAMPLE 8-3: 16 x 16 MULTIPLY ROUTINE
unsigned multiply. Equation 8-1 shows the algorithm
that is used. The 32-bit result is stored in 4 registers       MOVFP   ARG1L, WREG
RES3:RES0.                                                     MULWF
                                                                       ARG2L        ; ARG1L * ARG2L ->
                                                               MOVPF
                                                               MOVPF                ; PRODH:PRODL
                                                          ;
                                                               MOVFP   PRODH, RES1 ;
                                                               MULWF
EQUATION 8-1:     16 x 16 UNSIGNED                                     PRODL, RES0 ;
                  MULTIPLICATION                               MOVPF
                  ALGORITHM                                    MOVPF   ARG1H, WREG
                                                          ;
                                                               MOVFP   ARG2H        ; ARG1H * ARG2H ->
                                                               MULWF
RES3:RES0 = ARG1H:ARG1L * ARG2H:ARG2L                                               ; PRODH:PRODL
                     = (ARG1H * ARG2H * 216) +                 MOVFP
                           (ARG1H * ARG2L * 28) +              ADDWF   PRODH, RES3 ;
                           (ARG1L * ARG2H * 28) +              MOVFP
                                                               ADDWFC  PRODL, RES2 ;
                           (ARG1L * ARG2L)                     CLRF
                                                               ADDWFC  ARG1L, WREG
                                                          ;
                                                               MOVFP   ARG2H        ; ARG1L * ARG2H ->
                                                               MULWF
                                                                                    ; PRODH:PRODL

                                                                       PRODL, WREG ;

                                                                       RES1, F      ; Add cross

                                                                       PRODH, WREG ; products

                                                                       RES2, F      ;

                                                                       WREG, F      ;

                                                                       RES3, F      ;

                                                                       ARG1H, WREG ;

                                                                       ARG2L        ; ARG1H * ARG2L ->

                                                                                    ; PRODH:PRODL

                                                          MOVFP        PRODL, WREG ;
                                                          ADDWF
                                                          MOVFP        RES1, F      ; Add cross
                                                          ADDWFC
                                                          CLRF         PRODH, WREG ; products
                                                          ADDWFC
                                                                       RES2, F      ;

                                                                       WREG, F      ;

                                                                       RES3, F      ;

DS30412C-page 50                                                                1996 Microchip Technology Inc.
                                                                              PIC17C4X

Example 8-4 shows the sequence to do an 16 x 16         EXAMPLE 8-4: 16 x 16 SIGNED MULTIPLY
signed multiply. Equation 8-2 shows the algorithm that
used. The 32-bit result is stored in four registers                        ROUTINE
RES3:RES0. To account for the sign bits of the argu-
ments, each argument pairs most significant bit (MSb)      MOVFP ARG1L, WREG
is tested and the appropriate subtractions are done.
                                                           MULWF ARG2L        ; ARG1L * ARG2L ->

                                                                              ; PRODH:PRODL

                                                           MOVPF PRODH, RES1 ;

                                                           MOVPF PRODL, RES0 ;

EQUATION 8-2:  16 x 16 SIGNED                           ;
               MULTIPLICATION
               ALGORITHM                                   MOVFP ARG1H, WREG

                                                           MULWF ARG2H        ; ARG1H * ARG2H ->

                                                                              ; PRODH:PRODL

RES3:RES0                                                  MOVPF PRODH, RES3 ;

                                                           MOVPF PRODL, RES2 ;

= ARG1H:ARG1L * ARG2H:ARG2L                             ;

= (ARG1H * ARG2H * 216)              +                     MOVFP ARG1L, WREG

                                                           MULWF ARG2H        ; ARG1L * ARG2H ->

(ARG1H * ARG2L * 28)                 +                                        ; PRODH:PRODL

(ARG1L * ARG2H * 28)                 +                     MOVFP PRODL, WREG ;

                                                           ADDWF RES1, F      ; Add cross

(ARG1L * ARG2L)                      +                     MOVFP PRODH, WREG ; products

(-1 * ARG2H<7> * ARG1H:ARG1L * 216) +                      ADDWFC RES2, F     ;

                                                           CLRF      WREG, F  ;

(-1 * ARG1H<7> * ARG2H:ARG2L * 216)                        ADDWFC RES3, F     ;

                                                        ;

                                                           MOVFP ARG1H, WREG ;

                                                           MULWF ARG2L        ; ARG1H * ARG2L ->

                                                                              ; PRODH:PRODL

                                                             MOVFP   PRODL, WREG ;
                                                             ADDWF
                                                             MOVFP   RES1, F  ; Add cross
                                                             ADDWFC
                                                             CLRF    PRODH, WREG ; products
                                                             ADDWFC
                                                        ;            RES2, F  ;
                                                             BTFSS
                                                             GOTO    WREG, F  ;
                                                             MOVFP
                                                             SUBWF   RES3, F  ;
                                                             MOVFP
                                                             SUBWFB  ARG2H, 7 ; ARG2H:ARG2L neg?
                                                        ;
                                                        SIGN_ARG1    SIGN_ARG1 ; no, check ARG1
                                                             BTFSS
                                                             GOTO    ARG1L, WREG ;
                                                             MOVFP
                                                             SUBWF   RES2     ;
                                                             MOVFP
                                                             SUBWFB  ARG1H, WREG ;
                                                        ;
                                                        CONT_CODE    RES3

                                                                 :   ARG1H, 7 ; ARG1H:ARG1L neg?

                                                                     CONT_CODE ; no, done

                                                                     ARG2L, WREG ;

                                                                     RES2     ;

                                                                     ARG2H, WREG ;

                                                                     RES3

1996 Microchip Technology Inc.                                                    DS30412C-page 51
PIC17C4X

NOTES:

DS30412C-page 52   1996 Microchip Technology Inc.
                                                                                     PIC17C4X

9.0 I/O PORTS                                               9.1 PORTA Register

The PIC17C4X devices have five I/O ports, PORTA             PORTA is a 6-bit wide latch. PORTA does not have a
through PORTE. PORTB through PORTE have a corre-            corresponding Data Direction Register (DDR).
sponding Data Direction Register (DDR), which is used
to configure the port pins as inputs or outputs. These      Reading PORTA reads the status of the pins.
five ports are made up of 33 I/O pins. Some of these
ports pins are multiplexed with alternate functions.        The RA1 pin is multiplexed with TMR0 clock input, and
                                                            RA4 and RA5 are multiplexed with the USART func-
PORTC, PORTD, and PORTE are multiplexed with the            tions. The control of RA4 and RA5 as outputs is auto-
system bus. These pins are configured as the system         matically configured by the USART module.
bus when the device's configuration bits are selected to
Microprocessor or Extended Microcontroller modes. In        9.1.1 USING RA2, RA3 AS OUTPUTS
the two other microcontroller modes, these pins are
general purpose I/O.                                        The RA2 and RA3 pins are open drain outputs. To use
                                                            the RA2 or the RA3 pin(s) as output(s), simply write to
PORTA and PORTB are multiplexed with the peripheral         the PORTA register the desired value. A '0' will cause
features of the device. These peripheral features are:      the pin to drive low, while a '1' will cause the pin to float
                                                            (hi-impedance). An external pull-up resistor should be
Timer modules                                             used to pull the pin high. Writes to PORTA will not affect
Capture module                                            the other pins.
PWM module
USART/SCI module                                          Note:  When using the RA2 or RA3 pin(s) as out-
External Interrupt pin                                           put(s), read-modify-write instructions (such
                                                                   as BCF, BSF, BTG) on PORTA are not rec-
When some of these peripheral modules are turned on,               ommended.
the port pin will automatically configure to the alternate         Such operations read the port pins, do the
function. The modules that do this are:                            desired operation, and then write this value
                                                                   to the data latch. This may inadvertently
PWM module                                                       cause the RA2 or RA3 pins to switch from
USART/SCI module                                                 input to output (or vice-versa).
                                                                   It is recommended to use a shadow regis-
When a pin is automatically configured as an output by             ter for PORTA. Do the bit operations on this
a peripheral module, the pins data direction (DDR) bit             shadow register and then move it to
is unknown. After disabling the peripheral module, the             PORTA.
user should re-initialize the DDR bit to the desired con-
figuration.

The other peripheral modules (which require an input)       FIGURE 9-1: RA0 AND RA1 BLOCK
must have their data direction bit configured appropri-                          DIAGRAM
ately.

Note:  A pin that is a peripheral input, can be con-
       figured as an output (DDRx is cleared).
       The peripheral events will be determined                                              DATA BUS
       by the action output on the port pin.

                                                                                                                    RD_PORTA
                                                                                                                               (Q2)

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

1996 Microchip Technology Inc.                                                     DS30412C-page 53

                                    This document was created with FrameMaker 4 0 4
PIC17C4X                                                                    FIGURE 9-3: RA4 AND RA5 BLOCK
                                                                                                 DIAGRAM
FIGURE 9-2: RA2 AND RA3 BLOCK
                     DIAGRAM                                                                                            Serial port input signal

                                                                  Data Bus                                                                   Data Bus

                     Q         D         RD_PORTA
                                                   (Q2)
                     Q CK                                                                                                              RD_PORTA
                                         WR_PORTA                                                                                                (Q2)
                                                    (Q4)
                                                                                                                    Serial port output signals
         Note: I/O pins have protection diodes to VSS.
                                                                                OE = SPEN,SYNC,TXEN, CREN, SREN for RA4
                                                                                OE = SPEN (SYNC+SYNC,CSRC) for RA5

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

TABLE 9-1: PORTA FUNCTIONS

Name     Bit0 Buffer Type                                                       Function

RA0/INT  bit0           ST           Input or external interrupt input.

RA1/T0CKI bit1          ST           Input or clock input to the TMR0 timer/counter, and/or an external interrupt input.

RA2      bit2           ST           Input/Output. Output is open drain type.

RA3      bit3           ST           Input/Output. Output is open drain type.

RA4/RX/DT bit4          ST           Input or USART Asynchronous Receive or USART Synchronous Data.

RA5/TX/CK bit5          ST           Input or USART Asynchronous Transmit or USART Synchronous Clock.

RBPU     bit7           --           Control bit for PORTB weak pull-ups.

Legend: ST = Schmitt Trigger input.

TABLE 9-2: REGISTERS/BITS ASSOCIATED WITH PORTA

Address  Name           Bit 7     Bit 6 Bit 5 Bit 4 Bit 3 Bit 2                 Bit 1     Bit 0  Value on   Value on all
                                                                                                 Power-on   other resets

                                                                                                   Reset       (Note1)

10h, Bank 0 PORTA       RBPU         --  RA5 RA4 RA3 RA2 RA1/T0CKI RA0/INT 0-xx xxxx                        0-uu uuuu
                                                                                                            0000 000-
05h, Unbanked T0STA     INTEDG T0SE T0CS PS3 PS2 PS1                            PS0       --     0000 000-  0000 -00u
                                                                                                            0000 --1u
13h, Bank 0 RCSTA       SPEN RC9 SREN CREN -- FERR                              OERR      RC9D 0000 -00x

15h, Bank 0 TXSTA       CSRC TX9 TXEN SYNC --                               --  TRMT      TX9D 0000 --1x

Legend: x = unknown, u = unchanged, - = unimplemented reads as '0'. Shaded cells are not used by PORTA.
Note 1: Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.

DS30412C-page 54                                                                           1996 Microchip Technology Inc.
9.2 PORTB and DDRB Registers                                                                    PIC17C4X

PORTB is an 8-bit wide bi-directional port. The corre-                           This interrupt can wake the device from SLEEP. The
sponding data direction register is DDRB. A '1' in DDRB                          user, in the interrupt service routine, can clear the inter-
configures the corresponding port pin as an input. A '0'                         rupt by:
in the DDRB register configures the corresponding port
pin as an output. Reading PORTB reads the status of                              a) Read-Write PORTB (such as; MOVPF PORTB,
the pins, whereas writing to it will write to the port latch.                          PORTB). This will end mismatch condition.

Each of the PORTB pins has a weak internal pull-up. A                            b) Then, clear the RBIF bit.
single control bit can turn on all the pull-ups. This is
done by clearing the RBPU (PORTA<7>) bit. The weak                               A mismatch condition will continue to set the RBIF bit.
pull-up is automatically turned off when the port pin is                         Reading then writing PORTB will end the mismatch
configured as an output. The pull-ups are enabled on                             condition, and allow the RBIF bit to be cleared.
any reset.
                                                                                 This interrupt on mismatch feature, together with soft-
PORTB also has an interrupt on change feature. Only                              ware configurable pull-ups on this port, allows easy
pins configured as inputs can cause this interrupt to                            interface to a key pad and make it possible for wake-up
occur (i.e. any RB7:RB0 pin configured as an output is                           on key-depression. For an example, refer to AN552 in
excluded from the interrupt on change comparison).                               the Embedded Control Handbook.
The input pins (of RB7:RB0) are compared with the
value in the PORTB data latch. The "mismatch" outputs                            The interrupt on change feature is recommended for
of RB7:RB0 are OR'ed together to generate the                                    wake-up on operations where PORTB is only used for
PORTB Interrupt Flag RBIF (PIR<7>).                                              the interrupt on change feature and key depression
                                                                                 operation.

FIGURE 9-4: BLOCK DIAGRAM OF RB<7:4> AND RB<1:0> PORT PINS

Weak                                                                                              Match Signal     Peripheral Data in
Pull-Up                                                                                           from other        RBPU (PORTA<7>)
                                                                                                  port pins
                                                                                                                                    RBIF
                                  Port
                                  Input Latch                                                                                    Data Bus
                                                                                                                       RD_DDRB (Q2)

                                  OE                                                                            D  RD_PORTB (Q2)
                                                                                                  Q                 WR_DDRB (Q4)
                                                                           Port                                    WR_PORTB (Q4)
                                                                           Data                            CK
Note: I/O pins have protection diodes to VDD and VSS.
                                                                                               D
                                                                                 Q

                                                                                          CK

1996 Microchip Technology Inc.                                                                                   DS30412C-page 55
PIC17C4X

FIGURE 9-5: BLOCK DIAGRAM OF RB3 AND RB2 PORT PINS

Weak                                                                          Match Signal     Peripheral Data in
Pull-Up                                                                       from other       RBPU (PORTA<7>)
                                                                              port pins
                                                                                                                  RBIF

                      Port
                      Input Latch

                  OE                                                                        D             Data Bus
                                                                                                 RD_DDRB (Q2)
                                                                           D  Q                RD_PORTB (Q2)
                                                             Q                         CK
                                                                                                WR_DDRB (Q4)
                                                                      CK         R
                                                                                               WR_PORTB (Q4)
                                                       Port                                          PWM_output
                                                       Data                                           PWM_select

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

DS30412C-page 56                                                               1996 Microchip Technology Inc.
                                                                                     PIC17C4X

Example 9-1 shows the instruction sequence to initial-       EXAMPLE 9-1: INITIALIZING PORTB
ize PORTB. The Bank Select Register (BSR) must be
selected to Bank 0 for the port to be initialized.           MOVLB 0        ; Select Bank 0
                                                             CLRF PORTB     ; Initialize PORTB by clearing
                                                                            ; output data latches
                                                             MOVLW 0xCF     ; Value used to initialize
                                                                            ; data direction
                                                             MOVWF DDRB     ; Set RB<3:0> as inputs
                                                                            ; RB<5:4> as outputs
                                                                            ; RB<7:6> as inputs

TABLE 9-3: PORTB FUNCTIONS

Name         Bit Buffer Type                                               Function

RB0/CAP1     bit0                 ST     Input/Output or the RB0/CAP1 input pin. Software programmable weak pull-
                                         up and interrupt on change features.
RB1/CAP2     bit1                 ST
                                         Input/Output or the RB1/CAP2 input pin. Software programmable weak pull-
RB2/PWM1     bit2                 ST     up and interrupt on change features.

RB3/PWM2     bit3                 ST     Input/Output or the RB2/PWM1 output pin. Software programmable weak
                                         pull-up and interrupt on change features.
RB4/TCLK12 bit4                   ST
                                         Input/Output or the RB3/PWM2 output pin. Software programmable weak
RB5/TCLK3    bit5                 ST     pull-up and interrupt on change features.

RB6          bit6                 ST     Input/Output or the external clock input to Timer1 and Timer2. Software pro-
                                         grammable weak pull-up and interrupt on change features.
RB7          bit7                 ST
                                         Input/Output or the external clock input to Timer3. Software programmable
                                         weak pull-up and interrupt on change features.

                                         Input/Output pin. Software programmable weak pull-up and interrupt on
                                         change features.

                                         Input/Output pin. Software programmable weak pull-up and interrupt on
                                         change features.

Legend: ST = Schmitt Trigger input.

TABLE 9-4: REGISTERS/BITS ASSOCIATED WITH PORTB

Address      Name     Bit 7       Bit 6  Bit 5       Bit 4   Bit 3  Bit 2   Bit 1    Bit 0  Value on  Value on all
                                                                                            Power-on      other
                                                                                                         resets
                                                                                              Reset      (Note1)

12h, Bank 0  PORTB PORTB data latch                                                         xxxx xxxx uuuu uuuu
11h, Bank 0  DDRB Data direction register for PORTB                                         1111 1111 1111 1111

10h, Bank 0 PORTA RBPU            --     RA5         RA4     RA3    RA2 RA1/T0CKI RA0/INT 0-xx xxxx 0-uu uuuu

06h, Unbanked CPUSTA  --          --      STKAV      GLINTD    TO       PD      --       -- --11 11-- --11 qq--
07h, Unbanked INTSTA                       T0IF        INTF  PEIE   T0CKIE     T0IE    INTE 0000 0000 0000 0000
16h, Bank 1 PIR       PEIF T0CKIF                            CA2IF   CA1IF    TXIF     RCIF 0000 0010 0000 0010
17h, Bank 1 PIE                          TMR2IF      TMR1IF  CA2IE   CA1IE    TXIE     RCIE 0000 0000 0000 0000
16h, Bank 3 TCON1     RBIF TMR3IF        TMR2IE      TMR1IE   T16   TMR3CS  TMR2CS   TMR1CS 0000 0000 0000 0000
                                         CA1ED1      CA1ED0
                      RBIE TMR3IE

                      CA2ED1 CA2ED0

17h, Bank 3 TCON2 CA2OVF CA1OVF PWM2ON PWM1ON CA1/PR3 TMR3ON TMR2ON TMR1ON 0000 0000 0000 0000

Legend: x = unknown, u = unchanged, - = unimplemented read as '0', q = Value depends on condition.
             Shaded cells are not used by PORTB.

Note 1: Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.

1996 Microchip Technology Inc.                                                            DS30412C-page 57
PIC17C4X

9.3 PORTC and DDRC Registers                                           Example 9-2 shows the instruction sequence to initial-
                                                                       ize PORTC. The Bank Select Register (BSR) must be
PORTC is an 8-bit bi-directional port. The correspond-                 selected to Bank 1 for the port to be initialized.
ing data direction register is DDRC. A '1' in DDRC con-
figures the corresponding port pin as an input. A '0' in               EXAMPLE 9-2: INITIALIZING PORTC
the DDRC register configures the corresponding port
pin as an output. Reading PORTC reads the status of                    MOVLB 1     ; Select Bank 1
the pins, whereas writing to it will write to the port latch.          CLRF PORTC  ; Initialize PORTC data
PORTC is multiplexed with the system bus. When                                     ; latches before setting
operating as the system bus, PORTC is the low order                    MOVLW 0xCF  ; the data direction
byte of the address/data bus (AD7:AD0). The timing for                 MOVWF DDRC  ; register
the system bus is shown in the Electrical Characteris-                             ; Value used to initialize
tics section.                                                                      ; data direction
                                                                                   ; Set RC<3:0> as inputs
Note:  This port is configured as the system bus                                   ; RC<5:4> as outputs
       when the device's configuration bits are                                    ; RC<7:6> as inputs
       selected to Microprocessor or Extended
       Microcontroller modes. In the two other
       microcontroller modes, this port is a gen-
       eral purpose I/O.

FIGURE 9-6: BLOCK DIAGRAM OF RC<7:0> PORT PINS

                  TTL                                                                       to D_Bus  IR
                  Input                                                            INSTRUCTION READ
                  Buffer
                                                                                                        Data Bus
                          0 Port                       Q            D
                             Data                                                                   RD_PORTC
                                                          CK                                        WR_PORTC
                          1

                                                       Q            D              RD_DDRC
                                                                                   WR_DDRC
                                                                CK
                                                       RS

                                                                                                  EX_EN           SYS BUS
                                                                                   DATA/ADDR_OUT                  Control

                                                                                             DRV_SYS

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

DS30412C-page 58                                                                   1996 Microchip Technology Inc.
                                                                                           PIC17C4X

TABLE 9-5: PORTC FUNCTIONS

         Name      Bit Buffer Type                                        Function

RC0/AD0            bit0                  TTL         Input/Output or system bus address/data pin.

RC1/AD1            bit1                  TTL         Input/Output or system bus address/data pin.

RC2/AD2            bit2                  TTL         Input/Output or system bus address/data pin.

RC3/AD3            bit3                  TTL         Input/Output or system bus address/data pin.

RC4/AD4            bit4                  TTL         Input/Output or system bus address/data pin.

RC5/AD5            bit5                  TTL         Input/Output or system bus address/data pin.

RC6/AD6            bit6                  TTL         Input/Output or system bus address/data pin.

RC7/AD7            bit7                  TTL         Input/Output or system bus address/data pin.

Legend: TTL = TTL input.

TABLE 9-6: REGISTERS/BITS ASSOCIATED WITH PORTC

Address  Name      Bit 7          Bit 6       Bit 5  Bit 4  Bit 3  Bit 2  Bit 1     Bit 0          Value on   Value on all
                                                                                                   Power-on   other resets

                                                                                                     Reset       (Note1)

11h, Bank 1 PORTC  RC7/           RC6/        RC5/   RC4/   RC3/   RC2/   RC1/      RC0/           xxxx xxxx  uuuu uuuu
                   AD7            AD6         AD5    AD4    AD3    AD2    AD1       AD0                       1111 1111

10h, Bank 1 DDRC Data direction register for PORTC                                                 1111 1111

Legend: x = unknown, u = unchanged.
Note 1: Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.

1996 Microchip Technology Inc.                                                                        DS30412C-page 59
PIC17C4X

9.4 PORTD and DDRD Registers                                           Example 9-3 shows the instruction sequence to initial-
                                                                       ize PORTD. The Bank Select Register (BSR) must be
PORTD is an 8-bit bi-directional port. The correspond-                 selected to Bank 1 for the port to be initialized.
ing data direction register is DDRD. A '1' in DDRD con-
figures the corresponding port pin as an input. A '0' in               EXAMPLE 9-3: INITIALIZING PORTD
the DDRC register configures the corresponding port
pin as an output. Reading PORTD reads the status of                    MOVLB 1     ; Select Bank 1
the pins, whereas writing to it will write to the port latch.          CLRF PORTD  ; Initialize PORTD data
PORTD is multiplexed with the system bus. When                                     ; latches before setting
operating as the system bus, PORTD is the high order                   MOVLW 0xCF  ; the data direction
byte of the address/data bus (AD15:AD8). The timing                    MOVWF DDRD  ; register
for the system bus is shown in the Electrical Character-                           ; Value used to initialize
istics section.                                                                    ; data direction
                                                                                   ; Set RD<3:0> as inputs
Note:  This port is configured as the system bus                                   ; RD<5:4> as outputs
       when the device's configuration bits are                                    ; RD<7:6> as inputs
       selected to Microprocessor or Extended
       Microcontroller modes. In the two other
       microcontroller modes, this port is a gen-
       eral purpose I/O.

FIGURE 9-7: PORTD BLOCK DIAGRAM (IN I/O PORT MODE)

                  TTL                                                                       to D_Bus  IR
                  Input                                                            INSTRUCTION READ
                  Buffer
                                                                                                        Data Bus
                          0 Port                       Q            D
                             Data                                                                   RD_PORTD
                                                          CK                                        WR_PORTD
                          1

                                                       Q            D              RD_DDRD
                                                                                   WR_DDRD
                                                                CK
                                                       RS

                                                                                                  EX_EN           SYS BUS
                                                                                   DATA/ADDR_OUT                  Control

                                                                                             DRV_SYS

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

DS30412C-page 60                                                                   1996 Microchip Technology Inc.
                                                                                       PIC17C4X

TABLE 9-7: PORTD FUNCTIONS

Name            Bit          Buffer Type                                                Function

RD0/AD8         bit0              TTL           Input/Output or system bus address/data pin.
                                  TTL           Input/Output or system bus address/data pin.
RD1/AD9         bit1              TTL           Input/Output or system bus address/data pin.
                                  TTL           Input/Output or system bus address/data pin.
RD2/AD10        bit2              TTL           Input/Output or system bus address/data pin.
                                  TTL           Input/Output or system bus address/data pin.
RD3/AD11        bit3              TTL           Input/Output or system bus address/data pin.
                                  TTL           Input/Output or system bus address/data pin.
RD4/AD12        bit4

RD5/AD13        bit5

RD6/AD14        bit6

RD7/AD15        bit7

Legend: TTL = TTL input.

TABLE 9-8: REGISTERS/BITS ASSOCIATED WITH PORTD

Address   Name        Bit 7       Bit 6  Bit 5      Bit 4  Bit 3  Bit 2  Bit 1  Bit 0             Value on   Value on all
                                                                                                  Power-on   other resets

                                                                                                    Reset       (Note1)

13h, Bank 1 PORTD     RD7/        RD6/   RD5/       RD4/   RD3/   RD2/   RD1/   RD0/              xxxx xxxx  uuuu uuuu
                      AD15        AD14   AD13       AD12   AD11   AD10   AD9    AD8                          1111 1111

12h, Bank 1 DDRD Data direction register for PORTD                                                1111 1111

Legend: x = unknown, u = unchanged.
Note 1: Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.

1996 Microchip Technology Inc.                                                                        DS30412C-page 61
PIC17C4X

9.4.1 PORTE AND DDRE REGISTER                                 Example 9-4 shows the instruction sequence to initial-
                                                              ize PORTE. The Bank Select Register (BSR) must be
PORTE is a 3-bit bi-directional port. The corresponding       selected to Bank 1 for the port to be initialized.
data direction register is DDRE. A '1' in DDRE config-
ures the corresponding port pin as an input. A '0' in the     EXAMPLE 9-4: INITIALIZING PORTE
DDRE register configures the corresponding port pin
as an output. Reading PORTE reads the status of the           MOVLB 1     ; Select Bank 1
pins, whereas writing to it will write to the port latch.     CLRF PORTE  ; Initialize PORTE data
PORTE is multiplexed with the system bus. When                            ; latches before setting
operating as the system bus, PORTE contains the con-          MOVLW 0x03  ; the data direction
trol signals for the address/data bus (AD15:AD0).             MOVWF DDRE  ; register
These control signals are Address Latch Enable (ALE),                     ; Value used to initialize
Output Enable (OE), and Write (WR). The control sig-                      ; data direction
nals OE and WR are active low signals. The timing for                     ; Set RE<1:0> as inputs
the system bus is shown in the Electrical Characteris-                    ; RE<2> as outputs
tics section.                                                             ; RE<7:3> are always
                                                                          ; read as '0'

Note:  This port is configured as the system bus
       when the device's configuration bits are
       selected to Microprocessor or Extended
       Microcontroller modes. In the two other
       microcontroller modes, this port is a gen-
       eral purpose I/O.

FIGURE 9-8: PORTE BLOCK DIAGRAM (IN I/O PORT MODE)                            Data Bus
                                                                          RD_PORTE
                                          TTL                             WR_PORTE
                                          Input
                                          Buffer

                  0 Port Q                                 D

                  1 Data                               CK

                               Q                           D              RD_DDRE
                                                                          WR_DDRE
                                       CK
                               RS

                                                                              EX_EN     SYS BUS
                                                                                CNTL    Control

                                                                          DRV_SYS

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

DS30412C-page 62                                                          1996 Microchip Technology Inc.
                                                                                         PIC17C4X

TABLE 9-9: PORTE FUNCTIONS

Name               Bit            Buffer Type                                            Function

RE0/ALE            bit0                TTL      Input/Output or system bus Address Latch Enable (ALE) control pin.
                                       TTL      Input/Output or system bus Output Enable (OE) control pin.
RE1/OE             bit1                TTL      Input/Output or system bus Write (WR) control pin.

RE2/WR             bit2

Legend: TTL = TTL input.

TABLE 9-10: REGISTERS/BITS ASSOCIATED WITH PORTE

Address  Name      Bit 7          Bit 6  Bit 5        Bit 4  Bit 3  Bit 2  Bit 1  Bit 0  Value on       Value on all
                                                                                         Power-on       other resets

                                                                                           Reset           (Note1)

15h, Bank 1 PORTE  --             --     --           --     --     RE2/WR RE1/OE RE0/ALE ---- -xxx     ---- -uuu
                                                                                                        ---- -111
14h, Bank 1 DDRE   Data direction register for PORTE                                     ---- -111

Legend: x = unknown, u = unchanged, - = unimplemented read as '0'. Shaded cells are not used by PORTE.
Note 1: Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.

1996 Microchip Technology Inc.                                                                        DS30412C-page 63
PIC17C4X

9.5 I/O Programming Considerations                                   EXAMPLE 9-5: READ MODIFY WRITE
                                                                                             INSTRUCTIONS ON AN
9.5.1 BI-DIRECTIONAL I/O PORTS                                                               I/O PORT

Any instruction which writes, operates internally as a               ; Initial PORT settings: PORTB<7:4> Inputs
read followed by a write operation. For example, the
BCF and BSF instructions read the register into the                  ;                PORTB<3:0> Outputs
CPU, execute the bit operation, and write the result
back to the register. Caution must be used when these                ; PORTB<7:6> have pull-ups and are
instructions are applied to a port with both inputs and
outputs defined. For example, a BSF operation on bit5                ; not connected to other circuitry
of PORTB will cause all eight bits of PORTB to be read
into the CPU. Then the BSF operation takes place on                  ;
bit5 and PORTB is written to the output latches. If
another bit of PORTB is used as a bi-directional I/O pin             ;                PORT latch PORT pins
(e.g. bit0) and it is defined as an input at this time, the
input signal present on the pin itself would be read into            ;                ---------- ---------
the CPU and re-written to the data latch of this particu-
lar pin, overwriting the previous content. As long as the            ;
pin stays in the input mode, no problem occurs. How-
ever, if bit0 is switched into output mode later on, the                BCF PORTB, 7  01pp pppp 11pp pppp
content of the data latch may now be unknown.
                                                                        BCF PORTB, 6  10pp pppp 11pp pppp
Reading a port reads the values of the port pins. Writing
to the port register writes the value to the port latch.             ;
When using read-modify-write instructions (BCF, BSF,
BTG, etc.) on a port, the value of the port pins is read,               BCF DDRB, 7   10pp pppp 11pp pppp
the desired operation is performed with this value, and
the value is then written to the port latch.                            BCF DDRB, 6   10pp pppp 10pp pppp

Example 9-5 shows the effect of two sequential                       ;
read-modify-write instructions on an I/O port.
                                                                     ; Note that the user may have expected the

                                                                     ; pin values to be 00pp pppp. The 2nd BCF

                                                                     ; caused RB7 to be latched as the pin value

                                                                     ; (High).

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

                                                                     9.5.2 SUCCESSIVE OPERATIONS ON I/O PORTS

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

FIGURE 9-9: SUCCESSIVE I/O OPERATION

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

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

Instruction                                           Port pin          NOP
executed                                             sampled here

                      MOVWF PORTB MOVF PORTB,W
                           write to
                           PORTB

DS30412C-page 64                                                                      1996 Microchip Technology Inc.
10.0 OVERVIEW OF TIMER                                                  PIC17C4X
         RESOURCES
                                                         10.3 Timer2 Overview
The PIC17C4X has four timer modules. Each module
can generate an interrupt to indicate that an event has  The TMR2 module is an 8-bit timer/counter with an 8-
occurred. These timers are called:                       bit period register (PR2). When the TMR2 value rolls
                                                         over from the period match value to 0h, the TMR2IF
Timer0 - 16-bit timer with programmable 8-bit          flag is set, and an interrupt will be generated when
               prescaler                                 enabled. In counter mode, the clock comes from the
                                                         RB4/TCLK12 pin, which can also be selected to be the
Timer1 - 8-bit timer                                   clock for the TMR1 module.
Timer2 - 8-bit timer
Timer3 - 16-bit timer                                  TMR1 can be concatenated to TMR2 to form a 16-bit
                                                         timer. The TMR2 register is the MSB and TMR1 is the
For enhanced time-base functionality, two input Cap-     LSB. When in the 16-bit timer mode, there is a corre-
tures and two Pulse Width Modulation (PWM) outputs       sponding 16-bit period register (PR2:PR1). When the
are possible. The PWMs use the TMR1 and TMR2             TMR2:TMR1 value rolls over from the period match
resources and the input Captures use the TMR3            value to 0h, the TMR1IF flag is set, and an interrupt
resource.                                                will be generated when enabled.

10.1 Timer0 Overview                                     10.4 Timer3 Overview

The Timer0 module is a simple 16-bit overflow counter.   The TImer3 module is a 16-bit timer/counter with a 16-
The clock source can be either the internal system       bit period register. When the TMR3H:TMR3L value
clock (Fosc/4) or an external clock.                     rolls over to 0h, the TMR3IF bit is set and an interrupt
                                                         will be generated when enabled. In counter mode, the
The Timer0 module also has a programmable pres-          clock comes from the RB5/TCLK3 pin.
caler option. The PS3:PS0 bits (T0STA<4:1>) deter-
mine the prescaler value. TMR0 can increment at the      When operating in the dual capture mode, the period
following rates: 1:1, 1:2, 1:4, 1:8, 1:16, 1:32, 1:64,   registers become the second 16-bit capture register.
1:128, 1:256.
                                                         10.5 Role of the Timer/Counters
When TImer0's clock source is an external clock, the
Timer0 module can be selected to increment on either     The timer modules are general purpose, but have ded-
the rising or falling edge.                              icated resources associated with them. TImer1 and
                                                         Timer2 are the time-bases for the two Pulse Width
Synchronization of the external clock occurs after the   Modulation (PWM) outputs, while Timer3 is the time-
prescaler. When the prescaler is used, the external      base for the two input captures.
clock frequency may be higher then the device's fre-
quency. The maximum frequency is 50 MHz, given the
high and low time requirements of the clock.

10.2 Timer1 Overview

The TImer0 module is an 8-bit timer/counter with an 8-
bit period register (PR1). When the TMR1 value rolls
over from the period match value to 0h, the TMR1IF
flag is set, and an interrupt will be generated when
enabled. In counter mode, the clock comes from the
RB4/TCLK12 pin, which can also be selected to be the
clock for the Timer2 module.

TMR1 can be concatenated to TMR2 to form a 16-bit
timer. The TMR1 register is the LSB and TMR2 is the
MSB. When in the 16-bit timer mode, there is a corre-
sponding 16-bit period register (PR2:PR1). When the
TMR2:TMR1 value rolls over from the period match
value to 0h, the TMR1IF flag is set, and an interrupt
will be generated when enabled.

1996 Microchip Technology Inc.                                                     DS30412C-page 65

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

NOTES:

DS30412C-page 66   1996 Microchip Technology Inc.
                                                                                     PIC17C4X

11.0 TIMER0

The Timer0 module consists of a 16-bit timer/counter,
TMR0. The high byte is TMR0H and the low byte is
TMR0L. A software programmable 8-bit prescaler
makes an effective 24-bit overflow timer. The clock
source is also software programmable as either the
internal instruction clock or the RA1/T0CKI pin. The
control bits for this module are in register T0STA
(Figure 11-1).

FIGURE 11-1: T0STA REGISTER (ADDRESS: 05h, UNBANKED)

R/W - 0  R/W - 0  R/W - 0  R/W - 0  R/W - 0            R/W - 0  R/W - 0  U-0         R = Readable bit
INTEDG    T0SE     T0CS      PS3      PS2                PS1      PS0     --         W = Writable bit
                                                                                     U = Unimplemented,
bit7                                                                         bit0
                                                                                          Read as '0'
                                                                                     -n = Value at POR reset

bit 7:   INTEDG: RA0/INT Pin Interrupt Edge Select bit
         This bit selects the edge upon which the interrupt is detected
         1 = Rising edge of RA0/INT pin generates interrupt
         0 = Falling edge of RA0/INT pin generates interrupt

bit 6:   T0SE: Timer0 Clock Input Edge Select bit
         This bit selects the edge upon which TMR0 will increment
         When T0CS = 0
         1 = Rising edge of RA1/T0CKI pin increments TMR0 and/or generates a T0CKIF interrupt
         0 = Falling edge of RA1/T0CKI pin increments TMR0 and/or generates a T0CKIF interrupt
         When T0CS = 1
         Don't care

bit 5:   T0CS: Timer0 Clock Source Select bit
         This bit selects the clock source for TMR0.
         1 = Internal instruction clock cycle (TCY)
         0 = T0CKI pin

bit 4-1: PS3:PS0: Timer0 Prescale Selection bits
            These bits select the prescale value for TMR0.

         PS3:PS0  Prescale Value

         0000               1:1
         0001               1:2
         0010               1:4
         0011               1:8
         0100              1:16
         0101              1:32
         0110              1:64
         0111              1:128
         1xxx              1:256

bit 0: Unimplemented: Read as '0'

1996 Microchip Technology Inc.                                                     DS30412C-page 67

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

11.1 Timer0 Operation                                      11.2 Using Timer0 with External Clock

When the T0CS (T0STA<5>) bit is set, TMR0 incre-           When the external clock input is used for Timer0, it is
ments on the internal clock. When T0CS is clear, TMR0      synchronized with the internal phase clocks.
increments on the external clock (RA1/T0CKI pin). The      Figure 11-3 shows the synchronization of the external
external clock edge can be configured in software.         clock. This synchronization is done after the prescaler.
When the T0SE (T0STA<6>) bit is set, the timer will        The output of the prescaler (PSOUT) is sampled twice
increment on the rising edge of the RA1/T0CKI pin.         in every instruction cycle to detect a rising or a falling
When T0SE is clear, the timer will increment on the fall-  edge. The timing requirements for the external clock
ing edge of the RA1/T0CKI pin. The prescaler can be        are detailed in the electrical specification section for the
programmed to introduce a prescale of 1:1 to 1:256.        desired device.
The timer increments from 0000h to FFFFh and rolls
over to 0000h. On overflow, the TMR0 Interrupt Flag bit    11.2.1 DELAY FROM EXTERNAL CLOCK EDGE
(T0IF) is set. The TMR0 interrupt can be masked by
clearing the corresponding TMR0 Interrupt Enable bit       Since the prescaler output is synchronized with the
(T0IE). The TMR0 Interrupt Flag bit (T0IF) is automati-    internal clocks, there is a small delay from the time the
cally cleared when vectoring to the TMR0 interrupt vec-    external clock edge occurs to the time TMR0 is actually
tor.                                                       incremented. Figure 11-3 shows that this delay is
                                                           between 3TOSC and 7TOSC. Thus, for example, mea-
                                                           suring the interval between two edges (e.g. period) will
                                                           be accurate within 4TOSC (121 ns @ 33 MHz).

FIGURE 11-2: TIMER0 MODULE BLOCK DIAGRAM

RA1/T0CKI                            0    Prescaler               Synchronization                Interrupt on overflow
                       Fosc/4 1           (8 stage                                                       sets T0IF
                                          async ripple
                                          counter)                                                    (INTSTA<5>)

                                                    4                              TMR0H<8> TMR0L<8>

                                             PS3:PS0       PSOUT
                                          (T0STA<4:1>)
               T0SE
           (T0STA<6>)

                                  T0CS                            Q2  Q4
                              (T0STA<5>)

FIGURE 11-3: TMR0 TIMING WITH EXTERNAL CLOCK (INCREMENT ON FALLING EDGE)

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

                  Prescaler                                                        (note 3)
                      output                                                             (note 2)

                   (PSOUT)                (note 1)                    T0 + 1       T0 + 2
                                              T0
                   Sampled
                  Prescaler

                      output
                  Increment

                       TMR0

                       TMR0

                              Note 1: The delay from the T0CKI edge to the TMR0 increment is 3Tosc to 7Tosc.
                                     2:  = PSOUT is sampled here.
                                     3: The PSOUT high time is too short and is missed by the sampling circuit.

DS30412C-page 68                                                                   1996 Microchip Technology Inc.
                                                                                      PIC17C4X

11.3 Read/Write Consideration for TMR0                           11.3.2 WRITING A 16-BIT VALUE TO TMR0

Although TMR0 is a 16-bit timer/counter, only 8-bits at          Since writing to either TMR0L or TMR0H will effectively
a time can be read or written during a single instruction        inhibit increment of that half of the TMR0 in the next
cycle. Care must be taken during any read or write.              cycle (following write), but not inhibit increment of the
                                                                 other half, the user must write to TMR0L first and
11.3.1 READING 16-BIT VALUE                                      TMR0H next in two consecutive instructions, as shown
                                                                 in Example 11-2. The interrupt must be disabled. Any
The problem in reading the entire 16-bit value is that           write to either TMR0L or TMR0H clears the prescaler.
after reading the low (or high) byte, its value may
change from FFh to 00h.                                          EXAMPLE 11-2: 16-BIT WRITE

Example 11-1 shows a 16-bit read. To ensure a proper             BSF CPUSTA, GLINTD ; Disable interrupt
read, interrupts must be disabled during this routine.           MOVFP RAM_L, TMR0L ;
                                                                 MOVFP RAM_H, TMR0H ;
EXAMPLE 11-1: 16-BIT READ                                        BCF CPUSTA, GLINTD ; Done, enable interrupt

MOVPF   TMR0L, TMPLO  ;read low tmr0                             11.4 Prescaler Assignments
MOVPF   TMR0H, TMPHI  ;read high tmr0
MOVFP   TMPLO, WREG   ;tmplo -> wreg                             Timer0 has an 8-bit prescaler. The prescaler assign-
CPFSLT  TMR0L         ;tmr0l < wreg?                             ment is fully under software control; i.e., it can be
RETURN                ;no then return                            changed "on the fly" during program execution. When
MOVPF   TMR0L, TMPLO  ;read low tmr0                             changing the prescaler assignment, clearing the pres-
MOVPF   TMR0H, TMPHI  ;read high tmr0                            caler is recommended before changing assignment.
RETURN                ;return                                    The value of the prescaler is "unknown," and assigning
                                                                 a value that is less then the present value makes it dif-
                                                                 ficult to take this unknown time into account.

FIGURE 11-4: TMR0 TIMING: WRITE HIGH OR LOW BYTE

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

AD15:AD0     PC                   PC+1                     PC+2           PC+3        PC+4

        ALE

TMR0L        T0                   T0+1                     New T0 (NT0)               New T0+1

      Fetch                       MOVFP W,TMR0L MOVFP TMR0L,W MOVFP TMR0L,W MOVFP TMR0L,W

Instruction                       Write to TMR0L Read TMR0L               Read TMR0L  Read TMR0L
executed
                                                           (Value = NT0)  (Value = NT0) (Value = NT0 +1)

TMR0H

1996 Microchip Technology Inc.                                                            DS30412C-page 69
PIC17C4X

FIGURE 11-5: TMR0 READ/WRITE IN TIMER MODE

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

            AD15:AD0
                    ALE

         WR_TRM0L
         WR_TMR0H
          RD_TMR0L

         TMR0H               12         12           13            AB

         TMR0L            FE            FF           56                         57                     58

                      MOVFP             MOVFP        MOVPF         MOVPF        MOVPF                  MOVPF

         Instruction  DATAL,TMR0L DATAH,TMR0H TMR0L,W              TMR0L,W      TMR0L,W                TMR0L,W
             fetched
                      Write TMR0L Write TMR0H Read TMR0L Read TMR0L Read TMR0L Read TMR0L
         Instruction
          executed    Previously        MOVFP        MOVFP         MOVPF        MOVPF                  MOVPF
                      Fetched
                      Instruction      DATAL,TMR0L DATAH,TMR0H TMR0L,W          TMR0L,W                TMR0L,W

                                        Write TMR0L Write TMR0H Read TMR0L Read TMR0L Read TMR0L

                             In this example, old TMR0 value is 12FEh, new value of AB56h is written.

TABLE 11-1: REGISTERS/BITS ASSOCIATED WITH TIMER0

Address  Name         Bit 7      Bit 6        Bit 5  Bit 4  Bit 3  Bit 2 Bit 1 Bit 0     Value on          Value on all
                                                                                         Power-on          other resets

                                                                                           Reset              (Note1)

05h, Unbanked T0STA   INTEDG T0SE             T0CS   PS3    PS2    PS1      PS0 --     0000 000- 0000 000-

06h, Unbanked CPUSTA  --           --         STKAV GLINTD TO      PD       --  -- --11 11-- --11 qq--

07h, Unbanked INTSTA  PEIF T0CKIF T0IF               INTF PEIE T0CKIE T0IE INTE 0000 0000 0000 0000

0Bh, Unbanked TMR0L TMR0 register; low byte                                            xxxx xxxx uuuu uuuu

0Ch, Unbanked TMR0H TMR0 register; high byte                                           xxxx xxxx uuuu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented read as a '0', q - value depends on condition, Shaded cells are not used by Timer0.
Note 1: Other (non power-up) resets include: external reset through MCLR and the Watchdog Timer Reset.

DS30412C-page 70                                                                1996 Microchip Technology Inc.
                                                                                     PIC17C4X

12.0 TIMER1, TIMER2, TIMER3,                               Timer3 is a 16-bit timer/counter consisting of the
         PWMS AND CAPTURES                                 TMR3H and TMR3L registers. This timer has four other
                                                           associated registers. Two registers are used as a 16-bit
The PIC17C4X has a wealth of timers and time-based         period register or a 16-bit Capture1 register
functions to ease the implementation of control applica-   (PR3H/CA1H:PR3L/CA1L). The other two registers are
tions. These time-base functions include two PWM out-      strictly the Capture2 registers (CA2H:CA2L). Timer3 is
puts and two Capture inputs.                               the time-base for the two 16-bit captures.

Timer1 and Timer2 are two 8-bit incrementing timers,       TMR3 can be software configured to increment from
each with a period register (PR1 and PR2 respectively)     the internal system clock or from an external signal on
and separate overflow interrupt flags. Timer1 and          the RB5/TCLK3 pin.
Timer2 can operate either as timers (increment on
internal Fosc/4 clock) or as counters (increment on fall-  Figure 12-1 and Figure 12-2 are the control registers
ing edge of external clock on pin RB4/TCLK12). They        for the operation of Timer1, Timer2, and Timer3, as well
are also software configurable to operate as a single      as PWM1, PWM2, Capture1, and Capture2.
16-bit timer. These timers are also used as the
time-base for the PWM (pulse width modulation) mod-
ule.

FIGURE 12-1: TCON1 REGISTER (ADDRESS: 16h, BANK 3)

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

CA2ED1 CA2ED0 CA1ED1 CA1ED0 T16 TMR3CS TMR2CS TMR1CS                                 R = Readable bit
                                                                                     W = Writable bit
bit7                                                                      bit0       -n = Value at POR reset

bit 7-6:  CA2ED1:CA2ED0: Capture2 Mode Select bits
          00 = Capture on every falling edge
          01 = Capture on every rising edge
          10 = Capture on every 4th rising edge
          11 = Capture on every 16th rising edge

bit 5-4:  CA1ED1:CA1ED0: Capture1 Mode Select bits
          00 = Capture on every falling edge
          01 = Capture on every rising edge
          10 = Capture on every 4th rising edge
          11 = Capture on every 16th rising edge

bit 3:    T16: Timer1:Timer2 Mode Select bit
          1 = Timer1 and Timer2 form a 16-bit timer
          0 = Timer1 and Timer2 are two 8-bit timers

bit 2:    TMR3CS: Timer3 Clock Source Select bit
          1 = TMR3 increments off the falling edge of the RB5/TCLK3 pin
          0 = TMR3 increments off the internal clock

bit 1:    TMR2CS: Timer2 Clock Source Select bit
          1 = TMR2 increments off the falling edge of the RB4/TCLK12 pin
          0 = TMR2 increments off the internal clock

bit 0:    TMR1CS: Timer1 Clock Source Select bit
          1 = TMR1 increments off the falling edge of the RB4/TCLK12 pin
          0 = TMR1 increments off the internal clock

1996 Microchip Technology Inc.                                                     DS30412C-page 71

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

FIGURE 12-2: TCON2 REGISTER (ADDRESS: 17h, BANK 3)

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

CA2OVF CA1OVF PWM2ON PWM1ON CA1/PR3 TMR3ON TMR2ON TMR1ON R = Readable bit

bit7                                                                  bit0 W = Writable bit
                                                                      -n = Value at POR reset

bit 7: CA2OVF: Capture2 Overflow Status bit

        This bit indicates that the capture value had not been read from the capture register pair (CA2H:CA2L)

        before the next capture event occurred. The capture register retains the oldest unread capture value (last

        capture before overflow). Subsequent capture events will not update the capture register with the Timer3

        value until the capture register has been read (both bytes).

        1 = Overflow occurred on Capture2 register

        0 = No overflow occurred on Capture2 register

bit 6:  CA1OVF: Capture1 Overflow Status bit
        This bit indicates that the capture value had not been read from the capture register pair
        (PR3H/CA2H:PR3L/CA2L) before the next capture event occurred. The capture register retains the old-
        est unread capture value (last capture before overflow). Subsequent capture events will not update the
        capture register with the TMR3 value until the capture register has been read (both bytes).
        1 = Overflow occurred on Capture1 register
        0 = No overflow occurred on Capture1 register

bit 5:  PWM2ON: PWM2 On bit
        1 = PWM2 is enabled (The RB3/PWM2 pin ignores the state of the DDRB<3> bit)
        0 = PWM2 is disabled (The RB3/PWM2 pin uses the state of the DDRB<3> bit for data direction)

bit 4:  PWM1ON: PWM1 On bit
        1 = PWM1 is enabled (The RB2/PWM1 pin ignores the state of the DDRB<2> bit)
        0 = PWM1 is disabled (The RB2/PWM1 pin uses the state of the DDRB<2> bit for data direction)

bit 3:  CA1/PR3: CA1/PR3 Register Mode Select bit
        1 = Enables Capture1 (PR3H/CA1H:PR3L/CA1L is the Capture1 register. Timer3 runs without
        a period register)
        0 = Enables the Period register (PR3H/CA1H:PR3L/CA1L is the Period register for Timer3)

bit 2:  TMR3ON: Timer3 On bit
        1 = Starts Timer3
        0 = Stops Timer3

bit 1:  TMR2ON: Timer2 On bit
        This bit controls the incrementing of the Timer2 register. When Timer2:Timer1 form the 16-bit timer (T16
        is set), TMR2ON must be set. This allows the MSB of the timer to increment.
        1 = Starts Timer2 (Must be enabled if the T16 bit (TCON1<3>) is set)
        0 = Stops Timer2

bit 0:  TMR1ON: Timer1 On bit
        When T16 is set (in 16-bit Timer Mode)
        1 = Starts 16-bit Timer2:Timer1
        0 = Stops 16-bit Timer2:Timer1

        When T16 is clear (in 8-bit Timer Mode)
        1 = Starts 8-bit Timer1
        0 = Stops 8-bit Timer1

DS30412C-page 72                                                       1996 Microchip Technology Inc.
12.1 Timer1 and Timer2                                                       PIC17C4X

12.1.1 TIMER1, TIMER2 IN 8-BIT MODE                           12.1.1.1 EXTERNAL CLOCK INPUT FOR TIMER1
                                                                             OR TIMER2
Both Timer1 and Timer2 will operate in 8-bit mode
when the T16 bit is clear. These two timers can be inde-      When TMRxCS is set, the clock source is the
pendently configured to increment from the internal           RB4/TCLK12 pin, and the timer will increment on every
instruction cycle clock or from an external clock source      falling edge on the RB4/TCLK12 pin. The TCLK12 input
on the RB4/TCLK12 pin. The timer clock source is con-         is synchronized with internal phase clocks. This causes
figured by the TMRxCS bit (x = 1 for Timer1 or = 2 for        a delay from the time a falling edge appears on TCLK12
Timer2). When TMRxCS is clear, the clock source is            to the time TMR1 or TMR2 is actually incremented. For
internal and increments once every instruction cycle          the external clock input timing requirements, see the
(Fosc/4). When TMRxCS is set, the clock source is the         Electrical Specification section.
RB4/TCLK12 pin, and the timer will increment on every
falling edge of the RB4/TCLK12 pin.

The timer increments from 00h until it equals the Period
register (PRx). It then resets to 00h at the next incre-
ment cycle. The timer interrupt flag is set when the timer
is reset. TMR1 and TMR2 have individual interrupt flag
bits. The TMR1 interrupt flag bit is latched into TMR1IF,
and the TMR2 interrupt flag bit is latched into TMR2IF.

Each timer also has a corresponding interrupt enable
bit (TMRxIE). The timer interrupt can be enabled by set-
ting this bit and disabled by clearing this bit. For periph-
eral interrupts to be enabled, the Peripheral Interrupt
Enable bit must be enabled (PEIE is set) and global
interrupts must be enabled (GLINTD is cleared).

The timers can be turned on and off under software
control. When the Timerx On control bit (TMRxON) is
set, the timer increments from the clock source. When
TMRxON is cleared, the timer is turned off and cannot
cause the timer interrupt flag to be set.

FIGURE 12-3: TIMER1 AND TIMER2 IN TWO 8-BIT TIMER/COUNTER MODE

Fosc/4                              0                                                    Reset
                                                                                         Equal
                                    1                               TMR1                        Set TMR1IF
                                                TMR1ON        CCoommppaarraatotorr         (PIR<4>)
                                                (TCON2<0>)
                                                                     PR1
                                  TMR1CS
                                  (TCON1<0>)

RB4/TCLK12

Fosc/4                              1                               TMR2                 Reset  Set TMR2IF
                                                              CCoommppaarraatotorr  Equal  (PIR<5>)
                                    0
                                                TMR2ON               PR2
                                                (TCON2<1>)

                                  TMR2CS
                                  (TCON1<1>)

1996 Microchip Technology Inc.                                                                DS30412C-page 73
PIC17C4X

12.1.2 TIMER1 & TIMER2 IN 16-BIT MODE                                  12.1.2.1 EXTERNAL CLOCK INPUT FOR
                                                                                      TMR1:TMR2
To select 16-bit mode, the T16 bit must be set. In this
mode TMR1 and TMR2 are concatenated to form a                          When TMR1CS is set, the 16-bit TMR2:TMR1 incre-
16-bit timer (TMR2:TMR1). The 16-bit timer incre-                      ments on the falling edge of clock input TCLK12. The
ments until it matches the 16-bit period register                      input on the RB4/TCLK12 pin is sampled and synchro-
(PR2:PR1). On the following timer clock, the timer                     nized by the internal phase clocks twice every instruc-
value is reset to 0h, and the TMR1IF bit is set.                       tion cycle. This causes a delay from the time a falling
                                                                       edge appears on RB4/TCLK12 to the time
When selecting the clock source for the16-bit timer, the               TMR2:TMR1 is actually incremented. For the external
TMR1CS bit controls the entire 16-bit timer and                        clock input timing requirements, see the Electrical
TMR2CS is a "don't care." When TMR1CS is clear, the                    Specification section.
timer increments once every instruction cycle (Fosc/4).
When TMR1CS is set, the timer increments on every                      TABLE 12-1: TURNING ON 16-BIT TIMER
falling edge of the RB4/TCLK12 pin. For the 16-bit timer
to increment, both TMR1ON and TMR2ON bits must be                      TMR2ON          TMR1ON         Result
set (Table 12-1).                                                           1

                                                                            0           1      16-bit timer
                                                                            x
                                                                                               (TMR2:TMR1) ON

                                                                                        1      Only TMR1 increments

                                                                                        0      16-bit timer OFF

FIGURE 12-4: TMR1 AND TMR2 IN 16-BIT TIMER/COUNTER MODE

                           1                                                                   Reset
                                                                                               Equal
RB4/TCLK12                                                   TMR2 x 8         TMR1 x 8                Set Interrupt TMR1IF
                   Fosc/4                                                                             (PIR<4>)
                           0

                                     TMR1ON                         Comparator 6
                                     (TCON2<0>)

                           TMR1CS                            PR2 x 8          PR1 x 8
                           (TCON1<0>)

TABLE 12-2: SUMMARY OF TIMER1 AND TIMER2 REGISTERS

                                                                                                      Value on Value on all

Address  Name                 Bit 7    Bit 6          Bit 5  Bit 4     Bit 3  Bit 2    Bit 1   Bit 0  Power-on other resets

                                                                                                      Reset      (Note1)

16h, Bank 3 TCON1             CA2ED1 CA2ED0 CA1ED1 CA1ED0 T16 TMR3CS TMR2CS TMR1CS 0000 0000 0000 0000
17h, Bank 3 TCON2
10h, Bank 2 TMR1              CA2OVF CA1OVF PWM2ON PWM1ON CA1/PR3 TMR3ON TMR2ON TMR1ON 0000 0000 0000 0000
11h, Bank 2 TMR2
16h, Bank 1 PIR               Timer1 register                                                         xxxx xxxx uuuu uuuu
17h, Bank 1 PIE
07h, Unbanked INTSTA          Timer2 register                                                         xxxx xxxx uuuu uuuu

                              RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF TXIF RCIF 0000 0010 0000 0010

                              RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE TXIE RCIE 0000 0000 0000 0000

                              PEIF T0CKIF T0IF               INTF      PEIE T0CKIE T0IE        INTE 0000 0000 0000 0000

06h, Unbanked CPUSTA          --       --             STKAV GLINTD TO         PD        --     -- --11 11-- --11 qq--

14h, Bank 2 PR1               Timer1 period register                                                  xxxx xxxx uuuu uuuu

15h, Bank 2 PR2               Timer2 period register                                                  xxxx xxxx uuuu uuuu

10h, Bank 3 PW1DCL            DC1      DC0            --     --        --     --        --     -- xx-- ---- uu-- ----

11h, Bank 3 PW2DCL            DC1      DC0 TM2PW2            --        --     --        --     -- xx0- ---- uu0- ----

12h, Bank 3 PW1DCH            DC9      DC8            DC7    DC6       DC5    DC4      DC3     DC2 xxxx xxxx uuuu uuuu

13h, Bank 3 PW2DCH            DC9      DC8            DC7    DC6       DC5    DC4      DC3     DC2 xxxx xxxx uuuu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented read as a '0', q - value depends on condition,
             shaded cells are not used by Timer1 or Timer2.

Note 1: Other (non power-up) resets include: external reset through MCLR and WDT Timer Reset.

DS30412C-page 74                                                                               1996 Microchip Technology Inc.
                                                                                     PIC17C4X

12.1.3 USING PULSE WIDTH MODULATION                       FIGURE 12-5: SIMPLIFIED PWM BLOCK
            (PWM) OUTPUTS WITH TMR1 AND TMR2                                   DIAGRAM

Two high speed pulse width modulation (PWM) outputs            Duty Cycle registers     PWxDCL<7:6>
are provided. The PWM1 output uses Timer1 as its             PWxDCH                  Write
time-base, while PWM2 may be software configured to
use either Timer1 or Timer2 as the time-base. The            (Slave)                 Read
PWM outputs are on the RB2/PWM1 and RB3/PWM2                        Comparator
pins.                                                                                                RCy/PWMx

Each PWM output has a maximum resolution of                                          RQ
10-bits. At 10-bit resolution, the PWM output frequency
is 24.4 kHz (@ 25 MHz clock) and at 8-bit resolution the     TMR2 (Note 1)           S        PWMxON
PWM output frequency is 97.7 kHz. The duty cycle of
the output can vary from 0% to 100%.                         Comparator         Clear Timer,
                                                              PRy               PWMx pin and
Figure 12-5 shows a simplified block diagram of the                             Latch D.C.
PWM module. The duty cycle register is double buff-
ered for glitch free operation. Figure 12-6 shows how a   Note 1: 8-bit timer is concatenated with 2-bit internal Q clock
glitch could occur if the duty cycle registers were not             or 2 bits of the prescaler to create 10-bit time-base.
double buffered.

The user needs to set the PWM1ON bit (TCON2<4>)
to enable the PWM1 output. When the PWM1ON bit is
set, the RB2/PWM1 pin is configured as PWM1 output
and forced as an output irrespective of the data direc-
tion bit (DDRB<2>). When the PWM1ON bit is clear,
the pin behaves as a port pin and its direction is con-
trolled by its data direction bit (DDRB<2>). Similarly,
the PWM2ON (TCON2<5>) bit controls the configura-
tion of the RB3/PWM2 pin.

FIGURE 12-6: PWM OUTPUT

        0 10 20 30 40                                     0

PWM
output

        Timer                     Write new               Timer interrupt
        interrupt                 PWM value               new PWM value
                                                          transferred to slave

Note The dotted line shows PWM output if duty cycle registers were not double buffered.
          If the new duty cycle is written after the timer has passed that value, then the PWM does
          not reset at all during the current cycle causing a "glitch".

        In this example, PWM period = 50. Old duty cycle is 30. New duty cycle value is 10.

1996 Microchip Technology Inc.                                                              DS30412C-page 75
PIC17C4X

12.1.3.1 PWM PERIODS                                      The user should also avoid any "read-modify-write"
                                                          operations on the duty cycle registers, such as: ADDWF
The period of the PWM1 output is determined by            PW1DCH. This may cause duty cycle outputs that are
Timer1 and its period register (PR1). The period of the   unpredictable.
PWM2 output can be software configured to use either
Timer1 or Timer2 as the time-base. When TM2PW2 bit        TABLE 12-3: PWM FREQUENCY vs.
(PW2DCL<5>) is clear, the time-base is determined by                           RESOLUTION AT 25 MHz
TMR1 and PR1. When TM2PW2 is set, the time-base
is determined by Timer2 and PR2.                          PWM                 Frequency (kHz)

Running two different PWM outputs on two different        Frequency 24.4 48.8 65.104 97.66 390.6
timers allows different PWM periods. Running both
PWMs from Timer1 allows the best use of resources by      PRx Value   0xFF    0x7F 0x5F      0x3F   0x0F
freeing Timer2 to operate as an 8-bit timer. Timer1 and               10-bit  9-bit 8.5-bit  8-bit  6-bit
Timer2 can not be used as a 16-bit timer if either PWM    High
is being used.                                            Resolution  8-bit   7-bit 6.5-bit  6-bit  4-bit

The PWM periods can be calculated as follows:             Standard
                                                          Resolution
      period of PWM1 =[(PR1) + 1] x 4TOSC
                                                          12.1.3.2 PWM INTERRUPTS
      period of PWM2 =[(PR1) + 1] x 4TOSC or
                              [(PR2) + 1] x 4TOSC         The PWM module makes use of TMR1 or TMR2 inter-
                                                          rupts. A timer interrupt is generated when TMR1 or
The duty cycle of PWMx is determined by the 10-bit        TMR2 equals its period register and is cleared to zero.
value DCx<9:0>. The upper 8-bits are from register        This interrupt also marks the beginning of a PWM
PWxDCH and the lower 2-bits are from PWxDCL<7:6>          cycle. The user can write new duty cycle values before
(PWxDCH:PWxDCL<7:6>). Table 12-3 shows the                the timer roll-over. The TMR1 interrupt is latched into
maximum PWM frequency (FPWM) given the value in           the TMR1IF bit and the TMR2 interrupt is latched into
the period register.                                      the TMR2IF bit. These flags must be cleared in soft-
                                                          ware.
The number of bits of resolution that the PWM can
achieve depends on the operation frequency of the         12.1.3.3 EXTERNAL CLOCK SOURCE
device as well as the PWM frequency (FPWM).
                                                          The PWMs will operate regardless of the clock source
Maximum PWM resolution (bits) for a given PWM fre-        of the timer. The use of an external clock has ramifica-
quency:                                                   tions that must be understood. Because the external
                                                          TCLK12 input is synchronized internally (sampled once
       ( ) = log  FOSC                                    per instruction cycle), the time TCLK12 changes to the
                  FPWM                                    time the timer increments will vary by as much as TCY
                                                          (one instruction cycle). This will cause jitter in the duty
                           bits                           cycle as well as the period of the PWM output.

                  log (2)                                 This jitter will be TCY, unless the external clock is syn-
                                                          chronized with the processor clock. Use of one of the
The PWMx duty cycle is as follows:                        PWM outputs as the clock source to the TCLKx input,
                                                          will supply a synchronized clock.
      PWMx Duty Cycle = (DCx) x TOSC
                                                          In general, when using an external clock source for
where DCx represents the 10-bit value from                PWM, its frequency should be much less than the
PWxDCH:PWxDCL.                                            device frequency (Fosc).

If DCx = 0, then the duty cycle is zero. If PRx =
PWxDCH, then the PWM output will be low for one to
four Q-clock (depending on the state of the
PWxDCL<7:6> bits). For a Duty Cycle to be 100%, the
PWxDCH value must be greater then the PRx value.

The duty cycle registers for both PWM outputs are dou-
ble buffered. When the user writes to these registers,
they are stored in master latches. When TMR1 (or
TMR2) overflows and a new PWM period begins, the
master latch values are transferred to the slave latches
and the PWMx pin is forced high.

Note:  For PW1DCH, PW1DCL, PW2DCH and
       PW2DCL registers, a write operation
       writes to the "master latches" while a read
       operation reads the "slave latches". As a
       result, the user may not read back what
       was just written to the duty cycle registers.

DS30412C-page 76                                                               1996 Microchip Technology Inc.
                                                                                      PIC17C4X

12.1.3.3.1 MAX RESOLUTION/FREQUENCY FOR                          Timer3 has two modes of operation, depending on the
               EXTERNAL CLOCK INPUT                              CA1/PR3 bit (TCON2<3>). These modes are:

The use of an external clock for the PWM time-base                One capture and one period register mode
(Timer1 or Timer2) limits the PWM output to a maxi-
mum resolution of 8-bits. The PWxDCL<7:6> bits must               Dual capture register mode
be kept cleared. Use of any other value will distort the
PWM output. All resolutions are supported when inter-            The PIC17C4X has up to two 16-bit capture registers
nal clock mode is selected. The maximum attainable               that capture the 16-bit value of TMR3 when events are
frequency is also lower. This is a result of the timing          detected on capture pins. There are two capture pins
requirements of an external clock input for a timer (see         (RB0/CAP1 and RB1/CAP2), one for each capture reg-
the Electrical Specification section). The maximum               ister. The capture pins are multiplexed with PORTB
PWM frequency, when the timers clock source is the               pins. An event can be:
RB4/TCLK12 pin, is shown in Table 12-3 (standard res-
olution mode).                                                    a rising edge
                                                                  a falling edge
12.2 Timer3                                                       every 4th rising edge
                                                                  every 16th rising edge
Timer3 is a 16-bit timer consisting of the TMR3H and
TMR3L registers. TMR3H is the high byte of the timer             Each 16-bit capture register has an interrupt flag asso-
and TMR3L is the low byte. This timer has an associ-             ciated with it. The flag is set when a capture is made.
ated 16-bit period register (PR3H/CA1H:PR3L/CA1L).               The capture module is truly part of the Timer3 block.
This period register can be software configured to be a          Figure 12-7 and Figure 12-8 show the block diagrams
second 16-bit capture register.                                  for the two modes of operation.

When the TMR3CS bit (TCON1<2>) is clear, the timer
increments every instruction cycle (Fosc/4). When
TMR3CS is set, the timer increments on every falling
edge of the RB5/TCLK3 pin. In either mode, the
TMR3ON bit must be set for the timer to increment.
When TMR3ON is clear, the timer will not increment or
set the TMR3IF bit.

TABLE 12-4: REGISTERS/BITS ASSOCIATED WITH PWM

Address  Name         Bit 7       Bit 6     Bit 5         Bit 4  Bit 3  Bit 2  Bit 1  Bit 0          Value on  Value on all
                                                                                                     Power-on      other
                                                                                                                  resets
                                                                                                       Reset      (Note1)

16h, Bank 3 TCON1     CA2ED1 CA2ED0 CA1ED1 CA1ED0                T16 TMR3CS TMR2CS TMR1CS 0000 0000 0000 0000

17h, Bank 3 TCON2     CA2OVF CA1OVF         PWM2ON PWM1ON CA1/PR3 TMR3ON TMR2ON TMR1ON 0000 0000 0000 0000
10h, Bank 2 TMR1
11h, Bank 2 TMR2      Timer1 register                                                                xxxx xxxx uuuu uuuu
16h, Bank 1 PIR
17h, Bank 1 PIE       Timer2 register                                                                xxxx xxxx uuuu uuuu
07h, Unbanked INTSTA
                      RBIF TMR3IF           TMR2IF TMR1IF CA2IF CA1IF          TXIF   RCIF 0000 0010 0000 0010

                      RBIE TMR3IE           TMR2IE TMR1IE CA2IE CA1IE          TXIE   RCIE 0000 0000 0000 0000

                      PEIF        T0CKIF    T0IF          INTF   PEIE T0CKIE T0IE     INTE 0000 0000 0000 0000

06h, Unbanked CPUSTA  --               --   STKAV GLINTD         TO     PD     --     --             --11 11-- --11 qq--
                                                                                                     xx-- ---- uu-- ----
10h, Bank 3 PW1DCL    DC1              DC0  --            --     --     --     --     --             xx0- ---- uu0- ----
                                                                                                     xxxx xxxx uuuu uuuu
11h, Bank 3 PW2DCL    DC1              DC0  TM2PW2        --     --     --     --     --             xxxx xxxx uuuu uuuu

12h, Bank 3 PW1DCH    DC9              DC8  DC7           DC6    DC5    DC4    DC3    DC2

13h, Bank 3 PW2DCH    DC9              DC8  DC7           DC6    DC5    DC4    DC3    DC2

Legend: x = unknown, u = unchanged, - = unimplemented read as '0', q = value depends on conditions,
             shaded cells are not used by PWM.

1996 Microchip Technology Inc.                                                                     DS30412C-page 77
PIC17C4X

12.2.1 ONE CAPTURE AND ONE PERIOD                                Capture pin RB1/CAP2 is a multiplexed pin. When used
            REGISTER MODE                                        as a port pin, Capture2 is not disabled. However, the
                                                                 user can simply disable the Capture2 interrupt by clear-
In this mode registers PR3H/CA1H and PR3L/CA1L                   ing CA2IE. If RB1/CAP2 is used as an output pin, the
constitute a 16-bit period register. A block diagram is          user can activate a capture by writing to the port pin.
shown in Figure 12-7. The timer increments until it              This may be useful during development phase to emu-
equals the period register and then resets to 0000h.             late a capture interrupt.
TMR3 Interrupt Flag bit (TMR3IF) is set at this point.
This interrupt can be disabled by clearing the TMR3              The input on capture pin RB1/CAP2 is synchronized
Interrupt Enable bit (TMR3IE). TMR3IF must be                    internally to internal phase clocks. This imposes certain
cleared in software.                                             restrictions on the input waveform (see the Electrical
                                                                 Specification section for timing).
This mode is selected if control bit CA1/PR3 is clear. In
this mode, the Capture1 register, consisting of high             The Capture2 overflow status flag bit is double buff-
byte (PR3H/CA1H) and low byte (PR3L/CA1L), is con-               ered. The master bit is set if one captured word is
figured as the period control register for TMR3.                 already residing in the Capture2 register and another
Capture1 is disabled in this mode, and the correspond-           "event" has occurred on the RB1/CA2 pin. The new
ing Interrupt bit CA1IF is never set. TMR3 increments            event will not transfer the Timer3 value to the capture
until it equals the value in the period register and then        register, protecting the previous unread capture value.
resets to 0000h.                                                 When the user reads both the high and the low bytes (in
                                                                 any order) of the Capture2 register, the master overflow
Capture2 is active in this mode. The CA2ED1 and                  bit is transferred to the slave overflow bit (CA2OVF) and
CA2ED0 bits determine the event on which capture will            then the master bit is reset. The user can then read
occur. The possible events are:                                  TCON2 to determine the value of CA2OVF.

Capture on every falling edge                                  The recommended sequence to read capture registers
Capture on every rising edge                                   and capture overflow flag bits is shown in
Capture every 4th rising edge                                  Example 12-1.
Capture every 16th rising edge
                                                                 EXAMPLE 12-1: SEQUENCE TO READ
When a capture takes place, an interrupt flag is latched                                 CAPTURE REGISTERS
into the CA2IF bit. This interrupt can be enabled by set-
ting the corresponding mask bit CA2IE. The Peripheral            MOVLB 3                       ;Select Bank 3
Interrupt Enable bit (PEIE) must be set and the Global
Interrupt Disable bit (GLINTD) must be cleared for the           MOVPF CA2L,LO_BYTE ;Read Capture2 low
interrupt to be acknowledged. The CA2IF interrupt flag
bit must be cleared in software.                                                               ;byte, store in LO_BYTE

When the capture prescale select is changed, the pres-           MOVPF CA2H,HI_BYTE ;Read Capture2 high
caler is not reset and an event may be generated.
Therefore, the first capture after such a change will be                                       ;byte, store in HI_BYTE
ambiguous. However, it sets the time-base for the next
capture. The prescaler is reset upon chip reset.                 MOVPF TCON2,STAT_VAL ;Read TCON2 into file

                                                                                               ;STAT_VAL

FIGURE 12-7: TIMER3 WITH ONE CAPTURE AND ONE PERIOD REGISTER BLOCK DIAGRAM

                          TMR3CS                           PR3H/CA1H PR3L/CA1L
                          (TCON1<2>)
                                                                                               Set TMR3IF
                                                           CCoommppaarraatotor16         (PIR<6>)

                  Fosc/4  0                                                             Equal
                                                                                        Reset

                          1                                TMR3H          TMR3L

RB5/TCLK3                    TMR3ON
                             (TCON2<2>) Capture1 Enable

                      Edge select                          CA2H           CA2L
                    prescaler select
RB1/CAP2                                                                                       Set CA2IF
                                 2                                                             (PIR<3>)

                  CA2ED1: CA2ED0
                  (TCON1<7:6>)

DS30412C-page 78                                                                         1996 Microchip Technology Inc.
                                                                                                          PIC17C4X

12.2.2 DUAL CAPTURE REGISTER MODE                             The Capture2 overflow status flag bit is double buff-
                                                              ered. The master bit is set if one captured word is
This mode is selected by setting CA1/PR3. A block dia-        already residing in the Capture2 register and another
gram is shown in Figure 12-8. In this mode, TMR3 runs         "event" has occurred on the RB1/CA2 pin. The new
without a period register and increments from 0000h to        event will not transfer the TMR3 value to the capture
FFFFh and rolls over to 0000h. The TMR3 interrupt             register which protects the previous unread capture
Flag (TMR3IF) is set on this roll over. The TMR3IF bit        value. When the user reads both the high and the low
must be cleared in software.                                  bytes (in any order) of the Capture2 register, the master
                                                              overflow bit is transferred to the slave overflow bit
Registers PR3H/CA1H and PR3L/CA1L make a 16-bit               (CA2OVF) and then the master bit is reset. The user
capture register (Capture1). It captures events on pin        can then read TCON2 to determine the value of
RB0/CAP1. Capture mode is configured by the                   CA2OVF.
CA1ED1 and CA1ED0 bits. Capture1 Interrupt Flag bit
(CA1IF) is set on the capture event. The corresponding        The operation of the Capture1 feature is identical to
interrupt mask bit is CA1IE. The Capture1 Overflow            Capture2 (as described in Section 12.2.1).
Status bit is CA1OVF.

FIGURE 12-8: TIMER3 WITH TWO CAPTURE REGISTERS BLOCK DIAGRAM

         CA1ED1, CA1ED0

         (TCON1<5:4>)             2

                      Edge Select                                    PR3H/CA1H               PR3L/CA1L            Set CA1IF
                      Prescaler Select                  Capture Enable                                            (PIR<2>)

RB0/CAP1                                                                                                          Set TMR3IF
                                                                                                                   (PIR<6>)
          Fosc/4         0
                                                                                                                  Set CA2IF
                                  1                                    TMR3H                     TMR3L            (PIR<3>)
                                                        Capture Enable
RB5/TCLK3                                TMR3ON
                      TMR3CS (TCON2<2>)
                      (TCON1<2>)

                      Edge Select                                    CA2H                           CA2L
                      Prescaler Select
RB1/CAP2
                            2
                                 CA2ED1, CA2ED0
                                 (TCON1<7:6>)

TABLE 12-5: REGISTERS ASSOCIATED WITH CAPTURE

                                                                                                           Value on Value on all

Address   Name         Bit 7         Bit 6      Bit 5  Bit 4  Bit 3                   Bit 2  Bit 1  Bit 0  Power-on other resets

                                                                                                           Reset  (Note1)

16h, Bank 3 TCON1     CA2ED1 CA2ED0 CA1ED1 CA1ED0 T16 TMR3CS TMR2CS TMR1CS 0000 0000 0000 0000

17h, Bank 3 TCON2     CA2OVF CA1OVF PWM2ON PWM1ON CA1/PR3 TMR3ON TMR2ON TMR1ON 0000 0000 0000 0000

12h, Bank 2 TMR3L     TMR3 register; low byte                                                              xxxx xxxx uuuu uuuu

13h, Bank 2 TMR3H     TMR3 register; high byte                                                             xxxx xxxx uuuu uuuu

16h, Bank 1 PIR        RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF TXIF RCIF 0000 0010 0000 0010

17h, Bank 1 PIE        RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE TXIE RCIE 0000 0000 0000 0000

07h, Unbanked INTSTA   PEIF T0CKIF T0IF                INTF   PEIE T0CKIE T0IE INTE 0000 0000 0000 0000

06h, Unbanked CPUSTA   --            --        STKAV GLINTD   TO                      PD     --           -- --11 11-- --11 qq--

16h, Bank 2 PR3L/CA1L Timer3 period register, low byte/capture1 register, low byte                         xxxx xxxx uuuu uuuu

17h, Bank 2 PR3H/CA1H Timer3 period register, high byte/capture1 register, high byte                       xxxx xxxx uuuu uuuu

14h, Bank 3 CA2L      Capture2 low byte                                                                    xxxx xxxx uuuu uuuu

15h, Bank 3 CA2H      Capture2 high byte                                                                   xxxx xxxx uuuu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented read as '0', q - value depends on condition,
             shaded cells are not used by Capture.

Note 1: Other (non power-up) resets include: external reset through MCLR and WDT Timer Reset.

1996 Microchip Technology Inc.                                                                           DS30412C-page 79
PIC17C4X

12.2.3 EXTERNAL CLOCK INPUT FOR TIMER3                          EXAMPLE 12-2: WRITING TO TMR3

When TMR3CS is set, the 16-bit TMR3 increments on               BSF CPUSTA, GLINTD ;Disable interrupt
the falling edge of clock input TCLK3. The input on the         MOVFP RAM_L, TMR3L ;
RB5/TCLK3 pin is sampled and synchronized by the                MOVFP RAM_H, TMR3H ;
internal phase clocks twice every instruction cycle. This       BCF CPUSTA, GLINTD ;Done,enable interrupt
causes a delay from the time a falling edge appears on
TCLK3 to the time TMR3 is actually incremented. For             EXAMPLE 12-3: READING FROM TMR3
the external clock input timing requirements, see the
Electrical Specification section. Figure 12-9 shows the         MOVPF   TMR3L, TMPLO  ;read low tmr0
timing diagram when operating from an external clock.           MOVPF   TMR3H, TMPHI  ;read high tmr0
                                                                MOVFP   TMPLO, WREG   ;tmplo -> wreg
12.2.4 READING/WRITING TIMER3                                   CPFSLT  TMR3L, WREG   ;tmr0l < wreg?
                                                                RETURN                ;no then return
Since Timer3 is a 16-bit timer and only 8-bits at a time        MOVPF   TMR3L, TMPLO  ;read low tmr0
can be read or written, care should be taken when               MOVPF   TMR3H, TMPHI  ;read high tmr0
reading or writing while the timer is running. The best         RETURN                ;return
method to read or write the timer is to stop the timer,
perform any read or write operation, and then restart
Timer3 (using the TMR3ON bit). However, if it is neces-
sary to keep Timer3 free-running, care must be taken.
For writing to the 16-bit TMR3, Example 12-2 may be
used. For reading the 16-bit TMR3, Example 12-3 may
be used. Interrupts must be disabled during this rou-
tine.

FIGURE 12-9: TMR1, TMR2, AND TMR3 OPERATION IN EXTERNAL CLOCK MODE

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

                  TCLK12

TMR1, TMR2, or TMR3          34h    35h                    A8h                   A9h  00h

PR1, PR2, or PR3H:PR3L       'A9h'                                                    'A9h'
                     WR_TMR

                  Read_TMR

       TMRxIF                           MOVWF                MOVFP      MOVFP
                                         TMRx                TMRx,W     TMRx,W
Instruction
executed                            Write to TMRx          Read TMRx  Read TMRx

                             Note 1: TCLK12 is sampled in Q2 and Q4.

                                    2:  indicates a sampling point.
                                    3: The latency from TCLK12  to timer increment is between 2Tosc and 6Tosc.

DS30412C-page 80                                                                      1996 Microchip Technology Inc.
                                                                                             PIC17C4X

FIGURE 12-10: TMR1, TMR2, AND TMR3 OPERATION IN TIMER MODE

                              Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4

AD15:AD0

         ALE

Instruction    MOVWF  MOVF        MOVF         MOVLB 3  BSF        NOP        BCF     NOP    NOP    NOP    NOP
fetched                                                                   TCON2, 0
               TMR1   TMR1, W TMR1, W                   TCON2, 0          Start TMR1

               Write TMR1 Read TMR1 Read TMR1           Stop TMR1

         TMR1    04h  05h         03h           04h     05h        06h                07h           08h    00h

         PR1

TMR1ON

WR_TMR1
WR_TCON2

TMR1IF

RD_TMR1

                                  TMR1         TMR1

                                  reads 03h reads 04h

TABLE 12-6: SUMMARY OF TMR1, TMR2, AND TMR3 REGISTERS

                                                                                                    Value on Value on all

Address        Name   Bit 7       Bit 6         Bit 5   Bit 4      Bit 3  Bit 2       Bit 1  Bit 0  Power-on other resets

                                                                                                    Reset  (Note1)

16h, Bank 3 TCON1     CA2ED1 CA2ED0 CA1ED1 CA1ED0 T16 TMR3CS TMR2CS TMR1CS 0000 0000 0000 0000

17h, Bank 3 TCON2     CA2OVF CA1OVF PWM2ON PWM1ON CA1/PR3 TMR3ON TMR2ON TMR1ON 0000 0000 0000 0000
10h, Bank 2 TMR1
11h, Bank 2 TMR2      Timer1 register                                                               xxxx xxxx uuuu uuuu
12h, Bank 2 TMR3L
13h, Bank 2 TMR3H     Timer2 register                                                               xxxx xxxx uuuu uuuu
16h, Bank 1 PIR
17h, Bank 1 PIE       TMR3 register; low byte                                                       xxxx xxxx uuuu uuuu
07h, Unbanked INTSTA
                      TMR3 register; high byte                                                      xxxx xxxx uuuu uuuu

                      RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF TXIF RCIF 0000 0010 0000 0010

                      RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE TXIE RCIE 0000 0000 0000 0000

                      PEIF T0CKIF T0IF                  INTF       PEIE T0CKIE T0IE          INTE 0000 0000 0000 0000

06h, Unbanked CPUSTA  --          --           STKAV GLINTD TO            PD          --     --     --11 11-- --11 qq--
                                                                                                    xxxx xxxx uuuu uuuu
14h, Bank 2 PR1       Timer1 period register                                                        xxxx xxxx uuuu uuuu
                                                                                                    xxxx xxxx uuuu uuuu
15h, Bank 2 PR2       Timer2 period register                                                        xxxx xxxx uuuu uuuu
                                                                                                    xx-- ---- uu-- ----
16h, Bank 2 PR3L/CA1L Timer3 period/capture1 register; low byte                                     xx0- ---- uu0- ----
                                                                                                    xxxx xxxx uuuu uuuu
17h, Bank 2 PR3H/CA1H Timer3 period/capture1 register; high byte                                    xxxx xxxx uuuu uuuu
                                                                                                    xxxx xxxx uuuu uuuu
10h, Bank 3 PW1DCL    DC1         DC0           --      --         --     --          --     --     xxxx xxxx uuuu uuuu

11h, Bank 3 PW2DCL    DC1         DC0 TM2PW2            --         --     --          --     --

12h, Bank 3 PW1DCH    DC9         DC8           DC7     DC6        DC5    DC4         DC3    DC2

13h, Bank 3 PW2DCH    DC9         DC8           DC7     DC6        DC5    DC4         DC3    DC2

14h, Bank 3 CA2L      Capture2 low byte

15h, Bank 3 CA2H      Capture2 high byte

Legend: x = unknown, u = unchanged, - = unimplemented read as '0', q - value depends on condition,
             shaded cells are not used by TMR1, TMR2 or TMR3.

Note 1: Other (non power-up) resets include: external reset through MCLR and WDT Timer Reset.

1996 Microchip Technology Inc.                                                                    DS30412C-page 81
PIC17C4X

NOTES:

DS30412C-page 82   1996 Microchip Technology Inc.
13.0 UNIVERSAL SYNCHRONOUS                                                 PIC17C4X
         ASYNCHRONOUS RECEIVER
         TRANSMITTER (USART)                                The SPEN (RCSTA<7>) bit has to be set in order to
         MODULE                                             configure RA4 and RA5 as the Serial Communication
                                                            Interface.
The USART module is a serial I/O module. The USART
can be configured as a full duplex asynchronous sys-        The USART module will control the direction of the
tem that can communicate with peripheral devices such       RA4/RX/DT and RA5/TX/CK pins, depending on the
as CRT terminals and personal computers, or it can be       states of the USART configuration bits in the RCSTA
configured as a half duplex synchronous system that         and TXSTA registers. The bits that control I/O direction
can communicate with peripheral devices such as A/D         are:
or D/A integrated circuits, Serial EEPROMs etc. The
USART can be configured in the following modes:             SPEN
                                                             TXEN
Asynchronous (full duplex)                                 SREN
                                                             CREN
Synchronous - Master (half duplex)                         CSRC

Synchronous - Slave (half duplex)                         The Transmit Status And Control Register is shown in
                                                            Figure 13-1, while the Receive Status And Control
                                                            Register is shown in Figure 13-2.

FIGURE 13-1: TXSTA REGISTER (ADDRESS: 15h, BANK 0)

R/W - 0 R/W - 0 R/W - 0 R/W - 0         U-0            U-0   R-1  R/W - x            R = Readable bit
CSRC TX9 TXEN SYNC                      --             --  TRMT  TX9D               W = Writable bit
                                                                                     -n = Value at POR reset
bit7                                                                   bit0
                                                                                          (x = unknown)

bit 7:  CSRC: Clock Source Select bit
        Synchronous mode:
        1 = Master Mode (Clock generated internally from BRG)
        0 = Slave mode (Clock from external source)
        Asynchronous mode:
        Don't care

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
        SREN/CREN overrides TXEN in SYNC mode

bit 4:  SYNC: USART mode Select bit
        (Synchronous/Asynchronous)
        1 = Synchronous mode
        0 = Asynchronous mode

bit 3-2: Unimplemented: Read as '0'

bit 1:  TRMT: Transmit Shift Register (TSR) Empty bit
        1 = TSR empty
        0 = TSR full

bit 0: TX9D: 9th bit of transmit data (can be used to calculated the parity in software)

1996 Microchip Technology Inc.                                                          DS30412C-page 83

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

FIGURE 13-2: RCSTA REGISTER (ADDRESS: 13h, BANK 0)

R/W - 0 R/W - 0 R/W - 0 R/W - 0        U-0      R- 0   R-0   R-x                  R = Readable bit
SPEN RX9 SREN CREN                     --      FERR  OERR  RX9D                  W = Writable bit
                                                                                  -n = Value at POR reset
bit7                                                           bit 0
                                                                                       (x = unknown)

bit 7:  SPEN: Serial Port Enable bit
        1 = Configures RA5/RX/DT and RA4/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
        This bit enables the reception of a single byte. After receiving the byte, this bit is automatically cleared.
        Synchronous mode:
        1 = Enable reception
        0 = Disable reception
        Note: This bit is ignored in synchronous slave reception.
        Asynchronous mode:
        Don't care

bit 4:  CREN: Continuous Receive Enable bit
        This bit enables the continuous reception of serial data.
        Asynchronous mode:
        1 = Enable reception
        0 = Disables reception
        Synchronous mode:
        1 = Enables continuous reception until CREN is cleared (CREN overrides SREN)
        0 = Disables continuous reception

bit 3: Unimplemented: Read as '0'

bit 2:  FERR: Framing Error bit
        1 = Framing error (Updated by reading RCREG)
        0 = No framing error

bit 1:  OERR: Overrun Error bit
        1 = Overrun (Cleared by clearing CREN)
        0 = No overrun error

bit 0: RX9D: 9th bit of receive data (can be the software calculated parity bit)

DS30412C-page 84                                                                   1996 Microchip Technology Inc.
                                                                                                       PIC17C4X

FIGURE 13-3: USART TRANSMIT

                                                                                                            Sync
                                                                                                       Master/Slave

                                                                          BRG          4

                       Sync/Async               Sync/Async                             Sync/Async
                                     TSR
CK/TX
                                   Start 0 1 7 8 Stop
                                                                          Clock                         16

    DT                                                                           Load

                                                                       8  Bit Count          TXEN/
                                   TXREG 0 1 7                                         Write to TXREG

                                                                                                    Interrupt

                                   Data Bus                               TXSTA<0>

                                                                                       TXIE

FIGURE 13-4: USART RECEIVE

        OSC            BRG         4                                                                                        Interrupt

                                        Master/Slave  Sync/Async                                       Async/Sync           RCIE
                                              Sync
                                                                                                                             SREN/
        Buffer                                                                                 enable                        CREN/
                                                                                    Bit Count                                Start_Bit
        Logic                        16
CK
                                   Majority
                       SPEN        Detect                                           START
                                                                                    Detect

               Buffer                                                     Clock        RSR
               Logic                                                      Data
RX                                                                                     MSb             LSb

                                                                                    Stop 8 7 1 0

                                                                               RX9                                   FIFO
                                                      Async/Sync                                                     Logic

                                                                                             RCREG                 Clk
                                                                                                                   FIFO
                                                                          FERR      RX9D 7 1 0
                                                                          FERR      RX9D 7 1 0

                                                                                                       Data Bus

1996 Microchip Technology Inc.                                                                                   DS30412C-page 85
PIC17C4X

13.1 USART Baud Rate Generator (BRG)                      Example 13-1 shows the calculation of the baud rate
                                                          error for the following conditions:
The BRG supports both the Asynchronous and Syn-
chronous modes of the USART. It is a dedicated 8-bit              FOSC = 16 MHz
baud rate generator. The SPBRG register controls the              Desired Baud Rate = 9600
period of a free running 8-bit timer. Table 13-1 shows            SYNC = 0
the formula for computation of the baud rate for differ-
ent USART modes. These only apply when the USART          EXAMPLE 13-1: CALCULATING BAUD
is in synchronous master mode (internal clock) and                                RATE ERROR
asynchronous mode.
                                                          Desired Baud rate=Fosc / (64 (X + 1))
Given the desired baud rate and Fosc, the nearest inte-
ger value between 0 and 255 can be calculated using              9600 = 16000000 /(64 (X + 1))
the formula below. The error in baud rate can then be
determined.                                                      X = 25.042 = 25

                                                                 Calculated Baud Rate=16000000 / (64 (25 + 1))

                                                                 = 9615

TABLE 13-1: BAUD RATE FORMULA                             Error =  (Calculated Baud Rate - Desired Baud Rate)
                                                                              Desired Baud Rate
SYNC     Mode                  Baud Rate
                                                                 = (9615 - 9600) / 9600

0 Asynchronous                 FOSC/(64(X+1))                    = 0.16%
                               FOSC/(4(X+1))
1        Synchronous

X = value in SPBRG (0 to 255)

                                                          Writing a new value to the SPBRG, causes the BRG
                                                          timer to be reset (or cleared), this ensures that the BRG
                                                          does not wait for a timer overflow before outputting the
                                                          new baud rate.

TABLE 13-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 all
                                                                                  Power-on       other resets

                                                                                    Reset           (Note1)

13h, Bank 0 RCSTA  SPEN RX9 SREN CREN --                  FERR OERR       RX9D 0000 -00x 0000 -00u

15h, Bank 0 TXSTA  CSRC TX9 TXEN SYNC --                  --       TRMT   TX9D    0000 --1x 0000 --1u

17h, Bank 0 SPBRG Baud rate generator register                                    xxxx xxxx uuuu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented read as a '0', shaded cells are not used by the Baud Rate Generator.
Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

DS30412C-page 86                                                          1996 Microchip Technology Inc.
                                                                                              PIC17C4X

TABLE 13-3: BAUD RATES FOR SYNCHRONOUS MODE

        FOSC = 33 MHz              FOSC = 25 MHz                FOSC = 20 MHz                     FOSC = 16 MHz  SPBRG
BAUD                   SPBRG                        SPBRG                             SPBRG                        value
RATE                     value                        value                             value
                       (decimal) KBAUD %ERROR       (decimal) KBAUD %ERROR            (decimal) KBAUD %ERROR     (decimal)
  (K) KBAUD %ERROR
                                                                                                                     --
0.3    NA      --       --       NA         --             --   NA        --         --      NA         --          --
1.2    NA      --                                                                                                   --
2.4    NA      --       --       NA         --             --   NA        --         --      NA         --          --
9.6    NA      --                                                                                                  207
19.2    NA      --       --       NA         --             --   NA        --         --      NA         --          51
76.8  77.10   +0.39                                                                                                  41
  96  95.93   -0.07      --       NA         --             --   NA        --         --      NA         --          12
300  294.64  -1.79                                                                                                   7
500  485.29  -2.94      --       NA         --             --   19.53     +1.73      255     19.23      +0.16        0
HIGH   8250     --                                                                                                  255
LOW   32.22     --       106      77.16      +0.47          80   76.92     +0.16      64      76.92      +0.16

                         85       96.15      +0.16          64   96.15     +0.16      51      95.24      -0.79

                         27       297.62 -0.79              20   294.1     -1.96      16      307.69 +2.56

                         16       480.77 -3.85              12   500       0          9       500        0

                         0        6250       --             0    5000      --         0       4000       --

                         255      24.41      --             255  19.53     --         255     15.625     --

BAUD   FOSC = 10 MHz              SPBRG      FOSC = 7.159 MHz              SPBRG      FOSC = 5.068 MHz           SPBRG
RATE                                value                                    value                                 value
              KBAUD    %ERROR                       KBAUD        %ERROR               KBAUD         %ERROR
  (K)                             (decimal)                                (decimal)                             (decimal)
                 NA         --                         NA             --                 NA              --
  0.3            NA         --        --               NA             --       --        NA              --          --
  1.2            NA         --        --               NA             --       --        NA              --          --
  2.4          9.766     +1.73        --             9.622         +0.23       --        9.6             0           --
  9.6          19.23     +0.16       255             19.24         +0.23      185       19.2             0          131
19.2          75.76      -1.36      129             77.82         +1.32       92       79.2          +3.13          65
76.8          96.15     +0.16        32             94.20          -1.88      22      97.48          +1.54          15
  96           312.5     +4.17        25             298.3          -0.57      18      316.8          +5.60          12
300            500         0          7               NA             --        5       NA               --           3
500           2500         --         4            1789.8            --       --      1267              --          --
HIGH           9.766        --         0             6.991            --        0      4.950             --           0
LOW                                  255                                      255                                   255

BAUD   FOSC = 3.579 MHz           SPBRG      FOSC = 1 MHz                  SPBRG      FOSC = 32.768 kHz          SPBRG
RATE                                value                                    value                                 value
              KBAUD    %ERROR                       KBAUD        %ERROR               KBAUD         %ERROR
  (K)                             (decimal)                                (decimal)                             (decimal)
                 NA         --                         NA             --               0.303          +1.14
  0.3            NA         --        --             1.202         +0.16       --      1.170           -2.48         26
  1.2            NA         --        --             2.404         +0.16      207                                     6
  2.4          9.622     +0.23        --             9.615         +0.16      103        NA              --          --
  9.6          19.04      -0.83       92             19.24         +0.16       25        NA              --          --
19.2          74.57      -2.90       46             83.34         +8.51       12        NA              --          --
76.8          99.43     _3.57        11                                                 NA              --          --
  96           298.3      -0.57        8               NA             --        2        NA              --          --
300             NA         --         2               NA             --       --        NA              --          --
500           894.9        --        --               NA             --       --       NA               --          --
HIGH           3.496        --         0              250             --       --      8.192             --           0
LOW                                  255             0.976            --        0      0.032             --         255
                                                                              255

1996 Microchip Technology Inc.                                                                         DS30412C-page 87
PIC17C4X

TABLE 13-4: BAUD RATES FOR ASYNCHRONOUS MODE

        FOSC = 33 MHz              FOSC = 25 MHz               FOSC = 20 MHz                     FOSC = 16 MHz  SPBRG
BAUD                   SPBRG                       SPBRG                             SPBRG                        value
RATE                     value                       value                             value
                       (decimal) KBAUD %ERROR      (decimal) KBAUD %ERROR            (decimal) KBAUD %ERROR     (decimal)
  (K) KBAUD %ERROR
                                                                                                                    --
0.3    NA      --       --      NA         --             --   NA        --         --      NA         --         207
1.2    NA      --                                                                                                 103
2.4  2.398   -0.07      --      NA         --             --   1.221     +1.73      255     1.202      +0.16       25
9.6  9.548   -0.54                                                                                                 12
19.2  19.09   -0.54      214     2.396      0.14           162  2.404     +0.16      129     2.404      +0.16
76.8  73.66   -4.09                                                                                                  2
  96  103.12  +7.42      53      9.53       -0.76          40   9.469     -1.36      32      9.615      +0.16       --
300  257.81  -14.06                                                                                                --
500  515.62  +3.13      26      19.53      +1.73          19   19.53     +1.73      15      19.23      +0.16       --
HIGH  515.62    --                                                                                                   0
LOW   2.014     --       6       78.13      +1.73          4    78.13     +1.73      3       83.33      +8.51      255

                         4       97.65      +1.73          3    104.2     +8.51      2       NA         --

                         1       390.63 +30.21             0    312.5     +4.17      0       NA         --

                         0       NA         --             --   NA        --         --      NA         --

                         0       --         --             0    312.5     --         0       250        --

                         255     1.53       --             255  1.221     --         255     0.977      --

BAUD   FOSC = 10 MHz             SPBRG      FOSC = 7.159 MHz              SPBRG      FOSC = 5.068 MHz           SPBRG
RATE                               value                                    value                                 value
              KBAUD    %ERROR                      KBAUD        %ERROR               KBAUD        %ERROR
  (K)                            (decimal)                                (decimal)                             (decimal)
                 NA         --                        NA             --                0.31         +3.13
  0.3          1.202     +0.16       --             1.203         _0.23       --        1.2            0           255
  1.2          2.404     +0.16      129             2.380          -0.83      92        2.4            0            65
  2.4          9.766     +1.73       64             9.322          -2.90      46        9.9                         32
  9.6          19.53     +1.73       15             18.64          -2.90      11       19.8          -3.13           7
19.2          78.13     +1.73                                                 5       79.2         +3.13            3
76.8                                 7               NA             --       --       NA           +3.13            0
  96             NA         --        1               NA             --       --       NA                           --
300             NA         --       --               NA             --       --       NA              --           --
500             NA         --       --               NA             --       --       79.2            --           --
HIGH           156.3        --       --             111.9            --        0      0.309            --            0
LOW            0.610        --        0             0.437            --      255                       --          255
                                    255                                                                --
BAUD                                                                                                            SPBRG
RATE   FOSC = 3.579 MHz          SPBRG      FOSC = 1 MHz                  SPBRG      FOSC = 32.768 kHz            value
                                   value                                    value
  (K)         KBAUD    %ERROR                      KBAUD        %ERROR               KBAUD        %ERROR        (decimal)
                                 (decimal)                                (decimal)
  0.3          0.301     +0.23                      0.300         +0.16               0.256         -14.67           1
  1.2          1.190      -0.83     185             1.202         +0.16       51        NA             --           --
  2.4          2.432     +1.32       46             2.232          -6.99      12        NA             --           --
  9.6          9.322      -2.90      22                                        6        NA             --           --
19.2          18.64      -2.90       5               NA             --       --        NA             --           --
76.8                                 2               NA             --       --        NA             --           --
  96             NA         --       --               NA             --       --       NA              --           --
300             NA         --       --               NA             --       --       NA              --           --
500             NA         --       --               NA             --       --       NA              --           --
HIGH             NA         --       --               NA             --       --                       --            0
LOW            55.93        --        0             15.63            --        0      0.512            --          255
               0.218        --      255             0.061            --      255      0.002

DS30412C-page 88                                                                           1996 Microchip Technology Inc.
                                                                       PIC17C4X

13.2 USART Asynchronous Mode                                    Transmission is enabled by setting the
                                                                TXEN (TXSTA<5>) bit. The actual transmission will not
In this mode, the USART uses standard nonre-                    occur until TXREG has been loaded with data and the
turn-to-zero (NRZ) format (one start bit, eight or nine         baud rate generator (BRG) has produced a shift clock
data bits, and one stop bit). The most common data for-         (Figure 13-5). The transmission can also be started by
mat is 8-bits. An on-chip dedicated 8-bit baud rate gen-        first loading TXREG and then setting TXEN. Normally
erator can be used to derive standard baud rate                 when transmission is first started, the TSR is empty, so
frequencies from the oscillator. The USART's transmit-          a transfer to TXREG will result in an immediate transfer
ter and receiver are functionally independent but use           to TSR resulting in an empty TXREG. A back-to-back
the same data format and baud rate. The baud rate               transfer is thus possible (Figure 13-6). Clearing TXEN
generator produces a clock x64 of the bit shift rate. Par-      during a transmission will cause the transmission to be
ity is not supported by the hardware, but can be imple-         aborted. This will reset the transmitter and the
mented in software (and stored as the ninth data bit).          RA5/TX/CK pin will revert to hi-impedance.
Asynchronous mode is stopped during SLEEP.
                                                                In order to select 9-bit transmission, the
The asynchronous mode is selected by clearing the               TX9 (TXSTA<6>) bit should be set and the ninth bit
SYNC bit (TXSTA<4>).                                            should be written to TX9D (TXSTA<0>). The ninth bit
                                                                must be written before writing the 8-bit data to the
The USART Asynchronous module consists of the fol-              TXREG. This is because a data write to TXREG can
lowing important elements:                                      result in an immediate transfer of the data to the TSR
                                                                (if the TSR is empty).
Baud Rate Generator
Sampling Circuit                                              Steps to follow when setting up an Asynchronous
Asynchronous Transmitter                                      Transmission:
Asynchronous Receiver
                                                                1. Initialize the SPBRG register for the appropriate
13.2.1 USART ASYNCHRONOUS TRANSMITTER                                 baud rate.

The USART transmitter block diagram is shown in                 2. Enable the asynchronous serial port by clearing
Figure 13-3. The heart of the transmitter is the transmit             the SYNC bit and setting the SPEN bit.
shift register (TSR). The shift register obtains its data
from the read/write transmit buffer (TXREG). TXREG is           3. If interrupts are desired, then set the TXIE bit.
loaded with data in software. The TSR is not loaded
until the stop bit has been transmitted from the previous       4. If 9-bit transmission is desired, then set the TX9
load. As soon as the stop bit is transmitted, the TSR is              bit.
loaded with new data from the TXREG (if available).
Once TXREG transfers the data to the TSR (occurs in             5. Load data to the TXREG register.
one TCY at the end of the current BRG cycle), the
TXREG is empty and an interrupt bit, TXIF (PIR<1>) is           6. If 9-bit transmission is selected, the ninth bit
set. This interrupt can be enabled or disabled by the                 should be loaded in TX9D.
TXIE bit (PIE<1>). TXIF will be set regardless of TXIE
and cannot be reset in software. It will reset only when        7. Enable the transmission by setting TXEN (starts
new data is loaded into TXREG. While TXIF indicates                   transmission).
the status of the TXREG, the TRMT (TXSTA<1>) bit
shows the status of the TSR. TRMT is a read only bit            Writing the transmit data to the TXREG, then enabling
which is set when the TSR is empty. No interrupt logic          the transmit (setting TXEN) allows transmission to start
is tied to this bit, so the user has to poll this bit in order  sooner then doing these two events in the opposite
to determine if the TSR is empty.                               order.

   Note: The TSR is not mapped in data memory,                  Note:  To terminate a transmission, either clear
               so it is not available to the user.                     the SPEN bit, or the TXEN bit. This will
                                                                       reset the transmit logic, so that it will be in
                                                                       the proper state when transmit is
                                                                       re-enabled.

1996 Microchip Technology Inc.                                       DS30412C-page 89
PIC17C4X

FIGURE 13-5: ASYNCHRONOUS MASTER TRANSMISSION

  Write to TXREG       Word 1
        BRG output
        (shift clock)          Start Bit         Bit 0      Bit 1                             Bit 7/8 Stop Bit
                 TX                                           Word 1

(RA5/TX/CK pin)

            TXIF bit

                       Word 1
                       Transmit Shift Reg

         TRMT bit

FIGURE 13-6: 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

                  TX
(RA5/TX/CK pin)

           TXIF bit

                       Word 1                                                                 Word 2
                       Transmit Shift Reg.                                                    Transmit Shift Reg.

         TRMT bit

                       Note: This timing diagram shows two consecutive transmissions.

TABLE 13-5: REGISTERS ASSOCIATED WITH ASYNCHRONOUS TRANSMISSION

Address  Name          Bit 7   Bit 6 Bit 5 Bit 4 Bit 3 Bit 2                           Bit 1  Bit 0  Value on      Value on all
                                                                                                     Power-on      other resets

                                                                                                       Reset          (Note1)

16h, Bank 1 PIR        RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF TXIF                             RCIF 0000 0010 0000 0010

13h, Bank 0 RCSTA      SPEN    RX9 SREN CREN            --  FERR OERR                         RX9D 0000 -00x 0000 -00u

16h, Bank 0 TXREG Serial port transmit register                                                      xxxx xxxx uuuu uuuu

17h, Bank 1 PIE        RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE TXIE                             RCIE 0000 0000 0000 0000

15h, Bank 0 TXSTA      CSRC    TX9 TXEN SYNC            --       --                    TRMT   TX9D 0000 --1x 0000 --1u

17h, Bank 0 SPBRG Baud rate generator register                                                       xxxx xxxx uuuu uuuu

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

Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

DS30412C-page 90                                                                               1996 Microchip Technology Inc.
                                                                               PIC17C4X

13.2.2 USART ASYNCHRONOUS RECEIVER                            Note:      The FERR and the 9th receive bit are buff-
                                                                         ered the same way as the receive data.
The receiver block diagram is shown in Figure 13-4.                      Reading the RCREG register will allow the
The data comes in the RA4/RX/DT pin and drives the                       RX9D and FERR bits to be loaded with val-
data recovery block. The data recovery block is actually                 ues for the next received Received data;
a high speed shifter operating at 16 times the baud                      therefore, it is essential for the user to read
rate, whereas the main receive serial shifter operates                   the RCSTA register before reading
at the bit rate or at FOSC.                                              RCREG in order not to lose the old FERR
                                                                         and RX9D information.
Once asynchronous mode is selected, reception is
enabled by setting bit CREN (RCSTA<4>).                       13.2.3 SAMPLING

The heart of the receiver is the receive (serial) shift reg-  The data on the RA4/RX/DT pin is sampled three times
ister (RSR). After sampling the stop bit, the received        by a majority detect circuit to determine if a high or a
data in the RSR is transferred to the RCREG (if it is         low level is present at the RA4/RX/DT pin. The sam-
empty). If the transfer is complete, the interrupt bit        pling is done on the seventh, eighth and ninth falling
RCIF (PIR<0>) is set. The actual interrupt can be             edges of a x16 clock (Figure 11-3).
enabled/disabled by setting/clearing the RCIE
(PIE<0>) bit. RCIF is a read only bit which is cleared by     The x16 clock is a free running clock, and the three
the hardware. It is cleared when RCREG has been               sample points occur at a frequency of every 16 falling
read and is empty. RCREG is a double buffered regis-          edges.
ter; (i.e. it is a two deep FIFO). It is possible for two
bytes of data to be received and transferred to the
RCREG FIFO and a third byte begin shifting to the
RSR. On detection of the stop bit of the third byte, if the
RCREG is still full, then the overrun error bit,
OERR (RCSTA<1>) will be set. The word in the RSR
will be lost. RCREG can be read twice to retrieve the
two bytes in the FIFO. The OERR bit has to be cleared
in software which is done by resetting the receive logic
(CREN is set). If the OERR bit is set, transfers from the
RSR to RCREG are inhibited, so it is essential to clear
the OERR bit if it is set. The framing error bit
FERR (RCSTA<2>) is set if a stop bit is not detected.

FIGURE 13-7: RX PIN SAMPLING SCHEME                           Start bit                                  Bit0

                     RX                                                  Baud CLK for all but start bit
   (RA4/RX/DT pin)

            baud CLK

x16 CLK

         1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3

                                  Samples

1996 Microchip Technology Inc.                                                                         DS30412C-page 91
PIC17C4X

Steps to follow when setting up an Asynchronous               7. Read RCSTA to get the ninth bit (if enabled) and
Reception:                                                          FERR bit to determine if any error occurred dur-
                                                                    ing reception.
1. Initialize the SPBRG register for the appropriate
      baud rate.                                              8. Read RCREG for the 8-bit received data.

2. Enable the asynchronous serial port by clearing            9. If an overrun error occurred, clear the error by
      the SYNC bit and setting the SPEN bit.                        clearing the OERR bit.

3. If interrupts are desired, then set the RCIE bit.             Note:  To terminate a reception, either clear the
4. If 9-bit reception is desired, then set the RX9 bit.                 SREN and CREN bits, or the SPEN bit.
5. Enable the reception by setting the CREN bit.                        This will reset the receive logic, so that it
6. The RCIF bit will be set when reception com-                         will be in the proper state when receive is
                                                                        re-enabled.
      pletes and an interrupt will be generated if the
      RCIE bit was set.

FIGURE 13-8: ASYNCHRONOUS RECEPTION

                  RX  Start                               Start                              Start  bit7/8 Stop
(RA4/RX/DT pin)        bit bit0 bit1  bit7/8 Stop bit bit0              bit7/8 Stop bit                          bit

           Rcv shift                             bit                                bit                         Word 3
             reg
                                                       Word 1                            Word 2
   Rcv buffer reg                                      RCREG                             RCREG

         Read Rcv
         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.

TABLE 13-6: REGISTERS ASSOCIATED WITH ASYNCHRONOUS RECEPTION

Address  Name         Bit 7  Bit 6 Bit 5 Bit 4 Bit 3 Bit 2              Bit 1  Bit 0                Value on  Value on all
                                                                                                    Power-on  other resets

                                                                                                      Reset      (Note1)

16h, Bank 1 PIR       RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF             TXIF   RCIF                 0000 0010 0000 0010

13h, Bank 0 RCSTA     SPEN RX9 SREN CREN --                   FERR OERR        RX9D 0000 -00x 0000 -00u

14h, Bank 0 RCREG     RX7    RX6      RX5       RX4      RX3     RX2    RX1    RX0                  xxxx xxxx uuuu uuuu

17h, Bank 1 PIE       RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE             TXIE   RCIE                 0000 0000 0000 0000

15h, Bank 0 TXSTA     CSRC   TX9 TXEN SYNC               --      --     TRMT   TX9D 0000 --1x 0000 --1u

17h, Bank 0 SPBRG Baud rate generator register                                                      xxxx xxxx uuuu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented read as a '0', shaded cells are not used for asynchronous reception.
Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

DS30412C-page 92                                                                1996 Microchip Technology Inc.
                                                                       PIC17C4X

13.3 USART Synchronous Master Mode                              RA4/RX/DT pin reverts to a hi-impedance state (for a
                                                                reception). The RA5/TX/CK pin will remain an output if
In Master Synchronous mode, the data is transmitted in          the CSRC bit is set (internal clock). The transmitter
a half-duplex manner; i.e. transmission and reception           logic is not reset, although it is disconnected from the
do not occur at the same time: when transmitting data,          pins. In order to reset the transmitter, the user has to
the reception is inhibited and vice versa. The synchro-         clear the TXEN bit. If the SREN bit is set (to interrupt an
nous mode is entered by setting the SYNC                        ongoing transmission and receive a single word), then
(TXSTA<4>) bit. In addition, the SPEN (RCSTA<7>) bit            after the single word is received, SREN will be cleared
is set in order to configure the RA5 and RA4 I/O ports          and the serial port will revert back to transmitting, since
to CK (clock) and DT (data) lines respectively. The             the TXEN bit is still set. The DT line will immediately
Master mode indicates that the processor transmits the          switch from hi-impedance receive mode to transmit
master clock on the CK line. The Master mode is                 and start driving. To avoid this, TXEN should be
entered by setting the CSRC (TXSTA<7>) bit.                     cleared.

13.3.1 USART SYNCHRONOUS MASTER                                 In order to select 9-bit transmission, the
            TRANSMISSION                                        TX9 (TXSTA<6>) bit should be set and the ninth bit
                                                                should be written to TX9D (TXSTA<0>). The ninth bit
The USART transmitter block diagram is shown in                 must be written before writing the 8-bit data to TXREG.
Figure 13-3. The heart of the transmitter is the transmit       This is because a data write to TXREG can result in an
(serial) shift register (TSR). The shift register obtains its   immediate transfer of the data to the TSR (if the TSR is
data from the read/write transmit buffer TXREG.                 empty). If the TSR was empty and TXREG was written
TXREG is loaded with data in software. The TSR is not           before writing the "new" TX9D, the "present" value of
loaded until the last bit has been transmitted from the         TX9D is loaded.
previous load. As soon as the last bit is transmitted, the
TSR is loaded with new data from TXREG (if available).          Steps to follow when setting up a Synchronous Master
Once TXREG transfers the data to the TSR (occurs in             Transmission:
one TCY at the end of the current BRG cycle), TXREG
is empty and the TXIF (PIR<1>) bit is set. This interrupt       1. Initialize the SPBRG register for the appropriate
can be enabled/disabled by setting/clearing the TXIE                  baud rate (see Baud Rate Generator Section for
bit (PIE<1>). TXIF will be set regardless of the state of             details).
bit TXIE and cannot be cleared in software. It will reset
only when new data is loaded into TXREG. While TXIF             2. Enable the synchronous master serial port by
indicates the status of TXREG, TRMT (TXSTA<1>)                        setting the SYNC, SPEN, and CSRC bits.
shows the status of the TSR. TRMT is a read only bit
which is set when the TSR is empty. No interrupt logic          3. Ensure that the CREN and SREN bits are clear
is tied to this bit, so the user has to poll this bit in order        (these bits override transmission when set).
to determine if the TSR is empty. The TSR is not
mapped in data memory, so it is not available to the            4. If interrupts are desired, then set the TXIE bit
user.                                                                 (the GLINTD bit must be clear and the PEIE bit
                                                                      must be set).
Transmission is enabled by setting the TXEN
(TXSTA<5>) bit. The actual transmission will not occur          5. If 9-bit transmission is desired, then set the TX9
until TXREG has been loaded with data. The first data                 bit.
bit will be shifted out on the next available rising edge
of the clock on the RA5/TX/CK pin. Data out is stable           6. Start transmission by loading data to the
around the falling edge of the synchronous clock                      TXREG register.
(Figure 13-10). The transmission can also be started
by first loading TXREG and then setting TXEN. This is           7. If 9-bit transmission is selected, the ninth bit
advantageous when slow baud rates are selected,                       should be loaded in TX9D.
since BRG is kept in RESET when the TXEN, CREN,
and SREN bits are clear. Setting the TXEN bit will start        8. Enable the transmission by setting TXEN.
the BRG, creating a shift clock immediately. Normally
when transmission is first started, the TSR is empty, so        Writing the transmit data to the TXREG, then enabling
a transfer to TXREG will result in an immediate transfer        the transmit (setting TXEN) allows transmission to start
to the TSR, resulting in an empty TXREG.                        sooner then doing these two events in the reverse
Back-to-back transfers are possible.                            order.

Clearing TXEN during a transmission will cause the              Note:  To terminate a transmission, either clear
transmission to be aborted and will reset the transmit-                the SPEN bit, or the TXEN bit. This will
ter. The RA4/RX/DT and RA5/TX/CK pins will revert to                   reset the transmit logic, so that it will be in
hi-impedance. If either CREN or SREN are set during                    the proper state when transmit is
a transmission, the transmission is aborted and the                    re-enabled.

1996 Microchip Technology Inc.                                       DS30412C-page 93
PIC17C4X

TABLE 13-7: REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER TRANSMISSION

Address               Name      Bit 7        Bit 6 Bit 5 Bit 4 Bit 3 Bit 2                  Bit 1              Bit 0  Value on   Value on all
                                                                                                                      Power-on   other resets

                                                                                                                        Reset       (Note1)

16h, Bank 1 PIR                 RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF                       TXIF               RCIF   0000 0010  0000 0010
                                                                                                                                 0000 -00u
13h, Bank 0 RCSTA               SPEN RX9 SREN CREN --                            FERR OERR                     RX9D 0000 -00x    uuuu uuuu
                                                                                                                                 0000 0000
16h, Bank 0 TXREG               TX7          TX6           TX5  TX4         TX3        TX2  TX1                TX0    xxxx xxxx  0000 --1u
                                                                                                                                 uuuu uuuu
17h, Bank 1 PIE                 RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE                       TXIE               RCIE   0000 0000

15h, Bank 0 TXSTA               CSRC TX9 TXEN SYNC --                                  --   TRMT               TX9D 0000 --1x

17h, Bank 0 SPBRG Baud rate generator register                                                                        xxxx xxxx

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

Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

FIGURE 13-9: SYNCHRONOUS TRANSMISSION

         Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4                 Q3 Q4 Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4Q1 Q2Q3 Q4

                  DT                   bit0       bit1          bit2             bit7       bit0
(RA4/RX/DT pin)
                                                  Word 1                                           Word 2
                  CK
(RA5/TX/CK pin)       Write word 1           Write word 2

           Write to
            TXREG

                TXIF
     Interrupt flag

              TRMT

                         '1'
               TXEN

                           Note: Sync master mode; BRG = 0. Continuous transmission of two 8-bit words.

FIGURE 13-10: SYNCHRONOUS TRANSMISSION (THROUGH TXEN)

                  DT                              bit0                bit1       bit2                    bit6         bit7
(RA4/RX/DT pin)

                  CK
(RA5/TX/CK pin)

            Write to
            TXREG

                      TXIF bit

                      TRMT bit

DS30412C-page 94                                                                                                1996 Microchip Technology Inc.
                                                                                             PIC17C4X

13.3.2 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 the SREN (RCSTA<5>) bit or                      baud rate. See Section 13.1 for details.
the CREN (RCSTA<4>) bit. Data is sampled on the
RA4/RX/DT pin on the falling edge of the clock. If                  2. Enable the synchronous master serial port by
SREN is set, then only a single word is received. If                      setting bits SYNC, SPEN, and CSRC.
CREN is set, the reception is continuous until CREN is
reset. If both bits are set, then CREN takes prece-                 3. If interrupts are desired, then set the RCIE bit.
dence. After clocking the last bit, the received data in            4. If 9-bit reception is desired, then set the RX9 bit.
the Receive Shift Register (RSR) is transferred to                  5. If a single reception is required, set bit SREN.
RCREG (if it is empty). If the transfer is complete, the
interrupt bit RCIF (PIR<0>) is set. The actual interrupt                  For continuous reception set bit CREN.
can be enabled/disabled by setting/clearing the                     6. The RCIF bit will be set when reception is com-
RCIE (PIE<0>) bit. RCIF is a read only bit which is
RESET by the hardware. In this case it is reset when                      plete and an interrupt will be generated if the
RCREG has been read and is empty. RCREG is a dou-                         RCIE bit was set.
ble buffered register; i.e., it is a two deep FIFO. It is           7. Read RCSTA to get the ninth bit (if enabled) and
possible for two bytes of data to be received and trans-                  determine if any error occurred during reception.
ferred to the RCREG FIFO and a third byte to begin                  8. Read the 8-bit received data by reading
shifting into the RSR. On the clocking of the last bit of                 RCREG.
the third byte, if RCREG is still full, then the overrun            9. If any error occurred, clear the error by clearing
error bit OERR (RCSTA<1>) is set. The word in the                         CREN.
RSR will be lost. RCREG can be read twice to retrieve
the two bytes in the FIFO. The OERR bit has to be                   Note:  To terminate a reception, either clear the
cleared in software. This is done by clearing the CREN                     SREN and CREN bits, or the SPEN bit.
bit. If OERR bit is set, transfers from RSR to RCREG                       This will reset the receive logic, so that it
are inhibited, so it is essential to clear OERR bit if it is               will be in the proper state when receive is
set. The 9th receive bit is buffered the same way as the                   re-enabled.
receive data. Reading the RCREG register will allow
the RX9D and FERR bits to be loaded with values for
the next received data; therefore, it is essential for the
user to read the RCSTA register before reading
RCREG in order not to lose the old FERR and RX9D
information.

FIGURE 13-11: 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

         DT                       bit0  bit1  bit2            bit3  bit4   bit5        bit6  bit7
(RA4/RX/DT pin)

         CK
(RA5/TX/CK pin)

      Write to the
      SREN bit

SREN bit

CREN bit '0'                                                                                       '0'

RCIF bit

Read
RCREG

                    Note: Timing diagram demonstrates SYNC master mode with SREN = 1.

1996 Microchip Technology Inc.                                                                   DS30412C-page 95
PIC17C4X

TABLE 13-8: REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER RECEPTION

Address  Name      Bit 7  Bit 6 Bit 5 Bit 4 Bit 3 Bit 2        Bit 1  Bit 0  Value on                           Value on all
                                                                             Power-on                           other resets

                                                                               Reset                               (Note1)

16h, Bank 1 PIR    RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF       TXIF   RCIF   0000 0010                          0000 0010
                                                                                                                0000 -00u
13h, Bank 0 RCSTA  SPEN RX9 SREN CREN --                  FERR OERR   RX9D 0000 -00x                            uuuu uuuu
                                                                                                                0000 0000
14h, Bank 0 RCREG  RX7    RX6  RX5              RX4  RX3  RX2  RX1    RX0    xxxx xxxx                          0000 --1u
                                                                                                                uuuu uuuu
17h, Bank 1 PIE    RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE       TXIE   RCIE   0000 0000

15h, Bank 0 TXSTA  CSRC TX9 TXEN SYNC --                  --   TRMT   TX9D 0000 --1x

17h, Bank 0 SPBRG Baud rate generator register                               xxxx xxxx

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

Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

DS30412C-page 96                                                       1996 Microchip Technology Inc.
                                                                  PIC17C4X

13.4 USART Synchronous Slave Mode                          13.4.2 USART SYNCHRONOUS SLAVE
                                                                       RECEPTION
The synchronous slave mode differs from the master
mode in the fact that the shift clock is supplied exter-   Operation of the synchronous master and slave modes
nally at the RA5/TX/CK pin (instead of being supplied      are identical except in the case of the SLEEP mode.
internally in the master mode). This allows the device     Also, SREN is a don't care in slave mode.
to transfer or receive data in the SLEEP mode. The
slave mode is entered by clearing the                      If receive is enabled (CREN) prior to the SLEEP instruc-
CSRC (TXSTA<7>) bit.                                       tion, then a word may be received during SLEEP. On
                                                           completely receiving the word, the RSR will transfer the
13.4.1 USART SYNCHRONOUS SLAVE                             data to RCREG (setting RCIF) and if the RCIE bit is set,
            TRANSMIT                                       the interrupt generated will wake the chip from SLEEP.
                                                           If the global interrupt is enabled, the program will
The operation of the sync master and slave modes are       branch to the interrupt vector (0020h).
identical except in the case of the SLEEP mode.
                                                           Steps to follow when setting up a Synchronous Slave
If two words are written to TXREG and then the SLEEP       Reception:
instruction executes, the following will occur. The first
word will immediately transfer to the TSR and will trans-  1. Enable the synchronous master serial port by
mit as the shift clock is supplied. The second word will         setting the SYNC and SPEN bits and clearing
remain in TXREG. TXIF will not be set. When the first            the CSRC bit.
word has been shifted out of TSR, TXREG will transfer
the second word to the TSR and the TXIF flag will now      2. If interrupts are desired, then set the RCIE bit.
be set. If TXIE is enabled, the interrupt will wake the    3. If 9-bit reception is desired, then set the RX9 bit.
chip from SLEEP and if the global interrupt is enabled,    4. To enable reception, set the CREN bit.
then the program will branch to interrupt vector           5. The RCIF bit will be set when reception is com-
(0020h).
                                                                 plete and an interrupt will be generated if the
Steps to follow when setting up a Synchronous Slave              RCIE bit was set.
Transmission:                                              6. Read RCSTA to get the ninth bit (if enabled) and
                                                                 determine if any error occurred during reception.
1. Enable the synchronous slave serial port by set-        7. Read the 8-bit received data by reading
      ting the SYNC and SPEN bits and clearing the               RCREG.
      CSRC bit.                                            8. If any error occurred, clear the error by clearing
                                                                 the CREN bit.
2. Clear the CREN bit.
                                                           Note:  To abort reception, either clear the SPEN
3. If interrupts are desired, then set the TXIE bit.              bit, the SREN bit (when in single receive
                                                                  mode), or the CREN bit (when in continu-
4. If 9-bit transmission is desired, then set the TX9             ous receive mode). This will reset the
      bit.                                                        receive logic, so that it will be in the proper
                                                                  state when receive is re-enabled.
5. Start transmission by loading data to TXREG.

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

7. Enable the transmission by setting TXEN.

Writing the transmit data to the TXREG, then enabling
the transmit (setting TXEN) allows transmission to start
sooner then doing these two events in the reverse
order.

Note:  To terminate a transmission, either clear
       the SPEN bit, or the TXEN bit. This will
       reset the transmit logic, so that it will be in
       the proper state when transmit is
       re-enabled.

1996 Microchip Technology Inc.                                  DS30412C-page 97
PIC17C4X

TABLE 13-9: REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE TRANSMISSION

Address  Name      Bit 7  Bit 6 Bit 5 Bit 4 Bit 3 Bit 2        Bit 1  Bit 0  Value on                           Value on all
                                                                             Power-on                           other resets

                                                                               Reset                               (Note1)

16h, Bank 1 PIR    RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF       TXIF   RCIF   0000 0010                          0000 0010
                                                                                                                0000 -00u
13h, Bank 0 RCSTA  SPEN RX9 SREN CREN --                  FERR OERR   RX9D 0000 -00x                            uuuu uuuu
                                                                                                                0000 0000
16h, Bank 0 TXREG  TX7    TX6  TX5              TX4  TX3  TX2  TX1    TX0    xxxx xxxx                          0000 --1u
                                                                                                                uuuu uuuu
17h, Bank 1 PIE    RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE       TXIE   RCIE   0000 0000

15h, Bank 0 TXSTA  CSRC TX9 TXEN SYNC --                  --   TRMT   TX9D 0000 --1x

17h, Bank 0 SPBRG Baud rate generator register                               xxxx xxxx

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

Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

TABLE 13-10: REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE RECEPTION

Address  Name      Bit 7  Bit 6 Bit 5 Bit 4 Bit 3 Bit 2        Bit 1  Bit 0  Value on                           Value on all
                                                                             Power-on                           other resets

                                                                               Reset                               (Note1)

16h, Bank1 PIR     RBIF TMR3IF TMR2IF TMR1IF CA2IF CA1IF       TXIF   RCIF   0000 0010                          0000 0010
                                                                                                                0000 -00u
13h, Bank0 RCSTA   SPEN RX9 SREN CREN --                  FERR OERR   RX9D 0000 -00x                            uuuu uuuu
                                                                                                                0000 0000
14h, Bank0 RCREG   RX7    RX6  RX5              RX4  RX3  RX2  RX1    RX0    xxxx xxxx                          0000 --1u
                                                                                                                uuuu uuuu
17h, Bank1 PIE     RBIE TMR3IE TMR2IE TMR1IE CA2IE CA1IE       TXIE   RCIE   0000 0000

15h, Bank 0 TXSTA  CSRC TX9 TXEN SYNC --                  --   TRMT   TX9D 0000 --1x

17h, Bank0 SPBRG Baud rate generator register                                xxxx xxxx

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

Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

DS30412C-page 98                                                       1996 Microchip Technology Inc.
                                                                                          PIC17C4X

14.0 SPECIAL FEATURES OF THE                                   The PIC17CXX has a Watchdog Timer which can be
         CPU                                                   shut off only through EPROM bits. It runs off its own RC
                                                               oscillator for added reliability. There are two timers that
What sets a microcontroller apart from other proces-           offer necessary delays on power-up. One is the Oscil-
sors are special circuits to deal with the needs of real       lator Start-up Timer (OST), intended to keep the chip in
time applications. The PIC17CXX family has a host of           RESET until the crystal oscillator is stable. The other is
such features intended to maximize system reliability,         the Power-up Timer (PWRT), which provides a fixed
minimize cost through elimination of external compo-           delay of 96 ms (nominal) on power-up only, designed to
nents, provide power saving operating modes and offer          keep the part in RESET while the power supply stabi-
code protection. These are:                                    lizes. With these two timers on-chip, most applications
                                                               need no external reset circuitry.
OSC selection
Reset                                                        The SLEEP mode is designed to offer a very low cur-
                                                               rent power-down mode. The user can wake from
   - Power-on Reset (POR)                                      SLEEP through external reset, Watchdog Timer Reset
   - Power-up Timer (PWRT)                                     or through an interrupt. Several oscillator options are
   - Oscillator Start-up Timer (OST)                           also made available to allow the part to fit the applica-
Interrupts                                                   tion. The RC oscillator option saves system cost while
Watchdog Timer (WDT)                                         the LF crystal option saves power. Configuration bits
SLEEP                                                        are used to select various options. This configuration
Code protection                                              word has the format shown in Figure 14-1.

FIGURE 14-1: CONFIGURATION WORD

R/P - 1  U-x      U-x  U-x             U-x               U-x  U-x  U-x
PM2 (1)   --       --   --              --                --   --   --

bit15-7                                                                 bit0

  U-x     R/P - 1  U-x  R/P - 1 R/P - 1 R/P - 1 R/P - 1 R/P - 1                           R = Readable bit
    --     PM1      --   PM0 WDTPS1 WDTPS0 FOSC1 FOSC0                                    P = Programmable bit
                                                                                          U = Unimplemented
bit15-7                                                                             bit0  - n = Value for Erased Device

                                                                                                 (x = unknown)

bit 15-9: Unimplemented: Read as a '1'

bit 15,6,4:PM2, PM1, PM0, Processor Mode Select bits
            111 = Microprocessor Mode
            110 = Microcontroller mode
            101 = Extended microcontroller mode
            000 = Code protected microcontroller mode

bit 7, 5: Unimplemented: Read as a '0'

bit 3-2:  WDTPS1:WDTPS0, WDT Postscaler Select bits
          11 = WDT enabled, postscaler = 1
          10 = WDT enabled, postscaler = 256
          01 = WDT enabled, postscaler = 64
          00 = WDT disabled, 16-bit overflow timer

bit 1-0:  FOSC1:FOSC0, Oscillator Select bits
          11 = EC oscillator
          10 = XT oscillator
          01 = RC oscillator
          00 = LF oscillator

Note 1: This bit does not exist on the PIC17C42. Reading this bit will return an unknown value (x).

1996 Microchip Technology Inc.                                                          DS30412C-page 99

                                    This document was created with FrameMaker 4 0 4
PIC17C4X

14.1 Configuration Bits                                     14.2 Oscillator Configurations

The PIC17CXX has up to seven configuration locations        14.2.1 OSCILLATOR TYPES
(Table 14-1). These locations can be programmed
(read as '0') or left unprogrammed (read as '1') to select  The PIC17CXX can be operated in four different oscil-
various device configurations. Any write to a configura-    lator modes. The user can program two configuration
tion location, regardless of the data, will program that    bits (FOSC1:FOSC0) to select one of these four
configuration bit. A TABLWT instruction is required to      modes:
write to program memory locations. The configuration
bits can be read by using the TABLRD instructions.          LF:  Low Power Crystal
Reading any configuration location between FE00h             XT:  Crystal/Resonator
and FE07h will read the low byte of the configuration       EC:  External Clock Input
word (Figure 14-1) into the TABLATL register. The TAB-       RC:  Resistor/Capacitor
LATH register will be FFh. Reading a configuration
location between FE08h and FE0Fh will read the high         14.2.2 CRYSTAL OSCILLATOR / CERAMIC
byte of the configuration word into the TABLATL regis-                  RESONATORS
ter. The TABLATH register will be FFh.
                                                            In XT or LF modes, a crystal or ceramic resonator is
Addresses FE00h thorough FE0Fh are only in the pro-         connected to the OSC1/CLKIN and OSC2/CLKOUT
gram memory space for microcontroller and code pro-         pins to establish oscillation (Figure 14-2). The
tected microcontroller modes. A device programmer           PIC17CXX Oscillator design requires the use of a par-
will be able to read the configuration word in any pro-     allel cut crystal. Use of a series cut crystal may give a
cessor mode. See programming specifications for more        frequency out of the crystal manufacturers specifica-
detail.                                                     tions.

TABLE 14-1: CONFIGURATION                                   For frequencies above 20 MHz, it is common for the
                     LOCATIONS                              crystal to be an overtone mode crystal. Use of overtone
                                                            mode crystals require a tank circuit to attenuate the
       Bit         Address                                  gain at the fundamental frequency. Figure 14-3 shows
                                                            an example of this.
       FOSC0       FE00h
                                                            FIGURE 14-2: CRYSTAL OR CERAMIC
       FOSC1       FE01h                                                         RESONATOR OPERATION
                                                                                 (XT OR LF OSC
       WDTPS0      FE02h                                                         CONFIGURATION)

       WDTPS1      FE03h

       PM0         FE04h                                               OSC1

        PM1        FE06h                                           C1
       PM2 (1)     FE0Fh (1)

Note 1: This location does not exist on the                            XTAL                       SLEEP
            PIC17C42.                                                                         RF

                                                                             OSC2

                                                                              Note1               To internal
                                                                   C2                             logic

Note:  When programming the desired configura-                                       PIC17CXX
       tion locations, they must be programmed in
       ascending order. Starting with address               See Table 14-2 and Table 14-3 for recommended
       FE00h.                                               values of C1 and C2.

                                                            Note 1: A series resistor may be required for AT strip
                                                                         cut crystals.

DS30412C-page 100                                                                     1996 Microchip Technology Inc.
                                                                                PIC17C4X

FIGURE 14-3: CRYSTAL OPERATION,                            TABLE 14-3: CAPACITOR SELECTION
                     OVERTONE CRYSTALS (XT                                      FOR CRYSTAL OSCILLATOR
                     OSC CONFIGURATION)
                                                           Osc
C1                                                         Type        Freq     C1            C2

               OSC1

                                                           LF    32 kHz(1) 100-150 pF 100-150 pF

                                     SLEEP                             1 MHz 10-33 pF         10-33 pF

                                                                       2 MHz 10-33 pF         10-33 pF

C2                                                         XT          2 MHz 47-100 pF        47-100 pF
                     OSC2                                                                     15-68 pF
                                                                                              15-47 pF
                                                                  4 MHz         15-68 pF
                                                                 8 MHz (2)      15-47 pF         TBD
                                                                                              15-47 pF
0.1 F                     PIC17C42                                    16 MHz   TBD
                                                                                                  0 (3)
To filter the fundamental frequency                                    25 MHz 15-47 pF

     1      =  (2f)2                                             32 MHz (3)     0 (3)
    LC2
                                                           Higher capacitance increases the stability of the
Where f = tank circuit resonant frequency. This should be  oscillator but also increases the start-up time and the
midway between the fundamental and the 3rd overtone        oscillator current. These values are for design guid-
frequencies of the crystal.                                ance only. RS may be required in XT mode to avoid
                                                           overdriving the crystals with low drive level specifica-
TABLE 14-2: CAPACITOR SELECTION                            tion. Since each crystal has its own characteristics,
                     FOR CERAMIC                           the user should consult the crystal manufacturer for
                     RESONATORS                            appropriate values for external components.
                                                           Note 1: For VDD > 4.5V, C1 = C2  30 pF is recom-
Oscillator     Resonator             Capacitor Range
   Type        Frequency                   C1 = C2                     mended.
                                                                  2: RS of 330 is required for a capacitor com-
LF             455 kHz               15 - 68 pF
                                                                       bination of 15/15 pF.
               2.0 MHz               10 - 33 pF                    3: Only the capacitance of the board was present.

XT             4.0 MHz               22 - 68 pF            Crystals Used:

               8.0 MHz               33 - 100 pF           32.768 kHz  Epson C-001R32.768K-A   20 PPM
                                                           1.0 MHz     ECS-10-13-1             50 PPM
               16.0 MHz              33 - 100 pF           2.0 MHz     ECS-20-20-1             50 PPM
                                                           4.0 MHz     ECS-40-20-1             50 PPM
Higher capacitance increases the stability of the          8.0 MHz     ECS ECS-80-S-4          50 PPM
oscillator but also increases the start-up time. These                 ECS-80-18-1
values are for design guidance only. Since each reso-      16.0 MHz    ECS-160-20-1           TBD
nator has its own characteristics, the user should         25 MHz      CTS CTS25M             50 PPM
consult the resonator manufacturer for appropriate         32 MHz      CRYSTEK HF-2            50 PPM
values of external components.

Resonators Used:

455 kHz Panasonic EFO-A455K04B 0.3%

2.0 MHz Murata Erie CSA2.00MG         0.5%                14.2.3 EXTERNAL CLOCK OSCILLATOR

4.0 MHz Murata Erie CSA4.00MG         0.5%

8.0 MHz Murata Erie CSA8.00MT         0.5%                In the EC oscillator mode, the OSC1 input can be
                                                           driven by CMOS drivers. In this mode, the
16.0 MHz Murata Erie CSA16.00MX       0.5%                OSC1/CLKIN pin is hi-impedance and the OSC2/CLK-
                                                           OUT pin is the CLKOUT output (4 TOSC).
Resonators used did not have built-in capacitors.
                                                           FIGURE 14-4: EXTERNAL CLOCK INPUT
                                                                                OPERATION (EC OSC
                                                                                CONFIGURATION)

                                                           Clock from           OSC1
                                                           ext. system                  PIC17CXX

                                                                      CLKOUT    OSC2
                                                                      (FOSC/4)

1996 Microchip Technology Inc.                                                          DS30412C-page 101
PIC17C4X

14.2.4 EXTERNAL CRYSTAL OSCILLATOR                           14.2.5 RC OSCILLATOR
            CIRCUIT
                                                             For timing insensitive applications, the RC device
Either a prepackaged oscillator can be used or a simple      option offers additional cost savings. RC oscillator fre-
oscillator circuit with TTL gates can be built. Prepack-     quency is a function of the supply voltage, the resistor
aged oscillators provide a wide operating range and          (Rext) and capacitor (Cext) values, and the operating
better stability. A well-designed crystal oscillator will    temperature. In addition to this, oscillator frequency will
provide good performance with TTL gates. Two types of        vary from unit to unit due to normal process parameter
crystal oscillator circuits can be used: one with series     variation. Furthermore, the difference in lead frame
resonance, or one with parallel resonance.                   capacitance between package types will also affect
                                                             oscillation frequency, especially for low Cext values.
Figure 14-5 shows implementation of a parallel reso-         The user also needs to take into account variation due
nant oscillator circuit. The circuit is designed to use the  to tolerance of external R and C components used.
fundamental frequency of the crystal. The 74AS04             Figure 14-6 shows how the R/C combination is con-
inverter performs the 180-degree phase shift that a par-     nected to the PIC17CXX. For Rext values below 2.2 k,
allel oscillator requires. The 4.7 k resistor provides the   the oscillator operation may become unstable, or stop
negative feedback for stability. The 10 k potentiometer      completely. For very high Rext values (e.g. 1 M), the
biases the 74AS04 in the linear region. This could be        oscillator becomes sensitive to noise, humidity and
used for external oscillator designs.                        leakage. Thus, we recommend to keep Rext between 3
                                                             k and 100 k.
FIGURE 14-5: EXTERNAL PARALLEL
                     RESONANT CRYSTAL                        Although the oscillator will operate with no external
                     OSCILLATOR CIRCUIT                      capacitor (Cext = 0 pF), we recommend using values
                                                             above 20 pF for noise and stability reasons. With little
        +5V                        To Other                  or no external capacitance, oscillation frequency can
                                   Devices                   vary dramatically due to changes in external capaci-
            10k                                              tances, such as PCB trace capacitance or package
                   4.7k    74AS04  PIC17CXX                  lead frame capacitance.
                                      OSC1
                 74AS04                                      See Section 18.0 for RC frequency variation from part
                                                             to part due to normal process variation. The variation
                                               10k           is larger for larger R (since leakage current variation will
                             XTAL                            affect RC frequency more for large R) and for smaller C
                                                             (since variation of input capacitance will affect RC fre-
            10k                                              quency more).

                       20 pF 20 pF                           See Section 18.0 for variation of oscillator frequency
                                                             due to VDD for given Rext/Cext values as well as fre-
Figure 14-6 shows a series resonant oscillator circuit.      quency variation due to operating temperature for given
This circuit is also designed to use the fundamental fre-    R, C, and VDD values.
quency of the crystal. The inverter performs a
180-degree phase shift in a series resonant oscillator       The oscillator frequency, divided by 4, is available on
circuit. The 330 k resistors provide the negative feed-      the OSC2/CLKOUT pin, and can be used for test pur-
back to bias the inverters in their linear region.           poses or to synchronize other logic (see Figure 3-2 for
                                                             waveform).
FIGURE 14-6: EXTERNAL SERIES
                     RESONANT CRYSTAL                        FIGURE 14-7: RC OSCILLATOR MODE
                     OSCILLATOR CIRCUIT
                                                                      VDD

                                                             Rext                Internal
                                                                                 clock
                                                                           OSC1

330 k              330 k          To Other                                                       PIC17CXX
74AS04             74AS04          Devices                                 OSC2/CLKOUT

                           74AS04            PIC17CXX        Cext
                                                OSC1         VSS

        0.1 F                                                     Fosc/4
        XTAL

DS30412C-page 102                                                          1996 Microchip Technology Inc.
14.3 Watchdog Timer (WDT)                                                PIC17C4X

The Watchdog Timer's function is to recover from soft-    14.3.2 CLEARING THE WDT AND POSTSCALER
ware malfunction. The WDT uses an internal free run-
ning on-chip RC oscillator for its clock source. This     The WDT and postscaler are cleared when:
does not require any external components. This RC          The device is in the reset state
oscillator is separate from the RC oscillator of the       A SLEEP instruction is executed
OSC1/CLKIN pin. That means that the WDT will run,          A CLRWDT instruction is executed
even if the clock on the OSC1/CLKIN and OSC2/CLK-          Wake-up from SLEEP by an interrupt
OUT pins of the device has been stopped, for example,     The WDT counter/postscaler will start counting on the
by execution of a SLEEP instruction. During normal        first edge after the device exits the reset state.
operation and SLEEP mode, a WDT time-out gener-
ates a device RESET. The WDT can be permanently           14.3.3 WDT PROGRAMMING CONSIDERATIONS
disabled by programming the configuration bits
WDTPS1:WDTPS0 as '00' (Section 14.1).                     It should also be taken in account that under worst case
                                                          conditions (VDD = Min., Temperature = Max., max.
Under normal operation, the WDT must be cleared on        WDT postscaler) it may take several seconds before a
a regular interval. This time is less the minimum WDT     WDT time-out occurs.
overflow time. Not clearing the WDT in this time frame    The WDT and postscaler is the Power-up Timer during
will cause the WDT to overflow and reset the device.      the Power-on Reset sequence.

14.3.1 WDT PERIOD                                         14.3.4 WDT AS NORMAL TIMER

The WDT has a nominal time-out period of 12 ms, (with     When the WDT is selected as a normal timer, the clock
postscaler = 1). The time-out periods vary with temper-   source is the device clock. Neither the WDT nor the
ature, VDD and process variations from part to part (see  postscaler are directly readable or writable. The over-
DC specs). If longer time-out periods are desired, a      flow time is 65536 TOSC cycles. On overflow, the TO bit
postscaler with a division ratio of up to 1:256 can be    is cleared (device is not reset). The CLRWDT instruction
assigned to the WDT. Thus, typical time-out periods up    can be used to set the TO bit. This allows the WDT to
to 3.0 seconds can be realized.                           be a simple overflow timer. When in sleep, the WDT
                                                          does not increment.
The CLRWDT and SLEEP instructions clear the WDT
and the postscaler (if assigned to the WDT) and pre-
vent it from timing out thus generating a device RESET
condition.

The TO bit in the CPUSTA register will be cleared upon
a WDT time-out.

1996 Microchip Technology Inc.                          DS30412C-page 103
PIC17C4X

FIGURE 14-8: WATCHDOG TIMER BLOCK DIAGRAM

         On-chip RC         WDT                                      Postscaler
         Oscillator(1)

                                                                  4 - to - 1 MUX         WDTPS1:WDTPS0

                        WDT Enable

Note 1: This oscillator is separate from the external                WDT Overflow
            RC oscillator on the OSC1 pin.

TABLE 14-4: REGISTERS/BITS ASSOCIATED WITH THE WATCHDOG TIMER

Address  Name           Bit 7 Bit 6 Bit 5  Bit 4       Bit 3  Bit 2  Bit 1        Bit 0  Value on             Value on all
                                                                                         Power-on             other resets

                                                                                           Reset                 (Note1)

--       Config         --  PM1     --     PM0 WDTPS1 WDTPS0 FOSC1 FOSC0 (Note 2)                             (Note 2)

06h, Unbanked CPUSTA    --  --   STKAV GLINTD          TO     PD     --            --    --11 11--            --11 qq--

Legend: - = unimplemented read as '0', q - value depends on condition, shaded cells are not used by the WDT.
Note 1: Other (non power-up) resets include: external reset through MCLR and Watchdog Timer Reset.

        2: This value will be as the device was programmed, or if unprogrammed, will read as all '1's.

DS30412C-page 104                                                                  1996 Microchip Technology Inc.
                                                                                     PIC17C4X

14.4 Power-down Mode (SLEEP)                                 PD bit, which is set on power-up, is cleared when
                                                             SLEEP is invoked. The TO bit is cleared if WDT
The Power-down mode is entered by executing a                time-out occurred (and caused wake-up).
SLEEP instruction. This clears the Watchdog Timer and
postscaler (if enabled). The PD bit is cleared and the       When the SLEEP instruction is being executed, the next
TO bit is set (in the CPUSTA register). In SLEEP mode,       instruction (PC + 1) is pre-fetched. For the device to
the oscillator driver is turned off. The I/O ports maintain  wake-up through an interrupt event, the corresponding
their status (driving high, low, or hi-impedance).           interrupt enable bit must be set (enabled). Wake-up is
                                                             regardless of the state of the GLINTD bit. If the GLINTD
The MCLR/VPP pin must be at a logic high level               bit is set (disabled), the device continues execution at
(VIHMC). A WDT time-out RESET does not drive the             the instruction after the SLEEP instruction. If the
MCLR/VPP pin low.                                            GLINTD bit is clear (enabled), the device executes the
                                                             instruction after the SLEEP instruction and then
14.4.1 WAKE-UP FROM SLEEP                                    branches to the interrupt vector address. In cases
                                                             where the execution of the instruction following SLEEP
The device can wake up from SLEEP through one of             is not desirable, the user should have a NOP after the
the following events:                                        SLEEP instruction.

A POR reset                                                Note:      If the global interrupts are disabled
External reset input on MCLR/VPP pin                                  (GLINTD is set), but any interrupt source
WDT Reset (if WDT was enabled)                                        has both its interrupt enable bit and the cor-
Interrupt from RA0/INT pin, RB port change,                           responding interrupt flag bits set, the
                                                                        device will immediately wake-up from
   T0CKI interrupt, or some Peripheral Interrupts                       sleep. The TO bit is set, and the PD bit is
                                                                        cleared.
The following peripheral interrupts can wake-up from
SLEEP:                                                       The WDT is cleared when the device wake from
                                                             SLEEP, regardless of the source of wake-up.
Capture1 interrupt
Capture2 interrupt                                         14.4.1.1 WAKE-UP DELAY
USART synchronous slave transmit interrupt
USART synchronous slave receive interrupt                  When the oscillator type is configured in XT or LF
                                                             mode, the Oscillator Start-up Timer (OST) is activated
Other peripherals can not generate interrupts since          on wake-up. The OST will keep the device in reset for
during SLEEP, no on-chip Q clocks are present.               1024TOSC. This needs to be taken into account when
                                                             considering the interrupt response time when coming
Any reset event will cause a device reset. Any interrupt     out of SLEEP.
event is considered a continuation of program execu-
tion. The TO and PD bits in the CPUSTA register can
be used to determine the cause of device reset. The

FIGURE 14-9: WAKE-UP FROM SLEEP THROUGH INTERRUPT

       OSC1       Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
CLKOUT(4)                                                                                   Tost(2)