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

型号

产品描述

搜索

PIC16C77/JW

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

器件描述

8-bit Microcontrollers - MCU 14KB 368 RAM 33 I/O

参数

产品属性属性值
Product AttributeAttribute Value
制造商:
Manufacturer:
Microchip
产品种类:
Product Category:
8-bit Microcontrollers - MCU
RoHS:YES
安装风格:
Mounting Style:
Through Hole
封装 / 箱体:
Package / Case:
CDIP-40
系列:
Series:
PIC16(L)C7x
Core:PIC16
Data Bus Width:8 bit
Maximum Clock Frequency:20 MHz
Program Memory Size:8 kB
Data RAM Size:368 B
ADC Resolution:8 bit
Number of I/Os:33 I/O
工作电源电压:
Operating Supply Voltage:
2.5 V to 6 V
最小工作温度:
Minimum Operating Temperature:
0 C
最大工作温度:
Maximum Operating Temperature:
+ 70 C
接口类型:
Interface Type:
I2C, SPI, USART
高度:
Height:
4.7 mm
长度:
Length:
52.7 mm
产品:
Product:
MCU
Program Memory Type:EPROM
宽度:
Width:
15.24 mm
商标:
Brand:
Microchip Technology
Data ROM Size:368 B
Data ROM Type:OTP EPROM
Number of ADC Channels:8
Number of Timers/Counters:3 Timer
Processor Series:PIC16
产品类型:
Product Type:
8-bit Microcontrollers - MCU
工厂包装数量:
Factory Pack Quantity:
10
子类别:
Subcategory:
Microcontrollers - MCU
电源电压-最大:
Supply Voltage - Max:
6 V
电源电压-最小:
Supply Voltage - Min:
4 V
商标名:
Tradename:
PIC

PIC16C77/JW器件文档内容

                                                                                PIC16C7X

             8-Bit CMOS Microcontrollers with A/D Converter

Devices included in this data sheet:                                 •  Wide operating voltage range:      2.5V to 6.0V

   •  PIC16C72              •  PIC16C74A                             •  High Sink/Source Current 25/25 mA

   •  PIC16C73              •  PIC16C76                              •  Commercial, Industrial and Extended temperature

                                                                        ranges

   •  PIC16C73A             •  PIC16C77                              •  Low-power consumption:

   •  PIC16C74                                                                  • < 2 mA @ 5V, 4 MHz

PIC16C7X Microcontroller Core Features:                                         • 15 µA typical @ 3V, 32 kHz

                                                                                • < 1 µA typical standby current

•     High-performance RISC CPU                                      PIC16C7X Peripheral Features:

•     Only 35 single word instructions to learn                      •  Timer0: 8-bit timer/counter with 8-bit prescaler

•     All single cycle instructions except for program               •  Timer1: 16-bit timer/counter with prescaler,

      branches which are two cycle                                      can be incremented during sleep via external

•     Operating speed: DC - 20 MHz clock input                          crystal/clock

                            DC - 200 ns instruction cycle            •  Timer2: 8-bit timer/counter with 8-bit period

•     Up to 8K x 14 words of Program Memory,                            register, prescaler and postscaler

      up to 368 x 8 bytes of Data Memory (RAM)                       •  Capture, Compare, PWM module(s)

•     Interrupt capability                                           •  Capture is 16-bit, max. resolution is 12.5 ns,

•     Eight level deep hardware stack                                   Compare is 16-bit, max. resolution is 200 ns,

•     Direct, indirect, and relative addressing modes                   PWM max. resolution is 10-bit

•     Power-on Reset (POR)                                           •  8-bit multichannel analog-to-digital converter

•     Power-up Timer (PWRT) and                                      •  Synchronous Serial Port (SSP) with

      Oscillator Start-up Timer (OST)                                   SPI™ and I2C™

•     Watchdog Timer (WDT) with its own on-chip RC                   •  Universal Synchronous Asynchronous Receiver

      oscillator for reliable operation                                 Transmitter (USART/SCI)

•     Programmable code-protection                                   •  Parallel Slave Port (PSP) 8-bits wide, with

•     Power saving SLEEP mode                                           external RD, WR and CS controls

•     Selectable oscillator options                                  •  Brown-out detection circuitry for

•     Low-power, high-speed CMOS EPROM                                  Brown-out Reset (BOR)

      technology

•     Fully static design

             PIC16C7X Features                   72        73           73A     74        74A               76            77

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

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

   I/O Pins                                      22        22           22      33             33           22            33

   Parallel Slave Port                           —         —            —       Yes       Yes               —             Yes

   Capture/Compare/PWM Modules                   1         2            2              2       2            2             2

   Timer Modules                                 3         3            3              3       3            3             3

   A/D Channels                                  5         5            5              8       8            5             8

   Serial Communication                          SPI/I2C   SPI/I2C,  SPI/I2C,   SPI/I2C,  SPI/I2C,         SPI/I2C,     SPI/I2C,

                                                           USART     USART      USART     USART            USART        USART

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

   Brown-out Reset                               Yes       —            Yes            —  Yes               Yes           Yes

   Interrupt Sources                             8         11           11      12             12           11            12

© 1997 Microchip Technology Inc.                                                                            DS30390E-page 1
PIC16C7X

Pin Diagrams

SDIP, SOIC, Windowed Side Brazed  Ceramic                                         SSOP

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

RA0/AN0          2         27     RB6                            RA0/AN0      2             27       RB6

RA1/AN1          3         26     RB5                            RA1/AN1      3             26       RB5

RA2/AN2          4         25     RB4                            RA2/AN2      4             25       RB4

RA3/AN3/VREF     5         24     RB3           RA3/AN3/VREF                  5             24       RB3

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

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

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

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

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

RC0/T1OSO/T1CKI  11        18     RC7           RC0/T1OSO/T1CKI               11            18       RC7

RC1/T1OSI        12        17     RC6           RC1/T1OSI                     12            17       RC6

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

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

                    PIC16C72                                                  PIC16C72

SDIP, SOIC,      Windowed Side  Brazed Ceramic                   PDIP, Windowed CERDIP

MCLR/VPP         •1  28           RB7           MCLR/VPP                  1             40      RB7

RA0/AN0          2   27           RB6           RA0/AN0                   2             39      RB6

RA1/AN1          3   26           RB5           RA1/AN1                   3             38      RB5

RA2/AN2          4   25           RB4           RA2/AN2                   4             37      RB4

RA3/AN3/VREF     5   24           RB3           RA3/AN3/VREF              5             36      RB3

                                                RA4/T0CKI                 6             35      RB2

RA4/T0CKI        6   23           RB2           RA5/SS/AN4                7             34      RB1

RA5/SS/AN4       7   22           RB1           RE0/RD/AN5                8             33      RB0/INT

VSS              8   21           RB0/INT       RE1/WR/AN6                9             32      VDD

OSC1/CLKIN       9   20           VDD           RE2/CS/AN7                10            31      VSS

OSC2/CLKOUT      10  19           VSS           VDD                       11            30      RD7/PSP7

                                                VSS                       12            29      RD6/PSP6

RC0/T1OSO/T1CKI  11  18           RC7/RX/DT     OSC1/CLKIN                13            28      RD5/PSP5

RC1/T1OSI/CCP2   12  17           RC6/TX/CK     OSC2/CLKOUT               14            27      RD4/PSP4

RC2/CCP1         13  16           RC5/SDO       RC0/T1OSO/T1CKI           15            26      RC7/RX/DT

RC3/SCK/SCL      14  15           RC4/SDI/SDA   RC1/T1OSI/CCP2            16            25      RC6/TX/CK

                                                RC2/CCP1                  17            24      RC5/SDO

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

                                                RD0/PSP0                  19            22      RD3/PSP3

                 PIC16C73A                      RD1/PSP1                  20            21      RD2/PSP2

                 PIC16C76                                                     PIC16C74

                                                                              PIC16C74A

                                                                              PIC16C77

DS30390E-page 2                                                               © 1997 Microchip  Technology        Inc.
                                                                                                                                                                                                                                                                                                                                                                                   PIC16C7X

Pin Diagrams     (Cont.’d)

                                                                                                                          MQFP                                         RC4/SDI/SDA                                          RC3/SCK/SCL            RC1/T1OSI/CCP2

                                                                                                                                                   RC6/TX/CK  RC5/SDO               RD3/PSP3  RD2/PSP2  RD1/PSP1  RD0/PSP0               RC2/CCP1                  NC

                                                                                                                 RC7/RX/DT                    1    44         43       42           41        40        39        38        37           36        35              34            33           NC

                                                                                                                 RD4/PSP4                     2                                                                                                                                  32           RC0/T1OSO/T1CKI

                                                                                                                 RD5/PSP5                     3                                                                                                                                  31           OSC2/CLKOUT

                                                                                                                 RD6/PSP6                     4                                                                                                                                  30           OSC1/CLKIN

                                                                                                                 RD7/PSP7                     5                                                                                                                                  29           VSS

                                                                                                                                         VSS  6                        PIC16C74                                                                                                  28           VDD

                                                                                                                                         VDD  7                                                                                                                                  27           RE2/CS/AN7

                                                                                                                          RB0/INT             8                                                                                                                                  26           RE1/WR/AN6

                                                                                                                                         RB1  9                                                                                                                                  25           RE0/RD/AN5

                                                                                                                                         RB2  10                                                                                                                                 24           RA5/SS/AN4

                                                                                                                                         RB3  11                                                                                                                                 23           RA4/T0CKI

                                                                                                                                                   12         13       14           15        16        17        18        19           20        21              22

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

PLCC                 RA3/AN3/VREF    RA2/AN2   RA1/AN1      RA0/AN0   MCLR/VPP                                                                                                                                                                                                                            RC6/TX/CK           RC4/SDI/SDA  RD3/PSP3  RD2/PSP2  RD1/PSP1  RD0/PSP0  RC3/SCK/SCL  RC2/CCP1  RC1/T1OSI/CCP2

                                                                                NC        RB7       RB6          RB5      RB4        NC                                                                                                                                          MQFP                                RC5/SDO

                                                                                                                                                                                                                                                                                 TQFP                                                                                                                                     NC

                     6               5         4            3         2         1         44        43           42       41         40

RA4/T0CKI        7                                                                                                                       39   RB3                                                                                                                                RC7/RX/DT         1      44         43       42           41        40        39        38        37           36        35              34            33  NC

RA5/SS/AN4       8                                                                                                                       38   RB2                                                                                                                                RD4/PSP4          2                                                                                                                                    32

RE0/RD/AN5       9                                                                                                                       37   RB1                                                                                                                                                                                                                                                                                           RC0/T1OSO/T1CKI

RE1/WR/AN6       10                  PIC16C74                                                                                            36   RB0/INT                                                                                                                            RD5/PSP5          3                                                                                                                                    31  OSC2/CLKOUT

RE2/CS/AN7       11                                                                                                                      35   VDD                                                                                                                                RD6/PSP6          4                                                                                                                                    30  OSC1/CLKIN

VDD              12                  PIC16C74A                                                                                           34   VSS                                                                                                                                RD7/PSP7          5                 PIC16C74A                                                                                                          29  VSS

VSS              13                                                                                                                      33   RD7/PSP7                                                                                                                               VSS           6                                                                                                                                    28  VDD

OSC1/CLKIN       14                  PIC16C77                                                                                            32   RD6/PSP6                                                                                                                               VDD           7                          PIC16C77                                                                                                  27  RE2/CS/AN7

OSC2/CLKOUT      15                                                                                                                      31   RD5/PSP5                                                                                                                               RB0/INT       8                                                                                                                                    26  RE1/WR/AN6

RC0/T1OSO/T1CKI  16                                                                                                                      30   RD4/PSP4                                                                                                                               RB1           9                                                                                                                                    25  RE0/RD/AN5

NC               17                                                                                                                      29   RC7/RX/DT                                                                                                                              RB2           10                                                                                                                                   24  RA5/SS/AN4

                                                                                                                                                                                                                                                                                     RB3           11                                                                                                                                   23  RA4/T0CKI

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

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

© 1997 Microchip Technology Inc.                                                                                                                                                                                                                                                                                                                                                                                                            DS30390E-page 3
PIC16C7X

Table of Contents

1.0  General Description ....................................................................................................................................................................... 5

2.0  PIC16C7X Device Varieties ........................................................................................................................................................... 7

3.0  Architectural Overview ................................................................................................................................................................... 9

4.0  Memory Organization................................................................................................................................................................... 19

5.0  I/O Ports....................................................................................................................................................................................... 43

6.0  Overview of Timer Modules ......................................................................................................................................................... 57

7.0  Timer0 Module ............................................................................................................................................................................. 59

8.0  Timer1 Module ............................................................................................................................................................................. 65

9.0  Timer2 Module ............................................................................................................................................................................. 69

10.0 Capture/Compare/PWM Module(s).............................................................................................................................................. 71

11.0 Synchronous Serial Port (SSP) Module....................................................................................................................................... 77

12.0 Universal Synchronous Asynchronous Receiver Transmitter (USART) ...................................................................................... 99

13.0 Analog-to-Digital Converter (A/D) Module ................................................................................................................................. 117

14.0 Special Features of the CPU ..................................................................................................................................................... 129

15.0 Instruction Set Summary............................................................................................................................................................ 147

16.0 Development Support ................................................................................................................................................................ 163

17.0 Electrical Characteristics for PIC16C72 ..................................................................................................................................... 167

18.0 Electrical Characteristics for PIC16C73/74................................................................................................................................ 183

19.0 Electrical Characteristics for PIC16C73A/74A ........................................................................................................................... 201

20.0 Electrical Characteristics for PIC16C76/77................................................................................................................................ 219

21.0 DC and AC Characteristics Graphs and Tables ........................................................................................................................ 241

22.0 Packaging Information ............................................................................................................................................................... 251

Appendix A:  ................................................................................................................................................................................... 263

Appendix B:  Compatibility ............................................................................................................................................................. 263

Appendix C:  What’s New............................................................................................................................................................... 264

Appendix D:  What’s Changed ....................................................................................................................................................... 264

Appendix E:  PIC16/17 Microcontrollers ....................................................................................................................................... 265

Pin Compatibility ................................................................................................................................................................................ 271

Index .................................................................................................................................................................................................. 273

List of Examples................................................................................................................................................................................. 279

List of Figures..................................................................................................................................................................................... 280

List of Tables...................................................................................................................................................................................... 283

Reader Response .............................................................................................................................................................................. 286

PIC16C7X Product Identification System........................................................................................................................................... 287

For register and module descriptions in this data sheet, device legends show which devices apply to those sections. As

an example, the legend below would mean that the following section applies only to the PIC16C72, PIC16C73A and

PIC16C74A devices.

Applicable Devices

72 73 73A 74 74A 76 77

                        To Our Valued Customers

We constantly strive to improve the quality of all our products and documentation. We have spent an exceptional

amount of time to ensure that these documents are correct. However, we realize that we may have missed a few

things. If you find any information that is missing or appears in error, please use the reader response form in the

back of this data sheet to inform us. We appreciate your assistance in making this a better document.

DS30390E-page 4                                  © 1997 Microchip Technology Inc.
                                                                                                           PIC16C7X

1.0       GENERAL DESCRIPTION                                          8-bit  A/D    is  provided.  The     8-bit  resolution    is  ideally

The PIC16C7X is a family of            low-cost, high-perfor-          suited for applications requiring low-cost analog inter-

mance, CMOS, fully-static, 8-bit microcontrollers with                 face, e.g. thermostat control, pressure sensing, etc.

integrated     analog-to-digital  (A/D)    converters,      in  the    The PIC16C7X family has special features to reduce

PIC16CXX mid-range family.                                             external components, thus reducing cost, enhancing

All  PIC16/17   microcontrollers       employ        an   advanced     system     reliability  and  reducing       power  consumption.

RISC architecture. The PIC16CXX microcontroller fam-                   There are four oscillator options, of which the single pin

ily has enhanced core features, eight-level deep stack,                RC oscillator provides a low-cost solution, the LP oscil-

and multiple internal and external interrupt sources.                  lator minimizes power consumption, XT is a standard

The separate instruction and data buses of the Harvard                 crystal, and the HS is for High Speed crystals. The

architecture allow a 14-bit wide instruction word with                 SLEEP (power-down) feature provides a power saving

the separate 8-bit wide data. The two stage instruction                mode. The user can wake up the chip from SLEEP

pipeline allows all instructions to execute in a single                through    several      external  and  internal    interrupts  and

cycle, except for program branches which require two                   resets.

cycles. A total of 35 instructions (reduced instruction                A highly reliable Watchdog Timer with its own on-chip

set) are available. Additionally, a large register set gives           RC oscillator provides protection against software lock-

some of the architectural innovations used to achieve a                up.

very high performance.                                                 A UV erasable CERDIP packaged version is ideal for

PIC16CXX       microcontrollers       typically  achieve    a   2:1    code development while the cost-effective One-Time-

code compression and a 4:1 speed improvement over                      Programmable (OTP) version is suitable for production

other 8-bit microcontrollers in their class.                           in any volume.

The PIC16C72 has 128 bytes of RAM and 22 I/O pins.                     The PIC16C7X family fits perfectly in applications rang-

In   addition  several    peripheral   features      are    available  ing from security and remote sensors to appliance con-

including: three timer/counters, one Capture/Compare/                  trol and automotive. The EPROM technology makes

PWM module and one serial port. The Synchronous                        customization       of  application    programs    (transmitter

Serial Port can be configured as either a 3-wire Serial                 codes,     motor      speeds,     receiver  frequencies,       etc.)

Peripheral     Interface  (SPI)   or  the  two-wire       Inter-Inte-  extremely     fast    and  convenient.      The    small  footprint

grated Circuit (I2C) bus. Also a 5-channel high-speed                  packages make this microcontroller series perfect for

8-bit A/D is provided. The 8-bit resolution is ideally                 all applications with space limitations. Low cost, low

suited for applications requiring low-cost analog inter-               power, high performance, ease of use and I/O flexibility

face, e.g. thermostat control, pressure sensing, etc.                  make the PIC16C7X very versatile even in areas where

The PIC16C73/73A devices have 192 bytes of RAM,                        no   microcontroller    use    has    been  considered        before

while the PIC16C76 has 368 byes of RAM. Each device                    (e.g.  timer  functions,     serial   communication,          capture

has 22 I/O pins. In addition, several peripheral features              and compare, PWM functions and coprocessor appli-

are available including: three timer/counters, two Cap-                cations).

ture/Compare/PWM modules and two serial ports. The                     1.1        Family and Upward Compatibility

Synchronous Serial Port can be configured as either a                   Users familiar with the PIC16C5X microcontroller fam-

3-wire Serial Peripheral Interface (SPI) or the two-wire               ily will realize that this is an enhanced version of the

Inter-Integrated Circuit (I2C) bus. The Universal Syn-                 PIC16C5X architecture. Please refer to Appendix A for

chronous       Asynchronous           Receiver           Transmitter   a detailed list of enhancements. Code written for the

(USART) is also known as the Serial Communications                     PIC16C5X can be easily ported to the PIC16CXX fam-

Interface or SCI. Also a 5-channel high-speed 8-bit A/                 ily of devices (Appendix B).

D is provided.The 8-bit resolution is ideally suited for

applications requiring low-cost analog interface, e.g.                 1.2        Development Support

thermostat control, pressure sensing, etc.

The PIC16C74/74A devices have 192 bytes of RAM,                        PIC16C7X devices are supported by the complete line

while  the     PIC16C77   has     368  bytes     of  RAM.   Each       of Microchip Development tools.

device has 33 I/O pins. In addition several peripheral                 Please     refer  to    Section 16.0   for  more   details    about

features are available including: three timer/counters,                Microchip’s development tools.

two Capture/Compare/PWM modules and two serial

ports. The Synchronous Serial Port can be configured

as either a 3-wire Serial Peripheral Interface (SPI) or

the two-wire Inter-Integrated Circuit (I2C) bus. The Uni-

versal Synchronous Asynchronous Receiver Transmit-

ter    (USART)  is        also    known          as  the    Serial

Communications  Interface         or   SCI.  An      8-bit  Parallel

Slave Port is provided. Also an 8-channel high-speed

© 1997 Microchip Technology Inc.                                                                                   DS30390E-page 5
PIC16C7X

TABLE     1-1:       PIC16C7XX FAMILY OF DEVCES

                                              PIC16C710     PIC16C71          PIC16C711       PIC16C715        PIC16C72     PIC16CR72(1)

Clock        Maximum Frequency                20            20             20                 20            20              20

             of Operation (MHz)

             EPROM Program Memory             512           1K             1K                 2K            2K              —

             (x14 words)

Memory       ROM Program Memory               —             —              —                  —             —               2K

             (14K words)

             Data Memory (bytes)              36            36             68                 128           128             128

             Timer Module(s)                  TMR0          TMR0           TMR0               TMR0          TMR0,           TMR0,

                                                                                                            TMR1,           TMR1,

                                                                                                            TMR2            TMR2

Peripherals  Capture/Compare/                 —             —              —                  —             1               1

             PWM Module(s)

             Serial Port(s)                   —             —              —                  —             SPI/I2C         SPI/I2C

             (SPI/I2C, USART)

             Parallel Slave Port              —             —              —                  —             —               —

             A/D Converter (8-bit) Channels   4             4              4                  4             5               5

             Interrupt Sources                4             4              4                  4             8               8

             I/O Pins                         13            13             13                 13            22              22

             Voltage Range (Volts)            3.0-6.0       3.0-6.0        3.0-6.0            3.0-5.5       2.5-6.0         3.0-5.5

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

             Brown-out Reset                  Yes           —              Yes                Yes           Yes             Yes

             Packages                         18-pin DIP,   18-pin DIP,    18-pin DIP,        18-pin DIP,   28-pin SDIP,    28-pin SDIP,

                                              SOIC;         SOIC           SOIC;              SOIC;         SOIC, SSOP      SOIC, SSOP

                                              20-pin SSOP                  20-pin SSOP        20-pin SSOP

                                                   PIC16C73A              PIC16C74A                  PIC16C76             PIC16C77

Clock        Maximum Frequency      of Oper-  20                     20                       20                     20

             ation (MHz)

             EPROM Program Memory             4K                     4K                       8K                     8K

Memory       (x14 words)

             Data Memory (bytes)              192                    192                      368                    368

             Timer Module(s)                  TMR0,                  TMR0,                    TMR0,                  TMR0,

                                              TMR1,                  TMR1,                    TMR1,                  TMR1,

                                              TMR2                   TMR2                     TMR2                   TMR2

Peripherals  Capture/Compare/PWM Mod-         2                      2                        2                      2

             ule(s)

             Serial  Port(s)  (SPI/I2C,  US-  SPI/I2C, USART         SPI/I2C, USART           SPI/I2C, USART         SPI/I2C, USART

             ART)

             Parallel Slave Port              —                      Yes                      —                      Yes

             A/D Converter (8-bit) Channels   5                      8                        5                      8

             Interrupt Sources                11                     12                       11                     12

             I/O Pins                         22                     33                       22                     33

             Voltage Range (Volts)            2.5-6.0                2.5-6.0                  2.5-6.0                2.5-6.0

Features     In-Circuit Serial Programming    Yes                    Yes                      Yes                    Yes

             Brown-out Reset                  Yes                    Yes                      Yes                    Yes

             Packages                         28-pin SDIP,           40-pin DIP;              28-pin SDIP,           40-pin DIP;

                                              SOIC                   44-pin PLCC,             SOIC                   44-pin PLCC,

                                                                     MQFP, TQFP                                      MQFP, TQFP

All PIC16/17 Family devices have Power-on Reset, selectable Watchdog Timer, selectable code protect and          high I/O current capabil-

ity. All PIC16C7XX Family devices use serial programming with clock pin RB6 and data pin RB7.

Note   1: Please contact your local Microchip sales office for availability of these devices.

DS30390E-page 6                                                                                        © 1997 Microchip Technology Inc.
                                                                                               PIC16C7X

2.0       PIC16C7X DEVICE VARIETIES                             2.3        Quick-Turnaround-Production (QTP)

A variety of frequency ranges and packaging options                        Devices

are available. Depending on application and production          Microchip offers a QTP Programming Service for fac-

requirements, the proper device option can be selected          tory production orders. This service is made available

using the information in the PIC16C7X Product Identifi-          for users who choose not to program a medium to high

cation System section at the end of this data sheet.            quantity of units and whose code patterns have stabi-

When placing orders, please use that page of the data           lized. The devices are identical to the OTP devices but

sheet to specify the correct part number.                       with  all  EPROM    locations  and  configuration  options

For the PIC16C7X family, there are two device “types”           already programmed by the factory. Certain code and

as indicated in the device number:                              prototype verification procedures apply before produc-

1.   C,   as   in    PIC16C74.    These     devices  have       tion shipments are available. Please contact your local

     EPROM     type      memory   and  operate  over  the       Microchip Technology sales office for more details.

     standard voltage range.                                    2.4        Serialized Quick-Turnaround

2.   LC,   as  in    PIC16LC74.   These     devices  have                  Production (SQTPSM) Devices

     EPROM     type      memory   and  operate  over     an

     extended voltage range.                                    Microchip offers a unique programming service where

                                                                a few user-defined locations in each device are pro-

2.1       UV Erasable Devices                                   grammed with different serial numbers. The serial num-

The UV erasable version, offered in CERDIP package              bers may be random, pseudo-random, or sequential.

is   optimal   for   prototype    development   and      pilot  Serial  programming  allows    each   device  to  have   a

programs.      This  version      can    be  erased      and    unique     number  which  can  serve  as  an  entry-code,

reprogrammed to any of the oscillator modes.                    password, or ID number.

Microchip's    PICSTART®        Plus   and   PRO MATE® II

programmers        both  support      programming    of  the

PIC16C7X.

2.2       One-Time-Programmable (OTP)

          Devices

The availability of OTP devices is especially useful for

customers who need the flexibility for frequent code

updates and small volume applications.

The OTP devices, packaged in plastic packages, per-

mit the user to program them once. In addition to the

