datasheet

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

型号

产品描述

搜索

PIC16C774T-I/PT

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

器件描述

8-bit Microcontrollers - MCU 7KB 256 RAM 33 I/O

参数

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

PIC16C774T-I/PT器件文档内容

                                                                                PIC16C77X

      28/40-Pin, 8-Bit CMOS                            Microcontrollers w/ 12-Bit A/D

Microcontroller Core Features:                            Pin Diagram

•  High-performance RISC CPU

•  Only 35 single word instructions to learn                 600 mil.           PDIP, Windowed   CERDIP

•  All single cycle instructions except for program

   branches which are two cycle                              MCLR/VPP           1                40        RB7

                                                             RA0/AN0            2                39        RB6

•  Operating speed: DC - 20 MHz clock input                  RA1/AN1            3                38        RB5

                                                             RA2/AN2/VREF-/VRL  4                37        RB4

                        DC - 200 ns instruction cycle        RA3/AN3/VREF+/VRH  5                36        RB3/AN9/LVDIN

                                                             RA4/T0CKI          6                35        RB2/AN8

•  4K x 14 words of Program Memory,                          RA5/AN4            7   PIC16C774    34        RB1/SS

   256 x 8 bytes of Data Memory (RAM)                        RE0/RD/AN5         8                33        RB0/INT

                                                             RE1/WR/AN6         9                32        VDD

•  Interrupt capability (up to 14 internal/external          RE2/CS/AN7         10               31        VSS

                                                                   AVDD         11               30        RD7/PSP7

   interrupt sources)                                              AVSS         12               29        RD6/PSP6

                                                             OSC1/CLKIN         13               28        RD5/PSP5

•  Eight level deep hardware stack                           OSC2/CLKOUT        14               27        RD4/PSP4

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

•  Direct, indirect, and relative addressing modes           RC1/T1OSI/CCP2     16               25        RC6/TX/CK

                                                             RC2/CCP1           17               24        RC5/SDO

•  Power-on Reset (POR)                                      RC3/SCK/SCL        18               23        RC4/SDI/SDA

                                                             RD0/PSP0           19               22        RD3/PSP3

•  Power-up Timer (PWRT) and                                 RD1/PSP1           20               21        RD2/PSP2

   Oscillator Start-up Timer (OST)

•  Watchdog Timer (WDT) with its own on-chip RC           Peripheral Features:

   oscillator for reliable operation                      •  Timer0: 8-bit timer/counter with 8-bit prescaler

•  Programmable code-protection                           •  Timer1: 16-bit timer/counter with prescaler,

•  Power saving SLEEP mode                                   can be incremented during sleep via external

•  Selectable oscillator options                             crystal/clock

•  Low-power, high-speed CMOS EPROM                       •  Timer2: 8-bit timer/counter with 8-bit period

   technology                                                register, prescaler and postscaler

•  Fully static design                                    •  Two Capture, Compare, PWM modules

•  In-Circuit Serial Programming(ISCP                  •  Capture is 16-bit, max. resolution is 12.5 ns,

•  Wide operating voltage range:      2.5V to 5.5V           Compare is 16-bit, max. resolution is 200 ns,

•  High Sink/Source Current 25/25 mA                         PWM max. resolution is 10-bit

•  Commercial and Industrial temperature ranges        *  •  12-bit multi-channel Analog-to-Digital converter

•  Low-power consumption:                              *  •  On-chip absolute bandgap voltage reference

   -  < 2 mA @ 5V, 4 MHz                                     generator

   -  22.5 A typical @ 3V, 32 kHz                     *  •  Synchronous Serial Port (SSP) with SPI (Master

   -  < 1 A typical standby current                         Mode) and I2C

                                                       *  •  Universal Synchronous Asynchronous Receiver

                                                             Transmitter, supports high/low speeds and 9-bit

                                                             address mode (USART/SCI)

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

                                                             external RD, WR and CS controls

                                                       *  •  Programmable Brown-out detection circuitry for

   * Enhanced features                                       Brown-out Reset (BOR)

                                                       *  •  Programmable       Low-voltage detection circuitry

 1999-2013 Microchip Technology Inc.         Advance Information                                    DS30275B-page        1
PIC16C77X

Pin Diagrams

300 mil. SDIP,           SOIC,                                                      Windowed                                                     CERDIP, SSOP

MCLR/VPP                                    •1                                                                           28                      RB7

RA0/AN0                                     2                                                                            27                      RB6

RA1/AN1                                     3                                                                            26                      RB5

RA2/AN2/VREF-/VRL                           4                                       PIC16C773                            25                      RB4

RA3/AN3/VREF+/VRH                           5                                                                            24                      RB3/AN9/LVDIN

RA4/T0CKI                                   6                                                                            23                      RB2/AN8

               AVDD                         7                                                                            22                      RB1/SS

               AVSS                         8                                                                            21                      RB0/INT

OSC1/CLKIN                                  9                                                                            20                      VDD

OSC2/CLKOUT                                 10                                                                           19                      VSS

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

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

RC2/CCP1                                    13                                                                           16                      RC5/SDO

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

PLCC                     RA3/AN3/VREF+/VRH  RA2/AN2/VREF-/VRLRA1/AN1RA0/AN0    MCLR/VPP

                                                                                         NC    RB7      RB6       RB5        RB4    NC

                         6                  5                  4            3       2       1       44        43         42     41       40

RA4/T0CKI            7                                                                                                                       39       RB3/AN9/LVDIN

RA5/AN4              8                                                                                                                       38       RB2/AN8
RE0/RD/AN5                                                                                                                                            RB1/SS
RE1/WR/AN6           9                                                                                                                       37       RB0/INT

                     10                                                                                                                      36

RE2/CS/AN7           11                                                                                                                      35       VDD
AVDD                                                                                                                                                  VSS
                     12                     PIC16C774                                                                                        34

AVSS                 13                                                                                                                      33       RD7/PSP7

OSC1/CLKIN           14                                                                                                                      32       RD6/PSP6

OSC2/CLKOUT          15                                                                                                                      31       RD5/PSP5

RC0/T1OSO/T1CKI      16                                                                                                                      30       RD4/PSP4
                                                                                                                                                      RC7/RX/DT
               NC    17                                                                                                                      29

                         18                 19                 20           21      22      23      24        25         26     27       28

                         RC1/T1OSI/CCP2     RC2/CCP1           RC3/SCK/SCLRD0/PSP0RD1/PSP1RD2/PSP2  RD3/PSP3RC4/SDI/SDARC5/SDORC6/TX/CK  NC

                                                                                                                                                              MQFP        RC6/TX/CKRC5/SDORC4/SDI/SDARD3/PSP3RD2/PSP2RD1/PSP1RD0/PSP0RC3/SCK/SCLRC2/CCP1  RC1/T1OSI/CCP2

                                                                                                                                                              TQFP                                                                                                      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  AVSS

                                                                                                                                                                 VSS   6             PIC16C774                                                                                                28  AVDD

                                                                                                                                                                 VDD   7                                                                                                                      27  RE2/CS/AN7

                                                                                                                                                              RB0/INT  8                                                                                                                      26  RE1/WR/AN6

                                                                                                                                                               RB1/SS  9                                                                                                                      25  RE0/RD/AN5

                                                                                                                                                           RB2/AN8     10                                                                                                                     24  RA5/AN4

                                                                                                                                                      RB3/AN9/LVDIN    11                                                                                                                     23  RA4/T0CKI

                                                                                                                                                                           12        13     14         15      16      17      18      19         20       21                22

                                                                                                                                                                          NC         NC     RB4        RB5     RB6     RB7MCLR/VPP     RA0/AN0    RA1/AN1 RA2/AN2/VREF-/VRLRA3/AN3/VREF+/VRH

DS30275B-page  2                                                                                                                                 Advance Information                                                                               1999-2013 Microchip Technology                                 Inc.
                                                                         PIC16C77X

                 Key  Features

PICmicro™ Mid-Range Reference          Manual       PIC16C773            PIC16C774

                 (DS33023)

Operating Frequency                            DC - 20 MHz          DC - 20 MHz

Resets (and Delays)                            POR, BOR, MCLR, WDT  POR, BOR, MCLR,    WDT

                                               (PWRT, OST)          (PWRT, OST)

Program Memory (14-bit words)                  4K                   4K

Data Memory (bytes)                            256                  256

Interrupts                                     13                   14

I/O Ports                                      Ports A,B,C          Ports A,B,C,D,E

Timers                                         3                    3

Capture/Compare/PWM modules                    2                    2

Serial Communications                          MSSP, USART          MSSP, USART

Parallel Communications                        —                    PSP

12-bit Analog-to-Digital Module                6 input channels     10 input channels

Instruction Set                                35 Instructions      35 Instructions

 1999-2013 Microchip Technology Inc.  Advance Information                             DS30275B-page  3
PIC16C77X

Table of Contents

1.0  Device Overview ............................................................................................................................................................................ 5

2.0  Memory Organization................................................................................................................................................................... 11

3.0  I/O Ports ....................................................................................................................................................................................... 27

4.0  Timer0 Module ............................................................................................................................................................................. 39

5.0  Timer1 Module ............................................................................................................................................................................. 41

6.0  Timer2 Module ............................................................................................................................................................................. 45

7.0  Capture/Compare/PWM (CCP) Module(s)................................................................................................................................... 47

8.0  Master Synchronous Serial Port (MSSP) Module ........................................................................................................................ 53

9.0  Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART) ................................................................. 97

10.0 Voltage Reference Module and Low-voltage Detect.................................................................................................................. 113

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

12.0 Special Features of the CPU ..................................................................................................................................................... 127

13.0 Instruction Set Summary............................................................................................................................................................ 143

14.0 Development Support ................................................................................................................................................................ 145

15.0 Electrical Characteristics............................................................................................................................................................ 151

16.0 DC and AC Characteristics Graphs and Tables ........................................................................................................................ 173

17.0 Packaging Information ............................................................................................................................................................... 175

Appendix A:  Revision History ......................................................................................................................................................... 187

Appendix B:  Device Differences..................................................................................................................................................... 187

Appendix C:  Conversion Considerations........................................................................................................................................ 187

Index .................................................................................................................................................................................................. 189

Bit/Register Cross-Reference List...................................................................................................................................................... 196

On-Line Support................................................................................................................................................................................. 197

Reader Response .............................................................................................................................................................................. 198

PIC16C77X Product Identification System......................................................................................................................................... 199

                                            To Our Valued Customers

Most Current Data Sheet

To obtain the most up-to-date version of this data sheet, please check our Worldwide Web site at:

     http://www.microchip.com

You can determine the version of a data sheet by examining its literature number found on the bottom outside corner of any page.

The last character of the literature number is the version number.  e.g., DS30000A is version A of document DS30000.

Errata

An errata sheet may exist for current devices, describing minor operational differences (from the data sheet) and recommended

workarounds. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revi-

sion of silicon and revision of document to which it applies.

To determine if an errata sheet exists for a particular device, please check with one of the following:

•    Microchip’s Worldwide Web site; http://www.microchip.com

•    Your local Microchip sales office (see last page)

•    The Microchip Corporate Literature Center; U.S. FAX: (602) 786-7277

When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include liter-

ature number) you are using.

Corrections to this Data Sheet

We constantly strive to improve the quality of all our products and documentation. We have spent a great deal of time to ensure

that this document is 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:

•    Fill out and mail in the reader response form in the back of this data sheet.

•    E-mail us at webmaster@microchip.com.

We appreciate your assistance in making this a better document.

DS30275B-page  4                            Advance Information                      1999-2013 Microchip Technology Inc.
                                                                                                                 PIC16C77X

1.0       DEVICE OVERVIEW                                                            There    a    two  devices  (PIC16C773  and  PIC16C774)

This  document     contains      device-specific     information.                    covered by this datasheet. The PIC16C773 devices

Additional information may be found in the PICmicro™                                 come in 28-pin packages and the PIC16C774 devices

Mid-Range Reference Manual, (DS33023), which may                                     come in 40-pin packages. The 28-pin devices do not

be obtained from your local Microchip Sales Represen-                                have a Parallel Slave Port implemented.

tative or downloaded from the Microchip website. The                                 The following two figures are device block diagrams

Reference  Manual       should   be      considered     a  comple-                   sorted by pin number; 28-pin for Figure 1-1 and 40-pin

mentary document to this data sheet, and is highly rec-                              for Figure 1-2. The 28-pin and 40-pin pinouts are listed

ommended reading for a better understanding of the                                   in Table 1-1 and Table 1-2, respectively.

device  architecture        and  operation   of  the    peripheral

modules.

FIGURE 1-1:        PIC16C773 BLOCK DIAGRAM

                                             13                                 Data Bus           8             PORTA

                            EPROM                Program Counter                                                             RA0/AN0

                            Program                                                                                          RA1/AN1

                            Memory                                                   RAM                                     RA2/AN2/VREF-/VRL

                                                  8 Level Stack                      File                                    RA3/AN3/VREF+/VRH

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

                                                                                256 x 8

                   Program  14                                                  (1)

                   Bus                                               RAM  Addr             9                     PORTB

                            Instruction reg                                     Addr MUX                                     RB0/INT

                                                                                                                             RB1/SS

                                                 Direct Addr      7                           Indirect                       RB2/AN8

                                                                                           8     Addr                        RB3/AN9/LVDIN

                                                                                     FSR reg                                 RB7:RB4

                                                     8                               STATUS reg                  PORTC

                                                                                                                             RC0/T1OSO/T1CKI

                                                                                                                             RC1/T1OSI/CCP2

                                                                             3             MUX                               RC2/CCP1

                            Instruction                                                                                      RC3/SCK/SCL

                            Decode &                                                                                         RC4/SDI/SDA

                            Control               Power-up                                                                   RC5/SDO

                                                       Timer                                                                 RC6/TX/CK

                            Timing                Oscillator                    ALU

OSC1/CLKIN                  Generation           Start-up Timer                                                              RC7/RX/DT

OSC2/CLKOUT                                                               8

                                                  Power-on

                                                       Reset                    W reg

                                                  Watchdog

                                                       Timer

      Low-voltage           Precision             Brown-out

        Detect              Reference                  Reset

                                                 MCLR      VDD, VSS

                                 12-bit                    AVDD

                                 ADC                       AVSS

                                 Timer0                       Timer1                       Timer2

                                 CCP1,2                 Synchronous                        USART

                                                           Serial Port

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

 1999-2013 Microchip Technology Inc.                   Advance Information                                                  DS30275B-page      5
PIC16C77X

FIGURE  1-2:       PIC16C774           BLOCK DIAGRAM

                                       13                                Data Bus           8       PORTA

                      EPROM                Program Counter                                                     RA0/AN0

                      Program                                                                                  RA1/AN1

                      Memory                                                  RAM                              RA2/AN2/VREF-/VRL

                                           8 Level Stack                      File                             RA3/AN3/VREF+/VRH

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

                                                                         256 x 8                               RA5/AN4

             Program  14                                                 (1)

               Bus                                            RAM  Addr             9               PORTB

                      Instruction reg                                    Addr MUX                              RB0/INT

                                                                                                               RB1/SS

                                           Direct Addr     7                           Indirect                RB2/AN8

                                                                                    8    Addr                  RB3/AN9/LVDIN

                                                                              FSR      reg                     RB7:RB4

                                           8                                  STATUS reg            PORTC

                                                                                                               RC0/T1OSO/T1CKI

                                                                                                               RC1/T1OSI/CCP2

                                                                      3             MUX                        RC2/CCP1

                      Instruction                                                                              RC3/SCK/SCL

                      Decode &                                                                                 RC4/SDI/SDA

                      Control              Power-up                                                            RC5/SDO

                                                 Timer                                                         RC6/TX/CK

                      Timing               Oscillator                    ALU

OSC1/CLKIN            Generation           Start-up Timer                                                      RC7/RX/DT

OSC2/CLKOUT                                                        8                                PORTD

                                           Power-on

                                                 Reset                   W reg

                                           Watchdog

                                                 Timer                                                         RD7/PSP7:RD0/PSP0

Low-voltage           Precision            Brown-out

Detect                Reference                  Reset

                                                                         Parallel Slave Port        PORTE

                                           MCLR  VDD, VSS                                                      RE0/AN5/RD

                                                                                                               RE1/AN6/WR

                          12-bit                 AVDD                                                          RE2/AN7/CS

                          ADC                    AVSS

                          Timer0                        Timer1                      Timer2

                          CCP1,2                 Synchronous                        USART

                                                 Serial Port

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

DS30275B-page  6                                 Advance Information                               1999-2013  Microchip Technology Inc.
                                                                                                      PIC16C77X

TABLE 1-1            PIC16C773 PINOUT DESCRIPTION

                             DIP,

Pin Name                     SSOP,       I/O/P  Buffer      Description

                             SOIC        Type   Type

                             Pin#

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

OSC2/CLKOUT                  10          O      —           Oscillator crystal output. Connects to crystal or resonator in 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           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           I/O    TTL              RA0 can also be analog input0

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

RA2/AN2/VREF-/VRL            4           I/O    TTL              RA2 can also be analog input2 or negative analog reference voltage

                                                                 input or internal voltage reference low

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

                                                                 input or internal voltage reference high

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

                                                                 open drain type.

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

                                                            grammed for internal weak pull-up on all inputs.

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

RB1/SS                       22          I/O    TTL/ST(1)        RB1 can also be the SSP slave select

RB2/AN8                      23          I/O    TTL              RB2 can also be analog input8

RB3/AN9/LVDIN                24          I/O    TTL              RB3 can also be analog input9 or the low voltage detect input

                                                                 reference

RB4                          25          I/O    TTL              Interrupt on change pin.

RB5                          26          I/O    TTL              Interrupt on change pin.

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

RB7                          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          I/O    ST               RC0 can also be the Timer1 oscillator output or Timer1 clock input.

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

                                                                 Compare2 output/PWM2 output.

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

                                                                 output.

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

                                                                 SPI and I2C modes.

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

                                                                 data I/O (I2C mode).

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

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

                                                                 Synchronous Clock.

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

                                                                 Synchronous Data.

AVSS                         8           P                  Ground reference for A/D converter

AVDD                         7           P                  Positive supply for A/D converter

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

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

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

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

Note  1:  This buffer  is a  Schmitt Trigger  input when configured for the multiplexed function.

      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.

 1999-2013 Microchip Technology Inc.           Advance Information                                                    DS30275B-page  7
PIC16C77X

TABLE 1-2            PIC16C774 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/VREF-/VRL    4             5   21    I/O            TTL           RA2 can also be analog input2 or negative analog

                                                                          reference voltage input or internal voltage reference

                                                                          low

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

                                                                          reference voltage input or internal voltage reference

                                                                          high

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/AN4              7             8   24    I/O            TTL           RA5 can also be analog input4

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

                                                                          ware 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/SS               34          37    9     I/O    TTL/ST(1)             RB1 can also be the SSP slave select

RB2/AN8              35          38    10    I/O            TTL           RB2 can also be analog input8

RB3/AN9/LVDIN        36          39    11    I/O            TTL           RB3 can also be analog input9 or input reference for

                                                                          low voltage detect

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 for the multiplexed function.

      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.

DS30275B-page  8                           Advance Information                                   1999-2013 Microchip Technology Inc.
                                                                                                          PIC16C77X

TABLE 1-2            PIC16C774 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.

AVss                 12          13        29      P                      Ground reference for A/D converter

AVDD                 11          12        28      P                      Positive supply for A/D converter

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

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

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

                                 40        33,34                          should 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 for the multiplexed function.

      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.

 1999-2013 Microchip Technology Inc.          Advance Information                                                     DS30275B-page       9
PIC16C77X

NOTES:

DS30275B-page  10  Advance Information   1999-2013 Microchip Technology Inc.
                                                                                           PIC16C77X

2.0        MEMORY ORGANIZATION                                 2.2       Data Memory Organization

There     are  two  memory  blocks      in  each    of  these  The     data  memory  is  partitioned  into  multiple  banks

PICmicro®      microcontrollers.   Each     block       (Pro-  which contain the General Purpose Registers and the

gram Memory and Data Memory) has its own bus                   Special Function Registers. Bits RP1 and RP0 are the

so that concurrent access can occur.                           bank select bits.

Additional information on device memory may be found           RP1           RP0     (STATUS<6:5>)

in   the  PICmicro     Mid-Range      Reference    Manual,

(DS33023).                                                     = 00         Bank0

                                                               = 01         Bank1

2.1        Program Memory Organization                         = 10         Bank2

                                                               = 11         Bank3

