Beruflich Dokumente
Kultur Dokumente
Data Sheet
28/40/44-Pin Flash-Based, 8-Bit
CMOS Microcontrollers with
LCD Driver and nanoWatt XLP™ Technology
• Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.
• There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
• Microchip is willing to work with the customer who is concerned about the integrity of their code.
• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Data EEPROM
Flash (words)
SRAM (bytes)
Comparators
CapSense
10-bit A/D
I2C™/SPI
EUSART
8/16-bit
(bytes)
Timers
Device
ECCP
I/O’s
CCP
LCD
(ch)
(ch)
PIC16F1933
4096 256 256 25 11 8 2 4/1 Yes Yes 3 2 16(1)/4
PIC16LF1933
PIC16F1934
4096 256 256 36 14 16 2 4/1 Yes Yes 3 2 24/4
PIC16LF1934
PIC16F1936
8192 256 512 25 11 8 2 4/1 Yes Yes 3 2 16(1)/4
PIC16LF1936
PIC16F1937
8192 256 512 36 14 16 2 4/1 Yes Yes 3 2 24/4
PIC16LF1937
PIC16F1938
16384 256 1024 25 11 8 2 4/1 Yes Yes 3 2 16(1)/4
PIC16LF1938
PIC16F1939
16384 256 1024 36 14 16 2 4/1 Yes Yes 3 2 24/4
PIC16LF1939
Note 1: COM3 and SEG15 share the same physical pin on PIC16F1933/1936/1938/PIC16LF1933/1936/1938, therefore,
SEG15 is not available when using 1/4 multiplex displays.
VPP/MCLR/RE3 1 28 RB7/ICSPDAT/ICDDAT/SEG13
(2) (1) (1) (1)
SEG12/VCAP /SS /SRNQ /C2OUT /C12IN0-/AN0/RA0 2 27 RB6/ICSPCLK/ICDCLK/SEG14
SEG7/C12IN1-/AN1/RA1 3 26 RB5/AN13/CPS5/P2B(1)/CCP3(1)/P3A(1)/T1G(1)/COM1
25 RB4/AN11/CPS4/P1D/COM0
PIC16LF1933/1936/1938
COM2/DACOUT/VREF-/C2IN+/AN2/RA2 4
PIC16F1933/1936/1938
SEG15/COM3/VREF+/C1IN+/AN3/RA3 5 24 RB3/AN9/C12IN2-/CPS3/CCP2(1)/P2A(1)/VLCD3
SEG4/CCP5/SRQ/T0CKI/CPS6/C1OUT/RA4 6 23 RB2/AN8/CPS2/P1B/VLCD2
SEG5/VCAP(2)/SS(1)/SRNQ(1)/CPS7/C2OUT(1)/AN4/RA5 7 22 RB1/AN10/C12IN3-/CPS1/P1C/VLCD1
VSS 8 21 RB0/AN12/CPS0/CCP4/SRI/INT/SEG0
SEG2/CLKIN/OSC1/RA7 9 20 VDD
19 VSS
SEG1/VCAP(2)/CLKOUT/OSC2/RA6 10
P2B(1)/T1CKI/T1OSO/RC0 11 18 RC7/RX/DT/P3B/SEG8
P2A(1)/CCP2(1)/T1OSI/RC1 12 17 RC6/TX/CK/CCP3(1)/P3A(1)/SEG9
SEG3/P1A/CCP1/RC2 13 16 RC5/SDO/SEG10
SEG6/SCL/SCK/RC3 14 15 RC4/SDI/SDA/T1G(1)/SEG11
28-pin QFN
RA0/AN0/C12IN0-/C2OUT(1)/SRNQ(1)/SS(1)/VCAP(2)/SEG12
RB5/AN13/CPS5/P2B(1)/CCP3(1)/P3A(1)/T1G(1)/COM1
RB6/ICSPCLK/ICDCLK/SEG14
RB7/ICSPDAT/ICDDAT/SEG13
RB4/AN11/CPS4/P1D/COM0
RA1/AN1/C12IN1-/SEG7
RE3/MCLR/VPP
28
27
26
24
23
22
25
COM2/DACOUT/VREF-/C2IN+/AN2/RA2 1 21 RB3/AN9/C12IN2-/CPS3/CCP2(1)/P2A(1)/VLCD3
SEG15/COM3/VREF+/C1IN+/AN3/RA3 2 20 RB2/AN8/CPS2/P1B/VLCD2
SEG4/CCP5/SRQ/T0CKI/CPS6/C1OUT/RA4 3 PIC16F1933/1936/1938 19 RB1/AN10/C12IN3-/CPS1/P1C/VLCD1
SEG5(1)/VCAP(2)/SS(1)/SRNQ/CPS7/C2OUT(1)/AN4/RA5 4 PIC16LF1933/1936/1938 18 RB0/AN12/CPS0/CCP4/SRI/INT/SEG0
VSS 5 17 VDD
SEG2/CLKIN/OSC1/RA7 6 16 VSS
SEG1/VCAP(2)/CLKOUT/OSC2/RA6 7 15 RC7/RX/DT/P3B/SEG8
10
12
13
14
11
8
9
SEG11/T1G(1)/SDA/SDI/RC4
P2B(1)/T1CKI/T1OSO/RC0
SEG10/SDO/RC5
(1)P2A/(1)CCP2/T1OSI/RC1
SEG3/P1A/CCP1/RC2
SEG6/SCL/SCK/RC3
SEG9/P3A(1)/CCP3(1)/CK/TX/RC6
Comparator
28-Pin QFN
Cap Sense
28-Pin SIP
SR Latch
EUSART
Interrupt
ANSEL
Pull-up
Timers
MSSP
Basic
CCP
LCD
A/D
I/O
40-Pin PDIP
VPP/MCLR/RE3 1 40 RB7/ICSPDAT/ICDDAT/SEG13
SEG12/VCAP(2)/SS(1)/SRNQ(1)/C2OUT(1)/C12IN0-/AN0/RA0 2 39 RB6/ICSPCLK/ICDCLK/SEG14
SEG7/C12IN1-/AN1/RA1 3 38 RB5/AN13/CPS5/CCP3(1)/P3A(1)/T1G(1)/COM1
COM2/DACOUT/VREF-/C2IN+/AN2/RA2 4 37 RB4/AN11/CPS4/COM0
SEG15/VREF+/C1IN+/AN3/RA3 5 36 RB3/AN9/C12IN2-/CPS3/CCP2(1)/P2A(1)/VLCD3
SEG4/SRQ/T0CKI/CPS6/C1OUT/RA4 6 35 RB2/AN8/CPS2/VLCD2
SEG5/VCAP(2)/SS(1)/SRNQ(1)/CPS7/C2OUT(1)/AN4/RA5 7 34 RB1/AN10/C12IN3-/CPS1/VLCD1
PIC16LF1934/1937/1939
PIC16F1934/1937/1939
SEG21/CCP3(1)/P3A(1)/AN5/RE0 8 33 RB0/AN12/CPS0/SRI/INT/SEG0
SEG22/P3B/AN6/RE1 9 32 VDD
SEG23/CCP5/AN7/RE2 10 31 VSS
VDD 11 30 RD7/CPS15/P1D/SEG20
VSS 12 29 RD6/CPS14/P1C/SEG19
SEG2/CLKIN/OSC1/RA7 13 28 RD5/CPS13/P1B/SEG18
SEG3/P1A/CCP1/RC2 17 24 RC5/SDO/SEG10
SEG6/SCK/SCL/RC3 18 23 RC4/SDI/SDA/T1G(1)/SEG11
COM3/CPS8/RD0 19 22 RD3/CPS11/P2C/SEG16
CCP4/CPS9/RD1 20 21 RD2/CPS10/P2B(1)
44-pin QFN
RC4/SDI/SDA/T1G(1)/SEG11
RC1/T1OSI/CCP2(1)/P2A(1)
RC0/T1OSO/T1CKI/P2B(1)
RD3/CPS11/P2C/SEG16
RC2/CCP1/P1A/SEG3
RC3/SCL/SCK/SEG6
RD2/CPS10/P2B(1)
RC6/TX/CK/SEG9
RD0/CPS8/COM3
RC5/SDO/SEG10
RD1/CPS9/CCP4
44
43
42
41
40
39
37
36
35
34
38
SEG8/DT/RX/RC7 1 33 RA6/OSC2/CLKOUT/VCAP(2)/SEG1
SEG17/P2D/CPS12/RD4 2 32 RA7/OSC1/CLKIN/SEG2
SEG18/P1B/CPS13/RD5 3 31 VSS
SEG19/P1C/CPS14/RD6 4 30 VSS
SEG20/P1D/CPS15/RD7 5 PIC16F1934/1937/1939 29 NC
VSS 6 PIC16LF1934/1937/1939 28 VDD
VDD 7 27 RE2/AN7/CCP5/SEG23
VDD 8 26 RE1/AN6/P3B/SEG22
SEG0/INT/SRI/CPS0/AN12/RB0 9 25 RE0/AN5/CCP3(1)/P3A(1)/SEG21
VLCD1/CPS1/C12IN3-/AN10/RB1 10 24 RA5/AN4/C2OUT(1)/CPS7/SRNQ(1)/SS(1)/VCAP(2)/SEG5
VLCD2/CPS2/AN8/RB2 11 23 RA4/C1OUT/CPS6/T0CKI/SRQ/SEG4
22
12
13
14
15
16
17
18
19
20
21 COM2/DACOUT/VREF-/C2IN+/AN2/RA2
COM0/CPS4/AN11/RB4
COM1/T1G(1)/P3A(1)/CCP3(1)/CPS5/AN13/RB5
SEG14/ICDCLK/ICSPCLK/RB6
SEG13/ICDDAT/ICSPDAT/RB7
VPP/MCLR/RE3
SEG7/C12IN1-/AN1/RA1
SEG15VREF+/C1IN+/AN3/RA3
VLCD3/P2A(1)/CCP2(1)/CPS3/C12IN2-/AN9/RB3
NC
44-pin TQFP
RC4/SDI/SDA/T1G(1)/SEG11
RC1/T1OSI/CCP2(1)/P2A(1)
RD3/CPS11/P2C/SEG16
RC2/CCP1/P1A/SEG3
RC3/SCL/SCK/SEG6
RD2/CPS10/P2B(1)
RC6/TX/CK/SEG9
RD0/CPS8/COM3
RC5/SDO/SEG10
RD1/CPS9/CCP4
NC
41
40
39
37
36
35
34
42
44
43
38
SEG8/DT/RX/RC7 1 33 NC
SEG17/P2D/CPS12/RD4 2 32 RC0/T1OSO/T1CKI/P2B(1)
SEG18/P1B/CPS13/RD5 3 31 RA6/OSC2/CLKOUT/VCAP(2)/SEG1
SEG19/P1C/CPS14/RD6 4 30 RA7/OSC1/CLKIN/SEG2
SEG20/P1D/CPS15/RD7 5 PIC16F1934/1937/1939 29 VSS
VSS 6 PIC16LF1934/1937/1939 28 VDD
VDD 7 27 RE2/AN7/CCP5/SEG23
SEG0/INT/SRI/CPS0/AN12/RB0 8 26 RE1/AN6/P3B/SEG22
VLCD1/CPS1/C12IN3-/AN10/RB1 9 25 RE0/AN5/CCP3(1)/P3A(1)/SEG21
VLCD2/CPS2/AN8/RB2 10 24 RA5/AN4/C2OUT(1)/CPS7/SRNQ(1)/SS(1)/VCAP(2)/SEG5
VLCD3/P2A(1)/CCP2(1)/CPS3/C12IN2-/AN9/RB3 11 23 RA4/C1OUT/CPS6/T0CKI/SRQ/SEG4
12
13
14
15
16
17
18
19
20
21
22
SEG13/ICDDAT/ICSPDAT/RB7
SEG14/ICDCLK/ICSPCLK/RB6
NC
NC
COM0/CPS4/AN11/RB4
(1)/P3A(1)/CCP3(1)/CPS5/AN13/RB5
VPP/MCLR/RE3
SEG12/VCAP(2)/SS(1)/SRNQ(1)/C2OUT(1)/C12IN0-/AN0/RA0
SEG7/C12IN1-/AN1/RA1
COM2/DACOUT/VREF-/C2IN+/AN2/RA2
SEG15/VREF+/C1IN+/AN3/RA3
COM1/T1G
44-Pin TQFP
Comparator
40-Pin PDIP
44-Pin QFN
Cap Sense
SR Latch
EUSART
Interrupt
ANSEL
Pull-up
Timers
MSSP
Basic
CCP
LCD
A/D
I/O
Errata
An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
of silicon and revision of document to which it applies.
To determine if an errata sheet exists for a particular device, please check with one of the following:
• Microchip’s Worldwide Web site; http://www.microchip.com
• Your local Microchip sales office (see last page)
• The Microchip Corporate Literature Center; U.S. FAX: (480) 792-7277
When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include
literature number) you are using.
15 Configuration
PORTA
15 Data Bus 8
Program Counter RA0
RA1
Flash RA2
MUX
Program RA3
Memory 16-Level
8 Level Stack
Stack RA4
RAM RA5
(13-bit)
(15-bit)
RA6
RA7
Program
14 Program Memory 9 RAM Addr
Bus PORTB
Read (PMR) RB0
Addr MUX RB1
Instruction
Instruction Reg
reg RB2
Direct Addr 7 Indirect
12 Addr RB3
15 RB4
FSR0reg
FSR Reg RB5
FSR1reg
Reg RB6
FSR
RB7
15 STATUS Reg
STATUS reg PORTC
8 RC0
RC1
RC2
3 MUX RC3
Power-up
Timer RC4
RC5
Instruction Oscillator
Decodeand
Decode & Start-up Timer RC6
ALU RC7
Control
OSC1/CLKIN Power-on PORTD
Reset 8
RD0
Timing Watchdog RC1
RD1
OSC2/CLKOUT Generation Timer W Reg
W reg
RD2
Brown-out RD3
Reset RD4
RD5
Internal RD6
Oscillator
RD7
Block
PORTE
RE0
VDD VSS RE1
RE2
RE3/MCLR
Addressable
Comparators CCP4/5 ECCP1/2/3 MSSP SR Latch LCD
EUSART
PC<14:0> PC<14:0>
CALL, CALLW 15 CALL, CALLW 15
RETURN, RETLW RETURN, RETLW
INTERRUPT, RETFIE INTERRUPT, RETFIE
Stack Level 0 Stack Level 0
Stack Level 1 Stack Level 1
PIC16F193X/LF193X
BANK 0 BANK 1 BANK 2 BANK 3 BANK 4 BANK 5 BANK 6 BANK 7
000h INDF0 080h INDF0 100h INDF0 180h INDF0 200h INDF0 280h INDF0 300h INDF0 380h INDF0
001h INDF1 081h INDF1 101h INDF1 181h INDF1 201h INDF1 281h INDF1 301h INDF1 381h INDF1
002h PCL 082h PCL 102h PCL 182h PCL 202h PCL 282h PCL 302h PCL 382h PCL
003h STATUS 083h STATUS 103h STATUS 183h STATUS 203h STATUS 283h STATUS 303h STATUS 383h STATUS
004h FSR0L 084h FSR0L 104h FSR0L 184h FSR0L 204h FSR0L 284h FSR0L 304h FSR0L 384h FSR0L
005h FSR0H 085h FSR0H 105h FSR0H 185h FSR0H 205h FSR0H 285h FSR0H 305h FSR0H 385h FSR0H
006h FSR1L 086h FSR1L 106h FSR1L 186h FSR1L 206h FSR1L 286h FSR1L 306h FSR1L 386h FSR1L
007h FSR1H 087h FSR1H 107h FSR1H 187h FSR1H 207h FSR1H 287h FSR1H 307h FSR1H 387h FSR1H
008h BSR 088h BSR 108h BSR 188h BSR 208h BSR 288h BSR 308h BSR 388h BSR
009h WREG 089h WREG 109h WREG 189h WREG 209h WREG 289h WREG 309h WREG 389h WREG
00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah PCLATH 20Ah PCLATH 28Ah PCLATH 30Ah PCLATH 38Ah PCLATH
00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh INTCON 20Bh INTCON 28Bh INTCON 30Bh INTCON 38Bh INTCON
00Ch PORTA 08Ch TRISA 10Ch LATA 18Ch ANSELA 20Ch — 28Ch — 30Ch — 38Ch —
00Dh PORTB 08Dh TRISB 10Dh LATB 18Dh ANSELB 20Dh WPUB 28Dh — 30Dh — 38Dh —
00Eh PORTC 08Eh TRISC 10Eh LATC 18Eh — 20Eh — 28Eh — 30Eh — 38Eh —
00Fh PORTD(1) 08Fh TRISD(1) 10Fh LATD(1) 18Fh ANSELD(1) 20Fh — 28Fh — 30Fh — 38Fh —
(1)
010h PORTE 090h TRISE 110h LATE 190h ANSELE(1) 210h WPUE 290h — 310h — 390h —
011h PIR1 091h PIE1 111h CM1CON0 191h EEADRL 211h SSPBUF 291h CCPR1L 311h CCPR3L 391h —
Preliminary
012h PIR2 092h PIE2 112h CM1CON1 192h EEADRH 212h SSPADD 292h CCPR1H 312h CCPR3H 392h —
013h PIR3 093h PIE3 113h CM2CON0 193h EEDATL 213h SSPMSK 293h CCP1CON 313h CCP3CON 393h —
014h — 094h — 114h CM2CON1 194h EEDATH 214h SSPSTAT 294h PWM1CON 314h PWM3CON 394h IOCBP
015h TMR0 095h OPTION 115h CMOUT 195h EECON1 215h SSPCON1 295h CCP1AS 315h CCP3AS 395h IOCBN
016h TMR1L 096h PCON 116h BORCON 196h EECON2 216h SSPCON2 296h PSTR1CON 316h PSTR3CON 396h IOCBF
017h TMR1H 097h WDTCON 117h FVRCON 197h — 217h SSPCON3 297h — 317h — 397h —
018h T1CON 098h OSCTUNE 118h DACCON0 198h — 218h — 298h CCPR2L 318h CCPR4L 398h —
019h T1GCON 099h OSCCON 119h DACCON1 199h RCREG 219h — 299h CCPR2H 319h CCPR4H 399h —
01Ah TMR2 09Ah OSCSTAT 11Ah SRCON0 19Ah TXREG 21Ah — 29Ah CCP2CON 31Ah CCP4CON 39Ah —
01Bh PR2 09Bh ADRESL 11Bh SRCON1 19Bh SPBRGL 21Bh — 29Bh PWM2CON 31Bh — 39Bh —
01Ch T2CON 09Ch ADRESH 11Ch — 19Ch SPBRGH 21Ch — 29Ch CCP2AS 31Ch CCPR5L 39Ch —
01Dh — 09Dh ADCON0 11Dh APFCON 19Dh RCSTA 21Dh — 29Dh PSTR2CON 31Dh CCPR5H 39Dh —
01Eh CPSCON0 09Eh ADCON1 11Eh — 19Eh TXSTA 21Eh — 29Eh CCPTMRS0 31Eh CCP5CON 39Eh —
01Fh CPSCON1 09Fh — 11Fh — 19Fh BAUDCTR 21Fh — 29Fh CCPTMRS1 31Fh — 39Fh —
020h 0A0h 120h 1A0h 220h 2A0h 320h 3A0h
© 2009 Microchip Technology Inc.
General General
Purpose Purpose Unimplemented Unimplemented Unimplemented Unimplemented Unimplemented
General Register Register Read as ‘0’ Read as ‘0’ Read as ‘0’ Read as ‘0’ Read as ‘0’
Purpose 80 Bytes 80 Bytes
Register 36Fh 3EFh
06Fh 0EFh 16Fh 1EFh 26Fh 2EFh
96 Bytes
070h 0F0h 170h 1F0h 270h 2F0h 370h 3F0h
Accesses Accesses Accesses Accesses Accesses Accesses Accesses
70h – 7Fh 70h – 7Fh 70h – 7Fh 70h – 7Fh 70h – 7Fh 70h – 7Fh 70h – 7Fh
07Fh 0FFh 17Fh 1FFh 27Fh 2FFh 37Fh 3FFh
Legend: = Unimplemented data memory locations, read as ‘0’.
Note 1: Not available on PIC16F1933/1936/1938/PIC16LF1933/1936/1938.
TABLE 2-3: PIC16F1933/1934 MEMORY MAP, BANKS 8-15
DS41364B-page 26
PIC16F193X/LF193X
BANK 8 BANK 9 BANK 10 BANK 11 BANK 12 BANK 13 BANK 14 BANK 15
400h INDF0 480h INDF0 500h INDF0 580h INDF0 600h INDF0 680h INDF0 700h INDF0 780h INDF0
401h INDF1 481h INDF1 501h INDF1 581h INDF1 601h INDF1 681h INDF1 701h INDF1 781h INDF1
402h PCL 482h PCL 502h PCL 582h PCL 602h PCL 682h PCL 702h PCL 782h PCL
403h STATUS 483h STATUS 503h STATUS 583h STATUS 603h STATUS 683h STATUS 703h STATUS 783h STATUS
404h FSR0L 484h FSR0L 504h FSR0L 584h FSR0L 604h FSR0L 684h FSR0L 704h FSR0L 784h FSR0L
405h FSR0H 485h FSR0H 505h FSR0H 585h FSR0H 605h FSR0H 685h FSR0H 705h FSR0H 785h FSR0H
406h FSR1L 486h FSR1L 506h FSR1L 586h FSR1L 606h FSR1L 686h FSR1L 706h FSR1L 786h FSR1L
407h FSR1H 487h FSR1H 507h FSR1H 587h FSR1H 607h FSR1H 687h FSR1H 707h FSR1H 787h FSR1H
408h BSR 488h BSR 508h BSR 588h BSR 608h BSR 688h BSR 708h BSR 788h BSR
409h WREG 489h WREG 509h WREG 589h WREG 609h WREG 689h WREG 709h WREG 789h WREG
40Ah PCLATH 48Ah PCLATH 50Ah PCLATH 58Ah PCLATH 60Ah PCLATH 68Ah PCLATH 70Ah PCLATH 78Ah PCLATH
40Bh INTCON 48Bh INTCON 50Bh INTCON 58Bh INTCON 60Bh INTCON 68Bh INTCON 70Bh INTCON 78Bh INTCON
40Ch — 48Ch — 50Ch — 58Ch — 60Ch — 68Ch — 70Ch — 78Ch —
40Dh — 48Dh — 50Dh — 58Dh — 60Dh — 68Dh — 70Dh — 78Dh —
40Eh — 48Eh — 50Eh — 58Eh — 60Eh — 68Eh — 70Eh — 78Eh —
40Fh — 48Fh — 50Fh — 58Fh — 60Fh — 68Fh — 70Fh — 78Fh —
410h — 490h — 510h — 590h — 610h — 690h — 710h — 790h —
411h — 491h — 511h — 591h — 611h — 691h — 711h — 791h
Preliminary
PIC16F193X/LF193X
BANK 0 BANK 1 BANK 2 BANK 3 BANK 4 BANK 5 BANK 6 BANK 7
000h INDF0 080h INDF0 100h INDF0 180h INDF0 200h INDF0 280h INDF0 300h INDF0 380h INDF0
001h INDF1 081h INDF1 101h INDF1 181h INDF1 201h INDF1 281h INDF1 301h INDF1 381h INDF1
002h PCL 082h PCL 102h PCL 182h PCL 202h PCL 282h PCL 302h PCL 382h PCL
003h STATUS 083h STATUS 103h STATUS 183h STATUS 203h STATUS 283h STATUS 303h STATUS 383h STATUS
004h FSR0L 084h FSR0L 104h FSR0L 184h FSR0L 204h FSR0L 284h FSR0L 304h FSR0L 384h FSR0L
005h FSR0H 085h FSR0H 105h FSR0H 185h FSR0H 205h FSR0H 285h FSR0H 305h FSR0H 385h FSR0H
006h FSR1L 086h FSR1L 106h FSR1L 186h FSR1L 206h FSR1L 286h FSR1L 306h FSR1L 386h FSR1L
007h FSR1H 087h FSR1H 107h FSR1H 187h FSR1H 207h FSR1H 287h FSR1H 307h FSR1H 387h FSR1H
008h BSR 088h BSR 108h BSR 188h BSR 208h BSR 288h BSR 308h BSR 388h BSR
009h WREG 089h WREG 109h WREG 189h WREG 209h WREG 289h WREG 309h WREG 389h WREG
00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah PCLATH 20Ah PCLATH 28Ah PCLATH 30Ah PCLATH 38Ah PCLATH
00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh INTCON 20Bh INTCON 28Bh INTCON 30Bh INTCON 38Bh INTCON
00Ch PORTA 08Ch TRISA 10Ch LATA 18Ch ANSELA 20Ch — 28Ch — 30Ch — 38Ch —
00Dh PORTB 08Dh TRISB 10Dh LATB 18Dh ANSELB 20Dh WPUB 28Dh — 30Dh — 38Dh —
00Eh PORTC 08Eh TRISC 10Eh LATC 18Eh — 20Eh — 28Eh — 30Eh — 38Eh —
00Fh PORTD(1) 08Fh TRISD(1) 10Fh LATD(1) 18Fh ANSELD(1) 20Fh — 28Fh — 30Fh — 38Fh —
(1)
010h PORTE 090h TRISE 110h LATE 190h ANSELE(1) 210h WPUE 290h — 310h — 390h —
011h PIR1 091h PIE1 111h CM1CON0 191h EEADRL 211h SSPBUF 291h CCPR1L 311h CCPR3L 391h —
Preliminary
012h PIR2 092h PIE2 112h CM1CON1 192h EEADRH 212h SSPADD 292h CCPR1H 312h CCPR3H 392h —
013h PIR3 093h PIE3 113h CM2CON0 193h EEDATL 213h SSPMSK 293h CCP1CON 313h CCP3CON 393h —
014h — 094h — 114h CM2CON1 194h EEDATH 214h SSPSTAT 294h PWM1CON 314h PWM3CON 394h IOCBP
015h TMR0 095h OPTION 115h CMOUT 195h EECON1 215h SSPCON1 295h CCP1AS 315h CCP3AS 395h IOCBN
016h TMR1L 096h PCON 116h BORCON 196h EECON2 216h SSPCON2 296h PSTR1CON 316h PSTR3CON 396h IOCBF
017h TMR1H 097h WDTCON 117h FVRCON 197h — 217h SSPCON3 297h — 317h — 397h —
018h T1CON 098h OSCTUNE 118h DACCON0 198h — 218h — 298h CCPR2L 318h CCPR4L 398h —
019h T1GCON 099h OSCCON 119h DACCON1 199h RCREG 219h — 299h CCPR2H 319h CCPR4H 399h —
01Ah TMR2 09Ah OSCSTAT 11Ah SRCON0 19Ah TXREG 21Ah — 29Ah CCP2CON 31Ah CCP4CON 39Ah —
01Bh PR2 09Bh ADRESL 11Bh SRCON1 19Bh SPBRGL 21Bh — 29Bh PWM2CON 31Bh — 39Bh —
01Ch TxCON 09Ch ADRESH 11Ch — 19Ch SPBRGH 21Ch — 29Ch CCP2AS 31Ch CCPR5L 39Ch —
01Dh — 09Dh ADCON0 11Dh APFCON 19Dh RCSTA 21Dh — 29Dh PSTR2CON 31Dh CCPR5H 39Dh —
01Eh CPSCON0 09Eh ADCON1 11Eh — 19Eh TXSTA 21Eh — 29Eh CCPTMRS0 31Eh CCP5CON 39Eh —
01Fh CPSCON1 09Fh — 11Fh — 19Fh BAUDCON 21Fh — 29Fh CCPTMRS1 31Fh — 39Fh —
020h 0A0h 120h 1A0h 220h 2A0h 320h General Purpose 3A0h
© 2009 Microchip Technology Inc.
PIC16F193X/LF193X
BANK 8 BANK 9 BANK 10 BANK 11 BANK 12 BANK 13 BANK 14 BANK 15
400h INDF0 480h INDF0 500h INDF0 580h INDF0 600h INDF0 680h INDF0 700h INDF0 780h INDF0
401h INDF1 481h INDF1 501h INDF1 581h INDF1 601h INDF1 681h INDF1 701h INDF1 781h INDF1
402h PCL 482h PCL 502h PCL 582h PCL 602h PCL 682h PCL 702h PCL 782h PCL
403h STATUS 483h STATUS 503h STATUS 583h STATUS 603h STATUS 683h STATUS 703h STATUS 783h STATUS
404h FSR0L 484h FSR0L 504h FSR0L 584h FSR0L 604h FSR0L 684h FSR0L 704h FSR0L 784h FSR0L
405h FSR0H 485h FSR0H 505h FSR0H 585h FSR0H 605h FSR0H 685h FSR0H 705h FSR0H 785h FSR0H
406h FSR1L 486h FSR1L 506h FSR1L 586h FSR1L 606h FSR1L 686h FSR1L 706h FSR1L 786h FSR1L
407h FSR1H 487h FSR1H 507h FSR1H 587h FSR1H 607h FSR1H 687h FSR1H 707h FSR1H 787h FSR1H
408h BSR 488h BSR 508h BSR 588h BSR 608h BSR 688h BSR 708h BSR 788h BSR
409h WREG 489h WREG 509h WREG 589h WREG 609h WREG 689h WREG 709h WREG 789h WREG
40Ah PCLATH 48Ah PCLATH 50Ah PCLATH 58Ah PCLATH 60Ah PCLATH 68Ah PCLATH 70Ah PCLATH 78Ah PCLATH
40Bh INTCON 48Bh INTCON 50Bh INTCON 58Bh INTCON 60Bh INTCON 68Bh INTCON 70Bh INTCON 78Bh INTCON
40Ch — 48Ch — 50Ch — 58Ch — 60Ch — 68Ch — 70Ch — 78Ch —
40Dh — 48Dh — 50Dh — 58Dh — 60Dh — 68Dh — 70Dh — 78Dh —
40Eh — 48Eh — 50Eh — 58Eh — 60Eh — 68Eh — 70Eh — 78Eh —
40Fh — 48Fh — 50Fh — 58Fh — 60Fh — 68Fh — 70Fh — 78Fh —
410h — 490h — 510h — 590h — 610h — 690h — 710h — 790h —
411h — 491h — 511h — 591h — 611h — 691h — 711h — 791h
Preliminary
PIC16F193X/LF193X
BANK 0 BANK 1 BANK 2 BANK 3 BANK 4 BANK 5 BANK 6 BANK 7
000h INDF0 080h INDF0 100h INDF0 180h INDF0 200h INDF0 280h INDF0 300h INDF0 380h INDF0
001h INDF1 081h INDF1 101h INDF1 181h INDF1 201h INDF1 281h INDF1 301h INDF1 381h INDF1
002h PCL 082h PCL 102h PCL 182h PCL 202h PCL 282h PCL 302h PCL 382h PCL
003h STATUS 083h STATUS 103h STATUS 183h STATUS 203h STATUS 283h STATUS 303h STATUS 383h STATUS
004h FSR0L 084h FSR0L 104h FSR0L 184h FSR0L 204h FSR0L 284h FSR0L 304h FSR0L 384h FSR0L
005h FSR0H 085h FSR0H 105h FSR0H 185h FSR0H 205h FSR0H 285h FSR0H 305h FSR0H 385h FSR0H
006h FSR1L 086h FSR1L 106h FSR1L 186h FSR1L 206h FSR1L 286h FSR1L 306h FSR1L 386h FSR1L
007h FSR1H 087h FSR1H 107h FSR1H 187h FSR1H 207h FSR1H 287h FSR1H 307h FSR1H 387h FSR1H
008h BSR 088h BSR 108h BSR 188h BSR 208h BSR 288h BSR 308h BSR 388h BSR
009h WREG 089h WREG 109h WREG 189h WREG 209h WREG 289h WREG 309h WREG 389h WREG
00Ah PCLATH 08Ah PCLATH 10Ah PCLATH 18Ah PCLATH 20Ah PCLATH 28Ah PCLATH 30Ah PCLATH 38Ah PCLATH
00Bh INTCON 08Bh INTCON 10Bh INTCON 18Bh INTCON 20Bh INTCON 28Bh INTCON 30Bh INTCON 38Bh INTCON
00Ch PORTA 08Ch TRISA 10Ch LATA 18Ch ANSELA 20Ch — 28Ch — 30Ch — 38Ch —
00Dh PORTB 08Dh TRISB 10Dh LATB 18Dh ANSELB 20Dh WPUB 28Dh — 30Dh — 38Dh —
00Eh PORTC 08Eh TRISC 10Eh LATC 18Eh — 20Eh — 28Eh — 30Eh — 38Eh —
00Fh PORTD(1) 08Fh TRISD(1) 10Fh LATD(1) 18Fh ANSELD(1) 20Fh — 28Fh — 30Fh — 38Fh —
(1)
010h PORTE 090h TRISE 110h LATE 190h ANSELE(1) 210h WPUE 290h — 310h — 390h —
011h PIR1 091h PIE1 111h CM1CON0 191h EEADRL 211h SSPBUF 291h CCPR1L 311h CCPR3L 391h —
Preliminary
012h PIR2 092h PIE2 112h CM1CON1 192h EEADRH 212h SSPADD 292h CCPR1H 312h CCPR3H 392h —
013h PIR3 093h PIE3 113h CM2CON0 193h EEDATL 213h SSPMSK 293h CCP1CON 313h CCP3CON 393h —
014h — 094h — 114h CM2CON1 194h EEDATH 214h SSPSTAT 294h PWM1CON 314h PWM3CON 394h IOCBP
015h TMR0 095h OPTION 115h CMOUT 195h EECON1 215h SSPCON1 295h CCP1AS 315h CCP3AS 395h IOCBN
016h TMR1L 096h PCON 116h BORCON 196h EECON2 216h SSPCON2 296h PSTR1CON 316h PSTR3CON 396h IOCBF
017h TMR1H 097h WDTCON 117h FVRCON 197h — 217h SSPCON3 297h — 317h — 397h —
018h T1CON 098h OSCTUNE 118h DACCON0 198h — 218h — 298h CCPR2L 318h CCPR4L 398h —
019h T1GCON 099h OSCCON 119h DACCON1 199h RC1REG 219h — 299h CCPR2H 319h CCPR4H 399h —
01Ah TMR2 09Ah OSCSTAT 11Ah SRCON0 19Ah TX1REG 21Ah — 29Ah CCP2CON 31Ah CCP4CON 39Ah —
01Bh PR2 09Bh ADRESL 11Bh SRCON1 19Bh SPBRGL1 21Bh — 29Bh PWM2CON 31Bh — 39Bh —
01Ch T2CON 09Ch ADRESH 11Ch — 19Ch SPBRGH1 21Ch — 29Ch CCP2AS 31Ch CCPR5L 39Ch —
01Dh — 09Dh ADCON0 11Dh APFCON 19Dh RCSTA1 21Dh — 29Dh PSTR2CON 31Dh CCPR5H 39Dh —
01Eh CPSCON0 09Eh ADCON1 11Eh — 19Eh TXSTA1 21Eh — 29Eh CCPTMRS0 31Eh CCP5CON 39Eh —
01Fh CPSCON1 09Fh — 11Fh — 19Fh BAUDCTL1 21Fh — 29Fh CCPTMRS1 31Fh — 39Fh —
020h 0A0h 120h 1A0h 220h 2A0h 320h 3A0h
© 2009 Microchip Technology Inc.
PIC16F193X/LF193X
BANK 8 BANK 9 BANK 10 BANK 11 BANK 12 BANK 13 BANK 14 BANK 15
400h INDF0 480h INDF0 500h INDF0 580h INDF0 600h INDF0 680h INDF0 700h INDF0 780h INDF0
401h INDF1 481h INDF1 501h INDF1 581h INDF1 601h INDF1 681h INDF1 701h INDF1 781h INDF1
402h PCL 482h PCL 502h PCL 582h PCL 602h PCL 682h PCL 702h PCL 782h PCL
403h STATUS 483h STATUS 503h STATUS 583h STATUS 603h STATUS 683h STATUS 703h STATUS 783h STATUS
404h FSR0L 484h FSR0L 504h FSR0L 584h FSR0L 604h FSR0L 684h FSR0L 704h FSR0L 784h FSR0L
405h FSR0H 485h FSR0H 505h FSR0H 585h FSR0H 605h FSR0H 685h FSR0H 705h FSR0H 785h FSR0H
406h FSR1L 486h FSR1L 506h FSR1L 586h FSR1L 606h FSR1L 686h FSR1L 706h FSR1L 786h FSR1L
407h FSR1H 487h FSR1H 507h FSR1H 587h FSR1H 607h FSR1H 687h FSR1H 707h FSR1H 787h FSR1H
408h BSR 488h BSR 508h BSR 588h BSR 608h BSR 688h BSR 708h BSR 788h BSR
409h WREG 489h WREG 509h WREG 589h WREG 609h WREG 689h WREG 709h WREG 789h WREG
40Ah PCLATH 48Ah PCLATH 50Ah PCLATH 58Ah PCLATH 60Ah PCLATH 68Ah PCLATH 70Ah PCLATH 78Ah PCLATH
40Bh INTCON 48Bh INTCON 50Bh INTCON 58Bh INTCON 60Bh INTCON 68Bh INTCON 70Bh INTCON 78Bh INTCON
40Ch — 48Ch — 50Ch — 58Ch — 60Ch — 68Ch — 70Ch — 78Ch —
40Dh — 48Dh — 50Dh — 58Dh — 60Dh — 68Dh — 70Dh — 78Dh —
40Eh — 48Eh — 50Eh — 58Eh — 60Eh — 68Eh — 70Eh — 78Eh —
40Fh — 48Fh — 50Fh — 58Fh — 60Fh — 68Fh — 70Fh — 78Fh —
410h — 490h — 510h — 590h — 610h — 690h — 710h — 790h —
411h — 491h — 511h — 591h — 611h — 691h — 711h — 791h
Preliminary
PIC16F193X/LF193X
818h — 898h — 918h — 998h — A18h — A98h — B18h — B98h —
819h — 899h — 919h — 999h — A19h — A99h — B19h — B99h —
81Ah — 89Ah — 91Ah — 99Ah — A1Ah — A9Ah — B1Ah — B9Ah —
81Bh — 89Bh — 91Bh — 99Bh — A1Bh — A9Bh — B1Bh — B9Bh —
81Ch — 89Ch — 91Ch — 99Ch — A1Ch — A9Ch — B1Ch — B9Ch —
81Dh — 89Dh — 91Dh — 99Dh — A1Dh — A9Dh — B1Dh — B9Dh —
81Eh — 89Eh — 91Eh — 99Eh — A1Eh — A9Eh — B1Eh — B9Eh —
81Fh — 89Fh — 91Fh — 99Fh — A1Fh — A9Fh — B1Fh — B9Fh —
820h 8A0h 920h 9A0h A20h AA0h B20h BA0h
PIC16F193X/LF193X
BANK 24 BANK 25 BANK 26 BANK 27 BANK 28 BANK 29 BANK 30 BANK 31
C00h INDF0 C80h INDF0 D00h INDF0 D80h INDF0 E00h INDF0 E80h INDF0 F00h INDF0 F80h INDF0
C01h INDF1 C81h INDF1 D01h INDF1 D81h INDF1 E01h INDF1 E81h INDF1 F01h INDF1 F81h INDF1
C02h PCL C82h PCL D02h PCL D82h PCL E02h PCL E82h PCL F02h PCL F82h PCL
C03h STATUS C83h STATUS D03h STATUS D83h STATUS E03h STATUS E83h STATUS F03h STATUS F83h STATUS
C04h FSR0L C84h FSR0L D04h FSR0L D84h FSR0L E04h FSR0L E84h FSR0L F04h FSR0L F84h FSR0L
C05h FSR0H C85h FSR0H D05h FSR0H D85h FSR0H E05h FSR0H E85h FSR0H F05h FSR0H F85h FSR0H
C06h FSR1L C86h FSR1L D06h FSR1L D86h FSR1L E06h FSR1L E86h FSR1L F06h FSR1L F86h FSR1L
C07h FSR1H C87h FSR1H D07h FSR1H D87h FSR1H E07h FSR1H E87h FSR1H F07h FSR1H F87h FSR1H
C08h BSR C88h BSR D08h BSR D88h BSR E08h BSR E88h BSR F08h BSR F88h BSR
C09h WREG C89h WREG D09h WREG D89h WREG E09h WREG E89h WREG F09h WREG F89h WREG
C0Ah PCLATH C8Ah PCLATH D0Ah PCLATH D8Ah PCLATH E0Ah PCLATH E8Ah PCLATH F0Ah PCLATH F8Ah PCLATH
C0Bh INTCON C8Bh INTCON D0Bh INTCON D8Bh INTCON E0Bh INTCON E8Bh INTCON F0Bh INTCON F8Bh INTCON
C0Ch — C8Ch — D0Ch — D8Ch — E0Ch — E8Ch — F0Ch — F8Ch
C0Dh — C8Dh — D0Dh — D8Dh — E0Dh — E8Dh — F0Dh — F8Dh
C0Eh — C8Eh — D0Eh — D8Eh — E0Eh — E8Eh — F0Eh — F8Eh
C0Fh — C8Fh — D0Fh — D8Fh — E0Fh — E8Fh — F0Fh — F8Fh
C10h — C90h — D10h — D90h — E10h — E90h — F10h — F90h
C11h — C91h — D11h — D91h — E11h — E91h — F11h — F91h
Preliminary
Unimplemented
Read as ‘0’
FE3h
FE4h STATUS_SHAD
FE5h WREG_SHAD
FE6h BSR_SHAD
FE7h PCLATH_SHAD
FE8h FSR0L_SHAD
FE9h FSR0H_SHAD
FEAh FSR1L_SHAD
FEBh FSR1H_SHAD
FECh —
FEDh STKPTR
FEEh TOSL
FEFh TOSH
Legend: = Unimplemented data memory locations,
read as ‘0’.
Bank 1
080h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
081h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
082h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
083h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
084h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
085h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
086h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
087h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
088h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
089h(2) WREG Working Register 0000 0000 uuuu uuuu
08Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
08Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
08Ch TRISA PORTA Data Direction Register 1111 1111 1111 1111
08Dh TRISB PORTB Data Direction Register 1111 1111 1111 1111
08Eh TRISC PORTC Data Direction Register 1111 1111 1111 1111
08Fh(3) TRISD PORTD Data Direction Register 1111 1111 1111 1111
090h TRISE — — — — TRISE3 TRISE2(3) TRISE1(3) TRISE0(3) ---- 1111 ---- 1111
091h PIE1 TMR1GIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
092h PIE2 OSFIE C2IE C1IE EEIE BCLIE LCDIE — CCP2IE 0000 00-0 0000 00-0
093h PIE3 — CCP5IE CCP4IE CCP3IE TMR6IE — TMR4IE — -000 0-0- -000 0-0-
094h — Unimplemented — —
095h OPTION_REG WPUEN INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
096h PCON STKOVF STKUNF — — RMCLR RI POR BOR 00-- 11qq qq-- qquu
097h WDTCON — — WDTPS4 WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN --01 0110 --01 0110
098h OSCTUNE — — TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 --00 0000 --00 0000
099h OSCCON SPLLEN IRCF3 IRCF2 IRCF1 IRCF0 — SCS1 SCS0 0011 1-00 0011 1-00
09Ah OSCSTAT T1OSCR PLLR OSTS HFIOFR HFIOFL MFIOFR LFIOFR HFIOFR 00q0 0q0- qqqq qq0-
09Bh ADRESL A/D Result Register Low xxxx xxxx uuuu uuuu
09Ch ADRESH A/D Result Register High xxxx xxxx uuuu uuuu
09Dh ADCON0 — CHS4 CHS3 CHS2 CHS1 CHS0 GO/DONE ADON -000 0000 -000 0000
09Eh ADCON1 ADFM ADCS2 ADCS1 ADCS0 — ADNREF ADPREF1 ADPREF0 0000 -000 0000 -000
09Fh — Unimplemented — —
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 2
100h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
101h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
102h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
103h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
104h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
105h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
106h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
107h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
108h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
109h(2) WREG Working Register 0000 0000 uuuu uuuu
10Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
10Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
10Ch LATA PORTA Data Latch xxxx xxxx uuuu uuuu
10Dh LATB PORTB Data Latch xxxx xxxx uuuu uuuu
10Eh LATC PORTC Data Latch xxxx xxxx uuuu uuuu
10Fh(3) LATD PORTD Data Latch xxxx xxxx uuuu uuuu
110h LATE — — — — LATE3 LATE2(3) LATE1(3) LATE0(3) ---- -xxx ---- -uuu
111h CM1CON0 C1ON C1OUT C1OE C1POL — C1SP C1HYS C1SYNC 0000 -100 0000 -100
112h CM1CON1 C1INTP C1INTN C1PCH1 C1PCH0 — — C1NCH1 C1NCH0 0000 --00 0000 --00
113h CM2CON0 C2ON C2OUT C2OE C2POL — C2SP C2HYS C2SYNC 0000 -100 0000 -100
114h CM2CON1 C2INTP C2INTN C2PCH1 C2PCH0 — — C2NCH1 C2NCH0 0000 --00 0000 --00
115h CMOUT — — — — — — MC2OUT MC1OUT ---- --00 ---- --00
116h BORCON SBOREN — — — — — — BORRDY 1--- ---q u--- ---u
117h FVRCON FVREN FVRRDY TSEN TSRNG CDAFVR1 CDAFVR0 ADFVR1 ADFVR0 0q00 0000 0q00 0000
118h DACCON0 DACEN DACLPS DACOE --- DACPSS1 DACPSS0 --- DACNSS 000- 00-0 000- 00-0
119h DACCON1 --- --- --- DACR4 DACR3 DACR2 DACR1 DACR0 ---0 0000 ---0 0000
11Ah SRCON0 SRLEN SRCLK2 SRCLK1 SRCLK0 SRQEN SRNQEN SRPS SRPR 0000 0000 0000 0000
11Bh SRCON1 SRSPE SRSCKE SRSC2E SRSC1E SRRPE SRRCKE SRRC2E SRRC1E 0000 0000 0000 0000
11Ch — Unimplemented — —
11Dh APFCON — CCP3SEL T1GSEL P2BSEL SRNQSEL C2OUTSEL SSSEL CCP2SEL -000 0000 -000 0000
11Eh — Unimplemented — —
11Fh — Unimplemented — —
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 3
180h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
181h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
182h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
183h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
184h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
185h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
186h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
187h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
188h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
189h(2) WREG Working Register 0000 0000 uuuu uuuu
18Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
18Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
18Ch ANSELA — — ANSA5 ANSA4 ANSA3 ANSA2 ANSA1 ANSA0 --11 1111 --11 1111
18Dh ANSELB — — ANSB5 ANSB4 ANSB3 ANSB2 ANSB1 ANSB0 --11 1111 --11 1111
18Eh — Unimplemented — —
18Fh(3) ANSELD ANSD7 ANSD6 ANSD5 ANSD4 ANSD3 ANSD2 ANSD1 ANSD0 1111 1111 1111 1111
190h(3) ANSELE — — — — — ANSE2 ANSE1 ANSE0 ---- -111 ---- -111
191h EEADRL EEPROM / Program Memory Address Register Low Byte 0000 0000 0000 0000
192h EEADRH — EEPROM / Program Memory Address Register High Byte -000 0000 -000 0000
193h EEDATL EEPROM / Program Memory Read Data Register Low Byte xxxx xxxx uuuu uuuu
194h EEDATH — — EEPROM / Program Memory Read Data Register High Byte --xx xxxx --uu uuuu
195h EECON1 EEPGD CFGS LWLO FREE WRERR WREN WR RD 0000 x000 0000 q000
196h EECON2 EEPROM control register 2 0000 0000 0000 0000
197h — Unimplemented — —
198h — Unimplemented — —
199h RCREG USART Receive Data Register 0000 0000 0000 0000
19Ah TXREG USART Transmit Data Register 0000 0000 0000 0000
19Bh SPBRGL BRG7 BRG6 BRG5 BRG4 BRG3 BRG2 BRG1 BRG0 0000 0000 0000 0000
19Ch SPBRGH BRG15 BRG14 BRG13 BRG12 BRG11 BRG10 BRG9 BRG8 0000 0000 0000 0000
19Dh RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x
19Eh TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 0000 0010
19Fh BAUDCON ABDOVF RCIDL — SCKP BRG16 — WUE ABDEN 01-0 0-00 01-0 0-00
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 4
200h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
201h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
202h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
203h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
204h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
205h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
206h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
207h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
208h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
209h(2) WREG Working Register 0000 0000 uuuu uuuu
20Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
20Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
20Ch — Unimplemented — —
20Dh WPUB WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 1111 1111 1111 1111
20Eh — Unimplemented — —
20Fh — Unimplemented — —
210h WPUE — — — — WPUE3 — — — ---- 1--- ---- 1---
211h SSPBUF Synchronous Serial Port Receive Buffer/Transmit Register xxxx xxxx uuuu uuuu
212h SSPADD ADD7 ADD6 ADD5 ADD4 ADD3 ADD2 ADD1 ADD0 0000 0000 0000 0000
213h SSPMSK MSK7 MSK6 MSK5 MSK4 MSK3 MSK2 MSK1 MSK0 1111 1111 1111 1111
214h SSPSTAT SMP CKE D/A P S R/W UA BF 0000 0000 0000 0000
215h SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000
216h SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 0000 0000
217h SSPCON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN 0000 0000 0000 0000
218h — Unimplemented — —
219h — Unimplemented — —
21Ah — Unimplemented — —
21Bh — Unimplemented — —
21Ch — Unimplemented — —
21Dh — Unimplemented — —
21Eh — Unimplemented — —
21Fh — Unimplemented — —
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 5
280h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
281h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
282h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
283h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
284h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
285h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
286h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
287h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
288h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
289h(2) WREG Working Register 0000 0000 uuuu uuuu
28Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
28Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
28Ch — Unimplemented — —
28Dh — Unimplemented — —
28Eh — Unimplemented — —
28Fh — Unimplemented — —
290h — Unimplemented — —
291h CCPR1L Capture/Compare/PWM Register 1 (LSB) xxxx xxxx uuuu uuuu
292h CCPR1H Capture/Compare/PWM Register 1 (MSB) xxxx xxxx uuuu uuuu
293h CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000 0000 0000
294h PWM1CON P1RSEN P1DC6 P1DC5 P1DC4 P1DC3 P1DC2 P1DC1 P1DC0 0000 0000 0000 0000
295h CCP1AS CCP1ASE CCP1AS2 CCP1AS1 CCP1AS0 PSS1AC1 PSS1AC0 PSS1BD1 PSS1BD0 0000 0000 0000 0000
296h PSTR1CON — — — STR1SYNC STR1D STR1C STR1B STR1A ---0 0001 ---0 0001
297h — Unimplemented — —
298h CCPR2L Capture/Compare/PWM Register 2 (LSB) xxxx xxxx uuuu uuuu
299h CCPR2H Capture/Compare/PWM Register 2 (MSB) xxxx xxxx uuuu uuuu
29Ah CCP2CON P2M1 P2M0 DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 0000 0000 0000 0000
29Bh PWM2CON P2RSEN P2DC6 P2DC5 P2DC4 P2DC3 P2DC2 P2DC1 P2DC0 0000 0000 0000 0000
29Ch CCP2AS CCP2ASE CCP2AS2 CCP2AS1 CCP2AS0 PSS2AC1 PSS2AC0 PSS2BD1 PSS2BD0 0000 0000 0000 0000
29Dh PSTR2CON — — — STR2SYNC STR2D STR2C STR2B STR2A ---0 0001 ---0 0001
29Eh CCPTMRS0 C4TSEL1 C4TSEL0 C3TSEL1 C3TSEL0 C2TSEL1 C2TSEL0 C1TSEL1 C1TSEL0 0000 0000 0000 0000
29Fh CCPTMRS1 — — — — — — C5TSEL1 C5TSEL0 ---- --00 ---- --00
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 6
300h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
301h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
302h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
303h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
304h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
305h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
306h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
307h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
308h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
309h(2) WREG Working Register 0000 0000 uuuu uuuu
30Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
30Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
30Ch — Unimplemented — —
30Dh — Unimplemented — —
30Eh — Unimplemented — —
30Fh — Unimplemented — —
310h — Unimplemented — —
311h CCPR3L Capture/Compare/PWM Register 3 (LSB) xxxx xxxx uuuu uuuu
312h CCPR3H Capture/Compare/PWM Register 3 (MSB) xxxx xxxx uuuu uuuu
313h CCP3CON P3M1 P3M0 DC3B1 DC3B0 CCP3M3 CCP3M2 CCP3M1 CCP3M0 0000 0000 0000 0000
314h PWM3CON P3RSEN P3DC6 P3DC5 P3DC4 P3DC3 P3DC2 P3DC1 P3DC0 0000 0000 0000 0000
315h CCP3AS CCP3ASE CCP3AS2 CCP3AS1 CCP3AS0 PSS3AC1 PSS3AC0 PSS3BD1 PSS3BD0 0000 0000 0000 0000
316h PSTR3CON — — — STR3SYNC STR3D STR3C STR3B STR3A ---0 0001 ---0 0001
317h — Unimplemented — —
318h CCPR4L Capture/Compare/PWM Register 4 (LSB) xxxx xxxx uuuu uuuu
319h CCPR4H Capture/Compare/PWM Register 4 (MSB) xxxx xxxx uuuu uuuu
31Ah CCP4CON — — DC4B1 DC4B0 CCP4M3 CCP4M2 CCP4M1 CCP4M0 --00 0000 --00 0000
31Bh — Unimplemented — —
31Ch CCPR5L Capture/Compare/PWM Register 5 (LSB) xxxx xxxx uuuu uuuu
31Dh CCPR5H Capture/Compare/PWM Register 5 (MSB) xxxx xxxx uuuu uuuu
31Eh CCP5CON — — DC5B1 DC5B0 CCP5M3 CCP5M2 CCP5M1 CCP5M0 --00 0000 --00 0000
31Fh — Unimplemented — —
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 7
380h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
381h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
382h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
383h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
384h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
385h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
386h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
387h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
388h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
389h(2) WREG Working Register 0000 0000 uuuu uuuu
38Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
38Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
38Ch — Unimplemented — —
38Dh — Unimplemented — —
38Eh — Unimplemented — —
38Fh — Unimplemented — —
390h — Unimplemented — —
391h — Unimplemented — —
392h — Unimplemented — —
393h — Unimplemented — —
394h IOCBP IOCBP7 IOCBP6 IOCBP5 IOCBP4 IOCBP3 IOCBP2 IOCBP1 IOCBP0 0000 0000 0000 0000
395h IOCBN IOCBN7 IOCBN6 IOCBN5 IOCBN4 IOCBN3 IOCBN2 IOCBN1 IOCBN0 0000 0000 0000 0000
396h IOCBF IOCBF7 IOCBF6 IOCBF5 IOCBF4 IOCBF3 IOCBF2 IOCBF1 IOCBF0 0000 0000 0000 0000
397h — Unimplemented — —
398h — Unimplemented — —
399h — Unimplemented — —
39Ah — Unimplemented — —
39Bh — Unimplemented — —
39Ch — Unimplemented — —
39Dh — Unimplemented — —
39Eh — Unimplemented — —
39Fh — Unimplemented — —
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 8
400h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
401h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
402h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
403h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
404h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
405h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
406h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
407h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
408h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
409h(2) WREG Working Register 0000 0000 uuuu uuuu
40Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
40Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
40Ch — Unimplemented — —
40Dh — Unimplemented — —
40Eh — Unimplemented — —
40Fh — Unimplemented — —
410h — Unimplemented — —
411h — Unimplemented — —
412h — Unimplemented — —
413h — Unimplemented — —
414h — Unimplemented — —
415h TMR4 Timer 4 Module Register 0000 0000 0000 0000
416h PR4 Timer 4 Period Register 1111 1111 1111 1111
417h T4CON — T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 -000 0000 -000 0000
418h — Unimplemented — —
419h — Unimplemented — —
41Ah — Unimplemented — —
41Bh — Unimplemented — —
41Ch TMR6 Timer 6 Module Register 0000 0000 0000 0000
41Dh PR6 Timer 6 Period Register 1111 1111 1111 1111
41Eh T6CON — T6OUTPS3 T6OUTPS2 T6OUTPS1 T6OUTPS0 TMR6ON T6CKPS1 T6CKPS0 -000 0000 -000 0000
41Fh — Unimplemented — —
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Banks 9-14
x00h/ INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
x80h(2) (not a physical register)
x00h/ INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
x81h(2) (not a physical register)
x02h/ PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
x82h(2)
x03h/ STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
x83h(2)
x04h/ FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
x84h(2)
x05h/ FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
x85h(2)
x06h/ FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
x86h(2)
x07h/ FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
x87h(2)
x08h/ BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
x88h(2)
x09h/ WREG Working Register 0000 0000 uuuu uuuu
x89h(2)
x0Ah/ PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
x8Ah(1),(2)
x0Bh/ INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
x8Bh(2)
x0Ch/ — Unimplemented — —
x8Ch
—
x1Fh/
x9Fh
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 15
780h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
781h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
782h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
783h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
784h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
785h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
786h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
787h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
788h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
789h(2) WREG Working Register 0000 0000 uuuu uuuu
78Ah(1, 2) PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
78Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
78Ch — Unimplemented — —
78Dh — Unimplemented — —
78Eh — Unimplemented — —
78Fh — Unimplemented — —
790h — Unimplemented — —
791h LCDCON LCDEN SLPEN WERR — CS1 CS0 LMUX1 LMUX0 000- 0011 000- 0011
792h LCDPS WFT BIASMD LCDA WA LP3 LP2 LP1 LP0 0000 0000 0000 0000
793h LCDREF LCDIRE LCDIRS LCDIRI — VLCD3PE VLCD2PE VLCD1PE — 000- 000- 000- 000-
794h LCDCST — — — — — LCDCST2 LCDCST1 LCDCST0 ---- -000 ---- -000
795h LCDRL LRLAP1 LRLAP0 LRLBP1 LRLBP0 — LRLAT2 LRLAT1 LRLAT0 0000 -000 0000 -000
796h — Unimplemented — —
797h — Unimplemented — —
798h LCDSE0 SE7 SE6 SE5 SE4 SE3 SE2 SE1 SE0 0000 0000 uuuu uuuu
799h LCDSE1 SE15 SE14 SE13 SE12 SE11 SE10 SE9 SE8 0000 0000 uuuu uuuu
79Ah LCDSE2(3) SE23 SE22 SE21 SE20 SE19 SE18 SE17 SE16 0000 0000 uuuu uuuu
79Bh — Unimplemented — —
79Ch — Unimplemented — —
79Dh — Unimplemented — —
79Eh — Unimplemented — —
79Fh — Unimplemented — —
7A0h LCDDATA0 SEG7 SEG6 SEG5 SEG4 SEG3 SEG2 SEG1 SEG0 xxxx xxxx uuuu uuuu
COM0 COM0 COM0 COM0 COM0 COM0 COM0 COM0
7A1h LCDDATA1 SEG15 SEG14 SEG13 SEG12 SEG11 SEG10 SEG9 SEG8 xxxx xxxx uuuu uuuu
COM0 COM0 COM0 COM0 COM0 COM0 COM0 COM0
7A2h LCDDATA2(3) SEG23 SEG22 SEG21 SEG20 SEG19 SEG18 SEG17 SEG16 xxxx xxxx uuuu uuuu
COM0 COM0 COM0 COM0 COM0 COM0 COM0 COM0
7A3h LCDDATA3 SEG7 SEG6 SEG5 SEG4 SEG3 SEG2 SEG1 SEG0 xxxx xxxx uuuu uuuu
COM1 COM1 COM1 COM1 COM1 COM1 COM1 COM1
7A4h LCDDATA4 SEG15 SEG14 SEG13 SEG12 SEG11 SEG10 SEG9 SEG8 xxxx xxxx uuuu uuuu
COM1 COM1 COM1 COM1 COM1 COM1 COM1 COM1
7A5h LCDDATA5(3) SEG23 SEG22 SEG21 SEG20 SEG19 SEG18 SEG17 SEG16 xxxx xxxx uuuu uuuu
COM1 COM1 COM1 COM1 COM1 COM1 COM1 COM1
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 15 (Continued)
7A6h LCDDATA6 SEG7 SEG6 SEG5 SEG4 SEG3 SEG2 SEG1 SEG0 xxxx xxxx uuuu uuuu
COM2 COM2 COM2 COM2 COM2 COM2 COM2 COM2
7A7h LCDDATA7 SEG15 SEG14 SEG13 SEG12 SEG11 SEG10 SEG9 SEG8 xxxx xxxx uuuu uuuu
COM2 COM2 COM2 COM2 COM2 COM2 COM2 COM2
7A8h LCDDATA8(3) SEG23 SEG22 SEG21 SEG20 SEG19 SEG18 SEG17 SEG16 xxxx xxxx uuuu uuuu
COM2 COM2 COM2 COM2 COM2 COM2 COM2 COM2
7A9h LCDDATA9 SEG7 SEG6 SEG5 SEG4 SEG3 SEG2 SEG1 SEG0 xxxx xxxx uuuu uuuu
COM3 COM3 COM3 COM3 COM3 COM3 COM3 COM3
7AAh LCDDATA10 SEG15 SEG14 SEG13 SEG12 SEG11 SEG10 SEG9 SEG8 xxxx xxxx uuuu uuuu
COM3 COM3 COM3 COM3 COM3 COM3 COM3 COM3
7ABh LCDDATA11(3) SEG23 SEG22 SEG21 SEG20 SEG19 SEG18 SEG17 SEG16 xxxx xxxx uuuu uuuu
COM3 COM3 COM3 COM3 COM3 COM3 COM3 COM3
7ACh — Unimplemented — —
—
7EFh
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Banks 16-30
x00h/ INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
x80h(2) (not a physical register)
x00h/ INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
x81h(2) (not a physical register)
x02h/ PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
x82h(2)
x03h/ STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
x83h(2)
x04h/ FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
x84h(2)
x05h/ FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
x85h(2)
x06h/ FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
x86h(2)
x07h/ FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
x87h(2)
x08h/ BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
x88h(2)
x09h/ WREG Working Register 0000 0000 uuuu uuuu
x89h(2)
x0Ah/ PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
x8Ah(1),(2)
x0Bh/ INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
x8Bh(2)
x0Ch/ — Unimplemented — —
x8Ch
—
x1Fh/
x9Fh
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Bank 31
F80h(2) INDF0 Addressing this location uses contents of FSR0H/FSR0L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
F81h(2) INDF1 Addressing this location uses contents of FSR1H/FSR1L to address data memory xxxx xxxx xxxx xxxx
(not a physical register)
F82h(2) PCL Program Counter (PC) Least Significant Byte 0000 0000 0000 0000
F83h(2) STATUS — — — TO PD Z DC C ---1 1000 ---q quuu
F84h(2) FSR0L Indirect Data Memory Address 0 Low Pointer 0000 0000 uuuu uuuu
F85h(2) FSR0H Indirect Data Memory Address 0 High Pointer 0000 0000 0000 0000
F86h(2) FSR1L Indirect Data Memory Address 1 Low Pointer 0000 0000 uuuu uuuu
F87h(2) FSR1H Indirect Data Memory Address 1 High Pointer 0000 0000 0000 0000
F88h(2) BSR — — — BSR4 BSR3 BSR2 BSR1 BSR0 ---0 0000 ---0 0000
F89h(2) WREG Working Register 0000 0000 uuuu uuuu
F8Ah(1),(2 PCLATH — Write Buffer for the upper 7 bits of the Program Counter -000 0000 -000 0000
)
F8Bh(2) INTCON GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF 0000 000x 0000 000u
F8Ch — Unimplemented — —
—
FE3h
FE4h STATUS_ Z DC C ---- -xxx ---- -uuu
SHAD
FE5h WREG_ Working Register Normal (Non-ICD) Shadow xxxx xxxx uuuu uuuu
SHAD
FE6h BSR_ Bank Select Register Normal (Non-ICD) Shadow ---x xxxx ---u uuuu
SHAD
FE7h PCLATH_ Program Counter Latch High Register Normal (Non-ICD) Shadow -xxx xxxx uuuu uuuu
SHAD
FE8h FSR0L_ Indirect Data Memory Address 0 Low Pointer Normal (Non-ICD) Shadow xxxx xxxx uuuu uuuu
SHAD
FE9h FSR0H_ Indirect Data Memory Address 0 High Pointer Normal (Non-ICD) Shadow xxxx xxxx uuuu uuuu
SHAD
FEAh FSR1L_ Indirect Data Memory Address 1 Low Pointer Normal (Non-ICD) Shadow xxxx xxxx uuuu uuuu
SHAD
FEBh FSR1H_ Indirect Data Memory Address 1 High Pointer Normal (Non-ICD) Shadow xxxx xxxx uuuu uuuu
SHAD
FECh — Unimplemented — —
FEDh STKPTR — — — Current Stack pointer ---1 1111 ---1 1111
FEEh TOSL Top of Stack Low byte xxxx xxxx uuuu uuuu
FEFh TOSH — Top of Stack High byte -xxx xxxx -uuu uuuu
Legend: x = unknown, u = unchanged, q = value depends on condition, - = unimplemented, read as ‘0’, r = reserved.
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<14:8>, whose contents are transferred
to the upper byte of the program counter.
2: These registers can be addressed from any bank.
3: These registers/bits are not implemented on PIC16F1933/1936/1938/PIC16LF1933/1936/1938 devices, read as ‘0’.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition
Note 1: 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-order or low-order
bit of the source register.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
000 1:2
001 1:4
010 1:8
011 1 : 16
100 1 : 32
101 1 : 64
110 1 : 128
111 1 : 256
0x0000 0x0000
Traditional
Data Memory
0x0FFF 0x0FFF
0x1000
Reserved
0x1FFF
0x2000
Linear
Data Memory
0x29AF
0x29B0
FSR Reserved
0x7FFF
Address
Range 0x8000 0x0000
Program
Flash Memory
0xFFFF 0x7FFF
Note: Not all memory regions are completely implemented. Consult device memory tables for
memory limits.
0x7F
Bank 0 Bank 1 Bank 2 Bank 31
0xF20
Bank 30 0x7FFF
0xFFFF
0x29AF 0xF6F
External Reset
MCLRE
MCLR
Sleep
WDT
Time-out
PWRT(2) 64 ms
LFINTOSC 11-bit Ripple Counter
Enable PWRT
Enable OST(1)
WDTE<1:0> = 10
Sleep
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
VDD
VBOR
Internal
Reset 64 ms(1)
VDD
VBOR
Internal < 64 ms
Reset 64 ms(1)
VDD
VBOR
Internal
Reset 64 ms(1)
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition
0 0 1 1 0 x 1 1 Power-on Reset
0 0 1 1 0 x 0 x Illegal, TO is set on POR
0 0 1 1 0 x x 0 Illegal, PD is set on POR
0 0 1 u u 0 1 1 Brown-out Reset
u u u u u u 0 u WDT Reset
u u u u u u 0 0 WDT Wake-up from Sleep
u u u u u u 1 0 Interrupt Wake-up from Sleep
u u 0 u u u u u MCLR Reset during normal operation
u u 0 u u u 1 0 MCLR Reset during Sleep
u u u 0 u u u u RESET instruction executed
1 u u u u u u u Stack Overflow Reset (STVREN = 1)
u 1 u u u u u u Stack Underflow Reset (STVREN = 1)
Legend: u = unchanged, x = unknown
VDD
MCLR
Internal POR
TPWRT
OST Time-out
Internal Reset
VDD
MCLR
Internal POR
TPWRT
OST Time-out
Internal Reset
VDD
MCLR
Internal POR
TPWRT
OST Time-out
Internal Reset
INTF
Interrupt to CPU
INTE
IOCIF
IOCIE
From Peripheral Interrupt
Logic (Figure 4-2)
PEIE
GIE
TMR1GIF
TMR1GIE
ADIF
ADIE
RCIF
RCIE
TXIF
TXIE
SSPIF
SSPIE
CCP1IF
CCP1IE
• •
• •
• •
CCP5IF
CCP5IE
OSFIF
To Interrupt Logic
OSFIE (Figure 4-1)
TMR1IF
TMR1IE
• •
• •
• •
TMR6IF
TMR6IE
C2IF
C2IE
C1IF
C1IE
EEIF
EEIE
BCLIF
BCLIE
LCDIF
LCDIE
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1
CLKOUT (3)
(4)
INT pin
(1)
(1)
INTF flag (5) Interrupt Latency (2)
(INTCON<1>)
GIE bit
(INTCON<7>)
INSTRUCTION FLOW
PC PC PC + 1 PC + 1 0004h 0005h
Instruction
Fetched Inst (PC) Inst (PC + 1) — Inst (0004h) Inst (0005h)
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: TMR0IF bit is set when Timer0 rolls over. Timer0 is unchanged on Reset and should be initialized before
clearing TMR0IF bit.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Read LATx
TRISx
D Q
Write LATx
Write PORTx
CK VDD
Data Register
Data Bus
I/O pin
Read PORTx
To peripherals
VSS
ANSELx
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Writes to PORTA are actually written to corresponding LATA register. Reads from PORTA register is return
of actual I/O pin values.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Writes to PORTA are actually written to corresponding LATA register. Reads from PORTA register is return
of actual I/O pin values.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: When setting a pin to an analog input, the corresponding TRIS bit must be set to Input mode in order to
allow external control of the voltage on the pin.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Writes to PORTB are actually written to corresponding LATB register. Reads from PORTB register is
return of actual I/O pin values.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: When setting a pin to an analog input, the corresponding TRIS bit must be set to Input mode in order to
allow external control of the voltage on the pin.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Writes to PORTC are actually written to corresponding LATC register. Reads from PORTC register is
return of actual I/O pin values.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Writes to PORTD are actually written to corresponding LATD register. Reads from PORTD register is
return of actual I/O pin values.
2: PORTD implemented on PIC16F1934/1937/1939/PIC16LF1934/1937/1939 devices only.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
bit 7-0 ANSD<7:0>: Analog Select between Analog or Digital Function on Pins RD<7:0>, respectively
0 = Digital I/O. Pin is assigned to port or digital special function.
1 = Analog input. Pin is assigned as analog input(1). Digital input buffer disabled.
Note 1: When setting a pin to an analog input, the corresponding TRIS bit must be set to Input mode in order to
allow external control of the voltage on the pin.
2: ANSELD register is not implemented on the PIC16F1933/1936/1938. Read as ‘0’.
3: PORTD implemented on PIC16F1934/1937/1939/PIC16LF1934/1937/1939 devices only.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Writes to PORTE are actually written to corresponding LATE register. Reads from PORTE register is
return of actual I/O pin values.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: When setting a pin to an analog input, the corresponding TRIS bit must be set to Input mode in order to allow external
control of the voltage on the pin.
2: ANSELE register is not implemented on the PIC16F1933/1936/1938/PIC16LF1933/1936/1938. Read as ‘0’
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
IOCIE
IOCBNx D Q IOCBFx
IOCBPx D Q
CK
Q2 Clock Cycle
External
Oscillator LP, XT, HS, RC, EC
OSC2
Sleep
4 x PLL Sleep
OSC1
Oscillator Timer1 T1OSC CPU and
MUX
FOSC<2:0> = 100
T1OSO Peripherals
T1OSCEN
Enable
T1OSI Oscillator IRCF<3:0>
Internal Oscillator
16 MHz
8 MHz
Internal 4 MHz
Oscillator 2 MHz
Block
Postscaler
1 MHz Clock
Control
MUX
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
The High Frequency Internal Oscillator Status Locked Peripherals that use the LFINTOSC are:
bit (HFIOFL) of the OSCSTAT register indicates when • LCD
the HFINTOSC is running within 2% of its final value. • Power-up Timer (PWRT)
The High Frequency Internal Oscillator Status Stable • Watchdog Timer (WDT)
bit (HFIOFS) of the OSCSTAT register indicates when • Fail-Safe Clock Monitor (FSCM)
the HFINTOSC is running within 0.5% of its final value.
The Low Frequency Internal Oscillator Ready bit
8.5.3 MFINTOSC (LFIOFR) of the OSCSTAT register indicates when the
LFINTOSC is running and can be utilized.
The Medium-Frequency Internal Oscillator
(MFINTOSC) is a factory calibrated 500 kHz internal
clock source. The frequency of the MFINTOSC can be
altered via software using the OSCTUNE register
(Register 8-3).
The output of the MFINTOSC connects to a postscaler
and multiplexer (see Figure 8-1). One of nine
frequencies derived from the MFINTOSC can be
selected via software using the IRCF<3:0> bits of the
OSCCON register. See Section 8.5.7 “Frequency
Select Bits (IRCF)” for more information.
The MFINTOSC is enabled by:
• Configure the IRCF<3:0> bits for the desired HF
frequency (see Register 8-1), and
• FOSC<2:0> = 100, or
• Set the System Clock Source (SCS) bits of the
OSCCON register to ‘1x’
The Medium Frequency Internal Oscillator Ready bit
(MFIOFR) of the OSCSTAT register indicates when the
MFINTOSC is running and can be utilized.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
LFINTOSC
IRCF <3:0> ≠0 =0
System Clock
LFINTOSC
IRCF <3:0> ≠0 =0
System Clock
LFINTOSC HFINTOSC/MFINTOSC
LFINTOSC turns off unless WDT or FSCM is enabled
LFINTOSC
Start-up Time 2-cycle Sync Running
HFINTOSC/
MFINTOSC
IRCF <3:0> =0 ≠0
System Clock
INTOSC
TOST
OSC2
Program Counter PC - N PC PC + 1
System Clock
Sample Clock
System Oscillator
Clock Failure
Output
Note: The system clock is normally at a much higher frequency than the sample clock. The relative frequencies in
this example have been chosen for clarity.
SRLEN
SRPS Pulse SRQEN
Gen(2)
SRI
SRSPE S Q
SRCLK SRQ
SRSCKE
SYNCC2OUT(3)
SRSC2E
SYNCC1OUT(3)
SR
SRSC1E
Latch(1)
SRPR Pulse
Gen(2)
SRI
SRRPE R Q
SRCLK SRNQ
SRRCKE SRLEN
SYNCC2OUT(3) SRNQEN
SRRC2E
SYNCC1OUT(3)
SRRC1E
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared S = Bit is set only -
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Enabling Brown-out Reset does not automatically enable Power-up Timer.
2: The entire data EEPROM will be erased when the code protection is turned off during an erase.
3: The entire program memory will be erased when the code protection is turned off.
Note 1: Enabling Brown-out Reset does not automatically enable Power-up Timer.
2: The entire data EEPROM will be erased when the code protection is turned off during an erase.
3: The entire program memory will be erased when the code protection is turned off.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: The LVP bit cannot be programmed to ‘0’ when Programming mode is entered via LVP.
2: Reads as ‘11’ on PIC16LF193X only.
10.3 User ID
Four memory locations (8000h-8003h) are designated
as ID locations where the user can store checksum or
other code identification numbers. These locations are
not accessible during normal execution, but are read-
able and writable during Program/Verify mode. Only
the Least Significant 7 bits of the ID locations are
reported when using MPLAB® IDE. See the
“PIC16193X/PIC16LF193X Memory Programming
Specification” (DS41360A) for more information.
VREF- ADNREF = 1
ADNREF = 0
AVSS
AVDD
ADPREF = 0X
ADPREF = 11
VREF+ ADPREF = 10
AN0 00000
AN1 00001
AN2 00010
AN3 00011
AN4 00100
AN5 00101
AN6 00110
AN7 00111
AN8 01000 ADC
AN9 01001 10
GO/DONE
AN10 01010
AN11 01011 0 = Left Justify
ADFM
1 = Right Justify
AN12 01100
ADON 16
AN13 01101
Temp Sens 11101 VSS ADRESH ADRESL
DAC(2) 11110
FVR Buffer1 11111
CHS<4:0>
ADC
ADCS<2:0> 32 MHz 20 MHz 16 MHz 8 MHz 4 MHz 1 MHz
Clock Source
Fosc/2 000 62.5ns(2) 100 ns(2) 125 ns(2) 250 ns(2) 500 ns(2) 2.0 μs
Fosc/4 100 125 ns (2)
200 ns (2)
250 ns (2)
500 ns (2)
1.0 μs 4.0 μs
Fosc/8 001 0.5 μs(2) 400 ns(2) 0.5 μs(2) 1.0 μs 2.0 μs 8.0 μs(3)
Fosc/16 101 800 ns 800 ns 1.0 μs 2.0 μs 4.0 μs 16.0 μs(3)
Fosc/32 010 1.0 μs 1.6 μs 2.0 μs 4.0 μs 8.0 μs(3) 32.0 μs(3)
Fosc/64 110 2.0 μs 3.2 μs 4.0 μs 8.0 μs(3) 16.0 μs(3) 64.0 μs(3)
FRC x11 1.0-6.0 μs (1,4)
1.0-6.0 μs (1,4)
1.0-6.0 μs (1,4)
1.0-6.0 μs (1,4)
1.0-6.0 μs (1,4)
1.0-6.0 μs(1,4)
Legend: Shaded cells are outside of recommended range.
Note 1: The FRC source has a typical TAD time of 1.6 μs for VDD.
2: These values violate the minimum required TAD time.
3: For faster conversion times, the selection of another clock source is recommended.
4: When the device frequency is greater than 1 MHz, the FRC clock source is only recommended if the conversion will be
performed during Sleep.
TCY - TAD TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Conversion starts
Holding capacitor is disconnected from analog input (typically 100 ns)
Set GO bit
On the following cycle:
ADRESH:ADRESL is loaded, GO bit is cleared,
ADIF bit is set, holding capacitor is connected to analog input.
ADRESH ADRESL
(ADFM = 0) MSB LSB
bit 7 bit 0 bit 7 bit 0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: See Section 10.0 “Fixed Voltage Reference” for more information.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
T ACQ = Amplifier Settling Time + Hold Capacitor Charging Time + Temperature Coefficient
= T AMP + T C + T COFF
= 2µs + T C + [ ( Temperature - 25°C ) ( 0.05µs/°C ) ]
1
V AP P LI ED ⎛ 1 – --------------------------⎞ = V CHOLD ;[1] VCHOLD charged to within 1/2 lsb
⎝ n+1 ⎠
(2 )–1
–TC
⎛ ----------⎞
RC
V AP P LI ED ⎜ 1 – e ⎟ = V CHOLD ;[2] VCHOLD charge response to VAPPLIED
⎝ ⎠
– Tc
⎛ ---------⎞
1
V AP P LI ED ⎜ 1 – e ⎟ = V A PP LIE D ⎛⎝ 1 – --------------------------⎞ ;combining [1] and [2]
RC
⎝ ⎠ n+1 ⎠
(2 )–1
T C = – C HOLD ( R IC + R SS + R S ) ln(1/511)
= – 10pF ( 1k Ω + 7k Ω + 10k Ω ) ln(0.001957)
= 1.12 µs
Therefore:
T ACQ = 2ΜS + 1.12 ΜS + [ ( 50°C- 25°C ) ( 0.05ΜS /°C ) ]
= 4.42 ΜS
Note 1: The reference voltage (VREF) has no effect on the equation, since it cancels itself out.
2: The charge holding capacitor (CHOLD) is not discharged after each conversion.
3: The maximum recommended impedance for analog sources is 10 kΩ. This is required to meet the pin
leakage specification.
VDD
Sampling
Switch
VT ≈ 0.6V
Rs ANx RIC ≤ 1k SS Rss
VA CPIN I LEAKAGE(1)
VT ≈ 0.6V CHOLD = 10 pF
5 pF
VSS/VREF-
6V
5V RSS
Legend: CHOLD = Sample/Hold Capacitance VDD 4V
3V
CPIN = Input Capacitance 2V
I LEAKAGE = Leakage current at the pin due to
various junctions
5 6 7 8 9 10 11
RIC = Interconnect Resistance
Sampling Switch
RSS = Resistance of Sampling Switch (kΩ)
SS = Sampling Switch
VT = Threshold Voltage
Full-Scale Range
FFh
FEh
FDh
FCh
ADC Output Code
1 LSB ideal
FBh
Full-Scale
04h Transition
03h
02h
01h
00h Analog Input Voltage
1 LSB ideal
CxNCH<1:0>
CxON(1)
2 Interrupt CxINTP
det
CXIN0- 0 Set CxIF
CXIN1- 1
MUX Interrupt CxINTN
CXIN2- 2 (2) det
CXPOL
CXIN3- 3 CxVN
-
CXOUT To Data Bus
D Q
Cx(3) MCXOUT
+
CxVP
Q1 EN
CXIN+ 0
MUX CxHYS
DAC 1 (2) CxSP
To ECCP PWM Logic
FVR Buffer2 2
3
CXSYNC
VSS CxON CXOE
TRIS bit
CXOUT
CXPCH<1:0> 0
2
D Q 1
(from Timer1)
T1CLK To Timer1
SYNCCXOUT
Note 1: When CxON = 0, the Comparator will produce a ‘0’ at the output
2: When CxON = 0, all multiplexer inputs are disconnected.
3: Output of comparator can be frozen during debugging.
A selectable amount of separation voltage can be • CxON, CxPOL and CxSP bits of the CMxCON0
added to the input pins of each comparator to provide register
a hysteresis function to the overall operation. • CxIE bit of the PIE2 register
These hysteresis levels change as a function of the • CxINTP bit of the CMxCON1 register (for a rising
comparator’s Speed/Power mode selection. edge detection)
• CxINTN bit of the CMxCON1 register (for a falling
Table 12-2 shows the hysteresis levels.
edge detection)
• PEIE and GIE bits of the INTCON register
TABLE 12-2: HYSTERESIS LEVELS The associated interrupt flag bit, CxIF bit of the PIR2
CxSP CxHYS Enabled CxHYS Disabled register, must be cleared in software. If another edge is
detected while this flag is being cleared, the flag will still
0 ± 3mV << ± 1mV
be set at the end of the sequence.
1 ± 20mV ± 3mV
Note: Although a comparator is disabled, an
These levels are approximate. interrupt can be generated by changing
See Section 28.0 “Electrical Specifications” for the output polarity with the CxPOL bit of
more information. the CMxCON0 register, or by switching the
comparator on or off with the CxON bit of
12.4 Timer1 Gate Operation the CMxCON0 register.
The output resulting from a comparator operation can 12.6 Comparator Positive Input
be used as a source for gate control of Timer1. See
Section 16.6 “Timer1 Gate” for more information.
Selection
This feature is useful for timing the duration or interval Configuring the CxPCH<1:0> bits of the CMxCON1
of an analog event. register directs an internal voltage reference or an
It is recommended that the comparator output be syn- analog pin to the non-inverting input of the comparator:
chronized to Timer1. This ensures that Timer1 does not • CxIN+ analog pin
increment while a change in the comparator is occur- • DAC
ring.
• FVR (Fixed Voltage Reference)
12.4.1 COMPARATOR OUTPUT • AVSS (Analog Ground)
SYNCHRONIZATION See Section 14.0 “Fixed Voltage Reference” for
The output from either comparator, C1 or C2, can be more information on the fixed voltage reference
synchronized with Timer1 by setting the CxSYNC bit of module.
the CMxCON0 register. See Section 11.0 “Analog-to-Digital Converter
Once enabled, the comparator output is latched on the (ADC) Module” for more information on the CVDAC
falling edge of the Timer1 source clock. If a prescaler is input signal.
used with Timer1, the comparator output is latched after Any time the comparator is disabled (CxON = 0), all
the prescaling function. To prevent a race condition, the comparator inputs are disabled.
comparator output is latched on the falling edge of the
Timer1 clock source and Timer1 increments on the 12.7 Comparator Negative Input
rising edge of its clock source. See the Comparator
Selection
Block Diagram (Figure 12-2) and the Timer1 Block
Diagram (Figure 16-1) for more information. The CxNCH<1:0> bits of the CMxCON0 register direct
one of four analog pins to the comparator inverting
12.5 Comparator Interrupt input.
An interrupt can be generated upon a change in the Note: To use CxIN+ and CxINx- pins as analog
output value of the comparator for each comparator, a input, the appropriate bits must be set in
rising edge detector and a Falling edge detector are the ANSEL register and the corresponding
present. TRIS bits must also be set to disable the
output drivers.
When either edge detector is triggered and its associ-
ated enable bit is set (CxINTP and/or CxINTN bits of
the CMxCON1 register), the Corresponding Interrupt
Flag bit (CxIF bit of the PIR2 register) will be set.
VT ≈ 0.6V RIC
Rs < 10K
To Comparator
AIN
CPIN ILEAKAGE(1)
VA
5 pF VT ≈ 0.6V
Vss
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Comparator output requires the following three conditions: C2OE = 1, C2ON = 1 and corresponding port
TRIS bit = 0.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
EQUATION 13-1:
FVR_BUFFER2
VDD DACR<4:0>
4
VREF+
R
DACPSS<1:0>
2
R
DACEN
R
32-to-1 MUX
32
Steps DAC
(To Comparator and
ADC Modules)
R
R
CVREF
R
DACOE
DACNSS<1:0>
2
VREF-
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: The output select bits are always right justified to ensure that any number of bits can be used without
affecting the register layout.
ADFVR<1:0>
2
X1
X2 FVR_BUFFER1
X4 (To ADC Module)
CDAFVR<1:0> 2
X1
X2 FVR_BUFFER2
X4 (To Comparators, DAC)
FVR_VREF
(To LCD Bias Generator)
+
FVREN 1.024V Fixed
FVRRDY _ Reference
PIC16F193X/
PIC16LF193X
CVREF
R
Module
+
Voltage CVREF Buffered CVREF Output
–
Reference
Output
Impedance
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition
FOSC/4
Data Bus
0
8
T0CKI 1
0 Sync
1 2 TCY TMR0
0 Set Flag bit TMR0IF
From CPSCLK
1 TMR0CS on Overflow
TMR0SE 8-bit
Prescaler PSA Overflow to Timer1
T0XCS
PS<2:0>
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
000 1:2
001 1:4
010 1:8
011 1 : 16
100 1 : 32
101 1 : 64
110 1 : 128
111 1 : 256
T1GSS<1:0>
T1G 00 T1GSPM
T1CKI = 1
when TMR1
Enabled
T1CKI = 0
when TMR1
Enabled
TMR1GE
T1GPOL
T1G_IN
T1CKI
T1GVAL
TMR1GE
T1GPOL
T1GTM
T1G_IN
T1CKI
T1GVAL
TMR1GE
T1GPOL
T1GSPM
Cleared by hardware on
T1GGO/ Set by software falling edge of T1GVAL
DONE
Counting enabled on
rising edge of T1G
T1G_IN
T1CKI
T1GVAL
Cleared by
TMR1GIF Cleared by software Set by hardware on software
falling edge of T1GVAL
TMR1GE
T1GPOL
T1GSPM
T1GTM
Cleared by hardware on
T1GGO/ Set by software falling edge of T1GVAL
DONE Counting enabled on
rising edge of T1G
T1G_IN
T1CKI
T1GVAL
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
TMR1CS<1:0> = 0X
This bit is ignored. Timer1 uses the internal clock when TMR1CS<1:0> = 1X.
bit 1 Unimplemented: Read as ‘0’
bit 0 TMR1ON: Timer1 On bit
1 = Enables Timer1
0 = Stops Timer1
Clears Timer1 Gate flip-flop
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Sets Flag
TMRx
bit TMRxIF
Output
Prescaler Reset
FOSC/4 TMRx
1:1, 1:4, 1:16, 1:64
2 Postscaler
Comparator
EQ 1:1 to 1:16
TxCKPS<1:0>
PRx 4
TxOUTPS<3:0>
A 4-bit counter/prescaler on the clock input allows direct Timer2 can be optionally used as the shift clock source
input, divide-by-4 and divide-by-16 prescale options. for the MSSPx modules operating in SPI mode.
These options are selected by the prescaler control bits, Additional information is provided in Section 17.0
TxCKPS<1:0> of the TxCON register. The value of “SSP Module Overview”
TMRx is compared to that of the Period register, PRx, on
each clock cycle. When the two values match, the 17.4 Timer2/4/6 Operation During Sleep
comparator generates a match signal as the timer
The Timerx timers cannot be operated while the
output. This signal also resets the value of TMRx to 00h
processor is in Sleep mode. The contents of the TMRx
on the next cycle and drives the output
and PRx registers will remain unchanged while the
counter/postscaler (see Section 17.2 “Timer2/4/6
processor is in Sleep mode.
Interrupt”).
The TMRx and PRx registers are both directly readable
and writable. The TMRx register is cleared on any
device Reset, whereas the PRx register initializes to
FFh. Both the prescaler and postscaler counters are
cleared on the following events:
• a write to the TMRx register
• a write to the TxCON register
• Power-on Reset (POR)
• Brown-out Reset (BOR)
• MCLR Reset
• Watchdog Timer (WDT) Reset
• Stack Overflow Reset
• Stack Underflow Reset
• RESET Instruction
Note: TMRx is not cleared when TxCON is written.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Timer0 Module
Set
TMR0CS
T0XCS TMR0IF
FOSC/4 0
Overflow
T0CKI 0 TMR0
1
1
CPSCH<3:0>(2)
CPSON(3)
CPS0
CPS1
CPS2
CPS3 Timer1 Module
CPS4 CPSON T1CS<1:0>
CPS5
CPS6 FOSC
Capacitive
CPS7 Sensing FOSC/4
CPSCLK
CPS8(1) Oscillator TMR1H:TMR1L
T1OSC/ EN
CPS9(1) CPSOSC T1CKI
CPSOUT
CPS10(1)
CPS11 (1) T1GSEL<1:0>
CPSRNG<1:0>
(1)
CPS12
T1G
CPS13(1) Timer1 Gate
(1)
CPS14 Control Logic
SYNCC1OUT
CPS15(1)
CPS16(1) SYNCC2OUT
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Reset
‘1’ = Bit is set ‘0’ = Bit is cleared
CCP<5:4> only:
11xx = PWM mode
ECCP<3:1> only:
1100 = PWM mode: PxA, PxC active-high; PxB, PxD active-high
1101 = PWM mode: PxA, PxC active-high; PxB, PxD active-low
1110 = PWM mode: PxA, PxC active-low; PxB, PxD active-high
1111 = PWM mode: PxA, PxC active-low; PxB, PxD active-low
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
• PRx CCPRxL
• TxCON
• CCPRxL
• CCPxCON CCPRxH(2) (Slave)
The ECCP modules have the following additional CCPx
registers: Comparator R Q
• ECCPxAS
(1) S
• PSTRxCON TMRx
• PWMxCON TRIS
TMRX = 0
( CCPRxL:CCPxCON<5:4> )
Duty Cycle Ratio = -----------------------------------------------------------------------
4 ( PRx + 1 )
FIGURE 19-5: EXAMPLE SIMPLIFIED BLOCK DIAGRAM OF THE ENHANCED PWM MODE
DCxB<1:0> PxM<1:0> CCPxM<3:0>
Duty Cycle Registers
2 4
CCPRxL
CCPx/P1A CCPx/P1A
TRISx
CCPRxH (Slave)
P1B P1B
Output TRISx
Comparator R Q
Controller
P1C P1C
TMRx (1)
S TRISx
P1D P1D
Comparator
Clear Timerx, TRISx
toggle PWM pin and
latch duty cycle
PRx PWMxCON
Note 1: The 8-bit timer TMRx register is concatenated with the 2-bit internal Q clock, or 2 bits of the prescaler to create the 10-bit
time base.
Note 1: The TRIS register value for each PWM output must be configured appropriately.
2: Clearing the CCPxCON register will relinquish ECCP control of all PWM output pins.
3: Any pin not used by an Enhanced PWM mode is available for alternate pin functions.
TABLE 19-7: EXAMPLE PIN ASSIGNMENTS FOR VARIOUS PWM ENHANCED MODES
ECCP Mode PxM<1:0> CCPx/P1A P1B P1C P1D
Single 00 Yes(1) Yes (1)
Yes (1)
Yes(1)
Half-Bridge 10 Yes Yes No No
Full-Bridge, Forward 01 Yes Yes Yes Yes
Full-Bridge, Reverse 11 Yes Yes Yes Yes
Note 1: Pulse Steering enables outputs in Single mode.
P1A Active
P1D Modulated
P1A Inactive
P1D Inactive
Relationships:
• Period = 4 * TOSC * (PRx + 1) * (TMRx Prescale Value)
• Pulse Width = TOSC * (CCPRxL<7:0>:CCPxCON<5:4>) * (TMRx Prescale Value)
• Delay = 4 * TOSC * (PWMxCON<6:0>)
Note 1: Dead-band delay is programmed using the PWMxCON register (Section 19.6.6 “Programmable Dead-Band Delay
Mode”).
Pulse PRx+1
PxM<1:0> Signal 0
Width
Period
P1A Modulated
Delay(1) Delay(1)
10 (Half-Bridge) P1B Modulated
P1A Active
P1D Modulated
P1A Inactive
P1D Inactive
Relationships:
• Period = 4 * TOSC * (PRx + 1) * (TMRx Prescale Value)
• Pulse Width = TOSC * (CCPRxL<7:0>:CCPxCON<5:4>) * (TMRx Prescale Value)
• Delay = 4 * TOSC * (PWMxCON<6:0>)
Note 1: Dead-band delay is programmed using the PWMxCON register (Section 19.6.6 “Programmable Dead-Band Delay
Mode”).
FET
Driver +
P1A
-
Load
FET
Driver
+
P1B
-
V+
FET FET
Driver Driver
P1A
Load
FET FET
Driver Driver
P1B
FET QA QC FET
Driver Driver
P1A
Load
P1B
FET FET
Driver Driver
P1C
QB QD
V-
P1D
P1B(2)
P1C(2)
P1D(2)
(1) (1)
Reverse Mode
Period
Pulse Width
P1A(2)
P1B(2)
P1C(2)
P1D(2)
(1) (1)
Note 1: At this time, the TMRx register is equal to the PRx register.
2: Output signal is shown as active-high.
P1A (Active-High)
P1B (Active-High)
Pulse Width
P1C (Active-High)
(2)
P1D (Active-High)
Pulse Width
Note 1: The direction bit PxM1 of the CCPxCON register is written any time during the PWM cycle.
2: When changing directions, the P1A and P1C signals switch before the end of the current PWM cycle. The
modulated P1B and P1D signals are inactive at this time. The length of this time is four Timerx counts.
P1A
P1B
PW
P1C
P1D PW
TON
External Switch C
TOFF
External Switch D
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
PWM Period
PWM Activity
Start of
PWM Period
Shutdown Event
CCPxASE bit
PWM
Shutdown Shutdown Resumes
Event Occurs Event Clears CCPxASE
Cleared by
Firmware
19.6.5 AUTO-RESTART MODE If auto-restart is enabled, the CCPxASE bit will remain
set as long as the auto-shutdown condition is active.
The Enhanced PWM can be configured to automati-
When the auto-shutdown condition is removed, the
cally restart the PWM signal once the auto-shutdown
CCPxASE bit will be cleared via hardware and normal
condition has been removed. Auto-restart is enabled by
operation will resume.
setting the PxRSEN bit in the PWMxCON register.
PWM Period
PWM Activity
Start of
PWM Period
Shutdown Event
CCPxASE bit
PWM
Shutdown Resumes
Event Occurs
Shutdown CCPxASE
Event Clears Cleared by
Hardware
FET
Driver +
P1A V
-
Load
FET
Driver
+
P1B V
-
V-
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: Bit resets to ‘0’ with Two-Speed Start-up and LP, XT or HS selected as the Oscillator mode or Fail-Safe
mode is enabled.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: The PWM Steering mode is available only when the CCPxCON register bits CCPxM<3:2> = 11 and
PxM<1:0> = 00.
PORT Data
0
TRIS
STRxB
PORT Data 0
TRIS
STRxC
1 P1C pin
CCPxM1
PORT Data 0
TRIS
STRxD
PORT Data 0
TRIS
PWM Period
PWM
STRx
P1n = PWM
PWM
STRx
P1n = PWM
TXEN
TRMT SPEN
Baud Rate Generator FOSC
÷n
TX9
BRG16 n
+1 Multiplier x4 x16 x64
TX9D
SYNC 1 X 0 0 0
SPBRGH SPBRG BRGH X 1 1 0 0
BRG16 X 1 0 1 0
BRG16
+1 n
Multiplier x4 x16 x64
SYNC 1 X 0 0 0
SPBRGH SPBRG BRGH X 1 1 0 0 FIFO
FERR RX9D RCREG Register
BRG16 X 1 0 1 0
8
Data Bus
RCIF Interrupt
RCIE
The EUSART transmitter block diagram is shown in The TXIF interrupt can be enabled by setting the TXIE
Figure 20-1. The heart of the transmitter is the serial interrupt enable bit of the PIE1 register. However, the
Transmit Shift Register (TSR), which is not directly TXIF flag bit will be set whenever the TXREG is empty,
accessible by software. The TSR obtains its data from regardless of the state of TXIE enable bit.
the transmit buffer, which is the TXREG register. To use interrupts when transmitting data, set the TXIE
bit only when there is more data to send. Clear the
20.1.1.1 Enabling the Transmitter TXIE interrupt enable bit upon writing the last character
The EUSART transmitter is enabled for asynchronous of the transmission to the TXREG.
operations by configuring the following three control
bits:
• TXEN = 1
• SYNC = 0
• SPEN = 1
All other EUSART control bits are assumed to be in
their default state.
Setting the TXEN bit of the TXSTA register enables the
transmitter circuitry of the EUSART. Clearing the SYNC
bit of the TXSTA register configures the EUSART for
asynchronous operation. Setting the SPEN bit of the
RCSTA register enables the EUSART and automatically
configures the TX/CK I/O pin as an output.
Write to TXREG
Word 1
BRG Output
(Shift Clock)
TX/CK
pin Start bit bit 0 bit 1 bit 7/8 Stop bit
Word 1
TXIF bit
(Transmit Buffer 1 TCY
Reg. Empty Flag)
Word 1
TRMT bit Transmit Shift Reg.
(Transmit Shift
Reg. Empty Flag)
Write to TXREG
Word 1 Word 2
BRG Output
(Shift Clock)
TX/CK
pin Start bit bit 0 bit 1 bit 7/8 Stop bit Start bit bit 0
TXIF bit 1 TCY Word 1 Word 2
(Transmit Buffer
Reg. Empty Flag) 1 TCY
• CREN = 1 Immediately after all data bits and the Stop bit have
been received, the character in the RSR is transferred
• SYNC = 0
to the EUSART receive FIFO and the RCIF interrupt
• SPEN = 1 flag bit of the PIR1 register is set. The top character in
All other EUSART control bits are assumed to be in the FIFO is transferred out of the FIFO by reading the
their default state. RCREG register.
Setting the CREN bit of the RCSTA register enables the Note: If the receive FIFO is overrun, no additional
receiver circuitry of the EUSART. Clearing the SYNC bit characters will be received until the overrun
of the TXSTA register configures the EUSART for condition is cleared. See Section 20.1.2.5
asynchronous operation. Setting the SPEN bit of the “Receive Overrun Error” for more
RCSTA register enables the EUSART and automatically information on overrun errors.
configures the RX/DT I/O pin as an input.
20.1.2.3 Receive Interrupts
Note: When the SPEN bit is set the TX/CK I/O
pin is automatically configured as an The RCIF interrupt flag bit of the PIR1 register is set
output, regardless of the state of the whenever the EUSART receiver is enabled and there is
corresponding TRIS bit and whether or not an unread character in the receive FIFO. The RCIF
the EUSART transmitter is enabled. The interrupt flag bit is read-only, it cannot be set or cleared
PORT latch is disconnected from the by software.
output driver so it is not possible to use the RCIF interrupts are enabled by setting all of the
TX/CK pin as a general purpose output. following bits:
• RCIE interrupt enable bit of the PIE1 register
• PEIE peripheral interrupt enable bit of the
INTCON register
• GIE global interrupt enable bit of the INTCON
register
The RCIF interrupt flag bit will be set when there is an
unread character in the FIFO, regardless of the state of
interrupt enable bits.
Read Rcv
Buffer Reg.
RCREG
RCIF
(Interrupt Flag)
OERR bit
CREN
Note: This timing diagram shows three words appearing on the RX input. The RCREG (receive buffer) is read after the third word,
causing the OERR (overrun) bit to be set.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
BAUD FOSC = 32.000 MHz FOSC = 20.000 MHz FOSC = 18.432 MHz FOSC = 11.0592 MHz
RATE SPBRG SPBRG SPBRG SPBRG
Actual % Actual % Actual % Actual %
value value value value
Rate Error Rate Error Rate Error Rate Error
(decimal) (decimal) (decimal) (decimal)
300 — — — — — — — — — — — —
1200 — — — — — — — — — — — —
2400 — — — — — — — — — — — —
9600 9615 0.16 207 9615 0.16 129 9600 0.00 119 9600 0.00 71
10417 10417 0.00 191 10417 0.00 119 10378 -0.37 110 10473 0.53 65
19.2k 19.23k 0.16 103 19.23k 0.16 64 19.20k 0.00 59 19.20k 0.00 35
57.6k 57.14k -0.79 34 56.82k -1.36 21 57.60k 0.00 19 57.60k 0.00 11
115.2k 117.64k 2.12 16 113.64k -1.36 10 115.2k 0.00 9 115.2k 0.00 5
BAUD FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz
RATE SPBRG SPBRG SPBRG SPBRG
Actual % Actual % Actual % Actual %
value value value value
Rate Error Rate Error Rate Error Rate Error
(decimal) (decimal) (decimal) (decimal)
300 — — — — — — — — — 300 0.16 207
1200 — — — 1202 0.16 207 1200 0.00 191 1202 0.16 51
2400 2404 0.16 207 2404 0.16 103 2400 0.00 95 2404 0.16 25
9600 9615 0.16 51 9615 0.16 25 9600 0.00 23 — — —
10417 10417 0.00 47 10417 0.00 23 10473 0.53 21 10417 0.00 5
19.2k 19231 0.16 25 19.23k 0.16 12 19.2k 0.00 11 — — —
57.6k 55556 -3.55 8 — — — 57.60k 0.00 3 — — —
115.2k — — — — — — 115.2k 0.00 1 — — —
BAUD FOSC = 32.000 MHz FOSC = 20.000 MHz FOSC = 18.432 MHz FOSC = 11.0592 MHz
RATE SPBRG SPBRG SPBRG SPBRG
Actual % Actual % Actual % Actual %
value value value value
Rate Error Rate Error Rate Error Rate Error
(decimal) (decimal) (decimal) (decimal)
300 300.0 0.00 6666 300.0 -0.01 4166 300.0 0.00 3839 300.0 0.00 2303
1200 1200 -0.02 3332 1200 -0.03 1041 1200 0.00 959 1200 0.00 575
2400 2401 -0.04 832 2399 -0.03 520 2400 0.00 479 2400 0.00 287
9600 9615 0.16 207 9615 0.16 129 9600 0.00 119 9600 0.00 71
10417 10417 0.00 191 10417 0.00 119 10378 -0.37 110 10473 0.53 65
19.2k 19.23k 0.16 103 19.23k 0.16 64 19.20k 0.00 59 19.20k 0.00 35
57.6k 57.14k -0.79 34 56.818 -1.36 21 57.60k 0.00 19 57.60k 0.00 11
115.2k 117.6k 2.12 16 113.636 -1.36 10 115.2k 0.00 9 115.2k 0.00 5
BAUD FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz
RATE SPBRG SPBRG SPBRG SPBRG
Actual % Actual % Actual % Actual %
value value value value
Rate Error Rate Error Rate Error Rate Error
(decimal) (decimal) (decimal) (decimal)
300 299.9 -0.02 1666 300.1 0.04 832 300.0 0.00 767 300.5 0.16 207
1200 1199 -0.08 416 1202 0.16 207 1200 0.00 191 1202 0.16 51
2400 2404 0.16 207 2404 0.16 103 2400 0.00 95 2404 0.16 25
9600 9615 0.16 51 9615 0.16 25 9600 0.00 23 — — —
10417 10417 0.00 47 10417 0.00 23 10473 0.53 21 10417 0.00 5
19.2k 19.23k 0.16 25 19.23k 0.16 12 19.20k 0.00 11 — — —
57.6k 55556 -3.55 8 — — — 57.60k 0.00 3 — — —
115.2k — — — — — — 115.2k 0.00 1 — — —
BAUD FOSC = 32.000 MHz FOSC = 20.000 MHz FOSC = 18.432 MHz FOSC = 11.0592 MHz
RATE SPBRG SPBRG SPBRG SPBRG
Actual % Actual % Actual % Actual %
value value value value
Rate Error Rate Error Rate Error Rate Error
(decimal) (decimal) (decimal) (decimal)
300 300.0 0.00 26666 300.0 0.00 16665 300.0 0.00 15359 300.0 0.00 9215
1200 1200 0.00 6666 1200 -0.01 4166 1200 0.00 3839 1200 0.00 2303
2400 2400 0.01 3332 2400 0.02 2082 2400 0.00 1919 2400 0.00 1151
9600 9604 0.04 832 9597 -0.03 520 9600 0.00 479 9600 0.00 287
10417 10417 0.00 767 10417 0.00 479 10425 0.08 441 10433 0.16 264
19.2k 19.18k -0.08 416 19.23k 0.16 259 19.20k 0.00 239 19.20k 0.00 143
57.6k 57.55k -0.08 138 57.47k -0.22 86 57.60k 0.00 79 57.60k 0.00 47
115.2k 115.9k 0.64 68 116.3k 0.94 42 115.2k 0.00 39 115.2k 0.00 23
BAUD FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz
RATE SPBRG SPBRG SPBRG SPBRG
Actual % Actual % Actual % Actual %
value value value value
Rate Error Rate Error Rate Error Rate Error
(decimal) (decimal) (decimal) (decimal)
300 300.0 0.00 6666 300.0 0.01 3332 300.0 0.00 3071 300.1 0.04 832
1200 1200 -0.02 1666 1200 0.04 832 1200 0.00 767 1202 0.16 207
2400 2401 0.04 832 2398 0.08 416 2400 0.00 383 2404 0.16 103
9600 9615 0.16 207 9615 0.16 103 9600 0.00 95 9615 0.16 25
10417 10417 0 191 10417 0.00 95 10473 0.53 87 10417 0.00 23
19.2k 19.23k 0.16 103 19.23k 0.16 51 19.20k 0.00 47 19.23k 0.16 12
57.6k 57.14k -0.79 34 58.82k 2.12 16 57.60k 0.00 15 — — —
115.2k 117.6k 2.12 16 111.1k -3.55 8 115.2k 0.00 7 — — —
BRG Clock
RCIDL
RCIF bit
(Interrupt)
Read
RCREG
Note 1: The ABD sequence requires the EUSART module to be configured in Asynchronous mode.
RCIF
Cleared due to User Read of RCREG
Note 1: The EUSART remains in Idle while the WUE bit is set.
Note 1: If the wake-up event requires long oscillator warm-up time, the automatic clearing of the WUE bit can occur while the stposc signal is
still active. This sequence should not depend on the presence of Q clocks.
2: The EUSART remains in Idle while the WUE bit is set.
Write to TXREG
Dummy Write
BRG Output
(Shift Clock)
RX/DT
pin bit 0 bit 1 bit 2 bit 7 bit 0 bit 1 bit 7
Word 1 Word 2
TX/CK pin
(SCKP = 0)
TX/CK pin
(SCKP = 1)
Write to
TXREG Reg Write Word 1 Write Word 2
TXIF bit
(Interrupt Flag)
TRMT bit
‘1’ ‘1’
TXEN bit
Note: Sync Master mode, SPBRG = 0, continuous transmission of two 8-bit words.
TX/CK pin
Write to
TXREG reg
TXIF bit
TRMT bit
TXEN bit
RX/DT
pin bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7
TX/CK pin
(SCKP = 0)
TX/CK pin
(SCKP = 1)
Write to
bit SREN
SREN bit
RCIF bit
(Interrupt)
Read
RXREG
Note: Timing diagram demonstrates Sync Master mode with bit SREN = 1 and bit BRGH = 0.
LCDDATAx SEG<23:0>(1, 3)
Data Bus
MUX To I/O Pads(1)
Registers
Timing Control
LCDCON
COM<3:0>(3)
LCDPS To I/O Pads(1)
LCDSEn
FOSC/256
Clock Source
T1OSC
Select and
Prescaler
LFINTOSC
Note 1: These are not directly connected to the I/O pads, but may be tri-stated, depending on the configuration of
the LCD module.
2: SEG<23:0> on PIC16F1934/1937/1939, SEG<15:0> on PIC16F1933/1936/1938/
PIC16LF1933/1936/1938.
3: COM3 and SEG15 share the same physical pin on the PIC16F1933/1936/1938/PIC16LF1933/1936/1938,
therefore SEG15 is not available when using 1/4 multiplex displays.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared C = Only clearable bit
Note 1: On these devices, COM3 and SEG15 are shared on one pin, limiting the device from driving 64 pixels.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared C = Only clearable bit
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared C = Only clearable bit
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared C = Only clearable bit
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
COM0
COM1
COM2
COM3
FOSC ÷256 To Reference
Ladder Control
÷4 Static
T1OSC 32 kHz 5
Crystal Osc. 4-bit Prog ÷1, 2, 3, 4
÷2 1/2 ÷32
Prescaler Ring Counter
1/3,
LFINTOSC 1/4
Nominal = 31 kHz
LP<3:0> LMUX<1:0>
(LCDPS<3:0>) (LCDCON<1:0>)
CS<1:0> LMUX<1:0>
(LCDCON<3:2>) (LCDCON<1:0>)
VDD LCDIRE
LCDIRS
LCDA
1.024V from
FVR 3.072V
x3
LCDIRE LCDRLP1
LCDIRS LCDRLP0
LCDA
LCDCST<2:0>
VLCD3PE LCDA
VLCD3
lcdbias3
VLCD2PE
VLCD2
lcdbias2
BIASMD
VLCD1PE
VLCD1
lcdbias1
lcdbias0
FIGURE 21-4: LCD INTERNAL REFERENCE LADDER POWER MODE SWITCHING DIAGRAM –
TYPE A
Single Segment Time
32kHz_clk
cnt[4:0] ‘H00 ‘H01 ‘H02 ‘H03 ‘H04 ‘H05 ‘H06 ‘H07 ‘H0E ‘H0F ‘H00 ‘H01
lcd_clk
LRLAT[2:0] ‘H3
Segment Data
LRLAT<2:0>
Power Mode Power Mode A Power Mode B Mode A
FIGURE 21-5: LCD INTERNAL REFERENCE LADDER POWER MODE SWITCHING DIAGRAM –
TYPE B
Single Segment Time
32kHz_clk
cnt[4:0] ‘H00 ‘H01 ‘H02 ‘H03 ‘H04 ‘H05 ‘H06 ‘H07 ‘H1E ‘H1F ‘H00 ‘H01
lcd_clk
LRLAT[2:0] ‘H3
Segment Data
LRLAT<2:0>
Power Mode Power Mode A Power Mode B Mode A
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
bit 7-6 LRLAP<1:0>: LCD Reference Ladder A Time Power Control bits
During Time interval A (Refer to Figure 21-4):
00 = Internal LCD Reference Ladder is powered down and unconnected
01 = Internal LCD Reference Ladder is powered in low-power mode
10 = Internal LCD Reference Ladder is powered in medium-power mode
11 = Internal LCD Reference Ladder is powered in high-power mode
bit 5-4 LRLBP<1:0>: LCD Reference Ladder B Time Power Control bits
During Time interval B (Refer to Figure 21-4):
00 = Internal LCD Reference Ladder is powered down and unconnected
01 = Internal LCD Reference Ladder is powered in low-power mode
10 = Internal LCD Reference Ladder is powered in medium-power mode
11 = Internal LCD Reference Ladder is powered in high-power mode
bit 3 Unimplemented: Read as ‘0’
bit 2-0 LRLAT<2:0>: LCD Reference Ladder A Time interval control bits
Sets the number of 32 kHz clocks that the A Time interval power mode is active
VDDIO 7 Stages
R R R R
3.072V
7
To top of
Reference Ladder
0
LCDCST<2:0>
3
Internal Reference Contrast control
V1
COM0
COM0 V0
V1
SEG0
V0
V1
SEG1
V0
V1
COM0-SEG0 V0
-V1
COM0-SEG1 V0
1 Frame
SEG7
SEG6
SEG5
SEG4
SEG3
SEG2
SEG1
SEG0
V2
COM0 V1
V0
COM1
V2
COM1 V1
COM0
V0
V2
SEG0 V1
V0
V2
SEG1 V1
V0
V2
SEG3
SEG2
SEG1
SEG0
V1
COM0-SEG0 V0
-V1
-V2
V2
V1
COM0-SEG1 V0
-V1
-V2
1 Frame
V2
COM0 V1
COM1
V0
COM0
V2
COM1 V1
V0
V2
SEG0
V1
V0
V2
SEG1
SEG2
SEG1
SEG3
SEG0
V1
V0
V2
V1
COM0-SEG0 V0
-V1
-V2
V2
V1
COM0-SEG1 V0
-V1
-V2
2 Frames
V3
V2
COM0
V1
COM1
V0
V3
COM0
V2
COM1
V1
V0
V3
V2
SEG0
V1
V0
V3
V2
SEG1
SEG3
SEG2
SEG1
SEG0
V1
V0
V3
V2
V1
COM0-SEG0 V0
-V1
-V2
-V3
V3
V2
V1
COM0-SEG1 V0
-V1
-V2
1 Frame
-V3
V3
V2
COM0
V1
COM1
V0
V3
COM0
V2
COM1
V1
V0
V3
V2
SEG0
V1
V0
V3
V2
SEG1
SEG3
SEG1
SEG0
SEG2
V1
V0
V3
V2
V1
COM0-SEG0 V0
-V1
-V2
-V3
V3
V2
V1
COM0-SEG1 V0
-V1
-V2
2 Frames
-V3
V2
COM0
V1
V0
V2
COM2 COM1 V1
V0
COM1 V2
COM0 COM2 V1
V0
V2
SEG0
SEG2 V1
V0
V2
SEG1 V1
SEG2
SEG1
SEG0
V0
V2
V1
COM0-SEG0 V0
-V1
-V2
V2
V1
COM0-SEG1 V0
-V1
-V2
1 Frame
V2
COM0
V1
V0
COM2
V2
COM1
V1
COM1
V0
COM0
V2
COM2
V1
V0
V2
SEG0
V1
V0
SEG2
SEG1
SEG0
V2
SEG1
V1
V0
V2
V1
COM0-SEG0 V0
-V1
-V2
V2
V1
COM0-SEG1 V0
-V1
-V2
2 Frames
V3
V2
COM0
V1
V0
COM2 V3
V2
COM1
V1
COM1
V0
COM0
V3
V2
COM2
V1
V0
V3
V2
SEG0
SEG2 V1
V0
SEG2
SEG1
SEG0
V3
V2
SEG1
V1
V0
V3
V2
V1
COM0-SEG0 V0
-V1
-V2
-V3
V3
V2
V1
COM0-SEG1 V0
-V1
-V2
-V3
1 Frame
V3
V2
COM0
V1
V0
COM2 V3
V2
COM1
V1
COM1
V0
COM0
V3
V2
COM2
V1
V0
V3
V2
SEG0
V1
V0
SEG2
SEG1
SEG0
V3
V2
SEG1
V1
V0
V3
V2
V1
COM0-SEG0 V0
-V1
-V2
-V3
V3
V2
V1
COM0-SEG1 V0
-V1
-V2
-V3
2 Frames
COM3
V3
COM2 V2
COM0 V1
V0
V3
COM1 V2
COM1 V1
COM0 V0
V3
V2
COM2 V1
V0
V3
V2
COM3 V1
V0
V3
V2
SEG0 V1
V0
SEG1
SEG0
V3
V2
SEG1 V1
V0
V3
V2
V1
COM0-SEG0 V0
-V1
-V2
-V3
V3
V2
V1
COM0-SEG1 V0
-V1
-V2
-V3
1 Frame
COM3
V3
COM2 V2
COM0 V1
V0
V3
COM1 V2
COM1 V1
COM0 V0
V3
V2
COM2 V1
V0
V3
V2
COM3 V1
V0
V3
V2
SEG0 V1
V0
SEG1
SEG0
V3
V2
SEG1 V1
V0
V3
V2
V1
COM0-SEG0 V0
-V1
-V2
-V3
V3
V2
V1
COM0-SEG1 V0
-V1
-V2
-V3
2 Frames
V3
V2
COM1 V1
V0
V3
V2
COM2 V1
V0
COM3 V3
V2
V1
V0
2 Frames
TFINT
TFWR Frame
Frame Frame
Boundary Boundary Boundary
V3
V2
V1
COM0 V0
V3
V2
V1
COM1 V0
V3
V2
V1
COM2 V0
V3
V2
V1
SEG0 V0
2 Frames
Data Bus
Read Write
SSPBUF Reg
SDI
SSPSR Reg
SDO bit 0 Shift
Clock
Edge
Select
SSPM<3:0>
4
( TMR22Output )
SCK
Edge Prescaler TOSC
Select 4, 16, 64
Baud rate
generator
TRIS bit (SSPADD)
Internal
data bus [SSPM 3:0]
Read Write
Internal
Data Bus
Read Write
Shift
Clock
SSPSR Reg
SDA MSb LSb
SSPMSK Reg
SSPADD Reg
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
bit 7 GCEN: General Call Enable bit (in I2C Slave mode only)
1 = Enable interrupt when a general call address (0x00 or 00h) is received in the SSPSR
0 = General call address disabled
bit 6 ACKSTAT: Acknowledge Status bit (in I2C mode only)
1 = Acknowledge was not received
0 = Acknowledge was received
bit 5 ACKDT: Acknowledge Data bit (in I2C mode only)
In Receive mode:
Value transmitted when the user initiates an Acknowledge sequence at the end of a receive
1 = Not Acknowledge
0 = Acknowledge
bit 4 ACKEN: Acknowledge Sequence Enable bit (in I2C Master mode only)
In Master Receive mode:
1 = Initiate Acknowledge sequence on SDA and SCL pins, and transmit ACKDT 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)
In Master mode:
1 = Initiate Start condition on SDA and SCL pins. Automatically cleared by hardware.
0 = Start condition Idle
In Slave mode:
1 = Clock stretching is enabled for both slave transmit and slave receive (stretch enabled)
0 = Clock stretching is disabled
Note 1: For bits ACKEN, 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).
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Note 1: For daisy-chained SPI operation; allows the user to ignore all but the last received byte. SSPOV is still set
when a new byte is received and BF = 1, but hardware continues to write the most recent byte to SSPBUF.
2: This bit has no effect in Slave modes that Start and Stop condition detection is explicitly listed as enabled.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
REGISTER 22-6: SSPADD: MSSP ADDRESS AND BAUD RATE REGISTER (I2C MODE)
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ADD7 ADD6 ADD5 ADD4 ADD3 ADD2 ADD1 ADD0
bit 7 bit 0
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Master mode:
bit 7-3 Not used: Unused for Most Significant Address byte. Bit state of this register is a “don’t care”. Bit pat-
tern sent by master is fixed by I2C specification and must be equal to ‘11110’. However, those bits are
compared by hardware and are not affected by the value in this register.
bit 2-1 ADD<2:1>: Two Most Significant bits of 10-bit address
bit 0 Not used: Unused in this mode. Bit state is a “don’t care”.
10-Bit Slave mode — Least Significant Address byte:
The SPI mode allows 8 bits of data to be synchronously When initializing the SPI, several options need to be
transmitted and received simultaneously. All four clock specified. This is done by programming the appropriate
modes of SPI are supported in both Master and Slave control bits (SSPCON1<5:0> and SSPSTAT<7:6>).
modes. To accomplish communication, typically three These control bits allow the following to be specified:
pins are used: • Master mode (SCK is the clock output)
• Serial Data Out (SDO) • Slave mode (SCK is the clock input)
• Serial Data In (SDI) • Clock Polarity (Idle state of SCK)
• Serial Clock (SCK) • Data Input Sample Phase (middle or end of data
Additionally, a fourth pin may be used when in a Slave output time)
mode of operation: • Clock Edge (output data on rising/falling edge of
SCK)
• Slave Select (SS)
• Clock Rate (Master mode only)
Figure 22-1 shows the block diagram of the MSSP
• Slave Select mode (Slave mode only)
module when operating in SPI mode.
The MSSP consists of a transmit/receive shift register
22.3.1 REGISTERS (SSPSR) and a buffer register (SSPBUF). The SSPSR
The MSSP module has five registers for SPI mode shifts the data in and out of the device, MSb first. The
operation. These are: SSPBUF holds the data that was written to the SSPSR
until the received data is ready. Once the 8 bits of data
• MSSP STATUS register (SSPSTAT) have been received, that byte is moved to the SSPBUF
• MSSP Control Register 1 (SSPCON1) register. Then, the Buffer Full Detect bit, BF of the
• MSSP Control Register 3 (SSPCON3) SSPSTAT register, and the interrupt flag bit, SSPIF, are
• MSSP Data Buffer register (SSPBUF) set. This double-buffering of the received data
(SSPBUF) allows the next byte to start reception before
• MSSP Address register (SSPADD)
reading the data that was just received. Any write to the
• MSSP Shift register (SSPSR) SSPBUF register during transmission/reception of data
(Not directly accessible) will be ignored and the write collision detect bit WCOL
SSPCON1 and SSPSTAT are the control and STATUS of the SSPCON1 register, will be set. User software
registers in SPI mode operation. The SSPCON1 regis- must clear the WCOL bit to allow the following write(s)
ter is readable and writable. The lower 6 bits of the to the SSPBUF register to complete successfully.
SSPSTAT are read-only. The upper two bits of the When the application software is expecting to receive
SSPSTAT are read/write. valid data, the SSPBUF should be read before the next
In one SPI master mode, SSPADD can be loaded with byte of data to transfer is written to the SSPBUF. The
a value used in the Baud Rate Generator. More infor- Buffer Full bit, BF of the SSPSTAT register, indicates
mation on the Baud Rate Generator is available in when SSPBUF has been loaded with the received data
Section 22.7 “Baud Rate Generator”. (transmission is complete). When the SSPBUF is read,
SSPSR is the shift register used for shifting data in and the BF bit is cleared. This data may be irrelevant if the
out. SSPBUF provides indirect access to the SSPSR SPI is only a transmitter. Generally, the MSSP interrupt
register. SSPBUF is the buffer register to which data is used to determine when the transmission/reception
bytes are written, and from which data bytes are read. has completed. If the interrupt method is not going to
be used, then software polling can be done to ensure
In receive operations, SSPSR and SSPBUF together that a write collision does not occur.
create a buffered receiver. When SSPSR receives a
complete byte, it is transferred to SSPBUF and the The SSPSR is not directly readable or writable and can
SSPIF interrupt is set. only be accessed by addressing the SSPBUF register.
Additionally, the SSPSTAT register indicates the
During transmission, the SSPBUF is not buffered. A various Status conditions.
write to SSPBUF will write to both SSPBUF and
SSPSR.
Slave Select
General I/O SS
Processor 1 (optional) Processor 2
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)
Input
Sample
(SMP = 1)
SSPIF
SSPSR to
SSPBUF
SS
SCK
(CKP = 0
CKE = 0)
SCK
(CKP = 1
CKE = 0)
Write to
SSPBUF
Shift register SSPSR
and bit count are reset
SSPBUF to
SSPSR
SDI bit 0
bit 7 bit 7
Input
Sample
SSPIF
Interrupt
Flag
SSPSR to
SSPBUF
SS
Optional
SCK
(CKP = 0
CKE = 0)
SCK
(CKP = 1
CKE = 0)
Write to
SSPBUF
Valid
SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
SDI
bit 7 bit 0
Input
Sample
SSPIF
Interrupt
Flag
SSPSR to
SSPBUF
Write Collision
detection active
SS
Not Optional
SCK
(CKP = 0
CKE = 1)
SCK
(CKP = 1
CKE = 1)
Write to
SSPBUF
Valid
SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
SDI
bit 7 bit 0
Input
Sample
SSPIF
Interrupt
Flag
SSPSR to
SSPBUF
Write Collision
detection active
The I2C specification defines a Start condition as a A Restart is valid any time that a Stop would be valid.
transition of SDA from a high to a low state while SCL A master can issue a Restart if it wishes to hold the
line is high. A Start condition is always generated by bus after terminating the current transfer. A Restart
the master and signifies the transition of the bus from has the same effect on the slave that a Start would,
an Idle to an Active state. Figure 22-8 shows wave resetting all slave logic and preparing it to clock in an
forms for Start and Stop conditions. address. The master may want to address the same or
A bus collision can occur on a Start condition if the another slave.
module samples the SDA line low before asserting it In 10-bit Addressing Slave mode a Restart is required
low. This does not conform to the I2C Specification that for the master to clock data out of the addressed
states no bus collision can occur on a Start. slave. Once a slave has been fully address, matching
both high and low address bytes, the master can issue
Note: The Philips I2C Specification states that a
a Restart and the high address byte with the R/W bit
bus collision cannot occur on a Start, and
set. The slave logic will then hold the clock and pre-
should occur during the address sequence.
pare to clock out data.
22.4.5 STOP CONDITION After a full match with R/W clear in 10-bit mode, a prior
match flag is set and maintained. Until a Stop condi-
A Stop condition is a transition of the SDA line from
tion, a high address with R/W clear, or high address
low to high state while the SCL line is high.
match fails.
Note: At least one SCL low time must appear
22.4.7 START/STOP CONDITION INTERRUPT
before a Stop is valid, therefore, if the SDA
MASKING
line goes low then high again while the SCL
line stays high, only the Start condition is The SCIE and PCIE bits of the SSPCON3 register can
detected. enable the generation of an interrupt in Slave mode.
Slave modes where interrupt on Start and Stop detect
are already enabled, these bits will have no effect.
SDA
SCL
S P
Change of Change of
Data Allowed Data Allowed
Start Stop
Condition Condition
Sr
Change of Change of
Data Allowed Data Allowed
Restart
Condition
When the R/W bit of a matching received address byte Slave device reception with AHEN and DHEN set
is clear, the R/W bit of the SSPSTAT register is cleared. operate the same as without these options with extra
The received address is loaded into the SSPBUF reg- interrupts and clock stretching added after the 8th fall-
ister and acknowledged. ing edge of SCL. These additional interrupts allow the
When the overflow condition exists for a received slave software to decide whether it wants to ACK the
address, then not Acknowledge is given. An overflow receive address or data byte, rather than the hard-
condition is defined as either bit BF bit of the SSPSTAT ware. This functionality adds support for PMBus™ that
register is set, or bit SSPOV bit of the SSPCON1 reg- was not present on previous versions of this module.
ister is set. The BOEN bit of the SSPCON3 register This list describes the steps that need to be taken by
modifies this operation. For more information see slave software to use these options for I2C commun-
Register 22-4. cation. Figure 22-12 displays a module using both
An MSSP interrupt is generated for each transferred address and data holding. Figure 22-13 includes the
data byte. Flag bit, SSPIF, must be cleared by software. operation with the SEN bit of the SSPCON2 register
set.
When the SEN bit of the SSPCON2 register is set, SCL
will be held low (clock stretch) following each received 1. S bit of SSPSTAT is set; SSPIF is set if interrupt
byte. The clock must be released by setting the CKP on Start detect is enabled.
bit of the SSPCON1 register, except sometimes in 2. Matching address with R/W bit clear is clocked
10-bit mode. See Section 22.3.5 “Master Mode” for in. SSPIF is set and CKP cleared after the 8th
more detail. falling edge of SCL.
3. Slave clears the SSPIF.
22.5.2.1 7-bit Addressing Reception
4. Slave can look at the ACKTIM bit of the
This section describes a standard sequence of events SSPCON3 register to determine if the SSPIF
for the MSSP module configured as an I2C Slave in was after or before the ACK.
7-bit Addressing mode. All decisions made by hard- 5. Slave reads the address value from SSPBUF,
ware or software and their effect on reception. clearing the BF flag.
Figure 22-10 and Figure 22-11 is used as a visual 6. Slave sets ACK value clocked out to the master
reference for this description. by setting ACKDT.
This is a step by step process of what typically must 7. Slave releases the clock by setting CKP.
be done to accomplish I2C communication. 8. SSPIF is set after an ACK, not after a NACK.
1. Start bit detected. 9. If SEN = 1 the slave hardware will stretch the
2. S bit of SSPSTAT is set; SSPIF is set if interrupt clock after the ACK.
on Start detect is enabled. 10. Slave clears SSPIF.
3. Matching address with R/W bit clear is received. Note: SSPIF is still set after the 9th falling edge of
4. The slave pulls SDA low sending an ACK to the SCL even if there is no clock stretching and
master, and sets SSPIF bit. BF has been cleared. Only if NACK is sent to
5. Software clears the SSPIF bit. Master is SSPIF not set
6. Software reads received address from SSPBUF 11. SSPIF set and CKP cleared after 8th falling
clearing the BF flag. edge of SCL for a received data byte.
7. If SEN = 1; Slave software sets CKP bit to 12. Slave looks at ACKTIM bit of SSPCON3 to
release the SCL line. determine the source of the interrupt.
8. The master clocks out a data byte. 13. Slave reads the received data from SSPBUF
9. Slave drives SDA low sending an ACK to the clearing BF.
master, and sets SSPIF bit. 14. Steps 7-14 are the same for each received data
10. Software clears SSPIF. byte.
11. Software reads the received byte from SSPBUF 15. Communication is ended by either the slave
clearing BF. sending an ACK = 1, or the master sending a
12. Steps 8-12 are repeated for all received bytes Stop condition. If a Stop is sent and Interrupt on
from the Master. Stop Detect is disabled, the slave will only know
by polling the P bit of the SSTSTAT register.
13. Master sends Stop condition, setting P bit of
SSPSTAT, and the bus goes idle.
DS41364B-page 292
Bus Master sends
Stop condition
From Slave to Master
SCL
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
S P
PIC16F193X/LF193X
SSPIF
SSPIF set on 9th
Preliminary
Cleared by software Cleared by software falling edge of
SCL
BF
First byte
SSPBUF is read of data is
available
in SSPBUF
SSPOV
SSPIF
Preliminary
BF
First byte
of data is
SSPBUF is read available
in SSPBUF
SSPOV
DS41364B-page 293
PIC16F193X/LF193X
Master Releases SDA Master sends
to slave for ACK sequence Stop condition
FIGURE 22-13:
DS41364B-page 294
A7 A6 A5 A4 A3 A2 A1 ACK 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
If AHEN = 1: SSPIF is set on
SSPIF is set 9th falling edge of Cleared by software No interrupt
SCL, after ACK after not ACK
BF from Slave
Address is
read from Data is read from SSPBUF
ACKDT SSBUF
PIC16F193X/LF193X
Slave software
clears ACKDT to Slave software
ACK the received sets ACKDT to
CKP byte not ACK
Preliminary
When AHEN=1:
When DHEN=1: CKP set by software,
CKP is cleared by hardware
CKP is cleared by SCL is released
and SCL is stretched hardware on 8th falling
edge of SCL
ACKTIM
P
I2C SLAVE, 7-BIT ADDRESS, RECEPTION (SEN = 0, AHEN = 1, DHEN = 1)
Stop condition
Master releases
R/W = 0 SDA to slave for ACK sequence
Receiving Address Receive Data Receive Data ACK
SDA ACK
A7 A6 A5 A4 A3 A2 A1 D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0
SSPIF
Cleared by software No interrupt after
if not ACK
from Slave
BF
Received
address is loaded into Received data is SSPBUF can be
SSPBUF available on SSPBUF read any time before
next byte is loaded
ACKDT
Preliminary
ACKDT to ACK not ACK
the received byte
CKP
When AHEN = 1; When DHEN = 1; CKP is not cleared
on the 8th falling edge on the 8th falling edge Set by software, if not ACK
of SCL of an address of SCL of a received release SCL
byte, CKP is cleared data byte, CKP is cleared
ACKTIM
P
I2C SLAVE, 7-BIT ADDRESS, RECEPTION (SEN = 1, AHEN = 1, DHEN = 1)
DS41364B-page 295
PIC16F193X/LF193X
PIC16F193X/LF193X
22.5.3 SLAVE TRANSMISSION 22.5.3.1 7-bit Transmission
When the R/W bit of the incoming address byte is set A Master device can transmit a read request to a
and an address match occurs, the R/W bit of the slave, and then clock data out of the slave. The list
SSPSTAT register is set. The received address is below outlines what software for a slave will need to
loaded into the SSPBUF register, and an ACK pulse is do to accomplish a standard transmission.
sent by the slave on the ninth bit. Figure 22-14 can be used as a reference to this list.
Following the ACK, slave hardware clears the CKP bit 1. Master sends a Start condition on SDA and
and the SCL pin is held low (see Section 22.5.6 SCL.
“Clock Stretching” for more detail). By stretching the 2. S bit of SSPSTAT is set; SSPIF is set if interrupt
clock, the master will be unable to assert another clock on Start detect is enabled.
pulse until the slave is done preparing the transmit 3. Matching address with R/W bit set is received by
data. the Slave setting SSPIF bit.
The transmit data must be loaded into the SSPBUF 4. Slave hardware generates an ACK and sets
register which also loads the SSPSR register. Then the SSPIF.
SCL pin should be released by setting the CKP bit of 5. SSPIF bit is cleared by user.
the SSPCON1 register. The eight data bits are shifted
6. Software reads the received address from SSP-
out on the falling edge of the SCL input. This ensures
BUF, clearing BF.
that the SDA signal is valid during the SCL high time.
7. R/W is set so CKP was automatically cleared
The ACK pulse from the master-receiver is latched on after the ACK.
the rising edge of the ninth SCL input pulse. This ACK
8. The slave software loads the transmit data into
value is copied to the ACKSTAT bit of the SSPCON2
SSPBUF.
register. If ACKSTAT is set (not ACK), then the data
transfer is complete. In this case, when the not ACK is 9. CKP bit is set releasing SCL, allowing the mas-
latched by the slave, the slave goes idle and waits for ter to clock the data out of the slave.
another occurrence of the Start bit. If the SDA line was 10. SSPIF is set after the ACK response from the
low (ACK), the next transmit data must be loaded into master is loaded into the ACKSTAT register.
the SSPBUF register. Again, the SCL pin must be 11. SSPIF bit is cleared.
released by setting bit CKP. 12. The slave software checks the ACKSTAT bit to
An MSSP interrupt is generated for each data transfer see if the master wants to clock out more data.
byte. The SSPIF bit must be cleared by software and Note 1: If the master ACKs the clock will be
the SSPSTAT register is used to determine the status stretched.
of the byte. The SSPIF bit is set on the falling edge of
the ninth clock pulse. 2: ACKSTAT is the only bit updated on the
rising edge of SCL (9th) rather than the
falling.
13. Steps 9-13 are repeated for each transmitted
byte.
14. If the master sends a not ACK; the clock is not
held, but SSPIF is still set.
15. The master sends a Restart condition or a Stop.
16. The slave is no longer addressed.
SCL
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
S P
Cleared by software
BF
BF is automatically
Received address Data to transmit is cleared after 8th falling
is read from SSPBUF loaded into SSPBUF edge of SCL
CKP
When R/W is set CKP is not
SCL is always held for not
held low after 9th SCL Set by software ACK
falling edge
ACKSTAT
Preliminary
Masters not ACK
is copied to
ACKSTAT
R/W
R/W is copied from the
matching address byte
D/A
I2C SLAVE, 7-BIT ADDRESS, TRANSMISSION (AHEN = 0)
Indicates an address
has been received
DS41364B-page 297
PIC16F193X/LF193X
PIC16F193X/LF193X
22.5.3.2 7-bit TRANSMISSION WITH Address Hold
Enabled
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
SSPIF
Cleared by software
BF BF is automatically
Received address Data to transmit is cleared after 8th falling
is read from SSPBUF loaded into SSPBUF edge of SCL
ACKDT
Slave clears
ACKDT to ACK
address
Preliminary
ACKSTAT
Master’s ACK
response is copied
to SSPSTAT
CKP
When AHEN = 1; CKP not cleared
CKP is cleared by hardware When R/W = 1; Set by software, after not ACK
after receiving matching CKP is always releases SCL
address. cleared after ACK
ACKTIM
I2C SLAVE, 7-BIT ADDRESS, TRANSMISSION (AHEN = 1)
R/W
D/A
DS41364B-page 299
PIC16F193X/LF193X
PIC16F193X/LF193X
22.5.4 SLAVE MODE 10-BIT ADDRESS 22.5.5 10-BIT ADDRESSING WITH ADDRESS OR
RECEPTION DATA HOLD
This section describes a standard sequence of events Reception using 10-bit addressing with AHEN or
for the MSSP module configured as an I2C Slave in DHEN set is the same as with 7-bit modes. The only
10-bit Addressing mode. difference is the need to update the SSPADD register
Figure 22-16 and is used as a visual reference for this using the UA bit. All functionality, specifically when the
description. CKP bit is cleared and SCL line is held low are the
same. Figure 22-17 can be used as a reference of a
This is a step by step process of what must be done by slave in 10-bit addressing with AHEN set.
slave software to accomplish I2C communication.
Figure 22-18 shows a standard waveform for a slave
1. Bus starts Idle. transmitter in 10-bit Addressing mode.
2. Master sends Start condition; S bit of SSPSTAT
is set; SSPIF is set if interrupt on Start detect is
enabled.
3. Master sends matching high address with R/W
bit clear; UA bit of the SSPSTAT register is set.
4. Slave sends ACK and SSPIF is set.
5. Software clears the SSPIF bit.
6. Software reads received address from SSPBUF
clearing the BF flag.
7. Slave loads low address into SSPADD,
releasing SCL.
8. Master sends matching low address byte to the
Slave; UA bit is set.
Note: Updates to the SSPADD register are not
allowed until after the ACK sequence.
Master sends
Stop condition
Receive First Address Byte Receive Second Address Byte Receive Data Receive Data
SCL
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
S
SCL is held low
while CKP = 0
SSPIF
Set by hardware Cleared by software
on 9th falling edge
BF
Data is read
Preliminary
If address matches Receive address is
SSPADD it is loaded into read from SSPBUF from SSPBUF
SSPBUF
UA
When UA = 1; Software updates SSPADD
SCL is held low and releases SCL
CKP
DS41364B-page 301
PIC16F193X/LF193X
Receive First Address Byte R/W = 0 Receive Second Address Byte Receive Data Receive Data
FIGURE 22-18:
DS41364B-page 302
SCL S 1 2 3 4 5 6 7 8 9 UA 1 2 3 4 5 6 7 8 9 UA 1 2 3 4 5 6 7 8 9 1 2
SSPIF
Set by hardware Cleared by software Cleared by software
on 9th falling edge
PIC16F193X/LF193X
BF
Preliminary
Slave software clears
ACKDT to ACK
the received byte
UA
Master sends
Master sends Stop condition
Restart event Master sends
not ACK
SCL 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
S
Sr
SSPIF
BF
Preliminary
UA
High address is loaded
UA indicates SSPADD After SSPADD is back into SSPADD
must be updated updated, UA is cleared
CKP and SCL is released
Indicates an address
has been received
I2C SLAVE, 10-BIT ADDRESS, TRANSMISSION (SEN = 0, AHEN = 0, DHEN = 0)
DS41364B-page 303
PIC16F193X/LF193X
PIC16F193X/LF193X
22.5.6 CLOCK STRETCHING 22.5.6.2 10-bit Addressing Mode
Clock stretching occurs when a device on the bus In 10-bit Addressing mode, when the UA bit is set the
holds the SCL line low effectively pausing communica- clock is always stretched. This is the only time the SCL
tion. The slave may stretch the clock to allow more is stretched without CKP being cleared. SCL is
time to handle data or prepare a response for the mas- releases immediately after a write to SSPADD.
ter device. A master device is not concerned with
Note: Previous versions of the module did not
stretching as anytime it is active on the bus and not
stretch the clock if the second address byte
transferring data it is stretching. Any stretching done
did not match.
by a slave is invisible to the master software and han-
dled by the hardware that generates SCL. 22.5.6.3 Byte NACKing
The CKP bit of the SSPCON1 register is used to con-
When AHEN bit of SSPCON3 is set; CKP is cleared by
trol stretching in software. Any time the CKP bit is
hardware after the 8th falling edge of SCL for a
cleared, the module will wait for the SCL line to go low
received matching address byte. When DHEN bit of
and then hold it. Setting CKP will release SCL and
SSPCON3 is set; CKP is cleared after the 8th falling
allow more communication.
edge of SCL for received data.
22.5.6.1 Normal Clock Stretching Stretching after the 8th falling edge of SCL allows the
Following an ACK if the R/W bit of SSPSTAT is set, a slave to look at the received address or data and
read request, the slave hardware will clear CKP. This decide if it wants to ACK the received data.
allows the slave time to update SSPBUF with data to 22.5.7 CLOCK SYNCHRONIZATION AND
transfer to the master. If the SEN bit of SSPCON2 is THE CKP BIT
set, the slave hardware will always stretch the clock
after the ACK sequence. Once the slave is ready; CKP Any time the CKP bit is cleared, the module will wait
is set by software and communication resumes. for the SCL line to go low and then hold it. However,
clearing the CKP bit will not assert the SCL output low
Note 1: The BF bit has no effect on if the clock will until the SCL output is already sampled low. There-
be stretched or not. This is different than fore, the CKP bit will not assert the SCL line until an
previous versions of the module that external I2C master device has already asserted the
would not stretch the clock, clear CKP, if SCL line. The SCL output will remain low until the CKP
SSPBUF was read before the 9th falling bit is set and all other devices on the I2C bus have
edge of SCL. released SCL. This ensures that a write to the CKP bit
2: Previous versions of the module did not will not violate the minimum high time requirement for
stretch the clock for a transmission if SCL (see Figure 22-19).
SSPBUF was loaded before the 9th falling
edge of SCL. It is now always cleared for
read requests.
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
SDA DX DX ‚ – 1
SCL
Master device
CKP asserts clock
Master device
releases clock
WR
SSPCON1
SCL
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S
SSPIF
BF (SSPSTAT<0>)
Cleared by software
SSPBUF is read
GCEN (SSPCON2<7>)
’1’
Master mode is enabled by setting and clearing the The master device generates all of the serial clock
appropriate SSPM bits in the SSPCON1 register and pulses and the Start and Stop conditions. A transfer is
by setting the SSPEN bit. In Master mode, the SCL and ended with a Stop condition or with a Repeated Start
SDA lines are set as inputs and are manipulated by the condition. Since the Repeated Start condition is also
MSSP hardware. the beginning of the next serial transfer, the I2C bus will
not be released.
Master mode of operation is supported by interrupt
generation on the detection of the Start and Stop con- In Master Transmitter mode, serial data is output
ditions. The Stop (P) and Start (S) bits are cleared from through SDA, while SCL outputs the serial clock. The
a Reset or when the MSSP module is disabled. Control first byte transmitted contains the slave address of the
of the I 2C bus may be taken when the P bit is set, or the receiving device (7 bits) and the Read/Write (R/W) bit.
bus is Idle. In this case, the R/W bit will be logic ‘0’. Serial data is
transmitted 8 bits at a time. After each byte is transmit-
In Firmware Controlled Master mode, user code ted, an Acknowledge bit is received. Start and Stop
conducts all I 2C bus operations based on Start and conditions are output to indicate the beginning and the
Stop bit condition detection. Start and Stop condition end of a serial transfer.
detection is the only active circuitry in this mode. All
other communication is done by the user software In Master Receive mode, the first byte transmitted con-
directly manipulating the SDA and SCL lines. tains the slave address of the transmitting device
(7 bits) and the R/W bit. In this case, the R/W bit will be
The following events will cause the SSP Interrupt Flag logic ‘1’. Thus, the first byte transmitted is a 7-bit slave
bit, SSPIF, to be set (SSP interrupt, if enabled): address followed by a ‘1’ to indicate the receive bit.
• Start condition detected Serial data is received via SDA, while SCL outputs the
serial clock. Serial data is received 8 bits at a time. After
• Stop condition detected
each byte is received, an Acknowledge bit is transmit-
• Data transfer byte transmitted/received ted. Start and Stop conditions indicate the beginning
• Acknowledge transmitted/received and end of transmission.
• Repeated Start generated A Baud Rate Generator is used to set the clock fre-
Note 1: The MSSP module, when configured in quency output on SCL. See Section 22.7 “Baud Rate
I2C Master mode, does not allow queue- Generator” for more detail.
ing of events. For instance, the user is not
allowed to initiate a Start condition and
immediately write the SSPBUF register to
initiate transmission before the Start con-
dition is complete. In this case, the
SSPBUF will not be written to and the
WCOL bit will be set, indicating that a write
to the SSPBUF did not occur
2: When in Master mode, Start/Stop detec-
tion is masked and an interrupt is gener-
ated when the SEN/PEN bit is cleared and
the generation is complete.
SDA DX DX ‚ – 1
BRG decrements on
Q2 and Q4 cycles
BRG
03h 02h 01h 00h (hold off) 03h 02h
Value
TBRG
SCL
S
TBRG
Preliminary
BF (SSPSTAT<0>)
PEN
R/W
I2C MASTER MODE WAVEFORM (TRANSMISSION, 7 OR 10-BIT ADDRESS)
DS41364B-page 311
PIC16F193X/LF193X
PIC16F193X/LF193X
22.6.7 I2C MASTER MODE RECEPTION 22.6.7.4 Typical Receive Sequence:
Master mode reception is enabled by programming the 1. The user generates a Start condition by setting
Receive Enable bit, RCEN bit of the SSPCON2 the SEN bit of the SSPCON2 register.
register. 2. SSPIF is set by hardware on completion of the
Note: The MSSP module must be in an Idle state Start.
before the RCEN bit is set or the RCEN bit 3. SSPIF is cleared by software.
will be disregarded. 4. User writes SSPBUF with the slave address to
The Baud Rate Generator begins counting and on each transmit and the R/W bit set.
rollover, the state of the SCL pin changes 5. Address is shifted out the SDA pin until all 8 bits
(high-to-low/low-to-high) and data is shifted into the are transmitted. Transmission begins as soon
SSPSR. After the falling edge of the eighth clock, the as SSPBUF is written to.
receive enable flag is automatically cleared, the con- 6. The MSSP module shifts in the ACK bit from the
tents of the SSPSR are loaded into the SSPBUF, the slave device and writes its value into the
BF flag bit is set, the SSPIF flag bit is set and the Baud ACKSTAT bit of the SSPCON2 register.
Rate Generator is suspended from counting, holding 7. The MSSP module generates an interrupt at the
SCL low. The MSSP is now in Idle state awaiting the end of the ninth clock cycle by setting the SSPIF
next command. When the buffer is read by the CPU, bit.
the BF flag bit is automatically cleared. The user can
8. User sets the RCEN bit of the SSPCON2 register
then send an Acknowledge bit at the end of reception
and the Master clocks in a byte from the slave.
by setting the Acknowledge Sequence Enable, ACKEN
bit of the SSPCON2 register. 9. After the 8th falling edge of SCL, SSPIF and BF
are set.
22.6.7.1 BF Status Flag 10. Master clears SSPIF and reads the received
byte from SSPUF, clears BF.
In receive operation, the BF bit is set when an address
or data byte is loaded into SSPBUF from SSPSR. It is 11. Master sets ACK value sent to slave in ACKDT
cleared when the SSPBUF register is read. bit of the SSPCON2 register and initiates the
ACK by setting the ACKEN bit.
22.6.7.2 SSPOV Status Flag 12. Masters ACK is clocked out to the Slave and
In receive operation, the SSPOV bit is set when 8 bits SSPIF is set.
are received into the SSPSR and the BF flag bit is 13. User clears SSPIF.
already set from a previous reception. 14. Steps 8-13 are repeated for each received byte
from the slave.
22.6.7.3 WCOL Status Flag
15. Master sends a not ACK or Stop to end
If the user writes the SSPBUF when a receive is communication.
already in progress (i.e., SSPSR is still shifting in a data
byte), the WCOL bit is set and the contents of the buffer
are unchanged (the write doesn’t occur).
begin Start condition ACK from Master Set ACKEN, start Acknowledge sequence
Master configured as a receiver SDA = ACKDT = 0 SDA = ACKDT = 1
SEN = 0 by programming SSPCON2<3> (RCEN = 1)
PEN bit = 1
Write to SSPBUF occurs here, RCEN cleared RCEN = 1, start RCEN cleared
ACK from Slave next receive automatically written here
start XMIT automatically
Transmit Address to Slave R/W = 0 Receiving Data from Slave Receiving Data from Slave
Bus master
ACK is not sent terminates
transfer
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
SCL S P
Data shifted in on falling edge of CLK Set SSPIF at end
of receive Set SSPIF interrupt
Set SSPIF interrupt at end of Acknow-
Set SSPIF interrupt ledge sequence
at end of receive at end of Acknowledge
SSPIF sequence
Set P bit
Cleared by software Cleared by software Cleared by software Cleared by software (SSPSTAT<4>)
SDA = 0, SCL = 1 Cleared in
while CPU software and SSPIF
responds to SSPIF
BF
Preliminary
(SSPSTAT<0>) Last bit is shifted into SSPSR and
contents are unloaded into SSPBUF
SSPOV
ACKEN
I2C MASTER MODE WAVEFORM (RECEPTION, 7-BIT ADDRESS)
RCEN
Master configured as a receiver RCEN cleared ACK from Master RCEN cleared
by programming SSPCON2<3> (RCEN = 1) automatically SDA = ACKDT = 0 automatically
DS41364B-page 313
PIC16F193X/LF193X
PIC16F193X/LF193X
22.6.8 ACKNOWLEDGE SEQUENCE 22.6.9 STOP CONDITION TIMING
TIMING A Stop bit is asserted on the SDA pin at the end of a
An Acknowledge sequence is enabled by setting the receive/transmit by setting the Stop Sequence Enable
Acknowledge Sequence Enable bit, ACKEN bit of the bit, PEN bit of the SSPCON2 register. At the end of a
SSPCON2 register. When this bit is set, the SCL pin is receive/transmit, the SCL line is held low after the
pulled low and the contents of the Acknowledge data bit falling edge of the ninth clock. When the PEN bit is set,
are presented on the SDA pin. If the user wishes to gen- the master will assert the SDA line low. When the SDA
erate an Acknowledge, then the ACKDT bit should be line is sampled low, the Baud Rate Generator is
cleared. If not, the user should set the ACKDT bit before reloaded and counts down to ‘0’. When the Baud Rate
starting an Acknowledge sequence. The Baud Rate Generator times out, the SCL pin will be brought high
Generator then counts for one rollover period (TBRG) and one TBRG (Baud Rate Generator rollover count)
and the SCL pin is deasserted (pulled high). When the later, the SDA pin will be deasserted. When the SDA
SCL pin is sampled high (clock arbitration), the Baud pin is sampled high while SCL is high, the P bit of the
Rate Generator counts for TBRG. The SCL pin is then SSPSTAT register is set. A TBRG later, the PEN bit is
pulled low. Following this, the ACKEN bit is automatically cleared and the SSPIF bit is set (Figure 22-27).
cleared, the Baud Rate Generator is turned off and the
MSSP module then goes into Idle mode (Figure 22-26). 22.6.9.1 WCOL Status Flag
If the user writes the SSPBUF when a Stop sequence
22.6.8.1 WCOL Status Flag is in progress, then the WCOL bit is set and the
If the user writes the SSPBUF when an Acknowledge contents of the buffer are unchanged (the write doesn’t
sequence is in progress, then WCOL is set and the occur).
contents of the buffer are unchanged (the write doesn’t
occur).
SCL 8 9
SSPIF
Cleared in
SSPIF set at software
the end of receive Cleared in
software SSPIF set at the end
of Acknowledge sequence
Note: TBRG = one Baud Rate Generator period.
SDA ACK
P
TBRG TBRG TBRG
SCL brought high after TBRG
SDA asserted low before rising edge of clock
to setup Stop condition
SDA
BCLIF
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.
S bit and SSPIF set because
BCLIF SDA = 0, SCL = 1.
SSPIF and BCLIF are
cleared by software
SSPIF
TBRG TBRG
SDA
FIGURE 22-32: BRG RESET DUE TO SDA ARBITRATION DURING START CONDITION
SDA = 0, SCL = 1
Set S Set SSPIF
Less than TBRG
TBRG
SCL S
SCL pulled low after BRG
time-out
SEN
Set SEN, enable Start
sequence if SDA = 1, SCL = 1
BCLIF ’0’
SSPIF
SDA = 0, SCL = 1, Interrupts cleared
set SSPIF by software
SDA
SCL
RSEN
BCLIF
Cleared by software
S ’0’
SSPIF ’0’
TBRG TBRG
SDA
SCL
S ’0’
SSPIF
PEN
BCLIF
P ’0’
SSPIF ’0’
SDA
PEN
BCLIF
P ’0’
SSPIF ’0’
SSPM<3:0> SSPADD<7:0>
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
bit 7-0 EEDATL<7:0>: 8 Least Significant data bits of data EEPROM or Read from program memory
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
bit 7-0 EEADRL<7:0>: 8 Least Significant Address bits for EEPROM or program memory
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
S = Bit can only be set x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = bit is cleared by hardware
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
S = Bit can only be set x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared
MOVLW AAh ;
MOVWF EECON2 ;Write AAh
BSF EECON1, WR ;Set WR bit to begin write
;
;First instruction after BSF EECON1,RD executes normally
NOP
NOP ;Any instructions here are ignored as program
;memory is read in second cycle after BSF EECON1,RD
;
BANKSEL EEDATL ;
MOVF EEDATL, W ;W = LS Byte of Program Memory
MOVWF LOWPMBYTE ;
MOVF EEDATH, W ;W = MS Byte of Program EEDATL
MOVWF HIGHPMBYTE ;
BCF STATUS, RP1 ;Bank 0
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Flash Data INSTR (PC) INSTR (PC + 1) EEDATH,EEDATL INSTR (PC + 3) INSTR (PC + 4)
RD bit
EEDATH
EEDATL
Register
EERHLT
6 8
14 14 14 14
Program Memory
START_WRITE
BCF EECON1,LWLO ; No more Latches only; Actually start write
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1(1)
CLKOUT(4) TOST(2)
INT pin
INTF flag
(INTCON reg.) Interrupt Latency (3)
GIE bit
(INTCON reg.) Processor in
Sleep
Instruction Flow
PC PC PC + 1 PC + 2 PC + 2 PC + 2 0004h 0005h
Instruction Inst(PC + 1) Inst(PC + 2) Inst(0004h) Inst(0005h)
Fetched Inst(PC) = Sleep
Instruction Sleep Inst(PC + 1) Dummy Cycle Dummy Cycle
Executed Inst(PC - 1) Inst(0004h)
External
Programming VDD Device to be
Signals Programmed
VDD VDD
10k
VPP MCLR/VPP
VSS VSS
Data ICSPDAT
Clock ICSPCLK
* * *
To Normal Connections
OPCODE only
13 0
OPCODE
CONTROL OPERATIONS
BRA k Relative Branch 2 11 001k kkkk kkkk
BRW – Relative Branch with W 2 00 0000 0000 1011
CALL k Call Subroutine 2 10 0kkk kkkk kkkk
CALLW – Call Subroutine with W 2 00 0000 0000 1010
GOTO k Go to address 2 10 1kkk kkkk kkkk
RETFIE k Return from interrupt 2 00 0000 0000 1001
RETLW k Return with literal in W 2 11 0100 kkkk kkkk
RETURN – Return from Subroutine 2 00 0000 0000 1000
INHERENT OPERATIONS
CLRWDT – Clear Watchdog Timer 1 00 0000 0110 0100 TO, PD
NOP – No Operation 1 00 0000 0000 0000
OPTION – Load OPTION_REG register with W 1 00 0000 0110 0010
RESET – Software device Reset 1 00 0000 0000 0001
SLEEP – Go into Standby mode 1 00 0000 0110 0011 TO, PD
TRIS f Load TRIS register with W 1 00 0000 0110 01kk
C-COMPILER OPTIMIZED
ADDFSR n, k Add Literal to FSRn 1 11 0001 0nkk kkkk
MOVIW mm n Move INDFn to W, with pre/post inc/dec 1 00 0000 0001 0mmn Z 2
n mm Move INDFn to W, with pre/post inc/dec 1 00 0000 0001 0nmm Z 2
k[n] Move INDFn to W, Indexed Indirect. 1 11 1111 0nkk kkkk Z 2
MOVWI mm n Move W to INDFn, with pre/post inc/dec 1 00 0000 0001 1mmn 2
n mm Move W to INDFn, with pre/post inc/dec 1 00 0000 0001 1nmm 2
k[n] Move W to INDFn, Indexed Indirect. 1 11 1111 1nkk kkkk 2
Note 1: If the Program Counter (PC) is modified, or a conditional test is true, the instruction requires two cycles. The second cycle
is executed as a NOP.
2: If this instruction addresses an INDF register and the MSb of the corresponding FSR is set, this instruction will require
one additional instruction cycle.
Description: Bit ‘b’ in register ‘f’ is cleared. Description: If bit ‘b’ in register ‘f’ is ‘1’, the next
instruction is executed.
If bit ‘b’, in register ‘f’, is ‘0’, the next
instruction is discarded, and a NOP is
executed instead, making this a
2-cycle instruction.
C register f 0 Words: 1
Cycles: 1
Example: MOVF FSR, 0
After Instruction
LSRF Logical Right Shift
W = value in FSR register
Syntax: [ label ] LSLF f {,d} Z = 1
Operands: 0 ≤ f ≤ 127
d ∈ [0,1]
Operation: 0 → dest<7>
(f<7:1>) → dest<6:0>,
(f<0>) → C,
Status Affected: C, Z
Description: The contents of register ‘f’ are shifted
one bit to the right through the Carry
flag. A ‘0’ is shifted into the MSb. If ‘d’ is
‘0’, the result is placed in W. If ‘d’ is ‘1’,
the result is stored back in register ‘f’.
0 register f C
Description: The W register is loaded with the eight Description: The contents of register ‘f’ are rotated
bit literal ‘k’. The program counter is one bit to the left through the Carry
loaded from the top of the stack (the flag. If ‘d’ is ‘0’, the result is placed in
return address). This is a two-cycle the W register. If ‘d’ is ‘1’, the result is
instruction. stored back in register ‘f’.
Words: 1 C Register f
Cycles: 2
Words: 1
Example: CALL TABLE;W contains table
;offset value Cycles: 1
• ;W now has table value Example: RLF REG1,0
TABLE •
Before Instruction
•
REG1 = 1110 0110
ADDWF PC ;W = offset
C = 0
RETLW k1 ;Begin table
After Instruction
RETLW k2 ;
REG1 = 1110 0110
•
W = 1100 1100
•
C = 1
•
RETLW kn ; End of table
Before Instruction
W = 0x07
After Instruction
W = value of k8
3.6
2.5
2.3
2.0
1.8
0 4 10 16 32
Frequency (MHz)
Note 1: The shaded region indicates the permissible combinations of voltage and frequency.
2: Refer to Table 28-1 for each Oscillator mode’s supported frequencies.
3.6
2.5
2.3
2.0
1.8
0 4 10 16 32
Frequency (MHz)
Note 1: The shaded region indicates the permissible combinations of voltage and frequency.
2: Refer to Table 28-1 for each Oscillator mode’s supported frequencies.
125
+ 5%
85
Temperature (°C)
60
± 2%
25
0
-20
+ 5%
-40
1.8 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
VDD (V)
VDD
VPOR
VPORR
VSS
NPOR
POR REARM
VSS
TVLOW(2) TPOR(3)
D020 — 3.1 TBD TBD μA 1.8 WDT, BOR, FVR, and T1OSC
— 3.6 TBD TBD μA 3.0 disabled, all Peripherals Inactive
D027 — 3.5 TBD TBD μA 1.8 A/D Current (Note 1, Note 4), no
— 4 TBD TBD μA 3.0 conversion in progress
TH01 θJA Thermal Resistance Junction to Ambient 60 °C/W 28-pin SPDIP package
80 °C/W 28-pin SOIC package
90 °C/W 28-pin SSOP package
27.5 °C/W 28-pin QFN 6x6mm package
47.2 °C/W 40-pin PDIP package
46 °C/W 44-pin TQFP package
24.4 °C/W 44-pin QFN 8x8mm package
TH02 θJC Thermal Resistance Junction to Case 31.4 °C/W 28-pin SPDIP package
24 °C/W 28-pin SOIC package
24 °C/W 28-pin SSOP package
24 °C/W 28-pin QFN 6x6mm package
24.7 °C/W 40-pin PDIP package
14.5 °C/W 44-pin TQFP package
20 °C/W 44-pin QFN 8x8mm package
TH03 TJMAX Maximum Junction Temperature 150 °C
TH04 PD Power Dissipation — W PD = PINTERNAL + PI/O
TH05 PINTERNAL Internal Power Dissipation — W PINTERNAL = IDD x VDD(1)
TH06 PI/O I/O Power Dissipation — W PI/O = Σ (IOL * VOL) + Σ (IOH * (VDD - VOH))
TH07 PDER Derated Power — W PDER = PDMAX (TJ - TA)/θJA(2)
Note 1: IDD is current to run the chip alone without driving any load on the output pins.
2: TA = Ambient Temperature
3: TJ = Junction Temperature
1. TppS2ppS
2. TppS
T
F Frequency T Time
Lowercase letters (pp) and their meanings:
pp
cc CCP1 osc OSC1
ck CLKOUT rd RD
cs CS rw RD or WR
di SDI sc SCK
do SDO ss SS
dt Data in t0 T0CKI
io I/O PORT t1 T1CKI
mc MCLR wr WR
Uppercase letters and their meanings:
S
F Fall P Period
H High R Rise
I Invalid (High-impedance) V Valid
L Low Z High-impedance
Pin CL
VSS
Q4 Q1 Q2 Q3 Q4 Q1
OSC1/CLKIN
OS02
OS04 OS04
OS03
OSC2/CLKOUT
(LP,XT,HS Modes)
OSC2/CLKOUT
(CLKOUT Mode)
FOSC
OS11 OS12
OS20
CLKOUT OS21
OS19 OS16 OS18
OS13 OS17
I/O pin
(Input)
OS15 OS14
I/O pin Old Value New Value
(Output)
OS18, OS19
FIGURE 28-8: RESET, WATCHDOG TIMER, OSCILLATOR START-UP TIMER AND POWER-UP
TIMER TIMING
VDD
MCLR
30
Internal
POR
33
PWRT
Time-out 32
OSC
Start-Up Time
Internal Reset(1)
Watchdog Timer
Reset(1)
31
34
34
I/O pins
VDD
VBOR and VHYST
VBOR
37
Reset
33(1)
(due to BOR)
Note 1: 64 ms delay only if PWRTE bit in the Configuration Word register is programmed to ‘0’.
2 ms delay if PWRTE = 0 and VREGEN = 1.
T0CKI
40 41
42
T1CKI
45 46
47 49
TMR0 or
TMR1
CC01 CC02
CC03
BSF ADCON0, GO
1 TCY
AD134 (TOSC/2(1))
AD131
Q4
AD130
A/D CLK
A/D Data 7 6 5 4 3 2 1 0
ADIF 1 TCY
GO DONE
Note 1: If the A/D clock source is selected as RC, a time of TCY is added before the A/D clock starts. This allows the
SLEEP instruction to be executed.
BSF ADCON0, GO
AD134 (TOSC/2 + TCY(1)) 1 TCY
AD131
Q4
AD130
A/D CLK
A/D Data 7 6 5 4 3 2 1 0
ADIF 1 TCY
GO DONE
Sampling Stopped
AD132
Sample
Note 1: If the A/D clock source is selected as RC, a time of TCY is added before the A/D clock starts. This allows the
SLEEP instruction to be executed.
Param
Sym. Characteristics Min. Typ. Max. Units Comments
No.
CM01 VIOFF Input Offset Voltage — ±7.5 ±15 mV
CM02 VICM Input Common Mode Voltage 0 — VDD V
CM03 CMRR Common Mode Rejection Ratio 55 — — dB
CM04 TRESP Response Time — 150 400 ns Note 1
CM05 TMC2OV Comparator Mode Change to — — 10 μs
Output Valid*
* These parameters are characterized but not tested.
Note 1: Response time measured with one comparator input at VDD/2, while the other input transitions
from VSS to VDD.
Param
Sym. Characteristics Min. Typ. Max. Units Comments
No.
DAC01* CLSB Step Size(2) — VDD/32 — V
DAC02* CACC Absolute Accuracy — — ± 1/2 LSb
DAC03* CR Unit Resistor Value (R) — TBD — Ω
DAC04* CST Settling Time(1) — — 10 μs
* These parameters are characterized but not tested.
Legend: TBD = To Be Determined
Note 1: Settling time measured while DACR<4:0> transitions from ‘0000’ to ‘1111’.
Param
Sym. Characteristics Min. Typ. Max. Units Comments
No.
VR01 VFVR Fixed Voltage Reference 0.984 1.024 1.064 V FVRV = 00 (1x), VDD ≥ 2V
Voltage 0.974 1.064 125°C
(calibrated) 1.968 2.048 2.158 FVRV = 01 (2x), VDD ≥
1.938 2.148 2.5V
3.966 4.096 4.226 125°C
3.936 4.226 FVRV = 10 (4x), VDD ≥
4.75V
125°C
VR02 TCVOUT Voltage drift temperature — TBD TBD ppm/°C
coefficient
VR03 ΔVROUT/ Voltage drift with respect to — TBD — μV/V
ΔVDD VDD regulation
VR04 TSTABLE Settling Time — TBD TBD μs
Legend: TBD = To Be Determined
* These parameters are characterized but not tested.
CK
US121 US121
DT
US120 US122
CK
US125
DT
US126
SS
SP70
SCK
(CKP = 0)
SP71 SP72
SP78 SP79
SCK
(CKP = 1)
SP79 SP78
SP80
SP75, SP76
SP74
SP73
SS
SP81
SCK
(CKP = 0)
SP71 SP72
SP79
SP73
SCK
(CKP = 1)
SP80
SP78
SP75, SP76
SP74
SS
SP70
SCK SP83
(CKP = 0)
SP71 SP72
SP78 SP79
SCK
(CKP = 1)
SP79 SP78
SP80
SP74
SP73
SP82
SS
SP70
SCK SP83
(CKP = 0)
SP71 SP72
SCK
(CKP = 1)
SP80
SP77
SP75, SP76
SDI
MSb In bit 6 - - - -1 LSb In
SP74
SCL
SP91 SP93
SP90 SP92
SDA
Start Stop
Condition Condition
SP90* TSU:STA Start condition 100 kHz mode 4700 — — ns Only relevant for Repeated
Setup time 400 kHz mode 600 — — Start condition
SP91* THD:STA Start condition 100 kHz mode 4000 — — ns After this period, the first
Hold time 400 kHz mode 600 — — clock pulse is generated
SP92* TSU:STO Stop condition 100 kHz mode 4700 — — ns
Setup time 400 kHz mode 600 — —
SP93 THD:STO Stop condition 100 kHz mode 4000 — — ns
Hold time 400 kHz mode 600 — —
* These parameters are characterized but not tested.
SCL
SP90
SP106
SP107
SP91 SP92
SDA
In
SP110
SP109
SP109
SDA
Out
VCTH
VCTL
ISRC ISNK
Enabled Enabled
XXXXXXXXXXXXXXXXX PIC16F1936
XXXXXXXXXXXXXXXXX -I/SP e3
YYWWNNN 0810017
XXXXXXXXXXXXXXXXXX PIC16F1937
XXXXXXXXXXXXXXXXXX -I/P e3
XXXXXXXXXXXXXXXXXX 0810017
YYWWNNN
XXXXXXXX 16F1936
XXXXXXXX -I/ML e3
YYWWNNN 0810017
Note: In the event the full Microchip part number cannot be marked on one line, it will
be carried over to the next line, thus limiting the number of available
characters for customer-specific information.
* Standard PICmicro® device marking consists of Microchip part number, year code, week code and
traceability code. For PICmicro device marking beyond this, certain price adders apply. Please check
with your Microchip Sales Office. For QTP devices, any special marking adders are included in QTP
price.
XXXXXXXXXX PIC16F1937
XXXXXXXXXX -I/ML e3
XXXXXXXXXX 0810017
YYWWNNN
XXXXXXXXXXXXXXXXXXXX PIC16F1936
XXXXXXXXXXXXXXXXXXXX -I/SO e3
XXXXXXXXXXXXXXXXXXXX
0810017
YYWWNNN
XXXXXXXXXXXX PIC16F1936
XXXXXXXXXXXX -I/SS e3
YYWWNNN 0810017
XXXXXXXXXXX PIC16F1937
XXXXXXXXXXX -I/PT e3
XXXXXXXXXXX 0810017
YYWWNNN
!" 3
&'
!&" &4# *!(!!&
4%&
&#&
&&255***'
'54
NOTE 1
E1
1 2 3
A A2
L c
A1 b1
b e eB
6&! 7,8.
'!
9'&! 7 7: ;
7"')
%! 7 <
& 1,
&
& = =
##4
4!! -
1!&
& = =
"# &
"# >#& . - --
##4>#& . <
: 9& - -?
&
& 9 -
9#
4!! <
6 9#>#& )
9
* 9#>#& ) <
:
*+ 1 = = -
!"
!"#$%&" ' ()"&'"!&)
&#*&&&#
+%&, & !&
- '!
!#.#
&"#'
#%!
& "!
!
#%!
& "!
!!
&$#/ !#
'!
#&
.0
1,2 1!'!
&$& "!
**&
"&&
!
* ,1
NOTE 1
E1
1 2 3
A A2
L c
b1
A1
b e eB
6&! 7,8.
'!
9'&! 7 7: ;
7"')
%! 7
& 1,
&
& = =
##4
4!! =
1!&
& = =
"# &
"# >#& . = ?
##4>#& . < = <
: 9& < =
&
& 9 =
9#
4!! < =
6 9#>#& ) - =
9
* 9#>#& ) = -
:
*+ 1 = =
!"
!"#$%&" ' ()"&'"!&)
&#*&&&#
+%&, & !&
- '!
!#.#
&"#'
#%!
& "!
!
#%!
& "!
!!
&$#/ !#
'!
#&
.0
1,2 1!'!
&$& "!
**&
"&&
!
* ,?1
% &' ! ( ) $*$ %&!
+, -.. /
(,
!" 3
&'
!&" &4# *!(!!&
4%&
&#&
&&255***'
'54
D D2
EXPOSED
PAD
E
b
E2
2 2
1 1 K
N N
NOTE 1 L
TOP VIEW BOTTOM VIEW
A3 A1
% &' ! ( ) $*$ %&!
+, -.. /
(,
!" 3
&'
!&" &4# *!(!!&
4%&
&#&
&&255***'
'54
## % &' ! ( ) * %&!
!" 3
&'
!&" &4# *!(!!&
4%&
&#&
&&255***'
'54
D D2
EXPOSED
PAD
E2
b
2 2
1 1
N N K
NOTE 1 L
A3 A1
* ,-1
## % &' ! ( ) * %&!
!" 3
&'
!&" &4# *!(!!&
4%&
&#&
&&255***'
'54
0
0 1' 2-.
0/
!" 3
&'
!&" &4# *!(!!&
4%&
&#&
&&255***'
'54
D
N
E
E1
NOTE 1
1 2 3
e
b
h
α
h
φ c
A A2
L
A1 L1 β
&
I C = <C
9#
4!! < = --
9#>#& ) - =
# %&
D C = C
# %&1
&&
' E C = C
!"
!"#$%&" ' ()"&'"!&)
&#*&&&#
+%&, & !&
- '!
!#.#
&"#'
#%!
& "!
!
#%!
& "!
!!
&$#'' !#
'!
#&
.0
1,2 1!'!
&$& "!
**&
"&&
!
.32 % '!
("!"*&
"&&
(%
%
'&
"
!!
* ,1
,3
0
.-
0
!" 3
&'
!&" &4# *!(!!&
4%&
&#&
&&255***'
'54
D
N
E
E1
1 2
b
NOTE 1
e
c
A A2
φ
A1
L1 L
& C C <C
9#>#& ) = -<
!"
!"#$%&" ' ()"&'"!&)
&#*&&&#
'!
!#.#
&"#'
#%!
& "!
!
#%!
& "!
!!
&$#'' !#
- '!
#&
.0
1,2 1!'!
&$& "!
**&
"&&
!
.32 % '!
("!"*&
"&&
(%
%
'&
"
!!
* ,-1
D
D1
E
e
E1
N
b
NOTE 1 1 2 3
NOTE 2
A α
c φ
β A1 A2
L L1
& C -C C
: >#& . 1,
: 9& 1,
##4>#& . 1,
##49& 1,
9#
4!! =
9#>#& ) - -
# %&
C C -C
# %&1
&&
' C C -C
!"
!"#$%&" ' ()"&'"!&)
&#*&&&#
,'% !&
!
&
D!E'
- '!
!#.#
&"#'
#%!
& "!
!
#%!
& "!
!!
&$#'' !#
'!
#&
.0
1,2 1!'!
&$& "!
**&
"&&
!
.32 % '!
("!"*&
"&&
(%
%
'&
"
!!
* ,?1
From: Name
Company
Address
City / State / ZIP / Country
Telephone: (_______) _________ - _________ FAX: (______) _________ - _________
Application (optional):
Would you like a reply? Y N
Questions:
2. How does this document meet your hardware and software development needs?
3. Do you find the organization of this document easy to follow? If not, why?
4. What additions to the document do you think would enhance the structure and subject?
5. What deletions from the document could be made without affecting the overall usefulness?
03/26/09