program memory, the configuration bits must also be

programmed.

© 1997 Microchip Technology Inc.                                                                      DS30390E-page 7
PIC16C7X

NOTES:

DS30390E-page 8  © 1997 Microchip Technology Inc.
                                                                                               PIC16C7X

3.0      ARCHITECTURAL OVERVIEW                                  PIC16CXX devices contain an 8-bit ALU and working

The high performance of the PIC16CXX family can be               register. The ALU is a general purpose arithmetic unit.

attributed to a number of architectural features com-            It performs arithmetic and Boolean functions between

monly found in RISC microprocessors. To begin with,              the data in the working register and any register file.

the PIC16CXX uses a Harvard architecture, in which,              The ALU is 8-bits wide and capable of addition, sub-

program and data are accessed from separate memo-                traction, shift and logical operations. Unless otherwise

ries using separate buses. This improves bandwidth               mentioned,   arithmetic  operations       are  two's   comple-

over traditional von Neumann architecture in which pro-          ment in nature. In two-operand instructions, typically

gram   and  data  are  fetched    from  the  same      memory    one operand is the working register (W register). The

using  the  same  bus.    Separating    program    and   data    other operand is a file register or an immediate con-

buses further allows instructions to be sized differently        stant. In single operand instructions, the operand is

than the 8-bit wide data word. Instruction opcodes are           either the W register or a file register.

14-bits wide making it possible to have all single word          The W register is an 8-bit working register used for ALU

instructions.  A  14-bit  wide  program    memory      access    operations. It is not an addressable register.

bus fetches a 14-bit instruction in a single cycle. A two-       Depending on the instruction executed, the ALU may

stage pipeline overlaps fetch and execution of instruc-          affect the values of the Carry (C), Digit Carry (DC), and

tions (Example 3-1). Consequently, all instructions (35)         Zero (Z) bits in the STATUS register. The C and DC bits

execute in a single cycle (200 ns @ 20 MHz) except for           operate  as  a  borrow   bit  and  a  digit    borrow  out  bit,

program branches.                                                respectively, in subtraction. See the SUBLW and SUBWF

The table below lists program memory (EPROM) and                 instructions for examples.

data memory (RAM) for each PIC16C7X device.

       Device             Program          Data Memory

                          Memory

     PIC16C72             2K x 14            128 x 8

     PIC16C73             4K x 14            192 x 8

     PIC16C73A            4K x 14            192 x 8

     PIC16C74             4K x 14            192 x 8

     PIC16C74A            4K x 14            192 x 8

     PIC16C76             8K x 14            368 x 8

     PIC16C77             8K x 14            386 x 8

The PIC16CXX can directly or indirectly address its

register files or data memory. All special function regis-

ters, including the program counter, are mapped in the

data memory. The PIC16CXX has an orthogonal (sym-

metrical) instruction set that makes it possible to carry

out any operation on any register using any addressing

mode.    This  symmetrical  nature    and    lack  of  ‘special

optimal  situations’      make    programming      with  the

PIC16CXX simple yet efficient. In addition, the learning

curve is reduced significantly.

© 1997 Microchip Technology Inc.                                                                              DS30390E-page 9
PIC16C7X

FIGURE  3-1:      PIC16C72 BLOCK DIAGRAM

                                      13                                 Data Bus         8    PORTA

                     EPROM                 Program Counter

                                                                                                       RA0/AN0

                     Program                                                                           RA1/AN1

                     Memory                                                 RAM                        RA2/AN2

                                           8 Level Stack                    File                       RA3/AN3/VREF

                     2K x 14                     (13-bit)                Registers                     RA4/T0CKI

                                                                            128 x 8                    RA5/SS/AN4

            Program  14                                            Addr(1)

             Bus                                              RAM                 9            PORTB

                     Instruction reg                                     Addr MUX

                                                           7                         Indirect          RB0/INT

                                           Direct Addr                            8    Addr

                                                                                 FSR reg               RB7:RB1

                                                                            STATUS reg         PORTC

                                      8                                                                RC0/T1OSO/T1CKI

                                                                                                       RC1/T1OSI

                                                                      3           MUX                  RC2/CCP1

                                           Power-up                                                    RC3/SCK/SCL

                                                 Timer                                                 RC4/SDI/SDA

                     Instruction           Oscillator                                                  RC5/SDO

                     Decode &              Start-up Timer                   ALU                        RC6

                     Control               Power-on                                                    RC7

                                                 Reset             8

                     Timing                Watchdog                      W reg

                     Generation                  Timer

OSC1/CLKIN                                 Brown-out

OSC2/CLKOUT                                      Reset

                                           MCLR  VDD, VSS

        Timer0                    Timer1                   Timer2

        A/D              Synchronous                       CCP1

                              Serial Port

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

DS30390E-page 10                                                                               © 1997  Microchip Technology  Inc.
                                                                                                        PIC16C7X

FIGURE 3-2:    PIC16C73/73A/76 BLOCK DIAGRAM

Device     Program Memory         Data  Memory (RAM)

PIC16C73       4K x 14                  192 x 8

PIC16C73A      4K x 14                  192 x 8

PIC16C76       8K x 14                  368 x 8

                                        13                                 Data Bus         8    PORTA

                                            Program Counter

                        EPROM                                                                           RA0/AN0

                                                                                                        RA1/AN1

                        Program                                                                         RA2/AN2

                        Memory                   8 Level Stack                RAM                       RA3/AN3/VREF

                                                  (13-bit)                    File                      RA4/T0CKI

                                                                           Registers                    RA5/SS/AN4

             Program  14                                             Addr(1)

               Bus                                              RAM                 9            PORTB

                      Instruction reg                                      Addr MUX

                                                             7                         Indirect         RB0/INT

                                            Direct Addr                             8    Addr

                                                                                   FSR reg              RB7:RB1

                                                                              STATUS reg         PORTC

                                        8                                                               RC0/T1OSO/T1CKI

                                                                                                        RC1/T1OSI/CCP2

                                                                        3           MUX                 RC2/CCP1

                                                 Power-up                                               RC3/SCK/SCL

                                                  Timer                                                 RC4/SDI/SDA

                      Instruction                Oscillator                                             RC5/SDO

                      Decode &              Start-up Timer                    ALU                       RC6/TX/CK

                        Control                  Power-on                                               RC7/RX/DT

                                                  Reset              8

                        Timing                   Watchdog                  W reg

                      Generation                  Timer

OSC1/CLKIN                                       Brown-out

OSC2/CLKOUT                                      Reset(2)

                                            MCLR  VDD, VSS

Timer0                     Timer1                          Timer2                      A/D

CCP1                       CCP2                   Synchronous                       USART

                                                      Serial Port

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

           2:  Brown-out Reset is not available on the PIC16C73.

© 1997 Microchip Technology Inc.                                                                        DS30390E-page 11
PIC16C7X

FIGURE 3-3:        PIC16C74/74A/77 BLOCK DIAGRAM

Device        Program Memory        Data  Memory (RAM)

PIC16C74          4K x 14                    192 x 8

PIC16C74A         4K x 14                    192 x 8

PIC16C77          8K x 14                    368 x 8

                                          13                                    Data Bus           8     PORTA

                                              Program Counter                                                    RA0/AN0

                       EPROM                                                                                     RA1/AN1

                       Program                                                                                   RA2/AN2

                       Memory                 8 Level Stack                          RAM                         RA3/AN3/VREF

                                                      (13-bit)                       File                        RA4/T0CKI

                                                                                Registers                        RA5/SS/AN4

              Program  14                                                       (1)

              Bus                                                    RAM  Addr             9             PORTB

                       Instruction reg                                          Addr MUX

                                                                7                             Indirect           RB0/INT

                                              Direct Addr                                  8       Addr

                                                                                     FSR reg                     RB7:RB1

                                                                                     STATUS reg          PORTC

                                          8                                                                      RC0/T1OSO/T1CKI

                                                                                                                 RC1/T1OSI/CCP2

                                                                             3             MUX                   RC2/CCP1

                                              Power-up                                                           RC3/SCK/SCL

                                                      Timer                                                      RC4/SDI/SDA

                       Instruction            Oscillator                                                         RC5/SDO

                       Decode &               Start-up Timer                    ALU                              RC6/TX/CK

                       Control                Power-on                                                           RC7/RX/DT

                                                      Reset               8                              PORTD

                       Timing                 Watchdog                          W reg

                       Generation                     Timer

OSC1/CLKIN                                    Brown-out                                                          RD7/PSP7:RD0/PSP0

OSC2/CLKOUT                                           Reset(2)

                                                                                Parallel Slave Port      PORTE

                                              MCLR    VDD, VSS                                                   RE0/RD/AN5

                                                                                                                 RE1/WR/AN6

Timer0                     Timer1                            Timer2                           A/D

                                                                                                                 RE2/CS/AN7

CCP1                       CCP2                       Synchronous                          USART

                                                      Serial Port

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

          2:  Brown-out Reset is not available on the PIC16C74.

DS30390E-page 12                                                                                         © 1997  Microchip Technology Inc.
                                                                                                            PIC16C7X

TABLE 3-1:           PIC16C72 PINOUT DESCRIPTION

Pin Name               DIP    SSOP   SOIC          I/O/P  Buffer       Description

                       Pin#   Pin#   Pin#          Type   Type

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

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

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

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

                                                                       the instruction cycle rate.

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

                                                                       pin is an active low reset to the device.

                                                                       PORTA is a bi-directional I/O port.

RA0/AN0                2      2      2             I/O    TTL          RA0 can also be analog input0

RA1/AN1                3      3      3             I/O    TTL          RA1 can also be analog input1

RA2/AN2                4      4      4             I/O    TTL          RA2 can also be analog input2

RA3/AN3/VREF           5      5      5             I/O    TTL          RA3 can also be analog input3 or analog reference voltage

RA4/T0CKI              6      6      6             I/O    ST           RA4 can also be the clock input to the Timer0 module.

                                                                       Output is open drain type.

RA5/SS/AN4             7      7      7             I/O    TTL          RA5 can also be analog input4 or the slave select for the

                                                                       synchronous serial port.

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

                                                                       programmed for internal weak pull-up on all inputs.

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

RB1                    22     22     22            I/O    TTL

RB2                    23     23     23            I/O    TTL

RB3                    24     24     24            I/O    TTL

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

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

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

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

                                                                       PORTC is a bi-directional I/O port.

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

                                                                       clock input.

RC1/T1OSI              12     12     12            I/O    ST           RC1 can also be the Timer1 oscillator input.

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

                                                                       PWM1 output.

RC3/SCK/SCL            14     14     14            I/O    ST           RC3 can also be the synchronous serial clock input/output

                                                                       for both SPI and I2C modes.

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

                                                                       data I/O (I2C mode).

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

RC6                    17     17     17            I/O    ST

RC7                    18     18     18            I/O    ST

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

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

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

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

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

      2:  This buffer  is a Schmitt Trigger input  when used in serial programming mode.

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

© 1997 Microchip Technology Inc.                                                                                  DS30390E-page 13
PIC16C7X

TABLE 3-2:           PIC16C73/73A/76 PINOUT DESCRIPTION

Pin Name               DIP         SOIC             I/O/P  Buffer       Description

                       Pin#        Pin#             Type   Type

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

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

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

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

                                                                        the instruction cycle rate.

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

                                                                        pin is an active low reset to the device.

                                                                        PORTA is a bi-directional I/O port.

RA0/AN0                2             2              I/O    TTL          RA0 can also be analog input0

RA1/AN1                3             3              I/O    TTL          RA1 can also be analog input1

RA2/AN2                4             4              I/O    TTL          RA2 can also be analog input2

RA3/AN3/VREF           5             5              I/O    TTL          RA3 can also be analog input3 or analog reference voltage

RA4/T0CKI              6             6              I/O    ST           RA4 can also be the clock input to the Timer0 module.

                                                                        Output is open drain type.

RA5/SS/AN4             7             7              I/O    TTL          RA5 can also be analog input4 or the slave select for the

                                                                        synchronous serial port.

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

                                                                        programmed for internal weak pull-up on all inputs.

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

RB1                    22          22               I/O    TTL

RB2                    23          23               I/O    TTL

RB3                    24          24               I/O    TTL

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

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

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

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

                                                                        PORTC is a bi-directional I/O port.

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

                                                                        clock input.

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

                                                                        input/Compare2 output/PWM2 output.

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

                                                                        PWM1 output.

RC3/SCK/SCL            14          14               I/O    ST           RC3 can also be the synchronous serial clock input/output

                                                                        for both SPI and I2C modes.

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

                                                                        data I/O (I2C mode).

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

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

                                                                        Synchronous Clock.

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

                                                                        Synchronous Data.

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

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

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

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

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

      2:  This buffer  is a Schmitt Trigger  input  when used in serial programming mode.

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

DS30390E-page 14                                                                                     © 1997 Microchip Technology Inc.
                                                                                                  PIC16C7X

TABLE 3-3:           PIC16C74/74A/77 PINOUT DESCRIPTION

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

                     Pin#  Pin#       Pin#  Type   Type

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

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

                                                                      crystal oscillator mode. In RC mode, OSC2 pin outputs

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

                                                                      denotes the instruction cycle rate.

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

                                                                      This pin is an active low reset to the device.

                                                                      PORTA is a bi-directional I/O port.

RA0/AN0              2            3   19    I/O    TTL                RA0 can also be analog input0

RA1/AN1              3            4   20    I/O    TTL                RA1 can also be analog input1

RA2/AN2              4            5   21    I/O    TTL                RA2 can also be analog input2

RA3/AN3/VREF         5            6   22    I/O    TTL                RA3 can also be analog input3 or analog reference

                                                                      voltage

RA4/T0CKI            6            7   23    I/O    ST                 RA4 can also be the clock input to the Timer0 timer/

                                                                      counter. Output is open drain type.

RA5/SS/AN4           7            8   24    I/O    TTL                RA5 can also be analog input4 or the slave select for

                                                                      the synchronous serial port.

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

                                                                      programmed for internal weak pull-up on all inputs.

RB0/INT              33           36  8     I/O    TTL/ST(1)          RB0 can also be the external interrupt pin.

RB1                  34           37  9     I/O    TTL

RB2                  35           38  10    I/O    TTL

RB3                  36           39  11    I/O    TTL

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

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

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

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

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

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

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

      2:  This buffer is a Schmitt Trigger input when used in serial programming mode.

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

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

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

© 1997 Microchip Technology Inc.                                                                                   DS30390E-page 15
PIC16C7X

TABLE 3-3:           PIC16C74/74A/77 PINOUT DESCRIPTION               (Cont.’d)

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

                     Pin#   Pin#      Pin#    Type   Type

                                                                      PORTC is a bi-directional I/O port.

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

                                                                      Timer1 clock input.

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

                                                                      Capture2 input/Compare2 output/PWM2 output.

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

                                                                      PWM1 output.

RC3/SCK/SCL          18     20        37      I/O    ST               RC3 can also be the synchronous serial clock input/

                                                                      output for both SPI and I2C modes.

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

                                                                      data I/O (I2C mode).

RC5/SDO              24     26        43      I/O    ST               RC5 can also be the SPI Data Out

                                                                      (SPI mode).

RC6/TX/CK            25     27        44      I/O    ST               RC6 can also be the USART Asynchronous Transmit or

                                                                      Synchronous Clock.

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

                                                                      Synchronous Data.

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

                                                                      when interfacing to a microprocessor bus.

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

RD1/PSP1             20     22        39      I/O    ST/TTL(3)

RD2/PSP2             21     23        40      I/O    ST/TTL(3)

RD3/PSP3             22     24        41      I/O    ST/TTL(3)

RD4/PSP4             27     30        2       I/O    ST/TTL(3)

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

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

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

                                                                      PORTE is a bi-directional I/O port.

RE0/RD/AN5           8           9    25      I/O    ST/TTL(3)        RE0 can also be read control for the parallel slave port,

                                                                      or analog input5.

RE1/WR/AN6           9      10        26      I/O    ST/TTL(3)        RE1 can also be write control for the parallel slave port,

                                                                      or analog input6.

RE2/CS/AN7           10     11        27      I/O    ST/TTL(3)        RE2 can also be select control for the parallel slave

                                                                      port, or analog input7.

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

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

NC                   —      1,17,28,  12,13,         —                These pins are not internally connected. These pins should

                            40        33,34                           be left unconnected.

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

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

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

      2:  This buffer is a Schmitt Trigger input when used in serial programming mode.

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

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

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

DS30390E-page 16                                                                                       © 1997 Microchip Technology Inc.
                                                                                                                   PIC16C7X

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,   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)

through Q4. The clocks and instruction execution flow                         then two cycles are required to complete the instruction

is shown in Figure 3-4.                                                      (Example 3-1).

                                                                             A fetch cycle begins with the program counter (PC)

                                                                             incrementing in Q1.

                                                                             In the execution cycle, the fetched instruction is latched

                                                                             into the “Instruction Register" (IR) in cycle Q1. This

                                                                             instruction is then decoded and executed during the

                                                                             Q2, Q3, and Q4 cycles. Data memory is read during Q2

                                                                             (operand      read)    and  written   during      Q4   (destination

                                                                             write).

FIGURE 3-4:          CLOCK/INSTRUCTION CYCLE

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

               OSC1

                  Q1

                  Q2                                                                                                               Internal

                  Q3                                                                                                               phase

                                                                                                                                   clock

                  Q4

                  PC                      PC                        PC+1                                     PC+2

      OSC2/CLKOUT

            (RC mode)           Fetch INST (PC)

                                Execute INST (PC-1)                 Fetch INST (PC+1)

                                                                    Execute INST (PC)                Fetch INST (PC+2)

                                                                                                     Execute INST (PC+1)

EXAMPLE 3-1:            INSTRUCTION PIPELINE FLOW

                                          Tcy0           Tcy1       Tcy2                  Tcy3               Tcy4              Tcy5

1.    MOVLW  55h                      Fetch 1        Execute 1

2.    MOVWF  PORTB                                       Fetch 2    Execute 2

3.    CALL   SUB_1                                                  Fetch 3            Execute 3

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

5.    Instruction      @  address     SUB_1                                                          Fetch SUB_1           Execute SUB_1

All   instructions     are    single  cycle,    except   for  any   program  branches.      These    take    two   cycles  since    the      fetch

instruction is “flushed” from the pipeline while the new instruction is being fetched and then executed.

© 1997 Microchip Technology Inc.                                                                                           DS30390E-page 17
PIC16C7X

NOTES:

DS30390E-page 18  © 1997 Microchip Technology Inc.
                                                                                        PIC16C7X

4.0                 MEMORY ORGANIZATION                    FIGURE 4-2:           PIC16C73/73A/74/74A

                    Applicable Devices                                           PROGRAM MEMORY MAP

                    72 73 73A 74 74A 76 77                                       AND STACK

4.1                 Program Memory Organization                                         PC<12:0>

The PIC16C7X family has a 13-bit program counter                        CALL,  RETURN          13

capable of addressing an 8K x 14 program memory                         RETFIE,  RETLW

space. The amount of program memory available to

each device is listed below:                                                     Stack Level 1

             Device          Program        Address Range

                             Memory                                              Stack Level 8

PIC16C72                     2K x 14        0000h-07FFh

PIC16C73                     4K x 14        0000h-0FFFh                          Reset Vector      0000h

PIC16C73A                    4K x 14        0000h-0FFFh

PIC16C74                     4K x 14        0000h-0FFFh

PIC16C74A                    4K x 14        0000h-0FFFh    User Memory           Interrupt Vector  0004h

PIC16C76                     8K x 14        0000h-1FFFh                 Space                      0005h

PIC16C77                     8K x 14        0000h-1FFFh                          On-chip Program

                                                                                 Memory (Page 0)

For those devices with less than 8K program memory,                                                07FFh

accessing a location above the physically implemented                            On-chip Program   0800h

address will cause a wraparound.                                                 Memory (Page 1)

The reset vector is at 0000h and the interrupt vector is                                           0FFFh

at 0004h.

FIGURE 4-1:           PIC16C72 PROGRAM                                                             1000h

                      MEMORY MAP AND STACK

                                                                                                   1FFFh

                             PC<12:0>

             CALL,  RETURN              13

             RETFIE,  RETLW

                      Stack Level 1

                      Stack Level 8

                      Reset Vector          0000h

User Memory           Interrupt Vector      0004h

             Space                          0005h

                      On-chip Program

                             Memory

                                            07FFh

                                            0800h

                                            1FFFh

© 1997 Microchip Technology Inc.                                                                   DS30390E-page 19
PIC16C7X

FIGURE 4-3:           PIC16C76/77 PROGRAM            4.2       Data Memory Organization

                      MEMORY MAP AND STACK                         Applicable Devices

                             PC<12:0>                              72 73 73A 74 74A 76 77

                                                     The     data  memory  is   partitioned  into  multiple  banks

             CALL,  RETURN             13            which contain the General Purpose Registers and the

             RETFIE,  RETLW                          Special Function Registers. Bits RP1 and RP0 are the

                      Stack Level 1                  bank select bits.

                                                     RP1:RP0 (STATUS<6:5>)

                      Stack Level 2                  = 00 →        Bank0

                                                     = 01 →        Bank1

                                                     = 10 →        Bank2

                      Stack Level 8                  = 11 →        Bank3

                                                     Each bank extends up to 7Fh (128 bytes). The lower

                      Reset Vector                   locations of each bank are reserved for the Special

                                              0000h  Function Registers. Above the Special Function Regis-

                                                     ters are General Purpose Registers, implemented as

                                                     static  RAM.    All  implemented   banks      contain   special

                      Interrupt  Vector       0004h  function  registers.  Some  “high     use”    special  function

                                                     registers from one bank may be mirrored in another

                                              0005h  bank for code reduction and quicker access.

User Memory           On-Chip    Page      0

             Space                            07FFh  4.2.1     GENERAL PURPOSE REGISTER FILE

                                              0800h  The register file can be accessed either directly, or indi-

                      On-Chip    Page      1

                                              0FFFh  rectly    through     the  File   Select      Register  FSR

                                              1000h  (Section 4.5).

                      On-Chip    Page      2

                                              17FFh

                                 Page      3  1800h

                      On-Chip

                                              1FFFh

DS30390E-page 20                                                                © 1997 Microchip Technology Inc.
                                                                                  PIC16C7X

FIGURE 4-4:     PIC16C72          REGISTER     FILE     FIGURE 4-5:     PIC16C73/73A/74/74A

                MAP                                                     REGISTER FILE MAP

File                                           File     File                                          File

Address                                        Address  Address                                       Address

      00h       INDF(1)              INDF(1)   80h      00h             INDF(1)             INDF(1)   80h

      01h       TMR0                 OPTION    81h      01h             TMR0                OPTION    81h

      02h       PCL                  PCL       82h      02h             PCL                 PCL       82h

      03h       STATUS               STATUS    83h      03h             STATUS              STATUS    83h

      04h       FSR                  FSR       84h      04h             FSR                 FSR       84h

      05h       PORTA                TRISA     85h      05h             PORTA               TRISA     85h

      06h       PORTB                TRISB     86h      06h             PORTB               TRISB     86h

      07h       PORTC                TRISC     87h      07h             PORTC               TRISC     87h

      08h                                      88h      08h             PORTD(2)            TRISD(2)  88h

      09h                                      89h      09h             PORTE(2)            TRISE(2)  89h

      0Ah       PCLATH               PCLATH    8Ah      0Ah             PCLATH              PCLATH    8Ah

      0Bh       INTCON               INTCON    8Bh      0Bh             INTCON              INTCON    8Bh

      0Ch       PIR1                 PIE1      8Ch      0Ch             PIR1                PIE1      8Ch

      0Dh                                      8Dh      0Dh             PIR2                PIE2      8Dh

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

      0Fh       TMR1H                          8Fh      0Fh             TMR1H                         8Fh

      10h       T1CON                          90h      10h             T1CON                         90h

      11h       TMR2                           91h      11h             TMR2                          91h

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

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

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

      15h       CCPR1L                         95h      15h             CCPR1L                        95h

      16h       CCPR1H                         96h      16h             CCPR1H                        96h

      17h       CCP1CON                        97h      17h             CCP1CON                       97h

      18h                                      98h      18h             RCSTA               TXSTA     98h

      19h                                      99h      19h             TXREG               SPBRG     99h

      1Ah                                      9Ah      1Ah             RCREG                         9Ah

      1Bh                                      9Bh      1Bh             CCPR2L                        9Bh

      1Ch                                      9Ch      1Ch             CCPR2H                        9Ch

      1Dh                                      9Dh      1Dh             CCP2CON                       9Dh

      1Eh       ADRES                          9Eh      1Eh             ADRES                         9Eh

      1Fh       ADCON0               ADCON1    9Fh      1Fh             ADCON0              ADCON1    9Fh

      20h                                      A0h      20h                                           A0h

                General              General

                Purpose              Purpose                            General             General

                Register             Register                           Purpose             Purpose

                                               BFh                      Register            Register

                                               C0h

                                                        7Fh                                           FFh

                                                                        Bank 0              Bank 1

      7Fh                                      FFh

                Bank 0               Bank 1

                                                                  Unimplemented data memory locations, read as

          Unimplemented data memory locations, read as            '0'.

          '0'.                                          Note  1:  Not a physical register.

Note  1:   Not a physical register.                           2:  These registers are not physically imple-

                                                                  mented on the PIC16C73/73A, read as '0'.

© 1997 Microchip Technology Inc.                                                            DS30390E-page 21
PIC16C7X

FIGURE 4-6:       PIC16C76/77     REGISTER FILE      MAP

                                                                                                                File

                                                                                                                Address