The  PIC16C77X      PICmicros  have     a   13-bit  program    Each bank extends up to 7Fh (128 bytes). The lower

counter capable of addressing an 8K x 14 program               locations of each bank are reserved for the Special

memory space. Each device has 4K x 14 words of pro-            Function Registers. Above the Special Function Regis-

gram memory. Accessing a location above the physi-             ters are General Purpose Registers, implemented as

cally implemented address will cause a wraparound.             static  RAM.  All    implemented   banks     contain   special

The reset vector is at 0000h and the interrupt vector is       function  registers.  Some  “high  use”      special  function

at 0004h.                                                      registers from one bank may be mirrored in another

                                                               bank for code reduction and quicker access.

FIGURE 2-1:         PROGRAM MEMORY MAP

                    AND STACK                                  2.2.1     GENERAL PURPOSE REGISTER FILE

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

                         PC<12:0>                              rectly through the File Select Register FSR.

          CALL, RETURN             13

          RETFIE, RETLW

                         Stack Level 1

                         Stack Level 2

                         Stack Level 8

                         Reset Vector             0000h

                     Interrupt Vector             0004h

                                                  0005h

    On-chip              Page 0

Program                                           07FFh

    Memory                                        0800h

                         Page 1

                                                  0FFFh

                                                  1000h

                                                  3FFFh

 1999-2013 Microchip Technology Inc.             Advance      Information                            DS30275B-page         11
PIC16C77X

FIGURE 2-2:    REGISTER FILE MAP

                             File                        File                        File                        File

                             Address                     Address                     Address                     Address

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

               TMR0          01h      OPTION_REG         81h      TMR0               101h     OPTION_REG         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      SSPCON2            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                         117h                        197h

               RCSTA         18h      TXSTA              98h                         118h                        198h

               TXREG         19h      SPBRG              99h                         119h                        199h

               RCREG         1Ah                         9Ah                         11Ah                        19Ah

               CCPR2L        1Bh      REFCON             9Bh                         11Bh                        19Bh

               CCPR2H        1Ch      LVDCON             9Ch                         11Ch                        19Ch

               CCP2CON       1Dh                         9Dh                         11Dh                        19Dh

               ADRESH        1Eh      ADRESL             9Eh                         11Eh                        19Eh

               ADCON0        1Fh      ADCON1             9Fh                         11Fh                        19Fh

                             20h                         A0h                         120h                        1A0h

               General                General                     General

               Purpose                Purpose                     Purpose

               Register               Register                    Register

               96 Bytes               80 Bytes           EFh      80 Bytes                                       1EFh

                                                                                     6Fh

                                      accesses           F0h      accesses           70h      accesses           1F0h

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

                             7Fh                         FFh                         17Fh                        1FFh

               Bank 0                 Bank 1                      Bank 2                      Bank 3

(1)  Not  implemented on PIC16C773.

          Unimplemented data memory   locations, read    as '0'.

     *    Not a physical register.

DS30275B-page  12                     Advance Information                             1999-2013 Microchip Technology     Inc.
                                                                                                                      PIC16C77X

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

                                                                          sets; core (CPU) and peripheral. Those registers asso-

The Special Function Registers are registers used by                      ciated with the core functions are described in detail in

the CPU and Peripheral Modules for controlling the                        this               section.   Those  related   to        the  operation      of  the

desired operation of the device. These registers are                      peripheral              features     are    described         in  detail     in  that

implemented as static RAM. A list of these registers is                   peripheral feature section.

given in Table 2-1.

TABLE       2-1      PIC16C77X 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    —                 —            PORTA5(5)  PORTA Data Latch when written: PORTA<4:0> pins when read                     --0x 0000      --0u 0000

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

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

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     LVDIF             —            —               –          BCLIF              —            —         CCP2IF             0--- 0--0      0--- 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     ADDEN                FERR           OERR         RX9D           0000 000x          0000 000x

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         ADRESH   A/D High Byte Result Register                                                                                      xxxx xxxx          uuuu uuuu

1Fh         ADCON0   ADCS1     ADCS0                CHS2       CHS1            CHS0          GO/DONE           CHS3      ADON           0000 0000          0000 0000

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       contents 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 28-pin devices, always maintain these bits clear.

        4:  These registers can be addressed from any bank.

        5:  These registers/bits are not implemented on the 28-pin devices read as '0'.

 1999-2013 Microchip Technology Inc.               Advance Information                                                                 DS30275B-page      13
PIC16C77X

TABLE       2-1          PIC16C77X 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_REG   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        —              —           bit5(5)    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         LVDIE          —              —       —              BCLIE           —         —                CCP2IE    0--- 0--0     0--- 0--0

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

8Fh               —      Unimplemented                                                                                             —             —

90h               —      Unimplemented                                                                                             —             —

91h         SSPCON2      GCEN      AKSTAT           AKDT       AKEN           RCEN            PEN       RSEN             SEN       0000 0000     0000 0000

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         REFCON       VRHEN     VRLEN            VRHOEN     VRLOEN                    —    —         —                —         0000 ----     0000 ----

9Ch         LVDCON       —              —           BGST       LVDEN                     LV3  LV2       LV1              LV0       --00 0101     --00 0101

9Ah               —      Unimplemented                                                                                             —             —

9Eh         ADRESL       A/D Low Byte Result Register                                                                              xxxx xxxx     uuuu uuuu

9Fh         ADCON1       ADFM      VCFG2            VCFG1      VCFG0          PCFG3           PCFG2     PCFG1            PCFG0     0000 0000     0000 0000

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  contents 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 28-pin devices, always maintain these bits clear.

        4:  These registers can be addressed from any bank.

        5:  These registers/bits are not implemented on the 28-pin devices read as '0'.

DS30275B-page        14                                Advance Information                               1999-2013 Microchip Technology Inc.
                                                                                                                PIC16C77X

TABLE        2-1      PIC16C77X 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 11xx  uuuu 11uu

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_REG  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 contents 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 28-pin devices, always maintain these bits clear.

         4:  These registers can be addressed from any bank.

         5:  These registers/bits are not implemented on the 28-pin devices read as '0'.

 1999-2013 Microchip Technology Inc.                Advance Information                                                          DS30275B-page  15
PIC16C77X

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

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

The STATUS register, shown in Figure 2-3, contains                  as 000u      u1uu (where u = unchanged).

the arithmetic status of the ALU, the RESET status and              It is recommended, therefore, that only BCF,

the bank select bits for data memory.                                                                                        BSF,

                                                                    SWAPF and MOVWF instructions are used to alter the

The STATUS register can be the destination for any                  STATUS       register  because  these  instructions    do  not

instruction, as with any other register. If the STATUS              affect the Z, C or DC bits from the STATUS register. For

register is the destination for an instruction that affects         other instructions, not affecting any status bits, see the

the Z, DC or C bits, then the write to these three bits is          "Instruction Set Summary."

disabled. These bits are set or cleared according to the

device logic. Furthermore, the TO and PD bits are not                   Note 1:   The C and DC bits operate as a borrow and

writable. Therefore, the result of an instruction with the                        digit borrow bit, respectively, in subtraction.

STATUS register as destination may be different than                              See the SUBLW and SUBWF instructions for

intended.                                                                         examples.

FIGURE 2-3:    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.

DS30275B-page  16                           Advance Information                                1999-2013 Microchip Technology Inc.
                                                                                           PIC16C77X

2.2.2.2     OPTION_REG REGISTER

                                                                    Note:       To achieve a 1:1 prescaler assignment for

The OPTION_REG register is a readable and writable                              the TMR0 register, assign the prescaler to

register which contains various control bits to configure                       the Watchdog Timer.

the  TMR0   prescaler/WDT  postscaler      (single  assign-

able register known also as the prescaler), the External

INT Interrupt, TMR0, and the weak pull-ups on PORTB.

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

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

     RBPU   INTEDG     T0CS         T0SE           PSA       PS2    PS1         PS0    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

 1999-2013 Microchip Technology Inc.              Advance Information                                  DS30275B-page       17
PIC16C77X

2.2.2.3   INTCON REGISTER

                                                                Note:     Interrupt flag bits get set when an interrupt

The INTCON Register is a readable and writable regis-                     condition occurs regardless of the state of

ter which contains various enable and flag bits for the                   its corresponding enable bit or the global

TMR0 register overflow, RB Port change and External                       enable bit, GIE (INTCON<7>). User soft-

RB0/INT pin interrupts.                                                   ware should ensure the appropriate inter-

                                                                          rupt flag bits are clear prior to enabling an

                                                                          interrupt.

FIGURE 2-5:    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: 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:  IINTE: 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

DS30275B-page  18                           Advance Information                       1999-2013 Microchip Technology Inc.
                                                                                           PIC16C77X

2.2.2.4   PIE1 REGISTER                                            Note:   Bit  PEIE   (INTCON<6>)         must  be  set  to

This register contains the individual enable bits for the                  enable any peripheral interrupt.

peripheral interrupts.

FIGURE 2-6:  PIE1 REGISTER (ADDRESS 8Ch)

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

PSPIE(1)     ADIE       RCIE           TXIE  SSPIE         CCP1IE  TMR2IE  TMR1IE      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:   PSPIE is reserved on the 28-pin devices, always maintain this    bit clear.

 1999-2013 Microchip Technology Inc.        Advance Information                                        DS30275B-page     19
PIC16C77X

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

This register contains the individual  flag  bits  for  the                 condition occurs regardless of the state of

peripheral interrupts.                                                      its corresponding enable bit or the global

                                                                            enable bit, GIE (INTCON<7>). User soft-

                                                                            ware should ensure the appropriate inter-

                                                                            rupt flag bits are clear prior to enabling an

                                                                            interrupt.

FIGURE 2-7:    PIR1 REGISTER (ADDRESS 0Ch)

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

PSPIF(1)       ADIF     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:   PSPIF is reserved on the 28-pin devices, always maintain this bit clear.

DS30275B-page  20                            Advance Information                        1999-2013 Microchip Technology Inc.
                                                                                 PIC16C77X

2.2.2.6       PIE2 REGISTER

This register contains the individual enable bits for the

CCP2, SSP bus collision, and low voltage detect inter-

rupts.

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

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

LVDIE         —    —                   —       BCLIE       —    —    CCP2IE  R   = Readable bit

bit7                                                                 bit0    W   = Writable bit

                                                                             U   = Unimplemented bit,

                                                                                 read as ‘0’

                                                                             -n  = Value at POR reset

bit     7     LVDIE: Low-voltage Detect Interrupt Enable   bit

              1 = LVD Interrupt is enabled

              0 = LVD Interrupt is disabled

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

bit     3:    BCLIE: Bus Collision Interrupt Enable bit

              1 = Bus Collision interrupt is enabled

              0 = Bus Collision interrupt is disabled

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

bit     0:    CCP2IE: CCP2 Interrupt Enable bit

              1 = Enables the CCP2 interrupt

              0 = Disables the CCP2 interrupt

 1999-2013 Microchip Technology Inc.          Advance Information                            DS30275B-page  21
PIC16C77X

2.2.2.7   PIR2 REGISTER                                      .

                                                                Note:       Interrupt flag bits get set when an interrupt

This register contains the CCP2, SSP Bus Collision,                         condition occurs regardless of the state of

and Low-voltage detect interrupt flag bits.                                 its corresponding enable bit or the global

                                                                            enable bit, GIE (INTCON<7>). User soft-

                                                                            ware should ensure the appropriate inter-

                                                                            rupt flag bits are clear prior to enabling an

                                                                            interrupt.

FIGURE 2-9:       PIR2 REGISTER (ADDRESS 0Dh)

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

LVDIF          —        —  —                 BCLIF      —       —           CCP2IF      R   = Readable bit

bit7                                                                          bit0      W   = Writable bit

                                                                                        U   = Unimplemented bit,

                                                                                            read as ‘0’

                                                                                        -n  = Value at POR reset

bit 7:    LVDIF: Low-voltage Detect Interrupt Flag bit

          1 = The supply voltage has fallen below the specified LVD voltage (must be cleared in software)

          0 = The supply voltage is greater than the specified LVD voltage

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

bit 3:    BCLIF: Bus Collision Interrupt Flag bit

          1 = A bus collision has occurred while the SSP module configured in I2C Master was transmitting

          (must be cleared in software)

          0 = No bus collision occurred

bit 2-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

DS30275B-page  22                            Advance Information                     1999-2013 Microchip Technology Inc.
                                                                                         PIC16C77X

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

The Power Control (PCON) register contains a flag bit                     must then be set by the user and checked

to  allow     differentiation  between  a   Power-on  Reset               on  subsequent  resets       to  see   if  BOR     is

(POR)     to  an  external     MCLR  Reset   or  WDT  Reset.              clear, indicating a brown-out has occurred.

Those devices with brown-out detection circuitry con-                     The BOR status bit is a don't care and is

tain an additional bit to differentiate a Brown-out Reset                 not necessarily predictable if the brown-out

condition from a Power-on Reset condition.                                circuit is disabled (by clearing the BODEN

                                                                          bit in the Configuration word).

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

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

          —       —            —        —        —            —    POR    BOR        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: 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)

 1999-2013 Microchip Technology Inc.            Advance Information                                   DS30275B-page         23
PIC16C77X

2.3      PCL and   PCLATH                                   2.4        Program Memory Paging

The program counter (PC) specifies the address of the       PIC16C77X devices are capable of addressing a con-

instruction to fetch for execution. The PC is 13 bits       tinuous 8K word block of program memory. The CALL

wide. The low byte is called the PCL register. This reg-    and GOTO instructions provide only 11 bits of address

ister is readable and writable. The high byte is called     to  allow  branching     within  any     2K  program   memory

the PCH register. This register contains the PC<12:8>       page.  When  doing       a  CALL     or  GOTO     instruction   the

bits and is not directly readable or writable. All updates  upper  2     bits  of    the  address        are  provided      by

to the PCH register go through the PCLATH register.         PCLATH<4:3>. When doing a CALL or GOTO instruc-

                                                            tion, the user must ensure that the page select bits are

2.3.1    STACK                                              programmed   so      that   the  desired     program   memory

The stack allows a combination of up to 8 program calls     page is addressed. If a return from a CALL instruction

and interrupts to occur. The stack contains the return      (or interrupt) is executed, the entire 13-bit PC is pushed

address from this branch in program execution.              onto   the   stack.      Therefore,      manipulation       of  the

                                                            PCLATH<4:3>        bits  are  not    required     for  the  return

Midrange devices have an 8 level deep x 13-bit wide         instructions (which POPs the address from the stack).

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 modified when the stack is PUSHed or

POPed.

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

DS30275B-page  24          Advance                          Information             1999-2013 Microchip Technology Inc.
                                                                                                PIC16C77X

The INDF register is not a physical register. Address-               EXAMPLE 2-1:         HOW TO CLEAR RAM

ing  INDF   actually  addresses        the  register  whose                               USING INDIRECT

address is contained in the FSR register (FSR is a                                        ADDRESSING

pointer). This is indirect addressing.

Reading INDF itself indirectly (FSR = 0) will produce                              movlw  0x20   ;initialize      pointer

                                                                                   movwf  FSR    ;  to   RAM

00h. Writing to the INDF register indirectly results in a            NEXT          clrf   INDF   ;clear  INDF     register

no-operation (although STATUS bits may be affected).                               incf   FSR    ;inc   pointer

A  simple  program    to  clear  RAM    locations     20h-2Fh                      btfss  FSR,4  ;all   done?

using indirect addressing is shown in Example 2-1.                                 goto   NEXT   ;NO,   clear  next

                                                                     CONTINUE

                                                                                   :             ;YES,   continue

                                                                     An effective 9-bit address is obtained by concatenating

                                                                     the 8-bit FSR register and the IRP bit (STATUS<7>), as

                                                                     shown in Figure 2-11.

FIGURE 2-11:       DIRECT/INDIRECT ADDRESSING

                Direct Addressing                                                           Indirect Addressing

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

   bank select  location select                                                    bank select           location select

                                             00       01       10          11

                                        00h           80h      100h     180h

                    Data

                    Memory(1)

                                        7Fh           FFh      17Fh     1FFh

                                            Bank 0    Bank 1   Bank  2     Bank 3

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

 1999-2013 Microchip Technology Inc.               Advance Information                                  DS30275B-page        25
PIC16C77X

NOTES:

DS30275B-page  26  Advance Information   1999-2013 Microchip Technology Inc.
                                                                                                   PIC16C77X

3.0        I/O PORTS                                                   FIGURE       3-1:  BLOCK DIAGRAM OF

Some pins for these I/O ports are multiplexed with an                                     RA3:RA2 PINS

alternate    function  for  the  peripheral  features       on   the   Data

device. In general, when a peripheral is enabled, that                 bus          D        Q

pin may not be used as a general purpose I/O pin.

Additional information on I/O ports may be found in the                WR                                              VDD

PICmicro™         Mid-Range            Reference           Manual,     Port         CK       Q

(DS33023).                                                                                                             P

                                                                                    Data  Latch

3.1        PORTA and the TRISA Register                                             D        Q                         N        I/O pin(1)

PORTA is a 6-bit wide bi-directional port for the 40/44                WR

pin devices and is 5-bits wide for the 28-pin devices.                 TRIS                                            VSS

PORTA<5> is not on the 28-pin devices. The corre-                                   CK       Q                 Analog

sponding data direction register is TRISA. Setting a                                TRIS  Latch                input

TRISA bit (=1) will make the corresponding PORTA pin                                                           mode

an input, i.e., put the corresponding output driver in a

hi-impedance      mode.     Clearing   a   TRISA      bit  (=0)  will

make the corresponding PORTA pin an output, i.e., put                                        RD TRIS                            TTL

the contents of the output latch on the selected pin.                                                                           input

                                                                                                                                buffer

Reading the PORTA register reads the status of the                                                 Q           D

pins whereas writing to it will write to the port latch. All

write  operations      are  read-modify-write         operations.                                              EN

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.                                                            RD PORT

Pin RA4 is multiplexed with the Timer0 module clock

input to become the RA4/T0CKI pin. The RA4/T0CKI                       To A/D Converter

pin is a Schmitt Trigger input and an open drain output.

All other RA port pins have TTL input levels and full

CMOS output drivers.

Other PORTA pins are multiplexed with analog inputs

and analog VREF inputs and precision on-board refer-                   VRH, VRL

ences  (VRL/VRH).        The     operation   of      each   pin    is

selected   by    clearing/setting     the   control   bits  in   the

ADCON1 register (A/D Control Register1).

Note:        On a Power-on Reset, these pins are con-

             figured as analog inputs and read as '0'.                 VRHOEN, VRLOEN

The TRISA register controls the direction of the RA

pins, even when they are being used as analog inputs.

The user must ensure the bits in the TRISA register are

maintained set when using them as analog inputs.                       Sense input for

                                                                       VRO+, VRO- amplifier

EXAMPLE 3-1:           INITIALIZING PORTA

BCF        STATUS,     RP0  ;

CLRF       PORTA            ;    Initialize       PORTA     by

                            ;    clearing    output                    Note  1:     I/O pins have  protection  diodes  to  VDD  and

                            ;    data   latches                                     VSS.

BSF        STATUS,     RP0  ;    Select     Bank  1

MOVLW      0xCF             ;    Value     used   to

                            ;    initialize       data

                            ;    direction

MOVWF      TRISA            ;    Set   RA<3:0>    as       inputs

                            ;    RA<5:4>    as    outputs

                            ;    TRISA<7:6>       are      always

                            ;    read   as  '0'.

 1999-2013 Microchip Technology Inc.                  Advance         Information                             DS30275B-page            27
PIC16C77X

FIGURE       3-2:  BLOCK DIAGRAM OF                                          FIGURE 3-3:          BLOCK DIAGRAM            OF

                   RA1:RA0 AND RA5 PINS                                                           RA4/T0CKI PIN

Data                                                                             Data

bus                                                                              bus           D   Q

             D         Q                                                         WR

WR                                                VDD                            PORT          CK  Q

Port                                                                                                                    N       I/O pin(1)

             CK        Q                          P                                       Data Latch

             Data  Latch                                                                       D   Q                VSS

                                                  N           pin(1)             WR

             D         Q                                 I/O                     TRIS          CK  Q             Schmitt

                                                                                                                 Trigger

WR                                                                                        TRIS Latch             input

TRIS                                              VSS                                                            buffer

             CK        Q               Analog

             TRIS  Latch               input                                                      RD TRIS

                                       mode

                                                                                                           Q     D

                       RD TRIS                           TTL

                                                         input                                                ENEN

                                                         buffer                  RD PORT

                                 Q            D

                                                                                 TMR0 clock input

                                              EN

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

