datasheet
超过460,000+ 应用技术资源下载
pdf

PIC18F45K22资料中文版

  • 1星
  • 日期: 2014-03-14
  • 大小: 9.82MB
  • 所需积分:0分
  • 下载次数:17
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: PIC18F45K22PIC18F

PIC18F45K22资料中文版

PIC18(L)F2X/4XK22 数据手册 采用 XLP 技术的 28/40/44 引脚低功耗、 高性能单片机  2011-2013 Microchip Technology Inc. DS41412F_CN 请注意以下有关 Microchip 器件代码保护功能的要点: • Microchip 的产品均达到 Microchip 数据手册中所述的技术指标。 • Microchip 确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。 • 目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的 操作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。 • Microchip 愿与那些注重代码完整性的客户合作。 • Microchip 或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “ 牢不可破 ” 的。 代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视 为违反了 《数字器件千年版权法案 (Digital Millennium Copyright Act)》。如果这种行为导致他人在未经授权的情况下,能访问您的 软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。 提供本文档的中文版本仅为了便于理解。请勿忽视文档中包含 的英文部分,因为其中提供了有关 Microchip 产品性能和使用 情况的有用信息。Microchip Technology Inc. 及其分公司和相 关公司、各级主管与员工及事务代理机构对译文中可能存在的 任何差错不承担任何责任。建议参考 Microchip Technology Inc. 的英文原版文档。 本出版物中所述的器件应用信息及其他类似内容仅为您提供便 利,它们可能由更新之信息所替代。确保应用符合技术规范, 是您自身应负的责任。Microchip 对这些信息不作任何明示或 暗示、书面或口头、法定或其他形式的声明或担保,包括但不 限于针对其使用情况、质量、性能、适销性或特定用途的适用 性的声明或担保。 Microchip 对因这些信息及使用这些信息而 引起的后果不承担任何责任。如果将 Microchip 器件用于生命 维持和 / 或生命安全应用,一切风险由买方自负。买方同意在 由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障 Microchip 免于承担法律责任,并加以赔偿。在 Microchip 知识 产权保护下,不得暗中或以其他方式转让任何许可证。 QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV == ISO/TS 16949 == DS41412F_CN 第 2 页 商标 Microchip 的名称和徽标组合、 Microchip 徽标、 dsPIC、 FlashFlex、 KEELOQ、 KEELOQ 徽标、 MPLAB、 PIC、 PICmicro、 PICSTART、 PIC32 徽标、 rfPIC、 SST、 SST 徽 标、 SuperFlash 和 UNI/O 均为 Microchip Technology Inc. 在 美国和其他国家或地区的注册商标。 FilterLab、 Hampshire、 HI-TECH C、 Linear Active Thermistor、 MTP、 SEEVAL 和 The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的 注册商标。 Silicon Storage Technology 为 Microchip Technology Inc. 在 除美国外的国家或地区的注册商标。 Analog-for-the-Digital Age、 Application Maestro、 BodyCom、 chipKIT、 chipKIT 徽标、 CodeGuard、 dsPICDEM、 dsPICDEM.net、 dsPICworks、 dsSPEAK、 ECAN、 ECONOMONITOR、 FanSense、 HI-TIDE、 In-Circuit Serial Programming、 ICSP、 Mindi、 MiWi、 MPASM、MPF、MPLAB Certified 徽标、MPLIB、MPLINK、 mTouch、 Omniscient Code Generation、 PICC、 PICC-18、 PICDEM、 PICDEM.net、 PICkit、 PICtail、 REAL ICE、 rfLAB、 Select Mode、 SQI、 Serial Quad I/O、 Total Endurance、 TSHARC、 UniWinDriver、 WiperLock、 ZENA 和 Z-Scale 均为 Microchip Technology Inc. 在美国和其他国 家或地区的商标。 SQTP 是 Microchip Technology Inc. 在美国的服务标记。 GestIC 和 ULPP 为 Microchip Technology Inc. 的子公司 Microchip Technology Germany II GmbH & Co. & KG 在除美 国外的国家或地区的注册商标。 在此提及的所有其他商标均为各持有公司所有。 © 2011-2013, Microchip Technology Inc. 版权所有。 ISBN:978-1-62077-086-3 Microchip 位于美国亚利桑那州 Chandler 和 Tempe 与位于俄勒冈州 Gresham 的全球总部、设计和晶圆生产厂及位于美国加利福尼亚州和 印度的设计中心均通过了 ISO/TS-16949:2009 认证。 Microchip 的 PIC® MCU 与 dsPIC® DSC、KEELOQ® 跳码器件、串行 EEPROM、单片 机外设、非易失性存储器和模拟产品严格遵守公司的质量体系流程。 此外, Microchip 在开发系统的设计和生产方面的质量体系也已通过了 ISO 9001:2000 认证。  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 采用 XLP 技术的 28/40/44 引脚 低功耗、高性能单片机 高性能 RISC CPU: • 针对 C 编译器优化的架构: - 为优化可重入代码而设计的可选扩展指令集 • 最大 1024 字节的数据 EEPROM • 可寻址最大 64 KB 的线性程序存储空间 • 可寻址最大 3896 字节的线性数据存储空间 • 最高 16 MIPS 的工作速度 • 16 位宽指令, 8 位宽数据总线 • 中断优先级 • 31 级深、软件可访问的硬件堆栈 • 8 x 8 单周期硬件乘法器 灵活的振荡器结构: • 高精度 16 MHz 内部振荡器模块: - 出厂时精度已校准到 ±1% - 频率可选择范围从 31 kHz 至 16 MHz - 使用PLL时可达64 MHz性能——无需外部元件 • 4 种晶振模式,频率最高为 64 MHz • 两种外部时钟模式,频率最高为 64 MHz • 4 倍频锁相环 (Phase Lock Loop, PLL) • 辅助振荡器使用 Timer1 (工作频率为 32 kHz) • 故障保护时钟监视器: - 当外设时钟停止时可使器件安全关闭 - 双速振荡器启动 模拟特性: • 模数转换器(Analog-to-Digital Converter,ADC) 模块: - 10 位分辨率,最多 30 路外部通道 - 自动采集功能 - 可在休眠模式下进行转换 - 固定参考电压(Fixed Voltage Reference,FVR) 通道 - 独立的输入多路选择 • 模拟比较器模块: - 两个轨到轨模拟比较器 - 独立的输入多路选择 • 数模转换器(Digital-to-Analog Converter,DAC) 模块: - 具有 1.024V、2.048V 和 4.096V 输出电压的固 定参考电压 (FVR) - 带有正负参考电压选择的5位轨到轨电阻式DAC • 充电时间测量单元(Charge Time Measurement Unit, CTMU)模块: - 支持触摸屏和电容式开关的电容触摸传感 采用 XLP 的超低功耗管理 PIC18(L)F2X/4XK22: • 休眠模式:20 nA,典型值 • 看门狗定时器:300 nA,典型值 • Timer1 振荡器:800 nA (32 kHz 时) • 外设模块禁止 单片机特性: • 2.3V 至 5.5V 工作电压 ——PIC18FXXK22 器件 • 1.8V 至 3.6V 工作电压 ——PIC18LFXXK22 器件 • 可在软件控制下自编程 • 高 / 低压检测(High/Low-Voltage Detection,HLVD) 模块: - 可编程 16 级 - 高 / 低压检测中断 • 可编程欠压复位 (Brown-out Reset, BOR): - 带软件使能选项 - 在休眠模式下可配置关闭 • 扩展型看门狗定时器(Watchdog Timer,WDT): - 可编程周期从 4 ms 至 131s • 在线串行编程 (In-Circuit Serial Programming™, ICSP™): - 单电源 3V • 在线调试 (In-Circuit Debug, ICD) 外设特点: • 最多 35 个 I/O 引脚和 1 个仅用作输入的引脚: - 高灌 / 拉电流:25 mA/25 mA - 3 个可编程外部中断 - 4 个可编程电平变化中断 - 9 个可编程弱上拉 - 可编程压摆率 • SR 锁存器: - 多个置 1/ 复位输入选项 • 两个捕捉 / 比较 /PWM (Capture/Compare/PWM, CCP)模块 • 3 个增强型 CCP (ECCP)模块: - 1、 2 或 4 路 PWM 输出 - 可选择的极性 - 可编程的死区 - 自动关闭和自动重启 - PWM 转向 • 两个主同步串行口 (Master Synchronous Serial Port, MSSP)模块: - 3 线 SPI (支持所有 4 种模式) - I2C™ 主 / 从模式 (带地址掩码)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 3 页 闪存 (字节) 单字 指令数 SRAM (字节) EEPROM (字节) I/O(1) 10 位 A/D 通道 (2) CCP ECCP (全桥) ECCP (半桥) SPI I2C™ EUSART 比较器 CTMU BOR/LVD SR 锁存器 8 位定时器 16 位定时器 PIC18(L)F2X/4XK22 • 两个增强型通用同步/异步收发器(Enhanced Universal Synchronous Asynchronous Receiver Transmitter, EUSART)模块: - 支持 RS-485、 RS-232 和 LIN - 使用内部振荡器的 RS-232 工作 - 接收到间隔字符时自动唤醒 - 自动波特率检测 器件 程序存储器 数据存储器 MSSP PIC18(L)F23K22 8K 4096 512 256 25 19 2 1 2 2 2 2 2 有 有 有 3 4 PIC18(L)F24K22 16K 8192 768 256 25 19 2 1 2 2 2 2 2 有有 有 3 4 PIC18(L)F25K22 32K 16384 1536 256 25 19 2 1 2 2 2 2 2 有有 有 3 4 PIC18(L)F26K22 64k 32768 3896 1024 25 19 2 1 2 2 2 2 2 有有 有 3 4 PIC18(L)F43K22 8K 4096 512 256 36 30 2 2 1 2 2 2 2 有有 有 3 4 PIC18(L)F44K22 16K 8192 768 256 36 30 2 2 1 2 2 2 2 有有 有 3 4 PIC18(L)F45K22 32K 16384 1536 256 36 30 2 2 1 2 2 2 2 有有 有 3 4 PIC18(L)F46K22 64k 32768 3896 1024 36 30 2 2 1 2 2 2 2 有有 有 3 4 注 1: 其中的一个引脚是仅用作输入的引脚。 2: 通道数包括内部 FVR 和 DAC 通道。 DS41412F_CN 第 4 页  2011-2013 Microchip Technology Inc. 引脚图 (28 引脚) 28 引脚 PDIP、SOIC 和 SSOP MCLR/VPP/RE3 1 RA0 2 RA1 3 RA2 4 RA3 5 RA4 6 RA5 7 VSS 8 RA7 9 RA6 10 RC0 11 RC1 12 RC2 13 RC3 14 28 引脚 QFN 和 UQFN(1) PIC18(L)F2XK22 PIC18(L)F2X/4XK22 28 RB7/PGD 27 RB6/PGC 26 RB5 25 RB4 24 RB3 23 RB2 22 RB1 21 RB0 20 VDD 19 VSS 18 RC7 17 RC6 16 RC5 15 RC4 RA1 RA0 MCLR/VPP/RE3 RB7/PGD RB6/PGC RB5 RB4 RA2 RA3 RA4 RA5/ VSS RA7 RA6 28 27 26 25 24 23 22 1 21 2 20 3 4 PIC18(L)F2XK22 19 18 5 17 6 16 7 15 8 9 10 11 12 13 14 RB3 RB2 RB1 RB0 VDD VSS RC7 RC0 RC1 RC2 RC3 RC4 RC5 RC6 注 1: 28 引脚 UQFN 封装仅适用于 PIC18(L)F23K22 和 PIC18(L)F24K22。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 5 页 PIC18(L)F2X/4XK22 引脚图 (40 引脚) 40 引脚 PDIP MCLR/VPP/RE3 1 RA0 2 RA1 3 RA2 4 RA3 5 RA4 6 RA5 7 RE0 8 RE1 9 RE2 10 VDD 11 VSS 12 RA7 13 RA6 14 RC0 15 RC1 16 RC2 17 RC3 18 RD0 19 RD1 20 PIC18(L)F4XK22 40 RB7/PGD 39 RB6/PGC 38 RB5 37 RB4 36 RB3 35 RB2 34 RB1 33 RB0 32 VDD 31 VSS 30 RD7 29 RD6 28 RD5 27 RD4 26 RC7 25 RC6 24 RC5 23 RC4 22 RD3 21 RD2 40 引脚 UQFN 40 RC6 39 RC5 38 RC4 37 RD3 36 RD2 35 RD1 34 RD0 33 RC3 32 RC2 31 RC1 RC7 1 30 RC0 RD4 2 29 RA6 RD5 3 RD6 4 28 RA7 27 VSS RD7 VSS 5 6 PIC18(L)F4XK22 26 25 VDD RE2 VDD 7 24 RE1 RB0 8 23 RE0 RB1 9 22 RA5 RB2 10 21 RA4 RA3 20 RA2 19 RA1 18 RA0 17 MCLR/VPP/RE3 16 PGD/RB7 15 PGC/RB6 14 RB5 13 11 12 RB3 RB4 DS41412F_CN 第 6 页  2011-2013 Microchip Technology Inc. 引脚图 (44 引脚) 44 引脚 TQFP PIC18(L)F2X/4XK22 NC RC1 RC2 RC3 RD0 RD1 RD2 RD3 RC4 RC5 RC6 34 35 36 37 38 39 40 41 42 43 44 RC7 1 33 NC RD4 2 32 RC0 RD5 3 31 RA6 RD6 4 30 RA7 RD7 VSS 5 6 PIC18(L)F4XK22 29 28 VSS VDD VDD 7 27 RE2 RB0 8 26 RE1 RB1 9 25 RE0 RB2 10 RB3 11 24 RA5 23 RA4 22 21 20 19 18 17 16 15 14 13 12 NC NC RB4 RB5 PGC/RB6 PGD/RB7 MCLR/VPP/RE3 RA0 RA1 RA2 RA3 44 引脚 QFN 44 RC6 43 RC5 42 RC4 41 RD3 40 RD2 39 RD1 38 RD0 37 RC3 36 RC2 35 RC1 34 RC0 RC7 1 33 RA6 RD4 2 32 RA7 RD5 3 31 VSS RD6 4 30 VSS RD7 VSS 5 6 PIC18(L)F4XK22 29 28 VDD VDD VDD 7 27 RE2 VDD 8 26 RE1 RB0 9 RB1 10 RB2 11 25 RE0 24 RA5 23 RA4 22 21 20 19 18 17 16 15 14 13 12 RB3 NC RB4 RB5 PGC/RB6 PGD/RB7 MCLR/VPP/RE3 RA0 RA1 RA2 RA3  2011-2013 Microchip Technology Inc. DS41412F_CN 第 7 页 PIC18(L)F2X/4XK22 表 1: PIC18(L)F2XK22 引脚汇总 28-SSOP, SOIC 28-SPDIP 28-QFN,UQFN I/O 模拟 比较器 CTMU SR 锁存器 参考电压 (E)CCP EUSART MSSP 定时器 中断 上拉 基本功能 2 27 RA0 AN0 C12IN0- 3 28 RA1 AN1 C12IN1- 4 1 RA2 AN2 C2IN+ VREF- DACOUT 5 2 RA3 AN3 C1IN+ VREF+ 6 3 RA4 C1OUT SRQ CCP5 T0CKI 7 4 RA5 AN4 C2OUT SRNQ HLVDIN SS1 10 7 RA6 OSC2 CLKO 9 6 RA7 OSC1 CLKI 21 18 RB0 AN12 SRI CCP4 FLT0 SS2 INT0 Y 22 19 RB1 AN10 C12IN3- P1C SCK2 INT1 Y SCL2 23 20 RB2 AN8 CTED1 P1B SDI2 INT2 Y SDA2 24 21 RB3 AN9 C12IN2- CTED2 CCP2 SDO2 Y P2A(1) 25 22 RB4 AN11 P1D T5G IOC Y 26 23 RB5 AN13 CCP3 P3A(4) P2B(3) T1G IOC Y T3CKI(2) 27 24 RB6 TX2/CK2 IOC Y PGC 28 25 11 8 RB7 RC0 P2B(3) RX2/DT2 IOC Y SOSCO T1CKI T3CKI(2) T3G PGD 12 9 RC1 CCP2 P2A(1) SOSCI 13 10 RC2 AN14 CTPLS CCP1 P1A T5CKI 14 11 RC3 AN15 SCK1 SCL1 15 12 RC4 AN16 SDI1 SDA1 16 13 RC5 AN17 SDO1 17 14 RC6 AN18 CCP3 P3A(4) TX1/CK1 18 15 RC7 AN19 P3B RX1/DT1 1 26 RE3 MCLR VPP 85 VSS 19 16 VSS 20 17 VDD 注 1: CCP2/P2A 通过配置控制熔丝位进行复用。 2: T3CKI 通过配置控制熔丝位进行复用。 3: P2B 通过配置控制熔丝位进行复用。 4: CCP3/P3A 通过配置控制熔丝位进行复用。 DS41412F_CN 第 8 页  2011-2013 Microchip Technology Inc. 表 2: PIC18(L)F4XK22 引脚汇总 PIC18(L)F2X/4XK22 40-PDIP 40-UQFN 44-TQFP 44-QFN I/O 模拟 比较器 CTMU SR 锁存器 参考电压 (E)CCP EUSART MSSP 定时器 中断 上拉 基本功能 2 17 19 19 RA0 AN0 C12IN0- 3 18 20 20 RA1 AN1 C12IN1- 4 19 21 21 RA2 AN2 C2IN+ 5 20 22 6 21 23 7 22 24 14 29 31 22 RA3 AN3 C1IN+ 23 RA4 C1OUT 24 RA5 AN4 C2OUT 33 RA6 13 28 30 32 RA7 33 8 8 34 9 9 35 10 10 36 11 11 9 RB0 AN12 10 RB1 AN10 C12IN311 RB2 AN8 12 RB3 AN9 C12IN2- 37 12 14 38 13 15 14 RB4 AN11 15 RB5 AN13 39 14 16 40 15 17 15 30 32 16 RB6 17 RB7 34 RC0 16 31 35 35 RC1 17 32 36 36 RC2 AN14 18 33 37 37 RC3 AN15 23 38 42 42 RC4 AN16 24 39 43 25 40 44 43 RC5 AN17 44 RC6 AN18 26 1 1 1 RC7 AN19 19 34 38 38 RD0 AN20 20 35 39 39 RD1 AN21 21 36 40 22 37 41 27 2 2 28 3 3 29 4 4 40 RD2 AN22 41 RD3 AN23 2 RD4 AN24 3 RD5 AN25 4 RD6 AN26 30 5 5 5 RD7 AN27 8 23 25 25 RE0 AN5 注 1: CCP2 通过配置控制熔丝位进行复用。 2: T3CKI 通过配置控制熔丝位进行复用。 3: CCP3/P3A 通过配置控制熔丝位进行复用。 4: P2B 通过配置控制熔丝位进行复用。 VREFDACOUT VREF+ SRQ SRNQ HLVDIN SRI CTED1 CTED2 CTPLS FLT0 CCP2 P2A(1) CCP3 P3A(3) P2B(4) CCP2(1) P2A CCP1 P1A CCP4 P2B(4) P2C P2D P1B P1C P1D CCP3 P3A(3) TX1 CK1 RX1 DT1 TX2 CK2 RX2 DT2 T0CKI SS1 OSC2 CLKO OSC1 CLKI INT0 Y INT1 Y INT2 Y Y T5G IOC Y T1G IOC Y T3CKI(2) IOC Y IOC Y SOSCO T1CKI T3CKI(2) T3G SOSCI PGC PGD T5CKI SCK1 SCL1 SDI1 SDA1 SDO1 SCK2 SCL2 SDI2 SDA2 SS2 SD02  2011-2013 Microchip Technology Inc. DS41412F_CN 第 9 页 40-PDIP 40-UQFN 44-TQFP 44-QFN I/O 模拟 比较器 CTMU SR 锁存器 参考电压 (E)CCP EUSART MSSP 定时器 中断 上拉 基本功能 PIC18(L)F2X/4XK22 表 2: PIC18(L)F4XK22 引脚汇总 (续) 9 24 26 10 25 27 1 16 18 26 RE1 AN6 27 RE2 AN7 18 RE3 11 7, 26 7 7,8 32 28 28, 29 12 6, 27 6 6 31 29 30, 31 — — 12, 13 13 NC 33, 34 注 1: CCP2 通过配置控制熔丝位进行复用。 2: T3CKI 通过配置控制熔丝位进行复用。 3: CCP3/P3A 通过配置控制熔丝位进行复用。 4: P2B 通过配置控制熔丝位进行复用。 P3B CCP5 Y MCLR/ VPP VDD VSS DS41412F_CN 第 10 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 目录 1.0 器件概述 ..................................................................................................................................................................................... 13 2.0 振荡器模块 (带故障保护时钟监视器)...................................................................................................................................... 27 3.0 2011-2013 功耗管理模式............................................................................................................................................................ 47 4.0 复位 ............................................................................................................................................................................................ 59 5.0 2011-2013 存储器构成 ............................................................................................................................................................... 69 6.0 闪存程序存储器 .......................................................................................................................................................................... 95 7.0 数据 EEPROM 存储器 .............................................................................................................................................................. 105 8.0 8 x 8 硬件乘法器....................................................................................................................................................................... 111 9.0 中断 .......................................................................................................................................................................................... 113 10.0 I/O 端口 .................................................................................................................................................................................... 135 11.0 Timer0 模块 .............................................................................................................................................................................. 159 12.0 带门控控制的 Timer1/3/5 模块.................................................................................................................................................. 163 13.0 Timer2/4/6 模块 ........................................................................................................................................................................ 175 14.0 捕捉 / 比较 /PWM 模块 ............................................................................................................................................................. 179 15.0 主同步串行口 (MSSP1 和 MSSP2)模块............................................................................................................................... 211 16.0 增强型通用同步 / 异步收发器 (EUSART).............................................................................................................................. 267 17.0 模数转换器 (ADC)模块 ........................................................................................................................................................ 297 18.0 比较器模块 ............................................................................................................................................................................... 311 19.0 充电时间测量单元 (CTMU)................................................................................................................................................... 321 20.0 SR 锁存器................................................................................................................................................................................. 337 21.0 固定参考电压 (FVR)............................................................................................................................................................. 343 22.0 数模转换器 (DAC)模块 ........................................................................................................................................................ 345 23.0 高 / 低压检测 (HLVD)............................................................................................................................................................ 349 24.0 CPU 的特殊功能....................................................................................................................................................................... 355 25.0 指令集汇总 ............................................................................................................................................................................... 373 26.0 开发支持 ................................................................................................................................................................................... 423 27.0 电气特性 ................................................................................................................................................................................... 427 28.0 直流和交流特性图表 ................................................................................................................................................................. 467 29.0 封装信息 ................................................................................................................................................................................... 523 附录 A: 版本历史 ........................................................................................................................................................................ 545 附录 B: 器件差异 ........................................................................................................................................................................ 546 索引 ................................................................................................................................................................................................... 547 Microchip 网站.................................................................................................................................................................................... 557 变更通知客户服务 .............................................................................................................................................................................. 557 客户支持............................................................................................................................................................................................. 557 读者反馈表 ......................................................................................................................................................................................... 558 产品标识体系 ..................................................................................................................................................................................... 559  2011-2013 Microchip Technology Inc. DS41412F_CN 第 11 页 PIC18(L)F2X/4XK22 致客户 我们旨在提供最佳文档供客户正确使用 Microchip 产品。为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版物的质量将随新文档及更新版本的推出而得到提升。 如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com,或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。 最新数据手册 欲获得本数据手册的最新版本,请查询我公司的网站: http://www.microchip.com 查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号,例如 :DS30000A 是 DS30000 的 A 版本。 勘误表 现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。 欲了解某一器件是否存在勘误表,请通过以下方式之一查询: • Microchip 网站 http://www.microchip.com • 当地 Microchip 销售办事处 (见最后一页) 在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。 客户通知系统 欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。 DS41412F_CN 第 12 页  2011-2013 Microchip Technology Inc. 1.0 器件概述 本文档包含以下器件的具体信息: • PIC18F23K22 • PIC18F24K22 • PIC18F25K22 • PIC18F26K22 • PIC18F43K22 • PIC18F44K22 • PIC18F45K22 • PIC18F46K22 • PIC18LF23K22 • PIC18LF24K22 • PIC18LF25K22 • PIC18LF26K22 • PIC18LF43K22 • PIC18LF44K22 • PIC18LF45K22 • PIC18LF46K22 本系列具备所有 PIC18 单片机固有的优点,即以实惠的 价格提供出色的计算性能,以及高耐用性的闪存程序存 储器。除了这些优点之外,PIC18(L)F2X/4XK22 系列还 增强了器件设计,使得该系列单片机成为许多高性能、 功耗敏感应用的明智选择。 1.1 新的内核特性 1.1.1 XLP 技术 PIC18(L)F2X/4XK22 系列的所有器件具有一系列能在 工作时显著降低功耗的功能。主要包括以下几项: • 备用运行模式:通过将 Timer1 或内部振荡器模块 作为控制器时钟源,可使代码执行时的功耗降低 90%。 • 多种空闲模式:控制器还可在其 CPU 内核禁止而 外设仍然工作的情况下工作。处于这些状态时,功 耗可进一步降低,最低只有正常工作时的 4%。 • 动态模式切换:在器件工作期间可由用户代码调用 功耗管理模式,允许用户将节能的理念融入到其应 用的软件设计中。 • 关键模块功耗低 :Timer1 和看门狗定时器模块的功 耗需求可降至最低。具体数值请参见第 27.0 节 “ 电 气特性 ”。 PIC18(L)F2X/4XK22 1.1.2 多种振荡器选项和特性 PIC18(L)F2X/4XK22 系列的所有器件可提供 10 种不同 的振荡器选项,使用户在开发应用硬件时有很大的选择 范围。这些选项包括: • 4 种晶振模式,使用晶振或陶瓷谐振器 • 两种外部时钟模式,提供使用两个引脚(振荡器输 入引脚和四分频时钟输出引脚)或一个引脚 (振荡 器输入引脚,四分频时钟输出引脚重新分配为通用 I/O 引脚)的选项 • 两种外部 RC 振荡器模式,具有与外部时钟模式相 同的引脚选项 • 内部振荡器模块包含一个 16 MHz HFINTOSC 振荡 器和一个 31 kHz LFINTOSC 振荡器,它们共同提 供 8 种可供用户选择的时钟频率,范围从 31 kHz 至 16 MHz。此选项可以空出两个振荡器引脚作为 额外的通用 I/O 引脚。 • 一个锁相环 (PLL)倍频器,可在外部和内部振荡 器模式下使用,可使时钟速度最高达到 64 MHz。 PLL 和内部振荡器配合使用,可以向用户提供频率 范围从 31 kHz 至 64 MHz 的时钟速度以供选择,而 且不需要使用外部晶振或时钟电路。 除了可被用作时钟源外,内部振荡器模块还提供了一个 稳定的参考源,增加了以下功能以使器件更安全地工作: • 故障保护时钟监视器:该功能的作用是持续监视主 时钟源,将其与 LFINTOSC 提供的参考信号作比 较。如果时钟发生了故障,单片机会将时钟源切换 到内部振荡器模块,使器件可继续工作或安全地关 闭应用。 • 双速启动:该功能允许在上电复位或从休眠模式唤 醒时将内部振荡器用作时钟源,直到主时钟源可用 为止。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 13 页 PIC18(L)F2X/4XK22 1.2 其他特殊功能 • 存储器耐用性:程序存储器和数据 EEPROM 的闪存 单元经评测,可以耐受数万次擦写,程序存储器最高 可达 10,000 次,EEPROM 最高可达 100,000 次。在 不刷新的情况下,数据保存时间保守地估计在 40 年 以上。 • 自编程能力:这些器件能在内部软件控制下写入各 自的程序存储空间。通过使用受保护的引导块 (位 于程序存储器的顶部)中的自举程序,可创建能在 现场进行自我更新的应用。 • 扩展指令集:PIC18(L)F2X/4XK22 系列在 PIC18 指令集的基础上进行了可选择的扩展,添加了 8 条 新指令和一个变址寻址模式。此扩展实现了一个器 件配置选项,它是为优化可重入应用程序代码而特 别设计的,这些代码原来是通过高级语言(如 C 语 言)开发的。 • 增强型 CCP 模块:在 PWM 模式下,该模块提供 用于控制半桥或全桥驱动器的 1、 2 或 4 路调制输 出。其他特性包括: - 自动关闭,用于在中断或其他选定条件出现时 关闭 PWM 输出 - 自动重启,用于在条件清除后重新激活输出 - 输出转向,用于有选择地使能 4 路输出中的一 个或多个以提供 PWM 信号 • 增强型可寻址 EUSART:该串行通信模块可进行标 准的 RS-232 通信并支持 LIN 总线协议。其他增强 功能包括自动波特率检测和一个用于更高分辨率的 16 位波特率发生器。当单片机使用内部振荡器模块 时,EUSART 为与外界对话的应用程序提供稳定的 操作,而无需使用外部晶振也无需额外的功耗。 • 10 位 A/D 转换器:该模块具备可编程采集时间,从 而不必在选择通道和启动转换之间等待一个采样周 期,因而减少了代码开销。 • 扩展型看门狗定时器 (WDT):该增强型版本加入 了一个 16 位后分频器,可以提供在不同工作电压 和温度下保持稳定的扩展超时范围。超时周期请参 见第 27.0 节 “ 电气特性 ”。 • 充电时间测量单元 (CTMU) • SR 锁存器输出 1.3 系列中各产品的详细说明 PIC18(L)F2X/4XK22 系列器件以 28 引脚和 40/44 引脚 封装形式提供。图 1-1 给出了器件系列的框图。 这些器件存在以下差异: 1. 闪存程序存储器 2. 数据存储器 SRAM 3. 数据存储器 EEPROM 4. A/D 通道 5. I/O 端口 6. ECCP 模块 (全桥 / 半桥) 7. 输入电压范围 / 功耗 本系列器件的所有其他功能都是相同的。表 1-1 汇总了 这些功能。 所有器件的引脚排列如引脚汇总表表 1 和表 2 以及 I/O 引脚说明表表 1-2 和表 1-3 所示。 DS41412F_CN 第 14 页  2011-2013 Microchip Technology Inc. 表 1-1:  2011-2013 Microchip Technology Inc. 特性 PIC18F23K22 PIC18F24K22 PIC18F25K22 PIC18F26K22 PIC18F43K22 PIC18F44K22 PIC18F45K22 PIC18F46K22 PIC18LF23K22 PIC18LF24K22 PIC18LF25K22 PIC18LF26K22 PIC18LF43K22 PIC18LF44K22 PIC18LF45K22 PIC18LF46K22 器件特性 程序存储器 (字节) 8192 16384 32768 65536 8192 16384 32768 65536 程序存储器 (指令) 4096 8192 16384 32768 4096 8192 16384 32768 数据存储器 (字节) 512 768 1536 3896 512 768 1536 3896 数据 EEPROM 存储器 (字节) I/O 端口 捕捉 / 比较 /PWM 模块 (CCP) 增强型 CCP 模块 (ECCP) — — 半桥 256 A、 B、 C 和 E(1) 2 2 256 A、 B、 C 和 E(1) 2 2 256 A、 B、 C 和 E(1) 2 2 1024 256 256 256 1024 A、 B、 C 和 E(1) A、B、C、D 和 E A、B、C、D 和 E A、B、C、D 和 E A、B、C、D 和 E 2 2 2 2 2 2 1 1 1 1 增强型 CCP 模块 (ECCP) — 1 1 1 1 2 2 2 2 — 全桥 10 位模数转换模块 (ADC) 2 路内部通道 17 路输入通道 2 路内部通道 17 路输入通道 2 路内部通道 17 路输入通道 2 路内部通道 17 路输入通道 2 路内部通道 28 路输入通道 2 路内部通道 28 路输入通道 2 路内部通道 28 路输入通道 2 路内部通道 28 路输入通道 封装 28 引脚 PDIP 28 引脚 SOIC 28 引脚 SSOP 28 引脚 QFN 28 引脚 UQFN 28 引脚 PDIP 28 引脚 SOIC 28 引脚 SSOP 28 引脚 QFN 28 引脚 UQFN 28 引脚 PDIP 28 引脚 SOIC 28 引脚 SSOP 28 引脚 QFN 28 引脚 PDIP 28 引脚 SOIC 28 引脚 SSOP 28 引脚 QFN 40 引脚 PDIP 40 引脚 UQFN 44 引脚 QFN 44 引脚 TQFP 40 引脚 PDIP 40 引脚 UQFN 44 引脚 QFN 44 引脚 TQFP 40 引脚 PDIP 40 引脚 UQFN 44 引脚 QFN 44 引脚 TQFP 40 引脚 PDIP 40 引脚 UQFN 44 引脚 QFN 44 引脚 TQFP 中断源 33 定时器 (16 位) 4 串行通信 2 个 MSSP, 2 个 EUSART SR 锁存器 有 充电时间测量单元模块 (CTMU) 有 可编程高 / 低压检测 (HLVD) 有 可编程欠压复位 (BOR) 有 复位 (和延时) POR、 BOR、 RESET 指令、 堆栈上溢、 堆栈下溢 (PWRT 和 OST)、 MCLR 和 WDT 指令集 75 条指令; 使能扩展指令集后总共为 83 条指令 工作频率 DC - 64 MHz 注 1: PORTE 包含单个 RE3 只读位。 PIC18(L)F2X/4XK22 DS41412F_CN 第 15 页 PIC18(L)F2X/4XK22 图 1-1: 表指针 <21> PIC18(L)F2X/4XK22 系列框图 数据总线 <8> 递增 / 递减逻辑 88 21 PCLATU PCLATH 20 PCU PCH PCL 程序计数器 地址锁存器 程序存储器 (8/16/32/64 KB) 数据锁存器 31 级堆栈 STKPTR 数据锁存器 数据存储器 地址锁存器 12 数据地址 <12> 4 BSR 12 4 FSR0 快速操作 存储区 FSR1 FSR2 12 8 表锁存器 递增 / 递减 逻辑 指令总线 <16> ROM 锁存器 IR 地址译码 OSC1(2) OSC2(2) SOSCI SOSCO MCLR(1) 指令译码 和控制 状态机 控制信号 内部 振荡器 模块 LFINTOSC 振荡器 16 MHz 振荡器 单电源 编程 在线 调试器 上电延时 定时器 振荡器 起振定时器 上电 复位 看门狗 定时器 欠压 复位 故障保护 时钟监视器 8 PRODH PRODL 3 BITOP 8 8 x 8 乘法器 8 W 8 8 8 8 ALU<8> 8 高精度 带隙参考 FVR BOR HLVD 数据 EEPROM Timer0 Timer1 Timer3 Timer5 Timer2 Timer4 Timer6 CTMU PORTA RA0:RA7 PORTB RB0:RB7 PORTC RC0:RC7 PORTD RD0:RD7 PORTE RE0:RE2 RE3(1) DAC FVR DAC 比较器 C1/C2 ECCP1 ECCP2(3) ECCP3 CCP4 CCP5 MSSP1 MSSP2 EUSART1 EUSART2 SR 锁存器 10 位 ADC FVR 注 1: 只有在禁止 MCLR 功能时, RE3 才可用。 2: OSC1/CLKIN 和 OSC2/CLKOUT 仅在某些振荡器模式下、且这些引脚不被用作数字 I/O 的情况下才可用。更多信息,请参见第 2.0 节 “ 振荡器模块 (带故障保护时钟监视器) ”。 3: 对于 PIC18(L)F4XK22 为全桥操作,对于 PIC18(L)F2XK22 为半桥操作。 DS41412F_CN 第 16 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 1-2: PIC18(L)F2XK22 I/O 引脚说明 引脚编号 PDIP 和 QFN 和 SOIC UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 2 27 RA0/C12IN0-/AN0 RA0 I/O TTL 数字 I/O。 C12IN0- I 模拟 比较器 C1 和 C2 的反相输入。 AN0 I 模拟 模拟输入 0。 3 28 RA1/C12IN1-/AN1 RA1 I/O TTL 数字 I/O。 C12IN1- I 模拟 比较器 C1 和 C2 的反相输入。 AN1 I 模拟 模拟输入 1。 4 1 RA2/C2IN+/AN2/DACOUT/VREF- RA2 I/O TTL 数字 I/O。 C2IN+ I 模拟 比较器 C2 的同相输入。 AN2 I 模拟 模拟输入 2。 DACOUT O 模拟 DAC 参考输出。 VREF- I 模拟 A/D 参考电压 (低电压)输入。 5 2 RA3/C1IN+/AN3/VREF+ RA3 I/O TTL 数字 I/O。 C1IN+ I 模拟 比较器 C1 的同相输入。 AN3 I 模拟 模拟输入 3。 VREF+ I 模拟 A/D 参考电压 (高电压)输入。 6 3 RA4/CCP5/C1OUT/SRQ/T0CKI RA4 I/O ST 数字 I/O。 CCP5 I/O ST 捕捉 5 输入 / 比较 5 输出 /PWM5 输出。 C1OUT O CMOS 比较器 C1 的输出。 SRQ O TTL SR 锁存器 Q 输出。 T0CKI I ST Timer0 外部时钟输入。 7 4 RA5/C2OUT/SRNQ/SS1/HLVDIN/AN4 RA5 I/O TTL 数字 I/O。 C2OUT O CMOS 比较器 C2 的输出。 SRNQ O TTL SR 锁存器 Q 输出。 SS1 I TTL SPI 从选择输入 (MSSP)。 HLVDIN I 模拟 高 / 低压检测输入。 AN4 I 模拟 模拟输入 4。 10 7 RA6/CLKO/OSC2 RA6 I/O TTL 数字 I/O。 CLKO O 在 RC 模式下, OSC2 引脚输出 CLKOUT 信号,其频率 是 OSC1 引脚上信号频率的 1/4,该频率等于指令周期的 倒数。 OSC2 O 晶振输出。在晶振模式下,该引脚与晶振或谐振器相连。 图注: TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 为默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 为备用引脚分配。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 17 页 PIC18(L)F2X/4XK22 表 1-2: PIC18(L)F2XK22 I/O 引脚说明 (续) 引脚编号 PDIP 和 QFN 和 SOIC UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 9 6 RA7/CLKI/OSC1 RA7 I/O TTL 数字 I/O。 CLKI I CMOS 外部时钟源输入。总是与 OSC1 引脚功能相关联。 OSC1 I ST 配置为 RC 模式时为晶振输入或外部时钟源输入;否则 为 CMOS 输入。 21 18 RB0/INT0/CCP4/FLT0/SRI/SS2/AN12 RB0 I/O TTL 数字 I/O。 INT0 I ST 外部中断 0。 CCP4 I/O ST 捕捉 4 输入 / 比较 4 输出 /PWM4 输出。 FLT0 I ST ECCP 自动关闭的 PWM 故障输入。 SRI I ST SR 锁存器输入。 SS2 I TTL SPI 从选择输入 (MSSP)。 AN12 I 模拟 模拟输入 12。 22 19 RB1/INT1/P1C/SCK2/SCL2/C12IN3-/AN10 RB1 I/O TTL 数字 I/O。 INT1 I ST 外部中断 1。 P1C O CMOS 增强型 CCP1 PWM 输出。 SCK2 SCL2 I/O ST SPI 模式的同步串行时钟输入 / 输出 (MSSP)。 I/O ST I2C™ 模式的同步串行时钟输入 / 输出 (MSSP)。 C12IN3- I 模拟 比较器 C1 和 C2 的反相输入。 AN10 I 模拟 模拟输入 10。 23 20 RB2/INT2/CTED1/P1B/SDI2/SDA2/AN8 RB2 I/O TTL 数字 I/O。 INT2 I ST 外部中断 2。 CTED1 I ST CTMU 边沿 1 输入。 P1B O CMOS 增强型 CCP1 PWM 输出。 SDI2 I ST SPI 数据输入 (MSSP)。 SDA2 I/O ST I2C™ 数据 I/O (MSSP)。 AN8 I 模拟 模拟输入 8。 24 21 RB3/CTED2/P2A/CCP2/SDO2/C12IN2-/AN9 RB3 I/O TTL 数字 I/O。 CTED2 I ST CTMU 边沿 2 输入。 P2A CCP2(2) O CMOS 增强型 CCP2 PWM 输出。 I/O ST 捕捉 2 输入 / 比较 2 输出 /PWM2 输出。 SDO2 O — SPI 数据输出 (MSSP)。 C12IN2- I 模拟 比较器 C1 和 C2 的反相输入。 AN9 I 模拟 模拟输入 9。 图注: TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 为默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 为备用引脚分配。 DS41412F_CN 第 18 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 1-2: PIC18(L)F2XK22 I/O 引脚说明 (续) 引脚编号 PDIP 和 QFN 和 SOIC UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 25 22 RB4/IOC0/P1D/T5G/AN11 RB4 I/O TTL 数字 I/O。 IOC0 I TTL 电平变化中断引脚。 P1D O CMOS 增强型 CCP1 PWM 输出。 T5G I ST Timer5 外部时钟门控输入。 AN11 I 模拟 模拟输入 11。 26 23 RB5/IOC1/P2B/P3A/CCP3/T3CKI/T1G/AN13 RB5 I/O TTL 数字 I/O。 IOC1 P2B(1) P3A(1) CCP3(1) T3CKI(2) I TTL 电平变化中断引脚。 O CMOS 增强型 CCP2 PWM 输出。 O CMOS 增强型 CCP3 PWM 输出。 I/O ST 捕捉 3 输入 / 比较 3 输出 /PWM3 输出。 I ST Timer3 时钟输入。 T1G I ST Timer1 外部时钟门控输入。 AN13 I 模拟 模拟输入 13。 27 24 RB6/IOC2/TX2/CK2/PGC RB6 I/O TTL 数字 I/O。 IOC2 I TTL 电平变化中断引脚。 TX2 O — EUSART 异步发送。 CK2 I/O ST EUSART 同步时钟 (见 RXx/DTx 引脚信息)。 PGC I/O ST 在线调试器和 ICSP™ 编程时钟引脚。 28 25 RB7/IOC3/RX2/DT2/PGD RB7 I/O TTL 数字 I/O。 IOC3 I TTL 电平变化中断引脚。 RX2 I ST EUSART 异步接收。 DT2 I/O ST EUSART 同步数据 (见 TXx/CKx 引脚信息)。 PGD I/O ST 在线调试器和 ICSP™ 编程数据引脚。 11 8 RC0/P2B/T3CKI/T3G/T1CKI/SOSCO RC0 P2B(2) T3CKI(1) I/O TTL 数字 I/O。 O CMOS 增强型 CCP1 PWM 输出。 I ST Timer3 时钟输入。 T3G I ST Timer3 外部时钟门控输入。 T1CKI I ST Timer1 时钟输入。 SOSCO O — 辅助振荡器输出。 12 9 RC1/P2A/CCP2/SOSCI RC1 I/O TTL 数字 I/O。 P2A CCP2(1) O CMOS 增强型 CCP2 PWM 输出。 I/O ST 捕捉 2 输入 / 比较 2 输出 /PWM2 输出。 SOSCI I 模拟 辅助振荡器输入。 图注: TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 为默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 为备用引脚分配。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 19 页 PIC18(L)F2X/4XK22 表 1-2: PIC18(L)F2XK22 I/O 引脚说明 (续) 引脚编号 PDIP 和 QFN 和 SOIC UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 13 10 RC2/CTPLS/P1A/CCP1/T5CKI/AN14 RC2 I/O TTL 数字 I/O。 CTPLS O — CTMU 脉冲发生器输出。 P1A O CMOS 增强型 CCP1 PWM 输出。 CCP1 I/O ST 捕捉 1 输入 / 比较 1 输出 /PWM1 输出。 T5CKI I ST Timer5 时钟输入。 AN14 I 模拟 模拟输入 14。 14 11 RC3/SCK1/SCL1/AN15 RC3 I/O TTL 数字 I/O。 SCK1 SCL1 I/O ST SPI 模式的同步串行时钟输入 / 输出 (MSSP)。 I/O ST I2C™ 模式的同步串行时钟输入 / 输出 (MSSP)。 AN15 I 模拟 模拟输入 15。 15 12 RC4/SDI1/SDA1/AN16 RC4 I/O TTL 数字 I/O。 SDI1 SDA1 I ST SPI 数据输入 (MSSP)。 I/O ST I2C™ 数据 I/O (MSSP)。 AN16 I 模拟 模拟输入 16。 16 13 RC5/SDO1/AN17 RC5 I/O TTL 数字 I/O。 SDO1 O — SPI 数据输出 (MSSP)。 AN17 I 模拟 模拟输入 17。 17 14 RC6/P3A/CCP3/TX1/CK1/AN18 RC6 P3A(2) CCP3(2) I/O TTL 数字 I/O。 O CMOS 增强型 CCP3 PWM 输出。 I/O ST 捕捉 3 输入 / 比较 3 输出 /PWM3 输出。 TX1 O — EUSART 异步发送。 CK1 I/O ST EUSART 同步时钟 (见 RXx/DTx 引脚信息)。 AN18 I 模拟 模拟输入 18。 18 15 RC7/P3B/RX1/DT1/AN19 RC7 I/O TTL 数字 I/O。 P3B O CMOS 增强型 CCP3 PWM 输出。 RX1 I ST EUSART 异步接收。 DT1 I/O ST EUSART 同步数据 (见 TXx/CKx 引脚信息)。 AN19 I 模拟 模拟输入 19。 1 26 RE3/VPP/MCLR RE3 I ST 数字输入。 VPP P 编程电压输入。 MCLR I ST 低电平有效的主复位 (器件复位)输入。 图注: TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 为默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 为备用引脚分配。 DS41412F_CN 第 20 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 1-2: PIC18(L)F2XK22 I/O 引脚说明 (续) 引脚编号 PDIP 和 QFN 和 SOIC UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 20 17 VDD P — 逻辑和 I/O 引脚的正电源。 8, 19 5, 16 VSS P — 逻辑和 I/O 引脚的参考地。 图注: TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 为默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 为备用引脚分配。 表 1-3: PIC18(L)F4XK22 I/O 引脚说明 引脚编号 PDIP TQFP QFN UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 2 3 4 5 6 图注: 注 19 19 17 RA0/C12IN0-/AN0 RA0 I/O TTL 数字 I/O。 C12IN0- I 模拟 比较器 C1 和 C2 的反相输入。 AN0 I 模拟 模拟输入 0。 20 20 18 RA1/C12IN1-/AN1 RA1 I/O TTL 数字 I/O。 C12IN1- I 模拟 比较器 C1 和 C2 的反相输入。 AN1 I 模拟 模拟输入 1。 21 21 19 RA2/C2IN+/AN2/DACOUT/VREF- RA2 I/O TTL 数字 I/O。 C2IN+ I 模拟 比较器 C2 的同相输入。 AN2 I 模拟 模拟输入 2。 DACOUT O 模拟 DAC 参考输出。 VREF- I 模拟 A/D 参考电压 (低电压)输入。 22 22 20 RA3/C1IN+/AN3/VREF+ RA3 I/O TTL 数字 I/O。 C1IN+ I 模拟 比较器 C1 的同相输入。 AN3 I 模拟 模拟输入 3。 VREF+ I 模拟 A/D 参考电压 (高电压)输入。 23 23 21 RA4/C1OUT/SRQ/T0CKI RA4 I/O ST 数字 I/O。 C1OUT O CMOS 比较器 C1 的输出。 SRQ O TTL SR 锁存器 Q 输出。 T0CKI I ST Timer0 外部时钟输入。 TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 1: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 置 1 时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为默认引脚分配。 2: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 清零时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为备用引脚分配。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 21 页 PIC18(L)F2X/4XK22 表 1-3: PIC18(L)F4XK22 I/O 引脚说明 (续) 引脚编号 PDIP TQFP QFN UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 7 14 13 33 34 35 36 图注: 注 24 24 22 RA5/C2OUT/SRNQ/SS1/HLVDIN/AN4 RA5 I/O TTL 数字 I/O。 C2OUT O CMOS 比较器 C2 的输出。 SRNQ O TTL SR 锁存器 Q 输出。 SS1 I TTL SPI 从选择输入 (MSSP1)。 HLVDIN I 模拟 高 / 低压检测输入。 AN4 I 模拟 模拟输入 4。 31 33 29 RA6/CLKO/OSC2 RA6 I/O TTL 数字 I/O。 CLKO O — 在 RC 模式下,OSC2 引脚输出 CLKOUT 信号,其 频率是 OSC1 引脚上信号频率的 1/4,该频率等于 指令周期的倒数。 OSC2 O — 晶振输出。在晶振模式下,该引脚与晶振或谐振器 相连。 30 32 28 RA7/CLKI/OSC1 RA7 I/O TTL 数字 I/O。 CLKI I CMOS 外部时钟源输入。总是与 OSC1 引脚功能相关联。 OSC1 I ST 配置为 RC 模式时为晶振输入或外部时钟源输入; 否则为 CMOS 输入。 8 9 8 RB0/INT0/FLT0/SRI/AN12 RB0 I/O TTL 数字 I/O。 INT0 I ST 外部中断 0。 FLT0 I ST ECCP 自动关闭的 PWM 故障输入。 SRI I ST SR 锁存器输入。 AN12 I 模拟 模拟输入 12。 9 10 9 RB1/INT1/C12IN3-/AN10 RB1 I/O TTL 数字 I/O。 INT1 I ST 外部中断 1。 C12IN3- I 模拟 比较器 C1 和 C2 的反相输入。 AN10 I 模拟 模拟输入 10。 10 11 10 RB2/INT2/CTED1/AN8 RB2 I/O TTL 数字 I/O。 INT2 I ST 外部中断 2。 CTED1 I ST CTMU 边沿 1 输入。 AN8 I 模拟 模拟输入 8。 11 12 11 RB3/CTED2/P2A/CCP2/C12IN2-/AN9 RB3 I/O TTL 数字 I/O。 CTED2 P2A(2) CCP2(2) I ST CTMU 边沿 2 输入。 O CMOS 增强型 CCP2 PWM 输出。 I/O ST 捕捉 2 输入 / 比较 2 输出 /PWM2 输出。 C12IN2- I 模拟 比较器 C1 和 C2 的反相输入。 AN9 I 模拟 模拟输入 9。 TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 1: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 置 1 时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为默认引脚分配。 2: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 清零时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为备用引脚分配。 DS41412F_CN 第 22 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 1-3: PIC18(L)F4XK22 I/O 引脚说明 (续) 引脚编号 PDIP TQFP QFN UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 37 38 39 40 15 16 17 图注: 注 14 14 12 RB4/IOC0/T5G/AN11 RB4 I/O TTL 数字 I/O。 IOC0 I TTL 电平变化中断引脚。 T5G I ST Timer5 外部时钟门控输入。 AN11 I 模拟 模拟输入 11。 15 15 13 RB5/IOC1/P3A/CCP3/T3CKI/T1G/AN13 RB5 I/O TTL 数字 I/O。 IOC1 P3A(1) CCP3(1) T3CKI(2) I TTL 电平变化中断引脚。 O CMOS 增强型 CCP3 PWM 输出。 I/O ST 捕捉 3 输入 / 比较 3 输出 /PWM3 输出。 I ST Timer3 时钟输入。 T1G I ST Timer1 外部时钟门控输入。 AN13 I 模拟 模拟输入 13。 16 16 14 RB6/IOC2/PGC RB6 I/O TTL 数字 I/O。 IOC2 I TTL 电平变化中断引脚。 PGC I/O ST 在线调试器和 ICSP™ 编程时钟引脚。 17 17 15 RB7/IOC3/PGD RB7 I/O TTL 数字 I/O。 IOC3 I TTL 电平变化中断引脚。 PGD I/O ST 在线调试器和 ICSP™ 编程数据引脚。 32 34 30 RC0/P2B/T3CKI/T3G/T1CKI/SOSCO RC0 P2B(2) T3CKI(1) I/O ST 数字 I/O。 O CMOS 增强型 CCP1 PWM 输出。 I ST Timer3 时钟输入。 T3G I ST Timer3 外部时钟门控输入。 T1CKI I ST Timer1 时钟输入。 SOSCO O — 辅助振荡器输出。 35 35 31 RC1/P2A/CCP2/SOSCI RC1 P2A(1) CCP2(1) I/O ST 数字 I/O。 O CMOS 增强型 CCP2 PWM 输出。 I/O ST 捕捉 2 输入 / 比较 2 输出 /PWM2 输出。 SOSCI I 模拟 辅助振荡器输入。 36 36 32 RC2/CTPLS/P1A/CCP1/T5CKI/AN14 RC2 I/O ST 数字 I/O。 CTPLS O — CTMU 脉冲发生器输出。 P1A O CMOS 增强型 CCP1 PWM 输出。 CCP1 I/O ST 捕捉 1 输入 / 比较 1 输出 /PWM1 输出。 T5CKI I ST Timer5 时钟输入。 AN14 I 模拟 模拟输入 14。 TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 1: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 置 1 时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为默认引脚分配。 2: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 清零时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为备用引脚分配。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 23 页 PIC18(L)F2X/4XK22 表 1-3: PIC18(L)F4XK22 I/O 引脚说明 (续) 引脚编号 PDIP TQFP QFN UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 18 23 24 25 26 19 20 图注: 注 37 37 33 RC3/SCK1/SCL1/AN15 RC3 I/O ST 数字 I/O。 SCK1 I/O ST SPI 模式的同步串行时钟输入 / 输出 (MSSP)。 SCL1 I/O ST I2C™ 模式的同步串行时钟输入 / 输出 (MSSP)。 AN15 I 模拟 模拟输入 15。 42 42 38 RC4/SDI1/SDA1/AN16 RC4 I/O ST 数字 I/O。 SDI1 SDA1 I ST SPI 数据输入 (MSSP)。 I/O ST I2C™ 数据 I/O (MSSP)。 AN16 I 模拟 模拟输入 16。 43 43 39 RC5/SDO1/AN17 RC5 I/O ST 数字 I/O。 SDO1 O — SPI 数据输出 (MSSP)。 AN17 I 模拟 模拟输入 17。 44 44 40 RC6/TX1/CK1/AN18 RC6 I/O ST 数字 I/O。 TX1 O — EUSART 异步发送。 CK1 I/O ST EUSART 同步时钟 (见 RXx/DTx 引脚信息)。 AN18 I 模拟 模拟输入 18。 1 1 1 RC7/RX1/DT1/AN19 RC7 I/O ST 数字 I/O。 RX1 I ST EUSART 异步接收。 DT1 I/O ST EUSART 同步数据 (见 TXx/CKx 引脚信息)。 AN19 I 模拟 模拟输入 19。 38 38 34 RD0/SCK2/SCL2/AN20 RD0 I/O ST 数字 I/O。 SCK2 I/O ST SPI 模式的同步串行时钟输入 / 输出 (MSSP)。 SCL2 I/O ST I2C™ 模式的同步串行时钟输入 / 输出 (MSSP)。 AN20 I 模拟 模拟输入 20。 39 39 35 RD1/CCP4/SDI2/SDA2/AN21 RD1 I/O ST 数字 I/O。 CCP4 I/O ST 捕捉 4 输入 / 比较 4 输出 /PWM4 输出。 SDI2 SDA2 I ST SPI 数据输入 (MSSP)。 I/O ST I2C™ 数据 I/O (MSSP)。 AN21 I 模拟 模拟输入 21。 TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 1: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 置 1 时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为默认引脚分配。 2: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 清零时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为备用引脚分配。 DS41412F_CN 第 24 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 1-3: PIC18(L)F4XK22 I/O 引脚说明 (续) 引脚编号 PDIP TQFP QFN UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 21 22 27 28 29 30 8 9 图注: 注 40 40 36 RD2/P2B/AN22 RD2 P2B(1) I/O ST 数字 I/O。 O CMOS 增强型 CCP2 PWM 输出。 AN22 I 模拟 模拟输入 22。 41 41 37 RD3/P2C/SS2/AN23 RD3 I/O ST 数字 I/O。 P2C O CMOS 增强型 CCP2 PWM 输出。 SS2 I TTL SPI 从选择输入 (MSSP)。 AN23 I 模拟 模拟输入 23。 2 2 2 RD4/P2D/SDO2/AN24 RD4 I/O ST 数字 I/O。 P2D O CMOS 增强型 CCP2 PWM 输出。 SDO2 O — SPI 数据输出 (MSSP)。 AN24 I 模拟 模拟输入 24。 3 3 3 RD5/P1B/AN25 RD5 I/O ST 数字 I/O。 P1B O CMOS 增强型 CCP1 PWM 输出。 AN25 I 模拟 模拟输入 25。 4 4 4 RD6/P1C/TX2/CK2/AN26 RD6 I/O ST 数字 I/O。 P1C O CMOS 增强型 CCP1 PWM 输出。 TX2 O — EUSART 异步发送。 CK2 I/O ST EUSART 同步时钟 (见 RXx/DTx 引脚信息)。 AN26 I 模拟 模拟输入 26。 5 5 5 RD7/P1D/RX2/DT2/AN27 RD7 I/O ST 数字 I/O。 P1D O CMOS 增强型 CCP1 PWM 输出。 RX2 I ST EUSART 异步接收。 DT2 I/O ST EUSART 同步数据 (见 TXx/CKx 引脚信息)。 AN27 I 模拟 模拟输入 27。 25 25 23 RE0/P3A/CCP3/AN5 RE0 P3A(2) CCP3(2) I/O ST 数字 I/O。 O CMOS 增强型 CCP3 PWM 输出。 I/O ST 捕捉 3 输入 / 比较 3 输出 /PWM3 输出。 AN5 I 模拟 模拟输入 5。 26 26 24 RE1/P3B/AN6 RE1 I/O ST 数字 I/O。 P3B O CMOS 增强型 CCP3 PWM 输出。 AN6 I 模拟 模拟输入 6。 TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 1: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 置 1 时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为默认引脚分配。 2: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 清零时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为备用引脚分配。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 25 页 PIC18(L)F2X/4XK22 表 1-3: PIC18(L)F4XK22 I/O 引脚说明 (续) 引脚编号 PDIP TQFP QFN UQFN 引脚名称 引脚 缓冲器 类型 类型 说明 10 27 27 25 RE2/CCP5/AN7 RE2 CCP5 AN7 1 18 18 16 RE3/VPP/MCLR I/O ST 数字 I/O。 I/O ST 捕捉 5 输入 / 比较 5 输出 /PWM5 输出。 I 模拟 模拟输入 7。 11,32 7, 28 7, 8, 7, 26 28, 29 RE3 VPP MCLR VDD I ST 数字输入。 P 编程电压输入。 I ST 低电平有效的主复位 (器件复位)输入。 P — 逻辑和 I/O 引脚的正电源。 12,31 6, 29 6,30, 6, 27 VSS 31 P — 逻辑和 I/O 引脚的参考地。 12,13, 13 NC 33,34 图注: TTL = TTL 兼容输入; CMOS = CMOS 兼容输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I = 输入; O = 输出; P = 电源。 注 1: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 置 1 时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为默认引脚分配。 2: 当配置位 PB2MX、T3CMX、CCP3MX 和 CCP2MX 清零时,P2B、T3CKI、CCP3/P3A 和 CCP2/P2A 为备用引脚分配。 DS41412F_CN 第 26 页  2011-2013 Microchip Technology Inc. 2.0 振荡器模块 (带故障保护时钟监 视器) 2.1 概述 振荡器模块具有多种时钟源和选择特性,广泛使用于各 种应用中,同时最大限度地发挥性能并降低功耗。图 2-1 给出了振荡器模块的框图。 时钟源可配置为来自外部振荡器、石英晶体谐振器、陶 瓷谐振器以及阻容(Resistor-Capacitor,RC)电路。此 外,系统时钟源可配置为 3 个内部振荡器之一,并通过 软件来选择速度。其他时钟特性包括: • 可通过软件选择外部或内部系统时钟源。 • 双速启动模式,最大限度地缩短外部振荡器起振与 代码执行之间的延时。 • 故障保护时钟监视器 (Fail-Safe Clock Monitor, FSCM),用来检测外部时钟源 (LP、 XT、 HS、 EC 或 RC 模式)故障并自动切换到内部振荡器。 • 振荡器起振定时器(Oscillator Start-up Timer,OST), 可确保晶振源的稳定性。 主时钟模块可配置为 6 种时钟源,从中选择一种作为主 时钟。 1. RC 2. LP 3. XT 4. INTOSC 5. HS 6. EC 外部电阻 / 电容 低功耗晶振 晶振 / 谐振器 内部振荡器 高速晶振 / 谐振器 外部时钟 使用 FOSC<3:0> 中的一些设置,可以对 HS 和 EC 振 荡 器 电 路 的 功 耗 和 振 荡 器 速 度 进 行 优 化。使 用 FOSC<3:0> 另外的一些选择项,可以将 RA6 用作 RC、 EC 和 INTOSC 振荡器模式的 I/O 或 CLKO(FOSC/4)。 通过 CONFIG1H 配置寄存器的 FOSC<3:0> 位来选择主 时钟模式。通过以下配置和寄存器位可以进一步定义主 时钟工作模式: 1. PRICLKEN (CONFIG1H<5>) 2. PRISD (OSCCON2<2>) 3. PLLCFG (CONFIG1H<4>) 4. PLLEN (OSCTUNE<6>) 5. HFOFST (CONFIG3H<3>) 6. IRCF<2:0> (OSCCON<6:4>) 7. MFIOSEL (OSCCON2<4>) 8. INTSRC (OSCTUNE<7>) PIC18(L)F2X/4XK22 HFINTOSC、MFINTOSC 和 LFINTOSC 分别为出厂校 准的高频、中频和低频振荡器,可用作内部时钟源。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 27 页 PIC18(L)F2X/4XK22 图 2-1: 辅助振荡器 (1) 简化的振荡器系统框图 SOSCO SOSCI 辅助振荡器 (SOSC) SOSCOUT 主时钟模块 PRICLKEN PRISD OSC2 OSC1 EN 主振荡器 (2) ( OSC) FOSC<3:0>(5) 主振荡器 0 INTOSC 1 PLL 选择 (3) (4) 4xPLL 0 1 内部振荡器 IRCF<2:0> MFIOSEL 3 INTSRC HFINTOSC (16 MHz) MFINTOSC (500 kHz) INTOSC 分频 电路 HF-16 MHZ HF-8 MHZ HF-4 MHZ HF-2 MHZ HF-1 MHZ HF-500 kHZ HF-250 kHZ HF-31.25 kHZ MF-500 kHZ MF-250 kHZ MF-31.25 kHZ LFINTOSC (31.25 kHz) LF-31.25 kHz 3 INTOSC 时钟切换多路开关 内部振荡器多路开关 (3) 低功耗模式 事件切换 (SCS<1:0>) 2 辅助 振荡器 01 主时钟 00 INTOSC 1x 注 1: 详情请参见图 2-4。 2: 详情请参见图 2-2。 3: 详情请参见图 2-3。 4: 详情请参见表 2-1。 5: 当 FOSC<3:0> = 100x 时,主振荡器多路开关 (MUX)将使用 INTOSC 分支。 DS41412F_CN 第 28 页  2011-2013 Microchip Technology Inc. 2.2 振荡器控制 OSCCON、OSCCON2 和 OSCTUNE 寄存器(寄存器 2-1 至寄存器 2-3)控制全功耗模式和功耗管理模式下器 件时钟工作的多个方面。 • 主系统时钟选择 (SCS) • 主振荡器电路关闭 (PRISD) • 辅助振荡器使能 (SOSCGO) • 主时钟频率 4x 倍频器 (PLLEN) • 内部频率选择位 (IRCF 和 INTSRC) • 时 钟 状 态 位 (OSTS、 HFIOFS、 MFIOFS、 LFIOFS、 SOSCRUN 和 PLLRDY) • 功耗管理选择 (IDLEN) 2.2.1 主系统时钟选择 系统时钟选择位 SCS<1:0> 用于选择主时钟源。可用的 时钟源有: • 由 CONFIG1H 的 FOSC<3:0> 位定义的主时钟。主 时钟可以是主振荡器、外部时钟或内部振荡器模块。 • 辅助时钟 (辅助振荡器)。 • 内部振荡器模块 (HFINTOSC、 MFINTOSC 和 LFINTOSC)。 当写入一个或多个位之后,在一段很短的时钟转换间隔 后,时钟源会立即改变。在所有形式的复位后 SCS 位 都会被清零以选择主时钟。 2.2.2 内部频率选择 内部振荡器频率选择位 (IRCF<2:0>)用于选择内部振 荡器模块的频率输出。频率输出选择有 LFINTOSC 时钟 源 (31.25 kHz)、 MFINTOSC 时钟源 (31.25 kHz、 250 kHz或500 kHz)和HFINTOSC时钟源(16 MHz), 或者来自 HFINTOSC 后分频器的频率之一(31.25 kHz 至 8 MHz)。如果主时钟由内部振荡器模块提供,改变 这些位的状态会使内部振荡器输出立即改变。器件复位 时,内部振荡器的输出频率被设置为默认频率 1 MHz。 PIC18(L)F2X/4XK22 2.2.3 低频选择 当 选 取 31.25 kHz 的 标称 输 出 频 率 (IRCF<2:0> = 000)时,用户可以选择用作时钟源的内部振荡器。这 通过使用OSCTUNE寄存器的INTSRC位和OSCCON2 寄存器的 MFIOSEL 位实现。关于具体的 31.25 kHz 选 择,请参见图 2-2 和寄存器 2-1。该选项让用户可以选 择可使用 OSCTUNE 寄存器中的 TUN<5:0> 位进行调 节的 31.25 kHz 时钟 (MFINTOSC 或 HFINTOSC), 同 时 又 实 现 以 极 低 时 钟 速 度 工 作 而 节 省 功 耗。无 论 INTSRC 和 MFIOSEL 位的设置如何,LFINTOSC 总是 作为看门狗定时器和故障保护时钟监视器之类部件的 时钟源。 此选项使用户能选择可调节且更精确的 HFINTOSC 作 为时钟源,同时以非常低的时钟速度运行以节省功耗。 2.2.4 功耗管理 OSCCON 寄存器的 IDLEN 位决定当执行 SLEEP 指令 时器件是进入休眠模式还是某种空闲模式。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 29 页 PIC18(L)F2X/4XK22 图 2-2: IRCF<2:0> MFIOSEL INTSRC HF-16 MHZ HF-8 MHZ HF-4 MHZ HF-2 MHZ HF-1 MHZ 内部振荡器多路开关框图 3 111 110 101 100 011 MF-500 kHZ HF-500 kHZ MF-250 kHZ HF-250 kHZ 1 500 kHZ 010 INTOSC 0 1 250 kHZ 001 0 HF-31.25 kHZ 11 MF-31.25 kHZ LF-31.25 kHZ 10 0X 31.25 kHZ 000 表 2-1: PLL 选择真值表 主时钟多路开关时钟源 FOSC (任意时钟源) OSC1/OSC2 (外部时钟源) INTOSC (内部时钟源) FOSC<3:0> 0000-1111 0000-0111 1010-1111 1000-1001 图 2-3: FOSC<3:0> = 100x PLLCFG PLLEN PLL 选择框图 PLL 选择 PLLCFG 0 1 0 x x PLLEN 0 x 1 0 1 PLL 选择 0 1 1 0 1 DS41412F_CN 第 30 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 2-4: SOSCI SOSCO T1CKI T3G T3CKI T3CKI T1G T5CKI T5G 辅助振荡器和外部时钟输入 SOSCEN SOSCGO T1SOSCEN T3SOSCEN T5SOSCEN EN 辅助振荡器 SOSCOUT SOSCEN SOSCEN T3G SOSCEN T1G 0 1 T3CMX T5G 至时钟切换模块 1 T1CLK_EXT_SRC 0 T1SOSCEN 1 T3CLK_EXT_SRC 0 T3SOSCEN 1 T5CLK_EXT_SRC 0 T5SOSCEN  2011-2013 Microchip Technology Inc. DS41412F_CN 第 31 页 PIC18(L)F2X/4XK22 2.3 寄存器定义:振荡器控制 寄存器 2-1: OSCCON:振荡器控制寄存器 R/W-0 IDLEN bit 7 R/W-0 R/W-1 IRCF<2:0> R/W-1 R-q OSTS(1) R-0 HFIOFS R/W-0 R/W-0 SCS<1:0> bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 q = 值取决于具体条件 x = 未知 bit 7 bit 6-4 IDLEN:空闲使能位 1 = 执行 SLEEP 指令后器件进入空闲模式 0 = 执行 SLEEP 指令后器件进入休眠模式 IRCF<2:0>:内部 RC 振荡器频率选择位 (2) 111 = HFINTOSC – (16 MHz) 110 = HFINTOSC/2 – (8 MHz) 101 = HFINTOSC/4 – (4 MHz) 100 = HFINTOSC/8 – (2 MHz) 011 = HFINTOSC/16 – (1 MHz)(3) 如果 INTSRC = 0 且 MFIOSEL = 0: 010 = HFINTOSC/32 – (500 kHz) 001 = HFINTOSC/64 – (250 kHz) 000 = LFINTOSC – (31.25 kHz) 如果 INTSRC = 1 且 MFIOSEL = 0: 010 = HFINTOSC/32 – (500 kHz) 001 = HFINTOSC/64 – (250 kHz) 000 = HFINTOSC/512 – (31.25 kHz) 如果 INTSRC = 0 且 MFIOSEL = 1: 010 = MFINTOSC – (500 kHz) 001 = MFINTOSC/2 – (250 kHz) 000 = LFINTOSC – (31.25 kHz) bit 3 bit 2 bit 1-0 如果 INTSRC = 1 且 MFIOSEL = 1: 010 = MFINTOSC – (500 kHz) 001 = MFINTOSC/2 – (250 kHz) 000 = MFINTOSC/16 – (31.25 kHz) OSTS:振荡器起振延时状态位 1 = 器件依靠 CONFIG1H 寄存器中 FOSC<3:0> 定义的时钟运行 0 = 器件依靠内部振荡器 (HFINTOSC、 MFINTOSC 或 LFINTOSC)运行 HFIOFS:HFINTOSC 频率稳定位 1 = HFINTOSC 频率稳定 0 = HFINTOSC 频率不稳定 SCS<1:0>:系统时钟选择位 1x = 内部振荡器模块 01 = 辅助 (SOSC)振荡器 00 = 主时钟 (由 CONFIG1H 中的 FOSC<3:0> 决定) 注 1: 复位状态取决于 IESO 配置位的状态。 2: INTOSC 时钟源由 OSCTUNE 中的 INTSRC 位和 OSCCON2 中的 MFIOSEL 位决定。 3: 复位时 HFINTOSC 的默认输出频率。 DS41412F_CN 第 32 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 2-2: R-0/0 PLLRDY bit 7 OSCCON2:振荡器控制寄存器 2 R-0/q U-0 R/W-0/0 R/W-0/u SOSCRUN — MFIOSEL SOSCGO(1) R/W-1/1 PRISD R-x/u MFIOFS R-0/0 LFIOFS bit 0 图注: R = 可读位 1 = 置1 W = 可写位 0 = 清零 U = 未实现位,读为 0 x = 未知 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 q = 值取决于具体条件 bit 7 PLLRDY:PLL 运行状态位 1 = 系统时钟来自 4xPLL 0 = 系统时钟来自除 4xPLL 外的振荡器 bit 6 SOSCRUN:SOSC 运行状态位 1 = 系统时钟来自辅助 SOSC 0 = 系统时钟来自除 SOSC 外的振荡器 bit 5 未实现:读为 0。 bit 4 MFIOSEL:MFINTOSC 选择位 1 = 使用 MFINTOSC 来代替 HFINTOSC 频率 500 kHz、 250 kHz 和 31.25 kHz 0 = 不使用 MFINTOSC bit 3 SOSCGO(1):辅助振荡器启动控制位 1 = 使能辅助振荡器 0 = 如果没有任何其他时钟源请求使用辅助振荡器,则关闭它 bit 2 PRISD:主振荡器驱动电路关闭位 1 = 振荡器驱动电路开启 0 = 振荡器驱动电路关闭 (零功耗) bit 1 MFIOFS:MFINTOSC 频率稳定位 1 = MFINTOSC 稳定 0 = MFINTOSC 不稳定 bit 0 LFIOFS:LFINTOSC 频率稳定位 1 = LFINTOSC 稳定 0 = LFINTOSC 不稳定 注 1: SOSCGO 位只能在 POR 复位时被复位。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 33 页 PIC18(L)F2X/4XK22 2.4 时钟源模式 时钟源模式可分为外部和内部模式。 • 外部时钟模式依靠外部电路提供时钟源。例如:时 钟模块 (EC 模式)、石英晶体谐振器或陶瓷谐振 器(LP、XT和HS模式)以及阻容(RC模式)电路。 • 内部时钟源内置于振荡器模块中。振荡器模块有 3 个 内部振荡器:16 MHz 高频内部振荡器(HFINTOSC)、 500 kHz 中频内部振荡器(MFINTOSC)和 31.25 kHz 低频内部振荡器 (LFINTOSC)。 通过 OSCCON 寄存器的系统时钟选择 (SCS<1:0>) 位在外部或内部时钟源之间选择系统时钟。更多信息, 请参见第 2.11 节 “ 时钟切换 ”。 2.5 外部时钟模式 2.5.1 振荡器起振定时器 (OST) 如果振荡器模块配置为 LP、 XT 或 HS 模式,则振荡器 起振定时器(OST)对来自 OSC1 的振荡计数 1024 次。 这发生在上电复位 (Power-on Reset, POR)和上电 延时定时器(Power-up Timer,PWRT)延时结束(如 果配置了),或从休眠中唤醒时。在此期间,程序计数 器不递增,程序执行暂停。OST 确保使用石英晶体谐振 器或陶瓷谐振器的振荡器电路已经起振并为振荡器模块 提供稳定的系统时钟。当在时钟源之间切换时,需要一 定的延时以使新时钟稳定。表 2-2 给出了振荡器延时的 示例。 为了使从外部振荡器起振到代码开始执行之间的延时最 小,可选择双速时钟启动模式 (见第 2.12 节 “ 双速时 钟启动模式 ”)。 表 2-2: 振荡器延时示例 切换自 切换到 休眠 /POR LFINTOSC MFINTOSC HFINTOSC 休眠 /POR LFINTOSC (31.25 kHz) 休眠 /POR 休眠 /POR LFINTOSC (31.25 kHz) EC 或 RC EC 或 RC LP、 XT 或 HS 4xPLL LFINTOSC HFINTOSC 频率 31.25 kHz 31.25 kHz 至 500 kHz 31.25 kHz 至 16 MHz DC – 64 MHz DC – 64 MHz 32 kHz 至 40 MHz 32 MHz 至 64 MHz 31.25 kHz 至 16 MHz 振荡器延时 振荡器预热延时 (TWARM) 2 个指令周期 每次 1 个周期 1024 个时钟周期 (OST) 1024 个时钟周期 (OST) + 2 ms 1 μs (近似值) 2.5.2 EC 模式 外部时钟 (EC)模式允许外部产生的逻辑电平作为系 统 时 钟 源。工 作 在 此 模 式 下 时,外 部 时 钟 源 连 接 到 OSC1 输入, OSC2 可用作通用 I/O。图 2-5 给出了 EC 模式的引脚连接。 外部时钟(EC)提供多种功耗模式:低功耗(ECLP)、 中 等 功 耗 (ECMP)和 高 功 耗 (ECHP) ,可 通 过 FOSC<3:0>位选择。每种模式均可在各自特定的频率范 围内完美工作。范围如下: • ECLP —— 低于 500 kHz • ECMP —— 介于 500 kHz 和 16 MHz 之间 • ECHP —— 高于 16 MHz 当选取 EC 模式时,振荡器起振定时器 (OST)被禁 止。因此,上电复位 (POR)后或者从休眠中唤醒后的 操作不存在延时。因为 PIC® MCU 的设计是完全静态 的,停止外部时钟输入将使器件暂停工作并保持所有数 据完整。当再次启动外部时钟时,器件恢复工作,就好 像没有停止过一样。 图 2-5: 外部时钟( EC)模式的工作原理 来自外部 系统的时钟 I/O OSC1/CLKIN PIC® MCU OSC2/CLKOUT(1) 注 1: 第 1.0 节 “ 器件概述 ” 中列出了备用引脚功 DS41412F_CN 第 34 页  2011-2013 Microchip Technology Inc. 2.5.3 LP、 XT 和 HS 模式 LP、XT 和 HS 模式支持使用连接到 OSC1 和 OSC2 的 石英晶体谐振器或陶瓷谐振器 (图 2-6)。模式通过对 内部反相放大器的低、中或高增益设定进行选择,以支 持各种谐振器类型及速度。 LP振荡器模式选择内部反相放大器的最低增益设定。LP 模式的电流消耗在三种模式中最小。该模式最适合驱动 低驱动级别规格要求的谐振器,例如,音叉 (Tuning Fork)型晶振。 XT 振荡器模式选择内部反相放大器的中等增益设定。 XT 模式的电流消耗在三种模式中居中。该模式最适合 驱动中等驱动级别规格要求的谐振器。 HS 振荡器模式提供了可通过 FOSC<3:0> 位选择的中等 功耗 (MP)和高功耗 (HP)选项。 MP 选项最适合介 于 4 MHz 至 16 MHz 之间的振荡器频率。 HP 选项具有 最高的内部反相放大器增益设置,最适合高于 16 MHz 的频率。HS 模式最适合驱动需要高驱动设定的谐振器。 图 2-6: 石英晶振的工作原理 (LP、 XT 或 HS 模式) PIC® MCU OSC1/CLKIN C1 至内部逻辑 石英 晶振 RF(2) Sleep C2 RS (1) OSC2/CLKOUT 注 1: 对于低驱动级别的石英晶振,可能需要串联一 个电阻 (RS)。 2: RF 的值根据所选的振荡器模式而有所不同(典 型值在 2 MΩ 至 10 MΩ 之间)。 PIC18(L)F2X/4XK22 注 1: 石英晶振的特性因类型、封装和制造商而 异。要了解规格说明和推荐应用,应查阅制 造商提供的数据手册。 2: 应始终验证振荡器在应用要求的 VDD 和温 度范围下的性能。 3: 如 需 振 荡 器 设 计 帮 助,请 参 见 以 下 Microchip 应用笔记: • AN826,“Crystal Oscillator Basics and Crystal Selection for rfPIC® and PIC® Devices” (DS00826) • AN849, “Basic PIC® Oscillator Design” (DS00849) • AN943, “Practical PIC® Oscillator Analysis and Design” (DS00943) • AN949,“Making Your Oscillator Work” (DS00949) 图 2-7: 陶瓷谐振器的工作原理 (XT 或 HS 模式) PIC® MCU OSC1/CLKIN C1 至内部逻辑 RP(3) RF(2) Sleep C2 陶瓷 谐振器 RS (1) OSC2/CLKOUT 注 1: 对于低驱动级别的陶瓷谐振器,可能需要串联 一个电阻 (RS)。 2: RF 的值根据所选的振荡器模式而有所不同 (典 型值在 2 MΩ 至 10 MΩ 之间)。 3: 为使陶瓷谐振器正常工作,可能需要并联一个 反馈电阻 (RP)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 35 页 PIC18(L)F2X/4XK22 2.5.4 外部 RC 模式 外部阻容 (RC)模式支持使用外部 RC 电路。对时钟 精度要求不高时,这使设计人员有了很大的频率选择空 间,且保持成本最低。有以下两种模式:RC 和 RCIO。 2.5.4.1 RC 模式 在 RC 模式下,RC 电路连接到 OSC1。OSC2/CLKOUT 输出 RC 振荡器频率的 4 分频。该信号可用来为外部电 路、同步、校准、测试或其他应用需求提供时钟。图 2-8 给出了外部 RC 模式的连接图。 图 2-8: 外部 RC 模式 VDD REXT CEXT VSS FOSC/4 或 I/O(2) PIC® MCU OSC1/CLKIN 内部 时钟 OSC2/CLKOUT(1) 推荐值: 10 kΩ ≤ REXT ≤ 100 kΩ CEXT > 20 pF 注 1: 第 1.0 节 “ 器件概述 ” 中列出了备用引脚功 能。 2.5.4.2 RCIO 模式 在 RCIO 模式下, RC 电路连接到 OSC1。 OSC2 成为 通用 I/O 引脚。 RC 振荡器频率与供电电压、电阻 (REXT)和电容 (CEXT)值以及工作温度有关。影响振荡器频率的其他 因素有: • 输入电压门限值变化 • 元件容差 • 不同封装的电容 用户还应考虑因所使用的外部 RC 元件的容差而导致的 差异。 2.6 内部时钟模式 振荡器模块有 3 个独立的内部振荡器,可配置或选取为 系统时钟源。 1. HFINTOSC (高频内部振荡器)出厂时已校准, 工作频率为 16 MHz。通过 OSCTUNE 寄存器 (寄存器 2-3),可由软件调节 HFINTOSC 的频 率。 2. MFINTOSC (中频内部振荡器)出厂时已校准, 工作频率为 500 kHz。通过 OSCTUNE 寄存器(寄 存器 2-3),用户可由软件调节 MFINTOSC 的频 率。 3. LFINTOSC (低频内部振荡器)出厂时已校准, 工作频率为31.25 kHz。用户无法调节LFINTOSC, 但它设计为可在不同温度和电压下保持稳定。 通过 OSCCON 寄存器的内部振荡器频率选 择位 IRCF<2:0>,可由软件选择系统时钟速度。 通过配置 OSCCON 寄存器中的系统时钟选择 (SCS<1:0>)位,在外部或内部时钟源之间选择系统时 钟。更多信息,请参见第 2.11 节 “ 时钟切换 ”。 2.6.1 INTOSC 与 I/O 或时钟输出 在可使用 CONFIG1H 配置寄存器 FOSC<3:0> 位选择的 时钟模式中,有两种模式会将内部振荡器模块配置为主 振荡器。模式选择将决定 OSC2/CLKOUT/RA7 是配置 为通用 I/O (RA7)还是 FOSC/4 (CLKOUT)。在两种 模式下,OSC1/CLKIN/RA7 都配置为通用 I/O。更多信 息,请参见第 24.0 节 “CPU 的特殊功能 ”。 CLKOUT 信号可用于提供外部电路、同步、校准、测试 或其他应用需求的时钟。 DS41412F_CN 第 36 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 2.6.1.1 OSCTUNE 寄存器 HFINTOSC/MFINTOSC 振荡器电路在出厂时已校准,但 可通过在软件中写入 OSCTUNE 寄存器 (寄存器 2-3) 的 TUN<5:0> 位来进行调节。 TUN<5:0> 的默认值为 000000。该值是一个 6 位的二 进制补码。 当 OSCTUNE 寄存器被修改时,HFINTOSC/MFINTOSC 频率将开始转变为新频率。转变期间,代码将继续执 行。是否已发生频率转变并无明确的指示。 OSCTUNE 中的 TUN<5:0> 位不影响 LFINTOSC 频率。 依赖于 LFINTOSC 时钟源频率的功能,如上电延时定时 器 (PWRT)、看门狗定时器 (WDT)、故障保护时钟 监视器 (FSCM)以及外设等,其工作不受频率改变的 影响。 OSCTUNE 寄存器也有 INTSRC 和 PLLEN 位,它们控 制内部振荡器模块的某些功能。 当选取 31.25 kHz 频率时,用户可通过 INTSRC 位选择 用作时钟源的内部振荡器。在第 2.2.3 节 “ 低频选择 ” 中对此进行了更详细的说明。 在使用所有外部主时钟源的模式下和内部振荡器模式 下, PLLEN 位控制倍频器 PLL 的工作模式。并且 PLL 只能在时钟源频率介于 4 MHz 和 16 MHz 之间的情况下 工作。关于 PLLEN 位的功能的更多详细信息,请参见 第 2.8.2 节 “HFINTOSC 模式下的 PLL”。 2.7 寄存器定义:振荡器调节 寄存器 2-3: OSCTUNE:振荡器调节寄存器 R/W-0 INTSRC bit 7 R/W-0 PLLEN(1) R/W-0 R/W-0 R/W-0 R/W-0 TUN<5:0> R/W-0 R/W-0 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 bit 6 bit 5-0 INTSRC: 内部振荡器低频时钟源选择位 1 = 来自 MFINTOSC 或 HFINTOSC 时钟源的 31.25 kHz 器件时钟 0 = 直接来自 LFINTOSC 内部振荡器的 31.25 kHz 器件时钟 PLLEN:HFINTOSC 的倍频器 4xPLL 使能位 (1) 1 = 使能 PLL 0 = 禁止 PLL TUN<5:0>:频率调节位 —— 用于调节 MFINTOSC 和 HFINTOSC 频率 011111 = 最高频率 011110 = ••• 000001 = 000000 = 振荡器模块 (HFINTOSC 和 MFINTOSC)在出厂时已校准的频率下运行 111111 = ••• 100000 = 最低频率 注 1: 在所有主时钟源模式 (内部或外部)下, PLLEN 位均有效,并且旨在时钟频率介于 4 MHz 和 16 MHz 之 间时工作。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 37 页 PIC18(L)F2X/4XK22 2.7.1 LFINTOSC 低频内部振荡器(LFINTOSC)是 31.25 kHz 内部时钟 源。LFINTOSC 不可调节,但它设计为可在不同温度和 电压下保持稳定。关于 LFINTOSC 精度规范,请参见 第 27.0 节 “ 电气特性 ”。 LFINTOSC 的输出可用作主时钟或 INTOSC 时钟的时钟 源 (见图 2-1) 。 LFINTOSC 还是上电延时定时器 (PWRT)、看门狗定时器 (WDT)以及故障保护时钟 监视器 (FSCM)的时钟源。 2.7.2 频率选择位 (IRCF) HFINTOSC(16 MHz)和 MFINTOSC(500 MHz)输 出与一个分频电路连接,该分频电路可提供 16 MHz 至 31.25 kHz 的频率。这些分频电路频率与 31.25 kHz LFINTOSC 输 出 通 过 多 路 开 关 相 连,用 以 提 供单个 INTOSC 时钟输出 (见图 2-1)。 OSCCON 寄存器的 IRCF<2:0> 位、 OSCCON2 寄存器的 MFIOSEL 位和 OSCTUNE 寄存器的 INTSRC 位用于选择内部振荡器的 输出频率。可通过软件选择以下 8 种频率之一: • 16 MHz • 8 MHz • 4 MHz • 2 MHz • 1 MHz (复位后的默认值) • 500 kHz (MFINTOSC 或 HFINTOSC) • 250 kHz (MFINTOSC 或 HFINTOSC) • 31 kHz(LFINTOSC、MFINTOSC 或 HFINTOSC) 2.7.3 INTOSC 频率漂移 出 厂 时 将 内 部 振 荡 器 模 块 输 出 (HFINTOSC/ MFINTOSC)校准为 16 MHz/500 kHz。但是,此频率 可能会随着 VDD 或温度的改变而发生漂移。可通过修改 OSCTUNE 寄存 器 中 TUN<5:0> 位 的 值 来调节 HFINTOSC/MFINTOSC 频率。这不会对 LFINTOSC 时 钟源的频率造成影响。 调节 HFINTOSC/MFINTOSC 时钟源需要了解何时调 节、调节的方向以及在某些情况下需要的调整量。以下 几小节讨论了三种可能的补偿技术,但也可能使用其他 技术。 2.7.3.1 用 EUSART 进行补偿 当 EUSART 开始产生帧错误,或者在异步模式下接收 数据有错误时可能需要进行调节。帧错误表示器件时钟 频率太高;要对此进行调节,可以减小 OSCTUNE 中的 值来降低时钟频率。另一方面,数据中有错误可能表明 时钟速度太低;要进行补偿,可以增大 OSCTUNE 中的 值来提高时钟频率。 2.7.3.2 用定时器进行补偿 此技术是将器件时钟的速度与某一个参考时钟进行比 较。可能要用到两个定时器;一个由外设时钟提供时钟 源,而另一个由一个固定的参考源(如 Timer1 振荡器) 提供时钟源。 两个定时器都被清零,但由参考源提供时钟信号的定时 器产生中断。当中断发生时,使用内部时钟源的定时器值 被读取且两个定时器均被清零。如果使用内部时钟源的 定时器的值大于期望值,则表示内部振荡器模块运行过 快。要对此进行调整,需减小 OSCTUNE 寄存器中的值。 2.7.3.3 在捕捉模式下用 CCP 模块进行补偿 CCP 模块可以使用由内部振荡器模块提供时钟信号的自 由运行的 Timer1、 Timer3 或 Timer5 和已知周期的外部 事件(即交流电源频率)。在 CCPRxH:CCPRxL 寄存器 中捕捉并记录第一个事件的时间以备以后使用。当第二 个事件导致捕捉时,要用第二个事件的时间减去第一个 事件的时间。由于外部事件的周期是已知的,因此可以 计算事件之间的时间差。 如果测得的时间比计算得到的时间大很多,则表示内部 振 荡 器 模 块 运 行 过 快 ; 要 对 此 进 行 补 偿,需 减 小 OSCTUNE 寄存器中的值。如果测得的时间比计算得到 的时间小很多,则表示内部振荡器模块运行过慢;要对 此进行补偿,需增大 OSCTUNE 寄存器中的值。 DS41412F_CN 第 38 页  2011-2013 Microchip Technology Inc. 2.8 PLL 倍频器 如果用户希望使用低频振荡器电路或通过晶振将器件频 率 调 节 至 其 最 高 额 定 频 率,可 以 选 择 使 用 锁 相 环 (PLL)电路。对于担心高频晶振引起 EMI 或需要内部 振荡器提供高速时钟的用户而言,这样做可能有用。 2.8.1 外部振荡器模式下的 PLL 对于使用 OSC1/OSC2 引脚的任何外部振荡器模式,都 可以使能 PLL,方法是将 PLLCFG 位(CONFIG1H<4>) 置 1,或将 PLLEN 位 (OSCTUNE<6>)置 1。 PLL 设 计为接受 4 MHz 至 16 MHz 的输入频率。然后 PLL 将 振荡器输出频率 4 倍频,从而产生最高 64 MHz 的内部 时钟频率。不要对 PLL 使用低于 4 MHz 的振荡器频率。 PIC18(L)F2X/4XK22 2.8.2 HFINTOSC 模式下的 PLL 内部振荡器模块可以通过使用 4x 倍频器来产生比一般 内部振荡器所能产生的时钟速度更快的器件时钟速度。 当使能时, PLL 会对 HFINTOSC 进行 4 倍频,产生最 高 64 MHz 的时钟速率。 不同于外部时钟模式,使能内部时钟模式时,PLL 只能 通过软件进行控制。当使用 HFINTOSC 时,OSCTUNE 寄存器的 PLLEN 控制位用于使能或禁止 PLL 操作。 PLL 设计为在输入频率处于 4 MHz 至 16 MHz 的范围内 工作。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 39 页 PIC18(L)F2X/4XK22 2.9 功耗管理模式对各种时钟源的影响 关于本节讨论的模式的更多信息,请参见第 3.0 节 “ 功 耗管理模式 ”。表 3-1 中也提供了快速参考列表。 当选取 PRI_IDLE 模式时,指定的主振荡器会继续运行 而不中断。对于所有其他功耗管理模式,使用 OSC1 引 脚的振荡器会被禁止。OSC1 引脚(以及由振荡器使用 的 OSC2 引脚)将会停止振荡。 在辅助时钟模式(SEC_RUN 和 SEC_IDLE)下,辅助 振荡器 (SOSC)作为器件时钟源工作。如果需要,辅 助振荡器也可以运行在所有功耗管理模式下为 Timer1、 Timer3 或 Timer5 提供时钟。 在内部振荡器模式 (INTOSC_RUN 和 INTOSC_IDLE) 下,由内部振荡器模块提供器件时钟源。无论是哪种功 耗管理模式, 31.25 kHz 的 LFINTOSC 输出均可直接用 来提供时钟并且可使能来支持多种特殊的功能部件 (关 于 WDT、故障保护时钟监视器和双速启动的更多信息, 请参见第 24.3 节 “ 看门狗定时器(WDT)”、第 2.12 节 “ 双速时钟启动模式 ” 和第 2.13 节 “ 故障保护时钟监视 器 ”)。HFINTOSC 和 MFINTOSC 输出可直接用来为器 件提供时钟,或者也可先由后分频器进行分频再用作器 件时钟。直接由 LFINTOSC 输出提供时钟时,会禁止 HFINTOSC 和 MFINTOSC 输出。 选择休眠模式时,所有的时钟源都会停止。因为休眠模 式切断了所有晶体管的开关电流,休眠模式能实现最低 的器件电流消耗 (仅泄漏电流)。 在休眠期间使能任何片上功能都将增加休眠时的电流消 耗。要支持 WDT 工作,需要使能 LFINTOSC。其他功能 部件无需器件时钟源也可以工作(即,SSP 从器件、PSP 和 INTn 引脚等)。在第 27.8 节 “ 直流特性:输入 / 输出 特性,PIC18(L)F2X/4XK22” 中列出了可能显著增加电流 消耗的外设。 2.10 上电延时 由两个定时器控制上电延时,这样大多数应用都无需外 接复位电路。上电延时可以确保在器件电源稳定 (常规 环境下)和主时钟稳定工作之前器件保持在复位状态。 关于上电延时的更多信息,请参见第 4.6 节 “ 器件复位 定时器 ”。 第一个定时器是上电延时定时器 (PWRT),它在上电 时提供固定的延时。通过清零(= 0)PWRTEN 配置位 进行使能。 第二个定时器是振荡器起振定时器 (OST),用于在晶 振稳定前使芯片保持在复位状态 (LP、 XT 和 HS 模 式)。 OST 在计数 1024 个振荡周期后允许振荡器为器 件提供时钟。 当使能 PLL 且选取外部振荡器模式时,器件将在 OST 延时之后另外保持 2 ms 的复位状态,这样可使 PLL 锁 定到输入时钟频率。 POR 之后有一个 TCSD 间隔的延时,在延时期间控制器 为执行指令做准备。此延时与任何其他延时并行发生。 当将 EC、 RC 或 INTIOSC 模式之一用作主时钟源时, 这可能是惟一产生的延时。 当选择 HFINTOSC 作为主时钟时,主系统时钟可以进 行延时,直到 HFINTOSC 稳定为止。用户可以通过 CONFIG3H 配置寄存器的 HFOFST 位进行选择。当 HFOFST 位 清 零 时,主 系 统 将 进 行 延 时,直 到 HFINTOSC 稳定为止。当 HFOFST 位置 1 时,主系统 时钟将立即启动。 在两种情况下,都可以读取 OSCCON 寄存器的 HFIOFS 位来确定 HFINTOSC 是否工作和稳定。 DS41412F_CN 第 40 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 2-3: 休眠模式下 OSC1 和 OSC2 引脚的状态 振荡器模式 OSC1 引脚 OSC2 引脚 RC、 INTOSC 与 CLKOUT 悬空,应通过外部电阻拉高 RC 与 IO 悬空,应通过外部电阻拉高 INTOSC 与 IO 配置为 PORTA 的 bit 7 EC 与 IO 悬空,由外部时钟驱动 EC 与 CLKOUT 悬空,由外部时钟驱动 LP、 XT 和 HS 反馈反相器在静态电压时被禁止 处于逻辑低电平 (时钟 4 分频输出) 配置为 PORTA 的 bit 6 配置为 PORTA 的 bit 6 配置为 PORTA 的 bit 6 处于逻辑低电平 (时钟 4 分频输出) 反馈反相器在静态电压时被禁止 注: 关于由休眠和 MCLR 复位引起的延时,请参见第 4.0 节 “ 复位 ” 中的表 4-2。 2.11 时钟切换 使用 OSCCON 寄存器的系统时钟选择(SCS<1:0>)位, 可通过软件在外部和内部时钟源之间切换系统时钟源。 PIC18(L)F2X/4XK22 器件包含的电路可防止在切换时 钟源时发生时钟 “ 毛刺 ”。在切换时钟时,器件时钟会有 短暂的停顿。该停顿的时间长度是旧时钟源的两个周期 与新时钟源的三到四个周期的和。此公式假设新时钟源 是稳定的。 第 3.1.2 节 “ 进入功耗管理模式 ” 详细讨论了时钟转换。 2.11.1 系统时钟选择 (SCS<1:0>)位 OSCCON 寄存器的系统时钟选择(SCS<1:0>)位选择 用于 CPU 和外设的系统时钟源。 • 当 SCS<1:0> = 00 时,系统时钟源由 CONFIG1H 配置寄存器中 FOSC<3:0> 位的配置决定。 • 当 SCS<1:0> = 10 时,系统时钟源由内部振荡器频 率选择,而内部振荡器频率通过 OSCTUNE 寄存器 的 INTSRC 位、OSCCON2 寄存器的 MFIOSEL 位 和 OSCCON 寄存器的 IRCF<2:0> 位选择。 • 当 SCS<1:0> = 01 时,系统时钟源是与 Timer1、 Timer3 和 Timer5 共用的 32.768 kHz 辅助振荡器。 复位之后,OSCCON 寄存器的 SCS<1:0> 位总是清零。 注: 任何自动时钟切换 (可能产生自双速启动 或 故 障 保 护 时 钟 监 视 器)都 不 会 更 新 OSCCON 寄存器的 SCS<1:0> 位。用户可 以监视 OSCCON2 寄存器的 SOSCRUN、 MFIOFS 和 LFIOFS 位以及 OSCCON 寄存 器的 HFIOFS 和 OSTS 位,以确定当前的 系统时钟源。 2.11.2 振荡器起振延时状态 (OSTS)位 OSCCON 寄存器的振荡器起振延时状态 (OSTS)位 指示系统时钟是来自外部时钟源 (通过 CONFIG1H 配 置寄存器中的 FOSC<3:0> 位定义),还是来自内部时 钟源。当主振荡器为主时钟源时, OSTS 还特别指明在 LP、 XT 或 HS 模式下,振荡器起振定时器 (OST)是 否已超时。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 41 页 PIC18(L)F2X/4XK22 2.11.3 时钟切换时序 当在一个振荡器和另一个振荡器之间切换时,新的振荡 器可能不工作,这将会节省能耗 (见图 2-9)。如果是 这种情况,则会在修改 OSCCON 寄存器的 SCS<1:0> 位之后,频率改变之前,存在一定的延时。OSCCON 寄 存 器 的 OSTS 和 IOFS 位 将 反 映 外 部 振 荡器和 HFINTOSC 振荡器的当前工作状态。频率选择时序如 下: 1. 修改 OSCCON 寄存器的 SCS<1:0> 位。 2. 旧时钟继续工作,直到新时钟就绪。 3. 时钟切换电路在新时钟就绪信号为真后等待两个 连续的旧时钟上升沿。 4. 从旧时钟的下一个下降沿开始,系统时钟保持低 电平。 5. 时钟切换电路再等待新时钟的两个上升沿。 6. 在新时钟的下一个下降沿,释放系统时钟保持的 低电平,并将新时钟切换为系统时钟。 7. 时钟切换完成。 更多详细信息,请参见图 2-1。 如果旧频率和新频率的时钟源都是 HFINTOSC,则在新 频率生效之前不存在启动延时。这是因为新旧频率经过 后分频器和多路开关之后都来自 HFINTOSC。 启动延时规范请参见第 27.0 节 “ 电气特性 ” 中的交流规 范 (振荡器模块)。 2.12 双速时钟启动模式 双速启动模式通过最大限度地缩短外部振荡器起振与代 码执行之间的延时,进一步节省了功耗。对于频繁使用休 眠模式的应用,双速启动模式将从器件唤醒的时间中去 除外部振荡器的起振时间,从而可降低器件的总体功耗。 该模式使得应用能够从休眠中唤醒,将 HFINTOSC 用作 时钟源执行数条指令,然后再返回休眠状态而无需等待 主振荡器稳定。 注: 执行SLEEP指令将中止振荡器起振时间,并 使 OSCCON 寄存器的 OSTS 位保持清零。 当振荡器模块被配置为 LP、 XT 或 HS 模式时,振荡器 起振定时器 (OST)使能 (见第 2.5.1 节 “ 振荡器起振 定时器 (OST) ”)。 OST 将暂停程序执行,直到完成 1024 次振荡计数。双速启动模式在 OST 计数时使用内 部振荡器进行工作,最大限度地缩短了代码执行的延 时。当 OST 计数到 1024 且 OSCCON 寄存器的 OSTS 位置 1 时,程序执行切换至外部振荡器。 2.12.1 双速启动模式配置 当以下所有设置均按说明进行配置时,将使能双速启动 模式: • 当 CONFIG1H 配置寄存器的 IESO 置 1 时,使能 双速启动模式。 • SCS<1:0> (在 OSCCON 寄存器中) = 00。 • CONFIG1H 配置寄存器的 FOSC<2:0> 位被配置为 LP、 XT 或 HS 模式。 在以下事件之后,双速启动模式变为有效: • 上电复位(POR)以及在上电延时定时器(PWRT) 延时结束 (如果使能)后,或者 • 从休眠中唤醒。 DS41412F_CN 第 42 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 2.12.2 双速启动序列 1. 从上电复位或休眠中唤醒。 2. 使用内部振荡器,以 OSCCON 寄存器的 IRCF<2:0> 位设置的频率开始执行指令。 3. OST 使能,计数 1024 个外部时钟周期。 4. OST 超时。外部时钟就绪。 5. OSTS 置 1。 6. 根据图 2-9 时钟切换结束。 图 2-9: 时钟切换时序 高速 低速 2.12.3 检查双速时钟状态 通过检查 OSCCON 寄存器的 OSTS 位的状态,可以确 认单片机是否如 CONFIG1H 配置寄存器中 FOSC<2:0> 位定义的那样依靠外部时钟源运行,还是依靠内部振荡 器运行。当外部振荡器未就绪时,OSTS = 0,这指示系 统使用内部振荡器运行。 旧时钟 起振时间 (1) 时钟同步 运行 新时钟 新时钟就绪 IRCF <2:0> 选择旧时钟 选择新时钟 系统时钟 低速 高速 旧时钟 起振时间 (1) 时钟同步 运行 新时钟 新时钟就绪 IRCF <2:0> 选择旧时钟 选择新时钟 系统时钟 注 1:对于 HSPLL 模式,起振时间包括外部时钟的 TOST(1024 个 TOSC),加上 TPLL(大约 2 ms)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 43 页 PIC18(L)F2X/4XK22 2.13 故障保护时钟监视器 故障保护时钟监视器 (FSCM)使得器件在出现外部振 荡器故障时仍能继续工作。FSCM 能在振荡器起振延时 定时器 (OST)延时结束后的任一时刻检测振荡器故 障。FSCM 通过将 CONFIG1H 配置寄存器中的 FCMEN 位置1来使能。FSCM可用于所有外部振荡器模式(LP、 XT、 HS、 EC、 RC 和 RCIO)。 图 2-10: 外部 时钟 FSCM 框图 时钟监视器 锁存器 SQ LFINTOSC 振荡器 31 kHz (~32 μs) ÷ 64 488 Hz (~2 ms) 采样时钟 R Q 检测到 时钟故障 2.13.1 故障保护检测 FSCM 模块通过将外部振荡器与 FSCM 采样时钟比较来 检测振荡器故障。将 LFINTOSC 进行 64 分频,就产生 了采样时钟(见图 2-10)。故障检测器内部有一个锁存 器。在外部时钟的每个下降沿,锁存器被置 1。在采样 时钟的每个上升沿,锁存器被清零。如果已经经过整个 采样时钟的半周期,但主时钟仍未变为低电平,则会检 测到故障。 2.13.2 故障保护操作 当外部时钟出现故障时, FSCM 将器件时钟切换到内部 时钟源,并将 PIR2 寄存器的 OSFIF 标志位置 1。如果 PIE2 寄存器的 OSCFIE 位也置 1,则 OSCFIF 标志置 1 会导致中断发生。器件固件随后会采取措施减轻可能由 故障时钟所产生的问题。系统时钟将继续来自内部时钟 源,直到器件固件成功重启外部振荡器并切换回外部时 钟源进行工作。不会自动转换回发生故障的时钟源。 FSCM 选 定 的 内 部 时 钟 源 由 OSCCON 寄 存 器的 IRCF<2:0> 位决定。这使得可以在故障发生前配置内部 振荡器。 2.13.3 故障保护条件清除 故障保护条件通过以下事件之一清除: • 任何复位 • 通过翻转 OSCCON 寄存器的 SCS1 位 这两个条件都会重新启动 OST。 OST 运行时,器件将 依靠 OSCCON 选定的 INTOSC 工作。OST 超时后,故 障保护条件被清除,器件自动切换到外部时钟源。在 OSCFIF 标志清零之前,不需要清除故障保护条件。 2.13.4 复位或从休眠中唤醒 FSCM 设计为能在振荡器起振定时器(OST)延时结束 后的任一时刻检测振荡器故障。从休眠状态唤醒后以及 任何类型的复位后使用 OST。OST 不能在 EC 或 RC 时 钟模式下使用,所以一旦复位或唤醒完成,FSCM 就处 于活动状态。 注: 由于振荡器起振时间范围较大,在振荡器 起振期间 (即,从复位或休眠中退出后), 故障保护电路不处于活动状态。经过一段 适当的时间后,用户应检查 OSCCON 寄存 器的 OSTS 位,以验证振荡器是否已成功 起振以及系统时钟是否切换成功。 注: 如果在 HS、 XT 或 LS 振荡器模式下为器 件配置了故障保护时钟监视功能,则也应 将 IESO 配置位置 1,以便在发生 OST 超 时时,时钟会自动从内部时钟切换为外部 振荡器。 DS41412F_CN 第 44 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 2-11: FSCM 时序图 采样时钟 系统 时钟 输出 时钟监视器输出 (Q) OSCFIF 振荡器 故障 检测到 故障 注: 测试 测试 系统时钟频率通常远高于采样时钟频率,本例选用的相对关系仅是为了便于说明。 测试 表 2-4: 与时钟源相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP OSCCON IDLEN IRCF<2:0> OSTS HFIOFS OSCCON2 PLLRDY SOSCRUN — MFIOSEL SOSCGO PRISD OSCTUNE INTSRC PLLEN TUN<5:0> PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF 图注: — = 未实现位,读为 0。时钟源不使用阴影位。 Bit 1 Bit 0 INT0IF RBIF TMR3IP CCP2IP SCS<1:0> MFIOFS LFIOFS TMR3IE CCP2IE TMR3IF CCP2IF 寄存器 所在页 116 129 32 33 37 125 120 表 2-5: 与时钟源相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CONFIG1H CONFIG2L IESO — FCMEN PRICLKEN PLLCFG — — BORV<1:0> FOSC<3:0> BOREN<1:0> PWRTEN CONFIG3H MCLRE — P2BMX T3CMX HFOFST CCP3MX PBADEN CCP2MX 图注: — = 未实现位,读为 0。时钟源不使用阴影位。 寄存器 所在页 357 357 360  2011-2013 Microchip Technology Inc. DS41412F_CN 第 45 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 46 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 3.0 功耗管理模式 PIC18(L)F2X/4XK22 器件总共提供 7 种工作模式,可以 更有效地进行功耗管理。这些工作模式提供了多种选 择,可在资源受限的应用 (即,电池供电的设备)中节 省功耗。 功耗管理模式有三种类别: 3.1.1 时钟源 SCS<1:0> 位允许为功耗管理模式在三个时钟源中任选 其一。它们是: • 主时钟,由 FOSC<3:0> 配置位定义 • 辅助时钟 (SOSC 振荡器) • 内部振荡器模块 • 运行模式 • 空闲模式 • 休眠模式 这些类别定义了需要为器件的哪些部分提供时钟,有时 还需要定义时钟的速度。运行和空闲模式可以使用三种 时钟源 (主时钟源、辅助时钟源或内部振荡器模块)中 的任意一种;休眠模式则不使用时钟源。 功耗管理模式包括几个由早期的PIC®单片机器件提供的 节省功耗的功能。其中之一就是时钟切换,该功能允许 使用辅助振荡器 (SOSC)代替主振荡器。节省功耗的 功能还包括所有 PIC® 单片机器件都能提供的休眠模式, 在该模式下,器件所有的时钟都停止。 3.1 选择功耗管理模式 选择功耗管理模式之前需要先做出两个决定: 3.1.2 进入功耗管理模式 可以通过装载 OSCCON 寄存器从一种功耗管理模式切 换到另一种功耗管理模式。SCS<1:0> 位选择时钟源并 确定使用运行模式还是空闲模式。更改这些位会导致 立即切换到一个新的时钟源 (假定新时钟源正在运 行)。此切换可能会引起时钟转换延时。更多信息,请 参见第 2.11 节 “ 时钟切换 ”。 执行SLEEP指令可以触发进入功耗管理空闲模式或休眠 模式。最后实际进入哪个模式由 IDLEN 位的状态决定。 更改功耗管理模式并不总是要求设置所有这些位,而是 取决于当前的模式和将要切换到的模式。通过在发出 SLEEP 指令之前更改振荡器选择位或更改 IDLEN 位可完 成多种模式转换。如果已经正确配置了 IDLEN 位,可能 只需执行 SLEEP 指令就可切换到所需的模式。 • 是否为 CPU 提供时钟源 • 选择何种时钟源 IDLEN 位 (OSCCON<7>)控制是否为 CPU 提供时钟 源,而 SCS<1:0> 位 (OSCCON<1:0>)选择使用哪种 时钟源。表 3-1 总结了各个模式下的位设置、时钟源和 受影响的模块。 表 3-1: 功耗管理模式 模式 OSCCON 位 IDLEN(1) SCS<1:0> 模块时钟 CPU 外设 可用时钟和振荡器源 休眠 0 PRI_RUN N/A N/A 关闭 关闭 无 —— 所有时钟均被禁止 00 提供时钟 提供时钟 主时钟 ——LP、XT、HS、RC、EC 和内部振荡 器模块 (2)。 这是正常的全功耗执行模式。 SEC_RUN N/A RC_RUN N/A 01 提供时钟 提供时钟 辅助时钟 ——SOSC 振荡器 1x 提供时钟 提供时钟 内部振荡器模块 (2) PRI_IDLE 1 00 关闭 提供时钟 主时钟 ——LP、 XT、 HS、 HSPLL、 RC 和 EC SEC_IDLE 1 RC_IDLE 1 01 关闭 提供时钟 辅助时钟 ——SOSC 振荡器 1x 关闭 提供时钟 内部振荡器模块 (2) 注 1: IDLEN 在执行 SLEEP 指令时反映其值。 2: 包含 HFINTOSC 和 HFINTOSC 后分频器以及 LFINTOSC 源。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 47 页 PIC18(L)F2X/4XK22 3.1.3 SLEEP 命令的多种功能 使用 SLEEP 指令调用功耗管理模式时,具体进入何种模 式在该指令执行那一刻由 IDLEN 位的值决定。如果 IDLEN = 0,当执行 SLEEP 指令时,器件会进入休眠模 式,所有时钟会停止,功耗达到最低。如果 IDLEN = 1, 当执行 SLEEP 指令时,器件会进入空闲模式,系统时钟 会继续向外设提供时钟,但从 CPU 断开。 3.2 运行模式 在运行模式下,内核和外设的时钟均有效。这些运行模 式之间的区别就在于时钟源不同。 3.2.1 PRI_RUN 模式 PRI_RUN 模式是单片机的正常全功耗执行模式。除非使 能了双速启动(详情请参见第 2.12 节 “ 双速时钟启动模 式 ”),否则该模式也是器件复位后的默认模式。在该模 式下,器件采用由CONFIG1H配置寄存器的FOSC<3:0> 位定义的振荡器工作。 3.2.2 SEC_RUN 模式 在 SEC_RUN 模式下, CPU 和外设将辅助外部振荡器 作为时钟源。这允许用户在使用高精度时钟源的情况下 仍可获得较低的功耗。 通过将 SCS<1:0> 位设置为 01 可以进入 SEC_RUN 模 式。当工作于SEC_RUN模式时,将发生以下所有情况: • 器件时钟源被切换到 SOSC 振荡器 (见图 3-1) • 主振荡器被关闭 • SOSCRUN 位 (OSCCON2<6>)被置 1 • OSTS 位 (OSCCON2<3>)被清零 注: 辅助外部振荡器应该在进入 SEC_RUN 模 式之前就已经运行了。如果 SCS<1:0> 位 设 置 为 01 时, SOSCGO 位 或任意 TxSOSCEN 位未置 1,则只有 SOSCGO 位置 1 且辅助外部振荡器就绪时,才会进 入 SEC_RUN 模式。 在从 SEC_RUN 模式转换到 PRI_RUN 模式时,外设和 CPU 继续使用 SOSC 振荡器作为时钟源,直到主时钟启 动。当主时钟就绪以后,时钟切换回主时钟(见图 3-2)。 当时钟切换完成时,SOSCRUN 位被清零,OSTS 位被 置 1 并且由主时钟提供器件时钟。唤醒不会影响 IDLEN 和 SCS 位, SOSC 振荡器继续运行。 3.2.3 RC_RUN 模式 在 RC_RUN 模式下,使用 INTOSC 多路开关将内部振 荡器模块作为 CPU 和外设的时钟源。在该模式下,主 时钟关闭。当使用 LFINTOSC 时钟源时,该模式是在代 码执行期间所有运行模式中最节省功耗的模式。它非常 适用于对时序不是很敏感或者不是一直需要高速时钟的 应用。如果主时钟源为内部振荡器模块 LFINTOSC 或 INTOSC (MFINTOSC 或 HFINTOSC),在代码执行 期间,PRI_RUN 和 RC_RUN 这两种模式区别不大。但 是在进入或退出RC_RUN模式时会发生时钟切换延时。 因此,如果主时钟源为内部振荡器模块,建议不要使用 RC_RUN 模式。 通过将 SCS1 位设置为 1 可以进入该模式。为保持与未 来器件的软件兼容性,即使 SCS0 位被忽略,还是建议 将该位清零。当时钟源切换到 INTOSC 多路开关时(见 图 3-1),主振荡器被关闭,OSTS 位被清零。在任意时 刻修改 IRCF<2:0> 位 (OSCCON<6:4>)可以立即改 变时钟速度。 当 IRCF 位和 INTSRC 位均清零时, INTOSC 输出 (HFINTOSC/MFINTOSC)将不会使能, HFIOFS 和 MFIOFS 位将保持清零。器件中不会有任何关于当前时 钟源的指示。由 LFINTOSC 时钟源提供器件时钟。 如果 IRCF 位从全清零状态改变(因而使能 INTOSC 输 出),或者如果 INTSRC 或 MFIOSEL 被置 1,则在 INTOSC 输出稳定后 HFIOFS 或 MFIOFS 位将被置 1。 详情请参见表 3-2。 在一个 TIOBST 间隔之后,INTOSC 时钟源趋于稳定,此 时器件时钟继续运行。 如果之前 IRCF 位为一个非零值,或者如果在将 SCS1 置 1 之前 INTSRC 已经置 1 并且 INTOSC 时钟源已达 到稳定,那么 HFIOFS 或 MFIOFS 位将保持置 1 状态。 DS41412F_CN 第 48 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 在从 RC_RUN 模式转换到 PRI_RUN 模式时,在主时 钟处于启动状态时,器件将继续使用 INTOSC 多路开关 作为时钟源。当主时钟就绪时,时钟切换到主时钟 (见 图 3-3)。当时钟切换完成时, HFIOFS 或 MFIOFS 位 被清零, OSTS 位被置 1 并且由主时钟提供器件时钟。 切换不会影响 IDLEN 和 SCS 位。如果使能了 WDT 或 故障保护时钟监视器,则 LFINTOSC 时钟源将继续运 行。 图 3-1: 进入 SEC_RUN 模式的转换时序 Q1 Q2 Q3 Q4 Q1 SOSCI OSC1 1 2 3 n-1 n 时钟转换 (1) CPU 时钟 外设 时钟 程序 计数器 PC 注 1:时钟转换通常发生在 2-4 个 TOSC 内。 PC + 2 Q2 Q3 Q4 Q1 Q2 Q3 PC + 4 图 3-2: 从 SEC_RUN 模式切换到 PRI_RUN 模式的转换时序 (HSPLL) Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 SOSC OSC1 PLL 时钟 输出 TOST(1) CPU 时钟 外设 时钟 程序 计数器 PC SCS<1:0> 位改变 TPLL(1) 1 2 n-1 n 时钟 转换 (2) OSTS 位置 1 PC + 2 注 1:TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。 2:时钟转换通常发生在 2-4 个 TOSC 内。 PC + 4  2011-2013 Microchip Technology Inc. DS41412F_CN 第 49 页 PIC18(L)F2X/4XK22 表 3-2: 内部振荡器频率稳定位 IRCF<2:0> INTSRC MFIOSEL 000 0 x 000 1 0 000 1 1 010 或 001 x 0 010 或 001 x 1 011 – 111 x x 选定振荡器 LFINTOSC HFINTOSC MFINTOSC HFINTOSC MFINTOSC HFINTOSC 选定振荡器稳定条件 LFIOFS = 1 HFIOFS = 1 MFIOFS = 1 HFIOFS = 1 MFIOFS = 1 HFIOFS = 1 图 3-3: 从 RC_RUN 模式切换到 PRI_RUN 模式的转换时序 INTOSC 多路开关 OSC1 PLL 时钟 输出 Q1 Q2 Q3 Q4 TOST(1) TPLL(1) CPU 时钟 外设 时钟 程序 计数器 SCS<1:0> 位改变 PC OSTS 位置 1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 1 2 n-1 n 时钟 转换 (2) PC + 2 PC + 4 注 1:TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。 2:时钟转换通常发生在 2-4 个 TOSC 内。 DS41412F_CN 第 50 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 3.3 休眠模式 PIC18(L)F2X/4XK22器件的功耗管理休眠模式和所有其 他 PIC® 单片机器件提供的传统休眠模式相同。通过清 零 OSCCON 寄存器的 IDLEN 位并执行 SLEEP 指令即 可进入该模式。这将关闭选定的振荡器 (图 3-4)并将 所有的时钟源状态位清零。 从运行或空闲模式进入休眠模式不需要切换时钟。这是 因为单片机一旦进入休眠模式就不需要时钟了。如果选 择了 WDT, LFINTOSC 时钟源将继续工作。如果使能 了 SOSC 振荡器,它也将继续运行。 当在休眠模式下发生唤醒事件(通过中断、复位或 WDT 超时)时,在时钟源 (通过 SCS<1:0> 位选择)就绪之 前器件将没有时钟源 (见图 3-5),或者如果使能了双 速启动或故障保护时钟监视器,它将使用内部振荡器模 块作为时钟源(见第 24.0 节 “CPU 的特殊功能 ”)。在 这两种情况下,当由主时钟提供器件时钟时, OSTS 位 将置 1。唤醒不会影响 IDLEN 和 SCS 位。 3.4 空闲模式 空闲模式允许在外设继续工作的同时有选择地关闭控制器 的 CPU。选择特定的空闲模式允许用户进一步管理功耗。 如果在执行 SLEEP 指令时,IDLEN 位被设置为 1,外设 将使用由 SCS<1:0> 位选择的时钟源,而 CPU 没有时钟 源。时钟源状态位不受影响。将 IDLEN 置 1 并执行 SLEEP 指令可以从给定的运行模式快速切换到相应的空闲模式。 如果选择了 WDT, LFINTOSC 时钟源将继续工作。如 果使能了 SOSC 振荡器,它也将继续运行。 由于 CPU 没有执行指令,器件只能通过中断、WDT 超 时或复位从空闲模式退出。当发生唤醒事件时,CPU 会 在其准备好执行代码前延时一个 TCSD 间隔。当 CPU 开 始执行代码时,它将沿用当前空闲模式所使用的时钟 源。例如,当从 RC_IDLE 模式唤醒时,将使用内部振 荡器模块为 CPU 和外设提供时钟(即 RC_RUN 模式)。 唤醒不会影响 IDLEN 和 SCS 位。 当处于任何空闲模式或休眠模式下时,WDT 超时会导致 WDT 唤醒并进入当前由 SCS<1:0> 位指定的运行模式。 图 3-4: 进入休眠模式的转换时序 Q1 Q2 Q3 Q4 Q1 OSC1 CPU 时钟 外设 时钟 休眠 程序 计数器 PC PC + 2  2011-2013 Microchip Technology Inc. DS41412F_CN 第 51 页 PIC18(L)F2X/4XK22 图 3-5: 从休眠模式唤醒的转换时序 (HSPLL) Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1 PLL 时钟 输出 TOST(1) TPLL(1) CPU 时钟 外设 时钟 程序 计数器 PC PC + 2 唤醒事件 OSTS 位置 1 注 1:TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。 PC + 4 PC + 6 3.4.1 PRI_IDLE 模式 在三种低功耗空闲模式中,只有该模式不会禁止主器件 时钟。由于时钟源不需要 “ 预热 ” 或是从其他振荡器转 换过来,对于时序敏感的应用,选用该模式可以使用较 精确的主时钟源以最快的速度恢复器件运行。 可以通过将 IDLEN 位置 1 并执行 SLEEP 指令以实现从 PRI_RUN 模式进入 PRI_IDLE 模式。如果器件处于另 一种运行模式,则应首先将 IDLEN 位置 1,然后将 SCS 位清零并执行 SLEEP 指令。虽然 CPU 已被禁止,但外 设仍可继续使用由 FOSC<3:0> 配置位指定的主时钟源 为其提供时钟信号。 OSTS 位保持置 1 (见图 3-6)。 当发生唤醒事件时,由主时钟源为 CPU 提供时钟。在唤 醒事件和代码执行开始之间需要一个 TCSD 间隔的延时。 该延时用来让 CPU 做好执行指令的准备。在唤醒之后, OSTS 位保持置 1 状态。唤醒不会影响 IDLEN 和 SCS 位 (见图 3-7)。 3.4.2 SEC_IDLE 模式 在 SEC_IDLE 模式下, CPU 被禁止,但外设继续将 SOSC 振荡器作为时钟源。可以通过将 IDLEN 位置 1 并 执行 SLEEP 指令从 SEC_RUN 模式进入该模式。如果 器件处于另一种运行模式,则应首先将 IDLEN 位置 1, 然后将 SCS<1:0> 位设置为 01 并执行 SLEEP 指令。当 时钟源 切换到 SOSC 振荡器时,主 振荡器被关 闭, OSTS 位被清零并且 SOSCRUN 位被置 1。 当唤醒事件发生时,外设继续将 SOSC 振荡器作为时钟 源。唤醒事件发生后经过一个 TCSD 时间间隔,CPU 开 始执行代码并使用 SOSC 振荡器作为其时钟源。唤醒不 会影响 IDLEN 和 SCS 位; SOSC 振荡器继续运行(见 图 3-7)。 注: SOSC 振荡器应该在进入 SEC_IDLE 模式 之前就已经运行了。当执行 SLEEP 指令时, 必须至少有一个辅助振荡器使能位 (SOSCGO、T1SOSCEN、T3SOSCEN 或 T5SOSCEN)置 1。否则,主系统时钟将继 续以先前选定的模式工作,并将进入相应 的空闲模式(即,PRI_IDLE或RC_IDLE)。 图 3-6: OSC1 CPU 时钟 外设 时钟 程序 计数器 进入空闲模式的转换时序 Q1 Q2 Q3 Q4 Q1 PC PC + 2 DS41412F_CN 第 52 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 3-7: OSC1 CPU 时钟 外设 时钟 程序 计数器 从空闲模式唤醒进入运行模式的转换时序 Q1 TCSD PC 唤醒事件 Q2 Q3 Q4 3.4.3 RC_IDLE 模式 在 RC_IDLE 模式下, CPU 被禁止,但仍继续由使用 HFINTOSC 多路开关输出的内部振荡器模块为外设提 供时钟。该模式允许在空闲期间对功耗管理进行控制。 可以通过将IDLEN位置1并执行SLEEP指令从RC_RUN 模式进入该模式。如果器件处于另一种运行模式,可以 先将 IDLEN 位置 1,然后再将 SCS1 位置 1 并执行 SLEEP 指令。虽然 SCS0 的值常常被忽略,但仍建议将 其清零,这将保证与未来器件的软件兼容性。通过在执 行 SLEEP 指令之前修改 IRCF 位,可以使用 HFINTOSC 多 路开 关 来 选 择更 高 的 时 钟频 率。当 时 钟 源切 换 到 HFINTOSC 多路开关时,主振荡器被关闭并且 OSTS 位 被清零。 如果 IRCF 位被设置为任何非零值,或者 INTSRC 或 MFIOSEL 位被置 1,就会使能 HFINTOSC 输出。在一个 TIOBST 间 隔 之 后 HFINTOSC 输 出 趋 于 稳 定,随 后 HFIOFS 或 MFIOFS 位被置 1。关于 HFIOFS 和 MFIOFS 位的信息,请参见表 3-2。 在 HFINTOSC 时钟源稳定期间继续为外设提供时钟。如 果之前 IRCF 位为一个非零值或者在执行 SLEEP 指令之 前 INTSRC 已置 1,并且当前 HFINTOSC 时钟源已稳 定,则 HFIOFS 和 MFIOFS 位将保持置 1 状态。如果 IRCF 和 INTSRC 位全部清零,就不会使能 HFINTOSC 输出,HFIOFS 和 MFIOFS 位将保持清零状态,此时将 不会有当前时钟源的任何指示。 当唤醒事件发生时,外设继续将 HFINTOSC 多路开关 输出作为时钟源。在唤醒事件后的一个 TCSD 延时之后, CPU 开始执行代码并使用 HFINTOSC 多路开关作为时 钟源。唤醒不会影响 IDLEN 和 SCS 位。如果使能了 WDT 或故障保护时钟监视器,则 LFINTOSC 时钟源将 继续运行。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 53 页 PIC18(L)F2X/4XK22 3.5 退出空闲和休眠模式 通过以下任一事件可以触发从休眠模式或任意空闲模式 退出: • 中断 • 复位 • 看门狗定时器超时 本节将讨论从功耗管理模式退出的触发方式。在每种功 耗管理模式章节中我们已经讨论过其时钟源子系统的操 作 (见第 3.2 节 “ 运行模式 ”、第 3.3 节 “ 休眠模式 ” 和第 3.4 节 “ 空闲模式 ”)。 3.5.1 通过中断退出 任何可用的中断源都可导致器件从空闲模式或休眠模式 退出回到运行模式。要使能此功能,必须通过将对应 INTCON 或 PIE 寄存器中的中断源允许位置 1 来允许中 断源。当相应的中断标志位置 1 时,触发退出操作。 在通过中断从空闲或休眠模式退出时,将执行紧随在 SLEEP 指令后的指令。然后,如果 INTCON 寄存器的 GIE/GIEH 位置 1,代码将跳转到中断向量处执行,否则 代码将继续执行,不进行跳转(见第 9.0 节 “ 中断 ”)。 唤醒事件之后需要一个固定的 TCSD 间隔的延时,器件 才会退出休眠和空闲模式。CPU 需要此延时来准备执行 代码。在延时后的第一个时钟周期重新开始执行指令。 3.5.2 通过 WDT 超时退出 根据 WDT 超时发生时器件所处的不同功耗管理模式会 引发不同的操作。 如果器件不在执行代码(所有空闲模式和休眠模式),超 时将导致从功耗管理模式退出(见第 3.2 节 “ 运行模式 ” 和第 3.3 节 “ 休眠模式 ”)。如果器件正在执行代码 (所 有运行模式),超时将导致 WDT 复位 (见第 24.3 节 “ 看门狗定时器 (WDT) ”)。 WDT 定时器和后分频器可由以下任一事件清零: • 执行 SLEEP 指令 • 执行 CLRWDT 指令 • 当前选定的时钟源失效(如果使能了故障保护时钟 监视器) • 修改 OSCCON 寄存器中的 IRCF 位 (如果内部振 荡器模块是器件时钟源) 3.5.3 通过复位退出 通过复位退出休眠和空闲模式会导致代码从地址 0 重新 开始执行。更多详细信息,请参见第 4.0 节 “ 复位 ”。 从复位状态退出到开始执行代码期间的延迟时间由唤醒 前后的时钟源以及振荡器的类型决定。 3.5.4 在没有振荡器起振延时的情况下退出 从某些功耗管理模式退出完全不需要 OST 延时。有以 下两种情形: • 主时钟源不停止的 PRI_IDLE 模式 • 主时钟源不是 LP、XT、HS 或 HSPLL 中的任意一 种模式 在这些情况下,主时钟源不需要振荡器起振延时,因为 它已经在运行(PRI_IDLE),或者它本来就不需要振荡 器起振延时(RC、EC、INTOSC 和 INTOSCIO 模式)。 但是,当器件退出休眠和空闲模式时,在唤醒事件之后 仍然需要一个固定的 TCSD 间隔的延时,以便让 CPU 准 备好执行代码。在延时后的第一个时钟周期重新开始执 行指令。 DS41412F_CN 第 54 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 3.6 选择性外设模块控制 利用空闲模式,用户可以通过停止 CPU 时钟来充分地 降低功耗。即便如此,外设模块仍然保持时钟运行,因 此会有功耗产生。有些应用可能存在空闲模式无法提供 的需求:为 CPU 处理供电,而外设的功耗达到最低。 PIC18(L)F2X/4XK22 系列器件支持选择性地禁止外设 模块,从而降低或消除外设功耗,以此来满足这一需 求。这 可 以通 过 外 设 模 块 禁 止 (Peripheral Module Disable, PMD)寄存器中的控制位实现。这些位通常 命名为 XXXMD,位于控制寄存器 PMD0、 PMD1 或 PMD2 中。 将模块的 PMD 位置 1 会禁止该模块的所有时钟源,从 而将其功耗降至绝对最低。在该状态下,与外设相关的 控制寄存器和状态寄存器断电,因此对这些寄存器的写 操作无效,且读取值无效。将已置 1 的 PMD 位清零可 恢复相关控制和状态寄存器的电源,从而将这些寄存器 设置为其默认值。 3.7 寄存器定义:外设模块禁止 寄存器 3-1: R/W-0 UART2MD bit 7 PMD0:外设模块禁止寄存器 0 R/W-0 R/W-0 R/W-0 UART1MD TMR6MD TMR5MD R/W-0 TMR4MD R/W-0 TMR3MD R/W-0 TMR2MD R/W-0 TMR1MD bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 UART2MD:UART2 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 6 UART1MD:UART1 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 5 TMR6MD:Timer6 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 4 TMR5MD:Timer5 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 3 TMR4MD:Timer4 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 2 TMR3MD:Timer3 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 1 TMR2MD:Timer2 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 0 TMR1MD:Timer1 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗  2011-2013 Microchip Technology Inc. DS41412F_CN 第 55 页 PIC18(L)F2X/4XK22 寄存器 3-2: R/W-0 MSSP2MD bit 7 PMD1:外设模块禁止寄存器 1 R/W-0 U-0 R/W-0 MSSP1MD — CCP5MD R/W-0 CCP4MD R/W-0 CCP3MD R/W-0 CCP2MD R/W-0 CCP1MD bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 MSSP2MD:MSSP2 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 6 MSSP1MD:MSSP1 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 5 未实现:读为 0 bit 4 CCP5MD:CCP5 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 3 CCP4MD:CCP4 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 2 CCP3MD:CCP3 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 1 CCP2MD:CCP2 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 bit 0 CCP1MD:CCP1 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 DS41412F_CN 第 56 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 3-3: U-0 — bit 7 PMD2:外设模块禁止寄存器 2 U-0 U-0 U-0 — — — R/W-0 CTMUMD R/W-0 CMP2MD R/W-0 CMP1MD R/W-0 ADCMD bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-4 bit 3 bit 2 bit 1 bit 0 未实现:读为 0 CTMUMD:CTMU 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 CMP2MD:比较器 C2 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 CMP1MD:比较器 C1 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗 ADCMD:ADC 外设模块禁止控制位 1 = 禁止模块,断开时钟源,模块不产生数字功耗 0 = 使能模块,连接时钟源,模块产生数字功耗  2011-2013 Microchip Technology Inc. DS41412F_CN 第 57 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 58 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 4.0 复位 PIC18(L)F2X/4XK22 器件有以下几种不同类型的复位: a) 上电复位 (POR) b) 正常工作期间的 MCLR 复位 c) 功耗管理模式下的 MCLR 复位 d) 看门狗定时器 (WDT)复位 (执行程序期间) e) 可编程欠压复位 (BOR) f) RESET 指令 g) 堆栈满复位 h) 堆栈下溢复位 本节讨论了由 MCLR、POR 和 BOR 产生的复位,并涉 及各种起振定时器的工作方式。堆栈复位事件将在第 5.2.0.1 节 “ 堆栈满和下溢复位 ” 中讨论。 WDT 复位将 在第 24.3 节 “ 看门狗定时器 (WDT) ” 中讨论。 图 4-1: RESET 指令 片上复位电路的简化框图 堆栈 指针 堆栈满 / 下溢复位 MCLR 外部复位 MCLRE ( )_IDLE 休眠 WDT 超时 VDD 检测 POR VDD 欠压 复位 BOREN OSC1 OST/PWRT OST(2) 1024 个周期 10 位脉动计数器 32 μs LFINTOSC PWRT(2) 65.5 ms 11 位脉动计数器 图 4-1 给出了片上复位电路的简化框图。 4.1 RCON 寄存器 通过 RCON 寄存器 (寄存器 4-1)跟踪器件复位事件。 该寄存器的低 5 位表明是否已经发生了特定的复位事 件。在大多数情况下,只能通过事件将这些位清零,而 且必须在事件发生后由应用程序将它们置 1。需要读取 所有这些标志位来确定刚发生的复位的类型。在第 4.7 节 “ 寄存器的复位状态 ” 中对此进行了更详细的说明。 RCON 寄存器还有设置中断优先级的控制位 (IPEN) 和对 BOR 进行软件控制的控制位 (SBOREN)。在第 9.0 节 “ 中断 ” 中讨论了中断优先级。在第 4.5 节 “ 欠 压复位 (BOR) ” 中讨论了 BOR。 S Chip_Reset R Q 注 1: 超时情况请参见表 4-2。 2: PWRT 和 OST 计数器通过 POR 和 BOR 复位。请参见第 4.4 节和第 4.5 节。 使能 PWRT 使能 OST(1)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 59 页 PIC18(L)F2X/4XK22 4.2 寄存器定义:复位控制 寄存器 4-1: RCON:复位控制寄存器 R/W-0/0 R/W-q/u U-0 IPEN SBOREN(1) — bit 7 R/W-1/q RI R-1/q TO R-1/q PD R/W-q/u POR(2) R/W-0/q BOR bit 0 图注: R = 可读位 1 = 置1 x = 未知 W = 可写位 0 = 清零 u = 不变 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 q = 值取决于具体条件 bit 7 IPEN:中断优先级使能位 1 = 使能中断优先级 0 = 禁止中断优先级 (PIC16CXXX 兼容模式) bit 6 SBOREN:BOR 软件使能位 (1) 如果 BOREN<1:0> = 01: 1 = 使能 BOR 0 = 禁止 BOR 如果 BOREN<1:0> = 00、 10 或 11: 该位被禁止并读为 0。 bit 5 未实现:读为 0 bit 4 RI:RESET 指令标志位 1 = 未执行 RESET 指令 (由固件置 1 或在上电复位时置 1) 0 = 执行了 RESET 指令,导致器件复位 (发生代码执行复位后必须由固件置 1) bit 3 TO:看门狗超时标志位 1 = 通过上电、 CLRWDT 指令或 SLEEP 指令置 1 0 = 发生了 WDT 超时 bit 2 PD:掉电检测标志位 1 = 通过上电或 CLRWDT 指令置 1 0 = 通过执行 SLEEP 指令置 1 bit 1 POR:上电复位状态位 (2) 1 = 未发生上电复位 0 = 发生了上电复位 (发生上电复位后必须用软件置 1) bit 0 BOR:欠压复位状态位 (3) 1 = 未发生欠压复位 (只能由固件置 1) 0 = 发生了欠压复位 (发生 POR 或欠压复位后必须由固件置 1) 注 1: 当 CONFIG2L[2:1] = 01 时, SBOREN 复位状态为 1 ;否则, SBOREN 复位状态为 0。 2: POR 的实际复位值由器件复位的类型决定。更多信息,请参见该寄存器下方的 “ 注 ” 和第 4.7 节 “ 寄存器 的复位状态 ”。 3: 请参见表 4-1。 注 1: 当 BOR 为 0 并且 POR 为 1 时(假定在 POR 之后立即用固件将 POR 和 BOR 设置为 1),可以说已发生 了欠压复位。 2: 建议在检测到上电复位后,将 POR 位置 1,以便继续检测后续的上电复位。 DS41412F_CN 第 60 页  2011-2013 Microchip Technology Inc. 4.3 主复位 (MCLR) MCLR 引脚提供了触发器件外部复位的方法。将该引脚拉 低可以产生复位信号。这些器件在 MCLR 复位路径上有 一个噪声滤波器,该滤波器可以检测并滤除小的干扰脉 冲。当引脚被配置为 MCLR 输入时,会使能内部弱上拉。 任何内部复位,包括 WDT 复位,均不能将 MCLR 引脚 驱动为低电平。 在 PIC18(L)F2X/4XK22 器件中,可以用 MCLRE 配置 位禁止 MCLR 输入。当禁止 MCLR 时,该引脚将成为 一 个 数 字 输 入 引 脚。更 多 信 息,请 参 见第 10.6 节 “PORTE 寄存器 ”。 4.4 上电复位 (POR) 只要当 VDD 上升到高于某个门限时,就会在片上产生上 电复位脉冲。这使得 VDD 达到满足器件正常工作的数值 时,器件会以初始化状态启动。 为了利用 POR 电路,可以将引脚保持悬空,或将 MCLR 引脚通过一个电阻连接到 VDD。这样可以省去产生上电 复位延时通常所需的外部 RC 元件。VDD 的最小上升速 率已指定。上升速率缓慢的情况,请参见图 4-2。 当器件开始正常工作 (即,退出复位状态)时,器件的 工作参数 (电压、频率和温度等)必须得到满足,以确 保其正常工作。如果不满足这些条件,那么器件必须保 持在复位状态,直到满足工作条件为止。 POR 事件由 RCON 寄存器的 POR 位捕捉。每当发生 POR 时,该位的状态就会被设置为 0 ;任何其他复位 事件均不能改变它。任何硬件事件均不能将 POR 复位 为 1。要捕捉多个事件,用户必须在 POR 之后用软件 手动将该位设置为 1。 PIC18(L)F2X/4XK22 图 4-2: 外部上电复位电路 (VDD 缓慢上电的情况) VDD VDD D R C PIC® MCU R1 MCLR 注 1: 仅当 VDD 上电速率过慢时才需要外部上电复 位电路。二极管 D 有助于在 VDD 掉电时使电 容迅速放电。 2: 建议 15 kΩ < R < 40 kΩ,确保电阻 R 两端压 降符合器件的电气规范。 3: R1 ≥ 1 kΩ 将限制任何电流从外部电容 C 流入 MCLR,以避免由于静电放电 (Electrostatic Discharge,ESD)或过度电性应力(Electrical Overstress,EOS)导致 MCLR/VPP 引脚损坏。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 61 页 PIC18(L)F2X/4XK22 4.5 欠压复位 (BOR) PIC18(L)F2X/4XK22 器件带有一个 BOR 电路,它将为 用户提供一系列配置和节能选项。BOR 由 CONFIG2L 配 置寄存器的 BORV<1:0> 和 BOREN<1:0> 位控制。总共 有 4 种 BOR 配置,归纳在表 4-1 中。 BOR 门限值由 BORV<1:0> 位设置。如果使能了 BOR (BOREN<1:0> 为除 00 以外的任何值),只要 VDD 低 于 VBOR 的时间大于 TBOR,就会复位器件。如果 VDD 降到 VBOR 以下的时间小于 TBOR,器件是否发生复位就 无法确定了。芯片将保持欠压复位状态,直至 VDD 上升 到 VBOR 以上。 如果使能了上电延时定时器,则它将在 VDD 上升到超过 VBOR 之后开始工作;并使芯片在延时 TPWRT 期间保持 复位。如果在上电延时定时器运行过程中,VDD 电压降 到 VBOR 以下,芯片将重新回到欠压复位状态并且初始 化上电延时定时器。一旦 VDD 电压上升到 VBOR 以上, 上电延时定时器将重新执行延时。 BOR 和上电延时定时器 (PWRT)是分别配置的。使 能 BOR 复位并不会自动使能 PWRT。 BOR 电路有输出送入 POR 电路,并在 BOR 的工作电 压范围内重新激活 POR。 POR 的提前重新激活可确保 在 VDD 低于 BOR 电路的工作电压范围时,器件将保持 在复位状态。 4.5.1 检测 BOR 使能 BOR 后,在发生 BOR 或 POR 事件时,BOR 位总 是复位为 0。因此只通过读 BOR 位的状态很难确定是 否发生了 BOR 事件。更可靠的方法是同时检查 POR 和 BOR 的状态。假定在发生任何 POR 事件后, POR 和 BOR 位被立即用软件复位为 1。如果 BOR 为 0 同时 POR 为 1,那么就可以断定已经发生了 BOR 事件。 4.5.2 用软件使能 BOR 当 BOREN<1:0> = 01 时,用户可以用软件使能或禁止 BOR。这通过使用 RCON 寄存器的 SBOREN 控制位实 现。如前所述,将 SBOREN 置 1 可使能 BOR。清零 SBOREN 将完全禁止 BOR。SBOREN 位只在该模式下 工作;否则读为 0。 用软件控制BOR位可使用户能更灵活地定制应用程序以 使其适应环境,而无需通过对器件再编程来更改 BOR 配 置。它还允许用户通过软件消除 BOR 额外消耗的电流, 从而调节器件的功耗。虽然 BOR 的电流通常很小,但是 它可能对低功耗应用有一些影响。 注: 即使当 BOR 受软件控制时, BOR 复位电 压仍将由 BORV<1:0> 配置位设置。该值 不能用软件更改。 4.5.3 在休眠模式下禁止 BOR 当 BOREN<1:0> = 10 时,BOR 受硬件控制并且像前面 描述的那样工作。每当器件进入休眠模式时,就会自动 禁止 BOR。当器件返回到任何其他工作模式时,又将自 动重新使能 BOR。 该模式使应用能在有效执行代码的同时从欠压状态恢 复,这也是器件最需要 BOR 保护的状况。同时,通过 消除少量额外的 BOR 电流,可以节省休眠模式下的额 外功耗。 4.5.4 最小 BOR 使能时间 如果没有任何需要固定参考电压 (FVR)的外设处于工 作状态,则使能 BOR 的同时也将使能 FVR。只有在 FVR 稳定后, BOR 才变为有效。因此,要确保 BOR 保护, 当用软件使能 BOR 或从休眠模式唤醒后自动使能 BOR 时,必须考虑 FVR 稳定时间。如果在 FVR 稳定前用软 件或通过重新进入休眠模式禁止了 BOR,则 BOR 电路 将不会检测 BOR 条件。 VREFCON0 寄存器的 FVRST 位可用于确定 FVR 的稳定性。 DS41412F_CN 第 62 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 4-1: BOR 配置 BOR 配置 SBOREN 的状态 BOREN1 BOREN0 (RCON<6>) BOR 操作 0 0 0 1 1 0 1 1 不可用 可用 不可用 不可用 禁止 BOR ;必须通过对配置位再编程来使能 BOR。 用软件使能 BOR ;工作模式由 SBOREN 控制。 用硬件在运行和空闲模式下使能 BOR,在休眠模式下禁止 BOR。 用硬件使能 BOR ;必须通过对配置位再编程来禁止 BOR。 4.6 器件复位定时器 PIC18(L)F2X/4XK22 器件包含了三个独立的片上定时 器,有助于调节上电复位过程。它们的主要功能是确保 在代码执行之前器件时钟稳定。这些定时器是: • 上电延时定时器 (PWRT) • 振荡器起振定时器 (OST) • PLL 锁定延时定时器 4.6.1 上电延时定时器 (PWRT) PIC18(L)F2X/4XK22 器件的上电延时定时器 (PWRT) 是一个 11 位计数器,它使用 LFINTOSC 时钟源作为时钟 输入。该定时器可产生大约 2048 x 32 μs = 65.6 ms 的时 间间隔。 PWRT 计数期间,器件保持在复位状态。 上电延时时间取决于 LFINTOSC 时钟,并且由于温度和 工艺的不同,不同器件的延迟时间也将各不相同。 通过清零 PWRTEN 配置位可使能 PWRT。 4.6.2 振荡器起振定时器 (OST) 在 PWRT 延时结束以后,由振荡器起振定时器(OST) 提供一个 1024 振荡周期 (来自 OSC1 输入)的延时, 从而确保晶振或谐振器的起振和稳定工作。 只有在 XT、 LP 和 HS 模式下,并且仅当发生上电复位 或从所有功耗管理模式退出 (停止外部振荡器)时,才 启动 OST 延时。 4.6.3 PLL 锁定延时定时器 在 PLL 使能时,上电复位后的延时时序与其他振荡器模 式略有不同。在 PLL 模式下需要使用一个独立的定时器 来提供一段足够让 PLL 锁定主振荡器频率的固定延时。 PLL 锁定延时(TPLL)通常为 2 ms,且在振荡器起振延 时后发生。 4.6.4 延时时序 上电延时时序如下: 1. POR脉冲清零后,启动PWRT延时(如果使能)。 2. 然后, OST 被激活。 总延迟时间取决于振荡器配置和 PWRT 的状态。图 4-3、 图 4-4、图 4-5、图 4-6 和图 4-7 各自描述了不同的上电 延时时序,其中上电延时定时器被使能,并且器件工作 在 HS 振荡器模式下。图 4-3 至 4-6 也适用于在 XT 或 LP 模式下工作的器件。对于工作在 RC 模式下且禁止了 PWRT 的器件,将根本没有延时。 由于延时是由 POR 脉冲触发的,因此如果 MCLR 保持 足够长时间的低电平,在所有延时结束之后,将 MCLR 电平拉高使器件立即开始执行程序 (图 4-5)。这对于 测试或同步多个并行工作的 PIC® MCU 器件来说是非常 有用的。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 63 页 PIC18(L)F2X/4XK22 表 4-2: 各种情形下的延时 振荡器配置 上电复位 (2) 和欠压复位 PWRTEN = 0 PWRTEN = 1 HSPLL HS、 XT 和 LP EC 和 ECIO RC 和 RCIO INTIO1 和 INTIO2 66 ms(1) + 1024 TOSC + 2 ms(2) 66 ms(1) + 1024 TOSC 66 ms(1) 66 ms(1) 66 ms(1) 1024 TOSC + 2 ms(2) 1024 TOSC — — — 注 1:66 ms (65.5 ms)是上电延时定时器 (PWRT)延迟时间的标称值。 2:2 ms 是 PLL 锁定所需的标称时间。 从功耗管理模式退出 1024 TOSC + 2 ms(2) 1024 TOSC — — — 图 4-3: 上电延时时序 (MCLR 连接到 VDD, VDD 电压上升时间 < TPWRT) VDD MCLR 内部 POR PWRT 延时 OST 延时 TPWRT TOST 内部复位 图 4-4: 上电延时时序 (MCLR 未连接到 VDD):情形 1 VDD MCLR 内部 POR PWRT 延时 TPWRT OST 延时 内部复位 TOST DS41412F_CN 第 64 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 4-5: 上电延时时序 (MCLR 未连接到 VDD):情形 2 VDD MCLR 内部 POR PWRT 延时 OST 延时 TPWRT 内部复位 TOST 图 4-6: 缓慢上升时间 (MCLR 连接到 VDD, VDD 电压上升时间 > TPWRT) 5V VDD 0V MCLR 内部 POR PWRT 延时 TPWRT TOST OST 延时 内部复位  2011-2013 Microchip Technology Inc. DS41412F_CN 第 65 页 PIC18(L)F2X/4XK22 图 4-7: 在 PLL 使能时 POR 的延时时序 (MCLR 连接到 VDD) VDD MCLR 内部 POR PWRT 延时 OST 延时 PLL 延时 内部复位 TPWRT TOST TPLL 注: TOST = 1024 个时钟周期。 TPLL ≈ 2 ms (最大), PWRT 定时器延时的前三个阶段。 DS41412F_CN 第 66 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 4.7 寄存器的复位状态 一些寄存器不受复位的影响。在 POR 时这些寄存器的状 态不确定,而在其他复位时它们的状态不变。而所有其 他寄存器则根据不同的复位类型被强制为 “ 复位状态 ”。 大多数寄存器不受 WDT 唤醒的影响,因为这被视为恢 复正常工作。如表 4-3 所示,RCON 寄存器中的状态位 (RI、TO、PD、POR 和 BOR)在不同的复位情形下会 分别被置 1 或清零。可在软件中使用这些位判断复位的 性质。 表 5-2 描述了所有特殊功能寄存器的复位状态。该表列 出了上电复位(POR)/ 欠压复位(BOR)和所有其他 复位(即,主复位、WDT 复位、STKFUL 和 STKUNF 等)之间的差别。此外,该表还列出了在器件接收到 WDT 唤醒或其他中断时发生改变的寄存器位。 表 4-3: RCON 寄存器的状态位、含义以及初始化状态 条件 程序计数器 SBOREN RCON 寄存器 STKPTR 寄存器 RI TO PD POR BOR STKFUL STKUNF 上电复位 0000h 1 11100 0 0 RESET 指令 欠压复位 0000h u(2) 0uuuu u u 0000h u(2) 111u0 u u 功耗管理运行模式下的 MCLR 复 0000h u(2) u1uuu u u 位 功耗管理空闲和休眠模式下的 0000h u(2) u10uu u u MCLR 复位 全功耗或功耗管理运行模式下的 0000h u(2) u0uuu u u WDT 超时 全功耗执行期间的 MCLR 复位 0000h u(2) uuuuu u u 堆栈满复位 (STVREN = 1) 0000h u(2) uuuuu 1 u 堆栈下溢复位 (STVREN = 1) 0000h u(2) uuuuu u 1 堆栈下溢错误 (不是真正的复 0000h u(2) uuuuu u 1 位, STVREN = 0) 功耗管理空闲或休眠模式下的 PC + 2 u(2) u00uu u u WDT 超时 通过中断从功耗管理模式退出 PC + 2(1) u(2) uu0uu u u 图注: u = 不变 注 1: 当器件被中断唤醒且 GIEH 或 GIEL 置 1 时, PC 装入中断向量 (008h 或 0018h)。 2: 当软件使能 BOR (BOREN<1:0> 配置位 = 01)时, SBOREN 的复位状态为 1 且所有其他复位不能改变 该状态。否则,其复位状态为 0。 表 4-4: 与复位相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 RCON IPEN SBOREN — RI STKPTR STKFUL STKUNF — 图注: — = 未实现位,读为 0。复位不使用阴影位。 Bit 3 Bit 2 Bit 1 TO PD POR STKPTR<4:0> Bit 0 BOR 寄存器 所在页 60 72  2011-2013 Microchip Technology Inc. DS41412F_CN 第 67 页 PIC18(L)F2X/4XK22 表 4-5: 与复位相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CONFIG2L — CONFIG2H — — — — BORV<1:0> WDPS<3:0> BOREN<1:0> PWRTEN WDTEN<1:0> CONFIG3H MCLRE — P2BMX T3CMX HFOFST CCP3MX PBADEN CCP2MX CONFIG4L DEBUG XINST — — — LVP — STRVEN 图注: — = 未实现位,读为 0。复位不使用阴影位。 寄存器 所在页 358 359 360 361 DS41412F_CN 第 68 页  2011-2013 Microchip Technology Inc. 5.0 存储器构成 PIC18 增强型单片机器件有三种类型的存储器: • 程序存储器 • 数据 RAM • 数据 EEPROM 由于是哈佛架构的器件,数据和程序存储器使用不同的 总线,因而可同时访问这两种存储空间。实际使用时, 可将数据 EEPROM 当作外设,因为它可以通过一组控 制寄存器进行寻址和访问。 第 6.0 节 “ 闪存程序存储器 ” 提供了关于闪存程序存储 器操作的更多详细信息。数据 EEPROM 将单独在第 7.0 节 “ 数据 EEPROM 存储器 ” 中讨论。 PIC18(L)F2X/4XK22 5.1 程序存储器构成 PIC18 单片机具有一个 21 位程序计数器,可以对 2 MB 的程序存储空间进行寻址。访问物理实现存储器的上边 界和这个 2 MB 地址之间的存储单元会返回全 0 (NOP 指令)。 本系列器件包含的闪存如下: • PIC18(L)F23K22 和 PIC18(L)F43K22:8 KB 闪存, 最多 4,096 条单字指令 • PIC18(L)F24K22 和 PIC18(L)F44K22:16 KB 闪存, 最多 8,192 条单字指令 • PIC18(L)F25K22 和 PIC18(L)F45K22:32 KB 闪存, 最多 16,384 条单字指令 • PIC18(L)F26K22 和 PIC18(L)F46K22:64 KB 闪存, 最多 37,768 条单字指令 PIC18 器件有两个中断向量。复位向量地址为 0000h, 中断向量地址为 0008h 和 0018h。 图 5-1 给出了 PIC18(L)F2X/4XK22 器件的程序存储器 映射。存储器框图的详细信息如图 20-2 所示。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 69 页 PIC18(L)F2X/4XK22 图 5-1: PIC18(L)F2X/4XK22 器件的程序存储器映射和堆栈 PC<20:0> CALL,RCALL,RETURN 21 RETFIE,RETLW 第 1 级堆栈 • •• 第 31 级堆栈 复位向量 高优先级中断向量 低优先级中断向量 片上 程序存储器 1FFFh 2000h 片上 程序存储器 PIC18(L)F23K22 PIC18(L)F43K22 3FFFh 4000h PIC18(L)F24K22 片上 程序存储器 PIC18(L)F44K22 7FFFh 8000h 片上 程序存储器 0000h 0008h 0018h 读为 0 读为 0 PIC18(L)F25K22 PIC18(L)F45K22 读为 0 FFFFh 10000h PIC18(L)F26K22 PIC18(L)F46K22 读为 0 1FFFFFh 200000h 用户存储空间 5.1.1 程序计数器 程序计数器(Program Counter,PC)指定欲取出执行 的指令的地址。PC 为 21 位宽,保存在三个不同的 8 位 寄存器中。存储低字节的寄存器称为 PCL 寄存器,该寄 存器可读写。存储高字节的寄存器,即 PCH 寄存器,存 储 PC<15:8> 位;该寄存器不可直接读写。更新 PCH 寄 存器的操作是通过 PCLATH 寄存器实现的。存储最高字 节的寄存器称为 PCU。该寄存器存储 PC<20:16> 位; 它也不能直接读写。更新 PCU 寄存器的操作是通过 PCLATU 寄存器实现的。 PCLATH 和 PCLATU 的内容通过执行写 PCL 的任何操 作被传送到程序计数器。同样,程序计数器的两个高字 节通过读 PCL 的操作被传送到 PCLATH 和 PCLATU。 这对于 PC 计算偏移量很有用处 (见第 5.2.2.1 节 “ 计 算 GOTO”)。 PC 是按字节寻址程序存储器的。为了防止 PC 不能正确 获取字指令,需要将 PCL 的最低有效位固定取值为 0。 PC 每次加 2 来寻址程序存储器中的顺序指令。 CALL、RCALL、GOTO 和程序跳转指令直接写入程序计 数器。对于这些指令,PCLATH 和 PCLATU 的内容不会 传送到程序计数器。 5.1.2 返回地址堆栈 返回地址堆栈允许最多 31 个程序调用和中断的任意组 合。当执行 CALL、 RCALL 指令或响应中断时, PC 值 会被压入该堆栈。而在执行 RETURN、RETLW 或 RETFIE 指令时,PC 值会从堆栈弹出。PCLATU 和 PCLATH 不 受 RETURN 或 CALL 指令的影响。 通过 21 位的 RAM 和一个 5 位的堆栈指针 STKPTR 来 实现 31 字的堆栈操作。堆栈既不占用程序存储空间,也 不占用数据存储空间。堆栈指针是可读写的,并且通过 栈顶 (Top-of-Stack, TOS)特殊文件寄存器可以读写 栈顶地址。也可以使用这些寄存器将数据压入堆栈或者 从堆栈弹出。 DS41412F_CN 第 70 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 执行 CALL 类型指令进行压栈操作:首先堆栈指针加 1, 并且将 PC(PC 已经指向 CALL 之后的下一条指令)的 内容写入堆栈指针所指向的地址单元。执行 RETURN 类 型指令进行出栈操作:STKPTR 寄存器所指向的地址单 元的内容会被传送给 PC,然后堆栈指针减 1。 所有复位后,堆栈指针均会初始化为 00000。堆栈指针 值 00000 不指向任何 RAM 单元;它仅仅是一个复位 值。状态位指示堆栈是已满、上溢还是下溢。 5.1.2.1 访问栈顶 只可读写返回地址堆栈的栈顶 (TOS) 。有三个寄存器 TOSU:TOSH:TOSL 用于保存由 STKPTR 寄存器所指向 的堆栈单元的内容 (图 5-2)。这可以让用户在必要时实 现软件堆栈。在 CALL、RCALL 或中断后,软件可以通过 读取 TOSU:TOSH:TOSL 寄存器来读取压入堆栈的值。这 些值可以被存放到由用户定义的软件堆栈。返回时,软 件将这些值存回 TOSU:TOSH:TOSL 并执行返回。 为防止意外的堆栈操作,访问堆栈时用户必须禁止全局 中断允许 (GIE)位。 图 5-2: 返回地址堆栈和相关的寄存器 返回地址堆栈 <20:0> TOSU 00h 栈顶寄存器 TOSH 1Ah TOSL 34h 栈顶 11111 11110 11101 001A34h 000D58h 00011 00010 00001 00000 堆栈指针 STKPTR<4:0> 00010 5.1.2.2 返回堆栈指针 (STKPTR) STKPTR 寄 存 器 (寄 存 器 5-1)包 含 堆 栈 指针值、 STKFUL(堆栈满)状态位和 STKUNF(堆栈下溢)状 态位。堆栈指针值可为 0 至 31 范围内的任意值。向堆 栈压入值前,堆栈指针加 1 ;而从堆栈弹出值后,堆栈 指针减 1。复位时,堆栈指针值为零。用户可以读写堆 栈 指 针 的 值。实 时 操 作 系 统 (Real-Time Operating System, RTOS)可以利用此特性对返回堆栈进行维 护。 向堆栈压入 PC 值 31 次 (且没有值从堆栈弹出)后, STKFUL 位置 1。通过软件或 POR 将 STKFUL 位清零。 由 STVREN (堆栈溢出复位使能)配置位的状态决定 堆栈满时将执行的操作。(关于器件配置位的说明,请 参见第 24.1 节 “ 配置位 ”。)如果 STVREN 置 1 (默 认),第 31 次压栈会将 (PC + 2)值压入堆栈,从而 将 STKFUL 位置 1 并复位器件。 STKFUL 位将保持置 1,而堆栈指针将被清零。 如果 STVREN 清零,第 31 次压栈时 STKFUL 位将会置 1, 堆栈指针递增到 31。任何其他压栈操作都不会覆盖 第 31 次压栈的值,并且 STKPTR 将保持为 31。 当堆栈弹出次数足够卸空堆栈时,下一次出栈会向 PC 返回一个零值,并将 STKUNF 位置 1,而堆栈指针则保 持为零。STKUNF 位将保持置 1,直到由软件清零或发 生 POR 为止。 注: 下溢时,将零值返回给 PC,会使程序指向 复位向量,此时可以验证堆栈状态并采取 相应的操作。这与复位不同,因为下溢时 SFR 的内容不受影响。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 71 页 PIC18(L)F2X/4XK22 5.1.2.3 PUSH 和 POP 指令 由于栈顶是可以读写的,因此将值压入堆栈或从堆栈弹 出而不影响程序的正常执行是非常理想的。PIC18 指令 集包含两条指令 PUSH 和 POP,使用这两条指令可在软 件控制下对 TOS 执行操作。然后就可以修改 TOSU、 TOSH 和 TOSL,将数据或返回地址压入堆栈。 5.2 寄存器定义:协议栈指针 寄存器 5-1: STKPTR:堆栈指针寄存器 R/C-0 R/C-0 U-0 STKFUL(1) STKUNF(1) — bit 7 R/W-0 PUSH 指令将当前的 PC 值压入堆栈。执行该指令会使 堆栈指针加 1 并将当前的 PC 值装入堆栈。 POP 指令通过将堆栈指针减 1 来放弃当前的 TOS 值。 然后前一个入栈的值就成为了 TOS 值。 R/W-0 R/W-0 STKPTR<4:0> R/W-0 R/W-0 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 bit 7 bit 6 bit 5 bit 4-0 STKFUL:堆栈满标志位 (1) 1 = 堆栈满或溢出 0 = 堆栈未满也未溢出 STKUNF:堆栈下溢标志位 (1) 1 = 发生了堆栈下溢 0 = 未发生堆栈下溢 未实现:读为 0 STKPTR<4:0>:堆栈指针地址位 注 1: 通过用户软件或 POR 清零 bit 7 和 bit 6。 5.2.0.1 堆栈满和下溢复位 通过将配置寄存器 4L 中的 STVREN 位置 1,来使能在 堆栈溢出或下溢时的器件复位。当 STVREN 置 1 时,堆 栈满或堆栈下溢状态会将相应的 STKFUL 或 STKUNF 位置 1,然后使器件复位。当 STVREN 清零时,堆栈满 或堆栈下溢状态会将相应的 STKFUL 或 STKUNF 位置 1, 但不会使器件复位。通过用户软件或上电复位将 STKFUL 或 STKUNF 位清零。 5.2.1 快速寄存器堆栈 为 STATUS、WREG 和 BSR 寄存器提供的快速寄存器 堆栈具有从中断 “ 快速返回 ” 的功能。每个寄存器的堆 栈只有一级且不可读写。当处理器转入中断向量处执行 时,它装入对应寄存器的当前值。所有中断源都会将值 压入堆栈寄存器。如果使用 RETFIE, FAST 指令从中 断返回,这些寄存器中的值就会被装回相关的寄存器。 U = 未实现 0 = 清零 C = 只可清零位 x = 未知 如果同时允许低优先级中断和高优先级中断,从低优先 级中断返回时,无法可靠地使用堆栈寄存器。如果在为 低优先级中断提供服务时,发生了高优先级中断,则低 优先级中断存储在堆栈寄存器中的值将被覆盖。在为低 优先级中断提供服务时,用户必须用软件保存关键寄存 器的值。 如果未使用中断优先级,所有中断都可以使用快速寄存 器堆栈从中断返回。如果没有使用中断,快速寄存器堆 栈可以用于在子程序调用结束后恢复 STATUS、WREG 和 BSR 寄存器。要在子程序调用中使用快速寄存器堆 栈,必须执行 CALL label, FAST 指令将 STATUS、 WREG 和 BSR 寄存器的内容存入快速寄存器堆栈。然 后执行 RETURN, FAST 指令,从快速寄存器堆栈恢复 这些寄存器。 例 5-1 给出了一个在子程序调用和返回期间使用快速寄 存器堆栈的源代码示例。 DS41412F_CN 第 72 页  2011-2013 Microchip Technology Inc. 例 5-1: CALL SUB1, FAST • • 快速寄存器堆栈代码示例 ;STATUS, WREG, BSR ;SAVED IN FAST REGISTER ;STACK SUB1 • • RETURN, FAST ;RESTORE VALUES SAVED ;IN FAST REGISTER STACK 5.2.2 程序存储器中的查找表 有的编程场合可能需要在程序存储器中创建数据结构或 查找表。对于PIC18器件,可以用两种方式实现查找表: • 计算 GOTO • 表读 5.2.2.1 计算 GOTO 计算 GOTO 是通过向程序计数器加一个偏移量来实现的。 例 5-2 中给出了一个示例。 可以使用 ADDWF PCL 指令和一组 RETLW nn 指令创建 一个查找表。在调用该表前,会先将查找表中的偏移量 装入W寄存器。被调用子程序的第一条指令应该是ADDWF PCL 指令。接下去执行的一条是 RETLW nn 指令,它将 值 nn 返回给调用函数。 偏移量值 (WREG 中)指定程序计数器应该增加的字 节数,其值应该为 2 的倍数 (LSb = 0)。 在这种方式中,每个指令单元只能存储一个数据字节, 并且要求返回地址堆栈中还有空闲的单元。 例 5-2: ORG TABLE MOVF CALL nn00h ADDWF RETLW RETLW RETLW . . . 使用偏移量值的计算 GOTO OFFSET, W TABLE PCL nnh nnh nnh PIC18(L)F2X/4XK22 5.2.2.2 表读与表写 有一种更好的方法可以将数据存储在程序存储器中,这 种方法允许在每个指令单元存储 2 个字节的数据。 通过表读和表写,每个程序字可以存储 2 个字节的查找 表数据。表指针 (TBLPTR)寄存器指定字节地址,而 表锁存寄存器 (TABLAT)则存储从程序存储器中读取 或写入的数据。一次只能向程序存储器或从程序存储器 传送一个字节。 第 6.1 节 “ 表读与表写 ” 将进一步讨论表读和表写操作。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 73 页 PIC18(L)F2X/4XK22 5.3 PIC18 指令周期 5.3.1 时钟机制 来自内部或外部时钟源的单片机时钟输入都将在内部被 四分频以产生四个互不重叠的正交时钟信号(Q1、Q2、 Q3 和 Q4)。程序计数器在每个 Q1 递增;在 Q4 期间, 从程序存储器取指令并将指令锁存到指令寄存器中。指 令的译码和执行在下一个 Q1 到 Q4 周期完成。图 5-3 所 示为时钟和指令执行流程。 5.3.2 指令流 / 流水线 一个指令周期由 Q1 到 Q4 四个周期组成。取指令和执 行指令是以流水线方式进行的,用一个指令周期来取指 令,而用另一个指令周期译码和执行指令。但由于是流 水线操作,所以每条指令的等效执行时间都是一个指令 周期。如果某条指令改变了程序计数器 (如 GOTO) , 则需要两个指令周期才能完成该指令 (例 5-3)。 取指周期中:程序计数器(PC)在 Q1 周期递增,开始 取指令。 指令执行周期中:在 Q1 周期,将所取指令锁存到指令 寄存器(Instruction Register,IR)。在随后的 Q2、Q3 和 Q4 周期中译码并执行该指令。其中读数据存储器(读 操作数)发生在 Q2 周期,写操作 (写目标寄存器)发 生在 Q4 周期。 图 5-3: OSC1 Q1 Q2 Q3 Q4 PC OSC2/CLKOUT (RC 模式) 时钟 / 指令周期 Q1 Q2 Q3 Q4 PC 执行(PC – 2)处的指令 取(PC)处的指令 Q1 Q2 Q3 Q4 PC + 2 执行(PC)处的指令 取(PC + 2)处的指令 Q1 Q2 Q3 Q4 PC + 4 执行(PC + 2)处的指令 取(PC + 4)处的指令 内部 相位 时钟 例 5-3: 指令流水线流程 TCY0 1. MOVLW 55h 取指 1 2. MOVWF PORTB 3. BRA SUB_1 4. BSF PORTA, BIT3 (Forced NOP) 5. Instruction @ address SUB_1 TCY1 执行 1 取指 2 TCY2 执行 2 取指 3 TCY3 TCY4 TCY5 执行 3 取指 4 清除 (NOP) 取指 SUB_1 执行 SUB_1 除程序跳转指令外,所有的指令都是单周期指令。由于程序跳转指令将导致一条已取指令从流水线清除,与此同时 取新指令,然后执行指令,所以程序跳转指令需要两个周期。 DS41412F_CN 第 74 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 5.3.3 程序存储器中的指令 程序存储器按字节寻址。指令以 2 字节或 4 字节的形式 存储在程序存储器中。指令字的最低有效字节始终存储 在地址为偶数的程序存储单元中 (LSb = 0)。要保证 与指令边界对齐, PC 必须以 2 为单位递增,并且 LSb 总是读为 0 (见第 5.1.1 节 “ 程序计数器 ”)。 图 5-4 给出了指令字存储在程序存储器中的一个示例。 CALL 和 GOTO 指令在指令中嵌入了程序存储器的绝对地 址。由于指令总是按字边界存储,因而指令所包含的数 据为一个字地址。字地址会写入 PC<20:1>,用于访问程 序存储器中的目标字节。图 5-4 中的指令 2 给出了指令 GOTO 0006h 在程序存储器中的译码过程。程序跳转指 令也采取同样的方式对相对地址偏移量进行译码。存储在 跳转指令中的偏移量代表单字指令数, PC 将以此作为偏 移量跳转到指定的地址单元。第 25.0 节 “ 指令集汇总 ” 提 供了指令集的更多详细信息。 图 5-4: 程序存储器中的指令 程序存储器 字节单元 → LSb = 1 指令 1: MOVLW 055h 0Fh 指令 2: GOTO 0006h EFh F0h 指令 3: MOVFF 123h, 456h C1h F4h LSb = 0 55h 03h 00h 23h 56h 字地址 ↓ 000000h 000002h 000004h 000006h 000008h 00000Ah 00000Ch 00000Eh 000010h 000012h 000014h 5.3.4 双字指令 标准的 PIC18 指令集有 4 条双字指令:CALL、 MOVFF、 GOTO 和 LSFR。这些指令第二个字的高 4 位均为 1111 ; 其他 12 位是立即数数据,通常为一个数据存储器地址。 指令的高 4 位为 1111,用于指定一条特殊形式的 NOP 指令。指令顺序执行的正确顺序为:执行完第一个字之 后立即按顺序访问并使用第二个字中的数据。如果由于 某些原因跳过了第一个字而自动执行指令的第二个字, 那么将作为一条 NOP 指令执行。如果双字指令跟在修改 PC 的条件指令后,就有必要执行此操作。例 5-4 给出 了它的执行过程。 注: 关于扩展指令集中的双字指令信息,请参 见第 5.8 节 “PIC18 指令的执行和扩展指令 集 ”。 例 5-4: 双字指令 情形 1: 目标代码 源代码 0110 0110 0000 0000 TSTFSZ 1100 0001 0010 0011 MOVFF 1111 0100 0101 0110 0010 0100 0000 0000 ADDWF 情形 2: 目标代码 源代码 0110 0110 0000 0000 TSTFSZ 1100 0001 0010 0011 MOVFF 1111 0100 0101 0110 0010 0100 0000 0000 ADDWF REG1 REG1, REG2 REG3 ; is RAM location 0? ; No, skip this word ; Execute this word as a NOP ; continue code REG1 REG1, REG2 REG3 ; is RAM location 0? ; Yes, execute this word ; 2nd word of instruction ; continue code  2011-2013 Microchip Technology Inc. DS41412F_CN 第 75 页 PIC18(L)F2X/4XK22 5.4 数据存储器构成 注: 当使能了 PIC18 扩展指令集时,数据存储 器某些 方面 的操 作会 有所 改变。更多信 息,请参见第 5.7 节 “ 数据存储器和扩展 指令集 ”。 PIC18 器件中的数据存储器是用静态 RAM 实现的。在 数据存储器中,每个寄存器都有 12 位地址,允许数据存 储器实现为最大 4096 个字节。存储空间最多被分为 16 个 存储区,每个存储区包含 256 个字节。图5-5 至5-7 给出 了 PIC18(L)F2X/4XK22 器件的数据存储器构成。 数据存储器由特殊功能寄存器 (Special Function Register, SFR)和通用寄存器 (General Purpose Register, GPR)组成。 SFR 用于单片机和外设功能模 块的控制和状态指示,GPR 则用于用户应用程序的数据 存储和中间结果暂存。任何未实现的存储单元均读为 0。 这样的指令集和架构支持跨所有存储区的操作。可以通 过直接、间接或变址寻址模式访问整个数据存储器。本 章后面的部分将讨论寻址模式。 为确保能在一个周期中访问常用寄存器 (SFR 和某些 GPR), PIC18 器件实现了一个快速操作存储区。该存 储区是一个 256 字节的存储空间,它可实现对 SFR 和 GPR Bank 0 的低地址单元的快速访问,而无需使用存 储区选择寄存器 (Bank Select Register, BSR)。第 5.4.2 节 “ 快速操作存储区 ” 提供了对于快速操作 RAM 的详细说明。 5.4.1 存储区选择寄存器 (BSR) 容量较大的数据存储器需要高效的寻址机制,以便对所 有地址进行快速访问。理想状况下,这意味着不必为每 次读写操作提供完整地址。 PIC18 器件是使用 RAM 存 储区分区机制实现快速访问的。这种机制将存储空间分 成连续的 16 个 256 字节的存储区。根据不同的指令, 可以通过完整的 12 位地址,或通过 8 位的低字节地址 和 4 位存储区指针直接寻址每个存储单元。 PIC18 指令集中的大部分指令都使用存储区指针,也就 是存储区选择寄存器(BSR)。SFR 保存单元地址的高 4 位,而指令本身则包括单元地址的低 8 位。只使用 BSR 的低 4 位 (BSR<3:0>),不使用高 4 位;高 4 位 总是读为 0 且不能被写入。可以通过使用 MOVLB 指令 直接装入 BSR。 BSR 的值代表数据存储器中的存储区;指令中的 8 位指 向存储区中的存储单元,可以将它看作距离存储区下边 界的偏移量。图 5-5 至5-7 显示了 BSR 的值与数据存储器 中的存储区之间的关系。 由于最多可有 16 个寄存器共享同一个低位地址,用户 必须非常小心以确保在执行数据读或写之前选择了正确 的存储区。例如,当 BSR 为 0Fh 时将程序数据写入地 址为F9h的8位地址单元,这将导致程序计数器被复位。 当选择存储区时,只有已实现的存储区才可以读写。对 未实现的存储区进行的写操作将被忽略,而读这些存储 区会返回 0。虽然是这样,这些操作仍然会对 STATUS 寄存器起作用,就好像操作成功了一样。图5-5 至5-7 中 的 数 据存储 器映射指出了已实现的存储区。 在核心 PIC18 指令集中,只有 MOVFF 指令指定源寄存 器和目标寄存器的完整 12 位地址。该指令在执行时完 全忽略 BSR。所有其他指令仅包含作为操作数的低位地 址,而且必须使用 BSR 或快速操作存储区来寻址目标 寄存器。 DS41412F_CN 第 76 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 5-5: BSR<3:0> = 0000 = 0001 = 0010 = 0011 = 0100 = 0101 = 0110 = 0111 = 1000 = 1001 = 1010 = 1011 = 1100 = 1101 = 1110 = 1111 PIC18(L)F23K22 和 PIC18(L)F43K22 器件的数据存储器映射 数据存储器映射 当 a = 0 时: 将忽略 BSR 而使用快速操作存 00h Bank 0 FFh 00h Bank 1 快速操作 RAM GPR GPR 000h 05Fh 060h 0FFh 100h 储区。 前 96 个字节是通用 RAM(来自 Bank 0)。 剩余的 160 个字节是特殊功能寄 存器 (来自 Bank 15)。 FFh 00h Bank 2 1FFh 200h FFh 00h Bank 3 2FFh 300h 当 a = 1 时: BSR指定指令所使用的存储区。 FFh 00h Bank 4 3FFh 400h FFh Bank 5 00h 4FFh 500h FFh 00h Bank 6 FFh 00h Bank 7 FFh 00h Bank 8 5FFh 600h 6FFh 700h 7FFh 800h 快速操作存储区 快速操作 RAM 的 00h 低地址 5Fh 快速操作 RAM 的 60h 高地址(SFR) FFh FFh Bank 9 00h 未使用 读为 00h 8FFh 900h FFh 00h Bank 10 9FFh A00h FFh Bank 11 00h AFFh B00h FFh Bank 12 00h BFFh C00h FFh Bank 13 00h CFFh D00h FFh 00h Bank 14 FFh 00h Bank 15 FFh 未使用 SFR(1) SFR DFFh E00h EFFh F00h F37h F38h F5Fh F60h FFFh 注 1: SFR 还使用 F38h 至 F5Fh 的地址, 但它们不是快速操作 RAM 的一部 分。用户必须总是使用完整的地址 或装入正确的 BSR 值,以访问这 些寄存器。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 77 页 PIC18(L)F2X/4XK22 图 5-6: BSR<3:0> = 0000 = 0001 = 0010 = 0011 = 0100 = 0101 = 0110 = 0111 = 1000 = 1001 = 1010 = 1011 = 1100 = 1101 = 1110 = 1111 PIC18(L)F24K22 和 PIC18(L)F44K22 器件的数据存储器映射 数据存储器映射 00h Bank 0 FFh 00h Bank 1 FFh 00h Bank 2 FFh 00h Bank 3 FFh 00h Bank 4 FFh 00h Bank 5 FFh 00h Bank 6 FFh 00h Bank 7 FFh 00h Bank 8 FFh 00h Bank 9 FFh 00h Bank 10 FFh Bank 11 00h FFh Bank 12 00h FFh Bank 13 00h FFh 00h Bank 14 FFh 00h Bank 15 快速操作 RAM GPR GPR GPR 未使用 读为 00h 未使用 SFR(1) 000h 05Fh 060h 0FFh 100h 1FFh 200h 2FFh 300h 3FFh 400h 4FFh 500h 5FFh 600h 6FFh 700h 7FFh 800h 8FFh 900h 9FFh A00h AFFh B00h BFFh C00h CFFh D00h DFFh E00h EFFh F00h F37h F38h F5Fh F60h SFR FFh FFFh 当 a = 0 时: 将忽略 BSR 而使用快速操作存 储区。 前 96 个字节是通用 RAM(来自 Bank 0)。 剩余的 160 个字节是特殊功能 寄存器 (来自 Bank 15)。 当 a = 1 时: BSR指定指令所使用的存储区。 快速操作存储区 快速操作 RAM 的 00h 低地址 5Fh 快速操作 RAM 的 60h 高地址(SFR) FFh 注 1: SFR 还使用 F38h 至 F5Fh 的地址, 但它们不是快速操作 RAM 的一部 分。用户必须总是使用完整的地址 或装入正确的 BSR 值,以访问这 些寄存器。 DS41412F_CN 第 78 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 5-7: BSR<3:0> = 0000 = 0001 = 0010 = 0011 = 0100 = 0101 = 0110 = 0111 = 1000 = 1001 = 1010 = 1011 = 1100 = 1101 = 1110 = 1111 PIC18(L)F25K22 和 PIC18(L)F45K22 器件的数据存储器映射 数据存储器映射 00h Bank 0 FFh 00h Bank 1 FFh 00h Bank 2 FFh 00h Bank 3 FFh 00h Bank 4 FFh 00h Bank 5 FFh 00h Bank 6 FFh 00h Bank 7 FFh 00h Bank 8 FFh 00h Bank 9 FFh 00h Bank 10 FFh Bank 11 00h FFh Bank 12 00h FFh Bank 13 00h FFh 00h Bank 14 FFh 00h Bank 15 快速操作 RAM GPR GPR GPR GPR GPR GPR 未使用 读为 00h 未使用 SFR(1) 000h 05Fh 060h 0FFh 100h 1FFh 200h 2FFh 300h 3FFh 400h 4FFh 500h 5FFh 600h 6FFh 700h 7FFh 800h 8FFh 900h 9FFh A00h AFFh B00h BFFh C00h CFFh D00h DFFh E00h EFFh F00h F37h F38h F5Fh F60h SFR FFh FFFh 当 a = 0 时: 将忽略 BSR 而使用快速操作存 储区。 前 96 个字节是通用 RAM(来自 Bank 0)。 剩余的 160 个字节是特殊功能 寄存器 (来自 Bank 15)。 当 a = 1 时: BSR指定指令所使用的存储区。 快速操作存储区 快速操作 RAM 的 00h 低地址 5Fh 快速操作 RAM 的 60h 高地址(SFR) FFh 注 1: SFR 还使用 F38h 至 F5Fh 的地址, 但它们不是快速操作 RAM 的一部 分。用户必须总是使用完整的地址 或装入正确的 BSR 值,以访问这 些寄存器。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 79 页 PIC18(L)F2X/4XK22 图 5-8: BSR<3:0> = 0000 = 0001 = 0010 = 0011 = 0100 = 0101 = 0110 = 0111 = 1000 = 1001 = 1010 = 1011 = 1100 = 1101 = 1110 = 1111 PIC18(L)F26K22 和 PIC18(L)F46K22 器件的数据存储器映射 数据存储器映射 00h Bank 0 FFh 00h Bank 1 FFh 00h Bank 2 FFh 00h Bank 3 FFh 00h Bank 4 FFh 00h Bank 5 FFh 00h Bank 6 FFh 00h Bank 7 FFh 00h Bank 8 FFh 00h Bank 9 FFh 00h Bank 10 FFh Bank 11 00h FFh Bank 12 00h FFh Bank 13 00h FFh 00h Bank 14 FFh 00h Bank 15 快速操作 RAM GPR GPR GPR GPR GPR GPR GPR GPR GPR GPR GPR GPR GPR GPR GPR GPR SFR(1) 000h 05Fh 060h 0FFh 100h 1FFh 200h 2FFh 300h 3FFh 400h 4FFh 500h 5FFh 600h 6FFh 700h 7FFh 800h 8FFh 900h 9FFh A00h AFFh B00h BFFh C00h CFFh D00h DFFh E00h F00h F37h F38h F5Fh F60h SFR FFh FFFh 当 a = 0 时: 将忽略 BSR 而使用快速操作存 储区。 前 96 个字节是通用 RAM(来自 Bank 0)。 剩余的 160 个字节是特殊功能 寄存器 (来自 Bank 15)。 当 a = 1 时: BSR指定指令所使用的存储区。 快速操作存储区 快速操作 RAM 的 00h 低地址 5Fh 快速操作 RAM 的 60h 高地址(SFR) FFh 注 1: SFR 还使用 F38h 至 F5Fh 的地址, 但它们不是快速操作 RAM 的一部 分。用户必须总是使用完整的地址 或装入正确的 BSR 值,以访问这 些寄存器。 DS41412F_CN 第 80 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 5-9: 使用存储区选择寄存器 (直接寻址) 7 BSR(1) 数据存储器 0 000h 00h 0 0 00001 1 100h Bank 0 Bank 1 FFh 00h 存储区选择 (2) 200h FFh 00h Bank 2 300h FFh 00h Bank 3 至 Bank 13 来自操作码 (2) 7 0 1 1111 111 E00h FFh 00h Bank 14 F00h FFh 00h Bank 15 FFFh FFh 注 1: 指令的快速操作 RAM 位可用于强制忽略选定的存储区 (BSR<3:0>),直接寻址快速操作存储区的寄存器。 2: MOVFF 指令在指令中嵌入了完整的 12 位地址。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 81 页 PIC18(L)F2X/4XK22 5.4.2 快速操作存储区 使用 BSR 和嵌入的 8 位地址,用户可以寻址数据存储 器的整个空间,但这同时也意味着用户必须始终确保选 择了正确的存储区。否则,可能会从错误的单元读取数 据或将数据写入错误的单元。如果本来是向 GPR 进行 写操作,却将结果写入了 SFR,后果是非常严重的。但 是在每次对数据存储器进行读或写操作时验证和 / 或更 改 BSR 会严重影响工作效率。 为了提高访问大多数常用数据存储单元的效率,现为数 据存储器配置了快速操作存储区,这样可以允许用户访 问被映射的存储区而无需指定 BSR。快速操作存储区由 Bank 0 的前 96 个字节 (00h-5Fh)和 Bank 15 的后 160 个字节 (60h-FFh)组成。地址较低的部分被称为 “ 快速操作 RAM”,由 GPR 组成。地址较高的部分则被 映射为器件的SFR。这两个区域被连续地映射到快速操作 存储区并且可以用一个 8 位地址进行线性寻址(图5-5 至 5-7)。 包括快速操作 RAM 位 (指令中的 “a” 参数)的核心 PIC18 指令使用快速操作存储区。当 “a” 等于 1 时,指 令使用 BSR 和包含在操作码中的 8 位地址对数据存储 器寻址。当 “a” 为 0 时,强制指令使用快速操作存储区 地址映射,此时完全忽略 BSR 的当前值。 此 “ 强制 ” 寻址模式可使指令在一个周期内对数据地址 进行操作,而不需要首先更新 BSR。这意味着用户可以 更高效地对 8 位地址为 60h 或以上的 SFR 进行取值和 操作。地址为 60h 以下的快速操作 RAM 非常适合于存 储那些用户可能需要快速访问的数据值,如直接计算结 果或常用程序变量。快速操作 RAM 也可实现更加快速 和高效的现场保护和变量切换代码。 使能扩展指令集 (XINST 配置位 = 1)时的快速操作存 储区的映射略有不同。在第 5.7.3 节 “ 在立即数变址模式 下映射快速操作存储区 ” 中对此进行了更详细的讨论。 5.4.3 通用寄存器文件 PIC18 器件在 GPR 区中划分了一部分存储区。这部分 存储区为数据 RAM,所有指令均可访问它。 GPR 区从 Bank 0 的底部(地址 000h)开始向上延伸直到 SFR 区 的底部。上电复位不会初始化 GPR,并且其他复位也不 会改变其内容。 5.4.4 特殊功能寄存器 特殊功能寄存器 (SFR)是 CPU 和外设模块用来控制 所需器件操作的寄存器。这些寄存器以静态 RAM 的形 式实现。SFR 从数据存储器的顶部(FFFh)开始向下, 它占用了 Bank 15 的高地址部分空间(F38h 至 FFFh)。 表 5-1 和表 5-2 列出了这些寄存器。 可以将 SFR 归类为两组:与 “ 内核 ” 器件功能 (ALU、 复位和中断)相关的寄存器和与外设功能相关的寄存 器。复位和中断寄存器在相应章节中进行讨论,本章后 面的部分将对 ALU 的 STATUS 寄存器进行说明。与外 设操作相关的寄存器将在该外设的章节中进行说明。 SFR 通常分布在功能受其控制的外设中。未使用的 SFR 单元是未实现的,读为 0。 DS41412F_CN 第 82 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 5-1: PIC18(L)F2X/4XK22 器件的特殊功能寄存器映射 地址 名称 FFFh TOSU FFEh FFDh FFCh FFBh FFAh TOSH TOSL STKPTR PCLATU PCLATH FF9h PCL FF8h TBLPTRU FF7h TBLPTRH FF6h TBLPTRL FF5h FF4h FF3h FF2h TABLAT PRODH PRODL INTCON FF1h INTCON2 FF0h INTCON3 FEFh INDF0(1) FEEh POSTINC0(1) FEDh POSTDEC0(1) FECh PREINC0(1) FEBh PLUSW0(1) FEAh FSR0H FE9h FSR0L FE8h WREG FE7h INDF1(1) FE6h POSTINC1(1) FE5h POSTDEC1(1) FE4h PREINC1(1) FE3h PLUSW1(1) FE2h FSR1H FE1h FSR1L FE0h BSR FDFh INDF2(1) FDEh POSTINC2(1) FDDh POSTDEC2(1) FDCh PREINC2(1) FDBh PLUSW2(1) FDAh FSR2H FD9h FSR2L FD8h STATUS 地址 名称 FD7h TMR0H FD6h TMR0L FD5h FD4h T0CON —(2) FD3h OSCCON FD2h OSCCON2 FD1h WDTCON FD0h RCON FCFh TMR1H FCEh TMR1L FCDh T1CON FCCh T1GCON FCBh SSP1CON3 FCAh SSP1MSK FC9h SSP1BUF FC8h SSP1ADD FC7h SSP1STAT FC6h SSP1CON1 FC5h SSP1CON2 FC4h ADRESH FC3h ADRESL FC2h ADCON0 FC1h ADCON1 FC0h ADCON2 FBFh CCPR1H FBEh CCPR1L FBDh CCP1CON FBCh TMR2 FBBh PR2 FBAh T2CON FB9h PSTR1CON FB8h BAUDCON1 FB7h PWM1CON FB6h ECCP1AS FB5h —(2) FB4h T3GCON FB3h TMR3H FB2h TMR3L FB1h T3CON FB0h SPBRGH1 地址 名称 FAFh SPBRG1 FAEh FADh FACh FABh FAAh RCREG1 TXREG1 TXSTA1 RCSTA1 EEADRH(4) FA9h EEADR FA8h EEDATA FA7h EECON2(1) FA6h EECON1 FA5h FA4h FA3h FA2h IPR3 PIR3 PIE3 IPR2 FA1h PIR2 FA0h PIE2 F9Fh IPR1 F9Eh PIR1 F9Dh PIE1 F9Ch F9Bh F9Ah F99h F98h F97h HLVDCON OSCTUNE —(2) —(2) —(2) —(2) F96h F95h TRISE TRISD(3) F94h F93h F92h F91h F90h F8Fh F8Eh F8Dh F8Ch F8Bh F8Ah F89h F88h TRISC TRISB TRISA —(2) —(2) —(2) —(2) LATE(3) LATD(3) LATC LATB LATA —(2) 地址 F87h F86h F85h F84h F83h F82h F81h F80h F7Fh F7Eh F7Dh F7Ch F7Bh F7Ah F79h F78h F77h F76h F75h F74h F73h F72h F71h F70h F6Fh F6Eh F6Dh F6Ch F6Bh F6Ah F69h F68h F67h F66h F65h F64h F63h F62h F61h F60h 名称 —(2) —(2) —(2) PORTE PORTD(3) PORTC PORTB PORTA IPR5 PIR5 PIE5 IPR4 PIR4 PIE4 CM1CON0 CM2CON0 CM2CON1 SPBRGH2 SPBRG2 RCREG2 TXREG2 TXSTA2 RCSTA2 BAUDCON2 SSP2BUF SSP2ADD SSP2STAT SSP2CON1 SSP2CON2 SSP2MSK SSP2CON3 CCPR2H CCPR2L CCP2CON PWM2CON ECCP2AS PSTR2CON IOCB WPUB SLRCON 注 1: 这不是实际存在的寄存器。 2: 未实现的寄存器,读为 0。 3: 仅限 PIC18(L)F4XK22 器件。 4: 仅限 PIC18(L)F26K22 和 PIC18(L)F46K22 器件。 地址 F5Fh F5Eh F5Dh F5Ch F5Bh F5Ah F59h F58h F57h F56h F55h F54h F53h F52h F51h F50h F4Fh F4Eh F4Dh F4Ch F4Bh F4Ah F49h F48h F47h F46h F45h F44h F43h F42h F41h F40h F3Fh F3Eh F3Dh F3Ch F3Bh F3Ah F39h F38h 名称 CCPR3H CCPR3L CCP3CON PWM3CON ECCP3AS PSTR3CON CCPR4H CCPR4L CCP4CON CCPR5H CCPR5L CCP5CON TMR4 PR4 T4CON TMR5H TMR5L T5CON T5GCON TMR6 PR6 T6CON CCPTMRS0 CCPTMRS1 SRCON0 SRCON1 CTMUCONH CTMUCONL CTMUICON VREFCON0 VREFCON1 VREFCON2 PMD0 PMD1 PMD2 ANSELE ANSELD ANSELC ANSELB ANSELA  2011-2013 Microchip Technology Inc. DS41412F_CN 第 83 页 PIC18(L)F2X/4XK22 表 5-2: PIC18(L)F2X/4XK22 器件的寄存器文件汇总 地址 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 FFFh FFEh FFDh FFCh TOSU TOSH TOSL STKPTR — — STKFUL STKUNF — 栈顶最高字节 (TOS<20:16>) 栈顶高字节 (TOS<15:8>) 栈顶低字节 (TOS<7:0>) — STKPTR<4:0> FFBh FFAh FF9h FF8h FF7h FF6h FF5h FF4h FF3h FF2h PCLATU PCLATH PCL TBLPTRU TBLPTRH TBLPTRL TABLAT PRODH PRODL INTCON — — — — GIE/GIEH PEIE/GIEL — PC<20:16> 的保持寄存器 PC<15:8> 的保持寄存器 PC<7:0> 的保持寄存器 程序存储器表指针最高字节 (TBLPTR<21:16>) 程序存储器表指针高字节 (TBLPTR<15:8>) 程序存储器表指针低字节 (TBLPTR<7:0>) 程序存储器表锁存器 乘积寄存器的高字节 乘积寄存器的低字节 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF FF1h INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP FF0h INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF FEFh FEEh FEDh FECh FEBh FEAh FE9h FE8h FE7h FE6h FE5h FE4h FE3h FE2h FE1h FE0h FDFh FDEh FDDh FDCh FDBh FDAh FD9h FD8h INDF0 POSTINC0 POSTDEC0 PREINC0 PLUSW0 FSR0H FSR0L WREG INDF1 POSTINC1 POSTDEC1 PREINC1 PLUSW1 FSR1H FSR1L BSR INDF2 POSTINC2 POSTDEC2 PREINC2 PLUSW2 FSR2H FSR2L STATUS 使用 FSR0 的内容寻址数据存储器 ——FSR0 的值不变 (不是实际存在的寄存器) 使用 FSR0 的内容寻址数据存储器 ——FSR0 的值后递增 (不是实际存在的寄存器) 使用 FSR0 的内容寻址数据存储器 ——FSR0 的值后递减 (不是实际存在的寄存器) 使用 FSR0 的内容寻址数据存储器 ——FSR0 的值预递增 (不是实际存在的寄存器) 使用 FSR0 的内容寻址数据存储器 ——FSR0 的值预递增 (不是实际存在的寄存器), FSR0 偏移量的值由 W 寄存器提供 — — — — 间接数据存储器地址指针 0 的高字节 间接数据存储器地址指针 0 的低字节 工作寄存器 使用 FSR1 的内容寻址数据存储器 ——FSR1 的值不变 (不是实际存在的寄存器) 使用 FSR1 的内容寻址数据存储器 ——FSR1 的值后递增 (不是实际存在的寄存器) 使用 FSR1 的内容寻址数据存储器 ——FSR1 的值后递减 (不是实际存在的寄存器) 使用 FSR1 的内容寻址数据存储器 ——FSR1 的值预递增 (不是实际存在的寄存器) 使用 FSR1 的内容寻址数据存储器 ——FSR1 的值预递增 (不是实际存在的寄存器), FSR1 偏移量的值由 W 寄存器提供 — — — — 间接数据存储器地址指针 1 的高字节 间接数据存储器地址指针 1 的低字节 — — — — 存储区选择寄存器 使用 FSR2 的内容寻址数据存储器 ——FSR2 的值不变 (不是实际存在的寄存器) 使用 FSR2 的内容寻址数据存储器 ——FSR2 的值后递增 (不是实际存在的寄存器) 使用 FSR2 的内容寻址数据存储器 ——FSR2 的值后递减 (不是实际存在的寄存器) 使用 FSR2 的内容寻址数据存储器 ——FSR2 的值预递增 (不是实际存在的寄存器) 使用 FSR2 的内容寻址数据存储器 ——FSR2 的值预递增 (不是实际存在的寄存器), FSR2 偏移量的值由 W 寄存器提供 — — — — 间接数据存储器地址指针 2 的高字节 间接数据存储器地址指针 2 的低字节 — — — N OV Z DC C FD7h FD6h FD5h TMR0H TMR0L T0CON TMR0ON T08BIT T0CS Timer0 寄存器的高字节 Timer0 寄存器的低字节 T0SE PSA T0PS<2:0> FD3h OSCCON IDLEN IRCF<2:0> OSTS HFIOFS SCS<1:0> FD2h OSCCON2 PLLRDY SOSCRUN — MFIOSEL SOSCGO PRISD MFIOFS LFIOFS 图注: 注 1: 2: 3: 4: x = 未知, u = 不变, — = 未实现, q = 值取决于具体条件 仅限 PIC18(L)F4XK22 器件。 仅限 PIC18(L)F2XK22 器件。 仅限 PIC18(L)F23/24K22 和 PIC18(L)F43/44K22 器件。 仅限 PIC18(L)F26K22 和 PIC18(L)F46K22 器件。 POR/BOR 时的值 ---0 0000 0000 0000 0000 0000 00-0 0000 ---0 0000 0000 0000 0000 0000 --00 0000 0000 0000 0000 0000 0000 0000 xxxx xxxx xxxx xxxx 0000 000x 1111 -1-1 11-0 0-00 ---- ------- ------- ------- ------- ---- ---- 0000 xxxx xxxx xxxx xxxx ---- ------- ------- ------- ------- ---- ---- 0000 xxxx xxxx ---- 0000 ---- ------- ------- ------- ------- ---- ---- 0000 xxxx xxxx ---x xxxx 0000 0000 xxxx xxxx 1111 1111 0011 q000 00-0 01x0 DS41412F_CN 第 84 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 5-2: PIC18(L)F2X/4XK22 器件的寄存器文件汇总 (续) 地址 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 FD1h WDTCON — — — — — — — SWDTEN FD0h RCON IPEN SBOREN — RI TO PD POR BOR FCFh TMR1H 16 位 TMR1 寄存器高字节的保持寄存器 FCEh TMR1L 16 位 TMR1 寄存器的低字节 FCDh T1CON TMR1CS<1:0> T1CKPS<1:0> T1SOSCEN T1SYNC T1RD16 TMR1ON FCCh T1GCON TMR1GE T1GPOL T1GTM T1GSPM T1GGO/ DONE T1GVAL T1GSS<1:0> FCBh SSP1CON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN FCAh SSP1MSK SSP1 掩码寄存器位 FC9h SSP1BUF SSP1 接收缓冲 / 发送寄存器 FC8h SSP1ADD I2C 从模式下的 SSP1 地址寄存器。 I2C 主模式下的 SSP1 波特率重载寄存器 FC7h SSP1STAT SMP CKE D/A P S R/W UA BF FC6h SSP1CON1 WCOL SSPOV SSPEN CKP SSPM<3:0> FC5h SSP1CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN FC4h FC3h FC2h ADRESH ADRESL ADCON0 A/D 结果的高字节 A/D 结果的低字节 CHS<4:0> GO/DONE ADON FC1h ADCON1 TRIGSEL — — — PVCFG<1:0> NVCFG<1:0> FC0h ADCON2 ADFM ACQT<2:0> ADCS<2:0> FBFh FBEh FBDh CCPR1H CCPR1L CCP1CON P1M<1:0> 捕捉 / 比较 /PWM 寄存器 1 的高字节 捕捉 / 比较 /PWM 寄存器 1 的低字节 DC1B<1:0> CCP1M<3:0> FBCh FBBh FBAh TMR2 PR2 T2CON Timer2 寄存器 Timer2 周期寄存器 T2OUTPS<3:0> TMR2ON T2CKPS<1:0> FB9h FB8h FB7h FB6h FB4h PSTR1CON BAUDCON1 PWM1CON ECCP1AS T3GCON — ABDOVF P1RSEN CCP1ASE TMR3GE — RCIDL T3GPOL — DTRXP STR1SYNC CKTXP CCP1AS<2:0> T3GTM T3GSPM STR1D STR1C BRG16 — P1DC<6:0> PSS1AC<1:0> T3GGO/ DONE T3GVAL STR1B WUE STR1A ABDEN PSS1BD<1:0> T3GSS<1:0> FB3h TMR3H 16 位 TMR3 寄存器高字节的保持寄存器 FB2h TMR3L 16 位 TMR3 寄存器的低字节 FB1h T3CON TMR3CS<1:0> T3CKPS<1:0> T3SOSCEN T3SYNC T3RD16 TMR3ON FB0h SPBRGH1 EUSART1 波特率发生器的高字节 FAFh SPBRG1 EUSART1 波特率发生器的低字节 FAEh RCREG1 EUSART1 接收寄存器 FADh TXREG1 EUSART1 发送寄存器 FACh TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D FABh FAAh RCSTA1 EEADRH(5) SPEN — RX9 SREN CREN ADDEN FERR OERR RX9D — — — — — EEADR<9:8> FA9h EEADR EEADR<7:0> FA8h EEDATA EEPROM 数据寄存器 FA7h EECON2 EEPROM 控制寄存器 2 (不是实际存在的寄存器) FA6h EECON1 EEPGD CFGS — FREE WRERR WREN WR RD FA5h IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP FA4h PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF FA3h PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE 图注: 注 1: 2: 3: 4: x = 未知, u = 不变, — = 未实现, q = 值取决于具体条件 仅限 PIC18(L)F4XK22 器件。 仅限 PIC18(L)F2XK22 器件。 仅限 PIC18(L)F23/24K22 和 PIC18(L)F43/44K22 器件。 仅限 PIC18(L)F26K22 和 PIC18(L)F46K22 器件。 POR/BOR 时的值 ---- ---0 01-1 1100 xxxx xxxx xxxx xxxx 0000 0000 0000 xx00 0000 0000 1111 1111 xxxx xxxx 0000 0000 0000 0000 0000 0000 0000 0000 xxxx xxxx xxxx xxxx --00 0000 0--- 0000 0-00 0000 xxxx xxxx xxxx xxxx 0000 0000 0000 0000 1111 1111 -000 0000 ---0 0001 0100 0-00 0000 0000 0000 0000 0000 0x00 xxxx xxxx xxxx xxxx 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 000x ---- --00 0000 0000 0000 0000 ---- --00 xx-0 x000 0000 0000 0000 0000 0000 0000  2011-2013 Microchip Technology Inc. DS41412F_CN 第 85 页 PIC18(L)F2X/4XK22 表 5-2: PIC18(L)F2X/4XK22 器件的寄存器文件汇总 (续) 地址 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 FA2h IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP FA1h PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IF FA0h PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IE F9Fh IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP F9Eh PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF F9Dh PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE F9Ch HLVDCON VDIRMAG BGVST IRVST HLVDEN HLVDL<3:0> F9Bh F96h F95h OSCTUNE TRISE TRISD(1) INTSRC WPUE3 TRISD7 PLLEN — TRISD6 — TRISD5 — TRISD4 TUN<5:0> — TRISE2(1) TRISD3 TRISD2 TRISE1(1) TRISD1 TRISE0(1) TRISD0 F94h TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 F93h TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 F92h F8Dh F8Ch TRISA LATE(1) LATD(1) TRISA7 — LATD7 TRISA6 — LATD6 TRISA5 — LATD5 TRISA4 — LATD4 TRISA3 — LATD3 TRISA2 LATE2 LATD2 TRISA1 LATE1 LATD1 TRISA0 LATE0 LATD0 F8Bh LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 F8Ah LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 F89h F84h F83h LATA PORTE(2) PORTE(1) PORTD(1) LATA7 — — RD7 LATA6 — — RD6 LATA5 — — RD5 LATA4 — — RD4 LATA3 RE3 RE3 RD3 LATA2 — RE2 RD2 LATA1 — RE1 RD1 LATA0 — RE0 RD0 F82h PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 F81h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 F80h PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 F7Fh IPR5 — — — — — TMR6IP TMR5IP TMR4IP F7Eh PIR5 — — — — — TMR6IF TMR5IF TMR4IF F7Dh PIE5 — — — — — TMR6IE TMR5IE TMR4IE F7Ch IPR4 — — — — — CCP5IP CCP4IP CCP3IP F7Bh PIR4 — — — — — CCP5IF CCP4IF CCP3IF F7Ah PIE4 — — — — — CCP5IE CCP4IE CCP3IE F79h CM1CON0 C1ON C1OUT C1OE C1POL C1SP C1R C1CH<1:0> F78h CM2CON0 C2ON C2OUT C2OE C2POL C2SP C2R C2CH<1:0> F77h CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL C1HYS C2HYS C1SYNC C2SYNC F76h SPBRGH2 EUSART2 波特率发生器的高字节 F75h SPBRG2 EUSART2 波特率发生器的低字节 F74h RCREG2 EUSART2 接收寄存器 F73h TXREG2 EUSART2 发送寄存器 F72h TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D F71h RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D F70h BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN F6Fh SSP2BUF SSP2 接收缓冲 / 发送寄存器 F6Eh SSP2ADD I2C 从模式下的 SSP2 地址寄存器。 I2C 主模式下的 SSP2 波特率重载寄存器 F6Dh SSP2STAT SMP CKE D/A P S R/W UA BF F6Ch SSP2CON1 WCOL SSPOV SSPEN CKP SSPM<3:0> F6Bh SSP2CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN F6Ah F69h SSP2MSK SSP2CON3 ACKTIM PCIE SCIE SSP2 掩码寄存器位 BOEN SDAHT SBCDE AHEN DHEN 图注: 注 1: 2: 3: 4: x = 未知, u = 不变, — = 未实现, q = 值取决于具体条件 仅限 PIC18(L)F4XK22 器件。 仅限 PIC18(L)F2XK22 器件。 仅限 PIC18(L)F23/24K22 和 PIC18(L)F43/44K22 器件。 仅限 PIC18(L)F26K22 和 PIC18(L)F46K22 器件。 POR/BOR 时的值 1111 1111 0000 0000 0000 0000 -111 1111 -000 0000 -000 0000 0000 0000 00xx xxxx 1--- -111 1111 1111 1111 1111 1111 1111 1111 1111 ---- -xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx ---- x------ x000 0000 0000 0000 00xx xxx0 0000 xx0x 0000 ---- -111 ---- -111 ---- -000 ---- -000 ---- -000 ---- -000 0000 1000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 000x 01x0 0-00 xxxx xxxx 0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 0000 0000 DS41412F_CN 第 86 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 5-2: PIC18(L)F2X/4XK22 器件的寄存器文件汇总 (续) 地址 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR/BOR 时的值 F68h F67h F66h CCPR2H CCPR2L CCP2CON P2M<1:0> 捕捉 / 比较 /PWM 寄存器 2 的高字节 捕捉 / 比较 /PWM 寄存器 2 的低字节 DC2B<1:0> CCP2M<3:0> F65h PWM2CON P2RSEN P2DC<6:0> F64h ECCP2AS CCP2ASE CCP2AS<2:0> PSS2AC<1:0> PSS2BD<1:0> F63h PSTR2CON — — — STR2SYNC STR2D STR2C STR2B STR2A F62h IOCB IOCB7 IOCB6 IOCB5 IOCB4 — — — — F61h F60h WPUB SLRCON(2) SLRCON(1) WPUB7 — — WPUB6 — — WPUB5 — — WPUB4 — SLRE WPUB3 — SLRD WPUB2 SLRC SLRC WPUB1 SLRB SLRB WPUB0 SLRA SLRA F5Fh F5Eh F5Dh CCPR3H CCPR3L CCP3CON P3M<1:0> 捕捉 / 比较 /PWM 寄存器 3 的高字节 捕捉 / 比较 /PWM 寄存器 3 的低字节 DC3B<1:0> CCP3M<3:0> F5Ch PWM3CON P3RSEN P3DC<6:0> F5Bh ECCP3AS CCP3ASE CCP3AS<2:0> PSS3AC<1:0> PSS3BD<1:0> F5Ah PSTR3CON — — — STR3SYNC STR3D STR3C STR3B STR3A F59h CCPR4H F58h CCPR4L F57h CCP4CON — — 捕捉 / 比较 /PWM 寄存器 4 的高字节 捕捉 / 比较 /PWM 寄存器 4 的低字节 DC4B<1:0> CCP4M<3:0> F56h CCPR5H F55h CCPR5L F54h CCP5CON — — 捕捉 / 比较 /PWM 寄存器 5 的高字节 捕捉 / 比较 /PWM 寄存器 5 的低字节 DC5B<1:0> CCP5M<3:0> F53h TMR4 F52h PR4 F51h T4CON — Timer4 寄存器 Timer4 周期寄存器 T4OUTPS<3:0> TMR4ON T4CKPS<1:0> F50h TMR5H 16 位 TMR5 寄存器高字节的保持寄存器 F4Fh TMR5L 16 位 TMR5 寄存器的低字节 F4Eh T5CON TMR5CS<1:0> T5CKPS<1:0> T5SOSCEN T5SYNC T5RD16 TMR5ON F4Dh T5GCON TMR5GE T5GPOL T5GTM T5GSPM T5GGO/ DONE T5GVAL T5GSS<1:0> F4Ch TMR6 F4Bh PR6 F4Ah T6CON — Timer6 寄存器 Timer6 周期寄存器 T6OUTPS<3:0> TMR6ON T6CKPS<1:0> F49h CCPTMRS0 C3TSEL<1:0> — C2TSEL<1:0> — F48h CCPTMRS1 — — — — C5TSEL<1:0> C1TSEL<1:0> C4TSEL<1:0> F47h SRCON0 SRLEN SRCLK<2:0> SRQEN SRNQEN SRPS SRPR F46h SRCON1 SRSPE SRSCKE SRSC2E SRSC1E SRRPE SRRCKE SRRC2E SRRC1E F45h CTMUCONH CTMUEN — CTMUSIDL TGEN EDGEN EDGSEQEN IDISSEN CTTRIG F44h CTMUCONL EDG2POL EDG2SEL<1:0> EDG1POL EDG1SEL<1:0> EDG2STAT EDG1STAT F43h CTMUICON ITRIM<5:0> IRNG<1:0> F42h VREFCON0 FVREN FVRST FVRS<1:0> — — — — F41h VREFCON1 DACEN DACLPS DACOE — DACPSS<1:0> — DACNSS F40h VREFCON2 — — — DACR<4:0> F3Fh PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD F3Eh PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD CCP2MD CCP1MD F3Dh F3Ch F3Bh PMD2 ANSELE(1) ANSELD(1) — — ANSD7 — — ANSD6 — — ANSD5 — — ANSD4 CTMUMD — ANSD3 CMP2MD ANSE2 ANSD2 CMP1MD ANSE1 ANSD1 ADCMD ANSE0 ANSD0 图注: 注 1: 2: 3: 4: x = 未知, u = 不变, — = 未实现, q = 值取决于具体条件 仅限 PIC18(L)F4XK22 器件。 仅限 PIC18(L)F2XK22 器件。 仅限 PIC18(L)F23/24K22 和 PIC18(L)F43/44K22 器件。 仅限 PIC18(L)F26K22 和 PIC18(L)F46K22 器件。 xxxx xxxx xxxx xxxx 0000 0000 0000 0000 0000 0000 ---0 0001 1111 ---1111 1111 ---- -111 ---1 1111 xxxx xxxx xxxx xxxx 0000 0000 0000 0000 0000 0000 ---0 0001 xxxx xxxx xxxx xxxx --00 0000 xxxx xxxx xxxx xxxx --00 0000 0000 0000 1111 1111 -000 0000 0000 0000 0000 0000 0000 0000 0000 0x00 0000 0000 1111 1111 -000 0000 00-0 0-00 ---- 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 ---000- 00-0 ---0 0000 0000 0000 00-0 0000 ---- 0000 ---- -111 1111 1111  2011-2013 Microchip Technology Inc. DS41412F_CN 第 87 页 PIC18(L)F2X/4XK22 表 5-2: PIC18(L)F2X/4XK22 器件的寄存器文件汇总 (续) 地址 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 F3Ah ANSELC ANSC7 ANSC6 ANSC5 ANSC4 F39h ANSELB — — ANSB5 ANSB4 F38h ANSELA — — ANSA5 — 图注: 注 1: 2: 3: 4: x = 未知, u = 不变, — = 未实现, q = 值取决于具体条件 仅限 PIC18(L)F4XK22 器件。 仅限 PIC18(L)F2XK22 器件。 仅限 PIC18(L)F23/24K22 和 PIC18(L)F43/44K22 器件。 仅限 PIC18(L)F26K22 和 PIC18(L)F46K22 器件。 ANSC3 ANSB3 ANSA3 ANSC2 ANSB2 ANSA2 Bit 1 — ANSB1 ANSA1 Bit 0 — ANSB0 ANSA0 POR/BOR 时的值 1111 11---11 1111 --1- 1111 DS41412F_CN 第 88 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 5.4.5 STATUS 寄存器 如寄存器 5-2 所示,STATUS 寄存器包含 ALU 的算术运 算状态。和任何其他 SFR 一样,它也可以作为任何指令 的操作数。 如果一条影响 Z、DC、C、OV 或 N 位的指令以 STATUS 寄存器作为目标寄存器,将不会直接写入结果,而是根 据指令的执行更新 STATUS 寄存器。因此,当执行一条 将 STATUS 寄存器作为目标寄存器的指令后,运行结果 可能与预想的不同。例如, CLRF STATUS 将 Z 位置 1 并保持其余状态位不变 (000u u1uu)。 5.5 寄存器定义:状态 寄存器 5-2: STATUS:状态寄存器 U-0 — bit 7 U-0 U-0 R/W-x — — N 因此,建议仅使用 BCF、BSF、SWAPF、MOVFF 和 MOVWF 指令来改变 STATUS 寄存器,因为这些指令不会影响 STATUS 寄存器中的 Z、 C、 DC、 OV 或 N 位。 关于其他不会影响状态位的指令,请参见第 25.2 节 “ 扩展 指令集 ” 和表 25-3 中的指令集汇总。 注: 在减法运算中,C 和 DC 位分别作为借位位 和半借位位。 R/W-x OV R/W-x Z R/W-x DC(1) R/W-x C(1) bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-5 bit 4 bit 3 bit 2 bit 1 bit 0 未实现:读为 0 N:负标志位 此位用于有符号的算术运算 (以二进制补码方式进行)。它可以表示结果是否为负 (ALU MSB = 1)。 1 = 结果为负 0 = 结果为正 OV:溢出标志位 此位用于有符号的算术运算(以二进制补码方式进行)。它表明运算结果溢出了 7 位二进制数的范围, 溢出导致符号位 (bit 7)发生改变。 1 = 有符号算术运算中发生溢出 (本次算术运算) 0 = 未发生溢出 Z:全零标志位 1 = 算术运算或逻辑运算的结果为零 0 = 算术运算或逻辑运算的结果不为零 DC:半进位 / 借位位 (ADDWF、 ADDLW、 SUBLW 和 SUBWF 指令) (1) 1 = 结果的第 4 个低位发生了进位 0 = 结果的第 4 个低位未发生进位 C:进位 / 借位位 (ADDWF、 ADDLW、 SUBLW 和 SUBWF 指令) (1) 1 = 结果的最高有效位发生了进位 0 = 结果的最高有效位未发生进位 注 1: 对于借位,极性是相反的。减法是通过加上第二个操作数的二进制补码来执行的。对于移位指令 (RRF 和 RLF),此位来自源寄存器的最高位或最低位。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 89 页 PIC18(L)F2X/4XK22 5.6 数据寻址模式 注: 当使能 PIC18 扩展指令集时,核心 PIC18 指令集中某些指令的执行方式会发生改 变。更多信息,请参见第 5.7 节 “ 数据存储 器和扩展指令集 ”。 程序存储器只能用一种方式寻址 (通过程序计数器), 而数据存储空间可用多种方式寻址。大部分指令的寻址 模式都是固定的。其他指令可能使用最多三种模式,根 据它们所使用的操作数和是否使能了扩展指令集而定。 这些寻址模式为: • 固有寻址 • 立即数寻址 • 直接寻址 • 间接寻址 当使能了扩展指令集(XINST 配置位 = 1)时,还可使用 另外一种寻址模式,即立即数变址寻址模式。第 5.7.1 节 “ 使用立即数偏移量进行变址寻址 ” 将更详细讨论它的操 作。 5.6.1 固有寻址和立即数寻址 很多 PIC18 控制指令根本不需要任何参数;执行这些指 令要么对整个器件造成影响,要么仅隐式地针对一个寄 存器进行操作。此寻址模式就是固有寻址。例如指令 SLEEP、 RESET 和 DAW。 其他指令的工作方式与此类似,但需要操作码中有其他 显式的参数。由于需要一些立即数作为参数,这种寻址 模式被称为立即数寻址。例如 ADDLW 和 MOVLW,它们 分别向 W 寄存器加或移入立即数值。其他立即数寻址指 令,例如 CALL 和 GOTO,它们包括一个 20 位的程序存 储器地址。 5.6.2 直接寻址 直接寻址在操作码中指定操作的全部或部分源地址和 / 或目标地址。这些选项由指令附带的参数指定。 在核心 PIC18 指令集中,针对位和针对字节的指令默认 情况下使用直接寻址。所有这些指令都包含某个 8 位的 立即数地址作为其最低有效字节。此地址指定数据RAM 的某个存储区中寄存器的地址 (第 5.4.3 节 “ 通用寄存 器文件 ”)或快速操作存储区 (第 5.4.2 节 “ 快速操作 存储区 ”)中作为指令数据源的单元地址。 快速操作 RAM 位 “a” 决定地址的解析方式。当 “a” 为 1 时, BSR (第 5.4.1 节 “ 存储区选择寄存器 (BSR) ”) 的内容将和指令中的直接地址一起用于确定寄存器的完 整 12 位地址。当 “a” 为 0 时,此直接地址将被解析为快 速操作存储区中的一个寄存器。使用快速操作 RAM 的 寻址模式有时也被称为直接强制寻址模式。 有几条指令,例如 MOVFF,在操作码中包含完整的 12 位 地址(源地址或目标地址)。在这些情况下,BSR 被完 全忽略。 保存操作结果的目标寄存器由目标位 “d” 确定。当 “d” 为 1 时,结果被存回源寄存器并覆盖原来的内容。当 “d” 为 0 时,结果被存储在 W 寄存器中。没有 “d” 参数的指令 的目标寄存器隐含在指令中,这些指令的目标寄存器是 正在操作的目标寄存器或 W 寄存器。 5.6.3 间接寻址 间接寻址允许用户访问数据存储器中的单元而无需在指 令中给出一个固定的地址。这种寻址模式是通过使用文 件选择寄存器 (File Select Register, FSR)作为指向 被读写单元的指针实现的。由于 FSR 本身作为特殊文件 寄存器位于 RAM 中,因此也可在程序控制中对其直接 操作。这使得 FSR 对于在数据存储器中实现诸如表和数 组等数据结构非常有用。 也可以使用间接文件操作数 (Indirect File Operand, INDF)进行寄存器间接寻址。这种操作允许自动递增、 递减或偏移指针,从而自动操作指针的值。它通过使用 循环提高代码执行效率,如例 5-5 所示的清零整个 RAM 存储区的操作。 例 5-5: NEXT LFSR CLRF BTFSS BRA CONTINUE 如何使用间接寻址清零 RAM (BANK 1) FSR0, 100h ; POSTINC0 ; Clear INDF ; register then ; inc pointer FSR0H, 1 ; All done with ; Bank1? NEXT ; NO, clear next ; YES, continue DS41412F_CN 第 90 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 5.6.3.1 FSR 寄存器和 INDF 操作数 间接寻址的核心是三组寄存器:FSR0、FSR1 和 FSR2。 每组寄存器都含有一对 8 位寄存器:FSRnH 和 FSRnL。 每对 FSR 保存一个 12 位值,因此 FSRnH 寄存器的高 4 位未使用。 12 位 FSR 值可以线性寻址数据存储器的 整个空间。因此,FSR 寄存器对被用作数据存储器的地 址指针。 间 接 寻 址 是 通 过 一 组 间 接 文 件 操 作 数 (INDF0 至 INDF2)完成的。这些操作数可被看作 “ 虚拟 ” 寄存器: 它们被映射到 SFR 空间而不是物理实现的。对特定的 INDF 寄存器执行读或写操作实际上访问的是与之对应 的 一 对 FSR 寄 存 器。例 如,读 INDF1 就是读 FSR1H:FSR1L 指向地址中的数据。使用 INDF 寄存器 作为操作数的指令实际上使用相应FSR的内容作为指向 指令目标地址的指针。 INDF 操作数只是使用指针的一 种简便方法。 由于间接寻址使用完整的 12 位地址,因此没有必要进 行数据 RAM 分区。所以 BSR 的当前内容和快速操作 RAM 位对于确定目标地址没有影响。 5.6.3.2 FSR 寄存器和 POSTINC、 POSTDEC、 PREINC 以及 PLUSW 除了 INDF 操作数之外,每对 FSR 寄存器还有 4 个额外 的间接操作数。和 INDF 一样,它们也都是不能直接读 写的 “ 虚拟 ” 寄存器。访问这些寄存器实际上访问的是 与之相关的一对 FSR 寄存器所指向的地址单元,并对 FSR 值进行特定的操作。这些寄存器是: • POSTDEC:访问 FSR 指向的地址单元,然后将 FSR 的值自动减 1 • POSTINC:访问 FSR 指向的地址单元,然后将 FSR 的值自动加 1 • PREINC:将 FSR 的值自动加 1,然后在操作中使 用 FSR 指向的地址单元 • PLUSW:将 W 寄存器中有符号的值 (从 -127 至 128)与 FSR 中的值相加,并在操作中使用结果指 向的地址单元 在本文中,访问 INDF 寄存器使用相关 FSR 寄存器中的 值 (不会更改此值)。同样,访问 PLUSW 寄存器是将 W 寄存器中的值作为 FSR 的偏移量;该操作不会改变 W 或 FSR 中的值。访问其他虚拟寄存器均会更改 FSR 寄存器的值。 图 5-10: 间接寻址 使用带有一个间接寻址寄存器作为 操作数的指令 …… ADDWF, INDF1, 1 …… 使用存储在与该寄存器相关联 的一对 FSR 中的 12 位地址 …… FSR1H:FSR1L 7 07 0 xxxx1110 11001100 …… 确定将在该操作中使用的数据 存储单元。 在本例中,FSR1 寄存器对中的值为 ECCh。这意味着将把 ECCh 单元的 内容与 W 寄存器的内容相加,并将 结果存回 ECCh 单元中。 000h 100h 200h 300h Bank 0 Bank 1 Bank 2 Bank 3 至 Bank 13 E00h F00h FFFh Bank 14 Bank 15 数据存储器  2011-2013 Microchip Technology Inc. DS41412F_CN 第 91 页 PIC18(L)F2X/4XK22 使用 POSTDEC、 POSTINC 和 PREINC 对 FSR 进行 操作会影响整对寄存器:即, FSRnL 寄存器从 FFh 溢 出到 00h 并向 FSRnH 寄存器进位。但这些操作的结果 不会更改 STATUS 寄存器中的任何标志位(如 Z、N 和 OV 等)。 PLUSW 寄存器可用于在数据存储空间实现变址寻址。 通过操作 W 寄存器中的值,用户可以访问相对当前指针 地址有固定偏移量的地址单元。在某些应用中,该功能 可用于在数据存储器内部实现某些强大的程序控制结 构,如软件堆栈。 5.6.3.3 通过 FSR 对其他 FSR 进行操作 在某些特殊情况下,间接寻址操作以其他 FSR 或虚拟寄 存器作为目标。例如,使用 FSR 指向一个虚拟寄存器会 导致操作不成功。假设如下特殊情况:FSR0H:FSR0L 保存的是 INDF1 的地址 FE7h。尝试使用 INDF0 作为操 作数读取 INDF1 的值,将返回 00h。尝试使用 INDF0 作为操作数写入 INDF1,将会导致执行一条 NOP 指令。 另一方面,使用虚拟寄存器对一对 FSR 寄存器进行写操 作可能会产生与预期不同的结果。在这些情况下,会将 值写入一对 FSR 寄存器,但 FSR 不会递增或递减。因 此,写入 INDF2 或 POSTDEC2 寄存器时会把同样的值 写入 FSR2H:FSR2L。 由于 FSR 是映射到 SFR 空间中的物理寄存器,所以可 以通过所有直接寻址来操作它们。用户在使用这些寄存 器时应该特别小心,尤其是在代码使用间接寻址时。 同样,通常允许通过间接寻址对所有其他 SFR 进行操 作。用户在进行此类操作时应该特别小心,以免不小心 更改设置从而影响器件操作。 5.7 数据存储器和扩展指令集 使能 PIC18 扩展指令集(XINST 配置位 = 1)显著改变 了数据存储器及其寻址的某些方面。特别是,许多核心 PIC18 指令使用快速操作存储区的方式有所不同。这是 由于扩展指令集引入了对数据存储空间的新的寻址模式。 同样需要了解哪些部分保持不变。数据存储空间的大小 及其线性寻址模式都不会改变。SFR 映射也保持不变。核 心PIC18指令也仍然以直接和间接寻址模式进行操作;固 有和立即数寻址指令操作照旧。 FSR0 和 FSR1 的间接 寻址模式也保持不变。 5.7.1 使用立即数偏移量进行变址寻址 使能 PIC18 扩展指令集将更改快速操作 RAM 中使用 FSR2 寄存器对进行间接寻址的方式。在适当的条件 下,使用快速操作存储区的指令 (即绝大多数针对位和 针对字节的指令)可以利用指令中的偏移量来执行变址 寻址。这种特殊的寻址模式被称为使用立即数偏移量的 变址寻址或立即数变址寻址模式。 使用扩展指令集时,这种寻址模式有如下要求: • 强制使用快速操作存储区 (a = 0);且 • 文件地址参数要小于或等于 5Fh。 在这些条件下,指令的文件地址不会被解析为地址的低 字节 (在直接寻址中和 BSR 一起使用),或快速操作 存储区中的 8 位地址,而是被解析为由 FSR2 指定的地 址指针的偏移量。将该偏移量与 FSR2 的内容相加以获 取操作的目标地址。 5.7.2 受立即数变址寻址模式影响的指令 任何使用直接寻址模式的核心 PIC18 指令均会受到立即 数变址寻址模式的潜在影响,包括所有针对字节和针 对位的指令,即核心 PIC18 指令集中几乎一半的指令。 只有使用固有寻址或立即数寻址模式的指令不受影响。 此外,如果针对字节和针对位的指令使用快速操作存储 区 (快速操作 RAM 位为 1)或包含 60h 以上的文件地 址,它们也不受影响。符合这些条件的指令会像以前一 样执行。图 5-11 给出了当使能扩展指令集时,各种寻址 模式之间的对比。 那些想要在立即数变址寻址模式中使用针对位或针对字 节的指令的用户,应该注意此模式下汇编语法的改变。 在第 25.2.1 节 “ 扩展指令的语法 ” 中对此进行了更详细 的说明。 DS41412F_CN 第 92 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 5-11: 针对位和针对字节的指令的寻址模式对比 (使能了扩展指令集) 示例指令:ADDWF, f, d, a(操作码:0010 01da ffff ffff) 当 a = 0 且 f ≥ 60h 时: 此指令以直接强制模式执 行。“f” 被解析为快速操作 RAM 中 060h 至 0FFh 之间的单元地 址,该地址也是数据存储器的 F60h 至 FFFh (Bank 15)。 不可用此模式寻址地址低于 60h 的单元。 当 a = 0 且 f ≤ 5Fh 时: 此指令以立即数变址寻址模式 执行。 “f” 被解析为 FSR2 中地 址 值 的 偏 移 量。将 这 两 个 值 相 加可以得到指令的目标寄存器 的 地 址。此 地 址 可 以 在 数 据 存 储空间的任何地方。 注 意 在 此 模 式 中,正 确 的 语 法 如下: ADDWF [k], d 其中 “k” 就是 “f”。 当 a = 1(f 可为任何值)时: 指令以直接寻址模式 (也称为 直 接 长 地 址 寻 址 模 式)执 行。 “f” 被解析为数据存储空间 的 16 个存储区之一中的一个单 元地址。存储区由存储区选择 寄存器 (BSR)指定。此地址 可以位于数据存储空间的任何 已实现存储区中。 000h 060h 100h Bank 0 Bank 1 至 Bank 14 F00h F60h FFFh Bank 15 SFR 数据存储器 000h 060h 100h Bank 0 Bank 1 至 Bank 14 F00h F60h FFFh Bank 15 SFR 数据存储器 000h 060h 100h Bank 0 Bank 1 至 Bank 14 F00h F60h FFFh Bank 15 SFR 数据存储器 00h 60h FFh 快速操作 RAM “f” 的 有效范围 001001da ffffffff FSR2H FSR2L BSR 00000000 001001da ffffffff  2011-2013 Microchip Technology Inc. DS41412F_CN 第 93 页 PIC18(L)F2X/4XK22 5.7.3 在立即数变址模式下映射快速操作存储区 使用立即数变址寻址模式能有效改变快速操作 RAM 前 96 个地址单元(00h 至 5Fh)的映射方式。此模式映射 由用户定义的、可位于数据存储空间中任何地方的 “ 窗 口 ” 内容,而不仅仅映射 Bank 0 底部的内容。FSR2 的 值 定义 映 射 到 窗口 的 地 址 的下 边 界,而 上 边界 则 由 FSR2 加 95 (5Fh)决定。地址大于 5Fh 的快速操作 RAM 的映射方法如前所述(见第 5.4.2 节 “ 快速操作存 储区 ”)。图 5-12 给出了在此寻址模式下重映射快速操 作存储区的示例。 快速操作存储区的重映射仅适用于立即数变址寻址模 式。使用 BSR (快速操作 RAM 位为 1)的操作和以前 一样继续使用直接寻址模式。 5.8 PIC18 指令的执行和扩展指令集 使能扩展指令集将 8 条其他命令添加到现有的 PIC18 指 令集中。这些指令如第 25.2 节 “ 扩展指令集 ” 中所述执 行。 图 5-12: 使用立即数变址寻址模式重映射快速操作存储区 示例: ADDWF f, d, a FSR2H:FSR2L = 120h 从 FSR2 指针 (120h)到 FSR2指针加05Fh(17Fh) 区域内的存储单元被映射 到快速操作 RAM 的底部 (000h-05Fh)。 从 F60h 到 FFFh 的特殊功 能寄存器被映射到 60h 到 FFh,和常规寻址一样。 Bank 0 中低于 5Fh 的地址 仍然可以使用 BSR 对它们 进行寻址。 000h 100h 120h 17Fh 200h Bank 0 Bank 1 窗口 Bank 1 Bank 2 至 Bank 14 F00h F60h FFFh Bank 15 SFR 数据存储器 00h Bank 1“ 窗口 ” 5Fh 60h SFR FFh 快速操作存储区 DS41412F_CN 第 94 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 6.0 闪存程序存储器 在整个 VDD 范围内,正常操作期间,闪存程序存储器都 是可读写、可擦除的。 读程序存储器时,每次读取一个字节。写程序存储器 时,每次写入一个 64 字节的块。擦除程序存储器时,每 次擦除一个 64 字节的块。用户代码不能执行批量擦除 操作。 在擦写程序存储器时,系统会停止取指令直到操作完 成。擦写期间不能访问程序存储器,因此也就无法执行 代码。由内部编程定时器来终止程序存储器的擦写操作。 写入程序存储器的值不一定非要是有效指令。执行存储 无效指令的程序存储单元会导致执行 NOP。 6.1 表读与表写 为了读写程序存储器,有两个操作可供处理器在程序存 储空间和数据 RAM 之间传送字节: • 表读 (TBLRD) • 表写 (TBLWT) 程序存储空间为 16 位宽,而数据 RAM 空间为 8 位宽。 表读和表写操作通过一个 8 位寄存器 (TABLAT)在这 两个存储空间之间传送数据。 表读操作从程序存储器直接取一个字节的数据,然后将 其放入 TABLAT 寄存器。图 6-1 显示了表读操作。 表写操作将一个字节的数据从 TABLAT 寄存器存储到写 操作块保持寄存器中。第 6.6 节 “ 写闪存程序存储器 ” 详 细介绍了将保持寄存器的内容写入程序存储器的过程。 图 6-2 显示了程序存储器和数据 RAM 之间的一次表写操 作。 表操作以字节为单位。包含数据而非程序指令的表不需 要按字对齐。因此,表可以在任何字节地址开始和结 束。如果使用表写操作向程序存储器写入可执行代码, 程序指令必须按字对齐。 图 6-1: 表读操作 TBLPTRU 表指针 (1) TBLPTRH TBLPTRL 指令 :TBLRD* 程序存储器 程序存储器 (TBLPTR) 表锁存器(8 位) TABLAT 注 1:表指针寄存器指向程序存储器中的某个字节。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 95 页 PIC18(L)F2X/4XK22 图 6-2: 表写操作 表指针 (1) TBLPTRU TBLPTRH TBLPTRL 指令 :TBLWT* 程序存储器 保持寄存器 表锁存器(8 位) TABLAT 程序存储器 (TBLPTR) 注 1:在表写操作期间,表指针不直接指向程序存储器。 TBLPRTL 的 LSB 实际指向写操作块保持寄存器中的 一个地址。表指针的 MSB 决定最终写入写操作块的位置。第 6.6 节 “ 写闪存程序存储器 ” 中将讨论将保 持寄存器的内容写入程序存储器阵列的过程。 6.2 控制寄存器 TBLRD 和 TBLWT 指令要用到几个控制寄存器。这些寄 存器包括: • EECON1 寄存器 • EECON2 寄存器 • TABLAT 寄存器 • TBLPTR 寄存器 6.2.1 EECON1 和 EECON2 寄存器 EECON1 寄存器(寄存器 6-1)是存储器访问的控制寄 存器。EECON2 寄存器不是实际存在的寄存器,专用于 存储器的擦写操作。读 EECON2 将得到全 0。 EEPGD 控 制 位 决 定 访 问 的 是 程 序 存 储 器 还 是数据 EEPROM 存储器。当 EEPGD 清零时,任何后续操作 都将针对数据 EEPROM 存储器进行。当 EEPGD 置 1 时,任何后续操作都将针对程序存储器进行。 CFGS 控制位决定访问的是配置 / 校准寄存器还是程序 存储器 / 数据 EEPROM 存储器。当 CFGS 置 1 时,不 管 EEPGD 的值如何,后续操作将针对配置寄存器进行 (见第 24.0 节 “CPU 的特殊功能 ”)。当 CFGS 清零时, 则由 EEPGD 来选择访问的存储器。 FREE 位允许进行程序存储器的擦除操作。当 FREE 置 1 时,擦除操作由下一条 WR 命令启动。当 FREE 清零 时,则仅使能写操作。 当 WREN 位置 1 时,允许进行写操作。上电时,WREN 位被清零。 WRERR 位在 WR 位置 1 时由硬件置 1,在内部编程定 时器超时、写操作结束时被清零。 注: 在正常操作期间, WRERR 读为 1。这表 明写操作被复位提早终止或进行了不合法 的写操作。 WR 控制位用于启动写操作。用固件只能将 WR 位置 1 而无法清零。写操作完成时,由硬件将 WR 位清零。 注: 当写操作完成时, PIR2 寄存器的 EEIF 中 断标志位被置 1。EEIF 标志保持置 1 状态 直到被固件清零为止。 DS41412F_CN 第 96 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 6.3 寄存器定义:存储器控制 寄存器 6-1: EECON1:数据 EEPROM 控制 1 寄存器 R/W-x R/W-x U-0 R/W-0 R/W-x EEPGD CFGS — FREE WRERR bit 7 R/W-0 WREN R/S-0 WR R/S-0 RD bit 0 图注: R = 可读位 W = 可写位 S = 该位可用软件置 1,但不能清零 -n = POR 时的值 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 EEPGD:闪存程序存储器或数据 EEPROM 存储器选择位 1 = 访问闪存程序存储器 0 = 访问数据 EEPROM 存储器 bit 6 CFGS:闪存程序存储器 / 数据 EEPROM 存储器或配置寄存器选择位 1 = 访问配置寄存器 0 = 访问闪存程序存储器或数据 EEPROM 存储器 bit 5 未实现:读为 0 bit 4 FREE:闪存行 (块)擦除使能位 1 = 在下一条 WR 命令时擦除 TBLPTR 指定的程序存储器块 (擦除操作完成后清零) 0 = 仅执行写操作 bit 3 WRERR:闪存程序存储器 / 数据 EEPROM 存储器错误标志位 (1) 1 = 写操作提早终止 (由于正常操作中自定时编程期间的任何复位,或不合法的写操作) 0 = 写操作完成 bit 2 WREN:闪存程序存储器 / 数据 EEPROM 存储器写使能位 1 = 允许对闪存程序存储器 / 数据 EEPROM 存储器的写周期 0 = 禁止对闪存程序存储器 / 数据 EEPROM 存储器的写周期 bit 1 WR:写控制位 1 = 启动数据 EEPROM 擦除 / 写周期或者程序存储器的擦除周期或写周期。 (操作是自定时的,一旦写操作完成,该位即由硬件清零。用软件只能将WR位置1,但不能清零。) 0 = EEPROM 写周期完成 bit 0 RD:读控制位 1 = 启动 EEPROM 读操作(读操作需要一个指令周期。RD 由硬件清零。用软件只能将 RD 位置 1,但 不能清零。 EEPGD = 1 或 CFGS = 1 时, RD 位无法置 1。) 0 = 不启动 EEPROM 读操作 注 1: 当发生 WRERR 时, EEPGD 和 CFGS 位不会被清零。这样可以跟踪错误情况。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 97 页 PIC18(L)F2X/4XK22 6.3.1 TABLAT—— 表锁存寄存器 表锁存器(TABLAT)是映射到 SFR 空间的一个 8 位寄 存器。表锁存器用于在程序存储器和数据 RAM 之间传 输数据时保存 8 位数据。 6.3.2 TBLPTR—— 表指针寄存器 表指针 (TBLPTR)寄存器在程序存储器中以字节为单 位进行寻址。TBLPTR 由 3 个 SFR 寄存器组成:表指针 最 高 字 节、表 指 针 高 字 节 和 表 指 针 低 字 节 (TBLPTRU:TBLPTRH:TBLPTRL)。这 3 个寄存器合起 来组成一个 22 位宽的指针。其中低 21 位允许器件寻址 最大 2 MB 的程序存储空间。第 22 位则允许访问器件 ID、用户 ID 和配置位。 TBLRD 和 TBLWT 指令要使用表指针寄存器 TBLPTR。这 些指令可以基于表操作以 4 种方法之一更新 TBLPTR。 这些操作只会影响 TBLPTR 的低 21 位。 6.3.3 表指针边界 TBLPTR 用于读、写和擦除闪存程序存储器。 当执行 TBLRD 时,TBLPTR 的所有 22 位决定将程序存 储器的哪个字节直接读入 TABLAT 寄存器。 当执行 TBLWT 时,TABLAT 寄存器中的字节将写入保持 寄存器(而不是闪存),以准备进行程序存储器写操作。 保持寄存器包含一个写操作块,写操作块因器件而异 (见表 6-1)。 TBLPTRL 寄存器的 3、 4 或 5 个 LSb 决 定数据写入保持寄存器块中的哪个具体地址。在 TBLWT 操作期间,表指针的 MSB 没有作用。 当执行程序存储器写操作时,整个保持寄存器块的内容 写入到闪存中,写入地址由 TBLPTR 的 MSb 决定。在 闪存写操作期间, 3、 4 或 5 个 LSb 被忽略。更多详细 信息,请参见第 6.6 节 “ 写闪存程序存储器 ”。 当执行擦除程序存储器时,表指针寄存器的高 16 位 (TBLPTR<21:6>)指向将要擦除的 64 字节块。最低有 效位 (TBLPTR<5:0>)被忽略。 图 6-3 说明了基于闪存程序存储器操作的 TBLPTR 相关 边界。 表 6-1: 示例 TBLRD* TBLWT* TBLRD*+ TBLWT*+ TBLRD*TBLWT*TBLRD+* TBLWT+* 执行 TBLRD 和 TBLWT 指令的表指针操作 表指针操作 不修改 TBLPTR TBLPTR 在读 / 写后递增 TBLPTR 在读 / 写后递减 TBLPTR 在读 / 写前递增 图 6-3: 基于操作的表指针边界 21 TBLPTRU 16 15 TBLPTRH 87 TBLPTRL 0 表擦除 / 写 TBLPTR<21:n+1>(1) 表读 ——TBLPTR<21:0> 注 1: n = 6,对应于 64 字节的块大小。 表写 TBLPTR(1) DS41412F_CN 第 98 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 6.4 读闪存程序存储器 TBLRD 指令用于从程序存储器读取数据并放入数据 RAM。表读操作每次从程序存储器读取一个字节。 TBLPTR 指 向 程 序 存 储 空 间 的 某 个 字 节 地 址。执行 TBLRD 指令会将指向的字节装入 TABLAT。此外,还可 以自动修改 TBLPTR 以进行下一次表读操作。 图 6-4: 读闪存程序存储器 内部程序存储器通常以字为单位进行组织。由地址的最 低有效位来选择字的高字节或低字节。图 6-4 显示了内 部程序存储器和 TABLAT 之间的接口。 程序存储器 (偶字节地址) (奇字节地址) 指令寄存器 (IR) FETCH TBLPTR = xxxxx1 TBLPTR = xxxxx0 TBLRD TABLAT 读寄存器 例 6-1: READ_WORD 读闪存程序存储器的一个字 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CODE_ADDR_UPPER TBLPTRU CODE_ADDR_HIGH TBLPTRH CODE_ADDR_LOW TBLPTRL TBLRD*+ MOVF MOVWF TBLRD*+ MOVFW MOVF TABLAT, W WORD_EVEN TABLAT, W WORD_ODD ; Load TBLPTR with the base ; address of the word ; read into TABLAT and increment ; get data ; read into TABLAT and increment ; get data  2011-2013 Microchip Technology Inc. DS41412F_CN 第 99 页 PIC18(L)F2X/4XK22 6.5 擦除闪存程序存储器 最小擦除块大小为 32 个字或 64 字节。只有通过使用外 部编程器,或通过 ICSP™ 控制, 才能够批量擦除更大 的程序存储器块。闪存阵列不支持字擦除。 当单片机自身启动一个擦除序列时,会擦除一个 64 字 节的程序存储器块。高 16 位 TBLPTR<21:6> 指向要擦 除的块。 TBLPTR<5:0> 被忽略。 擦除操作由 EECON1 寄存器控制。必须将 EEPGD 位 置 1 以指向闪存程序存储器。WREN 位必须被置 1 以使 能写操作。 FREE 位被置 1 以选择擦除操作。 EECON2 的写操作启动序列(在第 6.5.1 节 “ 闪存程序 存储器擦除序列 ” 中显示为步骤 4 至 6)用于防止意外 的写操作。这有时称为长写操作。 擦除内部闪存必须执行长写操作。在长写周期中,指令 暂停执行。由内部编程定时器终止长写操作。 6.5.1 闪存程序存储器擦除序列 擦除内部程序存储器块的过程如下: 1. 将要擦除的块地址装入表指针寄存器。 2. 设置 EECON1 寄存器来执行擦除操作: • 将 EEPGD 位置 1 以指向程序存储器; • 将 CFGS 位清零以访问程序存储器; • 将 WREN 位置 1 以使能写操作; • 将 FREE 位置 1 以使能擦除操作。 3. 禁止中断。 4. 将 55h 写入 EECON2。 5. 将 0AAh 写入 EECON2。 6. 将 WR 位置 1。这将开始块擦除周期。 7. CPU 在擦除期间 (使用内部定时器约为 2 ms) 将会停止工作。 8. 重新允许中断。 例 6-2: 擦除闪存程序存储器块 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF ERASE_BLOCK BSF BCF BSF BSF BCF MOVLW MOVWF 必需的序列 MOVLW MOVWF BSF BSF CODE_ADDR_UPPER TBLPTRU CODE_ADDR_HIGH TBLPTRH CODE_ADDR_LOW TBLPTRL EECON1, EEPGD EECON1, CFGS EECON1, WREN EECON1, FREE INTCON, GIE 55h EECON2 0AAh EECON2 EECON1, WR INTCON, GIE ; load TBLPTR with the base ; address of the memory block ; point to Flash program memory ; access Flash program memory ; enable write to memory ; enable block Erase operation ; disable interrupts ; write 55h ; write 0AAh ; start erase (CPU stall) ; re-enable interrupts DS41412F_CN 第 100 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 6.6 写闪存程序存储器 编程块大小为 64 字节。不支持字或字节编程。 在内部使用表写指令将需要写入闪存的内容装入保持寄 存器中。保持寄存器的数量与写操作块中的字节数相同 (64 字节)。 由于表锁存器 (TABLAT)只是单字节寄存器,所以每 次编程操作 TBLWT 指令需要执行 64 次。因为只写保持 寄存器,所以所有的表写操作实际上都是短写。在数据 写入所有保持寄存器之后,该存储器块的编程操作通过 以下操作启动:先配置 EECON1 寄存器来进行程序存 储器写操作,然后执行长写序列。 图 6-5: 对闪存程序存储器的表写操作 对内部闪存编程要求使用长写操作。在长写周期中,指 令暂停执行。由内部编程定时器终止长写操作。 由 EEPROM 片上定时器控制写入的时间。写入 / 擦除 电压由片上的电荷泵产生,该电荷泵可以在器件的电压 范围内工作。 注: 器件复位和写操作完成后保持寄存器的默 认值为 FFh。将 FFh 写入保持寄存器不会 修改其中的数值。这意味着可以修改程序 存储器的各字节 (假如不是想将任何位从 0 更改为 1)。当修改各字节时,无需在执 行长写操作前装入所有保持寄存器。 TABLAT 写寄存器 8 8 8 TBLPTR = xxxx00 TBLPTR = xxxx01 TBLPTR = xxxx02 保持寄存器 保持寄存器 保持寄存器 8 TBLPTR = xxxxYY(1) 保持寄存器 程序存储器 注 1: YY = 3F,对应于 64 字节的写操作块。 6.6.1 闪存程序存储器写序列 对内部程序存储单元编程的过程如下: 1. 将 64 字节读入 RAM。 2. 必要时更新 RAM 中的数据值。 3. 将要擦除的地址装入表指针寄存器。 4. 执行块擦除过程。 5. 将要写入的第一个字节的地址装入表指针寄存 器。 6. 通过自动递增将 64 字节块写入保持寄存器。 7. 设置 EECON1 寄存器来执行写操作: • 将 EEPGD 位置 1 以指向程序存储器; • 将 CFGS 位清零以访问程序存储器; • 将 WREN 位置 1 以使能字节写操作。 8. 禁止中断。 9. 将 55h 写入 EECON2。 10. 将 0AAh 写入 EECON2。 11. 将 WR 位置 1。这将开始写周期。 12. CPU 在写入期间 (使用内部定时器约为 2 ms) 将会停止工作。 13. 重新允许中断。 14. 校验存储器 (表读)。 该过程需要大约 6 ms 的时间来更新存储器的每个写操 作块。例 6-3 给出了所需代码的示例。 注: 在将 WR 位置 1 前,表指针地址必须处于 保持寄存器中的字节将要被写入的地址范 围内。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 101 页 PIC18(L)F2X/4XK22 例 6-3: 写闪存程序存储器 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF READ_BLOCK TBLRD*+ MOVF MOVWF DECFSZ BRA MODIFY_WORD MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF ERASE_BLOCK MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BSF BCF BSF BSF BCF MOVLW MOVWF 必需的序列 MOVLW MOVWF BSF BSF TBLRD*- MOVLW MOVWF MOVLW MOVWF WRITE_BUFFER_BACK MOVLW MOVWF MOVLW MOVWF WRITE_BYTE_TO_HREGS MOVF MOVWF TBLWT+* D'64’ COUNTER BUFFER_ADDR_HIGH FSR0H BUFFER_ADDR_LOW FSR0L CODE_ADDR_UPPER TBLPTRU CODE_ADDR_HIGH TBLPTRH CODE_ADDR_LOW TBLPTRL TABLAT, W POSTINC0 COUNTER READ_BLOCK BUFFER_ADDR_HIGH FSR0H BUFFER_ADDR_LOW FSR0L NEW_DATA_LOW POSTINC0 NEW_DATA_HIGH INDF0 CODE_ADDR_UPPER TBLPTRU CODE_ADDR_HIGH TBLPTRH CODE_ADDR_LOW TBLPTRL EECON1, EEPGD EECON1, CFGS EECON1, WREN EECON1, FREE INTCON, GIE 55h EECON2 0AAh EECON2 EECON1, WR INTCON, GIE BUFFER_ADDR_HIGH FSR0H BUFFER_ADDR_LOW FSR0L BlockSize COUNTER D’64’/BlockSize COUNTER2 POSTINC0, W TABLAT ; number of bytes in erase block ; point to buffer ; Load TBLPTR with the base ; address of the memory block ; read into TABLAT, and inc ; get data ; store data ; done? ; repeat ; point to buffer ; update buffer word ; load TBLPTR with the base ; address of the memory block ; point to Flash program memory ; access Flash program memory ; enable write to memory ; enable Erase operation ; disable interrupts ; write 55h ; write 0AAh ; start erase (CPU stall) ; re-enable interrupts ; dummy read decrement ; point to buffer ; number of bytes in holding register ; number of write blocks in 64 bytes ; get low byte of buffer data ; present data to table latch ; write data, perform a short write ; to internal TBLWT holding register. DS41412F_CN 第 102 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 例 6-3: PROGRAM_MEMORY 必需的序列 写闪存程序存储器 (续) DECFSZ COUNTER BRA WRITE_WORD_TO_HREGS BSF BCF BSF BCF MOVLW MOVWF MOVLW MOVWF BSF DCFSZ BRA BSF BCF EECON1, EEPGD EECON1, CFGS EECON1, WREN INTCON, GIE 55h EECON2 0AAh EECON2 EECON1, WR COUNTER2 WRITE_BYTE_TO_HREGS INTCON, GIE EECON1, WREN ; loop until holding registers are full ; point to Flash program memory ; access Flash program memory ; enable write to memory ; disable interrupts ; write 55h ; write 0AAh ; start program (CPU stall) ; repeat for remaining write blocks ; ; re-enable interrupts ; disable write to memory 6.6.2 写校验 根据具体应用,将写入存储器的值对照原始值进行校验 是一个很好的编程习惯。在应用中,如果某些位的写次 数接近规定极限值,就应该进行写校验。 6.6.3 意外终止写操作 如果由于意外事件 (如掉电或意外复位)终止了写操 作,应该对刚刚编程的存储单元进行校验,如有必要, 还 要 重 新 进 行 编 程。如 果 写 操 作 在 正 常 操 作 期 间 因 MCLR 复位或 WDT 超时复位而中断,则 WRERR 位将 被置 1,用户可以检查该位以确定是否需要重写该单元。 6.6.4 防止误写操作的保护措施 为防止对闪存程序存储器的误写操作,必须遵循写操作 的启动顺序。更多详细信息,请参见第 24.0 节 “CPU 的 特殊功能 ”。 6.7 代码保护期间闪存程序存储器的操作 关于闪存程序存储器代码保护的详细信息,请参见 第 24.5 节 “ 程序校验和代码保护 ”。 表 6-2: 与闪存程序存储器相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 TBLPTRU — — 程序存储器表指针最高字节 (TBLPTR<21:16>) TBLPTRH TBLPTRL TABLAT INTCON GIE/GIEH PEIE/GIEL 程序存储器表指针高字节 (TBLPTR<15:8>) 程序存储器表指针低字节 (TBLPTR<7:0>) 程序存储器表锁存器 TMR0IE INT0IE RBIE TMR0IF INT0IF EECON2 EEPROM 控制寄存器 2 (不是实际存在的寄存器) EECON1 EEPGD CFGS — FREE WRERR WREN WR IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE 图注: — = 未实现,读为 0。闪存 /EEPROM 访问期间不使用阴影位。 Bit 0 RBIF RD CCP2IP CCP2IF CCP2IE 复位值 所在页 — — — — 116 — 97 129 120 125  2011-2013 Microchip Technology Inc. DS41412F_CN 第 103 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 104 页  2011-2013 Microchip Technology Inc. 7.0 数据 EEPROM 存储器 数据 EEPROM 是非易失性的存储器阵列,独立于数据 RAM 和程序存储器,用于程序数据的长期存储。它并不 直接映射到寄存器文件或程序存储空间,而是通过特殊 功能寄存器 (SFR)来间接寻址。在整个 VDD 范围内 的正常运行期间, EEPROM 是可读写的。 有 5 个 SFR 用于读写数据 EEPROM 以及程序存储器。 它们是: • EECON1 • EECON2 • EEDATA • EEADR • EEADRH 数据 EEPROM 允许以字节为单位读写。当与数据存储器模 块接口时,EEDATA存放8位读写数据,而EEADR:EEADRH 寄存器对存放被访问的 EEPROM 存储单元的地址。 EEPROM 数据存储器具有高耐擦写次数。字节写操 作会自动擦除目标存储单元并写入新数据(在写入前 擦除) 。写入时间由片上定时器控制,其值根据电 压、温度和不同的芯片而不同。具体的限制值,请参 见第 27.0 节 “ 电气特性 ” 中的数据 EEPROM 存储器 参数。 7.1 EEADR 和 EEADRH 寄存器 EEADR 寄存器用于寻址数据 EEPROM 以进行读写操 作。8 位的寄存器可寻址 256 字节(00h 至 FFh)的存 储器范围。通过增加 2 个额外的地址位,EEADRH 寄存 器将范围扩展到 1024 字节。 PIC18(L)F2X/4XK22 7.2 EECON1 和 EECON2 寄存器 对数据 EEPROM 的访问由 EECON1 和 EECON2 两个 寄存器控制。它们也用来控制对程序存储器的访问,使 用方法与访问数据 EEPROM 类似。 EECON1 寄存器(寄存器 7-1)是数据和程序存储器访 问的控制寄存器。控制位 EEPGD 决定访问的是程序存 储器还是数据 EEPROM 存储器。当 EEPGD 位清零时, 操作将访问数据 EEPROM 存储器。当 EEPGD 位置 1 时,将访问程序存储器。 控制位 CFGS 决定访问的是配置寄存器还是程序存储器 / 数据 EEPROM 存储器。当 CFGS 位置 1 时,后续操作 将访问配置寄存器。当 CFGS 位清零时,则由 EEPGD 位来选择具体访问闪存程序存储器还是数据 EEPROM 存 储器。 当 WREN 位置 1 时,允许进行写操作。上电时,WREN 位被清零。 WRERR 位在 WR 位置 1 时由硬件置 1,在内部编程定 时器超时、写操作结束时被清零。 注: 在正常操作期间, WRERR 读为 1。这表 明写操作被复位提早终止或进行了不合法 的写操作。 WR 控制位用于启动写操作。用软件只能将该位置 1 而 无法清零。在写操作完成后,由硬件将其清零。 注: 当写操作完成时, PIR2 寄存器的 EEIF 中 断标志位被置 1。它必须用软件清零。 控制位 RD 和 WR 分别启动读和擦写操作。这两位由固 件置 1,并在操作完成时由硬件清零。 当访问程序存储器(EEPGD = 1)时,RD 位无法置 1。 程序存储器是通过表读指令读取的。关于表读的信息, 请参见第 6.1 节 “ 表读与表写 ”。 EECON2 寄存器不是实际存在的寄存器。它专用于存储 器写和擦除过程。读 EECON2 将得到全 0。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 105 页 PIC18(L)F2X/4XK22 寄存器 7-1: R/W-x EEPGD bit 7 EECON1:数据 EEPROM 控制 1 寄存器 R/W-x U-0 R/W-0 R/W-x CFGS — FREE WRERR R/W-0 WREN R/S-0 WR R/S-0 RD bit 0 图注: R = 可读位 W = 可写位 S = 该位可用软件置 1,但不能清零 -n = POR 时的值 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 EEPGD:闪存程序存储器或数据 EEPROM 存储器选择位 1 = 访问闪存程序存储器 0 = 访问数据 EEPROM 存储器 bit 6 CFGS:闪存程序存储器 / 数据 EEPROM 存储器或配置寄存器选择位 1 = 访问配置寄存器 0 = 访问闪存程序存储器或数据 EEPROM 存储器 bit 5 未实现:读为 0 bit 4 FREE:闪存行 (块)擦除使能位 1 = 在下一条 WR 命令时擦除 TBLPTR 指定的程序存储器块 (擦除操作完成后清零) 0 = 仅执行写操作 bit 3 WRERR:闪存程序存储器 / 数据 EEPROM 存储器错误标志位 (1) 1 = 写操作提早终止 (由于正常操作中自定时编程期间的任何复位,或不合法的写操作) 0 = 写操作完成 bit 2 WREN:闪存程序存储器 / 数据 EEPROM 存储器写使能位 1 = 允许对闪存程序存储器 / 数据 EEPROM 存储器的写周期 0 = 禁止对闪存程序存储器 / 数据 EEPROM 存储器的写周期 bit 1 WR:写控制位 1 = 启动数据 EEPROM 擦除 / 写周期或者程序存储器的擦除周期或写周期。 (操作是自定时的,一旦写操作完成,该位即由硬件清零。用软件只能将 WR 位置 1,但不能清零。) 0 = EEPROM 写周期完成 bit 0 RD:读控制位 1 = 启动 EEPROM 读操作 (读操作需要一个指令周期。 RD 由硬件清零。用软件只能将 RD 位置 1, 但不能清零。 EEPGD = 1 或 CFGS = 1 时, RD 位无法置 1。) 0 = 不启动 EEPROM 读操作 注 1: 当发生 WRERR 时, EEPGD 和 CFGS 位不会被清零。这样可以跟踪错误情况。 DS41412F_CN 第 106 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 7.3 读数据 EEPROM 存储器 要读取数据存储单元,用户必须将地址写入 EEADR 寄 存器,清零 EECON1 寄存器的 EEPGD 控制位,然后 将控制位 RD 置 1。可在下一个指令周期访问该数据; 因此,EEDATA 寄存器可由下一条指令读取。EEDATA 将把此值保存至下一次读取或用户向该单元写入数据时 (写操作)为止。 基本过程如例 7-1 中所示。 7.4 写数据 EEPROM 存储器 要向 EEPROM 数据存储单元写入数据,必须首先将地 址写入 EEADR 寄存器,并将数据写入 EEDATA 寄存 器。必须遵循例 7-2 中的序列启动写周期。 如果没有完全遵循该指令序列 (即首先将 55h 写入 EECON2,随后将 0AAh 写入 EECON2,最后将 WR 位 置 1)写每个字节,将不会启动写操作。强烈建议在这 段代码执行期间禁止中断。 此外,必须将 EECON1 中的 WREN 位置 1 以使能写操 作。这种机制可防止由于意外执行代码 (即程序失控) 导致误写数据 EEPROM。除了更新 EEPROM 时以外, WREN 位应始终保持清零。WREN 位不会被硬件清零。 一个写序列启动后, EECON1、 EEADR 和 EEDATA 不 能被修改。除非 WREN 位置 1,否则 WR 位将禁止置 1。 WR 和 WREN 不能被同一条指令置 1。 写周期完成后, WR 位由硬件清零并且 EEPROM 中断 标志位 EEIF 被置 1。用户可以允许此中断或查询此位。 EEIF 必须用软件清零。 7.5 写校验 根据具体应用,将写入存储器的值对照原始值进行校验 是一个很好的编程习惯。在应用中,如果某些位的写次 数接近规定极限值,就应该进行写校验。 例 7-1: MOVLW MOVWF BCF BCF BSF MOVF 读数据 EEPROM DATA_EE_ADDR EEADR EECON1, EEPGD EECON1, CFGS EECON1, RD EEDATA, W ; ; Data Memory Address to read ; Point to DATA memory ; Access EEPROM ; EEPROM Read ; W = EEDATA 例 7-2: 必需的序列 写数据 EEPROM MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF BCF BSF BCF MOVLW MOVWF MOVLW MOVWF BSF BSF DATA_EE_ADDR_LOW EEADR DATA_EE_ADDR_HI EEADRH DATA_EE_DATA EEDATA EECON1, EEPGD EECON1, CFGS EECON1, WREN INTCON, GIE 55h EECON2 0AAh EECON2 EECON1, WR INTCON, GIE ; ; Data Memory Address to write ; ; ; ; Data Memory Value to write ; Point to DATA memory ; Access EEPROM ; Enable writes ; Disable Interrupts ; ; Write 55h ; ; Write 0AAh ; Set WR bit to begin write ; Enable Interrupts BCF EECON1, WREN ; User code execution ; Disable writes on write complete (EEIF set)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 107 页 PIC18(L)F2X/4XK22 7.6 代码保护期间的操作 数据 EEPROM 存储器在配置字中有它自己的代码保护 位。如果代码保护机制被使能,外部读写操作就被禁止。 单片机本身可以读写内部数据 EEPROM,与代码保护 配置位的状态无关。更多信息,请参见第 24.0 节 “CPU 的特殊功能 ”。 7.7 防止误写操作的保护措施 有些情况下,用户并不希望写入数据 EEPROM 存储器。 为了防止 EEPROM 误写操作,器件实现了各种保护机 制。上电时, WREN 位被清零。而且,上电延时期间 (TPWRT)也会阻止对 EEPROM 进行写操作。 在欠压、电源故障或软件故障期间,写操作的启动序列 以及 WREN 位可共同防止意外写操作的发生。 7.8 使用数据 EEPROM 数据 EEPROM 是高耐用性可字节寻址的阵列,已将其 优化以便存储频繁变动的信息 (例如,程序变量或其他 经常更新的数据) 。如果一个段中的变量经常发生改 变,而另一个段中的变量不发生改变,就可能造成超出 对 EEPROM 的总写周期数,而不超出对某个字节的总 写周期数。关于写周期的限制值,请参见第 27.0 节 “ 电 气特性 ” 中的数据 EEPROM 存储器参数。如果这样,必 须执行一次阵列刷新。出于此原因,不经常更新的变量 (如常量、ID 和校准值等)应存放在闪存程序存储器中。 简单的数据 EEPROM 刷新程序如例 7-3 中所示。 注: 如果数据 EEPROM 仅用于存储常量和 / 或 很 少 改 变 的 数 据,没 有 必 要 执 行 阵 列 刷 新。请参见规范。 例 7-3: Loop CLRF BCF BCF BCF BSF BSF MOVLW MOVWF MOVLW MOVWF BSF BTFSC BRA INCFSZ BRA BCF BSF 数据 EEPROM 刷新程序 EEADR EECON1, CFGS EECON1, EEPGD INTCON, GIE EECON1, WREN EECON1, RD 55h EECON2 0AAh EECON2 EECON1, WR EECON1, WR $-2 EEADR, F LOOP ; Start at address 0 ; Set for memory ; Set for Data EEPROM ; Disable interrupts ; Enable writes ; Loop to refresh array ; Read current address ; ; Write 55h ; ; Write 0AAh ; Set WR bit to begin write ; Wait for write to complete ; Increment address ; Not zero, do it again EECON1, WREN INTCON, GIE ; Disable writes ; Enable interrupts DS41412F_CN 第 108 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 7-1: 与数据 EEPROM 存储器相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF EEADR EEADR7 EEADRH(1) — EEADR6 EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0 — — — — — EEADR9 EEADR8 EEDATA EEPROM 数据寄存器 EECON2 EEPROM 控制寄存器 2 (不是实际存在的寄存器) EECON1 EEPGD CFGS — FREE WRERR WREN WR RD IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IF PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IE 图注: — = 未实现,读为 0。 EEPROM 访问期间不使用阴影位。 注 1: 仅限 PIC18(L)F26K22 和 PIC18(L)F46K22 器件。 寄存器 所在页 116 — — — — 106 129 120 125  2011-2013 Microchip Technology Inc. DS41412F_CN 第 109 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 110 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 8.0 8 x 8 硬件乘法器 8.1 简介 所有 PIC18 器件均包含一个 8 x 8 硬件乘法器 (是 ALU 的一部分)。该乘法器可执行无符号运算并产生一个16位 运算结果,该结果存储在一对乘积寄存器PRODH:PRODL 中。该乘法器执行的运算不会影响 STATUS 寄存器中的 任何标志。 通过硬件执行乘法运算只需要一个指令周期。硬件乘法 器具有更高的计算吞吐量并缩短了乘法算法的代码长 度,从而可在许多先前仅能使用数字信号处理器的应用 中使用 PIC18 器件。表 8-1 给出了硬件和软件乘法运算 的比较,包括所需存储空间和执行时间。 8.2 工作原理 例 8-1 给出了一个 8 x 8 无符号乘法运算的指令序列。当 已在 WREG 寄存器中装入了一个参数时,实现该运算仅 需一条指令。 例 8-2 给出了一个 8 x 8 有符号乘法运算的指令序列。要 弄清参数的符号位,必须检查每个参数的最高有效位 (Most Significant bit, MSb),并做相应的减法。 例 8-1: MOVF ARG1, W MULWF ARG2 8 x 8 无符号乘法程序 ; ; ARG1 * ARG2 -> ; PRODH:PRODL 例 8-2: MOVF ARG1, W MULWF ARG2 BTFSC ARG2, SB SUBWF PRODH, F MOVF BTFSC SUBWF ARG2, W ARG1, SB PRODH, F 8 x 8 有符号乘法程序 ; ARG1 * ARG2 -> ; PRODH:PRODL ; Test Sign Bit ; PRODH = PRODH ; - ARG1 ; Test Sign Bit ; PRODH = PRODH ; - ARG2 表 8-1: 各种乘法运算的性能比较 程序 乘法实现方法 8 x 8 无符号 8 x 8 有符号 16 x 16 无符号 16 x 16 有符号 软件乘法 硬件乘法 软件乘法 硬件乘法 软件乘法 硬件乘法 软件乘法 硬件乘法 程序 存储器 (字) 13 1 33 6 21 28 52 35 周期数 时间 (最多) 64 MHz 时 40 MHz 时 10 MHz 时 4 MHz 时 69 4.3 μs 6.9 μs 27.6 μs 69 μs 1 62.5 ns 100 ns 400 ns 1 μs 91 5.7 μs 9.1 μs 36.4 μs 91 μs 6 375 ns 600 ns 2.4 μs 6 μs 242 15.1 μs 24.2 μs 96.8 μs 242 μs 28 1.8 μs 2.8 μs 11.2 μs 28 μs 254 15.9 μs 25.4 μs 102.6 μs 254 μs 40 2.5 μs 4.0 μs 16.0 μs 40 μs  2011-2013 Microchip Technology Inc. DS41412F_CN 第 111 页 PIC18(L)F2X/4XK22 例 8-3 给出了一个 16 x 16 无符号乘法运算的指令序列。 公式 8-1 为所使用的算法。32 位结果存储在 4 个寄存器 (RES<3:0>)中。 公式 8-1: RES3:RES0 = = 16 x 16 无符号乘法算法 ARG1H:ARG1L • ARG2H:ARG2L (ARG1H • ARG2H • 216) + (ARG1H • ARG2L • 28) + (ARG1L • ARG2H • 28) + (ARG1L • ARG2L) 例 8-3: MOVF MULWF MOVFF MOVFF ; MOVF MULWF MOVFF MOVFF ; MOVF MULWF MOVF ADDWF MOVF ADDWFC CLRF ADDWFC ; MOVF MULWF MOVF ADDWF MOVF ADDWFC CLRF ADDWFC 16 x 16 无符号乘法程序 ARG1L, W ARG2L PRODH, RES1 PRODL, RES0 ; ARG1L * ARG2L-> ; PRODH:PRODL ; ; ARG1H, W ARG2H PRODH, RES3 PRODL, RES2 ; ARG1H * ARG2H-> ; PRODH:PRODL ; ; ARG1L, W ARG2H PRODL, W RES1, F PRODH, W RES2, F WREG RES3, F ; ARG1L * ARG2H-> ; PRODH:PRODL ; ; Add cross ; products ; ; ; ARG1H, W ARG2L PRODL, W RES1, F PRODH, W RES2, F WREG RES3, F ; ; ARG1H * ARG2L-> ; PRODH:PRODL ; ; Add cross ; products ; ; ; 例 8-4 给出了一个 16 x 16 有符号乘法运算的指令序列。 公式 8-2 为所使用的算法。32 位结果存储在 4 个寄存器 (RES<3:0>)中。要弄清参数的符号位,必须检查每个 参数对的 MSb,并做相应的减法。 公式 8-2: 16 x 16 有符号乘法算法 RES3:RES0 = ARG1H:ARG1L • ARG2H:ARG2L = (ARG1H • ARG2H • 216) + (ARG1H • ARG2L • 28) + (ARG1L • ARG2H • 28) + (ARG1L • ARG2L) + (-1 • ARG2H<7> • ARG1H:ARG1L • 216) + (-1 • ARG1H<7> • ARG2H:ARG2L • 216) 例 8-4: 16 x 16 有符号乘法程序 MOVF ARG1L, W MULWF ARG2L MOVFF PRODH, RES1 MOVFF PRODL, RES0 ; MOVF ARG1H, W MULWF ARG2H MOVFF PRODH, RES3 MOVFF PRODL, RES2 ; MOVF ARG1L, W MULWF ARG2H MOVF PRODL, W ADDWF RES1, F MOVF PRODH, W ADDWFC RES2, F CLRF WREG ADDWFC RES3, F ; MOVF ARG1H, W MULWF ARG2L MOVF ADDWF MOVF ADDWFC CLRF ADDWFC ; BTFSS BRA MOVF SUBWF MOVF SUBWFB ; SIGN_ARG1 BTFSS BRA MOVF SUBWF MOVF SUBWFB ; CONT_CODE : PRODL, W RES1, F PRODH, W RES2, F WREG RES3, F ARG2H, 7 SIGN_ARG1 ARG1L, W RES2 ARG1H, W RES3 ARG1H, 7 CONT_CODE ARG2L, W RES2 ARG2H, W RES3 ; ARG1L * ARG2L -> ; PRODH:PRODL ; ; ; ARG1H * ARG2H -> ; PRODH:PRODL ; ; ; ARG1L * ARG2H -> ; PRODH:PRODL ; ; Add cross ; products ; ; ; ; ; ARG1H * ARG2L -> ; PRODH:PRODL ; ; Add cross ; products ; ; ; ; ARG2H:ARG2L neg? ; no, check ARG1 ; ; ; ; ARG1H:ARG1L neg? ; no, done ; ; ; DS41412F_CN 第 112 页  2011-2013 Microchip Technology Inc. 9.0 中断 PIC18(L)F2X/4XK22 器件具有多个中断源及中断优先 级功能,该功能可以给大多数中断源分配高优先级或低 优先级 (INT0 没有中断优先级位,它总是为高优先 级)。高优先级中断向量位于 0008h,低优先级中断向 量位于 0018h。高优先级中断事件可以中断正在处理的 低优先级中断。 有 19 个寄存器用于控制中断操作。 这些寄存器是: • INTCON、 INTCON2 和 INTCON3 • PIR1、 PIR2、 PIR3、 PIR4 和 PIR5 • PIE1、 PIE2、 PIE3、 PIE4 和 PIE5 • IPR1、 IPR2、 IPR3、 IPR4 和 IPR5 • RCON 建议使用 MPLAB® IDE 提供的 Microchip 头文件命名这 些寄存器中的位。这使得汇编器 / 编译器能够自动存放 指定寄存器中的这些位。 通常,中断源有 3 个位用于控制其操作。这些位分别是: • 标志位表明发生了中断事件 • 允许位允许程序跳转到中断向量地址处执行(当标 志位置 1 时) • 优先级位用于选择高优先级还是低优先级 9.1 与中档器件的兼容性 当 IPEN 位清零 (默认状态)时,便会禁止中断优先级 功能,此时中断是与 PIC® 单片机中档器件兼容的。在兼 容模式下, IPRx 寄存器的中断优先级位不起作用。 INTCON 寄存器的 PEIE/GIEL 位是外设的全局中断允许 位。 PEIE/GIEL 位只能禁止外设中断源,在 GIE/GIEH 位也置1时可以允许外设中断源。INTCON寄存器的GIE/ GIEH位是全局中断允许位,它可以允许所有非外设中断 源,可以禁止包括外设在内的所有中断源。在兼容模式 下,所有中断均跳转到地址 0008h。 PIC18(L)F2X/4XK22 9.2 中断优先级 通过将 RCON 寄存器的 IPEN 位置 1,可使能中断优先 级功能。当使能中断优先级时,兼容模式的 GIE/GIEH 和 PEIE/GIEL 全局中断允许位被 GIEH(高优先级)和 GIEL (低优先级)全局中断允许位替代。当 INTCON 寄存器的 GIEH 位置 1 时,可以允许所有相应的 IPRx 寄存器或 INTCONx 寄存器优先级位置 1 (高优先级) 的中断。当清零时, GIEH 位可以禁止包括低优先级中 断源在内的所有中断源。 INTCON 寄存器的 GIEL 位在 清零时,只能禁止相应的优先级位清零 (低优先级)的 中断。当置 1 时, GIEL 位可以在 GIEH 位也置 1 时允 许低优先级中断源。 当中断标志位、允许位及相应的全局中断允许 (GIE) 位均被置 1 时,中断将根据中断源的优先级位设置的级 别立即跳转到地址 0008h (高优先级)或 0018h (低 优先级)。也可以通过设置相应的中断允许位来禁止单 个中断。 9.3 中断响应 当响应中断时,全局中断允许位被清零以禁止后续中 断。当 IPEN 位清零时, GIE/GIEH 位是全局中断允许 位。当 IPEN 位置 1 时(即使能中断优先级),GIEH 位 是高优先级全局中断允许位, GIEL 位是低优先级全局 中断允许位。高优先级中断源会中断低优先级中断。在 处理高优先级中断时,低优先级中断将不被处理。 返回地址被压入堆栈,中断向量地址(0008h或 0018h) 被装入 PC。只要在中断服务程序中,就可以通过查询 INTCONx 和 PIRx 寄存器中的中断标志位来确定中断 源。在重新允许中断前,必须用软件将中断标志位清 零,以避免重复响应同一中断。 执行 “ 从中断返回 ” 指令 RETFIE 将退出中断服务程序, 同时将 GIE/GIEH 位 (若使用中断优先级则为 GIEH 或 GIEL 位)置 1,从而重新允许中断。 对于外部中断事件,例如 INT 引脚中断或者 PORTB 电 平变化中断,中断响应延时将会是 3 到 4 个指令周期。 对于单周期或双周期指令,中断响应延时完全相同。各 中断标志位的置 1 不受对应的中断允许位和全局中断允 许位状态的影响。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 113 页 PIC18(L)F2X/4XK22 注: 当已允许任何中断时,不要使用 MOVFF 指 令来改写任何中断控制寄存器。这样做可 能造成单片机运行出错。 图 9-1: PIC18 中断逻辑 产生高优先级中断 产生低优先级中断 PIR1<6:0> PIE1<6:0> IPR1<6:0> PIR2<7:0> PIE2<7:0> IPR2<7:0> PIR3<7:0> PIE3<7:0> IPR3<7:0> PIR4<2:0> PIE4<2:0> IPR4<2:0> PIR5<2:0> PIE5<2:0> IPR5<2:0> PIR1<6:0> PIE1<6:0> IPR1<6:0> PIR2<7:0> PIE2<7:0> IPR2<7:0> PIR3<7:0> PIE3<7:0> IPR3<7:0> PIR4<2:0> PIE4<2:0> IPR4<2:0> PIR5<2:0> PIE5<2:0> IPR5<2:0> INT0IF INT0IE TMR0IF TMR0IE TMR0IP RBIF (1) RBIE RBIP INT1IF INT1IE INT1IP INT2IF INT2IE INT2IP IPEN IPEN GIEL/PEIE IPEN TMR0IF TMR0IE TMR0IP RBIF (1) RBIE RBIP INT1IF INT1IE INT1IP INT2IF INT2IE INT2IP 注 1: RBIF 中断还要求使能各个引脚的 IOCB。 如果处于空闲或 休眠模式则唤醒 到 CPU 的中断 跳转到向量单元 0008h GIEH/GIE 到 CPU 的中断 跳转到向量单元 0018h GIEH/GIE GIEL/PEIE DS41412F_CN 第 114 页  2011-2013 Microchip Technology Inc. 9.4 INTCON 寄存器 INTCON 寄存器是可读写的寄存器,包含各个中断允许 位、优先级位和标志位。 9.5 PIR 寄存器 PIR 寄存器包含各外设中断的标志位。根据外设中断源 的数量,有5个外设中断请求标志寄存器(PIR1、PIR2、 PIR3、 PIR4 和 PIR5)。 9.6 PIE 寄存器 PIE 寄存器包含各外设中断的允许位。根据外设中断源 的数量,有 5 个外设中断允许寄存器 (PIE1、 PIE2、 PIE3、 PIE4 和 PIE5)。当 IPEN = 0 时,要允许任一外 设中断,必须将 PEIE/GIEL 位置 1。 9.7 IPR 寄存器 IPR 寄存器包含各外设中断的优先级位。根据外设中断源 的数量,有 5 个外设中断优先级寄存器 (IPR1、 IPR2、 IPR3、IPR4 和 IPR5)。使用优先级位时,要求将中断优 先级使能 (IPEN)位置 1。 PIC18(L)F2X/4XK22  2011-2013 Microchip Technology Inc. DS41412F_CN 第 115 页 PIC18(L)F2X/4XK22 9.8 寄存器定义:中断控制 寄存器 9-1: INTCON:中断控制寄存器 R/W-0 GIE/GIEH bit 7 R/W-0 PEIE/GIEL R/W-0 TMR0IE R/W-0 INT0IE R/W-0 RBIE R/W-0 TMR0IF R/W-0 INT0IF 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 GIE/GIEH:全局中断允许位 当 IPEN = 0 时: 1 = 允许所有未被屏蔽的中断 0 = 禁止所有中断 (包括外设中断) 当 IPEN = 1 时: 1 = 允许所有高优先级中断 0 = 禁止所有中断 (包括低优先级中断) bit 6 PEIE/GIEL: 外设中断允许位 当 IPEN = 0 时: 1 = 允许所有未被屏蔽的外设中断 0 = 禁止所有外设中断 当 IPEN = 1 时: 1 = 允许所有低优先级的中断 0 = 禁止所有低优先级的中断 bit 5 TMR0IE:TMR0 溢出中断允许位 1 = 允许 TMR0 溢出中断 0 = 禁止 TMR0 溢出中断 bit 4 INT0IE:INT0 外部中断允许位 1 = 允许 INT0 外部中断 0 = 禁止 INT0 外部中断 bit 3 RBIE:PORTB 电平变化中断 (IOCx)允许位 (2) 1 = 允许 IOCx 端口电平变化中断 0 = 禁止 IOCx 端口电平变化中断 bit 2 TMR0IF:TMR0 溢出中断标志位 1 = TMR0 寄存器已溢出 (必须用软件清零) 0 = TMR0 寄存器未溢出 bit 1 INT0IF:INT0 外部中断标志位 1 = 发生了 INT0 外部中断 (必须用软件清零) 0 = 未发生 INT0 外部中断 bit 0 RBIF:PORTB 电平变化中断 (IOCx)标志位 (1) 1 = IOC<3:0> (RB<7:4>)引脚中至少有一个引脚的电平状态发生了改变 (必须用软件清零) 0 = 所有 IOC<3:0> (RB<7:4>)引脚的电平状态都没有改变 注 1: 不匹配条件会继续将 RBIF 位置 1。读取 PORTB 将结束不匹配条件,并允许将该位清零。 2: RB 端口电平变化中断还要求使能各个引脚的 IOCB。 R/W-x RBIF bit 0 注: 当中断条件产生时,不管相应的中断允许 位或全局中断允许位的状态如何,中断标 志位都将置 1。用户软件应在允许一个中断 前,先将相应的中断标志位清零。这样做 便可用软件查询中断标志位。 DS41412F_CN 第 116 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-2: INTCON2:中断控制 2 寄存器 R/W-1 R/W-1 R/W-1 R/W-1 U-0 R/W-1 U-0 RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — bit 7 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 RBPU:PORTB 上拉使能位 1 = 禁止所有 PORTB 上拉 0 = 如果引脚是输入引脚,且对应的 WPUB 位置 1,则使能 PORTB 上拉 bit 6 INTEDG0:外部中断 0 边沿选择位 1 = 上升沿触发中断 0 = 下降沿触发中断 bit 5 INTEDG1:外部中断 1 边沿选择位 1 = 上升沿触发中断 0 = 下降沿触发中断 bit 4 INTEDG2:外部中断 2 边沿选择位 1 = 上升沿触发中断 0 = 下降沿触发中断 bit 3 未实现:读为 0 bit 2 TMR0IP:TMR0 溢出中断优先级位 1 = 高优先级 0 = 低优先级 bit 1 未实现:读为 0 bit 0 RBIP:RB 端口电平变化中断优先级位 1 = 高优先级 0 = 低优先级 R/W-1 RBIP bit 0 注: 当中断条件产生时,不管相应的中断允许 位或全局中断允许位的状态如何,中断标 志位都将置1。用户软件应在允许一个中断 前,先将相应的中断标志位清零。这样做 便可用软件查询中断标志位。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 117 页 PIC18(L)F2X/4XK22 寄存器 9-3: INTCON3:中断控制 3 寄存器 R/W-1 R/W-1 U-0 R/W-0 R/W-0 U-0 INT2IP INT1IP — INT2IE INT1IE — bit 7 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 bit 7 INT2IP:INT2 外部中断优先级位 1 = 高优先级 0 = 低优先级 bit 6 INT1IP:INT1 外部中断优先级位 1 = 高优先级 0 = 低优先级 bit 5 未实现:读为 0 bit 4 INT2IE:INT2 外部中断允许位 1 = 允许 INT2 外部中断 0 = 禁止 INT2 外部中断 bit 3 INT1IE:INT1 外部中断允许位 1 = 允许 INT1 外部中断 0 = 禁止 INT1 外部中断 bit 2 未实现:读为 0 bit 1 INT2IF:INT2 外部中断标志位 1 = 发生了 INT2 外部中断 (必须用软件清零) 0 = 未发生 INT2 外部中断 bit 0 INT1IF:INT1 外部中断标志位 1 = 发生了 INT1 外部中断 (必须用软件清零) 0 = 未发生 INT1 外部中断 注: 当中断条件产生时,不管相应的中断允许 位或全局中断允许位的状态如何,中断标 志位都将置1。用户软件应在允许一个中断 前,先将相应的中断标志位清零。这样做 便可用软件查询中断标志位。 R/W-0 INT2IF x = 未知 R/W-0 INT1IF bit 0 DS41412F_CN 第 118 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-4: U-0 — bit 7 PIR1:外设中断请求 (标志)寄存器 1 R/W-0 ADIF R-0 RC1IF R-0 TX1IF R/W-0 SSP1IF R/W-0 CCP1IF R/W-0 TMR2IF 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 未实现:读为 0。 bit 6 ADIF:A/D 转换器中断标志位 1 = 一次 A/D 转换已完成 (必须用软件清零) 0 = A/D 转换未完成或尚未开始 bit 5 RC1IF:EUSART1 接收中断标志位 1 = EUSART1 接收缓冲区 RCREG1 已满 (读取 RCREG1 时清零) 0 = EUSART1 接收缓冲区为空 bit 4 TX1IF:EUSART1 发送中断标志位 1 = EUSART1 发送缓冲区 TXREG1 为空 (写入 TXREG1 时清零) 0 = EUSART1 发送缓冲区已满 bit 3 SSP1IF:主同步串口 1 中断标志位 1 = 发送 / 接收已完成 (必须用软件清零) 0 = 等待发送 / 接收 bit 2 CCP1IF:CCP1 中断标志位 捕捉模式: 1 = 发生了 TMR1 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR1 寄存器捕捉 比较模式: 1 = 发生了 TMR1 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR1 寄存器的比较匹配 PWM 模式: 在此模式下未使用 bit 1 TMR2IF:TMR2 与 PR2 匹配中断标志位 1 = TMR2 与 PR2 发生匹配 (必须用软件清零) 0 = TMR2 与 PR2 未发生匹配 bit 0 TMR1IF:TMR1 溢出中断标志位 1 = TMR1 寄存器已溢出 (必须用软件清零) 0 = TMR1 寄存器未溢出 R/W-0 TMR1IF bit 0 注 1: 当中断条件产生时,不管相应的中断允许 位 或 全 局 中 断 允 许 位 GIE/GIEH (在 INTCON 寄存器中)的状态如何,中断标 志位都将置 1。 2: 用户软件应在允许中断前和处理完中断 后,将相应的中断标志位清零。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 119 页 PIC18(L)F2X/4XK22 寄存器 9-5: R/W-0 OSCFIF bit 7 PIR2:外设中断请求 (标志)寄存器 2 R/W-0 C1IF R/W-0 C2IF R/W-0 EEIF R/W-0 BCL1IF R/W-0 HLVDIF R/W-0 TMR3IF 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 OSCFIF:振荡器故障中断标志位 1 = 器件振荡器发生故障,改由 HFINTOSC 作为时钟输入 (必须用软件清零) 0 = 器件时钟正常工作 bit 6 C1IF:比较器 C1 中断标志位 1 = 比较器 C1 输出已改变 (必须用软件清零) 0 = 比较器 C1 输出未改变 bit 5 C2IF:比较器 C2 中断标志位 1 = 比较器 C2 输出已改变 (必须用软件清零) 0 = 比较器 C2 输出未改变 bit 4 EEIF:数据 EEPROM/ 闪存写操作中断标志位 1 = 写操作完成 (必须用软件清零) 0 = 写操作未完成或尚未开始 bit 3 BCL1IF:MSSP1 总线冲突中断标志位 1 = 发生了总线冲突 (必须用软件清零) 0 = 未发生总线冲突 bit 2 HLVDIF:低压检测中断标志位 1 = 发生了低压条件 (方向由 HLVDCON 寄存器的 VDIRMAG 位确定) 0 = 未发生低压条件 bit 1 TMR3IF:TMR3 溢出中断标志位 1 = TMR3 寄存器已溢出 (必须用软件清零) 0 = TMR3 寄存器未溢出 bit 0 CCP2IF:CCP2 中断标志位 捕捉模式: 1 = 发生了 TMR1 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR1 寄存器捕捉 比较模式: 1 = 发生了 TMR1 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR1 寄存器的比较匹配 PWM 模式: 在此模式下未使用。 R/W-0 CCP2IF bit 0 DS41412F_CN 第 120 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-6: R/W-0 SSP2IF bit 7 PIR3:外设中断 (标志)寄存器 3 R/W-0 R/W-0 R/W-0 R/W-0 BCL2IF RC2IF TX2IF CTMUIF R/W-0 TMR5GIF R/W-0 TMR3GIF R/W-0 TMR1GIF bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 SSP2IF:同步串口中断标志位 1 = 发送 / 接收已完成 (必须用软件清零) 0 = 等待发送 / 接收 bit 6 BCL2IF:MSSP2 总线冲突中断标志位 1 = 当在 I2C 主模式下将 SSP2 模块配置为发送时,发生了总线冲突 (必须用软件清零) 0 = 未发生总线冲突 bit 5 RC2IF:EUSART2 接收中断标志位 1 = EUSART2 接收缓冲区 RCREG2 已满 (读取 RCREG2 时清零) 0 = EUSART2 接收缓冲区为空 bit 4 TX2IF:EUSART2 发送中断标志位 1 = EUSART2 发送缓冲区 TXREG2 为空 (写入 TXREG2 时清零) 0 = EUSART2 发送缓冲区已满 bit 3 CTMUIF:CTMU 中断标志位 1 = 发生了 CTMU 中断 (必须用软件清零) 0 = 未发生 CTMU 中断 bit 2 TMR5GIF:TMR5 门控中断标志位 1 = 发生了 TMR 门控中断 (必须用软件清零) 0 = 未发生 TMR 门控中断 bit 1 TMR3GIF:TMR3 门控中断标志位 1 = 发生了 TMR 门控中断 (必须用软件清零) 0 = 未发生 TMR 门控中断 bit 0 TMR1GIF:TMR1 门控中断标志位 1 = 发生了 TMR 门控中断 (必须用软件清零) 0 = 未发生 TMR 门控中断  2011-2013 Microchip Technology Inc. DS41412F_CN 第 121 页 PIC18(L)F2X/4XK22 寄存器 9-7: U-0 — bit 7 PIR4:外设中断 (标志)寄存器 4 U-0 U-0 U-0 U-0 — — — — R/W-0 CCP5IF R/W-0 CCP4IF 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-3 bit 2 bit 1 bit 0 未实现:读为 0 CCP5IF:CCP5 中断标志位 捕捉模式: 1 = 发生了 TMR 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR 寄存器捕捉 比较模式: 1 = 发生了 TMR 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR 寄存器的比较匹配 PWM 模式: 在 PWM 模式下未使用。 CCP4IF:CCP4 中断标志位 捕捉模式: 1 = 发生了 TMR 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR 寄存器捕捉 比较模式: 1 = 发生了 TMR 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR 寄存器的比较匹配 PWM 模式: 在 PWM 模式下未使用。 CCP3IF:ECCP3 中断标志位 捕捉模式: 1 = 发生了 TMR 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR 寄存器捕捉 比较模式: 1 = 发生了 TMR 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR 寄存器的比较匹配 PWM 模式: 在 PWM 模式下未使用。 R/W-0 CCP3IF bit 0 DS41412F_CN 第 122 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-8: U-0 — bit 7 PIR5:外设中断 (标志)寄存器 5 U-0 U-0 U-0 U-0 — — — — R/W-0 TMR6IF R/W-0 TMR5IF 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-3 bit 2 bit 1 bit 0 未实现:读为 0 TMR6IF:TMR6 与 PR6 匹配中断标志位 1 = TMR6 与 PR6 发生匹配 (必须用软件清零) 0 = TMR6 与 PR6 未发生匹配 TMR5IF:TMR5 溢出中断标志位 1 = TMR5 寄存器已溢出 (必须用软件清零) 0 = TMR5 寄存器未溢出 TMR4IF:TMR4 与 PR4 匹配中断标志位 1 = TMR4 与 PR4 发生匹配 (必须用软件清零) 0 = TMR4 与 PR4 未发生匹配 R/W-0 TMR4IF bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 123 页 PIC18(L)F2X/4XK22 寄存器 9-9: U-0 — bit 7 PIE1:外设中断允许 (标志)寄存器 1 R/W-0 ADIE R/W-0 RC1IE R/W-0 TX1IE R/W-0 SSP1IE R/W-0 CCP1IE R/W-0 TMR2IE 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 未实现:读为 0。 bit 6 ADIE:A/D 转换器中断允许位 1 = 允许 A/D 中断 0 = 禁止 A/D 中断 bit 5 RC1IE:EUSART1 接收中断允许位 1 = 允许 EUSART1 接收中断 0 = 禁止 EUSART1 接收中断 bit 4 TX1IE:EUSART1 发送中断允许位 1 = 允许 EUSART1 发送中断 0 = 禁止 EUSART1 发送中断 bit 3 SSP1IE:主同步串口 1 中断允许位 1 = 允许 MSSP1 中断 0 = 禁止 MSSP1 中断 bit 2 CCP1IE:CCP1 中断允许位 1 = 允许 CCP1 中断 0 = 禁止 CCP1 中断 bit 1 TMR2IE:TMR2 与 PR2 匹配中断允许位 1 = 允许 TMR2 与 PR2 匹配中断 0 = 禁止 TMR2 与 PR2 匹配中断 bit 0 TMR1IE:TMR1 溢出中断允许位 1 = 允许 TMR1 溢出中断 0 = 禁止 TMR1 溢出中断 R/W-0 TMR1IE bit 0 DS41412F_CN 第 124 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-10: R/W-0 OSCFIE bit 7 PIE2:外设中断允许 (标志)寄存器 2 R/W-0 C1IE R/W-0 C2IE R/W-0 EEIE R/W-0 BCL1IE R/W-0 HLVDIE R/W-0 TMR3IE 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 OSCFIE:振荡器故障中断允许位 1 = 允许 0 = 禁止 bit 6 C1IE:比较器 C1 中断允许位 1 = 允许 0 = 禁止 bit 5 C2IE:比较器 C2 中断允许位 1 = 允许 0 = 禁止 bit 4 EEIE:数据 EEPROM/ 闪存写操作中断允许位 1 = 允许 0 = 禁止 bit 3 BCL1IE:MSSP1 总线冲突中断允许位 1 = 允许 0 = 禁止 bit 2 HLVDIE:低压检测中断允许位 1 = 允许 0 = 禁止 bit 1 TMR3IE:TMR3 溢出中断允许位 1 = 允许 0 = 禁止 bit 0 CCP2IE:CCP2 中断允许位 1 = 允许 0 = 禁止 R/W-0 CCP2IE bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 125 页 PIC18(L)F2X/4XK22 寄存器 9-11: R/W-0 SSP2IE bit 7 PIE3:外设中断允许 (标志)寄存器 3 R/W-0 R/W-0 R/W-0 R/W-0 BCL2IE RC2IE TX2IE CTMUIE R/W-0 TMR5GIE R/W-0 TMR3GIE R/W-0 TMR1GIE bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 SSP2IE:同步串口 2 中断允许位 1 = 允许 0 = 禁止 bit 6 BCL2IE:MSSP2 总线冲突中断允许位 1 = 允许 0 = 禁止 bit 5 RC2IE:EUSART2 接收中断允许位 1 = 允许 0 = 禁止 bit 4 TX2IE:EUSART2 发送中断允许位 1 = 允许 0 = 禁止 bit 3 CTMUIE:CTMU 中断允许位 1 = 允许 0 = 禁止 bit 2 TMR5GIE:TMR5 门控中断允许位 1 = 允许 0 = 禁止 bit 1 TMR3GIE:TMR3 门控中断允许位 1 = 允许 0 = 禁止 bit 0 TMR1GIE:TMR1 门控中断允许位 1 = 允许 0 = 禁止 DS41412F_CN 第 126 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-12: U-0 — bit 7 PIE4:外设中断允许 (标志)寄存器 4 U-0 U-0 U-0 U-0 — — — — R/W-0 CCP5IE R/W-0 CCP4IE 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 bit 7-3 bit 2 bit 1 bit 0 未实现:读为 0 CCP5IE:CCP5 中断允许位 1 = 允许 0 = 禁止 CCP4IE:CCP4 中断允许位 1 = 允许 0 = 禁止 CCP3IE:CCP3 中断允许位 1 = 允许 0 = 禁止 U = 未实现位,读为 0 0 = 清零 x = 未知 寄存器 9-13: U-0 — bit 7 PIE5:外设中断允许 (标志)寄存器 5 U-0 U-0 U-0 U-0 — — — — R/W-0 TMR6IE R/W-0 TMR5IE 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 bit 7-3 bit 2 bit 1 bit 0 未实现:读为 0 TMR6IE:TMR6 与 PR6 匹配中断允许位 1 = 允许 TMR6 与 PR6 匹配中断 0 = 禁止 TMR6 与 PR6 匹配中断 TMR5IE:TMR5 溢出中断允许位 1 = 允许 TMR5 溢出中断 0 = 禁止 TMR5 溢出中断 TMR4IE:TMR4 与 PR4 匹配中断允许位 1 = 允许 TMR4 与 PR4 匹配中断 0 = 禁止 TMR4 与 PR4 匹配中断 x = 未知 R/W-0 CCP3IE bit 0 R/W-0 TMR4IE bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 127 页 PIC18(L)F2X/4XK22 寄存器 9-14: U-0 — bit 7 IPR1:外设中断优先级寄存器 1 R/W-1 ADIP R/W-1 RC1IP R/W-1 TX1IP R/W-1 SSP1IP R/W-1 CCP1IP R/W-1 TMR2IP 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 未实现:读为 0 bit 6 ADIP:A/D 转换器中断优先级位 1 = 高优先级 0 = 低优先级 bit 5 RC1IP:EUSART1 接收中断优先级位 1 = 高优先级 0 = 低优先级 bit 4 TX1IP:EUSART1 发送中断优先级位 1 = 高优先级 0 = 低优先级 bit 3 SSP1IP:主同步串口 1 中断优先级位 1 = 高优先级 0 = 低优先级 bit 2 CCP1IP:CCP1 中断优先级位 1 = 高优先级 0 = 低优先级 bit 1 TMR2IP:TMR2 与 PR2 匹配中断优先级位 1 = 高优先级 0 = 低优先级 bit 0 TMR1IP:TMR1 溢出中断优先级位 1 = 高优先级 0 = 低优先级 R/W-1 TMR1IP bit 0 DS41412F_CN 第 128 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-15: R/W-1 OSCFIP bit 7 IPR2:外设中断优先级寄存器 2 R/W-1 C1IP R/W-1 C2IP R/W-1 EEIP R/W-1 BCL1IP R/W-1 HLVDIP R/W-1 TMR3IP 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 OSCFIP:振荡器故障中断优先级位 1 = 高优先级 0 = 低优先级 bit 6 C1IP:比较器 C1 中断优先级位 1 = 高优先级 0 = 低优先级 bit 5 C2IP:比较器 C2 中断优先级位 1 = 高优先级 0 = 低优先级 bit 4 EEIP:数据 EEPROM/ 闪存写操作中断优先级位 1 = 高优先级 0 = 低优先级 bit 3 BCL1IP:MSSP1 总线冲突中断优先级位 1 = 高优先级 0 = 低优先级 bit 2 HLVDIP:低压检测中断优先级位 1 = 高优先级 0 = 低优先级 bit 1 TMR3IP:TMR3 溢出中断优先级位 1 = 高优先级 0 = 低优先级 bit 0 CCP2IP:CCP2 中断优先级位 1 = 高优先级 0 = 低优先级 R/W-1 CCP2IP bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 129 页 PIC18(L)F2X/4XK22 寄存器 9-16: R/W-0 SSP2IP bit 7 IPR3:外设中断优先级寄存器 3 R/W-0 R/W-0 R/W-0 BCL2IP RC2IP TX2IP R/W-0 CTMUIP R/W-0 TMR5GIP R/W-0 TMR3GIP R/W-0 TMR1GIP bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 SSP2IP:同步串口 2 中断优先级位 1 = 高优先级 0 = 低优先级 bit 6 BCL2IP:MSSP2 总线冲突中断优先级位 1 = 高优先级 0 = 低优先级 bit 5 RC2IP:EUSART2 接收中断优先级位 1 = 高优先级 0 = 低优先级 bit 4 TX2IP:EUSART2 发送中断优先级位 1 = 高优先级 0 = 低优先级 bit 3 CTMUIP:CTMU 中断优先级位 1 = 高优先级 0 = 低优先级 bit 2 TMR5GIP:TMR5 门控中断优先级位 1 = 高优先级 0 = 低优先级 bit 1 TMR3GIP:TMR3 门控中断优先级位 1 = 高优先级 0 = 低优先级 bit 0 TMR1GIP:TMR1 门控中断优先级位 1 = 高优先级 0 = 低优先级 DS41412F_CN 第 130 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 9-17: IPR4:外设中断优先级寄存器 4 U-0 U-0 U-0 U-0 U-0 — — — — — bit 7 R/W-0 CCP5IP R/W-0 CCP4IP 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 bit 7-3 bit 2 bit 1 bit 0 未实现:读为 0 CCP5IP:CCP5 中断优先级位 1 = 高优先级 0 = 低优先级 CCP4IP:CCP4 中断优先级位 1 = 高优先级 0 = 低优先级 CCP3IP:CCP3 中断优先级位 1 = 高优先级 0 = 低优先级 U = 未实现位,读为 0 0 = 清零 x = 未知 寄存器 9-18: IPR5:外设中断优先级寄存器 5 U-0 U-0 U-0 U-0 U-0 — — — — — bit 7 R/W-0 TMR6IP R/W-0 TMR5IP 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 bit 7-3 bit 2 bit 1 bit 0 未实现:读为 0 TMR6IP:TMR6 与 PR6 匹配中断优先级位 1 = 高优先级 0 = 低优先级 TMR5IP:TMR5 溢出中断优先级位 1 = 高优先级 0 = 低优先级 TMR4IP:TMR4 与 PR4 匹配中断优先级位 1 = 高优先级 0 = 低优先级 x = 未知 R/W-0 CCP3IP bit 0 R/W-0 TMR4IP bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 131 页 PIC18(L)F2X/4XK22 9.9 INTn 引脚中断 RB0/INT0、 RB1/INT1 和 RB2/INT2 引脚上的外部中断 都 是 边 沿 触 发 的。如 果 INTCON2 寄 存 器 中 相应的 INTEDGx 位被置 1 (= 1),则为上升沿触发;如果该 位被清零,则为下降沿触发。当 RBx/INTx 引脚上出现 一个有效边沿时,相应的标志位 INTxF 被置 1。通过清 零相应的中断允许位 INTxE,可禁止该中断。在重新允 许该中断前,必须在中断服务程序中先用软件将中断标 志位 INTxF 清零。 如果 INTxE 位在进入空闲或休眠模式前被置 1,则所有 的外部中断(INT0、INT2 和 INT2)均能将处理器从空 闲或休眠模式唤醒。如果全局中断允许位 GIE/GIEH 被 置 1,则处理器将在被唤醒之后跳转到中断向量处执行 程序。 INT1 和 INT2 的中断优先级由 INTCON3 寄存器的中断 优先级位 INT1IP 和 INT2IP 的值决定。没有与 INT0 相 关的优先级位。 INT0 始终是一个高优先级的中断源。 9.10 TMR0 中断 在 8 位模式 (默认模式)下, TMR0 寄存器的溢出 (FFh → 00h)会将 TMR0IF 标志位置 1。在 16 位模式 下,TMR0H:TMR0L寄存器对的溢出(FFFFh → 0000h) 会将 TMR0IF 标志位置 1。可以通过置 1/ 清零 INTCON 寄存器中的中断允许位 TMR0IE 来允许 / 禁止该中断。 Timer0 的中断优先级由 INTCON2 寄存器的中断优先级 位 TMR0IP 的值决定。关于 Timer0 模块的更多详细信 息,请参见第 11.0 节 “Timer0 模块 ”。 9.11 PORTB 电平变化中断 PORTB<7:4> 上的输入电平变化会将 INTCON 寄存器 的标志位 RBIF 置 1。可以通过置 1/ 清零 INTCON 寄存 器中的中断允许位 RBIE 来允许 / 禁止该中断。各个引 脚还必须使用 IOCB 寄存器分别使能。 PORTB 电平变 化中断的优先级由 INTCON2 寄存器的中断优先级位 RBIP 中的值决定。 9.12 中断现场保护 在中断期间, PC 的返回地址被保存在堆栈中。另外, WREG、 STATUS 和 BSR 寄存器的值被压入快速返回 堆栈。如果未使用从中断快速返回功能 (见第 5.2.1 节 “ 快速寄存器堆栈 ”),那么用户可能需要在进入中断服 务程序前,保存 WREG、STATUS 和 BSR 寄存器的值。 根据用户的具体应用,还可能需要保存其他寄存器的 值。例 9-1 在执行中断服务程序期间,保存并恢复 WREG、 STATUS 和 BSR 寄存器的值。 例 9-1: 将 STATUS、 WREG 和 BSR 寄存器的值保存在 RAM 中 MOVWF W_TEMP MOVFF STATUS, STATUS_TEMP MOVFF BSR, BSR_TEMP ; ; USER ISR CODE ; MOVFF BSR_TEMP, BSR MOVF W_TEMP, W MOVFF STATUS_TEMP, STATUS ; W_TEMP is in virtual bank ; STATUS_TEMP located anywhere ; BSR_TMEP located anywhere ; Restore BSR ; Restore WREG ; Restore STATUS DS41412F_CN 第 132 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 9-1: 与中断相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ANSELB — — ANSB5 ANSB4 ANSB3 ANSB2 INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP INTCON3 INT2IP INT1IP — INT2IE INT1IE — IOCB IOCB7 IOCB6 IOCB5 IOCB4 — — IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP IPR4 — — — — — CCP5IP IPR5 — — — — — TMR6IP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE PIE4 — — — — — CCP5IE PIE5 — — — — — TMR6IE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF PIR4 — — — — — CCP5IF PIR5 — — — — — TMR6IF PORTB RB7 RB6 RB5 RB4 RB3 RB2 RCON IPEN SBOREN — RI TO PD 图注: — = 未实现位,读为 0。中断不使用阴影位。 ANSB1 INT0IF — INT2IF — TMR2IP TMR3IP TMR3GIP CCP4IP TMR5IP TMR2IE TMR3IE TMR3GIE CCP4IE TMR5IE TMR2IF TMR3IF TMR3GIF CCP4IF TMR5IF RB1 POR ANSB0 RBIF RBIP INT1IF — TMR1IP CCP2IP TMR1GIP CCP3IP TMR4IP TMR1IE CCP2IE TMR1GIE CCP3IE TMR4IE TMR1IF CCP2IF TMR1GIF CCP3IF TMR4IF RB0 BOR 寄存器 所在页 155 116 117 118 158 128 129 130 131 131 124 125 126 127 127 119 120 121 122 123 153 60 表 9-2: 与中断相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CONFIG3H MCLRE — P2BMX T3CMX CONFIG4L DEBUG XINST — — 图注: — = 未实现位,读为 0。中断不使用阴影位。 HFOFST CCP3MX — LVP PBADEN — CCP2MX STRVEN 寄存器 所在页 360 361  2011-2013 Microchip Technology Inc. DS41412F_CN 第 133 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 134 页  2011-2013 Microchip Technology Inc. 10.0 I/O 端口 根据选定的器件和使能的功能,最多有 5 个端口可供使 用。 I/O 端口的所有引脚与器件上外设功能的一个或多 个备用功能复用。通常而言,当某个外设使能时,其相 关引脚可能不能用作通用 I/O 引脚。 每个端口都有 5 个工作寄存器。这些寄存器是: • TRIS 寄存器 (数据方向寄存器) • PORT 寄存器 (读取器件引脚的电平) • LAT 寄存器 (输出锁存器) • ANSEL 寄存器 (模拟输入控制) • SLRCON 寄存器 (端口压摆率控制) 数据锁存器 (LAT 寄存器)对 I/O 引脚驱动值进行读 修改 - 写操作时非常有用。 图 10-1 给出了通用 I/O 端口的简化模型,没有给出与其 他外设的接口。 图 10-1: 通用 I/O 端口的工作原理 读 LAT 数据 总线 写 LAT 或端口 写 TRIS 读 TRIS D Q CK 数据锁存器 DQ CK TRIS 锁存器 TRISx I/O 引脚 (1) ANSELx 输入 缓冲器 读端口 Q D ENEN 注 1: 在 I/O 引脚与 VDD 和 VSS 之间接有保护二极管。 PIC18(L)F2X/4XK22 10.1 PORTA 寄存器 PORTA 是一个 8 位宽的双向端口,对应的数据方向寄 存器是 TRISA。将 TRISA 某位置 1 (= 1)时,会将 PORTA 的相应引脚设为输入(即,禁止输出驱动器)。 将 TRISA 某位清零 (= 0)时,会将 PORTA 的相应引 脚设为输出 (即,使能输出驱动器并将输出锁存器中的 内容输出到选中引脚)。 读 PORTA 寄存器将读出相应引脚的状态,而对其进行 写操作则是将数据写入端口锁存器。 数据锁存寄存器(LATA)也是存储器映射的。对 LATA 寄 存器执行读 - 修改 - 写操作将读写 PORTA 的锁存输出值。 RA4 引脚与 Timer0 模块的时钟输入以及比较器输出之 一复用,成为 RA4/T0CKI/C1OUT 引脚。 RA6 和 RA7 引脚与主振荡器引脚复用;通过在配置寄存器(详情请 参见第 24.1 节 “ 配置位 ”)中对主振荡器进行配置可将 这两个引脚使能为振荡器或 I/O 引脚。当没被用作端口 引脚时, RA6 和 RA7 及其相关的 TRIS 和 LAT 位均读 为 0。 其他 PORTA 引脚与模拟输入、模拟 VREF+、 VREF- 输 入和比较器参考电压输出复用。通过设置 ANSELA 寄存 器中的 ANSELA<5, 3:0> 位,可以选择引脚 RA<3:0> 和 RA5 作为模拟引脚工作;这是上电复位后的默认设置。 通过设置 CM1CON0 和 CM2CON0 寄存器中相应的位, 还可以将 RA0 至 RA5 引脚用作比较器输入或输出。 注: 上电复位时,RA5 和 RA<3:0> 被配置为模拟 输入并读为 0。 RA4 则被配置为数字输入。 RA4/T0CKI/C1OUT 引脚是施密特触发器输入引脚。所 有其他 PORTA 引脚都是 TTL 输入电平和全 CMOS 输 出驱动器。 TRISA 寄存器控制着 PORTA 引脚的方向,即使它们被 用作模拟输入。当引脚用于模拟输入时,用户应确保 TRISA 寄存器中的各位保持置 1。 例 10-1: 初始化 PORTA MOVLB CLRF CLRF MOVLW MOVWF MOVLW MOVWF 0xF PORTA LATA E0h ANSELA 0CFh TRISA ; Set BSR for banked SFRs ; Initialize PORTA by ; clearing output ; data latches ; Alternate method ; to clear output ; data latches ; Configure I/O ; for digital inputs ; Value used to ; initialize data ; direction ; Set RA<3:0> as inputs ; RA<5:4> as outputs  2011-2013 Microchip Technology Inc. DS41412F_CN 第 135 页 PIC18(L)F2X/4XK22 表 10-1: PORTA I/O 汇总 引脚名称 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RA0/C12IN0-/AN0 RA0 0 1 C12IN0- 1 AN0 1 RA1/C12IN1-/AN1 RA1 0 1 C12IN1- 1 AN1 1 RA2/C2IN+/AN2/ RA2 0 DACOUT/VREF- 1 C2IN+ 1 AN2 1 DACOUT x VREF- 1 RA3/C1IN+/AN3/ RA3 0 VREF+ 1 C1IN+ 1 AN3 1 VREF+ 1 RA4/CCP5/ C1OUT/SRQ/ T0CKI RA4 0 1 CCP5 0 1 C1OUT 0 SRQ 0 T0CKI 1 0 O DIG LATA<0> 数据输出;不受模拟输入影响。 0 I TTL PORTA<0> 数据输入;当使能模拟输入时被禁止。 1 I AN 比较器 C1 和 C2 的反相输入。 1 I AN 模拟输入 0。 0 O DIG LATA<1> 数据输出;不受模拟输入影响。 0 I TTL PORTA<1> 数据输入;当使能模拟输入时被禁止。 1 I AN 比较器 C1 和 C2 的反相输入。 1 I AN 模拟输入 1。 0 O DIG LATA<2> 数据输出;不受模拟输入影响;当使能 DACOUT 时被禁止。 0 I TTL PORTA<2> 数据输入;当使能模拟输入时被禁止;当使能 DACOUT 时被禁止。 1 I AN 比较器 C2 的同相输入。 1 I AN 模拟输入 2。 1 O AN DAC 参考输出。 1 I AN A/D 参考电压 (低电压)输入。 — O DIG LATA<3> 数据输出;不受模拟输入影响。 0 I TTL PORTA<3> 数据输入;当使能模拟输入时被禁止。 1 I AN 比较器 C1 的同相输入。 1 I AN 模拟输入 3。 1 I AN A/D 参考电压 (高电压)输入。 — O DIG LATA<4> 数据输出。 — I ST PORTA<4> 数据输入; POR 时的默认配置。 — O DIG CCP5 比较输出 /PWM 输出,优先于 RA4 输出。 — I ST 捕捉 5 输入 / 比较 5 输出 /PWM5 输出。 — O DIG 比较器 C1 的输出。 — O DIG SR 锁存器 Q 输出;优先于 CCP5 输出。 — I ST Timer0 外部时钟输入。 RA5/C2OUT/ SRNQ/SS1/ HLVDIN/AN4 RA5 0 1 C2OUT 0 SRNQ 0 0 O DIG LATA<5> 数据输出;不受模拟输入影响。 0 I TTL PORTA<5> 数据输入;当使能模拟输入时被禁止。 0 O DIG 比较器 C2 的输出。 0 O DIG SR 锁存器 Q 输出。 图注: SS1 1 0 I TTL SPI 从选择输入 (MSSP1)。 HLVDIN 1 1 I AN 高 / 低压检测输入。 AN4 1 1 I AN A/D 输入 4。 AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容 输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 DS41412F_CN 第 136 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 10-1: PORTA I/O 汇总 (续) 引脚名称 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RA6/CLKO/OSC2 RA6 0 — O DIG LATA<6> 数据输出;当 CLKO 未使能时,在 INTOSC 模式 下使能。 1 — I TTL PORTA<6> 数据输入;当 CLKO 未使能时,在 INTOSC 模 式下使能。 CLKO x — O DIG 在 RC 模式下, OSC2 引脚输出 CLKOUT 信号,其频率是 OSC1 引脚上信号频率的 1/4,该频率等于指令周期的倒数。 OSC2 x — O XTAL 晶振输出;在晶振模式下,该引脚与晶振或谐振器相连。 RA7/CLKI/OSC1 RA7 0 — O DIG LATA<7> 数据输出;在外部振荡器模式下被禁止。 1 — I TTL PORTA<7> 数据输入;在外部振荡器模式下被禁止。 CLKI x — I AN 外部时钟源输入;总是与 OSC1 引脚功能相关联。 OSC1 x — I XTAL 配置为 RC 模式时为晶振输入或外部时钟源输入;否则为 CMOS 输入。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容 输入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 表 10-2: 与 PORTA 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ANSELA — — ANSA5 — ANSA3 ANSA2 ANSA1 ANSA0 CM1CON0 C1ON C1OUT C1OE C1POL C1SP C1R C1CH<1:0> CM2CON0 C2ON C2OUT C2OE C2POL C2SP C2R C2CH<1:0> LATA LATA7 LATA6 LATA5 LATA4 LATA3 LATA2 LATA1 LATA0 VREFCON1 DACEN DACLPS DACOE — DACPSS<1:0> — DACNSS VREFCON2 — — — DACR<4:0> HLVDCON VDIRMAG BGVST IRVST HLVDEN HLVDL<3:0> PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 SLRCON — — — SLRE SLRD SLRC SLRB SLRA SRCON0 SRLEN SRCLK<2:0> SRQEN SRNQEN SRPS SRPR SSP1CON1 WCOL SSPOV SSPEN CKP SSPM<3:0> T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS<2:0> TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 图注: — = 未实现位,读为 0。 PORTA 不使用阴影位。 寄存器 所在页 154 317 318 158 347 348 349 153 158 340 260 159 156 表 10-3: 与 PORTA 相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 CONFIG1H IESO FCMEN PRICLKEN PLLCFG 图注: — = 未实现位,读为 0。 PORTA 不使用阴影位。 Bit 2 Bit 1 FOSC<3:0> Bit 0 寄存器 所在页 357  2011-2013 Microchip Technology Inc. DS41412F_CN 第 137 页 PIC18(L)F2X/4XK22 10.1.1 PORTA 输出优先级 每个 PORTA 引脚都与其他功能复用。这里将简要说明 引脚及其复用功能和输出优先级。更多信息,请参见本 数据手册中的相应章节。 当使能多个输出时,实际引脚控制权将属于优先级较高 的外设。表 10-4 列出了从最高优先级到最低优先级的 PORTA 引脚功能。 优先级列表中未列出模拟输入功能,例如ADC和比较器。 这些输入在使用 ANSELx 寄存器将 I/O 引脚设置为模拟 模式时有效。当引脚处于模拟模式时,数字输出功能可 以按照下面列出的优先级控制引脚。 表 10-4: 端口引脚功能优先级 端口位 PORTA 端口功能优先级 (按端口引脚分类) PORTB PORTC PORTD(2) 0 RA0 CCP4(1) SOSCO SCL2 RB0 P2B(6) SCK2 RC0 RD0 1 RA1 SCL2(1) SOSCI SDA2 SCK2(1) CCP2(3) CCP4 P1C(1) P2A(3) RD1 RB1 RC1 2 RA2 SDA2(1) CCP1 P2B P1B(1) P1A RD2(4) RB2 CTPLS RC2 3 RA3 SDO2(1) SCL1 P2C CCP2(6) SCK1 RD3 P2A(6) RC3 RB3 4 SRQ P1D(1) SDA1 SDO2 C1OUT CCP5(1) RB4 RC4 P2D RD4 RA4 注 1: PIC18(L)F2XK22 器件。 2: PIC18(L)F4XK22 器件。 3: 功能默认引脚。 4: 功能默认引脚 (28 引脚器件)。 5: 功能默认引脚 (40/44 引脚器件)。 6: 功能备用引脚。 7: 功能备用引脚 (28 引脚器件)。 8: 功能备用引脚 (40/44 引脚器件)。 PORTE(2) CCP3(8) P3A(8) RE0 P3B RE1 CCP5 RE2 MCLR VPP RE3 DS41412F_CN 第 138 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 10-4: 端口引脚功能优先级 (续) 端口位 5 6 7 PORTA SRNQ C2OUT RA5 OSC2 CLKO RA6 RA7 OSC1 RA7 端口功能优先级 (按端口引脚分类) PORTB PORTC PORTD(2) CCP3(3) P3A(3) P2B(1)(4) SDO1 RC5 P1B RD5 RB5 PGC TX2/CK2(1) RB6 TX1/CK1 CCP3(1)(7) P3A(1)(7) TX2/CK2 P1C RD6 ICDCK RC6 PGD RX2/DT2(1) RB7 ICDDT RX1/DT1 P3B(1) RC7 RX2/DT2 P1D RD7 注 1: PIC18(L)F2XK22 器件。 2: PIC18(L)F4XK22 器件。 3: 功能默认引脚。 4: 功能默认引脚 (28 引脚器件)。 5: 功能默认引脚 (40/44 引脚器件)。 6: 功能备用引脚。 7: 功能备用引脚 (28 引脚器件)。 8: 功能备用引脚 (40/44 引脚器件)。 PORTE(2)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 139 页 PIC18(L)F2X/4XK22 10.2 PORTB 寄存器 PORTB 是一个 8 位宽的双向端口,对应的数据方向寄 存器是 TRISB。将 TRISB 某位置 1 (= 1)时,会将 PORTB 的相应引脚设为输入(即,禁止输出驱动器)。 将 TRISB 某位清零 (= 0)时,会将 PORTB 的相应引 脚设为输出 (即,使能输出驱动器并将输出锁存器中的 内容输出到选中引脚)。 数据锁存寄存器(LATB)也是存储器映射的。对 LATB 寄存器执行读 - 修改 - 写操作将读写 PORTB 的锁存输 出值。 例 10-2: 初始化 PORTB MOVLB CLRF CLRF MOVLW MOVWF MOVLW MOVWF 0xF PORTB LATB 0F0h ANSELB 0CFh TRISB ; Set BSR for banked SFRs ; Initialize PORTB by ; clearing output ; data latches ; Alternate method ; to clear output ; data latches ; Value for init ; Enable RB<3:0> for ; digital input pins ; (not required if config bit ; PBADEN is clear) ; Value used to ; initialize data ; direction ; Set RB<3:0> as inputs ; RB<5:4> as outputs ; RB<7:6> as inputs 10.2.1 PORTB 输出优先级 每个 PORTB 引脚都与其他功能复用。这里将简要说明 引脚及其复用功能和输出优先级。更多信息,请参见本 数据手册中的相应章节。 当使能多个输出时,实际引脚控制权将属于优先级较高 的外设。表 10-4 列出了从最高优先级到最低优先级的 PORTB 引脚功能。 优先级列表中未列出模拟输入功能,例如 ADC、比较器 和 SR 锁存器输入。 这些输入在使用 ANSELx 寄存器将 I/O 引脚设置为模拟 模式时有效。当引脚处于模拟模式时,数字输出功能可 以按照下面列出的优先级控制引脚。 10.3 PORTB 引脚的其他功能 PORTB 的引脚 RB<7:4> 具有电平变化中断选项。所有 的 PORTB 引脚都具有弱上拉选项。 10.3.1 弱上拉 每个 PORTB 引脚都具有单独控制的内部弱上拉功能。 当置 1 时,WPUB 寄存器的每个位可以使能相应的引脚 上拉功能。当清零时, INTCON2 寄存器的 RBPU 位可 以使能将对应的 WPUB 位置 1 的所有引脚上的上拉功 能。当置 1 时,RBPU 位可以禁止所有弱上拉功能。当 端口引脚被配置为输出时,其弱上拉功能会自动关闭。 上电复位会禁止上拉功能。 注: 上电复位时,默认情况下 RB<5:0> 被配置 为模拟输入且读为 0 ; RB<7:6> 则被配置 为数字输入。 当 PBADEN 配置位设置为 1 时,RB<5:0> 可以在 POR 时被配置为数字输入。 10.3.2 电平变化中断 PORTB 的 4 个引脚 (RB<7:4>)被单独配置为具有电 平变化中断功能的引脚。 IOCB 寄存器中的控制位可以 允许(置 1 时)或禁止(清零时)每个引脚的中断功能。 当置 1 时,INTCON 寄存器的 RBIE 位可以允许将对应 的 IOCB 位置 1 的所有引脚上的中断。当清零时,RBIE 位可以禁止所有电平变化中断。 仅当将这些引脚配置为输入时,才可使用此中断功能 (即当 RB<7:4> 中的任何一个引脚被配置为输出时,该 引脚将不再具有电平变化中断功能)。 对于允许了电平变化中断功能的引脚,其值将与上次读 取的 PORTB 的旧锁存值相比较。将所有与上次读取值 不 匹 配的 输 出 进 行逻 辑 或 运 算,运算 结 果 用 来设 置 INTCON 寄存器中的 PORTB 电平变化中断标志位 (RBIF)。 该中断可将器件从休眠模式或任何空闲模式唤醒。用户 可用以下方式在中断服务程序中清除该中断: a) 通过读或写PORTB来清除不匹配条件(当PORTB 是 MOVFF 指令的源或目标时除外)。 b) 在读或写 PORTB 之后至少执行一条指令,然后 清零标志位 RBIF。 DS41412F_CN 第 140 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 不匹配条件会继续将 RBIF 标志位置 1。读或写 PORTB 将结束不匹配条件并允许将 RBIF 位清零。保存上一次读 取值的锁存器不受 MCLR 或欠压复位的影响。在这些复 位之后,如果存在不匹配情况,RBIF 标志位还将继续被 置 1。 注: 当读操作正在执行时发生了 I/O 引脚电平变 化 (Q2 周期的起始时刻),则 RBIF 中断 标志位可能不会被置 1。此外,由于端口上 的读或写操作会影响该端口的所有位,所 以在电平变化中断模式下使用多个引脚时 必须特别小心。在处理一个引脚上的电平 变化时,可能不会注意到另一个引脚上的 电平变化。 建议使用电平变化中断功能实现按键唤醒操作,以及那 些仅用到 PORTB 的电平变化中断功能的操作。在使用 电平变化中断功能时,建议不要查询 PORTB 的状态。 10.3.3 备用功能 PORTB 与几种外设功能复用 (表 10-5)。这些引脚配 有 TTL 输入缓冲器。其中一些引脚功能可以使用 CONFIG3H 中的控制熔丝位重新分配到备用引脚上。 RB5 是 P2B 的默认引脚(28 引脚器件)。清零 P2BMX 位会将引脚功能转移到 RC0。 RB5 也是 CCP3/P3A 外 设引脚的默认引脚。清零 CCP3MX 位会将引脚功能转 移到 RC6 引脚 (28 引脚器件)或 RE0 (40/44 引脚器 件)。 两个其他引脚功能 T3CKI 和 CCP2/P2A 可以通过清零 CONFIG3H 中的控制熔丝位从默认引脚重新分配到 PORTB 引脚上。清零 T3CMX 和 CCP2MX 会分别将引 脚功能转移到 RB5 和 RB3。 表 10-5: PORTB I/O 汇总 引脚 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RB0/INT0/CCP4/ RB0 0 0 O DIG LATB<0> 数据输出;不受模拟输入影响。 FLT0/SRI/SS2/ AN12 1 0 INT0 1 0 I TTL PORTB<0> 数据输入;当使能模拟输入时被禁止。 I ST 外部中断 0。 CCP4(3) 0 0 O DIG 比较 4 输出 /PWM4 输出。 1 0 I ST 捕捉 4 输入。 FLT0 1 0 I ST ECCP 自动关闭的 PWM 故障输入。 SRI 1 0 I ST SR 锁存器输入。 SS2(3) 1 0 I TTL SPI 从选择输入 (MSSP2)。 AN12 1 1 I AN 模拟输入 12。 RB1/INT1/P1C/ RB1 0 0 O DIG LATB<1> 数据输出;不受模拟输入影响。 SCK2/SCL2/ C12IN3-/AN10 1 0 INT1 1 0 I TTL PORTB<1> 数据输入;当使能模拟输入时被禁止。 I ST 外部中断 1。 P1C(3) 0 0 O DIG 增强型 CCP1 PWM 输出 3。 SCK2(3) 0 0 O DIG MSSP2 SPI 时钟输出。 1 0 I ST MSSP2 SPI 时钟输入。 SCL2(3) 0 0 O DIG MSSP2 I2CTM 时钟输出。 1 0 I I2C MSSP2 I2CTM 时钟输入。 C12IN3- 1 1 I AN 比较器 C1 和 C2 的反相输入。 AN10 1 1 I AN 模拟输入 10。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 的默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 的备用引脚分配。 3: 对于 PIC18(L)F4XK22 器件, PORTD 和 PORTE 上的功能。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 141 页 PIC18(L)F2X/4XK22 表 10-5: PORTB I/O 汇总 (续) 引脚 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RB2/INT2/CTED1/ RB2 0 0 O DIG LATB<2> 数据输出;不受模拟输入影响。 P1B/SDI2/SDA2/ AN8 1 0 I TTL PORTB<2> 数据输入;当使能模拟输入时被禁止。 INT2 1 0 I ST 外部中断 2。 CTED1 1 0 I ST CTMU 边沿 1 输入。 P1B(3) 0 0 O DIG 增强型 CCP1 PWM 输出 2。 SDI2(3) 1 0 I ST MSSP2 SPI 数据输入。 SDA2(3) 0 0 O DIG MSSP2 I2CTM 数据输出。 1 0 I I2C MSSP2 I2CTM 数据输入。 AN8 1 1 I AN 模拟输入 8。 RB3/CTED2/P2A/ RB3 0 0 O DIG LATB<3> 数据输出;不受模拟输入影响。 CCP2/SDO2/ C12IN2-/AN9 1 0 CTED2 1 0 I TTL PORTB<3> 数据输入;当使能模拟输入时被禁止。 I ST CTMU 边沿 2 输入。 P2A 0 0 O DIG 增强型 CCP1 PWM 输出 1。 CCP2(2) 0 0 O DIG 比较 2 输出 /PWM2 输出。 1 0 I ST 捕捉 2 输入。 SDO2(2) 0 0 O DIG MSSP2 SPI 数据输出。 C12IN2- 1 1 I AN 比较器 C1 和 C2 的反相输入。 AN9 1 1 I AN 模拟输入 9。 RB4/IOC0/P1D/ T5G/AN11 RB4 0 0 O DIG LATB<4> 数据输出;不受模拟输入影响。 1 0 I TTL PORTB<4> 数据输入;当使能模拟输入时被禁止。 IOC0 1 0 I TTL 电平变化中断引脚。 P1D 0 0 O DIG 增强型 CCP1 PWM 输出 4。 T5G 1 0 I ST Timer5 外部时钟门控输入。 AN11 1 1 I AN 模拟输入 11。 RB5/IOC1/P2B/ RB5 0 0 O DIG LATB<5> 数据输出;不受模拟输入影响。 P3A/CCP3/T3CKI/ T1G/AN13 1 0 IOC1 1 0 I TTL PORTB<5> 数据输入;当使能模拟输入时被禁止。 I TTL 电平变化中断引脚 1。 P2B(1)(3) 0 0 O DIG 增强型 CCP2 PWM 输出 2。 P3A(1) 0 0 O DIG 增强型 CCP3 PWM 输出 1。 CCP3(1) 0 0 O DIG 比较 3 输出 /PWM3 输出。 1 0 I ST 捕捉 3 输入。 T3CKI(2) 1 0 I ST Timer3 时钟输入。 T1G 1 0 I ST Timer1 外部时钟门控输入。 AN13 1 1 I AN 模拟输入 13。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 的默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 的备用引脚分配。 3: 对于 PIC18(L)F4XK22 器件, PORTD 和 PORTE 上的功能。 DS41412F_CN 第 142 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 10-5: PORTB I/O 汇总 (续) 引脚 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RB6/KBI2/PGC RB6 0 — O DIG LATB<6> 数据输出;不受模拟输入影响。 RB7/KBI3/PGD 1 — I TTL PORTB<6> 数据输入;当使能模拟输入时被禁止。 IOC2 1 — I TTL 电平变化中断引脚。 TX2(3) 1 — O DIG EUSART 异步发送数据输出。 CK2(3) 1 — O DIG EUSART 同步串行时钟输出。 1 — I ST EUSART 同步串行时钟输入。 PGC x — I ST 在线调试器和 ICSPTM 编程时钟输入。 RB7 0 — O DIG LATB<7> 数据输出;不受模拟输入影响。 1 — I TTL PORTB<7> 数据输入;当使能模拟输入时被禁止。 IOC3 1 — I TTL 电平变化中断引脚。 RX2(2), (3) 1 — I ST EUSART 异步接收数据输入。 DT2(2), (3) 1 — O DIG EUSART 同步串行数据输出。 1 — I ST EUSART 同步串行数据输入。 PGD x — O DIG 在线调试器和 ICSPTM 编程数据输出。 x — I ST 在线调试器和 ICSPTM 编程数据输入。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 的默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 的备用引脚分配。 3: 对于 PIC18(L)F4XK22 器件, PORTD 和 PORTE 上的功能。 表 10-6: 与 PORTB 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 ANSELB — — ANSB5 ANSB4 ECCP2AS CCP2ASE CCP2AS<2:0> CCP2CON P2M<1:0> DC2B<1:0> ECCP3AS CCP3ASE CCP3AS<2:0> CCP3CON P3M<1:0> DC3B<1:0> INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 INTCON3 INT2IP INT1IP — INT2IE IOCB IOCB7 IOCB6 IOCB5 IOCB4 LATB LATB7 LATB6 LATB5 LATB4 PORTB RB7 RB6 SLRCON — — RB5 — RB4 SLRE(1) T1GCON TMR1GE T1GPOL T1GTM T1GSPM T3CON TMR3CS<1:0> T3CKPS<1:0> T5GCON TMR5GE T5GPOL T5GTM T5GSPM TRISB TRISB7 TRISB6 TRISB5 TRISB4 WPUB WPUB7 WPUB6 WPUB5 WPUB4 图注: — = 未实现位,读为 0。 PORTB 不使用阴影位。 注 1: 在 PIC18(L)F4XK22 器件上可用。 Bit 3 Bit 2 Bit 1 Bit 0 ANSB3 ANSB2 ANSB1 ANSB0 PSS2AC<1:0> PSS2BD<1:0> CCP2M<3:0> PSS3AC<1:0> PSS3BD<1:0> CCP3M<3:0> RBIE TMR0IF INT0IF RBIF — TMR0IP — RBIP INT1IE — INT2IF INT1IF — — — — LATB3 LATB2 LATB1 LATB0 RB3 SLRD(1) RB2 SLRC RB1 SLRB RB0 SLRA T1GGO/DONE T1GVAL T1GSS<1:0> T3SOSCEN T3SYNC T3RD16 TMR3ON T5GGO/DONE T5GVAL T5GSS<1:0> TRISB3 TRISB2 TRISB1 TRISB0 WPUB3 WPUB2 WPUB1 WPUB0 寄存器 所在页 155 209 205 209 205 116 117 118 158 157 153 158 173 172 173 156 157  2011-2013 Microchip Technology Inc. DS41412F_CN 第 143 页 PIC18(L)F2X/4XK22 表 10-7: 与 PORTB 相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 CONFIG3H MCLRE — P2BMX T3CMX CONFIG4L DEBUG XINST — — 图注: — = 未实现位,读为 0。 PORTB 不使用阴影位。 注 1: 只能在高电压编程模式下更改。 10.4 PORTC 寄存器 PORTC 是一个 8 位宽的双向端口,对应的数据方向寄 存器是 TRISC。将 TRISC 某位置 1 (= 1)时,会将 PORTC 的相应引脚设为输入(即,禁止输出驱动器)。 将 TRISC 某位清零 (= 0)时,会将 PORTC 的相应引 脚设为输出 (即,使能输出驱动器并将输出锁存器中的 内容输出到选中引脚)。 数据锁存寄存器(LATC)也是存储器映射的。对 LATC 寄存器执行读 - 修改 - 写操作将读写 PORTC 的锁存输 出值。 PORTC 与几种外设功能复用 (表 10-8)。这些引脚配 有施密特触发器输入缓冲器。 其中一些引脚功能可以使用 CONFIG3H 中的控制熔丝 位重新分配到备用引脚上。RC0 是 T3CKI 的默认引脚。 清零T3CMX位会将引脚功能转移到RB5。RC1是CCP2 外设引脚的默认引脚。清零 CCP2MX 位会将引脚功能 转移到 RB3 引脚。 两个 其 他 引 脚 功能 P2B 和 CCP3 可 以 通 过 清零 CONFIG3H 中的控制熔丝位从默认引脚重新分配到 PORTC 引脚上。清零 P2BMX 和 CCP3MX 会分别将引 脚功能转移到 RC0 和 RC6(1)/RE0(2)。 当使能外设功能时,应小心定义每个 PORTC 引脚的 TRIS 位。EUSART 和 MSSP 外设会改写 TRIS 位的设 置,将引脚定义为输出或输入引脚(取决于外设配置)。 更多信息,请参见相应的外设章节。 注: 上电复位时,这些引脚被配置为模拟输入。 外设对引脚的改写会影响 TRISC 寄存器的内容。尽管外 设可能会改写一个或多个引脚,读 TRISC 总是会返回其 当前的内容。 Bit 3 HFOFST — Bit 2 Bit 1 Bit 0 CCP3MX PBADEN CCP2MX LVP(1) — STRVEN 寄存器 所在页 360 361 例 10-3: MOVLB 0xF CLRF PORTC CLRF LATC MOVLW 0CFh MOVWF TRISC MOVLW 30h MOVWF ANSELC 初始化 PORTC ; Set BSR for banked SFRs ; Initialize PORTC by ; clearing output ; data latches ; Alternate method ; to clear output ; data latches ; Value used to ; initialize data ; direction ; Set RC<3:0> as inputs ; RC<5:4> as outputs ; RC<7:6> as inputs ; Value used to ; enable digital inputs ; RC<3:2> dig input enable ; No ANSEL bits for RC<1:0> ; RC<7:6> dig input enable 10.4.1 PORTC 输出优先级 每个 PORTC 引脚都与其他功能复用。这里将简要说明 引脚及其复用功能和输出优先级。更多信息,请参见本 数据手册中的相应章节。 当使能多个输出时,实际引脚控制权将属于优先级较高 的外设。表 10-4 列出了从最高优先级到最低优先级的 PORTC 引脚功能。 优先级列表中未列出模拟输入功能,例如 ADC、比较器 和 SR 锁存器输入。 这些输入在使用 ANSELx 寄存器将 I/O 引脚设置为模拟 模式时有效。当引脚处于模拟模式时,数字输出功能可 以按照下面列出的优先级控制引脚。 DS41412F_CN 第 144 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 10-8: PORTC I/O 汇总 引脚名称 功能 TRIS 设置 ANSEL 引脚 缓冲器 设置 类型 类型 说明 RC0/P2B/T3CKI/T3G/ RC0 0 T1CKI/SOSCO 1 P2B(2) 0 T3CKI(1) 1 — O DIG LATC<0> 数据输出;不受模拟输入影响。 — I ST PORTC<0> 数据输入;当使能模拟输入时被禁止。 — O DIG 增强型 CCP2 PWM 输出 2。 — I ST Timer3 时钟输入。 T3G 1 — I ST Timer3 外部时钟门控输入。 T1CKI 1 — I ST Timer1 时钟输入。 SOSCO x — O XTAL 辅助振荡器输出。 RC1/P2A/CCP2/SOSCI RC1 0 — O DIG LATC<1> 数据输出;不受模拟输入影响。 1 — I ST PORTC<1> 数据输入;当使能模拟输入时被禁止。 P2A 0 CCP2(1) 0 — O DIG 增强型 CCP2 PWM 输出 1。 — O DIG 比较 2 输出 /PWM2 输出。 1 — I ST 捕捉 2 输入。 SOSCI x — I XTAL 辅助振荡器输入。 RC2/CTPLS/P1A/ CCP1/T5CKI/AN14 RC2 0 1 0 O DIG LATC<2> 数据输出;不受模拟输入影响。 0 I ST PORTC<2> 数据输入;当使能模拟输入时被禁止。 CTPLS 0 0 O DIG CTMU 脉冲发生器输出。 P1A 0 0 O DIG 增强型 CCP1 PWM 输出 1。 CCP1 0 0 O DIG 比较 1 输出 /PWM1 输出。 1 0 I ST 捕捉 1 输入。 T5CKI 1 0 I ST Timer5 时钟输入。 AN14 1 1 I AN 模拟输入 14。 RC3/SCK1/SCL1/AN15 RC3 0 0 O DIG LATC<3> 数据输出;不受模拟输入影响。 1 0 I ST PORTC<3> 数据输入;当使能模拟输入时被禁止。 SCK1 0 0 O DIG MSSP1 SPI 时钟输出。 1 SCL1 0 1 0 I ST MSSP1 SPI 时钟输入。 0 O DIG MSSP1 I2C™ 时钟输出。 0 I I2C MSSP1 I2C™ 时钟输入。 AN15 1 1 I AN 模拟输入 15。 RC4/SDI1/SDA1/AN16 RC4 0 0 O DIG LATC<4> 数据输出;不受模拟输入影响。 1 0 I ST PORTC<4> 数据输入;当使能模拟输入时被禁止。 SDI1 1 SDA1 0 1 0 I ST MSSP1 SPI 数据输入。 0 O DIG MSSP1 I2C™ 数据输出。 0 I I2C MSSP1 I2C™ 数据输入。 AN16 1 1 I AN 模拟输入 16。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 的默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 的备用引脚分配。 3: 对于 PIC18(L)F4XK22 器件, PORTD 和 PORTE 上的功能。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 145 页 PIC18(L)F2X/4XK22 表 10-8: PORTC I/O 汇总 (续) 引脚名称 功能 TRIS 设置 ANSEL 引脚 缓冲器 设置 类型 类型 说明 RC5/SDO1/AN17 RC5 0 0 O DIG LATC<5> 数据输出;不受模拟输入影响。 1 0 I ST PORTC<5> 数据输入;当使能模拟输入时被禁止。 SDO1 0 0 O DIG MSSP1 SPI 数据输出。 AN17 1 1 I AN 模拟输入 17。 RC6/P3A/CCP3/TX1/ RC6 0 CK1/AN18 1 P3A(2), (3) 0 CCP3(2), (3) 0 0 O DIG LATC<6> 数据输出;不受模拟输入影响。 0 I ST PORTC<6> 数据输入;当使能模拟输入时被禁止。 0 O CMOS 增强型 CCP3 PWM 输出 1。 0 O DIG 比较 3 输出 /PWM3 输出。 1 0 I ST 捕捉 3 输入。 TX1 1 0 O DIG EUSART 异步发送数据输出。 CK1 1 0 O DIG EUSART 同步串行时钟输出。 1 0 I ST EUSART 同步串行时钟输入。 AN18 1 1 I AN 模拟输入 18。 RC7/P3B/RX1/DT1/ AN19 RC7 0 1 0 O DIG LATC<7> 数据输出;不受模拟输入影响。 0 I ST PORTC<7> 数据输入;当使能模拟输入时被禁止。 P3B 0 0 O CMOS 增强型 CCP3 PWM 输出 2。 RX1 1 0 I ST EUSART 异步接收数据输入。 DT1 1 0 O DIG EUSART 同步串行数据输出。 1 0 I ST EUSART 同步串行数据输入。 AN19 1 1 I AN 模拟输入 19。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 的默认引脚分配。 2: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 清零时, P2B、 T3CKI、 CCP3 和 CCP2 的备用引脚分配。 3: 对于 PIC18(L)F4XK22 器件, PORTD 和 PORTE 上的功能。 DS41412F_CN 第 146 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 10-9: 与 PORTC 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ANSELC ANSC7 ANSC6 ANSC5 ANSC4 ANSC3 ANSC2 — — ECCP1AS CCP1ASE CCP1AS<2:0> PSS1AC<1:0> PSS1BD<1:0> CCP1CON P1M<1:0> DC1B<1:0> CCP1M<3:0> ECCP2AS CCP2ASE CCP2AS<2:0> PSS2AC<1:0> PSS2BD<1:0> CCP2CON P2M<1:0> DC2B<1:0> CCP2M<3:0> CTMUCONH CTMUEN — CTMUSIDL TGEN EDGEN EDGSEQEN IDISSEN CTTRIG LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 RCSTA1 SLRCON SPEN RX9 — — SREN — CREN SLRE(1) ADDEN SLRD(1) FERR SLRC OERR SLRB RX9D SLRA SSP1CON1 WCOL SSPOV SSPEN CKP SSPM<3:0> T1CON TMR1CS<1:0> T1CKPS<1:0> T1SOSCEN T1SYNC T1RD16 TMR1ON T3CON TMR3CS<1:0> T3CKPS<1:0> T3SOSCEN T3SYNC T3RD16 TMR3ON T3GCON TMR3GE T3GPOL T3GTM T3GSPM T3GGO/DONE T3GVAL T3GSS<1:0> T5CON TMR5CS<1:0> T5CKPS<1:0> T5SOSCEN T5SYNC T5RD16 TMR5ON TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 图注: — = 未实现位,读为 0。 PORTC 不使用阴影位。 注 1: 在 PIC18(L)F4XK22 器件上可用。 寄存器 所在页 155 209 205 209 205 333 157 153 278 158 260 172 172 173 172 156 277 表 10-10: 与 PORTC 相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 CONFIG3H MCLRE — P2BMX T3CMX 图注: — = 未实现位,读为 0。 PORTC 不使用阴影位。 Bit 3 HFOFST Bit 2 Bit 1 Bit 0 CCP3MX PBADEN CCP2MX 寄存器 所在页 360  2011-2013 Microchip Technology Inc. DS41412F_CN 第 147 页 PIC18(L)F2X/4XK22 10.5 PORTD 寄存器 注: PORTD仅在40引脚和44引脚器件上可用。 PORTD 是一个 8 位宽的双向端口,对应的数据方向寄 存器是 TRISD。将 TRISD 某位置 1 (= 1)时,会将 PORTD 的相应引脚设为输入(即,禁止输出驱动器)。 将 TRISD 某位清零 (= 0)时,会将 PORTD 的相应引 脚设为输出 (即,使能输出驱动器并将输出锁存器中的 内容输出到选中引脚)。 数据锁存寄存器(LATD)也是存储器映射的。对 LATD 寄存器执行读 - 修改 - 写操作将读写 PORTD 的锁存输 出值。 PORTD 上的所有引脚都配有施密特触发器输入缓冲 器。每个引脚都可被单独配置为输入或输出。 PORTD 的所有引脚与模拟和数字外设模块复用。请参 见表 10-11。 注: 上电复位时,这些引脚被配置为模拟输入。 例 10-4: MOVLB 0xF CLRF PORTD CLRF LATD MOVLW 0CFh MOVWF TRISD MOVLW 30h MOVWF ANSELD 初始化 PORTD ; Set BSR for banked SFRs ; Initialize PORTD by ; clearing output ; data latches ; Alternate method ; to clear output ; data latches ; Value used to ; initialize data ; direction ; Set RD<3:0> as inputs ; RD<5:4> as outputs ; RD<7:6> as inputs ; Value used to ; enable digital inputs ; RD<3:0> dig input enable ; RC<7:6> dig input enable 10.5.1 PORTD 输出优先级 每个 PORTD 引脚都与其他功能复用。这里将简要说明 引脚及其复用功能和输出优先级。更多信息,请参见本 数据手册中的相应章节。 当使能多个输出时,实际引脚控制权将属于优先级较高 的外设。表 10-4 列出了从最高优先级到最低优先级的 PORTD 引脚功能。 优先级列表中未列出模拟输入功能,例如 ADC、比较器 和 SR 锁存器输入。 这些输入在使用 ANSELx 寄存器将 I/O 引脚设置为模拟 模式时有效。当引脚处于模拟模式时,数字输出功能可 以按照下面列出的优先级控制引脚。 DS41412F_CN 第 148 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 10-11: PORTD I/O 汇总 引脚名称 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RD0/SCK2/SCL2/AN20 RD0 0 1 SCK2 0 1 SCL2 0 1 AN20 1 RD1/CCP4/SDI2/SDA2/ RD1 0 AN21 1 CCP4 0 1 SDI2 1 SDA2 0 1 AN21 1 RD2/P2B/AN22 RD2 0 1 P2B(1) 0 AN22 1 RD3/P2C/SS2/AN23 RD3 0 1 P2C 0 SS2 1 AN23 1 RD4/P2D/SDO2/AN24 RD4 0 1 P2D 0 SDO2 0 AN24 1 RD5/P1B/AN25 RD5 0 1 P1B 0 AN25 1 0 O DIG LATD<0> 数据输出;不受模拟输入影响。 0 I ST PORTD<0> 数据输入;当使能模拟输入时被禁止。 0 O DIG MSSP2 SPI 时钟输出。 0 I ST MSSP2 SPI 时钟输入。 0 O DIG MSSP2 I2C™ 时钟输出。 0 I I2C MSSP2 I2C™ 时钟输入。 1 I AN 模拟输入 20。 0 O DIG LATD<1> 数据输出;不受模拟输入影响。 0 I ST PORTD<1> 数据输入;当使能模拟输入时被禁止。 0 O DIG 比较 4 输出 /PWM4 输出。 0 I ST 捕捉 4 输入。 0 I ST MSSP2 SPI 数据输入。 0 O DIG MSSP2 I2C™ 数据输出。 0 I I2C MSSP2 I2C™ 数据输入。 1 I AN 模拟输入 21。 0 O DIG LATD<2> 数据输出;不受模拟输入影响。 0 I ST PORTD<2> 数据输入;当使能模拟输入时被禁止。 0 O DIG 增强型 CCP2 PWM 输出 2。 1 I AN 模拟输入 22。 0 O DIG LATD<3> 数据输出;不受模拟输入影响。 0 I ST PORTD<3> 数据输入;当使能模拟输入时被禁止。 0 O DIG 增强型 CCP2 PWM 输出 4。 0 I TTL MSSP2 SPI 从选择输入。 1 I AN 模拟输入 23。 0 O DIG LATD<4> 数据输出;不受模拟输入影响。 0 I ST PORTD<4> 数据输入;当使能模拟输入时被禁止。 0 O DIG 增强型 CCP2 PWM 输出 3。 0 O DIG MSSP2 SPI 数据输出。 1 I AN 模拟输入 24。 0 O DIG LATD<5> 数据输出;不受模拟输入影响。 0 I ST PORTD<5> 数据输入;当使能模拟输入时被禁止。 0 O DIG 增强型 CCP1 PWM 输出 2。 1 I AN 模拟输入 25。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 的默认引脚分配。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 149 页 PIC18(L)F2X/4XK22 表 10-11: PORTD I/O 汇总 (续) 引脚名称 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RD6/P1C/TX2/CK2/ RD6 0 AN26 1 P1C 0 TX2 1 CK2 1 1 AN26 1 RD7/P1D/RX2/DT2/ RD7 0 AN27 1 P1D 0 RX2 1 DT2 1 1 AN27 1 0 O DIG LATD<6> 数据输出;不受模拟输入影响。 0 I ST PORTD<6> 数据输入;当使能模拟输入时被禁止。 0 O DIG 增强型 CCP1 PWM 输出 3。 0 O DIG EUSART 异步发送数据输出。 0 O DIG EUSART 同步串行时钟输出。 0 I ST EUSART 同步串行时钟输入。 1 I AN 模拟输入 26。 0 O DIG LATD<7> 数据输出;不受模拟输入影响。 0 I ST PORTD<7> 数据输入;当使能模拟输入时被禁止。 0 O DIG 增强型 CCP1 PWM 输出 4。 0 I ST EUSART 异步接收数据输入。 0 O DIG EUSART 同步串行数据输出。 0 I ST EUSART 同步串行数据输入。 1 I AN 模拟输入 27。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 PB2MX、 T3CMX、 CCP3MX 和 CCP2MX 置 1 时, P2B、 T3CKI、 CCP3 和 CCP2 的默认引脚分配。 表 10-12: 与 PORTD 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 ANSELD(1) ANSD7 ANSD6 ANSD5 ANSD4 ANSD3 BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 CCP1CON P1M<1:0> DC1B<1:0> CCP2CON P2M<1:0> DC2B<1:0> CCP4CON LATD(1) PORTD(1) — LATD7 RD7 — LATD6 RD6 DC4B<1:0> LATD5 LATD4 RD5 RD4 LATD3 RD3 RCSTA2 SLRCON(1) SPEN — RX9 — SREN — CREN SLRE ADDEN SLRD SSP2CON1 TRISD(1) WCOL SSPOV SSPEN CKP TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 图注: — = 未实现位,读为 0。 PORTD 不使用阴影位。 注 1: 在 PIC18(L)F4XK22 器件上可用。 Bit 2 Bit 1 Bit 0 ANSD2 ANSD1 — WUE CCP1M<3:0> CCP2M<3:0> CCP4M<3:0> LATD2 LATD1 RD2 RD1 FERR OERR SLRC SLRB SSPM<3:0> TRISD2 TRISD1 ANSD0 ABDEN LATD0 RD0 RX9D SLRA TRISD0 寄存器 所在页 155 279 205 205 205 157 153 278 158 260 156 表 10-13: 与 PORTD 相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 CONFIG3H MCLRE — P2BMX T3CMX HFOFST 图注: — = 未实现位,读为 0。 PORTD 不使用阴影位。 Bit 2 Bit 1 Bit 0 CCP3MX PBADEN CCP2MX 寄存器 所在页 360 DS41412F_CN 第 150 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 10.6 PORTE 寄存器 根据选定的特定 PIC18(L)F2X/4XK22 器件,PORTE 可 通过两种不同的方式实现。 10.6.1 40/44 引脚器件上的 PORTE 对于 PIC18(L)F2X/4XK22 器件,PORTE 是一个 4 位宽 的端口。 3 个引脚 (RE0/P3A/CCP3/AN5、 RE1/P3B/ AN6 和 RE2/CCP5/AN7)可被单独配置为输入或输出。 这些引脚配有施密特触发器输入缓冲器。当被选为模拟 输入时,这些引脚将读为 0。 对应的数据方向寄存器是 TRISE。将 TRISE 某位置 1 (= 1)时,会将 PORTE 的相应引脚设为输入(即,禁 止输出驱动器)。将 TRISE 某位清零 (= 0)时,会将 PORTE 的相应引脚设为输出 (即,使能输出驱动器并 将输出锁存器中的内容输出到选中引脚)。 TRISE 控制着 REx 引脚的方向,即使它们被用作模拟 输入。用户在将这些引脚用作模拟输入时,必须确保将 它们配置为输入。 数据锁存寄存器(LATE)也是存储器映射的。对 LATE 寄存器执行读 - 修改 - 写操作将读写 PORTE 的锁存输 出值。 注: 上电复位时,RE<2:0> 被配置为模拟输入。 PORTE 的第 4 个引脚 (MCLR/VPP/RE3)是仅输入引 脚。其操作由 MCLRE 配置位控制。当被选为端口引脚 (MCLRE = 0)时,它仅用作数字输入引脚;这样,它不 具备与 TRIS 或 LAT 位相关的操作。否则,它用作器件的 主复位输入。在任何一种配置中, RE3 都用作编程期间 的编程电压输入。 注: 上电复位时,仅当主复位功能禁止时,才 能将 RE3 使能为数字输入。 例 10-5: CLRF PORTE CLRF LATE CLRF ANSELE MOVLW 05h MOVWF TRISE 初始化 PORTE ; Initialize PORTE by ; clearing output ; data latches ; Alternate method ; to clear output ; data latches ; Configure analog pins ; for digital only ; Value used to ; initialize data ; direction ; Set RE<0> as input ; RE<1> as output ; RE<2> as input 10.6.2 28 引脚器件上的 PORTE 对于 PIC18F2XK22 器件,仅当主复位功能禁止 (MCLR = 0)时,才能使用 PORTE。在这些情况下, PORTE 是仅由 RE3 组成的仅输入端口,只包含一位。 引脚操作如前所述。 10.6.3 RE3 弱上拉 端口 RE3 引脚具有单独控制的内部弱上拉功能。当置 1 时, WPUE3 (TRISE<7>)位会使能 RE3 引脚的上拉功 能。 INTCON2 寄存器的 RBPU 位同时控制 PORTB 和 PORTE 的上拉功能。当 RBPU = 0 时,弱上拉功能在所有 WPUE3 或 WPUBx 位置 1 的引脚上都有效。当置 1 时, RBPU 位可以禁止所有弱上拉功能。上电复位会禁止上拉 功能。当 RE3 端口引脚配置为 MCLR (CONFIG3H<7>, MCLRE = 1 且 CONFIG4L<2>,LVP = 0),或者配置为用 于低电压编程(MCLRE = x 且 LVP = 1)时,上拉功能将 总是使能, WPUE3 位没有任何作用。 10.6.4 PORTE 输出优先级 每个 PORTE 引脚都与其他功能复用。这里将简要说明 引脚及其复用功能和输出优先级。更多信息,请参见本 数据手册中的相应章节。 当使能多个输出时,实际引脚控制权将属于优先级较高 的外设。表 10-4 列出了从最高优先级到最低优先级的 PORTE 引脚功能。 优先级列表中未列出模拟输入功能,例如 ADC、比较器 和 SR 锁存器输入。 这些输入在使用 ANSELx 寄存器将 I/O 引脚设置为模拟 模式时有效。当引脚处于模拟模式时,数字输出功能可 以按照下面列出的优先级控制引脚。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 151 页 PIC18(L)F2X/4XK22 表 10-14: PORTE I/O 汇总 引脚 功能 TRIS ANSEL 引脚 缓冲器 设置 设置 类型 类型 说明 RE0/P3A/CCP3/AN5 RE0 0 1 P3A(1) 0 CCP3(1) 0 0 O DIG LATE<0> 数据输出;不受模拟输入影响。 0 I ST PORTE<0> 数据输入;当使能模拟输入时被禁止。 0 O DIG 增强型 CCP3 PWM 输出。 0 O DIG 比较 3 输出 /PWM3 输出。 1 0 I ST 捕捉 3 输入。 AN5 1 1 I AN 模拟输入 5。 RE1/P3B/AN6 RE1 0 0 O DIG LATE<1> 数据输出;不受模拟输入影响。 1 0 I ST PORTE<1> 数据输入;当使能模拟输入时被禁止。 P3B 0 0 O DIG 增强型 CCP3 PWM 输出。 AN6 1 1 I AN 模拟输入 6。 RE2/CCP5/AN7 RE2 0 1 CCP5 0 0 O DIG LATE<2> 数据输出;不受模拟输入影响。 0 I ST PORTE<2> 数据输入;当使能模拟输入时被禁止。 0 O DIG 比较 5 输出 /PWM5 输出。 RE3/VPP/MCLR 1 0 I ST 捕捉 5 输入。 AN7 1 1 I AN 模拟输入 7。 RE3 — — I ST PORTE<3> 数据输入;当配置位 MCLRE = 0 时使能。 VPP — — P AN 编程电压输入;总是可用。 MCLR — — I ST 低电平有效的主复位 (器件复位)输入;当配置位 MCLRE = 1 时使能。 图注: AN = 模拟输入或输出; TTL = TTL 兼容输入; HV = 高电压; OD = 漏极开路; XTAL = 晶振; CMOS = CMOS 兼容输 入或输出; ST = 带 CMOS 电平的施密特触发器输入; I2CTM = 带 I2C 电平的施密特触发器输入。 注 1: 当配置位 CCP3MX 清零时, P3A/CCP3 的备用引脚分配。 表 10-15: 与 PORTE 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 ANSELE(1) — — — — — INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 — LATE(1) — — — — — PORTE — — — — RE3 SLRCON — — — SLRE(1) SLRD(1) TRISE WPUE3 — — — — 图注: — = 未实现位,读为 0。 PORTE 不使用阴影位。 注 1: 在 PIC18(L)F4XK22 器件上可用。 Bit 2 Bit 1 Bit 0 ANSE2 ANSE1 ANSE0 TMR0IP — RBIP LATE2 RE2(1) LATE1 RE1(1) LATE0 RE0(1) SLRC SLRB SLRA TRISE2(1) TRISE1(1) TRISE0(1) 复位值 所在页 156 117 157 154 158 156 DS41412F_CN 第 152 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 10-16: 与 PORTE 相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CONFIG3H MCLRE — P2BMX T3CMX HFOFST CONFIG4L DEBUG XINST — — — 图注: — = 未实现位,读为 0。 PORTE 不使用阴影位。 注 1: 只能在高电压编程模式下更改。 CCP3MX LVP(1) PBADEN — CCP2MX STRVEN 复位值 所在页 360 361 10.7 端口模拟控制 大多数端口引脚与模拟功能 (例如模数转换器和比较 器)复用。当这些 I/O 引脚要用作模拟输入时,必须禁 止数字输入缓冲器,以避免数字输入的错误偏置导致过 大 的 电 流。通 过 ANSELA、 ANSELB、 ANSELC、 ANSELD 和 ANSELE 寄存器,可以对共用模拟功能的 引脚上的数字输入缓冲器进行单独控制。将 ANSx 位设 为高电平可以禁止关联的数字输入缓冲器,并导致对该 引脚的所有读操作返回 0,同时允许该引脚的模拟功能 正确工作。 ANSx 位的状态不会影响数字输出功能。相关 TRISx 位 清零且 ANSx 位置 1 的引脚将仍作为数字输出工作,但 输入模式将变为模拟。当在受影响的端口上执行读 - 修 改 - 写操作时,这会引起意外行为。 在发生 POR 和 BOR 时,所有 ANSEL 寄存器位都默认 设为 1,从而禁止它们关联端口引脚的数字输入。在发 生 POR 或 BOR 时,所有 TRIS 寄存器位都默认设为 1, 从而禁止它们关联端口引脚的数字输出。因此,在发生 POR 或 BOR 时,具有 ANSEL 寄存器的所有端口引脚 都默认设为模拟输入。 10.9 寄存器定义:端口控制 寄存器 10-1: PORTX(1):PORTx 寄存器 R/W-u/x R/W-u/x R/W-u/x R/W-u/x Rx7 Rx6 Rx5 Rx4 bit 7 10.8 端口压摆率控制 可对每个端口的输出压摆率进行编程,以选择标准变化 速率或降低的变化速率 (约是标准变化速率的 0.1 倍, 最大程度降低 EMI)。对于所有端口,默认压摆率是降 低的变化速率。 R/W-u/x Rx3 R/W-u/x Rx2 R/W-u/x Rx1 R/W-u/x Rx0 bit 0 图注: R = 可读位 W = 可写位 1 = 置1 0 = 清零 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 U = 未实现位,读为 0 x = 未知 bit 7-0 Rx<7:0>:PORTx I/O 位值 (2) 注 1: PORTA、 PORTB、 PORTC 和 PORTD 的寄存器说明。 2: 写入 PORTx 时,就是写入相应的 LATx 寄存器。读取 PORTx 寄存器时,将返回 I/O 引脚值。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 153 页 PIC18(L)F2X/4XK22 寄存器 10-2: U-0 — bit 7 PORTE:PORTE 寄存器 U-0 U-0 U-0 — — — R/W-u/x RE3(1) R/W-u/x RE2(2), (3) R/W-u/x RE1(2), (3) R/W-u/x RE0(2), (3) bit 0 图注: R = 可读位 W = 可写位 1 = 置1 0 = 清零 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 U = 未实现位,读为 0 x = 未知 bit 7-4 bit 3 bit 2-0 未实现:读为 0 RE3:PORTE 输入位值 (1) RE<2:0>:PORTE I/O 位值 (2), (3) 注 1: 仅当 MCLRE = 0 时,端口才可用作输入。 2: 写入 PORTx 时,就是写入相应的 LATx 寄存器。读取 PORTx 寄存器时,将返回 I/O 引脚值。 3: 在 PIC18(L)F4XK22 器件上可用。 寄存器 10-3: U-0 — bit 7 ANSELA:PORTA 模拟选择寄存器 U-0 R/W-1 U-0 R/W-1 — ANSA5 — ANSA3 R/W-1 ANSA2 R/W-1 ANSA1 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-6 bit 5 bit 4 bit 3-0 未实现:读为 0 ANSA5:RA5 模拟选择位 1 = 禁止数字输入缓冲器 0 = 使能数字输入缓冲器 未实现:读为 0 ANSA<3:0>:RA<3:0> 模拟选择位 1 = 禁止数字输入缓冲器 0 = 使能数字输入缓冲器 R/W-1 ANSA0 bit 0 DS41412F_CN 第 154 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 10-4: U-0 — bit 7 ANSELB:PORTB 模拟选择寄存器 U-0 R/W-1 R/W-1 R/W-1 — ANSB5 ANSB4 ANSB3 R/W-1 ANSB2 R/W-1 ANSB1 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 bit 7-6 bit 5-0 未实现:读为 0 ANSB<5:0>:RB<5:0> 模拟选择位 1 = 禁止数字输入缓冲器 0 = 使能数字输入缓冲器 U = 未实现位,读为 0 0 = 清零 x = 未知 寄存器 10-5: ANSELC:PORTC 模拟选择寄存器 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0 ANSC7 ANSC6 ANSC5 ANSC4 ANSC3 ANSC2 — bit 7 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-2 bit 1-0 ANSC<7:2>:RC<7:2> 模拟选择位 1 = 禁止数字输入缓冲器 0 = 使能数字输入缓冲器 未实现:读为 0 寄存器 10-6: R/W-1 ANSD7 bit 7 ANSELD:PORTD 模拟选择寄存器 R/W-1 R/W-1 R/W-1 R/W-1 ANSD6 ANSD5 ANSD4 ANSD3 R/W-1 ANSD2 R/W-1 ANSD1 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 bit 7-0 ANSD<7:0>:RD<7:0> 模拟选择位 1 = 禁止数字输入缓冲器 0 = 使能数字输入缓冲器 U = 未实现位,读为 0 0 = 清零 x = 未知 R/W-1 ANSB0 bit 0 U-0 — bit 0 R/W-1 ANSD0 bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 155 页 PIC18(L)F2X/4XK22 寄存器 10-7: U-0 — bit 7 ANSELE:PORTE 模拟选择寄存器 U-0 U-0 U-0 U-0 — — — — R/W-1 ANSE2(1) R/W-1 ANSE1(1) R/W-1 ANSE0(1) bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-3 bit 2-0 未实现:读为 0 ANSE<2:0>:RE<2:0> 模拟选择位 (1) 1 = 禁止数字输入缓冲器 0 = 使能数字输入缓冲器 注 1: 仅在 PIC18(L)F4XK22 器件上可用。 寄存器 10-8: R/W-1 TRISx7 bit 7 TRISx:PORTx 三态寄存器 (1) R/W-1 R/W-1 R/W-1 TRISx6 TRISx5 TRISx4 R/W-1 TRISx3 R/W-1 TRISx2 R/W-1 TRISx1 R/W-1 TRISx0 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-0 TRISx<7:0>:PORTx 三态控制位 1 = PORTx 引脚被配置为输入 (三态) 0 = PORTx 引脚被配置为输出 注 1: TRISA、 TRISB、 TRISC 和 TRISD 的寄存器说明。 寄存器 10-9: R/W-1 WPUE3 bit 7 TRISE:PORTE 三态寄存器 U-0 U-0 U-0 — — — U-0 R/W-1 R/W-1 R/W-1 — TRISE2(1) TRISE1(1) TRISE0(1) bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 WPUE3:弱上拉寄存器位 1 = 使能端口引脚上的上拉 0 = 禁止端口引脚上的上拉 bit 6-3 bit 2-0 未实现:读为 0 TRISE<7:0>:PORTE 三态控制位 (1) 1 = PORTE 引脚被配置为输入 (三态) 0 = PORTE 引脚被配置为输出 注 1: 仅在 PIC18(L)F4XK22 器件上可用。 DS41412F_CN 第 156 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 10-10: LATx:PORTx 输出锁存寄存器 (1) R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u LATx7 LATx6 LATx5 LATx4 LATx3 bit 7 R/W-x/u LATx2 R/W-x/u LATx1 R/W-x/u LATx0 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-0 LATx<7:0>:PORTx 输出锁存器位值 (2) 注 1: LATA、 LATB、 LATC 和 LATD 的寄存器说明。 2: 写入 PORTx 时,就是写入相应的 LATx 寄存器。读取 PORTx 寄存器时,将返回 I/O 引脚值。 寄存器 10-11: U-0 — bit 7 LATE:PORTE 输出锁存寄存器 (1) U-0 U-0 U-0 U-0 — — — — R/W-x/u LATE2 R/W-x/u LATE1 R/W-x/u LATE0 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-3 bit 2-0 未实现:读为 0 LATE<2:0>:PORTE 输出锁存器位值 (2) 注 1: 仅在 PIC18(L)F4XK22 器件上可用。 2: 写入 PORTE 时,就是写入相应的 LATE 寄存器。读取 PORTE 寄存器时,将返回 I/O 引脚值。 寄存器 10-12: WPUB:弱上拉 PORTB 寄存器 R/W-1 R/W-1 R/W-1 R/W-1 WPUB7 WPUB6 WPUB5 WPUB4 bit 7 R/W-1 WPUB3 R/W-1 WPUB2 R/W-1 WPUB1 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-0 WPUB<7:0>:弱上拉寄存器位 1 = 使能端口引脚上的上拉 0 = 禁止端口引脚上的上拉 R/W-1 WPUB0 bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 157 页 PIC18(L)F2X/4XK22 寄存器 10-13: IOCB:电平变化中断 PORTB 控制寄存器 R/W-1 R/W-1 R/W-1 R/W-1 U-0 U-0 IOCB7 IOCB6 IOCB5 IOCB4 — — bit 7 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 bit 7-4 IOCB<7:4>:电平变化中断 PORTB 控制位 1 = 允许电平变化中断 (1) 0 = 禁止电平变化中断 注 1: 电平变化中断要求 RBIE 位 (INTCON<3>)置 1。 U-0 — x = 未知 寄存器 10-14: U-0 — bit 7 SLRCON:压摆率控制寄存器 U-0 U-0 R/W-1 — — SLRE(1) R/W-1 SLRD(1) R/W-1 SLRC R/W-1 SLRB 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 bit 7-5 bit 4 bit 3 bit 2 bit 1 bit 0 未实现:读为 0 SLRE:PORTE 压摆率控制位 (1) 1 = PORTE 上所有输出的压摆率为限制速率 0 = PORTE 上所有输出的压摆率为标准速率 SLRD:PORTD 压摆率控制位 (1) 1 = PORTD 上所有输出的压摆率为限制速率 0 = PORTD 上所有输出的压摆率为标准速率 SLRC:PORTC 压摆率控制位 1 = PORTC 上所有输出的压摆率为限制速率 0 = PORTC 上所有输出的压摆率为标准速率 SLRB:PORTB 压摆率控制位 1 = PORTB 上所有输出的压摆率为限制速率 0 = PORTB 上所有输出的压摆率为标准速率 SLRA:PORTA 压摆率控制位 1 = PORTA 上所有输出的压摆率为限制速率 (2) 0 = PORTA 上所有输出的压摆率为标准速率 注 1: 这些位在 PIC18(L)F4XK22 器件上可用。 2: 当引脚用作 CLKOUT 时, RA6 的压摆率默认设为标准速率。 x = 未知 U-0 — bit 0 R/W-1 SLRA bit 0 DS41412F_CN 第 158 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 11.0 TIMER0 模块 Timer0 模块具有以下特性: • 可由软件选择作为 8 位或 16 位定时器 / 计数器 • 可读写寄存器 • 专用的 8 位软件可编程预分频器 • 可选的时钟源 (内部或外部) • 外部时钟的边沿选择 • 溢出时产生中断 11.1 寄存器定义:Timer0 控制 寄存器 11-1: T0CON:TIMER0 控制寄存器 R/W-1 TMR0ON bit 7 R/W-1 T08BIT R/W-1 T0CS R/W-1 T0SE T0CON 寄存器 (寄存器 11-1)控制该模块操作的所有 方面,包括预分频比的选择。它是可读写的。 图 11-1 给出了 8 位模式下 Timer0 模块的简化框图。图 11-2 给出了 16 位模式下 Timer0 模块的简化框图。 R/W-1 PSA R/W-1 R/W-1 TOPS<2:0> R/W-1 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2-0 TMR0ON:Timer0 开 / 关控制位 1 = 使能 Timer0 0 = 停止 Timer0 T08BIT:Timer0 8 位 /16 位控制位 1 = Timer0 被配置为 8 位定时器 / 计数器 0 = Timer0 被配置为 16 位定时器 / 计数器 T0CS:Timer0 时钟源选择位 1 = T0CKI 引脚上的电平跳变 0 = 内部指令周期时钟 (CLKOUT) T0SE:Timer0 时钟源边沿选择位 1 = 在 T0CKI 引脚信号从高至低跳变时,递增计数 0 = 在 T0CKI 引脚信号从低至高跳变时,递增计数 PSA:Timer0 预分频器分配位 1 = 未分配 Timer0 预分频器。 Timer0 时钟输入不经预分频器分频。 0 = 已分配 Timer0 预分频器。 Timer0 时钟输入来自预分频器的输出。 T0PS<2:0>:Timer0 预分频比选择位 111 = 1:256 预分频比 110 = 1:128 预分频比 101 = 1:64 预分频比 100 = 1:32 预分频比 011 = 1:16 预分频比 010 = 1:8 预分频比 001 = 1:4 预分频比 000 = 1:2 预分频比  2011-2013 Microchip Technology Inc. DS41412F_CN 第 159 页 PIC18(L)F2X/4XK22 11.2 Timer0 工作原理 Timer0 既可用作定时器也可用作计数器;可以通过 T0CON 寄存器的 T0CS 位来选择模式。在定时器模式 (T0CS = 0)下,该模块在每个时钟周期都会递增 (默 认情况下),除非选择了其他预分频值(见第 11.4 节 “ 预 分频器 ”)。在对 TMR0 寄存器执行写操作之后的两个指 令周期内禁止 Timer0 递增。通过调整写入 TMR0 寄存器 的值来补偿这两个指令周期内错过的递增,用户可以解决 这一问题。 通过将 T0CS 位置 1 (= 1)选择计数器模式。在该模 式下, Timer0 可在 RA4/T0CKI 引脚信号的每个上升沿 或下降沿递增。递增边沿由 T0CON 寄存器的 Timer0 时 钟源边沿选择位 T0SE 决定,清零该位即选择上升沿。 下面讨论外部时钟输入的限制条件。 可以使用外部时钟源来驱动 Timer0 ;但是,必须满足 一定要求 (见表 27-12),以确保外部时钟和内部相位 时钟 (TOSC)保持同步。在同步之后,定时器 / 计数器 需要一定的延时才开始递增。 11.3 16 位模式下 Timer0 的读写操作 TMR0H 并不是 16 位模式下 Timer0 的实际高字节,而 是 Timer0 实际高字节的缓存形式,不可以被直接读写 (见图 11-2)。在读 TMR0L 时使用 Timer0 高字节的内 容更新 TMR0H。这种方式使用户可以读取 Timer0 的全 部 16 位,而不需要验证高字节和低字节读取的有效性。 由于高字节和低字节连续读取之间的计满返回,可能会 产生无效读取。 同样,写入 Timer0 的高字节也必须通过 TMR0H 缓冲 寄存器来操作。写入 TMR0H 不会直接影响 Timer0。而 是在写入 TMR0L 的同时,使用 TMR0H 的内容更新 Timer0 的高字节。这样一次就可以完成 Timer0 全部 16 位 的更新。 图 11-1: TIMER0 框图 (8 位模式) FOSC/4 0 1 T0CKI 引脚 T0SE T0CS T0PS<2:0> PSA 可编程 预分频器 3 1 与内部 时钟同步 0 (延时 2 个 TCY) TMR0L 8 8 溢出时 将 TMR0IF 置 1 内部数据总线 注: 复位时, Timer0 被使能为在 8 位模式下工作,其时钟输入来自 T0CKI 引脚的最大预分频信号。 DS41412F_CN 第 160 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 11-2: TIMER0 框图 (16 位模式) FOSC/4 0 1 T0CKI 引脚 T0SE T0CS T0PS<2:0> PSA 可编程 预分频器 3 1 与内部 时钟同步 0 (延时 2 个 TCY) TMR0L 8 TMR0 高字节 8 溢出时 将 TMR0IF 置 1 8 TMR0H 读 TMR0L 写 TMR0L 8 8 内部数据总线 注: 复位时, Timer0 被使能为在 8 位模式下工作,其时钟输入来自 T0CKI 引脚的最大预分频信号。 11.4 预分频器 Timer0 模块的预分频器为一个 8 位计数器。该预分频器 不可直接读写;通过PSA和T0CON寄存器的T0PS<2:0> 位进行预分频器的分配和设定预分频比。 将 PSA 位清零可将预分频器分配给 Timer0 模块。如果 已经分配了预分频器,预分频值可在 1:2 至 1:256 之间 进行选择,以 2 的整数次幂递增。 如果将预分频器分配给 Timer0 模块,所有写入 TMR0 寄存器的指令 (例如, CLRF TMR0、 MOVWF TMR0 和 BSF TMR0 等)都会将预分频器的计数值清零。 注: 如果将预分频器分配给 Timer0,写入 TMR0 会将预分频器的计数值清零,但不会改变 预分频器的分配。 11.4.1 切换预分频器的分配 预分频器的分配完全由软件控制,并且在程序执行期间 可以随时更改。 11.5 Timer0 中断 8 位模式下 TMR0 寄存器从 FFh 溢出到 00h,或 16 位 模式下 TMR0 从 FFFFh 溢出到 0000h 时,将产生 TMR0 中断。这种溢出会将 TMR0IF 标志位置 1。可以通过清 零 INTCON 寄存器的 TMR0IE 位来屏蔽该中断。在重新 允 许 该中 断 前,必 须 在中 断 服 务 程序 中 用 软 件清 零 TMR0IF 位。 由于 Timer0 在休眠模式下是关闭的,所以 TMR0 中断 无法将处理器从休眠状态唤醒。 表 11-1: 与 TIMER0 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS<2:0> TMR0H TMR0L TRISA TRISA7 TRISA6 Timer0 寄存器的高字节 Timer0 寄存器的低字节 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 图注: — = 未实现位,读为 0。 Timer0 不使用阴影位。 复位值 所在页 116 117 159 — — 156  2011-2013 Microchip Technology Inc. DS41412F_CN 第 161 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 162 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 12.0 带门控控制的 TIMER1/3/5 模块 Timer1/3/5 模块是 16 位定时器 / 计数器,具有以下特性: • 16 位定时器 / 计数器寄存器对 (TMRxH:TMRxL) • 可编程内部或外部时钟源 • 2 位预分频器 • 专用的辅助 32 kHz 振荡器电路 • 可选的同步比较器输出 • 多个 Timer1/3/5 门控 (计数使能)源 • 溢出时产生中断 • 溢出触发唤醒 (仅限外部时钟,异步模式) • 16 位读 / 写操作 • 捕捉 / 比较功能的时基 图 12-1: TIMER1/3/5 框图 • 特殊事件触发器 (带 CCP/ECCP) • 可选择的门控源极性 • 门控翻转模式 • 门控单脉冲模式 • 门控值状态 • 门控事件中断 图 12-1 给出了 Timer1/3/5 模块的框图。 TxGSS<1:0> TxG 00 TxGSPM Timer2/4/6 匹配 PR2/4/6 01 sync_C1OUT(7) 10 sync_C2OUT(7) 11 TxGPOL TxG_IN TMRxON TxGTM DQ CK Q R 0 单脉冲 1 采集控制 TxGGO/DONE 0 TxGVAL D Q 1 Q1 EN 中断 检测 TMRxGE 数据总线 读 TXGCON 置1 TMRxGIF 溢出时 将标志位 TMRxIF 置 1 TMRx(2),(4) TMRxH TMRxL EN Q D TxCLK TMRxON 0 同步的 时钟输入 至比较器模块 辅助振荡器模块 SOSCOUT 见图 2-4 TMRxCS<1:0> 保留 11 (5),(6) 1 TxCLK_EXT_SRC (1) 10 TxCKI 0 FOSC 内部时钟 01 TxSOSCEN FOSC/4 内部时钟 00 1 TxSYNC 预分频器 1, 2, 4, 8 2 TxCKPS<1:0> 同步 (3),(7) 检测 FOSC/2 内部时钟 休眠输入 注 1: 当使用 TxCKI 时, ST 缓冲器为高速型。 2: Timer1/3/5 寄存器在上升沿递增。 3: 处于休眠模式时不进行同步。 4: 16 位读 / 写模式框图请参见图 12-2。 5: 当使能辅助振荡器时, T1CKI 不可用。(SOSCGO = 1 或 TXSOSCEN = 1) 6: 除非 T3CMX = 1,否则使能辅助振荡器时, T3CKI 不可用。 7: 同步比较器输出不应与同步 TxCKI 一起使用。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 163 页 PIC18(L)F2X/4XK22 12.1 Timer1/3/5 工作原理 Timer1/3/5 模块是 16 位递增计数器,可通过 TMRxH: TMRxL 寄存器对访问。写 TMRxH 或 TMRxL 会直接更 新计数器。 与内部时钟源一起使用时,模块为定时器,并在每个指 令周期递增。与外部时钟源一起使用时,模块可用作定 时器或计数器,并在外部时钟源的每个选定边沿递增。 Timer1/3/5 分别通过配置 TxCON 和 TxGCON 寄存器中 的 TMRxON 和 TMRxGE 位使能。表 12-1 显示了 Timer1/ 3/5 使能选择。 表 12-1: TMRxON 0 0 1 1 TIMER1/3/5 使能选择 TMRxGE Timer1/3/5 工作状态 0 关闭 1 关闭 0 总是开启 1 计数使能 12.2 时钟源选择 TxCON 寄存器的 TMRxCS<1:0> 和 TxSOSCEN 位用于 选择 Timer1/3/5 的时钟源。专用的辅助振荡器电路可同 时用作 Timer1、 Timer3 和 Timer5 的时钟源。任何一个 TxSOSCEN 位都可以使能辅助振荡器电路并选择它作 为该特定定时器的时钟源。表 12-2 显示了时钟源选择。 12.2.1 内部时钟源 当选择内部时钟源时, TMRxH:TMRxL 寄存器对将在 FOSC 的整数倍(由 Timer1/3/5 预分频器决定)处递增。 选择 FOSC 内部时钟源时, Timer1/3/5 寄存器的值将在 每个指令时钟周期中递增 4 次。由于这个原因,在读取 Timer1/3/5 值时,分辨率将会出现 2 LSB 的误差。为了 利用 Timer1/3/5 的全部分辨率,必须使用异步输入信号 来对 Timer1/3/5 时钟输入进行门控。 可以使用以下异步源: • TxG 引脚上的异步事件用于进行 Timer1/3/5 门控 • C1 或 C2 比较器输入用于进行 Timer1/3/5 门控 12.2.2 外部时钟源 当选择外部时钟源时, Timer1/3/5 模块可以作为定时器 或计数器工作。 使能计数时,Timer1/3/5 在外部时钟输入 TxCKI 引脚的 上升沿递增。该外部时钟源既可以与单片机系统时钟同 步,也可以异步运行。 作为定时器采用时钟振荡器工作时,可以将外部32.768 kHz 晶振与专用辅助内部振荡器电路一起使用。 注: 在计数器模式下,发生以下任何一个或多 个情况后,计数器在首个上升沿递增前, 必须先经过一个下降沿: • POR 复位后使能 Timer1/3/5 • 写入 TMRxH 或 TMRxL • Timer1/3/5 被禁止 • TxCKI 为高电平时 Timer1/3/5 被禁止 (TMRxON = 0),然后在 TxCKI 为低电 平时Timer1/3/5被使能(TMRxON = 1)。 表 12-2: TMRxCS1 0 0 1 1 时钟源选择 TMRxCS0 1 0 0 0 TxSOSCEN x x 0 1 时钟源 系统时钟 (FOSC) 指令时钟 (FOSC/4) TxCKI 引脚上的外部时钟源 SOSCI/SOSCO 引脚上的振荡器电路 DS41412F_CN 第 164 页  2011-2013 Microchip Technology Inc. 12.3 Timer1/3/5 预分频器 Timer1/3/5 有 4 个预分频比选项,允许对时钟输入进行 1、2、 4 或 8 分频。 TxCON 寄存器的 TxCKPS 位控制 预分频器计数器。对预分频器计数器不能直接进行读写 操作;但是,通过写入 TMRxH 或 TMRxL 可将预分频器 计数器清零。 12.4 辅助振荡器 在引脚 SOSCI (输入)和 SOSCO (放大器输出)之 间接有一个内置专用辅助低功耗 32.768 kHz 振荡器电 路。该内部电路与一个外部 32.768 kHz 晶振联合使用。 振荡器电路的使能方式是将TxCON寄存器的TxSOSCEN 位和 OSCCON2 寄存器的 SOSCGO 位置 1,或通过在 OSCCON 寄存器中设置 SCS<1:0> = 01 来选择辅助振 荡器作为系统时钟。在休眠期间,振荡器将继续运行。 注: 振荡器在使用之前需要一定的起振和稳定 时间。因此, TxSOSCEN 应置 1,且在使 能 Timer1/3/5 之前确保有适当的延时。 12.5 异步计数器模式下的 Timer1/3/5 操作 如果 TxCON 寄存器的控制位 TxSYNC 置 1,外部时钟 输入将不同步。定时器异步于内部相位时钟进行递增计 数。如果选择了外部时钟源,定时器在休眠期间将继续 运行,并在溢出时产生中断以唤醒处理器。但是,用软件 对定时器进行读 / 写操作时,要特别当心(见第 12.5.1 节 “ 在异步计数器模式下读写 Timer1/3/5”)。 注: 当从同步切换到异步操作时,可能会跳过 一次递增。当从异步切换到同步操作时, 可能会产生一次额外递增。 PIC18(L)F2X/4XK22 12.5.1 在异步计数器模式下读写 TIMER1/3/5 当定时器采用外部异步时钟运行时,对 TMRxH 或 TMRxL 的读操作将确保为有效读操作(由硬件实现)。 但是,用户应该记住通过读两个 8 位值来读取 16 位定 时器本身就会产生某些问题,这是因为定时器可能在两 次读操作之间产生溢出。对于写操作,建议用户直接停 止定时器,然后写入所需的值。如果定时器寄存器正进 行递增计数,对定时器寄存器进行写操作可能会导致写 争用。这可能在 TMRxH:TMRxL 寄存器对中产生不可预 测的值。 12.6 Timer1/3/5 的 16 位读 / 写模式 Timer1/3/5 可配置为从 8 位 TMRxL 和 TMRxH 寄存器 中同时读写全部 16 位数据。 16 位读写操作通过将 TxCON 寄存器的 RD16 位置 1 来使能。 为了实现该功能, TMRxH 寄存器值会被映射到一个称 为 TMRxH 的缓冲寄存器中。处于 16 位模式时,TMRxH 寄存器不能直接进行读写,所有读写操作都通过使用这 个 TMRxH 缓冲寄存器来执行。 当请求读取 TMRxL 寄存器时,TMRxH 寄存器的值会在 同一时刻被装入 TMRxH 缓冲寄存器中。当请求读取 TMRxH 寄存器时,值将改为从 TMRxH 缓冲寄存器中 提供。这使用户可以在同一时刻准确读取 Timer1/3/5 值 的全部 16 位。 反之,不处于 16 位模式时,用户必须单独读取每个寄 存器,并且必须确定值是否由于两次读操作之间可能发 生的计满返回事件而变为无效。 当请求写入 TMRxL 寄存器时,TMRxH 缓冲寄存器的内 容将与 TMRxH 寄存器的内容同时发生更新。在请求写 入 TMRxL 寄存器之前,必须在 TMRxH 缓冲寄存器中 预先装入 TMRxH 的值。这使用户可以在同一时刻将全 部 16 位写入 TMRxL:TMRxH 寄存器对中。 对 TMRxH 的任何直接写入请求都不会清零 Timer1/3/5 预分频值。预分频值只能通过对 TMRxL 寄存器的写请 求来清零。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 165 页 PIC18(L)F2X/4XK22 图 12-2: TIMER1/3/5 的 16 位读 / 写模式框图 TMR1L TMR1 高字节 8 来自 Timer1 电路 溢出时 将 TMR1IF 置 1 读 TMR1L 8 8 写 TMR1L TMR1H 8 8 内部数据总线 图中以 Timer1 为例来代表 TIMER1/3/5 12.7 Timer1/3/5 门控 Timer1/3/5 可配置为自由计数或用 Timer1/3/5 门控电路 使能和禁止计数。这也称为 Timer1/3/5 门控使能。 Timer1/3/5 门控也可由多个可选择源驱动。 12.7.1 TIMER1/3/5 门控使能 可通过将 TxGCON 寄存器的 TMRxGE 位置 1 来使能 Timer1/3/5 门控使能模式。使用 TxGCON 寄存器的 TxGPOL 位来配置 Timer1/3/5 门控使能模式的极性。 使能 Timer1/3/5 门控使能模式时, Timer1/3/5 将在 Timer1/3/5 时钟源的上升沿递增。禁止 Timer1/3/5 门控 使能模式时,不会发生递增,Timer1/3/5 将保持当前计 数。时序详细信息请参见图 12-4。 表 12-3: TIMER1/3/5 门控使能选择 TxCLK TxGPOL TxG Timer1/3/5 工作状态 ↑ 0 0 计数 ↑ 0 1 保持计数 ↑ 1 0 保持计数 ↑ 1 1 计数 12.7.2 TIMER1/3/5 门控源选择 Timer1/3/5 门控源可从 4 种不同源之中选择。源的选择 由 TxGCON 寄存器的 TxGSS 位控制。每个可用源的极 性也是可选择的。极性的选择由 TxGCON 寄存器的 TxGPOL 位控制。 表 12-4: TIMER1/3/5 门控源 TxGSS Timer1/3/5 门控源 00 Timer1/3/5 门控引脚 01 Timer2/4/6 匹配 PR2/4/6 (TMR2/4/6 递增以匹配 PR2/4/6) 10 比较器 1 的输出 sync_C1OUT (可选择 Timer1/3/5 同步输出) 11 比较器 2 的输出 sync_C2OUT (可选择 Timer1/3/5 同步输出) 根据所选择的 16 位定时器是 Timer1、 Timer3 或是 Timer5, Timer2、 Timer4 和 Timer6 之间的门控资源 (Timer2 匹配 PR2)会有不同。要确定对于所用 16 位 定时器,有哪种 Timer2/4/6 匹配 PR2/4/6 组合可用,请 参见表 12-5。 表 12-5: TIMER2/4/6 匹配 PR2/4/6 的 门控资源 Timer1/3/5 资源 Timer1/3/5 门控匹配选择 Timer1 Timer3 Timer5 TMR2 匹配 PR2 TMR4 匹配 PR4 TMR6 匹配 PR6 12.7.2.1 TxG 引脚门控操作 TxG 引脚是 Timer1/3/5 门控控制源之一。它可用于向 Timer1/3/5 门控电路提供外部源。 12.7.2.2 Timer2/4/6 匹配门控操作 TMR2/4/6 寄存器将递增到与 PR2/4/6 寄存器中的值匹 配为止。在紧接着的下一个递增周期, TMR2/4/6 将复 位为 00h。发生该复位时,将自动产生由低至高脉冲并 在内部提供给 Timer1/3/5 门控电路。更多信息,请参见 第 12.7.2 节 “Timer1/3/5 门控源选择 ”。 DS41412F_CN 第 166 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 12.7.2.3 比较器 C1 门控操作 比较器 1 操作产生的输出可以选择作为 Timer1/3/5 的门 控控制源。比较器 1 输出 (sync_C1OUT)可以与 Timer1/3/5 时钟进行同步,也可以保持异步。更多信息, 请参见第 18.8.4 节 “ 使比较器的输出与 Timer1 同步 ”。 12.7.2.4 比较器 C2 门控操作 比较器 2 操作产生的输出可以选择作为 Timer1/3/5 的门 控 控 制 源。比 较 器 2 输 出 (sync_C2OUT)可以与 Timer1/3/5时钟进行同步,也可以保持异步。更多信息, 请参见第 18.8.4 节 “ 使比较器的输出与 Timer1 同步 ”。 12.7.3 TIMER1/3/5 门控翻转模式 使能 Timer1/3/5 门控翻转模式时,可测量 Timer1/3/5 门控 信号整个周期的长度,而不是单电平脉冲的持续时间。 Timer1/3/5 门控源通过单稳态触发器连接,该触发器 在信号的每个递增边沿改变状态。时序详细信息请参 见图 12-5。 Timer1/3/5 门控翻转模式通过将 TxGCON 寄存器的 TxGTM 位置 1 使能。 TxGTM 位清零时,将清除单稳态 触发器并保持清零。这对于控制测量哪个边沿是必需 的。 注: 在使能翻转模式的同时改变门控极性,可 能会导致不确定的操作。 12.7.4 TIMER1/3/5 门控单脉冲模式 使能 Timer1/3/5 门控单脉冲模式时,可能会捕捉到一个 单脉冲门控事件。Timer1/3/5 门控单脉冲模式首先通过 将 TxGCON 寄存器中的 TxGSPM 位置 1 来使能。接下 来必须将 TxGCON 寄存器中的 TxGGO/DONE 位置 1。 Timer1/3/5 将在下一个递增边沿完全使能。在脉冲的下 个后边沿,将自动清零 TxGGO/DONE 位。不允许其他 门控事件递增 Timer1/3/5,直到 TxGGO/DONE 位再次 用软件置 1。 清零 TxGCON 寄存器的 TxGSPM 位也将清零 TxGGO/ DONE 位。时序详细信息请参见图 12-6。 同时使能翻转模式和单脉冲模式将允许两种模式协同工 作。这样就可以测量 Timer1/3/5 门控源的周期时间。时 序详细信息请参见图 12-7。 12.7.5 TIMER1/3/5 门控值状态 使用 Timer1/3/5 门控值状态时,可读取门控控制值的最 新电平。该值保存在 TxGCON 寄存器的 TxGVAL 位中。 即使 Timer1/3/5 门控未使能 (TMRxGE 位清零) , TxGVAL 位也是有效的。 12.7.6 TIMER1/3/5 门控事件中断 允许 Timer1/3/5 门控事件中断时,可在门控事件完成时 产生一个中断。出现 TxGVAL 的下降沿时, PIR3 寄存 器中的 TMRxGIF 标志位将置 1。如果 PIE3 寄存器中的 TMRxGIE 位置 1,则会识别出中断。 即使 Timer1/3/5 门控未使能 (TMRxGE 位清零) , TMRxGIF 标志位也能工作。 关于为 Timer1/3/5 门控事件中断选择高或低优先级状态 的更多信息,请参见第 9.0 节 “ 中断 ”。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 167 页 PIC18(L)F2X/4XK22 12.8 Timer1/3/5 中断 Timer1/3/5寄存器对(TMRxH:TMRxL)递增到FFFFh, 然后计满返回到 0000h。当 Timer1/3/5 计满返回时, PIR1/2/5 寄存器的 Timer1/3/5 中断标志位将置 1。为允 许计满返回时的中断,必须将以下位置 1: • TxCON 寄存器的 TMRxON 位 • PIE1、 PIE2 或 PIE5 寄存器的 TMRxIE 位 • INTCON 寄存器的 PEIE/GIEL 位 • INTCON 寄存器的 GIE/GIEH 位 在中断服务程序中清零 TMRxIF 位将清除中断。 关于为 Timer1/3/5 溢出中断选择高或低优先级状态的更 多信息,请参见第 9.0 节 “ 中断 ”。 注: 在允许中断前,应将 TMRxH:TMRxL 寄存 器对以及 TMRxIF 位清零。 12.9 休眠期间的 Timer1/3/5 操作 只有在设置为异步计数器模式时,Timer1/3/5 才能在休 眠模式下工作。在该模式下,可使用外部晶振或时钟源 使计数器递增计数。要设置定时器以唤醒器件: • 必须将 TxCON 寄存器的 TMRxON 位置 1 • 必须将 PIE1/2/5 寄存器的 TMRxIE 位置 1 • 必须将 INTCON 寄存器的 PEIE/GIEL 位置 1 • 必须将 TxCON 寄存器的 TxSYNC 位置 1 • 必须配置 TxCON 寄存器的 TMRxCS 位 • 必须配置 TxCON 寄存器的 TxSOSCEN 位 器 件将 在 溢 出 时被 唤 醒 并 执行 下 一 条 指令。如 果 将 INTCON 寄存器的 GIE/GIEH 位置 1,器件将调用中断 服务程序。 无论 TxSYNC 位的设置如何,辅助振荡器都会在休眠模 式下继续工作。 12.10 ECCP/CCP 捕捉 / 比较时基 当工作在捕捉或比较模式下时,CCP 模块使用 TMRxH: TMRxL 寄存器对作为时基。 在捕捉模式下,当发生配置事件时,TMRxH:TMRxL 寄 存器对中的值被复制到 CCPRxH:CCPRxL 寄存器对中。 在比较模式下,当 CCPRxH:CCPRxL 寄存器对中的值 与 TMRxH:TMRxL 寄存器对中的值相匹配时触发事件。 该事件可以是特殊事件触发信号。 更多信息,请参见第 14.0 节 “ 捕捉 / 比较 /PWM 模块 ”。 12.11 ECCP/CCP 特殊事件触发信号 当将任一 CCP 配置为触发特殊事件时,触发信号将清 零 TMRxH:TMRxL 寄存器对。该特殊事件不会引起 Timer1/3/5 中断。CCP 模块仍可配置为产生 CCP 中断。 在该工作模式下, CCPRxH:CCPRxL 寄存器对变成 Timer1/3/5 的周期寄存器。 为了利用特殊事件触发信号, Timer1/3/5 应进行同步, 并且应选择 FOSC/4 作为时钟源。 Timer1/3/5 的异步操 作会导致错过特殊事件触发信号。 如果对 TMRxH 或 TMRxL 的写操作和来自 CCP 的特殊 事件触发信号同时发生,则写操作优先。 更多信息,请参见第 17.2.8 节 “ 特殊事件触发器 ”。 DS41412F_CN 第 168 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 12-3: TXCKI = 1 当 TMRx 使能时 TIMER1/3/5 递增边沿 TXCKI = 0 当 TMRx 使能时 注 1: 箭头指示计数器递增。 2: 在计数器模式下,计数器在首个上升沿递增之前,必须先经过一个下降沿。 图 12-4: TIMER1/3/5 门控使能模式 TMRxGE TxGPOL TxG_IN TxCKI TxGVAL Timer1/3/5 N N+1 N+2 N+3 N+4  2011-2013 Microchip Technology Inc. DS41412F_CN 第 169 页 PIC18(L)F2X/4XK22 图 12-5: TIMER1/3/5 门控翻转模式 TMRxGE TxGPOL TxGTM TxTxG_IN TxCKI TxGVAL TIMER1/3/5 N N+1 N+2 N+3 N+4 图 12-6: TMRxGE TxGPOL TxGSPM TxGGO/ DONE TxG_IN TIMER1/3/5 门控单脉冲模式 用软件置 1 在 TxG 的上升沿 计数使能 TxCKI TxGVAL TIMER1/3/5 TMRxGIF N 用软件清零 N+1 N+5 N+6 N+7 N+8 在 TxGVAL 的下降沿 由硬件清零 N+2 在 TxGVAL 的下降沿 由硬件置 1 用软件清零 DS41412F_CN 第 170 页  2011-2013 Microchip Technology Inc. 图 12-7: TMRxGE TxGPOL TxGSPM TxGTM TxGGO/ DONE TxG_IN TxCKI PIC18(L)F2X/4XK22 TIMER1/3/5 门控单脉冲和翻转组合模式 用软件置 1 在 TxG 的上升沿 计数使能 在 TxGVAL 的下降沿 由硬件清零 TxGVAL TIMER1/3/5 TMRxGIF N 用软件清零 N+1 N+2 N+3 N+4 在 TxGVAL 的下降沿 由硬件置 1 用软件清零 12.12 外设模块禁止 不使用某个外设模块或该外设模块不工作时,可以通过 将 PMD 寄存器中的模块禁止位置 1 来禁止该模块。这可 以将功耗降到绝对最低。PMD 位置 1 会将模块保持在复 位状态,并断开模块的时钟源。 Timer1 (TMR1MD)、 Timer3 (TMR3MD)和 Timer5 (TMR5MD)的模块禁 止位位于 PMD0 寄存器中。更多信息,请参见第 3.0 节 “ 功耗管理模式 ”。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 171 页 PIC18(L)F2X/4XK22 12.13 寄存器定义:Timer1/3/5 控制寄存器 寄存器 12-1: TXCON:TIMER1/3/5 控制寄存器 R/W-0/u R/W-0/u R/W-0/u R/W-0/u R/W-0/u TMRxCS<1:0> bit 7 TxCKPS<1:0> TxSOSCEN R/W-0/u TxSYNC R/W-0/0 TxRD16 R/W-0/u TMRxON bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-6 bit 5-4 bit 3 bit 2 bit 1 bit 0 TMRxCS<1:0>:Timer1/3/5 时钟源选择位 11 = 保留。不使用。 10 = Timer1/3/5 时钟源为引脚时钟或振荡器: 如果 TxSOSCEN = 0: 来自 TxCKI 引脚的外部时钟 (上升沿触发计数) 如果 TxSOSCEN = 1: SOSCI/SOSCO 引脚上的晶振 01 = Timer1/3/5 时钟源为系统时钟 (FOSC) 00 = Timer1/3/5 时钟源为指令时钟 (FOSC/4) TxCKPS<1:0>:Timer1/3/5 输入时钟预分频比选择位 11 = 1:8 预分频比 10 = 1:4 预分频比 01 = 1:2 预分频比 00 = 1:1 预分频比 TxSOSCEN:辅助振荡器使能控制位 1 = 使能专用的辅助振荡器电路 0 = 禁止专用的辅助振荡器电路 TxSYNC:Timer1/3/5 外部时钟输入同步控制位 TMRxCS<1:0> = 1X 1 = 不同步外部时钟输入 0 = 将外部时钟输入与系统时钟同步 (FOSC) TMRxCS<1:0> = 0X 该位被忽略。当 TMRxCS<1:0> = 1X 时, Timer1/3/5 使用内部时钟。 TxRD16:16 位读 / 写模式使能位 1 = 使能 Timer1/3/5 通过一次 16 位操作进行寄存器读 / 写 0 = 使能 Timer1/3/5 通过两次 8 位操作进行寄存器读 / 写 TMRxON:Timer1/3/5 使能位 1 = 使能 Timer1/3/5 0 = 停止 Timer1/3/5 清零 Timer1/3/5 门控单稳态触发器的输出 DS41412F_CN 第 172 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 12-2: TXGCON:TIMER1/3/5 门控控制寄存器 R/W-0/u TMRxGE bit 7 R/W-0/u TxGPOL R/W-0/u TxGTM R/W-0/u R/W/HC-0/u TxGSPM TxGGO/DONE R-x/x TxGVAL R/W-0/u R/W-0/u TxGSS<1:0> bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 HC = 硬件清零位 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1-0 TMRxGE:Timer1/3/5 门控使能位 如果 TMRxON = 0: 该位被忽略 如果 TMRxON = 1: 1 = Timer1/3/5 计数由 Timer1/3/5 门控功能控制 0 = Timer1/3/5 计数与 Timer1/3/5 门控功能无关 TxGPOL:Timer1/3/5 门控极性位 1 = Timer1/3/5 门控为高电平有效 (当门控信号为高电平时 Timer1/3/5 计数) 0 = Timer1/3/5 门控为低电平有效 (当门控信号为低电平时 Timer1/3/5 计数) TxGTM:Timer1/3/5 门控翻转模式位 1 = 使能 Timer1/3/5 门控翻转模式 0 = 禁止 Timer1/3/5 门控翻转模式并清除单稳态触发器的输出 Timer1/3/5 门控单稳态触发器在每个上升沿翻转。 TxGSPM:Timer1/3/5 门控单脉冲模式位 1 = 使能 Timer1/3/5 门控单脉冲模式,控制 Timer1/3/5 门控 0 = 禁止 Timer1/3/5 门控单脉冲模式 TxGGO/DONE:Timer1/3/5 门控单脉冲采集状态位 1 = Timer1/3/5 门控单脉冲采集就绪,正在等待一个边沿 0 = Timer1/3/5 门控单脉冲采集已经结束或尚未开始 当 TxGSPM 清零时,该位会自动清零。 TxGVAL:Timer1/3/5 门控当前状态位 指示可提供给 TMRxH:TMRxL 的 Timer1/3/5 门控信号的当前状态。 不受 Timer1/3/5 门控使能 (TMRxGE)的影响。 TxGSS<1:0>:Timer1/3/5 门控源选择位 00 = Timer1/3/5 门控引脚 01 = Timer2/4/6 匹配 PR2/4/6 输出 (关于相应的定时器匹配选择,请参见表 12-6) 10 = 比较器 1 的可选同步输出 (sync_C1OUT) 11 = 比较器 2 的可选同步输出 (sync_C2OUT)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 173 页 PIC18(L)F2X/4XK22 表 12-6: 与 TIMER1/3/5 作为定时器 / 计数器相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ANSELB ANSELC INTCON IPR1 IPR2 IPR3 IPR5 PIE1 PIE2 PIE3 PIE5 PIR1 PIR2 PIR3 PIR5 PMD0 T1CON T1GCON T3CON T3GCON T5CON T5GCON TMR1H TMR1L TMR3H TMR3L TMR5H TMR5L TRISB TRISC — — ANSB5 ANSB4 ANSB3 ANSB2 ANSC7 ANSC6 ANSC5 ANSC4 ANSC3 ANSC2 GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF — ADIP RC1IP TX1IP SSP1IP CCP1IP OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP — — — — — TMR6IP — ADIE RC1IE TX1IE SSP1IE CCP1IE OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE — — — — — TMR6IE — ADIF RC1IF TX1IF SSP1IF CCP1IF OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF — — — — — TMR6IF UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR1CS<1:0> T1CKPS<1:0> T1SOSCEN T1SYNC TMR1GE T1GPOL T1GTM T1GSPM T1GGO/DONE T1GVAL TMR3CS<1:0> T3CKPS<1:0> T3SOSCEN T3SYNC TMR3GE T3GPOL T3GTM T3GSPM T3GGO/DONE T3GVAL TMR5CS<1:0> T5CKPS<1:0> T5SOSCEN T5SYNC TMR5GE T5GPOL T5GTM T5GSPM T5GGO/DONE T5GVAL 16 位 TMR1 寄存器高字节的保持寄存器 16 位 TMR1 寄存器的低字节 16 位 TMR3 寄存器高字节的保持寄存器 16 位 TMR3 寄存器的低字节 16 位 TMR5 寄存器高字节的保持寄存器 16 位 TMR5 寄存器的低字节 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 ANSB1 ANSB0 — — INT0IF RBIF TMR2IP TMR1IP TMR3IP CCP2IP TMR3GIP TMR1GIP TMR5IP TMR4IP TMR2IE TMR1IE TMR3IE CCP2IE TMR3GIE TMR1GIE TMR5IE TMR4IE TMR2IF TMR1IF TMR3IF CCP2IF TMR3GIF TMR1GIF TMR5IF TMR4IF TMR2MD TMR1MD T1RD16 TMR1ON T1GSS<1:0> T3RD16 TMR3ON T3GSS<1:0> T5RD16 TMR5ON T5GSS<1:0> TRISB1 TRISC1 TRISB0 TRISC0 复位值 所在页 155 155 116 128 129 130 131 124 125 126 127 119 120 121 123 55 172 173 172 173 172 173 — — — — — — 156 156 表 12-7: 名称 CONFIG3H 与 TIMER1/3/5 相关的配置寄存器 Bit 7 Bit 6 Bit 5 Bit 4 MCLRE — P2BMX T3CMX Bit 3 Bit 2 Bit 1 Bit 0 HFOFST CCP3MX PBADEN CCP2MX 复位值 所在页 360 DS41412F_CN 第 174 页  2011-2013 Microchip Technology Inc. 13.0 TIMER2/4/6 模块 有 3 个完全相同的 8 位 Timer2 型的模块可供使用。为 了 保 持 原 有 的 命 名 约 定,这 些 定 时 器 分 别 命 名 为 Timer2、 Timer4 和 Timer6 (也称为 Timer2/4/6)。 注: 本节中使用的变量 “x” 用于指代 Timer2、 Timer4 或 Timer6。例 如, TxCON 指 T2CON、T4CON或T6CON。PRx指PR2、 PR4 或 PR6。 Timer2/4/6 模块具有以下特性: • 8 位定时器和周期寄存器 (分别为 TMRx 和 PRx) • 可读写 (以上两个寄存器) • 软件可编程的预分频器(分频比为1:1、1:4和1:16) • 软件可编程的后分频器 (分频比为 1:1 至 1:16) • TMRx 与 PRx 匹配时产生中断 • 可选择用作MSSPx模块的移位时钟(仅限Timer2) Timer2/4/6 的框图请参见图 13-1。 图 13-1: TIMER2/4/6 框图 PIC18(L)F2X/4XK22 TMRx 输出 将标志位 TMRxIF 置 1 FOSC/4 预分频器 1:1, 1:4, 1:16 2 TxCKPS<1:0> TMRx 比较器 PRx 复位 后分频器 相等 1:1 至 1:16 4 TxOUTPS<3:0>  2011-2013 Microchip Technology Inc. DS41412F_CN 第 175 页 PIC18(L)F2X/4XK22 13.1 Timer2/4/6 工作原理 Timer2/4/6 模块的时钟输入是系统指令时钟(FOSC/4)。 TMRx 会从 00h 开始在每个时钟边沿递增。 4 位计数器 / 预分频器提供了直接时钟输入、对时钟输入 4 分频和 16 分频三个预分频选项。这些选项通过 TxCON 寄存器的预分频控制位 TxCKPS<1:0> 进行选择。在每个 时钟周期, TMRx 的值都会与周期寄存器 PRx 中的值进 行比较。当两个值匹配时,由比较器产生匹配信号作为定 时器的输出。该信号也会将 TMRx 的值在下一个周期复 位为 00h,并驱动输出计数器 / 后分频器 (见第 13.2 节 “Timer2/4/6 中断 ”)。 TMRx 和 PRx 寄存器均可直接读写。在任何器件复位 时,TMRx 寄存器都会清零,而 PRx 寄存器则初始化为 FFh。发生以下事件时,预分频器和后分频器计数器均 会清零: • 对 TMRx 寄存器进行写操作 • 对 TxCON 寄存器进行写操作 • 上电复位 (POR) • 欠压复位 (BOR) • MCLR 复位 • 看门狗定时器 (WDT)复位 • 堆栈上溢复位 • 堆栈下溢复位 • RESET 指令 注: 写 TxCON 时 TMRx 不会清零。 13.2 Timer2/4/6 中断 Timer2/4/6 也可以产生可选的器件中断。 Timer2/4/6 输 出信号 (TMRx 与 PRx 匹配时)为 4 位计数器 / 后分频 器提供输入。该计数器产生 TMRx 匹配中断,对应的中 断标志位为 PIR1/PIR5 寄存器的 TMRxIF 位。可以通过 将 PIE1/PIE5 寄存器的 TMRx 匹配中断允许位 TMRxIE 置 1 来允许该中断。中断优先级使用 IPR1/IPR5 寄存器 中的 TMRxIP 位进行选择。 可以通过 TxCON 寄存器的后分频比控制位 TxOUTPS <3:0> 在 16 个后分频比选项 (从 1:1 至 1:16)中选择 其一。 13.3 Timer2/4/6 输出 TMRx 的未经分频的输出主要用于 CCP 模块,它用作 CCP 模块在 PWM 模式下工作时的时基。要用于特定 CCP 模块的定时器通过 CCPTMRS0 和 CCPTMRS1 寄 存器中的 CxTSEL<1:0> 位进行选择。 用户可以选择使用 Timer2 作为工作于 SPI 模式的 MSSPx 模块的移位时钟源,方法是在 SSPxCON1 寄存 器中设置 SSPM<3:0> = 0011。第 15.0 节 “ 主同步串行 口 (MSSP1 和 MSSP2)模块 ” 中提供了更多信息。 13.4 休眠期间的 Timer2/4/6 操作 在处理器处于休眠模式时, Timer2/4/6 定时器无法工 作。在处理器处于休眠模式时,TMRx 和 PRx 寄存器的 内容将保持不变。 13.5 外设模块禁止 不使用某个外设模块或该外设模块不工作时,可以通过 将 PMD 寄存器中的模块禁止位置 1 来禁止该模块。这可 以将功耗降到绝对最低。PMD 位置 1 会将模块保持在复 位状态,并断开模块的时钟源。 Timer2 (TMR2MD)、 Timer4 (TMR4MD)和 Timer6 (TMR6MD)的模块禁 止位位于 PMD0 寄存器中。更多信息,请参见第 3.0 节 “ 功耗管理模式 ”。 DS41412F_CN 第 176 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 13.6 寄存器定义:Timer2/4/6 控制 寄存器 13-1: TxCON:TIMER2/TIMER4/TIMER6 控制寄存器 U-0 — bit 7 R/W-0 R/W-0 R/W-0 TxOUTPS<3:0> R/W-0 R/W-0 TMRxON R/W-0 R/W-0 TxCKPS<1:0> bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7 bit 6-3 bit 2 bit 1-0 未实现:读为 0 TxOUTPS<3:0>:TimerX 输出后分频比选择位 0000 = 1:1 后分频比 0001 = 1:2 后分频比 0010 = 1:3 后分频比 0011 = 1:4 后分频比 0100 = 1:5 后分频比 0101 = 1:6 后分频比 0110 = 1:7 后分频比 0111 = 1:8 后分频比 1000 = 1:9 后分频比 1001 = 1:10 后分频比 1010 = 1:11 后分频比 1011 = 1:12 后分频比 1100 = 1:13 后分频比 1101 = 1:14 后分频比 1110 = 1:15 后分频比 1111 = 1:16 后分频比 TMRxON:TimerX 使能位 1 = 使能 TimerX 0 = 关闭 TimerX TxCKPS<1:0>:Timer2 型时钟预分频比选择位 00 = 预分频比为 1 01 = 预分频比为 4 1x = 预分频比为 16  2011-2013 Microchip Technology Inc. DS41412F_CN 第 177 页 PIC18(L)F2X/4XK22 表 13-1: 与 TIMER2/4/6 相关的寄存器汇总 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CCPTMRS0 C3TSEL<1:0> — C2TSEL<1:0> — CCPTMRS1 — — — — C5TSEL<1:0> INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP IPR5 — — — — — TMR6IP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE PIE5 — — — — — TMR6IE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF PIR5 — — — — — TMR6IF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD PR2 Timer2 周期寄存器 PR4 Timer4 周期寄存器 PR6 Timer6 周期寄存器 T2CON — T2OUTPS<3:0> TMR2ON T4CON — T4OUTPS<3:0> TMR4ON T6CON — T6OUTPS<3:0> TMR6ON TMR2 Timer2 寄存器 TMR4 Timer4 寄存器 TMR6 Timer6 寄存器 图注: — = 未实现位,读为 0。 Timer2/4/6 不使用阴影位。 C1TSEL<1:0> C4TSEL<1:0> INT0IF RBIF TMR2IP TMR1IP TMR5IP TMR4IP TMR2IE TMR1IE TMR5IE TMR4IE TMR2IF TMR1IF TMR5IF TMR4IF TMR2MD TMR1MD T2CKPS<1:0> T4CKPS<1:0> T6CKPS<1:0> 寄存器 所在页 208 208 116 128 131 124 127 119 123 55 — — — 172 172 172 — — — DS41412F_CN 第 178 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 14.0 捕捉 / 比较 /PWM 模块 捕捉/比较/PWM模块是允许用户计时和控制不同事件, 以及产生脉宽调制 (Pulse-Width Modulation, PWM) 信号的外设。在捕捉模式下,外设可以对事件的持续时 间进行计时。当超过预先确定的时间时,比较模式使用 户触发一个外部事件。 PWM 模式可以产生不同频率和 占空比的脉宽调制信号。 本系列器件中包含 3 个增强型捕捉 / 比较 /PWM 模块 (ECCP1、 ECCP2 和 ECCP3)和 2 个标准捕捉 / 比较 /PWM 模块 (CCP4 和 CCP5)。 所有 CCP/ECCP 模块的捕捉和比较功能都是相同的。 CCP 和 ECCP 模块之间的区别在于脉宽调制 (PWM) 功能。在 CCP 模块中,标准 PWM 功能是相同的。在 ECCP 模块中,增强型 PWM 功能可产生全桥或半桥 PWM 输出。全桥 ECCP 模块具有 4 个可用 I/O 引脚, 而半桥 ECCP 模块只有两个可用 I/O 引脚。ECCP PWM 模块与 CCP PWM 模块保持向后兼容,可配置为标准 PWM 模块。要确定本系列中每款器件提供的 CCP/ ECCP 功能,请参见表 14-1。 表 14-1: PWM 资源 器件名称 PIC18(L)F23K22 PIC18(L)F24K22 PIC18(L)F25K22 PIC18(L)F26K22 PIC18(L)F43K22 PIC18(L)F44K22 PIC18(L)F45K22 PIC18(L)F46K22 ECCP1 增强型 PWM 全桥 增强型 PWM 全桥 ECCP2 增强型 PWM 半桥 增强型 PWM 全桥 注 1: 在具有多个 CCP 模块的器件中,要特别 注意所使用的寄存器名称。模块缩略名之 后 的 数 字 用 于 区 分 不 同 的 模 块。例 如, CCP1CON 和 CCP2CON 分别控制两个完 全不同 CCP 模块的相同工作方面。 2: 在本章中,在所有工作模式下,CCP 模块 泛指 ECCP1、ECCP2、ECCP3、CCP4 和 CCP5。在需要时,寄存器名称、模块信 号、I/O 引脚和位名称可以使用通用标识符 “x” (数字)来识别某个特定模块。 ECCP3 增强型 PWM 半桥 CCP4 标准 PWM CCP5 标准 PWM (特殊事件触发器) 增强型 PWM 半桥 标准 PWM 标准 PWM (特殊事件触发器)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 179 页 PIC18(L)F2X/4XK22 14.1 捕捉模式 本节中介绍的捕捉模式功能对于本器件系列提供的所有 CCP 和 ECCP 模块是相同的。 捕捉模式使用 16 位定时器资源 (Timer1、 Timer3 和 Timer5)。每个 CCP 捕捉功能的定时器资源是独立的, 可使用 CCPTMRS0 和 CCPTMRS1 寄存器进行选择。 当 CCPx 引脚上发生事件时,16 位 CCPRxH:CCPRxL 寄存器对会分别捕捉和存储TMRxH:TMRxL寄存器对的 16 位值。这些事件定义如下,可通过 CCPxCON 寄存 器的 CCPxM<3:0> 位进行配置: • 每个下降沿 • 每个上升沿 • 每 4 个上升沿 • 每 16 个上升沿 进行捕捉时, PIR1、 PIR2 或 PIR4 寄存器的相应中断请 求标志位 CCPxIF 被置 1。该中断标志必须用软件清零。 如果在读取 CCPRxH:CCPRxL 寄存器对中的值之前发生 了另一次捕捉,那么原来的捕捉值会被新的捕捉值覆盖。 图 14-1 给出了捕捉操作的简化框图。 图 14-1: 捕捉模式工作原理框图 CCPx 引脚 将标志位 CCPxIF 置 1 预分频器 (PIR1/2/4 寄存器) ÷ 1, 4, 16 CCPRxH CCPRxL 和 边沿检测 CCPxM<3:0> 系统时钟(FOSC) 捕捉 使能 TMR1/3/5H TMR1/3/5L 14.1.1 CCP 引脚配置 在捕捉模式下,应通过将相关的 TRIS 控制位置 1,将 CCPx 引脚配置为输入。 一些 CCPx 输出在一些引脚上进行复用。表 14-2 列出 了 CCP 输出引脚复用的配置。输出引脚的选择由配置 寄存器 3H (CONFIG3H)中的 CCPxMX 位决定。更 多详细信息,请参见寄存器 24-4。 注: 如果 CCPx 引脚被配置为输出,则写端口 将产生一次捕捉条件。 表 14-2: CCP 引脚复用 CCP 输出 CCP2 CONFIG 3H 控制位 CCP2MX CCP3 图注: * = 默认值 CCP3MX 位值 0 1(*) 0(*) 1 14.1.2 TIMER1 模式资源 为使 CCP 模块使用捕捉特性, 16 位定时器资源必须运 行在定时器模式或同步计数器模式下。在异步计数器模 式下,可能无法进行捕捉操作。 关于配置 16 位定时器的更多信息,请参见第 12.0 节 “ 带门控控制的 Timer1/3/5 模块 ”。 PIC18(L)F2XK22 I/O 引脚 RB3 RC1 RC6 RB5 PIC18(L)F4XK22 I/O 引脚 RB3 RC1 RE0 RB5 14.1.3 软件中断模式 当捕捉模式改变时,可能会产生错误的捕捉中断。用户 应保持 PIE1、 PIE2 或 PIE4 寄存器的 CCPxIE 中断允 许位清零以避免错误中断。此外,用户应在工作模式的 任何改变之后清零PIR1、PIR2或PIR4寄存器的CCPxIF 中断标志位。 注: 在捕捉模式下,16 位定时器资源不能由系 统时钟 (FOSC)提供时钟。为在捕捉模式 下识别 CCPx 引脚上的触发事件,定时器 资源必须由指令时钟 (FOSC/4)或外部时 钟源提供时钟。 DS41412F_CN 第 180 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 14.1.4 CCP 预分频器 通过 CCPxCON 寄存器的 CCPxM<3:0> 位,可以指定 4 种预分频比设置。每当关闭 CCP 模块,或者 CCP 模 块不在捕捉模式下时,预分频计数器就会被清零。任何 复位都会将预分频计数器清零。 从一个捕捉预分频比切换到另一个捕捉预分频比不会清 零预分频器,而且可能产生一次错误中断。为避免此意 外操作,可在改变预分频比之前通过清零 CCPxCON 寄 存器来关闭模块。例 14-1 给出了执行此功能的代码。 例 14-1: 改变捕捉预分频比 #define NEW_CAPT_PS 0x06 ... CCPxCON = 0; CCPxCON = NEW_CAPT_PS; //Capture // Prescale 4th // rising edge // Turn the CCP // Module Off // Turn CCP module // on with new // prescale value 14.1.5 休眠期间的捕捉操作 捕捉模式需要 16 位 TimerX 模块用作时基。有 4 个选项 可用于在捕捉模式下驱动 16 位 TimerX 模块。它可由系 统时钟 (FOSC)或指令时钟 (FOSC/4)驱动,或者由 外部时钟源即辅助振荡器 (SOSC)或 TxCKI 时钟输入 驱动。当 16 位 TimerX 资源由 FOSC 或 FOSC/4 提供时 钟时,TimerX 将不会在休眠期间递增。当器件从休眠状 态唤醒时, TimerX 将从先前状态继续工作。当 16 位 TimerX 资源由外部时钟源 (SOSC 或 TxCKI 引脚)之 一提供时钟时,捕捉模式将在休眠期间继续工作。 表 14-3: 与捕捉相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CCP1CON P1M<1:0> DC1B<1:0> CCP1M<3:0> CCP2CON P2M<1:0> DC2B<1:0> CCP2M<3:0> CCP3CON P3M<1:0> DC3B<1:0> CCP3M<3:0> CCP4CON — — DC4B<1:0> CCP4M<3:0> CCP5CON — — DC5B<1:0> CCP5M<3:0> CCPR1H CCPR1L 捕捉 / 比较 /PWM 寄存器 1 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 1 的低字节 (LSB) CCPR2H CCPR2L CCPR3H CCPR3L CCPR4H CCPR4L CCPR5H CCPR5L CCPTMRS0 C3TSEL<1:0> 捕捉 / 比较 /PWM 寄存器 2 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 2 的低字节 (LSB) 捕捉 / 比较 /PWM 寄存器 3 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 3 的低字节 (LSB) 捕捉 / 比较 /PWM 寄存器 4 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 4 的低字节 (LSB) 捕捉 / 比较 /PWM 寄存器 5 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 5 的低字节 (LSB) — C2TSEL<1:0> — C1TSEL<1:0> CCPTMRS1 — — — — C5TSEL<1:0> C4TSEL<1:0> INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP IPR4 — — — — — CCP5IP CCP4IP CCP3IP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 图注: — = 未实现位,读为 0。捕捉模式不使用阴影位。 注 1: 这些寄存器 / 位在 PIC18(L)F4XK22 器件上可用。 寄存器 所在页 205 205 205 205 205 — — — — — — — — — — 208 208 116 128 129 131 124  2011-2013 Microchip Technology Inc. DS41412F_CN 第 181 页 PIC18(L)F2X/4XK22 表 14-3: 与捕捉相关的寄存器 (续) 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE PIE4 — — — — — CCP5IE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF PIR4 — — — — — CCP5IF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD T1CON TMR1CS<1:0> T1CKPS<1:0> T1SOSCEN T1SYNC T1GCON TMR1GE T1GPOL T1GTM T1GSPM T1GGO/DONE T1GVAL T3CON TMR3CS<1:0> T3CKPS<1:0> T3SOSCEN T3SYNC T3GCON TMR3GE T3GPOL T3GTM T3GSPM T3GGO/DONE T3GVAL T5CON TMR5CS<1:0> T5CKPS<1:0> T5SOSCEN T5SYNC T5GCON TMR5GE T5GPOL T5GTM T5GSPM T5GGO/DONE T5GVAL TMR1H TMR1L 16 位 TMR1 寄存器最高字节的保持寄存器 16 位 TMR1 寄存器的低字节 TMR3H TMR3L TMR5H TMR5L TRISA TRISA7 TRISA6 16 位 TMR3 寄存器最高字节的保持寄存器 16 位 TMR3 寄存器的低字节 16 位 TMR5 寄存器最高字节的保持寄存器 16 位 TMR5 寄存器的低字节 TRISA5 TRISA4 TRISA3 TRISA2 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISC TRISD(1) TRISE TRISC7 TRISD7 WPUE3 TRISC6 TRISD6 — TRISC5 TRISD5 — TRISC4 TRISD4 — TRISC3 TRISD3 — TRISC2 TRISD2 TRISE2(1) 图注: — = 未实现位,读为 0。捕捉模式不使用阴影位。 注 1: 这些寄存器 / 位在 PIC18(L)F4XK22 器件上可用。 Bit 1 Bit 0 TMR3IE CCP2IE CCP4IE CCP3IE TMR2IF TMR1IF TMR3IF CCP2IF CCP4IF CCP3IF TMR2MD TMR1MD CCP2MD CCP1MD T1RD16 TMR1ON T1GSS<1:0> T3RD16 TMR3ON T3GSS<1:0> T5RD16 TMR5ON T5GSS<1:0> TRISA1 TRISB1 TRISC1 TRISD1 TRISE1(1) TRISA0 TRISB0 TRISC0 TRISD0 TRISE0(1) 寄存器 所在页 125 127 119 120 122 55 56 172 173 172 173 172 173 — — — — — — 156 156 156 156 156 表 14-4: 与捕捉相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 CONFIG3H MCLRE — P2BMX T3CMX 图注: — = 未实现位,读为 0。捕捉模式不使用阴影位。 Bit 3 HFOFST Bit 2 CCP3MX Bit 1 PBADEN Bit 0 CCP2MX 寄存器 所在页 360 DS41412F_CN 第 182 页  2011-2013 Microchip Technology Inc. 14.2 比较模式 本节中介绍的比较模式功能对于本器件系列提供的所有 CCP 和 ECCP 模块是相同的。 比较模式使用 16 位 TimerX 资源 (Timer1、 Timer3 和 Timer5)。 CCPRxH:CCPRxL 寄存器对的 16 位值会不 断与 TMRxH:TMRxL 寄存器对的 16 位值进行比较。当 发生匹配时,将发生以下事件之一: • 翻转 CCPx 输出 • 将 CCPx 输出置 1 • 将 CCPx 输出清零 • 产生特殊事件触发信号 • 产生软件中断 引脚的动作由 CCPxCON 寄存器的 CCPxM<3:0> 控制 位的值决定。同时,中断标志位 CCPxIF 置 1。 所有比较模式都能产生中断。 图 14-2 给出了比较操作的简化框图。 图 14-2: 比较模式工作原理框图 CCPxM<3:0> 模式选择 CCPx 引脚 QS R 将 CCPxIF 中断标志位置 1 4 (PIR1/2/4) CCPRxH CCPRxL 输出 逻辑 匹配 比较器 TRIS 输出使能 TMRxH TMRxL 特殊事件触发信号 特殊事件触发功能 • ECCP1、 ECCP2、 ECCP3、 CCP4 和 CCP5: - 复位 TimerX——TMRxH:TMRxL = 0x0000 - TimerX 中断标志 (TMRxIF)不会置 1 其他功能 • CCP5: - 将 ADCON0<1> 和 GO/DONE 位置 1 来启动 ADC 转换 (如果 ADCON<0>, ADON = 1)。 PIC18(L)F2X/4XK22 14.2.1 CCP 引脚配置 用户必须通过将相关的 TRIS 位清零,将 CCPx 引脚配 置为输出。 一些 CCPx 输出在一些引脚上进行复用。表 14-2 列出 了 CCP 输出引脚复用的配置。输出引脚的选择由配置 寄存器 3H (CONFIG3H)中的 CCPxMX 位决定。更 多详细信息,请参见寄存器 24-4。 注: 清零 CCPxCON 寄存器会将 CCPx 比较输 出锁存器强制设为默认的低电平。这不是 端口 I/O 数据锁存器。 14.2.2 TimerX 模式资源 在比较模式下,16 位 TimerX 资源必须运行在定时器模 式或同步计数器模式下。在异步计数器模式下,可能无 法进行比较操作。 关于配置 16 位 TimerX 资源的更多信息,请参见 第 12.0 节 “ 带门控控制的 Timer1/3/5 模块 ”。 注: 在比较模式下, TimerX 不能由系统时钟 (FOSC)提供时钟。为在比较模式下识别 CCPx 引脚上的触发事件,TimerX 必须由指 令时钟(FOSC/4)或外部时钟源提供时钟。 14.2.3 软件中断模式 当选择产生软件中断模式(CCPxM<3:0> = 1010)时, CCPx 模块不会对 CCPx 引脚进行控制(见 CCPxCON 寄存器)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 183 页 PIC18(L)F2X/4XK22 14.2.4 特殊事件触发器 当选择特殊事件触发模式(CCPxM<3:0> = 1011)时, 如果 TMRxH:TMRxL 寄存器与 CCPRxH:CCPRxL 寄存 器发生匹配,所有 CCPx 和 ECCPx 模块会立即: • 将 CCP 中断标志位 CCPxIF 置 1 • 如果使能了 ADC,则 CCP5 会启动 ADC 转换 在下一个 TimerX 时钟上升沿: • TimerX 寄存器对发生复位 ——TMRxH:TMRxL = 0x0000 这种特殊事件触发模式不会: • 对 CCPx 或 ECCPx 引脚进行控制。 • 在 TMRxH:TMRxL 寄存器对复位时将 TMRxIF 中断 位置 1。(TMRxIF 在 TimerX 溢出时置 1。) 如果在发生匹配时,CCPRxH:CCPRxL寄存器的值被修 改,则用户需要注意在下一个时钟上升沿 TimerX 会发 生 自 动 复 位。因 此,在 发 生 这 种 复 位 之 前 修 改 CCPRxH:CCPRxL 寄存器可以使 TimerX 不发生复位而 继续工作,避免意外导致下一个事件被提前或延迟。 特殊事件触发模式使 CCPRxH:CCPRxL 寄存器对可以 有效地为 TimerX 提供一个 16 位的可编程周期寄存器。 14.2.5 休眠期间的比较操作 比较模式能否正常工作取决于系统时钟(FOSC)。由于 FOSC 在休眠模式下关闭,比较模式在休眠模式下将不 能正常工作。 表 14-5: 与比较相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CCP1CON CCP2CON CCP3CON CCP4CON CCP5CON CCPR1H CCPR1L P1M<1:0> P2M<1:0> P3M<1:0> — — — — DC1B<1:0> CCP1M<3:0> DC2B<1:0> CCP2M<3:0> DC3B<1:0> CCP3M<3:0> DC4B<1:0> CCP4M<3:0> DC5B<1:0> CCP5M<3:0> 捕捉 / 比较 /PWM 寄存器 1 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 1 的低字节 (LSB) CCPR2H CCPR2L CCPR3H CCPR3L CCPR4H CCPR4L CCPR5H CCPR5L CCPTMRS0 C3TSEL<1:0> 捕捉 / 比较 /PWM 寄存器 2 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 2 的低字节 (LSB) 捕捉 / 比较 /PWM 寄存器 3 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 3 的低字节 (LSB) 捕捉 / 比较 /PWM 寄存器 4 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 4 的低字节 (LSB) 捕捉 / 比较 /PWM 寄存器 5 的高字节 (MSB) 捕捉 / 比较 /PWM 寄存器 5 的低字节 (LSB) — C2TSEL<1:0> — C1TSEL<1:0> CCPTMRS1 — — — — C5TSEL<1:0> C4TSEL<1:0> INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 图注: — = 未实现位,读为 0。比较模式不使用阴影位。 注 1: 这些寄存器 / 位在 PIC18(L)F4XK22 器件上可用。 寄存器 所在页 205 205 205 205 205 — — — — — — — — — — 208 208 116 DS41412F_CN 第 184 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 14-5: 与比较相关的寄存器 (续) 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP IPR4 — — — — — CCP5IP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE PIE4 — — — — — CCP5IE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF PIR4 — — — — — CCP5IF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD T1CON TMR1CS<1:0> T1CKPS<1:0> T1SOSCEN T1SYNC T1GCON TMR1GE T1GPOL T1GTM T1GSPM T1GGO/DONE T1GVAL T3CON TMR3CS<1:0> T3CKPS<1:0> T3SOSCEN T3SYNC T3GCON TMR3GE T3GPOL T3GTM T3GSPM T3GGO/DONE T3GVAL T5CON TMR5CS<1:0> T5CKPS<1:0> T5SOSCEN T5SYNC T5GCON TMR5GE T5GPOL T5GTM T5GSPM T5GGO/DONE T5GVAL TMR1H TMR1L 16 位 TMR1 寄存器最高字节的保持寄存器 16 位 TMR1 寄存器的低字节 TMR3H TMR3L TMR5H TMR5L TRISA TRISA7 TRISA6 16 位 TMR3 寄存器最高字节的保持寄存器 16 位 TMR3 寄存器的低字节 16 位 TMR5 寄存器最高字节的保持寄存器 16 位 TMR5 寄存器的低字节 TRISA5 TRISA4 TRISA3 TRISA2 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISC TRISD(1) TRISE TRISC7 TRISD7 WPUE3 TRISC6 TRISD6 — TRISC5 TRISD5 — TRISC4 TRISD4 — TRISC3 TRISD3 — TRISC2 TRISD2 TRISE2(1) 图注: — = 未实现位,读为 0。比较模式不使用阴影位。 注 1: 这些寄存器 / 位在 PIC18(L)F4XK22 器件上可用。 Bit 1 Bit 0 TMR2IP TMR1IP TMR3IP CCP2IP CCP4IP CCP3IP TMR2IE TMR1IE TMR3IE CCP2IE CCP4IE CCP3IE TMR2IF TMR1IF TMR3IF CCP2IF CCP4IF CCP3IF TMR2MD TMR1MD CCP2MD CCP1MD T1RD16 TMR1ON T1GSS<1:0> T3RD16 TMR3ON T3GSS<1:0> T5RD16 TMR5ON T5GSS<1:0> TRISA1 TRISB1 TRISC1 TRISD1 TRISE1(1) TRISA0 TRISB0 TRISC0 TRISD0 TRISE0(1) 寄存器 所在页 128 129 131 124 125 127 119 120 122 55 56 172 173 172 173 172 173 — — — — — — 156 156 156 156 156 表 14-6: 与比较相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 CONFIG3H MCLRE — P2BMX T3CMX 图注: — = 未实现位,读为 0。比较模式不使用阴影位。 Bit 3 HFOFST Bit 2 CCP3MX Bit 1 PBADEN Bit 0 CCP2MX 寄存器 所在页 360  2011-2013 Microchip Technology Inc. DS41412F_CN 第 185 页 PIC18(L)F2X/4XK22 14.3 PWM 概述 脉宽调制 (PWM)是一种通过在完全开启和完全关闭 状态之间进行快速切换而为负载供电的方案。 PWM 信 号类似于方波,信号的高电平部分视为开启状态,信号 的低电平部分视为关闭状态。高电平部分 (也称为脉 宽)可以随时间而变,并以步幅为单位进行定义。施加 的步幅数量越多 (这会增大脉宽),为负载提供的电量 就越多。施加的步幅数量降低时 (这会缩短脉宽),提 供的电量就会下降。 PWM 周期定义为一个完整周期的 持续时间,或者开启和关闭时间相加的总时间。 PWM 分辨率定义可以在单个 PWM 周期中出现的最大 步幅数量。分辨率越高,就可以越精确地控制脉宽时 间,从而更精确地控制在负载上的供电量。 占空比这一术语描述开启时间与关闭时间之间以百分比 形式表示的比例,0% 代表完全关闭,100% 代表完全开 启。占空比越低,对应的供电量就越低;占空比越高, 对应的供电量就越高。 图 14-3 给出了 PWM 信号的典型波形图。 14.3.1 标准 PWM 操作 本节介绍的标准 PWM 功能对于 CCP 和 ECCP 模块都 提供,并且功能是相同的。 标准 PWM 模式可以在 CCPx 引脚上产生最高可达 10 位 分辨率的脉宽调制 (PWM)信号。周期、占空比和分 辨率由以下寄存器控制: • PRx 寄存器 • TxCON 寄存器 • CCPRxL 寄存器 • CCPxCON 寄存器 图 14-4 给出了 PWM 操作的简化框图。 注 1: 要使能 CCPx 引脚上的 PWM 输出,必须 清零相应的 TRIS 位。 2: 清零 CCPxCON 寄存器会放弃对 CCPx 引 脚的控制。 图 14-3: CCP PWM 输出信号 周期 脉冲宽度 TMRx = 0 TMRx = PRx TMRx = CCPRxH:CCPxCON<5:4> 图 14-4: 简化的 PWM 框图 占空比寄存器 CCPRxL CCPxCON<5:4> CCPRxH(2)(从) 比较器 TMRx (1) RQ CCPx S TRIS 比较器 PRx 清零定时器, 翻转 CCPx 引脚的电平并 锁存占空比 注 1: 8 位定时器 TMRx 寄存器与 2 位内部系统时钟 (FOSC)或预分频器的2位一起构成10位时基。 2: 在 PWM 模式下, CCPRxH 是只读寄存器。 14.3.2 设置 PWM 操作 当将 CCP 模块配置为标准 PWM 操作时,可采用以下 步骤: 1. 通过将相关的 TRIS 位置 1,禁止 CCPx 引脚输 出驱动器。 2. 通过设置CCPTMRSx 寄存器中的CxTSEL<1:0> 位,选择要用于产生 PWM 的 8 位 TimerX 资源 (Timer2、 Timer4 或 Timer6)。 (1) 3. 在选定TimerX的PRx寄存器中装入PWM周期值。 4. 通过将相应值装入 CCPxCON 寄存器,将 CCP 模块配置为 PWM 模式。 5. 将PWM占空比值装入CCPRxL寄存器和CCPxCON 寄存器的 DCxB<1:0> 位。 DS41412F_CN 第 186 页  2011-2013 Microchip Technology Inc. 6. 配置并启动 8 位 TimerX 资源: • 清零 PIR2 或 PIR4 寄存器的 TMRxIF 中断标 志位。请参见下面的 “ 注 1”。 • 用定时器预分频值配置 TxCON 寄存器的 TxCKPS 位。 • 通过将 TxCON 寄存器的 TMRxON 位置 1 使 能定时器。 7. 使能 PWM 输出引脚: • 等待直到定时器溢出,PIR2 或 PIR4 寄存器的 TMRxIF 位置 1。请参见下面的 “ 注 1”。 • 通过将相关的 TRIS 位清零,使能 CCPx 引脚 输出驱动器。 注 1: 为在第一个 PWM 输出时发送完整的占空 比和周期,设置过程必须包含上述步骤。 如果在第一个输出时以完整的 PWM 信号 开始并非至关重要,那么可以忽略步骤 6。 14.3.3 PWM 定时器资源 PWM 标准模式使用 8 位 Timer2/4/6 定时器资源之一来 指定 PWM 周期。 配置CCPTMRS0或CCPTMRS1寄存器中的CxTSEL<1:0> 位可选择使用 Timer2/4/6 中的哪一个定时器。 14.3.4 PWM 周期 PWM 周期可通过 8 位 TimerX 的 PRx 寄存器来指定。 PWM 周期可由公式 14-1 计算。 公式 14-1: PWM 周期 PWPMWM周÷期‹ý⁄ = [(PRx) + 1] • 4 • TOSC • (TMRx 预分频值 ) 注 1: TOSC = 1/FOSC 当 TMRx 中的值与 PRx 中的值相等时,在下一个递增 周期将发生以下 3 个事件: • TMRx 被清零 • CCPx 引脚被置 1。(例外情况:如果 PWM 占空 比 = 0%,引脚将不会被置 1。) • PWM 占空比从 CCPRxL 锁存到 CCPRxH 注: 在确定PWM频率时不会用到定时器后分频 比 (见第 13.0 节 “Timer2/4/6 模块 ”)。 PIC18(L)F2X/4XK22 14.3.5 PWM 占空比 通过将 10 位值写入多个寄存器来指定 PWM 占空比: CCPRxL 寄存器和 CCPxCON 寄存器的 DCxB<1:0> 位。 CCPRxL 包含高 8 位,而 CCPxCON 寄存器的 DCxB<1:0> 位包含低2位。可以在任意时刻写入CCPRxL和CCPxCON 寄存器的 DCxB<1:0> 位。在周期结束(即,PRx 和 TMRx 寄存器发生匹配)之前,占空比值不会被锁存到 CCPRxH 中。当使用 PWM 时, CCPRxH 寄存器是只读的。 公式 14-2 用于计算 PWM 脉冲宽度。 公式 14-3 用于计算 PWM 占空比。 公式 14-2: 脉冲宽度 脉冲宽度 = (CCPRxL:CCPxCON<5:4>) • TOSC ●  (TMRx 预分频值 ) 公式 14-3: 占空比 占ƒ‹þ空«þ比« = (---C----C----P----R---x---L4---:-(-C-P---C-R---P-x---x--+-C----O1----)N----<----5---:--4--->-----) CCPRxH 寄存器和一个 2 位的内部锁存器用于给 PWM 占 空 比提 供 双 重 缓冲。这 种 双 重 缓冲 结 构 对 避免 在 PWM 操作中产生毛刺非常重要。 8 位定时器 TMRx 寄存器与 2 位内部系统时钟 (FOSC) 或预分频器的 2 位一起构成 10 位时基。如果 TimerX 预 分频比设置为 1:1,则使用系统时钟。 当 10 位时基与 CCPRxH 和 2 位锁存值匹配时,CCPx 引脚被清零 (见图 14-4)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 187 页 PIC18(L)F2X/4XK22 14.3.6 PWM 分辨率 分辨率决定给定周期的可用占空比数。例如,10 位分辨 率将可得到 1024 个不连续的占空比,而 8 位分辨率将可 得到 256 个不连续的占空比。 当 PRx 为 255 时, PWM 最大分辨率为 10 位。分辨率 是 PRx 寄存器值的函数,如公式 14-4 所示。 公式 14-4: PWM 分辨率 分lut辨io率n = l--o---g----[--4--l--(o--P-g---R-(--2-x---)-+------1---)---] 位Œª 注: 如果脉冲宽度值比周期长,则指定的 PWM 引脚将保持不变。 表 14-7: PWM 频率和分辨率示例 (FOSC = 32 MHz) PWM 频率 1.95 kHz 7.81 kHz 31.25 kHz 定时器预分频值(1、4 和 16) PRx 值 最大分辨率 (位) 16 0xFF 10 4 0xFF 10 1 0xFF 10 125 kHz 1 0x3F 8 250 kHz 1 0x1F 7 333.3 kHz 1 0x17 6.6 表 14-8: PWM 频率和分辨率示例 (FOSC = 20 MHz) PWM 频率 1.22 kHz 4.88 kHz 19.53 kHz 定时器预分频值(1、4 和 16) PRx 值 最大分辨率 (位) 16 0xFF 10 4 0xFF 10 1 0xFF 10 78.12 kHz 1 0x3F 8 156.3 kHz 1 0x1F 7 208.3 kHz 1 0x17 6.6 表 14-9: PWM 频率和分辨率示例 (FOSC = 8 MHz) PWM 频率 1.22 kHz 4.90 kHz 19.61 kHz 定时器预分频值(1、4 和 16) PRx 值 最大分辨率 (位) 16 0x65 8 4 0x65 8 1 0x65 8 76.92 kHz 1 0x19 6 153.85 kHz 1 0x0C 5 200.0 kHz 1 0x09 5 14.3.7 休眠模式下的操作 在休眠模式下, TMRx 寄存器将不会递增,模块状态也 不会改变。如果 CCPx 引脚正在驱动一个值,则会继续 驱动该值。当器件被唤醒时, TMRx 将从先前状态继续 工作。 14.3.9 复位的影响 任何复位都将强制所有端口为输入模式,并强制CCP寄 存器为其复位状态。 14.3.8 改变系统时钟频率 PWM 频率是由系统时钟频率得到的。系统时钟频率的 任何改变将导致 PWM 频率的改变。更多详细信息,请 参见第 2.0 节 “ 振荡器模块(带故障保护时钟监视器)”。 DS41412F_CN 第 188 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 14-10: 与标准 PWM 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 CCP1CON P1M<1:0> DC1B<1:0> CCP1M<3:0> CCP2CON P2M<1:0> DC2B<1:0> CCP2M<3:0> CCP3CON P3M<1:0> DC3B<1:0> CCP3M<3:0> CCP4CON — — DC4B<1:0> CCP4M<3:0> CCP5CON — — DC5B<1:0> CCP5M<3:0> CCPTMRS0 C3TSEL<1:0> — C2TSEL<1:0> — C1TSEL<1:0> CCPTMRS1 — — — — C5TSEL<1:0> C4TSEL<1:0> INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP IPR4 — — — — — CCP5IP CCP4IP CCP3IP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IE PIE4 — — — — — CCP5IE CCP4IE CCP3IE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IF PIR4 — — — — — CCP5IF CCP4IF CCP3IF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD CCP2MD CCP1MD PR2 PR4 PR6 T2CON — Timer2 周期寄存器 Timer4 周期寄存器 Timer6 周期寄存器 T2OUTPS<3:0> TMR2ON T2CKPS<1:0> T4CON — T4OUTPS<3:0> TMR4ON T4CKPS<1:0> T6CON — T6OUTPS<3:0> TMR6ON T6CKPS<1:0> TMR2 Timer2 寄存器 TMR4 Timer4 寄存器 TMR6 Timer6 寄存器 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 TRISC TRISD(1) TRISE TRISC7 TRISD7 WPUE3 TRISC6 TRISD6 — TRISC5 TRISD5 — TRISC4 TRISD4 — TRISC3 TRISD3 — TRISC2 TRISD2 TRISE2(1) TRISC1 TRISD1 TRISE1(1) TRISC0 TRISD0 TRISE0(1) 图注: — = 未实现位,读为 0。 PWM 模式不使用阴影位。 注 1: 这些寄存器 / 位在 PIC18(L)F4XK22 器件上可用。 寄存器 所在页 205 205 205 205 205 208 208 116 128 129 131 124 125 127 119 120 122 55 56 — — — 172 172 172 — — — 156 156 156 156 表 14-11: 与标准 PWM 相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 CONFIG3H MCLRE — P2BMX T3CMX HFOFST 图注: — = 未实现位,读为 0。标准 PWM 模式不使用阴影位。 Bit 2 CCP3MX Bit 1 PBADEN Bit 0 CCP2MX 寄存器 所在页 360  2011-2013 Microchip Technology Inc. DS41412F_CN 第 189 页 PIC18(L)F2X/4XK22 14.4 PWM (增强型模式) 本节介绍的增强型 PWM 功能对于 CCP 模块 ECCP1、 ECCP2 和 ECCP3 提供,并且本节还会说明模块之间的 差异。 增强型 PWM 模式可以在最多 4 个不同的输出引脚上产 生脉宽调制 (PWM)信号,最高可达 10 位分辨率。周 期、占空比和分辨率由以下寄存器控制: • PRx 寄存器 • TxCON 寄存器 • CCPRxL 寄存器 • CCPxCON 寄存器 ECCP 模块还另外具有以下 PWM 寄存器,这些寄存器 控制自动关闭、自动重启、死区延时和 PWM 转向模式: • ECCPxAS 寄存器 • PSTRxCON 寄存器 • PWMxCON 寄存器 增强型 PWM 模块可以产生以下 5 种 PWM 输出模式: • 单 PWM • 半桥 PWM • 全桥 PWM,正向模式 • 全桥 PWM,反向模式 • 带 PWM 转向模式的单 PWM 要选择增强型 PWM 输出模式,必须适当配置 CCPxCON 寄存器的 PxM<1:0> 位。 PWM 输出与 I/O 引脚复用,指定为 PxA、PxB、PxC 和 PxD。 PWM 引脚的极性是可配置的,通过适当设置 CCPxCON 寄存器中的 CCPxM 位进行选择。 图 14-5 给出了增强型 PWM 模块的简化框图的示例。 表 14-12 列出了各种增强型 PWM 模式的引脚分配。 注 1: 要使能 CCPx 引脚上的 PWM 输出,必须 清零相应的 TRIS 位。 2: 清零 CCPxCON 寄存器会放弃对 CCPx 引 脚的控制。 3: 增强型 PWM 模式下没有使用的任何引脚 均具有备用引脚功能 (如适用)。 4: 为防止在第一次使能 PWM 时产生不完整 的波形,ECCP 模块在产生 PWM 信号前 会等待,直到新的 PWM 周期开始。 图 14-5: 增强型 PWM 模式的简化框图示例 占空比寄存器 CCPRxL DCxB<1:0> PxM<1:0> CCPRxH(从) 比较器 R Q TMRx (1) S 比较器 PRx 清零定时器, 翻转 PWM 引脚的电平并 锁存占空比 CCPxM<3:0> 2 4 CCPx/PxA PxB 输出 控制器 PxC PxD PWMxCON TRISx TRISx TRISx TRISx CCPx/PxA PxB PxC(2) PxD(2) 注 1: 8 位定时器 TMRx 寄存器与 2 位内部 Q 时钟或预分频器的 2 位一起构成 10 位时基。 2: PxC 和 PxD 在半桥 ECCP 模块上不可用。 DS41412F_CN 第 190 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 14-12: 各种 PWM 增强型模式的引脚分配示例 ECCP 模式 PxM<1:0> CCPx/PxA 单 00 是 (1) 半桥 10 是 全桥,正向 01 是 全桥,反向 11 是 注 1: PWM 转向支持在单 PWM 模式下产生多个输出。 PxB 是 (1) 是 是 是 PxC 是 (1) 否 是 是 图 14-6: PWM (增强型模式)输出关系示例 (高电平有效状态) PxM<1:0> 信号 0 脉冲 宽度 周期 00 (单输出) 10 (半桥) PxA 调制 PxA 调制 PxB 调制 PxA 有效 延时 (1) 延时 (1) 01 (全桥,正向) PxB 无效 PxC 无效 PxD 调制 PxA 无效 11 (全桥,反向) PxB 调制 PxC 有效 PxD 无效 关系: • • • 注 周期 = 4 * TOSC * (PRx + 1) * (TMRx 预分频值 ) 脉冲宽度 = TOSC * (CCPRxL<7:0>:CCPxCON<5:4>) * (TMRx 预分频值 ) 延时 = 4 * TOSC * (PWMxCON<6:0>) 1: 使用 PWMxCON 寄存器对死区延时编程 (第 14.4.5 节 “ 可编程死区延时模式 ”)。 PxD 是 (1) 否 是 是 PRx+1  2011-2013 Microchip Technology Inc. DS41412F_CN 第 191 页 PIC18(L)F2X/4XK22 图 14-7: 增强型 PWM 输出关系示例 (低电平有效状态) PxM<1:0> 信号 0 脉冲 宽度 周期 00 (单输出) PxA 调制 10 (半桥) PxA 调制 PxB 调制 延时 (1) 延时 (1) PxA 有效 01 (全桥,正向) PxB 无效 PxC 无效 PxD 调制 PxA 无效 11 (全桥,反向) PxB 调制 PxC 有效 PxD 无效 关系: • • • 注 周期 = 4 * TOSC * (PRx + 1) * (TMRx 预分频值 ) 脉冲宽度 = TOSC * (CCPRxL<7:0>:CCPxCON<5:4>) * (TMRx 预分频值 ) 延时 = 4 * TOSC * (PWMxCON<6:0>) 1: 使用 PWMxCON 寄存器对死区延时编程 (第 14.4.5 节 “ 可编程死区延时模式 ”)。 PRx+1 DS41412F_CN 第 192 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 14.4.1 半桥模式 在半桥模式下,有两个引脚用作输出以驱动推挽式负 载。CCPx/PxA 引脚输出 PWM 输出信号,而 PxB 引脚 输出互补的 PWM 输出信号 (见图 14-9)。这种模式可 用于半桥应用 (如图 14-9 所示),或者用于全桥应用, 在全桥应用中使用两个 PWM 信号调制 4 个功率开关。 在半桥模式下,可编程死区延时可用来防止半桥功率器 件中流过直通(Shoot-through)电流。PWMxCON 寄存 器的 PDC<6:0> 位的值在输出被驱动为有效之前设置指 令周期数。如果这个值比占空比大,则在整个周期中相 应的输出保持为无效。关于死区延时操作的更多详细信 息,请参见第 14.4.5 节 “ 可编程死区延时模式 ”。 由于 PxA 和 PxB 输出与端口数据锁存器是复用的,相关 的 TRIS 位必须清零,从而将 PxA 和 PxB 配置为输出。 图 14-8: 半桥 PWM 输出示例 周期 周期 PxA(2) 脉冲宽度 td PxB(2) td (1) (1) (1) td = 死区延时 注 1: 此时 TMRx 寄存器和 PRx 寄存器的值相等。 2: 图中输出信号为高电平有效。 图 14-9: 半桥应用示例 标准半桥电路(“ 推挽式 ”) PxA FET 驱动器 FET 驱动器 PxB + - 负载 + - 驱动全桥电路的半桥输出 FET 驱动器 PxA FET 驱动器 PxB V+ 负载 FET 驱动器 FET 驱动器  2011-2013 Microchip Technology Inc. DS41412F_CN 第 193 页 PIC18(L)F2X/4XK22 14.4.2 全桥模式 在全桥模式下,所有 4 个引脚都用作输出。全桥应用的 示例如图 14-10 所示。 在正向模式下,引脚 CCPx/PxA 被驱动为有效状态,引 脚 PxD 被调制,而 PxB 和 PxC 将被驱动为无效状态, 如图 14-11 所示。 在反向模式下, PxC 被驱动为有效状态,引脚 PxB 被调 制,而PxA和PxD将被驱动为无效状态,如图14-11所示。 PxA、 PxB、 PxC 和 PxD 输出与端口数据锁存器复用。 相关的 TRIS 位必须清零,从而将 PxA、 PxB、 PxC 和 PxD 引脚配置为输出。 图 14-10: 全桥应用示例 FET QA 驱动器 PxA PxB FET 驱动器 PxC QB PxD V+ QC FET 驱动器 负载 V- FET 驱动器 QD DS41412F_CN 第 194 页  2011-2013 Microchip Technology Inc. 图 14-11: 正向模式 PxA(2) PxB(2) PxC(2) 全桥 PWM 输出示例 周期 脉冲宽度 PxD(2) (1) 反向模式 PxA(2) 脉冲宽度 周期 PxB(2) PxC(2) PxD(2) (1) 注 1: 此时 TMRx 寄存器和 PRx 寄存器的值相等。 2: 图中输出信号为高电平有效。 PIC18(L)F2X/4XK22 (1) (1)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 195 页 PIC18(L)F2X/4XK22 14.4.2.1 全桥模式下的方向改变 在全桥模式下,CCPxCON 寄存器中的 PxM1 位允许用 户控制正 / 反方向。当应用固件改变这个方向控制位时, 模块将在下一个 PWM 周期改用新的方向。 通过改变 CCPxCON 寄存器的 PxM1 位,可以用软件改 变方向。以下序列在当前 PWM 周期结束前的 4 个定时 器周期时发生: • 调制输出 (PxB 和 PxD)被置于无效状态。 • 相关的未调制输出 (PxA 和 PxC)被切换到以相 反的方向驱动。 • PWM 调制在下一个周期开始继续。 关于该序列的说明,请参见图 14-12。 图 14-12: 信号 PWM 方向改变的示例 周期 (1) 全桥模式不提供死区延时。因为一次只有一个输出被调 制,所以一般不需要死区延时。有一种情况需要死区延 时。这一情况发生在以下两个条件同时满足时: 1. 当输出的占空比达到或者接近 100%,PWM 输出 方向改变。 2. 功率开关(包括功率器件和驱动电路)的关断时 间比导通时间要长。 在图 14-13 所示的示例中,在占空比接近 100% 时, PWM 方向从正向改变到反向。在这个示例中,在时间 t1,输出 PxA 和 PxD 变为无效,而输出 PxC 变为有 效。因为功率器件的关断时间比导通时间要长,在 “t” 时间内,功率器件 QC 和 QD 中可能流过直通电流(见 图 14-10)。当 PWM 方向从反向改变到正向时,功率器 件 QA 和 QB 也将出现相同的现象。 如果应用中需要在高占空比时改变 PWM 方向,避免直 通电流可采用以下两种方法: 1. 在改变方向之前的一个 PWM 周期降低 PWM 占 空比。 2. 使用开关驱动电路,使开关的关断时间比导通时 间短。 也可能存在其他避免直通电流的方案。 周期 PxA(高电平有效) PxB(高电平有效) PxC(高电平有效) PxD(高电平有效) 脉冲宽度 (2) 脉冲宽度 注 1: 可在 PWM 周期的任意时刻,写 CCPxCON 寄存器的方向位 PxM1。 2: 当改变方向时, PxA 和 PxC 信号在当前 PWM 周期结束之前切换。此时被调制的 PxB 和 PxD 信号是无效 的。该时间长度为 (TimerX 预分频比 )/FOSC,其中 TimerX 是 Timer2、 Timer4 或 Timer6。 DS41412F_CN 第 196 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 14-13: 在占空比接近 100% 时改变 PWM 方向的示例 正向周期 t1 反向周期 PxA PxB PxC PxD PW 外部开关 C 外部开关 D 潜在的 直通电流 PW TON TOFF T = TOFF – TON 注 1: 图中所有信号均为高电平有效。 2: TON 是功率开关 QC 及其驱动电路的导通延时。 3: TOFF 是功率开关 QD 及其驱动电路的关断延时。 14.4.3 增强型 PWM 自动关闭模式 PWM模式支持自动关闭模式,当外部关闭事件发生时将 禁止 PWM 输出。自动关闭模式将 PWM 输出引脚置于 预先确定的状态。该模式用于防止 PWM 破坏应用。 通过使用 ECCPxAS 寄存器的 CCPxAS<2:0> 位来选择 自动关闭源。关闭事件由以下条件产生: • INT 引脚上的逻辑 0 • 比较器 Cx (async_CxOUT) • 用固件将 CCPxASE 位置 1 关闭条件由 ECCPxAS 寄存器的 CCPxASE(自动关闭 事件状态)位指示。如果该位为 0, PWM 引脚正常工 作。如果该位为 1, PWM 输出处于关闭状态。 当关闭事件发生时,会发生以下两件事: CCPxASE 位被设置为 1。CCPxASE 将保持置 1 直到由 固件清零或发生自动重启(见第 14.4.4 节 “ 自动重启模 式 ”)。 使能的 PWM 引脚被异步置为关闭状态。PWM 输出引脚 被分组为 [PxA/PxC] 和 [PxB/PxD] 对。每对引脚的状态 由 ECCPxAS 寄存器的 PSSxAC<1:0> 和 PSSxBD<1:0> 位决定。每对引脚可以设置为以下 3 种状态之一: • 驱动逻辑 1 • 驱动逻辑 0 • 三态 (高阻态) 注 1: 自动关闭条件是基于电平的信号,而不是 基于边沿的信号。只要电平存在,自动关 闭就将持续。 2: 当 自 动 关 闭 条 件 持 续 时,禁 止 写 CCPxASE 位。 3: 一旦自动关闭条件被移除并且发生 PWM 重启 (通过固件或自动重启), PWM 信 号将总是在下一个 PWM 周期开始重启。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 197 页 PIC18(L)F2X/4XK22 图 14-14: PWM 自动关闭,可通过固件重启 (PXRSEN = 0) 定时器 溢出 缺少脉冲 (自动关闭) 定时器 溢出 定时器 溢出 缺少脉冲 (CCPxASE 不清零) 定时器 溢出 定时器 溢出 PWM 活动 关闭事件 PWM 周期 PWM 周期开始 CCPxASE 位 关闭 事件发生 关闭 事件清除 PWM 恢复工作 CCPxASE 由固件清零 14.4.4 自动重启模式 一旦自动关闭条件被移除,增强型 PWM 可被配置为自 动重启 PWM 信号。通过将 PWMxCON 寄存器中的 PxRSEN 位置 1 使能自动重启。 如 果 使 能 了 自 动 重 启,只 要 自 动 关 闭 条 件 有 效, CCPxASE 位将保持置 1。当自动关闭条件被移除时, CCPxASE 位将由硬件清零并继续正常工作。 图 14-15: PWM 自动关闭,可自动重启 (PXRSEN = 1) 定时器 溢出 缺少脉冲 (自动关闭) 定时器 溢出 定时器 溢出 缺少脉冲 (CCPxASE 不清零) 定时器 溢出 定时器 溢出 PWM 活动 关闭事件 PWM 周期 PWM 周期开始 CCPxASE 位 关闭 事件发生 关闭 事件清除 PWM 恢复工作 CCPxASE 由硬件清零 DS41412F_CN 第 198 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 14.4.5 可编程死区延时模式 在所有功率开关都以 PWM 频率调制的半桥应用中,功 率开关关断通常比导通需要更多的时间。如果上下两个 功率开关同时开关 (一个导通,另一个关断),那么在 一段很短的时间里,两个开关可能同时导通,直到其中 一个开关完全关断为止。在这短暂的时间中,两个功率 开关中可能流过较高的电流 (直通电流),使得该桥式 供电电路短路。为避免开关过程中可能会出现的破坏性 直通电流,通常需要延迟功率开关的导通,保证在另一 个开关完全关断之后,再导通相应的功率开关。 在半桥模式下,可采用数字可编程死区延时来避免出现 损坏逆变桥功率开关的直通电流。在信号从无效状态切 换到有效状态时增加延时。请参见图 14-16。相关的 PWMxCON 寄存器 (寄存器 14-6)的低 7 位以单片机 指令周期 (TCY 或 4 TOSC)为单位设置延时。 图 14-16: 半桥 PWM 输出示例 周期 周期 PxA(2) 脉冲宽度 td PxB(2) td (1) (1) (1) td = 死区延时 注 1: 此时 TMRx 寄存器和 PRx 寄存器的值相等。 2: 图中输出信号为高电平有效。 图 14-17: 半桥应用示例 标准半桥电路(“ 推挽式 ”) PxA FET 驱动器 FET 驱动器 PxB V+ + V 负载 + V - V-  2011-2013 Microchip Technology Inc. DS41412F_CN 第 199 页 PIC18(L)F2X/4XK22 14.4.6 PWM 转向模式 在单输出模式下,PWM 转向允许任何 PWM 引脚为调制 信号。此外,多个引脚上可以同时使用同一 PWM 信号。 一旦选择了单输出模式(CCPxCON寄存器的CCPxM<3:2> = 11 且 PxM<1:0> = 00),通过将 PSTRxCON 寄存器的 相应转向使能位 (STRxA、 STRxB、 STRxC 和 / 或 STRxD)置 1,用户固件可将同一 PWM 信号加到 1、 2、 3 或 4 个输出引脚,如表 14-13 中所示。 注: 必须将相关的 TRIS 位设置为输出(0)以 使能引脚输出驱动器,从而在引脚上看到 PWM 信号。 在 PWM 转 向 模 式 有 效 时, CCPxCON 寄 存器的 CCPxM<1:0> 位将为 PxD、 PxC、 PxB 和 PxA 引脚选 择 PWM 输出极性。 PWM 自动关闭操作也适用于 PWM 转向模式,如 第 14.4.3 节 “ 增强型 PWM 自动关闭模式 ” 中所述。自 动关闭事件只对使能 PWM 输出的引脚有影响。 图 14-18: STRxA PxA 信号 CCPxM1 端口数据 STRxB 转向简化框图 PxA 引脚 1 0 TRIS CCPxM0 端口数据 STRxC 1 PxB 引脚 0 TRIS CCPxM1 端口数据 STRxD 1 PxC 引脚 0 TRIS CCPxM0 1 PxD 引脚 端口数据 0 TRIS 注 1: 当 CCPxCON 寄存器位 PxM<1:0> = 00 且 CCPxM<3:2> = 11 时,端口输出如图所示配置。 2: 单 PWM 输出需要将至少一个 STRx 位置 1。 14.4.6.1 转向同步 当转向事件发生时,PSTRxCON 寄存器的 STRxSYNC 位向用户提供两种选择。当 STRxSYNC 位为 0 时,转 向事件将发生在写 PSTRxCON 寄存器指令结束时。在 这种情况下,PxA、PxB、PxC 和 PxD 引脚的输出信号 可能是一个不完整的 PWM 波形。用户固件需要立即从 引脚移除 PWM 信号时,该操作非常有用。 当 STRxSYNC 位为 1 时,在下一个 PWM 周期开始将 发生有效的转向更新。此时,转向开 / 关 PWM 输出将 总是产生一个完整的 PWM 波形。 图 14-19 和 14-20 给出了根据STRxSYNC设置的PWM 转向时序图。 DS41412F_CN 第 200 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 14.4.7 启动注意事项 当使用任何 PWM 模式时,应用硬件必须在 PWM 输出 引脚上外接适当的上拉和 / 或下拉电阻。 通过 CCPxCON 寄存器的 CCPxM<1:0> 位,用户可以 为每一对 PWM 输出引脚 (PxA/PxC 和 PxB/PxD)选 择 PWM 输出信号是高电平有效还是低电平有效。PWM 输出极性必须在使能 PWM 引脚输出驱动器之前选择。 由于可能导致应用电路损坏,因此不建议在使能 PWM 引脚输出驱动器的同时改变极性配置。 当 PWM 模块初始化时,PxA、PxB、PxC 和 PxD 输出 锁存器可能不在正确的状态。这样在使能增强型 PWM 模式的同时使能 PWM 引脚输出驱动器,可能损坏应用 电路。应首先将增强型 PWM 模式配置为正确的输出模 式并经过一个完整的 PWM 周期之后,再使能 PWM 引 脚输出驱动器。当第二个 PWM 周期开始时, PIR1、 PIR2 或 PIR5 寄存器的 TMRxIF 位置 1 指示一个完整的 PWM 周期结束了。 注: 当单片机退出复位状态时,所有 I/O 引脚呈 高阻态。外部电路必须保持功率开关器件 处于截止状态,直到单片机将 I/O 引脚驱动 为适当的信号电平,或者激活 PWM 输出 为止。 图 14-19: 指令结束时发生的转向事件的示例 (STRxSYNC = 0) PWM PWM 周期 STRx P1 端口数据 P1n = PWM 端口数据 图 14-20: 指令开始时发生的转向事件的示例 (STRxSYNC = 1) PWM STRx P1 端口数据 P1n = PWM 端口数据  2011-2013 Microchip Technology Inc. DS41412F_CN 第 201 页 PIC18(L)F2X/4XK22 14.4.8 使用 ECCP1 和 TIMER2 实现 ECCP PWM 操作的设置步骤 若要将 ECCP1 模块配置为使用 Timer2 的 PWM 操作, 应执行以下步骤: 1. 配置要使用的 PWM 引脚(P1A、P1B、P1C 和 P1D): • 通过将相应的 TRIS 位置 1,将 PWM 输出配置 为输入。这可避免在设置期间产生错误输 出。 • 为每个要使用的 PWM输出设置 PSTR1CON 位。 2. 通过配置 CCPTMR0 寄存器中的位 C1TSEL<1:0> = 00,选择 Timer2 作为周期定时 器。 3. 通过装载 PR2 寄存器,设置 PWM 周期。 4. 将自动关断配置为OFF或使用ECCP1AS 寄存器 中的 CCP1AS<2:0> 位选择关断源。 5. 按需要配置自动关断源: • 配置要使用每个比较器。 • 将比较器输入配置为模拟输入。 • 配置 FLT0 输入引脚并清零 ANSB0。 6. 强制关断条件 (包括 OFF): • 使用 ECCP1AS 寄存器中的 PSS1AC<1:0> 和 PSS1BD<1:0> 位设置默认关断驱动状态,来 配置安全起始输出电平。 • 清零 PWM1CON 寄存器中的 P1RSEN 位。 • 设置 ECCP1AS 寄存器中 CCP1AS 位。 7. 通过给 CCP1CON 寄存器装载相应的值将 ECCP1 模块配置为所需的 PWM 模式: • 通过P1M<1:0>位选择一种可用的输出配置和 方向。 • 通过CCP1M<3:0>位选择PWM输出信号的极 性。 8. 设置 10 位 PWM 占空比: • 装载 CCPR1L 寄存器的 8 个最高有效位。 • 装载CCP1CON寄存器DC<1:0>位的低两位。 9. 对 于 半 桥 输 出 模 式,通 过 将 相 应 的 值 装 入 PWM1CON 寄存器的 P1DC<6:0> 位设置死区延 时。 10. 配置和启动 TMR2: • 通过装载 T2CON 寄存器的 T2CKPS 位设置 TMR2 预分频值。 • 通过将 TMR2ON 位置 1 启动 Timer2。 11. 通过清零相应的 TRIS 位使能 ECCP1/P1A、 P1B、 P1C 和 / 或 P1D 引脚输出。 12. 启动 PWM: • 若要使用关断自动重启,则将 PWM1CON 寄 存器的 P1RSEN 位置 1。 • 若不使用关断自动重启,则将 ECCP1AS 寄 存器中的 CCP1ASE 位清零。 DS41412F_CN 第 202 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 14-13: 与增强型 PWM 相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ECCP1AS CCP1ASE CCP1AS<2:0> PSS1AC<1:0> PSS1BD<1:0> CCP1CON P1M<1:0> DC1B<1:0> CCP1M<3:0> ECCP2AS CCP2ASE CCP2AS<2:0> PSS2AC<1:0> PSS2BD<1:0> CCP2CON P2M<1:0> DC2B<1:0> CCP2M<3:0> ECCP3AS CCP3ASE CCP3AS<2:0> PSS3AC<1:0> PSS3BD<1:0> CCP3CON P3M<1:0> DC3B<1:0> CCP3M<3:0> CCPTMRS0 C3TSEL<1:0> — C2TSEL<1:0> — C1TSEL<1:0> INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP IPR4 — — — — — CCP5IP CCP4IP CCP3IP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IE PIE4 — — — — — CCP5IE CCP4IE CCP3IE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IF PIR4 — — — — — CCP5IF CCP4IF CCP3IF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD CCP2MD CCP1MD PR2 Timer2 周期寄存器 PR4 Timer4 周期寄存器 PR6 Timer6 周期寄存器 PSTR1CON — — — STR1SYNC STR1D STR1C STR1B STR1A PSTR2CON — — — STR2SYNC STR2D STR2C STR2B STR2A PSTR3CON — — — STR3SYNC STR3D STR3C STR3B STR3A PWM1CON P1RSEN P1DC<6:0> PWM2CON P2RSEN P2DC<6:0> PWM3CON P3RSEN P3DC<6:0> T2CON — T2OUTPS<3:0> TMR2ON T2CKPS<1:0> T4CON — T4OUTPS<3:0> TMR4ON T4CKPS<1:0> T6CON — T6OUTPS<3:0> TMR6ON T6CKPS<1:0> TMR2 TMR4 TMR6 TRISA TRISA7 TRISA6 TRISA5 Timer2 寄存器 Timer4 寄存器 Timer6 寄存器 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 TRISC TRISD(1) TRISE TRISC7 TRISD7 WPUE3 TRISC6 TRISD6 — TRISC5 TRISD5 — TRISC4 TRISD4 — TRISC3 TRISD3 — TRISC2 TRISD2 TRISE2(1) TRISC1 TRISD1 TRISE1(1) TRISC0 TRISD0 TRISE0(1) 图注: — = 未实现位,读为 0。增强型 PWM 模式不使用阴影位。 注 1: 这些寄存器 / 位在 PIC18(L)F4XK22 器件上可用。 寄存器 所在页 209 205 209 205 209 205 208 116 128 129 131 124 125 127 119 120 122 55 56 — — — 210 210 210 210 210 210 172 172 172 — — — 156 156 156 156 156  2011-2013 Microchip Technology Inc. DS41412F_CN 第 203 页 PIC18(L)F2X/4XK22 表 14-14: 与增强型 PWM 相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 CONFIG3H MCLRE — P2BMX T3CMX HFOFST 图注: — = 未实现位,读为 0。增强型 PWM 模式不使用阴影位。 Bit 2 CCP3MX Bit 1 PBADEN Bit 0 CCP2MX 寄存器 所在页 360 DS41412F_CN 第 204 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 14.5 寄存器定义:ECCP 控制 寄存器 14-1: CCPxCON:标准 CCPx 控制寄存器 U-0 — bit 7 U-0 R/W-0 R/W-0 R/W-0 — DCxB<1:0> R/W-0 R/W-0 CCPxM<3:0> R/W-0 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-6 bit 5-4 bit 3-0 未使用 DCxB<1:0>:PWM 占空比最低有效位 捕捉模式: 未使用 比较模式: 未使用 PWM 模式: 这两位是 PWM 占空比的低 2 位。高 8 位在 CCPRxL 中。 CCPxM<3:0>:ECCPx 模式选择位 0000 = 捕捉 / 比较 /PWM 关闭 (复位模块) 0001 = 保留 0010 = 比较模式:发生匹配时翻转输出 0011 = 保留 0100 = 捕捉模式:每个下降沿 0101 = 捕捉模式:每个上升沿 0110 = 捕捉模式:每 4 个上升沿 0111 = 捕捉模式:每 16 个上升沿 1000 = 比较模式:发生比较匹配时将输出置 1 (CCPx 引脚置 1, CCPxIF 置 1) 1001 = 比较模式:发生比较匹配时将输出清零 (CCPx 引脚清零, CCPxIF 置 1) 1010 = 比较模式:发生比较匹配时产生软件中断 (CCPx 引脚不受影响, CCPxIF 置 1) 1011 = 比较模式:特殊事件触发 (CCPx 引脚不受影响, CCPxIF 置 1) TimerX (由 CxTSEL 位选择)复位 如果使能了 A/D 模块,则 ADON 置 1,启动 A/D 转换 (1) 11xx = PWM 模式 注 1: 该功能仅在 CCP5 上可用。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 205 页 PIC18(L)F2X/4XK22 寄存器 14-2: CCPxCON:增强型 CCPx 控制寄存器 R/x-0 R/W-0 R/W-0 R/W-0 R/W-0 PxM<1:0> DCxB<1:0> bit 7 R/W-0 R/W-0 CCPxM<3:0> R/W-0 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-6 PxM<1:0>:增强型 PWM 输出配置位 如果 CCPxM<3:2> = 00、 01 和 10:(捕捉 / 比较模式) xx = PxA 配置为捕捉 / 比较输入; PxB、 PxC 和 PxD 配置为端口引脚 半桥 ECCP 模块 (1): 如果 CCPxM<3:2> = 11:(PWM 模式) 0x = 单输出; PxA 被调制; PxB 配置为端口引脚 1x = 半桥输出; PxA 和 PxB 被调制,带死区控制 bit 5-4 全桥 ECCP 模块 (1): 如果 CCPxM<3:2> = 11:(PWM 模式) 00 = 单输出; PxA 被调制; PxB、 PxC 和 PxD 配置为端口引脚 01 = 全桥输出正向; PxD 被调制; PxA 有效; PxB 和 PxC 无效 10 = 半桥输出; PxA 和 PxB 被调制,带死区控制; PxC 和 PxD 配置为端口引脚 11 = 全桥输出反向; PxB 被调制; PxC 有效; PxA 和 PxD 无效 DCxB<1:0>:PWM 占空比最低有效位 捕捉模式: 未使用 比较模式: 未使用 PWM 模式: 这两位是 PWM 占空比的低 2 位。高 8 位在 CCPRxL 中。 注 1: 要确定所用器件的全桥和半桥 ECCP,请参见表 14-1。 DS41412F_CN 第 206 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 14-2: CCPxCON:增强型 CCPx 控制寄存器 (续) bit 3-0 CCPxM<3:0>:ECCPx 模式选择位 0000 = 捕捉 / 比较 /PWM 关闭 (复位模块) 0001 = 保留 0010 = 比较模式:发生匹配时翻转输出 0011 = 保留 0100 = 捕捉模式:每个下降沿 0101 = 捕捉模式:每个上升沿 0110 = 捕捉模式:每 4 个上升沿 0111 = 捕捉模式:每 16 个上升沿 1000 = 比较模式:发生比较匹配时将输出置 1 (CCPx 引脚置 1, CCPxIF 置 1) 1001 = 比较模式:发生比较匹配时将输出清零 (CCPx 引脚清零, CCPxIF 置 1) 1010 = 比较模式:发生比较匹配时产生软件中断 (CCPx 引脚不受影响, CCPxIF 置 1) 1011 = 比较模式:特殊事件触发 (CCPx 引脚不受影响, CCPxIF 置 1) TimerX 复位 半桥 ECCP 模块 (1): 1100 = PWM 模式:PxA 高电平有效; PxB 高电平有效 1101 = PWM 模式:PxA 高电平有效; PxB 低电平有效 1110 = PWM 模式:PxA 低电平有效; PxB 高电平有效 1111 = PWM 模式:PxA 低电平有效; PxB 低电平有效 全桥 ECCP 模块 (1): 1100 = PWM 模式:PxA 和 PxC 高电平有效; PxB 和 PxD 高电平有效 1101 = PWM 模式:PxA 和 PxC 高电平有效; PxB 和 PxD 低电平有效 1110 = PWM 模式:PxA 和 PxC 低电平有效; PxB 和 PxD 高电平有效 1111 = PWM 模式:PxA 和 PxC 低电平有效; PxB 和 PxD 低电平有效 注 1: 要确定所用器件的全桥和半桥 ECCP,请参见表 14-1。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 207 页 PIC18(L)F2X/4XK22 寄存器 14-3: CCPTMRS0:PWM 定时器选择控制寄存器 0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 U-0 C3TSEL<1:0> — C2TSEL<1:0> — bit 7 R/W-0 R/W-0 C1TSEL<1:0> bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-6 bit 5 bit 4-3 bit 2 bit 1-0 C3TSEL<1:0>:CCP3 定时器选择位 00 = CCP3—— 捕捉 / 比较模式使用 Timer1, PWM 模式使用 Timer2 01 = CCP3—— 捕捉 / 比较模式使用 Timer3, PWM 模式使用 Timer4 10 = CCP3—— 捕捉 / 比较模式使用 Timer5, PWM 模式使用 Timer6 11 = 保留 未使用 C2TSEL<1:0>:CCP2 定时器选择位 00 = CCP2—— 捕捉 / 比较模式使用 Timer1, PWM 模式使用 Timer2 01 = CCP2—— 捕捉 / 比较模式使用 Timer3, PWM 模式使用 Timer4 10 = CCP2—— 捕捉 / 比较模式使用 Timer5, PWM 模式使用 Timer6 11 = 保留 未使用 C1TSEL<1:0>:CCP1 定时器选择位 00 = CCP1—— 捕捉 / 比较模式使用 Timer1, PWM 模式使用 Timer2 01 = CCP1—— 捕捉 / 比较模式使用 Timer3, PWM 模式使用 Timer4 10 = CCP1—— 捕捉 / 比较模式使用 Timer5, PWM 模式使用 Timer6 11 = 保留 寄存器 14-4: U-0 — bit 7 CCPTMRS1:PWM 定时器选择控制寄存器 1 U-0 U-0 U-0 R/W-0 R/W-0 — — — C5TSEL<1:0> R/W-0 R/W-0 C4TSEL<1:0> bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-4 bit 3-2 bit 1-0 未实现:读为 0 C5TSEL<1:0>:CCP5 定时器选择位 00 = CCP5—— 捕捉 / 比较模式使用 Timer1, PWM 模式使用 Timer2 01 = CCP5—— 捕捉 / 比较模式使用 Timer3, PWM 模式使用 Timer4 10 = CCP5—— 捕捉 / 比较模式使用 Timer5, PWM 模式使用 Timer6 11 = 保留 C4TSEL<1:0>:CCP4 定时器选择位 00 = CCP4—— 捕捉 / 比较模式使用 Timer1, PWM 模式使用 Timer2 01 = CCP4—— 捕捉 / 比较模式使用 Timer3, PWM 模式使用 Timer4 10 = CCP4—— 捕捉 / 比较模式使用 Timer5, PWM 模式使用 Timer6 11 = 保留 DS41412F_CN 第 208 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 14-5: R/W-0 CCPxASE bit 7 ECCPxAS:CCPx 自动关闭控制寄存器 R/W-0 R/W-0 CCPxAS<2:0> R/W-0 R/W-0 R/W-0 PSSxAC<1:0> R/W-0 R/W-0 PSSxBD<1:0> bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7 bit 6-4 bit 3-2 bit 1-0 CCPxASE:CCPx 自动关闭事件状态位 如果 PxRSEN = 1 ; 1 = 发生了自动关闭事件;事件消失时, CCPxASE 位将自动清零; CCPx 输出为关闭状态 0 = CCPx 输出正常工作 如果 PxRSEN = 0 ; 1 = 发生了自动关闭事件;必须用软件清零该位以重启 PWM ; CCPx 输出为关闭状态 0 = CCPx 输出正常工作 CCPxAS<2:0>:CCPx 自动关闭源选择位 (1) 000 = 禁止自动关闭 001 = 比较器 C1 (async_C1OUT) —— 输出高电平将导致关闭事件 010 = 比较器 C2 (async_C2OUT) —— 输出高电平将导致关闭事件 011 = 比较器 C1 或 C2—— 输出高电平将导致关闭事件 100 = FLT0 引脚 —— 低电平将导致关闭事件 101 = FLT0 引脚或比较器 C1 (async_C1OUT) —— 低电平将导致关闭事件 110 = FLT0 引脚或比较器 C2 (async_C2OUT) —— 低电平将导致关闭事件 111 = FLT0 引脚或者比较器 C1 或 C2—— 低电平将导致关闭事件 PSSxAC<1:0>:引脚 PxA 和 PxC 关闭状态控制位 00 = 驱动引脚 PxA 和 PxC 为 0 01 = 驱动引脚 PxA 和 PxC 为 1 1x = 引脚 PxA 和 PxC 为三态 PSSxBD<1:0>:引脚 PxB 和 PxD 关闭状态控制位 00 = 驱动引脚 PxB 和 PxD 为 0 01 = 驱动引脚 PxB 和 PxD 为 1 1x = 引脚 PxB 和 PxD 为三态 注 1: 如果使能了 CM2CON1 寄存器中的 C1SYNC 或 C2SYNC 位,则 Timer1 将延时关闭。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 209 页 PIC18(L)F2X/4XK22 寄存器 14-6: R/W-0 PxRSEN bit 7 PWMxCON:增强型 PWM 控制寄存器 R/W-0 R/W-0 R/W-0 R/W-0 PxDC<6:0> R/W-0 R/W-0 R/W-0 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7 bit 6-0 PxRSEN:PWM 重启使能位 1 = 自动关闭时,一旦关闭事件消失, CCPxASE 位就自动清零; PWM 自动重启 0 = 自动关闭时, CCPxASE 必须用软件清零以重启 PWM PxDC<6:0>:PWM 延时计数位 PxDCx = 在 PWM 信号应该转换为有效的预定时间和实际转换为有效的时间之间的 FOSC/4 (4 * TOSC) 周期数 寄存器 14-7: U-0 — bit 7 PSTRxCON:PWM 转向控制寄存器 (1) U-0 U-0 R/W-0 R/W-0 — — STRxSYNC STRxD R/W-0 STRxC R/W-0 STRxB R/W-1 STRxA bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-5 bit 4 bit 3 bit 2 bit 1 bit 0 未实现:读为 0 STRxSYNC:转向同步位 1 = 在下一个 PWM 周期发生输出转向更新 0 = 在指令周期边界的开始发生输出转向更新 STRxD:转向使能位 D 1 = PxD 引脚的 PWM 波形极性受 CCPxM<1:0> 控制 0 = PxD 引脚被分配为端口引脚 STRxC:转向使能位 C 1 = PxC 引脚的 PWM 波形极性受 CCPxM<1:0> 控制 0 = PxC 引脚被分配为端口引脚 STRxB:转向使能位 B 1 = PxB 引脚的 PWM 波形极性受 CCPxM<1:0> 控制 0 = PxB 引脚被分配为端口引脚 STRxA:转向使能位 A 1 = PxA 引脚的 PWM 波形极性受 CCPxM<1:0> 控制 0 = PxA 引脚被分配为端口引脚 注 1: PWM 转向模式仅在 CCPxCON 寄存器位 CCPxM<3:2> = 11 且 PxM<1:0> = 00 时可用。 DS41412F_CN 第 210 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.0 主同步串行口 (MSSP1 和 MSSP2)模块 15.1 主 SSPx (MSSPx)模块概述 主同步串行口 (MSSPx)模块是用于同其他外设或单 片 机 进 行 通 信 的 串 行 接 口。这 些 外 设 可 以 是 串 行 EEPROM、移位寄存器、显示驱动器和 A/D 转换器等。 MSSPx 模块有以下两种工作模式: • 串行外设接口(Serial Peripheral Interface,SPI) • I2C™ SPI 接口支持以下模式和特性: • 主模式 • 从模式 • 时钟极性 • 从选择同步 (仅限从模式) • 从器件的菊花链连接 图 15-1 给出了 SPI 接口模块的框图。 图 15-1: MSSPx 框图 (SPI 模式) 数据总线 读 写 SSPxBUF 寄存器 SDIx SDOx SSPxSR 寄存器 bit 0 移位 时钟 SSx SCKx SSx 控制 使能 边沿 选择 两种(CKP 和 CKE) 时钟选择 SSPxM<3:0> 4 ( ) TMR2 输出 2 边沿 选择 预分频器 TOSC 4, 16, 64 TRIS 位 波特率 发生器 (SSPxADD)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 211 页 PIC18(L)F2X/4XK22 I2C 接口支持以下模式和特性: • 主模式 • 从模式 • 字节无应答 (从模式) • 有限的多主器件支持 • 7 位和 10 位寻址 • 启动和停止中断 • 中断屏蔽 • 时钟延长 • 总线冲突检测 • 广播呼叫地址匹配 • 地址掩码 • 地址保持模式和数据保持模式 • 可选的 SDAx 保持时间 图 15-2 给出了主模式下 I2C 接口模块的框图。图 15-3 给出了从模式下 I2C 接口模块的框图。 图 15-2: MSSPx 框图 (I2C™主模式) PIC18(L)F2X/4XK22 具有两个 MSSP 模块(MSSP1 和 MSSP2),每个模块相互独立工作。 注 1: 在具有多个 MSSP 模块的器件中,要特别 注意 SSPxCONx 寄存器名称。SSP1CON1 和 SSP1CON2 寄存器控制同一模块工作的 不同方面,而 SSP1CON1 和 SSP2CON1 控制两个不同模块的相同特性。 2: 在本章中,在所有工作模式下, MSSP 模 块泛指 MSSP1 或 MSSP2。在需要时,寄 存器名称、模块 I/O 信号和位名称可以使用 通用标识符 “x” (数字)来识别某个特定模 块。 SDAx SCLx SDAx 输入 内部 数据总线 读 写 SSPxBUF SSPxSR 移位 时钟 MSb LSb 启动位和停止位 应答发生 (SSPxCON2) [SSPxM 3:0] 波特率 发生器 (SSPxADD) 接收使能(RCEN) 时钟控制 时钟仲裁 /BCOL 检测 (延迟时钟源) SCLx 输入 总线冲突 启动位检测 停止位检测 写冲突检测 时钟仲裁 发送 / 接收结束时的 状态计数器 地址匹配检测 置 1/ 复位:S、P、SSPxSTAT、WCOL 和 SSPxOV 复位 SEN 和 PEN(SSPxCON2) 将 SSPxIF 和 BCLxIF 置 1 DS41412F_CN 第 212 页  2011-2013 Microchip Technology Inc. 图 15-3: PIC18(L)F2X/4XK22 MSSPx 框图 (I2C™从模式) SCLx SDAx 内部 数据总线 读 写 SSPxBUF 寄存器 移位 时钟 SSPxSR 寄存器 MSb LSb SSPxMSK 寄存器 匹配检测 地址匹配 SSPxADD 寄存器 启动位和 停止位检测 置 1 或复位 S 位和 P 位 (SSPxSTAT 寄存器)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 213 页 PIC18(L)F2X/4XK22 15.2 SPI 模式概述 串行外设接口 (SPI)总线是以全双工模式工作的同步 串行数据通信总线。器件在由主器件启动通信的主 / 从 器件环境中进行通信。从器件通过称为从选择的片选进 行控制。 SPI 总线规定了 4 种信号连接: • 串行时钟 (SCKx) • 串行数据输出 (SDOx) • 串行数据输入 (SDIx) • 从选择 (SSx) 图15-1给出了MSSPx模块在SPI模式下工作时的框图。 SPI 总线工作时使用单个主器件和一个或多个从器件。 使用多个从器件时,从主器件到每个从器件都需要独立 的从选择连接。 图 15-4 给出了主器件和多个从器件之间的典型连接。 主器件每次仅选择一个从器件。大多数从器件都具有三 态输出,所以在未选择它们时,它们的输出信号会看起 来好像与总线断开。 数据发送涉及到两个移位寄存器,它们大小都为 8 位, 一个在主器件中,一个在从器件中。不论是对于主器件 还 是 从 器 件,数 据 总 是 每 次 移 出 一 位,最 高 有 效 位 (MSb)先移出。与此同时,新的最低有效位 (Least Significant bit, LSb)会被移入同一寄存器。 图15-5给出了分别配置为主器件和从器件的两个处理器 之间的典型连接。 数据在所设定的时钟边沿从两个移位寄存器移出,并在 相反的时钟边沿锁存。 主器件通过其 SDOx 输出引脚发送信息,并由该引脚所 连接的从器件的 SDIx 输入引脚接收。从器件通过其 SDOx 输出引脚发送信息,并由该引脚所连接的主器件 的 SDIx 输入引脚接收。 要开始进行通信,主器件需要先送出时钟信号。主器件 和从器件应配置为相同的时钟极性。 主器件会通过其移位寄存器发送 MSb 来启动数据发送。 从器件会从同一条线上读取该位,并将它保存到其移位 寄存器的 LSb 单元中。 在每个 SPI 时钟周期中,会发生全双工数据发送。这意 味 着 在同 一 时 间,从 器件 会 从 其 移位 寄 存 器 中送 出 MSb,而主器件会从同一数据线上读取该位并将它保存 为其移位寄存器的 LSb。 在移出 8 位之后,主器件和从器件就交换了寄存器值。 如果需要交换更多数据,移位寄存器中会装入新数据, 并重复该过程。 数据是否有意义 (无效数据),取决于应用软件。这就 导致以下三种数据传输情形: • 主器件发送有用数据,从器件发送无效数据。 • 主器件发送有用数据,从器件发送有用数据。 • 主器件发送无效数据,从器件发送有用数据。 数据发送可能会需要不定数量的时钟周期。在没有更多 数据需要发送时,主器件会停止发送时钟信号,并取消 选择从器件。 每个与总线连接、但未被通过其从选择线选择的从器 件,都必须忽略时钟和数据发送信号,并且不能发送自 己的任何数据。 DS41412F_CN 第 214 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 15-4: SPI 主器件和多个从器件连接 SPI 主器件 SCLK SDOx SDIx 通用 I/O 通用 I/O 通用 I/O 15.2.1 SPI 模式寄存器 MSSPx 模块有 6 个寄存器用于 SPI 模式操作。这些寄 存器包括: • MSSPx 状态寄存器 (SSPxSTAT) • MSSPx 控制寄存器 1 (SSPxCON1) • MSSPx 控制寄存器 3 (SSPxCON3) • MSSPx 数据缓冲寄存器 (SSPxBUF) • MSSPx 地址寄存器 (SSPxADD) • MSSPx 移位寄存器 (SSPxSR)(不可直接访问) SSPxCON1 和 SSPxSTAT 是 SPI 工作模式下的控制寄 存器和状态寄存器。 SSPxCON1 寄存器是可读写的。 SSPxSTAT 的低 6 位是只读的,而高 2 位是可读写的。 在一种 SPI 主模式下,SSPxADD 中可以装入在波特率 发生器中使用的值。关于波特率发生器的更多信息,请 参见第 15.7 节 “ 波特率发生器 ”。 SSPxSR 是用来将数据移入和移出的移位寄存器。 SSPxBUF提供对SSPxSR寄存器的间接访问。SSPxBUF 是缓冲寄存器,可用于数据字节的写入或读出。 在接收操作中,SSPxSR 和 SSPxBUF 共同构成一个缓 冲接收器。当 SSPxSR 接收到一个完整的字节之后,该 字节会被送入 SSPxBUF,同时将中断标志位 SSPxIF 置 1。 在发送期间, SSPxBUF 不是可缓冲的。对 SSPxBUF 的写操作将同时写入 SSPxBUF 和 SSPxSR。 SCLK SDIx SDOx SSx SPI 从器件 #1 SCLK SDIx SDOx SSx SPI 从器件 #2 SCLK SDIx SDOx SSx SPI 从器件 #3 15.2.2 SPI 模式操作 初始化 SPI 时需要指定几个选项。可以通过编程相应的 控制位 (SSPxCON1<5:0> 和 SSPxSTAT<7:6>)来指 定这些选项。这些控制位用于指定以下选项: • 主模式 (SCKx 作为时钟输出) • 从模式 (SCKx 作为时钟输入) • 时钟极性 (SCKx 的空闲状态) • 数据输入采样阶段 (数据输出时间的中间或末尾) • 时钟边沿 (在 SCKx 的上升沿 / 下降沿输出数据) • 时钟速率 (仅限主模式) • 从选择模式 (仅限从模式) 要使能串口, SSPxCON1 寄存器的 SSPx 使能位 SSPxEN 必须置 1。要复位或重新配置 SPI 模式,先将 SSPxEN 位清零,重新初始化 SSPxCONx 寄存器,然 后再将 SSPxEN 位置 1。这会将 SDIx、 SDOx、 SCKx 和 SSx 引脚配置为串口引脚。要将引脚用作串口功能, 必须正确设置引脚的数据方向位(在 TRIS 寄存器中): • SDIx 必须将对应的 TRIS 位置 1 • SDOx 必须将对应的 TRIS 位清零 • SCKx (主模式)必须将对应的 TRIS 位清零 • SCKx (从模式)必须将对应的 TRIS 位置 1 • SSx 必须将对应的 TRIS 位置 1  2011-2013 Microchip Technology Inc. DS41412F_CN 第 215 页 PIC18(L)F2X/4XK22 对 于不 需 要 的 串口 功 能,可 通 过将 相 应 的 数据 方 向 (TRIS)寄存器编程为相反值来使其失效。 MSSPx 模块由一个发送 / 接收移位寄存器(SSPxSR) 和一个缓冲寄存器 (SSPxBUF)组成。 SSPxSR 将数 据移入 / 移出器件,先移位 MSb。在新数据接收完毕前, SSPxBUF 保存上次写入 SSPxSR 的数据。一旦 8 位数 据接收完毕,该字节就被移入 SSPxBUF 寄存器。然后, SSPxSTAT 寄存器的缓冲区满检测位 BF 和中断标志位 SSPxIF 被置 1。这种双重缓冲数据接收方式(SSPxBUF) 允许在读取刚接收的数据之前,就开始接收下一个字 节。当 SSPxBUF 寄存器正在发送 / 接收数据时,对它 写入的任何数据都将被忽略,同时 SSPxCON1 寄存器 图 15-5: SPI 主 / 从器件连接 SPI 主器件 SSPxM<3:0> = 00xx = 1010 SDOx 串行输入缓冲区 (BUF) 的写冲突检测位 WCOL 被置 1。用户软件必须将 WCOL 位清零,才能使以后对 SSPxBUF 寄存器的写操作成功 完成。 为确保应用软件能接收有效数据,在下一个要发送的数 据字节写入 SSPxBUF 之前,读取 SSPxBUF 中现有的 数据。SSPxSTAT 寄存器的缓冲区满位 BF 用于指示何 时 SSPxBUF 装入了接收到的数据 (发送完成) 。当 SSPxBUF 中的数据被读取后, BF 位即被清零。如果 SPI 仅作为一个发送器,则不必理会该数据。通常,可 用 MSSPx 中断来判断发送 / 接收何时完成。如果不打 算使用中断方法,用软件查询的方法同样可确保不会发 生写冲突。 SPI 从器件 SSPxM<3:0> = 010x SDIx 串行输入缓冲区 (SSPxBUF) 移位寄存器 (SSPxSR) SDIx MSb LSb SCKx 处理器 1 通用 I/O 串行时钟 从选择 (可选) SDOx 移位寄存器 (SSPxSR) MSb LSb SCKx SSx 处理器 2 DS41412F_CN 第 216 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.2.3 SPI 主模式 因为主器件控制 SCKx 线,所以它可以在任意时刻启动 数据传输。主器件根据软件协议确定从器件 (图 15-5 中的处理器 2)在何时广播数据。 在主模式下,一写入 SSPxBUF 寄存器就发送或接收数 据。如果只打算将 SPI 作为接收器,则可以禁止 SDOx 输出(将其设定为输入)。SSPxSR 寄存器按设定的时 钟速率连续移入 SDIx 引脚上的信号。每接收到一个字 节,就将其装入 SSPxBUF 寄存器,就像接收到普通字 节一样 (中断和状态位相应置 1)。 图 15-6: 写入 SSPxBUF SCKx (CKP = 0 CKE = 0) SCKx (CKP = 1 CKE = 0) SCKx (CKP = 0 CKE = 1) SCKx (CKP = 1 CKE = 1) SDOx (CKE = 0) SDOx (CKE = 1) SDIx (SMP = 0) 输入采样 (SMP = 0) SDIx (SMP = 1) 输入采样 (SMP = 1) SSPxIF SSPxSR 到 SSPxBUF SPI 模式波形图 (主模式) bit 7 bit 6 bit 5 bit 4 bit 7 bit 6 bit 5 bit 4 bit 7 bit 7 通过适当地设定 SSPxCON1 寄存器的 CKP 位和 SSPxSTAT 寄存器的 CKE 位,可以选择时钟极性。 图 15-6、图 15-8、图 15-9 和图 15-10 给出了 SPI 通 信的波形图,其中 MSB 先发送。在主模式下,SPI 时 钟速率 (比特率)可由用户设定为以下几种之一: • FOSC/4 (或 TCY) • FOSC/16 (或 4 * TCY) • FOSC/64 (或 16 * TCY) • Timer2 输出 /2 • FOSC/(4 * (SSPxADD + 1)) 图 15-6 给出了主模式的波形图。 当 CKE 位置 1 时, SDOx 数据在 SCKx 上出现时钟边 沿前一直有效。图中所示的输入采样的变化由 SMP 位 的 状 态 反 映。图 中 给 出 了 将 接 收 到 的 数 据 装 入 SSPxBUF 的时刻。 4 种时钟 模式 bit 3 bit 2 bit 1 bit 0 bit 3 bit 2 bit 1 bit 0 bit 0 bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 217 页 PIC18(L)F2X/4XK22 15.2.4 SPI 从模式 在从模式下,当 SCKx 上出现外部时钟脉冲时发送和接 收数据。当最后一位数据被锁存时,中断标志位 SSPxIF 置 1。 在 SPI 从模式下使能该模块前,时钟线必须处于相应的 空闲状态。时钟线可通过读 SCKx 引脚来查看。空闲状 态由 SSPxCON1 寄存器的 CKP 位决定。 在从模式下,外部时钟由 SCKx 引脚上的外部时钟源提 供。外部时钟必须满足电气规范中规定的高电平和低电 平的最短时间要求。 在休眠模式下,从器件仍可发送 / 接收数据。移位寄存 器通过 SCKx 引脚输入提供时钟,当接收到一个字节 时,器件会产生中断。如果允许发生中断,器件会从休 眠模式唤醒。 15.2.4.1 菊花链配置 SPI 总线有时会采用菊花链配置进行连接。第一个从器 件的输出与第二个从器件的输入连接,第二个从器件的 输出与第三个从器件的输入连接,如此类推。最后一个 从器件的输出与主器件的输入连接。在第二组时钟脉冲 期间,每个从器件会送出在第一组时钟脉冲期间所接收 数据的精确副本。整个链充当一个很大的通信移位寄存 器。菊花链功能只需要从主器件引出一条从选择线。 图 15-7 给出了在 SPI 模式下工作时典型菊花链连接的 框图。 在菊花链配置中,从器件只需要总线上最近的一个字 节。将 SSPxCON3 寄存器的 BOEN 位置 1 时,即使尚 未读取前一个字节,也允许数据写入SSPxBUF寄存器。 这使软件可以忽略不适用于它的数据。 15.2.5 从选择同步 从选择也可以用于对通信进行同步。从选择线会一直保 持高电平,直到主器件准备好进行通信。当从选择线下 拉为低电平时,从器件就知道新的数据发送正在启动。 如果从器件未能正确地接收到通信,它会在从选择线恢 复为高电平状态、数据发送结束时发生复位。然后,从 器件会在从选择线再次下拉为低电平时准备好接收新的 发送数据。如果不使用从选择线,则会存在从器件最终 与主器件脱离同步的风险。如果从器件丢失了某个位, 则在之后的数据发送中,它将总是偏离一位。使用从选择 线可以让从器件和主器件在每次发送开始时相互对齐 (图 15-8)。 SSx 引脚允许器件工作于同步从模式。SPI 必须处于从 模式,并使能 SSx 引脚控制 (SSPxCON1<3:0> = 0100)。 当 SSx 引脚为低电平时,使能数据的发送和接收,同时 SDOx 引脚被驱动。 当 SSx 引脚变为高电平时,即使是在字节的发送过程 中,也不再驱动 SDOx 引脚,而是变为悬空输出状态。 根据具体应用,可能需要使用外部上拉 / 下拉电阻。 注 1: 当 SPI 处于从模式且使能 SSx 引脚控制 (SSPxCON1<3:0> = 0100)时,如果SSx 引脚设置为 VDD, SPI 模块将会复位。 2: 当 SPI 用于从模式且 CKE 置 1 时,用户 必须使能 SSx 引脚控制。 3: 工作于 SPI 从模式时,SSPxSTAT 寄存器 的 SMP 位必须保持清零。 当 SPI 模块复位时,位计数器被强制为 0。这是通过强制 将 SSx 引脚拉为高电平或将 SSPxEN 位清零来实现的。 DS41412F_CN 第 218 页  2011-2013 Microchip Technology Inc. 图 15-7: SPI 菊花链连接 SPI 主器件 SCLK SDOx SDIx 通用 I/O 图 15-8: SSx SCKx (CKP = 0 CKE = 0) SCKx (CKP = 1 CKE = 0) 写入 SSPxBUF SSPxBUF 到 SSPxSR SDOx SDIx 输入 采样 SSPxIF 中断标志 SSPxSR 到 SSPxBUF 从选择同步波形图 bit 7 bit 6 bit 7  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 SCLK SDIx SDOx SSx SPI 从器件 #1 SCLK SDIx SDOx SSx SPI 从器件 #2 SCLK SDIx SDOx SSx SPI 从器件 #3 移位寄存器 SSPxSR 和位计数被复位 bit 7 bit 6 bit 7 bit 0 bit 0 DS41412F_CN 第 219 页 PIC18(L)F2X/4XK22 图 15-9: SSx 可选 SCKx (CKP = 0 CKE = 0) SCKx (CKP = 1 CKE = 0) 写入 SSPxBUF 有效 SDOx SDIx 输入 采样 SSPxIF 中断标志 SSPxSR 到 SSPxBUF 写冲突 检测有效 图 15-10: SSx 不可选 SCKx (CKP = 0 CKE = 1) SCKx (CKP = 1 CKE = 1) 写入 SSPxBUF 有效 SDOx SDIx 输入 采样 SSPxIF 中断标志 SSPxSR 到 SSPxBUF 写冲突 检测有效 SPI 模式波形图 (从模式, CKE = 0) bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 bit 7 bit 0 SPI 模式波形图 (从模式, CKE = 1) bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 bit 7 bit 0 DS41412F_CN 第 220 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.2.6 休眠模式下的 SPI 操作 在 SPI 主模式下,模块时钟速度可能与全功耗模式下的 不同;处于休眠模式时,所有时钟都停止。 在 MSSPx 时钟速度远高于系统时钟时,用户需要特别 小心。 在从模式下,当允许 MSSPx 中断时,在主器件发送完 数据后, MSSPx 中断会将控制器从休眠状态唤醒。 如果不想从休眠模式退出,应该禁止 MSSPx 中断。 在 SPI 主模式下,当选择休眠模式时,所有模块的时钟 都将停止,并且在器件被唤醒前,发送 / 接收将保持此 停止状态。器件返回到运行模式之后,模块将恢复发送 和接收数据。 在 SPI 从模式下, SPI 发送 / 接收移位寄存器与器件异 步工作。这可使器件置于休眠模式下,仍能将数据移入 SPI 发送 / 接收移位寄存器。当接收到全部 8 位数据时, MSSPx 中断标志位将置 1,并且如果允许中断的话,将 唤醒器件。 表 15-1: 与 SPI 操作相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ANSELA — ANSELB — — ANSA5 — ANSA3 ANSA2 ANSA1 ANSA0 — ANSB5 ANSB4 ANSB3(1) ANSB2(1) ANSB1(1) ANSB0(1) ANSELC ANSELD ANSC7 ANSD7 ANSC6 ANSD6 ANSC5 ANSC4 ANSC3 ANSD5 ANSD4(2) ANSD3(2) ANSC2 ANSD2 — — ANSD1(2) ANSD0(2) INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD CCP2MD CCP1MD SSP1BUF SSP1CON1 WCOL SSPOV SSP1 接收缓冲 / 发送寄存器 SSPEN CKP SSPM<3:0> SSP1CON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN SSP1STAT SMP CKE D/A P S R/W UA BF SSP2BUF SSP2CON1 WCOL SSPOV SSP2 接收缓冲 / 发送寄存器 SSPEN CKP SSPM<3:0> SSP2CON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN SSP2STAT SMP CKE D/A P S R/W UA BF TRISA TRISB TRISA7 TRISB7 TRISA6 TRISB6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 TRISB5 TRISB4 TRISB3(1) TRISB2(1) TRISB1(1) TRISB0(1) TRISC TRISD TRISC7 TRISD7 TRISC6 TRISD6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 TRISD5 TRISD4(2) TRISD3(2) TRISD2 TRISD1(2) TRISD0(2) 图注: SPI 模式下的 MSSPx 不使用阴影位。 注 1: PIC18(L)F2XK22 器件。 2: PIC18(L)F4XK22 器件。 寄存器 所在页 154 155 155 155 116 128 130 124 126 119 121 56 — 260 263 259 — 260 263 259 156 156 156 156  2011-2013 Microchip Technology Inc. DS41412F_CN 第 221 页 PIC18(L)F2X/4XK22 15.3 I2C 模式概述 I2C 总线是一种多主器件串行数据通信总线。器件在由 主器件启动通信的主 / 从器件环境中进行通信。从器件 通过寻址进行控制。 I2C 总线规定了两种信号连接: • 串行时钟 (SCLx) • 串行数据 (SDAx) 图 15-2 给出了 MSSPx 模块在 I2C 模式下工作时的框图。 SCLx 和 SDAx 连接都是双向的漏极开路线路,它们都需 要使用用于电源电压的上拉电阻。线路下拉为地电压 时,信号视为逻辑0;线路保持悬空时,信号视为逻辑1。 图 15-11 给出了分别配置为主器件和从器件的两个处理 器之间的典型连接。 I2C 总线工作时可以有一个或多个主器件,以及一个或 多个从器件。 对于给定器件,有 4 种可能的工作模式: • 主发送模式 (主器件向从器件发送数据) • 主接收模式 (主器件从从器件接收数据) • 从发送模式 (从器件向主器件发送数据) • 从接收模式 (从器件从主器件接收数据) 要开始进行通信,主器件需要以主发送模式启动。主器 件送出启动位,后面跟随它希望进行通信的从器件的地 址字节。后面再跟随单个读 / 写位,该位决定主器件是 向从器件发送数据还是从从器件接收数据。 如果总线上存在所请求的从器件,从器件会使用应答位 (也称为 ACK)进行响应。然后,主器件会以发送模式 或接收模式继续通信,从器件则以互补模式 (分别为接 收模式或发送模式)继续通信。 SCLx 线保持为高电平时,启动位由 SDAx 线的由高至 低跳变来指示。地址和数据字节随后送出,先发送最高 有效位 (MSb)。在主器件希望从从器件读取数据时, 送出的读 / 写位为逻辑 1,在主器件希望向从器件写入 数据时,该位为逻辑 0。 图 15-11: I2C™ 主 / 从器件连接 VDD SCLK 主器件 VDD SDIx SCLK 从器件 SDOx 应答位(ACK)是低电平有效信号,它会将 SDAx 线保 持为低电平,用于指示发送器从器件已接收到发送数 据,并已准备好接收更多数据。 数据位的跳变总是在 SCLx 线保持低电平时执行。在 SCLx 线保持高电平时发生的跳变用于指示启动位和停 止位。 如果主器件希望向从器件写入数据,则它会重复发送一 个字节的数据,而从器件则在接收每个字节之后使用 ACK 位进行响应。在该示例中,主器件处于主发送模 式,从器件处于从接收模式。 如果主器件希望从从器件读取数据,则它会从从器件重 复接收一个字节的数据,并在接收每个字节之后使用 ACK 位进行响应。在该示例中,主器件处于主接收模 式,从器件处于从发送模式。 在传输最后一个数据字节之后,主器件可以通过发送停 止位来结束数据发送。如果主器件处于接收模式,它会 发送停止位来代替最后一个 ACK 位。SCLx 线保持为高 电平时,停止位由 SDAx 线的由低至高跳变来指示。 在某些情况下,主器件可能希望维持对总线的控制,并 重新启动另一次数据发送。如果是这样,主器件可以在 它处于接收模式时,发送另一个启动位来代替停止位或 最后一个 ACK 位。 I2C 总线规定了三种报文协议: • 主器件向从器件写数据的单一报文。 • 主器件从从器件读数据的单一报文。 • 主器件对一个或多个从器件启动至少两次写操作或 读操作,或者读写操作组合的组合报文。 DS41412F_CN 第 222 页  2011-2013 Microchip Technology Inc. 在一个器件发送逻辑 1 (或将线路保留悬空),第二个 器件发送逻辑 0 (或将线路保持为低电平)时,第一个 器件会检测到线路不为逻辑 1。这种检测在用于 SCLx 线时,称为时钟延长。时钟延长为从器件提供了一种控 制数据流的机制。这种检测在用于 SDAx 线时,称为仲 裁。仲裁可以确保任意时刻只有一个主器件在进行通信。 15.3.1 时钟延长 在从器件尚未完成数据处理时,它可以通过时钟延长这 一过程来延迟更多数据的传输。寻址到的从器件可以在 接收或发送一位数据之后将 SCLx 时钟线保持为低电 平,指示它尚未准备好继续。与从器件进行通信的主器 件将会尝试上拉 SCLx 线,以传输下一位数据,但它会 检测到时钟线尚未被释放。由于SCLx连接是漏极开路, 所以从器件可以一直将线路保持为低电平,直到它准备 好继续通信为止。 通过时钟延长,无法与发送器保持同速的接收器可以控 制传入数据流。 PIC18(L)F2X/4XK22 15.3.2 仲裁 每个主器件都必须监视总线上是否出现启动位和停止 位。如果器件检测到总线正忙,则在总线恢复为空闲状 态之前,它无法开始新的报文。 但是,可能会有两个主器件尝试同时或近乎同时启动数 据发送。发生这种情况时,将会开始仲裁过程。每个发 送器会检查 SDAx 数据线的电平,并将它与自己期望的 电平进行比较。发现两个电平不匹配的第一个发送器会 在仲裁中失败,必须停止在 SDAx 线上发送数据。 例如,如果一个发送器将 SDAx 线保持为逻辑 1 (保留 悬空),而第二个发送器将它保持为逻辑 0 (下拉为低 电平),则结果是 SDAx 线将为低电平。那么,第一个 发送器会发现线路电平与期望电平不同,并断定有另一 个发送器正在进行通信。 发现电平不同的第一个发送器将是仲裁失败的发送器, 必须停止驱动 SDAx 线。如果该发送器同时也是主器 件,则它还必须停止驱动 SCLx 线。然后,它可以在尝 试重新启动数据发送之前监视线路上是否出现停止条 件。与此同时,另一个未发现期望电平与 SDAx 线实际 电平不同的器件将继续原来的数据发送。它可以无需进 行任何复杂处理,因为到目前为止,发送条件与所期望 的完全相同,没有其他发送器对报文产生干扰。 当主器件对多个从器件进行寻址时,也会对从发送模式 进行仲裁,但这种情况较少见。 如果有两个主器件在地址阶段向两个不同的从器件发送 报文,则发送较小从器件地址的主器件总是会在仲裁中 获胜。当两个主器件向同一从器件地址发送报文时,地 址有时会指向多个从器件,仲裁过程必须继续进入到数 据阶段。 仲裁通常极少发生,但它是正确支持多主器件所必需的 过程。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 223 页 PIC18(L)F2X/4XK22 15.4 I2C 模式操作 所有 MSSPx I2C 通信都是针对字节的,并且会先移出 MSb。有 6 个 SFR 寄存器和 2 个中断标志用作模块与 PIC®单片机和用户软件的接口。模块通过两个引脚SDAx 和 SCLx 来与其他外部 I2C 器件进行通信。 15.4.1 字节格式 I2C 中的所有通信都采用 9 位形式。从主器件向从器件 (或者反之)发送一个字节之后,将会送回一个应答位。 在 SCLx 线第 8 个下降沿之后,在 SDAx 上输出数据的 器件会将该引脚改为输入,并在下一个时钟脉冲读入应 答值。 时钟信号 SCLx 由主器件提供。在 SCLx 信号为低电平 时,数据可以有效地更改,并且在时钟上升沿进行采 样。在 SCLx 线为高电平时, SDAx 线上的电平变化定 义总线上的一些特殊条件,以下会对此进行说明。 15.4.2 I2C 术语的定义 在 I2C 通信的描述中存在一些用语和术语,它们具有特 定于 I2C 的定义。下面定义了词语的用法,在本文档其 他部分中,将不加说明地使用它们。该表根据 Phillips I2C 规范改写。 15.4.3 SDAx 和 SCLx 引脚 在 SSPxEN 位置 1 的情况下选择任意 I2C 模式时,SCLx 和 SDAx 引脚将会强制设为漏极开路。用户应通过将相 应的 TRIS 位置 1 来将这些引脚设置为输入。 注: 在使能 I2C 模式时,数据将设为输出 0。 15.4.4 SDAx 保持时间 SDAx 引 脚 的 保 持 时 间 通 过 SSPxCON3 寄 存器的 SDAHT 位进行选择。保持时间是 SDAx 在 SCLx 的下 降沿之后保持有效的时间。将 SDAHT 位置 1 可以选择 最低 300 ns 的较长保持时间,这对于电容较大的总线会 有帮助。 表 15-2: I2C™总线术语 术语 说明 发送器 将数据移送到总线上的器件。 接收器 从总线上移入数据的器件。 主器件 启动数据传输、产生时钟信号和终 止数据传输的器件。 从器件 主器件寻址到的器件。 多主器件 有多个器件可以启动数据传输的总线。 仲裁 用于确保每次只有一个主器件控制 总线的过程。仲裁获胜可以确保报 文不会被损坏。 同步 用于将总线上两个或更多器件的时 钟进行同步的过程。 空闲 没有任何主器件在控制总线,并且 SDAx 和 SCLx 线均为高电平。 有效 每当有一个或多个主器件在控制总 线时。 可寻址的从器件 已接收到匹配地址,并且正在由主 器件提供时钟的从器件。 匹配地址 送入从器件中、并与 SSPxADD 中 的存储值匹配的地址字节。 写请求 从器件接收到 R/W 位清零的匹配地 址,并已准备好移入数据。 读请求 主器件发送 R/W 位置 1 的地址字 节,表示要求从器件在时钟控制下 将数据移出。从器件在接收到该地 址字节后会立即移出所有数据字节, 直到发生重复启动或停止条件。 时钟延长 总线上的器件通过将 SCLx 保持为 低电平来暂停通信的时间。 总线冲突 每当模块进行输出并期望 SDAx 线 为高电平,却采样到 SDAx 线为低 电平时。 DS41412F_CN 第 224 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.4.5 启动条件 I2C 规范将启动条件定义为在 SCLx 线为高电平时, SDAx 从高电平变为低电平状态。启动条件总是由主器 件产生,指示总线从空闲状态变为有效状态。图 15-12 给出了启动和停止条件的波形图。 如果模块在将 SDAx 线置为低电平之前采样到 SDAx 线 为低电平,则会在产生启动条件时发生总线冲突。这一 点不符合 I2C 规范,该规范规定不能在产生启动条件时 发生总线冲突。 15.4.6 停止条件 停止条件定义为在 SCLx 线为高电平时, SDAx 线从低 电平变为高电平状态。 注: 在 停 止 条 件 生 效 之 前,必 须 至 少 出 现 一 个 SCLx 低电平时间,因此,如果 SDAx 线变为 低电平然后再次变为高电平,而 SCLx 线保 持高电平,则只会检测到启动条件。 图 15-12: I2C™ 启动和停止条件 SDAx 15.4.7 重复启动条件 重复启动条件在每次停止条件有效的时候有效。如果主 器件希望在终止当前传输之后保持总线,主器件可以发 出重复启动条件。重复启动对从器件产生的影响与启动 条件相同,即复位所有从器件逻辑并使之准备接收一个 地址。主器件可以寻址同一个或另一个从器件。图 15-13 给出了重启条件的波形图。 在 10 位寻址从模式下,要从寻址到的从器件中移出数 据,主器件需要产生重复启动条件。从器件完全寻址 (高地址字节和低地址字节均匹配)之后,主器件可以 发出重复启动条件和 R/W 位置 1 的高地址字节。然后, 从器件逻辑会保持时钟,并准备送出数据。 在 10 位模式下,与 R/W 清零的地址字节完全匹配后,前 一次匹配标志会置 1 并保持置 1。在产生停止条件之前, R/W 清零的高地址或高地址匹配都会失败。 15.4.8 启动 / 停止条件中断屏蔽 SSPxCON3 寄存器的 SCIE 和 PCIE 位可以用于允许在 通常不支持中断功能的从模式下产生中断。对于已允许 启动和停止检测中断的从模式,这两位没有任何作用。 图 15-13: SCLx S 启动 条件 允许数据改变 I2C™ 重复启动条件 允许数据改变 P 停止 条件 允许数据改变 Sr 重复启动 条件 允许数据改变  2011-2013 Microchip Technology Inc. DS41412F_CN 第 225 页 PIC18(L)F2X/4XK22 15.4.9 应答序列 在 I2C 中,所有传输字节的第 9 个 SCLx 脉冲都专门用 作应答信号。它使接收器件可以通过将 SDAx 下拉为低 电平来响应发送器。发送器在该时间内必须释放对线路 的控制,以移入响应信号。应答 (ACK)是低电平有效 信号,它会将 SDAx 线下拉为低电平,用于指示发送器 器件已接收到发送数据,并已准备好接收更多数据。 ACK 的结果会被放入 SSPxCON2 寄存器的 ACKSTAT 位中。 当 AHEN 和 DHEN 位置 1 时,从器件软件允许用户设 置要回送到发送器的 ACK 值。用户可以通过置 1/ 清零 SSPxCON2 寄存器的 ACKDT 位来决定响应。 如果 SSPxCON3 寄存器的 AHEN 和 DHEN 位清零,从 器件硬件会产生 ACK 响应。 有一些条件下,从器件不会发送 ACK。如果在接收到数 据字节时, SSPxSTAT 寄存器的 BF 位或 SSPxCON1 寄存器的 SSPxOV 位置 1。 对模块进行寻址时,在总线上的第 8 个 SCLx 下降沿之 后,SSPxCON3 寄存器的 ACKTIM 位会置 1。ACKTIM 位用于指示有效总线的应答时间。 ACKTIM 状态位仅在 AHEN 位或 DHEN 位使能时有效。 15.5 I2C 从模式操作 MSSPx 从模式可以在 4 种模式下工作,这些模式通过 SSPxCON1 寄存器的 SSPxM 位进行选择。这些模式可 以分为 7 位和 10 位寻址模式。10 位寻址模式的工作方 式与 7 位寻址模式相同,只是在处理较大地址时需要一 些额外的开销。 带启动位和停止位中断的模式的工作方式与其他模式相 同,只是在检测到启动、重复启动或停止条件时,另外 会将 SSPxIF 置 1。 15.5.1 从模式地址 SSPxADD 寄存器(寄存器 15-6)包含从模式地址。在 启动或重复启动条件之后接收到的第一个字节将与该寄 存器中的存储值进行比较。如果字节匹配,则值会被装 入 SSPxBUF 寄存器,并产生中断。如果值不匹配,则 模块会进入空闲状态,并且不会向软件指示是否发生了 什么情况。 SSPx 掩码寄存器(寄存器 15-5)会影响地址匹配过程。 更多信息,请参见第 15.5.9 节 “SSPx 掩码寄存器 ”。 15.5.1.1 I2C 从器件 7 位寻址模式 在 7 位寻址模式下,在确定地址是否匹配时,所接收数 据字节的 LSb 会被忽略。 15.5.1.2 I2C 从器件 10 位寻址模式 在 10 位寻址模式下,接收到的第一个字节将与二进制值 “1 1 1 1 0 A9 A8 0” 进行比较。 A9 和 A8 是 10 位 地址的两个 MSb,存储在 SSPxADD 寄存器的 bit 2 和 bit 1 中。 在应答高字节之后, UA 位会置 1, SCLx 会保持低电 平,直到用户使用低地址更新 SSPxADD 为止。在低地 址字节送入之后,全部 8 位将与 SSPxADD 中的低地址 值进行比较。即使地址不匹配,SSPxIF 和 UA 也会置 1, SCLx 会保持低电平,直到 SSPxADD 发生更新可再次 接收高字节为止。当 SSPxADD 发生更新时, UA 位会 被清零。这可以确保模块准备好在下一次通信时接收高 地址字节。 在所有 10 位寻址通信开始时,都需要以写请求方式进 行高地址和低地址匹配。在寻址到从器件后,通过发出 重复启动条件并随着时钟移入 R/W 位置 1 的高地址字节 来启动数据发送。然后,从器件硬件将会应答读请求, 并准备好随着时钟移出数据。这只有在从器件接收到完 全匹配的高地址和低地址字节之后才有效。 DS41412F_CN 第 226 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.5.2 从接收 当接收到的匹配地址字节的 R/W 位清零时,SSPxSTAT 寄 存 器 的 R/W 位 会 清 零。接 收 到 的 地址被装入 SSPxBUF 寄存器并产生应答。 当接收到的地址存在溢出条件时,将会产生无应答信 号。溢出条件定义为 SSPxSTAT 寄存器的 BF 位被置 1, 或SSPxCON1寄存器的SSPxOV位被置1。SSPxCON3 寄存器的 BOEN 位会修改该操作。更多信息,请参见 寄存器 15-4。 每个传输的数据字节都会产生 MSSPx 中断。标志位 SSPxIF 必须用软件清零。 当 SSPxCON2 寄存器的 SEN 位被置 1 时,SCLx 将在 接收到每个字节后保持低电平(时钟延长)。必须通过将 SSPxCON1 寄存器的 CKP 位置 1 来释放时钟, 10 位模 式下的特殊情况除外。更多详细信息,请参见第 15.2.3 节 “SPI 主模式 ”。 15.5.2.1 7 位寻址接收 本节介绍在7位寻址模式下,配置为I2C从器件的MSSPx 模块的标准事件序列。还描述了由硬件或软件作出的所 有决定及其对接收的影响。图 15-14 和图 15-15 用直观 的方式对此作了说明。 以下列出了实现 I2C 通信时通常必须完成的步骤。 1. 检测到启动位。 2. SSPxSTAT 的 S 位置 1 ;如果允许在检测到启动 条件时产生中断,则 SSPxIF 会置 1。 3. 接收到 R/W 位清零的匹配地址。 4. 从器件通过将 SDAx 下拉为低电平而向主器件发 送 ACK,并将 SSPxIF 位置 1。 5. 用软件清零 SSPxIF 位。 6. 软件从 SSPxBUF 中读取接收的地址,使 BF 标 志清零。 7. 如果 SEN = 1,从器件软件会通过将 CKP 位置 1 来释放 SCLx 线。 8. 主器件送出数据字节。 9. 从器件通过将 SDAx 驱动为低电平而向主器件发 送 ACK,并将 SSPxIF 位置 1。 10. 用软件清零 SSPxIF。 11. 软件从SSPxBUF中读取接收的字节,使BF清零。 12. 对于从主器件接收到的所有字节重复步骤 8-12。 13. 主器件发送停止条件,将 SSPxSTAT 的 P 位置 1, 总线变为空闲状态。 15.5.2.2 使用 AHEN 和 DHEN 时的 7 位接收 在 AHEN 和 DHEN 置 1 时,从器件接收的工作方式与不 使用这些选项时的工作方式相同,只是在 SCLx 的第 8 个 下降沿之后添加了额外的中断和时钟延长。这些额外中 断允许从器件软件决定是否应答(ACK)接收的地址或 数据字节,而不是由硬件决定。该功能增加了对于该模 块先前版本中未提供的 PMBus™ 的支持。 以下列表介绍了要对 I2C 通信使用这些选项时,从器件 软件需要执行的步骤。图 15-16 显示了同时使用地址和 数据保持功能的模块。图 15-17 包含了 SSPxCON2 寄 存器的 SEN 位置 1 时的操作。 1. SSPxSTAT 的 S 位置 1 ;如果允许在检测到启动 条件时产生中断,则 SSPxIF 会置 1。 2. R/W 位清零的匹配地址随时钟移入。在 SCLx 的 第 8 个下降沿之后, SSPxIF 置 1, CKP 清零。 3. 从器件清零 SSPxIF。 4. 从器件可以查看 SSPxCON3 寄存器的 ACKTIM 位,以确定 SSPxIF 是在ACK 之前还是之后置1。 5. 从器件从 SSPxBUF 中读取地址值,使 BF 标志 清零。 6. 从器件通过设置 ACKDT 来设置要送到主器件的 ACK 值。 7. 从器件通过将 CKP 置 1 来释放时钟。 8. SSPxIF 会在 ACK 之后置 1,不会在 NACK 之后 置 1。 9. 如果 SEN = 1,从器件硬件会在 ACK 之后延长 时钟。 10. 从器件清零 SSPxIF。 注: 即使不进行时钟延长,且BF已清零,SSPxIF 仍然会在 SCLx 的第 9 个下降沿之后置 1。只 有 SSPxIF 未置 1 时,才会向主器件发送 NACK。 11. 在所接收数据字节的第 8 个 SCLx 下降沿之后, SSPxIF 置 1, CKP 清零。 12. 从器件通过查看 SSPxCON3 的 ACKTIM 位来确 定中断源。 13. 从器件从 SSPxBUF 中读取接收的数据,使 BF 清零。 14. 对于接收的每个数据字节,步骤 7-14 是相同的。 15. 从器件发送 ACK = 1 或主器件发送停止条件可结 束通信。如果发送了停止条件且禁止了停止条件 检测中断,则从器件只能通过查询 SSTSTAT 寄 存器的 P 位才能知道停止条件。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 227 页 PIC18(L)F2X/4XK22 图 15-14: DS41412F_CN 第 228 页 I2C 从模式, 7 位地址,接收 (SEN = 0, AHEN = 0, DHEN = 0) SDAx SCLx S 接收地址 A7 A6 A5 A4 A3 A2 A1 ACK 从从器件到主器件 总线主器件发送 停止条件 接收数据 接收数据 ACK = 1 D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0 1 2 34 5 67 891 2 34 5 67 8 91 2 34 5 67 89 P SSPxIF BF SSPxOV 用软件清零 SSPxBUF 被读取 用软件清零 第一个数据字节在 SSPxBUF 中可用 SSPxOV 置 1,因为 SSPxBUF 仍为满。 不发送 ACK。 在 SCLx 的第 9 个下降沿 将 SSPxIF 置 1  2011-2013 Microchip Technology Inc. DS41412F_CN 第 229 页  2011-2013 Microchip Technology Inc. SDAx SCLx S SSPxIF BF SSPxOV CKP 接收地址 A7 A6 A5 A4 A3 A2 A1 R/W=0 ACK 接收数据 D7 D6 D5 D4 D3 D2 D1 D0 ACK 总线主器件发送 停止条件 接收数据 ACK D7 D6 D5 D4 D3 D2 D1 D0 1 234 5 67 89 SEN 1 2 3 4 5 6 7 8 9 SEN 1 2 3 4 5 6 7 8 9 P 时钟保持低电平,直到 CKP 设置为 1 用软件清零 SSPxBUF 被读取 用软件向 CKP 写入 1, 释放 SCLx 用软件清零 在 SCLx 的 第 9 个下降沿 将 SSPxIF 置 1 第一个数据字节在 SSPXBUF 中可用 SSPxOV 置 1,因为 SSPxBUF 仍为满。 不发送 ACK。 用软件向 CKP 写入 1, 释放 SCLx SCLx 未保持 低电平,因为 ACK= 1 PIC18(L)F2X/4XK22 I2C 从模式, 7 位地址,接收 (SEN = 1, AHEN = 0, DHEN = 0) 图 15-15:  2011-2013 Microchip Technology Inc. DS41412F_CN 第 230 页 SDAx SCLx S SSPxIF BF ACKDT CKP ACKTIM S P 主器件释放 SDAx 到从器件, 以便从器件产生 ACK 序列 接收地址 A7 A6 A5 A4 A3 A2 A1 接收数据 ACK D7 D6 D5 D4 D3 D2 D1 D0 12 3 4 56 7 8 91 2 3 45 67 8 如果 AHEN = 1: SSPxIF 置 1 从 SSBUF 中读取地址 从器件软件清零 ACKDT, 以应答(ACK)接收的字节 当 AHEN=1 时; CKP 由硬件清零, SCLx 被延长 ACKTIM 由硬件在 SCLx 的 第 8 个下降沿置 1 SSPxIF 在 SCLx 的 第 9 个下降沿置 1, 在 ACK 之后 当 DHEN=1 时: CKP 由硬件在 SCLx 的 第 8 个下降沿清零 ACKTIM 由硬件在 SCLx 的 第 9 个上升沿清零 ACK 接收数据 D7 D6 D5 D4 D3 D2 D1 D0 91234 5678 主器件发送 停止条件 ACK=1 9 P 用软件清零 从 SSPxBUF 中读取数据 从器件软件 将 ACKDT 设置为 无 ACK 用软件将 CKP 置 1, SCLx 被释放 如果从器件无 ACK, 则不产生中断 ACKTIM 由硬件在 SCLx 的 第 8 个下降沿置 1 I2C 从模式, 7 位地址,接收 (SEN = 0, AHEN = 1, DHEN = 1) 图 15-16: PIC18(L)F2X/4XK22 DS41412F_CN 第 231 页  2011-2013 Microchip Technology Inc. SDAx R/W = 0 接收地址 A7 A6 A5 A4 A3 A2 A1 主器件释放 SDAx 到从器件, 以便从器件产生 ACK 序列 ACK 接收数据 D7 D6 D5 D4 D3 D2 D1 D0 SCLx S 1 23 45 67 8 9 1 23 45 67 8 ACK 9 SSPxIF BF ACKDT CKP 接收的地址 装入 SSPxBUF 从器件软件清零 ACKDT, 以应答(ACK )接收的字节 当 AHEN = 1 时; 在地址字节的第 8 个 SCLx 下降沿,CKP 清零 ACKTIM S ACKTIM 由硬件在 SCLx 的 第 8 个下降沿置 1 P 用软件清零 接收的数据在 SSPxBUF 中可用 当 DHEN = 1 时; 在所接收数据字节的 第 8 个 SCLx 下降沿, CKP 清零 ACKTIM 由硬件在 SCLx 的 第 9 个上升沿清零 接收数据 D7 D6 D5 D4 D3 D2 D1 D0 1 2 345 67 8 SSPxBUF 可以在装入下一个 字节之前的任意时刻读取 从器件发送无 ACK 用软件置 1, 释放 SCLx ACK 主器件发送 停止条件 9 P 如果从器件无 ACK, 则不产生中断 如果无 ACK, 则 CKP 不清零 PIC18(L)F2X/4XK22 I2C 从模式, 7 位地址,接收 (SEN = 1, AHEN = 1, DHEN = 1) 图 15-17: PIC18(L)F2X/4XK22 15.5.3 从发送 当输入地址字节的 R/W 位置 1 并发生地址匹配时, SSPxSTAT 寄存器的 R/W 位被置 1。接收到的地址会被 装入 SSPxBUF 寄存器,并且从器件会在第 9 个位发送 ACK 脉冲。 在 ACK 之后,从器件硬件会清零 CKP 位,并且 SCLx 引 脚保持低电平 (更多详细信息,请参见第 15.5.6 节 “ 时 钟延长 ”)。通过延长时钟,主器件只有在从器件准备好 发送数据时,才发出另一个时钟脉冲。 发送的数据必须被装入 SSPxBUF 寄存器,同时该数据 也会 被 装 入 SSPxSR 寄 存 器。然 后,应 通过将 SSPxCON1 寄存器的 CKP 位置 1 来释放 SCLx 引脚。 8 个数据位在 SCLx 输入的下降沿被移出。这可确保在 SCLx 为高电平期间 SDAx 信号是有效的。 来自主接收器的 ACK 脉冲将在第 9 个 SCLx 输入脉冲的 上升沿锁存。该 ACK 值会被复制到 SSPxCON2 寄存器 的 ACKSTAT 位中。如果 ACKSTAT 置 1(无 ACK 应答 信号) ,那么表示数据传输已完成。这种情况下,在从 器件锁存无 ACK 时,从器件会进入空闲状态,并等待出 现另一个启动位。如果 SDAx 线为低电平 (ACK),则 必须将下一个要发送的数据装入 SSPxBUF 寄存器。同 样,必须通过将 CKP 位置 1 来释放 SCLx 引脚。 每 传 输 一 个 数 据 字 节 都 会 产 生 一 个 MSSPx 中断。 SSPxIF 位必须用软件清零, SSPxSTAT 寄存器用于确 定字节的状态。 SSPxIF 位在第 9 个时钟脉冲的下降沿 被置 1。 15.5.3.1 从模式总线冲突 从器件接收到读请求,开始在 SDAx 线上移出数据。如 果检测到总线冲突,SSPxCON3 寄存器的 SBCDE 位会 置 1, PIRx 寄存器的 BCLxIF 位会置 1。在检测到总线 冲突时,从器件会变为空闲状态,等待再次被寻址。用 户软件可以通过使用 BCLxIF 位来处理从器件总线冲 突。 15.5.3.2 7 位发送 主器件可以向从器件发送读请求,然后从从器件中移出 数据。以下列表列出了在实现标准数据发送时,从器件 软件需要执行的操作。图 15-18 可用作该列表的参考。 1. 主器件在 SDAx 和 SCLx 上发送一个启动条件。 2. SSPxSTAT 的 S 位置 1 ;如果允许在检测到启动 条件时产生中断,则 SSPxIF 会置 1。 3. 从器件接收到 R/W 位置 1 的匹配地址,并将 SSPxIF 位置 1。 4. 从器件硬件产生 ACK,并将 SSPxIF 置 1。 5. 用户将 SSPxIF 位清零。 6. 软件从SSPxBUF中读取接收的地址,使BF清零。 7. R/W 置 1,所以 CKP 会在 ACK 之后自动清零。 8. 从器件软件将发送数据装入 SSPxBUF。 9. CKP 位置 1,释放 SCLx,使主器件可以从从器 件中移出数据。 10. 来自主器件的 ACK 响应装入 ACKSTAT 寄存器 之后, SSPxIF 置 1。 11. SSPxIF 位清零。 12. 从器件软件通过检查 ACKSTAT 位来确定主器件 是否要移出更多数据。 注 1: 如果主器件应答(ACK),时钟将被延长。 2: ACKSTAT 是惟一一个在 SCLx 上升沿 (第 9 个)而不是下降沿发生更新的位。 13. 对于每个发送字节重复步骤 9-13。 14. 如果主器件发送无 ACK,则不会保持时钟,但 SSPxIF 仍然会置 1。 15. 主器件发送重复启动条件或停止条件。 16. 从器件不再被寻址。 DS41412F_CN 第 232 页  2011-2013 Microchip Technology Inc. DS41412F_CN 第 233 页  2011-2013 Microchip Technology Inc. SDAx SCLx S SSPxIF BF CKP ACKSTAT R/W D/A S P 接收地址 R/W = 1 A7 A6 A5 A4 A3 A2 A1 ACK 123456789 自动 主器件发送 停止条件 发送数据 自动 发送数据 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0 123456789 12345678 9 P 从 SSPxBUF 中读取 接收到的地址 当 R/W 置 1 时, SCLx 在第 9 个 SCLx 下降沿之后总是保持低电平 用软件清零 将要发送的数据 装入 SSPxBUF 用软件置 1 复制匹配地址字节的 R/W 指示接收到地址 BF 在 SCLx 的第 8 个 下降沿之后自动清零 如果无 ACK, 则不会保持 CKP 主器件的无 ACK 被复制到 ACKSTAT PIC18(L)F2X/4XK22 I2C 从模式, 7 位地址,发送 (AHEN = 0) 图 15-18: PIC18(L)F2X/4XK22 15.5.3.3 使能地址保持时的 7 位发送 将 SSPxCON3 寄存器的 AHEN 位置 1 时,器件会在所 接收匹配地址的第 8 个下降沿之后延长时钟和产生中 断。在匹配地址送入之后,CKP 会清零,SSPxIF 中断 标志会置 1。 图 15-19 给出了在使能 AHEN 时 7 位地址从发送的标准 波形图。 1. 总线启动时为空闲模式。 2. 主器件发送启动条件; SSPxSTAT 的 S 位置 1 ; 如 果 允 许 在 检 测 到 启 动 条 件 时 产 生 中 断,则 SSPxIF 会置 1。 3. 主器件发送 R/W 位置 1 的匹配地址。在 SCLx 线 的第 8 个下降沿之后, CKP 位清零,并产生 SSPxIF 中断。 4. 从器件软件清零 SSPxIF。 5. 从器件软件读取 SSPxCON3 寄存器的 ACKTIM 位,以及 SSPxSTAT 寄存器的 R/W 和 D/A 位, 以确定中断源。 6. 从器件从 SSPxBUF 寄存器中读取地址值,使 BF 位清零。 7. 从器件软件根据该信息确定它是产生 ACK 还是 产生无 ACK,并相应地设置 SSPxCON2 寄存器 的 ACKDT 位。 8. 从器件将 CKP 位置 1,释放 SCLx。 9. 主器件移入来自从器件的 ACK 值。 10. 如果 R/W 位置 1,则在 ACK 之后,从器件硬件 会自动将 CKP 位清零,将 SSPxIF 置 1。 11. 从器件软件清零 SSPxIF。 12. 从器件将要发送给主器件的值装入 SSPxBUF, 使 BF 位置 1。 注: 只有在 ACK 之后,才能装入 SSPxBUF。 13. 从器件将 CKP 位置 1,释放时钟。 14. 主器件从从器件中移出数据,并在第 9 个 SCLx 脉冲发送 ACK 值。 15. 从器件硬件将 ACK 值复制到 SSPxCON2 寄存器 的 ACKSTAT 位中。 16. 对于从从器件发送到主器件的每个字节重复步骤 10-15。 17. 如果主器件发送无 ACK,从器件会释放总线,让 主器件可以发送停止条件和结束通信。 注: 主器件必须对于最后一个字节发送无 ACK, 以确保从器件释放SCLx线来接收停止条件。 DS41412F_CN 第 234 页  2011-2013 Microchip Technology Inc. 图 15-19:  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 I2C 从模式, 7 位地址,发送 (AHEN = 1) SDAx SCLx S SSPxIF BF ACKDT 主器件释放 SDAx 到从器件, 以便从器件产生 ACK 序列 接收地址 R/W = 1 A7 A6 A5 A4 A3 A2 A1 自动 ACK 发送数据 自动 D7 D6 D5 D4 D3 D2 D1 D0 ACK 12345678 9 123456789 从 SSPxBUF 中读取 接收到的地址 从器件清零 ACKDT, 以应答(ACK)地址 用软件清零 将要发送的数据 装入 SSPxBUF 主器件发送 停止条件 发送数据 ACK D7 D6 D5 D4 D3 D2 D1 D0 12345678 9 P BF 在 SCLx 的第 8 个 下降沿之后自动清零 ACKSTAT CKP ACKTIM R/W D/A 当 AHEN = 1 时; CKP 由硬件在接收到 匹配地址之后清零 ACKTIM 在 SCLx 的 第 8 个下降沿置 1 当 R/W = 1 时; CKP 总是在 ACK 之后清零 用软件置 1, 释放 SCLx ACKTIM 在 SCLx 的 第 9 个上升沿清零 将主器件的 ACK 响应 复制到 SSPxSTAT 如果无 ACK, 则 CKP 不清零 DS41412F_CN 第 235 页 PIC18(L)F2X/4XK22 15.5.4 从模式 10 位地址接收 本节介绍在 10 位寻址模式下,配置为 I2C 从器件的 MSSPx 模块的标准事件序列(图 15-20),并用直观的 方式对此作了说明。 以下列出了实现 I2C 通信时从器件软件必须完成的步骤。 1. 总线启动时为空闲模式。 2. 主器件发送启动条件; SSPxSTAT 的 S 位置 1 ; 如 果 允 许 在 检 测 到 启 动 条 件 时 产 生 中 断,则 SSPxIF 会置 1。 3. 主器件发送R/W位清零的匹配高地址;SSPxSTAT 寄存器的 UA 位置 1。 4. 从器件发送 ACK, SSPxIF 置 1。 5. 用软件清零 SSPxIF 位。 6. 软件从 SSPxBUF 中读取接收的地址,使 BF 标 志清零。 7. 从器件将低地址装入 SSPxADD,释放 SCLx。 8. 主器件向从器件发送匹配的低地址字节; UA 位 置 1。 注: 只有在ACK序列之后,才允许更新SSPxADD 寄存器。 9. 从器件发送 ACK, SSPxIF 置 1。 注: 如果低地址不匹配,SSPxIF 和 UA仍然会置 1, 从而让从器件软件可以将 SSPxADD 恢复为 高地址。由于不匹配,BF 不会置 1。CKP 不 受影响。 10. 从器件清零 SSPxIF。 11. 从器件从 SSPxBUF 中读取接收的匹配地址,使 BF 清零。 12. 从器件将高地址装入 SSPxADD。 13. 主器件随着时钟将数据字节移入从器件,并在第 9 个 SCLx 脉冲随着时钟将 ACK 移出从器件; SSPxIF 置 1。 14. 如果 SSPxCON2 的 SEN 位置 1,CKP 会被硬件 清零,时钟会被延长。 15. 从器件清零 SSPxIF。 16. 从器件从 SSPxBUF 中读取接收的字节,使 BF 清零。 17. 如果 SEN 置 1,从器件会将 CKP 置 1,以释放 SCLx。 18. 对于接收的每个字节重复步骤 13-17。 19. 主器件发送停止条件来结束数据发送。 15.5.5 带地址或数据保持的 10 位寻址 在 AHEN 或 DHEN 置 1 时,使用 10 位寻址的接收方式 与 7 位模式相同。惟一的区别是需要使用 UA 位来更新 SSPxADD 寄存器。所有功能(特别是在 CKP 位清零, SCLx 线保持低电平时)都是相同的。图 15-21 可以用 作 AHEN 置 1 时 10 位寻址模式下从器件的参考图示。 图15-22给出了10位寻址模式下从发送器的标准波形图。 DS41412F_CN 第 236 页  2011-2013 Microchip Technology Inc. 图 15-20:  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 I2C 从模式, 10 位地址,接收 (SEN = 1, AHEN = 0, DHEN = 0) 主器件发送 停止条件 SDAx 接收第一个地址字节 1 1 1 1 0 A9 A8 ACK 接收第二个地址字节 A7 A6 A5 A4 A3 A2 A1 A0 ACK 接收数据 接收数据 D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK SCLx 1 23456789 1 23456789 1 23456789 1 23456789 P S 在 CKP = 0 时, SCLx 保持低电平 SSPxIF 在第 9 个下降沿 由硬件置 1 用软件清零 BF 如果地址匹配, SSPxADD 会被装入 SSPxBUF 从 SSPxBUF 中 读取接收到的地址 从 SSPXBUF 中 读取数据 UA CKP 当 UA = 1 时; SCLx 保持低电平 软件更新 SSPxADD 并释放 SCLx 当 SEN = 1 时; 在所接收字节的第 9 个 下降沿之后,CKP 清零 用软件置 1, 释放 SCLx DS41412F_CN 第 237 页 PIC18(L)F2X/4XK22 图 15-21: DS41412F_CN 第 238 页 SDAx 接收第一个地址字节 R/W = 0 1 1 1 1 0 A9 A8 ACK 接收第二个地址字节 A7 A6 A5 A4 A3 A2 A1 A0 ACK 接收数据 接收数据 D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 SCLx S 12345678 9 UA 1 2 3 4 5 6 7 8 9 UA 1 2 3 4 5 6 7 8 9 1 2 I2C 从模式, 10 位地址,接收 (SEN = 0, AHEN = 1, DHEN = 0) SSPxIF BF ACKDT UA 在第 9 个下降沿 由硬件置 1 从器件软件清零 ACKDT, 以应答(ACK )接收的字节 CKP ACKTIM 当 AHEN = 1 时; 在地址字节的第 8 个 SCLx 下降沿,CKP 清零 ACKTIM 由硬件在 SCLx 的第 8 个下降沿置 1 用软件清零 SSPxBUF 可以 在接收到下一个字节 之前的任意时刻读取 只有在 SCLx 的第 9 个下降沿 之后,才允许更新 SSPxADD 用软件清零 从 SSPxBUF 中读取接收到 的数据 SSPxADD 发生更新, 清零 UA 并释放 SCLx 用软件将 CKP 置 1, 释放 SCLx  2011-2013 Microchip Technology Inc. 图 15-22:  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 I2C 从模式, 10 位地址,发送 (SEN = 0, AHEN = 0, DHEN = 0) SDAx 接收地址 R/W = 0 1 1 1 1 0 A9 A8 ACK 主器件发送 重复启动事件 接收第二个地址字节 A7 A6 A5 A4 A3 A2 A1 A0 ACK 接收第一个地址字节 1 1 1 1 0 A9 A8 ACK 主器件发送 无 ACK 主器件发送 停止条件 发送数据字节 ACK = 1 D7 D6 D5 D4 D3 D2 D1 D0 SCLx S 123456789 SSPxIF BF UA CKP 由硬件置 1 SSPxBUF 中装入 接收到的地址 UA 指示 SSPxADD 必须进行更新 ACKSTAT 1 2 3 4 56 78 9 1 23 4 56 78 9 Sr 用软件清零 由硬件置 1 在 SSPxADD 发生更新之后, UA 清零并且 SCLx 被释放 从 SSPxBUF 中读取 接收到的地址 高地址装回到 SSPxADD 中 当 R/W = 1 时; CKP 在 SCLx 的第 9 个下降沿清零 R/W D/A 指示接收到地址 复制匹配地址字节的 R/W 12345 67 89 P 将要发送的数据 装入 SSPxBUF 用软件置 1, 释放 SCLx 复制主器件的无 ACK DS41412F_CN 第 239 页 PIC18(L)F2X/4XK22 15.5.6 时钟延长 当总线上的某个器件将 SCLx 线保持为低电平而有效暂 停通信时,就发生了时钟延长现象。从器件可以延长时 钟,以便可以有更多时间来处理数据或准备响应主器 件。时钟延长时并不关心主器件的工作,因为任何时候 只需总线上主器件处于活动状态但是不传输数据就可以 被认为是时钟延长。由从器件进行的任何时钟延长对于 主器件软件都是不可见的,都由产生 SCLx 的硬件进行 处理。 SSPxCON1 寄存器的 CKP 位用于在软件中控制时钟延 长。每当 CKP 位清零时,模块就会等待 SCLx 线变为低 电平,然后保持低电平状态不变。将 CKP 置 1 将会释 放 SCLx,允许继续进行通信。 15.5.6.1 正常时钟延长 如果 SSPxSTAT 的 R/W 位置 1 (读请求),则在 ACK 之后,从器件硬件会清零 CKP。这让从器件可以有时间 使 用 要 传 输 给 主 器 件 的 数 据 更 新 SSPxBUF。如果 SSPxCON2 的 SEN 位置 1,则在 ACK 序列之后,从器 件将总是延长时钟。在从器件就绪之后,软件会将 CKP 置 1,并继续进行通信。 注 1: BF 位对于是否延长时钟没有任何影响。这 一点与模块的先前版本不同:如果在 SCLx 的第 9 个下降沿之前读取了 SSPxBUF, 先前版本将不会延长时钟,并清零 CKP。 2: 如果在 SCLx 的第 9 个下降沿之前装入 SSPxBUF,则模块的先前版本不会为数 据发送延长时钟。现在,对于读请求,总 是会将该位清零。 图 15-23: 时钟同步时序 15.5.6.2 10 位寻址模式 在 10 位寻址模式下,当 UA 位置 1 时,时钟总是会被 延长。这是无需清零 CKP 就会延长 SCLx 的惟一情形。 在写入 SSPxADD 之后, SCLx 会立即被释放。 注: 如果第二个地址字节不匹配,先前版本的模 块不会延长时钟。 15.5.6.3 字节无应答 当 SSPxCON3 的 AHEN 位置 1 时,则在所接收匹配地 址字节的第 8 个 SCLx 下降沿之后,硬件会将 CKP 清 零。当 SSPxCON3 的 DHEN 位置 1 时,则在所接收数 据的第 8 个 SCLx 下降沿之后, CKP 会被清零。 通过在 SCLx 的第 8 个下降沿之后延长时钟,从器件可 以检查接收到的地址或数据,并确定是否要应答接收到 的数据。 15.5.7 时钟同步和 CKP 位 每当 CKP 位清零时,模块就会等待 SCLx 线变为低电 平,然后保持低电平状态不变。但是,清零 CKP 位并 不会将 SCLx 输出置为低电平,只有在已经采样到 SCLx 输出为低电平之后才会。因此,CKP 位不会将 SCLx 线 拉为低电平,除非外部 I2C 主器件已将 SCLx 线拉为低 电平。 SCLx 输出将保持低电平,直到 CKP 位置 1 且 I2C 总线上的所有其他器件已释放 SCLx 为止。这可以 确保对 CKP 位的写操作不会违反 SCLx 的最短高电平时 间要求 (见图 15-23)。 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 SDAx SCLx CKP 写 SSPxCON1 DX 主器件 使时钟有效 主器件 释放时钟 DX – 1 DS41412F_CN 第 240 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.5.8 广播呼叫地址支持 在 I2C 总线的寻址过程中,通常由启动条件后的第一个 字节决定主器件将寻址哪个从器件。但广播呼叫地址例 外,它能寻址所有器件。当使用这个地址时,理论上所 有器件都应该发送一个应答信号来响应。 广播呼叫地址是 I2C 协议中的保留地址,定义为地址 0x00。如果 SSPxCON2 寄存器的 GCEN 位置 1,则无 论 SSPxADD 中存储的值如何,在接收到该地址时,从 模块都会自动发送 ACK。在从器件移入 R/W 位清零的 全零地址之后,将会产生中断,从器件软件可以读取 SSPxBUF 并进行响应。图 15-24 显示了广播呼叫接收 序列。 在 10 位地址模式下,UA 位不会在接收到广播呼叫地址 时置 1。从器件会准备接收作为数据的第二个字节,这 与在 7 位模式下相同。 如果 SSPxCON3 寄存器的 AHEN 位置 1,则与接收到任 意其他地址时相同,从器件硬件会在 SCLx 的第 8 个下降 沿之后延长时钟。然后,从器件必须与正常情况下一样, 设置它的 ACKDT 值,并释放时钟来继续进行通信。 图 15-24: SDAx 从模式广播呼叫地址序列 广播呼叫地址 ACK 之后,地址与广播呼叫地址作比较, 产生中断 R/W = 0 接收数据 ACK ACK D7 D6 D5 D4 D3 D2 D1 D0 SCLx SSPxIF S 1 2 34 5 6 78 91 2 34 5 6 78 9 BF(SSPxSTAT<0>) GCEN(SSPxCON2<7>) 用软件清零 SSPxBUF 被读取 ’1’ 15.5.9 SSPx 掩码寄存器 SSPx 掩码 (SSPxMSK)寄存器 (寄存器 15-5)在 I2C 从模式下可用,用作地址比较操作期间 SSPxSR 寄 存器中保存的值的掩码。SSPxMSK 寄存器中的零(0) 位可使接收地址中相应位变为 “ 无关位 ”。 发生任何复位条件时,该寄存器都会复位到全 1 状态, 因此,在写入掩码值之前对标准 SSPx 操作没有影响。 SSPx 掩码寄存器在以下期间保持有效: • 7 位地址模式:A<7:1> 的地址比较。 • 10 位地址模式:仅针对 A<7:0> 的地址比较。在接 收地址的第一个 (高)字节期间, SSPx 掩码没有 影响。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 241 页 PIC18(L)F2X/4XK22 15.6 I2C 主模式 通过将 SSPxCON1 中的相应 SSPxM 位置 1 和清零, 同时将 SSPxEN 位置 1,可以使能主模式。在主模式 下, SCLx 和 SDAx 线被设置为输入,由 MSSPx 硬件 操作。 通过在检测到启动和停止条件时产生中断来支持主工作 模式。停止(P)位和启动(S)位在复位或禁止 MSSPx 模块时清零。当 P 位置 1 或总线空闲时,可取得 I2C 的 控制权。 在固件控制的主模式下,用户代码根据启动位和停止位 条件检测执行所有的 I2C 总线操作。在该模式下,启动 和停止条件检测是惟一有效的电路。所有其他通信都通 过用户软件直接操作 SDAx 和 SCLx 线来完成。 以下事件会使 SSPx 中断标志位 SSPxIF 置 1 (如果允 许 SSPx 中断,则产生中断): • 检测到启动条件 • 检测到停止条件 • 数据传输字节发送 / 接收 • 应答发送 / 接收 • 产生重复启动条件 注 1: 当配置为 I2C 主模式时,MSSPx 模块不允 许事件排队。例如,在启动条件结束前, 不允许用户发出启动条件以及立即写 SSPxBUF 寄存器以启动传输。在这种情 况下,将不会执行写 SSPxBUF, WCOL 位将被置 1,指示没有发生对 SSPxBUF 的写操作。 2: 处于主模式时,如果 SEN/PEN 位清零, 并且启动 / 停止条件完成,则会屏蔽启动 / 停止检测和产生中断。 15.6.1 I2C 主模式操作 主器件产生所有的串行时钟脉冲、启动条件和停止条 件。以停止条件或重复启动条件结束传输过程。因为重 复启动条件也是下一次串行传输的开始,因此 I2C 总线 不会被释放。 在主发送器模式下,串行数据通过 SDAx 输出,而串行 时钟由 SCLx 输出。发送的第一个字节包括接收器件的 从器件地址 (7 位)和读 / 写 (R/W)位。在这种情况 下,R/W 位将为逻辑 0。一次发送 8 位串行数据。每发 送一个字节,都会接收到一个应答位。输出启动和停止 条件指示串行传输的开始和结束。 在主接收模式下,发送的第一个字节包括发送器件的从 器件地址 (7 位)和 R/W 位。在这种情况下, R/W 将 为逻辑 1。因此,发送的第一个字节是一个 7 位从器件 地址,后跟 1 指示接收位。串行数据通过 SDAx 接收, 而串行时钟由 SCLx 输出。一次接收 8 位串行数据。每 接收到一个字节,都会发送一个应答位。启动和停止条 件指示发送的开始和结束。 波特率发生器用于设置从 SCLx 输出的时钟频率。更多 详细信息,请参见第 15.7 节 “ 波特率发生器 ”。 DS41412F_CN 第 242 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.6.2 时钟仲裁 如果在任何接收、发送或重复启动 / 停止条件期间,主 器件释放了 SCLx 引脚 (允许 SCLx 悬空为高电平), 就会发生时钟仲裁。当允许SCLx引脚悬空为高电平时, 波特率发生器 (Baud Rate Generator, BRG)暂停计 数,直到 SCLx 引脚被实际采样到高电平为止。当 SCLx 引 脚 被 采 样 到 高 电 平 时,波 特 率 发 生 器 重 新 装 入 SSPxADD<7:0> 的内容并开始计数。这可以确保在外部 器件将时钟保持低电平时,SCLx 在至少一个 BRG 计满 返回计数周期内总是保持高电平 (图 15-25)。 图 15-25: 带有时钟仲裁的波特率发生器时序 SDAx SCLx BRG 值 BRG 重载 DX DX – 1 SCLx 被试图拉为高电平,但从器件将 SCLx 保持为低电平(时钟仲裁) 允许 SCLx 变为高电平 BRG 在 Q2 和 Q4 周期 进行递减计数 03h 02h 01h 00h(延时) 03h 02h SCLx 采样为高电平, BRG 被重载并开始计数 15.6.3 WCOL 状态标志 如果在启动、重复启动、停止、接收或发送序列过程中 用户写 SSPxBUF,则 WCOL 被置 1,同时缓冲区内容不 变 (未发生写操作)。每当 WCOL 位置 1 时,它指示在 模块不处于空闲状态时对 SSPxBUF 尝试了某个操作。 注: 由于不允许事件排队,在启动条件结束之 前,不能写 SSPxCON2 的低 5 位。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 243 页 PIC18(L)F2X/4XK22 15.6.4 I2C 主模式启动条件时序 要发出启动条件(图 15-26),用户应将 SSPxCON2 寄 存器的启动使能位 SEN 置 1。如果 SDAx 和 SCLx 引脚 被 采 样 为 高 电 平,则 波 特 率 发 生 器 会 重 新 装 入 SSPxADD<7:0> 的内容并开始计数。如果波特率发生器 超时 (TBRG)时, SCLx 和 SDAx 都被采样为高电平, 则 SDAx 引脚被驱动为低电平。当 SCLx 为高电平时, 将 SDAx 驱 动 为 低 电 平 将 产 生 启 动 条 件,并使 SSPxSTAT1 寄存器的 S 位置 1。随后波特率发生器重 新装入 SSPxADD<7:0> 的内容并恢复计数。当波特率 发生器再次超时 (TBRG)时, SSPxCON2 寄存器的 SEN 位将自动被硬件清零;波特率 发生器暂停工作, SDAx 线保持低电平,启动条件结束。 注 1: 如果在启动条件开始时,SDAx 和 SCLx 引 脚已经采样为低电平,或者在启动条件期 间, SCLx 线在 SDAx 线被驱动为低电平 之前已经采样为低电平,则会发生总线冲 突。总线冲突中断标志位 BCLxIF 置 1,启 动条件中止, I2C 模块复位到空闲状态。 2: Philips I2C 规范规定不能在产生启动条件 时发生总线冲突。 图 15-26: 第一个启动位时序 此时写 SEN 位 将 S 位(SSPxSTAT<3>)置 1 SDAx = 1, SCLx = 1 启动位完成后, 由硬件将 SEN 位清零 并将 SSPxIF 位置 1 TBRG TBRG 此时写 SSPxBUF SDAx 第1位 SCLx TBRG S TBRG 第2位 DS41412F_CN 第 244 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.6.5 I2C 主模式重复启动条件时序 当 SSPxCON2 寄存器的 RSEN 位设定为高电平,并且 主器件状态机不再有效时,会产生重复启动条件 (图 15-27)。当 RSEN 位置 1 时, SCLx 引脚被拉为低电 平。当 SCLx 引脚被采样为低电平时,波特率发生器会 装 入值 并 开 始 计数。在 一 个 波 特率 发 生 器 计数 周 期 (TBRG)内 SDAx 引脚被释放 (拉为高电平)。当波特 率发生器超时时,如果 SDAx 被采样为高电平, SCLx 引脚将被置为无效 (拉为高电平)。当 SCLx 被采样为 高电平时,波特率发生器被重载并开始计数。 SDAx 和 SCLx 必须在一个 TBRG 内采样为高电平。接下来,在 一个 TBRG 中,将 SDAx 引脚置为有效 (SDAx = 0), 同时 SCLx 保持高电平。 SCLx 被置为低电平。随后 SSPxCON2 寄存器的 RSEN 位将自动清零,这次波特率发生器不会重载, SDAx 引脚保持低电平。一旦在 SDAx 和 SCLx 引脚上 检测到启动条件,SSPxSTAT 寄存器的 S 位就会被置 1。 SSPxIF 位在波特率发生器超时之前不会被置 1。 注 1: 有任何其他事件在进行时,编程RSEN无效。 2: 在重复启动条件期间,以下事件将会导致 总线冲突: • 当 SCLx 由低电平变为高电平时, SDAx 采样为低电平。 • 在 SDAx 被置为低电平之前, SCLx 变为低电平。这指示另一个主器件 正试图发送一个数据 1。 图 15-27: 重复启动条件波形图 SDAx 此时写 SSPxCON2 SDAx = 1, SCLx(不变) SDAx = 1, SCLx = 1 TBRG TBRG TBRG S 位由硬件置 1 启动位完成后, 由硬件将 RSEN 位清零 并将 SSPxIF 置 1 第1位 SCLx Sr 重复启动 此时写 SSPxBUF TBRG TBRG  2011-2013 Microchip Technology Inc. DS41412F_CN 第 245 页 PIC18(L)F2X/4XK22 15.6.6 I2C 主模式发送 发送一个数据字节、一个 7 位地址或一个 10 位地址的 另一半都是通过简单地向 SSPxBUF 寄存器写入一个值 来实现的。该操作将使缓冲区满标志位 BF 置 1,并使 波特率发生器开始计数和开始下一次发送。地址 / 数据 的每一位将在SCLx的下降沿置为有效之后移出到SDAx 引脚。在一个波特率发生器计满返回周期 (TBRG)内, SCLx 保持低电平。在 SCLx 被释放为高电平之前,数 据应保持有效。当 SCLx 引脚释放为高电平时,它将在 一个 TBRG 内保持高电平状态。在此期间以及 SCLx 的 下一个下降沿之后的一段时间内, SDAx 引脚上的数据 必须保持稳定。在第 8 位数据被移出(第 8 个时钟的下 降沿)之后,BF 标志被清零,同时主器件释放 SDAx。 此时如果发生地址匹配或是数据被正确接收,被寻址的 从器件将在第 9 个位时间发出一个 ACK 位作为响应。 ACK 的状态在第 9 个时钟的上升沿被写入 ACKSTAT 位。如果主器件接收到应答,应答状态位 ACKSTAT 会 被清零。如果未接收到应答,则该位被置 1。在第 9 个 时钟之后,SSPxIF 位会置 1,主时钟(波特率发生器) 暂停,直到下一个数据字节装入 SSPxBUF,SCLx 保持 低电平, SDAx 保持不变 (图 15-28)。 在写 SSPxBUF 之后,地址的每一位在 SCLx 的下降沿被 移出,直至所有 7 个地址位和 R/W 位都被移出。在第 8 个 时钟的下降沿,主器件将释放 SDAx 引脚,以允许从器 件发出一个应答响应。在第 9 个时钟的下降沿,主器件 通过采样 SDAx 引脚来判断地址是否被从器件识别。 ACK 位的状态被装入 SSPxCON2 寄存器的 ACKSTAT 状态位。在发送地址的第 9 个时钟下降沿之后,SSPxIF 置 1,BF 标志清零,波特率发生器关闭直到发生下一次 写 SSPxBUF,且 SCLx 保持低电平,允许 SDAx 悬空。 15.6.6.1 BF 状态标志 在发送模式下, SSPxSTAT 寄存器的 BF 位在 CPU 写 SSPxBUF 时置 1,在所有 8 位数据移出后清零。 15.6.6.2 WCOL 状态标志 如果在发送过程中 (即, SSPxSR 仍在移出数据字节 时)用户写 SSPxBUF,则 WCOL 被置 1,同时缓冲区 内容不变 (未发生写操作)。 在下一次发送前 WCOL 必须用软件清零。 15.6.6.3 ACKSTAT 状态标志 在发 送模式下,当 从器件发 送应答 (ACK = 0)时, SSPxCON2 寄存器的 ACKSTAT 位被清零;当从器件没 有应答 (ACK = 1)时,该位被置 1。从器件在识别出 其地址 (包括广播呼叫地址)或正确接收数据后,会发 送一个应答。 15.6.6.4 典型的发送序列: 1. 用户通过将 SSPxCON2 寄存器的 SEN 位置 1, 产生启动条件。 2. 在启动条件结束时,硬件将 SSPxIF 置 1。 3. SSPxIF 用软件清零。 4. 在进行任何其他操作前, MSSPx 模块将等待所 需的启动时间。 5. 用户将从器件地址装入 SSPxBUF 进行发送。 6. 器件地址从 SDAx 引脚移出,直到发送完所有 8 位 地址数据。数据发送会在写入 SSPxBUF 后立刻 开始。 7. MSSPx 模块移入来自从器件的 ACK 位,并将它 的值写入 SSPxCON2 寄存器的 ACKSTAT 位。 8. MSSPx 模块在第 9 个时钟周期结束时将 SSPxIF 位置 1 产生中断。 9. 用户将 8 位数据装入 SSPxBUF。 10. 数据从SDAx引脚移出,直到发送完所有8位数据。 11. MSSPx 模块移入来自从器件的 ACK 位,并将它 的值写入 SSPxCON2 寄存器的 ACKSTAT 位。 12. 对于发送的所有数据字节重复步骤 8-11。 13. 用户通过将 SSPxCON2 寄存器的 PEN 或 RSEN 位置 1,产生停止或重复启动条件。停止 / 重复 启动条件完成时产生中断。 DS41412F_CN 第 246 页  2011-2013 Microchip Technology Inc. 图 15-28:  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 I2C 主模式波形图 (发送, 7 位或 10 位地址) SDAx SCLx SSPxIF 写 SSPxCON2<0>(SEN = 1), 启动条件开始 SEN = 0 向从器件发送地址 R/W = 0 A7 A6 A5 A4 A3 A2 A1 ACK = 0 SSPxCON2 的 来自从器件,清零 ACKSTAT 位(SSPxCON2<6>) ACKSTAT = 1 发送数据或 10 位地址的后半部分 ACK D7 D6 D5 D4 D3 D2 D1 D0 将 7 位地址和 R/W 写入 SSPxBUF,开始发送 S 1 23456789 1 234 56789 P 当 CPU 响应 SSPxIF 时, SCLx 保持低电平 用软件清零 由 SSPx 中断的软件服务程序清零 用软件清零 BF(SSPxSTAT<0>) SEN 写入 SSPxBUF 启动条件之后,由硬件清零 SEN 用软件写入 SSPxBUF PEN R/W DS41412F_CN 第 247 页 PIC18(L)F2X/4XK22 15.6.7 I2C 主模式接收 通过编程 SSPxCON2 寄存器的接收使能位 RCEN 使能 主模式接收 (图 15-29)。 注: 将 RCEN 位置 1 前, MSSPx 模块必须处 于空闲状态,否则对 RCEN 位置 1 将无效。 波特率发生器开始计数,每次计满返回时, SCLx 引脚 的状态发生改变 (由高变低或由低变高),数据被移入 SSPxSR。在第 8 个时钟的下降沿之后,接收使能标志 自动清零,SSPxSR 的内容装入 SSPxBUF,BF 标志位 置 1,SSPxIF 标志位置 1,波特率发生器暂停计数,且 SCLx 保持为低电平。此时 MSSPx 处于空闲状态,等 待下一条命令。当 CPU 读缓冲区时,BF 标志位会自动 清零。通过将 SSPxCON2 寄存器的应答序列使能位 ACKEN 置 1,用户可以在接收结束时发送应答位。 15.6.7.1 BF 状态标志 在接收操作中,将地址或数据字节从 SSPxSR 装入 SSPxBUF 时,BF 位被置 1。在读 SSPxBUF 寄存器时 将其清零。 15.6.7.2 SSPxOV 状态标志 在接收操作中,当 SSPxSR 接收到 8 位数据且 BF 标志 位已经在上一次接收中置 1 时, SSPxOV 位置 1。 15.6.7.3 WCOL 状态标志 如果在接收过程中 (即, SSPxSR 仍在移入数据字节 时)用户写 SSPxBUF,则 WCOL 位被置 1,同时缓冲 区内容不变 (未发生写操作)。 15.6.7.4 典型的接收序列: 1. 用户通过将 SSPxCON2 寄存器的 SEN 位置 1, 产生启动条件。 2. 在启动条件结束时,硬件将 SSPxIF 置 1。 3. SSPxIF 用软件清零。 4. 用户将要发送的从器件地址写入SSPxBUF且R/W 位置 1。 5. 器件地址从 SDAx 引脚移出,直到发送完所有 8 位地址数据。数据发送会在写入 SSPxBUF 后立 刻开始。 6. MSSPx 模块移入来自从器件的 ACK 位,并将它 的值写入 SSPxCON2 寄存器的 ACKSTAT 位。 7. MSSPx 模块在第 9 个时钟周期结束时将 SSPxIF 位置 1 产生中断。 8. 用户将 SSPxCON2 寄存器的 RCEN 位置 1,主 器件从从器件移入一个字节。 9. 在SCLx的第8个下降沿之后,SSPxIF和BF置1。 10. 主器件清零 SSPxIF,并从 SSPxUF 中读取接收 到的字节,使 BF 清零。 11. 主器件在 SSPxCON2 寄存器的 ACKDT 位中设 置要发送给从器件的 ACK 值,并通过将 ACKEN 位置 1 来发出 ACK。 12. 主器件向从器件送出 ACK,并且 SSPxIF 置 1。 13. 用户清零 SSPxIF。 14. 对于从从器件接收到的每个字节重复步骤 8-13。 15. 主器件通过发送无ACK 或停止条件来结束通信。 DS41412F_CN 第 248 页  2011-2013 Microchip Technology Inc. 图 15-29:  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 I2C™主模式波形图 (接收, 7 位地址) 写 SSPxCON2<0>(SEN = 1), 启动条件开始 SEN = 0 此时写 SSPxBUF, 开始发送 写 SSPxCON2<4> 启动应答序列, SDAx = ACKDT(SSPxCON2<5>)= 0 通过对 SSPxCON2<3>(RCEN = 1)编程 将主器件配置为接收器 来自从器件的 ACK RCEN 被自动清零 来自主器件的 ACK, SDAx = ACKDT = 0 RCEN = 1,开始 下一次接收 ACKEN 置 1,启动应答序列, SDAx = ACKDT = 1 RCEN 被自动清零 此时写 PEN 位 = 1 SDAx 向从器件发送地址 接收来自从器件的数据 A7 A6 A5 A4 A3 A2 A1 R/W ACK D7 D6 D5 D4 D3 D2 D1 D0 接收来自从器件的数据 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK SCLx S 1 23 456 789 SSPxIF 当 CPU 响应 SSPxIF 时, SDAx = 0,SCLx = 1 BF (SSPxSTAT<0>) 用软件清零 1 23 45 6 78 在接收结束时 将 SSPxIF 中断标志置 1 不发送 ACK 9 1 2 34 567 8 9 在 CLK 下降沿将数据移入 在应答序列结束时 将 SSPxIF 中断标志置 1 在接收结束时 将 SSPxIF 置 1 总线主器件 终止传输 P 在应答序列结束时 将 SSPxIF 中断标志置 用软件清零 用软件清零 用软件清零 用软件清零 将P位 (SSPxSTAT<4>) 和 SSPxIF 置 1 最后一位移入 SSPxSR, 并将 SSPxSR 中内容转存到 SSPxBUF 中 SSPxOV ACKEN SSPxOV 置 1,因为 SSPxBUF 仍为满 DS41412F_CN 第 249 页 RCEN 通过对 SSPxCON2<3>(RCEN = 1)编程 将主器件配置为接收器 RCEN 被自动清零 来自主器件的 ACK, SDAx = ACKDT = 0 RCEN 被自动清零 PIC18(L)F2X/4XK22 15.6.8 应答序列时序 将 SSPxCON2 寄存器的应答序列使能位 ACKEN 置 1 即 可使能应答序列。当该位被置 1 时,SCLx 引脚被拉为低 电平,应答数据位的内容输出到 SDAx 引脚上。如果用 户希望产生一个应答,则应将 ACKDT 位清零。否则, 用户应在应答序列开始前将 ACKDT 位置 1。然后波特率 发生器进行一个计满返回周期 (TBRG)的计数,随后 SCLx 引脚电平被置为无效(拉为高电平)。当 SCLx 引 脚被采样为高电平 (时钟仲裁)时,波特率发生器再进 行一个 TBRG 周期的计数。然后 SCLx 引脚被拉为低电 平。在这之后, ACKEN 位自动清零,波特率发生器关 闭, MSSPx 模块进入空闲模式 (图 15-30)。 15.6.8.1 WCOL 状态标志 如 果 在 应 答 序 列 进 行 过 程 中 用 户 写 SSPxBUF,则 WCOL 被置 1,同时缓冲区内容不变(未发生写操作)。 15.6.9 停止条件时序 如果将 SSPxCON2 寄存器的停止序列使能位 PEN 置 1, 则在接收 / 发送结束时,SDAx 引脚上将产生停止位。在 接收 / 发送结束时, SCLx 线在第 9 个时钟的下降沿后 保持低电平。当 PEN 位置 1 时,主器件将 SDAx 线置 为低电平。当 SDAx 线被采样为低电平时,波特率发生 器被重载并递减计数至 0。当波特率发生器超时时, SCLx 引脚被拉为高电平,在一个 TBRG (波特率发生 器计满返回周期)之后, SDAx 引脚将被置为无效。当 SDAx 引脚被采样为高电平且 SCLx 也是高电平时, SSPxSTAT 寄存器的 P 位被置 1。另一个 TBRG 之后, PEN 位被清零,同时 SSPxIF 位被置 1 (图 15-31)。 15.6.9.1 WCOL 状态标志 如果在停止序列进行过程中用户写 SSPxBUF,则 WCOL 位被置 1,同时缓冲区内容不变 (未发生写操作)。 图 15-30: 应答序列波形图 应答序列在此时开始, 写 SSPxCON2, ACKEN = 1,ACKDT = 0 SDAx D0 TBRG TBRG ACK ACKEN 自动清零 SCLx 8 9 SSPxIF 在接收结束时 将 SSPxIF 置 1 用软件清零 注:TBRG = 一个波特率发生器周期。 用软件清零 在应答序列结束时 将 SSPxIF 置 1 DS41412F_CN 第 250 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 15-31: 停止条件接收或发送模式 写 SSPxCON2, PEN 置 1 第 9 个时钟 的下降沿 SCLx TBRG 在采样到 SDAx 为高电平后,SCLx = 1 保持一个 TBRG, 接着 SDAx = 1 保持一个 TBRG。P 位(SSPxSTAT<4>)置 1。 PEN 位(SSPxCON2<2>)被 硬件清零且 SSPxIF 位被置 1 SDAx ACK TBRG TBRG P TBRG TBRG 后,SCLx 拉为高电平 在时钟脉冲上升沿前将 SDAx 置为低电平 以建立停止条件 注:TBRG = 一个波特率发生器周期。 15.6.10 休眠模式下的操作 在休眠模式下, I2C 从模块能够接收地址或数据,并且 在地址匹配或字节传输完成时,如果允许 MSSPx 中断, 会将处理器从休眠状态唤醒。 15.6.11 复位的影响 复位会禁止 MSSPx 模块并终止当前的数据传输。 15.6.12 多主器件模式 在多主器件模式下,在检测到启动和停止条件时将产生 中断,这可用于判断总线是否空闲。停止 (P)位和启 动 (S)位在复位或禁止 MSSPx 模块时清零。当 SSPxSTAT 寄存器的 P 位置 1 时,可以取得 I2C 总线的 控制权;或者,总线处于空闲状态,S 位和 P 位都清零。 当总线忙且允许 SSPx 中断时,一旦发生停止条件便产 生 SSP 中断。 在多主器件操作中,必须监视 SDAx 线来进行仲裁,以 查看信号电平是否为期望的输出电平。此操作由硬件实 现,其结果保存在 BCLxIF 位中。 可能导致仲裁失败的情况是: • 地址传输 • 数据传输 • 启动条件 • 重复启动条件 • 应答条件  2011-2013 Microchip Technology Inc. DS41412F_CN 第 251 页 PIC18(L)F2X/4XK22 15.6.13 多主器件通信、总线冲突和总线仲裁 多主器件模式是通过总线仲裁来支持的。当主器件将地 址 / 数据位输出到 SDAx 引脚时,如果一个主器件在 SDAx 引脚上输出 1 (将 SDAx 引脚悬空为高电平), 而另一个主器件输出 0,就会发生总线仲裁。当 SCLx 引脚悬空为高电平时,数据应是稳定的。如果 SDAx 引 脚上期望的数据是 1,而实际采样到的数据是 0,则发 生了总线冲突。主器件会将总线冲突中断标志 BCLxIF 置 1,并将 I2C 端口复位到空闲状态 (图 15-32)。 如果在发送过程中发生总线冲突,则发送操作停止,BF 标志被清零, SDAx 和 SCLx 线被置为无效,并且可写 入 SSPxBUF。当执行总线冲突中断服务程序时,如果 I2C 总线空闲,用户可通过发出启动条件恢复通信。 如果在启动、重复启动、停止或应答条件过程中发生总 线冲突,则条件被中止,SDAx 和 SCLx 线被置为无效, SSPxCON2 寄存器中的相应控制位清零。当执行总线冲 突中断服务程序时,如果 I2C 总线空闲,用户可通过发 出启动条件恢复通信。 主器件将继续监视 SDAx 和 SCLx 引脚。一旦出现停止条 件, SSPxIF 位将被置 1。 发生总线冲突时无论发送的进度如何,写入 SSPxBUF 都会从第一个数据位开始发送数据。 在多主器件模式下,通过在检测到启动条件和停止条件 时产生中断可以确定总线何时空闲。当 SSPxSTAT 寄存 器中的 P 位置 1 时,可以获取 I2C 总线的控制权;或 者,总线处于空闲状态, S 位和 P 位都清零。 图 15-32: 发送和应答时的总线冲突时序 当 SCLx = 0 时, 数据改变 SDAx 线被其他源 拉为低电平 主器件释放 SDAx 采样 SDAx。SCLx 为高电平时, 数据与主器件驱动的不匹配, 发生了总线冲突。 SDAx SCLx BCLxIF 总线冲突中断标志 (BCLxIF)置 1 DS41412F_CN 第 252 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.6.13.1 启动条件期间的总线冲突 启动条件期间,以下事件将导致总线冲突: a) 在启动条件开始时, SDAx 或 SCLx 被采样为低 电平 (图 15-33)。 b) SDAx 被置为低电平之前, SCLx 采样为低电平 (图 15-34)。 在启动条件期间, SDAx 和 SCLx 引脚都会被监视。 如果 SDAx 引脚或 SCLx 引脚已经是低电平,则发生以 下所有事件: • 中止启动条件, • BCLxIF 标志位置 1,并且 • MSSPx 模块复位为空闲状态 (图 15-33)。 启动条件从 SDAx 和 SCLx 引脚被置为无效开始。当 SDAx 引脚采样为高电平时,波特率发生器装入值并递 减计数。如果在 SDAx 为高电平时, SCLx 引脚采样为 低电平,则发生总线冲突,因为这表示另一个主器件在 启动条件期间试图驱动一个数据 1。 如果 SDAx 引脚在该计数周期内采样为低电平,则 BRG 复位,同时 SDAx 线保持原值 (图 15-35)。但是,如 果 SDAx 引脚采样为 1,则在 BRG 计数结束时该引脚 将被置为低电平。接着,波特率发生器被重载并递减计 数至 0 ;在此期间,如果 SCLx 引脚采样到 0,则不会 发生总线冲突。在 BRG 计数结束时,SCLx 引脚被置为 低电平。 注: 在启动条件期间不会发生总线冲突,因为 两个总线主器件不可能精确地在同一时刻 发出启动条件。因此一个主器件将总是先 于另一个主器件将 SDAx 置为有效。但是 上述情况不会引起总线冲突,因为两个主 器件一定会对启动条件后的第一个地址进 行仲裁。如果地址是相同的,必须继续对 数据部分、重复启动条件或停止条件进行 仲裁。 图 15-33: 启动条件期间的总线冲突 (仅用于 SDAx) 在 SEN 位置 1 之前 SDAx 变为低电平。 BCLxIF 置 1, 因为 SDAx = 0,SCLx = 1, 所以 S 位和 SSPxIF 位被置 1。 SDAx SCLx SEN BCLxIF S SDAx = 1,SCLx = 1 时, 将 SEN 置 1,使能启动条件 SDAx 在启动条件之前被 采样到低电平。BCLxIF 置 1。 因为 SDAx = 0,SCLx = 1, 所以 S 位和 SSPxIF 位被置 1。 因为发生总线冲突,SEN 自动清零。 SSPx 模块复位到空闲状态。 SSPxIF 和 BCLxIF 用软件清零 SSPxIF SSPxIF 和 BCLxIF 用软件清零  2011-2013 Microchip Technology Inc. DS41412F_CN 第 253 页 PIC18(L)F2X/4XK22 图 15-34: 启动条件期间的总线冲突 (SCLx = 0) SDAx = 0,SCLx = 1 SDAx TBRG TBRG SCLx SDAx = 1,SCLx = 1 时, 将 SEN 置 1,使能启动序列 SEN BCLxIF BRG 超时前 SCLx = 0, 发生总线冲突。BCLxIF 置 1。 S ’0’ SSPxIF ’0’ 在 SDAx = 0 之前 SCLx = 0, 则发生总线冲突。BCLxIF 置 1。 中断用软件清零 ’0’ ’0’ 图 15-35: 启动条件期间由 SDA 仲裁引起的 BRG 复位 SDAx SDAx = 0,SCLx = 1 S置1 小于 TBRG TBRG SDAx 被其他主器件拉为低电平。 复位 BRG 并将 SDAx 置为有效。 SSPxIF 置 1 SCLx SEN BCLxIF S BRG 超时之后 将 SCLx 拉为低电平 SDAx = 1,SCLx = 1 时, 将 SEN 置 1,使能启动序列 ’0’ S SSPxIF SDAx = 0,SCLx = 1, SSPxIF 置 1 中断用软件清零 DS41412F_CN 第 254 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.6.13.2 重复启动条件期间的总线冲突 在重复启动条件期间,如果发生以下情况,则会发生总 线冲突: a) 在 SCLx 由低电平变为高电平期间,在 SDAx 上 采样到低电平 (情形 1)。 b) 在 SDAx 被置为低电平之前,SCLx 变为低电平, 指示另一个主器件正试图发送一个数据 1 (情形 2)。 当用户释放 SDAx 并允许该引脚悬空为高电平时,BRG 装入 SSPxADD 的值并递减计数至 0。接着 SCLx 引脚 被置为无效,当 SCLx 引脚采样到高电平时,对 SDAx 引脚进行采样。 如果 SDAx 为低电平,则已发生了总线冲突 (即,另一 个主器件正试图发送一个数据 0,见图 15-36) 。如果 SDAx 被采样到高电平,则 BRG 被重载并开始计数。如 果 SDAx 在 BRG 超时之前从高电平变为低电平,则不会 发生总线冲突,因为两个主器件不可能精确地在同一时 刻将 SDAx 置为有效。 如果 SCLx 在 BRG 超时之前从高电平变为低电平,且 SDAx 尚未被置为有效,那么将发生总线冲突。在此情 况下,另一个主器件在重复启动条件期间正试图发送一 个数据 1 (见图 15-37)。 如果在 BRG 超时结束时 SCLx 和 SDAx 都仍然是高电 平,则 SDAx 引脚被驱动为低电平,BRG 被重载并开始 计数。在计数结束时,不管 SCLx 引脚的状态如何, SCLx 引脚都被驱动为低电平,重复启动条件结束。 图 15-36: 重复启动条件期间的总线冲突 (情形 1) SDAx SCLx RSEN 当 SCLx 变为高电平时对 SDAx 采样。 如果 SDAx = 0,BCLxIF 置 1 并释放 SDAx 和 SCLx。 BCLxIF S SSPxIF 用软件清零 ’0’ ’0’ 图 15-37: 重复启动条件期间的总线冲突 (情形 2) TBRG SDAx SCLx BCLxIF SCLx 先于 SDAx 变为低电平, BCLxIF 置 1。释放 SDAx 和 SCLx。 RSEN S SSPxIF TBRG 中断用软件清零 ’0’  2011-2013 Microchip Technology Inc. DS41412F_CN 第 255 页 PIC18(L)F2X/4XK22 15.6.13.3 停止条件期间的总线冲突 以下事件会导致停止条件期间发生总线冲突: a) SDAx 已被置为无效并允许悬空为高电平之后, SDAx 在 BRG 超时后被采样到低电平(情形 1)。 b) SCLx 引脚被置为无效之后,SCLx 在 SDAx 变为 高电平之前被采样到低电平 (情形 2)。 停止条件从 SDAx 被置为低电平开始。当 SDAx 采样为 低电平时,允许 SCLx 引脚悬空。当引脚采样到高电平 (时钟仲裁)时,波特率发生器装入 SSPxADD 的值并 递减计数至 0。BRG 超时后,SDAx 被采样。如果 SDAx 采样为低电平,则已发生总线冲突。这是因为另一个主 器件正试图发送一个数据 0 (图 15-38)。如果在允许 SDAx 悬空为高电平前 SCLx 引脚被采样到低电平,也 会发生总线冲突。这是另一个主器件正试图发送一个数 据 0 的另外一种情况 (图 15-39)。 图 15-38: SDAx SCLx 停止条件期间的总线冲突 (情形 1) TBRG TBRG SDAx 被置为低电平 TBRG 在 TBRG 后 SDAx 被采样为低电平, BCLxIF 置 1 PEN BCLxIF P ’0’ SSPxIF ’0’ 图 15-39: SDAx SCLx PEN BCLxIF P SSPxIF 停止条件期间的总线冲突 (情形 2) TBRG TBRG SDAx 被置为有效 TBRG 在 SDAx 变为高电平前,SCLx 变为低电平, BCLxIF 置 1 ’0’ ’0’ DS41412F_CN 第 256 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 15-3: 与 I2C™ 操作相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ANSELA — ANSELB — — ANSA5 — ANSA3 ANSA2 ANSA1 ANSA0 — ANSB5 ANSB4 ANSB3 ANSB2 ANSB1(1) ANSB0(1) ANSELC ANSELD ANSC7 ANSD7 ANSC6 ANSD6 ANSC5 ANSD5 ANSC4 ANSD4 ANSC3 ANSD3 ANSC2 ANSD2 — — ANSD1(2) ANSD0(2) INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD CCP2MD CCP1MD SSP1ADD I2C 从模式下的 SSP1 地址寄存器。 I2C 主模式下的 SSP1 波特率重载寄存器。 SSP1BUF SSP1 接收缓冲 / 发送寄存器 SSP1CON1 WCOL SSPOV SSPEN CKP SSPM<3:0> SSP1CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN SSP1CON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN SSP1MSK SSP1 掩码寄存器位 SSP1STAT SMP CKE D/A P S R/W UA BF SSP2ADD I2C 从模式下的 SSP2 地址寄存器。 I2C 主模式下的 SSP2 波特率重载寄存器。 SSP2BUF SSP2 接收缓冲 / 发送寄存器 SSP2CON1 WCOL SSPOV SSPEN CKP SSPM<3:0> SSP2CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN SSP2CON3 ACKTIM PCIE SCIE BOEN SDAHT SBCDE AHEN DHEN SSP2MSK SSP2 掩码寄存器位 SSP2STAT TRISB SMP TRISB7 CKE TRISB6 D/A P S TRISB5 TRISB4 TRISB3 R/W TRISB2 UA BF TRISB1(1) TRISB0(1) TRISC TRISD TRISC7 TRISD7 TRISC6 TRISD6 TRISC5 TRISC4 TRISC3 TRISD5 TRISD4 TRISD3 TRISC2 TRISD2 TRISC1 TRISC0 TRISD1(2) TRISD0(2) 图注: I2C 模式下的 MSSPx 不使用阴影位。 注 1: PIC18(L)F2XK22 器件。 2: PIC18(L)F4XK22 器件。 寄存器 所在页 154 155 155 155 116 128 129 130 124 125 126 119 120 121 56 265 — 260 262 263 264 259 265 — 260 262 263 264 259 156 156 156  2011-2013 Microchip Technology Inc. DS41412F_CN 第 257 页 PIC18(L)F2X/4XK22 15.7 波特率发生器 MSSPx 模块具有一个波特率发生器,可用于在 I2C 和 SPI 主模式下产生时钟。波特率发生器 (BRG)重载值 放在 SSPxADD 寄存器 (寄存器 15-6)中。当发生对 SSPxBUF 的写操作时,波特率发生器将自动开始递减 计数。 在给定操作完成时,内部时钟会自动停止计数,并且时 钟引脚将保持它的最后状态。 图 15-40 中的内部信号 “ 重载 ” 会触发将 SSPxADD 值 装入 BRG 计数器。对于模块时钟线的每次振荡,这会 图 15-40: 波特率发生器框图 SSPxM<3:0> 发生两次。指定重载信号何时置为有效的逻辑依赖于 MSSPx 当前的工作模式。 表 15-4 给出了不同的指令周期下的时钟速率以及装入 SSPxADD 的 BRG 值。 公式 15-1: FCLOCK = (---S---S----P----x---A--F--D--O--D-S---C--+------1---)---(--4---)- SSPxADD<7:0> SSPxM<3:0> SCLx 重载 控制 重载 SSPxCLK BRG 递减计数器 FOSC/2 注: 在用作 I2C 的波特率发生器时,值 0x00、 0x01 和 0x02 对于 SSPxADD 是无效的。这是实现限制。 表 15-4: 使用 BRG 的 MSSPx 时钟速率 FOSC FCY BRG 值 FCLOCK (两次 BRG 计满返回) 32 MHz 8 MHz 13h 400 kHz(1) 32 MHz 8 MHz 19h 308 kHz 32 MHz 16 MHz 8 MHz 4 MHz 4Fh 100 kHz 09h 400 kHz(1) 16 MHz 4 MHz 0Ch 308 kHz 16 MHz 4 MHz 27h 100 kHz 4 MHz 1 MHz 09h 100 kHz 注 1: 虽然 I2C 接口各方面都不符合 400 kHz I2C 规范 (该规范适用于大于 100 kHz 的频率),但在需要较高频 率的应用场合可以谨慎使用。 DS41412F_CN 第 258 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 15.8 寄存器定义:MSSP 控制 寄存器 15-1: SSPxSTAT:SSPx 状态寄存器 R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0 SMP CKE D/A P S R/W UA BF bit 7 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7 SMP:SPI 数据输入采样位 SPI 主模式: 1 = 在数据输出时间的末端采样输入数据 0 = 在数据输出时间的中间采样输入数据 SPI 从模式: 当 SPI 工作在从模式时,必须将 SMP 清零 在 I2C 主模式或从模式下: 1 = 禁止标准速度模式下的压摆率控制 (100 kHz 和 1 MHz) 0 = 使能高速模式下的压摆率控制 (400 kHz) bit 6 CKE:SPI 时钟边沿选择位 (仅限 SPI 模式) 在 SPI 主模式或从模式下: 1 = 时钟状态从有效转换到空闲时发送 0 = 时钟状态从空闲转换到有效时发送 仅在 I2C 模式下: 1 = 使能输入逻辑以使门限值符合 SMBus 规范 0 = 禁止 SMBus 特定输入 bit 5 D/A:数据 / 地址位 (仅限 I2C 模式) 1 = 指示上一个接收或发送的字节是数据 0 = 指示上一个接收或发送的字节是地址 bit 4 P:停止位 (仅限 I2C 模式。在 MSSPx 模块被禁止且 SSPxEN 被清零时,该位会被清零。) 1 = 指示上次检测到停止位 (该位在复位时为 0) 0 = 上次未检测到停止位 bit 3 S:启动位 (仅限 I2C 模式。在 MSSPx 模块被禁止且 SSPxEN 被清零时,该位会被清零。) 1 = 指示上次检测到启动位 (该位在复位时为 0) 0 = 上次未检测到启动位 bit 2 R/W:读 / 写位信息 (仅限 I2C 模式) 该位保存上一次地址匹配后的 R/W 位信息。该位仅在从地址匹配到出现下一个启动位、停止位或非 ACK 位之间有 效。 在 I2C 从模式下: 1=读 0=写 在 I2C 主模式下: 1 = 正在进行发送 0 = 未进行发送 将该位与 SEN、 RSEN、 PEN、 RCEN 或 ACKEN 进行逻辑或运算将指示 MSSPx 是否处于空闲模式。 bit 1 UA:更新地址位 (仅限 10 位 I2C 模式) 1 = 指示用户需要更新 SSPxADD 寄存器中的地址 0 = 不需要更新地址 bit 0 BF:缓冲区满状态位 接收 (SPI 和 I2C 模式): 1 = 接收完成, SSPxBUF 已满 0 = 接收未完成, SSPxBUF 为空 发送 (仅限 I2C 模式): 1 = 数据发送正在进行 (不包括 ACK 位和停止位), SSPxBUF 已满 0 = 数据发送完成 (不包括 ACK 位和停止位), SSPxBUF 为空  2011-2013 Microchip Technology Inc. DS41412F_CN 第 259 页 PIC18(L)F2X/4XK22 寄存器 15-2: R/C/HS-0 WCOL bit 7 SSPxCON1:SSPx 控制寄存器 1 R/C/HS-0 SSPxOV R/W-0 SSPxEN R/W-0 CKP R/W-0 R/W-0 R/W-0 SSPxM<3:0> R/W-0 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 HS = 硬件置 1 位 C = 用户清零位 bit 7 WCOL:写冲突检测位 主模式: 1 = 当 I2C 不满足启动发送数据的条件时,试图向 SSPxBUF 寄存器写入数据 0 = 未发生冲突 从模式: 1 = 正在发送前一个字时,又有数据写入 SSPxBUF 寄存器 (必须用软件清零) 0 = 未发生冲突 bit 6 SSPxOV:接收溢出指示位 (1) 在 SPI 模式下: 1 = SSPxBUF 寄存器中仍保存前一数据时,又接收到一个新的字节。如果发生溢出, SSPxSR 中的数据会丢失。溢 出只会在从模式下发生。在从模式下,即使只是发送数据,用户也必须读 SSPxBUF,以避免将溢出位置 1。在主 模式下,溢出位不会被置 1,因为每次接收 (和发送)新数据都是通过写入 SSPxBUF 寄存器启动的 (必须用软 件清零)。 0 = 无溢出 在 I2C 模式下: 1 = SSPxBUF 寄存器中仍保存前一字节时,又接收到一个新的字节。在发送模式下,SSPxOV 是 “ 无关位 ”(必须 用软件清零)。 0 = 无溢出 bit 5 SSPxEN:同步串口使能位 在两种模式下,当使能时,必须将这些引脚正确地配置为输入或输出 在 SPI 模式下: 1 = 使能串口并将 SCKx、 SDOx、 SDIx 和 SSx 配置为串口引脚源 (2) 0 = 禁止串口并将上述引脚配置为 I/O 端口引脚 在 I2C 模式下: 1 = 使能串口并将 SDAx 和 SCLx 引脚配置为串口引脚源 (3) 0 = 禁止串口并将上述引脚配置为 I/O 端口引脚 bit 4 CKP:时钟极性选择位 在 SPI 模式下: 1 = 时钟的空闲状态为高电平 0 = 时钟的空闲状态为低电平 在 I2C 从模式下: SCLx 释放控制 1 = 使能时钟 0 = 保持时钟为低电平 (时钟延长)。(用来确保数据建立时间。) 在 I2C 主模式下: 在此模式下未使用 DS41412F_CN 第 260 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 15-2: SSPxCON1:SSPx 控制寄存器 1 (续) bit 3-0 SSPxM<3:0>:同步串口模式选择位 0000 = SPI 主模式,时钟 = FOSC/4 0001 = SPI 主模式,时钟 = FOSC/16 0010 = SPI 主模式,时钟 = FOSC/64 0011 = SPI 主模式,时钟 = TMR2 输出 /2 0100 = SPI 从模式,时钟 = SCKx 引脚,使能 SSx 引脚控制 0101 = SPI 从模式,时钟 = SCKx 引脚,禁止 SSx 引脚控制, SSx 可用作 I/O 引脚 0110 = I2C 从模式, 7 位地址 0111 = I2C 从模式, 10 位地址 1000 = I2C 主模式,时钟 = FOSC / (4 * (SSPxADD+1))(4) 1001 = 保留 1010 = SPI 主模式,时钟 = FOSC/(4 * (SSPxADD+1)) 1011 = I2C 固件控制的主模式 (从器件空闲) 1100 = 保留 1101 = 保留 1110 = I2C 从模式, 7 位地址,并允许启动位和停止位中断 1111 = I2C 从模式, 10 位地址,并允许启动位和停止位中断 注 1: 在主模式下,溢出位不会被置 1,因为每次接收 (和发送)新数据都是通过写入 SSPxBUF 寄存器启动的。 2: 当使能时,必须将这些引脚正确地配置为输入或输出。 3: 当使能时,必须将 SDAx 和 SCLx 引脚配置为输入引脚。 4: 对于 I2C 模式,不支持 SSPxADD 值 0、 1 或 2。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 261 页 PIC18(L)F2X/4XK22 寄存器 15-3: SSPxCON2:SSPx 控制寄存器 2 R/W-0 GCEN bit 7 R-0 ACKSTAT R/W-0 ACKDT R/S/HC-0 ACKEN(1) R/S/HC-0 RCEN(1) R/S/HC-0 PEN(1) R/S/HC-0 RSEN(1) R/W/HC-0 SEN(1) bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 HC = 硬件清零位 S = 用户置 1 位 bit 7 GCEN:广播呼叫使能位 (仅限 I2C 从模式) 1 = 当 SSPxSR 接收到广播呼叫地址 (0x00 或 00h)时允许中断 0 = 禁止广播呼叫地址 bit 6 ACKSTAT:应答状态位 (仅限 I2C 模式) 1 = 未接收到应答 0 = 接收到应答 bit 5 ACKDT:应答数据位 (仅限 I2C 模式) 在接收模式下: 当用户在接收结束时发出一个应答序列时要发送的值 1 = 无应答 0 = 应答 bit 4 ACKEN(1):应答序列使能位 (仅限 I2C 主模式) 在主接收模式下: 1 = 在 SDAx 和 SCLx 引脚上发出应答序列,并发送 ACKDT 数据位。由硬件自动清零。 0 = 应答序列空闲 bit 3 RCEN(1):接收使能位 (仅限 I2C 主模式) 1 = 使能 I2C 接收模式 0 = 接收空闲 bit 2 PEN(1):停止条件使能位 (仅限 I2C 主模式) SCKx 释放控制: 1 = 在 SDAx 和 SCLx 引脚上发出停止条件。由硬件自动清零。 0 = 停止条件空闲 bit 1 RSEN(1):重复启动条件使能位 (仅限 I2C 主模式) 1 = 在 SDAx 和 SCLx 引脚上发出重复启动条件。由硬件自动清零。 0 = 重复启动条件空闲 bit 0 SEN(1):启动条件使能位 (仅限 I2C 主模式) 在主模式下: 1 = 在 SDAx 和 SCLx 引脚上发出启动条件。由硬件自动清零。 0 = 启动条件空闲 在从模式下: 1 = 为从发送和从接收 (已使能时钟延长)使能时钟延长 0 = 禁止时钟延长 注 1: 对于 ACKEN、 RCEN、 PEN、 RSEN 和 SEN 位:如果 I2C 模块不处于空闲模式,该位可能不会被置 1 (不支持并行操作),并且可能不会写入 SSPxBUF (或禁止写入 SSPxBUF)。 DS41412F_CN 第 262 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 15-4: R-0 ACKTIM bit 7 SSPxCON3:SSPx 控制寄存器 3 R/W-0 R/W-0 R/W-0 R/W-0 PCIE SCIE BOEN SDAHT R/W-0 SBCDE R/W-0 AHEN R/W-0 DHEN bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7 ACKTIM:应答时间状态位 (仅限 I2C 模式) (3) 1 = 指示 I2C 总线处于应答序列中,在 SCLx 时钟的第 8 个下降沿置 1 0 = 不处于应答序列中,在 SCLx 时钟的第 9 个上升沿清零 bit 6 PCIE:停止条件中断允许位 (仅限 I2C 模式) 1 = 在检测到停止条件时允许中断 0 = 禁止检测到停止条件时的中断 (2) bit 5 SCIE:启动条件中断允许位 (仅限 I2C 模式) 1 = 在检测到启动或重复启动条件时允许中断 0 = 禁止检测到启动条件时的中断 (2) bit 4 BOEN:缓冲区改写使能位 在 SPI 从模式下:(1) 1 = SSPxBUF 在每次新的数据字节移入时更新,并忽略 BF 位 0 = 如果在接收到新字节时 SSPxSTAT 寄存器的 BF 位已置 1,则 SSPxCON1 寄存器的 SSPxOV 位会置 1,并且不会更新缓冲区 在 I2C 模式下: 该位被忽略。 在 I2C 从模式下: 1 = 仅当 BF 位 = 0 时,在接收到地址 / 数据字节时,更新 SSPxBUF 并产生 ACK 信号,忽略 SSPxOV 位的状态。 0 = 只有在 SSPxOV 清零时才更新 SSPxBUF bit 3 SDAHT:SDAx 保持时间选择位 (仅限 I2C 模式) 1 = 在 SCLx 的下降沿之后,在 SDAx 上最少有 300 ns 的保持时间 0 = 在 SCLx 的下降沿之后,在 SDAx 上最少有 100 ns 的保持时间 bit 2 SBCDE:从模式总线冲突检测使能位 (仅限 I2C 从模式) 如果在 SCLx 的上升沿,在模块输出高电平状态时采样到 SDAx 为低电平,则 PIR2 寄存器的 BCLxIF 位会置 1,总线会变为空闲状态 1 = 允许从器件总线冲突中断 0 = 禁止从器件总线冲突中断 bit 1 AHEN:地址保持使能位 (仅限 I2C 从模式) 1 = 在所接收匹配地址字节的第 8 个 SCLx 下降沿之后, SSPxCON1 寄存器的 CKP 位将清零, SCLx 将保持低电平。 0 = 禁止地址保持 注 1: 用于菊花链SPI操作;使用户可以忽略除最后一个接收到的字节之外的所有字节。在接收到新字节且BF = 1 时, SSPxOV 仍然会置 1,但硬件会继续将最新字节写入 SSPxBUF。 2: 在启动和停止条件检测明确列为使能的从模式下,该位没有任何作用。 3: ACKTIM 状态位仅在 AHEN 位或 DHEN 位置 1 时有效。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 263 页 PIC18(L)F2X/4XK22 寄存器 15-4: SSPxCON3:SSPx 控制寄存器 3 (续) bit 0 DHEN:数据保持使能位 (仅限 I2C 从模式) 1 = 在所接收数据字节的第 8 个 SCLx 下降沿之后,从器件硬件清零 SSPxCON1 寄存器的 CKP 位,而 SCLx 则保持低电平。 0 = 禁止数据保持 注 1: 用于菊花链SPI操作;使用户可以忽略除最后一个接收到的字节之外的所有字节。在接收到新字节且BF = 1 时, SSPxOV 仍然会置 1,但硬件会继续将最新字节写入 SSPxBUF。 2: 在启动和停止条件检测明确列为使能的从模式下,该位没有任何作用。 3: ACKTIM 状态位仅在 AHEN 位或 DHEN 位置 1 时有效。 寄存器 15-5: R/W-1 MSK7 bit 7 SSPxMSK:SSPx 掩码寄存器 R/W-1 MSK6 R/W-1 MSK5 R/W-1 MSK4 R/W-1 MSK3 R/W-1 MSK2 R/W-1 MSK1 R/W-1 MSK0 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-1 bit 0 MSK<7:1>:掩码位 1 = 接收到的地址 bit n 与 SSPxADD 相比较来检测 I2C 模式下地址是否匹配 0 = 接收到的地址 bit n 不用于检测 I2C 模式下地址是否匹配 MSK<0>:用于 I2C 从模式, 10 位地址的掩码位 I2C 从模式, 10 位地址 (SSPxM<3:0> = 0111 或 1111): 1 = 接收到的地址 bit 0 与 SSPxADD<0> 相比较来检测 I2C 模式下地址是否匹配 0 = 接收到的地址 bit 0 不用于检测 I2C 模式下地址是否匹配 I2C 从模式, 7 位地址,该位被忽略 DS41412F_CN 第 264 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 15-6: R/W-0 bit 7 SSPXADD:MSSPx 地址和波特率寄存器 (I2C 模式) R/W-0 R/W-0 R/W-0 R/W-0 ADD<7:0> R/W-0 R/W-0 R/W-0 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 主模式: bit 7-0 ADD<7:0>:波特率时钟分频比位 SCLx 引脚时钟周期 = ((ADD<7:0> + 1) *4)/FOSC 10 位从模式 —— 高位地址字节: bit 7-3 bit 2-1 bit 0 未使用:不使用高位地址字节。该寄存器的位状态为 “ 无关 ”。主器件发送的位格式由 I2C 规范确定, 必须等于 11110。但是,那些位通过硬件进行比较,并且不受该寄存器中的值影响。 ADD<2:1>:10 位地址的高 2 位 未使用:在此模式下未使用。位状态为 “ 无关 ”。 10 位从模式 —— 低位地址字节: bit 7-0 ADD<7:0>:10 位地址的低 8 位 7 位从模式: bit 7-1 bit 0 ADD<7:1>:7 位地址 未使用:在此模式下未使用。位状态为 “ 无关 ”。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 265 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 266 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 16.0 增强型通用同步 / 异步收发器 (EUSART) 增强型通用同步 / 异步收发器 (EUSART)模块是一种 串行 I/O 通信外设。它包含用来完成与器件程序执行无 关的输入或输出串行数据传输所需的所有时钟发生器、 移位寄存器和数据缓冲区等。EUSART 也是一种串行通 信接口 (Serial Communications Interface, SCI),可 配置为全双工异步系统或半双工同步系统。全双工模式 可用来与外设系统通信,如 CRT 终端和个人计算机。半 双工同步模式用于与外设通信,如 A/D 或 D/A 集成电 路、串行 EEPROM 或其他单片机。这些器件通常不具 备用以产生波特率的内部时钟,并需要由主同步器件提 供外部时钟信号。 EUSART 模块具备以下功能: • 全双工异步收发 • 双字符输入缓冲区 • 单字符输出缓冲区 • 可编程 8 位或 9 位字符长度 • 9 位模式下的地址检测 • 输入缓冲区溢出错误检测 • 接收字符帧错误检测 • 半双工同步主模式 • 半双工同步从模式 • 可编程的时钟和数据极性 EUSART 模块还具备以下特性,使其成为局域互联网 (Local Interconnect Network,LIN)总线系统的理想 选择 : • 波特率自动检测和校准 • 接收到间隔字符 (Break)时唤醒 • 13 位间隔字符发送 EUSART 收发器的框图如图 16-1 和图 16-2 所示。 图 16-1: EUSART 发送框图 MSb (8) 数据总线 TXREGx 寄存器 8 ••• 发送移位寄存器(TSR) TXxIE TXxIF 中断 TXx/CKx LSb 引脚 0 引脚缓冲和控制 TXEN 波特率发生器 BRG16 +1 SPBRGHx SPBRGx FOSC n 倍频值 SYNC BRGH BRG16 n x4 x16 x64 1X00 0 X110 0 X101 0 TX9 TX9D TRMT  2011-2013 Microchip Technology Inc. DS41412F_CN 第 267 页 PIC18(L)F2X/4XK22 图 16-2: EUSART 接收框图 CREN OERR RCIDL RXx/DTx 引脚 引脚缓冲和控制 数据恢复 波特率发生器 BRG16 +1 SPBRGHx SPBRGx FOSC ÷n 倍频值 x4 x16 x64 ÷n SYNC 1 X 0 0 0 BRGH X 1 1 0 0 BRG16 X 1 0 1 0 EUSART 模块的操作由以下 3 个寄存器控制: • 发送状态和控制 (TXSTAx) • 接收状态和控制 (RCSTAx) • 波特率控制 (BAUDCONx) 这些寄存器的详细信息请分别参见寄存器 16-1、寄存器 16-2 和寄存器 16-3。 对于 EUSART 操作的所有模式,与 RXx/DTx 和 TXx/CKx 引脚对应的 TRIS 控制位应设置为 1。EUSART 控制将根 据需要自动将引脚从输入重新配置为输出。 当未使能接收器或发送器部分时,对应的 RXx/DTx 或 TXx/CKx 引脚可用于通用输入和输出。 MSb RSR 寄存器 停止 (8) 7 • • • 1 LSb 0 启动 RX9 FERR RX9D RCREGx 寄存器 FIFO 8 数据总线 RCxIF RCxIE 中断 DS41412F_CN 第 268 页  2011-2013 Microchip Technology Inc. 16.1 EUSART 异步模式 EUSART 采用标准不归零 (non-return-to-zero, NRZ) 格式发送和接收数据。 NRZ 实现为两种电平:VOH 标记 状态 (mark state)代表 “1” 数据位,而 VOL 空格状态 (space state)代表 “0” 数据位。NRZ 指的是当具有相同 值的连续数据位被发送时,它们保持在该位的输出电平 不变,而不会在每个位之间回到中间电平。 NRZ 发送端 口在标记状态空闲。每个字符发送包含 1 个启动位及随 后的 8 个或 9 个数据位,并始终由 1 个或多个停止位终 止。启动位始终是一个空格,停止位始终是标记。最常 见的数据格式为 8 位。每个发送位保持 1/( 波特率 ) 个周 期。使用片上专用 8 位 /16 位波特率发生器从系统振荡器 产生标准波特率频率。波特率配置示例请参见表 16-5。 EUSART 先发送和接收 LSb。 EUSART 的发送器和接 收器在功能上是相互独立的,但它们的数据格式和波特 率相同。硬件不支持奇偶校验,但可通过软件实现并作 为第 9 个数据位存储。 16.1.1 EUSART 异步发送器 图 16-1 给出了 EUSART 发送器框图。发送器的核心是 串行发送移位寄存器(Transmit Shift Register,TSR), 该寄存器不可用软件直接访问。TSR 从发送缓冲区(即 TXREGx 寄存器)取得数据。 16.1.1.1 使能发送器 EUSART 发送器可通过配置以下 3 个控制位使能为异步 操作: • TXEN = 1 • SYNC = 0 • SPEN = 1 假定所有其他 EUSART 控制位均处于其默认状态。 将 TXSTAx 寄存器的 TXEN 位置 1 使能 EUSART 的发 送器电路。清零 TXSTAx 寄存器的 SYNC 位将 EUSART 配置为异步操作。将 RCSTAx 寄存器的 SPEN 位置 1 使 能 EUSART 并自动将 TXx/CKx I/O 引脚配置为输出。如 果 TXx/CKx 引脚与模拟外设共用,那么必须通过清零对 应的 ANSEL 位禁止模拟 I/O 功能。 注: TXEN 中断允许位置 1 时, TXxIF 发送器 中断标志位置 1。 PIC18(L)F2X/4XK22 16.1.1.2 发送数据 向 TXREGx 寄存器写入一个字符时启动发送。如果这是 首字符,或前一个字符被完全从 TSR 中送出,TXREGx 中的数据就立即被传送到 TSR 寄存器。如果 TSR 中仍 保 存 前 一 个 字 符 的 全 部 或 部 分,则新 字 符 被 保 存 在 TXREGx 中,直到前一个字符的停止位被发送。之后, 在 TXREGx 中等待的字符在停止位发送后 1 个 TCY 内被 传送到 TSR 中。 TXREGx 中的数据被传送到 TSR 后, 启动位、数据位和停止位的发送序列立即开始。 16.1.1.3 发送数据极性 可通过 BAUDCONx 寄存器的 CKTXP 位来控制发送数 据的极性。该位的默认状态为 0,选择高电平有效发送 空闲和数据位。将 CKTXP 位设置为 1 将发送数据的极 性取反,从而选择低电平有效空闲和数据位。CKTXP 位 仅在异步模式下控制发送数据的极性。在同步模式下, CKTXP 位有不同的功能。 16.1.1.4 发送中断标志 只要 EUSART 发送器被使能,而且 TXREGx 中没有等 待发送的字符,PIR1/PIR3 寄存器的 TXxIF 中断标志位 就被置 1。换句话说,只有在 TSR 中有字符,并且 TXREGx 中还有一个排队等待发送的新字符时, TXxIF 位才被清零。写入 TXREGx 后并不立即清零 TXxIF 标志 位,而 是 在 之 后 的 第 二 个 指 令 周 期 将 其 清 零。写 入 TXREGx 后立即查询 TXxIF 位将返回无效结果。 TXxIF 位是只读的,不能用软件置 1 或清零。 将 PIE1/PIE3 寄存器的 TXxIE 中断允许位置 1 可允许 TXxIF 中断。但是,只要 TXREGx 为空,TXxIF 标志位 就会被置 1,无论 TXxIE 中断允许位的状态如何。 要在发送数据时使用中断,应只在仍有数据要发送时才 将TXxIE位置1。在将发送的最后一个字符写入TXREGx 后应清零 TXxIE 中断允许位。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 269 页 PIC18(L)F2X/4XK22 16.1.1.5 TSR 状态 TXSTAx 寄存器的 TRMT 位指示 TSR 寄存器的状态。 该位是只读位。TSR 寄存器为空时,TRMT 位置 1,而 当一个字符从 TXREGx 传送到 TSR 寄存器中时,该位 清零。 TRMT 位将保持清零,直到所有位移出 TSR 寄 存器。该位不与任何中断逻辑关联,因此用户需要查询 该位以确定 TSR 的状态。 注: TSR 寄存器不映射到数据存储器中,因此 用户无法使用。 16.1.1.6 发送 9 位字符 EUSART 支持 9 位字符发送。当 TXSTAx 寄存器的 TX9 位置 1 时, EUSART 将在发送每个字符时移出 9 位。 TXSTAx 寄存器的 TX9D 位是第 9 个数据位,也是最高 有效位。发送 9 位数据时, TX9D 数据位必须先于低 8 位写入 TXREGx。写入 TXREGx 后,所有 9 个位将被 立即传送到 TSR 移位寄存器中。 有多个接收器时,可使用一种特殊的 9 位地址模式。关于 地址模式的更多信息,请参见第 16.1.2.8 节 “ 地址检测 ”。 16.1.1.7 异步发送设置 1. 初始化 SPBRGHx:SPBRGx 寄存器对以及 BRGH 和 BRG16 位,获得所需的波特率(见第 16.4 节 “EUSART 波特率发生器 (BRG) ”)。 2. 将RXx/DTx和TXx/CKx的TRIS控制位设置为1。 3. 清零SYNC位并将SPEN位置1,使能异步串口。 4. 如果需要 9 位发送,将 TX9 控制位置 1。如果第 9 个数据位置 1,则表示发送器置于检测地址时, 低 8 位为地址。 5. 如果需要将发送数据的极性取反,将 CKTXP 控 制位置 1。 6. 将 TXEN 控制位置 1 使能发送。这将导致 TXxIF 中断标志位置 1。 7. 如果需要中断,将 TXxIE 中断允许位置 1。如果 INTCON 寄存器的 GIE/GIEH 和 PEIE/GIEL 位也 置 1,则立即产生中断。 8. 如果选择了 9 位发送,应将第 9 位装入 TX9D 数 据位。 9. 将8位数据装入TXREGx寄存器。这将启动发送。 图 16-3: 异步发送 写入 TXREGx BRG 输出 (移位时钟) TXx/CKx 引脚 TXxIF 位 (发送缓冲 寄存器空标志) 字1 启动位 bit 0 1 TCY TRMT 位 (发送移位 寄存器空标志) 字1 发送移位寄存器 bit 1 字1 bit 7/8 停止位 DS41412F_CN 第 270 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 16-4: 写入 TXREGx BRG 输出 (移位时钟) TXx/CKx 引脚 TXxIF 位 (中断寄存器标志) TRMT 位 (发送移位 寄存器空标志) 异步发送 (背对背) 字1 字2 1 TCY 启动位 bit 0 字1 发送移位寄存器 1 TCY 注: 此时序图表示的是两次连续的发送。 bit 1 字1 bit 7/8 停止位 启动位 bit 0 字2 字2 发送移位寄存器 表 16-1: 与异步发送相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BAUDCON1 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D SPBRG1 EUSART1 波特率发生器的低字节 SPBRGH1 EUSART1 波特率发生器的高字节 SPBRG2 EUSART2 波特率发生器的低字节 SPBRGH2 EUSART2 波特率发生器的高字节 TXREG1 EUSART1 发送寄存器 TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D TXREG2 TXSTA2 EUSART2 发送寄存器 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 图注: — = 未实现位,读为 0。异步发送不使用阴影位。 复位值 所在页 279 279 116 128 130 124 126 119 121 55 278 278 — — — — — 277 277  2011-2013 Microchip Technology Inc. DS41412F_CN 第 271 页 PIC18(L)F2X/4XK22 16.1.2 EUSART 异步接收器 异步模式一般用于 RS-232 系统中。图 16-2 给出了接收 器框图。数据在 RXx/DTx 引脚上接收并驱动数据恢复模 块。数据恢复模块实际上是一个高速移位器,工作频率 为 16 倍波特率,而串行接收移位寄存器(Receive Shift Register, RSR)工作频率为比特率。所有 8 位或 9 位 字符移入后被立即传送到双字符的先进先出 (First-InFirst-Out, FIFO)存储区中。 FIFO 缓冲区允许先接收 两个完整字符和第三个字符的开始部分后,再启动软件 服务 EUSART 接收器。 FIFO 和 RSR 寄存器不能直接 用软件访问。通过 RCREGx 寄存器访问接收数据。 16.1.2.1 使能接收器 EUSART 接收器可通过配置以下 3 个控制位使能为异步 操作: • CREN = 1 • SYNC = 0 • SPEN = 1 假定所有其他 EUSART 控制位均处于其默认状态。 将 RCSTAx 寄存器的 CREN 位置 1 使能 EUSART 的接 收器电路。清零 TXSTAx 寄存器的 SYNC 位将 EUSART 配置为异步操作。将 RCSTAx 寄存器的 SPEN 位置 1 可使能 EUSART。必须通过将对应的 TRIS 控制位置 1 将 RXx/DTx I/O 引脚配置为输入。如果 RXx/DTx 引脚 与模拟外设共用,那么必须通过清零对应的 ANSEL 位 禁止模拟 I/O 功能。 16.1.2.2 接收数据 接收器的数据恢复电路在第一位的下降沿启动字符接 收。第一位也称启动 (Start)位,始终为零。数据恢复 电路计数传输半个位的时间至启动位的中点并验证该位 是否仍为零。如果该位非零则数据恢复电路中止字符接 收,不产生错误,并恢复寻找启动位的下降沿。如果启 动位被验证为零,则数据恢复电路计数一整个位时间至 下个位的中点。该位被一个择多检测电路采样,其结果 (0 或 1)被移入 RSR。重复此过程直到所有数据位均 被采样并移入 RSR。最后一个位时间被测量且其电平被 采样。此为停止 (Stop)位,始终为 1。如果数据恢复 电路在停止位处采样到 0,则置 1 此字符的帧错误标志 位,否则清零此字符的帧错误标志位。关于帧错误的更 多信息,请参见第 16.1.2.5 节 “ 接收帧错误 ”。 所有数据位和停止位被接收后,RSR 中的字符就被立即 传送到 EUSART 接收 FIFO,且 PIR1/PIR3 寄存器的 RCxIF 中断标志位被置 1。读取 RCREGx 寄存器时, FIFO 中顶部的字符被送出 FIFO。 注: 如果接收 FIFO 溢出,在溢出条件被清除前 不会接收更多字符。关于溢出错误的更多 信息,请参见第 16.1.2.6 节 “ 接收溢出错 误 ”。 16.1.2.3 接收数据极性 可通过 BAUDCONx 寄存器的 DTRXP 位来控制接收数 据的极性。该位的默认状态为 0,选择高电平有效接收 空闲和数据位。将 DTRXP 位设置为 1 将接收数据的极 性取反,从而选择低电平有效空闲和数据位。 DTRXP 位仅在异步模式下控制接收数据的极性。在同步模式 下, DTRXP 位有不同的功能。 DS41412F_CN 第 272 页  2011-2013 Microchip Technology Inc. 16.1.2.4 接收中断 只要 EUSART 接收器被使能且接收 FIFO 中存在未被读 取的字符,PIR1/PIR3 寄存器的 RCxIF 中断标志位就会 被置 1。 RCxIF 中断标志位是只读位,不能用软件置 1 或清零。 将以下位置 1 可允许 RCxIF 中断: • PIE1/PIE3 寄存器的 RCxIE 中断允许位 • INTCON 寄存器的 PEIE/GIEL 外设中断允许位 • INTCON 寄存器的 GIE/GIEH 全局中断允许位 当 FIFO 中存在未被读取的字符时,无论中断允许位的 状态如何, RCxIF 中断标志位均会被置 1。 16.1.2.5 接收帧错误 接收 FIFO 缓冲区中的每个字符都有相应的帧错误状态 位。帧 错 误 表 明 在 预 期 时 间 内 未 见 到 停 止 位。通 过 RCSTAx 寄存器的 FERR 位可访问帧错误状态。FERR 位表示接收 FIFO 中顶部的未读字符的状态。因此,在 读取 RCREGx 前必须读出 FERR 位。 FERR 位是只读位,只用于接收 FIFO 中顶部的未读字 符。帧错误(FERR = 1)并不会禁止接收更多字符。此 时不必将 FERR 位清零。从 FIFO 缓冲区读出下一个字 符将使 FIFO 进入下一个字符和下一个相应的帧错误。 将 RCSTAx 寄存器的 SPEN 位清零可复位 EUSART, 这样就可将 FERR 位强制清零。将 RCSTAx 寄存器的 CREN 位清零不影响 FERR 位。自身产生的帧错误不会 产生中断。 注: 如果接收FIFO中的所有接收字符均有帧错 误,反复读取 RCREGx 不会将 FERR 位清 零。 16.1.2.6 接收溢出错误 接收 FIFO 缓冲区可容纳两个字符。在访问 FIFO 前接 收 到 完 整 的 第 三 个 字 符 时 会 产 生 溢 出 错 误。此 时, RCSTAx 寄存器的 OERR 位置 1。 FIFO 缓冲区中已有 的字符可被读出,但溢出错误被清除前不能再接收其他 字符。将 RCSTAx 寄存器的 CREN 位清零或通过将 RCSTAx 寄存器的 SPEN 位清零复位 EUSART,可清 除该错误。 PIC18(L)F2X/4XK22 16.1.2.7 接收 9 位字符 EUSART 支持 9 位字符接收。当 RCSTAx 寄存器的 RX9 位置 1 时,EUSART 将在接收每个字符时将 9 个位移入 RSR。RCSTAx 寄存器的 RX9D 位是第 9 位,也是接收 FIFO 顶部未读字符的最高有效位。从接收 FIFO 缓冲区 读取 9 位数据时,在读取 RCREGx 的低 8 位前必须先 读取 RX9D 数据位。 16.1.2.8 地址检测 当多个接收器共用同一条发送线时,如在 RS-485 系统 中,有一个特殊的地址检测模式可供使用。将 RCSTAx 寄存器的 ADDEN 位置 1 可使能地址检测。 地址检测要求接收 9 位字符。使能地址检测时,只有第 9 个数据位置 1 的字符会被传送到接收 FIFO 缓冲区, 并将 RCxIF 中断标志位置 1。所有其他字符均被忽略。 接收到地址字符后,用户软件可决定地址是否与自身匹 配。地址匹配时,发生下一个停止位前,用户软件必须 通过清零 ADDEN 位禁止地址检测。当用户软件根据所 使用的报文协议检测到报文的末尾时,软件将 ADDEN 位置 1,将接收器重新置于地址检测模式。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 273 页 PIC18(L)F2X/4XK22 16.1.2.9 异步接收设置 1. 初始化SPBRGHx:SPBRGx寄存器对以及BRGH 和 BRG16 位,获得所需的波特率(见第 16.4 节 “EUSART 波特率发生器 (BRG) ”)。 2. 将RXx/DTx和TXx/CKx的TRIS控制位设置为1。 3. 将 SPEN 位和 RXx/DTx 引脚的 TRIS 位置 1 使 能串口。 SYNC 位必须清零才能进行异步操作。 4. 如果需要中断,将 RCxIE 中断允许位置 1,并将 INTCON寄存器的GIE/GIEH和PEIE/GIEL位置1。 5. 如果需要接收 9 位数据,将 RX9 位置 1。 6. 如果需要将接收极性取反,将 DTRXP 置 1。 7. 将 CREN 位置 1 使能接收。 8. 当字符从 RSR 被移入接收缓冲区时, RCxIF 中 断标志位将被置 1。如果 RCxIE 中断允许位也置 1,则产生中断。 9. 读取 RCSTAx 寄存器取得错误标志,以及第 9 个 数据位 (9 位数据接收使能时)。 10. 读取 RCREGx 寄存器从接收缓冲区取得接收数 据的低 8 位。 11. 发生溢出时,通过清零 CREN 接收器使能位清零 OERR 标志位。 16.1.2.10 9 位地址检测模式设置 此模式通常用于 RS-485 系统中。设置使能地址检测的 异步接收的步骤如下: 1. 初始化SPBRGHx:SPBRGx寄存器对以及BRGH 和 BRG16 位,获得所需的波特率(见第 16.4 节 “EUSART 波特率发生器 (BRG) ”)。 2. 将RXx/DTx和TXx/CKx的TRIS控制位设置为1。 3. 将 SPEN 位置 1 使能串口。SYNC 位必须清零才 能进行异步操作。 4. 如果需要中断,将 RCxIE 中断允许位置 1,并将 INTCON寄存器的GIE/GIEH和PEIE/GIEL位置1。 5. 将 RX9 位置 1 使能 9 位接收。 6. 将 ADDEN 位置 1 使能地址检测。 7. 如果需要将接收极性取反,将 DTRXP 置 1。 8. 将 CREN 位置 1 使能接收。 9. 当第 9 位置 1 的字符从 RSR 被移入接收缓冲区 时,RCxIF 中断标志位将被置 1。如果 RCxIE 中 断允许位也置 1,则产生中断。 10. 读取 RCSTAx 寄存器取得错误标志。第 9 个数据 位将始终置 1。 11. 读取RCREGx寄存器从接收缓冲区取得接收数据 的低 8 位。软件将决定此地址是否是器件地址。 12. 发生溢出时,通过清零 CREN 接收器使能位清零 OERR 标志位。 13. 如果器件被寻址,将 ADDEN 位清零以允许所有 接收到的数据被送入接收缓冲区并产生中断。 DS41412F_CN 第 274 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 16-5: 异步接收 RXx/DTx 引脚 接收移位 寄存器 接收缓冲寄存器 RCIDL 启动位 bit 0 bit 1 读接收 缓冲寄存器 RCREGx RCxIF (中断标志) OERR 位 CREN bit 7/8 停止位 启动位 bit 0 字1 RCREGx bit 7/8 启动位 停止位 字2 RCREGx bit 7/8 停止位 注: 此时序图显示了在 RXx/DTx 输入引脚上顺序接收的 3 个字。在第 3 个字后读 RCREGx(接收缓冲区)会使 OERR(溢出)位置 1。 表 16-2: 与异步接收相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BAUDCON1 ABDOVF RCIDL DTRXP CKTXP BRG16 — BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD RCREG1 RCSTA1 SPEN EUSART1 接收寄存器 RX9 SREN CREN ADDEN FERR RCREG2 RCSTA2 SPEN EUSART2 接收寄存器 RX9 SREN CREN ADDEN FERR SPBRG1 SPBRGH1 SPBRG2 SPBRGH2 TRISB(2) TRISB7 TRISB6 EUSART1 波特率发生器的低字节 EUSART1 波特率发生器的高字节 EUSART2 波特率发生器的低字节 EUSART2 波特率发生器的高字节 TRISB5 TRISB4 TRISB3 TRISB2 TRISC TRISD(1) TRISC7 TRISD7 TRISC6 TRISD6 TRISC5 TRISC4 TRISC3 TRISD5 TRISD4 TRISD3 TRISC2 TRISD2 TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH 图注: — = 未实现位,读为 0。异步接收不使用阴影位。 注 1: PIC18(L)F4XK22 器件。 2: PIC18(L)F2XK22 器件。 WUE WUE INT0IF TMR2IP TMR3GIP TMR2IE TMR3GIE TMR2IF TMR3GIF TMR2MD OERR OERR TRISB1 TRISC1 TRISD1 TRMT TRMT ABDEN ABDEN RBIF TMR1IP TMR1GIP TMR1IE TMR1GIE TMR1IF TMR1GIF TMR1MD RX9D RX9D TRISB0 TRISC0 TRISD0 TX9D TX9D 寄存器 所在页 279 279 116 128 130 124 126 119 121 55 — 278 — 278 — — — — 156 156 156 277 277  2011-2013 Microchip Technology Inc. DS41412F_CN 第 275 页 PIC18(L)F2X/4XK22 16.2 异步操作的时钟精确性 内部振荡器模块输出 (HFINTOSC)在出厂时做了校 准。但是, VDD 或温度变化时 HFINTOSC 频率有可能 漂移,这将直接影响异步波特率。有两种方法可用来调 整波特率时钟,但它们都需要某种参考时钟源。 第一种 (推荐)方法使用 OSCTUNE 寄存器调整 HFINTOSC 输出。调整 OSCTUNE 寄存器的值可对系统 时钟源的分辨率进行微调。更多信息,请参见第 2.6 节 “ 内部时钟模式 ”。 另一种方法调整波特率发生器的值。自动波特率检测可 自动完成这种调整(见第 16.4.1 节 “ 自动波特率检测 ”)。 通过调整波特率发生器来补偿外设时钟频率的逐渐变化 时,这种方法的分辨率可能不够。 DS41412F_CN 第 276 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 16.3 寄存器定义:EUSART 控制 寄存器 16-1: TXSTAX:发送状态和控制寄存器 R/W-0 CSRC bit 7 R/W-0 TX9 R/W-0 TXEN(1) R/W-0 SYNC R/W-0 SENDB R/W-0 BRGH 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 bit 7 CSRC:时钟源选择位 异步模式: 无关位 同步模式: 1 = 主模式 (时钟由内部 BRG 产生) 0 = 从模式 (时钟来自外部时钟源) bit 6 TX9:9 位发送使能位 1 = 选择 9 位发送 0 = 选择 8 位发送 bit 5 TXEN:发送使能位 (1) 1 = 使能发送 0 = 禁止发送 bit 4 SYNC:EUSART 模式选择位 1 = 同步模式 0 = 异步模式 bit 3 SENDB:发送间隔字符位 异步模式: 1 = 在下一次发送时发送同步间隔字符 (完成时由硬件清零) 0 = 同步间隔字符发送完成 同步模式: 无关位 bit 2 BRGH:高波特率选择位 异步模式: 1 = 高速 0 = 低速 同步模式: 在此模式下未使用 bit 1 TRMT:发送移位寄存器状态位 1 = TSR 空 0 = TSR 满 bit 0 TX9D:发送数据的第 9 位 可以是地址 / 数据位或奇偶校验位。 注 1: 在同步模式下, SREN/CREN 可改写 TXEN。 R-1 TRMT x = 未知 R/W-0 TX9D bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 277 页 PIC18(L)F2X/4XK22 寄存器 16-2: R/W-0 SPEN bit 7 RCSTAX:接收状态和控制寄存器 R/W-0 RX9 R/W-0 SREN R/W-0 CREN R/W-0 ADDEN R-0 FERR R-0 OERR 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 SPEN:串口使能位 1 = 使能串口 (将 RXx/DTx 和 TXx/CKx 引脚配置为串口引脚) 0 = 禁止串口 (保持在复位状态) bit 6 RX9:9 位接收使能位 1 = 选择 9 位接收 0 = 选择 8 位接收 bit 5 SREN:单字节接收使能位 异步模式: 无关位 同步主模式: 1 = 使能单字节接收 0 = 禁止单字节接收 此位在接收完成后清零。 同步从模式 无关位 bit 4 CREN:连续接收使能位 异步模式: 1 = 使能接收器 0 = 禁止接收器 同步模式: 1 = 使能连续接收,直到使能位 CREN 清零 (CREN 的优先级高于 SREN) 0 = 禁止连续接收 bit 3 ADDEN:地址检测使能位 9 位异步模式 (RX9 = 1): 1 = 当 RSR<8> 置 1 时,使能地址检测,允许中断并装入接收缓冲区 0 = 禁止地址检测,接收所有字节并且第 9 位可作为奇偶校验位 8 位异步模式 (RX9 = 0): 无关位 bit 2 FERR:帧错误位 1 = 帧错误 (可以通过读 RCREGx 寄存器更新该位并接收下一个有效字节) 0 = 无帧错误 bit 1 OERR:溢出错误位 1 = 溢出错误 (可以通过清零 CREN 位来清零该位) 0 = 无溢出错误 bit 0 RX9D:接收数据的第 9 位 该位可以是地址 / 数据位或奇偶校验位,并且必须由用户固件计算得到。 R-0 RX9D bit 0 DS41412F_CN 第 278 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 16-3: BAUDCONX:波特率控制寄存器 R/W-0 R-1 R/W-0 R/W-0 R/W-0 U-0 ABDOVF RCIDL DTRXP CKTXP BRG16 — bit 7 R/W-0 WUE R/W-0 ABDEN bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 ABDOVF:自动波特率检测溢出位 异步模式: 1 = 自动波特率定时器溢出 0 = 自动波特率定时器未溢出 同步模式: 无关位 bit 6 RCIDL:接收空闲标志位 异步模式: 1 = 接收器空闲 0 = 已检测到启动位且接收器处于活动状态 同步模式: 无关位 bit 5 DTRXP:数据 / 接收极性选择位 异步模式: 1 = 接收数据 (RXx)反相 (低电平有效) 0 = 接收数据 (RXx)未反相 (高电平有效) 同步模式: 1 = 数据 (DTx)反相 (低电平有效) 0 = 数据 (DTx)未反相 (高电平有效) bit 4 CKTXP:时钟 / 发送极性选择位 异步模式: 1 = 发送 (TXx)的空闲状态为低电平 0 = 发送 (TXx)的空闲状态为高电平 同步模式: 1 = 在时钟的下降沿改变数据,在时钟的上升沿采样数据 0 = 在时钟的上升沿改变数据,在时钟的下降沿采样数据 bit 3 BRG16:16 位波特率发生器位 1 = 使用 16 位波特率发生器 (SPBRGHx:SPBRGx) 0 = 使用 8 位波特率发生器 (SPBRGx) bit 2 未实现:读为 0 bit 1 WUE:唤醒使能位 异步模式: 1 = 接收器正在等待下降沿。不会接收到任何字符,但 RCxIF 在下降沿将被置 1。WUE 在上升沿将自动清零。 0 = 接收器正常工作 同步模式: 无关位 bit 0 ABDEN:自动波特率检测使能位 异步模式: 1 = 使能自动波特率模式 (完成自动波特率后清零) 0 = 禁止自动波特率模式 同步模式: 无关位  2011-2013 Microchip Technology Inc. DS41412F_CN 第 279 页 PIC18(L)F2X/4XK22 16.4 EUSART 波特率发生器 (BRG) 波特率发生器 (BRG)是 8 位或 16 位定时器,专用于 支持异步和同步 EUSART 操作。默认情况下, BRG 工 作在 8 位模式下。将 BAUDCONx 寄存器的 BRG16 位 置 1 可选择 16 位模式。 SPBRGHx:SPBRGx 寄存器对决定自由运行波特率定时 器的周期。在异步模式下,波特率周期的倍数由 TXSTAx 寄存器的 BRGH 位和 BAUDCONx 寄存器的 BRG16 位 决定。在同步模式下, BRGH 位被忽略。 表 16-3 提供了确定波特率的公式。例 16-1 提供了确定 波特率和波特率误差的计算示例。 为便于您使用,各种异步模式的典型波特率和误差值已 经计算出来,如表 16-5 所示。使用高波特率 (BRGH = 1)或 16 位 BRG (BRG16 = 1)有助于降低波特率误 差。 16 位 BRG 模式用于在高速振荡器频率下取得较缓 慢的波特率。 将新值写入 SPBRGHx:SPBRGx 寄存器对将导致 BRG 定时器复位 (或清零)。这可以确保 BRG 无需等待定 时器溢出就可以输出新的波特率。 如果系统时钟在主动接收操作过程中发生变化,可能会 导 致 接 收 错 误 或 数 据 丢 失。为 避 免 此 问 题,应 检 查 RCIDL 位的状态,以确保在改变系统时钟前接收操作处 于空闲状态。 例 16-1: 计算波特率误差 器件工作在 FOSC = 16 MHz,目标波特率 = 9600,异 步模式, 8 位 BRG: Desir目ed标Ba波ud特R率ate = -6---4---(--[---S---P---B----R----G----H-F---x-O--:--SS---CP----B---R----G----x---]----+------1---) 求解 SPBRGHx:SPBRGx: X = -D---------e-----s---目--i------r----标e------Fd------波--6O--B----4--Sa--特----Cu------d--率--------R-------a------t-------e-- – 1 = -1------6-------09------066------004------00------0------0-- – 1 = [25.042] = 25 Calculate计d B算a波ud特Ra率te = -6-1--4-6--(-0-2--0-5--0---+0---0--1-0---) = 9615 E误rr差or = C----a---计-l-c---.-算--B----a波---u-D--d特---e-R-s目-率--ia-r--t标-ee--d---–波--B--D-目-a特--e-u--s标-d率-i--r-R-波e---ad---t特-e-B---a-率--u---d-----R---a---t--e--- = (---9---6---1---59---6-–--0---90---6---0---0----) = 0.16% 表 16-3: 波特率公式 SYNC 配置位 BRG16 BRGH BRG/EUSART 模式 0 0 0 0 1 1 图注: 0 0 8 位 / 异步 0 1 8 位 / 异步 1 0 16 位 / 异步 1 1 16 位 / 异步 0 x 8 位 / 同步 1 x 16 位 / 同步 x = 无关位, n = SPBRGHx:SPBRGx 寄存器对的值 波特率公式 FOSC/[64 (n+1)] FOSC/[16 (n+1)] FOSC/[4 (n+1)] DS41412F_CN 第 280 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 16-4: 与波特率发生器相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BAUDCON1 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D SPBRG1 SPBRGH1 SPBRG2 SPBRGH2 PIR1 — ADIF EUSART1 波特率发生器的低字节 EUSART1 波特率发生器的高字节 EUSART2 波特率发生器的低字节 EUSART2 波特率发生器的高字节 RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 图注: — = 未实现,读为 0。 BRG 不使用阴影位。 复位值 所在页 279 279 55 278 278 — — — — 119 121 277 277 表 16-5: 异步模式下的波特率 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 64.000 MHz 实际 波特率 % SPBRxG 值 误差 (十进制) — — — — — — — — — 9615 0.16 103 10417 0.00 95 19.23k 0.16 51 58.82k 2.12 16 111.11k -3.55 8 SYNC = 0, BRGH = 0, BRG16 = 0 FOSC = 18.432 MHz FOSC = 16.000 MHz 实际 波特率 % SPBRGx 值 实际 误差 (十进制) 波特率 % SPBRGx 值 误差 (十进制) — — — — — — 1200 0.00 239 1202 0.16 207 2400 0.00 119 2404 0.16 103 9600 0.00 29 9615 0.16 25 10286 -1.26 27 10417 0.00 23 19.20k 0.00 14 19.23k 0.16 12 57.60k 0.00 7 — — — — — — — — — FOSC = 11.0592 MHz 实际 波特率 % 误差 SPBRGx 值 (十进制) — — — 1200 0.00 143 2400 0.00 71 9600 0.00 17 10165 -2.42 16 19.20k 0.00 8 57.60k 0.00 2 — — — 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 8.000 MHz 实际 波特率 % SPBRxG 值 误差 (十进制) — — — 1202 0.16 103 2404 0.16 51 9615 0.16 12 10417 0.00 11 — — — — — — — — — SYNC = 0, BRGH = 0, BRG16 = 0 FOSC = 4.000 MHz 实际 波特率 % SPBRGx 值 误差 (十进制) 300 0.16 207 FOSC = 3.6864 MHz 实际 波特率 % SPBRGx 值 误差 (十进制) 300 0.00 191 1202 0.16 51 1200 0.00 47 2404 0.16 25 2400 0.00 23 — — — 9600 0.00 5 10417 0.00 5 — — — — — — 19.20k 0.00 2 — — — 57.60k 0.00 0 — — — — — — FOSC = 1.000 MHz 实际 波特率 % 误差 SPBRGx 值 (十进制) 300 0.16 51 1202 0.16 12 — — — — — — — — — — — — — — — — — —  2011-2013 Microchip Technology Inc. DS41412F_CN 第 281 页 PIC18(L)F2X/4XK22 表 16-5: 异步模式下的波特率 (续) 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 64.000 MHz 实际 波特率 % SPBRGx 值 误差 (十进制) — — — — — — — — — — — — — — — 19.23k 0.16 207 57.97k 0.64 68 114.29k -0.79 34 SYNC = 0, BRGH = 1, BRG16 = 0 FOSC = 18.432 MHz FOSC = 16.000 MHz 实际 波特率 % SPBRGx 值 实际 误差 (十进制) 波特率 % SPBRGx 值 误差 (十进制) — — — — — — — — — — — — — — — — — — 9600 0.00 119 9615 0.16 103 10378 -0.37 110 10417 0.00 95 19.20k 0.00 59 19.23k 0.16 51 57.60k 0.00 19 58.82k 2.12 16 115.2k 0.00 9 111.1k -3.55 8 FOSC = 11.0592 MHz 实际 波特率 % 误差 SPBRGx 值 (十进制) — — — — — — — — — 9600 0.00 71 10473 0.53 65 19.20k 0.00 35 57.60k 0.00 11 115.2k 0.00 5 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 8.000 MHz 实际 波特率 % SPBRGx 值 误差 (十进制) — — — — — — 2404 0.16 207 9615 0.16 51 10417 0.00 47 19231 0.16 25 55556 -3.55 8 — — — SYNC = 0, BRGH = 1, BRG16 = 0 FOSC = 4.000 MHz FOSC = 3.6864 MHz 实际 波特率 % SPBRGx 值 实际 误差 (十进制) 波特率 % SPBRGx 值 误差 (十进制) — — — — — — 1202 0.16 207 1200 0.00 191 2404 0.16 103 2400 0.00 95 9615 0.16 25 9600 0.00 23 10417 0.00 23 10473 0.53 21 19.23k 0.16 12 19.2k 0.00 11 — — — 57.60k 0.00 3 — — — 115.2k 0.00 1 FOSC = 1.000 MHz 实际 波特率 % 误差 SPBRGx 值 (十进制) 300 0.16 207 1202 0.16 51 2404 0.16 25 — — — 10417 0.00 5 — — — — — — — — — 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 64.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.0 1200.1 2399 9592 10417 19.23k 57.97k 114.29k 0.00 0.01 -0.02 -0.08 0.00 0.16 0.64 -0.79 13332 3332 1666 416 383 207 68 34 SYNC = 0, BRGH = 0, BRG16 = 1 FOSC = 18.432 MHz FOSC = 16.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.0 1200 2400 9600 10378 19.20k 57.60k 115.2k 0.00 0.00 0.00 0.00 -0.37 0.00 0.00 0.00 3839 959 479 119 110 59 19 9 300.03 1200.5 2398 9615 10417 19.23k 58.82k 111.11k 0.01 0.04 -0.08 0.16 0.00 0.16 2.12 -3.55 3332 832 416 103 95 51 16 8 FOSC = 11.0592 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.0 0.00 2303 1200 0.00 575 2400 0.00 287 9600 0.00 71 10473 0.53 65 19.20k 0.00 35 57.60k 0.00 11 115.2k 0.00 5 DS41412F_CN 第 282 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 16-5: 异步模式下的波特率 (续) 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 8.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 299.9 1199 2404 9615 10417 19.23k 55556 — -0.02 -0.08 0.16 0.16 0.00 0.16 -3.55 — 1666 416 207 51 47 25 8 — SYNC = 0, BRGH = 0, BRG16 = 1 FOSC = 4.000 MHz FOSC = 3.6864 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.1 0.04 832 300.0 0.00 767 1202 0.16 207 1200 0.00 191 2404 0.16 103 2400 0.00 95 9615 0.16 25 9600 0.00 23 10417 0.00 23 10473 0.53 21 19.23k 0.16 12 19.20k 0.00 11 — — — 57.60k 0.00 3 — — — 115.2k 0.00 1 FOSC = 1.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.5 0.16 207 1202 0.16 51 2404 0.16 25 — — — 10417 0.00 5 — — — — — — — — — 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 64.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300 1200 2400 9598.1 10417 19.21k 57.55k 115.11k 0.00 0.00 0.00 -0.02 0.00 0.04 -0.08 -0.08 53332 13332 6666 1666 1535 832 277 138 SYNC = 0, BRGH = 1, BRG16 = 1 或 SYNC = 1, BRG16 = 1 FOSC = 18.432 MHz FOSC = 16.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.0 0.00 1200 0.00 2400 0.00 9600 0.00 10425 0.08 19.20k 0.00 57.60k 0.00 115.2k 0.00 15359 3839 1919 479 441 239 79 39 300.0 1200.1 2399.5 9592 10417 19.23k 57.97k 114.29k 0.00 0.01 -0.02 -0.08 0.00 0.16 0.64 -0.79 13332 3332 1666 416 383 207 68 34 FOSC = 11.0592 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.0 0.00 1200 0.00 2400 0.00 9600 0.00 10433 0.16 19.20k 0.00 57.60k 0.00 115.2k 0.00 9215 2303 1151 287 264 143 47 23 波特率 300 1200 2400 9600 10417 19.2k 57.6k 115.2k FOSC = 8.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.0 1200 2401 9615 10417 19.23k 0.00 -0.02 0.04 0.16 0.00 0.16 6666 1666 832 207 191 103 57.14k -0.79 34 117.6k 2.12 16 SYNC = 0, BRGH = 1, BRG16 = 1 或 SYNC = 1, BRG16 = 1 FOSC = 4.000 MHz FOSC = 3.6864 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.0 0.01 1200 0.04 2398 0.08 9615 0.16 10417 0.00 19.23k 0.16 3332 832 416 103 95 51 300.0 0.00 1200 0.00 2400 0.00 9600 0.00 10473 0.53 19.20k 0.00 3071 767 383 95 87 47 58.82k 2.12 16 57.60k 0.00 15 111.1k -3.55 8 115.2k 0.00 7 FOSC = 1.000 MHz 实际 波特率 % 误差 SPBRGHx: SPBRGx (十进制) 300.1 0.04 832 1202 0.16 207 2404 0.16 103 9615 0.16 25 10417 0.00 23 19.23k 0.16 12 — — — — — —  2011-2013 Microchip Technology Inc. DS41412F_CN 第 283 页 PIC18(L)F2X/4XK22 16.4.1 自动波特率检测 EUSART 模块支持波特率自动检测和校准。 在自动波特率检测(Auto-Baud Rate Detect,ABD)模 式下,BRG 的时钟信号反向。BRG 并不为进入的 RXx 信号提供时钟信号,而是由 RXx 信号为 BRG 定时。波 特率发生器用于为接收的 55h (ASCII“U”)定时,这是 LIN 总线的同步字符。此字符的特殊之处在于它具有包 括停止位边沿在内的 5 个上升沿。 将 BAUDCONx 寄存器的 ABDEN 位置 1 将启动自动波特 率校验序列 (第 16.4.2 节 “ 自动波特率溢出 ”)。当发 生 ABD 序列时,EUSART 状态机保持在空闲状态。在接 收线的第一个上升沿(启动位之后),SPBRGx使用BRG 计数器时钟递增计数,如表 16-6 所示。在第 8 位周期的 末尾将在 RXx/DTx 引脚上出现第 5 个上升沿。此时,累 计数据即正确的 BRG 周期总数被留在 SPBRGHx:SPBRGx 寄存器对中,ABDEN 位被自动清零 而 RCxIF 中断标志被置 1。要清除 RCxIF 中断,需要执 行对 RCREGx 的读操作。RCREGx 的内容应该被丢弃。 校准不使用 SPBRGHx 寄存器的模式时,用户可通过查 询 SPBRGHx 寄存器的值是否为 00h 来验证 SPBRGx 寄 存器是否溢出。 BRG 自动波特率时钟由 BRG16 和 BRGH 位决定,如 表 16-6 所示。在 ABD 期间,SPBRGHx 和 SPBRGx 寄 存器共同用作 16 位计数器,这与 BRG16 位的设置无 关。在校准波特率周期时,SPBRGHx 和 SPBRGx 寄存 器的时钟频率为 BRG 基本时钟频率的 1/8。得到的字节 测量结果为全速下的平均位时间。 注 1: 如果 WUE 位和 ABDEN 位都置 1,自动 波特率检测将发生在间隔字符之后的字节 开始 (见第 16.4.3 节 “ 接收到间隔字符 时自动唤醒 ”)。 2: 需要由用户来判断输入字符的波特率是否 处于所选 BRG 时钟源范围内。某些振荡器 频率和 EUSART 波特率组合不可能实现。 3: 在自动波特率过程中,自动波特率计数器从 1 开始计数。自动波特率序列完成后,为了 得 到 最 准 确 的 结 果,应 从 SPBRGHx:SPBRGx 寄存器对的值中减去 1。 表 16-6: BRG 计数器时钟速率 BRG16 BRGH BRG 基本时钟 BRG ABD 时钟 0 0 FOSC/64 FOSC/512 0 1 FOSC/16 FOSC/128 1 1 注: 0 FOSC/16 FOSC/128 1 FOSC/4 FOSC/32 在 ABD 序列期间,SPBRGx 和 SPBRGHx 寄存器同时用作 16 位计数器,与 BRG16 的设置无关。 图 16-6: BRG 值 RXx/DTx 引脚 自动波特率校准 XXXXh 0000h 边沿 1 启动位 bit 0 bit 1 边沿 2 bit 2 bit 3 边沿 3 bit 4 bit 5 边沿 4 bit 6 bit 7 001Ch 边沿 5 停止位 BRG 时钟 由用户置 1 ABDEN 位 RCIDL RCxIF 位 (中断) 读 RCREGx SPBRGx XXh SPBRGHx XXh 注 1: ABD 序列要求 EUSART 模块配置为异步模式。 自动清零 1Ch 00h DS41412F_CN 第 284 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 16.4.2 自动波特率溢出 在自动波特率检测过程中,如果在 RX 引脚上检测到第 5 个上升沿之前波特率计数器溢出,则 BAUDCONx 寄 存器的 ABDOVF 位将被置 1。 ABDOVF 位指示计数器 已超出适合 SPBRGHx:SPBRGx 寄存器对的 16 位的最 大计数。在 ABDOVF 置 1 后,计数器将继续计数,直 到在 RXx/DTx 引脚上检测到第 5 个上升沿为止。一旦检 测到第 5 个 RXx/DTx 边沿,硬件会将 RCxIF 中断标志 置 1,并将 BAUDCONx 寄存器的 ABDEN 位清零。随 后可以通过读取 RCREGx 将 RCxIF 标志清零。ABDOVF 标志可直接用软件清零。 若要在 RCxIF 标志置 1 前终止自动波特率过程,请先将 ABDEN 位清零,然后将 ABDOVF 位清零。如果没有先 将 ABDEN 位清零, ABDOVF 位将保持置 1 状态。 16.4.3 接收到间隔字符时自动唤醒 在休眠模式下,EUSART 的所有时钟都会暂停。因此, 波特率发生器处于不工作状态,不能正常进行字符接 收。自动唤醒功能使控制器可被 RXx/DTx 线上的活动唤 醒。该功能只在异步模式下可用。 自动唤醒功能可通过将 BAUDCONx 寄存器的 WUE 位 置 1 来使能。一旦置 1,RXx/DTx 上的正常接收序列就 被禁止, EUSART 保持在空闲状态,监视与 CPU 模式 无关的唤醒事件。唤醒事件包含 RXx/DTx 线上由高至低 的跳变。(这与同步间隔字符的开始或 LIN 协议的唤醒 信号字符一致。) EUSART 模块产生的 RCxIF 中断与唤醒事件同步。在正 常 CPU 工作模式下,中断产生与 Q 时钟同步(图 16-7), 而器件处于休眠模式时则异步发生 (图 16-8)。通过读 RCREGx 寄存器可清除中断条件。 在间隔字符末尾 RXx 线由低至高的跳变将自动清零 WUE 位。这向用户表明间隔事件结束。此时,EUSART 模块处于空闲模式,等待接收下一个字符。 16.4.3.1 特殊注意事项 间隔字符 在发生唤醒事件期间为了避免字符错误或字符碎片,唤 醒字符必须为全零。 唤醒被使能时,其工作与数据流的低电平时间无关。如 果 WUE 位置 1 并接收到了有效的非零字符,则从启动 位至第一个上升沿的低电平时间将被解读为唤醒事件。 字符的其余位将作为碎片字符接收,后续字符有可能产 生帧错误或溢出错误。 因此,发送的首字符必须为全 0。这必须持续 10 个或更 长的位时间,对于 LIN 总线建议持续 13 个位时间,而 标准 RS-232 器件可为任意个位时间。 振荡器起振时间 必须考虑振荡器起振时间,特别在使用起振时间较长的 振荡器 (即, LP、 XT 或 HS/PLL 模式)的应用中。同 步间隔 (或唤醒信号)字符必须足够长,并随后有一个 足够长的间隔时间,以使所选的振荡器有足够的时间起 振并在这段时间对 EUSART 进行适当初始化。 WUE 位 唤醒事件会通过将 RCxIF 位置 1 产生一个接收中断。 WUE 位在 RXx/DTx 的上升沿由硬件清零。之后软件通 过读取 RCREGx 寄存器并丢弃其内容将中断条件清除。 要确保不丢失实际数据,应在将 WUE 位置 1 前检查 RCIDL 位,验证没有接收操作在进行。如果未发生接收 操作,可在进入休眠模式前将 WUE 位置 1。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 285 页 PIC18(L)F2X/4XK22 图 16-7: 正常操作时的自动唤醒位 (WUE)时序 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1 由用户置 1 自动清零 WUE 位 RXx/DTx 线 RCxIF 因用户读 RCREGx 而清零 注 1: WUE 位置 1 时, EUSART 保持在空闲状态。 图 16-8: 休眠时的自动唤醒位 (WUE)时序 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1 由用户置 1 WUE 位 RXx/DTx 线 RCxIF 执行了休眠指令 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4 自动清零 休眠结束 注1 因用户读 RCREGx 而清零 注 1: 如果唤醒事件需要较长的振荡器预热时间,在 stposc 信号仍然有效时可能发生 WUE 位自动清零。该时序与 Q 时钟出现与否无关。 2: WUE 位置 1 时, EUSART 保持在空闲状态。 DS41412F_CN 第 286 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 16.4.4 间隔字符序列 EUSART 模块能够发送符合 LIN 总线标准的特殊间隔字 符序列。间隔字符包含 1 个启动位,随后的 12 个 0 位 和 1 个停止位。 要发送间隔字符,应将 TXSTAx 寄存器的 SENDB 和 TXEN 位置 1。随后对 TXREGx 执行写操作可启动间隔 字符发送。写入TXREGx的数据值会被忽略并发送全0。 在发送了相应的停止位后,硬件会自动将 SENDB 位复 位。这样用户可以在间隔字符(在 LIN 规范中通常是同 步字符)后预先将下一个要发送字节装入发送 FIFO。 TXSTAx 寄存器的 TRMT 位表明发送操作何时处于激活 或空闲状态,这与正常发送时相同。图 16-9 给出了发送 间隔字符的时序。 16.4.4.1 间隔和同步发送序列 以下序列将启动报文帧头,它由间隔字符和其后的自动 波特率同步字节组成。这是 LIN 总线主器件的典型序列。 1. 将 EUSART 配置为所需的模式。 2. 将 TXEN 和 SENDB 位置 1 使能间隔序列。 3. 将无效字符装入 TXREGx,启动发送(该值会被 忽略)。 4. 将 “55h” 写入 TXREGx,以便将同步字符装入发 送 FIFO 缓冲区。 5. 发送间隔字符后, SENDB 位被硬件复位,同步 字符随后被发送。 当 TXREGx 为空时 (由 TXxIF 指示),下一个数据字 节会写入 TXREGx。 16.4.5 接收间隔字符 增强型 EUSART 模块接收间隔字符有两种方法。 第一种检测间隔字符的方法采用 RCSTAx 寄存器的 FERR 位和如 RCREGx 所指示的接收数据。假定波特 率发生器已初始化为所需的波特率。 以下成立时,表明接收到间隔字符: • RCxIF 位被置 1 • FERR 位被置 1 • RCREGx = 00h 第二种方法采用第 16.4.3 节 “ 接收到间隔字符时自动唤 醒 ” 中所述的自动唤醒功能。通过使能此功能,EUSART 将采样 RXx/DTx 线的下两次跳变,产生 RCxIF 中断,接 收下一个数据字节并再产生一次中断。 请注意在间隔字符后,用户通常希望使能自动波特率检 测功能。采用这两种方法时,用户均可在 EUSART 进 入休眠模式前将 BAUDCONx 寄存器的 ABDEN 位置 1。 图 16-9: 发送间隔字符序列 写入 TXREGx BRG 输出 (移位时钟) TXx/CKx(引脚) 无效写入 启动位 bit 0 TXxIF 位 (发送 中断标志) TRMT 位 (发送移位 寄存器空标志) SENDB (发送间隔 控制位) 此时采样 SENDB bit 1 间隔 bit 11 停止位 自动清零  2011-2013 Microchip Technology Inc. DS41412F_CN 第 287 页 PIC18(L)F2X/4XK22 16.5 EUSART 同步模式 同步串行通信通常用于具有一个主器件和一个或多个从 器件的系统中。主器件包含生成波特率所需的电路,可 将时钟提供给系统中的所有器件。从器件使用主时钟, 可不再需要内部时钟生成电路。 同步模式下有两条信号线:双向数据线和时钟线。从器 件使用主器件提供的外部时钟将串行数据移入或移出相 应的接收和发送移位寄存器。由于数据线是双向的,同 步操作只能是半双工的。半双工指主从器件能够接收和 发送数据,但不能同时进行。EUSART 可作为主器件, 也可作为从器件。 同步发送时不使用启动位和停止位。 16.5.1 同步主模式 使用以下位将 EUSART 配置为同步主操作: • SYNC = 1 • CSRC = 1 • SREN = 0(用于发送); SREN = 1(用于接收) • CREN = 0(用于发送); CREN = 1(用于接收) • SPEN = 1 将 TXSTAx 寄存器的 SYNC 位置 1 将器件配置为同步操 作。将 TXSTAx 寄存器的 CSRC 位置 1 可将器件配置为 主器件。将 RCSTAx 寄存器的 SREN 和 CREN 位清零可 确保器件处于发送模式,否则器件将被配置为接收。将 RCSTAx 寄存器的 SPEN 位置 1 可使能 EUSART。如果 RXx/DTx 或 TXx/CKx 引脚与模拟外设共用,那么必须通 过清零对应的 ANSEL 位禁止模拟 I/O 功能。 与 RXx/DTx 和 TXx/CKx 引脚对应的 TRIS 位应置 1。 16.5.1.1 主时钟 同步数据传送使用独立的时钟线,时钟与数据同步。配 置为主器件的器件将时钟信号发送到 TXx/CKx 线上。 EUSART 配置为同步发送或接收操作时,自动使能 TXx/ CKx 引脚输出驱动器。串行数据位在时钟前沿改变,以 确保其在时钟的后续边沿有效。为每个数据位产生一个 时钟周期。数据位有多少,就产生多少个时钟周期。 16.5.1.2 时钟极性 提供了时钟极性选项以与 Microwire 兼容。时钟极性通 过 BAUDCONx 寄存器的 CKTXP 位选择。将 CKTXP 位置 1 将时钟空闲状态设置为高电平。当 CKTXP 位置 1 时,在每个时钟的下降沿改变数据,在每个时钟的上 升沿采样数据。将 CKTXP 位清零将时钟空闲状态设置 为低电平。当 CKTXP 位清零时,在每个时钟的上升沿 改变数据,在每个时钟的下降沿采样数据。 16.5.1.3 同步主发送 从器件的 RXx/DTx 引脚输出数据。 EUSART 配置为同 步主发送操作时, RXx/DTx 和 TXx/CKx 引脚的输出驱 动器被自动使能。 向 TXREGx寄存器写入一个字符时启动发送。如果 TSR 中仍保存前一个字符的全部或部分,则新字符被保存在 TXREGx 中,直到前一个字符的最后一位被发送。如果 这是首字符,或前一个字符被完全从 TSR 中送出, TXREGx 中的数据就立即被传送到 TSR。字符发送在数 据从 TXREGx 送入 TSR 后立即开始。 每个数据位在主时钟的时钟前沿改变,并在下一个时钟 前沿到来前保持有效。 注: TSR 寄存器不映射到数据存储器中,因此 用户无法使用。 16.5.1.4 数据极性 可通过 BAUDCONx 寄存器的 DTRXP 位来控制发送和 接收数据的极性。该位的默认状态为 0,选择高电平有 效发送和接收数据。将 DTRXP 位设置为 1 将数据极性 取反,从而选择低电平有效发送和接收数据。 DS41412F_CN 第 288 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 16.5.1.5 同步主发送设置 1. 初始化SPBRGHx:SPBRGx寄存器对以及BRGH 和 BRG16 位,获得所需的波特率(见第 16.4 节 “EUSART 波特率发生器 (BRG) ”)。 2. 将RXx/DTx和TXx/CKx的TRIS控制位设置为1。 3. 将 SYNC、SPEN 和 CSRC 位置 1 使能同步主串 口。将与 RXx/DTx 和 TXx/CKx I/O 引脚对应的 TRIS 位置 1。 图 16-10: 同步发送 RXx/DTx 引脚 TXx/CKx 引脚 (SCKP = 0) TXx/CKx 引脚 (SCKP = 1) 写入 TXREGx 寄存器 TXxIF 位 (中断标志) 写字 1 TRMT 位 bit 0 bit 1 bit 2 字1 写字 2 TXEN 位 ‘1’ 注: 同步主模式, SPBRGx = 0,连续发送两个 8 位字。 4. 将 SREN 和 CREN 位清零禁止接收模式。 5. 将 TXEN 位置 1 使能发送模式。 6. 如果需要 9 位发送,将 TX9 位置 1。 7. 如果需要中断,将 TXxIE、 GIE/GIEH 和 PEIE/ GIEL 中断允许位置 1。 8. 如果选择了 9 位发送,应将第 9 位装入 TX9D 位。 9. 将数据装入 TXREGx 寄存器,启动发送。 bit 7 bit 0 bit 1 bit 7 字2 ‘1’ 图 16-11: 同步发送 (由 TXEN 位控制) RXx/DTx 引脚 bit 0 bit 1 bit 2 bit 6 bit 7 TXx/CKx 引脚 写入 TXREGx 寄存器 TXxIF 位 TRMT 位 TXEN 位  2011-2013 Microchip Technology Inc. DS41412F_CN 第 289 页 PIC18(L)F2X/4XK22 表 16-7: 与同步主发送相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BAUDCON1 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D SPBRG1 SPBRGH1 SPBRG2 SPBRGH2 TRISB(2) TRISB7 TRISB6 EUSART1 波特率发生器的低字节 EUSART1 波特率发生器的高字节 EUSART2 波特率发生器的低字节 EUSART2 波特率发生器的高字节 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 TRISC TRISD(1) TRISC7 TRISD7 TRISC6 TRISD6 TRISC5 TRISD5 TRISC4 TRISD4 TRISC3 TRISD3 TRISC2 TRISC1 TRISC0 TRISD2 TRISD1 TRISD0 TXREG1 TXSTA1 CSRC EUSART1 发送寄存器 TX9 TXEN SYNC SENDB BRGH TRMT TX9D TXREG2 TXSTA2 CSRC EUSART2 发送寄存器 TX9 TXEN SYNC SENDB BRGH TRMT TX9D 图注: — = 未实现位,读为 0。同步主发送不使用阴影位。 注 1: PIC18(L)F4XK22 器件。 2: PIC18(L)F2XK22 器件。 寄存器 所在页 279 279 116 128 130 124 126 119 121 55 278 278 — — — — 156 156 156 — 277 — 277 DS41412F_CN 第 290 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 16.5.1.6 同步主接收 数据在 RXx/DTx 引脚上接收。将 EUSART 配置为同步 主接收操作时,必须通过将对应的 TRIS 位置 1 来禁止 RXx/DTx 引脚输出驱动器。 在同步模式下,可通过将单字节接收使能位 (RCSTAx 寄存器的 SREN)或连续接收使能位(RCSTAx 寄存器 的 CREN)置 1 使能接收。 SREN 置 1 且 CREN 清零时,一个字符中有多少数据位 就产生多少个时钟周期。一个字符接收完成后 SREN 位 被自动清零。CREN 置 1 时,将连续产生时钟直到 CREN 被清零。如果 CREN 在字符接收过程中被清零,则 CK 时钟立即停止,接收到的部分字符被丢弃。如果 SREN 和 CREN 同时置 1,则首字符接收完成时 SREN 被清 零, CREN 优先。 要启动接收,将 SREN 或 CREN 置 1。在 TXx/CKx 时 钟引脚的后续边沿对 RXx/DTx 引脚上的数据进行采样, 并移入接收移位寄存器 (RSR)。当完整的字符被接收 进 RSR 后, RCxIF 位置 1 且该字符被自动送入两个字 符的接收 FIFO。接收 FIFO 中顶部字符的低 8 位在 RCREGx 中。只要接收 FIFO 中有未读字符,RCxIF 位 就保持置 1。 16.5.1.7 从时钟 同步数据传送使用独立的时钟线,时钟与数据同步。配 置为从器件的器件在 TXx/CKx 线上接收时钟信号。将器 件配置为同步从发送或接收操作时,必须通过将相关的 TRIS 位置 1 来禁止 TXx/CKx 引脚输出驱动器。串行数 据位在时钟前沿改变,以确保其在时钟的后续边沿有 效。每个时钟周期传送一个数据位。数据位有多少,就 产生多少个接收时钟周期。 16.5.1.8 接收溢出错误 接收 FIFO 缓冲区可容纳两个字符。在 RCREGx 被读取 以访问 FIFO 前,接收到完整的第三个字符时会产生溢 出错误。此时,RCSTAx 寄存器的 OERR 位置 1。FIFO 中的前一个数据不会被覆盖。 FIFO 缓冲区中的两个字 符可被读出,但错误被清除前不能再接收其他字符。只 有清除了溢出条件才可将 OERR 位清零。如果 SREN 位置 1 且 CREN 清零时发生溢出错误,则读取 RCREGx 可清除错误。 如果 CREN 位置 1 时发生溢出,则可通过清零 RCSTAx 寄存器的 CREN 位或清零可将 EUSART 复位的 SPEN 位清除错误条件。 16.5.1.9 接收 9 位字符 EUSART 支持 9 位字符接收。当 RCSTAx 寄存器的 RX9 位置 1 时,EUSART 将在接收每个字符时将 9 个位移入 RSR。RCSTAx 寄存器的 RX9D 位是第 9 位,也是接收 FIFO 顶部未读字符的最高有效位。从接收 FIFO 缓冲区 读取 9 位数据时,在读取 RCREGx 的低 8 位前必须先 读取 RX9D 数据位。 16.5.1.10 同步主接收设置 1. 初始化 SPBRGHx:SPBRGx 寄存器对,获得所需 的波特率。按需要将 BRGH 和 BRG16 位置 1 或 清零,获得所需的波特率。 2. 将RXx/DTx和TXx/CKx的TRIS控制位设置为1。 3. 将 SYNC、SPEN 和 CSRC 位置 1 使能同步主串 口。将对应的 TRIS 位置 1 禁止 RXx/DTx 和 TXx/ CKx 输出驱动器。 4. 确保将 CREN 和 SREN 位清零。 5. 如果使用中断,将 INTCON 寄存器的 GIE/GIEH 和 PEIE/GIEL 位置 1 并将 RCxIE 置 1。 6. 如果需要接收 9 位数据,将 RX9 位置 1。 7. 将 SREN 位置 1 启动接收,或将 CREN 位置 1 使能连续接收。 8. 字符接收完成时中断标志位 RCxIF 将被置 1。如 果中断允许位 RCxIE 已置 1,则产生中断。 9. 读取RCSTAx 寄存器取得第9位(如果已使能), 并确定接收时是否发生了错误。 10. 通过读取 RCREGx 寄存器来读取接收到的 8 位 数据。 11. 如果发生了溢出错误,可通过清零 RCSTAx 寄存 器的 CREN 位或清零可将 EUSART 复位的 SPEN 位清除错误。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 291 页 PIC18(L)F2X/4XK22 图 16-12: 同步接收 (主模式, SREN) RXx/DTx 引脚 TXx/CKx 引脚 (SCKP = 0) bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 TXx/CKx 引脚 (SCKP = 1) 写入 SREN 位 SREN 位 CREN 位 ‘0’ ‘0’ RCxIF 位 (中断) 读 RCREGx 注: 时序图说明 SREN = 1 且 BRGH = 0 时的同步主模式。 表 16-8: 与同步主接收相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BAUDCON1 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD RCREG1 RCSTA1 SPEN EUSART1 接收寄存器 RX9 SREN CREN ADDEN FERR OERR RX9D RCREG2 RCSTA2 SPEN EUSART2 接收寄存器 RX9 SREN CREN ADDEN FERR OERR RX9D SPBRG1 EUSART1 波特率发生器的低字节 SPBRGH1 EUSART1 波特率发生器的高字节 SPBRG2 EUSART2 波特率发生器的低字节 SPBRGH2 EUSART2 波特率发生器的高字节 TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 图注: — = 未实现位,读为 0。同步主接收不使用阴影位。 寄存器 所在页 279 279 116 128 130 124 126 119 121 55 — 278 — 278 — — — — 277 277 DS41412F_CN 第 292 页  2011-2013 Microchip Technology Inc. 16.5.2 同步从模式 使用以下位将 EUSART 配置为同步从操作: • SYNC = 1 • CSRC = 0 • SREN = 0(用于发送); SREN = 1(用于接收) • CREN = 0(用于发送); CREN = 1(用于接收) • SPEN = 1 将 TXSTAx 寄存器的 SYNC 位置 1 将器件配置为同步操 作。将 TXSTAx 寄存器的 CSRC 位清零将器件配置为从 器件。将 RCSTAx 寄存器的 SREN 和 CREN 位清零可确 保器件处于发送模式,否则器件将被配置为接收。将 RCSTAx 寄存器的 SPEN 位置 1 可使能 EUSART。如果 RXx/DTx 或 TXx/CKx 引脚与模拟外设共用,那么必须通 过清零对应的 ANSEL 位禁止模拟 I/O 功能。 必须通过将对应的 TRIS 位置 1 来禁止 RXx/DTx 和 TXx/ CKx 输出驱动器。 PIC18(L)F2X/4XK22 16.5.2.1 EUSART 同步从发送 除了休眠模式以外,同步主模式和从模式的工作原理是 相同的 (见第 16.5.1.3 节 “ 同步主发送 ”)。 如果向 TXREGx 写两个字,然后执行 SLEEP 指令,则会 发生以下事件: 1. 第一个字符将立即传送到 TSR 寄存器并发送。 2. 第二个字将保留在 TXREGx 寄存器中。 3. TXxIF 位不会被置 1。 4. 第一个字符移出 TSR 后,TXREGx 寄存器会将第 二个字符传送到 TSR,此时 TXxIF 位将置 1。 5. 如果 PEIE/GIEL 和 TXxIE 位均置 1,则发生中断 将器件从休眠唤醒,并执行下一条指令。如果 GIE/GIEH 位也置 1,程序将调用中断服务程序。 16.5.2.2 同步从发送设置 1. 将 SYNC 和 SPEN 位置 1 并清零 CSRC 位。 2. 将RXx/DTx和TXx/CKx的TRIS控制位设置为1。 3. 清零 CREN 和 SREN 位。 4. 如果使用中断,应确保 INTCON 寄存器的 GIE/ GIEH 和 PEIE/GIEL 位置 1 并将 TXxIE 位置 1。 5. 如果需要 9 位发送,将 TX9 位置 1。 6. 将 TXEN 位置 1 使能发送。 7. 如果选择了9位发送,将最高有效位写入TX9D位。 8. 将低 8 位写入 TXREGx 寄存器,启动发送。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 293 页 PIC18(L)F2X/4XK22 表 16-9: 与同步从发送相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BAUDCON1 ABDOVF RCIDL DTRXP CKTXP BRG16 — BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD RCSTA1 SPEN RX9 SREN CREN ADDEN FERR RCSTA2 SPEN RX9 SREN CREN ADDEN FERR SPBRG1 SPBRGH1 SPBRG2 SPBRGH2 TRISB(2) TRISB7 TRISB6 EUSART1 波特率发生器的低字节 EUSART1 波特率发生器的高字节 EUSART2 波特率发生器的低字节 EUSART2 波特率发生器的高字节 TRISB5 TRISB4 TRISB3 TRISB2 TRISC TRISD(1) TRISC7 TRISD7 TRISC6 TRISD6 TRISC5 TRISC4 TRISC3 TRISD5 TRISD4 TRISD3 TRISC2 TRISD2 TXREG1 TXSTA1 CSRC EUSART1 发送寄存器 TX9 TXEN SYNC SENDB BRGH TXREG2 TXSTA2 CSRC EUSART2 发送寄存器 TX9 TXEN SYNC SENDB BRGH 图注: — = 未实现位,读为 0。同步从发送不使用阴影位。 注 1: PIC18(L)F4XK22 器件。 2: PIC18(L)F2XK22 器件。 WUE WUE INT0IF TMR2IP TMR3GIP TMR2IE TMR3GIE TMR2IF TMR3GIF TMR2MD OERR OERR TRISB1 TRISC1 TRISD1 TRMT TRMT ABDEN ABDEN RBIF TMR1IP TMR1GIP TMR1IE TMR1GIE TMR1IF TMR1GIF TMR1MD RX9D RX9D TRISB0 TRISC0 TRISD0 TX9D TX9D 寄存器 所在页 279 279 116 128 130 124 126 119 121 55 278 278 — — — — 156 156 156 — 277 — 277 DS41412F_CN 第 294 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 16.5.2.3 EUSART 同步从接收 除下列各项外,同步主模式和从模式的工作原理是相同 的 (第 16.5.1.6 节 “ 同步主接收 ”): • 休眠 • CREN 位始终置 1,因此接收器从不空闲 • SREN 位在从模式下为 “ 无关位 ” 进入休眠前将 CREN 位置 1,可在休眠模式下接收一个 字符。接收到该字后, RSR 寄存器会将数据传送到 RCREGx 寄存器。如果 RCxIE 中断允许位置 1,产生 的中断会将器件从休眠唤醒并执行下一条指令。如果 GIE/GIEH 位也置 1,程序将跳转到中断向量。 16.5.2.4 同步从接收设置 1. 将 SYNC 和 SPEN 位置 1 并清零 CSRC 位。 2. 将RXx/DTx和TXx/CKx的TRIS控制位设置为1。 3. 如果使用中断,应确保 INTCON 寄存器的 GIE/ GIEH 和 PEIE/GIEL 位置 1 并将 RCxIE 位置 1。 4. 如果需要接收 9 位数据,将 RX9 位置 1。 5. 将 CREN 位置 1 使能接收。 6. 接收完成时 RCxIF 位将被置 1。如果 RCxIE 位 已置 1,则产生中断。 7. 如果使能了9位模式,从RCSTAx寄存器的RX9D 位取出最高有效位。 8. 读取RCREGx寄存器,从接收FIFO取出低8位。 9. 如果发生了溢出错误,可通过清零 RCSTAx 寄存 器的 CREN 位或清零可将 EUSART 复位的 SPEN 位清除错误。 表 16-10: 与同步从接收相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BAUDCON1 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF PMD0 UART2MD UART1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD RCREG1 RCSTA1 SPEN EUSART1 接收寄存器 RX9 SREN CREN ADDEN FERR OERR RX9D RCREG2 RCSTA2 SPEN EUSART2 接收寄存器 RX9 SREN CREN ADDEN FERR OERR RX9D SPBRG1 SPBRGH1 SPBRG2 SPBRGH2 TXSTA1 CSRC EUSART1 波特率发生器的低字节 EUSART1 波特率发生器的高字节 EUSART2 波特率发生器的低字节 EUSART2 波特率发生器的高字节 TX9 TXEN SYNC SENDB BRGH TRMT TX9D TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 图注: — = 未实现位,读为 0。同步从接收不使用阴影位。 寄存器 所在页 279 279 116 128 130 124 126 119 121 55 — 278 — 278 — — — — 277 277  2011-2013 Microchip Technology Inc. DS41412F_CN 第 295 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 296 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 17.0 模数转换器 (ADC)模块 模数转换器 (ADC)可将模拟输入信号转换为信号的 10 位二进制表示。该模块使用模拟输入,这些输入通过 多路开关连接到同一个采样和保持电路。采样和保持电 路的输出与转换器的输入相连接。转换器通过逐次逼近 法产生 10 位二进制结果,并将转换结果存储在 ADC 结 果寄存器 (ADRESL 和 ADRESH)中。 可通过软件选择 VDD 或施加在外部参考引脚上的电压作 为 ADC 参考电压。 ADC 可在转换完成时产生中断。该中断可用于将器件从 休眠状态唤醒。 图 17-1 给出了 ADC 的框图。 图 17-1: ADC 框图 FVR BUF2 DAC CTMU AN28(1) AN27(1) 11111 11110 11101 11100 11011 5 CHS<4:0> AN5(1) AN4 AN3 AN2 AN1 AN0 00101 00100 00011 00010 00001 00000 10 位 ADC 2 PVCFG<1:0> AVDD VREF+/AN3 FVR BUF2 保留 00 01 10 11 2 NVCFG<1:0> AVSS 00 VREF-/AN2 01 保留 10 保留 11 ADCMD ADON GO/DONE 10 ADFM 0 = 左对齐 1 = 右对齐 10 ADRESH ADRESL 注: 另外一些 ADC 通道 AN5-AN7 和 AN20-AN27 仅在 PIC18(L)F4XK22 器件上可用。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 297 页 PIC18(L)F2X/4XK22 17.1 ADC 配置 配置和使用 ADC 时必须考虑以下功能: • 端口配置 • 通道选择 • ADC 参考电压选择 • ADC 转换时钟源 • 中断控制 • 结果格式 17.1.1 端口配置 ANSELx 和 TRISx 寄存器可用于配置 A/D 端口引脚。任 何需要用作模拟输入的端口引脚都应将其对应的 ANSx 位置 1 以禁止数字输入缓冲器,并将 TRISx 位置 1 以禁 止数字输出驱动器。如果 TRISx 位清零,则数字输出电 平 (VOH 或 VOL)将被转换。 A/D 转换操作与 ANSx 位和 TRIS 位的状态无关。 注 1: 当读取端口寄存器时,对应 ANSx 位置 1 的所有引脚均读为零 (低电平)。但是, 对于配置为数字输入的引脚 (ANSx 位清 零, TRISx 位置 1),将可以正确进行模 拟转换。 2: 对应 ANSx 位清零的任何引脚上的模拟电 平可能会导致数字输入缓冲器消耗的电流 超出器件规范。 3: 通过控制 ANSELB 中的位的复位方式,配 置寄存器3H中的PBADEN位可将PORTB 引脚配置成复位时为模拟或数字引脚。 17.1.2 通道选择 ADCON0 寄存器的 CHS 位决定与采样和保持电路相连 接的通道。 改变通道时,在开始下一次转换前需要一段延时。更多 信息,请参见第 17.2 节 “ADC 工作原理 ”。 17.1.3 ADC 参考电压 ADCON1 寄存器的 PVCFG<1:0> 和 NVCFG<1:0> 位分 别提供对正负参考电压的独立控制。 正参考电压可以是: • VDD • 固定参考电压 (FVR BUF2) • 外部电压源 (VREF+) 负参考电压可以是: • VSS • 外部电压源 (VREF-) 17.1.4 选择和配置采集时间 ADCON2 寄存器允许用户选择采集时间,该时间在每当 GO/DONE 位置 1 时发生。 采集时间使用 ADCON2 寄存器的 ACQT<2:0> 位设置。 采集延时的范围为 2 至 20 个 TAD。当 GO/DONE 位被 置 1 时,A/D 模块会继续在选定采集时间内采样输入通 道,然后自动启动一次转换。由于采集时间已被编程, 因此在选择通道和 GO/DONE 位置 1 之间无需另外等待 一个采集时间。 如果 ACQT<2:0> = 000,则表示选择手动采集。当 GO/ DONE 位被置 1 时,采样停止并启动转换。用户必须确 保在选择所需的输入通道和将 GO/DONE 位置 1 之间已 经过了所需的采集时间。此选项也是 ACQT<2:0> 位的 默认复位状态,并且与不提供可编程采集时间的器件相 兼容。 在这两种情况下,当转换完成时, GO/DONE 位均被清 零, ADIF 标志位均被置 1 并且 A/D 开始再次对当前选 定的通道进行采样。当采集时间被编程时,不会有关于 何时采集时间结束、转换开始的指示。 DS41412F_CN 第 298 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 17.1.5 转换时钟 可通过软件设置 ADCON2 寄存器的 ADCS 位来选择转 换时钟源。有以下 7 种时钟频率可供选择: • FOSC/2 • FOSC/4 • FOSC/8 • FOSC/16 • FOSC/32 • FOSC/64 • FRC (专用内部振荡器) 完成一个位转换所需的时间定义为 TAD。一次完整的 10 位转换需要 11 个 TAD 周期,如图 17-3 所示。 为正确转换,必须满足适当的 TAD 规范。更多信息,请 参见表 27-23 中的 A/D 转换要求。表 17-1 给出了适当的 ADC 时钟选择的示例。 注: 除非使用 FRC,否则系统时钟频率的任何 改变都会改变 ADC 时钟频率,从而对 ADC 结果产生不利影响。 17.1.6 中断 ADC 模块可在模数转换完成时产生中断。 ADC 中断允 许位是 PIE1 寄存器中的 ADIE 位, ADC 中断优先级位 是 IPR1 寄存器中的 ADIP 位。ADC 中断标志位是 PIR1 寄存器中的 ADIF 位。 ADIF 位必须用软件清零。 注: ADIF 位在每次转换完成时置 1,与是否允 许 ADC 中断无关。 器件工作或休眠时都可产生该中断。如果器件处于休眠 状态,该中断会唤醒器件。从休眠状态唤醒时,总是执 行紧跟 SLEEP 指令后的下一条指令。如果用户试图从休 眠状态唤醒器件并恢复主代码执行,必须禁止全局中 断。如果允许了全局中断,执行将切换到中断服务程序。 表 17-1: ADC 时钟周期 (TAD)与器件工作频率关系表 ADC 时钟周期 (TAD) 器件频率 (FOSC) ADC 时钟源 FOSC/2 FOSC/4 FOSC/8 FOSC/16 FOSC/32 FOSC/64 FRC ADCS<2:0> 000 100 001 101 010 110 x11 64 MHz 31.25 ns(2) 62.5 ns(2) 400 ns(2) 250 ns(2) 500 ns(2) 1.0 μs 1-4 μs(1,4) 16 MHz 125 ns(2) 250 ns(2) 500 ns(2) 1.0 μs 2.0 μs 4.0 μs(3) 1-4 μs(1,4) 4 MHz 500 ns(2) 1.0 μs 2.0 μs 4.0 μs(3) 8.0 μs(3) 16.0 μs(3) 1-4 μs(1,4) 图注: 阴影单元表示超出了建议范围。 注 1: FRC 时钟源具有 1.7 μs 的典型 TAD 时间。 2: 这些值均违反了所需的最小 TAD 时间。 3: 为了加快转换速度,建议选用其他时钟源。 4: 当器件频率高于 1 MHz 时,仅当在休眠状态下进行转换时才推荐使用 FRC 时钟源。 1 MHz 2.0 μs 4.0 μs(3) 8.0 μs(3) 16.0 μs(3) 32.0 μs(3) 64.0 μs(3) 1-4 μs(1,4)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 299 页 PIC18(L)F2X/4XK22 17.1.7 结果格式 10 位 A/D 转换结果可以两种格式提供:左对齐或右对 齐。 ADCON2 寄存器的 ADFM 位控制输出格式。 图 17-2 给出了两种输出格式。 图 17-2: 10 位 A/D 转换结果格式 ADRESH (ADFM = 0) MSB bit 7 bit 0 (ADFM = 1) bit 7 10 位 A/D 结果 MSB bit 0 未实现:读为 0 ADRESL LSB bit 7 bit 0 未实现:读为 0 LSB bit 7 bit 0 10 位 A/D 结果 DS41412F_CN 第 300 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 17.2 ADC 工作原理 17.2.1 启动转换 要使能 ADC 模块,ADCON0 寄存器的 ADON 位必须设 置为 1。将 ADCON0 寄存器的 GO/DONE 位设置为 1, 根据 ADCON2 寄存器的 ACQT 位的状态,将立即启动 模数转换或在模数转换后启动采集延时。 图 17-3 显示了在 GO 位置 1 且 ACQT<2:0> 位被清零后 A/D 转换器的工作状态。转换在下一条指令执行之后开 始,以允许器件在转换开始之前进入休眠模式。 图 17-4 显示了在 GO 位置 1,ACQT<2:0> 位被设置为 010,且在转换开始之前选择 4 TAD 采集时间后 A/D 转 换器的工作状态。 注: 不应在启动 ADC 的同一条指令中将 GO/ DONE 位置 1。请参见第 17.2.10 节 “A/D 转换步骤 ”。 图 17-3: A/D 转换 TAD 周期 (ACQT<2:0> = 000, TACQ = 0) TCY - TAD TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11 2 TAD b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 转换开始 放电 保持电容与模拟输入引脚断开(通常为 100 ns) 将 GO 位置 1 在下一个周期 : 装入 ADRESH:ADRESL,清零 GO 位, 将 ADIF 位置 1,保持电容与模拟输入通道相连。 图 17-4: A/D 转换 TAD 周期 (ACQT<2:0> = 010, TACQ = 4 TAD) TACQT 周期 TAD 周期 123412345678 自动采集时间 b9 b8 b7 b6 b5 b4 b3 转换开始 (保持电容与模拟输入引脚断开) 9 10 11 2 TAD b2 b1 b0 放电 将 GO 位置 1 (保持电容继续采集输入) 在下一个周期 : 装入 ADRESH:ADRESL,清零 GO 位, 将 ADIF 位置 1,保持电容与模拟输入通道相连。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 301 页 PIC18(L)F2X/4XK22 17.2.2 转换完成 转换完成时, ADC 模块将: • 清零 GO/DONE 位 • 将 ADIF 标志位置 1 • 用新的转换结果更新 ADRESH:ADRESL 寄存器 17.2.3 放电 放电过程用于对电容阵列的值进行初始化。在每次采样 之后都会对此阵列放电。这一特性有助于优化单位增益 放大器,因为每次需要重新为电容阵列充电,而不是根 据以前测量的值进行充放电。 17.2.4 终止转换 如 果必 须 在 转换 完 成前 终 止 转换,可 用 软 件将 GO/ DONE 位清零。不会用部分完成的模数转换结果更新 ADRESH 和 ADRESL 寄存器, ADRESH:ADRESL 寄 存器对仍然保留前一次转换的值。 注: 器件复位将强制所有寄存器为复位状态。 因此,ADC 模块被关闭,任何进行中的转 换操作被终止。 17.2.5 转换之间的延时 在 A/D 转换完成或中止后,需要等待 2 个 TAD 才能开始 下一次采集。等待该时间之后,当前选定的通道会重新 连接到充电保持电容,开始下一次采集。 17.2.6 在功耗管理模式下的 ADC 操作 在功耗管理模式下,自动采集时间和 A/D 转换时钟的选 择一定程度上可由时钟源和频率决定。 如果希望器件处于功耗管理模式时进行 A/D 采集转换, 就 应 该 根 据 该 模 式 下 使 用 的 时 钟 对 ADCON2 中的 ACQT<2:0> 和 ADCS<2:0> 位进行更新。在进入功耗管 理模式之后,就可以开始 A/D 采集或转换。采集或转换 开始以后,器件应继续使用相同的时钟源直到转换完成。 如果需要,器件也可以在转换过程中被置于相应的空闲 模式。如果器件时钟频率小于 1 MHz,就应该选择 A/D FRC 时钟源。 17.2.7 休眠期间的 ADC 操作 ADC 模块可以在休眠模式下工作。这需要将 ADC 时钟 源设置为 FRC 选项。当选择 FRC 时钟源时, ADC 需等 待一个额外的指令周期后才能启动转换。这使得可以执 行 SLEEP 指令,以降低转换期间的系统噪声。如果允许 了 ADC 中断,转换完成时器件将从休眠状态唤醒。如 果禁止了 ADC 中断,尽管 ADON 位仍保持置 1,转换 完成后 ADC 模块将关闭。 ADC 时钟源不是 FRC 时,尽管 ADON 位仍保持置 1, SLEEP 指令会导致当前转换中止, ADC 模块关闭。 17.2.8 特殊事件触发器 有两个特殊事件触发器可用于启动 A/D 转换:CTMU 和 CCP5。特殊事件触发源可使用 ADCON1 中的 TRIGSEL 位选择。 当 TRIGSEL = 0 时,将选择 CCP5 模块作为特殊事件 触发源。要使能 CCP 模块中的特殊事件触发器,需要 在 CCP5CON 寄存器中设置 CCP5M<3:0> = 1011。 当 TRIGSEL = 1 时,将选择 CTMU 模块。要使能特殊 事件触发器, CTMU 模块需要将 CTMUCONH 中的 CTTRIG 位置 1。 除了 TRIGSEL 位之外,启动 A/D 转换还需要以下步骤: • 必须使能 A/D 模块 (ADON = 1) • 选择相应的模拟输入通道 • 通过以下方式之一设置最小采集周期: - 由用户提供时序 - 通过相应的 TACQ 时间作出选择 在满足这些条件的情况下,触发器会将 GO/DONE 位置 1,启动 A/D 采集。 如果未使能 A/D 模块 (ADON = 0),则模块会忽略特 殊事件触发器。 17.2.9 外设模块禁止 不使用某个外设模块或该外设模块不工作时,可以通过 将 PMD 寄存器中的模块禁止位置 1 来禁止该模块。这 可以将功耗降到绝对最低。 PMD 位置 1 会将模块保持 在复位状态,并断开模块的时钟源。ADC 模块的模块禁 止位是 PMD2 寄存器中的 ADCMD。更多信息,请参见 第 3.0 节 “ 功耗管理模式 ”。 DS41412F_CN 第 302 页  2011-2013 Microchip Technology Inc. 17.2.10 A/D 转换步骤 以下是使用 ADC 执行模数转换的示例步骤: 1. 配置端口: • 禁止引脚输出驱动器 (见 TRIS 寄存器) • 将引脚配置为模拟 2. 配置 ADC 模块: • 选择 ADC 转换时钟 • 配置参考电压 • 选择 ADC 输入通道 • 选择结果格式 • 选择采集延时 • 开启 ADC 模块 3. 配置 ADC 中断 (可选): • 清零 ADC 中断标志 • 允许 ADC 中断 • 允许外设中断 • 允许全局中断 (1) 4. 等待所需采集时间 (2)。 5. 通过将 GO/DONE 位置 1 启动转换。 6. 通过以下方式之一等待 ADC 转换完成: • 查询 GO/DONE 位 • 等待 ADC 中断 (已允许中断) 7. 读取 ADC 结果。 8. 清零 ADC 中断标志(如果已允许中断则需要)。 注 1: 如果用户试图从休眠状态唤醒器件并恢复 主代码执行,必须禁止全局中断。 2: 如果 ACQT 位设置为零延时,则需要软件 延时。请参见第 17.4 节 “A/D 采集要求 ”。 PIC18(L)F2X/4XK22 例 17-1: A/D 转换 ;This code block configures the ADC ;for polling, Vdd and Vss as reference, Frc clock and AN0 input. ; ;Conversion start & polling for completion ; are included. ; MOVLW B’10101111’ ;right justify, Frc, MOVWF ADCON2 ; & 12 TAD ACQ time MOVLW B’00000000’ ;ADC ref = Vdd,Vss MOVWF ADCON1 ; BSF TRISA,0 ;Set RA0 to input BSF ANSEL,0 ;Set RA0 to analog MOVLW B’00000001’ ;AN0, ADC on MOVWF ADCON0 ; BSF ADCON0,GO ;Start conversion ADCPoll: BTFSC ADCON0,GO ;Is conversion done? BRA ADCPoll ;No, test again ; Result is complete - store 2 MSbits in ; RESULTHI and 8 LSbits in RESULTLO MOVFF ADRESH,RESULTHI MOVFF ADRESL,RESULTLO  2011-2013 Microchip Technology Inc. DS41412F_CN 第 303 页 PIC18(L)F2X/4XK22 17.3 寄存器定义:ADC 控制 注: 模拟引脚控制由 ANSELx 寄存器决定 (见 寄存器 10-2)。 寄存器 17-1: U-0 — bit 7 ADCON0:A/D 控制寄存器 0 R/W-0 R/W-0 R/W-0 CHS<4:0> R/W-0 R/W-0 R/W-0 GO/DONE 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 bit 6-2 bit 1 bit 0 未实现:读为 0 CHS<4:0>:模拟通道选择位 00000 = AN0 00001 = AN1 00010 = AN2 00011 = AN3 00100 = AN4 00101 = AN5(1) 00110 = AN6(1) 00111 = AN7(1) 01000 = AN8 01001 = AN9 01010 = AN10 01011 = AN11 01100 = AN12 01101 = AN13 01110 = AN14 01111 = AN15 10000 = AN16 10001 = AN17 10010 = AN18 10011 = AN19 10100 = AN20(1) 10101 = AN21(1) 10110 = AN22(1) 10111 = AN23(1) 11000 = AN24(1) 11001 = AN25(1) 11010 = AN26(1) 11011 = AN27(1) 11100 = 保留 11101 = CTMU 11110 = DAC 11111 = FVR BUF2 (1.024V/2.048V/2.096V 固定参考电压) (2) GO/DONE:A/D 转换状态位 1 = A/D 转换正在进行。将该位置 1 可启动 A/D 转换周期。 A/D 转换完成后,该位由硬件自动清零。 0 = A/D 转换已完成 / 未进行 ADON:ADC 使能位 1 = 使能 ADC 0 = 禁止 ADC,不消耗工作电流 注 1: 仅在 PIC18(L)F4XK22 器件上可用。 2: 测量固定参考电压时,允许大于 15 μs 的采集时间。 R/W-0 ADON bit 0 DS41412F_CN 第 304 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 17-2: R/W-0 TRIGSEL bit 7 ADCON1:A/D 控制寄存器 1 U-0 U-0 U-0 — — — R/W-0 R/W-0 PVCFG<1:0> R/W-0 R/W-0 NVCFG<1:0> bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 bit 6-4 bit 3-2 bit 1-0 TRIGSEL:特殊事件触发信号选择位 1 = 选择来自 CTMU 的特殊事件触发信号 0 = 选择来自 CCP5 的特殊事件触发信号 未实现:读为 0 PVCFG<1:0>:正参考电压配置位 00 = A/D VREF+ 连接到内部信号 AVDD 01 = A/D VREF+ 连接到外部引脚 VREF+ 10 = A/D VREF+ 连接到内部信号 FVR BUF2 11 = 保留 (默认情况下, A/D VREF+ 连接到内部信号 AVDD) NVCFG<1:0>:负参考电压配置位 00 = A/D VREF- 连接到内部信号 AVSS 01 = A/D VREF- 连接到外部引脚 VREF10 = 保留 (默认情况下, A/D VREF- 连接到内部信号 AVSS) 11 = 保留 (默认情况下, A/D VREF- 连接到内部信号 AVSS)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 305 页 PIC18(L)F2X/4XK22 寄存器 17-3: R/W-0 ADFM bit 7 ADCON2:A/D 控制寄存器 2 U-0 R/W-0 R/W-0 — ACQT<2:0> R/W-0 R/W-0 R/W-0 ADCS<2:0> R/W-0 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 ADFM:A/D 转换结果格式选择位 1 = 右对齐 0 = 左对齐 bit 6 未实现:读为 0 bit 5-3 ACQT<2:0>:A/D 采集时间选择位。采集时间是从 GO/DONE 位置 1 的时刻到转换开始时, A/D 充 电保持电容保持连接到 A/D 通道的持续时间。 000 = 0(1) 001 = 2 TAD 010 = 4 TAD 011 = 6 TAD 100 = 8 TAD 101 = 12 TAD 110 = 16 TAD 111 = 20 TAD bit 2-0 ADCS<2:0>:A/D 转换时钟选择位 000 = FOSC/2 001 = FOSC/8 010 = FOSC/32 011 = FRC(1) (由专用内部振荡器产生的时钟,其频率的标称值为 600 kHz) 100 = FOSC/4 101 = FOSC/16 110 = FOSC/64 111 = FRC(1) (由专用内部振荡器产生的时钟,其频率的标称值为 600 kHz) 注 1: 当选择 FRC 作为 A/D 时钟源时,在 GO/DONE 位置 1 后,转换开始时间会延迟 1 个指令周期,以允许执 行 SLEEP 指令。 DS41412F_CN 第 306 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 17-4: R/W-x bit 7 ADRESH:ADC 结果寄存器的高字节 (ADRESH) ADFM = 0 R/W-x R/W-x R/W-x R/W-x ADRES<9:2> R/W-x R/W-x R/W-x bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-0 ADRES<9:2>:ADC 结果寄存器位 10 位转换结果的高 8 位 寄存器 17-5: ADRESL:ADC 结果寄存器的低字节 (ADRESL) ADFM = 0 R/W-x R/W-x ADRES<1:0> bit 7 R/W-x — R/W-x — R/W-x — R/W-x — R/W-x — R/W-x — bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-6 bit 5-0 ADRES<1:0>:ADC 结果寄存器位 10 位转换结果的低 2 位 保留:不使用。 寄存器 17-6: R/W-x — bit 7 ADRESH:ADC 结果寄存器的高字节 (ADRESH) ADFM = 1 R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x — — — — — ADRES<9:8> bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-2 bit 1-0 保留:不使用。 ADRES<9:8>:ADC 结果寄存器位 10 位转换结果的高 2 位 寄存器 17-7: R/W-x bit 7 ADRESL:ADC 结果寄存器的低字节 (ADRESL) ADFM = 1 R/W-x R/W-x R/W-x R/W-x ADRES<7:0> R/W-x R/W-x R/W-x bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-0 ADRES<7:0>:ADC 结果寄存器位 10 位转换结果的低 8 位  2011-2013 Microchip Technology Inc. DS41412F_CN 第 307 页 PIC18(L)F2X/4XK22 17.4 A/D 采集要求 为了使 ADC 达到规定的精度,必须使充电保持电容 (CHOLD)完全充电至输入通道的电压。模拟输入模型见 图 17-5。模拟信号源阻抗 (RS)和内部采样开关阻抗 (RSS)直接影响电容 CHOLD 的充电时间。采样开关阻抗 (RSS)随器件电压(VDD)的变化而变化,请参见图 17-5。 模拟信号源的最大阻抗推荐值为 10 kΩ。采集时间随着 源阻抗的降低而缩短。在选择 (或改变)模拟输入通道 公式 17-1: 采集时间示例 后,必须在开始转换前完成 A/D 采集。可以使用公式 17-1 来计算最小采集时间。该公式假设误差为 1/2 LSb(ADC 转换需要 1024 步)。1/2 LSb 误差是 ADC 达到规定分辨 率所允许的最大误差。 假设: 温度 = 50°C,外部阻抗为 10 kΩ,VDD 为 3.0V TACQ = ²放Ý¥大Ûý器˜Œ稳»¹定®þ时±间º‰+ +保±持£电Š÷容µ充Á»电›Š时‰间µÁþ+±温º度‰系+ 数Œ¬¹»œµþ? = TAMP + TC + TCOFF = 5μs + TC + [(温tuu度re - 25°C)(0.05μs/°C)] TC 值可以用以下公式近似计算: VAPPLIED1 – 2---0--1-4----7- = VCHOLD VA P PL I E D    1 – e –-R---T-C--C--  = VCHOLD   V AP P LI  ED 1 – e –-R---T-C--c-   = VAPPLIED1 – 2---0--1-4---7--   ; [1] 充电到 VCHOLD(1/2 LSb 误差范围) ; [2] 响应 VAPPLIED 充电到 VCHOLD ;结合 [1] 和 [2] 求解 TC: TC = –CHOLD(RIC + RSS + RS) ln(1/2047) = –13.5pF(1kΩ + 700Ω + 10kΩ) ln(0.0004885) 因此: = 1.20μS TACQ = 5μS + 1.20μS + [(50°C- 25°C)(0.05μs/°C)] = 7.45μS 注 1: 因为参考电压 (VREF)自行抵消,因此它对该公式没有影响。 2: 充电保持电容 (CHOLD)在每次转换后放电。 3: 模拟信号源的最大阻抗推荐值为 10 kΩ。此要求是为了符合引脚泄漏电流规范。 DS41412F_CN 第 308 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 17-5: 模拟输入模型 Rs ANx VA CPIN 5 pF VDD RIC ≤ 1K 采样开关 SS RSS I LEAKAGE(1) 放电开关 CHOLD = 13.5 pF VSS/VREF- 图注 : CPIN = 输入电容 I LEAKAGE = 由各连接点在引脚上产生的泄漏电流 RIC SS CHOLD = 片内走线等效电阻 = 采样开关 = 采样 / 保持电容 注 1: 请参见第 27.0 节 “ 电气特性 ”。 3.5V 3.0V 2.5V 2.0V 1.5V .1 1 10 100 Rss(kΩ) 图 17-6: ADC 传递函数 ADC 输出码 VDD 满量程 3FFh 3FEh 3FDh 3FCh 3FBh 004h 003h 002h 001h 000h VSS/VREF- 1/2 LSB 理想状况 零量程 转换 1/2 LSB 理想状况 满量程 转换 模拟输入电压 VDD/VREF+  2011-2013 Microchip Technology Inc. DS41412F_CN 第 309 页 PIC18(L)F2X/4XK22 表 17-2: 与 A/D 操作相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ADCON0 — CHS<4:0> GO/DONE ADON ADCON1 TRIGSEL — — — PVCFG<1:0> NVCFG<1:0> ADCON2 ADFM — ACQT<2:0> ADCS<2:0> ADRESH A/D 结果的高字节 ADRESL A/D 结果的低字节 ANSELA — — ANSA5 — ANSA3 ANSA2 ANSA1 ANSA0 ANSELB — — ANSB5 ANSB4 ANSB3 ANSB2 ANSB1 ANSB0 ANSELC ANSELD(1) ANSELE(1) ANSC7 ANSD7 — ANSC6 ANSD6 — ANSC5 ANSD5 — ANSC4 ANSD4 — ANSC3 ANSD3 — ANSC2 ANSD2 ANSE2 — ANSD1 ANSE1 — ANSD0 ANSE0 CCP5CON — — DC5B<1:0> CCP5M<3:0> CTMUCONH CTMUEN — CTMUSIDL TGEN EDGEN EDGSEQEN IDISSEN CTTRIG INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF IPR1 — ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP IPR3 SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP IPR4 — — — — — CCP5IP CCP4IP CCP3IP PIE1 — ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE PIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIE PIE4 — — — — — CCP5IE CCP4IE CCP3IE PIR1 — ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF PIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIF PIR4 — — — — — CCP5IF CCP4IF CCP3IF PMD1 MSSP2MD MSSP1MD — CCP5MD CCP4MD CCP3MD CCP2MD CCP1MD PMD2 — — — — CTMUMD CMP2MD CMP1MD ADCMD TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 TRISC TRISD(1) TRISE TRISC7 TRISD7 WPUE3 TRISC6 TRISD6 — TRISC5 TRISD5 — TRISC4 TRISD4 — TRISC3 TRISD3 — TRISC2 TRISD2 TRISE2(1) TRISC1 TRISD1 TRISE1(1) TRISC0 TRISD0 TRISE0(1) 图注: — = 未实现位,读为 0。该模块不使用阴影位。 注 1: 在 PIC18(L)F4XK22 器件上可用。 寄存器 所在页 304 305 306 307 307 154 155 155 155 156 205 333 116 128 130 131 124 126 127 119 121 122 56 57 156 156 156 156 156 表 17-3: 与 ADC 模块相关的配置寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 CONFIG3H MCLRE — P2BMX T3CMX 图注: — = 未实现位,读为 0。 ADC 模块不使用阴影位。 Bit 3 HFOFST Bit 2 CCP3MX Bit 1 PBADEN Bit 0 CCP2MX 寄存器 所在页 360 DS41412F_CN 第 310 页  2011-2013 Microchip Technology Inc. 18.0 比较器模块 比较器模块通过比较两个模拟电压并提供其相对幅值的 数字表示,用于建立模拟电路与数字电路的接口。比较 器是非常有用的混合信号模块,因为它提供了与程序执 行相独立的模拟功能。模拟比较器模块具有以下特性: • 独立的比较器控制 • 可编程输入选择 • 比较器可提供内部 / 外部输出 • 可编程输出极性 • 电平变化中断 • 从休眠状态唤醒 • 可编程的速度 / 功耗优化 • PWM 关闭 • 可编程和固定参考电压 • 可选择的滞回电压 18.1 比较器概述 图18-1所示为单比较器以及模拟输入电平与数字输出之 间的关系。当 VIN+ 上的模拟电压小于 VIN- 上的模拟电 压值时,比较器输出为数字低电平。当 VIN+ 上的模拟 电压大于 VIN- 上的模拟电压值时,比较器输出为数字高 电平。 PIC18(L)F2X/4XK22 图 18-1: VIN+ VIN- 单比较器 + – 输出 VINVIN+ 输出 注: 比较器输出的黑色区域表示因输入失调电 压和响应时间所造成的输出不确定区域。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 311 页 PIC18(L)F2X/4XK22 图 18-2: 比较器 C1/C2 的简化框图 CxCH<1:0> 2 C12IN0- 0 C12IN1- 1 C12IN2- 2 C12IN3- 3 CxON(1) CxSP CxVINCxVIN+ Cx + CxR CxIN+ 0 DAC 输出 0 FVR BUF1 1 1 CXVREF CXRSEL CxPOL Timer1 时钟 Q1(2),(3) DQ EN 至 CMxCON0(CxOUT) CM2CON1(MCxOUT) Q3(2) 读或写 CMxCON0 DQ EN CL 复位 CxSYNC 0 DQ 1 CxOE 至中断 (CxIF) async_CXOUT 至 PWM 逻辑 TRIS 位 CxOUT sync_CxOUT - 至 SR 锁存器 - 至 TxG MUX(4) 注 1: 当 C1ON = 0 时, C1 比较器将输出 0 到异或门。 2: Q1 和 Q3 是四相系统时钟 (FOSC)的两相。 3: Q1 在休眠模式下保持高电平。 4: 同步比较器输出不应与同步 T1CKI 一起用于对 Timer1 进行门控。 DS41412F_CN 第 312 页  2011-2013 Microchip Technology Inc. 18.2 比较器控制 每个比较器都有独立的控制和配置寄存器:比较器 C1 为 CM1CON0,比较器 C2 为 CM2CON0。此外,比较器 C2 还有另外一个控制寄存器 CM2CON1,用于控制与 Timer1 的交互和两个比较器输出的同时读取。 CM1CON0 和 CM2CON0 寄存器 (见寄存器 18-1)包 含以下控制和状态位: • 使能 • 输入选择 • 参考电压选择 • 输出选择 • 输出极性 • 速度选择 18.2.1 比较器使能 将 CMxCON0 寄存器的 CxON 位置 1 可以使能比较器 操作。清零 CxON 位可以禁止比较器,以使电流消耗降 至最低。 18.2.2 比较器输入选择 CMxCON0 寄存器的 CxCH<1:0> 位指示 4 个模拟输入 引脚之一连接到比较器的反相输入。 注: 要将CxIN+和C12INx-引脚用作模拟输入, 必须将 ANSEL 寄存器中相应的位置 1,同 时也必须置 1 相应的 TRIS 位来禁止输出驱 动器。 18.2.3 比较器参考电压选择 通过将 CMxCON0 寄存器的 CxR 位置 1,将内部参考 电压或模拟输入引脚连接到比较器的同相输入。关于内 部参考电压模块的更多信息,请参见第 21.0 节 “ 固定参 考电压 (FVR) ”。 18.2.4 比较器输出选择 可以通过读 CMxCON0 寄存器的 CxOUT 位或 CM2CON1 寄存器的 MCxOUT 位监视比较器的输出。为了使输出可 用于外部连接,必须满足以下条件: • 必须将 CMxCON0 寄存器的 CxOE 位置 1 • 必须清零相应的 TRIS 位 • 必须将 CMxCON0 寄存器的 CxON 位置 1 PIC18(L)F2X/4XK22 注 1: CxOE 位改写端口数据锁存器。将 CxON 置 1 对端口改写没有影响。 2: 比较器的内部输出在每个指令周期被锁 存。除 非 另 外 指 定,否 则 不 锁 存 外 部 输 出。 18.2.5 比较器输出极性 反相比较器的输出在功能上等同于交换比较器输入。可 以通过将 CMxCON0 寄存器的 CxPOL 位置 1 来使比较 器输出的极性反相。清零 CxPOL 位得到的是未反相的 输出信号。 表 18-1 给出了输出状态与输入条件的关系 (包括极性 控制)。 表 18-1: 比较器输出状态与输入条件 输入条件 CxPOL CxOUT CxVIN- > CxVIN+ 0 0 CxVIN- < CxVIN+ 0 1 CxVIN- > CxVIN+ 1 1 CxVIN- < CxVIN+ 1 0 18.2.6 比较器速度选择 在程序执行期间通过 CxSP 控制位可以最佳地在速度与 功耗之间做出权衡。该位的默认状态为 1,选择正常速 度模式。可以通过将 CxSP 位清零对器件功耗进行优 化,代价是比较器传输延时变长。 18.3 比较器响应时间 在改变输入源或选择新的参考电压后,一段时间内比较 器的输出状态都是不确定的。这段时间被称为响应时 间。比较器的响应时间不同于参考电压的稳定时间。因 此,在确定比较器输入改变的总响应时间时,必须考虑 这两个时间。更多详细信息,请参见第 27.0 节 “ 电气特 性 ” 中的比较器和参考电压规范。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 313 页 PIC18(L)F2X/4XK22 18.4 比较器中断操作 只要比较器的输出值发生变化,相应的比较器中断标志 位就会置 1。比较器输出值的变化由不匹配电路识别, 该电路由两个锁存器和一个异或门组成 (见图 18-2)。 当读或写 CMxCON0 寄存器时,第一个锁存器更新为比 较器的输出值。该值在系统时钟的第三个周期 (也称为 Q3)锁存。第一个锁存器将保持该比较器值,直到另一 次读或写 CMxCON0 寄存器,或者发生复位。第二个锁 存器在系统时钟的每个第一个周期 (也称为 Q1)更新 为比较器输出值。当比较器输出值改变时,第二个锁存 器会发生更新,两个锁存器的输出值不再相互匹配,产 生不匹配条件。两个锁存器输出会被直接送到一个异或 门的输入。异或门会检测到这种不匹配条件,并发送到 中 断 电 路。不 匹 配 条 件 将 一 直 保 持,直 到 通 过 执 行 CMxCON0 寄存器读操作而更新第一个锁存器值,或比 较器输出恢复为先前状态为止。 注 1: 对 CMxCON0 寄存器的写操作也将清除不 匹配条件,因为所有写操作在写周期开始 都包含一个读操作。 2: 比较器中断的正常工作与 CxOE 的状态无 关。 发生不匹配条件时,比较器中断标志会置 1。中断标志 由来自异或门的更改值的边沿触发。这意味着不需要额 外的读或写 CMxCON0 寄存器来将不匹配锁存器清零这 一步骤,一旦触发即可将中断标志复位。当不匹配寄存 器清零时,比较器输出返回前一个状态将发生中断,否 则不会发生中断。 需要用软件保存比较器输出状态的信息 (从 CMxCON0 寄存器或 CM2CON1 寄存器读取),以确定实际发生的 变化。请参见图 18-3 和 18-4。 PIR2 寄存器的 CxIF 位是比较器中断标志。必须用软件 将该位清零以将其复位。由于可以对该寄存器写入 1, 因此可产生中断。 在中档器件兼容模式下,必须将 PIE2 寄存器的 CxIE 位 以及 INTCON 寄存器的 PEIE/GIEL 和 GIE/GIEH 位都 置 1 以允许比较器中断。如果上述位中有任何一位被清 零,则无法允许中断,尽管中断条件发生时仍会将 PIR2 寄存器的 CxIF 位置 1。 18.4.1 预设不匹配锁存器 比较器不匹配锁存器可以在使能比较器之前预设为所需 的状态。当比较器关闭时, CxPOL 位控制 CxOUT 电 平。在 CxON 位清零时,将 CxPOL 位设置为所需的 CxOUT 非中断电平。然后,在 CxON 位置 1 的相同指 令中配置所需的 CxPOL 电平。因为所有的寄存器写操 作都按读 - 修改 - 写的方式执行,所以不匹配锁存器将 在指令 “ 读 ” 阶段被清零,实际配置 CxON 和 CxPOL 位 将在最后的 “ 写 ” 阶段进行。 图 18-3: 比较器中断时序 (不带 CMxCON0 读取) Q1 Q3 CxIN+ TRT CxIN 将 CxIF 置 1(边沿) CxIF 由软件复位 图 18-4: 比较器中断时序 (带 CMxCON0 读取) Q1 Q3 CxIN+ TRT CxOUT 将 CxIF 置 1(边沿) CxIF 由 CMxCON0 读操作清零 由软件复位 注 1: 在读操作执行过程中 (Q2 周期的起始时 刻),如果 CMxCON0 寄存器(CxOUT) 发生变化,那么 PIR2 寄存器的 CxIF 中断 标志位可能不会被置 1。 2:当其中一个比较器先使能时,比较器模块 中的偏置电路在稳定前可能导致比较器输 出无效。应允许偏置电路有 1 μs 的稳定时 间,然后在允许比较器中断前将不匹配条 件和中断标志清除。 DS41412F_CN 第 314 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 18.5 休眠期间的操作 如果在进入休眠模式之前比较器使能,则它在休眠期间 仍将处于运行状态。第 27.0 节 “ 电气特性 ” 中单独给出 了比较器消耗的额外电流。如果不使用比较器来唤醒器 件,则在休眠模式下可通过关闭比较器使功耗降至最 低。可以通过清零 CMxCON0 寄存器的 CxON 位来关闭 每个比较器。 比较器输出变化可以将器件从休眠状态唤醒。要使比较 器能将器件从休眠状态唤醒,必须将 PIE2 寄存器的 CxIE 位和 INTCON 寄存器的 PEIE/GIEL 位置 1。紧跟 SLEEP 指令后的指令总是在从休眠状态唤醒之后执行。 如果也将 INTCON 寄存器的 GIE/GIEH 位置 1,则器件 将执行中断服务程序。 18.6 复位的影响 器件复位强制 CMxCON0 和 CM2CON1 寄存器为复位 状态。这使比较器和参考电压被强制为 “ 关闭 ” 状态。 18.7 模拟输入连接注意事项 模拟输入的简化电路如图 18-5 所示。由于模拟输入引脚 与数字输入共用连接,它们在 VDD 和 VSS 之间连有反 向偏置的 ESD 保护二极管。因此,模拟输入必须在 VSS 和 VDD 之间。如果输入电压与这一范围偏离的绝对值超 过 0.6V,就可能发生一个二极管正向导通,从而可能导 致锁死发生。 模拟信号源的最大阻抗推荐值为 10 kΩ。任何连接到模拟 输入引脚的外部元件 (如电容或齐纳二极管) ,应保证 其泄漏电流极小以使引入的误差降至最低。 注 1: 读端口寄存器时,所有配置为模拟输入的 引脚均读为 0。配置为数字输入的引脚将 根据输入规范转换为模拟输入。 2: 定义为数字输入引脚上的模拟电平可能会 使输入缓冲器的电流消耗超过规定值。 图 18-5: 模拟输入模型 Rs < 10K VA AIN CPIN 5 pF VDD VT ≈ 0.6V VT ≈ 0.6V RIC ILEAKAGE(1) 至比较器 Vss 图注: CPIN = 输入电容 ILEAKAGE = 由各连接点在引脚上产生的泄漏电流 RIC = 片内走线等效电阻 RS = 信号源阻抗 VA = 模拟电压 VT = 门限电压 注 1: 请参见第 27.0 节 “ 电气特性 ”。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 315 页 PIC18(L)F2X/4XK22 18.8 其他比较器特性 比较器的其他特性如下: • 比较器输出的同时读取 • 内部参考电压选择 • 滞回电压选择 • 输出同步 18.8.1 比较器输出的同时读取 CM2CON1 寄存器的 MC1OUT 和 MC2OUT 位是两个 比较器输出的镜像副本。从同一个寄存器中同时读取两 个输出的功能,可以消除从不同寄存器读取时存在的时 序错位。 注 1: 通过读 CM2CON1 获取 C1OUT 或 C2OUT 的状态并不影响比较器中断不匹配寄存器。 18.8.2 内部参考电压选择 有两个内部参考电压可供每个比较器的同相输入使用。 其中一个是固定参考电压(FVR),另一个是可变数模转 换器参考电压 (DAC)。 CM2CON1 寄存器的 CxRSEL 位决定其中的哪一个参考电压连接到比较器参考电压输 出 (CXVREF) 。参考电压与比较器的具体连接通过 CMxCON0 寄存器的 CxR 位控制。更多详细信息,请参 见第 21.0 节 “ 固定参考电压 (FVR) ” 和图 18-2。 18.8.3 比较器滞回电压 每个比较器都具有可供选择的滞回电压功能。通过将 CM2CON1 寄存器的 CxHYS 位置 1 可以使能滞回电压。 更多详细信息,请参见第 27.0 节 “ 电气特性 ”。 18.8.4 使比较器的输出与 TIMER1 同步 通过将 CM2CON1 寄存器的 CxSYNC 位置 1,可以使 比较器 Cx 的输出与 Timer1 保持同步。使能 Cx 的输出 时,Cx 的输出在 Timer1 时钟源的下降沿被锁存。为了 防止在使用比较器输出对 Timer1 时钟进行门控时发生 竞争条件, Timer1 将在其时钟源的上升沿递增,在下 降沿锁存比较器输出。更多信息,请参见比较器框图 (图 18-2)和 Timer1 框图 (图 12-1)。 注 1: 当使能 Timer1 同步器时,不应使用比较 器同步输出来对外部 Timer1 时钟进行门 控。 2: 在同步比较器输出时,Timer1 预分频比应 设置为 1:1,因为使用其他预分频值可能 发生意外结果。 DS41412F_CN 第 316 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 18.9 寄存器定义:比较器控制 寄存器 18-1: R/W-0 CxON bit 7 CMxCON0:比较器 x 控制寄存器 R-0 R/W-0 R/W-0 CxOUT CxOE CxPOL R/W-1 CxSP R/W-0 CxR R/W-0 R/W-0 CxCH<1:0> bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1-0 CxON:比较器 Cx 使能位 1 = 使能比较器 Cx 0 = 禁止比较器 Cx CxOUT:比较器 Cx 输出位 如果 CxPOL = 1 (反向极性): CxOUT = 0 (当 CxVIN+ > CxVIN- 时) CxOUT = 1 (当 CxVIN+ < CxVIN- 时) 如果 CxPOL = 0 (同向极性): CxOUT = 1 (当 CxVIN+ > CxVIN- 时) CxOUT = 0 (当 CxVIN+ < CxVIN- 时) CxOE:比较器 Cx 输出使能位 1 = CxOUT 信号从 CxOUT 引脚输出 (1) 0 = CxOUT 仅在内部产生 CxPOL:比较器 Cx 输出极性选择位 1 = CxOUT 逻辑反向 0 = CxOUT 逻辑不反向 CxSP:比较器 Cx 速度 / 功率选择位 1 = Cx 在正常功耗、高速模式下运行 0 = Cx 在低功耗、低速模式下运行 CxR:比较器 Cx 参考电压选择位 (同相输入) 1 = CxVIN+ 连接到 CXVREF 输出 0 = CxVIN+ 连接到 C12IN+ 引脚 CxCH<1:0>:比较器 Cx 通道选择位 00 = Cx 的 C12IN0- 引脚连接到 CxVIN01 = Cx 的 C12IN1- 引脚连接到 CXVIN10 = Cx 的 C12IN2- 引脚连接到 CxVIN11 = Cx 的 C12IN3- 引脚连接到 CxVIN- 注 1: 比较器输出需要以下三个条件:CxOE = 1、 CxON = 1 且相应的端口 TRIS 位 = 0。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 317 页 PIC18(L)F2X/4XK22 寄存器 18-2: CM2CON1:比较器 1 和 2 控制寄存器 R-0 MC1OUT bit 7 R-0 MC2OUT R/W-0 C1RSEL R/W-0 C2RSEL R/W-0 C1HYS R/W-0 C2HYS R/W-0 C1SYNC R/W-0 C2SYNC bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 MC1OUT:C1OUT 的镜像副本位 bit 6 MC2OUT:C2OUT 的镜像副本位 bit 5 C1RSEL:比较器 C1 参考电压选择位 1 = FVR BUF1 连接到 C1VREF 输入 0 = DAC 连接到 C1VREF 输入 bit 4 C2RSEL:比较器 C2 参考电压选择位 1 = FVR BUF1 连接到 C2VREF 输入 0 = DAC 连接到 C2VREF 输入 bit 3 C1HYS:比较器 C1 滞回电压使能位 1 = 使能比较器 C1 滞回电压 0 = 禁止比较器 C1 滞回电压 bit 2 C2HYS:比较器 C2 滞回电压使能位 1 = 使能比较器 C2 滞回电压 0 = 禁止比较器 C2 滞回电压 bit 1 C1SYNC:C1 输出同步模式位 1 = C1 输出与 TMR1 时钟 (T1CLK)的上升沿同步 0 = C1 输出异步 bit 0 C2SYNC:C2 输出同步模式位 1 = C2 输出与 TMR1 时钟 (T1CLK)的上升沿同步 0 = C2 输出异步 DS41412F_CN 第 318 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 18-2: 与比较器模块相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 ANSELA — ANSELB — — ANSA5 — ANSA3 ANSA2 ANSA1 ANSA0 — ANSB5 ANSB4 ANSB3 ANSB2 ANSB1 ANSB0 CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL C1HYS C2HYS C1SYNC C2SYNC CM1CON0 C1ON C1OUT C1OE C1POL C1SP C1R C1CH<1:0> CM2CON0 C2ON C2OUT C2OE C2POL C2SP C2R C2CH<1:0> VREFCON1 DACEN DACLPS DACOE — DACPSS<1:0> — DACNSS VREFCON2 VREFCON0 INTCON IPR2 PIE2 — FVREN GIE/GIEH OSCFIP OSCFIE — FVRST PEIE/GIEL C1IP C1IE — FVRS<1:0> TMR0IE INT0IE C2IP EEIP C2IE EEIE — RBIE BCL1IP BCL1IE DACR<4:0> — — TMR0IF INT0IF HLVDIP TMR3IP HLVDIE TMR3IE — RBIF CCP2IP CCP2IE PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IF PMD2 — — — — CTMUMD CMP2MD CMP1MD ADCMD TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 图注: — = 未实现位,读为 0。比较器模块不使用阴影位。 寄存器 所在页 154 155 318 317 317 347 348 344 116 129 125 120 57 156 156  2011-2013 Microchip Technology Inc. DS41412F_CN 第 319 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 320 页  2011-2013 Microchip Technology Inc. 19.0 充电时间测量单元 (CTMU) 充电时间测量单元(CTMU)是一个灵活的模拟模块,它 提供脉冲源之间的精确时间差测量,以及异步脉冲生成 功能。 CTMU 可与其他片上模拟模块配合使用,精确测 量时间、电容、电容的相对变化,或生成具有特定延时 的输出脉冲。 CTMU 是连接电容式传感器的理想选择。 该模块具有以下主要特性: • 最多 28(1) 路通道,可用于电容或时间测量输入 • 片上精确电流源 • 4 个边沿输入触发源 • 每个边沿源的极性控制 • 边沿顺序控制 • 控制对边沿的响应 图 19-1: CTMU 框图 PIC18(L)F2X/4XK22 • 高精度时间测量 • 与系统时钟异步的外部或内部信号延时 • 适合电容测量的精确电流源 CTMU 与 A/D 转换器配合工作,根据具体器件和可用的 A/D 通道数,最多可提供 28(1) 路通道用于时间或电荷 测量。如果配置为产生延时,那么 CTMU 连接到比较器 2 的 C12IN1- 输入。电平敏感输入边沿源有 4 种可供选 择:两个外部输入引脚 (CTED1/CTED2)或 ECCP1/ (E)CCP2 特殊事件触发器。 图 19-1 给出了 CTMU 的框图。 注 1: PIC18(L)F2XK22 器件最多具有17 路通道 可用。 CTED1 CTED2 ECCP2 ECCP1 EDGEN EDGSEQEN EDG1SELx EDG1POL EDG2SELx EDG2POL CTMUCONH/CTMUCONL CTMUICON EDG1STAT EDG2STAT ITRIM<5:0> IRNG<1:0> 电流源 边沿 控制逻辑 电流控制 TGEN IDISSEN CTTRIG CTMU 控制逻辑 脉冲发生器 CTPLS 比较器 2 的输出 比较器 C1/C2 输入 A/D 转换器  2011-2013 Microchip Technology Inc. DS41412F_CN 第 321 页 PIC18(L)F2X/4XK22 19.1 CTMU 工作原理 CTMU 的工作方式是使用固定电流源来对电路进行充 电。电路的类型取决于要进行的测量的类型。在进行电 荷测量的情况下,电流是固定的,向电路施加电流的时 间也是固定的。这样,只要通过 A/D 测得电压就可以测 得电路的电容。在进行时间测量的情况下,电流和电路 的电容都是固定的。这种情况下,由 A/D 读取的电压可 以代表从电流源开始对电路进行充电到停止充电经过的 时间。 如果 CTMU 用于产生延时,那么电容和电流源,以及向 比较器电路提供的电压都是固定的。信号的延时由将电 压充电到比较器门限电压所需的时间决定。 19.1.1 工作原理 CTMU 的工作原理基于以下电荷公式: C = I ⋅ dd----VT- 简单来说,在电路中测量的电荷 (以库仑为单位)定义 为:以安培为单位的电流 (I)乘以以秒为单位的电流 流动时间 (t)。电荷也可以定义为:以法拉为单位的电 容 (C)乘以电路的电压 (V)。可得: I ⋅ t = C⋅ V CTMU 模块提供了恒定、已知的电流源。A/D 转换器用 于测量公式中的电压(V),剩下两个未知量:电容(C) 和时间 (t)。以上公式可用于计算电容或时间,根据以 下关系,使用电路的已知固定电容: t = (C⋅ V) ⁄ I 或根据: C = (I ⋅ t ) ⁄ V 使用电流源施加于电路的固定时间。 19.1.2 电流源 CTMU 的核心是精确电流源,旨在提供用于测量的恒定基 准。用户可以从三个范围选择电流等级,并可以对输出进 行微调。电流范围通过IRNG<1:0>位(CTMUICON<1:0>) 进行选择,值 00 代表最低范围。 电流微调通过 ITRIM<5:0> 位 (CTMUICON<7:2>)进 行。请注意,其中一半的范围用于正向调整电流源,另 一半用于负向调整电流源。值 000000 是中性位置(无 变化)。值 100000 代表最大负调整, 011111 代表最 大正调整。 19.1.3 边沿选择和控制 CTMU 测量通过在模块的两路输入通道中发生的边沿事件 进行控制。每路通道 (称为边沿 1 和边沿 2)可以配置为 接收来自一个边沿输入引脚(CTED1和CTED2)或ECCPx 特殊事件触发器的输入脉冲。输入通道是电平敏感的,响 应 通 道 中 的 瞬 时 电 平,而 不 是 电 平 跳 变。输 入 使 用 EDG1SEL 和 EDG2SEL 位对(CTMUCONL<3:2 and 6:5>) 选择。 除了电流源之外,还可以使用 EDGE2POL 和 EDGE1POL 位 (CTMUCONL<7,4>)配置每路通道的事件极性。还 可以对输入通道进行过滤以选择边沿事件序列 (边沿 1 在边沿 2 之前发生) ,方法是将 EDGSEQEN 位 (CTMUCONH<2>)置 1。 19.1.4 边沿状态 CTMUCONL 寄存器还包含两个状态位 EDG2STAT 和 EDG1STAT(CTMUCONL<1:0>)。它们的主要功能是 显示在相应的通道中是否发生了边沿响应。当在通道中 检测到边沿响应时, CTMU 会自动将特定的位置 1。输 入通道的电平敏感特性也意味着,如果通道的配置或其 电流状态发生改变,那么状态位会立即置 1。 DS41412F_CN 第 322 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 模块使用边沿状态位来控制到外部模拟模块(如 A/D 转 换器)的电流源输出。只有其中一个状态位置 1 而不是 两个状态位同时置 1 时,才会向外部模块提供电流,如 果两个位同时置 1 或同时清零,则会切断电流。这使 CTMU 可以仅测量两个边沿事件之间的电流。在两个状 态位都置 1 后,必须先将它们清零,然后才能进行另一 次测量。两个位应同时清零 (如果可能),以避免重新 使能 CTMU 电流源。 除了可以由 CTMU 硬件置 1 之外,边沿状态位也可以用 软件置 1。也就是说可以在用户应用程序中手动使能或 禁止电流源。将其中任意一位置 1 (但不是同时置 1) 即可使能电流源。将两位同时置 1 或清零即可立即禁止 电流源。 19.1.5 中断 每当电流源先使能,然后禁止时,CTMU 就会将其中断标 志位(PIR3<2>)置 1。只有相应的中断允许位(PIE3<2>) 也置 1 时,才会产生中断。如果未使能边沿顺序(即,边 沿 1 必须在边沿 2 之前发生),则需要监视边沿状态位, 确定上次发生并导致中断的是哪一个边沿事件。 19.2 CTMU 模块初始化 以下过程是用于初始化 CTMU 模块的通用指南: 1. 使用 IRNG 位 (CTMUICON<1:0>)选择电流源 范围。 2. 使用ITRIM位(CTMUICON<7:2>)微调电流源。 3. 通过设置EDG1SEL和EDG2SEL位(CTMUCONL<3:2 和 6:5>)配置边沿 1 和边沿 2 的边沿输入源。 4. 使用EDG1POL和EDG2POL位(CTMUCONL<4,7>) 配置边沿输入的输入极性。默认配置是使用负边 沿极性 (从高至低跳变)。 5. 使用 EDGSEQEN 位 (CTMUCONH<2>)使能 边沿顺序。默认情况下,将禁止边沿顺序。 6. 使用 TGEN 位选择工作模式(测量或产生延时)。 默认模式是时间 / 电容测量。 7. 通过将 IDISSEN 位 (CTMUCONH<1>)置 1, 对所连接电路放电;在等待足够时间,让电路完 成放电之后,清零 IDISSEN。 8. 通过清零 CTMUEN 位 (CTMUCONH<7>)禁止 该模块。 9. 通过将 CTMUEN 位置 1 使能该模块。 10. 清零边沿状态位 EDG2STAT 和 EDG1STAT (CTMUCONL<1:0>)。 11. 通过将 EDGEN 位 (CTMUCONH<3>)置 1 使 能两个边沿输入。 根据要执行的测量或脉冲生成的类型,可能还需要再初始 化和配置一个或更多其他模块,与 CTMU 模块配合使用: • 边沿源生成:除了外部边沿输入引脚之外,Timer1 和 输出比较 /PWM1 模块也可以用作 CTMU 的边沿源。 • 电容或时间测量:CTMU 模块使用 A/D 转换器来测 量连接到一路模拟输入通道的电容两端的电压。 • 脉冲生成:在生成独立于系统时钟的输出脉冲时, CTMU 模块使用比较器 2 和关联的比较器参考电压。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 323 页 PIC18(L)F2X/4XK22 19.3 校准 CTMU 模块 要精确测量电容和时间,以及产生精确延时,需要对 CTMU 进行校准。如果应用只需要测量电容或时间的相 对变化,则通常不需要校准。此类应用的示例包括电容 式触摸开关,在这种应用中,触摸电路具有基本电容, 所增加的人体电容会改变电路的总电容。 如果需要测量实际的电容或时间,则必须进行两项硬件 校准:电流源需要进行校准,以使其提供精确的电流; 要测量的电路也需要进行校准,以测量和 / 或抵消要测 量电容之外的所有其他电容。 19.3.1 电流源校准 CTMU 模块随附的电流源是可调的。因此,要进行精确 测量,可以通过在未用模拟通道上放置一个高精度电阻 RCAL,测量并调整该电流源。图 19-2 给出了示例电路。 电流源测量使用以下步骤执行: 1. 初始化 A/D 转换器。 2. 初始化 CTMU。 3. 通过将 EDG1STAT (CTMUCONL<0>)置 1 使 能电流源。 4. 产生稳定时间延时。 5. 执行 A/D 转换。 6. 使用 I = V /RCAL 计算电流源电流;其中, RCAL 是高精度电阻, V 通过执行 A/D 转换来测量。 CTMU 电流源可以使用 CTMUICON 中的微调位进行微 调,通过迭代过程来获取所需的精确电流。或者,也可 以使用未经调整的标称值;可以由软件存储调整后的电 流值,用于所有后续的电容或时间测量。 要计算 RCAL 的值,必须选择标称电流,然后就可以计算 电阻。例如,如果 A/D 转换器参考电压为 3.3V,使用满 量程的 70%(或 2.31V)作为要由 A/D 转换器读取的所 需近似电压。如果 CTMU 电流源的范围选择为 0.55 μA, 则所需的电阻值使用 RCAL = 2.31V/0.55 μA 计算,得到值 为 4.2 MΩ。类似地,如果电流源选择为 5.5 μA,则 RCAL 将为 420,000Ω ;如果电流源设置为 55 μA,则为 42,000Ω。 图 19-2: CTMU 电流源校准电路 PIC18(L)FXXK22 器件 电流源 CTMU ANx RCAL A/D 转换器 A/D MUX 选择满量程电压 70% 的值,以确保 A/D 转换器处于充 分高于基底噪声的范围。请记住,如果选择了某个需要 结合使用 CTMUICON 微调位的精确电流,则可能需要 对 RCAL 的电阻值进行相应调整。可能还需要再次调整 RCAL,以允许选择可用的电阻值。考虑将使用 CTMU 进行测量的电路所需的精度, RCAL 应选择可用的最高 精度。建议最小精度是允许 0.1% 的误差。 以下示例给出了执行 CTMU 电流校准的一种典型方法。 例 19-1 演示如何初始化 A/D 转换器和 CTMU ;该程序 是同时使用两个模块的应用的典型程序。例 19-2 演示了 实际校准程序的一种方法。 DS41412F_CN 第 324 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 例 19-1: CTMU 校准设置程序 #include "p18cxxx.h" /**************************************************************************/ /*Set up CTMU *****************************************************************/ /**************************************************************************/ void setup(void) { //CTMUCONH/1 - CTMU Control registers CTMUCONH = 0x00; //make sure CTMU is disabled CTMUCONL = 0x90; //CTMU continues to run when emulator is stopped,CTMU continues //to run in idle mode,Time Generation mode disabled, Edges are blocked //No edge sequence order, Analog current source not grounded, trigger //output disabled, Edge2 polarity = positive level, Edge2 source = //source 0, Edge1 polarity = positive level, Edge1 source = source 0, //CTMUICON - CTMU Current Control Register CTMUICON = 0x01; //0.55uA, Nominal - No Adjustment /**************************************************************************/ //Set up AD converter; /**************************************************************************/ TRISA=0x04; //set channel 2 as an input // Configure AN2 as an analog channel ANSELAbits.ANSA2=1; TRISAbits.TRISA2=1; // ADCON2 ADCON2bits.ADFM=1; ADCON2bits.ACQT=1; ADCON2bits.ADCS=2; // Results format 1= Right justified // Acquition time 7 = 20TAD 2 = 4TAD 1=2TAD // Clock conversion bits 6= FOSC/64 2=FOSC/32 // ADCON1 ADCON1bits.PVCFG0 =0; ADCON1bits.NVCFG1 =0; // ADCON0 ADCON0bits.CHS=2; ADCON0bits.ADON=1; } // Vref+ = AVdd // Vref- = AVss // Select ADC channel // Turn on ADC  2011-2013 Microchip Technology Inc. DS41412F_CN 第 325 页 PIC18(L)F2X/4XK22 例 19-2: 电流校准程序 #include "p18cxxx.h" #define COUNT 500 #define DELAY for(i=0;i OPENSW - TRIP + HYST) { switchState = UNPRESSED; } } DS41412F_CN 第 330 页  2011-2013 Microchip Technology Inc. 19.5 使用 CTMU 模块测量时间 通过电流和电容校准步骤测量比率 (C/I)之后,可以 使用以下步骤精确测量时间: 1. 初始化 A/D 转换器和 CTMU。 2. 将 EDG1STAT 置 1。 3. 将 EDG2STAT 置 1。 4. 执行 A/D 转换。 5. 根据 T = (C/I) * V 计算边沿之间的时间;其中, I 在电流校准步骤 (第 19.3.1 节 “ 电流源校准 ”) 中计算,C 在电容校准步骤(第 19.3.2 节 “ 电容 校准 ”)中计算, V 通过执行 A/D 转换来测量。 PIC18(L)F2X/4XK22 假定所测量的时间足够小,电容 COFFSET 可以向 A/D 转 换器提供有效的电压。要进行最小的时间测量,请始终 将 A/D 通道选择寄存器 (AD1CHS)设置为未用的 A/D 通道;该通道的相应引脚不连接到任何电路板走线。这 可以最大程度减小所增加的杂散电容,保持总电路电容 接近于 A/D 转换器自身的电容 (4-5 pF)。要测量较长 的时间间隔,可以将一个外部电容连接到 A/D 通道,并 在进行时间测量时选择该通道。 图 19-3: 时间测量的典型连接和内部配置 CTED1 CTED2 PIC18(L)FXXK22 器件 CTMU EDG1 电流源 EDG2 输出脉冲 ANX RPR A/D 转换器 CAD  2011-2013 Microchip Technology Inc. DS41412F_CN 第 331 页 PIC18(L)F2X/4XK22 19.6 使用 CTMU 模块产生延时 CTMU 模块具有一种独特功能,即它可以根据外部电容 值产生独立于系统时钟的输出脉冲。这通过使用内部比 较器参考电压模块、比较器 2 输入引脚和外部电容实 现。脉冲输出到 CTPLS 引脚上。要使能该模式,需将 TGEN 位置 1。 示例电路请参见图 19-4。 CPULSE 由用户选择,用于确定 CTPLS 上的输出脉冲宽度。脉冲宽度根据T = (CPULSE/I )*V 计算;其中, I 从电流源测量步骤 (第 19.3.1 节 “ 电流 源校准 ”)获知, V 是内部参考电压 (CVREF)。 该功能的使用示例是与基于可变电容的传感器进行连接, 例如湿度传感器。当湿度发生变化时,CTPLS 上的脉宽输 出也会变化。 CTPLS 输出引脚可以连接到输入捕捉引 脚,通过测量变化的脉冲宽度来确定应用环境的湿度。 执行以下步骤来使用该功能: 1. 初始化比较器 2。 2. 初始化比较器参考电压。 3. 初始化 CTMU,并通过将 TGEN 位置 1 来使能延 时生成。 4. 将 EDG1STAT 置 1。 5. 当CPULSE充电到参考电压跳变点的值时,在CTPLS 上会产生输出脉冲。 图 19-4: 产生脉冲延时的典型连接和内部配置 CTED1 PIC18(L)FXXK22 器件 CTMU EDG1 CTPLS C12IN1- 电流源 比较器 C2 CPULSE CVREF 19.7 休眠 / 空闲模式期间的操作 19.7.1 休眠模式和深度休眠模式 当器件进入休眠模式时, CTMU 模块电流源将始终禁 止。如果调用休眠模式时,CTMU 正在执行依赖于电流 源的操作,则操作可能不会正确终止。电容和时间测量 可能会返回错误值。 19.7.2 空闲模式 CTMU 在空闲模式下的行为由 CTMUSIDL 位 (CTMUCONH<5>)决定。如果 CTMUSIDL 清零,在 空闲模式下,模块将继续工作。如果 CTMUSIDL 置 1, 则在器件进入空闲模式时,模块的电流源会被禁止。如 果调用空闲模式时,模块正在执行操作,这种情况下, 结果将类似于休眠模式下的结果。 19.8 CTMU 外设模块禁止 (PMD) 不使用该外设时,可以将外设模块禁止位置 1,以断 开模块的所有时钟源,将功耗降到绝对最低。请参见 第 3.6 节 “ 选择性外设模块控制 ”。 DS41412F_CN 第 332 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 19.9 复位对 CTMU 的影响 在复位时, CTMU 的所有寄存器都会被清零。这使 CTMU 模块处于禁止状态,它的电流源被关闭,所有配 置选项恢复为它们的默认设置。在任意复位之后,模块 都需要重新初始化。 如果发生复位时, CTMU 正在进行测量,测量结果将丢 失。正在测量的电路可能会存在部分充电的情况,在随 后 CTMU 尝试进行测量之前,应正确进行放电。电路放 电方法是,在 A/D 转换器连接到相应通道的同时,先将 IDISSEN 位(CTMUCONH<1>)置 1,然后再将其清零。 19.10 寄存器 有 3 个用于 CTMU 的控制寄存器: • CTMUCONH • CTMUCONL • CTMUICON CTMUCONH 和 CTMUCONL 寄存器 (寄存器 19-1 和 寄存器 19-2)包含一些控制位,这些控制位用于配置 CTMU 模块边沿源选择、边沿源极性选择、边沿顺序、 A/D 触发、模拟电路电容放电和使能。 CTMUICON 寄 存器(寄存器 19-3)包含一些用于选择电流源范围和电 流源微调的位。 19.11 寄存器定义:CTMU 控制 寄存器 19-1: R/W-0 CTMUEN bit 7 CTMUCONH:CTMU 控制寄存器 0 U-0 R/W-0 R/W-0 R/W-0 — CTMUSIDL TGEN EDGEN R/W-0 R/W-0 EDGSEQEN IDISSEN U-0 CTTRIG bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 CTMUEN:CTMU 使能位 1 = 使能模块 0 = 禁止模块 bit 6 未实现:读为 0 bit 5 CTMUSIDL:空闲模式停止位 1 = 当器件进入空闲模式时,模块停止工作 0 = 在空闲模式下模块继续工作 bit 4 TGEN: 延时产生使能位 1 = 使能边沿延时产生 0 = 禁止边沿延时产生 bit 3 EDGEN: 边沿使能位 1 = 未阻止边沿 0 = 阻止边沿 bit 2 EDGSEQEN: 边沿顺序使能位 1 = 边沿 1 事件必须在边沿 2 事件发生前发生 0 = 无需边沿顺序 bit 1 IDISSEN:模拟电流源控制位 1 = 模拟电流源输出接地 0 = 模拟电流源输出未接地 bit 0 CTTRIG:CTMU 特殊事件触发控制位 1 = 使能 CTMU 特殊事件触发器 0 = 禁止 CTMU 特殊事件触发器  2011-2013 Microchip Technology Inc. DS41412F_CN 第 333 页 PIC18(L)F2X/4XK22 寄存器 19-2: R/W-0 EDG2POL bit 7 CTMUCONL:CTMU 控制寄存器 1 R/W-0 R/W-0 EDG2SEL<1:0> R/W-0 R/W-0 EDG1POL EDG1SEL1 R/W-0 EDG1SEL0 R/W-0 EDG2STAT R/W-0 EDG1STAT bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 bit 6-5 bit 4 bit 3-2 bit 1 bit 0 EDG2POL:边沿 2 极性选择位 1 = 边沿 2 设定为正边沿响应 0 = 边沿 2 设定为负边沿响应 EDG2SEL<1:0>:边沿 2 源选择位 11 = CTED1 引脚 10 = CTED2 引脚 01 = ECCP1 特殊事件触发信号 00 = ECCP2 特殊事件触发信号 EDG1POL:边沿 1 极性选择位 1 = 边沿 1 设定为正边沿响应 0 = 边沿 1 设定为负边沿响应 EDG1SEL<1:0>:边沿 1 源选择位 11 = CTED1 引脚 10 = CTED2 引脚 01 = ECCP1 特殊事件触发信号 00 = ECCP2 特殊事件触发信号 EDG2STAT:边沿 2 状态位 1 = 已发生边沿 2 事件 0 = 未发生边沿 2 事件 EDG1STAT:边沿 1 状态位 1 = 已发生边沿 1 事件 0 = 未发生边沿 1 事件 DS41412F_CN 第 334 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 19-3: R/W-0 bit 7 CTMUICON:CTMU 电流控制寄存器 R/W-0 R/W-0 R/W-0 ITRIM<5:0> R/W-0 R/W-0 R/W-0 R/W-0 IRNG<1:0> bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7-2 bit 1-0 ITRIM<5:0>:电流源微调位 011111 = 对标称电流的最大正向调整 011110 . . . 000001 = 对标称电流的最小正向调整 000000 = IRNG<1:0> 指定的标称电流输出 111111 = 对标称电流的最小负向调整 . . . 100010 100001 = 对标称电流的最大负向调整 IRNG<1:0>:电流源范围选择位 (见表 27-4) 11 = 100 × 基本电流 10 = 10 × 基本电流 01 = 基本电流 00 = 禁止电流源 表 19-1: 与 CTMU 模块相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 CTMUCONH CTMUEN — CTMUSIDL TGEN CTMUCONL EDG2POL EDG2SEL<1:0> EDG1POL CTMUICON ITRIM<5:0> IPR3 SSP2IP BCL2IP RC2IP TX2IP PIE3 SSP2IE BCL2IE RC2IE TX2IE PIR3 SSP2IF BCL2IF RC2IF TX2IF PMD2 — — — — 图注: — = 未实现,读为 0。 CTMU 操作期间不使用阴影位。 Bit 3 Bit 2 Bit 1 Bit 0 EDGEN EDGSEQEN IDISSEN CTTRIG EDG1SEL<1:0> EDG2STAT EDG1STAT IRNG<1:0> CTMUIP TMR5GIP TMR3GIP TMR1GIP CTMUIE TMR5GIE TMR3GIE TMR1GIE CTMUIF TMR5GIF TMR3GIF TMR1GIF CTMUMD CMP2MD CMP1MD ADCMD 复位值 所在页 333 334 335 130 126 121 57  2011-2013 Microchip Technology Inc. DS41412F_CN 第 335 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 336 页  2011-2013 Microchip Technology Inc. 20.0 SR 锁存器 模块由单个 SR 锁存器组成,该锁存器具有多个置 1 和 复位输入,以及独立的锁存器输出。 SR 锁存器模块具 有以下特性: • 可编程输入选择 • 有内部 / 外部 SR 锁存器输出 • 可选择的 Q 和 Q 输出 • 固件置 1 和复位 SR 锁存器可用于各种模拟应用,包括振荡器电路、单 次电路、滞回电压控制器和模拟计时应用。 20.1 锁存器操作 锁存器是不依赖于时钟源的置 1— 复位锁存器。每个置 1 和复位输入均为高电平有效。锁存器可以通过以下方 式置 1 或复位: • 软件控制 (SRPS 和 SRPR 位) • 比较器 C1 的输出 (sync_C1OUT) • 比较器 C2 的输出 (sync_C2OUT) • SRI 引脚 • 可编程时钟 (DIVSRCLK) SRCON0 寄存器的 SRPS 和 SRPR 位可以分别用于置 1 或复位 SR 锁存器。锁存器是复位优先型的。因此, 如果置 1 和复位输入同时为高电平,则锁存器将进入复 位状态。SRPS 和 SRPR 位都是自复位的,也就是说, 对两个位中的任一个位执行一次写操作是完成锁存器置 1 或复位操作的必要条件。 比较器 C1 或 C2 的输出可以用作 SR 锁存器的置 1 或复 位输入。其中任一比较器的输出都可以与 Timer1 时钟源 进行同步。更多信息,请参见第 18.0 节 “ 比较器模块 ” 和第 12.0 节 “ 带门控控制的 Timer1/3/5 模块 ”。 SRI 引脚上的外部源可以用作 SR 锁存器的置 1 或复位 输入。 内部时钟源 DIVSRCLK 可用于定期置 1 或复位 SR 锁存 器。 SRCON0 寄存器中的 SRCLK<2:0> 位用于选择时 钟源周期。 SRCON1 寄存器的 SRSCKE 和 SRRCKE 位分别用于使能时钟源置 1 或复位 SR 锁存器。 PIC18(L)F2X/4XK22 20.2 锁存器输出 SRCON0 寄存器的 SRQEN 和 SRNQEN 位用于控制 Q 和 Q 锁存器输出。 SR 锁存器的两个输出可以同时直接 输出到 I/O 引脚。控制权由 SRCON0 寄存器中的 SRQEN 和 SRNQEN 位的状态决定。 必须清零相应端口对应的 TRIS 位以使能端口引脚输出 驱动器。 20.3 DIVSRCLK 时钟产生 DIVSRCLK 时钟信号由外设时钟产生,该外设时钟按 SRCLK<2:0> 位决定的值进行预分频。更多详细信息, 请参见图 20-2 和表 20-1。 20.4 复位的影响 在发生任何器件复位时, SR 锁存器不会被初始化, SRQ 和 SRNQ 输出未知。用户固件负责在允许锁存器 输出传到输出引脚之前初始化锁存器输出。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 337 页 PIC18(L)F2X/4XK22 图 20-1: DIVSRCLK 框图 3 SRCLK<2:0> 外设时钟 Tosc 可编程 SRCLK分频比 1:4至1:512 t0 t0+4 t0+8 t0+12 DIVSRCLK 4-512个周期 ... SRCLK<2:0> = "001" 1:8 图 20-2: SR 锁存器简化框图 SRPS 脉冲 发生器 (2) SRI SRSPE DIVSRCLK SRSCKE sync_C2OUT(3) SRSC2E sync_C1OUT(3) SRSC1E SRPR 脉冲 发生器 (2) SRI SRRPE DIVSRCLK SRRCKE sync_C2OUT(3) SRRC2E sync_C1OUT(3) SRRC1E SRLEN SRQEN SQ SR 锁存器 (1) RQ SRLEN SRNQEN 注 1: 如果 R = 1 且同时 S = 1,则 Q = 0, Q = 1。 2: 脉冲发生器产生一个 2 TOSC 时钟周期的脉冲宽度。 3: 名称表示比较器输出的连接点。 SRQ SRNQ DS41412F_CN 第 338 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 20-1: SRCLK<2:0> 111 110 101 100 011 010 001 000 DIVSRCLK 频率表 分频比 FOSC = 20 MHz 512 25.6 μs 256 12.8 μs 128 6.4 μs 64 3.2 μs 32 1.6 μs 16 0.8 μs 8 0.4 μs 4 0.2 μs FOSC = 16 MHz FOSC = 8 MHz FOSC = 4 MHz FOSC = 1 MHz 32 μs 16 μs 8 μs 4 μs 2 μs 1 μs 0.5 μs 0.25 μs 64 μs 32 μs 16 μs 8 μs 4 μs 2 μs 1 μs 0.5 μs 128 μs 64 μs 32 μs 16 μs 8 μs 4 μs 2 μs 1 μs 512 μs 256 μs 128 μs 64 μs 32 μs 16 μs 8 μs 4 μs  2011-2013 Microchip Technology Inc. DS41412F_CN 第 339 页 PIC18(L)F2X/4XK22 20.5 寄存器定义:SR 锁存器控制 寄存器 20-1: SRCON0:SR 锁存器控制寄存器 0 R/W-0 SRLEN bit 7 R/W-0 R/W-0 SRCLK<2:0> R/W-0 R/W-0 SRQEN R/W-0 SRNQEN R/W-0 SRPS R/W-0 SRPR bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现 0 = 清零 C = 只可清零位 x = 未知 bit 7 SRLEN:SR 锁存器使能位 (1) 1 = 使能 SR 锁存器 0 = 禁止 SR 锁存器 bit 6-4 SRCLK<2:0>:SR 锁存器时钟分频比位 000 = 每 4 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 001 = 每 8 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 010 = 每 16 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 011 = 每 32 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 100 = 每 64 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 101 = 每 128 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 110 = 每 256 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 111 = 每 512 个外设时钟周期在 DIVSRCLK 上产生一个 2 TOSC 宽度的脉冲 bit 3 SRQEN:SR 锁存器 Q 输出使能位 1 = Q 出现在 SRQ 引脚 0 = Q 仅在内部出现 bit 2 SRNQEN:SR 锁存器 Q 输出使能位 1 = Q 出现在 SRNQ 引脚 0 = Q 仅在内部出现 bit 1 SRPS:使 SR 锁存器置 1 的脉冲输入位 (2) 1 = 为置 1 输入提供 2 TOSC 时钟周期的脉冲 0 = 对置 1 输入没有影响 bit 0 SRPR:使 SR 锁存器复位的脉冲输入位 (2) 1 = 为复位输入提供 2 TOSC 时钟周期的脉冲 0 = 对复位输入没有影响 注 1: 在 SR 锁存器使能时更改 SRCLK 位可能导致错误触发锁存器的置 1 和复位输入。 2: 只可置 1,总是读回 0。 DS41412F_CN 第 340 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 20-2: SRCON1:SR 锁存器控制寄存器 1 R/W-0 SRSPE bit 7 R/W-0 SRSCKE R/W-0 SRSC2E R/W-0 SRSC1E R/W-0 SRRPE R/W-0 SRRCKE R/W-0 SRRC2E R/W-0 SRRC1E bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现 0 = 清零 C = 只可清零位 x = 未知 bit 7 SRSPE:SR 锁存器外设置 1 使能位 1 = SRI 引脚状态将 SR 锁存器置 1 0 = SRI 引脚状态对 SR 锁存器没有影响 bit 6 SRSCKE:SR 锁存器置 1 时钟使能位 1 = DIVSRCLK 为 SR 锁存器的置 1 输入提供脉冲 0 = DIVSRCLK 不为 SR 锁存器的置 1 输入提供脉冲 bit 5 SRSC2E:SR 锁存器 C2 置 1 使能位 1 = C2 比较器输出将 SR 锁存器置 1 0 = C2 比较器输出对 SR 锁存器没有影响 bit 4 SRSC1E:SR 锁存器 C1 置 1 使能位 1 = C1 比较器输出将 SR 锁存器置 1 0 = C1 比较器输出对 SR 锁存器没有影响 bit 3 SRRPE:SR 锁存器外设复位使能位 1 = SRI 引脚将 SR 锁存器复位 0 = SRI 引脚对 SR 锁存器没有影响 bit 2 SRRCKE:SR 锁存器复位时钟使能位 1 = DIVSRCLK 为 SR 锁存器的复位输入提供脉冲 0 = DIVSRCLK 不为 SR 锁存器的复位输入提供脉冲 bit 1 SRRC2E:SR 锁存器 C2 复位使能位 1 = C2 比较器输出将 SR 锁存器复位 0 = C2 比较器输出对 SR 锁存器没有影响 bit 0 SRRC1E:SR 锁存器 C1 复位使能位 1 = C1 比较器输出将 SR 锁存器复位 0 = C1 比较器输出对 SR 锁存器没有影响 表 20-2: 与 SR 锁存器相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 SRCON0 SRLEN SRCLK<2:0> SRCON1 SRSPE SRSCKE SRSC2E SRSC1E TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISB WPUB TRISB7 TRISB6 TRISB5 TRISB4 WPUB7 WPUB6 WPUB5 WPUB4 图注: 该模块不使用阴影位。 SRQEN SRRPE TRISA3 TRISB3 WPUB3 SRNQEN SRPS SRRCKE SRRC2E TRISA2 TRISA1 TRISB2 TRISB1 WPUB2 WPUB1 SRPR SRRC1E TRISA0 TRISB0 WPUB0 复位值 所在页 340 341 156 156 157  2011-2013 Microchip Technology Inc. DS41412F_CN 第 341 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 342 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 21.0 固定参考电压 (FVR) 固定参考电压(FVR)是独立于 VDD 的稳定参考电压, 可选的输出电压有 1.024V、2.048V 或 4.096V。FVR 的 输出可以配置为向以下对象提供参考电压: • ADC 输入通道 • ADC 正参考电压 • 比较器的同相输入 • 数模转换器 (DAC) FVR 可以通过将 VREFCON0 寄存器的 FVREN 位置 1 来使能。 21.1 独立的增益放大器 送到 ADC、比较器和 DAC 的 FVR 输出会经过一个独立 的可编程增益放大器。放大器可以配置为将 1.024V 参 考电压放大 1 倍、 2 倍或 4 倍,产生三种可能电压。 VREFCON0 寄存器的 FVRS<1:0> 位用于使能和配置送 到 DAC 和比较器模块的参考电压的增益放大器设置。当 ADC 模块配置为使用 FVR 输出时,(FVR BUF2)参考 电压将通过附加的单位增益放大器进行缓冲。如果 ADC 未配置为使用 FVR,则该缓冲区会被禁止。 关于 FVR 的具体使用,请参见特定模块章节:第 17.0 节 “ 模数转换器(ADC)模块 ”、第 22.0 节 “ 数模转换器 (DAC)模块 ” 和第 18.0 节 “ 比较器模块 ”。 21.2 FVR 稳定周期 当固定参考电压模块使能时,参考电压和放大电路需要 一段时间才能达到稳定。在电路稳定下来、可供使用时, VREFCON0 寄存器的 FVRST 位将会置 1。关于最小延 时要求,请参见表 27-3。 图 21-1: 参考电压框图 FVR_buf2_enable(1) x1 x2 x4 FVRS<1:0> 2 x1 x2 x4 FVR BUF2 to ADC module FVR BUF1 to Comparators, DAC FVREN 1.024V + - Fixed Voltage Reference FVRST Note 1: FVR_buf2_enable = ‘1?’ when (ADON = ‘1’)AND [(PVCFG<1:0> = ‘10’) OR ( CHS<4:0> = ‘11111’)]  2011-2013 Microchip Technology Inc. DS41412F_CN 第 343 页 PIC18(L)F2X/4XK22 21.3 寄存器定义:FVR 控制 寄存器 21-1: VREFCON0:固定参考电压控制寄存器 R/W-0 R/W-0 R/W-0 R/W-1 U-0 U-0 U-0 U-0 FVREN FVRST FVRS<1:0> — — — — bit 7 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7 FVREN:固定参考电压使能位 0 = 禁止固定参考电压 1 = 使能固定参考电压 bit 6 FVRST: 固定参考电压就绪标志位 0 = 固定参考电压输出未就绪或未使能 1 = 固定参考电压输出就绪备用 bit 5-4 FVRS<1:0>:固定参考电压选择位 00 = 固定参考电压外设输出关闭 01 = 固定参考电压外设输出为 1x (1.024V) 10 = 固定参考电压外设输出为 2x (2.048V) (1) 11 = 固定参考电压外设输出为 4x (4.096V) (1) bit 3-2 保留:读为 0。保持这两位清零。 bit 1-0 未实现:读为 0。 注 1: 固定参考电压输出不能超出 VDD。 表 21-1: 与固定参考电压相关的寄存器汇总 名称 Bit 7 Bit 6 Bit 5 Bit 4 VREFCON0 FVREN FVRST FVRS<1:0> 图注: — = 未实现位,读为 0。 FVR 模块不使用阴影位。 Bit 3 — Bit 2 — Bit 1 — Bit 0 — 寄存器 所在页 344 DS41412F_CN 第 344 页  2011-2013 Microchip Technology Inc. 22.0 数模转换器 (DAC)模块 数模转换器提供了一个可变参考电压,它与输入源成比 例,具有 32 个可选输出电压。 DAC 的输入可以连接到: • 外部 VREF 引脚 • VDD 供电电压 • FVR (固定参考电压) DAC 的输出可以配置为向以下对象提供参考电压: • 比较器的同相输入 • ADC 输入通道 • DACOUT 引脚 数模转换器(DAC)可以通过将 VREFCON1 寄存器的 DACEN 位置 1 来使能。 22.1 输出电压选择 DAC 具有 32 个电平范围。32 个电平通过 VREFCON2 寄存器的 DACR<4:0> 位进行设置。 DAC 输出电压由以下公式确定: 公式 22-1: DAC 输出电压 VOUT = (VSRC+ – VSRC-) × -D----A----C----2R---5-<----4---:-0--->-- + VSRC- VSRC+ = VDD、VREF+ 或 FVR1 VSRC- = VSS 或 VREF- 22.2 比例输出电压 DAC 输出值通过使用一个梯形电阻网络产生,梯形电阻 网络的每一端分别与正参考电压和负参考电压输入源连 接。如果任一输入源的电压发生波动,DAC 输出值就会 产生类似的波动。 第 27.0 节 “ 电气特性 ” 中给出了梯形电阻网络中各个电 阻的阻值。 22.3 低功耗电压状态 为了让 DAC 模块的功耗降至最低,必须将梯形电阻网络 的 两 个 参 考 电 压 输 入 源 之 一 断 开。禁 止 正 电 压 源 (VSRC+)或负电压源 (VSRC-)均可。 PIC18(L)F2X/4XK22 负电压源通过将 VREFCON1 寄存器中的 DACLPS 位置 1 来禁止。而将 VREFCON1 寄存器中的 DACLPS 清零 则可以禁止正电压源。 22.4 输出钳位至正电压源 通过执 行以下操作,可以将 DAC 输出电压 设置为 VSRC+,使功耗降至最低: • 将 VREFCON1 寄存器中的 DACEN 位清零。 • 将 VREFCON1 寄存器中的 DACLPS 位置 1。 • 将 DACPSS 位配置为适当的正电压源。 • 将 VREFCON2 寄存器中的 DACRx 位配置为 11111。 这种方法也可用于将 FVR 的电压输出到输出引脚上。更 多信息,请参见第 22.6 节 “DAC 参考电压输出 ”。 22.5 输出钳位至负电压源 通过执 行以下操作,可以将 DAC 输出电压 设置为 VSRC-,使功耗降至最低: • 将 VREFCON1 寄存器中的 DACEN 位清零。 • 将 VREFCON1 寄存器中的 DACLPS 位清零。 • 将 DACPSS 位配置为适当的负电压源。 • 将 VREFCON2 寄存器中的 DACRx 位配置为 00000。 这使得比较器可以检测到过零点,且不额外消耗 DAC 模 块的电流。 22.6 DAC 参考电压输出 可以通过将 VREFCON1 寄存器的 DACOE 位设置为 1, 将 DAC 输出到 DACOUT 引脚。选择将 DAC 参考电压 输出到DACOUT引脚会自动改写数字输出缓冲器和该引 脚的数字输入门限检测器功能。当 DACOUT 引脚已被配 置为 DAC 参考电压输出时,读取该引脚将总是返回 0。 要提高电流驱动能力, DAC 参考电压输出端 DACOUT 必须外接缓冲器。图 22-2 举例说明了这一缓冲技术。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 345 页 PIC18(L)F2X/4XK22 图 22-1: 数模转换器框图 保留 FVR BUF1 VREF+ VDD DACPSS<1:0> DACEN DACLPS DACNSS VREFVSS 11 10 01 00 2 1 0 数模转换器(DAC) VSRC+ R R R R R 32 阶 R R R 32 选 1 多路开关(MUX) 5 11111 11110 00001 00000 VSRC- DACR<4:0> DAC 输出 (至比较器和 ADC 模块) DACOUT DACOE 图 22-2: 参考电压输出缓冲示例 PIC® MCU DAC 模块 R 参考电压 输出阻抗 DACOUT + – 经缓冲的 DAC 输出 DS41412F_CN 第 346 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 22.7 休眠期间的操作 如果因中断或看门狗定时器超时将器件从休眠模式唤 醒,VREFCON1 寄存器的内容将不受影响。为了最大程 度降低休眠模式下的电流消耗,应禁止参考电压模块。 22.8 复位的影响 器件复位会产生以下影响: • DAC 被禁止 • DAC 输出电压从 DACOUT 引脚上被移除 • DACR<4:0> 范围选择位被清零 22.9 寄存器定义:DAC 控制 寄存器 22-1: VREFCON1:参考电压控制寄存器 0 R/W-0 R/W-0 R/W-0 U-0 DACEN DACLPS DACOE — bit 7 R/W-0 R/W-0 DACPSS<1:0> U-0 R/W-0 — DACNSS bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7 bit 6 bit 5 bit 4 bit 3-2 bit 1 bit 0 DACEN:DAC 使能位 1 = 使能 DAC 0 = 禁止 DAC DACLPS:DAC 低功耗电压源选择位 1 = 选择 DAC 正参考电压源 0 = 选择 DAC 负参考电压源 DACOE:DAC 电压输出使能位 1 = DAC 电平也从 DACOUT 引脚输出 0 = DAC 电平从 DACOUT 引脚断开 未实现:读为 0 DACPSS<1:0>:DAC 正参考电压源选择位 00 = VDD 01 = VREF+ 10 = FVR BUF1 输出 11 = 保留,不使用 未实现:读为 0 DACNSS:DAC 负参考电压源选择位 1 = VREF0 = VSS  2011-2013 Microchip Technology Inc. DS41412F_CN 第 347 页 PIC18(L)F2X/4XK22 寄存器 22-2: U-0 — bit 7 VREFCON2:参考电压控制寄存器 1 U-0 U-0 R/W-0 R/W-0 — — R/W-0 DACR<4:0> R/W-0 R/W-0 bit 0 图注: R = 可读位 u = 不变 1 = 置1 W = 可写位 x = 未知 0 = 清零 U = 未实现位,读为 0 -n/n = POR 和 BOR 时的值 / 所有其他复位时的值 bit 7-5 bit 4-0 未实现:读为 0 DACR<4:0>:DAC 电压输出选择位 VOUT = ((VSRC+) - (VSRC-))*(DACR<4:0>/(25)) + VSRC- 表 22-1: 与 DAC 模块相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 VREFCON0 FVREN FVRST FVRS<1:0> VREFCON1 DACEN DACLPS DACOE VREFCON2 — — — 图注: — = 未实现位,读为 0。 DAC 模块不使用阴影位。 Bit 3 Bit 2 — — DACPSS<1:0> DACR<4:0> Bit 1 — Bit 0 — DACNSS 寄存器 所在页 344 347 348 DS41412F_CN 第 348 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 23.0 高 / 低压检测 (HLVD) PIC18(L)F2X/4XK22 器件具有一个高 / 低压检测 (HLVD)模块。该模块是一个可编程的电路,可以设置 器件的电压跳变点和变化方向。如果器件电压按照指定 的方向相对于该跳变点发生了偏离,就会将中断标志位 置 1。如果允许了中断,程序将跳转到中断向量地址处 执行,由软件响应该中断。 高 / 低压检测控制寄存器(寄存器 23-1)完全控制 HLVD 模块的工作。用户可通过软件控制该寄存器将电路 “ 关 闭 ”,从而使器件的电流消耗降至最低。 图 23-1 给出了模块的框图。 23.1 寄存器定义:HLVD 控制 寄存器 23-1: HLVDCON:高 / 低压检测控制寄存器 R/W-0 VDIRMAG bit 7 R-0 BGVST R-0 IRVST R/W-0 HLVDEN R/W-0 R/W-1 R/W-0 HLVDL<3:0> R/W-1 bit 0 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 x = 未知 bit 7 VDIRMAG:电压方向大小选择位 1 = 当电压等于或超过跳变点 (HLVDL<3:0>)时,事件发生 0 = 当电压等于或低于跳变点 (HLVDL<3:0>)时,事件发生 bit 6 BGVST:带隙参考电压稳定状态标志位 1 = 内部带隙参考电压稳定 0 = 内部带隙参考电压不稳定 bit 5 IRVST:内部参考电压稳定标志位 1 = 指示电压检测逻辑在检测到指定的电压范围时,产生中断标志 0 = 指示电压检测逻辑在检测到指定的电压范围时,不会产生中断标志,并且 HLVD 中断不被允许 bit 4 HLVDEN:高 / 低压检测模块使能位 bit 3-0 1 = 使能 HLVD 0 = 禁止 HLVD HLVDL<3:0>:电压检测级别位 (1) 1111 = 使用外部模拟输入 (输入来自于 HLVDIN 引脚) 1110 = 最大设置 . . . 0000 = 最小设置 注 1: 具体规范请参见表 27-5。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 349 页 PIC18(L)F2X/4XK22 通过将 HLVDEN 位 (HLVDCON<4>)置 1 使能该模 块。每次使能 HLVD 模块时,电路需要一定时间才能稳 定下来。 IRVST 位 (HLVDCON<5>)是一个只读位, 用于指示电路何时稳定。仅当电路稳定且 IRVST 位置 1 后,该模块才能产生中断。 VDIRMAG 位 (HLVDCON<7>)决定该模块的整体工 作状态。当 VDIRMAG 清零时,模块监视 VDD 看它是否 降到预先确定的设置点以下。当该位置 1 时,模块监视 VDD 看它是否上升到设置点以上。 23.2 工作原理 当使能了 HLVD 模块时,比较器使用内部产生的参考电 压作为设置点。将设置点的电压与跳变点电压作比较, 其中电阻分压器中的每个节点均代表一个电压跳变 点。 “ 跳变点 ” 电压是被检测到的高压或低压事件的电 平,它取决于该模块的配置。 当供电电压等于跳变点电压时,电阻阵列的节点电压输 出值等于由参考电压模块产生的内部参考电压。然后比 较器通过将 HLVDIF 位置 1 产生一个中断信号。 可用软件设定跳变点电压为 16 个值中的任何一个。通过 对 HLVDL<3:0> 位(HLVDCON<3:0>)进行编程可以选 择跳变点。 HLVD 模块还有一个额外的功能,允许用户通过外部电 源向模块提供跳变电压。当 HLVDL<3:0> 位被设置为 1111 时,使能该模式。在此状态下,比较器输入与外 部输入引脚 HLVDIN 复用。因此用户可以灵活地配置高 / 低压检测中断,使之可以在有效工作范围内的任何电压 点上产生。 图 23-1: HLVD 模块框图 (带外部输入) 外部产生的 跳变点 VDD VDD HLVDL<3:0> HLVDCON 寄存器 HLVDIN HLVDEN VDIRMAG 置1 HLVDIF 16 选 1 多路开关(MUX) HLVDEN BOREN DS41412F_CN 第 350 页 内部 参考电压 典型值为 1.024V  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 23.3 HLVD 设置 设置 HLVD 模块: 1. 将值写入 HLVDL<3:0> 位,选择所需的 HLVD 跳 变点。 2. 将 VDIRMAG 位设置为检测高压(VDIRMAG = 1) 或低压 (VDIRMAG = 0)。 3. 通过将 HLVDEN 位置 1,使能 HLVD 模块。 4. 清零 HLVD 中断标志位 (PIR2<2>),该位可能 被上次中断置 1。 5. 如果需要中断,通过将 HLVDIE 和 GIE/GIEH 位 (分别为 PIE2<2> 和 INTCON<7>)置 1,允许 HLVD 中断。 直到 IRVST 位也置 1 时才会发生中断。 注: 在更改任何模块设置 (VDIRMAG 和 HLVDL<3:0>)之 前,请 先 禁 止 模 块 (HLVDEN = 0),然后再进行更改并重新使 能模块。这可以防止产生虚假 HLVD 事件。 23.4 电流消耗 使能了该模块就使能了 HLVD 比较器和分压器,并将消 耗静态电流。第 27.0 节 “ 电气特性 ” 中规定了使能该模 块时的电流总消耗。 HLVD 模块无需一直工作,工作与 否取决于具体的应用。要降低电流消耗,只需要在检测 电压时,短时间地使能 HLVD 电路。在检测完成之后可 以禁止该模块。 23.5 HLVD 启动时间 第 27.0 节 “ 电气特性 ” 中规定了 HLVD 模块的内部参 考电压,该参考电压也可供其他内部电路 (如可编程欠 压复位电路)使用。如果禁止了 HLVD 或其他使用参考 电压的电路以降低器件的电流消耗,则参考电压电路将 需要一段时间稳定下来以后才能可靠地检测低压或高压 条件。 HLVD 启动时间 TIRVST 与器件时钟速度无关。 直到 TIRVST 结束并且参考电压达到稳定后才会允许 HLVD 中断标志。基于此原因,在此时间间隔期间,超 出设置点的短暂偏离可能不会被检测到 (见图 23-2 或 图 23-3)。 图 23-2: 情形 1: 低压检测工作原理 (VDIRMAG = 0) HLVDIF 可能未被置 1 VDD HLVDIF VHLVD 使能 HLVD IRVST 情形 2: VDD HLVDIF 使能 HLVD IRVST TIRVST 内部参考电压已稳定 用软件清零 HLVDIF VHLVD TIRVST 内部参考电压已稳定 用软件清零 HLVDIF 用软件清零 HLVDIF, 由于 HLVD 条件仍然存在,HLVDIF 保持置 1  2011-2013 Microchip Technology Inc. DS41412F_CN 第 351 页 PIC18(L)F2X/4XK22 图 23-3: 情形 1: 高压检测工作原理 (VDIRMAG = 1) HLVDIF 可能未被置 1 VDD HLVDIF 使能 HLVD IRVST 情形 2: VDD TIRVST 内部参考电压已稳定 VHLVD 用软件清零 HLVDIF VHLVD HLVDIF 使能 HLVD IRVST TIRVST 内部参考电压已稳定 用软件清零 HLVDIF 用软件清零 HLVDIF, 由于 HLVD 条件仍然存在,HLVDIF 保持置 1 23.6 应用 在许多应用中,当电压低于或高于某个门限值时,系统 希望可以检测到该事件。例如,可以定期使能 HLVD 模 块 来 检 测 是 否 连 接 通 用 串 行 总 线 (Universal Serial Bus, USB)。这里假设断开连接时器件的供电电压低 于 USB 电压。若连接了 USB,将检测到 3.3V 至 5V 的 高压 (USB 上的电压);如果断开连接,情况正好相 反。此功能可以省去一些额外的元件和连接信号 (输入 引脚)。 对于一般的电池应用,图 23-4 给出了一个近似的电压曲 线。器件电压会随时间逐渐下降。当器件电压达到电压 VA 时, HLVD 逻辑电路会在时间 TA 产生中断。该中断 将导致执行ISR,从而使应用程序能在器件电压退出有效 工作范围(对应的时间为 TB)之前执行 “ 日常任务 ”,并 执行受控关闭。这会提供一个时间窗 (表示为 TA 和 TB 的时间差)使应用程序能安全地退出。 图 23-4: 典型低压检测应用 VA VB 电压 图注: 时间 TA TB VA = HLVD 跳变点 VB = 器件的最低有效工作电压 DS41412F_CN 第 352 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 23.7 休眠期间的操作 23.8 复位的影响 如果使能了 HLVD 电路,则其在休眠期间将继续工作。 如果器件电压越过了跳变点, HLVDIF 位将会被置 1 并 且器件将从休眠状态中被唤醒。如果已经允许了全局中 断,程序将跳转到中断向量地址处继续执行。 表 23-1: 与高 / 低压检测模块相关的寄存器 器件复位将强制所有寄存器为复位状态。这会强制关闭 HLVD 模块。 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 HLVDCON VDIRMAG BGVST IRVST HLVDEN HLVDL<3:0> 349 INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 116 IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP 129 PIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IE 125 PIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IF 120 TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 156 图注: — = 未实现位,读为 0。 HLVD 模块不使用阴影位。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 353 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 354 页  2011-2013 Microchip Technology Inc. 24.0 CPU 的特殊功能 PIC18(L)F2X/4XK22 器件包含的功能旨在最大限度地提 高系统可靠性,并通过减少外部元件将系统成本降到最 低。这些功能包括: • 振荡器选择 • 复位: - 上电复位 (POR) - 上电延时定时器 (PWRT) - 振荡器起振定时器 (OST) - 欠压复位 (BOR) • 中断 • 看门狗定时器 (WDT) • 代码保护 • ID 存储单元 • 在线串行编程 (ICSP™) 要根据具体应用对频率、功耗、精度和成本的要求来选 择振荡器。在第 2.0 节 “ 振荡器模块 (带故障保护时钟 监视器) ” 中详细讨论了所有的选项。 在本数据手册的前面几章中已完整地讨论了器件的复位 和中断。 除了为复位提供了上电延时定时器和振荡器起振定时器 之外,PIC18(L)F2X/4XK22 器件还提供了一个看门狗定 时器,该定时器可通过配置位永久使能或用软件控制 (如果看门狗定时器使能位配置为禁止的话)。 器件自带的内部 RC 振荡器还提供了故障保护时钟监视 器(FSCM)和双速启动这两个额外的功能。FSCM 对 外设时钟进行后台监视,并在外设时钟发生故障时自动 切换时钟源。双速启动使得几乎可在启动发生那一刻立 即执行代码,同时主时钟源继续其起振延时。 通过设置相应的配置寄存器位可以使能和配置所有这些 功能。 PIC18(L)F2X/4XK22 24.1 配置位 可以通过对配置位编程 (读为 0)或不编程 (读为 1) 来选择不同的器件配置。这些配置位被映射到程序存储 器以 300000h 开始的单元中。 用户会注意到地址 300000h 超出了用户程序存储空间范 围。事 实 上,它 属 于 配 置 存 储 空 间 (300000h3FFFFFh),这一空间仅能通过表读和表写进行访问。 对配置寄存器进行编程的方式与对闪存进行编程的方式 类似。 EECON1 寄存器中的 WR 位启动自定时写入配 置寄存器。在正常操作模式下,TBLPTR 指向配置寄存 器的TBLWT指令会设置写配置寄存器要用到的地址和数 据。将 WR 位置 1 会启动对配置寄存器的长写操作。配 置寄存器一次被写入一个字节。TBLWT 指令可以将 1 或 0 写入单元来改写配置单元的内容。关于闪存编程的更 多详细信息,请参见第 6.6 节 “ 写闪存程序存储器 ”。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 355 页 PIC18(L)F2X/4XK22 表 24-1: 配置位和器件 ID 地址 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 300000h 300001h 300002h 300003h 300004h 300005h 300006h 300007h 300008h 300009h 30000Ah 30000Bh 30000Ch 30000Dh 3FFFFEh 3FFFFFh CONFIG1L CONFIG1H CONFIG2L CONFIG2H CONFIG3L CONFIG3H CONFIG4L CONFIG4H CONFIG5L CONFIG5H CONFIG6L CONFIG6H CONFIG7L CONFIG7H DEVID1(4) DEVID2(4) — IESO — — — MCLRE DEBUG — — CPD — WRTD — — — — FCMEN PRICLKEN — — — — — — P2BMX XINST — — — — — CPB — — WRTB — WRTC(3) — — EBTRB — DEV<2:0> — — — — — PLLCFG FOSC<3:0> BORV<1:0> BOREN<1:0> PWRTEN WDPS<3:0> WDTEN<1:0> — — — — — T3CMX HFOFST CCP3MX PBADEN CCP2MX — — LVP(1) — STRVEN — — — — — — CP3(2) CP2(2) CP1 CP0 — — — — — — WRT3(2) WRT2(2) WRT1 WRT0 — — — — — — EBTR3(2) EBTR2(2) EBTR1 EBTR0 — — — — — REV<4:0> DEV<10:3> 图注: – = 未实现, q = 值取决于具体条件。阴影位未实现,读为 0。 注 1: 只能在高电压编程模式下更改。 2: 仅在 PIC18(L)FX5K22 和 PIC18(L)FX6K22 器件上可用。 3: 在用户模式下,该位为只读位,不能自编程。 4: DEVID 值请参见寄存器 24-12 和寄存器 24-13。 DEVID 寄存器为只读寄存器,用户不能对其进行编程。 默认 / 未编程值 0000 0000 0010 0101 0001 1111 0011 1111 0000 0000 1011 1111 1000 0101 1111 1111 0000 1111 1100 0000 0000 1111 1110 0000 0000 1111 0100 0000 qqqq qqqq 0101 qqqq DS41412F_CN 第 356 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 24.2 寄存器定义:配置字 寄存器 24-1: CONFIG1H:配置寄存器 1 的高字节 R/P-0 IESO bit 7 R/P-0 FCMEN R/P-1 PRICLKEN R/P-0 PLLCFG R/P-0 R/P-1 R/P-0 FOSC<3:0> R/P-1 bit 0 图注: R = 可读位 -n = 未对器件编程时的值 P = 可编程位 U = 未实现位,读为 0 x = 未知 bit 7 IESO(1):内部 / 外部振荡器切换位 1 = 使能振荡器切换模式 0 = 禁止振荡器切换模式 bit 6 FCMEN(1):故障保护时钟监视器使能位 1 = 使能故障保护时钟监视器 0 = 禁止故障保护时钟监视器 bit 5 PRICLKEN:主时钟使能位 1 = 总是使能主时钟 0 = 可以用软件禁止主时钟 bit 4 PLLCFG:4 x PLL 使能位 1 = 总是使能 4 x PLL,振荡器进行 4 倍频 0 = 4 x PLL 由软件通过 PLLEN (OSCTUNE<6>)控制 bit 3-0 FOSC<3:0>:振荡器选择位 1111 = 外部 RC 振荡器, RA6 用作 CLKOUT 引脚 1110 = 外部 RC 振荡器, RA6 用作 CLKOUT 引脚 1101 = EC 振荡器 (低功耗, <500 kHz) 1100 = EC 振荡器, OSC2 用作 CLKOUT 引脚 (低功耗, <500 kHz) 1011 = EC 振荡器 (中等功耗, 500 kHz-16 MHz) 1010 = EC 振荡器, OSC2 用作 CLKOUT 引脚 (中等功耗, 500 kHz-16 MHz) 1001 = 内部振荡器模块, OSC2 用作 CLKOUT 引脚 1000 = 内部振荡器模块 0111 = 外部 RC 振荡器 0110 = 外部 RC 振荡器, OSC2 用作 CLKOUT 引脚 0101 = EC 振荡器 (高功耗, >16 MHz) 0100 = EC 振荡器, OSC2 用作 CLKOUT 引脚 (高功耗, >16 MHz) 0011 = HS 振荡器 (中等功耗, 4 MHz-16 MHz) 0010 = HS 振荡器 (高功耗, >16 MHz) 0001 = XT 振荡器 0000 = LP 振荡器 注 1: 如果 FOSC<3:0> 配置为 HS、 XT 或 LP 振荡器且 FCMEN 位置 1,则还应将 IESO 位置 1,以防止虚假的 时钟故障指示,以及允许时钟在发生 OST 超时时从内部振荡器模块自动切换到外部振荡器。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 357 页 PIC18(L)F2X/4XK22 寄存器 24-2: U-0 — bit 7 CONFIG2L:配置寄存器 2 的低字节 U-0 U-0 R/P-1 R/P-1 — — BORV<1:0>(1) R/P-1 R/P-1 BOREN<1:0>(2) 图注: R = 可读位 -n = 未对器件编程时的值 P = 可编程位 U = 未实现位,读为 0 x = 未知 bit 7-5 bit 4-3 bit 2-1 bit 0 未实现:读为 0 BORV<1:0>:欠压复位电压位 (1) 11 = VBOR 设置为 1.9V 标称值 10 = VBOR 设置为 2.2V 标称值 01 = VBOR 设置为 2.5V 标称值 00 = VBOR 设置为 2.85V 标称值 BOREN<1:0>:欠压复位使能位 (2) 11 = 只能由硬件使能欠压复位 (禁止 SBOREN) 10 = 只能由硬件使能欠压复位,休眠模式下被禁止 (禁止 SBOREN) 01 = 由软件使能和控制欠压复位 (使能 SBOREN) 00 = 用硬件和软件禁止欠压复位 PWRTEN:上电延时定时器使能位 (2) 1 = 禁止 PWRT 0 = 使能 PWRT 注 1: 请参见第 27.1 节 “ 直流特性:供电电压, PIC18(L)F2X/4XK22” 获取规范信息。 2: 上电延时定时器与欠压复位是相互独立的,可以分别控制两者的操作。 R/P-1 PWRTEN(2) bit 0 DS41412F_CN 第 358 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 24-3: U-0 — bit 7 CONFIG2H:配置寄存器 2 的高字节 U-0 R/P-1 R/P-1 R/P-1 — WDTPS<3:0> R/P-1 R/P-1 R/P-1 WDTEN<1:0> bit 0 图注: R = 可读位 -n = 未对器件编程时的值 P = 可编程位 U = 未实现位,读为 0 x = 未知 bit 7-6 bit 5-2 bit 1-0 未实现:读为 0 WDTPS<3:0>:看门狗定时器后分频比选择位 1111 = 1:32,768 1110 = 1:16,384 1101 = 1:8,192 1100 = 1:4,096 1011 = 1:2,048 1010 = 1:1,024 1001 = 1:512 1000 = 1:256 0111 = 1:128 0110 = 1:64 0101 = 1:32 0100 = 1:16 0011 = 1:8 0010 = 1:4 0001 = 1:2 0000 = 1:1 WDTEN<1:0>:看门狗定时器使能位 11 = 在硬件中使能 WDT ;禁止 SWDTEN 位 10 = WDT 由 SWDTEN 位控制 01 = 在器件处于活动状态时使能 WDT,在器件处于休眠模式时禁止;禁止 SWDTEN 位 00 = 在硬件中禁止 WDT ;禁止 SWDTEN 位  2011-2013 Microchip Technology Inc. DS41412F_CN 第 359 页 PIC18(L)F2X/4XK22 寄存器 24-4: R/P-1 MCLRE bit 7 CONFIG3H:配置寄存器 3 的高字节 U-0 R/P-1 R/P-1 R/P-1 — P2BMX T3CMX HFOFST R/P-1 CCP3MX R/P-1 PBADEN R/P-1 CCP2MX bit 0 图注: R = 可读位 -n = 未对器件编程时的值 P = 可编程位 U = 未实现位,读为 0 x = 未知 bit 7 MCLRE:MCLR 引脚使能位 1 = 使能 MCLR 引脚;禁止 RE3 输入引脚 0 = 使能 RE3 输入引脚;禁止 MCLR bit 6 未实现:读为 0 bit 5 P2BMX:P2B 输入多路复用位 1 = P2B 在 RB5 上 (1) P2B 在 RD2 上 (2) 0 = P2B 在 RC0 上 bit 4 T3CMX:Timer3 时钟输入多路复用位 1 = T3CKI 在 RC0 上 0 = T3CKI 在 RB5 上 bit 3 HFOFST:HFINTOSC 快速起振位 1 = HFINTOSC 开始为 CPU 提供时钟而无需等待振荡器稳定下来 0 = 系统时钟关闭直到 HFINTOSC 稳定为止 bit 2 CCP3MX:CCP3 多路复用位 1 = CCP3 输入 / 输出与 RB5 复用 0 = CCP3 输入 / 输出与 RC6 复用 (1) CCP3 输入 / 输出与 RE0 复用 (2) bit 1 PBADEN:PORTB A/D 使能位 1 = ANSELB<5:0> 复位为 1, PORTB<5:0> 引脚在复位时被配置为模拟输入 0 = ANSELB<5:0> 复位为 0, PORTB<4:0> 引脚在复位时被配置为数字 I/O bit 0 CCP2MX:CCP2 多路复用位 1 = CCP2 输入 / 输出与 RC1 复用 0 = CCP2 输入 / 输出与 RB3 复用 注 1: 仅限 PIC18(L)F2XK22 器件。 2: 仅限 PIC18(L)F4XK22 器件。 DS41412F_CN 第 360 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 24-5: R/P-1 DEBUG(2) bit 7 CONFIG4L:配置寄存器 4 的低字节 R/P-0 U-0 U-0 U-0 XINST — — — R/P-1 LVP(1) U-0 R/P-1 — STVREN bit 0 图注: R = 可读位 -n = 未对器件编程时的值 P = 可编程位 U = 未实现位,读为 0 x = 未知 bit 7 DEBUG:后台调试器使能位 (2) 1 = 禁止后台调试器, RB6 和 RB7 被配置为通用 I/O 引脚 0 = 使能后台调试器, RB6 和 RB7 专用于在线调试 bit 6 XINST:扩展指令集使能位 1 = 使能指令集扩展和变址寻址模式 0 = 禁止指令集扩展和变址寻址模式 (传统模式) bit 5-3 未实现:读为 0 bit 2 LVP:单电源 ICSP 使能位 1 = 使能单电源 ICSP 0 = 禁止单电源 ICSP bit 1 未实现:读为 0 bit 0 STVREN:堆栈满 / 下溢复位使能位 1 = 堆栈满 / 下溢导致复位 0 = 堆栈满 / 下溢不会导致复位 注 1: 该位只能在高电压编程模式下由编程器更改。 2: DEBUG 位由包括调试器和编程器在内的器件开发工具自动管理。对于正常器件操作,该位应保持为 1。 寄存器 24-6: U-0 — bit 7 CONFIG5L:配置寄存器 5 的低字节 U-0 U-0 U-0 R/C-1 — — — CP3(1) R/C-1 CP2(1) R/C-1 CP1 R/C-1 CP0 bit 0 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7-4 bit 3 bit 2 bit 1 bit 0 未实现:读为 0 CP3:代码保护位 (1) 1 = Block 3 不受代码保护 0 = Block 3 受代码保护 CP2:代码保护位 (1) 1 = Block 2 不受代码保护 0 = Block 2 受代码保护 CP1:代码保护位 1 = Block 1 不受代码保护 0 = Block 1 受代码保护 CP0:代码保护位 1 = Block 0 不受代码保护 0 = Block 0 受代码保护 注 1: 在 PIC18(L)FX5K22 和 PIC18(L)FX6K22 器件上可用。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 361 页 PIC18(L)F2X/4XK22 寄存器 24-7: CONFIG5H:配置寄存器 5 的高字节 R/C-1 R/C-1 U-0 U-0 U-0 U-0 CPD CPB — — — — bit 7 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7 bit 6 bit 5-0 CPD:数据 EEPROM 代码保护位 1 = 数据 EEPROM 不受代码保护 0 = 数据 EEPROM 受代码保护 CPB:引导区代码保护位 1 = 引导区不受代码保护 0 = 引导区受代码保护 未实现:读为 0 寄存器 24-8: U-0 — bit 7 CONFIG6L:配置寄存器 6 的低字节 U-0 U-0 U-0 R/C-1 — — — WRT3(1) R/C-1 WRT2(1) 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7-4 bit 3 bit 2 bit 1 bit 0 未实现:读为 0 WRT3:写保护位 (1) 1 = Block 3 不受写保护 0 = Block 3 受写保护 WRT2:写保护位 (1) 1 = Block 2 不受写保护 0 = Block 2 受写保护 WRT1:写保护位 1 = Block 1 不受写保护 0 = Block 1 受写保护 WRT0:写保护位 1 = Block 0 不受写保护 0 = Block 0 受写保护 注 1: 在 PIC18(L)FX5K22 和 PIC18(L)FX6K22 器件上可用。 U-0 — R/C-1 WRT1 U-0 — bit 0 R/C-1 WRT0 bit 0 DS41412F_CN 第 362 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 寄存器 24-9: CONFIG6H:配置寄存器 6 的高字节 R/C-1 R/C-1 R-1 U-0 U-0 U-0 WRTD WRTB WRTC(1) — — — bit 7 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7 WRTD:数据 EEPROM 写保护位 1 = 数据 EEPROM 不受写保护 0 = 数据 EEPROM 受写保护 bit 6 WRTB:引导区写保护位 1 = 引导区不受写保护 0 = 引导区受写保护 bit 5 WRTC:配置寄存器写保护位 (1) 1 = 配置寄存器不受写保护 0 = 配置寄存器受写保护 bit 4-0 未实现:读为 0 注 1: 在正常执行模式下,该位是只读位;该位仅在编程模式下可写入。 寄存器 24-10: U-0 — bit 7 CONFIG7L:配置寄存器 7 的低字节 U-0 U-0 U-0 R/C-1 — — — EBTR3(1) R/C-1 EBTR2(1) 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7-4 bit 3 bit 2 bit 1 bit 0 未实现:读为 0 EBTR3:表读保护位 (1) 1 = 其他块可对 Block 3 执行表读操作 0 = 禁止其他块对 Block 3 执行表读操作 EBTR2:表读保护位 (1) 1 = 其他块可对 Block 2 执行表读操作 0 = 禁止其他块对 Block 2 执行表读操作 EBTR1:表读保护位 1 = 其他块可对 Block 1 执行表读操作 0 = 禁止其他块对 Block 1 执行表读操作 EBTR0:表读保护位 1 = 其他块可对 Block 0 执行表读操作 0 = 禁止其他块对 Block 0 执行表读操作 注 1: 在 PIC18(L)FX5K22 和 PIC18(L)FX6K22 器件上可用。 U-0 — R/C-1 EBTR1 U-0 — bit 0 R/C-1 EBTR0 bit 0  2011-2013 Microchip Technology Inc. DS41412F_CN 第 363 页 PIC18(L)F2X/4XK22 寄存器 24-11: CONFIG7H:配置寄存器 7 的高字节 U-0 R/C-1 U-0 U-0 U-0 U-0 — EBTRB — — — — bit 7 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7 bit 6 bit 5-0 未实现:读为 0 EBTRB:引导区表读保护位 1 = 其他块可对引导区执行表读操作 0 = 禁止其他块对引导区执行表读操作 未实现:读为 0 寄存器 24-12: DEVID1:器件 ID 寄存器 1 R DEV2 bit 7 R DEV1 R DEV0 R REV4 R REV3 R REV2 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7-5 bit 4-0 DEV<2:0>:器件 ID 位 这些位与 DEVID2 中的 DEV<10:3> 一起决定器件 ID。 请参见表 24-2 获取完整的器件 ID 列表。 REV<4:0>:版本 ID 位 这些位用于指示器件版本。 寄存器 24-13: DEVID2:器件 ID 寄存器 2 R DEV10 bit 7 R DEV9 R DEV8 R DEV7 R DEV6 R DEV5 图注: R = 可读位 -n = 未对器件编程时的值 U = 未实现位,读为 0 C = 只可清零位 bit 7-0 DEV<10:3>:器件 ID 位 这些位与 DEVID1 中的 DEV<2:0> 一起决定器件 ID。 请参见表 24-2 获取完整的器件 ID 列表。 U-0 — R REV1 R DEV4 U-0 — bit 0 R REV0 bit 0 R DEV3 bit 0 DS41412F_CN 第 364 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 24-2: PIC18(L)F2X/4XK22 系列的器件 ID 表 DEV<10:3> DEV<2:0> 000 0101 0100 001 010 011 000 0101 0101 001 010 011 000 0101 0110 001 010 011 000 0101 0111 001 010 011 部件编号 PIC18F46K22 PIC18LF46K22 PIC18F26K22 PIC18LF26K22 PIC18F45K22 PIC18LF45K22 PIC18F25K22 PIC18LF25K22 PIC18F44K22 PIC18LF44K22 PIC18F24K22 PIC18LF24K22 PIC18F43K22 PIC18LF43K22 PIC18F23K22 PIC18LF23K22  2011-2013 Microchip Technology Inc. DS41412F_CN 第 365 页 PIC18(L)F2X/4XK22 24.3 看门狗定时器 (WDT) PIC18(L)F2X/4XK22 器件的 WDT 是由 LFINTOSC 时钟 源驱动的。当使能 WDT 时,时钟源也将同时使能。WDT 定时周期的标称值为 4 ms,其稳定性与 LFINTOSC 振荡 器相同。 4 ms 的 WDT 定时周期将与 16 位后分频器的值相乘来 得到更长的时间周期。通过配置寄存器 2H 中的位来控 制一个多路开关以对 WDT 后分频器的输出进行选择。 因此可获得的定时周期范围为 4 ms 至 131.072 秒(2.18 分钟)。当发生以下任一事件时,WDT 和后分频器将被 清零,这些事件包括:执行了 SLEEP 或 CLRWDT 指令、 改变了 OSCCON 寄存器的 IRCF 位或发生了时钟故障。 注 1: 当执行 CLRWDT 和 SLEEP 指令时, WDT 和后分频器的计数值将被清零。 2: 更改 OSCCON 寄存器的 IRCF 位的设置 会清零 WDT 和后分频器的计数值。 3: 当执行 CLRWDT 指令时,后分频器的计数 值将被清零。 图 24-1: WDT 框图 SWDTEN WDTEN LFINTOSC 时钟源 IRCF 位发生了改变 CLRWDT 所有器件复位 WDTPS<3:0> 休眠 使能 WDT WDT 计数器 ÷128 可编程后分频器 1:1 至 1:32,768 4 复位 从功耗管理 模式唤醒 WDT 复位 DS41412F_CN 第 366 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 24.3.1 控制寄存器 寄存器 24-14 所示为 WDTCON 寄存器。它是可读写寄 存器并包含一个控制位,仅当用配置位禁止 WDT 时, 该控制位才允许使用软件改写 WDT 使能配置位。 24.4 寄存器定义:WDT 控制 寄存器 24-14: WDTCON:看门狗定时器控制寄存器 U-0 — bit 7 U-0 U-0 U-0 U-0 U-0 — — — — — 图注: R = 可读位 -n = POR 时的值 W = 可写位 1 = 置1 U = 未实现位,读为 0 0 = 清零 bit 7-1 bit 0 未实现:读为 0 SWDTEN:软件使能或禁止看门狗定时器位 (1) 1 = WDT 开启 0 = WDT 关闭 (复位值) 注 1: 当使能 WDTEN 配置位时该位不起作用。 U-0 — x = 未知 R/W-0 SWDTEN(1) bit 0 表 24-3: 与看门狗定时器相关的寄存器 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 RCON IPEN SBOREN — RI TO WDTCON — — — — — 图注: — = 未实现,读为 0。看门狗定时器不使用阴影位。 表 24-4: 名称 与看门狗定时器相关的配置寄存器 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 CONFIG2H — — WDPS<3:0> 图注: — = 未实现,读为 0。看门狗定时器不使用阴影位。 Bit 2 PD — Bit 2 Bit 1 POR — Bit 0 BOR SWDTEN 复位值 所在页 60 367 Bit 1 Bit 0 WDTEN<1:0> 复位值 所在页 359  2011-2013 Microchip Technology Inc. DS41412F_CN 第 367 页 PIC18(L)F2X/4XK22 24.5 程序校验和代码保护 PIC18 闪存器件的整个代码保护结构与以往的 PIC® 单 片机器件完全不同。 用户程序存储器根据具体器件被分为 3 个或 5 个存储块。 其中一个为 0.5 KB 或 2 KB 的引导区 (大小取决于具体 器件) 。存储器的剩余部分按二进制边界被分为单独的 存储块。 每个存储块都有与其相关的 3 个代码保护位。它们是: • 代码保护位 (CPn) • 写保护位 (WRTn) • 外部存储块表读位 (EBTRn) 图 24-2 给出了 8 KB、16 KB 和 32 KB 器件的程序存储器 构成以及与每个存储块相关的特定代码保护位。表 24-5 中总结了这些位的实际地址。 图 24-2: PIC18(L)F2X/4XK22 的受代码保护的程序存储器 存储容量 / 器件 8 KB 16 KB 32 KB 64 KB (PIC18(L)FX3K22) (PIC18(L)FX4K22) (PIC18(L)FX5K22) (PIC18(L)FX6K22) 存储块的代码保护 受控于: 引导区 (000h-1FFh) Block 0 (200h-FFFh) Block 1 (1000h-1FFFh) 引导区 (000h-7FFh) Block 0 (800h-1FFFh) Block 1 (2000h-3FFFh) 引导区 (000h-7FFh) Block 0 (800h-1FFFh) Block 1 (2000h-3FFFh) Block 2 (4000h-5FFFh) Block 3 (6000h-7FFFh) 引导区 (000h-7FFh) Block 0 (800h-3FFFh) Block 1 (4000h-7FFFh) Block 2 (8000h-BFFFh) Block 3 (C000h-FFFFh) CPB, WRTB, EBTRB CP0, WRT0, EBTR0 CP1, WRT1, EBTR1 CP2, WRT2, EBTR2 CP3, WRT3, EBTR3 未实现 未实现 读为 0 读为 0 (2000h-1FFFFFh) (4000h-1FFFFFh) 未实现 未实现 读为 0 读为 0 (8000h-1FFFFFh) (10000h-1FFFFFh) (未实现的存储空间) 表 24-5: 与代码保护相关的配置寄存器 寄存器名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 300008h CONFIG5L — — — — 300009h CONFIG5H CPD CPB — — 30000Ah CONFIG6L — — — — 30000Bh CONFIG6H WRTD WRTB WRTC(2) — 30000Ch CONFIG7L — — — — 30000Dh CONFIG7H — EBTRB — — CP3(1) — WRT3(1) — EBTR3(1) — 图注: 阴影位未实现。 注 1: 仅在 PIC18(L)FX5K22 和 PIC18(L)FX6K22 器件上可用。 2: 在用户模式下,该位为只读位,不能自编程。 Bit 2 CP2(1) — WRT2(1) — EBTR2(1) — Bit 1 CP1 — WRT1 — EBTR1 — Bit 0 CP0 — WRT0 — EBTR0 — DS41412F_CN 第 368 页  2011-2013 Microchip Technology Inc. 24.5.1 程序存储器代码保护 可使用表读和表写指令从任何存储单元读写程序存储 器。器件 ID 可以通过表读指令进行读取。配置寄存器可 以通过表读和表写指令进行读写操作。 在正常执行模式下,CPn 位不起直接作用。CPn 位禁止 外部读写。如果 WRTn 配置位为 0,则用户存储区的存 储块可被保护不受表写指令的影响。EBTRn 位控制表读 操作。对于 EBTRn 位清零的用户存储区中的存储块,允 许在该存储块内执行表读指令。该存储块以外的存储单 PIC18(L)F2X/4XK22 元执行的表读指令则不被允许,将导致读为 0。图 24-3 至 24-5 给出了表写和表读保护的图示。 注: 代码保护位只能从 1 改写到 0 状态。不可 能将处于 0 状态的位改写为 1。只有通过 整片擦除或块擦除功能才能将代码保护位 设置为1。整片擦除和块擦除功能只能通过 ICSP™ 或外部编程器启动。 图 24-3: 不允许表写 (WRTn) 寄存器值 程序存储器 TBLPTR = 0008FFh 000000h 0007FFh 000800h PC = 001FFEh PC = 005FFEh TBLWT* TBLWT* 001FFFh 002000h 003FFFh 004000h 005FFFh 006000h 007FFFh 结果:只要 WRTn = 0,就禁止对 Blockn 的所有表写操作。 配置位设置 WRTB, EBTRB = 11 WRT0, EBTR0 = 01 WRT1, EBTR1 = 11 WRT2, EBTR2 = 11 WRT3, EBTR3 = 11  2011-2013 Microchip Technology Inc. DS41412F_CN 第 369 页 PIC18(L)F2X/4XK22 图 24-4: 不允许外部存储块的表读 (EBTRn) 寄存器值 程序存储器 TBLPTR = 0008FFh 000000h 0007FFh 000800h 配置位设置 WRTB, EBTRB = 11 WRT0, EBTR0 = 10 PC = 003FFEh TBLRD* 001FFFh 002000h 003FFFh 004000h 005FFFh 006000h WRT1, EBTR1 = 11 WRT2, EBTR2 = 11 WRT3, EBTR3 = 11 007FFFh 结果:只要 EBTRn = 0,就禁止来自外部存储块对 Blockn 的所有表读操作。 TABLAT 寄存器返回 0。 图 24-5: 允许外部存储块的表读 (EBTRn) 寄存器值 程序存储器 000000h 0007FFh 000800h TBLPTR = 0008FFh PC = 001FFEh TBLRD* 001FFFh 002000h 003FFFh 004000h 005FFFh 006000h 007FFFh 结果:即使当 EBTRBn = 0 时,也允许在 Blockn 内执行表读操作。 TABLAT 寄存器返回 TBLPTR 指向的存储单元的值。 配置位设置 WRTB, EBTRB = 11 WRT0, EBTR0 = 10 WRT1, EBTR1 = 11 WRT2, EBTR2 = 11 WRT3, EBTR3 = 11 DS41412F_CN 第 370 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 24.5.2 数据 EEPROM 代码保护 CPD 和 WRTD 两个位可保护整个数据 EEPROM 不被 从外部读写。 CPD 禁止数据 EEPROM 的外部读写。 WRTD 禁止从内部和外部写数据 EEPROM。在正常操 作下, CPU 可以始终读数据 EEPROM,与保护位的设 置无关。 24.5.3 配置寄存器保护 配置寄存器可以是写保护的。WRTC 位控制配置寄存器 的 保 护。在 正 常 执 行 模 式 下, WRTC 位 是只读位。 WRTC 只能通过 ICSP 或外部编程器写入。 24.6 ID 存储单元 有 8 个存储单元 (200000h-200007h)被指定为 ID 单 元,供用户存储校验和或其他代码标识编号。在执行程 序时可通过 TBLRD 和 TBLWT 指令读写这些单元;在编 程 / 校验时,也可读写这些单元。当器件有代码保护时, 也可读取 ID 单元。 24.7 在线串行编程 PIC18(L)F2X/4XK22 器件可以在最终的应用电路中进 行串行编程。只需要 5 根线即可实现这一操作,其中时 钟线、数据线各一根,其余 3 根分别是电源线、接地线 和编程电压线。这允许用户在生产电路板时使用未编程 器件,仅在产品交付之前才对单片机进行编程,从而可 以使用最新版本的固件或者定制固件进行编程。 24.8 在线调试器 将 DEBUG 配置位编程为 0,可使能在线调试功能。该 功能允许与 MPLAB® IDE 配合使用进行简单的调试。当 使能了单片机的这项功能时,有些资源就不再是通用的 了。表 24-6 给出了后台调试器所需的资源。 表 24-6: I/O 引脚: 调试器资源 RB6 和 RB7 要使用单片机的在线调试功能,设计必须实现以下引脚 的在线串行编程连接: • MCLR/VPP/RE3 • VDD • VSS • RB7 • RB6 从而为 Microchip 或第三方开发工具公司提供在线调试 器模块接口。 24.9 单电源 ICSP 编程 LVP 配置位使能单电源 ICSP 编程(原来称为低电压 ICSP 编程或 LVP)。当使能单电源编程时,单片机可以在无需 对 MCLR/VPP/RE3 引脚施加高电压的情况下进行编程。 关 于 低 电 压 编 程 的 更 多 详 细 信 息,请 参 见 “PIC18(L)F2XK22/4XK22 Flash Memory Programming” (DS41398)。 注 1: 通过将 VIHH 施加到 MCLR 引脚,就可以 进行高电压编程,与 LVP 位的状态无关。 2: 默 认 情 况 下,使 能 对 未 编 程 器 件 (如 Microchip提供的)和已擦除器件进行单电 源 ICSP 编程。 3: 处于低电压 ICSP 模式时, MCLR 总是使 能,与 MCLRE 位无关,并且 RE3 引脚不 能再用作通用输入。 LVP 位仅可在使用标准高电压编程时被置 1 或清零 (VIHH 被施加到 MCLR/VPP/RE3 引脚)。一旦 LVP 被 禁止,只能使用标准高电压编程来对器件进行编程。 不受代码保护的存储器可以使用块擦除或逐行擦除进行 擦除,然后在任何指定的 VDD 下进行写入。如果要擦除 受代码保护的存储器,需要进行块擦除。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 371 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 372 页  2011-2013 Microchip Technology Inc. 25.0 指令集汇总 PIC18(L)F2X/4XK22 器件具有一个包含 75 条 PIC18 核 心指令的标准指令集,和一个包含 8 条新指令的扩展指 令集,扩展指令集用于优化递归代码或使用软件堆栈的 代码。本章后面的部分将讨论扩展指令集。 25.1 标准指令集 标准的 PIC18 指令集与以前的 PIC® MCU 指令集相比, 添加了很多增强功能,并保持了易于从这些 PIC® MCU 指令集移植的特点。大部分指令为单程序存储字指令 (16 位),只有 4 条指令需要两个程序存储单元。 每个单字指令都是一个 16 位字,由操作码 (指明指令 类型)和一个或多个操作数 (指定指令操作)组成。 整个指令集具有高度的正交性,可以分为以下 4 种基本 类型: • 字节操作类指令 • 位操作类指令 • 立即数操作类指令 • 控制操作类指令 表 25-2 为 PIC18 指令集汇总,列出了上述四类指令。 表 25-1 给出了操作码字段的说明。 大部分字节操作类的指令都含有三种操作数: 1. 文件寄存器 (由 “f” 指定) 2. 保存结果的目标寄存器 (由 “d” 指定) 3. 被访问存储区 (由 “a” 指定) 文件寄存器标识符 “f” 指定了指令将会使用哪一个文件寄 存器。目标寄存器标识符 “d” 指定了操作结果的存放位 置。如果 “d” 为 0,操作结果存入 WREG 寄存器中。如 果 “d” 为 1,操作结果存入指令指定的文件寄存器中。 所有位操作类指令都含有三种操作数: 1. 文件寄存器 (由 “f” 指定) 2. 文件寄存器中的位 (由 “b” 指定) 3. 被访问存储区 (由 “a” 指定) 位域标识符 “b” 选择操作所影响的位的编号,而文件寄存 器标识符 “f” 则代表这些位所在的文件寄存器地址。 PIC18(L)F2X/4XK22 立即数操作类指令使用以下操作数: • 要装入到文件寄存器中的立即数 (由 “k” 指定) • 要装入立即数的 FSR 寄存器 (由 “f” 指定) • 不需要操作数 (由 “—” 指定) 控制类指令可以使用以下操作数: • 程序存储器地址 (由 “n” 指定) • CALL 或 RETURN 指令的模式 (由 “s” 指定) • 表读和表写指令的模式 (由 “m” 指定) • 不需要操作数 (由 “—” 指定) 除了 4 条双字指令外,其他所有的指令都是单字指令。 双字指令将所需的信息保存在 32 位中。第二个字的高 4 位都是 1。如果第二个字作为一条指令执行,它会执 行为 NOP 指令。 除非条件测试结果为真或者指令执行改变了程序计数器 的值,否则执行所有的单字指令都只需要一个指令周 期。对于上述两种特殊情况,指令执行需要两个指令周 期,在第二个指令周期中执行一条 NOP 指令。 执行双字指令需要两个指令周期。 每个指令周期由 4 个振荡周期组成。因此,如果振荡器 频率为 4 MHz,正常的指令执行时间为 1 μs。如果条件 测试结果为真或者指令执行改变了程序计数器的值,则 该指令的执行时间为 2 μs。双字跳转指令 (如果为真) 的执行则需要 3 μs。 图 25-1 给出了指令的几种通用格式。所有示例均使用 “nnh” 来表示十六进制数。 指令集汇总(见表25-2)列出了可被Microchip MPASMTM 汇编器识别的标准指令。 第 25.1.1 节 “ 标准指令集 ” 中对每条指令进行了介绍。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 373 页 PIC18(L)F2X/4XK22 表 25-1: 操作码字段说明 字段 说明 a bbb BSR C、 DC、 Z、 OV 和 N d dest f fs fd GIE k label mm * *+ *+* n PC PCL PCH PCLATH PCLATU PD PRODH PRODL s TBLPTR TABLAT TO TOS u WDT WREG x zs zd {} [text] (text) [expr] → <> ∈ 斜体文字 快速操作 RAM 位 a = 0:快速操作 RAM 内的 RAM 存储单元 (BSR 寄存器被忽略) a = 1:由 BSR 寄存器指定 RAM 存储区 8 位文件寄存器内的位地址 (0 至 7)。 存储区选择寄存器。用于选择当前的 RAM 存储区。 ALU 状态位:进位、半进位、全零、溢出和负标志位。 目标寄存器选择位 d = 0:结果保存至 WREG 寄存器 d = 1:结果保存至文件寄存器 f 目标寄存器:可以是 WREG 寄存器或指定的文件寄存器地址。 8 位文件寄存器地址 (00h 至 FFh),或 2 位 FSR 标识符 (0h 至 3h)。 12 位文件寄存器地址 (000h 至 FFFh)。这是源地址。 12 位文件寄存器地址 (000h 至 FFFh)。这是目标地址。 全局中断允许位。 立即数、常数或者标号 (可能是 8 位、 12 位或 20 位的值)。 标号名称。 表读和表写指令的 TBLPTR 寄存器模式。 只与表读和表写指令一起使用: 不改变寄存器 (如用于表读和表写的 TBLPTR) 后递增寄存器 (如用于表读和表写的 TBLPTR) 后递减寄存器 (如用于表读和表写的 TBLPTR) 预递增寄存器 (如用于表读和表写的 TBLPTR) 相对跳转指令的相对地址 (二进制补码形式),或 CALL/ 跳转和 RETURN 指令的直接地址。 程序计数器。 程序计数器低字节。 程序计数器高字节。 程序计数器高字节锁存器。 程序计数器最高字节锁存器。 掉电位。 乘积的高字节。 乘积的低字节。 快速调用 / 返回模式选择位 s = 0:不对影子寄存器进行更新,也不用影子寄存器的内容更新其他寄存器 s = 1:将寄存器的值装入影子寄存器或将影子寄存器中的值装入寄存器 (快速模式) 21 位表指针 (指向程序存储器地址)。 8 位表锁存器。 超时位。 栈顶。 未使用或未改变。 看门狗定时器。 工作寄存器 (累加器)。 无关位 (0 或 1)。汇编器将生成 x = 0 的代码。为了与所有的 Microchip 软件工具兼容,建议使用这种形式。 对寄存器 (源)进行间接寻址的 7 位偏移量。 对寄存器 (目标)进行间接寻址的 7 位偏移量。 可选参数。 表示变址地址。 text 的内容。 表示由指针 expr 指向的寄存器中的 bit n。 赋值。 寄存器位域。 表示属于某个集合。 用户定义项 (字体为 Courier)。 DS41412F_CN 第 374 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 25-1: 指令的通用格式 针对字节的文件寄存器操作指令 15 10 9 8 7 0 操作码 da f(寄存器地址) d = 0,表示结果存入 WREG 寄存器 d = 1,表示结果存入文件寄存器(f) a = 0,强制使用快速操作存储区 a = 1,根据 BSR 选择存储区 f = 8 位文件寄存器地址 字节到字节的传送操作(双字)指令 15 12 11 操作码 0 f(源寄存器地址) 15 12 11 1111 0 f(目标寄存器地址) f = 12 位文件寄存器地址 针对位的文件寄存器操作指令 15 12 11 98 7 0 操作码 b(位号) a f(寄存器地址) b = 占 3 位,表示文件寄存器(f)中位的位置 a = 0,强制使用快速操作存储区 a = 1,根据 BSR 选择存储区 f = 8 位文件寄存器地址 立即数操作指令 15 操作码 87 k = 8 位立即数的值 0 k(立即数) 控制操作指令 CALL、GOTO 和跳转操作类指令 15 87 0 操作码 n<7:0>(立即数) 15 12 11 1111 0 n<19:8>(立即数) n = 20 位立即数的值 15 87 0 操作码 S n<7:0>(立即数) 15 12 11 0 1111 n<19:8>(立即数) S = 快速位 15 操作码 11 10 0 n<10:0>(立即数) 15 操作码 87 0 n<7:0>(立即数) 指令示例 ADDWF MYREG, W, B MOVFF MYREG1, MYREG2 BSF MYREG, bit, B MOVLW 7Fh GOTO Label CALL MYFUNC BRA MYFUNC BC MYFUNC  2011-2013 Microchip Technology Inc. DS41412F_CN 第 375 页 PIC18(L)F2X/4XK22 表 25-2: PIC18(L)F2X/4XK22 指令集 助记符, 操作数 说明 16 位指令字 受影响的 周期数 MSb LSb 状态位 注 针对字节的操作类指令 ADDWF ADDWFC ANDWF CLRF COMF CPFSEQ CPFSGT CPFSLT DECF DECFSZ DCFSNZ INCF INCFSZ INFSNZ IORWF MOVF MOVFF MOVWF MULWF NEGF RLCF RLNCF RRCF RRNCF SETF SUBFWB SUBWF SUBWFB SWAPF TSTFSZ XORWF f, d, a f, d, a f, d, a f, a f, d, a f, a f, a f, a f, d, a f, d, a f, d, a f, d, a f, d, a f, d, a f, d, a f, d, a fs, fd f, a f, a f, a f, d, a f, d, a f, d, a f, d, a f, a f, d, a f, d, a f, d, a f, d, a f, a f, d, a WREG 与 f 相加 1 0010 WREG 与 f 带进位相加 1 0010 WREG 和 f 作逻辑与运算 1 0001 将 f 清零 1 0110 对 f 取反 1 0001 将 f 与 WREG 作比较,相等则跳过 1(2 或 3) 0110 将 f 与 WREG 作比较,大于则跳过 1(2 或 3) 0110 将 f 与 WREG 作比较,小于则跳过 1(2 或 3) 0110 f 递减 1 1 0000 f 递减 1,为 0 则跳过 1(2 或 3) 0010 f 递减 1,非 0 则跳过 1(2 或 3) 0100 f 递增 1 1 0010 f 递增 1,为 0 则跳过 1(2 或 3) 0011 f 递增 1,非 0 则跳过 1(2 或 3) 0100 WREG 和 f 作逻辑或运算 1 0001 传送 f 1 0101 从 fs (源)送到 第一个字 2 fd (目标) 第二个字 将 WREG 内容传送到 f 1 1100 1111 0110 WREG 与 f 相乘 1 0000 对 f 取补 1 0110 f 带进位循环左移 1 0011 f 循环左移 (不带进位) 1 0100 f 带进位循环右移 1 0011 f 循环右移 (不带进位) 1 0100 将 f 的内容置为全 1 1 0110 WREG 减去 f (带借位) 1 0101 f 减去 WREG 1 0101 f 减去 WREG (带借位) 1 0101 将 f 中的两个半字节进行交换 1 0011 测试 f,为 0 则跳过 1(2 或 3) 0110 WREG 和 f 作逻辑异或运算 1 0001 01da 00da 01da 101a 11da 001a 010a 000a 01da 11da 11da 10da 11da 10da 00da 00da ffff ffff 111a 001a 110a 01da 01da 00da 00da 100a 01da 11da 10da 10da 011a 10da ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff C, DC, Z, OV, N C, DC, Z, OV, N Z, N Z Z, N 无 无 无 C, DC, Z, OV, N 无 无 C, DC, Z, OV, N 无 无 Z, N Z, N 无 无 无 C, DC, Z, OV, N C, Z, N Z, N C, Z, N Z, N 无 C, DC, Z, OV, N C, DC, Z, OV, N C, DC, Z, OV, N 无 无 Z, N 1, 2 1, 2 1,2 2 1, 2 4 4 1, 2 1, 2, 3, 4 1, 2, 3, 4 1, 2 1, 2, 3, 4 4 1, 2 1, 2 1 1, 2 1, 2 1, 2 1, 2 4 1, 2 注 1: 当端口寄存器修改自身时 (例如, MOVF PORTB, 1, 0),修改时使用的值是引脚上的当前值。例如,如果将一引脚配 置为输入,其对应数据锁存器中的值将为 1,但此时若有外部器件将该引脚驱动为低电平,则被写回数据锁存器的数据值 将是 0。 2: 当对 TMR0 寄存器执行该指令 (并且 d = 1)时,如果已为其分配了预分频器,则将该预分频器清零。 3: 如果程序计数器 (PC)被修改或者条件测试为真,则该指令需要两个周期。第二个周期执行一条 NOP 指令。 4: 某些指令是双字指令。除非指令的第一个字获取这 16 位中包含的信息,否则第二个字将作为 NOP 指令执行。这将确保所 有程序存储单元内存储的都是合法的指令。 DS41412F_CN 第 376 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 25-2: PIC18(L)F2X/4XK22 指令集 (续) 助记符, 操作数 说明 16 位指令字 周期数 MSb LSb 受影响的 状态位 注 针对位的操作类指令 BCF f, b, a 将 f 中的某位清零 1 1001 bbba ffff ffff 无 1, 2 BSF f, b, a 将 f 中的某位置 1 1 1000 bbba ffff ffff 无 1, 2 BTFSC f, b, a 测试 f 中的某位,为 0 则跳过 1(2 或 3) 1011 bbba ffff ffff 无 3, 4 BTFSS f, b, a 测试 f 中的某位,为 1 则跳过 1(2 或 3) 1010 bbba ffff ffff 无 3, 4 BTG f, b, a 将 f 中的某位取反 1 0111 bbba ffff ffff 无 1, 2 控制类指令 BC n 进位则跳转 1 (2) 1110 0010 nnnn nnnn 无 BN n 为负则跳转 1 (2) 1110 0110 nnnn nnnn 无 BNC n 无进位则跳转 1 (2) 1110 0011 nnnn nnnn 无 BNN n 不为负则跳转 BNOV n 不溢出则跳转 1 (2) 1110 0111 nnnn nnnn 无 1 (2) 1110 0101 nnnn nnnn 无 BNZ BOV n 不为零则跳转 n 溢出则跳转 1 (2) 1110 0001 nnnn nnnn 无 1 (2) 1110 0100 nnnn nnnn 无 BRA n 无条件跳转 2 1101 0nnn nnnn nnnn 无 BZ n 为零则跳转 1 (2) 1110 0000 nnnn nnnn 无 CALL k, s 调用子程序 第一个字 2 1110 110s kkkk kkkk 无 第二个字 1111 kkkk kkkk kkkk CLRWDT — 将看门狗定时器清零 1 0000 0000 0000 0100 TO, PD DAW — 对 WREG 进行十进制调整 1 0000 0000 0000 0111 C GOTO k 跳转到地址 第一个字 2 1110 1111 kkkk kkkk 无 第二个字 1111 kkkk kkkk kkkk NOP — 空操作 1 0000 0000 0000 0000 无 NOP — 空操作 1 1111 xxxx xxxx xxxx 无 4 POP — 弹出返回堆栈栈顶 (TOS)的内容 1 0000 0000 0000 0110 无 PUSH — 将数据压入返回堆栈栈顶 (TOS) 1 0000 0000 0000 0101 无 RCALL n 相对调用 2 1101 1nnn nnnn nnnn 无 RESET 软件器件复位 1 0000 0000 1111 1111 全部 RETFIE s 中断返回允许 2 0000 0000 0001 000s GIE/GIEH, PEIE/GIEL RETLW k 返回时将立即数送入 WREG 2 0000 1100 kkkk kkkk 无 RETURN s 从子程序返回 2 0000 0000 0001 001s 无 SLEEP — 进入待机模式 1 0000 0000 0000 0011 TO, PD 注 1: 当端口寄存器修改自身时 (例如, MOVF PORTB, 1, 0),修改时使用的值是引脚上的当前值。例如,如果将一引脚配 置为输入,其对应数据锁存器中的值将为 1,但此时若有外部器件将该引脚驱动为低电平,则被写回数据锁存器的数据值 将是 0。 2: 当对 TMR0 寄存器执行该指令 (并且 d = 1)时,如果已为其分配了预分频器,则将该预分频器清零。 3: 如果程序计数器 (PC)被修改或者条件测试为真,则该指令需要两个周期。第二个周期执行一条 NOP 指令。 4: 某些指令是双字指令。除非指令的第一个字获取这 16 位中包含的信息,否则第二个字将作为 NOP 指令执行。这将确保所 有程序存储单元内存储的都是合法的指令。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 377 页 PIC18(L)F2X/4XK22 表 25-2: PIC18(L)F2X/4XK22 指令集 (续) 助记符, 操作数 说明 16 位指令字 周期数 MSb LSb 受影响的 状态位 注 立即数操作类指令 ADDLW k ANDLW k IORLW k LFSR f, k MOVLB k MOVLW k MULLW k RETLW k SUBLW k XORLW k WREG 与立即数相加 1 WREG 和立即数进行逻辑与运算 1 WREG 和立即数进行逻辑或运算 1 传送立即数 (12 位)第二个字 2 到 FSR (f) 第一个字 将立即数送入 BSR<3:0> 1 将立即数送入 WREG 1 WREG 和立即数相乘 1 返回时将立即数送入 WREG 2 立即数减去 WREG 1 WREG 和立即数进行逻辑异或运算 1 0000 0000 0000 1110 1111 0000 0000 0000 0000 0000 0000 1111 1011 1001 1110 0000 0001 1110 1101 1100 1000 1010 kkkk kkkk kkkk 00ff kkkk 0000 kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk kkkk C, DC, Z, OV, N Z, N Z, N 无 无 无 无 无 C, DC, Z, OV, N Z, N 数据存储器 l∩ 程序存储器操作 TBLRD* 表读 TBLRD*+ 后递增表读 TBLRD*TBLRD+* 后递减表读 预递增表读 TBLWT* 表写 TBLWT*+ 后递增表写 TBLWT*TBLWT+* 后递减表写 预递增表写 2 0000 0000 0000 1000 无 0000 0000 0000 1001 无 0000 0000 0000 1010 无 0000 0000 0000 1011 无 2 0000 0000 0000 1100 无 0000 0000 0000 1101 无 0000 0000 0000 1110 无 0000 0000 0000 1111 无 注 1: 当端口寄存器修改自身时 (例如, MOVF PORTB, 1, 0),修改时使用的值是引脚上的当前值。例如,如果将一引脚配 置为输入,其对应数据锁存器中的值将为 1,但此时若有外部器件将该引脚驱动为低电平,则被写回数据锁存器的数据值 将是 0。 2: 当对 TMR0 寄存器执行该指令 (并且 d = 1)时,如果已为其分配了预分频器,则将该预分频器清零。 3: 如果程序计数器 (PC)被修改或者条件测试为真,则该指令需要两个周期。第二个周期执行一条 NOP 指令。 4: 某些指令是双字指令。除非指令的第一个字获取这 16 位中包含的信息,否则第二个字将作为 NOP 指令执行。这将确保所 有程序存储单元内存储的都是合法的指令。 DS41412F_CN 第 378 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 25.1.1 标准指令集 ADDLW W 与立即数相加 语法: 操作数: 操作: ADDLW k 0 ≤ k ≤ 255 (W) + k → W 受影响的状态位: N、 OV、 C、 DC 和 Z 机器码: 0000 1111 kkkk kkkk 说明: 指令字数: 指令周期数: 将 W 寄存器的内容与 8 位立即数 k 相加, 结果存储在 W 寄存器中。 1 1 Q 周期操作: Q1 Q2 Q3 Q4 译码 读立即数 k 处理数据 写入 W 示例: ADDLW 15h 执行指令前 W = 10h 执行指令后 W = 25h ADDWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: W 与 f 相加 ADDWF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (W) + (f) → dest N、 OV、 C、 DC 和 Z 0010 01da ffff ffff 将 W 的内容与 f 寄存器的内容相加。如 果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q 周期操作: Q1 译码 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 W REG 执行指令后 W REG ADDWF REG, 0, 0 = 17h = 0C2h = 0D9h = 0C2h 注: 所有的 PIC18 指令都可能在其指令助记符之前使用可选的标号参数,用于符号寻址。如果使用了标号,那 么指令格式将变为:{label} 指令参数。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 379 页 PIC18(L)F2X/4XK22 ADDWFC 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 W 与 f 带进位相加 ADDWFC f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (W) + (f) + (C) → dest N、 OV、 C、 DC 和 Z 0010 00da ffff ffff 将 W 的内容、进位标志位与数据存储单 元 f 的内容相加。如果 d 为 0,结果存储 在 W 中。如果 d 为 1,结果存储在数据 存储单元 f 中。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: ADDWFC 执行指令前 进位标志位= 1 REG = 02h W = 4Dh 执行指令后 进位标志位= 0 REG = 02h W = 50h REG, 0, 1 ANDLW 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 立即数和 W 寄存器作逻辑与运算 ANDLW k 0 ≤ k ≤ 255 (W) .AND. k → W N和Z 0000 1011 kkkk kkkk 将 W 的内容与 8 位立即数 k 进行逻辑与 运算。结果存储在 W 寄存器中。 1 1 Q2 读立即数 k Q3 处理数据 Q4 写入 W 示例: 执行指令前 W 执行指令后 W ANDLW = A3h = 03h 05Fh DS41412F_CN 第 380 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 ANDWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 W 和 f 作逻辑与运算 ANDWF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (W) .AND.(f) → dest N和Z 0001 01da ffff ffff 将 W 的内容与寄存器 f 的内容进行逻辑 与运算。如果 d 为 0,结果存储在 W 中。 如果 d 为 1,结果存回寄存器 f(默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 W REG 执行指令后 W REG ANDWF = 17h = C2h = 02h = C2h REG, 0, 0 BC 进位则跳转 语法: 操作数: BC n -128 ≤ n ≤ 127 操作: 如果进位标志位为 1 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0010 nnnn nnnn 说明: 指令字数: 如果进位标志位为 1,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果进位标志位= PC = 如果进位标志位= PC = BC 5 地址 (HERE) 1; 地址 (HERE + 12) 0; 地址 (HERE + 2)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 381 页 PIC18(L)F2X/4XK22 BCF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 f 中的某位清零 BCF f, b {,a} 0 ≤ f ≤ 255 0≤b≤7 a ∈ [0,1] 0 → f 无 1001 bbba ffff ffff 将寄存器 f 中的位 b 清零。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 f 示例: BCF 执行指令前 FLAG_REG = 执行指令后 FLAG_REG = FLAG_REG, 7, 0 C7h 47h BN 为负则跳转 语法: 操作数: BN n -128 ≤ n ≤ 127 操作: 如果负标志位为 1 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0110 nnnn nnnn 说明: 指令字数: 如果负标志位为 1,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果负标志位 = PC = 如果负标志位 = PC = BN Jump 地址 (HERE) 1; 地址 (Jump) 0; 地址 (HERE + 2) DS41412F_CN 第 382 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 BNC 无进位则跳转 语法: 操作数: BNC n -128 ≤ n ≤ 127 操作: 如果进位标志位为 0 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0011 nnnn nnnn 说明: 指令字数: 如果进位标志位为 0,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果进位标志位= PC = 如果进位标志位= PC = BNC Jump 地址 (HERE) 0; 地址 (Jump) 1; 地址 (HERE + 2) BNN 不为负则跳转 语法: 操作数: BNN n -128 ≤ n ≤ 127 操作: 如果负标志位为 0 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0111 nnnn nnnn 说明: 指令字数: 如果负标志位为 0,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果负标志位 = PC = 如果负标志位 = PC = BNN Jump 地址 (HERE) 0; 地址 (Jump) 1; 地址 (HERE + 2)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 383 页 PIC18(L)F2X/4XK22 BNOV 不溢出则跳转 语法: 操作数: BNOV n -128 ≤ n ≤ 127 操作: 如果溢出标志位为 0 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0101 nnnn nnnn 说明: 指令字数: 如果溢出标志位为 0,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果溢出标志位= PC = 如果溢出标志位= PC = BNOV Jump 地址 (HERE) 0; 地址 (Jump) 1; 地址 (HERE + 2) BNZ 不为零则跳转 语法: 操作数: BNZ n -128 ≤ n ≤ 127 操作: 如果全零标志位为 0 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0001 nnnn nnnn 说明: 指令字数: 如果全零标志位为 0,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果全零标志位= PC = 如果全零标志位= PC = BNZ Jump 地址 (HERE) 0; 地址 (Jump) 1; 地址 (HERE + 2) DS41412F_CN 第 384 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 BRA 无条件跳转 语法: 操作数: 操作: BRA n -1024 ≤ n ≤ 1023 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1101 0nnn nnnn nnnn 说明: 指令字数: 指令周期数: “2n” (以二进制补码表示)与 PC 相加。由 于 PC 将递增以便取出下一条指令,所以新 地址将为 PC + 2 + 2n。该指令为一条双周 期指令。 1 2 Q 周期操作: Q1 译码 空操作 Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q4 写入 PC 空操作 示例: 执行指令前 PC 执行指令后 PC HERE BRA Jump = 地址 (HERE) = 地址 (Jump) BSF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 f 中的某位置 1 BSF f, b {,a} 0 ≤ f ≤ 255 0≤b≤7 a ∈ [0,1] 1 → f 无 1000 bbba ffff ffff 将寄存器 f 的位 b 置 1。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 f 示例: BSF 执行指令前 FLAG_REG = 执行指令后 FLAG_REG = FLAG_REG, 7, 1 0Ah 8Ah  2011-2013 Microchip Technology Inc. DS41412F_CN 第 385 页 PIC18(L)F2X/4XK22 BTFSC 测试文件寄存器中的某位,为0则跳过 语法: BTFSC f, b {,a} 操作数: 0 ≤ f ≤ 255 0≤b≤7 a ∈ [0,1] 操作: 如果 (f) = 0,则跳过 受影响的状态位: 无 机器码: 1011 bbba ffff ffff 说明: 如果寄存器 f 的位 b 为 0,则跳过下一条指 令。即在 b 位为 0 时,丢弃执行当前指令 过程中已取的下一条指令,转而执行一条 NOP 指令,使该指令成为双周期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 指令字数: 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有 2 字指令, 则执行 BTFSC 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 空操作 如果跳过: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE FALSE TRUE BTFSC : : FLAG, 1, 0 执行指令前 PC = 执行指令后 如果 FLAG<1> = PC = 如果 FLAG<1> = PC = 地址 (HERE) 0; 地址 (TRUE) 1; 地址 (FALSE) BTFSS 测试文件寄存器中的某位,为1则跳过 语法: BTFSS f, b {,a} 操作数: 0 ≤ f ≤ 255 0≤b<7 a ∈ [0,1] 操作: 如果 (f) = 1,则跳过 受影响的状态位: 无 机器码: 1010 bbba ffff ffff 说明: 如果寄存器 f 的位 b 为 1,则跳过下一条指 令。即在 b 位为 1 时,丢弃执行当前指令 过程中已取的下一条指令,转而执行一条 NOP 指令,使该指令成为双周期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 指令字数: 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有 2 字指令, 则执行 BTFSS 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 空操作 如果跳过: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE FALSE TRUE BTFSS : : FLAG, 1, 0 执行指令前 PC = 执行指令后 如果 FLAG<1> = PC = 如果 FLAG<1> = PC = 地址 (HERE) 0; 地址 (FALSE) 1; 地址 (TRUE) DS41412F_CN 第 386 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 BTG 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 f 中的某位取反 BTG f, b {,a} 0 ≤ f ≤ 255 0≤b<7 a ∈ [0,1] (f) → f 无 0111 bbba ffff ffff 将数据存储单元 f 中的位 b 取反。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 f 示例: BTG PORTC, 4, 0 执行指令前: PORTC = 执行指令后: PORTC = 0111 0101 [75h] 0110 0101 [65h] BOV 溢出则跳转 语法: 操作数: BOV n -128 ≤ n ≤ 127 操作: 如果溢出标志位为 1 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0100 nnnn nnnn 说明: 指令字数: 如果溢出标志位为 1,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果溢出标志位= PC = 如果溢出标志位= PC = BOV Jump 地址 (HERE) 1; 地址 (Jump) 0; 地址 (HERE + 2)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 387 页 PIC18(L)F2X/4XK22 BZ 为零则跳转 语法: 操作数: BZ n -128 ≤ n ≤ 127 操作: 如果全零标志位为 1 (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1110 0000 nnnn nnnn 说明: 指令字数: 如果全零标志位为 1,程序将跳转。 “2n” (以二进制补码表示)与 PC 相加。 由于 PC 将递增以便取出下一条指令,所 以新地址将为 PC + 2 + 2n。该指令为一 条双周期指令。 1 指令周期数: Q 周期操作: 如果跳转: Q1 译码 空操作 如果不跳转: Q1 译码 1 (2) Q2 读立即数 n 空操作 Q3 处理数据 空操作 Q2 读立即数 n Q3 处理数据 Q4 写入 PC 空操作 Q4 空操作 示例: HERE 执行指令前 PC = 执行指令后 如果全零标志位= PC = 如果全零标志位= PC = BZ Jump 地址 (HERE) 1; 地址 (Jump) 0; 地址 (HERE + 2) CALL 调用子程序 语法: 操作数: CALL k {,s} 0 ≤ k ≤ 1048575 s ∈ [0,1] 操作: (PC) + 4 → TOS, k → PC<20:1>, 如果 s = 1 (W) → WS, (STATUS) → STATUSS, (BSR) → BSRS 受影响的状态位: 无 机器码: 第一个字 (k<7:0>) 1110 第二个字 (k<19:8>) 1111 110s k7kkk k19kkk kkkk kkkk0 kkkk8 说明: 可在整个 2 MB 的存储器范围内进行子程 序调用。首先,将返回地址 (PC + 4) 压入返回堆栈。如果 s = 1,还会将 W、 STATUS 和 BSR 寄存器的内容存入它们 各自的影子寄存器 WS、 STATUSS 和 BSRS。如果 s = 0,将不会进行任何更 新 (默认)。然后,将 20 位的值 k 装入 PC<20:1>。 CALL 是一条双周期指令。 指令字数: 2 指令周期数: 2 Q 周期操作: Q1 译码 空操作 Q2 读立即数 k<7:0> 空操作 Q3 将 PC 压入堆栈 空操作 Q4 读立即数 k<19:8>, 写入 PC 空操作 示例: HERE CALL THERE, 1 执行指令前 PC = 执行指令后 PC = TOS = WS = BSRS = STATUSS = 地址 (HERE) 地址 (THERE) 地址 (HERE + 4) W BSR STATUS DS41412F_CN 第 388 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 CLRF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 f 清零 CLRF f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] 000h → f 1→Z Z 0110 101a ffff ffff 清零指定寄存器的内容。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 f 示例: CLRF 执行指令前 FLAG_REG = 执行指令后 FLAG_REG = FLAG_REG, 1 5Ah 00h CLRWDT 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将看门狗定时器清零 CLRWDT 无 000h → WDT, 000h → WDT 后分频器, 1 → TO, 1 → PD TO 和 PD 0000 0000 0000 0100 CLRWDT 指令复位看门狗定时器及其后 分频器。状态位 TO 和 PD 置 1。 1 1 Q2 空操作 Q3 处理数据 Q4 空操作 示例: CLRWDT 执行指令前 WDT 计数器 执行指令后 WDT 计数器 WDT 后分频器 TO PD =? = 00h =0 =1 =1  2011-2013 Microchip Technology Inc. DS41412F_CN 第 389 页 PIC18(L)F2X/4XK22 COMF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 对 f 取反 COMF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) → dest N和Z 0001 11da ffff ffff 将寄存器 f 的内容取反。如果 d 为 0,结 果存储在 W 中。如果 d 为 1,结果存回 寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入目标 寄存器 示例: 执行指令前 REG 执行指令后 REG W COMF = 13h = 13h = ECh REG, 0, 0 CPFSEQ 比较 f 和 W,如果 f = W 则跳过 语法: 操作数: CPFSEQ f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] 操作: (f) – (W), 如果 (f) = (W),则跳过 (无符号比较) 受影响的状态位: 无 机器码: 0110 001a ffff ffff 说明: 指令字数: 通过执行无符号的减法,将数据存储单 元 f 的内容与 W 的内容作比较。 如果f = W,则丢弃已取的指令转而执行一 条 NOP 指令,使该指令成为双周期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有2字指令, 则执行 CPFSEQ 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 如果跳过: Q1 读寄存器 f 处理数据 Q2 Q3 空操作 Q4 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 空操作 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE NEQUAL EQUAL CPFSEQ REG, 0 : : 执行指令前 PC 地址 W REG 执行指令后 如果 REG PC 如果 REG PC = HERE =? =? = W; = 地址 (EQUAL) ≠ W; = 地址 (NEQUAL) DS41412F_CN 第 390 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 CPFSGT 比较 f 和 W,如果 f > W 则跳过 语法: 操作数: CPFSGT f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] 操作: (f) – (W), 如果 (f) > (W),则跳过 (无符号比较) 受影响的状态位: 无 机器码: 0110 010a ffff ffff 说明: 指令字数: 通过执行无符号的减法,将数据存储单 元 f 的内容与 W 的内容作比较。 如果 f > W,则丢弃已取的指令转而执行一 条 NOP 指令,使该指令成为双周期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 指令周期数: Q 周期操作: Q1 译码 如果跳过: Q1 1 (2) 注: 如果跳过,且后面跟有 2 字指令, 则执行 CPFSGT 需要 3 个周期。 Q2 读寄存器 f Q3 处理数据 Q4 空操作 Q2 Q3 Q4 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 空操作 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE CPFSGT REG, 0 NGREATER : GREATER : 执行指令前 PC W 执行指令后 如果 REG PC 如果 REG PC = 地址 (HERE) =? > W; = 地址 (GREATER) ≤ W; = 地址 (NGREATER) CPFSLT 比较 f 和 W,如果 f < W 则跳过 语法: 操作数: CPFSLT f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] 操作: (f) – (W), 如果 (f) < (W),则跳过 (无符号比较) 受影响的状态位: 无 机器码: 0110 000a ffff ffff 说明: 指令字数: 通过执行无符号的减法,将数据存储单 元 f 的内容与 W 的内容作比较。 如果 f < W,则丢弃已取的指令转而执行一 条 NOP 指令,使该指令成为双周期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有2字指令, 则执行 CPFSLT 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 空操作 如果跳过: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE NLESS LESS CPFSLT REG, 1 : : 执行指令前 PC W 执行指令后 如果 REG PC 如果 REG PC = 地址 (HERE) =? < W; = 地址 (LESS) ≥ W; = 地址 (NLESS)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 391 页 PIC18(L)F2X/4XK22 DAW 语法: 操作数: 操作: 对 W 寄存器进行十进制调整 DAW 无 如果 [W<3:0> > 9] 或 [DC = 1],则 (W<3:0>) + 6 → W<3:0> ; 否则 (W<3:0>) → W<3:0> ; 如果 [W<7:4> + DC > 9] 或 [C = 1],则 (W<7:4>) + 6 + DC → W<7:4> ; 否则 (W<7:4>) + DC → W<7:4> 受影响的状态位: C 机器码: 0000 0000 0000 0111 说明: DAW 指令调整 W 寄存器内的 8 位值,即 之前两个压缩 BCD 格式的变量之和,并 产生一个正确的压缩 BCD 格式结果。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 W 处理数据 写W 例 1: DAW 执行指令前 W = A5h C =0 DC =0 执行指令后 W = 05h C =1 DC =0 例 2: 执行指令前 W = CEh C =0 DC =0 执行指令后 W = 34h C =1 DC =0 DECF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 f 递减 1 DECF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) – 1 → dest C、 DC、 N、 OV 和 Z 0000 01da ffff ffff 将寄存器 f 的内容递减 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 CNT Z 执行指令后 CNT Z DECF CNT, 1, 0 = 01h =0 = 00h =1 DS41412F_CN 第 392 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 DECFSZ f 递减 1,为 0 则跳过 语法: DECFSZ f {,d {,a}} 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f) – 1 → dest, 如果结果 = 0 则跳过 受影响的状态位: 无 机器码: 0010 11da ffff ffff 说明: 将寄存器 f 的内容递减 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 如果结果为 0,则丢弃已取的指令转而执 行一条 NOP 指令,使该指令成为双周期 指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 指令字数: 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有2字指令, 则执行 DECFSZ 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 如果跳过: Q1 读寄存器 f 处理数据 写入 目标寄存器 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE DECFSZ GOTO CONTINUE CNT, 1, 1 LOOP 执行指令前 PC = 执行指令后 CNT = 如果 CNT = PC = 如果 CNT ≠ PC = 地址 (HERE) CNT - 1 0; 地址 (CONTINUE) 0; 地址 (HERE + 2) DCFSNZ f 递减 1,非 0 则跳过 语法: DCFSNZ f {,d {,a}} 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f) – 1 → dest, 如果结果 ≠ 0 则跳过 受影响的状态位: 无 机器码: 0100 11da ffff ffff 说明: 将寄存器 f 的内容递减 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 如果结果不为 0,则丢弃已取的指令转而 执行一条 NOP 指令,使该指令成为双周 期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 指令字数: 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有2字指令, 则执行 DCFSNZ 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 如果跳过: Q1 读寄存器 f 处理数据 写入 目标寄存器 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE ZERO NZERO DCFSNZ TEMP, 1, 0 : : 执行指令前 TEMP 执行指令后 TEMP 如果 TEMP PC 如果 TEMP PC =? = TEMP – 1, = 0; = 地址 (ZERO) ≠ 0; = 地址 (NZERO)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 393 页 PIC18(L)F2X/4XK22 GOTO 无条件跳转 语法: 操作数: 操作: GOTO k 0 ≤ k ≤ 1048575 k → PC<20:1> 受影响的状态位: 无 机器码: 第一个字 (k<7:0>) 1110 第二个字 (k<19:8>) 1111 1111 k7kkk k19kkk kkkk kkkk0 kkkk8 说明: GOTO 指令允许无条件跳转到整个 2 MB 存储器范围中的任何位置。将 20 位值 k 装 入 PC<20:1>。GOTO 始终为双周期指令。 指令字数: 2 指令周期数: 2 Q 周期操作: Q1 译码 空操作 Q2 读立即数 k<7:0> 空操作 Q3 空操作 空操作 Q4 读立即数 k<19:8>, 写入 PC 空操作 示例: 执行指令后 PC = GOTO THERE 地址 (THERE) INCF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 f 递增 1 INCF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) + 1 → dest C、 DC、 N、 OV 和 Z 0010 10da ffff ffff 将寄存器 f 的内容递增 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 CNT Z C DC 执行指令后 CNT Z C DC INCF = FFh =0 =? =? = 00h =1 =1 =1 CNT, 1, 0 DS41412F_CN 第 394 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 INCFSZ f 递增 1,为 0 则跳过 语法: INCFSZ f {,d {,a}} 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f) + 1 → dest, 如果结果 = 0 则跳过 受影响的状态位: 无 机器码: 0011 11da ffff ffff 说明: 将寄存器 f 的内容递增 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 如果结果为 0,则丢弃已取的指令转而执 行一条 NOP 指令,使该指令成为双周期 指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 指令字数: 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有 2 字指令, 则执行 INCFSZ 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 写入 目标寄存器 如果跳过: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE NZERO ZERO INCFSZ : : 执行指令前 PC = 执行指令后 CNT = 如果 CNT = PC = 如果 CNT ≠ PC = 地址 (HERE) CNT + 1 0; 地址 (ZERO) 0; 地址 (NZERO) CNT, 1, 0 INFSNZ f 递增 1,非 0 则跳过 语法: 操作数: INFSNZ f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: 受影响的状态位: (f) + 1 → dest, 如果结果 ≠ 0 则跳过 无 机器码: 0100 10da ffff ffff 说明: 指令字数: 将寄存器 f 的内容递增 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 如果结果不为 0,则丢弃已取的指令转而 执行一条 NOP 指令,使该指令成为双周 期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有 2 字指令, 则执行 INFSNZ 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 写入 目标寄存器 如果跳过: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE ZERO NZERO INFSNZ REG, 1, 0 执行指令前 PC = 执行指令后 REG = 如果 REG≠ PC = 如果 REG= PC = 地址 (HERE) REG + 1 0; 地址 (NZERO) 0; 地址 (ZERO)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 395 页 PIC18(L)F2X/4XK22 IORLW 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将立即数与 W 作逻辑或运算 IORLW k 0 ≤ k ≤ 255 (W) .OR. k → W N和Z 0000 1001 kkkk kkkk 将 W 的内容与 8 位立即数 k 进行逻辑或 运算。结果存储在 W 寄存器中。 1 1 Q2 读立即数 k Q3 处理数据 Q4 写入 W 示例: IORLW 35h 执行指令前 W = 9Ah 执行指令后 W = BFh IORWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 W 与 f 作逻辑或运算 IORWF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (W) .OR.(f) → dest N和Z 0001 00da ffff ffff 将 W 的内容与寄存器 f 的内容进行逻辑 或运算。如果 d 为 0,结果存储在 W 中。 如果 d 为 1,结果存回寄存器 f(默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: IORWF RESULT, 0, 1 执行指令前 RESULT = 13h W = 91h 执行指令后 RESULT = 13h W = 93h DS41412F_CN 第 396 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 LFSR 装入 FSR 语法: 操作数: 操作: LFSR f, k 0≤f≤2 0 ≤ k ≤ 4095 k → FSRf 受影响的状态位: 无 机器码: 说明: 指令字数: 指令周期数: 1110 1111 1110 0000 00ff k11kkk k7kkk kkkk 将 12 位立即数 k 装入 f 所指向的文件选 择寄存器。 2 2 Q 周期操作: Q1 译码 译码 Q2 读立即数 k 的 MSB 读立即数 k 的 LSB Q3 处理数据 处理数据 Q4 将立即数 k 的 MSB 写入 FSRfH 将立即数 k 的 LSB 写入 FSRfL 示例: 执行指令后 FSR2H FSR2L LFSR 2, 3ABh = 03h = ABh MOVF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 传送 f MOVF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] f → dest N和Z 0101 00da ffff ffff 根据 d 的状态,将寄存器 f 的内容送入目 标寄存器。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默 认)。 f 可以为 256 字节存储区中的任何 地址单元。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写W 示例: 执行指令前 REG W 执行指令后 REG W MOVF REG, 0, 0 = 22h = FFh = 22h = 22h  2011-2013 Microchip Technology Inc. DS41412F_CN 第 397 页 PIC18(L)F2X/4XK22 MOVFF 将源寄存器的内容送入目标寄存器 语法: 操作数: 操作: 受影响的状态位: MOVFF fs,fd 0 ≤ fs ≤ 4095 0 ≤ fd ≤ 4095 (fs) → fd 无 机器码: 第一个字 (源) 第二个字 (目标) 说明: 指令字数: 1100 1111 ffff ffff ffff ffff ffffs ffffd 将源寄存器 fs 的内容送入目标寄存器 fd。 源寄存器 fs 可以是 4096 字节数据空间 (000h 至 FFFh)中的任何单元,目标寄 存器 fd 也可以是 000h 至 FFFh 中的任何 单元。 源或目标寄存器都可以是 W (这是个有 用的特例)。 MOVFF 指令对于将数据存储单元中的内 容送入外设寄存器(如发送缓冲区或 I/O 端口)的场合非常有用。 MOVFF 指令 不 能使 用 PCL、 TOSU、 TOSH 或 TOSL 作为目标寄存器。 2 指令周期数: 2 (3) Q 周期操作: Q1 译码 译码 Q2 读寄存器 f (源寄存器) 空操作 无假读 Q3 处理数据 空操作 Q4 空操作 写寄存器 f (目标寄存器) 示例: 执行指令前 REG1 REG2 执行指令后 REG1 REG2 MOVFF REG1, REG2 = 33h = 11h = 33h = 33h MOVLB 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将立即数送入 BSR 的低半字节 MOVLW k 0 ≤ k ≤ 255 k → BSR 无 0000 0001 kkkk kkkk 将 8 位立即数 k 装入存储区选择寄存器 (BSR)。不管 k7:k4 的值如何,BSR<7:4> 的值将始终保持为 0。 1 1 Q2 读立即数 k Q3 处理数据 Q4 将立即数 k 写入 BSR 示例: MOVLB 5 执行指令前 BSR 寄存器 = 02h 执行指令后 BSR 寄存器 = 05h DS41412F_CN 第 398 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 MOVLW 将立即数送入 W 语法: 操作数: 操作: MOVLW k 0 ≤ k ≤ 255 k→W 受影响的状态位: 无 机器码: 0000 1110 kkkk kkkk 说明: 指令字数: 指令周期数: 将 8 位立即数 k 装入 W。 1 1 Q 周期操作: Q1 译码 Q2 读立即数 k Q3 处理数据 Q4 写入 W 示例: MOVLW 5Ah 执行指令后 W = 5Ah MOVWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 W 的内容送入 f MOVWF f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] (W) → f 无 0110 111a ffff ffff 将 W 寄存器中的数据送入寄存器 f。f 可 以是256字节存储区中的任何地址单元。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 f 示例: 执行指令前 W REG 执行指令后 W REG MOVWF REG, 0 = 4Fh = FFh = 4Fh = 4Fh  2011-2013 Microchip Technology Inc. DS41412F_CN 第 399 页 PIC18(L)F2X/4XK22 MULLW 将立即数与 W 中的内容相乘 语法: 操作数: 操作: MULLW k 0 ≤ k ≤ 255 (W) x k → PRODH:PRODL 受影响的状态位: 无 机器码: 0000 1101 kkkk kkkk 说明: 指令字数: 指令周期数: 将 W 的内容与 8 位立即数 k 进行无符 号的乘法运算。 16 位的结果存储在 PRODH:PRODL 寄存器对中,其中 PRODH 用于存储高字节。 W 的内容不改变。 所有状态标志位都不受影响。 请注意此操作不可能发生溢出或进位。 结果有可能为全零,但不会被检测到。 1 1 Q 周期操作: Q1 译码 Q2 读立即数 k Q3 处理数据 Q4 写寄存器 PRODH: PRODL 示例: 执行指令前 W PRODH PRODL 执行指令后 W PRODH PRODL MULLW 0C4h = E2h =? =? = E2h = ADh = 08h MULWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 W 与 f 的内容相乘 MULWF f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] (W) x (f) → PRODH:PRODL 无 0000 001a ffff ffff 将 W 的内容与寄存器单元 f 的内容执行 无符号的乘法运算。运算的 16 位结果 保存在 PRODH:PRODL 寄存器对中, 其中 PRODH 用于存储高字节。 W 和 f 的内容都不改变。 所有状态标志位都不受影响。 请注意此操作不可能发生溢出或进位。 结果有可能为全零,但不会被检测到。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变 址寻址模式进行操作。详情请参见 第 25.2.3 节 “ 立即数变址寻址模式中针 对字节和针对位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 PRODH: PRODL 示例: 执行指令前 W REG PRODH PRODL 执行指令后 W REG PRODH PRODL MULWF REG, 1 = C4h = B5h =? =? = C4h = B5h = 8Ah = 94h DS41412F_CN 第 400 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 NEGF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 对 f 取补 NEGF f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] (f)+1→f N、 OV、 C、 DC 和 Z 0110 110a ffff ffff 用二进制补码对存储单元 f 取补,结果存 储在数据存储单元 f 中。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh) ,指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针 对位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 f 示例: 执行指令前 REG 执行指令后 REG NEGF REG, 1 = 0011 1010 [3Ah] = 1100 0110 [C6h] NOP 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 空操作 NOP 无 无操作 无 0000 1111 0000 xxxx 不执行任何操作。 1 1 0000 xxxx 0000 xxxx Q2 空操作 Q3 空操作 Q4 空操作 示例: 无。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 401 页 PIC18(L)F2X/4XK22 POP 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 弹出返回堆栈栈顶的内容 POP 无 (TOS) → 位桶 (即丢弃) 无 0000 0000 0000 0110 从返回堆栈弹出 TOS 值并丢弃。然后, 前一个压入返回堆栈的值成为 TOS 值。 此指令可以让用户正确管理返回堆栈, 从而实现软件堆栈。 1 1 Q2 空操作 Q3 弹出 TOS 值 Q4 空操作 示例: POP GOTO 执行指令前 TOS 堆栈 (下一级) NEW = 0031A2h = 014332h 执行指令后 TOS PC = 014332h = NEW PUSH 将数据压入返回堆栈栈顶 语法: PUSH 操作数: 操作: 无 (PC + 2) → TOS 受影响的状态位: 无 机器码: 0000 0000 0000 0101 说明: 指令字数: 指令周期数: PC + 2 的值被压入返回堆栈的栈顶。原 先的 TOS 值被压入堆栈的下一级。 此指令允许通过修改 TOS 并将其压入返 回堆栈来实现软件堆栈。 1 1 Q 周期操作: Q1 译码 Q2 将 PC + 2 压入返回堆栈 Q3 空操作 Q4 空操作 示例: 执行指令前 TOS PC PUSH = 345Ah = 0124h 执行指令后 PC TOS 堆栈 (下一级) = 0126h = 0126h = 345Ah DS41412F_CN 第 402 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 RCALL 相对调用 语法: 操作数: RCALL n -1024 ≤ n ≤ 1023 操作: (PC) + 2 → TOS, (PC) + 2 + 2n → PC 受影响的状态位: 无 机器码: 1101 1nnn nnnn nnnn 说明: 指令字数: 指令周期数: 从当前地址跳转 (最多 1K)来调用子程 序。首先,将返回地址 (PC + 2)压入返 回堆栈。然后,将 “2n”(以二进制补码表 示)与 PC 相加。由于 PC 将递增以便取 出 下 一 条 指 令,所 以 新 地 址 将 为 PC + 2 + 2n。该指令为一条双周期指令。 1 2 Q 周期操作: Q1 Q2 Q3 Q4 译码 空操作 读立即数 n 将 PC 压入堆栈 空操作 处理数据 空操作 写入 PC 空操作 示例: 执行指令前 PC = 执行指令后 PC = TOS = HERE RCALL Jump 地址 (HERE) 地址 (Jump) 地址 (HERE + 2) RESET 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 复位 RESET 无 将所有受 MCLR 复位影响的寄存器和标 志位复位。 全部 0000 0000 1111 1111 此指令可实现用软件执行 MCLR 复位。 1 1 Q2 开始复位 Q3 空操作 Q4 空操作 示例: RESET 执行指令后 寄存器 = 标志位 * = 复位值 复位值  2011-2013 Microchip Technology Inc. DS41412F_CN 第 403 页 PIC18(L)F2X/4XK22 RETFIE 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 空操作 从中断返回 RETFIE {s} s ∈ [0,1] (TOS) → PC, 1 → GIE/GIEH 或 PEIE/GIEL, 如果 s = 1 (WS) → W, (STATUSS) → STATUS, (BSRS) → BSR, PCLATU 和 PCLATH 保持不变 GIE/GIEH 和 PEIE/GIEL 0000 0000 0001 000s 从 中 断 返 回。执 行 出 栈 操 作,将 栈 顶 (TOS)的内容装入 PC。通过将高或低 优先级全局中断允许位置 1,来允许中 断。如 果 s = 1,则 影 子寄 存 器 WS、 STATUSS 和 BSRS 的内容将被装入对应 的寄存器 W、 STATUS 和 BSR。如果 s = 0,则不更新这些寄存器 (默认)。 1 2 Q2 空操作 空操作 Q3 空操作 空操作 Q4 从堆栈弹出 PC 值 将 GIEH 或 GIEL 置 1 空操作 示例: RETFIE 1 中断后 PC = W = BSR = STATUS = GIE/GIEH, PEIE/GIEL = TOS WS BSRS STATUSS 1 RETLW 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 空操作 将立即数返回到 W RETLW k 0 ≤ k ≤ 255 k → W, (TOS) → PC, PCLATU 和 PCLATH 保持不变 无 0000 1100 kkkk kkkk 将 8 位立即数 k 装入 W。将栈顶内容(返 回地址)装入程序计数器。高字节地址锁 存器 (PCLATH)内容保持不变。 1 2 Q2 读立即数 k 空操作 Q3 处理数据 空操作 Q4 从堆栈弹出 PC 值, 写入 W 空操作 示例: CALL TABLE ; W contains table ; offset value ; W now has ; table value : TABLE ADDWF PCL ; W = offset RETLW k0 ; Begin table RETLW k1 ; : : RETLW kn ; End of table 执行指令前 W = 07h 执行指令后 W = kn 的值 DS41412F_CN 第 404 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 RETURN 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 空操作 从子程序返回 RETURN {s} s ∈ [0,1] (TOS) → PC, 如果 s = 1 (WS) → W, (STATUSS) → STATUS, (BSRS) → BSR, PCLATU 和 PCLATH 保持不变 无 0000 0000 0001 001s 从子程序返回。执行出栈操作,将栈顶 (TOS)的内容装入程序计数器。如果 s = 1,则影子寄存器 WS、 STATUSS 和 BSRS的内容将被装入对应的寄存器W、 STATUS 和 BSR。如果 s = 0,则不更新 这些寄存器 (默认)。 1 2 Q2 空操作 空操作 Q3 处理数据 空操作 Q4 从堆栈弹出 PC 值 空操作 示例: RETURN 执行指令后: PC = TOS RLCF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: f 带进位循环左移 RLCF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) → dest, (f<7>) → C, (C) → dest<0> C、 N 和 Z 0011 01da ffff ffff 将寄存器f的内容连同进位标志位一起循 环左移 1 位。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 C 寄存器 f 指令字数: 指令周期数: Q 周期操作: Q1 译码 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 REG C 执行指令后 REG W C RLCF REG, 0, 0 = 1110 0110 =0 = 1110 0110 = 1100 1100 =1  2011-2013 Microchip Technology Inc. DS41412F_CN 第 405 页 PIC18(L)F2X/4XK22 RLNCF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: f 循环左移 (不带进位) RLNCF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) → dest, (f<7>) → dest<0> N和Z 0100 01da ffff ffff 将寄存器 f 的内容循环左移 1 位。如果 d 为 0,结果存储在 W 中。如果 d 为 1, 结果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第25.2.3节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 寄存器 f 指令字数: 指令周期数: Q 周期操作: Q1 译码 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 REG 执行指令后 REG RLNCF REG, 1, 0 = 1010 1011 = 0101 0111 RRCF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: f 带进位循环右移 RRCF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) → dest, (f<0>) → C, (C) → dest<7> C、 N 和 Z 0011 00da ffff ffff 将寄存器 f 的内容连同进位标志位一起循 环右移 1 位。如果 d 为 0,结果存储在 W 中。如果d为1,结果存回寄存器(f 默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 C 寄存器 f 指令字数: 指令周期数: Q 周期操作: Q1 译码 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 REG C 执行指令后 REG W C RRCF REG, 0, 0 = 1110 0110 =0 = 1110 0110 = 0111 0011 =0 DS41412F_CN 第 406 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 RRNCF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: f 循环右移 (不带进位) RRNCF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) → dest, (f<0>) → dest<7> N和Z 0100 00da ffff ffff 将寄存器 f 的内容循环右移 1 位。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结 果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区 (默 认),忽略 BSR 的值。如果 a 为 1,则 根据 BSR 值选择存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 寄存器 f 指令字数: 指令周期数: Q 周期操作: Q1 译码 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 例 1: 执行指令前 REG 执行指令后 REG RRNCF REG, 1, 0 = 1101 0111 = 1110 1011 例 2: 执行指令前 W REG 执行指令后 W REG RRNCF REG, 0, 0 =? = 1101 0111 = 1110 1011 = 1101 0111 SETF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 f 的内容置为全 1 SETF f {,a} 0 ≤ f ≤ 255 a ∈ [0,1] FFh → f 无 0110 100a ffff ffff 将指定寄存器的内容置为 FFh。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写寄存器 f 示例: 执行指令前 REG 执行指令后 REG SETF REG, 1 = 5Ah = FFh  2011-2013 Microchip Technology Inc. DS41412F_CN 第 407 页 PIC18(L)F2X/4XK22 SLEEP 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 进入休眠模式 SLEEP 无 00h → WDT, 0 → WDT 后分频器, 1 → TO, 0 → PD TO 和 PD 0000 0000 0000 0011 掉电状态位 (PD)清零。超时状态位 (TO)置 1。看门狗定时器及其后分频 器清零。 振荡器停振,处理器进入休眠模式。 1 1 Q2 空操作 Q3 处理数据 Q4 进入 休眠模式 示例: 执行指令前 TO = PD = 执行指令后 TO = PD = SLEEP ? ? 1† 0 † 如果由 WDT 引起唤醒,则该位将被清零。 SUBFWB W 减去 f (带借位) 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 SUBFWB f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (W) – (f) – (C) → dest N、 OV、 C、 DC 和 Z 0101 01da ffff ffff 将 W 的内容减去 f 寄存器的内容和进位 标志位 (借位)(通过二进制补码方式 进行运算)。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址 寻址模式进行操作。详情请参见 第 25.2.3 节 “ 立即数变址寻址模式中针 对字节和针对位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 例 1: 执行指令前 REG W C 执行指令后 REG W C Z N 例 2: 执行指令前 REG W C 执行指令后 REG W C Z N 例 3: 执行指令前 REG W C 执行指令后 REG W C Z N SUBFWB REG, 1, 0 =3 =2 =1 = FF =2 =0 =0 = 1 ;结果为负 SUBFWB REG, 0, 0 =2 =5 =1 =2 =3 =1 =0 = 0 ;结果为正 SUBFWB REG, 1, 0 =1 =2 =0 =0 =2 =1 = 1 ;结果为全零 =0 DS41412F_CN 第 408 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 SUBLW 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明 指令字数: 指令周期数: Q 周期操作: Q1 译码 立即数减去 W 的内容 SUBLW k 0 ≤ k ≤ 255 k – (W) → W N、 OV、 C、 DC 和 Z 0000 1000 kkkk kkkk 用 8 位立即数 k 减去 W。结果存储在 W 寄存器中。 1 1 Q2 读立即数 k Q3 处理数据 Q4 写入 W 例 1: 执行指令前 W C 执行指令后 W C Z N 例 2: 执行指令前 W C 执行指令后 W C Z N 例 3: 执行指令前 W C 执行指令后 W C Z N SUBLW 02h = 01h =? = 01h = 1 ;结果为正 =0 =0 SUBLW 02h = 02h =? = 00h = 1 ;结果为全零 =1 =0 SUBLW 02h = 03h =? = FFh ; (二进制补码) = 0 ;结果为负 =0 =1 SUBWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 f 减去 W SUBWF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) – (W) → dest N、 OV、 C、 DC 和 Z 0101 11da ffff ffff 用寄存器 f 中的内容减去 W 寄存器的内 容 (通过二进制补码方式进行运算)。 如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址 寻址模式进行操作。详情请参见 第 25.2.3 节 “ 立即数变址寻址模式中针 对字节和针对位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 例 1: 执行指令前 REG W C 执行指令后 REG W C Z N 例 2: 执行指令前 REG W C 执行指令后 REG W C Z N 例 3: 执行指令前 REG W C 执行指令后 REG W C Z N SUBWF REG, 1, 0 =3 =2 =? =1 =2 = 1 ;结果为正 =0 =0 SUBWF REG, 0, 0 =2 =2 =? =2 =0 = 1 ;结果为全零 =1 =0 SUBWF REG, 1, 0 =1 =2 =? = FFh ; (二进制补码) =2 = 0 ;结果为负 =0 =1  2011-2013 Microchip Technology Inc. DS41412F_CN 第 409 页 PIC18(L)F2X/4XK22 SUBWFB f 减去 W (带借位) 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 SUBWFB f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f) – (W) – (C) → dest N、 OV、 C、 DC 和 Z 0101 10da ffff ffff 用 f 寄存器的内容减去 W 的内容和进位标 志位 (借位)(通过二进制补码方式进行 运算)。如果 d 为 0,结果存储在 W 中。 如果 d 为 1,结果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 例 1: 执行指令前 REG W C 执行指令后 REG W C Z N 例 2: 执行指令前 REG W C 执行指令后 REG W C Z N 例 3: 执行指令前 REG W C 执行指令后 REG W C Z N SUBWFB REG, 1, 0 = 19h = 0Dh =1 (0001 1001) (0000 1101) = 0Ch = 0Dh =1 =0 =0 SUBWFB (0000 1100) (0000 1101) ;结果为正 REG, 0, 0 = 1Bh = 1Ah =0 (0001 1011) (0001 1010) = 1Bh = 00h =1 =1 =0 SUBWFB (0001 1011) ;结果为全零 REG, 1, 0 = 03h = 0Eh =1 (0000 0011) (0000 1110) = F5h = 0Eh =0 =0 =1 (1111 0101) ; [ 二进制补码 ] (0000 1110) ;结果为负 SWAPF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 f 的高半字节和低半字节交换 SWAPF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (f<3:0>) → dest<7:4>, (f<7:4>) → dest<3:0> 无 0011 10da ffff ffff 寄存器 f 的高半字节和低半字节相互交 换。如果 d 为 0,结果存储在 W 中。如 果 d 为 1,结果存回寄存器 f (默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 REG 执行指令后 REG SWAPF REG, 1, 0 = 53h = 35h DS41412F_CN 第 410 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 TBLRD 表读 语法: TBLRD ( *; *+; *-; +*) 操作数: 无 操作: 如果执行 TBLRD *, ( 程序存储单元 (TBLPTR)) → TABLAT ; TBLPTR 不改变; 如果执行 TBLRD *+, ( 程序存储单元 (TBLPTR)) → TABLAT ; (TBLPTR) + 1 → TBLPTR ; 如果执行 TBLRD *-, ( 程序存储单元 (TBLPTR)) → TABLAT ; (TBLPTR) – 1 → TBLPTR ; 如果执行 TBLRD +*, (TBLPTR) + 1 → TBLPTR ; ( 程序存储单元 (TBLPTR)) → TABLAT ; 受影响的状态位:无 机器码: 0000 0000 0000 10nn nn=0 * =1 *+ =2 *=3 +* 说明: 指令字数: 指令周期数: 此指令用于读取程序存储单元 (P.M.)的内 容。使用表指针 (TBLPTR)对程序存储单 元进行寻址。 TBLPTR (一个 21 位指针)指向程序存储器 中的每个字节。TBLPTR的寻址范围为2 MB。 TBLPTR[0] = 0: 程序存储字的最低有 效字节 TBLPTR[0] = 1: 程序存储字的最高有 效字节 TBLRD指令可用如下方法修改TBLPTR的值: • 不变 • 后递增 • 后递减 • 预递增 1 2 Q 周期操作: Q1 译码 空操作 Q2 空操作 空操作 (读程序存储器) Q3 空操作 空操作 Q4 空操作 空操作 (写 TABLAT) TBLRD 表读 (续) 例 1: TBLRD *+ ; 执行指令前 TABLAT = TBLPTR = 存储单元 (00A356h) = 执行指令后 TABLAT = TBLPTR = 例 2: TBLRD +* ; 执行指令前 TABLAT = TBLPTR = 存储单元 (01A357h) = 存储单元 (01A358h) = 执行指令后 TABLAT = TBLPTR = 55h 00A356h 34h 34h 00A357h AAh 01A357h 12h 34h 34h 01A358h  2011-2013 Microchip Technology Inc. DS41412F_CN 第 411 页 PIC18(L)F2X/4XK22 TBLWT 表写 语法: TBLWT ( *; *+; *-; +*) 操作数: 无 操作: 如果执行 TBLWT*, (TABLAT) → 保持寄存器; TBLPTR 不改变; 如果执行 TBLWT*+, (TABLAT) → 保持寄存器; (TBLPTR) + 1 → TBLPTR ; 如果执行 TBLWT*-, (TABLAT) → 保持寄存器; (TBLPTR) – 1 → TBLPTR ; 如果执行 TBLWT+*, (TBLPTR) + 1 → TBLPTR ; (TABLAT) → 保持寄存器; 受影响的状态位: 无 机器码: 0000 0000 0000 11nn nn=0 * =1 *+ =2 *=3 +* 说明: 指令字数: 指令周期数: 此指令使用 TBLPTR 的低 3 位来确定要将 TABLAT 中的内容写入 8 个保持寄存器中的 哪一个。该保持寄存器用于对程序存储单元 (P.M.)的内容编程。(关于对闪存程序存 储器编程的更多详细信息,请参见第 6.0 节 “ 闪存程序存储器 ”。) TBLPTR (一个 21 位指针)指向程序存储器 中的每个字节。TBLPTR的寻址范围为2 MB。 TBLPTR 的 LSb 选择要访问程序存储单元的 哪个字节。 TBLPTR[0] = 0: 程序存储字的最低 有效字节 TBLPTR[0] = 1: 程序存储字的最高 有效字节 TBLWT 指令可用如下方法修改 TBLPTR 的 值: • 不变 • 后递增 • 后递减 • 预递增 1 2 Q 周期操作: Q1 Q2 Q3 Q4 译码 空操作 空操作 空操作 空操作 空操作 空操作 (读 TABLAT) 空操作 (写保持 寄存器) TBLWT 表写 (续) 例 1: TBLWT *+; 执行指令前 TABLAT = TBLPTR = 保持寄存器 (00A356h)= 执行指令后 (表写操作完成) TABLAT = TBLPTR = 保持寄存器 (00A356h)= 例 2: TBLWT +*; 执行指令前 TABLAT = TBLPTR = 保持寄存器 (01389Ah)= 保持寄存器 (01389Bh)= 执行指令后 (表写操作完成) TABLAT = TBLPTR = 保持寄存器 (01389Ah)= 保持寄存器 (01389Bh)= 55h 00A356h FFh 55h 00A357h 55h 34h 01389Ah FFh FFh 34h 01389Bh FFh 34h DS41412F_CN 第 412 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 TSTFSZ 测试 f,为 0 则跳过 语法: TSTFSZ f {,a} 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作: f = 0 则跳过 受影响的状态位: 无 机器码: 0110 011a ffff ffff 说明: 如果 f = 0,丢弃执行当前指令过程中已 取的下一条指令并执行一条 NOP 指令, 使该指令成为双周期指令。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95(5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 指令字数: 1 指令周期数: 1 (2) 注: 如果跳过,且后面跟有2字指令, 则执行 TSTFSZ 需要 3 个周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 空操作 如果跳过: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过,且后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: HERE NZERO ZERO TSTFSZ CNT, 1 : : 执行指令前 PC 执行指令后 如果 CNT PC 如果 CNT PC = 地址 (HERE) = 00h, = 地址 (ZERO) ≠ 00h, = 地址 (NZERO) XORLW 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将立即数与 W 作逻辑异或运算 XORLW k 0 ≤ k ≤ 255 (W) .XOR. k → W N和Z 0000 1010 kkkk kkkk 将 W 的内容与 8 位立即数 k 进行逻辑 异或运算。结果存储在 W 寄存器中。 1 1 Q2 读立即数 k Q3 处理数据 Q4 写入 W 示例: 执行指令前 W 执行指令后 W XORLW = B5h = 1Ah 0AFh  2011-2013 Microchip Technology Inc. DS41412F_CN 第 413 页 PIC18(L)F2X/4XK22 XORWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 W 与 f 作逻辑异或运算 XORWF f {,d {,a}} 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] (W) .XOR.(f) → dest N和Z 0001 10da ffff ffff 将 W 的内容与寄存器 f 的内容进行逻辑异 或运算。如果 d 为 0,结果存储在 W 中。 如果 d 为 1,结果存回寄存器 f(默认)。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址寻 址模式进行操作。详情请参见第 25.2.3 节 “ 立即数变址寻址模式中针对字节和针对 位的指令 ”。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 REG W 执行指令后 REG W XORWF REG, 1, 0 = AFh = B5h = 1Ah = B5h DS41412F_CN 第 414 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 25.2 扩展指令集 除了PIC18指令集的75条标准指令之外,PIC18(L)F2X/ 4XK22 器件还提供了针对核心 CPU 功能的可选扩展指 令。这些新增的功能包括 8 条额外的指令,增加了间接 和变址寻址操作,并使得许多标准 PIC18 指令可以实现 立即数变址寻址。 扩展指令集的额外功能在默认情况下是禁止的。用户必 须通过将 XINST 配置位置 1,才能使能它们。 扩展指令集中的指令可以全部被归为立即数操作类指 令,它们既可以对文件选择寄存器进行操作,也可以使 用 这 些 寄 存 器 进 行 变 址 寻 址。还 为 其 中 两 条 指 令 ADDFSR 和 SUBFSR 提供了使用 FSR2 的特例形式,即 ADDULNK 和 SUBULNK,这两条指令允许在执行后自动 返回。 这些扩展的指令专门用于优化用高级语言特别是 C 语言 编写的可重入程序代码(也就是递归或使用软件堆栈的 代码)。此外,它们使用户能更高效地用高级语言对数 据结构执行某些操作。这些操作包括: • 在进入和退出子程序时对软件堆栈空间进行动态分 配和释放 • 函数指针调用 • 对软件堆栈指针进行操作 • 对软件堆栈中的变量进行操作 表 25-3 提供了扩展指令集中的指令汇总。第 25.2.2 节 “ 扩展指令集 ” 对这些指令进行了详细说明。表 25-1 提 供了标准和扩展的 PIC18 指令集的操作码字段说明。 注: 扩展指令集和立即数变址寻址模式是专为 优化用 C 语言编写的应用程序而设计的, 用户可能不会在汇编程序中直接使用这些 指令。对于那些需要查看编译器生成代码 的用户,这些命令的语法可作为参考。 25.2.1 扩展指令的语法 大部分扩展指令都使用变址参数,使用一个文件选择寄存 器和某一偏移量来指定源寄存器或目标寄存器。当指令的 参数作为变址寻址的一部分时,会用方括号 (“[ ]”)将它 括起来。这用于表示此参数用作变址或偏移量。如果 MPASM™ 汇编器发现一个变址或偏移量没有被括起来, 它就会给出出错信息。 当使能扩展指令集时,方括号也用于表示针对字节和针 对位的指令中的变址参数。这是对指令语法的额外更 改。更多详细信息,请参见第 25.2.3.1 节 “ 标准 PIC18 命令的扩展指令语法 ”。 注: 以前,在 PIC18 和早期的指令集中使用方括 号来表示可选参数。在此文本和以后的文 本中,可选参数将用大扩号 (“{ }”)表示。 表 25-3: PIC18 指令集的扩展 助记符, 操作数 说明 周期数 ADDFSR f, k 将立即数加到 FSR 1 ADDULNK k 将立即数加到 FSR2 并返回 2 CALLW 使用 WREG 调用子程序 2 MOVSF zs, fd 将 zs (源)移入 第一个字 2 fd (目标) 第二个字 MOVSS zs, zd 将 zs (源)移入 第一个字 2 PUSHL k zd (目标) 第二个字 将立即数保存到FSR2,FSR2递减1 1 SUBFSR f, k FSR 减去立即数 1 SUBULNK k FSR2 减去立即数并返回 2 16 位指令字 MSb LSb 1110 1110 0000 1110 1111 1110 1111 1110 1110 1110 1000 1000 0000 1011 ffff 1011 xxxx 1010 1001 1001 ffkk kkkk 11kk kkkk 0001 0100 0zzz zzzz ffff ffff 1zzz zzzz xzzz zzzz kkkk kkkk ffkk kkkk 11kk kkkk 受影响的 状态位 无 无 无 无 无 无 无 无  2011-2013 Microchip Technology Inc. DS41412F_CN 第 415 页 PIC18(L)F2X/4XK22 25.2.2 扩展指令集 ADDFSR 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将立即数加到 FSR ADDFSR f, k 0 ≤ k ≤ 63 f ∈ [ 0, 1, 2 ] FSR(f) + k → FSR(f) 无 1110 1000 ffkk kkkk 将 6 位立即数 k 加到由 f 指定的 FSR 的内容。 1 1 Q2 读立即数 k Q3 处理数据 Q4 写入 FSR 示例: 执行指令前 FSR2 执行指令后 FSR2 ADDFSR 2, 23h = 03FFh = 0422h ADDULNK 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: 将立即数加到 FSR2 并返回 ADDULNK k 0 ≤ k ≤ 63 FSR2 + k → FSR2, (TOS) → PC 无 1110 1000 11kk kkkk 将 6 位立即数 k 加到 FSR2 的内容。 然后通过将 TOS 的值装入 PC,执行 RETURN。 执行该指令需要两个周期;在第二个 周期执行一条 NOP 指令。 该指令可以被认为是 ADDFSR 指令的 特例,其中 f = 3 (二进制 “11”),它 仅针对 FSR2 进行操作。 1 2 Q 周期操作: Q1 译码 空操作 Q2 读立即数 k 空操作 Q3 处理数据 空操作 Q4 写入 FSR 空操作 示例: 执行指令前 FSR2 PC 执行指令后 FSR2 PC ADDULNK 23h = 03FFh = 0100h = 0422h = (TOS) 注: 所有的 PIC18 指令都可能在其指令助记符之前使用可选的标号参数,用于符号寻址。如果使用了标号,那么 指令格式将变为:{label} 指令参数。 DS41412F_CN 第 416 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 CALLW 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 空操作 使用 WREG 调用子程序 CALLW 无 (PC + 2) → TOS, (W) → PCL, (PCLATH) → PCH, (PCLATU) → PCU 无 0000 0000 0001 0100 首先,返回地址 (PC + 2)被压入返回堆 栈。接下来,将W寄存器的内容写入PCL, PCL 现有的值被丢弃。然后,PCLATH 和 PCLATU 的内容被分别锁存到 PCH 和 PCU。第二个周期执行一条 NOP 指令,并 同时取下一条新指令。 和 CALL 不一样,该指令没有更新 W、 STATUS 或 BSR 寄存器的选项。 1 2 Q2 读 WREG 空操作 Q3 将 PC 压入堆栈 空操作 Q4 空操作 空操作 示例: HERE CALLW 执行指令前 PC = PCLATH = PCLATU = W = 执行指令后 PC = TOS = PCLATH = PCLATU = W = 地址 (HERE) 10h 00h 06h 001006h 地址 (HERE + 2) 10h 00h 06h MOVSF 将变址寻址单元内容送入 f 语法: 操作数: 操作: 受影响的状态位: MOVSF [zs], fd 0 ≤ zs ≤ 127 0 ≤ fd ≤ 4095 ((FSR2) + zs) → fd 无 机器码: 第一个字 (源) 第二个字 (目标) 说明: 指令字数: 指令周期数: 1110 1111 1011 ffff 0zzz ffff zzzzs ffffd 将源寄存器的内容送入目标寄存器 fd。通 过将第一个字中的 7 位立即数偏移量 zs 与FSR2的值相加来确定源寄存器的实际 地址。第二个字中的 12 位立即数 fd 指向 目标寄存器的地址。两个地址均可以是 4096 字节的数据空间 (000h 至 FFFh) 中的任何存储单元。 MOVSF指令不能使用PCL、TOSU、TOSH 或 TOSL 作为目标寄存器。 如果计算得到的源地址指向间接寻址寄 存器,将返回 00h。 2 2 Q 周期操作: Q1 译码 译码 Q2 确定源地址 空操作 无假读 Q3 Q4 确定源地址 读源寄存器 空操作 写寄存器 f (目标寄存器) 示例: MOVSF [05h], REG2 执行指令前 FSR2 85h 单元的内容 REG2 执行指令后 FSR2 85h 单元的内容 REG2 = 80h = 33h = 11h = 80h = 33h = 33h  2011-2013 Microchip Technology Inc. DS41412F_CN 第 417 页 PIC18(L)F2X/4XK22 MOVSS 在变址寻址单元之间传送数据 语法: 操作数: 操作: 受影响的状态位: MOVSS [zs], [zd] 0 ≤ zs ≤ 127 0 ≤ zd ≤ 127 ((FSR2) + zs) → ((FSR2) + zd) 无 机器码: 第一个字 (源) 第二个字 (目标) 说明: 指令字数: 指令周期数: 1110 1111 1011 xxxx 1zzz xzzz zzzzs zzzzd 将源寄存器的内容送入目标寄存器。通 过将 FSR2 中的值分别加上 7 位立即数 偏移量 zs 和 zd 来确定源寄存器和目标寄 存器的地址。两个寄存器都可以是 4096 字节数据存储空间 (000h 至 FFFh)中 的任意存储单元。 MOVSS 指令 不 能使 用 PCL、 TOSU、 TOSH 或 TOSL 作为目标寄存器。 如果计算得到的源地址指向间接寻址寄 存器,将返回 00h。如果计算得到的目标 地址指向间接寻址寄存器,将执行一条 NOP 指令。 2 2 Q 周期操作: Q1 Q2 Q3 Q4 译码 确定源地址 确定源地址 读源寄存器 译码 确定 目标地址 确定 写 目标地址 目标寄存器 示例: MOVSS [05h], [06h] 执行指令前 FSR2 85h 单元的内容 86h 单元的内容 执行指令后 FSR2 85h 单元的内容 86h 单元的内容 = 80h = 33h = 11h = 80h = 33h = 33h PUSHL 将立即数保存到 FSR2, FSR2 递减 1 语法: 操作数: PUSHL k 0 ≤ k ≤ 255 操作: k → (FSR2), FSR2 – 1 → FSR2 受影响的状态位:无 机器码: 1111 1010 kkkk kkkk 说明: 指令字数: 指令周期数: 8 位立即数 k 被写入由 FSR2 指定的数据存储 单元。操作完后 FSR2 递减 1。 此指令允许用户将值压入软件堆栈。 1 1 Q 周期操作: Q1 译码 Q2 读取 k Q3 处理数据 Q4 写入 目标寄存器 示例: PUSHL 08h 执行指令前 FSR2H:FSR2L = 存储单元 (01ECh) = 01ECh 00h 执行指令后 FSR2H:FSR2L 存储单元 (01ECh) = 01EBh = 08h DS41412F_CN 第 418 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 SUBFSR 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 FSR 减去立即数 SUBFSR f, k 0 ≤ k ≤ 63 f ∈ [ 0, 1, 2 ] FSR(f) – k → FSRf 无 1110 1001 ffkk kkkk 用 f 指定的 FSR 的内容减去 6 位立即 数 k。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: 执行指令前 FSR2 执行指令后 FSR2 SUBFSR 2, 23h = 03FFh = 03DCh SUBULNK FSR2 减去立即数并返回 语法: 操作数: 操作: SUBULNK k 0 ≤ k ≤ 63 FSR2 – k → FSR2 (TOS) → PC 受影响的状态位:无 机器码: 1110 1001 11kk kkkk 说明: 指令字数: 指令周期数: Q 周期操作: Q1 用 FSR 的内容减去 6 位立即数 k,然后通过 将 TOS 的值装入 PC,执行 RETURN。 执行该指令需要两个指令周期,第二个指令 周期执行一条 NOP 指令。 该指令可以被认为是 SUBFSR 指令的特例, 其中 f = 3(二进制 “11”);它仅针对 FSR2 进行操作。 1 2 Q2 Q3 Q4 译码 读寄存器 f 处理数据 写入 目标寄存器 空操作 空操作 空操作 空操作 示例: 执行指令前 FSR2 PC 执行指令后 FSR2 PC SUBULNK 23h = 03FFh = 0100h = 03DCh = (TOS)  2011-2013 Microchip Technology Inc. DS41412F_CN 第 419 页 PIC18(L)F2X/4XK22 25.2.3 注: 立即数变址寻址模式中针对字节和针 对位的指令 使能 PIC18 扩展指令集可能导致常规应用 程序运行不正常或完全失败。 一旦使能扩展指令集,除了可以使用扩展指令集中的 8 条 新命令之外,还将使能立即数变址寻址模式(第 5.7.1 节 “ 使用立即数偏移量进行变址寻址 ”) 。这将导致标准 PIC18指令集中大部分指令的地址解析方法有很大变化。 当禁止扩展指令集时,嵌入在操作码中的地址被视为立 即数存储单元:可以是快速操作存储区中的存储单元 (a = 0),或由 BSR 指定的 GPR 存储区中的存储单元 (a = 1)。当使能扩展指令集且 a = 0 时,地址小于或等于 5Fh 的文件寄存器参数被解析为 FSR2 中的指针值的偏移 量,而不是一个立即数地址。对于实际应用来说,这意 味着所有使用快速操作 RAM 位作为参数的指令,即所有 针对字节或针对位的指令,或者几乎半数的核心 PIC18 指令,在使能了扩展指令集时操作都会有所不同。 当 FSR2 的内容为 00h 时,快速操作 RAM 的边界会被 重新映射到它们的原始值。这对于编写向下兼容的代码 很有用处。如果使用此技术,有必要在 C 程序调用汇编 子程序时保存 FSR2 的值并在返回时将它恢复,这样做 的目的是保护堆栈指针。用户还必须记住扩展指令集的 语法要求 (见第 25.2.3.1 节 “ 标准 PIC18 命令的扩展 指令语法 ”)。 虽然立即数变址寻址模式对于动态堆栈和指针操作很有 用处,但是如果不小心对错误的寄存器进行了简单的算 术运算也会非常麻烦。已经习惯使用 PIC18 编程的用户 必须记住,在使能了扩展指令集后,地址小于或等于 5Fh 的寄存器用于立即数变址寻址。 下页提供了在立即数变址寻址模式中,一些针对字节和 位的指令的代表示例,通过这些示例可以看出指令执行 如何受到影响。示例中的操作数条件适用于所有这些类 型的指令。 25.2.3.1 标准 PIC18 命令的扩展指令语法 当使能了扩展指令集时,立即数偏移量 “k” 被用来替换标 准的针对字节和位的命令中的文件寄存器参数 “f”。如前 所述,只有在 “f” 小于或等于 5Fh 时才会发生这种情况。 当使用偏移量时,偏移量必须用方括号 “[ ]” 标出。因为在 扩展指令集中,编译器将方括号中的值解析为变址地址 或偏移量。省略方括号,或在方括号内使用大于 5Fh 的 值会在 MPASM 汇编器中产生错误。 如果变址参数已被正确加上了方括号,那么就不再需要 指定快速操作 RAM 参数;此参数被自动假定为 0。这与 标准操作 (禁止扩展指令集时)刚好相反,在标准操作 中, “a” 基于目标地址被置 1。在变址寻址模式中,声明 快速操作 RAM 位也将在 MPASM 汇编器中产生错误。 目标参数 “d” 的操作和以前一样。 在 MPASM™ 汇编器的最新版本中,必须明确启用对扩 展指令集的语言支持。可以通过命令行选项 /y 或在源 代码中加入 PE 伪指令进行启用。 25.2.4 使能扩展指令集时的注意事项 需要注意的是,并非所有用户都有必要使用扩展指令 集,尤其是那些不使用软件堆栈的用户。 此外,立即数变址寻址模式可能会给写入 PIC18 汇编器 的常规应用程序带来问题。这是因为常规的指令会尝试 寻址快速操作存储区中地址低于 5Fh 的寄存器。当使能 了扩展指令集时,这些地址被解析为相对于 FSR2 的立 即数偏移量,所以应用程序会读或写错误的地址。 将应用程序移植到 PIC18(L)F2X/4XK22 器件时,考虑 代码的类型是非常重要的。在使用扩展指令集时,用 C 语言编写的代码较长的可重入应用程序会运行得很好, 而大量使用快速操作存储区的常规应用程序不会获得任 何益处。 DS41412F_CN 第 420 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 ADDWF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将 W 与变址寻址单元的内容相加 (立即数变址寻址模式) ADDWF [k] {,d} 0 ≤ k ≤ 95 d ∈ [0,1] (W) + ((FSR2) + k) → dest N、 OV、 C、 DC 和 Z 0010 01d0 kkkk kkkk 将 W 的内容与由 FSR2 加上偏移量 k 指 定的寄存器的内容相加。 如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 1 1 Q2 读取 k Q3 处理数据 Q4 写入 目标寄存器 示例: ADDWF [OFST] , 0 执行指令前 W = OFST = FSR2 = 0A2Ch 单元的内容 = 执行指令后 W = 0A2Ch 单元的内容 = 17h 2Ch 0A00h 20h 37h 20h BSF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将变址寻址单元相应位置 1 (立即数变址寻址模式) BSF [k], b 0 ≤ f ≤ 95 0≤b≤7 1 → ((FSR2) + k) 无 1000 bbb0 kkkk kkkk 将由 FSR2 加上偏移量 k 指定的寄存器 中的位 b 置 1。 1 1 Q2 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 示例: BSF [FLAG_OFST], 7 执行指令前 FLAG_OFST = FSR2 = 0A0Ah 单元的内容 = 执行指令后 0A0Ah 单元的内容 = 0Ah 0A00h 55h D5h SETF 语法: 操作数: 操作: 受影响的状态位: 机器码: 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 将变址寻址单元置全 1 (立即数变址寻址模式) SETF [k] 0 ≤ k ≤ 95 FFh → ((FSR2) + k) 无 0110 1000 kkkk kkkk 将由 FSR2 加上偏移量 k 指定的寄存器的 内容置为 FFh。 1 1 Q2 读取 k Q3 处理数据 Q4 写寄存器 示例: SETF [OFST] 执行指令前 OFST = FSR2 = 0A2Ch 单元的内容 = 执行指令后 0A2Ch 单元的内容 = 2Ch 0A00h 00h FFh  2011-2013 Microchip Technology Inc. DS41412F_CN 第 421 页 PIC18(L)F2X/4XK22 25.2.5 使用 MICROCHIP MPLAB® IDE 工具 的注意事项 最新版本的 Microchip 软件工具完全支持 PIC18(L)F2X/ 4XK22 系列器件的扩展指令集。软件工具包括 MPLAB C18 C 语言编译器、MPASM 汇编语言和 MPLAB 集成开 发环境(Integrated Development Environment,IDE)。 在选择了目标器件进行软件开发后, MPLAB IDE 将自 动按默认模式设置该器件的配置位。XINST 配置位的默 认设置是 0,禁用扩展指令集和立即数变址寻址模式。 在编程时必须将 XINST 位置 1 才能确保使用扩展指令集 开发的应用程序能够正确执行。 要使用扩展指令集开发软件,用户必须设置他们的语言 工具以实现对扩展指令和变址寻址模式的支持。根据所 使用的环境,可以通过以下几种方法: • 开发环境中的菜单选项或对话框,允许用户配置项 目的语言工具及其设置 • 命令行选项 • 源代码中的伪指令 这些选项在不同的编译器、汇编器和开发环境中将有所 不同。建议用户在其开发系统所附带的文档中查询相应 的文档。 DS41412F_CN 第 422 页  2011-2013 Microchip Technology Inc. 26.0 开发支持 一系列软件及硬件开发工具对 PIC® 单片机和 dsPIC® 数 字信号控制器提供支持: • 集成开发环境 - MPLAB® IDE 软件 • 编译器 / 汇编器 / 链接器 - 适用于各种器件系列的 MPLAB C 编译器 - 适用于各种器件系列的 HI-TECH C® 编译器 - MPASMTM 汇编器 - MPLINKTM 目标链接器 / MPLIBTM 目标库管理器 - 适用于各种器件系列的 MPLAB 汇编器 / 链接 器 / 库管理器 • 模拟器 - MPLAB SIM 软件模拟器 • 仿真器 - MPLAB REAL ICE™ 在线仿真器 • 在线调试器 - MPLAB ICD 3 - PICkit™ 3 Debug Express • 器件编程器 - PICkit™ 2 编程器 - MPLAB PM3 器件编程器 • 低成本演示 / 开发板、评估工具包及入门工具包 PIC18(L)F2X/4XK22 26.1 MPLAB 集成开发环境软件 MPLAB IDE 软件为 8/16/32 位单片机市场提供了前所未 有的易于使用的软件开发平台。 MPLAB IDE 是基于 Windows® 操作系统的应用软件,包括: • 一个包含所有调试工具的图形界面 - 模拟器 - 编程器 (单独销售) - 在线仿真器 (单独销售) - 在线调试器 (单独销售) • 具有彩色上下文代码显示的全功能编辑器 • 多项目管理器 • 内容可直接编辑的可定制式数据窗口 • 高级源代码调试 • 鼠标停留在变量上进行查看的功能 • 将变量从源代码窗口拖放到 Watch (观察)窗口 • 丰富的在线帮助 • 集成了可选的第三方工具,如 IAR C 编译器 MPLAB IDE 可以让您: • 编辑源文件 (C 语言或汇编语言) • 点击一次即可完成编译或汇编,并将代码下载到仿 真器和模拟器工具中 (自动更新所有项目信息) • 可使用如下各项进行调试: - 源文件 (C 语言或汇编语言) - 混合 C 语言和汇编语言 - 机器码 MPLAB IDE 在单个开发范例中支持使用多种调试工 具,包括从成本效益高的模拟器到低成本的在线调试 器,再到全功能的仿真器。这样缩短了用户升级到更加 灵活而功能强大的工具时的学习时间。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 423 页 PIC18(L)F2X/4XK22 26.2 适用于各种器件系列的 MPLAB C 编译器 MPLAB C 编译器代码开发系统是完全的 ANSI C 编译 器,适用于 Microchip 的 PIC18、PIC24 和 PIC32 系列 单片机及 dsPIC30 和 dsPIC33 系列数字信号控制器。 这些编译器提供强大的集成功能和出众的代码优化能 力,且使用方便。 为便于源代码调试,编译器提供针对 MPLAB IDE 调试 器优化的符号信息。 26.3 适用于各种器件系列的 HI-TECH C 编译器 HI-TECH C 编译器代码开发系统是完全的 ANSI C 编译 器,适用于 Microchip 的 PIC 系列单片机及 dsPIC 系列 数字信号控制器。这些编译器提供强大的集成功能和全 知代码生成能力,且使用方便。 为便于源代码调试,编译器提供针对 MPLAB IDE 调试 器优化的符号信息。 编译器包括一个宏汇编器、链接器、预处理程序和单步 驱动程序,可以在多种平台上运行。 26.4 MPASM 汇编器 MPASM 汇编器是全功能通用宏汇编器,适用于 PIC10/ 12/16/18 MCU。 MPASM 汇编器可生成用于 MPLINK 目标链接器的可重 定位目标文件、Intel® 标准 HEX 文件、详细描述存储器 使用状况和符号参考的 MAP 文件、包含源代码行及生 成机器码的绝对 LST 文件以及用于调试的 COFF 文件。 MPASM 汇编器具有如下特性: • 集成在 MPLAB IDE 项目中 • 用户定义的宏可简化汇编代码 • 对多用途源文件进行条件汇编 • 允许完全控制汇编过程的指令 26.5 MPLINK 目标链接器 / MPLIB 目标库管理器 MPLINK 目标链接器包含了由 MPASM 汇编器、MPLAB C18 C 编译器产生的可重定位目标。通过使用链接器脚 本中的指令,它还可链接预编译库中的可重定位目标。 MPLIB目标库管理器管理预编译代码库文件的创建和修 改。当从源文件调用库中的一段子程序时,只有包含此 子程序的模块被链接到应用程序。这样可使大型库在许 多不同应用中被高效地利用。 目标链接器 / 库管理器具有如下特性: • 高效地连接单个的库而不是许多小文件 • 通过将相关的模块组合在一起来增强代码的可维护性 • 只要列出、替换、删除和抽取模块,便可灵活地创 建库 26.6 适用于各种器件系列的 MPLAB 汇编 器、链接器和库管理器 MPLAB 汇编器为 PIC24、PIC32 和 dsPIC 器件从符号 汇编语言生成可重定位机器码。 MPLAB C 编译器使用 该汇编器生成目标文件。汇编器产生可重定位目标文件 之后,可将这些目标文件存档,或与其他可重定位目标 文件和存档链接以生成可执行文件。该汇编器有如下显 著特性: • 支持整个器件指令集 • 支持定点数据和浮点数据 • 命令行界面 • 丰富的指令集 • 灵活的宏语言 • MPLAB IDE 兼容性 DS41412F_CN 第 424 页  2011-2013 Microchip Technology Inc. 26.7 MPLAB SIM 软件模拟器 MPLAB SIM 软件模拟器通过在指令级对 PIC MCU 和 dsPIC® DSC 进行模拟,可在 PC 主机环境下进行代码 开发。对于任何给定的指令,都可以对数据区进行检查 或修改,并通过一个全面的激励控制器来施加激励。可 以将各寄存器记录在文件中,以便进行进一步的运行时 分析。跟踪缓冲区和逻辑分析器的显示使软件模拟器还 能记录和跟踪程序的执行、 I/O 的动作、大部分的外设 及内部寄存器。 MPLAB SIM 软件模拟器完全支持使用 MPLAB C 编译 器以及 MPASM 和 MPLAB 汇编器的符号调试。该软件 模拟器可用于在硬件实验室环境外灵活地开发和调试代 码,是一款完美且经济的软件开发工具。 26.8 MPLAB REAL ICE 在线仿真器系统 MPLAB REAL ICE 在线仿真器系统是 Microchip 针对其 闪存 DSC 和 MCU 器件而推出的新一代高速仿真器。结 合 MPLAB 集成开发环境 (IDE)所具有的易于使用且 功能强大的图形用户界面,该仿真器可对 PIC® 闪存 MCU 和 dsPIC® 闪存 DSC 进行调试和编程。 IDE 是随 每个工具包一起提供的。 该仿真器通过高速 USB 2.0 接口与设计工程师的 PC 相 连,并利用与在线调试器系统兼容的连接器 (RJ11)或 新型抗噪声、高 速低压差分信号 (LVDS)互连电 缆 (CAT5)与目标板相连。 可通过 MPLAB IDE 下载将来版本的固件,对该仿真器 进行现场升级。在即将推出的 MPLAB IDE 版本中,会 支持许多新器件,还将增加一些新特性。在同类仿真器 中,MPLAB REAL ICE 的优势十分明显:低成本、全速 仿真、运行时变量查看、跟踪分析、复杂断点、耐用的 探针接口及较长 (长达 3 米)的互连电缆。 PIC18(L)F2X/4XK22 26.9 MPLAB ICD 3 在线调试器系统 MPLAB ICD 3 在线调试器系统是 Microchip 成本效益最 高的高速硬件调试器 / 编程器,适用于 Microchip 闪存 数字信号控制器 (DSC)和单片机 (MCU)器件。结 合 MPLAB 集成开发环境 (IDE)所具有的功能强大但 易于使用的图形用户界面,该调试器可对 PIC® 闪存单 片机和 dsPIC® DSC 进行调试和编程。 MPLAB ICD 3 在线调试器通过高速 USB 2.0 接口与设 计工程师的PC相连,并利用与MPLAB ICD 2或MPLAB REAL ICE 系统兼容的连接器(RJ-11)与目标板相连。 MPLAB ICD 3 支持所有 MPLAB ICD 2 转接器。 26.10 PICkit 3 在线调试器 / 编程器及 PICkit 3 Debug Express 结合 MPLAB 集成开发环境 (IDE)所具有的功能强大 的图形用户界面,MPLAB PICkit 3 可对 PIC® 闪存单片 机和 dsPIC® 数字信号控制器进行调试和编程,且价位 较低。MPLAB PICkit 3 通过全速 USB 接口与设计工程 师的 PC 相连,并利用 Microchip 调试(RJ-11)连接器 (与 MPLAB ICD 3 和 MPLAB REAL ICE 兼容)与目标 板相连。连接器使用两个器件 I/O 引脚和复位线来实现 在线调试和在线串行编程。 PICkit 3 Debug Express 包括 PICkit 3、演示板和单片 机、连接电缆和光盘 (内含用户指南、课程、教程、编 译器和 MPLAB IDE 软件)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 425 页 PIC18(L)F2X/4XK22 26.11 PICkit 2 开发编程器 / 调试器及 PICkit 2 Debug Express PICkit™ 2 开发编程器 / 调试器是一款低成本开发工具, 具有易于使用的界面,适用于对 Microchip 的闪存系列 单片机进行编程和调试。这一全功能的 Windows® 编程 界面支持低档(PIC10F、PIC12F5xx 和 PIC16F5xx)、 中档 (PIC12F6xx 和 PIC16F)、 PIC18F、 PIC24、 dsPIC30、dsPIC33 和 PIC32 系列的 8 位、16 位及 32 位单片机,以及许多 Microchip 串行 EEPROM 产品。结 合 Microchip 功能强大的 MPLAB 集成开发环境(IDE), PICkit 2 可对大多数 PIC® 单片机进行在线调试。即使 PIC 单片机已嵌入应用,在线调试功能仍可以运行、暂 停和单步执行程序。在断点处暂停时,可以检查和修改 文件寄存器。 PICkit 2 Debug Express 包括 PICkit 2、演示板和单片 机、连接电缆和光盘 (内含用户指南、课程、教程、编 译器和 MPLAB IDE 软件)。 26.12 MPLAB PM3 器件编程器 MPLAB PM3 器件编程器是一款符合 CE 规范的通用器 件编程器,在 VDDMIN 和 VDDMAX 点对其可编程电压进 行校验以确保可靠性最高。它有一个用来显示菜单和错 误消息的大 LCD 显示器(128 x 64),以及一个支持各 种封装类型的可拆卸模块化插槽装置。编程器标准配置 中带有一根 ICSP™ 电缆。在单机模式下,MPLAB PM3 器件编程器不必与 PC 相连即可对 PIC 器件进行读取、 校验和编程。在该模式下它还可设置代码保护。MPLAB PM3 通过 RS-232 或 USB 电缆连接到 PC 主机上。 MPLAB PM3 具备高速通信能力以及优化算法,可对具 有大存储器的器件进行快速编程。它还包含了MMC卡, 用于文件存储及数据应用。 26.13 演示 / 开发板、评估工具包及入门工 具包 有许多演示、开发和评估板可用于各种 PIC MCU 和 dsPIC DSC,实现对全功能系统的快速应用开发。大多 数的演示、开发和评估板都有实验布线区,供用户添加 定制电路;还有应用固件和源代码,用于检查和修改。 这些板支持多种功能部件,包括 LED、温度传感器、开 关、扬声器、 RS-232 接口、 LCD 显示器、电位计和附 加 EEPROM 存储器。 演示和开发板可用于教学环境,在实验布线区设计定制 电路,从而掌握各种单片机应用。 除了 PICDEM™ 和 dsPICDEM™ 演示 / 开发板系列电路 外,Microchip 还有一系列评估工具包和演示软件,适用 于模拟滤波器设计、KEELOQ® 数据安全产品 IC、CAN、 IrDA®、 PowerSmart 电池管理、 SEEVAL® 评估系统、 Σ−Δ ADC、流速传感器,等等。 同时还提供入门工具包,其中包含体验指定器件功能所 需的所有软硬件。通常提供单个应用以及调试功能,都 包含在一块电路板上。 有 关 演 示、开 发 和 评 估 工 具 包 的 完 整 列 表,请 访 问 Microchip 网站 (www.microchip.com)。 DS41412F_CN 第 426 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.0 电气特性 绝对最大值 (†) 环境温度................................................................................................................................................. -40°C 至 +125°C 储存温度................................................................................................................................................. -65°C 至 +150°C 任一引脚 (VDD 和 MCLR 除外)相对于 VSS 的电压.................................................................. -0.3V 至 (VDD + 0.3V) VDD 引脚相对于 VSS 的电压 PIC18LF2X/4XK22 ....................................................................................................-0.3V 至 +4.5V PIC18F2X/4XK22 ......................................................................................................-0.3V 至 +6.5V MCLR 引脚相对于 VSS 的电压 (注 2)....................................................................................................... 0V 至 +11.0V 总功耗 (注 1)..........................................................................................................................................................1.0W 流出 VSS 引脚的最大电流 (-40°C 至 +85°C)......................................................................................................300 mA 流出 VSS 引脚的最大电流 (+85°C 至 +125°C)...................................................................................................125 mA 流入 VDD 引脚的最大电流 (-40°C 至 +85°C).....................................................................................................200 mA 流入 VDD 引脚的最大电流 (+85°C 至 +125°C)....................................................................................................85 mA 输入钳位电流 IIK (VI < 0 或 VI > VDD)............................................................................................................................. ±20 mA 输出钳位电流 IOK (VO < 0 或 VO > VDD)........................................................................................................................ ±20 mA 任一 I/O 引脚的最大输出灌电流 ..............................................................................................................................25 mA 任一 I/O 引脚的最大输出拉电流 ..............................................................................................................................25 mA 所有端口的最大灌电流 (-40°C 至 +85°C)..........................................................................................................200 mA 所有端口的最大灌电流 (+85°C 至 +125°C)....................................................................................................... 110 mA 所有端口的最大拉电流 (-40°C 至 +85°C)..........................................................................................................185 mA 所有端口的最大拉电流 (+85°C 至 +125°C).........................................................................................................70 mA 注 1: 功耗按如下公式计算: Pdis = VDD x {IDD –  IOH} +  {(VDD – VOH) x IOH} +  (VOL x IOL) 2: 如果 MCLR/VPP/RE3 引脚上的尖峰电压低于 VSS,感应电流大于 80 mA,可能会引起器件锁死。因此当 MCLR/VPP/RE3 引脚驱动为低电平时,应该串联一个 50-100Ω 的电阻,而不是直接将该引脚连接到 VSS。 † 注:如果运行条件超过了上述 “ 绝对最大值 ”,即可能对器件造成永久性损坏。这仅是极限参数,我们不建议器件工 作在极限值甚至超过上述极限值。器件长时间工作在极限条件下可能会影响其可靠性。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 427 页 PIC18(L)F2X/4XK22 图 27-1: PIC18LF2X/4XK22 系列电压-频率关系图 (工业级温度) 5.5V 5.0V 4.0V 3.6V 电压 3.0V 2.7V 2.3V 1.8V 10 16 20 30 40 48 频率(MHz) 注 1: 最高频率 20 MHz, 1.8V 至 2.7V, -40°C 至 +85°C 2: 最高频率 64 MHz, 2.7V 至 3.6V, -40°C 至 +85°C 60 64 图 27-2: 5.5V PIC18LF2X/4XK22 系列电压-频率关系图 (扩展级温度) 5.0V 4.0V 3.6V 电压 3.0V 2.7V 2.3V 1.8V 10 16 20 30 40 48 频率(MHz) 注 1: 最高频率 16 MHz, 1.8V 至 2.7V, +85°C 至 +125°C 2: 最高频率 48 MHz, 2.7V 至 3.6V, +85°C 至 +125°C 60 64 DS41412F_CN 第 428 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 27-3: 5.5V 5.0V PIC18F2X/4XK22 系列电压-频率关系图 (工业级温度) 4.0V 3.6V 电压 3.0V 2.7V 2.3V 1.8V 10 16 20 30 40 48 频率(MHz) 注 1: 最大频率 20 MHz, 2.3V 至 2.7V, -40°C 至 +85°C 2: 最大频率 64 MHz, 2.7V 至 5.5V, -40°C 至 +85°C 60 64 图 27-4: PIC18F2X/4XK22 系列电压-频率关系图 (扩展级温度) 5.5V 5.0V 4.0V 3.6V 电压 3.0V 2.7V 2.3V 1.8V 10 16 20 30 40 48 频率(MHz) 注 1: 最大频率 16 MHz, 2.3V 至 2.7V, +85°C 至 +125°C 2: 最大频率 48 MHz, 2.7V 至 5.5V, +85°C 至 +125°C 60 64  2011-2013 Microchip Technology Inc. DS41412F_CN 第 429 页 PIC18(L)F2X/4XK22 27.1 直流特性:供电电压, PIC18(L)F2X/4XK22 PIC18(L)F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数 编号 符号 特性 最小值 典型值 最大值 单位 条件 D001 VDD 供电电压 PIC18LF2X/4XK22 1.8 — 3.6 V PIC18F2X/4XK22 2.3 — 5.5 V D002 VDR RAM 数据保持电压 (1) 1.5 — — V D003 VPOR 确保内部上电复位信号的 VDD 启动电压 — — 0.7 V 详情请参见 “ 上电复位 ” 章节 D004 SVDD 确保内部上电复位信号的 VDD 上升速率 0.05 — — V/ms 详情请参见 “ 上电复位 ” 章节 D005 VBOR 欠压复位电压 BORV<1:0> = 11(2) 1.75 1.9 2.05 V BORV<1:0> = 10 2.05 2.2 2.35 V BORV<1:0> = 01 BORV<1:0> = 00(3) 2.35 2.5 2.65 V 2.65 2.85 3.05 V 注 1: 这是在不丢失 RAM 数据的前提下,休眠模式或器件复位期间 VDD 所能降到的最小电压值。 2: 在 BOR 使能的 PIC18LF2X/4XK22 器件上,在 BOR 发生之前支持继续工作。尽管 VDD 可能低于最小额定 供电电压,这仍是有效的。 3: 当 BOR 使能时,在 BOR 发生之前支持全速工作 (FOSC = 64 MHz 或 48 MHz)。尽管 VDD 可能低于该频 率所需的最小电压,这仍是有效的。 DS41412F_CN 第 430 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.2 直流特性:掉电电流, PIC18(L)F2X/4XK22 PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数 编号 器件特性 典型值 典型值 最大值 最大值 +25°C +60°C +85°C +125°C 单位 VDD 条件 注 掉电基本电流 (IPD) (1) D006 休眠模式 0.01 0.04 2 10 μA 1.8V 禁止 WDT、 BOR、 FVR 0.01 0.06 2 10 μA 3.0V 和 SOSC,所有外设不活 动 12 13 25 35 μA 2.3V 13 14 30 40 μA 3.0V 13 14 35 50 μA 5.0V 掉电模块差分电流 (∆IPD) D007 看门狗定时器 0.3 0.3 2.5 2.5 μA 1.8V 0.5 0.5 2.5 2.5 μA 3.0V 0.35 0.35 5.0 5.0 μA 2.3V 0.5 0.5 5.0 5.0 μA 3.0V D008 欠压复位 (2) 0.5 0.5 5.0 5.0 μA 5.0V 8 8.5 15 16 μA 2.0V 9 9.5 15 16 μA 3.0V 3.4 3.4 15 16 μA 2.3V 3.8 3.8 15 16 μA 3.0V D010 高 / 低电压检测 (2) 5.2 5.2 15 16 μA 5.0V 6.5 6.7 15 15 μA 2.0V 7 7.5 15 15 μA 3.0V 2.1 2.1 15 15 μA 2.3V 2.4 2.4 15 15 μA 3.0V 3.2 3.2 15 15 μA 5.0V D011 辅助振荡器 0.5 1 3 10 μA 1.8V 0.6 1.1 4 0.5 1 3 10 μA 3.0V SOSC 以 32 kHz 运行 10 μA 2.3V 0.6 1.1 4 10 μA 3.0V 0.6 1.1 5 10 μA 5.0V 注 1: 在休眠模式下,掉电电流与振荡器类型无关。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状 态并且连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器和 BOR 等) 时测得的。 2: 在 PIC18LF2X/4XK22 上, BOR、 HLVD 和 FVR 使能内部带隙参考源。当上述模块中有多个使能时,电 流消耗将小于规范值的和。在 PIC18F2X/4XK22 上,始终使能内部带隙参考源,且其电流消耗包含在掉电 基本电流 (IPD)中。 3: A/D 转换器增加电流仅适用于运行模式。在休眠或空闲模式下,只要转换 (如果有)完成, ADC 和 FRC 就会关闭。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 431 页 PIC18(L)F2X/4XK22 27.2 直流特性:掉电电流, PIC18(L)F2X/4XK22 (续) PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数 编号 器件特性 典型值 典型值 最大值 最大值 +25°C +60°C +85°C +125°C 单位 VDD 条件 注 D015 比较器 7 7 18 18 μA 1.8V 7 7 18 18 μA 3.0V LP 模式 7 7 18 18 μA 2.3V 7 7 18 18 μA 3.0V 8 8 20 20 μA 5.0V D016 比较器 38 38 95 95 μA 1.8V 40 40 105 105 μA 3.0V HP 模式 39 39 95 95 μA 2.3V 40 40 105 105 μA 3.0V 40 40 105 105 μA 5.0V D017 DAC 14 14 25 25 μA 2.0V 20 20 35 35 μA 3.0V 15 15 30 30 μA 2.3V 20 20 35 35 μA 3.0V D018 FVR(2) 32 32 60 60 μA 5.0V 15 16 25 25 μA 1.8V 15 16 25 25 μA 3.0V 28 28 45 45 μA 2.3V 31 31 55 55 μA 3.0V D013 A/D 转换器 (3) 66 66 100 100 185 185 370 370 μA 5.0V μA 1.8V 210 210 400 400 200 200 380 380 210 210 400 400 μA 3.0V A/D 启动,但不在进行转 μA 2.3V 换 μA 3.0V 250 250 450 450 μA 5.0V 注 1: 在休眠模式下,掉电电流与振荡器类型无关。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状 态并且连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器和 BOR 等) 时测得的。 2: 在 PIC18LF2X/4XK22 上, BOR、 HLVD 和 FVR 使能内部带隙参考源。当上述模块中有多个使能时,电 流消耗将小于规范值的和。在 PIC18F2X/4XK22 上,始终使能内部带隙参考源,且其电流消耗包含在掉电 基本电流 (IPD)中。 3: A/D 转换器增加电流仅适用于运行模式。在休眠或空闲模式下,只要转换 (如果有)完成, ADC 和 FRC 就会关闭。 DS41412F_CN 第 432 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.3 直流特性: RC 运行供电电流, PIC18(L)F2X/4XK22 PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 器件特性 D020 供电电流 (IDD) (1),(2) 典型值 最大值 单位 3.6 23 μA 3.9 25 μA 3.9 — μA -40°C +25°C +60°C 条件 VDD = 1.8V FOSC = 31 kHz (RC_RUN 模式, LFINTOSC 源) 3.9 28 μA +85°C 4.0 30 μA 125°C D021 8.1 26 μA -40°C VDD = 3.0V 8.4 30 μA +25°C 8.6 — μA +60°C 8.7 35 μA +85°C 10.7 40 μA +125°C D022 16 35 μA 17 35 μA 18 35 μA -40°C +25°C +85°C VDD = 2.3V FOSC = 31 kHz (RC_RUN 模式, LFINTOSC 源) D023 19 50 μA 18 50 μA +125°C -40°C VDD = 3.0V 20 50 μA +25°C 21 50 μA +85°C 22 60 μA +125°C D024 19 55 μA -40°C VDD = 5.0V 21 55 μA +25°C 22 55 μA +85°C 23 70 μA +125°C D025 D026 0.14 0.25 mA -40°C至+125°C 0.17 0.30 mA -40°C至+125°C VDD = 1.8V VDD = 3.0V FOSC = 500 kHz (RC_RUN 模式, MFINTOSC 源) D027 D028 D029 0.18 0.25 mA -40°C至+125°C 0.20 0.30 mA -40°C至+125°C 0.25 0.35 mA -40°C至+125°C VDD = 2.3V VDD = 3.0V VDD = 5.0V FOSC = 500 kHz (RC_RUN 模式, MFINTOSC 源) 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 Vss ; MCLR = VDD ; OSC1 = 外部方波,轨到轨满幅 (仅限 PRI_RUN 和 PRI_IDLE)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 433 页 PIC18(L)F2X/4XK22 27.3 直流特性: RC 运行供电电流, PIC18(L)F2X/4XK22 (续) PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 D030 D031 D032 D033 D034 D035 D036 D037 D038 D039 D041 D043 D044 器件特性 典型值 最大值 单位 0.35 0.50 mA -40°C至+125°C 0.45 0.65 mA -40°C至+125°C 0.40 0.60 mA -40°C至+125°C 0.50 0.65 mA -40°C至+125°C 0.55 0.75 mA -40°C至+125°C 1.3 2.0 mA -40°C至+125°C 2.2 3.0 mA -40°C至+125°C 1.7 2.0 mA -40°C至+125°C 2.2 3.0 mA -40°C至+125°C 2.5 3.5 mA -40°C至+125°C 6.2 8.5 mA -40°C至+125°C 6.2 8.5 mA -40°C至+125°C 6.8 9.5 mA -40°C至+125°C 条件 VDD = 1.8V VDD = 3.0V VDD = 2.3V VDD = 3.0V VDD = 5.0V VDD = 1.8V VDD = 3.0V VDD = 2.3V VDD = 3.0V VDD = 5.0V VDD = 3.0V VDD = 3.0V VDD = 5.0V FOSC = 1 MHz (RC_RUN 模式, HFINTOSC 源) FOSC = 1 MHz (RC_RUN 模式, HFINTOSC 源) FOSC = 16 MHz (RC_RUN 模式, HFINTOSC 源) FOSC = 16 MHz (RC_RUN 模式, HFINTOSC 源) FOSC = 64 MHz (RC_RUN 模式, HFINTOSC + PLL 源) FOSC = 64 MHz (RC_RUN 模式, HFINTOSC + PLL 源) 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 Vss ; MCLR = VDD ; OSC1 = 外部方波,轨到轨满幅 (仅限 PRI_RUN 和 PRI_IDLE)。 DS41412F_CN 第 434 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.4 直流特性: RC 空闲供电电流, PIC18(L)F2X/4XK22 PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 器件特性 D045 供电电流 (IDD) (1),(2) 典型值 最大值 单位 0.5 18 μA 0.6 18 μA 0.7 — μA -40°C +25°C +60°C 条件 VDD = 1.8V FOSC = 31 kHz (RC_IDLE 模式, LFINTOSC 源) 0.75 20 μA +85°C 2.3 22 μA +125°C D046 1.1 20 μA -40°C VDD = 3.0V 1.2 20 μA +25°C 1.3 — μA +60°C 1.4 22 μA +85°C D047 3.2 25 μA 17 30 μA 13 30 μA 14 30 μA +125°C -40°C +25°C +85°C VDD = 2.3V FOSC = 31 kHz (RC_IDLE 模式, LFINTOSC 源) 15 45 μA +125°C D048 19 35 μA -40°C VDD = 3.0V 15 35 μA +25°C 16 35 μA +85°C 17 50 μA +125°C D049 21 40 μA -40°C VDD = 5.0V 15 40 μA +25°C 16 40 μA +85°C D050 D051 D052 D053 D054 18 60 μA +125°C 0.11 0.20 mA -40°C 至 +125°C VDD = 1.8V FOSC = 500 kHz 0.12 0.25 mA -40°C 至 +125°C VDD = 3.0V (RC_IDLE 模式, MFINTOSC 源) 0.14 0.21 mA -40°C 至 +125°C VDD = 2.3V FOSC = 500 kHz 0.15 0.25 mA -40°C 至 +125°C VDD = 3.0V (RC_IDLE 模式, MFINTOSC 源) 0.20 0.31 mA -40°C 至 +125°C VDD = 5.0V 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码执 行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 Vss ; MCLR = VDD ; OSC1 = 外部方波,轨到轨满幅 (仅限 PRI_RUN 和 PRI_IDLE)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 435 页 PIC18(L)F2X/4XK22 27.4 直流特性: RC 空闲供电电流, PIC18(L)F2X/4XK22 (续) PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 D055 D056 D057 D058 D059 D060 D061 D062 D063 D064 D066 D068 D069 器件特性 典型值 最大值 0.25 0.40 0.35 0.50 单位 mA mA -40°C 至 +125°C -40°C 至 +125°C 0.30 0.45 mA -40°C 至 +125°C 0.40 0.50 mA -40°C 至 +125°C 0.45 0.60 mA -40°C 至 +125°C 0.50 0.7 mA -40°C 至 +125°C 0.80 1.1 mA -40°C 至 +125°C 0.65 1.0 mA -40°C 至 +125°C 0.80 1.1 mA -40°C 至 +125°C 0.95 1.2 mA -40°C 至 +125°C 2.5 3.5 mA -40°C 至 +125°C 2.5 3.5 mA -40°C 至 +125°C 3.0 4.5 mA -40°C 至 +125°C 条件 VDD = 1.8V VDD = 3.0V VDD = 2.3V VDD = 3.0V VDD = 5.0V VDD = 1.8V VDD = 3.0V VDD = 2.3V VDD = 3.0V VDD = 5.0V VDD = 3.0V VDD = 3.0V VDD = 5.0V FOSC = 1 MHz (RC_IDLE 模式, HFINTOSC 源) FOSC = 1 MHz (RC_IDLE 模式, HFINTOSC 源) FOSC = 16 MHz (RC_IDLE 模式, HFINTOSC 源) FOSC = 16 MHz (RC_IDLE 模式, HFINTOSC 源) FOSC = 64 MHz (RC_IDLE 模式, HFINTOSC + PLL 源) FOSC = 64 MHz (RC_IDLE 模式, HFINTOSC + PLL 源) 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码执 行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 Vss ; MCLR = VDD ; OSC1 = 外部方波,轨到轨满幅 (仅限 PRI_RUN 和 PRI_IDLE)。 DS41412F_CN 第 436 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.5 直流特性: PIC18LF2X/4XK22 PIC18F2X/4XK22 主运行供电电流, PIC18(L)F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 器件特性 D070 供电电流 (IDD) (1),(2) D071 典型值 最大值 0.11 0.20 0.17 0.25 单位 mA mA -40°C 至 +125°C -40°C 至 +125°C 条件 VDD = 1.8V VDD = 3.0V FOSC = 1 MHz (PRI_RUN 模式, ECM 源) D072 D073 D074 D075 D076 0.15 0.25 mA -40°C 至 +125°C VDD = 2.3V FOSC = 1 MHz 0.20 0.30 mA -40°C 至 +125°C VDD = 3.0V (PRI_RUN 模式, ECM 源) 0.25 0.35 mA -40°C 至 +125°C VDD = 5.0V 1.45 2.0 mA -40°C 至 +125°C VDD = 1.8V FOSC = 20 MHz 2.60 3.5 mA -40°C 至 +125°C VDD = 3.0V (PRI_RUN 模式, ECH 源) D077 D078 D079 1.95 2.5 mA -40°C 至 +125°C VDD = 2.3V FOSC = 20 MHz 2.65 3.5 mA -40°C 至 +125°C VDD = 3.0V (PRI_RUN 模式, ECH 源) 2.95 4.5 mA -40°C 至 +125°C VDD = 5.0V D080 7.5 10 mA -40°C 至 +125°C VDD = 3.0V FOSC = 64 MHz (PRI_RUN 模式, ECH 源) D081 D082 7.5 10 mA -40°C 至 +125°C VDD = 3.0V FOSC = 64 MHz 8.5 11.5 mA -40°C 至 +125°C VDD = 5.0V (PRI_RUN 模式, ECH 源) D083 D084 1.0 1.5 mA -40°C 至 +125°C VDD = 1.8V FOSC = 4 MHz 1.8 3.0 mA -40°C 至 +125°C VDD = 3.0V 16 MHz 内部 (PRI_RUN 模式, ECM + PLL 源) D085 D086 D087 1.4 2.0 mA -40°C 至 +125°C VDD = 2.3V FOSC = 4 MHz 1.85 2.5 mA -40°C 至 +125°C VDD = 3.0V 16 MHz 内部 (PRI_RUN 模式, 2.1 3.0 mA -40°C 至 +125°C VDD = 5.0V ECM + PLL 源) D088 6.35 9.0 mA -40°C 至 +125°C VDD = 3.0V FOSC = 16 MHz 64 MHz 内部 (PRI_RUN 模式, ECH + PLL 源) D089 D090 6.35 9.0 mA -40°C 至 +125°C VDD = 3.0V FOSC = 16 MHz 7.0 10 mA -40°C 至 +125°C VDD = 5.0V 64 MHz 内部 (PRI_RUN 模式, ECH + PLL 源) 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、 内部代码执行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 VSS ; MCLR = VDD ; OSC1 = 外部方波,轨到轨满幅 (仅限 PRI_RUN 和 PRI_IDLE)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 437 页 PIC18(L)F2X/4XK22 27.6 直流特性: 主空闲供电电流, PIC18(L)F2X/4XK22 PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 器件特性 D100 供电电流 (IDD) (1),(2) D101 典型值 最大值 单位 0.030 0.050 mA -40°C 至 +125°C 0.045 0.065 mA -40°C 至 +125°C 条件 VDD = 1.8V VDD = 3.0V Fosc = 1 MHz (PRI_IDLE 模式, ECM 源) D102 D103 D104 D105 D106 0.06 0.12 mA -40°C 至 +125°C VDD = 2.3V Fosc = 1 MHz 0.08 0.15 mA -40°C 至 +125°C VDD = 3.0V (PRI_IDLE 模式, ECM 源) 0.13 0.20 mA -40°C 至 +125°C VDD = 5.0V 0.45 0.8 mA -40°C 至 +125°C VDD = 1.8V Fosc = 20 MHz 0.70 1.0 mA -40°C 至 +125°C VDD = 3.0V (PRI_IDLE 模式, ECH 源) D107 D108 D109 0.55 0.8 mA -40°C 至 +125°C VDD = 2.3V Fosc = 20 MHz 0.75 1.0 mA -40°C 至 +125°C VDD = 3.0V (PRI_IDLE 模式, ECH 源) 0.90 1.2 mA -40°C 至 +125°C VDD = 5.0V D110 2.25 3.0 mA -40°C 至 +125°C VDD = 3.0V Fosc = 64 MHz (PRI_IDLE 模式, ECH 源) D111 D112 2.25 3.0 mA -40°C 至 +125°C VDD = 3.0V Fosc = 64 MHz 2.60 3.5 mA -40°C 至 +125°C VDD = 5.0V (PRI_IDLE 模式, ECH 源) D113 D114 0.35 0.6 mA -40°C 至 +125°C VDD = 1.8V Fosc = 4 MHz 0.55 0.8 mA -40°C 至 +125°C VDD = 3.0V 16 MHz 内部 (PRI_IDLE 模式, ECM + PLL 源) D115 D116 D117 0.45 0.6 mA -40°C 至 +125°C VDD = 2.3V Fosc = 4 MHz 0.60 0.9 mA -40°C 至 +125°C VDD = 3.0V 16 MHz 内部 (PRI_IDLE 模式, 0.70 1.0 mA -40°C 至 +125°C VDD = 5.0V ECM + PLL 源) D118 2.2 3.0 mA -40°C 至 +125°C VDD = 3.0V Fosc = 16 MHz 64 MHz 内部 (PRI_IDLE 模式, ECH + PLL 源) D119 D120 2.2 3.0 mA -40°C 至 +125°C VDD = 3.0V Fosc = 16 MHz 2.5 3.5 mA -40°C 至 +125°C VDD = 5.0V 64 MHz 内部 (PRI_IDLE 模式, ECH + PLL 源) 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、 内部代码执行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 VSS ; MCLR = VDD ; OSC1 = 外部方波,轨到轨满幅 (仅限 PRI_RUN 和 PRI_IDLE)。 DS41412F_CN 第 438 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.7 直流特性: 辅助振荡器供电电流, PIC18(L)F2X/4XK22 PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 器件特性 D130 供电电流 (IDD) (1),(2) 典型值 最大值 单位 3.5 23 μA 3.7 25 μA 3.8 — μA -40°C +25°C +60°C 条件 VDD = 1.8V Fosc = 32 kHz (SEC_RUN 模式, SOSC 源) 4.0 28 μA +85°C 5.1 30 μA +125°C D131 6.2 26 μA -40°C VDD = 3.0V 6.4 30 μA +25°C 6.5 — μA +60°C 6.8 35 μA +85°C 7.8 40 μA +125°C D132 15 35 μA 16 35 μA 17 35 μA -40°C +25°C +85°C VDD = 2.3V Fosc = 32 kHz (SEC_RUN 模式, SOSC 源) 19 50 μA +125°C D133 18 50 μA -40°C VDD = 3.0V 19 50 μA +25°C 21 50 μA +85°C 22 60 μA +125°C D134 19 55 μA -40°C VDD = 5.0V 20 55 μA +25°C 22 55 μA +85°C 23 70 μA +125°C 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、 内部代码执行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 VSS ; MCLR = VDD ; SOSCI / SOSCO = 互补外部的方波,轨到轨满幅。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 439 页 PIC18(L)F2X/4XK22 27.7 直流特性: 辅助振荡器供电电流, PIC18(L)F2X/4XK22 (续) PIC18LF2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C PIC18F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 器件特性 典型值 最大值 单位 条件 D135 0.9 18 μA 1.0 18 μA 1.1 — μA -40°C +25°C +60°C VDD = 1.8V Fosc = 32 kHz (SEC_IDLE 模式, SOSC 源) 1.3 20 μA +85°C 2.3 22 μA +125°C D136 1.3 20 μA -40°C VDD = 3.0V 1.4 20 μA +25°C 1.5 — μA +60°C 1.8 22 μA +85°C 2.9 25 μA +125°C D137 12 30 μA 13 30 μA 14 30 μA -40°C +25°C +85°C VDD = 2.3V Fosc = 32 kHz (SEC_IDLE 模式, SOSC 源) 16 45 μA +125°C D138 13 35 μA -40°C VDD = 3.0V 14 35 μA +25°C 16 35 μA +85°C 18 50 μA +125°C D139 14 40 μA -40°C VDD = 5.0V 15 40 μA +25°C 16 40 μA +85°C 18 60 μA +125°C 注 1: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、 内部代码执行模式和温度也会对电流消耗产生影响。 测试条件:PMD0、 PMD1 和 PMD2 中的所有外设模块控制位都设置为 1。 2: 有效工作模式下,所有 IDD 测量值的测试条件为: 所有 I/O 引脚设置为输出,驱动为 VSS ; MCLR = VDD ; SOSCI / SOSCO = 互补外部的方波,轨到轨满幅。 DS41412F_CN 第 440 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.8 直流特性:输入 / 输出特性, PIC18(L)F2X/4XK22 直流特性 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数 编号 符号 VIL 特性 输入低电压 最小值 典型值 † 最大值 单位 条件 D140 D140A I/O 端口: 带 TTL 缓冲器 — — 0.8 V 4.5V ≤ VDD ≤ 5.5V — — 0.15 VDD V 1.8V ≤ VDD ≤ 4.5V D141 D142 D142A 带施密特触发器缓冲器 — 带 I2C™ 电平 — 带 SMBus 电平 — MCLR 和 OSC1 — (RC 模式) (1) OSC1 (HS 模式) — — 0.2 VDD V 2.0V ≤ VDD ≤ 5.5V — 0.3 VDD V — 0.8 V 2.7V ≤ VDD ≤ 5.5V — 0.2 VDD V — 0.3 VDD V VIH 输入高电压 D147 D147A I/O 端口: 带 TTL 缓冲器 — 2.0 — 0.25 VDD + 0.8 — — — V 4.5V ≤ VDD ≤ 5.5V — V 1.8V ≤ VDD ≤ 4.5V D148 D149 带施密特触发器缓冲器 带 I2C™ 电平 带 SMBus 电平 MCLR 0.8 VDD 0.7 VDD 2.1 0.8 VDD — — V 2.0V ≤ VDD ≤ 5.5V — — V — — V 2.7V ≤ VDD ≤ 5.5V — — V D150A D150B OSC1 (HS 模式) OSC1 (RC 模式) (1) 0.7 VDD 0.9 VDD — — V — — V (注 1) IIL I/O 和 MCLR 上的输入 泄漏电流 (2),(3)) D155 I/O 端口和 MCLR — — — — IPU 弱上拉电流 (4) VSS ≤ VPIN ≤ VDD, 引脚处于高阻态 0.1 50 nA ≤ +25°C(4) 0.7 100 nA +60°C 4 200 nA +85°C 35 1000 nA +125°C D158 IPURB PORTB 弱上拉电流 25 85 200 μA VDD = 3.3V, VPIN = VSS 25 130 300 μA VDD = 5.0V, VPIN = VSS 注 1: 在 RC 振荡器配置中,OSC1/CLKIN 引脚为施密特触发器输入。在 RC 模式下,建议不要使用外部时钟驱动 PIC® MCU 器件。 2: MCLR 引脚上的泄漏电流主要取决于所施加的电压。规定电压为正常工作条件下的电压。在不同的输入电压 下可测得更高的泄漏电流。 3: 负电流定义为引脚的拉电流。 4: 参数为特性值,未经测试。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 441 页 PIC18(L)F2X/4XK22 27.8 直流特性:输入 / 输出特性, PIC18(L)F2X/4XK22 (续) 直流特性 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数 编号 符号 特性 最小值 典型值 † 最大值 单位 条件 VOL 输出低电压 D159 I/O 端口 IOL = 8 mA, VDD = 5V — — 0.6 V IOL = 6 mA, VDD = 3.3V IOL = 1.8 mA, VDD = 1.8V VOH 输出高电压 (3) D161 I/O 端口 VDD - 0.7 — IOH = 3.5 mA, VDD = 5V — V IOH = 3 mA, VDD = 3.3V IOH = 1 mA, VDD = 1.8V 注 1: 在 RC 振荡器配置中,OSC1/CLKIN 引脚为施密特触发器输入。在 RC 模式下,建议不要使用外部时钟驱动 PIC® MCU 器件。 2: MCLR 引脚上的泄漏电流主要取决于所施加的电压。规定电压为正常工作条件下的电压。在不同的输入电压 下可测得更高的泄漏电流。 3: 负电流定义为引脚的拉电流。 4: 参数为特性值,未经测试。 DS41412F_CN 第 442 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.9 存储器编程要求 直流特性 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数 编号 D170 D171 符号 VPP IDDP 特性 内部程序存储器编程规范 (1) MCLR/VPP 引脚上的电压 编程时的供电电流 最小值 典型值 † 最大值 单位 条件 8 — 9 V (注 3),(注 4) — — 10 mA 数据 EEPROM 存储器 D172 ED 字节耐擦写能力 100K — — E/W -40°C 至 +85°C D173 VDRW 读 / 写操作时的 VDD (PIC18LF) VDDMIN — VDDMAX V 使用 EECON 读 / 写 D175 TDEW 擦除 / 写周期时间 — 3 4 ms D176 D177 TRETD 特性保持时间 TREF 刷新前的总擦除 / 写次数 (2) — 40 — 年 假设没有违反其他规范 1M 10M — E/W -40°C 至 +85°C 闪存程序存储器 D178 EP D179 VPR 单元耐擦写能力 读操作时的 VDD (PIC18LF) 10K VDDMIN — — E/W -40°C 至 +85°C (注 5) — VDDMAX V D181 VIW D182 VIW 行擦除或写操作时的 VDD 2.2 VDDMIN — VDDMAX V PIC18LF2X/4XK22 — VDDMAX V PIC18F2X/4XK22 D183 TIW 自定时写周期时间 — 2 — ms D184 TRETD 特性保持时间 — 40 — 年 假设没有违反其他规范 † 除非另外声明,否则“典型值”栏中的数据均为3.0V和25°C条件下的值。这些参数仅供设计参考,未经测试。 注 1: 这些规范用于通过使用表写指令对片上程序存储器进行编程。 2: 关于数据 EEPROM 耐擦写能力的详细讨论,请参见第 7.8 节 “ 使用数据 EEPROM”。 3: 仅当禁止单电源编程时才需要。 4: MPLAB ICD 2 不支持可变 VPP 输出。当使用 MPLAB ICD 2 进行编程或调试时,用于限制 MPLAB ICD 2 VPP 电压的电路必须置于 MPLAB ICD 2 和目标系统之间。 5: 自写和块擦除。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 443 页 PIC18(L)F2X/4XK22 27.10 模拟特性 表 27-1: 比较器规范 工作条件:1.8V < VDD < 5.5V, -40°C < TA < +125°C (除非另外声明) 参数 编号 符号 特性 最小值 典型值 最大值 单位 备注 CM01 VIOFF 输入失调电压 — 3 40 mV 高功耗模式 VREF = VDD/2 — 4 60 mV 低功耗模式 VREF = VDD/2 CM02 VICM 输入共模电压 VSS — VDD V CM04* TRESP 响应时间 (1) — 200 400 ns 高功耗模式 — 600 3500 ns 低功耗模式 CM05* TMC2OV 比较器模式改变到输出有效的时间 — — 10 μs * 这些参数为特性值,未经测试。 注 1: 响应时间是在比较器的一个输入端电压为 VDD/2,而另一个输入端从 VSS 跳变到 VDD 时测得的。 表 27-2: 数模转换器 (DAC)规范 工作条件:2.0V < VDD < 5.5V, -40°C < TA < +125°C (除非另外声明) 参数 编号 符号 特性 最小值 典型值 最大值 单位 CV01* CV02* CLSB CACC 步长 (2) 绝对精度 — VDD/32 — V — — ± 1/2 LSb CV03* CR CV04* CST 单位电阻值 (R) 稳定时间 (1) — 5k — Ω — — 10 μs CV05* VSRC+ DAC 正参考电源 VSRC- +2 — VDD V CV06* VSRC- DAC 负参考电源 VSS — VSRC+ -2 V CV07* ΔVSRC DAC 参考电压范围 (VSRC+ - VSRC-) 2 — VDD V * 这些参数为特性值,未经测试。 注 1: 稳定时间是在 CVRR = 1 并且 CVR3:CVR0 从 0000 跳变到 1111 时测得的。 2: 更多信息,请参见第 22.0 节 “ 数模转换器 (DAC)模块 ”。 备注 ΔVSRC ≥ 2.0V DS41412F_CN 第 444 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 27-3: 固定参考电压 (FVR)规范 工作条件:-40°C < TA < +125°C (除非另外声明) 参数 编号 VR01 符号 VROUT 特性 VR 到 ADC 的输出电压 最小值 典型值 最大值 0.973 1.946 3.891 1.024 2.048 4.096 1.085 2.171 4.342 VR02 VROUT VR 到所有其他模块的输出电压 0.942 1.884 3.768 1.024 2.048 4.096 1.096 2.191 4.383 VR04* TSTABLE 稳定时间 * 这些参数为特性值,未经测试。 — 25 100 单位 备注 V 1x 输出, VDD ≥ 2.5V V 2x 输出, VDD ≥ 2.5V V 4x 输出, VDD ≥ 4.75V (PIC18F2X/4XK22) V 1x 输出, VDD ≥ 2.5V V 2x 输出, VDD ≥ 2.5V V 4x 输出, VDD ≥ 4.75V (PIC18F2X/4XK22) μs 0 至 125°C 表 27-4: 充电时间测量单元 (CTMU)规范 工作条件:1.8V < VDD < 5.5V, -40°C < TA < +125°C (除非另外声明) 参数 编号 符号 特性 最小值 典型值 (1) 最大值 CT01 IOUT1 CTMU 电流源, 基本范围 — 0.55 — CT02 IOUT2 CTMU 电流源, 10X 范围 — 5.5 — CT03 IOUT3 CTMU 电流源, 100X 范围 — 55 — 注 1: 标称电流位于当前调整范围的中心点 (CTMUICON<7:2> = 000000)。 单位 μA μA μA 备注 IRNG<1:0>=01 IRNG<1:0>=10 IRNG<1:0>=11 VDD ≥ 3.0V  2011-2013 Microchip Technology Inc. DS41412F_CN 第 445 页 PIC18(L)F2X/4XK22 图 27-5: 高 / 低压检测特性 VDD VHLVD (由硬件将 HLVDIF 置 1) (HLVDIF 可以 用软件清零) HLVDIF 表 27-5: 高 / 低压检测特性 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数编号 符号 特性 HLVDL<3:0> 最小值 典型值 † 最大值 VDD 由高转变为低时 的 HLVD 电压 0000 0001 1.69 1.84 1.99 1.92 2.07 2.22 0010 2.08 2.28 2.48 0011 2.24 2.44 2.64 0100 2.34 2.54 2.74 0101 2.54 2.74 2.94 0110 2.62 2.87 3.12 0111 2.76 3.01 3.26 1000 3.00 3.30 3.60 1001 3.18 3.48 3.78 1010 3.44 3.69 3.94 1011 3.66 3.91 4.16 1100 3.90 4.15 4.40 1101 4.11 4.41 4.71 1110 4.39 4.74 5.09 1111 V (HLVDIN 引脚) † TAMB = 25°C 时的生产测试。超过温度限制的规范由器件特性保证。 单位 V V V V V V V V V V V V V V V v 条件 DS41412F_CN 第 446 页  2011-2013 Microchip Technology Inc. 27.11 交流 (时序)特性 27.11.1 时序参数符号体系 时序参数符号采用以下格式之一进行创建: 1. TppS2ppS 2. TppS T F 频率 小写字母 (pp)及其含义: pp cc CCP1 ck CLKOUT cs CS di SDI do SDO dt 数据输入 io I/O 端口 mc MCLR 大写字母及其含义: S F 下降 H 高 I 无效 (高阻) L 低 仅用于 I2C AA 输出访问 BUF 总线空闲 TCC:ST (仅用于 I2C 规范) CC HD ST 保持 DAT 数据输入保持 STA 启动条件 PIC18(L)F2X/4XK22 3. TCC:ST 4. Ts T (仅用于 I2C™ 规范) (仅用于 I2C 规范) 时间 osc OSC1 rd RD rw RD 或 WR sc SCK ss SS t0 T0CKI t1 T13CKI wr WR P R V Z High Low 周期 上升 有效 高阻 高 低 SU STO 建立 停止条件  2011-2013 Microchip Technology Inc. DS41412F_CN 第 447 页 PIC18(L)F2X/4XK22 27.11.2 时序条件 表 27-6 中指定的温度和电压适用于所有的时序规范(除 非另外声明)。图 27-6 规定了时序规范的负载条件。 表 27-6: 交流特性 温度和电压规范 —— 交流 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 工作电压 VDD 范围如第 27.1 节 “ 直流特性:供电电压, PIC18(L)F2X/4XK22” 和第 27.9 节 “ 存储器编程要求 ” 所述。 图 27-6: 器件时序规范的负载条件 负载条件 1 VDD/2 负载条件 2 引脚 RL CL VSS 引脚 CL 图注 : RL = 464Ω CL = 50 pF VSS 对于除 OSC2/CLKOUT 外的所有引脚 包括作为端口的 D 和 E 输出 DS41412F_CN 第 448 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 27.11.3 时序图和规范 图 27-7: 外部时钟时序 (除 PLL 外的所有模式) Q4 Q1 Q2 Q3 OSC1 CLKOUT 1 3 3 2 Q4 Q1 4 4 表 27-7: 外部时钟时序要求 参数 编号 符号 特性 最小值 最大值 单位 条件 1A FOSC 外部 CLKIN 频率 (1) 振荡频率 (1) DC 0.5 MHz EC 和 ECIO 振荡器模式 (低功耗) DC 16 MHz EC 和 ECIO 振荡器模式 (中等功耗) DC 64 MHz EC 和 ECIO 振荡器模式 (高功耗) DC 4 MHz RC 振荡器模式 5 200 kHz LP 振荡器模式 0.1 4 MHz XT 振荡器模式 4 4 MHz HS 振荡器模式, VDD < 2.7V 4 16 MHz HS 振荡器模式, VDD ≥ 2.7V, 中等功耗模式 (HSMP) 4 20 MHz HS 振荡器模式, VDD ≥ 2.7V, 高功耗模式 (HSHP) 1 TOSC 外部 CLKIN 周期 (1) 2.0 — μs EC 和 ECIO 振荡器模式 (低功耗) 62.5 — ns EC 和 ECIO 振荡器模式 (中等功耗) 15.6 — ns EC 和 ECIO 振荡器模式 (高功耗) 振荡周期 (1) 250 — ns RC 振荡器模式 5 200 μs LP 振荡器模式 0.25 10 250 250 μs XT 振荡器模式 ns HS 振荡器模式, VDD < 2.7V 62.5 250 ns HS 振荡器模式, VDD ≥ 2.7V, 中等功耗模式 (HSMP) 50 250 ns HS 振荡器模式, VDD ≥ 2.7V, 高功耗模式 (HSHP) 2 TCY 指令周期 (1) 62.5 — ns TCY = 4/FOSC 3 TOSL, 外部时钟输入 (OSC1) 2.5 — μs LP 振荡器模式 TOSH 的高电平或低电平时间 30 — ns XT 振荡器模式 10 — ns HS 振荡器模式 4 TOSR, 外部时钟输入 (OSC1) — 50 ns LP 振荡器模式 TOSF 的上升或下降时间 — 20 ns XT 振荡器模式 — 7.5 ns HS 振荡器模式 注 1: 对于除 PLL 外的所有配置,指令周期 (TCY)等于输入振荡器时基周期的四倍。所有规定值均为基于针对 特定振荡器类型,器件在标准工作条件下执行代码时的特性数据。超出这些规定的限定值,可能导致振荡器 运行不稳定和 / 或导致电流消耗超出预期值。所有器件在测试 “ 最小值 ” 时,都在 OSC1/CLKIN 引脚连接了 外部时钟。当使用了外部时钟输入时,所有器件的 “ 最大 ” 周期时间限制为 “DC” (无时钟)。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 449 页 PIC18(L)F2X/4XK22 表 27-8: PLL 时钟时序规范 (VDD = 1.8V 至 5.5V) 参数 编号 符号 特性 最小值 F10 FOSC 振荡器频率范围 4 4 4 4 F11 FSYS 片上 VCO 系统频率 16 16 16 16 F12 trc PLL 起振时间 (锁定时间) — 最大值 5 4 16 12 20 16 64 48 2 单位 条件 MHz MHz MHz MHz MHz MHz MHz MHz ms VDD < 2.7V, -40°C 至 +85°C VDD < 2.7V, +85°C 至 +125°C 2.7V ≤ VDD, -40°C 至 +85°C 2.7V ≤ VDD, +85°C 至 +125°C VDD < 2.7V, -40°C 至 +85°C VDD < 2.7V, +85°C 至 +125°C 2.7V ≤ VDD, -40°C 至 +85°C 2.7V ≤ VDD, +85°C 至 +125°C 表 27-9: 交流特性:内部振荡器精度 ( PIC18(L)F46K22) 标准工作条件 (除非另外声明) 工作温度 -40°C ≤ TA ≤ +125°C 参数 编号 特性 频率容差 最小值 典型值 † 最大值 单位 条件 OA1 内部校准的 HFINTOSC ± 2% — 频率 (1) ± 3% — ± 5% — OA2 内部校准的 MFINTOSC ± 2% — 频率 (1) ± 3% — ± 5% — OA3 内部校准的 LFINTOSC ± 20% — 频率 (1) 16.0 16.0 16.0 500 500 500 31 — MHz 0°C ≤ TA ≤ +60°C, VDD ≥ 2.5V — MHz +60°C ≤ TA ≤ +85°C, VDD ≥ 2.5V — MHz -40°C ≤ TA ≤ +125°C — kHz 0°C ≤ TA ≤ +60°C, VDD ≥ 2.5V — kHz +60°C ≤ TA ≤ +85°C, VDD ≥ 2.5V — kHz -40°C ≤ TA ≤ +125°C — kHz -40°C ≤ TA ≤ +125°C † 除非另外声明,否则典型值栏中的数据都是在 3.0V、 25°C 的条件下测得的。这些参数未经测试,仅作为 设计参考。 注 1: 要确保振荡器的频率容差,必须在尽可能靠近器件处放置电容,去除 VDD 和 VSS 之间的耦合 。推荐的做 法是将 0.1 μF 和 0.01 μF 的两个电容并联。 DS41412F_CN 第 450 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 27-8: OSC1 CLKOUT 和 I/O 时序 Q4 Q1 10 CLKOUT 13 14 I/O 引脚 (输入) 17 I/O 引脚 (输出) 旧值 注: 负载条件请参见图 27-6。 20, 21 Q2 19 18 15 Q3 11 12 16 新值 表 27-10: CLKOUT 和 I/O 时序要求 参数 编号 符号 特性 最小值 典型 值 最大值 单位 条件 10 TosH2ckL OSC1↑ 到 CLKOUT↓ 的时间 — 75 200 ns 11 TosH2ckH OSC1↑ 到 CLKOUT↑ 的时间 — 75 200 ns 12 TckR CLKOUT 上升时间 — 35 100 ns 13 TckF CLKOUT 下降时间 — 35 100 ns 14 TckL2ioV CLKOUT ↓ 到端口输出有效的时间 — — 0.5 TCY + 20 ns 15 TioV2ckH CLKOUT ↑ 之前端口输入有效的时间 0.25 TCY + 25 — — ns 16 TckH2ioI CLKOUT ↑ 之后端口输入保持的时间 0 — — ns 17 TosH2ioV OSC1 ↑ (Q1 周期)到端口输出有效的时间 — 50 150 ns 18 TosH2ioI OSC1 ↑ (Q2 周期)到端口输入无效的时间 100 — — ns (I/O 输入保持时间) 19 TioV2osH 端口输入有效到 OSC1 ↑ 的时间 (I/O 输入建 0 立时间) — — ns (注 1) (注 1) (注 1) (注 1) (注 1) (注 1) (注 1) 20 TioR 端口输出上升时间 — 40 72 ns VDD = 1.8V — 15 32 ns VDD = 3.3V - 5.0V 21 TioF 端口输出下降时间 — 28 55 ns VDD = 1.8V — 15 30 ns VDD = 3.3V - 5.0V 22† TINP INTx 引脚高电平或低电平时间 20 — — ns 23† TRBP RB<7:4> 电平变化 KBIx 高电平或低电平时间 TCY — — ns † 这些参数是与任何内部时钟边沿无关的异步事件。 注 1: 测量是在 RC 模式下进行的,其中 CLKOUT 输出为 4 x TOSC。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 451 页 PIC18(L)F2X/4XK22 图 27-9: 复位、看门狗定时器、振荡器起振定时器和上电延时定时器时序 VDD MCLR 内部 POR PWRT 延时 OSC 延时 内部 复位 看门狗 定时器 复位 33 32 I/O 引脚 注: 负载条件请参见图 27-6。 30 31 34 34 图 27-10: 欠压复位时序 VDD BVDD 35 VIVRST 使能内部 参考电压 内部参考 电压稳定 36 VBGAP = 1.2V DS41412F_CN 第 452 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 27-11: 复位、看门狗定时器、振荡器起振定时器、上电延时定时器和欠压复位要求 参数 编号 符号 特性 最小值 典型值 最大值 单位 条件 30 TmcL MCLR 脉冲宽度 (低电平) 2 — — μs 31 TWDT 看门狗定时器超时周期 (无后分 3.5 4.1 4.7 ms 1:1 预分频比 频器) 32 TOST 振荡器起振定时器周期 1024 TOSC — 1024 TOSC — TOSC = OSC1 周期 33 TPWRT 上电延时定时器周期 54.8 64.4 74.1 ms 34 TIOZ 自 MCLR 低电平或看门狗定时器 — 2 — μs 复位起 I/O 处于高阻态的时间 35 TBOR 欠压复位脉冲宽度 2001 — — μs VDD ≤ BVDD (见 D005) 36 TIVRST 内部参考电压稳定时间 — 25 35 μs 37 THLVD 高 / 低压检测脉冲宽度 2001 — — μs VDD ≤ VHLVD 38 TCSD CPU 启动时间 39 TIOBST HF-INTOSC 稳定时间 5 — 10 μs — 0.25 1 ms 注 1:能连续触发复位或中断的最小脉冲宽度。缩短脉宽可能导致断续触发响应。 图 27-11: TIMER0 和 TIMER1 外部时钟时序 T0CKI T1OSO/T13CKI 40 41 42 45 46 47 48 注: TMR0 或 TMR1 负载条件请参见图 27-6。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 453 页 PIC18(L)F2X/4XK22 表 27-12: TIMER0 和 TIMER1/3/5 外部时钟要求 参数 编号 40 符号 Tt0H 特性 T0CKI 高电平脉冲宽度 41 Tt0L T0CKI 低电平脉冲宽度 42 Tt0P T0CKI 周期 无预分频器 带预分频器 无预分频器 带预分频器 无预分频器 带预分频器 45 Tt1H 46 Tt1L 47 Tt1P TxCKI 高电平 同步,无预分频器 时间 同步,带预分频器 异步 TxCKI 低电平 同步,无预分频器 时间 同步,带预分频器 异步 TxCKI 输入周 同步 期 异步 Ft1 TxCKI 时钟输入频率范围 48 Tcke2tmrI 从外部 TxCKI 时钟边沿到定时器递增的延时 最小值 0.5 TCY + 20 10 0.5 TCY + 20 10 TCY + 10 取如下二者 中较大值: 20 ns 或 (TCY + 40)/N 0.5 TCY + 20 10 30 0.5 TCY + 5 10 30 取如下二者 中较大值: 20 ns 或 (TCY + 40)/N 60 DC 2 TOSC 图 27-12: 捕捉 / 比较 /PWM 时序 (所有 CCP 模块) 最大值 单位 条件 — ns — ns — ns — ns — ns — ns N = 预分频值 (1, 2, 4,..., 256) — ns — ns — ns — ns — ns — ns — ns N = 预分频值 (1、 2、 4 和 8) — ns 50 kHz 7 TOSC — CCPx (捕捉模式) 50 51 52 CCPx (比较或 PWM 模式) 53 54 注: 负载条件请参见图 27-6。 DS41412F_CN 第 454 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 27-13: 捕捉 / 比较 /PWM 要求 (所有 CCP 模块) 参数 编号 符号 特性 50 TccL CCPx 输入低电 无预分频器 平时间 带预分频器 51 TccH CCPx 输入高电 无预分频器 平时间 带预分频器 52 TccP CCPx 输入周期 53 TccR CCPx 输出上升时间 54 TccF CCPx 输出下降时间 最小值 0.5 TCY + 20 10 0.5 TCY + 20 10 3 TCY + 40 N — — 最大值 — — — — — 25 25 单位 条件 ns ns ns ns ns N = 预分频值 (1、 4 或 16) ns ns 图 27-13: SPI 主模式时序示例 (CKE = 0) SS 70 SCK (CKP = 0) 71 72 78 79 SCK (CKP = 1) 80 79 78 SDO MSb bit 6 - - - - - -1 LSb SDI 注: MSb 输入 74 73 负载条件请参见图 27-6。 75, 76 bit 6 - - - -1 LSb 输入  2011-2013 Microchip Technology Inc. DS41412F_CN 第 455 页 PIC18(L)F2X/4XK22 表 27-14: SPI 模式要求示例 (主模式, CKE = 0 或 1) 参数 编号 符号 特性 70 TssL2scH, SS ↓ 到 SCK ↓ 或 SCK ↑ 输入的时间 TssL2scL 73 TdiV2scH, SDI 数据输入到 SCK 边沿的建立时间 TdiV2scL 74 TscH2diL, SDI 数据输入到 SCK 边沿的保持时间 TscL2diL 75 TdoR SDO 数据输出上升时间 76 TdoF SDO 数据输出下降时间 78 TscR SCK 输出上升时间 (主模式) 79 TscF SCK 输出下降时间 (主模式) 80 TscH2doV, SCK 边沿之后 SDO 数据输出有效的时间 TscL2doV 81 TdoV2scH, SDO 数据输出建立到出现 SCK 边沿的时间 TdoV2scL 最小值 TCY 最大值 单位 — ns 25 — ns 25 — ns — 30 ns — 20 ns — 30 ns — 20 ns — 20 ns TCY — ns 条件 图 27-14: SS SCK (CKP = 0) SCK (CKP = 1) SPI 主模式时序示例 (CKE = 1) 81 71 72 73 80 SDO MSb bit 6 - - - - - -1 75, 76 SDI MSb 输入 bit 6 - - - -1 注: 74 负载条件请参见图 27-6。 79 78 LSb LSb 输入 DS41412F_CN 第 456 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 27-15: SS SPI 从模式时序示例 (CKE = 0) 70 SCK (CKP = 0) 71 72 78 SCK (CKP = 1) 80 79 SDO MSb bit 6 - - - - - -1 SDI 注: MSb 输入 74 73 负载条件请参见图 27-6。 75, 76 bit 6 - - - -1 83 79 78 LSb 77 LSb 输入 表 27-15: SPI 模式要求示例 (从模式时序, CKE = 0 或 1) 参数 编号 符号 特性 70 TssL2scH, SS ↓ 到 SCK ↓ 或 SCK ↑ 输入的时间 TssL2scL 71 TscH 72 TscL SCK 输入高电平时间 SCK 输入低电平时间 连续 连续 73 TdiV2scH, SDI 数据输入到 SCK 边沿的建立时间 TdiV2scL 74 TscH2diL, SDI 数据输入到 SCK 边沿的保持时间 TscL2diL 75 TdoR SDO 数据输出上升时间 76 TdoF SDO 数据输出下降时间 77 TssH2doZ SS↑ 到 SDO 输出高阻态的时间 80 TscH2doV, SCK 边沿之后 SDO 数据输出有效的时间 TscL2doV 82 TssL2doV SS ↓ 边沿之后 SDO 数据输出有效的时间 83 TscH2ssH, SCK 边沿之后出现 SS ↑ 的时间 TscL2ssH 最小值 TCY 最大值 单位 — ns 条件 25 — ns 30 — ns 25 — ns 25 — ns — 30 ns — 20 ns 10 50 ns — 60 ns — 60 ns 1.5 TCY + 40 — ns  2011-2013 Microchip Technology Inc. DS41412F_CN 第 457 页 PIC18(L)F2X/4XK22 图 27-16: SS SPI 从模式时序示例 (CKE = 1) 82 70 SCK (CKP = 0) 83 71 72 SCK (CKP = 1) 80 SDO MSb bit 6 - - - - - -1 LSb 75, 76 77 SDI MSb 输入 bit 6 - - - -1 LSb 输入 注: 74 负载条件请参见图 27-6。 图 27-17: I2C™ 总线启动位 / 停止位时序 SCL SDA 91 90 93 92 启动 条件 注: 负载条件请参见图 27-6。 停止 条件 DS41412F_CN 第 458 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 27-16: I2C™ 总线启动位 / 停止位要求 (从模式) 参数编号 符号 90 TSU:STA 启动条件 建立时间 91 THD:STA 启动条件 保持时间 92 TSU:STO 停止条件 建立时间 93 THD:STO 停止条件 保持时间 特性 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 最小值 4700 600 4000 600 4700 600 4000 600 最大值 — — — — — — — — 单位 条件 ns 仅与重复启动条件相关 ns 这个周期后产生第一个时钟 脉冲 ns ns 图 27-18: I2C™ 总线数据时序 SCL SDA 输入 SDA 输出 103 90 91 109 100 101 106 107 109 102 92 110 注: 负载条件请参见图 27-6。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 459 页 PIC18(L)F2X/4XK22 表 27-17: I2C™ 总线数据要求 (从模式) 参数 编号 符号 特性 最小值 最大值 单位 条件 100 THIGH 时钟高电平时间 100 kHz 模式 400 kHz 模式 SSP 模块 101 TLOW 时钟低电平时间 100 kHz 模式 400 kHz 模式 SSP 模块 102 TR SDA 和 SCL 上升 100 kHz 模式 时间 400 kHz 模式 103 TF SDA 和 SCL 下降 100 kHz 模式 时间 400 kHz 模式 90 91 106 107 92 109 110 D102 TSU:STA 启动条件建立时间 THD:STA 启动条件保持时间 THD:DAT 数据输入保持时间 TSU:DAT 数据输入建立时间 TSU:STO 停止条件建立时间 TAA TBUF 从时钟有效到输出 有效的时间 总线空闲时间 CB 总线容性负载 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 100 kHz 模式 400 kHz 模式 4.0 0.6 1.5 TCY 4.7 1.3 1.5 TCY — 20 + 0.1 CB — — — — — — 1000 300 — 300 20 + 0.1 CB 300 4.7 — 0.6 — 4.0 — 0.6 — 0 — 0 0.9 250 — 100 — 4.7 — 0.6 — — 3500 — — 4.7 — 1.3 — — 400 μs 工作频率不得低于 1.5 MHz μs 工作频率不得低于 10 MHz μs 工作频率不得低于 1.5 MHz μs 工作频率不得低于 10 MHz ns ns CB 值规定在 10 至 400 pF 之间 ns ns CB 值规定在 10 至 400 pF 之间 μs 仅与重复启动条件相关 μs μs 这个周期后产生第一个时钟 μs 脉冲 ns μs ns (注 2) ns μs μs ns (注 1) ns μs 在启动一个新的传输前总线 μs 必须保持空闲的时间 pF 注 1: 为避免产生意外的启动或停止条件,作为发送器的器件必须提供这个内部最小延时以补偿 SCL 下降沿的未 定义区域 (最小值 300 ns)。 2: 快速模式的 I2C 总线器件也可在标准模式的 I2C 总线系统中使用,但必须满足 TSU:DAT ≥ 250 ns 的要求。 如果快速模式器件没有延长 SCL 信号的低电平周期,则必然满足此条件。如果该器件延长了 SCL 信号 的低电平周期,则在 SCL 线被释放前,它必须将下一个数据位输出到 SDA 线。根据标准模式 I2C 总线 规范, TR max. + TSU:DAT = 1000 + 250 = 1250 ns。 DS41412F_CN 第 460 页  2011-2013 Microchip Technology Inc. 图 27-19: SCL SDA PIC18(L)F2X/4XK22 主 SSP I2C™ 总线启动位 / 停止位时序波形 91 90 93 92 启动 条件 注: 负载条件请参见图 27-6。 停止 条件 表 27-18: 主 SSP I2C™ 总线启动位 / 停止位要求 参数 编号 符号 特性 最小值 90 TSU:STA 启动条件 100 kHz 模式 2(TOSC)(BRG + 1) 建立时间 400 kHz 模式 2(TOSC)(BRG + 1) 1 MHz 模式 (1) 2(TOSC)(BRG + 1) 91 THD:STA 启动条件 100 kHz 模式 2(TOSC)(BRG + 1) 保持时间 400 kHz 模式 2(TOSC)(BRG + 1) 1 MHz 模式 (1) 2(TOSC)(BRG + 1) 92 TSU:STO 停止条件 100 kHz 模式 2(TOSC)(BRG + 1) 建立时间 400 kHz 模式 2(TOSC)(BRG + 1) 1 MHz 模式 (1) 2(TOSC)(BRG + 1) 93 THD:STO 停止条件 100 kHz 模式 2(TOSC)(BRG + 1) 保持时间 400 kHz 模式 2(TOSC)(BRG + 1) 1 MHz 模式 (1) 2(TOSC)(BRG + 1) 注 1:对于所有 I2C 引脚,最小引脚电容均为 10 pF。 最大值 单位 条件 — ns 仅与重复启动条件相关 — — — ns 这个周期后产生第一个 — 时钟脉冲 — — ns — — — ns — — 图 27-20: 主 SSP I2C™ 总线数据时序 SCL SDA 输入 SDA 输出 103 90 91 109 100 101 106 107 109 注: 负载条件请参见图 27-6。 102 92 110  2011-2013 Microchip Technology Inc. DS41412F_CN 第 461 页 PIC18(L)F2X/4XK22 表 27-19: 主 SSP I2C™ 总线数据要求 参数 编号 符号 特性 最小值 最大值 单位 条件 100 THIGH 时钟高电平时间 100 kHz 模式 2(TOSC)(BRG + 1) — ms 400 kHz 模式 2(TOSC)(BRG + 1) — ms 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — ms 101 TLOW 时钟低电平时间 100 kHz 模式 2(TOSC)(BRG + 1) — ms 400 kHz 模式 2(TOSC)(BRG + 1) — ms 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — ms 102 TR SDA 和 SCL 上升时间 100 kHz 模式 400 kHz 模式 — 20 + 0.1 CB 1000 300 ns CB 值规定在 10 至 400 pF ns 之间 1 MHz 模式 (1) — 300 ns 103 TF SDA 和 SCL 下降时间 100 kHz 模式 400 kHz 模式 — 20 + 0.1 CB 300 ns CB 值规定在 10 至 400 pF 300 ns 之间 1 MHz 模式 (1) — 100 ns 90 TSU:STA 启动条件 建立时间 100 kHz 模式 400 kHz 模式 2(TOSC)(BRG + 1) — 2(TOSC)(BRG + 1) — ms 仅与重复启动条件相关 ms 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — ms 91 THD:STA 启动条件 100 kHz 模式 2(TOSC)(BRG + 1) — ms 这个周期后产生第一个 保持时间 400 kHz 模式 2(TOSC)(BRG + 1) — ms 时钟脉冲 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — ms 106 THD:DAT 数据输入 保持时间 100 kHz 模式 400 kHz 模式 0 — ns 0 0.9 ms 107 TSU:DAT 数据输入 建立时间 100 kHz 模式 400 kHz 模式 250 — ns (注 2) 100 — ns 92 TSU:STO 停止条件 100 kHz 模式 2(TOSC)(BRG + 1) — ms 建立时间 400 kHz 模式 2(TOSC)(BRG + 1) — ms 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — ms 109 TAA 从时钟有效到输 100 kHz 模式 — 3500 ns 出有效的时间 400 kHz 模式 — 1000 ns 1 MHz 模式 (1) — — ns 110 TBUF 总线空闲时间 100 kHz 模式 400 kHz 模式 4.7 — ms 在启动一个新的传输前总 1.3 — ms 线必须保持空闲的时间 D102 CB 总线容性负载 — 400 pF 注 1: 对于所有 I2C 引脚,最小引脚电容均为 10 pF。 2: 快速模式的 I2C 总线器件也可在标准模式的 I2C 总线系统中使用,但必须满足参数 107 ≥ 250 ns 的要 求。如果快速模式器件没有延长 SCL 信号的低电平周期,则必然满足此条件。如果该器件延长了 SCL 信号的低电平周期,则在 SCL 线被释放前,它必须将下一个数据位输出到 SDA 线。在 100 kHz 模式 下,参数 102 + 参数 107 = 1000 + 250 = 1250 ns。 DS41412F_CN 第 462 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 27-21: EUSART 同步发送 (主 / 从)时序 TXx/CKx 引脚 RXx/DTx 引脚 121 121 注: 120 负载条件请参见图 27-6。 表 27-20: EUSART 同步发送要求 参数 编号 符号 特性 120 TckH2dtV 同步发送 (主 / 从) 时钟高电平到数据输出有效的时间 121 Tckrf 时钟输出上升时间和下降时间 (主模式) 122 Tdtrf 数据输出上升时间和下降时间 122 最小值 最大值 单位 — 40 ns — 20 ns — 20 ns 条件 图 27-22: EUSART 同步接收 (主 / 从)时序 TXx/CKx 引脚 RXx/DTx 引脚 125 126 注: 负载条件请参见图 27-6。 表 27-21: EUSART 同步接收要求 参数 编号 符号 特性 最小值 最大值 单位 条件 125 TdtV2ckl 同步接收 (主 / 从) CK ↓ 之前数据的建立时间 (DT 建立时间) 10 126 TckL2dtl CK ↓ 之后数据的保持时间 (DT 保持时间) 15 — ns — ns  2011-2013 Microchip Technology Inc. DS41412F_CN 第 463 页 PIC18(L)F2X/4XK22 表 27-22: A/D 转换器特性:PIC18(L)F2X/4XK22 PIC18(L)F2X/4XK22 标准工作条件 (除非另外声明) 工作温度 在 +25°C 下测试 参数 编号 A01 A03 A04 A06 A07 A08 A20 A21 A22 A25 A30 注: 符号 特性 最小值 典型值 最大值 NR 分辨率 — — 10 EIL 积分线性误差 — ±0.5 ±1 EDL 微分线性误差 — ±0.5 ±1 EOFF 失调误差 — ±0.7 ±2 EGN 增益误差 — ±0.7 ±2 ETOTL 总误差 — ±0.8 ±3 ΔVREF VREFH 参考电压范围 (VREFH – VREFL) 参考电压高电压 2 VDD/2 — VDD — VDD + 0.3 VREFL 参考电压低电压 VSS – 0.3V — VDD/2 VAIN 模拟输入电压 VREFL — VREFH ZAIN 模拟信号源的推荐阻抗 — — 3 A/D 转换结果不会因输入电压的增加而减小,并且不会丢失编码。 单位 条件 位 ΔVREF = 3.0V LSb ΔVREF = 3.0V LSb ΔVREF = 3.0V LSb ΔVREF = 3.0V LSb ΔVREF = 3.0V LSb ΔVREF = 3.0V V V V V kΩ 图 27-23: A/D 转换时序 BSF ADCON0, GO (注 2) 131 Q4 130 A/D 时钟 132 A/D 数据 9 8 7 .. . . . . 2 1 0 ADRES ADIF GO 采样 旧数据 采样已停止 新数据 TCY DONE 注 1: 如果选择 RC 作为 A/D 转换的时钟源,在 A/D 时钟启动前要加上一个 TCY 时间,用以执行 SLEEP 指令。 2: 这是最小的 RC 延时 (典型值为 100 ns),在这段时间保持电容与模拟输入端断开。 DS41412F_CN 第 464 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 表 27-23: A/D 转换要求 (PIC18(L)F2X/4XK22) 标准工作条件 (除非另外声明) 工作温度 在 +25°C 下测试 参数 编号 符号 特性 最小值 典型值 最大值 单位 条件 130 TAD A/D 时钟周期 1 1 131 TCNV 转换时间 (不包括采集时间)(注 1) 12 132 TACQ 采集时间 (注 2) 1.4 135 TSWC 转换 → 采样的切换时间 — 136 TDIS 电容放电时间 2 — 25 μs -40°C 至 +85°C — 4 μs +85°C 至 +125°C — 12 TAD — — μs VDD = 3V, Rs = 50Ω — (注 3) — 2 TAD 注 1: ADRES 寄存器可在下一个 TCY 周期被读取。 2: 转换完成后当电压满量程变化时(VDD 至 VSS 或 VSS 至 VDD),保持电容采集一个 “ 新 ” 输入电压所需的时 间。在输入通道上的信号源阻抗 (RS)为 50Ω。 3: 在器件时钟的下一个周期。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 465 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第 466 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 28.0 直流和交流特性图表 注: 本注释下方的图表是根据有限数量的样本所做的统计,仅用于示意。在此列出的性能特性未经测试,不做 任何担保。在某些图表中,呈现的数据超出规定的工作范围 (即,超出规定的电源范围) ,当然也不在担 保范围内。  2011-2013 Microchip Technology Inc. DS41412F_CN 第467 页 PIC18(L)F2X/4XK22 图 28-1: 10 PIC18LF2X/4XK22 基本 IPD 1 Max. 85°C IPD (µA) 0.1 0.01 Limited Accuracy Typ. 60°C Typ. 25°C 0.001 1.8 2.1 2.4 2.7 3 VDD (V) 图 28-2: 40 PIC18F2X/4XK22 基本 IPD 3.3 3.6 35 Max. 85°C 30 ΔIPD (µA) 25 20 15 Typ. 60°C Typ. 25°C 10 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第468 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-3: 3.0 PIC18LF2X/4XK22 ΔIPD 看门狗定时器 (WDT) 2.5 Max. 2.0 ΔIPD (µA) 1.5 1.0 0.5 Typ. 0.0 1.8 图 28-4: 6 2.1 2.4 2.7 3 VDD (V) PIC18F2X/4XK22 ΔIPD 看门狗定时器 (WDT) 3.3 3.6 5 Max. 4 ΔIPD (µA) 3 2 1 Typical 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第469 页 PIC18(L)F2X/4XK22 图 28-5: 16 PIC18LF2X/4XK22 ΔIPD 欠压复位 (BOR) 15 Max. 85°C 14 13 12 ΔIPD (µA) 11 10 9 Typical 8 7 6 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-6: 17 PIC18F2X/4XK22 ΔIPD 欠压复位 (BOR) 15 Max. 85°C 13 ΔIPD (µA) 11 9 7 5 Typical 3 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第470 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 ΔIPD (µA) 图 28-7: 20 18 16 14 12 10 PIC18LF2X/4XK22 ΔIPD 高 / 低电压检测 (HLVD) Max. 8 6 4 1.8 图 28-8: 16 14 Typical 2.1 2.4 2.7 3 3.3 VDD (V) PIC18F2X/4XK22 ΔIPD 高 / 低电压检测 (HLVD) Max. 12 10 ΔIPD (µA) 8 6 4 Typical 2 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 VDD (V) 3.6 5.5  2011-2013 Microchip Technology Inc. DS41412F_CN 第471 页 PIC18(L)F2X/4XK22 图 28-9: 4.5 PIC18LF2X/4XK22 ΔIPD 辅助振荡器 4.0 Max. 85°C 3.5 3.0 ΔIPD (µA) 2.5 2.0 1.5 Typ. 60°C 1.0 Typ. 25°C 0.5 0.0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-10: 6 PIC18F2X/4XK22 ΔIPD 辅助振荡器 5 Max. 85°C 4 ΔIPD (µA) 3 2 1 Typical 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第472 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 ΔIPD (µA) ΔIPD (µA) 图 28-11: 20 18 16 14 12 10 8 6 1.8 图 28-12: 40 35 30 25 20 15 10 5 0 2.3 PIC18LF2X/4XK22 ΔIPD 比较器低功耗模式 Max. Typical 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 PIC18F2X/4XK22 ΔIPD 比较器低功耗模式 Max. Typical 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第473 页 PIC18(L)F2X/4XK22 图 28-13: 120 100 PIC18LF2X/4XK22 ΔIPD 比较器高功耗模式 Max. 80 ΔIPD (µA) 60 40 Typ. 20 0 1.8 图 28-14: 120 100 2.1 2.4 2.7 3 VDD (V) PIC18LF2X/4XK22 ΔIPD 比较器高功耗模式 Max. 3.3 3.6 80 ΔIPD (µA) 60 40 Typical 20 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第474 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-15: 50 PIC18LF2X/4XK22 ΔIPD DAC 45 40 Max. 35 ΔIPD (µA) 30 25 20 Typical 15 10 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-16: 70 PIC18F2X/4XK22 ΔIPD DAC 60 Max. 50 40 ΔIPD (µA) 30 Typical 20 10 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第475 页 PIC18(L)F2X/4XK22 图 28-17: 30 PIC18LF2X/4XK22 ΔIPD FVR 28 26 Max. 24 22 ΔIPD (µA) 20 18 16 Typ. 60°C Typ. 25°C 14 12 10 1.8 2.1 2.4 2.7 3 VDD (V) 图 28-18: 120 PIC18F2X/4XK22 ΔIPD FVR 3.3 3.6 100 Max. 80 Typical 60 ΔIPD (µA) 40 20 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 注 1: 在 PIC18F2X/4XK22 器件上, 使能 FVR 会在器件进入 VDD 约等于 3.2V 的 稳压模式时,导致休眠电流显著增加。 DS41412F_CN 第476 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-19: 500 PIC18(L)F2X/4XK22 ΔIDD A/D 转换器 1 450 Max. 400 350 300 ΔIDD (µA) 250 Typical 200 150 100 50 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 注 1: A/D 转换器差分电流仅存在于运行模式。在休眠或空闲模式下,转换 (如果在进行)完成 后, ADC 和 FRC 都将关闭。  2011-2013 Microchip Technology Inc. DS41412F_CN 第477 页 PIC18(L)F2X/4XK22 图 28-20: 14 PIC18LF2X/4XK22 典型 IDD:RC_RUN LF-INTOSC 31 kHz 12 125°C 10 25°C 8 -40°C 85°C 6 IDD (µA) 4 2 0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-21: 55 PIC18LF2X/4XK22 最大 IDD:RC_RUN LF-INTOSC 31 kHz IDD (µA) 45 125°C 35 85°C 25 25°C -40°C 15 5 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 DS41412F_CN 第478 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 IDD (µA) IDD (µA) 图 28-22: 28 26 24 22 20 18 16 14 12 10 2.3 图 28-23: 85 75 65 55 45 35 25 15 5 2.3 PIC18F2X/4XK22 典型 IDD:RC_RUN LF-INTOSC 31 kHz 25°C 125°C 85°C -40°C 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) PIC18F2X/4XK22 最大 IDD:RC_RUN LF-INTOSC 31 kHz 125°C -40°C to +85°C 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第479 页 PIC18(L)F2X/4XK22 图 28-24: 0.40 PIC18LF2X/4XK22 IDD:RC_RUN MF-INTOSC 500 kHz 0.35 0.30 Max 0.25 IDD (mA) 0.20 0.15 Typical 0.10 0.05 0.00 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-25: 0.4 PIC18F2X/4XK22 IDD:RC_RUN MF-INTOSC 500 kHz 0.35 Max. 0.3 IDD (mA) 0.25 Typical 0.2 0.15 0.1 0.05 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第480 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-26: 3.50 PIC18LF2X/4XK22 典型 IDD:RC_RUN HF-INTOSC 3.00 2.50 16 MHz 2.00 IDD (mA) 1.50 8 MHz 1.00 4 MHz 0.50 2 MHz 1 MHz 0.00 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-27: 4.5 PIC18LF2X/4XK22 最大 IDD:RC_RUN HF-INTOSC 4.0 3.5 3.0 16 MHz IDD (mA) 2.5 2.0 8 MHz 1.5 4 MHz 1.0 2 MHz 1 MHz 0.5 0.0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6  2011-2013 Microchip Technology Inc. DS41412F_CN 第481 页 PIC18(L)F2X/4XK22 图 28-28: 3 PIC18F2X/4XK22 典型 IDD:RC_RUN HF-INTOSC 2.5 16 MHz 2 IDD (mA) 1.5 8 MHz 1 4 MHz 2 MHz 0.5 1 MHz 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-29: 4 PIC18F2X/4XK22 最大 IDD:RC_RUN HF-INTOSC 3.5 16 MHz 3 2.5 IDD (mA) 2 8 MHz 1.5 4 MHZ 1 2 MHz 1 MHz 0.5 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第482 页  2011-2013 Microchip Technology Inc. IDD (mA) 图 28-30: 9 8 7 6 5 4 3 2 1 0 1.8 图 28-31: 12 PIC18(L)F2X/4XK22 PIC18LF2X/4XK22 典型 IDD:带 PLL 的 RC_RUN HF-INTOSC 64 MHz 32 MHz 16 MHz 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 PIC18LF2X/4XK22 最大 IDD:带 PLL 的 RC_RUN HF-INTOSC 10 64 MHz 8 IDD (mA) 6 32 MHz 4 16 MHz 2 0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6  2011-2013 Microchip Technology Inc. DS41412F_CN 第483 页 PIC18(L)F2X/4XK22 图 28-32: 8 PIC18F2X/4XK22 典型 IDD:带 PLL 的 RC_RUN HF-INTOSC 7 64 MHz 6 5 IDD (mA) 4 32 MHz 3 16 MHz 2 1 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-33: 12 PIC18F2X/4XK22 最大 IDD:带 PLL 的 RC_RUN HF-INTOSC 10 64 MHz 8 IDD (mA) 6 32 MHz 4 16 MHz 2 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第484 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-34: 4 PIC18LF2X/4XK22 典型 IDD:RC_IDLE LF-INTOSC 31 kHz 3.5 125°C 3 2.5 IDD (µA) 2 1.5 85°C 25°C 1 -40°C 0.5 0 1.8 2.1 2.4 2.7 3 VDD(V) 3.3 3.6 图 28-35: 35 PIC18LF2X/4XK22 最大 IDD:RC_IDLE LF-INTOSC 31 kHz 30 25 125°C 20 IDD (µA) 15 85°C 10 25°C 5 0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6  2011-2013 Microchip Technology Inc. DS41412F_CN 第485 页 PIC18(L)F2X/4XK22 图 28-36: PIC18F2X/4XK22 典型 IDD:RC_IDLE LF-INTOSC 31 kHz 22 21 20 -40°C 19 18 IDD (µA) 17 125°C 16 15 85°C 25°C 14 13 12 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-37: 70 PIC18F2X/4XK22 最大 IDD:RC_IDLE LF-INTOSC 31 kHz 60 125°C 50 IDD (µA) 40 -40°C to-40+C85°C 30 20 10 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) DS41412F_CN 第486 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-38: 0.3 0.25 PIC18LF2X/4XK22 IDD:RC_IDLE MF-INTOSC 500 kHz Max. 0.2 IDD (mA) 0.15 Typical 0.1 0.05 0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-39: 0.35 0.3 PIC18F2X/4XK22 IDD:RC_IDLE MF-INTOSC 500 kHz Max. 0.25 0.2 Typical IDD (mA) 0.15 0.1 0.05 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第487 页 PIC18(L)F2X/4XK22 图 28-40: 1.2 PIC18LF2X/4XK22 典型 IDD:RC_IDLE HF-INTOSC 1 0.8 16 MHz IDD (mA) 0.6 8 MHz 4 MHz 0.4 2 MHz 1 MHz 0.2 0 1.8 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 VDD (V) 图 28-41: 1.6 PIC18LF2X/4XK22 最大 IDD:RC_IDLE HF-INTOSC 1.4 1.2 16 MHz 1 IDD (mA) 0.8 8 MHz 0.6 4 MHz 1 MHz 0.4 0.2 0 1.8 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 VDD (V) DS41412F_CN 第488 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-42: 1 0.9 PIC18F2X/4XK22 典型 IDD:RC_IDLE HF-INTOSC 16 MHz 0.8 IDD (mA) 0.7 8 MHz 0.6 4 MHz 0.5 2 MHz 1 MHz 0.4 0.3 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-43: 1.4 PIC18F2X/4XK22 最大 IDD:RC_IDLE HF-INTOSC 1.2 16 MHz IDD (mA) 1 8 MHz 0.8 4 MHz 0.6 1 MHz 0.4 0.2 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第489 页 PIC18(L)F2X/4XK22 图 28-44: 3.5 PIC18LF2X/4XK22 典型 IDD:带 PLL 的 RC_IDLE HF-INTOSC 3 2.5 64 MHz 2 IDD (mA) 1.5 32 MHz 1 16 MHz 0.5 IDD(mA) 0 1.8 图 28-45: 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 1.8 2.1 2.4 2.7 3 3.3 VDD (V) PIC18LF2X/4XK22 最大 IDD:带 PLL 的 RC_IDLE HF-INTOSC 64 MHz 32 MHz 16 MHz 2.1 2.4 2.7 3 3.3 VDD (V) 3.6 3.6 DS41412F_CN 第490 页  2011-2013 Microchip Technology Inc. 图 28-46: 3 2.5 PIC18(L)F2X/4XK22 PIC18F2X/4XK22 典型 IDD:带 PLL 的 RC_IDLE HF-INTOSC 64 MHz 2 1.5 32 MHz IDD (mA) 1 16 MHz 0.5 IDD (mA) 0 2.3 图 28-47: 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 VDD (V) PIC18F2X/4XK22 最大 IDD:带 PLL 的 RC_IDLE HF-INTOSC 64 MHz 32 MHz 16 MHz 2.7 3.1 3.5 3.9 4.3 4.7 5.1 VDD (V) 5.5 5.5  2011-2013 Microchip Technology Inc. DS41412F_CN 第491 页 PIC18(L)F2X/4XK22 图 28-48: 3.0 PIC18LF2X/4XK22 典型 IDD:PRI_RUN EC 中等功耗 2.5 2.0 16 MHz IDD (mA) 1.5 10 MHz 1.0 4 MHz 0.5 0.0 1.8 2.1 2.4 2.7 1 MHz 3 3.3 3.6 VDD (V) 图 28-49: 4.0 PIC18LF2X/4XK22 最大 IDD:PRI_RUN EC 中等功耗 3.5 3.0 2.5 16 MHz IDD (mA) 2.0 10 MHz 1.5 1.0 0.5 0.0 1.8 2.1 2.4 2.7 4 MHz 1 MHz 3 3.3 3.6 VDD (V) DS41412F_CN 第492 页  2011-2013 Microchip Technology Inc. 图 28-50: 2.5 2 PIC18(L)F2X/4XK22 PIC18F2X/4XK22 典型 IDD:PRI_RUN EC 中等功耗 16 MHz 1.5 10 MHz IDD (mA) 1 4 MHz 0.5 1 MHz 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-51: 3.5 PIC18F2X/4XK22 最大 IDD:PRI_RUN EC 中等功耗 3 16 MHz 2.5 IDD (mA) 2 10 MHz 1.5 1 4 MHz 0.5 1 MHz 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第493 页 PIC18(L)F2X/4XK22 图 28-52: 12 PIC18LF2X/4XK22 典型 IDD:PRI_RUN EC 高功耗 10 8 64 MHz IDD (mA) 6 40 MHz 4 2 0 1.8 2.1 2.4 2.7 20 MHz 16 MHz 10 MHz 4 MHz 3 3.3 3.6 VDD (V) 图 28-53: 16 PIC18LF2X/4XK22 最大 IDD:PRI_RUN EC 高功耗 14 12 64 MHz 10 IDD (mA) 8 6 40 MHz 4 20 MHz 16 MHz 2 10 MHz 4 MHz 0 1.8 2.1 2.4 2.7 3 3.3 3.6 VDD (V) DS41412F_CN 第494 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 IDD (mA) 图 28-54: 9 8 7 6 5 4 3 2 1 0 2.3 图 28-55: 14 PIC18F2X/4XK22 典型 IDD:PRI_RUN EC 高功耗 2.7 3.1 3.5 3.9 4.3 4.7 VDD (V) PIC18F2X/4XK22 最大 IDD:PRI_RUN EC 高功耗 64 MHz 40 MHz 20 MHz 16 MHz 10 MHz 4 MHz 5.1 5.5 12 64 MHz 10 IDD (mA) 8 40 MHz 6 20 MHz 4 16 MHz 2 10 MHz 4 MHz 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第495 页 PIC18(L)F2X/4XK22 图 28-56: 10 PIC18LF2X/4XK22 典型 IDD:带 PLL 的 PRI_RUN EC 9 8 7 64 MHz 6 IDD (mA) 5 4 32 MHz 3 2 16 MHz 1 0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-57: 14 PIC18LF2X/4XK22 最大 IDD:带 PLL 的 PRI_RUN EC 12 10 64 MHz 8 IDD (mA) 6 32 MHz 4 16 MHz 2 0 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 DS41412F_CN 第496 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-58: 8 PIC18F2X/4XK22 典型 IDD:带 PLL 的 PRI_RUN EC 7 64 MHz 6 5 IDD (mA) 4 32 MHz 3 2 16 MHz 1 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-59: 12 PIC18F2X/4XK22 最大 IDD:带 PLL 的 PRI_RUN EC 10 64 MHz 8 IDD (mA) 6 32 MHz 4 16 MHz 2 0 2.3 2.7 3.1  2011-2013 Microchip Technology Inc. 3.5 3.9 4.3 VDD (V) 4.7 5.1 5.5 DS41412F_CN 第497 页 PIC18(L)F2X/4XK22 图 28-60: 0.9 PIC18LF2X/4XK22 典型 IDD:PRI_IDLE EC 中等功耗 0.8 0.7 0.6 16 MHz 0.5 IDD (mA) 0.4 10 MHz 0.3 0.2 0.1 0 1.8 2.1 2.4 2.7 4 MHz 1 MHz 3 3.3 3.6 VDD (V) 图 28-61: 1.2 PIC18LF2X/4XK22 最大 IDD:PRI_IDLE EC 中等功耗 1 IDD (mA) 0.8 16 MHz 0.6 10 MHz 0.4 0.2 4 MHz 0 1.8 2.1 2.4 2.7 1 MHz 3 3.3 3.6 VDD (V) DS41412F_CN 第498 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-62: 0.8 0.7 PIC18F2X/4XK22 典型 IDD:PRI_IDLE EC 中等功耗 16 MHz 0.6 IDD (mA) 0.5 10 MHz 0.4 0.3 4 MHz 0.2 1 MHz 0.1 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-63: 1.2 PIC18F2X/4XK22 最大 IDD:PRI_IDLE EC 中等功耗 1 16 MHz 0.8 IDD (mA) 0.6 10 MHz 0.4 4 MHz 0.2 1 MHz 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第499 页 PIC18(L)F2X/4XK22 IDD (mA) IDD (mA) 图 28-64: 3.5 3 2.5 2 1.5 1 0.5 0 1.8 图 28-65: 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 1.8 PIC18LF2X/4XK22 典型 IDD:PRI_IDLE EC 高功耗 64 MHz 40 MHz 20 MHz 16 MHz 10 MHz 4 MHz 2.1 2.4 2.7 3 3.3 VDD (V) PIC18LF2X/4XK22 最大 IDD:PRI_IDLE EC 高功耗 64 MHz 40 MHz 20 MHz 16 MHz 10 MHz 4 MHz 2.1 2.4 2.7 3 3.3 VDD (V) 3.6 3.6 DS41412F_CN 第500 页  2011-2013 Microchip Technology Inc. 图 28-66: 3 2.5 PIC18(L)F2X/4XK22 PIC18F2X/4XK22 典型 IDD:PRI_IDLE EC 高功耗 64 MHz 2 40 MHz 1.5 IDD (mA) IDD (mA) 1 0.5 0 2.3 图 28-67: 4 3.5 3 2.5 2 1.5 1 0.5 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 VDD (V) PIC18F2X/4XK22 最大 IDD:PRI_IDLE EC 高功耗 64 MHz 40 MHz 20 MHz 16 MHz 10 MHz 4 MHz 2.7 3.1 3.5 3.9 4.3 4.7 VDD (V) 20 MHz 16 MHz 10 MHz 4 MHz 5.1 5.5 5.1 5.5  2011-2013 Microchip Technology Inc. DS41412F_CN 第501 页 PIC18(L)F2X/4XK22 图 28-68: 3.5 PIC18LF2X/4XK22 典型 IDD:带 PLL 的 PRI_IDLE EC 3 2.5 64 MHz 2 IDD (mA) 1.5 32 MHz 1 0.5 16 MHz IDD (mA) 0 1.8 图 28-69: 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 1.8 2.1 2.4 2.7 3 3.3 VDD (V) PIC18LF2X/4XK22 最大 IDD:带 PLL 的 PRI_IDLE EC 64 MHz 32 MHz 16 MHz 2.1 2.4 2.7 3 3.3 VDD (V) 3.6 3.6 DS41412F_CN 第502 页  2011-2013 Microchip Technology Inc. 图 28-70: 3 PIC18(L)F2X/4XK22 PIC18F2X/4XK22 典型 IDD:带 PLL 的 PRI_IDLE EC 2.5 64 MHz 2 IDD (mA) 1.5 32 MHz 1 16 MHz 0.5 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-71: 4 PIC18F2X/4XK22 最大 IDD:带 PLL 的 PRI_IDLE EC 3.5 64 MHz 3 2.5 IDD (mA) 2 1.5 32 MHz 1 16 MHz 0.5 0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第503 页 PIC18(L)F2X/4XK22 图 28-72: 9 PIC18LF2X/4XK22 典型 IDD:SEC_RUN 32.768 kHz 8 125°C 7 85°C 60°C 25°C -40°C 6 IDD (µA) 5 4 IDD (µA) 3 1.8 图 28-73: 50 45 40 35 30 25 20 15 10 5 1.8 2.1 2.4 2.7 3 3.3 VDD (V) PIC18LF2X/4XK22 最大 IDD:SEC_RUN 32.768 kHz 85°C 25°C -40°C 2.1 2.4 2.7 3 3.3 VDD (V) 3.6 3.6 DS41412F_CN 第504 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-74: 22 PIC18F2X/4XK22 典型 IDD:SEC_RUN 32.768 kHz 21 85°C 20 25°C 19 -40°C 18 IDD (µA) 17 16 15 14 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-75: 85 PIC18F2X/4XK22 最大 IDD:SEC_RUN 32.768 kHz 75 125°C 65 55 -40°C to +85°C IDD (µA) 45 35 25 15 5 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第505 页 PIC18(L)F2X/4XK22 图 28-76: 2.3 PIC18LF2X/4XK22 典型 IDD:SEC_IDLE 32.768 kHz 2.1 1.9 85°C 1.7 60°C 1.5 25°C -40°C 1.3 IDD (µA) 1.1 0.9 0.7 0.5 1.8 2.1 2.4 2.7 3 VDD (V) 3.3 3.6 图 28-77: 25 PIC18LF2X/4XK22 最大 IDD:SEC_IDLE 32.768 kHz 20 85°C 15 25°C -40°C 10 IDD (µA) 5 0 1.8 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 VDD (V) DS41412F_CN 第506 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-78: 18 PIC18F2X/4XK22 典型 IDD:SEC_IDLE 32.768 kHz 17 IDD (µA) 16 85°C 15 25°C 14 -40°C 13 12 11 10 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V) 图 28-79: 63 58 PIC18F2X/4XK22 最大 IDD:SEC_IDLE 32.768 kHz 125°C 53 48 IDD (µA) 43 -40°C to +85°C 38 33 28 23 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第507 页 PIC18(L)F2X/4XK22 VIL (V) VIL (V) 图 28-80: 1.5 1.3 1.1 0.9 0.7 0.5 0.3 0.1 1.8 图 28-81: 2.0 1.8 1.6 1.4 1.2 1.0 0.8 0.6 0.4 0.2 1.8 PIC18(L)F2X/4XK22 TTL 缓冲器输入低电压 -40°C 25°C 125°C 85°C Max. 2.2 2.6 3 3.4 3.8 4.2 4.6 5 5.4 VDD (V) PIC18(L)F2X/4XK22 施密特触发器缓冲器输入低电压 -40°C 25°C 125°C 85°C Max. 2.3 2.8 3.3 3.8 4.3 4.8 5.3 VDD (V) DS41412F_CN 第508 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-82: 2.1 PIC18(L)F2X/4XK22 TTL 缓冲器输入高电压 1.9 Min. 1.7 VIH (V) 1.5 1.3 -40°C 25°C 1.1 85°C 125°C 0.9 0.7 0.5 1.8 2.2 2.6 3 3.4 3.8 4.2 4.6 5 5.4 VDD (V) 图 28-83: 4.5 PIC18(L)F2X/4XK22 施密特触发器缓冲器输入高电压 4.0 3.5 Min. 3.0 VIH (V) 2.5 2.0 25°C -40°C 1.5 85°C 125°C 1.0 1.8 2.2 2.6 3 3.4 3.8 4.2 4.6 5 5.4 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第509 页 PIC18(L)F2X/4XK22 图 28-84: 1.00E-05 PIC18(L)F2X/4XK22 引脚输入泄漏电流 1.00E-06 1.00E-07 Max. Input Leakage (A) 1.00E-08 1.00E-09 Typical 1.00E-10 1.00E-11 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 Temperature (°C) DS41412F_CN 第510 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-85: 1.6 PIC18(L)F2X/4XK22 输出低电压 1.4 1.2 1 Max. 2V Typ. 2V Max. 3V 0.8 Max. 5V 0.6 Typ. 3V VOL (V) 0.4 0.2 0 0 5 10 15 20 IOL (mA) 图 28-86: 5 PIC18(L)F2X/4XK22 输出高电压 Typ. 5V 25 30 VOH(V) 4 3 2 Min. 3V 1 Min. 2V Typ. 2V Min. 5V Typ. 3V Typ. 5V 0 0 5 10 15 20 25 IOH (mA)  2011-2013 Microchip Technology Inc. DS41412F_CN 第511 页 PIC18(L)F2X/4XK22 图 28-87: 60 PIC18(L)F2X/4XK22 比较器失调电压, 正常功耗模式, VDD=5.5V 50 Abs. Offset (mV) 40 6 sigma 30 20 10 Typical 0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VREF (V) 图 28-88: 45 PIC18(L)F2X/4XK22 比较器失调电压, 正常功耗模式, VDD=3.0V 40 35 Abs. Offset (mV) 30 6 sigma 25 20 15 10 Typical 5 0 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 VREF (V) DS41412F_CN 第512 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-89: 35 PIC18LF2X/4XK22 比较器失调电压, 正常功耗模式, VDD=1.8V 30 25 6 sigma 20 Abs. Offset (mV) 15 10 5 Typical 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 VREF (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第513 页 PIC18(L)F2X/4XK22 图 28-90: 90 PIC18(L)F2X/4XK22 比较器失调电压, 低功耗模式, VDD=5.5V 80 70 60 Abs. Offset (mV) 50 6 sigma 40 30 20 Typical 10 0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VREF (V) 图 28-91: 80 PIC18(L)F2X/4XK22 比较器失调电压, 低功耗模式, VDD=3.0V 70 60 50 Abs. Offset (mV) 40 6 sigma 30 20 10 Typical 0 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 VREF (V) DS41412F_CN 第514 页  2011-2013 Microchip Technology Inc. 图 28-92: 60 PIC18(L)F2X/4XK22 PIC18LF2X/4XK22 比较器失调电压, 低功耗模式, VDD=1.8V 50 Abs. Offset (mV) 40 6 sigma 30 20 10 0 0 0.2 0.4 0.6 0.8 1 VREF (V) Typical 1.2 1.4 1.6 1.8  2011-2013 Microchip Technology Inc. DS41412F_CN 第515 页 PIC18(L)F2X/4XK22 图 28-93: PIC18(L)F2X/4XK22 典型 DAC 绝对误差 VDD = 2.5V、 3.0V 和 5.5V Absolute Error (LSb) Minimum VREF Limit 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1.0 0.9 0.8 0.7 0.6 0.5 Max LSb Limit 0.4 0.3 2.5V 3.0V 0.2 0.1 5.5V 0.0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 VREF (V) DS41412F_CN 第516 页  2011-2013 Microchip Technology Inc. 图 28-94: 1.035 PIC18(L)F2X/4XK22 PIC18(L)F2X/4XK22 典型固定参考电压 1X 输出 1.030 FVR x1 (V) 1.025 1.020 5.5V 2.5V 1.015 1.010 1.005 -40 -20 0 20 40 60 80 Temperature (°C) 图 28-95: PIC18(L)F2X/4XK22 典型固定参考电压 1X 输出 1.10 1.08 Max. 100 120 1.06 FVR x1 (V) 1.04 1.02 1.00 125°C 85°C 25°C - 40°C 0.98 Min. 0.96 2.5 3 3.5 4 4.5 5 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第517 页 PIC18(L)F2X/4XK22 图 28-96: 2.065 PIC18(L)F2X/4XK22 典型固定参考电压 2X 输出 2.055 2.045 2.035 5.5V 2.5V FVR x2 (V) 2.025 2.015 -40 -20 0 20 40 60 80 100 120 Temperature (°C) 图 28-97: 2.20 2.15 PIC18(L)F2X/4XK22 典型固定参考电压 2X 输出 Max. FVR x2 (V) 2.10 2.05 2.00 125°C 85°C 25°C -40°C 1.95 1.90 2.5 3 DS41412F_CN 第518 页 Min. 3.5 4 4.5 5 5.5 VDD (V)  2011-2013 Microchip Technology Inc. 图 28-98: 4.13 PIC18(L)F2X/4XK22 PIC18F2X/4XK22 典型固定参考电压 4X 输出 4.11 4.09 4.07 5.5V 4.5V FVR x4 (V) 4.05 4.03 -40 -20 0 20 40 60 Temperature (°C) 图 28-99: 4.40 PIC18F2X/4XK22 典型固定参考电压 4X 输出 4.35 Max. 4.30 4.25 4.20 FVR x4 (V) 4.15 4.10 4.05 125°C 4.00 85°C 25°C 3.95 3.90 Min. 3.85 4.5 4.7 4.9 5.1 VDD (V) 80 100 - 40°C 5.3 120 5.5  2011-2013 Microchip Technology Inc. DS41412F_CN 第519 页 PIC18(L)F2X/4XK22 图 28-100: 16.80 16 MHZ 时的 PIC18(L)F2X/4XK22 HF-INTOSC 频率与温度关系曲线 最小值 / 最大值:± 2%, T = 0°C 至 +70°C +2% / -3%, T = +70°C 至 +85°C ± 5%, T = -40°C 至 0°C 且 +85°C 至 +125°C 16.64 16.48 16.32 Max. 16.16 Freq (MHz) 16.00 15.84 15.68 Typical Min. 15.52 15.36 15.20 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 Temp (°C) DS41412F_CN 第520 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 图 28-101: 32.5 PIC18LF2X/4XK22 典型 LF-INTOSC 频率 与 VDD 关系曲线 最小值 / 最大值 = 31.25 kHz ± 15%, T = -40°C 至 +85°C 32.0 25°C 31.5 -40°C 85°C 31.0 Frequency (kHz) 30.5 125°C 30.0 29.5 29.0 1.8 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 VDD (V) 图 28-102: 32.5 PIC18F2X/4XK22 典型 LF-INTOSC 频率与 VDD 关系曲线 最小值 / 最大值 = 31.25 kHz ± 15%, T = -40°C 至 +85°C 32.0 31.5 25°C 31.0 -40°C Frequency (kHz) 30.5 85°C 30.0 29.5 125°C 29.0 2.3 2.7 3.1 3.5 3.9 4.3 4.7 5.1 5.5 VDD (V)  2011-2013 Microchip Technology Inc. DS41412F_CN 第521 页 PIC18(L)F2X/4XK22 图 28-103: 32.5 32.0 PIC18LF2X/4XK22 典型 LF-INTOSC 频率与温度关系曲线 最小值 / 最大值 = 31.25 kHz ± 15%, T = -40°C 至 +85°C 1.8V Frequency (kHz) 31.5 3V 31.0 3.6V 30.5 30.0 29.5 29.0 -40 -20 0 20 40 60 80 100 120 Temperature (°C) 图 28-104: 32.5 PIC18F2X/4XK22 典型 LF-INTOSC 频率与温度关系曲线 最小值 / 最大值 = 31.25 kHz ± 15%, T = -40°C 至 +85°C 32.0 2.5V 31.5 3.0V 5.5V 31.0 Frequency (kHz) 30.5 30.0 29.5 29.0 -40 -20 0 20 40 60 80 100 120 Temperature (°C) DS41412F_CN 第522 页  2011-2013 Microchip Technology Inc. 29.0 封装信息 29.1 封装标识信息 28 引脚 SPDIP(.300”) 28 引脚 SOIC(7.50 mm) XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX YYWWNNN PIC18(L)F2X/4XK22 示例 PIC18F25K22 -E/SP e3 0810017 示例 PIC18F25K22 -E/SO e3 0810017 28 引脚 SSOP(5.30 mm) 示例 PIC18F25K22 -E/SS e3 0810017 图注: XX...X Y YY WW NNN e3 * 客户信息或 Microchip 器件编号 年份代码 (日历年的最后一位数字) 年份代码 (日历年的最后两位数字) 星期代码 (一月一日的星期代码为 “01”) 以字母数字排序的追踪代码 雾锡 (Matte Tin, Sn)的 JEDEC 无铅标志 本封装为无铅封装。 JEDEC 无铅标志 (e3 )标示于此种封装的 外包装上。 注: Microchip 元器件编号如果无法在同一行内完整标注,将换行标出,因此会限制 表示客户信息的字符数。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 523 页 PIC18(L)F2X/4XK22 封装标识信息 (续) 28 引脚 QFN(6x6 mm) PIN 1 XXXXXXXX XXXXXXXX YYWWNNN 28 引脚 UQFN(4x4x0.5 mm) PIN 1 40 引脚 PDIP(600 mil) XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX YYWWNNN 示例 PIN 1 18F25K22 -E/ML e3 0610017 示例 PIN 1 PIC18 F23K22 E/MV e3 810017 示例 PIC18F45K22 -E/P e3 0810017 图注: XX...X Y YY WW NNN e3 * 客户信息或 Microchip 器件编号 年份代码 (日历年的最后一位数字) 年份代码 (日历年的最后两位数字) 星期代码 (一月一日的星期代码为 “01”) 以字母数字排序的追踪代码 雾锡 (Matte Tin, Sn)的 JEDEC 无铅标志 本封装为无铅封装。 JEDEC 无铅标志 ( e3)标示于此种封装的 外包装上。 注: Microchip 元器件编号如果无法在同一行内完整标注,将换行标出,因此会限制 表示客户信息的字符数。 DS41412F_CN 第524 页  2011-2013 Microchip Technology Inc. 封装标识信息 (续) 40 引脚 UQFN(5x5x0.5 mm) PIN 1 44 引脚 QFN(8x8x0.9 mm) PIN 1 XXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXX YYWWNNN 44 引脚 TQFP(10x10x1 mm) PIC18(L)F2X/4XK22 示例 PIN 1 PIC18F 45K22 -I/MV e3 0810017 示例 PIN 1 1845K22 -E/ML e3 0810017 示例 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX YYWWNNN 18F45K22 -E/PT e3 0810017 图注: XX...X Y YY WW NNN e3 * 客户信息或 Microchip 器件编号 年份代码 (日历年的最后一位数字) 年份代码 (日历年的最后两位数字) 星期代码 (一月一日的星期代码为 “01”) 以字母数字排序的追踪代码 雾锡 (Matte Tin, Sn)的 JEDEC 无铅标志 本封装为无铅封装。 JEDEC 无铅标志 (e3 )标示于此种封装的 外包装上。 注: Microchip 元器件编号如果无法在同一行内完整标注,将换行标出,因此会限制 表示客户信息的字符数。  2011-2013 Microchip Technology Inc. DS41412F_CN 第 525 页 PIC18(L)F2X/4XK22 29.2 封装详细信息 以下部分将介绍各种封装的技术细节。 28/引H脚DG窄6型NL塑QQ封\ 双3O列DV直WLF插'式XD封O 装,Q/(LQSHP )63— —± 主体P3LO0%0RmGi\l [>S6P3D'I,P3]@ 1注R:WH )最RU新WK封H 装PR图VW请FX至UUHhQttWpS:/D/wFNwDwJ.HmGicUrDoZcLhQipJV.coSmOH/DpVaHckVaHgHinWgKH查0看LFUMRFicKrLoSc3hiDpF封ND装JLQ规J范6S。HFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ N NOTE 1 1 23 D A A1 b1 b E1 A2 L e E c eB 8QLWV ,1&+(6 'LPHQVLRQ /LPLWV 0,1 120 0$; 1XPEHU RI 3LQV 1  3LWFK H  %6& 7RS WR 6HDWLQJ 3ODQH $ ± ±  0ROGHG 3DFNDJH 7KLFNQHVV $    %DVH WR 6HDWLQJ 3ODQH $  ± ± 6KRXOGHU WR 6KRXOGHU :LGWK (    0ROGHG 3DFNDJH :LGWK (    2YHUDOO /HQJWK '    7LS WR 6HDWLQJ 3ODQH /    /HDG 7KLFNQHVV F    8SSHU /HDG :LGWK E    /RZHU /HDG :LGWK E    1RWHV 2YHUDOO 5RZ 6SDFLQJ † H% ± ±   3LQ  YLVXDO LQGH[ IHDWXUH PD\ YDU\ EXW PXVW EH ORFDWHG ZLWKLQ WKH KDWFKHG DUHD  † 6LJQLILFDQW &KDUDFWHULVWLF  'LPHQVLRQV ' DQG ( GR QRW LQFOXGH PROG IODVK RU SURWUXVLRQV 0ROG IODVK RU SURWUXVLRQV VKDOO QRW H[FHHG  SHU VLGH  'LPHQVLRQLQJ DQG WROHUDQFLQJ SHU $60( <0 %6& %DVLF 'LPHQVLRQ 7KHRUHWLFDOO\ H[DFW YDOXH VKRZQ ZLWKRXW WROHUDQFHV 0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &% DS41412F_CN 第526 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 28 引脚塑封宽条小外形封装 (SO) —— 主体 7.50 mm [SOIC] 注: Note: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 For the most current package drawings, please see the Microchip Packaging Specification located at http://www.microchip.com/packaging  2011-2013 Microchip Technology Inc. DS41412F_CN 第 527 页 PIC18(L)F2X/4XK22 28 引脚塑封宽条小外形封装 (SO) —— 主体 7.50 mm [SOIC] 注: Note: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 For the most current package drawings, please see the Microchip Packaging Specification located at http://www.microchip.com/packaging DS41412F_CN 第528 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 28 引脚塑封宽条小外形封装 (SO) —— 主体 7.50 mm [SOIC] 注: Note: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 For the most current package drawings, please see the Microchip Packaging Specification located at http://www.microchip.com/packaging  2011-2013 Microchip Technology Inc. DS41412F_CN 第 529 页 PIC18(L)F2X/4XK22 28引/H脚DG塑3封OD缩VW小LF型6K小UL外QN形6封P装DOO(2SXWSOL)QH— 6—6 主±体5.3P0 Pmm%R[GS\SO>6P6]23@ 注1R:WH )最R新U WK封H装P图RV请W F至XUUhHtQtpW:S//DwFwNwDJ.mH iGcUrDoZchLQipJ.VcoSmOH/pDaVcHkVaHgHinWgKH查0看LFUMRiFcKroLSch3iDpF封ND装JLQ规J范6S。HFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ D N E E1 12 b NOTE 1 e c A A2 φ A1 L1 L 8QLWV 0,//,0(7(56 'LPHQVLRQ /LPLWV 0,1 120 0$; 1XPEHU RI 3LQV 1  3LWFK H  %6& 2YHUDOO +HLJKW $ ± ±  0ROGHG 3DFNDJH 7KLFNQHVV $    6WDQGRII $  ± ± 2YHUDOO :LGWK (    0ROGHG 3DFNDJH :LGWK (    2YHUDOO /HQJWK '    )RRW /HQJWK /    )RRWSULQW /  5() /HDG 7KLFNQHVV F  ±  )RRW $QJOH I ƒ ƒ ƒ 1RWHV /HDG :LGWK E  ±   3LQ  YLVXDO LQGH[ IHDWXUH PD\ YDU\ EXW PXVW EH ORFDWHG ZLWKLQ WKH KDWFKHG DUHD  'LPHQVLRQV ' DQG ( GR QRW LQFOXGH PROG IODVK RU SURWUXVLRQV 0ROG IODVK RU SURWUXVLRQV VKDOO QRW H[FHHG  PP SHU VLGH  'LPHQVLRQLQJ DQG WROHUDQFLQJ SHU $60( <0 %6& %DVLF 'LPHQVLRQ 7KHRUHWLFDOO\ H[DFW YDOXH VKRZQ ZLWKRXW WROHUDQFHV 5() 5HIHUHQFH 'LPHQVLRQ XVXDOO\ ZLWKRXW WROHUDQFH IRU LQIRUPDWLRQ SXUSRVHV RQO\ 0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &% DS41412F_CN 第530 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 28 引脚塑封缩小型小外形封装 (SS) —— 主体 5.30 mm [SSOP] 注No:te: F最or新th封e装m图os请t c至urrhetntpt:p//awcwkawg.me idcrroacwhinipg.sc,opmle/paasceksaegeintghe查M看icMroicchroipchPipac封ka装gi规ng范S。pecification located at http://www.microchip.com/packaging  2011-2013 Microchip Technology Inc. DS41412F_CN 第 531 页 PIC18(L)F2X/4XK22 28引/H脚DG塑3封OD正VW方LF扁4平XD无G 脚)O封DW装1R(/MHLD)G 3—DF—ND主JH体 06x/6 ±mm[[QPFPN]%,R触G\点>长4)度1为@ 0.55 mm Z注LWK:最P新P封&装R图Q请WD至FWh/ttpH:Q//wJwWKw.microchip.com/packaging 查看 Microchip 封装规范。 1RWH )RU WKH PRVW FXUUHQW SDFNDJH GUDZLQJV SOHDVH VHH WKH 0LFURFKLS 3DFNDJLQJ 6SHFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ D EXPOSED D2 PAD N TOP VIEW E 2 1 E2 2 1 NOTE 1 N L BOTTOM VIEW e b K A A3 A1 8QLWV 0,//,0(7(56 'LPHQVLRQ /LPLWV 0,1 120 0$; 1XPEHU RI 3LQV 1  3LWFK H  %6& 2YHUDOO +HLJKW $    6WDQGRII $    &RQWDFW 7KLFNQHVV $  5() 2YHUDOO :LGWK (  %6& ([SRVHG 3DG :LGWK (    2YHUDOO /HQJWK '  %6& ([SRVHG 3DG /HQJWK '    &RQWDFW :LGWK E    &RQWDFW /HQJWK /    &RQWDFWWR([SRVHG 3DG .  ± ± 1RWHV  3LQ  YLVXDO LQGH[ IHDWXUH PD\ YDU\ EXW PXVW EH ORFDWHG ZLWKLQ WKH KDWFKHG DUHD  3DFNDJH LV VDZ VLQJXODWHG  'LPHQVLRQLQJ DQG WROHUDQFLQJ SHU $60( <0 %6& %DVLF 'LPHQVLRQ 7KHRUHWLFDOO\ H[DFW YDOXH VKRZQ ZLWKRXW WROHUDQFHV 5() 5HIHUHQFH 'LPHQVLRQ XVXDOO\ ZLWKRXW WROHUDQFH IRU LQIRUPDWLRQ SXUSRVHV RQO\ 0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &% DS41412F_CN 第532 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 28引/H脚DG塑3封OD正VWL方F 扁4X平DG无)脚OD封W 装1R(/MHDLG)3—DF—ND主JH体 06/x 6±mm[[PQFPN%],RG触\点>4长)度1@为 0.55 mm ZL注WK: 最P新P封&装R图Q请WD至FW h/ttHpQ://JwWwKw.microchip.com/packaging 查看 Microchip 封装规范。 1RWH )RU WKH PRVW FXUUHQW SDFNDJH GUDZLQJV SOHDVH VHH WKH 0LFURFKLS 3DFNDJLQJ 6SHFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ  2011-2013 Microchip Technology Inc. DS41412F_CN 第 533 页 PIC18(L)F2X/4XK22 28 引脚塑封超薄正方扁平无脚封装 (MV) —— 主体 4x4x0.5 mm [UQFN] 注No:te: F最or新th封e装m图os请t c至urrhetntpt :p//awcwkawg.me idcrraowchinipg.sc,opmle/paasceksaegeintghe查M看icMroicchroipchPipac封ka装gi规ng范S。pecification located at http://www.microchip.com/packaging DS41412F_CN 第534 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 28 引脚塑封超薄正方扁平无脚封装 (MV) —— 主体 4x4x0.5 mm [UQFN] 注No:te: F最or新th封e 装mo图s请t c至urrhetntpt :p//awcwkawg.emdicrraowcihnigps.c,opmle/apsaecksaegeinthge查M看icrMocichriopcPhaipck封ag装in规g 范Sp。ecification located at http://www.microchip.com/packaging  2011-2013 Microchip Technology Inc. DS41412F_CN 第 535 页 PIC18(L)F2X/4XK22 40/引H脚DG塑3封ODV双WL列F '直X插DO式,Q封/装LQH( P3) ±—— P主L体O %6R0G0\m>3il'[,P3D@ IP] 1注R:WH 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 )RU WKH PRVW FXUUHQW SDFNDJH GUDZLQJV SOHDVH VHH WKH 0LFURFKLS 3DFNDJLQJ 6SHFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ N NOTE 1 E1 123 D E A A2 L c b1 A1 b e eB 8QLWV ,1&+(6 'LPHQVLRQ /LPLWV 0,1 120 0$; 1XPEHU RI 3LQV 1  3LWFK H  %6& 7RS WR 6HDWLQJ 3ODQH $ ± ±  0ROGHG 3DFNDJH 7KLFNQHVV $  ±  %DVH WR 6HDWLQJ 3ODQH $  ± ± 6KRXOGHU WR 6KRXOGHU :LGWK (  ±  0ROGHG 3DFNDJH :LGWK (  ±  2YHUDOO /HQJWK '  ±  7LS WR 6HDWLQJ 3ODQH /  ±  /HDG 7KLFNQHVV F  ±  8SSHU /HDG :LGWK E  ±  /RZHU /HDG :LGWK E  ±  1RWHV 2YHUDOO 5RZ 6SDFLQJ † H% ± ±   3LQ  YLVXDO LQGH[ IHDWXUH PD\ YDU\ EXW PXVW EH ORFDWHG ZLWKLQ WKH KDWFKHG DUHD  † 6LJQLILFDQW &KDUDFWHULVWLF  'LPHQVLRQV ' DQG ( GR QRW LQFOXGH PROG IODVK RU SURWUXVLRQV 0ROG IODVK RU SURWUXVLRQV VKDOO QRW H[FHHG  SHU VLGH  'LPHQVLRQLQJ DQG WROHUDQFLQJ SHU $60( <0 %6& %DVLF 'LPHQVLRQ 7KHRUHWLFDOO\ H[DFW YDOXH VKRZQ ZLWKRXW WROHUDQFHV 0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &% DS41412F_CN 第536 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 40 引脚塑封超薄正方扁平无脚封装 (MV) —— 主体 5x5x0.5 mm [UQFN] N注o:te: F最or新th封e 装mo图s请t c至urrhetntpt :p//awcwkawg.me idcrraowchinipg.sc,opmle/paasecksaegeintghe查M看icrMoicchroipchPiapc封ka装gi规ng范S。pecification located at http://www.microchip.com/packaging  2011-2013 Microchip Technology Inc. DS41412F_CN 第 537 页 PIC18(L)F2X/4XK22 40 引脚塑封超薄正方扁平无脚封装 (MV) —— 主体 5x5x0.5 mm [UQFN] 注: Note: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 For the most current package drawings, please see the Microchip Packaging Specification located at http://www.microchip.com/packaging DS41412F_CN 第538 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 40 引脚塑封超薄正方扁平无脚封装 (MV) —— 主体 5x5x0.5 mm [UQFN] 注: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 Note: For the most current package drawings, please see the Microchip Packaging Specification located at http://www.microchip.com/packaging  2011-2013 Microchip Technology Inc. DS41412F_CN 第 539 页 PIC18(L)F2X/4XK22 44/引H脚DG塑3封OD正VWL方F 扁4X平DG无)脚OD封W装1R(/MHDLG)3—DF—ND主JH体 08/x 8±mm[PFPN]%RG\ >4)1@ 1注R:WH )最RU新WK封H 装PR图VW请F至XUUHhQttWpS:/D/wFwNDwJ.HmGicUrDoZchLQipJ.VcoSmOH/DpVaHckVaHgHinWgKH查0看LFUMRFicKrLoSc3hiDpF封ND装JLQ规J范6S。HFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ D EXPOSED D2 PAD e E E2 b 2 2 1 1 N NOTE 1 N L K TOP VIEW BOTTOM VIEW A A3 A1 8QLWV 0,//,0(7(56 'LPHQVLRQ /LPLWV 0,1 120 1XPEHU RI 3LQV 1  3LWFK H  %6& 2YHUDOO +HLJKW $   6WDQGRII $   &RQWDFW 7KLFNQHVV $  5() 2YHUDOO :LGWK (  %6& ([SRVHG 3DG :LGWK (   2YHUDOO /HQJWK '  %6& ([SRVHG 3DG /HQJWK '   &RQWDFW :LGWK E   &RQWDFW /HQJWK /   1RWHV &RQWDFWWR([SRVHG 3DG .  ±  3LQ  YLVXDO LQGH[ IHDWXUH PD\ YDU\ EXW PXVW EH ORFDWHG ZLWKLQ WKH KDWFKHG DUHD  3DFNDJH LV VDZ VLQJXODWHG  'LPHQVLRQLQJ DQG WROHUDQFLQJ SHU $60( <0 %6& %DVLF 'LPHQVLRQ 7KHRUHWLFDOO\ H[DFW YDOXH VKRZQ ZLWKRXW WROHUDQFHV 5() 5HIHUHQFH 'LPHQVLRQ XVXDOO\ ZLWKRXW WROHUDQFH IRU LQIRUPDWLRQ SXUSRVHV RQO\ 0$;       ± 0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &% DS41412F_CN 第540 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 44引/H脚DG塑3封OD正VW方LF 扁4X平D无G )脚OD封W装1R(/MHDLG)3—DF—ND主JH体 08/x 8±mm[PFPN%] RG\ >4)1@ 1注R:WH )最RU新WK封H 装PR图V请W F至XUUhHtQtpW :S/D/wFwNDwJ.HmGicUrDoZcLhQiJpV.coSmOH/DpVaHckVaHgHinWKgH查0看LFUMRFicKrLoSc3hDipFN封DJ装LQ规J 范6S。HFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ  2011-2013 Microchip Technology Inc. DS41412F_CN 第 541 页 PIC18(L)F2X/4XK22 44引/H脚DG塑3封OD薄VW型LF正7K方LQ扁4平X封DG装)O(DWPSDTF)N — 3—7 ±主体[10x[10Px1Pm%mR,G\2 .00mPmP[T>7Q4F)P3] @ 注1R:WH )最R新U WK封H装P图RV请W F至XUUhHtQtpW:S//DwFwNwDJ.mHicGrUoDcZhLQipJ.cVo mSOH/pDaVcHkaVHgHingWK查H 0看LFMURicFrKoLSch3ipDF封ND装J规LQJ范6。SHFLILFDWLRQ ORFDWHG DW KWWSZZZPLFURFKLSFRPSDFNDJLQJ D D1 E e E1 N b NOTE 1 1 23 NOTE 2 A α c φ β A1 A2 L L1 8QLWV 'LPHQVLRQ /LPLWV 0,//,0(7(56 0,1 120 0$; 1XPEHU RI /HDGV /HDG 3LWFK 2YHUDOO +HLJKW 0ROGHG 3DFNDJH 7KLFNQHVV 1  H  %6& $ ± ±  $    6WDQGRII )RRW /HQJWK )RRWSULQW )RRW $QJOH 2YHUDOO :LGWK 2YHUDOO /HQJWK $  ±  /    /  5() I ƒ ƒ ƒ (  %6& '  %6& 0ROGHG 3DFNDJH :LGWK 0ROGHG 3DFNDJH /HQJWK (  %6& '  %6& /HDG 7KLFNQHVV F  ±  /HDG :LGWK E    0ROG 'UDIW $QJOH 7RS D ƒ ƒ ƒ 1RWHV 0ROG 'UDIW $QJOH %RWWRP E ƒ ƒ ƒ  3LQ  YLVXDO LQGH[ IHDWXUH PD\ YDU\ EXW PXVW EH ORFDWHG ZLWKLQ WKH KDWFKHG DUHD  &KDPIHUV DW FRUQHUV DUH RSWLRQDO VL]H PD\ YDU\  'LPHQVLRQV ' DQG ( GR QRW LQFOXGH PROG IODVK RU SURWUXVLRQV 0ROG IODVK RU SURWUXVLRQV VKDOO QRW H[FHHG  PP SHU VLGH  'LPHQVLRQLQJ DQG WROHUDQFLQJ SHU $60( <0 %6& %DVLF 'LPHQVLRQ 7KHRUHWLFDOO\ H[DFW YDOXH VKRZQ ZLWKRXW WROHUDQFHV 5() 5HIHUHQFH 'LPHQVLRQ XVXDOO\ ZLWKRXW WROHUDQFH IRU LQIRUPDWLRQ SXUSRVHV RQO\ 0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &% DS41412F_CN 第542 页  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 44 引脚塑封薄型正方扁平封装 (PT) —— 主体 10x10x1 mm, 2.00 mm [TQFP] 注: Note: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 For the most current package drawings, please see the Microchip Packaging Specification located at http://www.microchip.com/packaging  2011-2013 Microchip Technology Inc. DS41412F_CN 第 543 页 PIC18(L)F2X/4XK22 注: DS41412F_CN 第544 页  2011-2013 Microchip Technology Inc. 附录 A: 版本历史 版本 A (2010 年 2 月) 本文档的初始版本。 版本 B (2010 年 4 月) 更新了图 2-4、12-1 和 18-2 ;更新了寄存器 2-2、10-4、 10-5、10-7、17-2、24-1 和 24-5 ;更新了第 10.3.2 节 和第 18.8.4 节 “ 使比较器的输出与 Timer1 同步 ” ;更 新了第 27.2 节、第 27.3 节、第 27.4 节、第 27.5 节、 第 27.6 节、第 27.7 节和第 27.9 节;更新了表 27-2、 27-3、 27-4 和 27-7 ;其他少量修正。 版本 C (2010 年 7 月) 增加了 40 引脚 UQFN 图;更新了表 2 和表 1-3 (增加 了 40-UQFN 栏);更新了表 1-1 (增加了 “40 引脚 UQFN”);更新了图 27-1 ;增加了图 27-2 ;更新了表 27-6 ;增加了 40 引脚 UQFN 封装标识信息和细节;更 新了 “ 封装信息 ” 章节;更新了表 B-1 (增加了 “40 引 脚 UQFN”);更新了 “ 产品标识体系 ” 章节;其他少量 修正。 版本 D (2010 年 11 月) 将数据手册更新为新格式;修改了表 1-2、 1-3、 5-2、 10-1、 10-5、 10-6、 10-8、 10-9、 10-11、 10-14、 14-13 和寄存器 14-5 ;更新了 “ 电气特性 ” 章节。 版本 E (2012 年 1 月) 更新了第 2.5.2 节, EC 模式;更新了表 3-2 ;删除了表 3-3 ;更新了第 14.4.8 节;删除了 CM2CON 寄存器; 更 新了电气特性章节;更新了封装信息章节;更新了电气 特性图表章节;其他少量更新。 版本 F (2012 年 5 月) 少量更正。数据手册的最终版本。 PIC18(L)F2X/4XK22  2011-2013 Microchip Technology Inc. DS41412F_CN 第 545 页 PIC18(L)F2X/4XK22 附录 B: 器件差异 表 B-1 给出了本数据手册中所列器件之间的差异。 表 B-1: 器件差异 特性 (1) PIC18F23K22 PIC18F24K22 PIC18F25K22 PIC18F26K22 PIC18F43K22 PIC18F44K22 PIC18F45K22 PIC18F46K22 PIC18LF23K22 PIC18LF24K22 PIC18LF25K22 PIC18LF26K22 PIC18LF43K22 PIC18LF44K22 PIC18LF45K22 PIC18LF46K22 程序存储器 (字节) 8192 16384 32768 65536 8192 16384 32768 65536 SRAM (字节) 512 768 1536 3896 512 768 1536 3896 EEPROM (字节) 256 256 256 1024 256 256 256 1024 中断源 26 26 33 33 26 26 33 33 I/O 端口 端口 A、B、C 端口 A、 B、 C 端口 A、B、C 端口 A、 B、 C 端口 A、 B、 端口 A、 B、 端口 A、 B、 端口 A、 B、 或 (E) 或 (E) 或 (E) 或 (E) C、 D 和 E C、 D 和 E C、 D 和 E C、 D 和 E 捕捉 / 比较 /PWM 模块 2 2 2 2 2 2 2 2 (CCP) 增强型 CCP 模块 1 1 1 1 2 2 2 2 (ECCP)全桥 ECCP 模块 半桥 2 2 2 2 1 1 1 1 10 位模数转换模块 17 路输入通道 17 路输入通道 17 路输入通道 17 路输入通道 28 路输入通道 28 路输入通道 28 路输入通道 28 路输入通道 封装 28 引脚 PDIP 28 引脚 PDIP 28 引脚 PDIP 28 引脚 PDIP 40 引脚 PDIP 40 引脚 PDIP 40 引脚 PDIP 40 引脚 PDIP 28 引脚 SOIC 28 引脚 SOIC 28 引脚 SOIC 28 引脚 SOIC 40 引脚 UQFN 40 引脚 UQFN 40 引脚 UQFN 40 引脚 UQFN 28 引脚 SSOP 28 引脚 SSOP 28 引脚 SSOP 28 引脚 SSOP 44 引脚 TQFP 44 引脚 TQFP 44 引脚 TQFP 44 引脚 TQFP 28 引脚 QFN 28 引脚 QFN 28 引脚 QFN 28 引脚 QFN 44 引脚 QFN 44 引脚 QFN 44 引脚 QFN 44 引脚 QFN 28 引脚 UQFN 28 引脚 UQFN 注 1: PIC18FXXK22:工作电压为 2.3V-5.5V。 PIC18LFXXK22:工作电压为 1.8V-3.6V。 DS41412F_CN 第 546 页  2011-2013 Microchip Technology Inc. 索引 A A/D 放电.......................................................................... 302 模拟端口引脚,配置................................................. 310 相关的寄存器 ........................................................... 310 选择和配置采集时间................................................. 298 转换次数................................................................... 301 转换器特性 ............................................................... 464 ACKSTAT ........................................................................ 246 ACKSTAT 状态标志 ......................................................... 246 ADC ................................................................................. 297 采集要求................................................................... 308 参考电压 (VREF)................................................... 298 端口配置................................................................... 298 功耗管理................................................................... 302 工作原理................................................................... 301 计算采集时间 ........................................................... 308 结果格式................................................................... 300 框图.......................................................................... 297 模拟信号源阻抗........................................................ 308 内部采样开关阻抗 (RSS)....................................... 308 配置.......................................................................... 298 启动 A/D 转换........................................................... 300 特殊事件触发器........................................................ 302 通道选择................................................................... 298 休眠期间的操作........................................................ 302 中断.......................................................................... 299 转换步骤................................................................... 303 转换时钟................................................................... 299 ADCON0 寄存器 .............................................................. 304 ADCON1 寄存器 .............................................................. 305 ADCON2 寄存器 .............................................................. 306 ADDFSR .......................................................................... 416 ADDLW ............................................................................ 379 ADDWF ............................................................................ 379 ADDWFC ......................................................................... 380 ADDULNK........................................................................ 416 ADRESH 寄存器 (ADFM = 0)....................................... 307 ADRESH 寄存器 (ADFM = 1)....................................... 307 ADRESL 寄存器 (ADFM = 0)....................................... 307 ADRESL 寄存器 (ADFM = 1)....................................... 307 ANDLW ............................................................................ 380 ANDWF ............................................................................ 381 B BAUDCON 寄存器 ........................................................... 279 BC .................................................................................... 381 BCF .................................................................................. 382 BF ............................................................................ 246, 248 BF 状态标志 ............................................................. 246, 248 BN .................................................................................... 382 BNC ................................................................................. 383 BNN ................................................................................. 383 BNOV............................................................................... 384 BNZ .................................................................................. 384 BOR。请参见欠压复位。 BOV ................................................................................. 387 BRA.................................................................................. 385 BSF .................................................................................. 385 BTFSC ............................................................................. 386 BTFSS ............................................................................. 386 BTG.................................................................................. 387 BZ .................................................................................... 388  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 版本历史 .......................................................................... 545 比较器参考电压 (CVREF) 响应时间 .................................................................. 313 复位的影响............................................................... 315 比较器规范....................................................................... 444 比较器模块。请参见增强型捕捉 / 比较 /PWM (ECCP)。 C1 输出状态与输入条件........................................... 313 C2OUT 作为 T1 门控 ............................................... 166 操作 ......................................................................... 311 复位的影响............................................................... 315 相关的寄存器 ........................................................... 319 响应时间 .................................................................. 313 休眠期间的操作 ....................................................... 315 变更通知客户服务 ............................................................ 557 表读 / 表写 ......................................................................... 73 表指针操作 (表).............................................................. 98 标准指令 .......................................................................... 373 不同情形下的延时 (表)................................................... 64 捕捉 / 比较 /PWM (CCP).............................................. 179 比较模式 .................................................................. 183 CCPx 引脚配置................................................ 183 软件中断模式 ........................................... 180, 183 Timer1 模式资源 ...................................... 180, 183 特殊事件触发器 ............................................... 184 捕捉模式 .................................................................. 180 CCPx 引脚配置 ........................................................ 180 PWM 操作................................................................ 186 PWM 概述................................................................ 186 PWM 模式 分辨率.............................................................. 188 复位的影响 ...................................................... 188 PWM 频率和分辨率示例, 20 MHz ......................................................... 188 PWM 频率和分辨率示例, 32 MHz ......................................................... 188 PWM 频率和分辨率示例, 8 MHz ........................................................... 188 系统时钟频率改变............................................ 188 休眠模式下的操作............................................ 188 占空比.............................................................. 187 PWM 设置................................................................ 186 PWM 周期................................................................ 187 与比较相关的寄存器 ........................................ 184, 185 与捕捉相关的寄存器 ........................................ 181, 182 预分频器 .................................................................. 181 与 PWM 相关的寄存器............................. 189, 203, 204 捕捉模块。请参见增强型捕捉 / 比较 /PWM (ECCP)。 C CALL................................................................................ 388 CALLW ............................................................................ 417 C 编译器 MPLAB C18............................................................. 424 CCPTMRS0 寄存器 ......................................................... 208 CCPTMRS1 寄存器 ......................................................... 208 CCPxCON (ECCPx)寄存器......................................... 205 CLRF ............................................................................... 389 CLRWDT ......................................................................... 389 CM1CON0 寄存器 ........................................................... 317 CM2CON1 寄存器 ........................................................... 318 COMF .............................................................................. 390 CONFIG1H 寄存器 .......................................................... 357 CONFIG2H 寄存器 .......................................................... 359 CONFIG2L 寄存器 ........................................................... 357 DS41412F_CN 第 547 页 PIC18(L)F2X/4XK22 CONFIG3H 寄存器 ........................................................... 360 CONFIG4L 寄存器 ........................................................... 361 CONFIG5H 寄存器 ........................................................... 362 CONFIG5L 寄存器 ........................................................... 361 CONFIG6H 寄存器 ........................................................... 363 CONFIG6L 寄存器 ........................................................... 362 CONFIG7H 寄存器 ........................................................... 364 CONFIG7L 寄存器 ........................................................... 363 CPFSEQ .......................................................................... 390 CPFSGT........................................................................... 391 CPFSLT ........................................................................... 391 CTMU 测量电容................................................................... 329 测量时间................................................................... 331 产生延时................................................................... 332 初始化 ...................................................................... 323 复位的影响 ............................................................... 333 工作原理................................................................... 322 空闲模式期间的操作................................................. 332 相关的寄存器 ........................................................... 335 校准 .......................................................................... 324 休眠模式期间的操作................................................. 332 CVREF 参考电压规范 ........................................................ 444 参考电压 (VR) 规范 .......................................................................... 445 程序存储器 查找表 ........................................................................ 73 代码保护................................................................... 369 复位向量..................................................................... 69 和扩展指令集 ............................................................. 94 映射和堆栈 (图)...................................................... 70 指令 ............................................................................ 75 双字.................................................................... 75 中断向量..................................................................... 69 程序计数器 ......................................................................... 70 PCL、 PCH 和 PCU 寄存器 ....................................... 70 PCLATH 和 PCLATU 寄存器...................................... 70 程序校验和代码保护......................................................... 368 相关的寄存器 ........................................................... 368 存储器构成 程序存储器 ................................................................. 69 数据存储器 ................................................................. 76 存储区选择寄存器 (BSR)................................................ 76 D DAW................................................................................. 392 DCFSNZ........................................................................... 393 DECF ............................................................................... 392 DECFSZ........................................................................... 393 DEVID1 寄存器 ................................................................ 364 DEVID2 寄存器 ................................................................ 364 代码保护........................................................................... 355 代码示例 16 x 16 无符号乘法程序 ........................................... 112 16 x 16 有符号乘法程序 ........................................... 112 8 x 8 无符号乘法程序 ............................................... 111 8 x 8 有符号乘法程序 ............................................... 111 A/D 转换 ................................................................... 303 擦除闪存程序存储器的一行 ...................................... 100 CTMU 校准设置程序 ................................................ 325 初始化 PORTA ......................................................... 135 初始化 PORTB ......................................................... 140 初始化 PORTC......................................................... 144 初始化 PORTD......................................................... 148 初始化 PORTE ......................................................... 151 电流校准程序 ........................................................... 326 DS41412F_CN 第 548 页 电容式触摸开关程序 ................................................ 330 电容校准程序 ........................................................... 328 读闪存程序存储器的一个字 ....................................... 99 读数据 EEPROM ..................................................... 107 改变捕捉预分频比 .................................................... 181 将 STATUS、 WREG 和 BSR 寄存器的值 保存在 RAM 中 .................................................... 132 快速寄存器堆栈 ......................................................... 73 使用间接寻址清零 RAM ............................................. 90 使用偏移量值的计算 GOTO....................................... 73 数据 EEPROM 刷新程序.......................................... 108 写闪存程序存储器 ............................................. 102,103 写数据 EEPROM ..................................................... 107 单电源 ICSP 编程。 低电压 ICSP 编程。请参见单电源 ICSP 编程。 电气特性 .......................................................................... 427 定时器 Timer2/4/6 TXCON ............................................................ 177 Timer1 T1CON ............................................................ 172 T1GCON.......................................................... 173 读者反馈表....................................................................... 558 对标准 PIC 的影响 ........................................................... 420 堆栈满 / 下溢复位............................................................... 72 E ECCP/CCP。请参见增强型捕捉 / 比较 /PWM。 ECCPxAS 寄存器 ............................................................ 209 EECON1 寄存器 ........................................................ 97, 106 EUSART .......................................................................... 267 波特率发生器 (BRG) 波特率,异步模式............................................ 281 波特率误差,计算............................................ 280 高波特率选择 (BRGH 位)................................................. 280 公式 ................................................................. 280 相关的寄存器 ................................................... 281 自动波特率检测 ............................................... 284 时钟极性 同步模式 .......................................................... 288 数据极性 同步模式 .......................................................... 288 异步发送 .......................................................... 269 异步接收 .......................................................... 272 同步从模式 发送 ................................................................. 293 接收 ................................................................. 295 相关的寄存器,接收 ........................................ 295 同步主模式....................................................... 288, 293 发送 ................................................................. 288 接收 ................................................................. 291 相关的寄存器,发送 ................................ 289, 294 相关的寄存器,接收 ........................................ 292 异步模式 .................................................................. 269 12 位间隔字符发送和接收................................ 287 波特率发生器 (BRG).................................... 280 发送器.............................................................. 269 接收到间隔字符时自动唤醒 ............................. 285 接收器.............................................................. 272 设置带地址检测的 9 位模式 ............................. 274 时钟精确性....................................................... 276 相关的寄存器,发送 ........................................ 271 相关的寄存器,接收 ........................................ 275 中断 异步发送 .......................................................... 269  2011-2013 Microchip Technology Inc. 异步接收 .......................................................... 273 F 返回地址堆栈 ..................................................................... 70 返回堆栈指针 (STKPTR)................................................ 71 访问栈顶............................................................................. 71 复位 .................................................................................. 355 欠压复位 (BOR).................................................... 355 上电复位 (POR).................................................... 355 上电延时定时器 (PWRT)...................................... 355 振荡器起振定时器 (OST)...................................... 355 复位的影响 PWM 模式 ................................................................ 188 G GOTO .............................................................................. 394 高 / 低压检测 .................................................................... 349 操作 休眠期间 .......................................................... 353 电流消耗................................................................... 351 典型低压检测应用 .................................................... 352 复位的影响 ............................................................... 353 工作原理................................................................... 350 启动时间................................................................... 351 设置.......................................................................... 351 特性.......................................................................... 446 相关的寄存器 ........................................................... 353 应用.......................................................................... 352 功耗管理模式 ..................................................................... 47 对时钟源的影响.......................................................... 40 多种休眠功能 ............................................................. 48 和 A/D 操作 .............................................................. 302 汇总 (表)................................................................. 47 进入............................................................................ 47 空闲模式..................................................................... 51 PRI_IDLE ........................................................... 52 RC_IDLE............................................................ 53 SEC_IDLE ......................................................... 52 退出空闲和休眠模式................................................... 54 没有起振延时 ..................................................... 54 通过复位 ............................................................ 54 通过 WDT 超时 .................................................. 54 通过中断 ............................................................ 54 休眠模式..................................................................... 51 选择............................................................................ 47 运行模式..................................................................... 48 PRI_RUN ........................................................... 48 SEC_RUN.......................................................... 48 功耗管理模式对各种时钟源的影响 ..................................... 40 固定参考电压 (FVR) 相关的寄存器 ........................................................... 344 故障保护时钟监视器................................................... 44, 355 复位或从休眠中唤醒................................................... 44 故障保护操作 ............................................................. 44 故障保护检测 ............................................................. 44 故障保护条件清除 ...................................................... 44 H HLVD。请参见高 / 低压检测。.......................................... 349 汇编器 MPASM 汇编器 ........................................................ 424 I I2C 模式 (MSSPx) 从模式 发送.................................................................. 232  2011-2013 Microchip Technology Inc. PIC18(L)F2X/4XK22 读 / 写位信息 (R/W 位)......................................... 227 多主器件模式 ........................................................... 251 多主器件通信、总线冲突和仲裁 .............................. 252 复位的影响............................................................... 251 使用 BRG 的 I2C 时钟速率....................................... 258 停止条件时序 ........................................................... 250 休眠模式下的操作.................................................... 251 应答序列时序 ........................................................... 250 主模式 操作 ................................................................. 242 发送 ................................................................. 246 接收 ................................................................. 248 启动条件时序 ........................................... 244, 245 总线冲突 停止条件期间 ................................................... 256 重复启动条件期间............................................ 255 ID 存储单元.............................................................. 355, 371 J 寄存器 ADCON0 (ADC 控制 0)........................................ 304 ADCON1 (ADC 控制 1)........................................ 305 ADCON2 (ADC 控制 2)........................................ 306 ADRESH (ADC 结果高字节, ADFM = 0)......................................................... 307 ADRESH (ADC 结果高字节, ADFM = 1)......................................................... 307 ADRESL (ADC 结果低字节, ADFM = 0)......................................................... 307 ADRESL (ADC 结果低字节, ADFM = 1)......................................................... 307 BAUDCON (波特率控制)..................................... 279 BAUDCON (EUSART 波特率控制)...................................... 279 CCPTMRS0 (PWM 定时器 选择控制 0)........................................................ 208 CCPTMRS1 (PWM 定时器 选择控制 1)........................................................ 208 CCPxCON (ECCPx 控制).................................... 205 CM1CON0 (C1 控制)........................................... 317 CM2CON1 (C2 控制)........................................... 318 CONFIG1H (配置 1 高字节)................................. 357 CONFIG2H (配置 2 高字节)................................. 359 CONFIG2L (配置 2 低字节).................................. 357 CONFIG3H (配置 3 高字节)................................. 360 CONFIG4L (配置 4 低字节).................................. 361 CONFIG5H (配置 5 高字节)................................. 362 CONFIG5L (配置 5 低字节).................................. 361 CONFIG6H (配置 6 高字节)................................. 363 CONFIG6L (配置 6 低字节).................................. 362 CONFIG7 (配置 7 低字节).................................... 363 CONFIG7 (配置 7 高字节).................................... 364 CTMUCONH (CTMU 控制高字节).......................................... 333 CTMUCONL (CTMU 控制低字节).......................................... 334 CTMUICON (CTMU 电流控制).............................................. 335 DEVID1 (器件 ID 1).............................................. 364 DEVID2 (器件 ID 2).............................................. 364 ECCPxAS (CCPx 自动关闭控制)......................... 209 EECON1 (数据 EEPROM 控制 1)......................................................... 97, 106 HLVDCON (高 / 低压检测控制)............................ 349 INTCON (中断控制)............................................. 116 INTCON2 (中断控制 2)........................................ 117 DS41412F_CN 第 549 页 PIC18(L)F2X/4XK22 INTCON3 (中断控制 3)......................................... 118 IPR1 (外设中断优先级 1)...................................... 128 IPR2 (外设中断优先级 2)...................................... 129 IPR3 (外设中断优先级 3)...................................... 130 IPR4 (外设中断优先级 4)...................................... 131 IPR5 (外设中断优先级 5)...................................... 131 OSCCON (振荡器控制).................................... 32, 33 OSCTUNE (振荡器调节)........................................ 37 PIE1 (外设中断允许 1).......................................... 124 PIE2 (外设中断允许 2).......................................... 125 PIE3 (外设中断允许 3).......................................... 126 PIE4 (外设中断允许 4).......................................... 127 PIE5 (外设中断允许 5).......................................... 127 PIR1 (外设中断请求 1)......................................... 119 PIR2 (外设中断请求 2)......................................... 120 PSTRxCON (PWM 转向控制).............................. 210 PWMxCON (增强型 PWM 控制)........................... 210 RCON (复位控制)........................................... 60, 131 RCREG 寄存器 ........................................................ 284 RCSTA (接收状态和控制寄存器).......................... 278 SLRCON (端口压摆率控制).................................. 158 SRCON0 (SR 锁存器控制 0)................................ 340 SRCON1 (SR 锁存器控制 1)................................ 341 SSPxADD (MSSPx 地址和波特率, I2C 模式)............................................................ 265 SSPxCON1 (MSSPx 控制 1)................................ 260 SSPxCON2 (SSPx 控制 2)................................... 262 SSPxMSK (SSPx 掩码)........................................ 264 SSPxSTAT (SSPx 状态)....................................... 259 STATUS..................................................................... 89 STKPTR (堆栈指针)............................................... 72 T0CON (Timer0 控制).......................................... 159 T1CON (Timer1 控制).......................................... 172 T1GCON (Timer1 门控控制)................................ 173 TXCON .................................................................... 177 TXSTA (发送状态和控制寄存器).......................... 277 WDTCON (看门狗定时器控制)............................. 367 VREFCON0 ............................................................. 344 VREFCON1 ............................................................. 347 VREFCON2 ............................................................. 348 寄存器的复位状态 .............................................................. 67 寄存器文件 ......................................................................... 82 计算 GOTO ........................................................................ 73 间隔字符 (12 位)发送和接收 ........................................ 287 间接寻址............................................................................. 91 交流特性 内部 RC 精度.................................................................... 450 交流 (时序)特性 ........................................................... 447 参数符号体系 ........................................................... 447 器件时序规范的负载条件 ......................................... 448 时序条件................................................................... 448 温度和电压规范 ........................................................ 448 接收到间隔字符时唤醒 ..................................................... 285 绝对最大值 ....................................................................... 427 K 开发支持........................................................................... 423 看门狗定时器 (WDT)............................................ 355, 366 编程注意事项 ........................................................... 366 控制寄存器 ............................................................... 367 相关的寄存器 ........................................................... 367 勘误表 ................................................................................ 12 客户通知服务.................................................................... 557 客户支持........................................................................... 557 快速操作存储区 在立即数变址寻址模式下映射 .................................... 94 DS41412F_CN 第 550 页 快速寄存器堆栈.................................................................. 72 框图 (CCP)捕捉模式工作原理 ...................................... 180 ADC ......................................................................... 297 ADC 传递函数.......................................................... 309 比较模式工作原理 .................................................... 183 比较器 1 ................................................................... 312 表读操作 .................................................................... 95 表写操作 .................................................................... 96 CCP PWM ............................................................... 186 CTMU ...................................................................... 321 CTMU 电流源校准电路 ............................................ 324 参考电压 .................................................................. 343 参考电压输出缓冲示例............................................. 346 产生脉冲延时的 CTMU 典型连接和内部配置 ............................................ 332 带外部输入的高 / 低压检测 ...................................... 350 读闪存程序存储器 ...................................................... 99 对闪存程序存储器的表写操作 .................................. 101 EUSART 发送 .......................................................... 267 EUSART 接收 .......................................................... 268 故障保护时钟监视器 (FSCM)................................. 44 晶振的工作原理 ......................................................... 35 看门狗定时器 ........................................................... 366 模拟输入模型 ................................................... 309, 315 PIC18F46K22 ............................................................ 16 PWM (增强型)...................................................... 190 片上复位电路 ............................................................. 59 时间测量的 CTMU 典型连接 和内部配置........................................................... 331 数模转换器 (DAC)................................................ 346 Timer0 (16 位模式)............................................... 161 Timer0 (8 位模式)................................................. 160 Timer2/4/6 ............................................................... 175 Timer1 ..................................................................... 163 Timer1 门控 ............................................. 169, 170, 171 通用 I/O 端口............................................................ 135 外部 POR 电路 (VDD 缓慢上电的情况)......................................... 61 外部 RC 模式 ............................................................. 36 谐振器的工作原理 ...................................................... 35 中断逻辑 .................................................................. 114 扩展指令集 ADDFSR .................................................................. 416 ADDULNK................................................................ 416 CALLW .................................................................... 417 和使用 MPLAB 工具................................................. 422 MOVSF .................................................................... 417 MOVSS.................................................................... 418 PUSHL..................................................................... 418 SUBFSR .................................................................. 419 SUBULNK................................................................ 419 使用注意事项 ........................................................... 420 语法 ......................................................................... 415 L LFSR................................................................................ 397 立即数变址模式................................................................ 420 立即数变址寻址 和标准 PIC18 指令 ................................................... 420 M MOVF .............................................................................. 397 MOVFF ............................................................................ 398 MOVLB .................................................