Indirect addr.(*)  00h            Indirect addr.(*)  80h        Indirect addr.(*)  100h      Indirect addr.(*)  180h

      TMR0         01h            OPTION             81h        TMR0               101h      OPTION             181h

      PCL          02h            PCL                82h        PCL                102h      PCL                182h

      STATUS       03h            STATUS             83h        STATUS             103h      STATUS             183h

      FSR          04h            FSR                84h        FSR                104h      FSR                184h

      PORTA        05h            TRISA              85h                           105h                         185h

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

      PORTC        07h            TRISC              87h                           107h                         187h

      PORTD (1)    08h            TRISD (1)          88h                           108h                         188h

      PORTE (1)    09h            TRISE (1)          89h                           109h                         189h

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

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

      PIR1         0Ch            PIE1               8Ch                           10Ch                         18Ch

      PIR2         0Dh            PIE2               8Dh                           10Dh                         18Dh

      TMR1L        0Eh            PCON               8Eh                           10Eh                         18Eh

      TMR1H        0Fh                               8Fh                           10Fh                         18Fh

      T1CON        10h                               90h                           110h                         190h

      TMR2         11h                               91h                           111h                         191h

      T2CON        12h            PR2                92h                           112h                         192h

      SSPBUF       13h            SSPADD             93h                           113h                         193h

      SSPCON       14h            SSPSTAT            94h                           114h                         194h

      CCPR1L       15h                               95h                           115h                         195h

      CCPR1H       16h                               96h                           116h                         196h

CCP1CON            17h                               97h        General            117h      General            197h

      RCSTA        18h            TXSTA              98h        Purpose            118h      Purpose            198h

                                                                Register                     Register

      TXREG        19h            SPBRG              99h        16 Bytes           119h      16 Bytes           199h

      RCREG        1Ah                               9Ah                           11Ah                         19Ah

      CCPR2L       1Bh                               9Bh                           11Bh                         19Bh

      CCPR2H       1Ch                               9Ch                           11Ch                         19Ch

CCP2CON            1Dh                               9Dh                           11Dh                         19Dh

      ADRES        1Eh                               9Eh                           11Eh                         19Eh

      ADCON0       1Fh            ADCON1             9Fh                           11Fh                         19Fh

                   20h                               A0h                           120h                         1A0h

      General                     General                       General                      General

      Purpose                     Purpose                       Purpose                      Purpose

      Register                    Register                      Register                     Register

      96 Bytes                    80 Bytes                      80 Bytes                     80 Bytes           1EFh

                                                     EFh                           16Fh

                                  accesses           F0h        accesses           170h      accesses           1F0h

                                  70h-7Fh                       70h-7Fh                      70h - 7Fh

                   7Fh                               FFh                           17Fh                         1FFh

      Bank 0                      Bank 1                        Bank 2                       Bank 3

             Unimplemented data memory locations, read as '0'.

      * Not a physical register.

Note  1:     PORTD, PORTE, TRISD, and TRISE are unimplemented on the PIC16C76, read as '0'.

Note:             The upper 16 bytes of data memory in banks 1, 2, and 3 are mapped in Bank 0. This may require

                  relocation of data memory usage in the user application code if upgrading to the PIC16C76/77.

DS30390E-page 22                                                                         © 1997 Microchip Technology Inc.
                                                                                                                     PIC16C7X

4.2.2       SPECIAL FUNCTION REGISTERS                                         The special function registers can be classified into two

                                                                               sets (core and peripheral). Those registers associated

The Special Function Registers are registers used by                           with the “core” functions are described in this section,

the  CPU    and     Peripheral  Modules    for  controlling  the               and those related to the operation of the peripheral fea-

desired operation of the device. These registers are                           tures are described in the section of that peripheral fea-

implemented as static RAM.                                                     ture.

TABLE       4-1:     PIC16C72 SPECIAL FUNCTION REGISTER SUMMARY

                                                                                                                            Value on:   Value on all

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

                                                                                                                            BOR         (3)

Bank 0

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

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

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

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

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

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

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

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

08h              —   Unimplemented                                                                                          —           —

09h              —   Unimplemented                                                                                          —           —

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

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

0Ch         PIR1     —              ADIF        —             —     SSPIF             CCP1IF     TMR2IF   TMR1IF            -0--  0000  -0--  0000

0Dh              —   Unimplemented                                                                                          —           —

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

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

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

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

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

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

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

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

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

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

18h              —   Unimplemented                                                                                          —           —

19h              —   Unimplemented                                                                                          —           —

1Ah              —   Unimplemented                                                                                          —           —

1Bh              —   Unimplemented                                                                                          —           —

1Ch              —   Unimplemented                                                                                          —           —

1Dh              —   Unimplemented                                                                                          —           —

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

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

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

            Shaded locations are unimplemented, read as ‘0’.

Note    1:  These registers can be addressed from either bank.

        2:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for              the PC<12:8> whose

            contents are transferred to the upper byte of the program counter.

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

        4:  The IRP and RP1 bits are reserved on the PIC16C72, always maintain these bits clear.

© 1997 Microchip Technology Inc.                                                                                            DS30390E-page 23
PIC16C7X

TABLE       4-1:     PIC16C72 SPECIAL FUNCTION REGISTER SUMMARY                                                (Cont.’d)

                                                                                                                            Value on:   Value on all

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

                                                                                                                            BOR         (3)

Bank 1

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

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

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

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

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

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

86h         TRISB    PORTB Data Direction Register                                                                          1111  1111  1111  1111

87h         TRISC    PORTC Data Direction Register                                                                          1111  1111  1111  1111

88h               —  Unimplemented                                                                                          —           —

89h               —  Unimplemented                                                                                          —           —

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

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

8Ch         PIE1     —              ADIE     —                —           SSPIE  CCP1IE  TMR2IE                TMR1IE       -0--  0000  -0--  0000

8Dh               —  Unimplemented                                                                                          —           —

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

8Fh               —  Unimplemented                                                                                          —           —

90h               —  Unimplemented                                                                                          —           —

91h               —  Unimplemented                                                                                          —           —

92h         PR2      Timer2 Period Register                                                                                 1111  1111  1111  1111

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

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

95h               —  Unimplemented                                                                                          —           —

96h               —  Unimplemented                                                                                          —           —

97h               —  Unimplemented                                                                                          —           —

98h               —  Unimplemented                                                                                          —           —

99h               —  Unimplemented                                                                                          —           —

9Ah               —  Unimplemented                                                                                          —           —

9Bh               —  Unimplemented                                                                                          —           —

9Ch               —  Unimplemented                                                                                          —           —

9Dh               —  Unimplemented                                                                                          —           —

9Eh               —  Unimplemented                                                                                          —           —

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

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

            Shaded locations are unimplemented, read as ‘0’.

Note    1:  These registers can be addressed from either bank.

        2:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for              the PC<12:8> whose

            contents are transferred to the upper byte of the program counter.

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

        4:  The IRP and RP1 bits are reserved on the PIC16C72, always maintain these bits clear.

DS30390E-page 24                                                                                               © 1997 Microchip Technology Inc.
                                                                                                                     PIC16C7X

TABLE       4-2:     PIC16C73/73A/74/74A SPECIAL FUNCTION REGISTER SUMMARY

                                                                                                                             Value on:   Value on all

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

                                                                                                                             BOR         (2)

Bank 0

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

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

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

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

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

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

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

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

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

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

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

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

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

0Dh         PIR2     —            —               —             –              —                 —  —                CCP2IF  ----  ---0  ----  ---0

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

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

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

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

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

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

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

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

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

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

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

19h         TXREG    USART Transmit Data Register                                                                            0000  0000  0000  0000

1Ah         RCREG    USART Receive Data Register                                                                             0000  0000  0000  0000

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

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

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

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

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

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

            Shaded locations are unimplemented, read as ‘0’.

Note    1:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the           PC<12:8>    whose con-

            tents are transferred to the upper byte of the program counter.

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

        3:  Bits PSPIE and PSPIF are reserved on the PIC16C73/73A, always maintain these bits clear.

        4:  These registers can be addressed from either bank.

        5:  PORTD and PORTE are not physically implemented on the PIC16C73/73A, read as ‘0’.

        6:  Brown-out Reset is not implemented on the PIC16C73 or the PIC16C74, read as '0'.

        7:  The IRP and RP1 bits are reserved on the PIC16C73/73A/74/74A, always maintain these bits clear.

© 1997 Microchip Technology Inc.                                                                                             DS30390E-page 25
PIC16C7X

TABLE       4-2:     PIC16C73/73A/74/74A SPECIAL FUNCTION REGISTER SUMMARY                                                   (Cont.’d)

                                                                                                                             Value on:   Value on all

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

                                                                                                                             BOR         (2)

Bank 1

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

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

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

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

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

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

86h         TRISB    PORTB Data Direction Register                                                                           1111  1111  1111  1111

87h         TRISC    PORTC Data Direction Register                                                                           1111  1111  1111  1111

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

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

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

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

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

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

8Eh         PCON     —              —              —          —              —      —         POR                    BOR(6)  ----  --qq  ----  --uu

8Fh              —   Unimplemented                                                                                           —           —

90h              —   Unimplemented                                                                                           —           —

91h              —   Unimplemented                                                                                           —           —

92h         PR2      Timer2 Period Register                                                                                  1111  1111  1111  1111

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

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

95h              —   Unimplemented                                                                                           —           —

96h              —   Unimplemented                                                                                           —           —

97h              —   Unimplemented                                                                                           —           —

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

99h         SPBRG    Baud Rate Generator Register                                                                            0000  0000  0000  0000

9Ah              —   Unimplemented                                                                                           —           —

9Bh              —   Unimplemented                                                                                           —           —

9Ch              —   Unimplemented                                                                                           —           —

9Dh              —   Unimplemented                                                                                           —           —

9Eh              —   Unimplemented                                                                                           —           —

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

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

            Shaded locations are unimplemented, read as ‘0’.

Note    1:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the PC<12:8>              whose con-

            tents are transferred to the upper byte of the program counter.

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

        3:  Bits PSPIE and PSPIF are reserved on the PIC16C73/73A, always maintain these bits clear.

        4:  These registers can be addressed from either bank.

        5:  PORTD and PORTE are not physically implemented on the PIC16C73/73A, read as ‘0’.

        6:  Brown-out Reset is not implemented on the PIC16C73 or the PIC16C74, read as '0'.

        7:  The IRP and RP1 bits are reserved on the PIC16C73/73A/74/74A, always maintain these bits clear.

DS30390E-page 26                                                                                      © 1997 Microchip Technology Inc.
                                                                                                                     PIC16C7X

TABLE       4-3:    PIC16C76/77 SPECIAL FUNCTION REGISTER SUMMARY

                                                                                                                             Value on:   Value on all

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

                                                                                                                             BOR         (2)

Bank 0

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

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

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

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

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

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

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

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

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

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

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

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

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

0Dh         PIR2     —            —               —           –                —                 —  —                CCP2IF  ----  ---0  ----  ---0

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

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

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

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

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

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

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

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

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

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

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

19h         TXREG    USART Transmit Data Register                                                                            0000  0000  0000  0000

1Ah         RCREG    USART Receive Data Register                                                                             0000  0000  0000  0000

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

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

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

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

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

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

            Shaded locations are unimplemented, read as ‘0’.

Note    1:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the           PC<12:8> whose con-

            tents are transferred to the upper byte of the program counter.

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

        3:  Bits PSPIE and PSPIF are reserved on the PIC16C76, always maintain these bits clear.

        4:  These registers can be addressed from any bank.

        5:  PORTD and PORTE are not physically implemented on the PIC16C76, read as ‘0’.

© 1997 Microchip Technology Inc.                                                                                             DS30390E-page 27
PIC16C7X

TABLE 4-3:           PIC16C76/77 SPECIAL FUNCTION REGISTER SUMMARY                                     (Cont.’d)

                                                                                                                             Value on:   Value on all

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

                                                                                                                             BOR         (2)

Bank 1

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

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

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

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

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

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

86h         TRISB    PORTB Data Direction Register                                                                           1111  1111  1111  1111

87h         TRISC    PORTC Data Direction Register                                                                           1111  1111  1111  1111

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

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

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

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

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

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

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

8Fh              —   Unimplemented                                                                                           —           —

90h              —   Unimplemented                                                                                           —           —

91h              —   Unimplemented                                                                                           —           —

92h         PR2      Timer2 Period Register                                                                                  1111  1111  1111  1111

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

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

95h              —   Unimplemented                                                                                           —           —

96h              —   Unimplemented                                                                                           —           —

97h              —   Unimplemented                                                                                           —           —

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

99h         SPBRG    Baud Rate Generator Register                                                                            0000  0000  0000  0000

9Ah              —   Unimplemented                                                                                           —           —

9Bh              —   Unimplemented                                                                                           —           —

9Ch              —   Unimplemented                                                                                           —           —

9Dh              —   Unimplemented                                                                                           —           —

9Eh              —   Unimplemented                                                                                           —           —

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

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

            Shaded locations are unimplemented, read as ‘0’.

Note    1:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the           PC<12:8> whose con-

            tents are transferred to the upper byte of the program counter.

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

        3:  Bits PSPIE and PSPIF are reserved on the PIC16C76, always maintain these bits clear.

        4:  These registers can be addressed from any bank.

        5:  PORTD and PORTE are not physically implemented on the PIC16C76, read as ‘0’.

DS30390E-page 28                                                                                       © 1997 Microchip Technology Inc.
                                                                                                                       PIC16C7X

TABLE        4-3:     PIC16C76/77 SPECIAL FUNCTION REGISTER SUMMARY                                                    (Cont.’d)

                                                                                                                                       Value on:   Value on all

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

                                                                                                                                       BOR         (2)

Bank 2

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

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

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

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

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

105h               —  Unimplemented                                                                                                    —           —

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

107h               —  Unimplemented                                                                                                    —           —

108h               —  Unimplemented                                                                                                    —           —

109h               —  Unimplemented                                                                                                    —           —

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

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

10Ch-              —  Unimplemented                                                                                                    —           —

10Fh

Bank 3

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

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

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

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

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

185h               —  Unimplemented                                                                                                    —           —

186h         TRISB    PORTB Data Direction Register                                                                                    1111  1111  1111  1111

187h               —  Unimplemented                                                                                                    —           —

188h               —  Unimplemented                                                                                                    —           —

189h               —  Unimplemented                                                                                                    —           —

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

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

18Ch-              —  Unimplemented                                                                                                    —           —

18Fh

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

             Shaded locations are unimplemented, read as ‘0’.

Note     1:  The upper byte of the program counter is not directly accessible. PCLATH is a holding register for the                    PC<12:8> whose con-

             tents are transferred to the upper byte of the program counter.

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

         3:  Bits PSPIE and PSPIF are reserved on the PIC16C76, always maintain these bits clear.

         4:  These registers can be addressed from any bank.

         5:  PORTD and PORTE are not physically implemented on the PIC16C76, read as ‘0’.

© 1997 Microchip Technology Inc.                                                                                                       DS30390E-page 29
PIC16C7X

4.2.2.1     STATUS REGISTER                                         For example, CLRF          STATUS will clear the upper-three

            Applicable Devices                                      bits and set the Z bit.    This leaves the STATUS register

            72 73 73A 74 74A 76 77                                  as 000u    u1uu (where u = unchanged).

The STATUS register, shown in Figure 4-7, contains the              It is recommended, therefore, that only BCF,         BSF,

arithmetic status of the ALU, the RESET status and the              SWAPF and MOVWF instructions are used to alter the

bank select bits for data memory.                                   STATUS     register  because    these  instructions  do  not

                                                                    affect the Z, C or DC bits from the STATUS register. For

The STATUS register can be the destination for any                  other instructions, not affecting any status bits, see the

instruction, as with any other register. If the STATUS              "Instruction Set Summary."

register is the destination for an instruction that affects

the Z, DC or C bits, then the write to these three bits is              Note 1:   For those devices that do not use bits IRP

disabled. These bits are set or cleared according to the                          and RP1 (STATUS<7:6>), maintain these

device logic. Furthermore, the TO and PD bits are not                             bits clear to ensure   upward compatibility

writable. Therefore, the result of an instruction with the                        with future products.

STATUS register as destination may be different than                    Note 2:   The C and DC bits operate as a borrow

intended.                                                                         and digit borrow bit, respectively, in sub-

                                                                                  traction.    See  the  SUBLW   and     SUBWF

                                                                                  instructions for examples.

FIGURE 4-7:       STATUS REGISTER (ADDRESS                   03h,   83h, 103h, 183h)

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

     IRP     RP1         RP0         TO   PD                 Z          DC            C        R = Readable bit

bit7                                                                                     bit0  W = Writable bit

                                                                                               U = Unimplemented bit,

                                                                                                    read as ‘0’

                                                                                               - n = Value at POR reset

bit 7:      IRP: Register Bank Select bit (used for indirect addressing)

            1 = Bank 2, 3 (100h - 1FFh)

            0 = Bank 0, 1 (00h - FFh)

bit   6-5:  RP1:RP0: Register Bank Select bits (used for direct addressing)

            11 = Bank 3 (180h - 1FFh)

            10 = Bank 2 (100h - 17Fh)

            01 = Bank 1 (80h - FFh)

            00 = Bank 0 (00h - 7Fh)

            Each bank is 128 bytes

bit   4:    TO: Time-out bit

            1 = After power-up, CLRWDT instruction, or SLEEP instruction

            0 = A WDT time-out occurred

bit   3:    PD: Power-down bit

            1 = After power-up or by the CLRWDT instruction

            0 = By execution of the SLEEP instruction

bit   2:    Z: Zero bit

            1 = The result of an arithmetic or logic operation is zero

            0 = The result of an arithmetic or logic operation is not zero

bit   1:    DC: Digit carry/borrow bit (ADDWF, ADDLW,SUBLW,SUBWF instructions) (for borrow the polarity is reversed)

            1 = A carry-out from the 4th low order bit of the result occurred

            0 = No carry-out from the 4th low order bit of the result

bit   0:    C: Carry/borrow bit (ADDWF, ADDLW,SUBLW,SUBWF              instructions)

            1 = A carry-out from the most significant bit of the result occurred

            0 = No carry-out from the most significant bit of the result occurred

            Note: For borrow the polarity is reversed. A subtraction is executed by adding the two’s complement of the

            second operand. For rotate (RRF, RLF) instructions, this bit is loaded with either the high or low order bit of

            the source register.

DS30390E-page 30                                                                               © 1997 Microchip Technology Inc.
                                                                                          PIC16C7X

4.2.2.2     OPTION REGISTER

            Applicable Devices                                          Note:  To achieve a 1:1 prescaler assignment for

            72 73 73A 74 74A 76 77                                             the TMR0 register, assign the prescaler to

                                                                               the Watchdog Timer.

The OPTION register is a readable and writable regis-

ter which contains various control bits to configure the

TMR0/WDT    prescaler,  the       External  INT      Interrupt,

TMR0, and the weak pull-ups on PORTB.

FIGURE 4-8:  OPTION REGISTER (ADDRESS 81h, 181h)

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

RBPU        INTEDG      T0CS      T0SE              PSA          PS2    PS1    PS0    R   = Readable bit

bit7                                                                           bit0   W   = Writable bit

                                                                                      U   = Unimplemented bit,

                                                                                          read as ‘0’

                                                                                      -n  = Value at POR reset

bit   7:    RBPU: PORTB Pull-up Enable bit

            1 = PORTB pull-ups are disabled

            0 = PORTB pull-ups are enabled by individual port latch values

bit   6:    INTEDG: Interrupt Edge Select bit

            1 = Interrupt on rising edge of RB0/INT pin

            0 = Interrupt on falling edge of RB0/INT pin

bit   5:    T0CS: TMR0 Clock Source Select bit

            1 = Transition on RA4/T0CKI pin

            0 = Internal instruction cycle clock (CLKOUT)

bit   4:    T0SE: TMR0 Source Edge Select bit

            1 = Increment on high-to-low transition on RA4/T0CKI pin

            0 = Increment on low-to-high transition on RA4/T0CKI pin

bit   3:    PSA: Prescaler Assignment bit

            1 = Prescaler is assigned to the WDT

            0 = Prescaler is assigned to the Timer0 module

bit   2-0:  PS2:PS0: Prescaler Rate Select bits

            Bit Value   TMR0 Rate   WDT Rate

             000        1:2                 1:1

             001        1:4                 1:2

             010        1:8                 1:4

             011        1 : 16              1:8

             100        1 : 32              1 : 16

             101        1 : 64              1 : 32

             110        1 : 128             1 : 64

             111        1 : 256             1 : 128

© 1997 Microchip Technology Inc.                                                                          DS30390E-page 31
PIC16C7X

4.2.2.3   INTCON REGISTER

          Applicable Devices                                     Note:   Interrupt flag bits get set when an interrupt

          72 73 73A 74 74A 76 77                                         condition occurs regardless of the state of

                                                                         its corresponding enable bit or the global

The INTCON Register is a readable and writable regis-                    enable bit, GIE (INTCON<7>).

ter which contains various enable and flag bits for the

TMR0 register overflow, RB Port change and External

RB0/INT pin interrupts.

FIGURE 4-9:       INTCON REGISTER

                  (ADDRESS 0Bh, 8Bh, 10Bh, 18Bh)

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

     GIE     PEIE             T0IE  INTE       RBIE     T0IF     INTF    RBIF        R   = Readable bit

bit7                                                                     bit0        W   = Writable bit

                                                                                     U   = Unimplemented bit,

                                                                                            read as ‘0’

                                                                                     -n  = Value at POR reset

bit 7:    GIE:(1) Global Interrupt Enable bit

          1 = Enables all un-masked interrupts

          0 = Disables all interrupts

bit   6:  PEIE: Peripheral Interrupt Enable bit

          1 = Enables all un-masked peripheral interrupts

          0 = Disables all peripheral interrupts

bit   5:  T0IE: TMR0 Overflow Interrupt Enable bit

          1 = Enables the TMR0 interrupt

          0 = Disables the TMR0 interrupt

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

          1 = Enables the RB0/INT external interrupt

          0 = Disables the RB0/INT external interrupt

bit   3:  RBIE: RB Port Change Interrupt Enable bit

          1 = Enables the RB port change interrupt

          0 = Disables the RB port change interrupt

bit   2:  T0IF: TMR0 Overflow Interrupt Flag bit

          1 = TMR0 register has overflowed (must be cleared in software)

          0 = TMR0 register did not overflow

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

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

          0 = The RB0/INT external interrupt did not occur

bit   0:  RBIF: RB Port Change Interrupt Flag bit

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

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

Note 1:   For the PIC16C73 and PIC16C74, if an interrupt occurs while the GIE bit is being cleared, the GIE bit

          may be unintentionally re-enabled by the RETFIE instruction in the user’s Interrupt Service Routine.

          Refer to Section 14.5     for a detailed description.

      Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the

      global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to

      enabling an interrupt.

DS30390E-page 32                                                                        © 1997 Microchip Technology Inc.
                                                                                          PIC16C7X

4.2.2.4     PIE1 REGISTER

            Applicable Devices                                     Note:   Bit  PEIE  (INTCON<6>)         must  be  set  to

            72 73 73A 74 74A 76 77                                         enable any peripheral interrupt.

This register contains the individual enable bits for the

peripheral interrupts.

FIGURE 4-10:  PIE1 REGISTER PIC16C72 (ADDRESS                      8Ch)

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

      —     ADIE        —           —        SSPIE         CCP1IE  TMR2IE  TMR1IE     R   = Readable bit

bit7                                                                            bit0  W   = Writable bit

                                                                                      U   = Unimplemented bit,

                                                                                          read as ‘0’

                                                                                      -n  = Value at POR reset

bit   7:    Unimplemented: Read as '0'

bit   6:    ADIE: A/D Converter Interrupt Enable bit

            1 = Enables the A/D interrupt

            0 = Disables the A/D interrupt

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

bit   3:    SSPIE: Synchronous Serial Port Interrupt Enable bit

            1 = Enables the SSP interrupt

            0 = Disables the SSP interrupt

bit   2:    CCP1IE: CCP1 Interrupt Enable bit

            1 = Enables the CCP1 interrupt

            0 = Disables the CCP1 interrupt

bit   1:    TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

            1 = Enables the TMR2 to PR2 match interrupt

            0 = Disables the TMR2 to PR2 match interrupt

bit   0:    TMR1IE: TMR1 Overflow Interrupt Enable bit

            1 = Enables the TMR1 overflow interrupt

            0 = Disables the TMR1 overflow interrupt

© 1997 Microchip Technology Inc.                                                                          DS30390E-page 33
PIC16C7X

FIGURE 4-11:      PIE1 REGISTER PIC16C73/73A/74/74A/76/77 (ADDRESS 8Ch)

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

PSPIE(1)  ADIE    RCIE   TXIE              SSPIE     CCP1IE    TMR2IE     TMR1IE  R   = Readable bit

bit7                                                                      bit0    W   = Writable bit

                                                                                  U   = Unimplemented bit,

                                                                                      read as ‘0’

                                                                                  -n  = Value at POR reset

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

          1 = Enables the PSP read/write interrupt

          0 = Disables the PSP read/write interrupt

bit   6:  ADIE: A/D Converter Interrupt Enable bit

          1 = Enables the A/D interrupt

          0 = Disables the A/D interrupt

bit   5:  RCIE: USART Receive Interrupt Enable bit

          1 = Enables the USART receive interrupt

          0 = Disables the USART receive interrupt

bit   4:  TXIE: USART Transmit Interrupt Enable bit

          1 = Enables the USART transmit interrupt

          0 = Disables the USART transmit interrupt

bit   3:  SSPIE: Synchronous Serial Port Interrupt Enable bit

          1 = Enables the SSP interrupt

          0 = Disables the SSP interrupt

bit   2:  CCP1IE: CCP1 Interrupt Enable bit

          1 = Enables the CCP1 interrupt

          0 = Disables the CCP1 interrupt

bit   1:  TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

          1 = Enables the TMR2 to PR2 match interrupt

          0 = Disables the TMR2 to PR2 match interrupt

bit   0:  TMR1IE: TMR1 Overflow Interrupt Enable bit

          1 = Enables the TMR1 overflow interrupt

          0 = Disables the TMR1 overflow interrupt

Note 1:   PIC16C73/73A/76 devices do not have a Parallel Slave Port implemented, this bit location is reserved

          on these devices, always maintain this bit clear.