RD PORT

To A/D Converter

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

             VSS.

TABLE 3-1          PORTA FUNCTIONS

Name                             Bit#         Buffer     Function

RA0/AN0                          bit0         TTL        Input/output or analog input0

RA1/AN1                          bit1         TTL        Input/output or analog input1

RA2/AN2/VREF-/VRL                bit2         TTL        Input/output or analog input2 or VREF- input or internal reference

                                                         voltage low

RA3/AN3/VREF+/VRH                bit3         TTL        Input/output or analog input or VREF+ input or output of internal

                                                         reference voltage high

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

                                                         Output is open drain type

RA5/AN4(1)                       bit5         TTL        Input/output or analog input

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

Note 1:      RA5 is reserved on the 28-pin devices, maintain this bit clear.

TABLE 3-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(1)     —            —          RA5         RA4     RA3        RA2    RA1        RA0     --0x  0000      --0u  0000

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

9Fh          ADCON1       ADFM      VCFG2         VCFG1  VCFG0        PCFG3      PCFG2  PCFG1      PCFG0   0000  0000      0000  0000

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

Note 1:      PORTA<5>, TRISA<5> are reserved on the 28-pin devices, maintain these bits clear.

DS30275B-page      28                                  Advance Information                          1999-2013 Microchip Technology Inc.
                                                                                                           PIC16C77X

3.2        PORTB and the TRISB Register                                    The RB1 pin is multiplexed with the SSP module slave

                                                                           select (RB1/SS).

PORTB is an 8-bit wide bi-directional port. The corre-

sponding data direction register is TRISB. Setting a                       FIGURE       3-5:      BLOCK DIAGRAM OF                     RB1/SS

TRISB bit (=1) will make the corresponding PORTB pin                                              PIN

an input, i.e., put the corresponding output driver in a                                                                               VDD

hi-impedance      mode.     Clearing  a  TRISB        bit  (=0)      will  RBPU(2)

make the corresponding PORTB pin an output, i.e., put                                                                                   P  weak

                                                                                                                                           pull-up

the contents of the output latch on the selected pin.                      Data bus               Data Latch

                                                                                                  D        Q

EXAMPLE 3-1:        INITIALIZING PORTB                                     WR Port                                                          I/O

BCF        STATUS,  RP0      ;                                                                         CK                                   pin(1)

CLRF       PORTB             ;  Initialize        PORTB       by                                  TRIS Latch

                             ;  clearing      output                                              D        Q

                             ;  data   latches                                                                                 TTL

                                                                           WR TRIS                                             Input

BSF        STATUS,  RP0      ;  Select   Bank     1                                                    CK                      Buffer

MOVLW      0xCF              ;  Value    used     to

                             ;  initialize        data

                             ;  direction

MOVWF      TRISB             ;  Set   RB<3:0>     as       inputs                                 RD TRIS

                             ;  RB<5:4>       as  outputs                                                          Q           D

                             ;  RB<7:6>       as  inputs

Each of the PORTB pins has a weak internal pull-up. A                                             RD Port                      EN

single control bit can turn on all the pull-ups. This is per-

formed by clearing bit RBPU (OPTION_REG<7>). The                           SS input

weak pull-up is automatically turned off when the port                                                     Schmitt Trigger

pin is configured as an output. The pull-ups are dis-                                                      Buffer                       RD Port

abled on a Power-on Reset.                                                 Note 1: I/O pins have diode protection to VDD and VSS.

The RB0 pin is multiplexed with the external interrupt                          2: To enable weak pull-ups, set the appropriate TRIS bit(s)

(RB0/INT).                                                                           and clear the RBPU bit (OPTION_REG<7>).

                                                                           The  RB2     pin   is  multiplexed      with     analog     channel      8

FIGURE     3-4:     BLOCK DIAGRAM OF                       RB0 PIN         (RB2/AN8).

                                                           VDD

RBPU(2)                                                       weak         FIGURE       3-6:      BLOCK DIAGRAM OF

                                                           P  pull-up                             RB2/AN8 PIN

Data bus            Data Latch                                                                                                         VDD

                         D      Q                                          RBPU(2)

                                                                  I/O                                                                   P  weak

WR Port                  CK                                       pin(1)                                                                   pull-up

                                                                           Data bus           Data Latch

                    TRIS Latch                                                                D   Q

                         D      Q                 TTL                                                                                       I/O

                                                  Input                    WR Port            CK                                            pin(1)

WR TRIS                  CK                       Buffer

                                                                                              TRIS Latch

                                                                                              D   Q

                                                                           WR TRIS                                 Analog

                    RD TRIS                                                                   CK                   input mode

                                         Q        D                                                                            TTL

                                                                                                                               Input

                                                                                                                               Buffer

                    RD Port                       EN                                          RD TRIS

                                                                                                              Q    D

RB0/INT

                             Schmitt Trigger                                                      RD Port          EN

                             Buffer                        RD Port

Note 1:    I/O pins have diode protection to VDD and VSS.                  To A/D converter

       2:  To enable weak pull-ups, set the appropriate TRIS bit(s)

           and clear the RBPU bit (OPTION_REG<7>).                                                                             RD Port

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

                                                                                2: To enable weak pull-ups, set the appropriate TRIS bit(s)

                                                                                     and clear the RBPU bit (OPTION_REG<7>).

 1999-2013 Microchip Technology Inc.                      Advance         Information                                      DS30275B-page        29
PIC16C77X

The RB3 pin is multiplexed with analog channel 9 and                 Four of PORTB’s pins, RB7:RB4, have an interrupt on

the low voltage detect input (RB3/AN9/LVDIN)                         change feature. Only pins configured as inputs can

                                                                     cause this interrupt to occur (i.e. any RB7:RB4 pin con-

FIGURE    3-7:        BLOCK DIAGRAM OF                               figured as an output is excluded from the interrupt on

                      RB3/AN9/LVDIN PIN                              change comparison). The input pins (of RB7:RB4) are

                                                        VDD          compared with the old value latched on the last read of

RBPU(2)                                                     weak     PORTB.        The   “mismatch”  outputs  of   RB7:RB4                are

                                                         P  pull-up  OR’ed together to generate the RB Port Change Inter-

Data bus        Data Latch                                           rupt with flag bit RBIF (INTCON<0>).

                D     Q                                              This interrupt can wake the device from SLEEP. The

WR Port                                                      I/O     user, in the interrupt service routine, can clear the inter-

                CK                                           pin(1)

                                                                     rupt in the following manner:

                TRIS Latch

                D     Q                                              a)  Any read or write of PORTB. This will end the

WR TRIS                           Analog                                 mismatch condition.

                CK                input mode                         b)  Clear flag bit RBIF.

                                  or LVD input

                                  mode          TTL                  A mismatch condition will continue to set flag bit RBIF.

                                                Input                Reading PORTB will end the mismatch condition, and

                                                Buffer

                RD TRIS                                              allow flag bit RBIF to be cleared.

                               Q           D                         The interrupt on change feature is recommended for

                      RD Port     EN                                 wake-up on key depression operation and operations

                                                                     where PORTB is only used for the interrupt on change

                                                                     feature. Polling of PORTB is not recommended while

To A/D converter and  LVD reference input                            using the interrupt on change feature.

                                                RD Port

                                                                     FIGURE        3-8:  BLOCK DIAGRAM             OF

Note 1: I/O pins have diode protection to VDD and VSS.                                   RB7:RB4 PINS

2: To enable weak pull-ups, set the appropriate TRIS bit(s)                                                                VDD

          and clear the RBPU bit (OPTION_REG<7>).

                                                                     RBPU(2)                                                    weak

                                                                                                                             P  pull-up

                                                                     Data bus            Data Latch

                                                                                         D        Q

                                                                     WR Port                                                    I/O

                                                                                         CK                                     pin(1)

                                                                                         TRIS Latch

                                                                                         D        Q

                                                                     WR TRIS             CK                        TTL

                                                                                                                   Input

                                                                                                                   Buffer             ST

                                                                                                                                Buffer

                                                                                         RD TRIS            Latch

                                                                                                         Q    D

                                                                                         RD Port              EN                Q1

                                                                         Set RBIF

                                                                         From other                      Q    D

                                                                         RB7:RB4 pins                                           RD Port

                                                                                                              EN                Q3

                                                                     RB7:RB6 in serial programming mode

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

                                                                         2: To enable weak pull-ups, set the appropriate TRIS bit(s)

                                                                               and clear the RBPU bit (OPTION_REG<7>).

DS30275B-page   30                                      Advance      Information          1999-2013 Microchip Technology Inc.
                                                                                              PIC16C77X

TABLE 3-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/SS             bit1  TTL/ST(3)            Input/output pin or SSP slave select.   Internal software programmable

                                              weak pull-up.

RB2/AN8            bit2         TTL           Input/output pin or analog input8.   Internal software programmable

                                              weak pull-up.

RB3/AN9/LVDIN      bit3         TTL           Input/output pin or analog input9 or Low-voltage detect input.     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.

     3:    This buffer is a Schmitt Trigger input when used as the SSP slave select.

TABLE 3-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  11xx  uuuu  11uu

86h, 186h  TRISB         PORTB Data Direction Register                                               1111  1111  1111  1111

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

9Fh        ADCON1        ADFM          VCFG2  VCFG1  VCFG0     PCFG3  PCFG2        PCFG1      PCFG0  0000  0000  0000  0000

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

 1999-2013 Microchip Technology Inc.         Advance Information                                          DS30275B-page   31
PIC16C77X

3.3       PORTC and the TRISC Register                                FIGURE 3-9:            PORTC BLOCK DIAGRAM

PORTC is an 8-bit wide bi-directional port. The corre-                                       (PERIPHERAL OUTPUT

sponding data direction register is TRISC. Setting a                                         OVERRIDE)

TRISC bit (=1) will make the corresponding PORTC pin                  PORT/PERIPHERAL Select(2)

an input, i.e., put the corresponding output driver in a

hi-impedance     mode.     Clearing  a   TRISC       bit  (=0)  will  Peripheral   Data Out                          VDD

make the corresponding PORTC pin an output, i.e., put                 Data bus                  0

the contents of the output latch on the selected pin.                 WR               D     Q                                P

                                                                      PORT                      1

PORTC is multiplexed with several peripheral functions                                 CK    Q

(Table 3-5). PORTC pins have Schmitt Trigger input                                 Data Latch

buffers.                                                                               D     Q                                   I/O

When enabling peripheral functions, care should be                    WR                                                         pin(1)

                                                                      TRIS             CK    Q                                N

taken in defining TRIS bits for each PORTC pin. Some

peripherals override the TRIS bit to make a pin an out-                            TRIS Latch

put, while other peripherals override the TRIS bit to                                                                VSS

make a pin an input. Since the TRIS bit override is in                                 RD TRIS                       Schmitt

effect    while  the  peripheral     is  enabled,     read-mod-                                                      Trigger

ify-write instructions (BSF,  BCF,       XORWF) with TRISC            Peripheral

as destination should be avoided. The user should refer               OE(3)                        Q             D

to the corresponding peripheral section for the correct                            RD                            EN

TRIS bit settings.                                                                 PORT

                                                                      Peripheral input

EXAMPLE 3-1:          INITIALIZING PORTC                              Note   1:    I/O pins have diode protection to VDD and VSS.

BCF       STATUS,     RP0  ;  Select     Bank     0                          2:    Port/Peripheral select signal selects between port

CLRF      PORTC            ;  Initialize       PORTC      by                       data and peripheral output.

                           ;  clearing   output                              3:    Peripheral OE (output enable) is only activated if

                           ;  data       latches                                   peripheral select is active.

BSF       STATUS,     RP0  ;  Select     Bank     1

MOVLW     0xCF             ;  Value      used  to

                           ;  initialize       data

                           ;  direction

MOVWF     TRISC            ;  Set    RC<3:0>      as      inputs

                           ;  RC<5:4>    as    outputs

                           ;  RC<7:6>    as    inputs

DS30275B-page    32                                   Advance         Information             1999-2013 Microchip Technology Inc.
                                                                                            PIC16C77X

TABLE 3-5       PORTC FUNCTIONS

Name                  Bit#     Buffer Type        Function

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

RC1/T1OSI/CCP2        bit1             ST         Input/output port pin or Timer1 oscillator input or Capture2

                                                  input/Compare2 output/PWM2 output

RC2/CCP1              bit2             ST         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             bit6             ST         Input/output port pin or USART Asynchronous transmit or

                                                  Synchronous clock

RC7/RX/DT             bit7             ST         Input/output port pin or USART Asynchronous receive or

                                                  Synchronous data

Legend: ST = Schmitt  Trigger  input

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

 1999-2013 Microchip Technology Inc.       Advance Information                                   DS30275B-page         33
PIC16C77X

3.4       PORTD and TRISD Registers                            FIGURE 3-10:               PORTD BLOCK DIAGRAM (IN

This section is applicable to the 40/44-pin devices only.                                 I/O PORT MODE)

PORTD is an 8-bit port with Schmitt Trigger input buf-                Data

                                                                      bus             D   Q

fers. Each pin is individually configurable as an input or            WR

output.                                                               PORT                                             I/O pin(1)

PORTD can be configured as an 8-bit wide micropro-                                    CK

cessor port (parallel slave port) by setting control bit                              Data Latch

PSPMODE (TRISE<4>). In this mode, the input buffers                                   D   Q

are TTL.                                                              WR

                                                                      TRIS            CK                  Schmitt

                                                                                                          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 3-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 3-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.

DS30275B-page   34                            Advance Information                          1999-2013 Microchip Technology Inc.
                                                                                                          PIC16C77X

3.5        PORTE and TRISE Register                                       FIGURE    3-11:    PORTE BLOCK DIAGRAM (IN

This section is applicable to the 40/44-pin devices only.                                    I/O PORT MODE)

                                                                              Data

PORTE      has  three   pins  RE0/RD/AN5,        RE1/WR/AN6                   bus      D           Q

and RE2/CS/AN7, which are individually configurable                           WR                                                     I/O pin(1)

as inputs or outputs. These pins have Schmitt Trigger                         PORT     CK

input buffers.

I/O PORTE becomes control inputs for the micropro-                                     Data Latch

cessor port when bit PSPMODE (TRISE<4>) is set. In                                     D           Q

this  mode,     the    user   must  make        sure  that   the              WR

TRISE<2:0> bits are set (pins are configured as digital                       TRIS     CK                        Schmitt

inputs). Ensure ADCON1 is configured for digital I/O. In                                                         Trigger

                                                                                       TRIS Latch                input

this mode the input buffers are TTL.                                                                             buffer

Figure 3-12 shows the TRISE register, which also con-

trols the parallel slave port operation.                                                     RD TRIS

PORTE pins are multiplexed with analog inputs. When                                                           Q  D

selected as an analog input, these pins will read as '0's.

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.

Note:      On a Power-on Reset these pins are con-

           figured as analog inputs.

FIGURE 3-12:         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

 1999-2013 Microchip Technology Inc.                 Advance Information                                                DS30275B-page           35
PIC16C77X

TABLE 3-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 3-10         SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

                                                                                           Value on:           Value on all

Addr  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       ADFM   VCFG2  VCFG1      VCFG0        PCFG3  PCFG2        PCFG1  PCFG0  0000          0000  0000    0000

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

DS30275B-page  36                           Advance Information                      1999-2013 Microchip Technology Inc.
                                                                                              PIC16C77X

3.6      Parallel Slave Port                                       FIGURE 3-13:        PORTD AND PORTE BLOCK

The  Parallel   Slave    Port  is   implemented       on  the                          DIAGRAM (PARALLEL SLAVE

40/44-pin devices only.                                                                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

                                                                       PORT      CK                                     pin

control  input  pin  RE0/RD    and  WR  control   input   pin

RE1/WR.                                                                                               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 to be the RD input, RE1/WR                     PORT

to be the WR input and RE2/CS to be the CS (chip                   One bit of PORTD

select) input. For this functionality, the corresponding

data direction bits of the TRISE register (TRISE<2:0>)             Set interrupt flag

must be configured as inputs (set). The configuration              PSPIF (PIR1<7>)

bits, PCFG3:PCFG0 (ADCON1<3:0>) must be config-

ured to make pins RE2:RE0 as digital I/O.

A write to the PSP occurs when both the CS and WR

lines are first detected low. A read from the PSP occurs                                          Read   TTL            RD

when both the CS and RD lines are first detected low.                                             Chip Select

                                                                                                         TTL            CS

                                                                                                  Write                 WR

                                                                                                         TTL

                                                                   Note: I/O pin has protection diodes to VDD and VSS.

FIGURE 3-14:         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

 1999-2013 Microchip Technology Inc.             Advance Information                             DS30275B-page              37
PIC16C77X

FIGURE 3-15:    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 3-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    ADFM   VCFG2  VCFG1  VCFG0      PCFG3              PCFG2   PCFG1   PCFG0         0000  0000     0000       0000

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

DS30275B-page  38                       Advance Information                            1999-2013 Microchip Technology Inc.
                                                                                                      PIC16C77X

4.0       TIMER0 MODULE                                             Additional information on external clock requirements

The Timer0 module timer/counter has the following fea-              is available in the PICmicro™ Mid-Range Reference

tures:                                                              Manual, (DS33023).

•  8-bit timer/counter                                              4.2         Prescaler

•  Readable and writable                                            An   8-bit  counter    is  available      as   a  prescaler   for   the

•  Internal or external clock select                                Timer0 module, or as a postscaler for the Watchdog

•  Edge select for external clock                                   Timer,   respectively      (Figure 4-2).       For   simplicity,    this

•  8-bit software programmable prescaler                            counter is being referred to as “prescaler” throughout

•  Interrupt on overflow from FFh to 00h                            this data sheet. Note that there is only one prescaler

                                                                    available which is mutually exclusively shared between

Figure 4-1 is a simplified block diagram of the Timer0              the Timer0 module and the Watchdog Timer. Thus, a

module.                                                             prescaler assignment for the Timer0 module means

Additional information on timer modules is available in             that there is no prescaler for the Watchdog Timer, and

the     PICmicro™       Mid-Range     Reference         Manual,     vice-versa.

(DS33023).                                                          The prescaler is not readable or writable.

4.1       Timer0 Operation                                          The  PSA     and       PS2:PS0      bits  (OPTION_REG<3:0>)

                                                                    determine the prescaler assignment and prescale ratio.

Timer0 can operate as a timer or as a counter.                      Clearing bit PSA will assign the prescaler to the Timer0

Timer     mode  is      selected  by   clearing    bit  T0CS        module. When the prescaler is assigned to the Timer0

(OPTION_REG<5>). In timer mode, the Timer0 mod-                     module,     prescale      values    of   1:2,  1:4,    ...,  1:256  are

ule will increment every instruction cycle (without pres-           selectable.

caler). If the TMR0 register is written, the increment is           Setting bit PSA will assign the prescaler to the Watch-

inhibited for the following two instruction cycles. The             dog Timer (WDT). When the prescaler is assigned to

user can work around this by writing an adjusted value              the WDT, prescale values of 1:1, 1:2, ..., 1:128 are

to the TMR0 register.                                               selectable.

Counter   mode      is  selected   by     setting  bit  T0CS        When assigned to the Timer0 module, all instructions

(OPTION_REG<5>).        In  counter       mode,    Timer0  will     writing to the TMR0 register (e.g. CLRF              1,      MOVWF  1,

increment either on every rising or falling edge of pin             BSF      1,x....etc.)      will   clear   the     prescaler.  When

RA4/T0CKI. The incrementing edge is determined by                   assigned to WDT, a CLRWDT instruction will clear the

the     Timer0  Source      Edge       Select      bit  T0SE        prescaler along with the WDT.

(OPTION_REG<4>). Clearing bit T0SE selects the ris-

ing edge. Restrictions on the external clock input are                Note:      Writing      to  TMR0       when     the  prescaler    is

discussed in below.                                                              assigned to Timer0 will clear the prescaler

When an external clock input is used for Timer0, it must                         count,    but    will  not   change       the   prescaler

meet certain requirements. The requirements ensure                               assignment.

the external clock can be synchronized with the internal

phase clock (TOSC). Also, there is a delay in the actual

incrementing of Timer0 after synchronization.

FIGURE 4-1:         TIMER0 BLOCK DIAGRAM

                                                                                                            Data bus

                    FOSC/4            0                               PSout                                        8

                                                                 1              Sync with

                                       1                                        Internal                    TMR0

     RA4/T0CKI                                     Programmable  0              clocks

     pin                                           Prescaler                                   PSout

                T0SE                                                         (2 cycle delay)

                                                        3

                                                                                                                         Set interrupt

                                                 PS2, PS1, PS0   PSA                                                     flag bit T0IF

                                   T0CS                                                                                  on overflow

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

          2:    The prescaler is shared with Watchdog Timer (refer to Figure 4-2 for detailed           block diagram).

 1999-2013 Microchip Technology Inc.              Advance Information                                                DS30275B-page     39
PIC16C77X

4.2.1     SWITCHING PRESCALER ASSIGNMENT                                      4.3       Timer0 Interrupt

The prescaler assignment is fully under software con-                         The TMR0 interrupt is generated when the TMR0 reg-

trol, i.e., it can be changed “on the fly” during program                     ister overflows from FFh to 00h. This overflow sets bit

execution.                                                                    T0IF (INTCON<2>). The interrupt can be masked by

Note:          To avoid an unintended device RESET, a                         clearing    bit  T0IE    (INTCON<5>).        Bit  T0IF  must   be

               specific instruction sequence (shown in the                    cleared in software by the Timer0 module interrupt ser-

               PICmicro™  Mid-Range          Reference    Man-                vice  routine       before  re-enabling     this  interrupt.  The

               ual,  DS33023)  must      be     executed  when                TMR0   interrupt         cannot  awaken  the      processor   from

               changing  the  prescaler  assignment       from                SLEEP since the timer is shut off during SLEEP.

               Timer0 to the WDT. This sequence must

               be followed even if the WDT is disabled.

FIGURE 4-2:          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_REG<5:0>).