DS30390E-page 34                                                                     © 1997 Microchip Technology  Inc.
                                                                                              PIC16C7X

4.2.2.5     PIR1 REGISTER                                         Note:       Interrupt flag bits get set when an interrupt

            Applicable Devices                                                condition occurs regardless of the state of

            72 73 73A 74 74A 76 77                                            its corresponding enable bit or the global

This register contains the individual    flag bits for the                     enable bit, GIE (INTCON<7>). User soft-

Peripheral interrupts.                                                        ware should ensure the appropriate inter-

                                                                              rupt flag bits are clear prior to enabling an

                                                                              interrupt.

FIGURE 4-12:  PIR1 REGISTER              PIC16C72 (ADDRESS        0Ch)

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

      —     ADIF              —     —        SSPIF   CCP1IF       TMR2IF  TMR1IF          R   = Readable bit

bit7                                                                            bit0      W   = Writable bit

                                                                                          U   = Unimplemented bit,

                                                                                              read as ‘0’

                                                                                          -n  = Value at POR reset

bit 7:      Unimplemented: Read as '0'

bit   6:    ADIF: A/D Converter Interrupt Flag bit

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

            0 = The A/D conversion is not complete

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

bit   3:    SSPIF: Synchronous Serial Port Interrupt Flag bit

            1 = The transmission/reception is complete (must be cleared in software)

            0 = Waiting to transmit/receive

bit   2:    CCP1IF: CCP1 Interrupt Flag bit

            Capture Mode

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

            0 = No TMR1 register capture occurred

            Compare Mode

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

            0 = No TMR1 register compare match occurred

            PWM Mode

            Unused in this mode

bit   1:    TMR2IF: TMR2 to PR2 Match Interrupt Flag bit

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

            0 = No TMR2 to PR2 match occurred

bit   0:    TMR1IF: TMR1 Overflow Interrupt Flag bit

            1 = TMR1 register overflowed (must be cleared in software)

            0 = TMR1 register did not overflow

      Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the

      global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to

      enabling an interrupt.

© 1997 Microchip Technology Inc.                                                                              DS30390E-page 35
PIC16C7X

FIGURE 4-13:      PIR1 REGISTER PIC16C73/73A/74/74A/76/77 (ADDRESS 0Ch)

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

PSPIF(1)  ADIF                RCIF  TXIF   SSPIF   CCP1IF    TMR2IF        TMR1IF        R   = Readable bit

bit7                                                                          bit0       W   = Writable bit

                                                                                         U   = Unimplemented bit,

                                                                                             read as ‘0’

                                                                                         -n  = Value at POR reset

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

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

          0 = No read or write has occurred

bit   6:  ADIF: A/D Converter Interrupt Flag bit

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

          0 = The A/D conversion is not complete

bit   5:  RCIF: USART Receive Interrupt Flag bit

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

          0 = The USART receive buffer is empty

bit   4:  TXIF: USART Transmit Interrupt Flag bit

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

          0 = The USART transmit buffer is full

bit   3:  SSPIF: Synchronous Serial Port Interrupt Flag bit

          1 = The transmission/reception is complete (must be cleared in software)

          0 = Waiting to transmit/receive

bit   2:  CCP1IF: CCP1 Interrupt Flag bit

          Capture Mode

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

          0 = No TMR1 register capture occurred

          Compare Mode

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

          0 = No TMR1 register compare match occurred

          PWM Mode

          Unused in this mode

bit   1:  TMR2IF: TMR2 to PR2 Match Interrupt Flag bit

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

          0 = No TMR2 to PR2 match occurred

bit   0:  TMR1IF: TMR1 Overflow Interrupt Flag bit

          1 = TMR1 register overflowed (must be cleared in software)

          0 = TMR1 register did not overflow

Note 1:   PIC16C73/73A/76 devices do not have a Parallel Slave Port implemented, this bit location is reserved

          on these devices, always maintain this bit clear.

      Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the

      global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to

      enabling an interrupt.

DS30390E-page 36                                                                            © 1997 Microchip Technology             Inc.
                                                                                PIC16C7X

4.2.2.6   PIE2 REGISTER

          Applicable Devices

          72 73 73A 74 74A 76 77

This register contains the individual enable bit for the

CCP2 peripheral interrupt.

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

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

      —       —             —     —          —            —    —    CCP2IE  R   = Readable bit

bit7                                                                bit0    W   = Writable bit

                                                                            U   = Unimplemented bit,

                                                                                read as ‘0’

                                                                            -n  = Value at POR reset

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

bit   0:  CCP2IE: CCP2 Interrupt Enable bit

          1 = Enables the CCP2 interrupt

          0 = Disables the CCP2 interrupt

© 1997 Microchip Technology Inc.                                                                DS30390E-page 37
PIC16C7X

4.2.2.7   PIR2 REGISTER                                  .

          Applicable Devices                                Note:  Interrupt flag bits get set when an interrupt

          72 73 73A 74 74A 76 77                                   condition occurs regardless of the state of

                                                                   its corresponding enable bit or the global

This register contains the CCP2 interrupt flag bit.                 enable bit, GIE (INTCON<7>). User soft-

                                                                   ware should ensure the appropriate inter-

                                                                   rupt flag bits are clear prior to enabling an

                                                                   interrupt.

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

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

      —       —               —    —       —        —       —      CCP2IF           R   = Readable bit

bit7                                                                          bit0  W   = Writable bit

                                                                                    U   = Unimplemented bit,

                                                                                        read as ‘0’

                                                                                    -n  = Value at POR reset

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

bit   0:  CCP2IF: CCP2 Interrupt Flag bit

          Capture Mode

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

          0 = No TMR1 register capture occurred

          Compare Mode

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

          0 = No TMR1 register compare match occurred

          PWM Mode

          Unused

      Interrupt flag bits get set when an interrupt condition occurs regardless of the state of its corresponding enable bit or the

      global enable bit, GIE (INTCON<7>). User software should ensure the appropriate interrupt flag bits are clear prior to

      enabling an interrupt.

DS30390E-page 38                                                                       © 1997 Microchip Technology Inc.
                                                                                          PIC16C7X

4.2.2.8       PCON REGISTER                                        Note:  BOR     is  unknown  on      Power-on      Reset.  It

              Applicable Devices                                          must then be set by the user and checked

              72 73 73A 74 74A 76 77                                      on  subsequent  resets       to  see   if  BOR     is

The Power Control (PCON) register contains a flag bit                      clear, indicating a brown-out has occurred.

to  allow     differentiation  between  a   Power-on  Reset               The BOR status bit is a don't care and is

(POR)     to  an  external     MCLR  Reset   or  WDT  Reset.              not necessarily predictable if the brown-out

Those devices with brown-out detection circuitry con-                     circuit is disabled (by clearing the BODEN

tain an additional bit to differentiate a Brown-out Reset                 bit in the Configuration word).

condition from a Power-on Reset condition.

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

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

          —       —            —        —         —           —    POR    BOR(1)      R   = Readable bit

    bit7                                                                      bit0    W   = Writable bit

                                                                                      U   = Unimplemented bit,

                                                                                          read as ‘0’

                                                                                      -n  = Value at POR reset

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

    bit   1:  POR: Power-on Reset Status bit

              1 = No Power-on Reset occurred

              0 = A Power-on Reset occurred (must be set in software after a Power-on Reset occurs)

    bit   0:  BOR(1): Brown-out Reset Status bit

              1 = No Brown-out Reset occurred

              0 = A Brown-out Reset occurred (must be set in software after a Brown-out Reset occurs)

    Note 1:   Brown-out Reset is not implemented on the PIC16C73/74.

© 1997 Microchip Technology Inc.                                                                          DS30390E-page 39
PIC16C7X

4.3        PCL and PCLATH                                            Note 1:  There are no status bits to indicate stack

           Applicable Devices                                                 overflow or stack underflow conditions.

           72 73 73A 74 74A 76 77                                    Note 2:  There    are    no    instructions/mnemonics

The program counter (PC) is 13-bits wide. The low byte                        called PUSH or POP. These are actions

comes from the PCL register, which is a readable and                          that     occur  from  the  execution  of  the

writable register. The upper bits (PC<12:8>) are not                          CALL,    RETURN,      RETLW, and RETFIE

readable,      but  are      indirectly  writable  through      the           instructions, or the vectoring to an inter-

PCLATH register. On any reset, the upper bits of the                          rupt address.

PC will be cleared.          Figure 4-17 shows the two situa-

tions for the loading of the PC. The upper example in                4.4    Program Memory Paging

the figure shows how the PC is loaded on a write to                          Applicable Devices

PCL (PCLATH<4:0> → PCH). The lower example in                               72 73 73A 74 74A 76 77

the figure shows how the PC is loaded during a CALL                   PIC16C7X devices are capable of addressing a contin-

or GOTO instruction (PCLATH<4:3> → PCH).                             uous 8K word block of program memory. The CALL and

FIGURE 4-17:           LOADING OF PC IN                              GOTO instructions provide only 11 bits of address to

                       DIFFERENT SITUATIONS                          allow branching within any 2K program memory page.

                                                                     When doing a CALL or GOTO instruction the upper 2 bits

           PCH                   PCL                                 of the address are provided by PCLATH<4:3>. When

                                                                     doing a CALL or GOTO instruction, the user must ensure

       12              8     7                  0  Instruction with  that the page select bits are programmed so that the

PC                                                 PCL as            desired program memory page is addressed. If a return

                                                   Destination       from a CALL instruction (or interrupt) is executed, the

                    PCLATH<4:0>              8

           5                                       ALU               entire 13-bit PC is pushed onto the stack. Therefore,

                                                                     manipulation of the PCLATH<4:3> bits are not required

                       PCLATH                                        for the return instructions (which POPs the address

                                                                     from the stack).

           PCH                  PCL

       12  11  10   8     7                     0                    Note:    PIC16C7X devices with 4K or less of pro-

PC                                                 GOTO,   CALL               gram     memory       ignore  paging      bit

                                                                              PCLATH<4>. The use of PCLATH<4> as a

       2   PCLATH<4:3>                   11                                   general purpose read/write bit is not rec-

                                                   Opcode <10:0>              ommended since this may affect upward

                    PCLATH                                                    compatibility with future products.

4.3.1      COMPUTED GOTO

A computed GOTO is accomplished by adding an off-

set to the program counter (ADDWF               PCL). When doing

a table read using a computed GOTO method, care

should be exercised if the table location crosses a PCL

memory boundary (each 256 byte block). Refer to the

application note “Implementing a Table Read" (AN556).

4.3.2      STACK

The PIC16CXX family has an 8 level deep x 13-bit wide

hardware stack. The stack space is not part of either

program or data space and the stack pointer is not

readable or writable. The PC is PUSHed onto the stack

when a CALL instruction is executed or an interrupt

causes a branch. The stack is POPed in the event of a

RETURN,        RETLW or a RETFIE instruction execution.

PCLATH is not affected by a PUSH or POP operation.

The stack operates as a circular buffer. This means that

after the stack has been PUSHed eight times, the ninth

push overwrites the value that was stored from the first

push. The tenth push overwrites the second push (and

so on).

DS30390E-page 40                                                                              © 1997 Microchip Technology Inc.
                                                                                                       PIC16C7X

Example 4-1  shows  the    calling      of  a  subroutine  in        4.5        Indirect Addressing, INDF and FSR

page 1 of the program memory. This example assumes                              Registers

that PCLATH is saved and restored by the interrupt ser-                         Applicable Devices

vice routine (if interrupts are used).                                          72 73 73A 74 74A 76 77

EXAMPLE 4-1:        CALL OF A SUBROUTINE IN                          The INDF register is not a physical register. Addressing

                    PAGE 1 FROM PAGE 0                               the INDF register will cause indirect addressing.

ORG   0x500                                                          Indirect addressing is possible by using the INDF reg-

BSF     PCLATH,3    ;Select       page  1     (800h-FFFh)            ister. Any instruction using the INDF register actually

BCF     PCLATH,4    ;Only  on     >4K   devices                      accesses the register pointed to by the File Select Reg-

CALL    SUB1_P1     ;Call  subroutine             in                 ister, FSR. Reading the INDF register itself indirectly

        :           ;page  1      (800h-FFFh)                        (FSR = '0') will read 00h. Writing to the INDF register

        :                                                            indirectly results in a no-operation (although status bits

        :                                                            may be affected). An effective 9-bit address is obtained

ORG   0x900

SUB1_P1:            ;called       subroutine                         by concatenating the 8-bit FSR register and the IRP bit

        :           ;page  1      (800h-FFFh)                        (STATUS<7>), as shown in Figure 4-18.

        :                                                            A  simple  program    to   clear  RAM   locations    20h-2Fh

RETURN              ;return       to    Call   subroutine            using indirect addressing is shown in Example 4-2.

                    ;in  page     0     (000h-7FFh)

                                                                     EXAMPLE 4-2:          INDIRECT ADDRESSING

                                                                                movlw    0x20   ;initialize           pointer

                                                                                movwf    FSR    ;to     RAM

                                                                     NEXT       clrf     INDF   ;clear       INDF     register

                                                                                incf     FSR,F  ;inc         pointer

                                                                                btfss    FSR,4  ;all         done?

                                                                                goto     NEXT   ;no     clear       next

                                                                     CONTINUE

                                                                                :                      ;yes  continue

FIGURE 4-18:      DIRECT/INDIRECT ADDRESSING

                 Direct Addressing                                                         Indirect Addressing

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

bank select   location select                                                      bank select               location select

                                               00     01       10          11

                                        00h           80h      100h       180h

                                                                     not used

                  Data

                  Memory

                                        7Fh           FFh      17Fh       1FFh

                                            Bank 0    Bank 1   Bank 2      Bank 3

      For register file map detail see Figure 4-4, and Figure 4-5.

© 1997 Microchip Technology Inc.                                                                             DS30390E-page 41
PIC16C7X

NOTES:

DS30390E-page 42  © 1997 Microchip Technology Inc.
                                                                                                   PIC16C7X

5.0        I/O PORTS                                                 FIGURE      5-1:     BLOCK DIAGRAM OF

           Applicable Devices                                                             RA3:RA0 AND RA5 PINS

           72 73 73A 74 74A 76 77                                    Data

Some pins for these I/O ports are multiplexed with an                bus         D         Q

alternate    function  for  the  peripheral      features   on  the                                                VDD

device. In general, when a peripheral is enabled, that               WR

pin may not be used as a general purpose I/O pin.                    Port        CK        Q

                                                                                                                   P

5.1        PORTA and TRISA Registers                                             Data Latch

           Applicable Devices                                                    D         Q                       N     I/O    pin(1)

           72 73 73A 74 74A 76 77

PORTA is a 6-bit latch.                                              WR

                                                                     TRIS        CK        Q                       VSS

The RA4/T0CKI pin is a Schmitt Trigger input and an                                                      Analog

open drain output. All other RA port pins have TTL input                         TRIS Latch              input

levels and full CMOS output drivers. All pins have data                                                  mode

direction    bits  (TRIS    registers)  which     can   configure

these pins as output or input.                                                               RD TRIS                     TTL

Setting a TRISA register bit puts the corresponding out-                                                                 input

put driver in a hi-impedance mode. Clearing a bit in the                                                                 buffer

TRISA register puts the contents of the output latch on                                            Q           D

the selected pin(s).

Reading the PORTA register reads the status of the                                                       EN

pins whereas writing to it will write to the port latch. All

write  operations      are  read-modify-write          operations.   RD PORT

Therefore a write to a port implies that the port pins are

read, this value is modified, and then written to the port

data latch.                                                          To A/D Converter

Pin RA4 is multiplexed with the Timer0 module clock                  Note  1:    I/O pins have protection diodes to VDD and

input to become the RA4/T0CKI pin.                                               VSS.

Other PORTA pins are multiplexed with analog inputs

and analog VREF input. The operation of each pin is

selected   by      clearing/setting   the   control   bits  in  the  FIGURE 5-2:          BLOCK DIAGRAM OF               RA4/

ADCON1 register (A/D Control Register1).                                                  T0CKI PIN

Note:        On a Power-on Reset, these pins are con-                      Data

             figured as analog inputs and read as '0'.                      bus         D     Q

The TRISA register controls the direction of the RA                        WR

pins, even when they are being used as analog inputs.                      PORT        CK    Q

The user must ensure the bits in the TRISA register are                                                         N        I/O pin(1)

maintained set when using them as analog inputs.                                    Data Latch

                                                                                       D     Q                 VSS

EXAMPLE 5-1:           INITIALIZING PORTA                                  WR

                                                                           TRIS        CK    Q           Schmitt

BCF        STATUS,     RP0  ;                                                                            Trigger

BCF        STATUS,     RP1  ;    PIC16C76/77      only                              TRIS Latch           input

                                                                                                         buffer

CLRF       PORTA            ;    Initialize       PORTA     by

                            ;    clearing    output

                            ;    data   latches                                           RD TRIS

BSF        STATUS,     RP0  ;    Select     Bank  1

MOVLW      0xCF             ;    Value     used   to                                                  Q  D

                            ;    initialize       data

                            ;    direction                                                               ENEN

MOVWF      TRISA            ;    Set    RA<3:0>   as    inputs

                            ;    RA<5:4>    as    outputs                  RD PORT

                            ;    TRISA<7:6>       are   always

                            ;    read   as  '0'.                           TMR0 clock input

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

© 1997 Microchip Technology Inc.                                                                               DS30390E-page 43
PIC16C7X

TABLE 5-1:        PORTA FUNCTIONS

Name              Bit#         Buffer  Function

RA0/AN0           bit0         TTL     Input/output or analog input

RA1/AN1           bit1         TTL     Input/output or analog input

RA2/AN2           bit2         TTL     Input/output or analog input

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

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

                                       Output is open drain type

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

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

TABLE 5-2:        SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

                                                                                                   Value on:       Value on all

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

                                                                                                   BOR

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

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

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

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

DS30390E-page 44                                                                           © 1997 Microchip Technology Inc.
                                                                                                            PIC16C7X

5.2       PORTB and TRISB Registers                                         Four of PORTB’s pins, RB7:RB4, have an interrupt on

          Applicable Devices                                                change feature. Only pins configured as inputs can

          72 73 73A 74 74A 76 77                                            cause this interrupt to occur (i.e. any RB7:RB4 pin con-

                                                                            figured as an output is excluded from the interrupt on

PORTB is an 8-bit wide bi-directional port. The corre-                      change comparison). The input pins (of RB7:RB4) are

sponding data direction register is TRISB. Setting a bit                    compared with the old value latched on the last read of

in the TRISB register puts the corresponding output                         PORTB.     The   “mismatch”     outputs  of  RB7:RB4        are

driver in a hi-impedance input mode. Clearing a bit in                      OR’ed together to generate the RB Port Change Inter-

the TRISB register puts the contents of the output latch                    rupt with flag bit RBIF (INTCON<0>).

on the selected pin(s).                                                     This interrupt can wake the device from SLEEP. The

EXAMPLE 5-2:       INITIALIZING PORTB                                       user, in the interrupt service routine, can clear the inter-

BCF       STATUS,  RP0       ;                                              rupt in the following manner:

CLRF      PORTB              ;    Initialize      PORTB      by             a)  Any read or write of PORTB. This will end the

                             ;    clearing       output                         mismatch condition.

                             ;    data   latches                            b)  Clear flag bit RBIF.

BSF       STATUS,  RP0       ;    Select   Bank   1

MOVLW     0xCF               ;    Value   used    to                        A mismatch condition will continue to set flag bit RBIF.

                             ;    initialize      data                      Reading PORTB will end the mismatch condition, and

                             ;    direction                                 allow flag bit RBIF to be cleared.

MOVWF     TRISB              ;    Set   RB<3:0>   as      inputs            This interrupt on mismatch feature, together with soft-

                             ;    RB<5:4>     as  outputs

                             ;    RB<7:6>     as  inputs                    ware  configurable     pull-ups  on  these    four  pins     allow

Each of the PORTB pins has a weak internal pull-up. A                       easy interface to a keypad and make it possible for

single control bit can turn on all the pull-ups. This is                    wake-up on key-depression. Refer to the Embedded

performed  by    clearing    bit   RBPU    (OPTION<7>).             The     Control    Handbook,  "Implementing      Wake-Up       on   Key

weak pull-up is automatically turned off when the port                      Stroke" (AN552).

pin is configured as an output. The pull-ups are dis-                            Note:  For the PIC16C73/74, if a change on the

abled on a Power-on Reset.                                                             I/O pin should occur when the read opera-

FIGURE 5-3:        BLOCK DIAGRAM                  OF                                   tion   is  being  executed    (start    of  the  Q2

                   RB3:RB0 PINS                                                        cycle), then interrupt flag bit RBIF may not

                                                          VDD                          get set.

RBPU(2)                                                      weak           The interrupt on change feature is recommended for

                                                          P  pull-up        wake-up on key depression operation and operations

Data bus           Data Latch                                               where PORTB is only used for the interrupt on change

                   D            Q                                           feature. Polling of PORTB is not recommended while

WR Port                                                             I/O     using the interrupt on change feature.

                         CK                                         pin(1)

                   TRIS Latch

                   D            Q                 TTL

WR TRIS                                           Input

                         CK                       Buffer

                   RD TRIS

                                              Q   D

                   RD Port                        EN

RB0/INT

                             Schmitt Trigger              RD Port

                             Buffer

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

       2: To enable weak pull-ups, set the appropriate TRIS bit(s)

          and clear the RBPU bit (OPTION<7>).

© 1997 Microchip Technology Inc.                                                                                     DS30390E-page 45
PIC16C7X

FIGURE    5-4:        BLOCK DIAGRAM OF                                 FIGURE    5-5:       BLOCK DIAGRAM OF

                      RB7:RB4 PINS (PIC16C73/74)                                            RB7:RB4 PINS (PIC16C72/

                                                          VDD                               73A/74A/76/77)

RBPU(2)                                                      weak                                                              VDD

                                                          P  pull-up   RBPU(2)

                      Data Latch                                                                                               P  weak

Data bus                                                                                                                          pull-up

                        D      Q                                       Data bus             Data Latch

WR Port                                                        I/O                          D        Q

                        CK                                     pin(1)                                                               I/O

                                                                       WR Port              CK                                      pin(1)

                      TRIS Latch

                        D      Q                                                            TRIS Latch

WR TRIS                                           TTL                                       D        Q

                        CK                        Input

                                                  Buffer       ST      WR TRIS              CK                         TTL

                                                             Buffer                                                    Input

                                                                                                                       Buffer            ST

                                                                                                                                    Buffer

                      RD TRIS          Latch

                                    Q          D                                            RD TRIS           Latch

                                                                                                           Q          D

                      RD Port                  EN

Set RBIF                                                                                    RD Port                 EN              Q1

                                                                       Set RBIF

          From other                Q          D

          RB7:RB4 pins

                                                                       From other                          Q        D

                                             EN                        RB7:RB4 pins                                               RD Port

                                                          RD Port                                                   EN

RB7:RB6 in serial programming mode                                                                                                  Q3

Note 1: I/O pins have diode protection to VDD and VSS.                 RB7:RB6 in serial programming mode

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

          and clear the RBPU bit (OPTION<7>).                                  2: To enable weak pull-ups, set the appropriate TRIS bit(s)

                                                                                 and clear the RBPU bit (OPTION<7>).

TABLE 5-3:            PORTB FUNCTIONS

Name                  Bit#        Buffer               Function

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

                                                   programmable weak pull-up.

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

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

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

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

                                                   weak pull-up.

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

                                                   weak pull-up.

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

                                                   weak pull-up. Serial programming clock.

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

                                                   weak pull-up. Serial programming data.

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

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

     2:   This buffer is a Schmitt Trigger input when used in serial programming mode.

DS30390E-page 46                                                                                     © 1997 Microchip Technology Inc.
                                                                                          PIC16C7X

TABLE 5-4:  SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

                                                                                          Value on:   Value on all

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

                                                                                          BOR

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

86h, 186h   TRISB   PORTB Data Direction Register                                         1111  1111  1111  1111

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

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

© 1997 Microchip Technology Inc.                                                                      DS30390E-page 47
PIC16C7X

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

            Applicable Devices                                                                    (PERIPHERAL OUTPUT

            72 73 73A 74 74A 76 77                                                                OVERRIDE)

PORTC is an 8-bit bi-directional port. Each pin is indi-              PORT/PERIPHERAL Select(2)

vidually configurable as an input or output through the

TRISC       register.  PORTC   is   multiplexed       with  several   Peripheral Data Out              0                   VDD

peripheral  functions       (Table 5-5).  PORTC       pins      have  Data bus                D   Q

Schmitt Trigger input buffers.                                                 WR                      1                            P

When enabling peripheral functions, care should be                             PORT           CK  Q

taken in defining TRIS bits for each PORTC pin. Some                                       Data Latch

peripherals override the TRIS bit to make a pin an out-                                       D   Q                                    I/O

put, while other peripherals override the TRIS bit to                          WR                                                      pin(1)

make a pin an input. Since the TRIS bit override is in                         TRIS           CK  Q                                 N

effect  while     the  peripheral   is  enabled,  read-modify-                            TRIS Latch

write instructions (BSF,      BCF,      XORWF) with TRISC as                                                               VSS

destination should be avoided. The user should refer to                                                                    Schmitt

the  corresponding     peripheral       section  for  the   correct                           RD TRIS                      Trigger

TRIS bit settings.                                                            Peripheral

                                                                              OE(3)                       Q            D

EXAMPLE 5-3:           INITIALIZING PORTC                                                                              EN

                                                                                          RD

BCF         STATUS,    RP0  ;  Select     Bank    0                                       PORT

BCF         STATUS,    RP1  ;  PIC16C76/77        only                Peripheral input

CLRF        PORTC           ;  Initialize        PORTC      by        Note           1:  I/O pins have diode protection to VDD and VSS.

                            ;  clearing   output                                     2:  Port/Peripheral select signal selects between port

                            ;  data     latches                                          data and peripheral output.

BSF         STATUS,    RP0  ;  Select     Bank    1                                  3:  Peripheral OE (output enable) is only activated if

MOVLW       0xCF            ;  Value      used   to                                      peripheral select is active.

                            ;  initialize        data

                            ;  direction

MOVWF       TRISC           ;  Set      RC<3:0>   as   inputs

                            ;  RC<5:4>    as     outputs

                            ;  RC<7:6>    as     inputs

TABLE 5-5:             PORTC FUNCTIONS

Name                        Bit#        Buffer Type         Function

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

RC1/T1OSI/CCP2(1)             bit1        ST                Input/output port pin or Timer1 oscillator input or Capture2 input/

                                                            Compare2 output/PWM2 output

RC2/CCP1                      bit2        ST                Input/output port pin or Capture1 input/Compare1 output/PWM1

                                                            output

RC3/SCK/SCL                   bit3        ST                RC3 can also be the synchronous serial clock for both SPI and I2C

                                                            modes.

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

RC5/SDO                       bit5        ST                Input/output port pin or Synchronous Serial Port data output

RC6/TX/CK(2)                  bit6        ST                Input/output port pin or USART Asynchronous Transmit, or USART

                                                            Synchronous Clock

RC7/RX/DT(2)                  bit7        ST                Input/output port pin or USART Asynchronous Receive, or USART

                                                            Synchronous Data

Legend: ST = Schmitt Trigger input

Note 1:     The CCP2 multiplexed function is not enabled on the PIC16C72.

        2:  The TX/CK and RX/DT multiplexed functions are not enabled on the PIC16C72.

DS30390E-page 48                                                                                       © 1997 Microchip Technology Inc.
                                                                                   PIC16C7X

TABLE 5-6:      SUMMARY OF REGISTERS ASSOCIATED WITH                 PORTC

                                                                                   Value on:   Value on all

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

                                                                                   BOR

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

87h      TRISC  PORTC Data Direction Register                                      1111  1111  1111  1111

Legend:  x = unknown, u = unchanged.

© 1997 Microchip Technology Inc.                                                         DS30390E-page 49
PIC16C7X

5.4       PORTD and TRISD Registers                          FIGURE 5-7:                PORTD BLOCK DIAGRAM (IN

          Applicable Devices                                                            I/O PORT MODE)

          72 73 73A 74 74A 76 77                                    Data

PORTD is an 8-bit port with Schmitt Trigger input buff-             bus         D       Q

ers. Each pin is individually configurable as an input or            WR                                                I/O pin(1)

output.                                                             PORT        CK

PORTD can be configured as an 8-bit wide micropro-                               Data Latch

cessor port (parallel slave port) by setting control bit                        D       Q

PSPMODE (TRISE<4>). In this mode, the input buffers                 WR

are TTL.                                                            TRIS                                  Schmitt

                                                                                CK                        Trigger

                                                                                TRIS Latch                input

                                                                                                          buffer

                                                                                        RD TRIS

                                                                                                     Q     D

                                                                                                          ENEN

                                                                    RD PORT

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

TABLE 5-7:        PORTD FUNCTIONS

Name              Bit#        Buffer Type                                       Function

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

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

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

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

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

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

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

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

Legend:   ST =   Schmitt Trigger input TTL = TTL input

Note 1:   Input  buffers are Schmitt Triggers when in I/O mode and TTL buffer when in Parallel          Slave   Port  Mode.

TABLE 5-8:        SUMMARY OF REGISTERS ASSOCIATED WITH PORTD

                                                                                                     Value on:        Value on all

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

                                                                                                          BOR

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

88h       TRISD   PORTD Data Direction Register                                                      1111  1111       1111   1111

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

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

DS30390E-page 50                                                                               © 1997 Microchip Technology Inc.
                                                                                                          PIC16C7X

5.5        PORTE and TRISE Register                                       Note:     On a Power-on Reset these pins are con-

           Applicable Devices                                                       figured as analog inputs.

           72 73 73A 74 74A 76 77                                         FIGURE    5-8:      PORTE BLOCK DIAGRAM (IN

PORTE      has  three   pins   RE0/RD/AN5,       RE1/WR/AN6                                   I/O PORT MODE)

and RE2/CS/AN7, which are individually configurable                           Data

as inputs or outputs. These pins have Schmitt Trigger                        bus          D        Q

input buffers.                                                               WR                                                 I/O pin(1)

I/O PORTE becomes control inputs for the micropro-                           PORT         CK

cessor port when bit PSPMODE (TRISE<4>) is set. In                                    Data Latch

this  mode,     the    user   must  make        sure  that   the

TRISE<2:0> bits are set (pins are configured as digital                                    D        Q

inputs) and that register ADCON1 is configured for dig-                       WR

ital I/O. In this mode the input buffers are TTL.                            TRIS         CK                    Schmitt

                                                                                                                Trigger

Figure 5-9 shows the TRISE register, which also con-                                  TRIS Latch                input

trols the parallel slave port operation.                                                                        buffer

PORTE pins are multiplexed with analog inputs. The

operation of these pins is selected by control bits in the                                   RD TRIS

ADCON1 register. When selected as an analog input,

these pins will read as '0's.                                                                             Q     D

TRISE controls the direction of the RE pins, even when                                                       ENEN

they are being used as analog inputs. The user must                          RD PORT

make sure to keep the pins configured as inputs when

using them as analog inputs.                                              Note 1: I/O pins have protection diodes to VDD and VSS.

FIGURE 5-9:          TRISE REGISTER (ADDRESS 89h)

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

      IBF       OBF           IBOV  PSPMODE           —           bit2       bit1     bit0            R   = Readable bit

bit7                                                                                         bit0     W   = Writable bit

                                                                                                      U   = Unimplemented bit,

                                                                                                          read as ‘0’

                                                                                                      -n  = Value at POR reset

bit 7 :      IBF: Input Buffer Full Status bit

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

             0 = No word has been received

bit   6:     OBF: Output Buffer Full Status bit

             1 = The output buffer still holds a previously written word

             0 = The output buffer has been read

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

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

             0 = No overflow occurred

bit   4:     PSPMODE: Parallel Slave Port Mode Select bit

             1 = Parallel slave port mode

             0 = General purpose I/O mode

bit   3:     Unimplemented: Read as '0'

             PORTE Data Direction Bits

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

             1 = Input

             0 = Output

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

             1 = Input

             0 = Output

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

             1 = Input

             0 = Output

© 1997 Microchip Technology Inc.                                                                                       DS30390E-page 51
PIC16C7X

TABLE 5-9:        PORTE FUNCTIONS

Name              Bit#   Buffer Type                                         Function

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

                                       analog input:

                                                     RD

                                                     1=     Not a read operation

                                                     0=  Read operation. Reads PORTD register (if chip selected)

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

                                       analog input:

                                                     WR

                                                     1=  Not a write operation

                                                     0=  Write operation. Writes PORTD register (if chip selected)

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

                                       mode or analog input:

                                                     CS

                                                     1 = Device is not selected

                                                     0 = Device is selected

Legend:  ST = Schmitt Trigger input TTL = TTL input

Note 1:  Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port Mode.

TABLE 5-10:       SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

                                                                                              Value on:        Value on all

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

                                                                                                         BOR

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

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

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

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

DS30390E-page 52                                                                              © 1997 Microchip Technology Inc.
                                                                                                                             PIC16C7X

5.6         I/O Programming Considerations                                            EXAMPLE 5-4:                 READ-MODIFY-WRITE

            Applicable Devices                                                                                     INSTRUCTIONS ON AN I/O

            72 73 73A 74 74A 76 77                                                                                 PORT

                                                                                      ;Initial      PORT      settings:      PORTB<7:4>        Inputs

5.6.1       BI-DIRECTIONAL I/O PORTS                                                  ;                                      PORTB<3:0>        Outputs

                                                                                      ;PORTB<7:6>        have      external   pull-ups         and  are

Any instruction which writes, operates internally as a                                ;not     connected      to   other     circuitry

read followed by a write operation. The BCF and BSF                                   ;

instructions,      for  example,        read  the  register     into  the             ;                                 PORT  latch       PORT      pins

CPU, execute the bit operation and write the result back                              ;                                 ----------        ---------

to  the  register.      Caution       must    be   used     when  these                   BCF  PORTB,     7          ;  01pp  pppp        11pp      pppp

instructions are applied to a port with both inputs and                                   BCF  PORTB,     6          ;  10pp  pppp        11pp      pppp

outputs defined. For example, a BSF operation on bit5                                      BSF  STATUS,        RP0    ;

of PORTB will cause all eight bits of PORTB to be read                                    BCF  TRISB,     7          ;  10pp  pppp        11pp      pppp

                                                                                          BCF  TRISB,     6          ;  10pp  pppp        10pp      pppp

into the CPU. Then the BSF operation takes place on                                   ;

bit5   and  PORTB           is  written  to   the  output   latches.      If          ;Note    that      the  user      may  have    expected       the

another bit of PORTB is used as a bi-directional I/O pin                              ;pin     values    to   be   00pp      ppp.  The    2nd  BCF

(e.g., bit0) and it is defined as an input at this time, the                           ;caused       RB7  to   be   latched    as     the  pin    value

input signal present on the pin itself would be read into                             ;(high).

the CPU and rewritten to the data latch of this particular                            A pin actively outputting a Low or High should not be

pin, overwriting the previous content. As long as the pin                             driven from external devices at the same time in order

stays in the input mode, no problem occurs. However, if                               to change the level on this pin (“wired-or”, “wired-and”).

bit0 is switched to an output, the content of the data                                The resulting high output currents may damage the

latch may now be unknown.                                                             chip.

Reading the port register, reads the values of the port                               5.6.2       SUCCESSIVE OPERATIONS ON I/O PORTS

pins. Writing to the port register writes the value to the

port latch. When using read-modify-write instructions                                 The actual write to an I/O port happens at the end of an

(ex. BCF, BSF, etc.) on a port, the value of the port pins                            instruction cycle, whereas for reading, the data must be

is read, the desired operation is done to this value, and                             valid at the beginning of the instruction cycle            (Figure 5-

this value is then written to the port latch.                                         10). Therefore, care must be exercised if a write fol-

Example 5-4 shows the effect of two sequential read-                                  lowed by a read operation is carried out on the same I/

modify-write instructions on an I/O port.                                             O port. The sequence of instructions should be such to

                                                                                      allow    the  pin  voltage     to   stabilize  (load     dependent)

                                                                                      before the next instruction which causes that file to be

                                                                                      read into the CPU is executed. Otherwise, the previous

                                                                                      state of that pin may be read into the CPU rather than

                                                                                      the new state. When in doubt, it is better to separate

                                                                                      these instructions with a NOP or another instruction not

                                                                                      accessing this I/O port.

FIGURE 5-10:            SUCCESSIVE I/O OPERATION

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

               PC               PC                 PC + 1             PC + 2              PC + 3              This example shows a write to PORTB

       Instruction      MOVWF PORTB         MOVF PORTB,W                                                      followed by a read from PORTB.

         fetched            write to                                  NOP                 NOP

                            PORTB                                                                             Note that:

         RB7:RB0                                                                                              data setup time = (0.25TCY - TPD)

                                                                      Port pin                                where     TCY = instruction cycle

                                                                      sampled here                                      TPD = propagation delay

       Instruction                                              TPD                                           Therefore, at higher clock frequencies,

         executed                                                                            NOP              a write followed by a read may be prob-

                                             MOVWF PORTB        MOVF PORTB,W                                  lematic.

                                                  write to

                                                  PORTB

© 1997 Microchip Technology Inc.                                                                                                     DS30390E-page 53
PIC16C7X

5.7         Parallel Slave Port                                        FIGURE 5-11:       PORTD AND PORTE BLOCK

            Applicable Devices                                                            DIAGRAM (PARALLEL

            72 73 73A 74 74A 76 77                                                        SLAVE PORT)

PORTD operates as an 8-bit wide Parallel Slave Port,

or   microprocessor       port  when    control  bit  PSPMODE          Data bus

(TRISE<4>) is set. In slave mode it is asynchronously                                D    Q

readable and writable by the external world through RD                 WR                                                   RDx

control input pin RE0/RD/AN5 and WR control input pin                  PORT          CK                                     pin

RE1/WR/AN6.                                                                                            TTL

It can directly interface to an 8-bit microprocessor data                            Q    D

bus. The external microprocessor can read or write the

PORTD latch as an 8-bit latch. Setting bit PSPMODE                     RD                 ENEN

enables port pin RE0/RD/AN5 to be the RD input, RE1/                   PORT

WR/AN6 to be the WR input and RE2/CS/AN7 to be the

CS (chip select) input. For this functionality, the corre-             One bit of PORTD

sponding    data     direction    bits  of  the  TRISE      register   Set interrupt flag

(TRISE<2:0>) must be configured as inputs (set) and                     PSPIF (PIR1<7>)

the    A/D  port      configuration      bits     PCFG2:PCFG0

(ADCON1<2:0>) must be set, which will configure pins

RE2:RE0 as digital I/O.

There are actually two 8-bit latches, one for data-out                                          Read                        RD

(from the PIC16/17) and one for data input.               The user                                     TTL

writes 8-bit data to PORTD data latch and reads data                                            Chip Select

from the port pin latch (note that they have the same                                                  TTL                  CS

address).   In this mode, the TRISD register is ignored,                                        Write

since the microprocessor is controlling the direction of                                               TTL                  WR

data flow.

A write to the PSP occurs when both the CS and WR                      Note: I/O pin has protection diodes to VDD and VSS.

lines are first detected low. When either the CS or WR

lines  become       high  (level  triggered),    then     the  Input

Buffer Full status flag bit IBF (TRISE<7>) is set on the

Q4 clock cycle, following the next Q2 cycle, to signal

the write is complete (Figure 5-12). The interrupt flag bit

PSPIF (PIR1<7>) is also set on the same Q4 clock

cycle. IBF can only be cleared by reading the PORTD

input latch. The input Buffer Overflow status flag bit

IBOV (TRISE<5>) is set if a second write to the Parallel

Slave Port is attempted when the previous byte has not

been read out of the buffer.

A read from the PSP occurs when both the CS and RD

lines are first detected low. The Output Buffer Full sta-

tus flag bit OBF (TRISE<6>) is cleared immediately

(Figure 5-13) indicating that the PORTD latch is waiting

to be read by the external bus. When either the CS or

RD pin becomes high (level triggered), the interrupt flag

bit PSPIF is set on the Q4 clock cycle, following the

next   Q2   cycle,   indicating   that  the  read     is  complete.

OBF remains low until data is written to PORTD by the

user firmware.

When not in Parallel Slave Port mode, the IBF and OBF

bits are held clear. However, if flag bit IBOV was previ-

ously set, it must be cleared in firmware.

An    interrupt  is  generated    and       latched   into  flag  bit

PSPIF when a read or write operation is completed.

PSPIF must be cleared by the user in firmware and the

interrupt   can   be  disabled    by    clearing     the    interrupt

enable bit PSPIE (PIE1<7>).

DS30390E-page 54                                                                                © 1997 Microchip Technology Inc.
                                                                                             PIC16C7X

FIGURE 5-12:    PARALLEL             SLAVE  PORT  WRITE WAVEFORMS

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

         CS

         WR

         RD

PORTD<7:0>

         IBF

         OBF

     PSPIF

FIGURE 5-13:    PARALLEL             SLAVE  PORT  READ WAVEFORMS

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

         CS

         WR

         RD

PORTD<7:0>

         IBF

         OBF

     PSPIF

TABLE 5-11:     REGISTERS ASSOCIATED WITH PARALLEL SLAVE PORT

                                                                                                 Value on:  Value on all

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

                                                                                                 BOR

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

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

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

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

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

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

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

© 1997 Microchip Technology Inc.                                                                       DS30390E-page 55
PIC16C7X

NOTES:

DS30390E-page 56  © 1997 Microchip Technology Inc.
                                                                                                  PIC16C7X

6.0        OVERVIEW OF TIMER                                      CCP module, Timer1 is the time-base for 16-bit Cap-

           MODULES                                                ture or the 16-bit Compare and must be synchronized

                                                                  to the device.

           Applicable Devices

           72 73 73A 74 74A 76 77                                 6.3       Timer2 Overview

The     PIC16C72,     PIC16C73/73A,          PIC16C74/74A,                  Applicable Devices

PIC16C76/77 each have three timer modules.                                  72 73 73A 74 74A 76 77

Each module can generate an interrupt to indicate that            Timer2 is an 8-bit timer with a programmable prescaler

an event has occurred (i.e. timer overflow). Each of               and   postscaler,  as   well    as  an  8-bit   period    register

these modules is explained in full detail in the following        (PR2). Timer2 can be used with the CCP1 module (in

sections. The timer modules are:                                  PWM mode) as well as the Baud Rate Generator for

•  Timer0 Module (Section 7.0)                                    the   Synchronous       Serial  Port  (SSP).       The    prescaler

•  Timer1 Module (Section 8.0)                                    option    allows  Timer2   to   increment      at  the    following

                                                                  rates: 1:1, 1:4, 1:16.

•  Timer2 Module (Section 9.0)                                    The postscaler allows the TMR2 register to match the

6.1        Timer0 Overview                                        period register (PR2) a programmable number of times

           Applicable Devices                                     before generating an interrupt. The postscaler can be

           72 73 73A 74 74A 76 77                                 programmed from 1:1 to 1:16 (inclusive).

The Timer0 module is a simple 8-bit overflow counter.              6.4       CCP Overview

The clock source can be either the internal system                          Applicable Devices

clock (Fosc/4) or an external clock. When the clock                         72 73 73A 74 74A 76 77

source is an external clock, the Timer0 module can be             The CCP module(s) can operate in one of these three

selected   to    increment  on  either  the  rising  or  falling  modes: 16-bit capture, 16-bit compare, or up to 10-bit

edge.                                                             Pulse Width Modulation (PWM).

The Timer0 module also has a programmable pres-                   Capture mode captures the 16-bit value of TMR1 into

caler option. This prescaler can be assigned to either            the CCPRxH:CCPRxL register pair. The capture event

the Timer0 module or the Watchdog Timer. Bit PSA                  can be programmed for either the falling edge, rising

(OPTION<3>) assigns the prescaler, and bits PS2:PS0               edge, fourth rising edge, or the sixteenth rising edge of

(OPTION<2:0>) determine the prescaler value. Timer0               the CCPx pin.

can increment at the following rates: 1:1 (when pres-

caler assigned to Watchdog timer), 1:2, 1:4, 1:8, 1:16,           Compare mode compares the TMR1H:TMR1L register

1:32, 1:64, 1:128, and 1:256 (Timer0 only).                       pair  to  the  CCPRxH:CCPRxL          register     pair.  When  a

Synchronization of the external clock occurs after the            match occurs an interrupt can be generated, and the

prescaler. When the prescaler is used, the external               output pin CCPx can be forced to given state (High or

clock frequency may be higher then the device’s fre-              Low), TMR1 can be reset (CCP1), or TMR1 reset and

quency. The maximum frequency is 50 MHz, given the                start A/D conversion (CCP2). This depends on the con-

high and low time requirements of the clock.                      trol bits CCPxM3:CCPxM0.

                                                                  PWM mode compares the TMR2 register to a 10-bit

6.2        Timer1 Overview                                        duty cycle register (CCPRxH:CCPRxL<5:4>) as well as

           Applicable Devices                                     to an 8-bit period register (PR2). When the TMR2 reg-

           72 73 73A 74 74A 76 77                                 ister = Duty Cycle register, the CCPx pin will be forced

Timer1 is a 16-bit timer/counter. The clock source can            low. When TMR2 = PR2, TMR2 is cleared to 00h, an

be either the internal system clock (Fosc/4), an external         interrupt can be generated, and the CCPx pin (if an out-

clock, or an external crystal. Timer1 can operate as              put) will be forced high.

either  a  timer  or  a  counter.      When  operating   as    a

counter (external clock source), the counter can either

operate synchronized to the device or asynchronously

to the device. Asynchronous operation allows Timer1 to

operate during sleep, which is useful for applications

that require a real-time clock as well as the power sav-

ings of SLEEP mode.

Timer1     also  has  a     prescaler   option  which    allows

Timer1 to increment at the following rates: 1:1, 1:2, 1:4,

and 1:8. Timer1 can be used in conjunction with the

Capture/Compare/PWM         module.     When    used     with  a

© 1997 Microchip Technology Inc.                                                                             DS30390E-page 57
PIC16C7X

NOTES:

DS30390E-page 58  © 1997 Microchip Technology Inc.
                                                                                                                                PIC16C7X

7.0         TIMER0 MODULE                                                               Source Edge Select bit T0SE (OPTION<4>). Clearing

            Applicable Devices                                                          bit T0SE selects the rising edge. Restrictions on the

            72 73 73A 74 74A 76 77                                                      external      clock     input   are     discussed         in     detail  in

                                                                                        Section 7.2.

The Timer0 module timer/counter has the following fea-                                  The prescaler is mutually exclusively shared between

tures:                                                                                  the Timer0 module and the Watchdog Timer. The pres-

•  8-bit timer/counter                                                                  caler assignment is controlled in software by control bit

•  Readable and writable                                                                PSA (OPTION<3>). Clearing bit PSA will assign the

•  8-bit software programmable prescaler                                                prescaler to the Timer0 module. The prescaler is not

•  Internal or external clock select                                                    readable or writable. When the prescaler is assigned to

•  Interrupt on overflow from FFh to 00h                                                 the   Timer0       module,      prescale    values    of  1:2,    1:4,   ...,

                                                                                        1:256 are selectable. Section 7.3 details the operation

•  Edge select for external clock                                                       of the prescaler.

Figure 7-1 is a simplified block diagram of the Timer0                                   7.1           Timer0 Interrupt

module.

Timer    mode      is      selected      by  clearing     bit     T0CS                                Applicable Devices

(OPTION<5>). In timer mode, the Timer0 module will                                                    72 73 73A 74 74A 76 77

increment every instruction cycle (without prescaler). If                               The TMR0 interrupt is generated when the TMR0 reg-

the TMR0 register is written, the increment is inhibited                                ister overflows from FFh to 00h. This overflow sets bit

for the following two instruction cycles (Figure 7-2 and                                T0IF (INTCON<2>). The interrupt can be masked by

Figure 7-3). The user can work around this by writing                                   clearing      bit  T0IE     (INTCON<5>).        Bit   T0IF       must    be

an adjusted value to the TMR0 register.                                                 cleared in software by the Timer0 module interrupt ser-

Counter     mode       is  selected      by      setting   bit    T0CS                  vice   routine     before       re-enabling     this      interrupt.     The

(OPTION<5>). In counter mode, Timer0 will increment                                     TMR0      interrupt     cannot      awaken      the   processor       from

either on every rising or falling edge of pin RA4/T0CKI.                                SLEEP since the timer is shut off during SLEEP. See

The incrementing edge is determined by the Timer0                                       Figure 7-4 for Timer0 interrupt timing.

FIGURE 7-1:            TIMER0 BLOCK DIAGRAM

                                                                                                                                Data bus

                       FOSC/4                0                                          PSout

                                                                                                                                           8

                                                                                    1             Sync with

                                             1                                                        Internal                  TMR0

   RA4/T0CKI                                              Programmable              0                 clocks        PSout

   pin                                                        Prescaler                           (2 cycle delay)

                   T0SE

                                                                  3

                                                                                                                                              Set interrupt

                                                     PS2, PS1, PS0            PSA                                                             flag bit T0IF

                                         T0CS                                                                                                 on overflow

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

               2:  The prescaler is shared with Watchdog Timer (refer to Figure 7-6 for detailed                                block diagram).

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

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

     (Program

     Counter)              PC-1          PC               PC+1            PC+2                PC+3              PC+4            PC+5              PC+6

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

     Fetch

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

     Instruction

     Executed                                        Write TMR0          Read TMR0      Read TMR0          Read TMR0        Read TMR0         Read TMR0

                                                     executed            reads NT0      reads NT0          reads NT0        reads NT0 + 1     reads NT0 + 2

© 1997 Microchip Technology Inc.                                                                                                            DS30390E-page 59
PIC16C7X

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

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

(Program

Counter)              PC-1                 PC               PC+1            PC+2             PC+3            PC+4              PC+5              PC+6

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

Fetch

TMR0              T0                         T0+1                                                NT0                                            NT0+1            PC+6

Instruction                                            Write TMR0       Read TMR0        Read TMR0       Read TMR0           Read TMR0      Read TMR0

Execute                                                executed         reads NT0        reads NT0       reads NT0           reads NT0      reads NT0 + 1

FIGURE       7-4:     TIMER0 INTERRUPT TIMING

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

    OSC1

    CLKOUT(3)

    Timer0                    FEh                      FFh                          00h                          01h                        02h

                              1                             1

T0IF bit

(INTCON<2>)

GIE bit

(INTCON<7>)

INSTRUCTION

FLOW

              PC                 PC                         PC +1                        PC +1                        0004h                      0005h

    Instruction               Inst (PC)                    Inst (PC+1)                                           Inst (0004h)               Inst (0005h)

    fetched

    Instruction               Inst (PC-1)                   Inst (PC)                Dummy cycle                 Dummy cycle                Inst (0004h)

    executed

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

                      2: Interrupt latency = 4Tcy where Tcy = instruction cycle time.

                      3: CLKOUT is available only in RC oscillator mode.

DS30390E-page 60                                                                                                          © 1997 Microchip Technology Inc.
                                                                                                              PIC16C7X

7.2     Using Timer0 with an External Clock                        When a prescaler is used, the external clock input is

           Applicable Devices                                      divided by the asynchronous ripple-counter type pres-

           72 73 73A 74 74A 76 77                                  caler so that the prescaler output is symmetrical. For

                                                                   the external clock to meet the sampling requirement,

When an external clock input is used for Timer0, it must           the ripple-counter must be taken into account. There-

meet certain requirements. The requirements ensure                 fore, it is necessary for T0CKI to have a period of at

the external clock can be synchronized with the internal           least 4Tosc (and a small RC delay of 40 ns) divided by

phase clock (TOSC). Also, there is a delay in the actual           the prescaler value. The only requirement on T0CKI