TABLE 4-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_REG      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.

DS30275B-page        40                               Advance Information                               1999-2013 Microchip Technology Inc.
                                                                                                           PIC16C77X

5.0          TIMER1 MODULE                                                 5.1          Timer1 Operation

The Timer1 module timer/counter has the following fea-                     Timer1 can operate in one of these modes:

tures:                                                                     •   As a timer

•  16-bit timer/counter                                                    •   As a synchronous counter

   (Two 8-bit registers; TMR1H and TMR1L)                                  •   As an asynchronous counter

•  Readable and writable (Both registers)

•  Internal or external clock select                                       The operating mode is determined by the clock select

•  Interrupt on overflow from FFFFh to 0000h                               bit, TMR1CS (T1CON<1>).

•  Reset from CCP module trigger                                           In  timer    mode,    Timer1    increments       every  instruction

                                                                           cycle.     In counter mode, it increments on every rising

Timer1      has   a  control  register,  shown    in  Figure 5-1.          edge of the external clock input.

Timer1       can  be  enabled/disabled        by  setting/clearing         When the Timer1 oscillator is enabled (T1OSCEN is

control bit TMR1ON (T1CON<0>).                                             set),   the  RC1/T1OSI         and  RC0/T1OSO/T1CKI             pins

Figure 5-3 is a simplified block diagram of the Timer1                     become       inputs.  That     is,  the  TRISC<1:0>     value   is

module.                                                                    ignored.

Additional information on timer modules is available in                    Timer1 also has an internal “reset input”. This reset can

the      PICmicro™        Mid-Range      Reference      Manual,            be generated by the CCP module (Section 7.0).

(DS33023).

FIGURE 5-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

 1999-2013 Microchip Technology Inc.                 Advance Information                                                   DS30275B-page  41
PIC16C77X

5.1.1      TIMER1 COUNTER OPERATION

In this mode, Timer1 is being incremented via an exter-

nal source. Increments occur on a rising edge. After

Timer1 is enabled in counter mode, the module must

first have a falling edge before the counter begins to

increment.

FIGURE 5-2:     TIMER1 INCREMENTING EDGE

T1CKI

(Default high)

T1CKI

(Default low)

Note: Arrows indicate counter increments.

FIGURE 5-3:     TIMER1 BLOCK DIAGRAM

            Set flag bit

            TMR1IF on

            Overflow                                                       0                Synchronized

                                 TMR1                                                       clock input

                          TMR1H  TMR1L

                                                                           1

                                                                TMR1ON

                                                                   on/off  T1SYNC

                          T1OSC

RC0/T1OSO/T1CKI                                                    1                        Synchronize

                                                                           Prescaler

                                           T1OSCEN       FOSC/4            1, 2, 4, 8       det

                                           Enable        Internal  0
                                 Oscillator(1)
RC1/T1OSI                                                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.

DS30275B-page   42                         Advance Information                          1999-2013 Microchip Technology        Inc.
                                                                                                                 PIC16C77X

5.2         Timer1 Oscillator                                       5.3                       Timer1 Interrupt

A crystal oscillator circuit is built in between pins T1OSI         The TMR1 Register pair (TMR1H:TMR1L) increments

(input) and T1OSO (amplifier output). It is enabled by              from 0000h to FFFFh and rolls over to 0000h. The

setting control bit T1OSCEN (T1CON<3>). The oscilla-                TMR1 Interrupt, if enabled, is generated on overflow

tor is a low power oscillator rated up to 200 kHz. It will          which is latched in interrupt flag bit TMR1IF (PIR1<0>).

continue to run during SLEEP. It is primarily intended              This interrupt can be enabled/disabled by setting/clear-

for  a  32  kHz    crystal.  Table 5-1  shows  the    capacitor     ing TMR1 interrupt enable bit TMR1IE (PIE1<0>).

selection for the Timer1 oscillator.

The Timer1 oscillator is identical to the LP oscillator.            5.4                       Resetting Timer1 using a CCP Trigger

The user must provide a software time delay to ensure                                         Output

proper oscillator start-up.                                         If the CCP module is configured in compare mode to

TABLE 5-1          CAPACITOR SELECTION FOR                          generate a “special event trigger" (CCP1M3:CCP1M0

                   THE TIMER1 OSCILLATOR                            = 1011), this signal will reset Timer1 and start an A/D

                                                                    conversion (if the A/D module is enabled).

Osc Type           Freq                 C1             C2                  Note:                 The special event triggers from the CCP1

        LP         32 kHz              33 pF          33 pF                                      module    will  not  set    interrupt   flag  bit

                   100 kHz             15 pF          15 pF                                      TMR1IF (PIR1<0>).

                   200 kHz             15 pF          15 pF         Timer1 must be configured for either timer or synchro-

        These values are for design guidance only.                  nized counter mode to take advantage of this feature. If

Crystals Tested:                                                    Timer1 is running in asynchronous counter mode, this

                                                                    reset operation may not work.

32.768 kHz         Epson C-001R32.768K-A         20 PPM            In the event that a write to Timer1 coincides with a spe-

100 kHz            Epson C-2 100.00 KC-P         20 PPM            cial event trigger from CCP1, the write will take prece-

200 kHz            STD XTL 200.000 kHz           20 PPM            dence.

Note 1:     Higher capacitance increases the stability              In this mode of operation, the CCPR1H:CCPR1L regis-

            of oscillator but also increases the start-up           ters     pair             effectively  becomes    the    period  register  for

            time.                                                   Timer1.

        2:  Since each resonator/crystal has its own

            characteristics, the user should consult the

            resonator/crystal manufacturer for appropri-

            ate values of external components.

TABLE 5-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)  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

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:  These bits are reserved on the 28-pin devices, always maintain these bits clear.

 1999-2013 Microchip Technology Inc.                 Advance Information                                                    DS30275B-page     43
PIC16C77X

NOTES:

DS30275B-page  44  Advance Information   1999-2013 Microchip Technology Inc.
                                                                                                      PIC16C77X

6.0          TIMER2 MODULE                                                 6.1           Timer2 Operation

The Timer2 module timer has the following features:                        Timer2 can be used as the PWM time-base for PWM

•  8-bit timer (TMR2 register)                                             mode of the CCP module.

•  8-bit period register (PR2)                                             The TMR2 register is readable and writable, and is

•  Readable and writable (Both registers)                                  cleared on any device reset.

•  Software programmable prescaler (1:1, 1:4, 1:16)                        The input clock (FOSC/4) has a prescale option of 1:1,

•  Software programmable postscaler (1:1 to 1:16)                          1:4       or  1:16,    selected    by      control        bits

•  Interrupt on TMR2 match of PR2                                          T2CKPS1:T2CKPS0 (T2CON<1:0>).

•  SSP module optional use of TMR2 output to gen-                          The match output of TMR2 goes through a 4-bit post-

   erate clock shift                                                       scaler (which gives a 1:1 to 1:16 scaling inclusive) to

Timer2       has     a  control  register,  shown  in  Figure 6-1.         generate a TMR2 interrupt (latched in flag bit TMR2IF,

Timer2 can be shut off by clearing control bit TMR2ON                      (PIR1<1>)).

(T2CON<2>) to minimize power consumption.                                  The  prescaler  and    postscaler  counters  are    cleared

Figure 6-2 is a simplified block diagram of the Timer2                     when any of the following occurs:

module.                                                                    •  a write to the TMR2 register

Additional information on timer modules is available in                    •  a write to the T2CON register

the      PICmicro™          Mid-Range       Reference  Manual,             •  any device reset (Power-on Reset, MCLR reset,

(DS33023).                                                                    Watchdog Timer reset, or Brown-out Reset)

                                                                           TMR2 is not cleared when T2CON is written.

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

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

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

 1999-2013 Microchip Technology Inc.                  Advance Information                                            DS30275B-page  45
PIC16C77X

6.2        Timer2 Interrupt                                                          FIGURE 6-2:          TIMER2 BLOCK DIAGRAM

The Timer2 module has an 8-bit period register PR2.                                  Sets flag         TMR2

Timer2 increments from 00h until it matches PR2 and                                  bit TMR2IF        output    (1)

then resets to 00h on the next increment cycle. PR2 is

a readable and writable register. The PR2 register is ini-                                             Reset          TMR2 reg    Prescaler            FOSC/4

tialized to FFh upon reset.                                                                                                       1:1, 1:4, 1:16

                                                                                           Postscaler                 Comparator              2

6.3        Output of TMR2                                                                  1:1  to  1:16  EQ

The output of TMR2 (before the postscaler) is fed to the                                            4                 PR2 reg

Synchronous Serial Port module which optionally uses

it to generate shift clock.

                                                                                     Note  1:     TMR2 register output can be software selected

                                                                                                  by the SSP Module as a baud clock.

TABLE 6-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)  ADIF            RCIF     TXIF     SSPIF               CCP1IF            TMR2IF         TMR1IF      0000  0000     0000  0000

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

11h        TMR2      Timer2 module’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:    These bits are reserved on the 28-pin, always maintain these bits clear.

DS30275B-page    46                            Advance Information                                            1999-2013 Microchip Technology Inc.
                                                                                       PIC16C77X

7.0        CAPTURE/COMPARE/PWM                                  CCP2 Module

           (CCP) MODULE(S)                                      Capture/Compare/PWM    Register2  (CCPR2)          is  com-

Each CCP (Capture/Compare/PWM) module contains                  prised of two 8-bit registers: CCPR2L (low byte) and

a 16-bit register which can operate as a 16-bit capture         CCPR2H (high byte). The CCP2CON register controls

register, as a 16-bit compare register or as a PWM              the operation of CCP2. All are readable and writable.

master/slave Duty Cycle register. Table 7-1 shows the           Additional information on the CCP module is available

timer resources of the CCP module modes.                        in  the  PICmicro™     Mid-Range  Reference        Manual,

The operation of CCP1 is identical to that of CCP2, with        (DS33023).

the exception of the special trigger.  Therefore, opera-        TABLE 7-1            CCP MODE - TIMER

tion  of   a  CCP  module  in  the  following  sections   is                         RESOURCE

described with respect to CCP1.

Table 7-2 shows the interaction of the CCP modules.                      CCP Mode                 Timer Resource

CCP1 Module                                                                 Capture               Timer1

Capture/Compare/PWM        Register1   (CCPR1)  is  com-                    Compare               Timer1

prised of two 8-bit registers: CCPR1L (low byte) and                          PWM                 Timer2

CCPR1H (high byte). The CCP1CON register controls

the operation of CCP1. All are readable and writable.

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

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

 1999-2013 Microchip Technology Inc.          Advance Information                                DS30275B-page        47
PIC16C77X

7.1        Capture Mode                                           7.1.4  CCP PRESCALER

In      Capture  mode,        CCPR1H:CCPR1L        captures  the  There  are   four  prescaler  settings,   specified  by    bits

16-bit value of the TMR1 register when an event occurs            CCP1M3:CCP1M0.      Whenever         the     CCP   module    is

on pin RC2/CCP1. An event is defined as:                          turned off, or the CCP module is not in capture mode,

•   every falling edge                                            the prescaler counter is cleared. This means that any

•   every rising edge                                             reset will clear the prescaler counter.

•   every 4th rising edge                                         Switching from one capture prescaler to another may

•   every 16th rising edge                                        generate an interrupt. Also, the prescaler counter will

                                                                  not be cleared, therefore the first capture may be from

An event is selected by control bits CCP1M3:CCP1M0                a non-zero prescaler. Example 7-1 shows the recom-

(CCP1CON<3:0>). When a capture is made, the inter-                mended method for switching between capture pres-

rupt request flag bit CCP1IF (PIR1<2>) is set. It must            calers. This example also clears the prescaler counter

be cleared in software. If another capture occurs before          and will not generate the “false” interrupt.

the value in register CCPR1 is read, the old captured

value will be lost.                                               EXAMPLE 7-1:       CHANGING BETWEEN

7.1.1      CCP PIN CONFIGURATION                                                     CAPTURE PRESCALERS

                                                                  CLRF   CCP1CON      ;Turn           CCP   module   off

In Capture mode, the RC2/CCP1 pin should be config-               MOVLW  NEW_CAPT_PS  ;Load           the   W  reg   with

ured as an input by setting the TRISC<2> bit.                                         ;         the   new   prescaler

                                                                                      ;         mode   value    and  CCP   ON

    Note:        If the RC2/CCP1 is configured as an out-         MOVWF  CCP1CON      ;Load           CCP1CON   with   this

                 put, a write to the port can cause a capture                         ;         value

                 condition.

FIGURE       7-2:     CAPTURE MODE OPERATION

                      BLOCK DIAGRAM

                              Set flag bit CCP1IF

                 Prescaler    (PIR1<2>)

                  1, 4, 16

   RC2/CCP1                              CCPR1H    CCPR1L

   Pin

                 and                Capture

                 edge detect        Enable

                                         TMR1H     TMR1L

                      CCP1CON<3:0>

                 Q’s

7.1.2        TIMER1 MODE SELECTION

Timer1 must be running in timer mode or synchronized

counter mode for the CCP module to use the capture

feature. In asynchronous counter mode, the capture

operation may not work.

7.1.3        SOFTWARE INTERRUPT

When the Capture mode is changed, a false capture

interrupt may be generated. The user should keep bit

CCP1IE (PIE1<2>) clear to avoid false interrupts and

should clear the flag bit CCP1IF following any such

change in operating mode.

DS30275B-page         48                           Advance        Information         1999-2013 Microchip Technology Inc.
                                                                                                                   PIC16C77X

7.2       Compare Mode                                                    7.2.1          CCP PIN CONFIGURATION

In Compare mode, the 16-bit CCPR1 register value is                       The user must configure the RC2/CCP1 pin as an out-

constantly compared against the TMR1 register pair                        put by clearing the TRISC<2> bit.

value. When a match occurs, the RC2/CCP1 pin is:                                  Note:   Clearing the CCP1CON register will force

•  driven High                                                                            the RC2/CCP1 compare output latch to the

•  driven Low                                                                             default low level. This is not the data latch.

•  remains Unchanged                                                      7.2.2          TIMER1 MODE SELECTION

The action on the pin is based on the value of control

bits    CCP1M3:CCP1M0              (CCP1CON<3:0>).           At    the    Timer1 must be running in Timer mode or Synchro-

same time, interrupt flag bit CCP1IF is set.                              nized Counter mode if the CCP module is using the

                                                                          compare feature. In Asynchronous Counter mode, the

FIGURE 7-3:            COMPARE MODE                                       compare operation may not work.

                       OPERATION BLOCK                                    7.2.3          SOFTWARE INTERRUPT MODE

                       DIAGRAM

                                                                          When generate software interrupt is chosen the CCP1

   Special event trigger will:                                            pin is not affected. Only a CCP interrupt is generated (if

   reset Timer1, but not set interrupt flag bit TMR1IF (PIR1<0>),         enabled).

   and set bit GO/DONE (ADCON0<2>)

   which starts an A/D conversion                                         7.2.4          SPECIAL EVENT TRIGGER

                       Special Event Trigger (CCP2 only)                  In this mode, an internal hardware trigger is generated

                                                                          which may be used to initiate an action.

                                        Set flag bit CCP1IF               The special event trigger output of CCP1 resets the

                                       (PIR1<2>)

                                                  CCPR1H     CCPR1L       TMR1 register pair. This allows the CCPR1 register to

                   Q   S                                                  effectively be a 16-bit programmable period register for

                                Output            Comparator              Timer1.

   RC2/CCP1            R        Logic     match

   Pin                                                                    The special trigger output of CCP2 resets the TMR1

         TRISC<2>                                 TMR1H      TMR1L        register pair, and starts an A/D conversion (if the A/D

        Output Enable  CCP1CON<3:0>

                       Mode Select                                        module is enabled).

                                                                                  Note:   The special event trigger from the CCP2

                                                                                          module             will  not    set  interrupt  flag  bit

                                                                                          TMR1IF (PIR1<0>).

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

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

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 28-pin, always maintain these bits clear.

 1999-2013 Microchip Technology Inc.                        Advance Information                                               DS30275B-page      49
PIC16C77X

7.3       PWM Mode                                                7.3.1     PWM PERIOD

In Pulse Width Modulation (PWM) mode, the CCP1 pin                The PWM period is specified by writing to the PR2 reg-

produces up to a 10-bit resolution PWM output. Since              ister. The PWM period can be calculated using the fol-

the CCP1 pin is multiplexed with the PORTC data latch,            lowing formula:

the TRISC<2> bit must be cleared to make the CCP1                      PWM period = [(PR2) + 1] • 4 • TOSC •

pin an output.                                                                          (TMR2 prescale value)

Note:        Clearing the CCP1CON register will force             PWM frequency is defined as 1 / [PWM period].

             the CCP1 PWM output latch to the default             When TMR2 is equal to PR2, the following three events

             low level. This is not the PORTC I/O data            occur on the next increment cycle:

             latch.

Figure 7-4 shows a simplified block diagram of the CCP            •  TMR2 is cleared

module in PWM mode.                                               •  The CCP1 pin is set (exception: if PWM duty

                                                                     cycle = 0%, the CCP1 pin will not be set)

For a step by step procedure on how to set up the CCP             •  The PWM duty cycle is latched from CCPR1L into

module for PWM operation, see Section 7.3.3.                         CCPR1H

FIGURE 7-4:           SIMPLIFIED PWM BLOCK                           Note:      The Timer2 postscaler (see Section 6.0) is

                      DIAGRAM                                                   not used in the determination of the PWM

                                                                                frequency. The postscaler could be used to

     Duty cycle registers              CCP1CON<5:4>                             have a servo update rate at a different fre-

                                                                                quency than the PWM output.

     CCPR1L

                                                                  7.3.2     PWM DUTY CYCLE

                                                                  The    PWM    duty    cycle  is  specified   by    writing  to  the

     CCPR1H (Slave)                                               CCPR1L register and to the CCP1CON<5:4> bits. Up

                                                                  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

                                                     RC2/CCP1     CCPR1L:CCP1CON<5:4>. The following equation is

          TMR2        (Note 1)                                    used to calculate the PWM duty cycle in time:

                                         S                           PWM duty cycle = (CCPR1L:CCP1CON<5:4>) •

     Comparator                                      TRISC<2>                               Tosc • (TMR2 prescale value)

                           Clear Timer,                           CCPR1L and CCP1CON<5:4> can be written to at any

                           CCP1 pin and                           time,    but  the  duty  cycle   value   is  not   latched      into

     PR2                   latch D.C.

                                                                  CCPR1H until after a match between PR2 and TMR2

Note 1: 8-bit timer is concatenated with 2-bit internal Q clock   occurs (i.e., the period is complete). In PWM mode,

          or 2 bits of the prescaler to create 10-bit time-base.  CCPR1H is a read-only register.

                                                                  The CCPR1H register and a 2-bit internal latch are

A PWM output (Figure 7-5) has a time base (period)                used to double buffer the PWM duty cycle. This double

and a time that the output stays high (duty cycle). The           buffering is essential for glitchless PWM operation.