incrementing of Timer0 after synchronization.                      high and low time is that they do not violate the mini-

7.2.1   EXTERNAL CLOCK SYNCHRONIZATION                             mum pulse width requirement of 10 ns. Refer to param-

                                                                   eters 40, 41 and 42 in the electrical specification of the

When no prescaler is used, the external clock input is             desired device.

the same as the prescaler output. The synchronization              7.2.2                  TMR0 INCREMENT DELAY

of  T0CKI    with  the  internal   phase  clocks  is  accom-

plished by sampling the prescaler output on the Q2 and             Since              the  prescaler  output  is  synchronized  with  the

Q4 cycles of the internal phase clocks (Figure 7-5).               internal clocks, there is a small delay from the time the

Therefore, it is necessary for T0CKI to be high for at             external clock edge occurs to the time the Timer0 mod-

least 2Tosc (and a small RC delay of 20 ns) and low for            ule is actually incremented. Figure 7-5 shows the delay

at least 2Tosc (and a small RC delay of 20 ns). Refer to           from the external clock edge to the timer incrementing.

the electrical specification of the desired device.

FIGURE       7-5:  TIMER0 TIMING          WITH EXTERNAL CLOCK

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

             External Clock Input or                                                                              Small pulse

             Prescaler output (2)                                                                                 misses sampling

                                                      (1)

                                          (3)

             External Clock/Prescaler

             Output after sampling

                   Increment Timer0 (Q4)

                                  Timer0                       T0                          T0 + 1                 T0 + 2

       Note  1: Delay from clock input change to Timer0 increment is 3Tosc to 7Tosc. (Duration of Q = Tosc).

             Therefore, the error in measuring the interval between two edges on Timer0 input = ±4Tosc max.

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

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

© 1997 Microchip Technology Inc.                                                                                      DS30390E-page 61
PIC16C7X

7.3         Prescaler                                                        The PSA and PS2:PS0 bits (OPTION<3:0>) determine

            Applicable Devices                                               the prescaler assignment and prescale ratio.

            72 73 73A 74 74A 76 77                                           When assigned to the Timer0 module, all instructions

An   8-bit  counter  is  available  as   a  prescaler     for  the           writing to the TMR0 register (e.g. CLRF  1,   MOVWF       1,

Timer0 module, or as a postscaler for the Watchdog                           BSF    1,x....etc.)  will  clear    the  prescaler.  When

Timer,  respectively     (Figure 7-6).   For   simplicity,     this          assigned to WDT, a CLRWDT instruction will clear the

counter is being referred to as “prescaler” throughout                       prescaler along with the Watchdog Timer. The pres-

this data sheet. Note that there is only one prescaler                       caler is not readable or writable.

available which is mutually exclusively shared between                       Note:  Writing       to  TMR0     when   the  prescaler   is

the Timer0 module and the Watchdog Timer. Thus, a                                   assigned to Timer0 will clear the prescaler

prescaler assignment for the Timer0 module means                                    count, but will not change the prescaler

that there is no prescaler for the Watchdog Timer, and                              assignment.

vice-versa.

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

     CLKOUT (=Fosc/4)                                                                                   Data Bus

                                               M                                                                 8

                                            0                        1

RA4/T0CKI                                      U                        M           SYNC

     pin                                       X                        U           2                   TMR0 reg

                                            1                        0  X           Cycles

                         T0SE

                                               T0CS                     PSA                                           Set flag bit T0IF

                                                                                                                           on Overflow

                                0                      8-bit Prescaler

                                    M

                                    U

        Watchdog                1   X                       8

            Timer

                                                       8 - to - 1MUX              PS2:PS0

                                    PSA

     WDT Enable bit                                    0             1

                                                            MUX              PSA

                                                               WDT

                                                          Time-out

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

DS30390E-page 62                                                                                        © 1997 Microchip Technology Inc.
                                                                                                                  PIC16C7X

7.3.1     SWITCHING PRESCALER ASSIGNMENT

The prescaler assignment is fully under software con-

trol, i.e., it can be changed “on the fly” during program

execution.

Note:          To avoid an unintended device RESET, the

               following instruction sequence (shown in

               Example 7-1)     must  be      executed       when

               changing    the  prescaler     assignment     from

               Timer0 to the WDT. This sequence must

               be followed even if the WDT is disabled.

EXAMPLE 7-1:             CHANGING PRESCALER (TIMER0→WDT)

                                          1)   BSF        STATUS,    RP0      ;Bank     1

Lines 2 and 3 do NOT have to              2)   MOVLW      b'xx0x0xxx'         ;Select      clock   source     and  prescale       value  of

be included if the final desired           3)   MOVWF      OPTION_REG          ;other       than  1:1

prescale value is other than 1:1.         4)   BCF        STATUS,    RP0      ;Bank     0

If 1:1 is final desired value, then        5)   CLRF       TMR0                ;Clear       TMR0  and   prescaler

a temporary prescale value is

set in lines 2 and 3 and the final         6)   BSF        STATUS,    RP1      ;Bank     1

prescale value will be set in lines       7)   MOVLW      b'xxxx1xxx'         ;Select      WDT,    do  not    change    prescale   value

10 and 11.                                8)   MOVWF      OPTION_REG          ;

                                          9)   CLRWDT                         ;Clears      WDT   and   prescaler

                                          10)  MOVLW      b'xxxx1xxx'         ;Select      new   prescale     value     and  WDT

                                          11)  MOVWF      OPTION_REG          ;

                                          12)  BCF        STATUS,    RP0      ;Bank     0

To change prescaler from the WDT to the Timer0 mod-

ule use the sequence shown in Example 7-2.

EXAMPLE 7-2:             CHANGING PRESCALER (WDT→TIMER0)

CLRWDT                            ;Clear      WDT  and    prescaler

BSF            STATUS,     RP0    ;Bank    1

MOVLW          b'xxxx0xxx'        ;Select     TMR0,     new  prescale  value     and

MOVWF          OPTION_REG         ;clock      source

BCF            STATUS,     RP0    ;Bank    0

TABLE 7-1:           REGISTERS ASSOCIATED WITH TIMER0

                                                                                                                  Value on:   Value on all

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

                                                                                                                   BOR

01h,101h       TMR0        Timer0 module’s register                                                               xxxx  xxxx  uuuu  uuuu

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

10Bh,18Bh

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

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

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

© 1997 Microchip Technology Inc.                                                                                         DS30390E-page 63
PIC16C7X

NOTES:

DS30390E-page 64  © 1997 Microchip Technology Inc.
                                                                                                              PIC16C7X

8.0          TIMER1 MODULE                                                  In  timer   mode,   Timer1        increments       every  instruction

             Applicable Devices                                             cycle.     In counter mode, it increments on every rising

             72 73 73A 74 74A 76 77                                         edge of the external clock input.

The Timer1 module is a 16-bit timer/counter consisting                      Timer1     can  be  enabled/disabled          by   setting/clearing

of two 8-bit registers (TMR1H and TMR1L) which are                          control bit TMR1ON (T1CON<0>).

readable       and  writable.  The   TMR1      Register        pair         Timer1 also has an internal “reset input”. This reset can

(TMR1H:TMR1L)            increments  from      0000h  to  FFFFh             be   generated     by     either  of     the  two  CCP    modules

and rolls over to 0000h. The TMR1 Interrupt, if enabled,                    (Section 10.0).     Figure 8-1    shows       the  Timer1      control

is generated on overflow which is latched in interrupt                       register.

flag     bit  TMR1IF      (PIR1<0>).  This      interrupt  can  be           For  the    PIC16C72/73A/74A/76/77,               when    the  Timer1

enabled/disabled         by  setting/clearing  TMR1       interrupt         oscillator  is  enabled   (T1OSCEN             is  set),  the  RC1/

enable bit TMR1IE (PIE1<0>).                                                T1OSI/CCP2       and      RC0/T1OSO/T1CKI          pins        become

Timer1 can operate in one of two modes:                                     inputs. That is, the TRISC<1:0> value is ignored.

•  As a timer                                                               For the PIC16C73/74, when the Timer1 oscillator is

•  As a counter                                                             enabled     (T1OSCEN      is      set),  RC1/T1OSI/CCP2        pin

                                                                            becomes     an   input,   however        the  RC0/T1OSO/T1CKI

The operating mode is determined by the clock select                        pin will have to be configured as an input by setting the

bit, TMR1CS (T1CON<1>).                                                     TRISC<0> bit.

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

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

         —          —        T1CKPS1 T1CKPS0 T1OSCEN           T1SYNC       TMR1CS      TMR1ON        R       = Readable bit

   bit7                                                                                         bit0  W       = Writable bit

                                                                                                      U       = Unimplemented bit,

                                                                                                              read as ‘0’

                                                                                                      -n      = Value at POR reset

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

   bit   5-4:  T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits

               11 = 1:8 Prescale value

               10 = 1:4 Prescale value

               01 = 1:2 Prescale value

               00 = 1:1 Prescale value

   bit   3:    T1OSCEN: Timer1 Oscillator Enable Control bit

               1 = Oscillator is enabled

               0 = Oscillator is shut off

               Note: The oscillator inverter and feedback resistor are turned off to         eliminate        power drain

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

               TMR1CS = 1

               1 = Do not synchronize external clock input

               0 = Synchronize external clock input

               TMR1CS = 0

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

   bit   1:    TMR1CS: Timer1 Clock Source Select bit

               1 = External clock from pin RC0/T1OSO/T1CKI (on the rising edge)

               0 = Internal clock (FOSC/4)

   bit   0:    TMR1ON: Timer1 On bit

               1 = Enables Timer1

               0 = Stops Timer1

© 1997 Microchip Technology Inc.                                                                                              DS30390E-page 65
PIC16C7X

8.1        Timer1 Operation in Timer Mode                                  8.2.1       EXTERNAL CLOCK INPUT TIMING FOR

           Applicable Devices                                                          SYNCHRONIZED COUNTER MODE

           72 73 73A 74 74A 76 77                                          When an external clock input is used for Timer1 in syn-

Timer  mode      is  selected       by  clearing  the    TMR1CS            chronized counter mode, it must meet certain require-

(T1CON<1>) bit. In this mode, the input clock to the                       ments.      The       external     clock  requirement       is   due  to

timer is FOSC/4. The synchronize control bit T1SYNC                        internal phase clock (Tosc) synchronization. Also, there

(T1CON<2>) has no effect since the internal clock is                       is a delay in the actual incrementing of TMR1 after syn-

always in sync.                                                            chronization.

8.2        Timer1 Operation in Synchronized                                When the prescaler is 1:1, the external clock input is

           Counter Mode                                                    the same as the prescaler output. The synchronization

                                                                           of      T1CKI    with     the  internal   phase     clocks   is  accom-

           Applicable Devices                                              plished by sampling the prescaler output on the Q2 and

           72 73 73A 74 74A 76 77                                          Q4 cycles of the internal phase clocks. Therefore, it is

Counter mode is selected by setting bit TMR1CS. In                         necessary for T1CKI to be high for at least 2Tosc (and

this mode the timer increments on every rising edge of                     a small RC delay of 20 ns) and low for at least 2Tosc

clock  input    on   pin       RC1/T1OSI/CCP2          when      bit       (and a small RC delay of 20 ns). Refer to the appropri-

T1OSCEN is set or pin RC0/T1OSO/T1CKI when bit                             ate electrical specifications, parameters 45, 46, and 47.

T1OSCEN is cleared.                                                        When a prescaler other than 1:1 is used, the external

If T1SYNC is cleared, then the external clock input is                     clock       input  is  divided     by    the  asynchronous       ripple-

synchronized with internal phase clocks. The synchro-                      counter type prescaler so that the prescaler output is

nization is done after the prescaler stage. The pres-                      symmetrical. In order for the external clock to meet the

caler stage is an asynchronous ripple-counter.                             sampling         requirement,      the    ripple-counter     must     be

                                                                           taken into account. Therefore, it is necessary for T1CKI

In this configuration, during SLEEP mode, Timer1 will                       to have a period of at least 4Tosc (and a small RC delay

not  increment   even      if  the  external  clock  is   present,         of      40  ns)    divided     by  the   prescaler   value.  The   only

since the synchronization circuit is shut off. The pres-                   requirement on T1CKI high and low time is that they do

caler however will continue to increment.                                  not violate the minimum pulse width requirements of

                                                                           10 ns). Refer to the appropriate electrical specifica-

                                                                           tions, parameters 40, 42, 45, 46, and 47.

FIGURE 8-2:          TIMER1 BLOCK DIAGRAM

              Set flag bit

              TMR1IF on

              Overflow                                                                         0               Synchronized

                                           TMR1                                                               clock input

                                    TMR1H         TMR1L

                                                                                              1

                                                                        TMR1ON         T1SYNC

                                                                           on/off

                                    T1OSC                        (3)

RC0/T1OSO/T1CKI                                                            1                                       Synchronize

                                                                                       Prescaler

                                                  T1OSCEN        FOSC/4                1, 2, 4, 8                        det

                                                  Enable         Internal  0
                                                  Oscillator(1)
RC1/T1OSI/CCP2(2)                                                Clock                            2                SLEEP input

                                                                                   T1CKPS1:T1CKPS0

                                                                           TMR1CS

Note   1:  When the T1OSCEN bit is cleared, the inverter and feedback resistor are turned off. This eliminates power drain.

       2:  The CCP2 module is not implemented in the PIC16C72.

       3:  For the PIC16C73 and PIC16C74, the Schmitt Trigger is not implemented in external clock mode.

DS30390E-page 66                                                                                              © 1997 Microchip Technology Inc.
                                                                                                     PIC16C7X

8.3       Timer1 Operation in Asynchronous                       EXAMPLE 8-1:              READING A 16-BIT FREE-

          Counter Mode                                                                     RUNNING TIMER

          Applicable Devices

          72 73 73A 74 74A 76 77                                 ;  All  interrupts        are     disabled

                                                                      MOVF    TMR1H,       W    ;Read    high      byte

If control bit T1SYNC (T1CON<2>) is set, the external                 MOVWF   TMPH              ;

clock input is not synchronized. The timer continues to               MOVF    TMR1L,       W    ;Read    low    byte

increment asynchronous to the internal phase clocks.                  MOVWF   TMPL              ;

The timer will continue to run during SLEEP and can                   MOVF    TMR1H,       W    ;Read    high      byte

generate an interrupt on overflow which will wake-up                   SUBWF   TMPH,        W    ;Sub   1st    read

the processor. However, special precautions in soft-                                            ;  with    2nd     read

ware are needed to read/write the timer (Section 8.3.2).              BTFSC   STATUS,Z          ;Is   result       =  0

                                                                      GOTO    CONTINUE          ;Good    16-bit       read

In  asynchronous     counter  mode,    Timer1      can  not  be  ;

used as a time-base for capture or compare operations.           ;  TMR1L     may    have  rolled     over    between         the  read

                                                                 ;  of   the  high   and      low  bytes.     Reading         the  high

8.3.1     EXTERNAL CLOCK INPUT TIMING WITH                       ;  and  low  bytes        now  will   read     a     good    value.

          UNSYNCHRONIZED CLOCK                                   ;

                                                                      MOVF    TMR1H,       W    ;Read    high      byte

If control bit T1SYNC is set, the timer will increment                MOVWF   TMPH              ;

completely asynchronously. The input clock must meet                  MOVF    TMR1L,       W    ;Read    low    byte

certain minimum high time and low time requirements.                  MOVWF   TMPL              ;

Refer to the appropriate Electrical Specifications Sec-           ;  Re-enable        the   Interrupt     (if    required)

tion, timing parameters 45, 46, and 47.                          CONTINUE                       ;Continue       with     your      code

8.3.2     READING AND WRITING TIMER1 IN                          8.4         Timer1 Oscillator

          ASYNCHRONOUS COUNTER MODE                                          Applicable Devices

Reading TMR1H or TMR1L while the timer is running,                           72 73 73A 74 74A 76 77

from an external asynchronous clock, will guarantee a            A crystal oscillator circuit is built in between pins T1OSI

valid read (taken care of in hardware). However, the             (input) and T1OSO (amplifier output). It is enabled by

user should keep in mind that reading the 16-bit timer           setting control bit T1OSCEN (T1CON<3>). The oscilla-

in two 8-bit values itself poses certain problems since          tor is a low power oscillator rated up to 200 kHz. It will

the timer may overflow between the reads.                         continue to run during SLEEP. It is primarily intended

For writes, it is recommended that the user simply stop          for  a  32   kHz    crystal.   Table 8-1   shows        the  capacitor

the timer and write the desired values. A write conten-          selection for the Timer1 oscillator.

tion may occur by writing to the timer registers while the       The Timer1 oscillator is identical to the LP oscillator.

register is incrementing. This may produce an unpre-             The user must provide a software time delay to ensure

dictable value in the timer register.                            proper oscillator start-up.

Reading   the  16-bit    value        requires  some    care.    TABLE 8-1:               CAPACITOR SELECTION

Example 8-1 is an example routine to read the 16-bit                                      FOR THE TIMER1

timer  value.  This  is  useful   if   the  timer  cannot    be                           OSCILLATOR

stopped.

                                                                    Osc Type              Freq             C1                 C2

                                                                         LP          32 kHz            33 pF                  33 pF

                                                                                     100 kHz           15 pF                  15 pF

                                                                                     200 kHz           15 pF                  15 pF

                                                                         These values are for design guidance only.

                                                                 Crystals Tested:

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

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

                                                                 200 kHz             STD XTL 200.000 kHz                 ± 20 PPM

                                                                 Note 1:      Higher capacitance increases the stability

                                                                              of oscillator but also increases the start-up

                                                                              time.

                                                                         2:   Since each resonator/crystal has its own

                                                                              characteristics, the user should consult the

                                                                              resonator/crystal manufacturer for appropri-

                                                                              ate values of external components.

© 1997 Microchip Technology Inc.                                                                                DS30390E-page 67
PIC16C7X

8.5         Resetting Timer1 using a CCP Trigger                        8.6      Resetting of Timer1 Register Pair

            Output                                                               (TMR1H, TMR1L)

            Applicable Devices                                                   Applicable Devices

            72 73 73A 74 74A 76 77                                               72 73 73A 74 74A 76 77

The   CCP2    module        is  not  implemented      on       the      TMR1H and TMR1L registers are not reset to 00h on a

PIC16C72 device.                                                        POR or any other reset except by the CCP1 and CCP2

If the CCP1 or CCP2 module is configured in compare                      special event triggers.

mode      to  generate      a      “special  event    trigger"          T1CON register is reset to 00h on a Power-on Reset or

(CCP1M3:CCP1M0           =  1011),   this    signal  will  reset        a  Brown-out      Reset,     which     shuts    off  the  timer     and

Timer1.                                                                 leaves a 1:1 prescale. In all other resets, the register is

Note:         The special event triggers from the CCP1                  unaffected.

              and CCP2 modules will not set interrupt                   8.7      Timer1 Prescaler

              flag bit TMR1IF (PIR1<0>).                                          Applicable Devices

Timer1 must be configured for either timer or synchro-                            72 73 73A 74 74A 76 77

nized counter mode to take advantage of this feature.                   The    prescaler  counter          is  cleared  on   writes     to  the

If Timer1 is running in asynchronous counter mode, this                 TMR1H or TMR1L registers.

reset operation may not work.

In the event that a write to Timer1 coincides with a spe-

cial event trigger from CCP1 or CCP2, the write will

take precedence.

In this mode of operation, the CCPRxH:CCPRxL regis-

ters  pair  effectively  becomes     the   period    register  for

Timer1.

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

                                                                                                                        Value on:           Value on

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

                                                                                                                             BOR            resets

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

10Bh,18Bh

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

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

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

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

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

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

Note  1:    Bits PSPIE and PSPIF are reserved on the PIC16C73/73A/76, always maintain these bits clear.

      2:    The PIC16C72 does not have a Parallel Slave Port or a USART, these bits are unimplemented, read as '0'.

DS30390E-page 68                                                                                           © 1997 Microchip Technology Inc.
                                                                                                     PIC16C7X

9.0         TIMER2 MODULE                                          9.1           Timer2 Prescaler and Postscaler

            Applicable Devices                                                   Applicable Devices

            72 73 73A 74 74A 76 77                                               72 73 73A 74 74A 76 77

Timer2  is     an  8-bit  timer  with    a   prescaler  and  a     The  prescaler          and  postscaler       counters  are   cleared

postscaler. It can be used as the PWM time-base for                when any of the following occurs:

PWM mode of the CCP module(s). The TMR2 register                   •  a write to the TMR2 register

is readable and writable, and is cleared on any device             •  a write to the T2CON register

reset.                                                             •  any device reset (Power-on Reset, MCLR reset,

The input clock (FOSC/4) has a prescale option of 1:1,                Watchdog Timer reset, or Brown-out Reset)

1:4     or     1:16,      selected       by  control         bits  TMR2 is not cleared when T2CON is written.

T2CKPS1:T2CKPS0 (T2CON<1:0>).

The Timer2 module has an 8-bit period register PR2.                9.2           Output of TMR2

Timer2 increments from 00h until it matches PR2 and                              Applicable Devices

then resets to 00h on the next increment cycle. PR2 is                           72 73 73A 74 74A 76 77

a readable and writable register. The PR2 register is ini-

tialized to FFh upon reset.                                        The output of TMR2 (before the postscaler) is fed to the

The     match  output     of  TMR2  goes     through    a  4-bit   Synchronous Serial Port module which optionally uses

postscaler (which gives a 1:1 to 1:16 scaling inclusive)           it to generate shift clock.

to   generate  a   TMR2       interrupt  (latched  in   flag  bit   FIGURE 9-1:             TIMER2 BLOCK DIAGRAM

TMR2IF, (PIR1<1>)).                                                   Sets flag

Timer2 can be shut off by clearing control bit TMR2ON                 bit TMR2IF        TMR2    (1)

                                                                                        output

(T2CON<2>) to minimize power consumption.

Figure 9-2 shows the Timer2 control register.                                           Reset        TMR2 reg    Prescaler       FOSC/4

                                                                                                                 1:1, 1:4, 1:16

                                                                            Postscaler               Comparator            2

                                                                            1:1  to  1:16  EQ

                                                                                     4               PR2 reg

                                                                      Note  1:   TMR2 register output can be software selected

                                                                                 by the SSP Module as a baud clock.

© 1997 Microchip Technology Inc.                                                                                 DS30390E-page 69
PIC16C7X

FIGURE 9-2:         T2CON: TIMER2 CONTROL REGISTER (ADDRESS 12h)

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

      —     TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0              TMR2ON   T2CKPS1       T2CKPS0                  R           = Readable bit

bit7                                                                               bit0                  W           = Writable bit

                                                                                                         U           = Unimplemented bit,

                                                                                                                     read as ‘0’

                                                                                                         -n          = Value at POR reset

bit 7:      Unimplemented: Read as '0'

bit   6-3:  TOUTPS3:TOUTPS0: Timer2 Output Postscale Select bits

            0000 = 1:1 Postscale

            0001 = 1:2 Postscale

            •

            •

            •

            1111 = 1:16 Postscale

bit   2:    TMR2ON: Timer2 On bit

            1 = Timer2 is on

            0 = Timer2 is off

bit   1-0:  T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits

            00 = Prescaler is 1

            01 = Prescaler is 4

            1x = Prescaler is 16

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

                                                                                                                            Value on:      Value on

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

                                                                                                                            BOR            resets

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

10Bh,18Bh

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

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

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

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

92h         PR2       Timer2 Period Register                                                                                1111     1111  1111  1111

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

Note  1:    Bits PSPIE and PSPIF are reserved on the PIC16C73/73A/76, always maintain these bits clear.

      2:    The PIC16C72 does not have a Parallel Slave Port or a USART, these bits are unimplemented, read as '0'.

DS30390E-page 70                                                                                            © 1997 Microchip Technology Inc.
                                                                                  PIC16C7X

10.0     CAPTURE/COMPARE/PWM                                 CCP1 module:

         MODULE(s)                                           Capture/Compare/PWM  Register1  (CCPR1)            is  com-

         Applicable Devices                                  prised of two 8-bit registers: CCPR1L (low  byte) and

                                                             CCPR1H (high byte). The CCP1CON register controls

         72 73 73A 74 74A 76 77 CCP1                         the operation of CCP1. All are readable and writable.

         72 73 73A 74 74A 76 77 CCP2                         CCP2 module:

Each CCP (Capture/Compare/PWM) module contains               Capture/Compare/PWM  Register2  (CCPR2)            is  com-

a 16-bit register which can operate as a 16-bit capture      prised of two 8-bit registers: CCPR2L (low  byte) and

register, as a 16-bit compare register or as a PWM           CCPR2H (high byte). The CCP2CON register controls

master/slave Duty Cycle register. Both the CCP1 and          the operation of CCP2. All are readable and writable.

CCP2  modules    are  identical   in  operation,  with  the

exception of the operation of the special event trigger.     For use of the CCP modules, refer to the Embedded

Table 10-1  and  Table 10-2  show     the  resources    and  Control Handbook, "Using the CCP Modules" (AN594).

interactions of the CCP module(s). In the following sec-     TABLE 10-1:   CCP MODE - TIMER

tions, the operation of a CCP module is described with                     RESOURCE

respect to CCP1. CCP2 operates the same as CCP1,

except where noted.                                          CCP Mode                Timer Resource

                                                             Capture                         Timer1

                                                             Compare                         Timer1

                                                             PWM                             Timer2

TABLE 10-2:      INTERACTION OF TWO CCP MODULES

CCPx Mode    CCPy Mode                                       Interaction

Capture      Capture         Same TMR1 time-base.

Capture      Compare         The compare should be configured for the special event trigger, which clears TMR1.

Compare      Compare         The compare(s) should be configured for the special event trigger, which clears TMR1.

PWM          PWM             The PWMs will have the same frequency, and update rate (TMR2 interrupt).

PWM          Capture         None

PWM          Compare         None

© 1997 Microchip Technology Inc.                                                             DS30390E-page 71
PIC16C7X

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

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

      —         —    CCPxX     CCPxY  CCPxM3          CCPxM2    CCPxM1        CCPxM0           R = Readable bit

    bit7                                                                               bit0    W = Writable bit

                                                                                               U = Unimplemented bit,

                                                                                               read as ‘0’

                                                                                               - n =Value at POR reset

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

    bit   5-4:  CCPxX:CCPxY: PWM Least Significant bits

                Capture Mode: Unused

                Compare Mode: Unused

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

    bit   3-0:  CCPxM3:CCPxM0: CCPx Mode Select bits

                0000 = Capture/Compare/PWM off (resets CCPx module)

                0100 = Capture mode, every falling edge

                0101 = Capture mode, every rising edge

                0110 = Capture mode, every 4th rising edge

                0111 = Capture mode, every 16th rising edge

                1000 = Compare mode, set output on match (CCPxIF bit is set)

                1001 = Compare mode, clear output on match (CCPxIF bit is set)

                1010 = Compare mode, generate software interrupt on match (CCPxIF bit is set, CCPx pin is unaffected)

                1011 = Compare mode, trigger special event (CCPxIF bit is set; CCP1 resets TMR1; CCP2 resets TMR1

                        and starts an A/D conversion (if A/D module is enabled))

                11xx = PWM mode

10.1       Capture Mode                                         FIGURE            10-2:     CAPTURE MODE

           Applicable Devices                                                               OPERATION BLOCK

           72 73 73A 74 74A 76 77                                                           DIAGRAM

In  Capture     mode,       CCPR1H:CCPR1L   captures     the                                   Set flag bit CCP1IF

16-bit value of the TMR1 register when an event occurs                            Prescaler    (PIR1<2>)

on pin RC2/CCP1. An event is defined as:                                           ÷ 1, 4, 16

•   Every falling edge                                          RC2/CCP1                                  CCPR1H   CCPR1L

                                                                Pin

•   Every rising edge                                                                  and             Capture

•   Every 4th rising edge                                                         edge detect          Enable

•   Every 16th rising edge                                                                                TMR1H    TMR1L

An event is selected by control bits CCP1M3:CCP1M0                                       CCP1CON<3:0>

                                                                                  Q’s

(CCP1CON<3:0>). When a capture is made, the inter-

rupt request flag bit CCP1IF (PIR1<2>) is set. It must           10.1.2        TIMER1 MODE SELECTION

be cleared in software. If another capture occurs before

the value in register CCPR1 is read, the old captured           Timer1 must be running in timer mode or synchronized

value will be lost.                                             counter mode for the CCP module to use the capture

10.1.1     CCP PIN CONFIGURATION                                feature. In asynchronous counter mode, the capture

                                                                operation may not work.

In Capture mode, the RC2/CCP1 pin should be config-              10.1.3        SOFTWARE INTERRUPT

ured as an input by setting the TRISC<2> bit.

    Note:       If the RC2/CCP1 is configured as an out-         When the Capture mode is changed, a false capture

                put, a write to the port can cause a capture    interrupt may be generated. The user should keep bit

                condition.                                      CCP1IE (PIE1<2>) clear to avoid false interrupts and

                                                                should clear the flag bit CCP1IF following any such

                                                                change in operating mode.

DS30390E-page 72                                                                               © 1997 Microchip Technology Inc.
                                                                                                     PIC16C7X

10.1.4  CCP PRESCALER                                                       10.2.1     CCP PIN CONFIGURATION

There   are  four      prescaler        settings,  specified   by   bits     The user must configure the RC2/CCP1 pin as an out-

CCP1M3:CCP1M0.            Whenever        the         CCP  module      is   put by clearing the TRISC<2> bit.

turned off, or the CCP module is not in capture mode,                       Note:      Clearing the CCP1CON register will force

the prescaler counter is cleared. This means that any                                  the RC2/CCP1 compare output latch to the

reset will clear the prescaler counter.                                                default low level. This is not the data latch.

Switching from one capture prescaler to another may

generate an interrupt. Also, the prescaler counter will                     10.2.2     TIMER1 MODE SELECTION

not be cleared, therefore the first capture may be from                      Timer1 must be running in Timer mode or Synchro-

a non-zero prescaler. Example 10-1 shows the recom-                         nized Counter mode if the CCP module is using the

mended method for switching between capture pres-                           compare feature. In Asynchronous Counter mode, the

calers. This example also clears the prescaler counter                      compare operation may not work.

and will not generate the “false” interrupt.

                                                                            10.2.3     SOFTWARE INTERRUPT MODE

EXAMPLE 10-1:             CHANGING BETWEEN

                          CAPTURE PRESCALERS                                When generate software interrupt is chosen the CCP1

                                                                            pin is not affected. Only a CCP interrupt is generated (if

CLRF    CCP1CON                 ;Turn    CCP       module     off           enabled).

MOVLW   NEW_CAPT_PS             ;Load    the       W  reg  with

                                ;  the   new       prescaler                10.2.4     SPECIAL EVENT TRIGGER

                                ;  mode   value       and     CCP  ON

MOVWF   CCP1CON                 ;Load    CCP1CON      with    this          In this mode, an internal hardware trigger is generated

                                ;  value                                    which may be used to initiate an action.

10.2    Compare Mode                                                        The special event trigger output of CCP1 resets the

             Applicable Devices                                             TMR1 register pair. This allows the CCPR1 register to

             72 73 73A 74 74A 76 77                                         effectively be a 16-bit programmable period register for

                                                                            Timer1.

In Compare mode, the 16-bit CCPR1 register value is                         The special trigger output of CCP2 resets the TMR1

constantly compared against the TMR1 register pair                          register pair, and starts an A/D conversion (if the A/D

value. When a match occurs, the RC2/CCP1 pin is:                            module is enabled).

•  Driven High                                                              For the PIC16C72 only, the special event trigger output

•  Driven Low                                                               of CCP1 resets the TMR1 register pair, and starts an

•  Remains Unchanged                                                        A/D conversion (if the A/D module is enabled).

The action on the pin is based on the value of control                      Note:      The  special  event     trigger  from  the

bits    CCP1M3:CCP1M0              (CCP1CON<3:0>).            At       the             CCP1and CCP2 modules will not set inter-

same time, interrupt flag bit CCP1IF is set.                                            rupt flag bit TMR1IF (PIR1<0>).

FIGURE 10-3:           COMPARE MODE

                       OPERATION BLOCK

                       DIAGRAM

   Special event trigger will:

        reset Timer1, but not set interrupt flag bit TMR1IF (PIR1<0>),

        and set bit GO/DONE (ADCON0<2>)

        which starts an A/D conversion (CCP1 only for PIC16C72,

        CCP2 only for PIC16C73/73A/74/74A/76/77).

                       Special Event Trigger

                                       Set flag bit CCP1IF

                                       (PIR1<2>)

                                                      CCPR1H  CCPR1L

                  Q    S        Output

   RC2/CCP1                     Logic    match        Comparator

   Pin                 R

        TRISC<2>                                      TMR1H   TMR1L

        Output Enable  CCP1CON<3:0>

                       Mode Select

© 1997 Microchip Technology Inc.                                                                               DS30390E-page 73
PIC16C7X

10.3   PWM Mode                                                         10.3.1    PWM PERIOD

       Applicable Devices                                               The PWM period is specified by writing to the PR2 reg-

       72 73 73A 74 74A 76 77                                           ister. The PWM period can be calculated using the fol-

In Pulse Width Modulation (PWM) mode, the CCPx pin                      lowing formula:

produces up to a 10-bit resolution PWM output. Since                         PWM period = [(PR2) + 1] • 4 • TOSC •

the CCP1 pin is multiplexed with the PORTC data latch,                                       (TMR2 prescale value)

the TRISC<2> bit must be cleared to make the CCP1                       PWM frequency is defined as 1 / [PWM period].

pin an output.

Note:        Clearing the CCP1CON register will force                   When TMR2 is equal to PR2, the following three events

             the CCP1 PWM output latch to the default                   occur on the next increment cycle:

             low level. This is not the PORTC I/O data                  •  TMR2 is cleared

             latch.                                                     •  The CCP1 pin is set (exception: if PWM duty

Figure 10-4 shows a simplified block diagram of the                         cycle = 0%, the CCP1 pin will not be set)

CCP module in PWM mode.                                                 •  The PWM duty cycle is latched from CCPR1L into

For a step by step procedure on how to set up the CCP                      CCPR1H

module for PWM operation, see Section 10.3.3.                              Note:      The Timer2 postscaler (see Section 9.1) is

FIGURE 10-4:          SIMPLIFIED PWM BLOCK                                            not used in the determination of the PWM

                      DIAGRAM                                                         frequency. The postscaler could be used to

                                                                                      have a servo update rate at a different fre-

      Duty cycle registers              CCP1CON<5:4>                                  quency than the PWM output.

CCPR1L                                                                  10.3.2    PWM DUTY CYCLE

                                                                        The    PWM    duty   cycle  is  specified    by    writing  to  the

                                                                        CCPR1L register and to the CCP1CON<5:4> bits. Up

CCPR1H (Slave)                                                          to 10-bit resolution is available: the CCPR1L contains

                                                                        the eight MSbs and the CCP1CON<5:4> contains the

       Comparator                            R  Q                       two    LSbs.  This      10-bit  value   is  represented        by

                                                                        CCPR1L:CCP1CON<5:4>.            The     following  equation    is

                                                          RC2/CCP1      used to calculate the PWM duty cycle in time:

       TMR2           (Note 1)                                             PWM duty cycle = (CCPR1L:CCP1CON<5:4>) •

                                             S

                                                                                                Tosc • (TMR2 prescale value)

Comparator                                            TRISC<2>          CCPR1L and CCP1CON<5:4> can be written to at any

                            Clear Timer,                                time,   but  the  duty  cycle   value   is  not    latched     into

                            CCP1 pin and

      PR2                   latch D.C.                                  CCPR1H until after a match between PR2 and TMR2

                                                                        occurs (i.e., the period is complete). In PWM mode,

Note 1: 8-bit timer is concatenated with 2-bit internal Q clock         CCPR1H is a read-only register.

       or 2 bits of the prescaler to create 10-bit time-base.           The CCPR1H register and a 2-bit internal latch are

                                                                        used to double buffer the PWM duty cycle. This double

A PWM output (Figure 10-5) has a time base (period)                     buffering is essential for glitchless PWM operation.

and a time that the output stays high (duty cycle). The                 When the CCPR1H and 2-bit latch match TMR2 con-

frequency    of  the  PWM       is      the  inverse  of  the   period  catenated with an internal 2-bit Q clock or 2 bits of the

(1/period).                                                             TMR2 prescaler, the CCP1 pin is cleared.

FIGURE 10-5:          PWM OUTPUT                                        Maximum PWM resolution (bits) for a given PWM

                                                                        frequency:

                 Period                                                                      (log       ) FOSC

                                                                                          =             FPWM

                                                                                                                    bits

             Duty Cycle                                                                         log(2)

                                    TMR2 = PR2                             Note:      If the PWM duty cycle value is longer than

                            TMR2 = Duty Cycle                                         the PWM period the CCP1 pin will not be

                                                                                      cleared.

      TMR2 = PR2

DS30390E-page 74                                                                                    © 1997 Microchip Technology Inc.
                                                                                                            PIC16C7X

EXAMPLE 10-2:         PWM PERIOD AND DUTY                             In order to achieve higher resolution, the PWM fre-

                      CYCLE CALCULATION                               quency must be decreased. In order to achieve higher

Desired PWM frequency is 78.125 kHz,                                  PWM frequency, the resolution must be decreased.

Fosc = 20 MHz                                                         Table 10-3 lists example PWM frequencies and resolu-

TMR2 prescale = 1                                                     tions for Fosc = 20 MHz. The TMR2 prescaler and PR2

     1/78.125 kHz= [(PR2) + 1] • 4 • 1/20 MHz • 1                     values are also shown.

     12.8 µs   = [(PR2) + 1] • 4 • 50 ns • 1                          10.3.3     SET-UP FOR PWM OPERATION

     PR2       = 63                                                   The following steps should be taken when configuring

Find the maximum resolution of the duty cycle that can                the CCP module for PWM operation:

be used with a 78.125 kHz frequency and 20 MHz                        1.   Set the PWM period by writing to the PR2 regis-

oscillator:                                                                ter.

     1/78.125 kHz= 2PWM RESOLUTION • 1/20 MHz • 1                     2.   Set      the  PWM       duty   cycle  by    writing  to     the

     12.8 µs   = 2PWM RESOLUTION • 50 ns • 1                               CCPR1L register and CCP1CON<5:4> bits.

     256       = 2PWM RESOLUTION                                      3.   Make the CCP1 pin an output by clearing the

                                                                           TRISC<2> bit.

     log(256)  = (PWM Resolution) • log(2)                            4.   Set the TMR2 prescale value and enable Timer2

     8.0       = PWM Resolution                                            by writing to T2CON.

At most, an 8-bit resolution duty cycle can be obtained               5.   Configure the CCP1 module for PWM operation.

from a 78.125 kHz frequency and a 20 MHz oscillator,

i.e., 0 ≤ CCPR1L:CCP1CON<5:4> ≤ 255. Any value

greater than 255 will result in a 100% duty cycle.

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

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

Timer Prescaler (1, 4, 16)                             16        4                  1              1             1                  1

PR2 Value                                              0xFF      0xFF            0xFF              0x3F          0x1F           0x17

Maximum Resolution (bits)                              10        10                 10             8             7              5.5

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

                                                                                                                 Value on:      Value on

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

                                                                                                                 BOR            resets

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

10Bh,18Bh

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

0Dh(2)        PIR2          —      —          —        —         —               —       —         CCP2IF        ----  ---0     ----   ---0

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

8Dh(2)        PIE2          —      —          —        —         —               —       —         CCP2IE        ----  ---0     ----   ---0

87h           TRISC    PORTC Data Direction Register                                                             1111  1111     1111   1111

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

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

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

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

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

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

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

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

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

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

Note    1:   Bits PSPIE and PSPIF are reserved on the PIC16C73/73A/76, always maintain these bits clear.

        2:   The PIC16C72 does not have a Parallel Slave Port, USART or CCP2 module, these bits are unimplemented, read as '0'.

© 1997 Microchip Technology Inc.                                                                                     DS30390E-page 75
PIC16C7X

TABLE 10-5:         REGISTERS ASSOCIATED WITH PWM AND TIMER2

                                                                                                                  Value on:   Value on

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

                                                                                                                     BOR            resets

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

10Bh,18Bh

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

0Dh(2)      PIR2     —           —             —          —      —        —       —                      CCP2IF   ----  ---0  ----  ---0

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

8Dh(2)      PIE2     —           —             —          —      —        —       —                      CCP2IE   ----  ---0  ----  ---0

87h         TRISC    PORTC Data Direction Register                                                                1111  1111  1111  1111

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

92h         PR2      Timer2 module’s period register                                                              1111  1111  1111  1111

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

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

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

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

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

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

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

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

Note    1:  Bits PSPIE and PSPIF are reserved on the PIC16C73/73A/76, always maintain these bits clear.

        2:  The PIC16C72 does not have a Parallel Slave Port, USART or CCP2 module, these bits are unimplemented, read as     '0'.

DS30390E-page 76                                                                         © 1997 Microchip Technology Inc.
                                      Applicable Devices               PIC16C7X

                                      72 73 73A 74 74A 76 77

11.0       SYNCHRONOUS SERIAL

           PORT (SSP) MODULE

11.1       SSP Module Overview

The Synchronous Serial Port (SSP) module is a serial

interface useful for communicating with other periph-

eral   or  microcontroller  devices.  These      peripheral

devices may be Serial EEPROMs, shift registers, dis-

play drivers, A/D converters, etc. The SSP module can

operate in one of two modes:

•  Serial Peripheral Interface (SPI)

•  Inter-Integrated Circuit (I2C)

The SSP module in I2C mode works the same in all

PIC16C7X devices that have an SSP module. However

the SSP Module in SPI mode has differences between

the PIC16C76/77 and the other PIC16C7X devices.

The register definitions and operational description of

SPI mode has been split into two sections because of

the   differences  between    the  PIC16C76/77   and  the

other PIC16C7X devices. The default reset values of

both the SPI modules is the same regardless of the

device:

11.2 SPI Mode for PIC16C72/73/73A/74/74A ..........78

11.3 SPI Mode for PIC16C76/77..............................83

11.4 I2C™ Overview ................................................89

11.5 SSP I2C Operation...........................................93

Refer  to  Application  Note  AN578,  “Use   of  the  SSP

Module in the I 2C Multi-Master Environment.”

© 1997 Microchip Technology Inc.                                       DS30390E-page 77
PIC16C7X                                           Applicable Devices

                                                   72 73 73A 74 74A 76 77

11.2        SPI Mode for PIC16C72/73/73A/74/74A

This section contains register definitions and opera-

tional  characteristics  of   the  SPI    module     for  the

PIC16C72,     PIC16C73,       PIC16C73A,   PIC16C74,

PIC16C74A.

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

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

        —     —          D/A       P              S       R/W              UA       BF          R = Readable bit

bit7                                                                                bit0        W = Writable bit

                                                                                                U = Unimplemented bit,

                                                                                                read as ‘0’

                                                                                                - n =Value at POR reset

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

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

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

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

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

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

              0 = Stop bit was not detected last

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

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

              0 = Start bit was not detected last

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

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

              match to the next start bit, stop bit, or ACK bit.

              1 = Read

              0 = Write

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

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

              0 = Address does not need to be updated

bit     0:    BF: Buffer Full Status bit

              Receive (SPI and I2C modes)

              1 = Receive complete, SSPBUF is full

              0 = Receive not complete, SSPBUF is empty

              Transmit (I2C mode only)

              1 = Transmit in progress, SSPBUF is full

              0 = Transmit complete, SSPBUF is empty

DS30390E-page 78                                                                                © 1997 Microchip Technology Inc.
                                            Applicable Devices                                   PIC16C7X

                                            72 73 73A 74 74A 76 77

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

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

WCOL        SSPOV        SSPEN    CKP         SSPM3    SSPM2        SSPM1    SSPM0       R = Readable bit

bit7                                                                              bit0   W = Writable bit

                                                                                         U = Unimplemented bit,

                                                                                                 read as ‘0’

                                                                                         - n =Value at POR reset

bit 7:      WCOL: Write Collision Detect bit

            1 = The SSPBUF register is written while it is still transmitting the previous word

            (must be cleared in software)

            0 = No collision

bit   6:    SSPOV: Receive Overflow Detect bit

            In SPI mode

            1 = A new byte is received while the SSPBUF register is still holding the previous data. In case of overflow,

            the data in SSPSR register is lost. Overflow can only occur in slave mode. The user must read the SSP-

            BUF, even if only transmitting data, to avoid setting overflow. In master mode the overflow bit is not set

            since each new reception (and transmission) is initiated by writing to the SSPBUF register.

            0 = No overflow

            In I2C mode

            1 = A byte is received while the SSPBUF register is still holding the previous byte. SSPOV is a "don’t care"

            in transmit mode. SSPOV must be cleared in software in either mode.

            0 = No overflow

bit   5:    SSPEN: Synchronous Serial Port Enable bit

            In SPI mode

            1 = Enables serial port and configures SCK, SDO, and SDI as serial port pins

            0 = Disables serial port and configures these pins as I/O port pins

            In I2C mode

            1 = Enables the serial port and configures the SDA and SCL pins as serial port pins

            0 = Disables serial port and configures these pins as I/O port pins

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

bit   4:    CKP: Clock Polarity Select bit

            In SPI mode

            1 = Idle state for clock is a high level. Transmit happens on falling edge, receive on rising edge.

            0 = Idle state for clock is a low level. Transmit happens on rising edge, receive on falling edge.

            In I2C mode

            SCK release control

            1 = Enable clock

            0 = Holds clock low (clock stretch) (Used to ensure data setup time)

bit   3-0:  SSPM3:SSPM0: Synchronous Serial Port Mode Select bits

            0000 = SPI master mode, clock = Fosc/4

            0001 = SPI master mode, clock = Fosc/16

            0010 = SPI master mode, clock = Fosc/64

            0011 = SPI master mode, clock = TMR2 output/2

            0100 = SPI slave mode, clock = SCK pin. SS pin control enabled.

            0101 = SPI slave mode, clock = SCK pin. SS pin control disabled. SS can be used      as  I/O        pin.

            0110 = I2C slave mode, 7-bit address

            0111 = I2C slave mode, 10-bit address

            1011 = I2C firmware controlled Master Mode (slave idle)

            1110 = I2C slave mode, 7-bit address with start and stop bit interrupts enabled

            1111 = I2C slave mode, 10-bit address with start and stop bit interrupts enabled

© 1997 Microchip Technology Inc.                                                                              DS30390E-page 79
PIC16C7X                                              Applicable Devices

                                                      72 73 73A 74 74A 76 77

11.2.1     OPERATION OF SSP MODULE IN SPI                                 EXAMPLE 11-1:        LOADING THE SSPBUF

           MODE                                                                                (SSPSR) REGISTER

           Applicable Devices                                                   BSF      STATUS,   RP0        ;Specify       Bank     1

           72 73 73A 74 74A 76 77                                         LOOP  BTFSS    SSPSTAT,      BF     ;Has    data      been

The SPI mode allows 8-bits of data to be synchro-                                                             ;received

nously  transmitted     and    received  simultaneously.          To                                          ;(transmit

accomplish    communication,        typically  three     pins  are                                            ;complete)?

used:                                                                           GOTO     LOOP                 ;No

                                                                                BCF      STATUS,   RP0        ;Specify       Bank     0

•   Serial Data Out (SDO)                                                       MOVF     SSPBUF,   W          ;W    reg  =   contents

•   Serial Data In (SDI)                                                                                      ;of     SSPBUF

•   Serial Clock (SCK)                                                          MOVWF    RXDATA               ;Save      in  user     RAM

Additionally a fourth pin may be used when in a slave                           MOVF     TXDATA,   W          ;W    reg  =   contents

mode of operation:                                                                                            ;   of  TXDATA

                                                                                MOVWF    SSPBUF               ;New    data      to   xmit

•   Slave Select (SS)                                                     The block diagram of the SSP module, when in SPI

When initializing the SPI, several options need to be                     mode (Figure 11-3), shows that the SSPSR register is

specified. This is done by programming the appropriate                     not  directly  readable  or    writable,  and      can    only   be

control bits in the SSPCON register (SSPCON<5:0>).                        accessed from addressing the SSPBUF register. Addi-

These control bits allow the following to be specified:                    tionally, the SSP status register (SSPSTAT) indicates

•   Master Mode (SCK is the clock output)                                 the various status conditions.

•   Slave Mode (SCK is the clock input)                                   FIGURE 11-3:   SSP BLOCK DIAGRAM

•   Clock Polarity (Output/Input data on the Rising/                                     (SPI MODE)

    Falling edge of SCK)

•   Clock Rate (Master mode only)

•   Slave Select Mode (Slave mode only)                                                                                       Internal

The SSP consists of a transmit/receive Shift Register                                                                        data bus

(SSPSR) and a Buffer register (SSPBUF). The SSPSR                                        Read                         Write

shifts the data in and out of the device, MSb first. The

SSPBUF holds the data that was written to the SSPSR,                                               SSPBUF reg

until the received data is ready. Once the 8-bits of data

have been received, that byte is moved to the SSPBUF

register. Then the Buffer Full bit, BF (SSPSTAT<0>)

and flag bit SSPIF are set. This double buffering of the                                                SSPSR reg

received data (SSPBUF) allows the next byte to start                      RC4/SDI/SDA          bit0                      shift

reception     before   reading      the  data  that      was   just                                                      clock

received.  Any  write     to   the  SSPBUF     register       during

transmission/reception of data will be ignored, and the                   RC5/SDO

write collision detect bit, WCOL (SSPCON<7>) will be

set. User software must clear bit WCOL so that it can                                    SS Control

be determined if the following write(s) to the SSPBUF                                          Enable

completed successfully. When the application software

is expecting to receive valid data, the SSPBUF register                   RA5/SS/AN4           Edge

should be read before the next byte of data to transfer                                        Select

is written to the SSPBUF register. The Buffer Full bit BF

(SSPSTAT<0>) indicates when the SSPBUF register                                                               2

has been loaded with the received data (transmission                                                       Clock Select

is  complete).  When      the  SSPBUF    is    read,     bit  BF  is                           SSPM3:SSPM0

cleared. This data may be irrelevant if the SPI is only a                                                                TMR2 output

transmitter.  Generally       the   SSP  Interrupt   is  used     to                                       4                      2

determine when the transmission/reception has com-                                               Edge

pleted. The SSPBUF register must be read and/or writ-                                            Select               Prescaler       TCY

ten. If the interrupt method is not going to be used, then                RC3/SCK/                                    4, 16, 64

software polling can be done to ensure that a write col-                  SCL

lision does not occur. Example 11-1 shows the loading                                          TRISC<3>

of the SSPBUF (SSPSR) register for data transmission.

The shaded instruction is only required if the received

data is meaningful.

DS30390E-page 80                                                                                     © 1997 Microchip Technology Inc.
                                                  Applicable Devices                                         PIC16C7X

                                                  72 73 73A 74 74A 76 77

To  enable   the  serial    port,   SSP  enable        bit  SSPEN         The master can initiate the data transfer at any time

(SSPCON<5>) must be set. To reset or reconfigure SPI                       because it controls the SCK. The master determines

mode, clear enable bit SSPEN, re-initialize SSPCON                        when the slave (Processor 2) is to broadcast data by

register, and then set enable bit SSPEN. This config-                      the software protocol.

ures the SDI, SDO, SCK, and SS pins as serial port                        In     master  mode     the  data  is    transmitted/received    as

pins. For the pins to behave as the serial port function,                 soon as the SSPBUF register is written to. If the SPI is

they must have their data direction bits (in the TRIS reg-                only going to receive, the SCK output could be disabled

ister) appropriately programmed. That is:                                 (programmed as an input). The SSPSR register will