frequency of the PWM is the inverse of the period (1/             When the CCPR1H and 2-bit latch match TMR2 con-

period).                                                          catenated with an internal 2-bit Q clock or 2 bits of the

                                                                  TMR2 prescaler, the CCP1 pin is cleared.

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

                                                                  For an example PWM period and duty cycle calcu-

                                                                  lation,  see  the     PICmicro™    Mid-Range       Reference

                                                                  Manual,       (DS33023).

DS30275B-page        50                              Advance      Information            1999-2013 Microchip Technology Inc.
                                                                                                        PIC16C77X

7.3.3      SET-UP FOR PWM OPERATION

The following steps should be taken when configuring

the CCP module for PWM operation:

1.   Set the PWM period by writing to the PR2 regis-

     ter.

2.   Set   the  PWM  duty   cycle  by     writing  to     the

     CCPR1L register and CCP1CON<5:4> bits.

3.   Make the CCP1 pin an output by clearing the

     TRISC<2> bit.

4.   Set the TMR2 prescale value and enable Timer2

     by writing to T2CON.

5.   Configure the CCP1 module for PWM operation.

TABLE 7-4          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 7-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)          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

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

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 28-pin, always maintain these bits clear.

 1999-2013 Microchip Technology Inc.              Advance Information                                           DS30275B-page       51
PIC16C77X

NOTES:

DS30275B-page  52  Advance Information   1999-2013 Microchip Technology Inc.
                                                                      PIC16C77X

8.0  MASTER SYNCHRONOUS

     SERIAL PORT (MSSP)

     MODULE

The Master Synchronous Serial Port (MSSP) module is

a serial interface useful for communicating with other

peripheral or microcontroller devices. These peripheral

devices may be serial EEPROMs, shift registers, dis-

play drivers, A/D converters, etc. The MSSP module

can operate in one of two modes:

•  Serial Peripheral Interface (SPI)

•  Inter-Integrated Circuit (I2C™)

 1999-2013 Microchip Technology Inc.  Advance           Information  DS30275B-page  53
PIC16C77X

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

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

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: Sample bit

         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

         In I2C master or slave mode:

         1= Slew rate control disabled for standard speed mode (100         kHz  and   1  MHz)

         0= Slew rate control enabled for high speed mode (400 kHz)

bit  6:  CKE: SPI Clock Edge Select (Figure 8-6, Figure 8-8, and Figure 8-9)

         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 MSSP 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 MSSP 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  only  valid  from  the

         address match to the next start bit, stop bit, or not ACK bit.

         In I2C slave mode:

         1 = Read

         0 = Write

         In I2C master mode:

         1 = Transmit is in progress

         0 = Transmit is not in progress.

         Or’ing this bit with SEN, RSEN, PEN, RCEN, or AKEN    will indicate if the MSSP is in IDLE mode

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 = Data Transmit in progress (does not include the ACK and stop bits), SSPBUF is full

         0 = Data Transmit complete (does not include the ACK and stop bits), SSPBUF is empty

DS30275B-page  54                             Advance Information                       1999-2013 Microchip Technology Inc.
                                                                                                PIC16C77X

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

                                                                                            - n = Value at POR reset

bit 7:     WCOL: Write Collision Detect bit

           Master Mode:

           1 = A write to the SSPBUF register was attempted while the I2C conditions were not valid for a

           transmission to be started

           0 = No collision

           Slave Mode:

           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. 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. (Must be

           cleared in software).

           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. (Must be cleared in software).

           0 = No overflow

bit  5:    SSPEN: Synchronous Serial Port Enable bit

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

           In SPI mode

           1 = Enables serial port and configures SCK, SDO, SDI, and SS as the source of the 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 the source of the serial port pins

           0 = Disables serial port and configures these pins as I/O port pins

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 slave mode

           SCK release control

           1 = Enable clock

           0 = Holds clock low (clock stretch) (Used  to  ensure  data  setup   time)

           In I2C master mode

           Unused in this mode

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

           1000 = I2C   master mode, clock = FOSC / (4 * (SSPADD+1) )

           1xx1 = Reserved

           1x1x = Reserved

 1999-2013 Microchip Technology Inc.         Advance Information                                         DS30275B-page   55
PIC16C77X

FIGURE 8-3:    SSPCON2: SYNC SERIAL PORT CONTROL REGISTER2                               (ADDRESS 91h)

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

GCEN         AKSTAT   AKDT            AKEN        RCEN      PEN    RSEN      SEN         R  =Readable bit

     bit7                                                                    bit0        W =Writable bit

                                                                                         U  =Unimplemented bit,

                                                                                         Read as ‘0’

                                                                                         - n =Value at POR reset

bit 7:     GCEN: General Call Enable   bit     (In I2C slave mode only)

           1 = Enable interrupt when a general call address (0000h) is received in the SSPSR.

           0 = General call address disabled.

bit 6:     AKSTAT: Acknowledge Status        bit  (In I2C master mode only)

           In master transmit mode:

           1 = Acknowledge was not received from slave

           0 = Acknowledge was received from slave

bit 5:     AKDT: Acknowledge Data      bit   (In I2C master mode only)

           In master receive mode:

           Value that will be transmitted when the user initiates an Acknowledge sequence at the end of a receive.

           1 = Not Acknowledge

           0 = Acknowledge

bit 4:     AKEN: Acknowledge Sequence Enable bit         (In I2C master mode only).

           In master receive mode:

           1 = Initiate Acknowledge sequence on SDA and SCL pins, and transmit AKDT data bit.             Automatically

           cleared by hardware.

           0 = Acknowledge sequence idle

bit 3:     RCEN: Receive Enable bit    (In I2C master mode only).

           1 = Enables Receive mode for I2C

           0 = Receive idle

bit  2:    PEN: Stop Condition Enable  bit (In I2C master   mode only).

           SCK release control

           1 = Initiate Stop condition on SDA and SCL pins. Automatically cleared by hardware.

           0 = Stop condition idle

bit  1:    RSEN: Repeated Start Condition Enabled bit (In I2C master         mode only)

           1 = Initiate Repeated Start condition on SDA and SCL pins. Automatically cleared by hardware.

           0 = Repeated Start condition idle.

bit  0:    SEN: Start Condition Enabled bit (In I2C master  mode only)

           1 = Initiate Start condition on SDA and SCL pins. Automatically cleared by hardware.

           0 = Start condition idle.

Note:        For bits AKEN, RCEN, PEN, RSEN, SEN: If the I2C module is not in the idle mode, this bit may not be

             set (no spooling), and the SSPBUF may not be written (or writes to the SSPBUF are disabled).

DS30275B-page  56                              Advance Information                    1999-2013 Microchip Technology Inc.
                                                                                                PIC16C77X

8.1      SPI Mode                                             FIGURE       8-4:    MSSP BLOCK DIAGRAM

The SPI mode allows 8-bits of data to be synchro-                                  (SPI MODE)

nously   transmitted   and  received    simultaneously.  All                                                           Internal

four modes of SPI are supported. To accomplish com-                                                                    data bus

munication, typically three pins are used:                                       Read                         Write

•  Serial Data Out (SDO)                                                                 SSPBUF reg

•  Serial Data In (SDI)

•  Serial Clock (SCK)

Additionally, a fourth pin may be used when in a slave

mode of operation:                                                                           SSPSR reg

•  Slave Select (SS)                                          SDI                  bit0                          shift

                                                                                                                 clock

8.1.1    OPERATION                                            SDO

When initializing the SPI, several options need to be

specified. This is done by programming the appropriate

control  bits  (SSPCON<5:0>  and        SSPSTAT<7:6>).                           SS Control

These control bits allow the following to be specified:                            Enable

•  Master Mode (SCK is the clock output)                      SS                   Edge

•  Slave Mode (SCK is the clock input)                                             Select

•  Clock Polarity (Idle state of SCK)                                                                   2

•  Data input sample phase                                                                      Clock Select

   (middle or end of data output time)

•  Clock edge                                                                                SSPM3:SSPM0

   (output data on rising/falling edge of SCK)                                     SMP:CKE         4             TMR2 output

•  Clock Rate (Master mode only)                                                             2                           2

•  Slave Select Mode (Slave mode only)                                                  Edge

Figure 8-4 shows the block diagram of the MSSP mod-                                Select                     Prescaler      TOSC

ule when in SPI mode.                                         SCK                                             4, 16, 64

                                                                                         Data to TX/RX in SSPSR

                                                                                             Data direction bit

                                                              The MSSP consists of a transmit/receive Shift Register

                                                              (SSPSR) and a buffer register (SSPBUF). The SSPSR

                                                              shifts the data in and out of the device, MSb first. The

                                                              SSPBUF holds the data that was written to the SSPSR,

                                                              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     detect      bit   BF

                                                              (SSPSTAT<0>)       and     the       interrupt     flag   bit  SSPIF

                                                              (PIR1<3>)    are     set.  This      double     buffering      of   the

                                                              received data (SSPBUF) allows the next byte to start

                                                              reception    before  reading         the     data  that    was      just

                                                              received.    Any   write   to   the  SSPBUF        register    during

                                                              transmission/reception of data will be ignored, and the

                                                              write collision detect bit WCOL (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 SSP-

                                                              BUF register completed successfully.

                                                              When the application software is expecting to receive

                                                              valid data, the SSPBUF should be read before the next

                                                              byte of data to transfer is written to the SSPBUF. Buffer

                                                              full bit, BF (SSPSTAT<0>), indicates when the SSP-

                                                              BUF has been loaded with the received data (transmis-

                                                              sion is complete). When the SSPBUF is read, bit BF is

                                                              cleared. This data may be irrelevant if the SPI is only a

                                                              transmitter. Generally the MSSP Interrupt is used to

 1999-2013 Microchip Technology Inc.           Advance       Information                                     DS30275B-page        57
PIC16C77X

determine when the transmission/reception has com-                   SDI, SDO, SCK, and SS pins as serial port pins. For the

pleted. The SSPBUF must be read and/or written. If the               pins to behave as the serial port function, some must

interrupt method is not going to be used, then software              have      their    data  direction  bits     (in  the  TRIS  register)

polling can be done to ensure that a write collision does            appropriately programmed. That is:

not   occur.  Example 8-1  shows      the       loading    of   the  •         SDI is automatically controlled by the SPI module

SSPBUF (SSPSR) for data transmission.                                •         SDO must have TRISC<5> cleared

EXAMPLE 8-1:        LOADING THE SSPBUF                               •         SCK (Master mode) must have TRISC<3>

                    (SSPSR) REGISTER                                           cleared

       BSF    STATUS,   RP0    ;Specify              Bank  1         •         SCK (Slave mode) must have TRISC<3> set

LOOP   BTFSS  SSPSTAT,     BF  ;Has        data      been            •         SS must have TRISA<5> set

                               ;received                             Any serial port function that is not desired may be over-

                               ;(transmit                            ridden by programming the corresponding data direc-

                               ;complete)?                           tion (TRIS) register to the opposite value.

       GOTO   LOOP             ;No

       BCF    STATUS,   RP0    ;Specify              Bank  0         8.1.3     TYPICAL CONNECTION

       MOVF   SSPBUF,   W      ;W       reg     =    contents

                               ;of        SSPBUF                     Figure 8-5         shows  a  typical  connection       between  two

       MOVWF  RXDATA           ;Save            in   user  RAM       microcontrollers. The master controller (Processor 1)

       MOVF   TXDATA,   W      ;W       reg     =    contents        initiates the data transfer by sending the SCK signal.

                               ;      of   TXDATA                    Data is shifted out of both shift registers on their pro-

       MOVWF  SSPBUF           ;New        data      to    xmit      grammed clock edge, and latched on the opposite edge

The SSPSR is not directly readable or writable, and can              of the clock. Both processors should be programmed to

only be accessed by addressing the SSPBUF register.                  same Clock Polarity (CKP), then both controllers would

Additionally, the MSSP status register (SSPSTAT) indi-               send and receive data at the same time. Whether the

cates the various status conditions.                                 data is meaningful (or dummy data) depends on the

                                                                     application software. This leads to three scenarios for

8.1.2  ENABLING SPI I/O                                              data transmission:

                                                                     •         Master sends data—Slave sends dummy data

To enable the serial port, MSSP Enable bit, SSPEN                    •         Master sends data—Slave sends data

(SSPCON<5>) must be set. To reset or reconfigure SPI                 •         Master sends dummy data—Slave sends data

mode, clear bit SSPEN, re-initialize the SSPCON reg-

isters, and then set bit SSPEN. This configures the

FIGURE 8-5:    SPI MASTER/SLAVE CONNECTION

               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

DS30275B-page  58                                    Advance Information                        1999-2013 Microchip Technology Inc.
                                                                                                       PIC16C77X

8.1.4       MASTER MODE                                                      Figure 8-6, Figure 8-8, and Figure 8-9 where the MSb

                                                                             is transmitted first. In master mode, the SPI clock rate

The master can initiate the data transfer at any time                        (bit rate) is user programmable to be one of the follow-

because it controls the SCK. The master determines                           ing:

when the slave (Processor 2, Figure 8-5) is to broad-                        •  FOSC/4 (or TCY)

cast data by the software protocol.

In  master    mode    the  data  is    transmitted/received      as          •  FOSC/16 (or 4 • TCY)

soon as the SSPBUF register is written to. If the SPI                        •  FOSC/64 (or 16 • TCY)

module is only going to receive, the SDO output could                        •  Timer2 output/2

be disabled (programmed as an input). The SSPSR                              This allows a maximum bit clock frequency (at 20 MHz)

register will continue to shift in the signal present on the                 of 8.25 MHz.

SDI pin at the programmed clock rate. As each byte is                        Figure 8-6  shows   the   waveforms   for  Master  mode.

received, it will be loaded into the SSPBUF register as                      When CKE = 1, the SDO data is valid before there is a

if a normal received byte (interrupts and status bits                        clock edge on SCK. The change of the input sample is

appropriately     set).  This  could   be  useful      in  receiver          shown based on the state of the SMP bit.     The time

applications as a “line activity monitor”.                                   when the SSPBUF is loaded with the received data is

The clock polarity is selected by appropriately program-                     shown.

ming   bit  CKP       (SSPCON<4>).     This  then      would     give

waveforms        for  SPI  communication           as  shown     in

FIGURE 8-6:           SPI  MODE WAVEFORM (MASTER                             MODE)

       Write to

       SSPBUF

       SCK

       (CKP = 0

       CKE = 0)

       SCK

       (CKP = 1

       CKE = 0)                                                                                                           4 clock

    SCK                                                                                                                   modes

    (CKP = 0

    CKE = 1)

       SCK

       (CKP = 1

       CKE = 1)

       SDO                       bit7        bit6          bit5        bit4  bit3    bit2        bit1  bit0

       (CKE = 0)

       SDO                       bit7        bit6          bit5        bit4  bit3    bit2        bit1  bit0

       (CKE = 1)

       SDI

       (SMP = 0)               bit7                                                                    bit0

       Input

       Sample

       (SMP = 0)

       SDI

       (SMP = 1)                     bit7                                                                    bit0

       Input

       Sample

       (SMP = 1)

       SSPIF

       SSPSR to                                                                                                    Next   Q4 cycle

       SSPBUF                                                                                                      after  Q2

 1999-2013 Microchip Technology Inc.                  Advance Information                                         DS30275B-page       59
PIC16C77X

8.1.5      SLAVE MODE                                             SDO pin is no longer driven, even if in the middle of

                                                                  a transmitted byte, and becomes a floating output.

In slave mode, the data is transmitted and received as            External pull-up/ pull-down resistors may be desirable,

the external clock pulses appear on SCK. When the                 depending on the application.

last bit is latched the interrupt flag bit SSPIF (PIR1<3>)

is set.                                                           Note:  When the SPI module is in Slave Mode

While in slave mode the external clock is supplied by                    with      SS   pin   control     enabled,      (SSP-

the external clock source on the SCK pin. This external                  CON<3:0> = 0100) the SPI module will

clock must meet the minimum high and low times as                        reset if the SS pin is set to VDD.

specified in the electrical specifications.                       Note:  If  the   SPI  is   used    in   Slave  Mode         with

While in sleep mode, the slave can transmit/receive                      CKE = '1',     then     SS  pin  control       must  be

data. When a byte is received the device will wake-up                    enabled.

from sleep.                                                       When the SPI module resets, the bit counter is forced

                                                                  to 0. This can be done by either forcing the SS pin to a

8.1.6      SLAVE SELECT SYNCHRONIZATION                           high level or clearing the SSPEN bit.

The SS pin allows a synchronous slave mode. The                   To emulate two-wire communication, the SDO pin can

SPI    must  be  in   slave    mode  with    SS  pin   control    be connected to the SDI pin. When the SPI needs to

enabled (SSPCON<3:0> = 0100). The pin must not                    operate as a receiver the SDO pin can be configured as

be driven low for the SS pin to function as an input.             an input. This disables transmissions from the SDO.

TRISA<5>     must    be  set.  When    the   SS  pin   is   low,  The SDI can always be left as an input (SDI function)

transmission     and  reception  are       enabled     and  the   since it cannot create a bus conflict.

SDO pin is driven. When the SS pin goes high, the

FIGURE 8-7:          SLAVE SYNCHRONIZATION WAVEFORM

SS

SCK

(CKP = 0

CKE = 0)

SCK

(CKP = 1

CKE = 0)

Write to

SSPBUF

SDO                                  bit7        bit6                        bit7                                bit0

SDI                                                                                                              bit0

(SMP = 0)                        bit7                                        bit7

Input

Sample

(SMP = 0)

SSPIF

Interrupt

Flag                                                                                                 Next Q4     cycle

SSPSR to                                                                                                  after  Q2

SSPBUF

DS30275B-page    60                              Advance Information                1999-2013 Microchip Technology Inc.
                                                                           PIC16C77X

FIGURE 8-8:   SPI  SLAVE MODE          WAVEFORM    (CKE =  0)

SS

optional

SCK

(CKP = 0

CKE = 0)

SCK

(CKP = 1

CKE = 0)

Write to

SSPBUF

SDO                bit7                bit6  bit5  bit4        bit3  bit2  bit1  bit0

SDI

(SMP = 0)          bit7                                                          bit0

Input

Sample

(SMP = 0)

SSPIF

Interrupt

Flag                                                                                   Next Q4 cycle

                                                                                       after Q2

SSPSR to

SSPBUF

FIGURE 8-9:   SPI  SLAVE MODE          WAVEFORM    (CKE =  1)

SS

not optional

SCK

(CKP = 0

CKE = 1)

SCK

(CKP = 1

CKE = 1)

Write to

SSPBUF

SDO                bit7                bit6  bit5  bit4        bit3  bit2  bit1  bit0

SDI

(SMP = 0)          bit7                                                          bit0

Input

Sample

(SMP = 0)

SSPIF

Interrupt

Flag                                                                                   Next Q4 cycle

SSPSR to                                                                               after Q2

SSPBUF

 1999-2013 Microchip Technology Inc.  Advance Information                             DS30275B-page  61
PIC16C77X

8.1.7      SLEEP OPERATION                                              8.1.8                       EFFECTS OF A RESET

In master mode all module clocks are halted, and the                    A reset disables the MSSP module                            and  terminates  the

transmission/reception will remain in that state until the              current transfer.

device wakes from sleep. After the device returns to

normal     mode,  the    module  will  continue  to  transmit/

receive data.

In slave mode, the SPI transmit/receive shift register

operates asynchronously to the device. This allows the

device to be placed in sleep mode, and data to be

shifted    into  the   SPI  transmit/receive  shift  register.

When all 8-bits have been received, the MSSP interrupt

flag bit will be set and if enabled will wake the device

from sleep.

TABLE 8-1              REGISTERS ASSOCIATED WITH                   SPI  OPERATION

Address           Name      Bit 7      Bit 6         Bit 5  Bit 4  Bit 3                     Bit 2  Bit 1        Bit 0       POR,   BOR   MCLR, WDT

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

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

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:  These bits are reserved on the 28-pin devices, always maintain these bits clear.

DS30275B-page     62                             Advance Information                                        1999-2013 Microchip Technology Inc.
                                                                                         PIC16C77X

8.2         MSSP I2C Operation                                   FIGURE 8-11:    I2C MASTER MODE BLOCK

The MSSP module in I2C mode fully implements all                                 DIAGRAM

master and slave functions (including general call sup-                                                     Internal

port) and provides interrupts on start and stop bits in                                                     data bus

hardware to determine a free bus (multi-master func-                             Read                       Write

tion).  The  MSSP  module      implements   the      standard       SSPADD<6:0>

mode specifications as well as 7-bit and 10-bit address-                      7

ing.                                                                Baud Rate Generator

Refer   to  Application  Note  AN578,     "Use   of  the    SSP                          SSPBUF reg

Module in the I 2C Multi-Master Environment."                       SCL

A "glitch" filter is on the SCL and SDA pins when the pin                        shift

is an input. This filter operates in both the 100 kHz and                        clock

400 kHz modes. In the 100 kHz mode, when these pins                                      SSPSR reg

are an output, there is a slew rate control of the pin that         SDA          MSb                   LSb

is independant of device frequency.

FIGURE 8-10:       I2C SLAVE MODE BLOCK                                                  Match detect              Addr Match

                   DIAGRAM

                                            Internal                                     SSPADD reg

                                            data bus

              Read                        Write                                         Start and Stop bit  Set/Clear S bit

                                                                                         detect / generate         and

                                                                                                            Clear/Set P bit

      SCL                SSPBUF reg                                                                         (SSPSTAT reg)

                                                                                                            and Set SSPIF

              shift                                              Two pins are used for data transfer. These are the SCL

              clock

                         SSPSR reg                               pin, which is the clock, and the SDA pin, which is the

SDA                MSb                 LSb                       data. The SDA and SCL pins that are automatically

                                                                 configured when the I2C mode is enabled. The SSP

                                                                 module functions are enabled by setting SSP Enable

                         Match detect            Addr Match      bit SSPEN (SSPCON<5>).

                                                                 The MSSP module has six registers for I2C operation.

                         SSPADD reg                              They are the:

                                                                 •  SSP Control Register (SSPCON)

                         Start and               Set, Reset      •  SSP Control Register2 (SSPCON2)

                         Stop bit detect         S, P bits       •  SSP Status Register (SSPSTAT)

                                            (SSPSTAT reg)        •  Serial Receive/Transmit Buffer (SSPBUF)

                                                                 •  SSP Shift Register (SSPSR) - Not directly acces-

                                                                    sible

                                                                 •  SSP Address Register (SSPADD)

                                                                 The SSPCON register allows control of the I2C opera-

                                                                 tion. Four mode selection bits (SSPCON<3:0>) allow

                                                                 one of the following I2C modes to be selected:

                                                                 •  I2C Slave mode (7-bit address)

                                                                 •  I2C Slave mode (10-bit address)

                                                                 •  I2C Master mode, clock = OSC/4 (SSPADD         +1)

                                                                 Before selecting any I2C mode, the SCL and SDA pins

                                                                 must be programmed to inputs by setting the appropri-

                                                                 ate TRIS bits. Selecting an I2C mode, by setting the

                                                                 SSPEN bit, enables the SCL and SDA pins to be used

                                                                 as the clock and data lines in I2C mode.

 1999-2013 Microchip Technology Inc.            Advance         Information                           DS30275B-page     63
PIC16C77X

The    SSPSTAT    register  gives      the  status  of  the   data    8.2.1.1      ADDRESSING

transfer.   This  information    includes   detection        of  a

START (S) or STOP (P) bit, specifies if the received                  Once the MSSP module has been enabled, it waits for

byte was data or address if the next byte is the comple-              a START condition to occur. Following the START con-

tion of 10-bit address, and if this will be a read or write           dition, the 8-bits are shifted into the SSPSR register. All

data transfer.                                                        incoming bits are sampled with the rising edge of the

SSPBUF is the register to which the transfer data is                  clock (SCL) line. The value of register SSPSR<7:1> is

written to or read from. The SSPSR register shifts the                compared to the value of the SSPADD register. The

data in or out of the device. In receive operations, the              address is compared on the falling edge of the eighth

SSPBUF      and   SSPSR     create     a    doubled      buffered     clock (SCL) pulse. If the addresses match, and the BF

receiver. This allows reception of the next byte to begin             and SSPOV bits are clear, the following events occur:

before reading the last byte of received data. When the               a)    The   SSPSR   register    value      is  loaded  into  the

complete    byte  is  received,    it  is   transferred   to   the          SSPBUF register on the falling edge of the 8th

SSPBUF register and flag bit SSPIF is set. If another                       SCL pulse.

complete byte is received before the SSPBUF register                  b)    The buffer full bit, BF is set on the falling edge of

is  read,   a  receiver  overflow      has  occurred      and    bit        the 8th SCL pulse.

SSPOV       (SSPCON<6>)     is   set   and  the     byte  in   the    c)    An ACK pulse is generated.

SSPSR is lost.                                                        d)    SSP interrupt flag bit, SSPIF (PIR1<3>) is set

The SSPADD register holds the slave address. In 10-bit                      (interrupt is generated if enabled) - on the falling

mode, the user needs to write the high byte of the                          edge of the 9th SCL pulse.

address (1111     0   A9    A8  0). Following the high byte           In 10-bit address mode, two address bytes need to be

address match, the low byte of the address needs to be                received by the slave. The five Most Significant bits

loaded (A7:A0).                                                       (MSbs) of the first address byte specify if this is a 10-bit

8.2.1       SLAVE MODE                                                address. Bit R/W (SSPSTAT<2>) must specify a write

                                                                      so the slave device will receive the second address

In slave mode, the SCL and SDA pins must be config-                   byte. For a 10-bit address the first byte would equal

ured as inputs. The MSSP module will override the                     ‘1111 0 A9 A8 0’, where A9 and A8 are the two MSbs

input state with the output data when required (slave-                of the address. The sequence of events for a 10-bit

transmitter).                                                         address is as follows, with steps 7- 9 for slave-transmit-

When an address is matched or the data transfer after                 ter:

an address match is received, the hardware automati-                  1.    Receive first (high) byte of Address (bits SSPIF,

cally will generate the acknowledge (ACK) pulse, and                        BF, and bit UA (SSPSTAT<1>) are set).

then load the SSPBUF register with the received value                 2.    Update the SSPADD register with second (low)

currently in the SSPSR register.                                            byte of Address (clears bit UA and releases the

There are certain conditions that will cause the MSSP                       SCL line).

module not to give this ACK pulse. These are if either                3.    Read the SSPBUF register (clears bit BF) and

(or both):                                                                  clear flag bit SSPIF.

a)   The buffer full bit BF (SSPSTAT<0>) was set                      4.    Receive     second      (low)  byte  of  Address       (bits

     before the transfer was received.                                      SSPIF, BF, and UA are set).

b)   The overflow bit SSPOV (SSPCON<6>) was set                       5.    Update the SSPADD register with the first (high)

     before the transfer was received.                                      byte   of  Address.     This   will  clear  bit  UA    and

                                                                            release the SCL line.

If the BF bit is set, the SSPSR register value is not                 6.    Read the SSPBUF register (clears bit BF) and

loaded into the SSPBUF, but bit SSPIF and SSPOV are                         clear flag bit SSPIF.

set. Table 8-2 shows what happens when a data trans-                  7.    Receive Repeated Start condition.

fer byte is received, given the status of bits BF and

SSPOV. The shaded cells show the condition where                      8.    Receive first (high) byte of Address (bits SSPIF

user software did not properly clear the overflow condi-                    and BF are set).

tion. Flag bit BF is cleared by reading the SSPBUF reg-               9.    Read the SSPBUF register (clears bit BF) and

ister while bit SSPOV is cleared through software.                          clear flag bit SSPIF.

The SCL clock input must have a minimum high and                          Note:    Following     the  Repeated       Start   condition

low time for proper operation. The high and low times                              (step  7)    in  10-bit  mode,       the  user  only

of the I2C specification as well as the requirement of the                         needs to match the first 7-bit address. The

MSSP module is shown in timing parameter #100 and                                  user does not update the SSPADD for the

parameter #101 of the Electrical Specifications.                                   second half of the address.

DS30275B-page     64                                Advance           Information          1999-2013 Microchip Technology Inc.
                                                                                                                         PIC16C77X

8.2.1.2      SLAVE RECEPTION                                                      An SSP interrupt is generated for each data transfer

                                                                                  byte. Flag bit SSPIF (PIR1<3>) must be cleared in soft-

When the R/W bit of the address byte is clear and an                              ware. The SSPSTAT register is used to determine the

address match occurs, the R/W bit of the SSPSTAT                                  status of the received byte.

register is cleared. The received address is loaded into

the SSPBUF register.                                                               Note:      The SSPBUF will be loaded if the SSPOV

When the address byte overflow condition exists, then                                         bit is set and the BF flag is cleared. If a

no acknowledge (ACK) pulse is given. An overflow con-                                         read of the SSPBUF was performed, but

dition is defined as either bit BF (SSPSTAT<0>) is set                                        the   user    did          not  clear        the  state     of  the

or bit SSPOV (SSPCON<6>) is set.                                                              SSPOV         bit          before      the        next   receive

                                                                                              occured. The ACK is not sent and the SSP-

                                                                                              BUF is updated.

TABLE 8-2             DATA TRANSFER RECEIVED BYTE                              ACTIONS

Status Bits as Data

Transfer is Received                                                                                                          Set bit SSPIF

                                                                                   Generate ACK                          (SSP Interrupt occurs

      BF           SSPOV                 SSPSR SSPBUF                               Pulse                                      if enabled)

      0                0                         Yes                                   Yes                                            Yes

      1                0                           No                                     No                                          Yes

      1                1                           No                                     No                                          Yes

      0                1                         Yes                                      No                                          Yes

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

8.2.1.3      SLAVE TRANSMISSION                                                   An SSP interrupt is generated for each data transfer

                                                                                  byte. The SSPIF flag bit must be cleared in software,

When the R/W bit of the incoming address byte is set                              and the SSPSTAT register is used to determine the sta-

and   an  address     match    occurs,   the     R/W   bit  of  the               tus of the byte tranfer. The SSPIF flag bit is set on the

SSPSTAT      register  is  set.     The  received     address      is             falling edge of the ninth clock pulse.

loaded into the SSPBUF register. The ACK pulse will                               As a slave-transmitter, the ACK pulse from the master-

be sent on the ninth bit, and the SCL pin is held low.                            receiver is latched on the rising edge of the ninth SCL

The transmit data must be loaded into the SSPBUF                                  input pulse. If the SDA line was high (not ACK), then the

register, which also loads the SSPSR register. Then the                           data transfer is complete. When the not ACK is latched

SCL pin should be enabled by setting bit CKP (SSP-                                by the slave, the slave logic is reset and the slave then

CON<4>). The master must monitor the SCL pin prior                                monitors for another occurrence of the START bit. If the

to asserting another clock pulse. The slave devices                               SDA line was low (ACK), the transmit data must be

may be holding off the master by stretching the clock.                            loaded into the SSPBUF register, which also loads the

The eight data bits are shifted out on the falling edge of                        SSPSR register. Then the SCL pin should be enabled

the SCL input. This ensures that the SDA signal is valid                          by setting the CKP bit.

during the SCL high time (Figure 8-13).

FIGURE 8-12:          I2C WAVEFORMS FOR RECEPTION (7-BIT ADDRESS)

                   Receiving Address         R/W=0                                                                                             Not

                                                 ACK            Receiving Data             ACK          Receiving Data                         ACK

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

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

SSPIF                                                                                                                                               Bus Master

                                                                                                                                                    terminates

                                                                                                                                                    transfer

BF (SSPSTAT<0>)

                                                            Cleared in software

                                                            SSPBUF register is read

SSPOV (SSPCON<6>)

                                                                       Bit SSPOV is set because the SSPBUF register is still full.

                                                                                                                         ACK is not sent.

 1999-2013 Microchip Technology Inc.                 Advance Information                                                             DS30275B-page             65
PIC16C77X

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

                                                 R/W = 1                                                                 R/W = 0

                          Receiving Address               ACK                               Transmitting Data            Not ACK

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

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

                 Data in                                  SCL held low

                 sampled                                  while CPU
                                                          responds to SSPIF

SSPIF

BF (SSPSTAT<0>)

                                                                                cleared in software         From SSP interrupt

                                                                             SSPBUF is written in software  service routine

CKP (SSPCON<4>)

                                                                                    Set bit after writing to SSPBUF

                                                                                    (the SSPBUF must be written-to

                                                                                    before the CKP bit can be set)

DS30275B-page    66                          Advance Information                         1999-2013 Microchip Technology             Inc.
 1999-2013 Microchip Technology Inc.                                                                                                                                                                                                                                  FIGURE 8-14:

                                                                                                                                                                                                                                              Master sends NACK        I2C SLAVE-TRANSMITTER (10-BIT ADDRESS)

                                                                                                                                                                                                                                              Transmit is complete

                                                                                               Clock is held low until

                                                                                               update of SSPADD has

                                                                                               taken place

                                                  Receive  First  Byte  of  Address   R/W  =0       Receive Second          Byte of Address              Receive First Byte       of  Address      R/W=1           Transmitting Data Byte             ACK

                                       SDA        1     1  1      1     0   A9  A8         ACK  A7          A6  A5      A4  A3   A2  A1    A0   ACK      1             1  1    1  0   A9       A8         ACK  D7  D6       D5  D4    D3  D2  D1  D0

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

                                                                                                                                                     Sr

                                                                                                                                                                                                                   CKP has to be set for clock    to be released

                                       SSPIF

                                       (PIR1<3>)

                                                                                                            Cleared in software                          Cleared in software                                          Cleared in software                  Bus Master

                                                                                                                                                                                                                                                           terminates

                                                                                                                                                                                                                                                           transfer

                                       BF (SSPSTAT<0>)

                                                           SSPBUF is written with               Dummy read of SSPBUF                                 Dummy read of SSPBUF                                         Write of  SSPBUF

                                                           contents of SSPSR                    to clear BF flag                                     to clear BF flag                                             initiates transmit

                                       UA (SSPSTAT<1>)

                                                           UA is set indicating that                Cleared by hardware when                         Cleared by hardware when

                                                           the SSPADD needs to be                   SSPADD is updated.                               SSPADD is updated.

                                                           updated

                                                                                                                UA is set indicating that

                                                                                                                SSPADD needs to be

                                                                                                                updated                                                                                                                                                                                        PIC16C77X

DS30275B-page

67
DS30275B-page                                                                                                                                                                                                                                               FIGURE 8-15:                         PIC16C77X

68                                                                                                                                                                                                                                                          I2C SLAVE-RECEIVER (10-BIT ADDRESS)

                                                                                                                                                                                                                                            Bus Master

                                                                                                             Clock is held low until                                                                                                        terminates

                                                                                                             update of SSPADD has                                                                                                           transfer

                                                                                                             taken place

                                                           Receive  First Byte of Address      R/W  =  0                     Receive      Second  Byte  of Address                                  Receive Data Byte          R/W  =  1

                                       SDA              1  1  1     1  0     A9            A8          ACK   A7              A6       A5  A4      A3    A2  A1      A0       ACK  D7  D6            D5  D4     D3      D2  D1  D0      ACK

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

                                       SSPIF

                                       (PIR1<3>)

                                                                                                                             Cleared in software                                      Cleared in software

                                       BF (SSPSTAT<0>)

                                                                    SSPBUF is written with                   Dummy read of SSPBUF                                                 Dummy read of SSPBUF                                      Read of SSPBUF

                                                                    contents of SSPSR                        to clear BF flag                                                     to clear BF flag                                          clears BF flag

                                       UA (SSPSTAT<1>)

                                                                    UA is set indicating that                    Cleared by hardware when                                         Cleared by hardware when

                                                                    the SSPADD needs to be                       SSPADD is updated with low                                       SSPADD is updated with high

 1999-2013 Microchip Technology Inc.                               updated                                      byte of address.                                                 byte of address.

                                                                                                                                              UA is set  indicating that

                                                                                                                                              SSPADD     needs to be

                                                                                                                                              updated
                                                                                                                PIC16C77X

8.2.2      GENERAL CALL ADDRESS SUPPORT                                    If       the     general  call     address  matches,      the  SSPSR     is

The addressing procedure for the I2C bus is such that                      transfered to the SSPBUF, the BF flag is set (eighth bit),

                                                                           and on the falling edge of the ninth bit (ACK bit) the

the first byte after the START condition usually deter-                    SSPIF flag is set.

mines which device will be the slave addressed by the                      When the interrupt is serviced.                    The source for the

master. The exception is the general call address which                    interrupt can be checked by reading the contents of the

can address all devices. When this address is used, all                    SSPBUF to determine if the address was device spe-

devices should, in theory, respond with an acknowl-                        cific or a general call address.

edge.

The general call address is one of eight addresses                         In 10-bit mode, the SSPADD is required to be updated

reserved for specific purposes by the I2C protocol.              It        for the second half of the address to match, and the UA

consists of all 0’s with R/W = 0                                           bit is set (SSPSTAT<1>).                  If the general call address is

                                                                           sampled when GCEN is set while the slave is config-

The general call address is recognized when the Gen-                       ured in 10-bit address mode, then the second half of

eral Call Enable bit (GCEN) is enabled (SSPCON2<7>                         the address is not necessary, the UA bit will not be set,

is set).   Following a start-bit detect, 8-bits are shifted                and        the   slave       will    begin  receiving  data       after  the

into   SSPSR  and     the   address     is  compared     against           acknowledge (Figure 8-16).

SSPADD,      and  is  also  compared        to  the  general  call

address, fixed in hardware.

FIGURE 8-16:          SLAVE MODE GENERAL CALL                        ADDRESS SEQUENCE                         (7 OR 10-BIT MODE)

                                                                                 Address is compared to General Call Address

                                                                                 after ACK, set interrupt flag

                                                                        R/W = 0                      Receiving data                       ACK

       SDA                           General Call Address                        ACK  D7    D6       D5    D4   D3     D2  D1     D0

       SCL

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

       SSPIF

       BF

       (SSPSTAT<0>)

                                                                                            Cleared in software

                                                                                            SSPBUF is read

       SSPOV                                                                                                                                   '0'

       (SSPCON<6>)

       GCEN                                                                                                                                    '1'

       (SSPCON2<7>)

 1999-2013 Microchip Technology Inc.                Advance Information                                                       DS30275B-page        69
PIC16C77X

8.2.3        SLEEP OPERATION                                                8.2.4                     EFFECTS OF A  RESET

While    in  sleep  mode,  the  I2C      module     can  receive            A reset diables the SSP                 module            and  terminates  the

addresses    or  data,    and  when      an  address  match  or             current transfer.

complete byte transfer occurs wake the processor from

sleep (if the SSP interrupt is enabled).

TABLE 8-3           REGISTERS ASSOCIATED WITH                       I2C  OPERATION

Address             Name       Bit 7         Bit 6    Bit 5  Bit 4  Bit 3                      Bit 2  Bit 1        Bit 0       POR,   BOR   MCLR, WDT

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

0Dh          PIR2              LVDIF         —           —   —      BCLIF                      —      —            CCP2IF      0---   0--0  0---  0--0

8Dh          PIE2              LVDIE         —           —   —      BCLIE                      —      —            CCP2IE      0---   0--0  0---  0--0

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

91h          SSPCON2           GCEN      AKSTAT       AKDT   AKEN   RCEN                       PEN    RSEN         SEN         0000   0000  0000  0000

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 I2C  mode.

Note   1:    These bits are reserved on the 28-pin devices, always maintain these bits clear.

       2:    These bits are reserved on these devices, always maintain these bits clear.

DS30275B-page       70                                Advance Information                                     1999-2013 Microchip Technology Inc.
                                                                                                             PIC16C77X

8.2.5   MASTER MODE                                                              In master mode, the SCL and SDA lines are                                          manipu-

                                                                                 lated by the MSSP hardware.

Master mode of operation is supported by interrupt                               The following events will cause SSP Interrupt                                      Flag bit,

generation on the detection of the START and STOP                                SSPIF, to be set (SSP Interrupt if enabled):

conditions.  The  STOP  (P)  and             START  (S)   bits  are

cleared from a reset or when the MSSP module is dis-                             •  START condition

abled. Control of the I2C bus may be taken when the P                            •  STOP condition

bit is set, or the bus is idle with both the S and P bits                        •  Data transfer byte transmitted/received

clear.                                                                           •  Acknowledge transmit

                                                                                 •  Repeated Start

FIGURE 8-17:      SSP BLOCK DIAGRAM (I2C MASTER                                  MODE)

                                                                                    Internal                  SSPM3:SSPM0,

                                                                                    data bus                  SSPADD<6:0>

                                                    Read                        Write

                                                                SSPBUF                                        Baud

                                                                                                              rate

                                                                                                              generator

SDA                                                                                 shift                     clock arbitrate/WCOL detect

                             SDA in                                                 clock

                                                                SSPSR                                                                      (hold off clock source)

                                                    MSb                   LSb

                             Receive Enable               Start bit, Stop bit,                clock cntl

                                                          Acknowledge

                                                                Generate