•   SDI must have TRISC<4> set                                            continue to shift in the signal present on the SDI pin at

•   SDO must have TRISC<5> cleared                                        the programmed clock rate. As each byte is received, it

•   SCK (Master mode) must have TRISC<3>                                  will be loaded into the SSPBUF register as if a normal

    cleared                                                               received byte (interrupts and status bits appropriately

•   SCK (Slave mode) must have TRISC<3> set                               set). This could be useful in receiver applications as a

                                                                          “line activity monitor” mode.

•   SS must have TRISA<5> set (if implemented)                            In slave mode, the data is transmitted and received as

Any serial port function that is not desired may be over-                 the external clock pulses appear on SCK. When the

ridden by programming the corresponding data direc-                       last bit is latched interrupt flag bit SSPIF (PIR1<3>) is

tion (TRIS) register to the opposite value. An example                    set.

would be in master mode where you are only sending                        The clock polarity is selected by appropriately program-

data (to a display driver), then both SDI and SS could                    ming   bit     CKP  (SSPCON<4>).              This  then  would  give

be used as general purpose outputs by clearing their                      waveforms      for      SPI   communication         as    shown  in

corresponding TRIS register bits.                                         Figure 11-5 and Figure 11-6 where the MSB is trans-

Figure 11-4 shows a typical connection between two                        mitted first. In master mode, the SPI clock rate (bit rate)

microcontrollers. The master controller (Processor 1)                     is user programmable to be one of the following:

initiates the data transfer by sending the SCK signal.                    •      Fosc/4 (or TCY)

Data is shifted out of both shift registers on their pro-

grammed clock edge, and latched on the opposite edge                      •      Fosc/16 (or 4 • TCY)

of the clock. Both processors should be programmed to                     •      Fosc/64 (or 16 • TCY)

the same Clock Polarity (CKP), then both controllers                      •      Timer2 output/2

would  send       and   receive    data  at      the   same  time.        This allows a maximum bit clock frequency (at 20 MHz)

Whether      the  data  is  meaningful       (or  dummy      data)        of 5 MHz. When in slave mode the external clock must

depends      on   the  application  software.     This      leads  to     meet the minimum high and low times.

three scenarios for data transmission:

•   Master sends data — Slave sends dummy data                            In sleep mode, the slave can transmit and receive data

•   Master sends data — Slave sends data                                  and wake the device from sleep.

•   Master sends dummy data — Slave sends data

FIGURE 11-4:           SPI MASTER/SLAVE CONNECTION

                  SPI Master SSPM3:SSPM0 = 00xxb                                         SPI Slave SSPM3:SSPM0 = 010xb

                                                            SDO                  SDI

                            Serial Input Buffer                                                    Serial Input Buffer

                            (SSPBUF register)                                                      (SSPBUF register)

                                 Shift Register             SDI                  SDO               Shift Register

                                   (SSPSR)                                                             (SSPSR)

                          MSb                     LSb                                         MSb                       LSb

                                                                   Serial Clock

                                                            SCK                  SCK

                            PROCESSOR 1                                                                PROCESSOR 2

© 1997 Microchip Technology Inc.                                                                                              DS30390E-page 81
PIC16C7X                                              Applicable Devices

                                                      72 73 73A 74 74A 76 77

The SS pin allows a synchronous slave mode. The                              point at which it was taken high. External pull-up/

SPI must be in slave mode (SSPCON<3:0> = 04h)                                pull-down resistors may be desirable, depending on the

and the TRISA<5> bit must be set the for synchro-                            application.

nous slave mode to be enabled. When the SS pin is                            To emulate two-wire communication, the SDO pin can

low,  transmission    and  reception     are    enabled  and                 be connected to the SDI pin. When the SPI needs to

the SDO pin is driven. When the SS pin goes high,                            operate as a receiver the SDO pin can be configured as

the SDO pin is no longer driven, even if in the mid-                         an input. This disables transmissions from the SDO.

dle of a transmitted byte, and becomes a floating                             The SDI can always be left as an input (SDI function)

output. If the SS pin is taken low without resetting                         since it cannot create a bus conflict.

SPI mode, the transmission will continue from the

FIGURE 11-5:         SPI MODE TIMING, MASTER MODE                   OR SLAVE MODE W/O SS CONTROL

      SCK

      (CKP = 0)

      SCK

      (CKP = 1)

              SDO          bit7          bit6          bit5         bit4        bit3        bit2        bit1         bit0

              SDI

                           bit7                                                                                      bit0

           SSPIF

FIGURE 11-6:         SPI MODE TIMING, SLAVE MODE WITH SS CONTROL

          SS

      SCK

      (CKP = 0)

      SCK

      (CKP = 1)

           SDO                     bit7         bit6         bit5         bit4        bit3        bit2         bit1        bit0

           SDI

                                  bit7                                                                                     bit0

          SSPIF

TABLE 11-1:          REGISTERS ASSOCIATED WITH SPI OPERATION

                                                                                                                     Value on:   Value on

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

                                                                                                                     BOR         resets

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

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

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

87h           TRISC    PORTC Data Direction Register                                                                 1111  1111  1111  1111

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

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

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

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

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

Note  1:   Bits PSPIE and PSPIF are reserved on the PIC16C73/73A, always maintain these bits clear.

      2:   The PIC16C72 does not have a Parallel Slave Port or USART, these bits are unimplemented, read as '0'.

DS30390E-page 82                                                                                        © 1997 Microchip Technology Inc.
                                                 Applicable Devices                                 PIC16C7X

                                                 72 73 73A 74 74A 76 77

11.3        SPI Mode for PIC16C76/77

This section contains register definitions and opera-

tional  characteristics  of   the  SPI  module   on   the

PIC16C76 and PIC16C77 only.

FIGURE 11-7:       SSPSTAT: SYNC SERIAL PORT STATUS REGISTER (ADDRESS 94h)(PIC16C76/77)

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

SMP         CKE          D/A       P          S          R/W            UA        BF          R = Readable bit

bit7                                                                                  bit0    W = Writable bit

                                                                                              U = Unimplemented bit,

                                                                                                    read as ‘0’

                                                                                              - n =Value at POR reset

bit 7:      SMP: SPI data input sample phase

            SPI Master Mode

            1 = Input data sampled at end of data output time

            0 = Input data sampled at middle of data output time

            SPI Slave Mode

            SMP must be cleared when SPI is used in slave mode

bit 6:      CKE: SPI Clock Edge Select (Figure 11-11, Figure 11-12, and Figure 11-13)

            CKP = 0

            1 = Data transmitted on rising edge of SCK

            0 = Data transmitted on falling edge of SCK

            CKP = 1

            1 = Data transmitted on falling edge of SCK

            0 = Data transmitted on rising edge of SCK

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

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

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

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

            detected last, SSPEN is cleared)

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

            0 = Stop bit was not detected last

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

            detected last, SSPEN is cleared)

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

            0 = Start bit was not detected last

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

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

            address match to the next start bit, stop bit, or ACK bit.

            1 = Read

            0 = Write

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

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

            0 = Address does not need to be updated

bit     0:  BF: Buffer Full Status bit

            Receive (SPI and I2C modes)

            1 = Receive complete, SSPBUF is full

            0 = Receive not complete, SSPBUF is empty

            Transmit (I2C mode only)

            1 = Transmit in progress, SSPBUF is full

            0 = Transmit complete, SSPBUF is empty

© 1997 Microchip Technology Inc.                                                                             DS30390E-page 83
PIC16C7X                                              Applicable Devices

                                                      72 73 73A 74 74A 76 77

FIGURE 11-8:      SSPCON: SYNC SERIAL PORT CONTROL REGISTER (ADDRESS 14h)(PIC16C76/77)

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

WCOL        SSPOV        SSPEN   CKP          SSPM3    SSPM2  SSPM1           SSPM0      R = Readable bit

bit7                                                                              bit0   W = Writable bit

                                                                                         U = Unimplemented bit,

                                                                                                 read as ‘0’

                                                                                         - n =Value at POR reset

bit 7:      WCOL: Write Collision Detect bit

            1 = The SSPBUF register is written while it is still transmitting the previous word

            (must be cleared in software)

            0 = No collision

bit   6:    SSPOV: Receive Overflow Indicator bit

            In SPI mode

            1 = A new byte is received while the SSPBUF register is still holding the previous data. In case of overflow,

            the data in SSPSR is lost. Overflow can only occur in slave mode. The user must read the SSPBUF, even

            if only transmitting data, to avoid setting overflow. In master mode the overflow bit is not set since each

            new reception (and transmission) is initiated by writing to the SSPBUF register.

            0 = No overflow

            In I2C mode

            1 = A byte is received while the SSPBUF register is still holding the previous byte. SSPOV is a "don’t care"

            in transmit mode. SSPOV must be cleared in software in either mode.

            0 = No overflow

bit   5:    SSPEN: Synchronous Serial Port Enable bit

            In SPI mode

            1 = Enables serial port and configures SCK, SDO, and SDI as serial port pins

            0 = Disables serial port and configures these pins as I/O port pins

            In I2C mode

            1 = Enables the serial port and configures the SDA and SCL pins as serial port pins

            0 = Disables serial port and configures these pins as I/O port pins

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

bit   4:    CKP: Clock Polarity Select bit

            In SPI mode

            1 = Idle state for clock is a high level

            0 = Idle state for clock is a low level

            In I2C mode

            SCK release control

            1 = Enable clock

            0 = Holds clock low (clock stretch) (Used to ensure data setup time)

bit   3-0:  SSPM3:SSPM0: Synchronous Serial Port Mode Select bits

            0000 = SPI master mode, clock = FOSC/4

            0001 = SPI master mode, clock = FOSC/16

            0010 = SPI master mode, clock = FOSC/64

            0011 = SPI master mode, clock = TMR2 output/2

            0100 = SPI slave mode, clock = SCK pin. SS pin control enabled.

            0101 = SPI slave mode, clock = SCK pin. SS pin control disabled. SS can be used      as  I/O      pin

            0110 = I2C slave mode, 7-bit address

            0111 = I2C slave mode, 10-bit address

            1011 = I2C firmware controlled master mode (slave idle)

            1110 = I2C slave mode, 7-bit address with start and stop bit interrupts enabled

            1111 = I2C slave mode, 10-bit address with start and stop bit interrupts enabled

DS30390E-page 84                                                                              © 1997 Microchip Technology Inc.
                                                             Applicable Devices                                   PIC16C7X

                                                             72 73 73A 74 74A 76 77

11.3.1        SPI MODE FOR PIC16C76/77                                           EXAMPLE 11-2:         LOADING THE SSPBUF

The SPI mode allows 8-bits of data to be synchro-                                                      (SSPSR) REGISTER

nously     transmitted      and   received       simultaneously.    To                                 (PIC16C76/77)

accomplish    communication,              typically   three  pins   are                BCF    STATUS,      RP1       ;Specify         Bank   1

used:                                                                                  BSF    STATUS,      RP0       ;

•  Serial Data Out (SDO) RC5/SDO                                                 LOOP  BTFSS  SSPSTAT,        BF     ;Has      data    been

•  Serial Data In (SDI) RC4/SDI/SDA                                                                                  ;received

                                                                                                                     ;(transmit

•  Serial Clock (SCK) RC3/SCK/SCL                                                                                    ;complete)?

Additionally a fourth pin may be used when in a slave                                  GOTO   LOOP                   ;No

mode of operation:                                                                     BCF    STATUS,      RP0       ;Specify         Bank   0

                                                                                       MOVF   SSPBUF,      W         ;W    reg  =     contents

•  Slave Select (SS) RA5/SS/AN4                                                                                      ;     of  SSPBUF

When initializing the SPI, several options need to be                                  MOVWF  RXDATA                 ;Save      in    user   RAM

specified. This is done by programming the appropriate                                  MOVF   TXDATA,      W         ;W    reg  =     contents

control bits in the SSPCON register (SSPCON<5:0>)                                                                    ;     of  TXDATA

and SSPSTAT<7:6>. These control bits allow the fol-                                    MOVWF  SSPBUF                 ;New      data    to    xmit

lowing to be specified:                                                           The block diagram of the SSP module, when in SPI

•  Master Mode (SCK is the clock output)                                         mode  (Figure 11-9),  shows         that  the  SSPSR        is   not

•  Slave Mode (SCK is the clock input)                                           directly readable or writable, and can only be accessed

•  Clock Polarity (Idle state of SCK)                                            from addressing the SSPBUF register. Additionally, the

•  Clock edge (output data on rising/falling edge of                             SSP status register (SSPSTAT) indicates the various

   SCK)                                                                          status conditions.

•  Clock Rate (Master mode only)                                                 FIGURE 11-9:        SSP BLOCK DIAGRAM

•  Slave Select Mode (Slave mode only)                                                               (SPI MODE)(PIC16C76/77)

The SSP consists of a transmit/receive Shift Register                                                                                 Internal

(SSPSR) and a buffer register (SSPBUF). The SSPSR                                                                                     data bus

shifts the data in and out of the device, MSb first. The                                        Read                            Write

SSPBUF holds the data that was written to the SSPSR

until the received data is ready. Once the 8-bits of data                                              SSPBUF reg

have been received, that byte is moved to the SSPBUF

register.     Then      the       buffer   full      detect    bit  BF

(SSPSTAT<0>) and interrupt flag bit SSPIF (PIR1<3>)

are     set.  This  double   buffering     of    the  received      data                                      SSPSR reg

(SSPBUF) allows the next byte to start reception before                          RC4/SDI/SDA         bit0                       shift

reading the data that was just received. Any write to the                                                                       clock

SSPBUF register during transmission/reception of data

will be ignored, and the write collision detect bit WCOL                         RC5/SDO

(SSPCON<7>) will be set. User software must clear the

WCOL bit so that it can be determined if the following

write(s) to the SSPBUF register completed success-                                             SS Control

fully.  When  the     application     software       is  expecting  to                               Enable

receive valid data, the SSPBUF should be read before                             RA5/SS/AN4          Edge

the     next  byte  of   data     to  transfer   is   written  to   the                              Select

SSPBUF.       Buffer  full   bit  BF  (SSPSTAT<0>)           indicates

when SSPBUF has been loaded with the received data                                                                   2

(transmission is complete). When the SSPBUF is read,                                                              Clock Select

bit BF is cleared. This data may be irrelevant if the SPI

is only a transmitter. Generally the SSP Interrupt is                                                SSPM3:SSPM0

used    to    determine     when      the  transmission/reception                                                 4             TMR2 output

                                                                                                                                          2

has completed. The SSPBUF must be read and/or writ-                                                    Edge

ten. If the interrupt method is not going to be used, then                                           Select                    Prescaler     TCY

software polling can be done to ensure that a write col-                         RC3/SCK/                                      4, 16, 64

lision does not occur. Example 11-2 shows the loading                            SCL

of the SSPBUF (SSPSR) for data transmission. The                                                     TRISC<3>

shaded instruction is only required if the received data

is meaningful.

© 1997 Microchip Technology Inc.                                                                                               DS30390E-page 85
PIC16C7X                                                       Applicable Devices

                                                          72 73 73A 74 74A 76 77

To  enable   the  serial  port,  SSP  Enable        bit,  SSPEN  The master can initiate the data transfer at any time

(SSPCON<5>) must be set. To reset or reconfigure SPI              because it controls the SCK. The master determines

mode, clear bit SSPEN, re-initialize the SSPCON reg-             when the slave (Processor 2) is to broadcast data by

ister, and then set bit SSPEN. This configures the SDI,           the firmware protocol.

SDO, SCK, and SS pins as serial port pins. For the pins          In          master     mode  the  data     is    transmitted/received    as

to behave as the serial port function, they must have            soon as the SSPBUF register is written to. If the SPI is

their data direction bits (in the TRISC register) appro-         only going to receive, the SCK output could be disabled

priately programmed. That is:                                    (programmed as an input). The SSPSR register will

•   SDI must have TRISC<4> set                                   continue to shift in the signal present on the SDI pin at

•   SDO must have TRISC<5> cleared                               the programmed clock rate. As each byte is received, it

•   SCK (Master mode) must have TRISC<3>                         will be loaded into the SSPBUF register as if a normal

    cleared                                                      received byte (interrupts and status bits appropriately

•   SCK (Slave mode) must have TRISC<3> set                      set). This could be useful in receiver applications as a

                                                                 “line activity monitor” mode.

•   SS must have TRISA<5> set                                    In slave mode, the data is transmitted and received as

Any serial port function that is not desired may be over-        the external clock pulses appear on SCK. When the

ridden by programming the corresponding data direc-              last bit is latched the interrupt flag bit SSPIF (PIR1<3>)

tion (TRIS) register to the opposite value. An example           is set.

would be in master mode where you are only sending               The clock polarity is selected by appropriately program-

data (to a display driver), then both SDI and SS could           ming              bit  CKP  (SSPCON<4>).              This  then  would  give

be used as general purpose outputs by clearing their             waveforms              for   SPI   communication            as    shown  in

corresponding TRIS register bits.                                Figure 11-11,               Figure 11-12,   and       Figure 11-13  where

Figure 11-10 shows a typical connection between two              the MSB is transmitted first. In master mode, the SPI

microcontrollers. The master controller (Processor 1)            clock rate (bit rate) is user programmable to be one of

initiates the data transfer by sending the SCK signal.           the following:

Data is shifted out of both shift registers on their pro-        •           FOSC/4 (or TCY)

grammed clock edge, and latched on the opposite edge

of the clock. Both processors should be programmed to            •           FOSC/16 (or 4 • TCY)

same Clock Polarity (CKP), then both controllers would           •           FOSC/64 (or 16 • TCY)

send and receive data at the same time. Whether the              •           Timer2 output/2

data is meaningful (or dummy data) depends on the                This allows a maximum bit clock frequency (at 20 MHz)

application firmware. This leads to three scenarios for           of 5 MHz. When in slave mode the external clock must

data transmission:                                               meet the minimum high and low times.

•   Master sends data — Slave sends dummy data                   In sleep mode, the slave can transmit and receive data

•   Master sends data — Slave sends data                         and wake the device from sleep.

•   Master sends dummy data — Slave sends data

FIGURE 11-10: SPI MASTER/SLAVE CONNECTION                        (PIC16C76/77)

                  SPI Master SSPM3:SSPM0 = 00xxb                                        SPI Slave SSPM3:SSPM0 = 010xb

                                                          SDO                      SDI

                          Serial Input Buffer                                                     Serial Input Buffer

                                 (SSPBUF)                                                          (SSPBUF)

                               Shift Register             SDI                      SDO            Shift Register

                                 (SSPSR)                                                           (SSPSR)

                          MSb                  LSb                                           MSb                       LSb

                                                               Serial Clock

                                                          SCK                      SCK

                          PROCESSOR 1                                                              PROCESSOR 2

DS30390E-page 86                                                                                    © 1997 Microchip Technology Inc.
                                                    Applicable Devices                                  PIC16C7X

                                              72 73 73A 74 74A 76 77

The SS pin allows a synchronous slave mode. The                         .

SPI must be in slave mode (SSPCON<3:0> = 04h)                              Note:     When the SPI is in Slave Mode with SS pin

and the TRISA<5> bit must be set for the synchro-                                    control enabled, (SSPCON<3:0> = 0100)

nous slave mode to be enabled. When the SS pin is                                    the SPI module will reset if the SS pin is set

low,  transmission  and  reception      are   enabled  and                           to VDD.

the SDO pin is driven. When the SS pin goes high,                          Note:     If  the  SPI   is  used  in  Slave  Mode        with

the SDO pin is no longer driven, even if in the mid-                                 CKE = '1', then the SS pin control must be

dle of a transmitted byte, and becomes a floating                                     enabled.

output. If the SS pin is taken low without resetting

SPI mode, the transmission will continue from the                       To emulate two-wire communication, the SDO pin can

point at which it was taken high. External pull-up/                     be connected to the SDI pin. When the SPI needs to

pull-down resistors may be desirable, depending on the                  operate as a receiver the SDO pin can be configured as

application.                                                            an input. This disables transmissions from the SDO.

                                                                        The SDI can always be left as an input (SDI function)

                                                                        since it cannot create a bus conflict.

FIGURE 11-11: SPI MODE TIMING, MASTER MODE                    (PIC16C76/77)

SCK (CKP = 0,

      CKE = 0)

SCK (CKP = 0,

      CKE = 1)

SCK (CKP = 1,

      CKE = 0)

SCK (CKP = 1,

      CKE = 1)

SDO                               bit7        bit6      bit5  bit4                bit3        bit2      bit1      bit0

SDI (SMP = 0)

                         bit7                                                                                            bit0

SDI (SMP = 1)

                                        bit7                                                                                   bit0

SSPIF

FIGURE 11-12:       SPI  MODE TIMING          (SLAVE   MODE   WITH         CKE    =  0)  (PIC16C76/77)

SS (optional)

SCK (CKP = 0)

SCK (CKP = 1)

SDO                               bit7        bit6      bit5  bit4                bit3        bit2      bit1      bit0

SDI (SMP = 0)

                                  bit7                                                                                   bit0

SSPIF

© 1997 Microchip Technology Inc.                                                                                  DS30390E-page 87
PIC16C7X                                           Applicable Devices

                                                   72 73 73A 74 74A 76 77

FIGURE 11-13: SPI MODE          TIMING  (SLAVE     MODE WITH CKE =            1)  (PIC16C76/77)

SS

(not optional)

SCK (CKP = 0)

SCK (CKP = 1)

SDO                       bit7  bit6    bit5              bit4     bit3           bit2          bit1    bit0

SDI (SMP = 0)

                    bit7                                                                                      bit0

SSPIF

TABLE 11-2:       REGISTERS ASSOCIATED WITH SPI OPERATION (PIC16C76/77)

                                                                                                        Value on:   Value on

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

                                                                                                        BOR         resets

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

10Bh,18Bh

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

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

87h        TRISC    PORTC Data Direction Register                                                       1111  1111  1111   1111

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

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

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

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

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

Note  1:  Bits PSPIE and PSPIF are reserved on the PIC16C76, always maintain these bits clear.

DS30390E-page 88                                                                                © 1997 Microchip Technology Inc.
                                                       Applicable Devices                           PIC16C7X

                                                       72 73 73A 74 74A 76 77

11.4       I2C™ Overview                                            In both cases the master generates the clock signal.

This  section    provides   an  overview    of  the   Inter-Inte-   The output stages of the clock (SCL) and data (SDA)

grated Circuit (I2C) bus, with Section 11.5 discussing              lines       must      have  an  open-drain  or  open-collector  in

the operation of the SSP module in I2C mode.                        order to perform the wired-AND function of the bus.

The I2C bus is a two-wire serial interface developed by             External pull-up resistors are used to ensure a high

                                                                    level when no device is pulling the line down. The num-

the Philips Corporation. The original specification, or              ber of devices that may be attached to the I2C bus is

standard mode, was for data transfers of up to 100                  limited only by the maximum bus loading specification

Kbps. The enhanced specification (fast mode) is also                 of 400 pF.

supported.       This  device  will  communicate      with  both

standard and fast mode devices if attached to the same              11.4.1      INITIATING AND TERMINATING DATA

bus. The clock will determine the data rate.                                    TRANSFER

The I2C interface employs a comprehensive protocol to               During times of no data transfer (idle time), both the

ensure     reliable    transmission   and  reception   of   data.   clock line (SCL) and the data line (SDA) are pulled high

When      transmitting  data,   one   device  is  the  “master”     through the external pull-up resistors. The START and

which initiates transfer on the bus and generates the               STOP conditions determine the start and stop of data

clock signals to permit that transfer, while the other              transmission. The START condition is defined as a high

device(s) acts as the “slave.” All portions of the slave            to low transition of the SDA when the SCL is high. The

protocol are implemented in the SSP module’s hard-                  STOP condition is defined as a low to high transition of

ware, except general call support, while portions of the            the SDA when the SCL is high. Figure 11-14 shows the

master     protocol     need    to   be    addressed   in   the     START and STOP conditions. The master generates

PIC16CXX software. Table 11-3 defines some of the                    these conditions for starting and terminating data trans-

I2C bus terminology. For additional information on the              fer. Due to the definition of the START and STOP con-

I2C interface specification, refer to the Philips docu-              ditions, when data is being transmitted, the SDA line

ment “The I2C bus and how to use it.” #939839340011,                can only change state when the SCL line is low.

which can be obtained from the Philips Corporation.

In  the    I 2C  interface  protocol  each    device   has   an     FIGURE 11-14: START AND STOP

address. When a master wishes to initiate a data trans-                                         CONDITIONS

fer, it first transmits the address of the device that it

wishes to “talk” to. All devices “listen” to see if this is

their address. Within this address, a bit specifies if the

master wishes to read-from/write-to the slave device.                      SDA

The master and slave are always in opposite modes

(transmitter/receiver) of operation during a data trans-                   SCL  S                                        P

fer. That is they can be thought of as operating in either

of these two relations:                                                         Start     Change                Change   Stop

•   Master-transmitter and Slave-receiver                                      Condition  of Data               of Data  Condition

                                                                                          Allowed               Allowed

•   Slave-transmitter and Master-receiver

TABLE 11-3:            I2C BUS TERMINOLOGY

          Term                                                      Description

   Transmitter          The device that sends the data to the bus.

   Receiver             The device that receives the data from the bus.

   Master               The device which initiates the transfer, generates the clock and terminates the transfer.

   Slave                The device addressed by a master.

   Multi-master         More than one master device in a system. These masters can attempt to control the bus at the

                        same time without corrupting the message.

   Arbitration          Procedure that ensures that only one of the master devices will control the bus. This ensure that

                        the transfer data does not get corrupted.

   Synchronization      Procedure where the clock signals of two or more devices are synchronized.

© 1997 Microchip Technology Inc.                                                                                    DS30390E-page 89
PIC16C7X                                                                Applicable Devices

                                                                        72 73 73A 74 74A 76 77

11.4.2      ADDRESSING I2C DEVICES                                                FIGURE 11-17:                SLAVE-RECEIVER

There are t