SCL

                                                          Start bit detect,

                                                          Stop bit detect

                             SCL in                      Write collision detect            Set/Reset, S, P, WCOL (SSPSTAT)

                                                          Clock Arbitration                Set SSPIF, BCLIF

                             Bus Collision                State counter for                Reset AKSTAT, PEN (SSPCON2)

                                                          end of XMIT/RCV

 1999-2013 Microchip Technology Inc.               Advance Information                                                                    DS30275B-page            71
PIC16C77X

8.2.6     MULTI-MASTER OPERATION                                  8.2.7.4      I2C MASTER MODE OPERATION

In multi-master mode, the interrupt generation on the             The    master   device  generates    all    of  the  serial  clock

detection of the START and STOP conditions allows                 pulses and the START and STOP conditions.               A trans-

the determination of when the bus is free. The STOP               fer is ended with a STOP condition or with a Repeated

(P) and START (S) bits are cleared from a reset or                Start condition.    Since the Repeated Start condition is

when the MSSP module is disabled. Control of the I2C              also the beginning of the next serial transfer, the I2C

bus may be taken when bit P (SSPSTAT<4>) is set, or               bus will not be released.

the bus is idle with both the S and P bits clear. When            In  Master     Transmitter   mode,   serial     data   is    output

the bus is busy, enabling the SSP Interrupt will gener-           through SDA, while SCL outputs the serial clock. The

ate the interrupt when the STOP condition occurs.                 first byte transmitted contains the slave address of the

In multi-master operation, the SDA line must be moni-             receiving device (7 bits) and the Read/Write (R/W) bit.

tored, for abitration, to see if the signal level is the          In this case, the R/W bit will be logic '0'. Serial data is

expected output level. This check is performed in hard-           transmitted 8 bits at a time. After each byte is transmit-

ware, with the result placed in the BCLIF bit.                    ted, an acknowledge bit is received. START and STOP

The states where arbitration can be lost are:                     conditions are output to indicate the beginning and the

                                                                  end of a serial transfer.

•  Address Transfer                                               In Master receive mode the first byte transmitted con-

•  Data Transfer                                                  tains  the   slave  address  of   the     transmitting       device

•  A Start Condition                                              (7 bits) and the R/W bit. In this case the R/W bit will be

•  A Repeated Start Condition                                     logic '1'. Thus the first byte transmitted is a 7-bit slave

•  An Acknowledge Condition                                       address followed by a '1' to indicate receive bit. Serial

8.2.7     I2C MASTER OPERATION SUPPORT                            data is received via SDA while SCL outputs the serial

                                                                  clock. Serial data is received 8 bits at a time. After each

Master Mode is enabled by setting and clearing the                byte is received, an acknowledge bit is transmitted.

appropriate SSPM bits in SSPCON and by setting the                START and STOP conditions indicate the beginning

SSPEN bit.   Once master mode is enabled, the user                and end of transmission.

has six options.                                                  The baud rate generator used for SPI mode operation

   -   Assert a start condition on SDA and SCL.                   is now used to set the SCL clock frequency for either

   -   Assert a Repeated Start condition on SDA and               100 kHz, 400 kHz, or 1 MHz I2C operation.             The baud

       SCL.                                                       rate generator reload value is contained in the lower 7

   -   Write to the SSPBUF register initiating trans-             bits of the SSPADD register.      The baud rate generator

       mission of data/address.                                   will automatically begin counting on a write to the SSP-

   -   Generate a stop condition on SDA and SCL.                  BUF.   Once the given operation is complete (i.e. trans-

   -   Configure the I2C port to receive data.                    mission of the last data bit is followed by ACK), the

   -   Generate an Acknowledge condition at the end               internal clock will automatically stop counting and the

       of a received byte of data.                                SCL pin will remain in its last state

                                                                  A typical transmit sequence would go as follows:

   Note:    The MSSP Module, when configured in I2C               a)   The user generates a Start Condition by setting

            Master Mode, does not allow queueing of                    the START enable bit (SEN) in SSPCON2.

            events.    For   instance:   The      user  is   not  b)   SSPIF is set. The module will wait the required

            allowed    to  initiate  a   start  condition,   and       start   time   before   any  other     operation      takes

            immediately write the SSPBUF register to                   place.

            initiate  transmission       before   the   START     c)   The user loads the SSPBUF with address to

            condition  is    complete.   In     this   case  the       transmit.

            SSPBUF     will  not     be  written  to,   and  the  d)   Address is shifted out the SDA pin until all 8 bits

            WCOL bit will be set, indicating that a write              are transmitted.

            to the SSPBUF did not occur.

                                                                  e)   The MSSP Module shifts in the ACK bit from the

                                                                       slave   device,    and  writes    its  value     into   the

                                                                       SSPCON2 register ( SSPCON2<6>).

                                                                  f)   The module generates an interrupt at the end of

                                                                       the ninth clock cycle by setting SSPIF.

                                                                  g)   The user loads the SSPBUF with eight bits of

                                                                       data.

                                                                  h)   DATA    is shifted out the SDA pin until all 8 bits

                                                                       are transmitted.

DS30275B-page     72                                  Advance     Information            1999-2013 Microchip Technology Inc.
                                                                                                           PIC16C77X

i)  The MSSP Module shifts in the ACK bit from the                            In I2C master mode, the BRG is reloaded automatically.

    slave     device,  and   writes     its  value  into  the                 If Clock Arbitration is taking place for instance, the BRG

    SSPCON2 register ( SSPCON2<6>).                                           will be reloaded when the SCL pin is sampled high

j)  The MSSP module generates an interrupt at the                             (Figure 8-19).

    end of the ninth clock cycle by setting the SSPIF

    bit.                                                                      FIGURE 8-18:       BAUD RATE GENERATOR

k)  The user generates a STOP condition by setting                                               BLOCK DIAGRAM

    the STOP enable bit PEN in SSPCON2.                                         SSPM3:SSPM0

l)  Interrupt is generated once the STOP condition                                                              SSPADD<6:0>

    is complete.

8.2.8     BAUD RATE GENERATOR                                                 SSPM3:SSPM0                  Reload   Reload

In I2C master mode, the reload value for the BRG is                                       SCL              Control

located   in  the  lower  7  bits  of  the   SSPADD  register                                                                     Fosc/4

(Figure 8-18). When the BRG is loaded with this value,                                        CLKOUT       BRG      Down Counter

the BRG counts down to 0 and stops until another

reload has taken place. The BRG count is decremented

twice per instruction cycle (TCY) on the Q2 and Q4

clock.

FIGURE 8-19:           BAUD RATE GENERATOR TIMING                         WITH CLOCK ARBITRATION

              SDA                       DX                                DX-1

                                             SCL de-asserted but slave holds                  SCL allowed  to transition  high

                                             SCL low (clock arbitration)

              SCL

                                                                          BRG decrements

                                                                          (on Q2 and Q4 cycles)

              BRG                  03h       02h          01h             00h (hold off)         03h       02h

              value

                                             SCL is sampled    high, reload takes

                                             place, and BRG    starts its count.

              BRG

              reload

 1999-2013 Microchip Technology Inc.               Advance Information                                                   DS30275B-page   73
PIC16C77X

8.2.9     I2C MASTER MODE START CONDITION                              8.2.9.5        WCOL STATUS FLAG

          TIMING

                                                                       If  the  user  writes        the  SSPBUF       when   an   START

To initiate a START condition, the user sets the start                 sequence is in progress, then WCOL is set and the

condition enable bit, SEN (SSPCON2<0>). If the SDA                     contents of the buffer are unchanged (the write doesn’t

and SCL pins are sampled high, the baud rate genera-                   occur).

tor is re-loaded with the contents of SSPADD<6:0>,                         Note:      Because       queueing     of   events      is    not

and starts its count. If SCL and SDA are both sampled                                 allowed,      writing  to  the  lower  5    bits  of

high when the baud rate generator times out (TBRG),                                   SSPCON2       is   disabled     until  the  START

the SDA pin is driven low. The action of the SDA being                                condition is complete.

driven low while SCL is high is the START condition,

and causes the S bit (SSPSTAT<3>) to be set. Follow-

ing this, the baud rate generator is reloaded with the

contents  of  SSPADD<6:0>  and  resumes            its  count.

When the baud rate generator times out (TBRG), the

SEN bit (SSPCON2<0>) will be automatically cleared

by hardware, the baud rate generator is suspended

leaving the SDA line held low, and the START condition

is complete.

Note:     If at the beginning of START condition the

          SDA and SCL pins are already sampled

          low,    or if during the START condition the

          SCL line is sampled low before the SDA

          line is driven low, a bus collision occurs, the

          Bus Collision Interrupt Flag (BCLIF) is set,

          the START condition is aborted, and the

          I2C module is reset into its IDLE state.

FIGURE 8-20:      FIRST START BIT TIMING

                    Write to SEN bit occurs here.               Set S  bit (SSPSTAT<3>)

                                                   SDA = 1,

                                                   SCL = 1             At completion of start bit,

                                                                       Hardware clears SEN bit

                                                                           and sets SSPIF bit

                                                        TBRG    TBRG            Write to SSPBUF     occurs here

                                                                                      1st Bit                2nd Bit

                           SDA

                                                                                         TBRG

                           SCL                                                  TBRG

                                                                S

DS30275B-page   74                                 Advance Information                          1999-2013 Microchip Technology Inc.
                                                                              PIC16C77X

FIGURE  8-21:  START CONDITION FLOWCHART

                                                           SSPEN = 1,

                                                       SSPCON<3:0> = 1000

                                                           Idle Mode

                                                       SEN (SSPCON2<0> = 1)

        Bus collision detected,                        No

               Set BCLIF,                                  SDA = 1?

               Release SCL,                                SCL = 1?

               Clear SEN

                                                           Yes

                                                           Load BRG with

                                                           SSPADD<6:0>

                    No

               Yes                     No              No  BRG

                    SCL= 0?                SDA = 0?        Rollover?

                                                  Yes      Yes

                                           Reset BRG

                                                           Force SDA = 0,

                                                           Load BRG with

                                                           SSPADD<6:0>,

                                                           Set S bit.

                             No        SCL = 0?        No  BRG

                                                           rollover?

                                           Yes             Yes

                                       Reset BRG

                                                           Force SCL = 0,

                                                       Start Condition Done,

                                                           Clear SEN

                                                           and set SSPIF

 1999-2013 Microchip Technology Inc.      Advance Information                DS30275B-page  75
PIC16C77X

8.2.10      I2C MASTER MODE REPEATED START                                Immediately following the SSPIF bit getting set,                     the

            CONDITION TIMING                                              user may write the SSPBUF with the 7-bit                    address in

                                                                          7-bit mode, or the default first address in 10-bit mode.

A Repeated Start condition occurs when the RSEN bit                       After the first eight bits are transmitted and an ACK is

(SSPCON2<1>) is programmed high and the I2C mod-                          received, the user may then transmit an additional eight

ule is in the idle state.  When      the RSEN bit       is set, the       bits of address (10-bit mode) or eight bits of data (7-bit

SCL pin is asserted low. When the SCL pin is sampled                      mode).

low, the baud rate generator is loaded with the contents

of SSPADD<6:0>, and begins counting.                  The SDA pin

is released (brought high) for one baud rate generator

count (TBRG). When the baud rate generator times out,                     8.2.10.6     WCOL STATUS FLAG

if SDA is sampled high, the SCL pin will be de-asserted

(brought high).      When SCL is sampled high the baud                    If the user writes the SSPBUF when a Repeated Start

rate      generator  is  re-loaded      with  the     contents  of        sequence is in progress, then WCOL is set and the

SSPADD<6:0> and begins counting.                      SDA and SCL         contents of the buffer are unchanged (the write doesn’t

must be sampled high for one TBRG. This action is then                    occur).

followed by assertion of the SDA pin (SDA is low)               for

one TBRG       while SCL is high.   Following this, the RSEN                    Note:  Because       queueing           of     events    is    not

bit   in  the  SSPCON2        register  will  be      automatically                    allowed,      writing        of  the    lower  5  bits  of

cleared, and the baud rate generator is not reloaded,                                  SSPCON2 is disabled until the Repeated

leaving the SDA pin held low.        As soon as a start con-                           Start condition is complete.

dition is detected on the SDA and SCL pins, the S bit

(SSPSTAT<3>) will be set. The SSPIF bit will not be set

until the baud rate generator has timed-out.

     Note 1:   If RSEN is programmed while any other

               event is in progress, it will not take effect.

     Note 2:   A bus collision during the Repeated Start

               condition occurs if:

•    SDA is sampled low when SCL goes from low to

     high.

•    SCL goes low before SDA is asserted low. This

     may indicate that another master is attempting

     to transmit a data "1".

FIGURE 8-22:         REPEAT START CONDITION                     WAVEFORM

                                                                                       Set S (SSPSTAT<3>)

                                              Write to SSPCON2  SDA = 1,

                                              occurs here.      SCL = 1                At completion of start bit,

                                              SDA = 1,                                 hardware clear RSEN bit

                                              SCL(no change)                           and set SSPIF

                                                                TBRG      TBRG  TBRG

                                                                                                     1st Bit

                              SDA

                         Falling edge of ninth clock                                   Write to SSPBUF occurs           here.

                                    End of Xmit                                                       TBRG

                              SCL                                                      TBRG

                                                                                Sr = Repeated Start

DS30275B-page        76                                 Advance Information                           1999-2013 Microchip Technology Inc.
                                                                                       PIC16C77X

FIGURE 8-23:  REPEATED            START CONDITION       FLOWCHART (PAGE        1)

                                                            Start

                                                            Idle Mode,

              B                                             SSPEN = 1,

                                                        SSPCON<3:0> = 1000

                                                            RSEN = 1

                                                            Force SCL = 0

                                                                           No

                                                            SCL = 0?

                                                               Yes

                                                            Release SDA,

                                                        Load BRG with

                                                        SSPADD<6:0>

                                                            BRG            No

                                                            rollover?

                                                               Yes

                                                            Release SCL

                                                                               (Clock  Arbitration)

                                                                           No

                                                            SCL = 1?

                                                               Yes

                                        Bus Collision,  No

                                        Set BCLIF,          SDA = 1?

                                        Release SDA,

                                        Clear RSEN

                                                            Yes

                                                            Load BRG with

                                                            SSPADD<6:0>

                                        C                   A

 1999-2013 Microchip Technology  Inc.  Advance Information                                          DS30275B-page  77
PIC16C77X

FIGURE 8-24:   REPEATED  START  CONDITION FLOWCHART (PAGE 2)

                   B

                                C                                         A

                                           Yes

                                   No                  No             No  BRG

                                       SCL = 1?            SDA = 0?       rollover?

                                                           Yes               Yes

                                                           Reset BRG

                                                                          Force SDA = 0,

                                                                          Load BRG with

                                                                          SSPADD<6:0>

                                                                          Set S

                                       No                             No  BRG

                                           SCL = '0'?                     rollover?

                                                 Yes                         Yes

                                                                          Force SCL = 0,

                                           Reset BRG                      Repeated Start

                                                                          condition done,

                                                                          Clear RSEN,

                                                                          Set SSPIF.

DS30275B-page  78               Advance Information                        1999-2013      Microchip  Technology  Inc.
                                                                                                PIC16C77X

8.2.11     I2C MASTER MODE TRANSMISSION                           8.2.11.7       BF STATUS FLAG

Transmission of a data byte, a 7-bit address, or either           In transmit mode, the BF bit (SSPSTAT<0>) is set when

half of a 10-bit address is accomplished by simply writ-          the CPU writes to SSPBUF and is cleared when all 8

ing a value to SSPBUF register. This action will set the          bits are shifted out.

buffer full flag (BF) and allow the baud rate generator to

begin counting and start the next transmission.           Each    8.2.11.8       WCOL STATUS FLAG

bit of address/data will be shifted out onto the SDA pin          If  the  user  writes  the  SSPBUF  when     a  transmit   is

after the falling edge of SCL is asserted (see data hold          already in progress (i.e. SSPSR is still shifting out a

time spec).     SCL is held low for one baud rate gener-          data byte), then WCOL is set and the contents of the

ator roll over count (TBRG). Data should be valid before          buffer are unchanged (the write doesn’t occur).

SCL    is  released  high  (see  Data      setup  time    spec).

When the SCL pin is released high, it is held that way            WCOL must be cleared in software.

for TBRG,  the data on the SDA pin must remain stable             8.2.11.9       AKSTAT STATUS FLAG

for that duration and some hold time after the next fall-

ing edge of SCL.     After the eighth bit is shifted out (the     In transmit mode, the AKSTAT bit (SSPCON2<6>) is

falling edge of the eighth clock), the BF flag is cleared         cleared   when   the   slave  has  sent  an  acknowledge

and the master releases SDA allowing the slave device             (ACK = 0), and is set when the slave does not acknowl-

being addressed to respond with an ACK bit during the             edge (ACK = 1).  A slave sends an acknowledge when

ninth bit time, if an address match occurs or if data was         it has recognized its address (including a general call),

received properly.   The status of ACK is read into the           or when the slave has properly received its data.

AKDT on the falling edge of the ninth clock. If the mas-

ter receives an acknowledge, the acknowledge status

bit (AKSTAT) is cleared.   If not, the bit is set.  After the

ninth   clock  the  SSPIF  is   set,  and  the    master  clock

(baud rate generator) is suspended until the next data

byte is loaded into the SSPBUF leaving SCL low and

SDA unchanged (Figure 8-26).

After the write to the SSPBUF, each bit of address will

be shifted out on the falling edge of SCL until all seven

address bits and the R/W bit are completed. On the fall-

ing edge of the eighth clock the master will de-assert

the  SDA   pin  allowing   the  slave  to  respond  with    an

acknowledge. On the falling edge of the ninth clock the

master will sample the SDA pin to see if the address

was recognized by a slave. The status of the ACK bit is

loaded into the AKSTAT status bit (SSPCON2<6>). Fol-

lowing the falling edge of the ninth clock transmission

of the address, the SSPIF is set, the BF flag is cleared,

and the baud rate generator is turned off until another

write to the SSPBUF takes place, holding SCL low and

allowing SDA to float.

 1999-2013 Microchip Technology Inc.               Advance       Information                              DS30275B-page     79
PIC16C77X

FIGURE 8-25:   MASTER TRANSMIT                  FLOWCHART

                   Idle Mode

                   Write SSPBUF

                   Num_Clocks = 0,

                   BF = 1

                   Force SCL = 0

                                           Yes                                                           Release SDA so

                   Num_Clocks                                                              slave can drive ACK,

                   = 8?                                                                                  Force BF = 0

                          No                                                                             Load BRG with

                   Load BRG with                                                                         SSPADD<6:0>,

                   SSPADD<6:0>,                                                                          start BRG count

                   start BRG count,

                   SDA = Current Data bit

                                                                                                         BRG              No

                                                                                                         rollover?

                   BRG               No

                   rollover?

                                                                                                         Yes

                          Yes                                                                            Force SCL = 1,

                   Stop BRG,                                                                             Stop BRG

                   Force SCL = 1

                                           (Clock Arbitration)                     (Clock  Arbitration)  SCL = 1?         No

                                     No

                   SCL = 1?

                                                                                                         Yes

                          Yes                                                              Read SDA and place into

                                                                                           AKSTAT bit (SSPCON2<6>)

                   SDA =          No                  Bus collision detected

                   Data bit?                    Set BCLIF, hold prescale off,

                                                      Clear XMIT enable                                  Load BRG with

                                                                                                         SSPADD<6:0>,

                          Yes                                                                            count high time

                   Load BRG with

                   SSPADD<6:0>,

                   count SCL high time

                                                                                                                          No

                                                                                                         Rollover?

                                                                Yes

                   BRG               No               No        SDA =          No                        Yes

                   rollover?               SCL = 0?             Data bit?

                                                Yes                                                      Force SCL = 0,

                                                                                                         Set SSPIF

                          Yes              Reset BRG

                   Num_Clocks

                   = Num_Clocks + 1

DS30275B-page  80                               Advance Information                 1999-2013 Microchip Technology           Inc.
 1999-2013 Microchip Technology Inc.                                                                                                                                                           FIGURE 8-26:

                                              Write SSPCON2<0> SEN = 1                                                                                                         AKSTAT in        I2C MASTER MODE

                                              START condition begins                                                  From slave clear AKSTAT bit SSPCON2<6>                   SSPCON2    =  1

                                                        SEN = 0

                                                                                                                                 Transmitting Data or Second Half

                                                            Transmit Address to Slave      R/W = 0                               of 10-bit Address                        ACK

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

                                                        SSPBUF written with 7 bit address and R/W

                                                        start transmit                                                                                                                          TIMING (TRANSMISSION, 7

Advance Information                    SCL              1   2    3      4   5    6     7   8            9                     1  2   3   4          5   6       7     8   9    P

                                              S                                                            SCL held low

                                                                                                           while CPU

                                                                                                           responds to SSPIF

                                       SSPIF

                                                                                                                                 cleared in software service routine

                                                            cleared in software                                                  From SSP interrupt                       Cleared in software

                                       BF (SSPSTAT<0>)

                                                        SSPBUF written                                                           SSPBUF is written in software

                                       SEN

                                                        After start condition SEN cleared by hardware.                                                                                          OR

                                       PEN                                                                                                                                                      10-BIT

                                       R/W                                                                                                                                                      ADDRESS)                 PIC16C77X

DS30275B-page

81
PIC16C77X

8.2.12    I2C MASTER MODE RECEPTION                           8.2.12.10      BF STATUS FLAG

Master mode reception is enabled by programming the           In receive operation, BF is set when an address or data

receive enable bit, RCEN (SSPCON2<3>).                        byte is loaded into SSPBUF from SSPSR. It is cleared

Note:     The  SSP       Module    must  be  in  an  IDLE     when SSPBUF is read.

          STATE before the RCEN bit is set, or the            8.2.12.11      SSPOV STATUS FLAG

          RCEN bit will be disregarded.

The baud rate generator begins counting, and on each          In receive operation, SSPOV is set when 8 bits are

rollover, the state of the SCL pin changes (high to low/      received into the SSPSR, and the BF flag is already set

low to high) and data is shifted into the SSPSR. After        from a previous reception.

the falling edge of the eighth clock, the receive enable      8.2.12.12      WCOL STATUS FLAG

flag  is  automatically  cleared,  the   contents    of  the

SSPSR are loaded into the SSPBUF, the BF flag is set,         If  the  user  writes  the  SSPBUF  when  a  receive          is

the SSPIF is set, and the baud rate generator is sus-         already in progress (i.e. SSPSR is still shifting in a data

pended from counting, holding SCL low. The SSP is             byte), then WCOL is set and the contents of the buffer

now in IDLE state, awaiting the next command. When            are unchanged (the write doesn’t occur).

the buffer is read by the CPU, the BF flag is automati-

cally cleared. The user can then send an acknowledge

bit at the end of reception, by setting the acknowledge

sequence enable bit, AKEN (SSPCON2<4>).

DS30275B-page  82                                Advance      Information             1999-2013 Microchip Technology Inc.
                                                                                          PIC16C77X

FIGURE 8-27:  MASTER  RECEIVER FLOWCHART

                                           Idle mode

                                           RCEN = 1

                                           Num_Clocks = 0,

                                           Release SDA

                                           Force SCL=0,

                                           Load BRG w/

                                           SSPADD<6:0>,

                                           start count

                                           BRG              No

                                           rollover?

                                                 Yes

                                           Release SCL

                                                                (Clock  Arbitration)

                                           SCL = 1?         No

                                                 Yes

                                           Sample SDA,

                                       Shift data into SSPSR

                                           Load BRG with

                                           SSPADD<6:0>,

                                           start count.

                                           BRG              No          SCL = 0?      No

                                           rollover?

                                                 Yes                    Yes

                                           Num_Clocks

                                       = Num_Clocks + 1

                                       No

                                           Num_Clocks

                                           = 8?

                                           Yes

                                           Force SCL = 0,

                                           Set SSPIF,

                                           Set BF.

                                       Move contents of SSPSR

                                           into SSPBUF,

                                           Clear RCEN.

 1999-2013 Microchip Technology Inc.      Advance Information                            DS30275B-page  83
DS30275B-page                                                                                                                                                                                                                                                 FIGURE 8-28:             PIC16C77X

84                                                                                                                                                                                                                                                            I2C MASTER

                                                                                                                                               Write to SSPCON2<4>

                                                                                                                                               to start acknowledge sequence

                                                                                                                                               SDA = AKDT (SSPCON2<5>) = 0

                            Write to SSPCON2<0>       (SEN = 1)

                            Begin Start Condition                                                                                                     ACK from Master                        Set AKEN start acknowledge sequence

                                                                                             Master configured as a receiver                          SDA = AKDT = 0                                    SDA = AKDT = 1

                                        SEN = 0                                              by programming SSPCON2<3>, (RCEN = 1)

                                           Write to SSPBUF occurs here                                                        RCEN cleared              RCEN = 1 start                           RCEN cleared              PEN bit = 1

                                                   Start XMIT                   ACK from Slave                                automatically             next receive                             automatically             written here

                                                   Transmit Address to Slave        R/W = 1           Receiving Data from Slave                                     Receiving Data from Slave                                                                 MODE

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

Advance Information                                                                                                                                                                                             ACK is not sent          Bus Master           TIMING (RECEPTION 7-BIT

                                                                                                                                                                                                                                         terminates

                                                                                                                                                                                                                                         transfer

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

                                                                                                                                                        Data shifted in on falling edge of CLK          Set SSPIF at end

                                                                                                                                                                                                        of receive                       Set SSPIF interrupt

                                                                                                                       Set SSPIF interrupt                          Set SSPIF interrupt                                                  at end of acknow-

                                                                                                                       at end of receive                            at end of acknowledge                                                ledge sequence

                     SSPIF                                                                                                                                          sequence

                                                      Cleared in  software                        Cleared in software                                                                                                                   Set P bit

                     SDA = 0,  SCL = 1                                                                                        Cleared in software                   Cleared in software                            Cleared in           (SSPSTAT<4>)

                     while CPU                                                                                                                                                                                     software             and SSPIF

                     responds to SSPIF

                     BF                                                                                                                                                                                                                                       ADDRESS)

                     (SSPSTAT<0>)                                                                                                               Last bit is shifted into SSPSR and

                                                                                                                                                contents are unloaded into SSPBUF

 1999-2013          SSPOV

                                                                                                                                                                                                     SSPOV is set because

                                                                                                                                                                                                     SSPBUF is still full

Microchip            AKEN

Technology

Inc.
                                                                                                    PIC16C77X

8.2.13    ACKNOWLEDGE SEQUENCE TIMING                                 rate generator counts for TBRG .          The SCL pin is then

                                                                      pulled   low.  Following this, the        AKEN bit is automati-

An acknowledge sequence is enabled by setting the                     cally cleared, the baud rate generator is turned off, and

acknowledge    sequence    enable           bit,  AKEN                the SSP module then goes into IDLE mode. (Figure 8-

(SSPCON2<4>).  When this bit is set, the SCL pin is                   29)

pulled    low and the contents of the acknowledge data

bit is presented on the SDA pin.  If the user wishes to               8.2.13.13      WCOL STATUS FLAG

generate an acknowledge, then the AKDT bit should be

cleared. If not, the user should set the AKDT bit before              If the user writes the SSPBUF when an acknowledege

starting  an  acknowledge  sequence.   The        baud  rate          sequence is in progress, then WCOL is set and the

generator then counts for one rollover period (TBRG),                 contents of the buffer are unchanged (the write doesn’t

and the SCL pin is de-asserted (pulled high). When the                occur).

SCL pin is sampled high (clock arbitration), the baud

FIGURE 8-29:   ACKNOWLEDGE SEQUENCE WAVEFORM

               Acknowledge sequence starts here,

                                  Write to SSPCON2                                   AKEN automatically cleared

                           AKEN = 1, AKDT = 0

                                                              TBRG       TBRG

               SDA                          D0                      ACK

               SCL                     8                                   9

              SSPIF

                      Set SSPIF at the end                Cleared in                                Cleared in

                      of receive                          software                                  software

                                                                              Set SSPIF at the end

                                                                              of acknowledge sequence

               Note:  TBRG= one baud rate generator period.

 1999-2013 Microchip Technology Inc.           Advance Information                                              DS30275B-page   85
PIC16C77X

FIGURE 8-30:   ACKNOWLEDGE           FLOWCHART

                     Idle mode

                     Set AKEN

                     Force SCL = 0

                                                    BRG       Yes

                                                rollover?

                                                No

               No    SCL = 0?

                                                              Yes                   Force SCL = 0,

                     Yes                        SCL = 0?             Reset  BRG     Clear AKEN,

                                                                                    Set SSPIF

                     Drive AKDT bit             No

                     (SSPCON2<5>)

                     onto SDA pin,

                     Load BRG with

                     SSPADD<6:0>,

                     start count.    No

                                                AKDT = 1?

                                                         Yes

               No         BRG

                     rollover?

                                     Yes        SDA = 1?

                     Yes

                     Force SCL = 1                       No

                                     Bus        collision detected,

                                                Set BCLIF,

                                                Release SCL,

               No                               Clear AKEN

                     SCL = 1?

(Clock Arbitration)

                     Yes

                     Load BRG with

                     SSPADD <6:0>,

                     start count.

DS30275B-page  86                    Advance Information                           1999-2013 Microchip  Technology  Inc.
                                                                                             PIC16C77X

8.2.14  STOP CONDITION TIMING                                            while SCL is high, the P bit (SSPSTAT<4>) is set. A

                                                                         TBRG later the PEN bit is cleared and the SSPIF bit is

A stop bit is asserted on the SDA pin at the end of a                    set (Figure 8-31).

receive/transmit by setting the Stop Sequence Enable                     Whenever the firmware decides to take control of the

bit PEN (SSPCON2<2>). At the end of a receive/trans-                     bus, it will first determine if the bus is busy by checking

mit the SCL line is held low after the falling edge of the               the S and P bits in the SSPSTAT register. If the bus is

ninth clock.  When the PEN bit is set, the master will                   busy, then the CPU can be interrupted (notified) when

assert the SDA line low .        When the SDA line is sam-               a Stop bit is detected (i.e. bus is free).

pled  low,  the  baud  rate      generator  is  reloaded  and

counts down to 0. When the baud rate generator times                     8.2.14.14        WCOL STATUS FLAG

out, the SCL pin will be brought high, and one TBRG

(baud rate generator rollover count) later, the SDA pin                  If the user writes the SSPBUF when a STOP sequence

will be de-asserted. When the SDA pin is sampled high                    is in progress, then WCOL is set and the contents of the

                                                                         buffer are unchanged (the write doesn’t occur).

FIGURE 8-31:     STOP CONDITION RECEIVE OR                            TRANSMIT MODE

                 Write to SSPCON2                               SCL = 1 for TBRG, followed by SDA = 1 for TBRG

                                 Set PEN                        after SDA sampled high. P bit (SSPSTAT<4>) is set

                      Falling edge of                                          PEN bit (SSPCON2<2>) is cleared by

                      9th clock                                                hardware and the SSPIF bit is set

                 SCL                            TBRG

                 SDA         ACK

                                                                      P

                                                TBRG      TBRG           TBRG

                                                          SCL brought high after TBRG

                                            SDA asserted low before rising edge of clock

                                            to setup stop condition.

                       Note:     TBRG = one baud rate generator period.

 1999-2013 Microchip Technology Inc.           Advance Information                                                  DS30275B-page    87
PIC16C77X

FIGURE 8-32:   STOP CONDITION                FLOWCHART

                             Idle Mode,

                             SSPEN = 1,

                   SSPCON<3:0> = 1000

                             PEN = 1                    Start BRG

                   Force SDA = 0

                   SCL doesn’t change

                                                             BRG         No

                                                        rollover?

                                         No                  Yes

                             SDA = 0?                   Release SDA,

                                                        Start BRG

                             Yes

                             Start BRG

                                                             BRG         No

                                                        rollover?

                             BRG         No                       Yes

                             rollover?

                                                                       No     Bus  Collision detected,

                             Yes                        P bit Set?                 Set BCLIF,

                                                                                   Clear PEN

                   De-assert SCL,

                             SCL = 1                         Yes

                                                        SDA  going from

                                                        0 to 1 while SCL = 1

(Clock         Arbitration)                             Set SSPIF,

                                         No             Stop Condition done

                             SCL = 1?                   PEN cleared.

                             Yes

DS30275B-page  88                            Advance Information                    1999-2013 Microchip  Technology  Inc.
                                                                                                PIC16C77X

8.2.15  CLOCK ARBITRATION                                       8.2.16          SLEEP OPERATION

Clock arbitration occurs when the master, during any            While   in      sleep  mode,    the  I2C     module  can  receive

receive, transmit, or repeated start/stop condition, de-        addresses or data, and when an address match or

asserts the SCL pin (SCL allowed to float high).     When       complete byte transfer occurs wake the processor from

the SCL pin is allowed to float high, the baud rate gen-        sleep ( if the SSP interrupt is enabled).

erator (BRG) is suspended from counting until the SCL

pin is actually sampled high. When the SCL pin is sam-          8.2.17          EFFECTS OF A RESET

pled high, the baud rate generator is reloaded with the         A reset disables the SSP module and terminates the

contents of SSPADD<6:0> and begins counting.         This       current transfer.

ensures that the SCL high time will always be at least

one BRG rollover count in the event that the clock is

held low by an external device (Figure 8-33).

FIGURE 8-33:   CLOCK ARBITRATION TIMING IN                      MASTER TRANSMIT MODE

BRG overflow,

Release SCL,

If SCL = 1   Load BRG with

SSPADD<6:0>, and start count         BRG overflow occurs,

to measure high time interval        Release SCL, Slave device  holds SCL low.         SCL = 1  BRG starts counting

                                                                                       clock high interval.

        SCL

                                                           SCL line sampled once every machine cycle (Tosc  4).

                                                           Hold off BRG until SCL is sampled high.

        SDA

                               TBRG            TBRG                                    TBRG

 1999-2013 Microchip Technology Inc.          Advance Information                                           DS30275B-page  89
PIC16C77X

8.2.18     MULTI -MASTER COMMUNICATION, BUS                      If a  START, Repeated Start, STOP, or Acknowledge

           COLLISION,  AND BUS ARBITRATION                       condition        was  in  progress    when   the   bus  collision

                                                                 occurred, the condition is aborted, the SDA and SCL

Multi-Master mode support is achieved by bus arbitra-            lines are de-asserted, and the respective control bits in

tion.  When the master outputs address/data bits onto            the SSPCON2 register are cleared.            When the user

the SDA pin, arbitration takes place when the master             services the bus collision interrupt service routine, and

outputs a '1' on SDA by letting SDA float high and               if the I2C bus is free, the user can resume communica-

another master asserts a '0'.  When the SCL pin floats           tion by asserting a START condition.

high, data should be stable.       If the expected data on       The Master will continue to monitor the SDA and SCL

SDA is a '1' and the data sampled on the SDA pin = '0',          pins, and if a STOP condition occurs, the SSPIF bit will

then a bus collision has taken place.       The master will      be set.

set the Bus Collision Interrupt Flag, BCLIF and reset

the I2C port to its IDLE state. (Figure 8-34).                   A write to the SSPBUF will start the transmission of

If a transmit was in progress when the bus collision             data at the first data bit, regardless of where the trans-

occurred,  the  transmission   is  halted,  the  BF  flag    is  mitter left off when bus collision occurred.

cleared, the SDA and SCL lines are de-asserted, and              In multi-master mode, the interrupt generation on the

the SSPBUF can be written to. When the user services             detection of start and stop conditions allows the deter-

the bus collision interrupt service routine, and if the I2C      mination of when the bus is free. Control of the I2C bus

bus is free, the user can resume communication by                can be taken when the P bit is set in the SSPSTAT reg-

asserting a START condition.                                     ister, or the bus is idle and the S and P bits are cleared.

FIGURE 8-34:    BUS COLLISION TIMING FOR TRANSMIT AND ACKNOWLEDGE

                               Data changes                  SDA line pulled low       Sample SDA.     While SCL is high

                               while SCL = 0                 by another source         data doesn’t match what is driven

                                                                                       by the master.

                                                 SDA released                          Bus collision has occurred.

                                                     by master

SDA

SCL                                                                                        Set bus collision

                                                                                           interrupt.

BCLIF

DS30275B-page   90                               Advance Information                        1999-2013 Microchip Technology Inc.
                                                                                                       PIC16C77X

8.2.18.15   BUS COLLISION DURING A START                                  while SDA is high, a bus collision occurs, because it is

            CONDITION                                                     assumed that another master is attempting to drive a

                                                                          data '1' during the START condition.

During a START condition, a bus collision occurs if:                      If the SDA pin is sampled low during this count, the

a)      SDA or SCL are sampled low at the beginning of                    BRG     is  reset  and  the  SDA         line  is  asserted  early

        the START condition (Figure 8-35).                                (Figure 8-37).     If however a '1' is sampled on the SDA

b)      SCL is sampled low before SDA is asserted low.                    pin, the SDA pin is asserted low at the end of the BRG

        (Figure 8-36).                                                    count.      The baud rate generator is then reloaded and

During a START condition both the SDA and the SCL                         counts down to 0, and during this time, if the SCL pins

pins are monitored.                                                       is sampled as '0', a bus collision does not occur. At the

If:                                                                       end of the BRG count the SCL pin is asserted low.

        the SDA pin is already low                                        Note:       The reason that bus collision is not a factor

        or the SCL pin is already low,                                                during a START condition is that no two

                                                                                      bus masters can assert a START condition

then:                                                                                 at the exact same time.                Therefore, one

        the START condition is aborted,                                               master will always assert SDA before the

        and the BCLIF flag is set,                                                    other. This condition does not cause a bus

        and the SSP module is reset to      its  IDLE  state                          collision because the two masters must be

        (Figure 8-35).                                                                allowed to arbitrate the first address follow-

The START condition begins with the SDA and SCL                                       ing    the  START  condition,          and  if    the

pins de-asserted.       When the SDA pin is sampled high,                             address is the same, arbitration must be

the baud rate generator is loaded from SSPADD<6:0>                                    allowed to continue into the data portion,

and counts down to 0.   If the SCL pin is sampled low                                 REPEATED START, or STOP conditions.

FIGURE 8-35:            BUS COLLISION DURING START                CONDITION (SDA ONLY)

                                         SDA goes low before the SEN bit is set.

                                         Set BCLIF,

                                         S bit and SSPIF set     because

                                         SDA = 0, SCL = 1

     SDA

     SCL

                        Set SEN, enable start                                     SEN cleared automatically because of bus collision.

                        condition if SDA = 1, SCL=1                               SSP module reset into idle state.

     SEN

                                    SDA  sampled low before

                                    START condition.  Set BCLIF.

     BCLIF                          S bit and SSPIF set because

                                    SDA = 0, SCL = 1

                                                                                             SSPIF and BCLIF are

                                                                                             cleared in software.

     S

     SSPIF

                                                                  SSPIF and BCLIF are

                                                                  cleared in software.

 1999-2013 Microchip Technology Inc.                 Advance Information                                                DS30275B-page  91
PIC16C77X

FIGURE 8-36:      BUS COLLISION DURING START                     CONDITION (SCL = 0)

                               SDA = 0, SCL = 1

                                                     TBRG        TBRG

        SDA

        SCL             Set SEN, enable start

                        sequence if SDA = 1, SCL = 1

                                                                             SCL = 0 before SDA = 0,

        SEN                                                                  Bus collision occurs, Set BCLIF.

                   SCL = 0 before BRG time out,

                   Bus collision occurs, Set BCLIF.

        BCLIF

                                                                                         Interrupts cleared

                                                                                         in software.

        S          '0'                                                                          '0'

        SSPIF      '0'                                                                          '0'

FIGURE  8-37:     BRG   RESET  DUE TO SDA COLLISION DURING                             START    CONDITION

                               SDA = 0, SCL                =  1

                                                                 Set  S           Set  SSPIF

                               Less than TBRG                         TBRG

               SDA      SDA pulled low by other master.

                        Reset BRG and assert SDA

               SCL                                            S

                                                                                       SCL pulled low after BRG

               SEN                                                                     Timeout

                                                           Set SEN, enable start

               BCLIF    '0'                                sequence if SDA = 1, SCL = 1

               S

               SSPIF

                                                           SDA = 0, SCL = 1                          Interrupts cleared

                                                           Set SSPIF                                 in software.

DS30275B-page  92                              Advance Information                               1999-2013 Microchip    Technology  Inc.
                                                                                                      PIC16C77X

8.2.18.16      BUS COLLISION DURING A REPEATED                          however       SDA   is   sampled  high    then   the  BRG  is

               START CONDITION                                          reloaded and begins counting.        If SDA goes from high

                                                               &