PIC18F97J60 系列 数据手册 带有以太网模块的 64/80/100 引脚高性能 1 Mb 闪存单片机 2006 Microchip Technology Inc. 超前信息 DS39762A_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 知识 产权保护下,不得暗中或以其他方式转让任何许可证。 商标 Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron、 dsPIC、 KEELOQ、 microID、 MPLAB、 PIC、 PICmicro、 PICSTART、 PRO MATE、 PowerSmart、 rfPIC 和 SmartShunt 均为 Microchip Technology Inc. 在美国和其他国 家或地区的注册商标。 AmpLab、 FilterLab、 Migratable Memory、 MXDEV、 MXLAB、SEEVAL、SmartSensor 和 The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的 注册商标。 Analog-for-the-Digital Age、 Application Maestro、 CodeGuard、 dsPICDEM、 dsPICDEM.net、 dsPICworks、 ECAN、 ECONOMONITOR、 FanSense、 FlexROM、 fuzzyLAB、In-Circuit Serial Programming、ICSP、ICEPIC、 Linear Active Thermistor、 Mindi、 MiWi、 MPASM、 MPLIB、 MPLINK、 PICkit、 PICDEM、 PICDEM.net、 PICLAB、 PICtail、 PowerCal、 PowerInfo、 PowerMate、 PowerTool、 REAL ICE、 rfLAB、 rfPICDEM、 Select Mode、 Smart Serial、 SmartTel、 Total Endurance、 UNI/O、 WiperLock和ZENA均为Microchip Technology Inc.在美国和其 他国家或地区的商标。 SQTP 是 Microchip Technology Inc. 在美国的服务标记。 在此提及的所有其他商标均为各持有公司所有。 © 2006, Microchip Technology Inc. 版权所有。 Microchip 位于美国亚利桑那州 Chandler 和 Tempe、位于俄勒冈州 Gresham 及位于加利福尼亚州 Mountain View 的全球总部、设计中心和 晶圆生产厂均通过了 ISO/TS-16949:2002 认证。公司在 PIC® 8 位单片 机、 KEELOQ® 跳码器件、串行 EEPROM、单片机外设、非易失性存储 器和模拟产品方面的质量体系流程均符合 ISO/TS-16949:2002。此外, Microchip 在开发系统的设计和生产方面的质量体系也已通过了 ISO 9001:2000 认证。 DS39762A_CN 第 ii 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 带有以太网模块的 64/80/100 引脚 高性能 1 Mb 闪存单片机 以太网特性: 外设特点: IEEE 802.3 兼容的以太网控制器 集成 MAC 和 10Base-T PHY 8 KB 发送 / 接收数据包缓冲区 SRAM 支持一个带自动极性检测和校正的 10Base-T 端口 在发生冲突时可编程自动重发 可编程填充和 CRC 生成 可编程自动拒绝错误数据包 可驱动 2 个 LED 指示器的活动输出信号 缓冲器: - 可配置发送 / 接收缓冲区大小 - 硬件管理的循环接收 FIFO - 字节宽度的随机访问和顺序访问 - 用于快速数据传送的内部 DMA - 支持各种协议的硬件校验和计算 • MAC: - 支持单播、组播和广播数据包 - 多达 64 字节的可编程模式匹配 (偏移量可由用 户定义) - 多个数据包格式的可编程唤醒 • PHY: - 整形输出滤波器 - 环回模式 • • • • • 灵活的振荡器结构: 单片机特性: • 可选择的系统时钟,来自单个 25 MHz 外部时钟源: • 最大容许输入电压为 5.5V (仅限数字引脚) • 低功耗、高速 CMOS 闪存技术: • • • • • • • • • - 2.78 到 41.67 MHz • 内部 31 kHz 振荡器 • 辅助振荡器使用 Timer1 (工作频率为 32 kHz) • 故障保护时钟监视器: • • • • • - 可在软件控制下自行重新编程 • 为重入代码优化的 C 编译器架构 • 功耗管理特性: - 当振荡器停止工作时可使器件安全断电 • 双速振荡器启动 外部存储器总线 (仅限 100 引脚器件): • 地址容量最高可达 2 MB • 8 位或 16 位接口 • 12 位、 16 位和 20 位寻址模式 • • • • • • • 2006 Microchip Technology Inc. 高灌 / 拉电流:在 PORTB 和 PORTC 上为 25 mA/25 mA 5 个定时器模块 (Timer0 到 Timer4) 4 个外部中断引脚 2 个捕捉 / 比较 /PWM (CCP)模块 3 个增强型捕捉 / 比较 /PWM (ECCP)模块: - 1、 2 或 4 路 PWM 输出 - 可选择极性 - 可编程死区延时 - 自动关闭和自动重启 多达 2 个主控同步串行口(Master Synchronous Serial Port, MSSP)模块,支持 SPI (所有 4 种模式)和 I2C™ 主 / 从模式 多达 2 个增强型 USART 模块: - 支持 RS-485、 RS-232 和 LIN 1.2 - 启动位自动唤醒 - 自动波特率检测 多达 16 路通道的 10 位模数转换器模块 (A/D): - 自动采样功能 - 可在休眠模式下进行转换 输入复用的双模拟比较器 并行从动端口 (Parallel Slave Port, PSP)模块 (仅限 100 引脚器件) 超前信息 - 运行:CPU 工作,外设打开 - 空闲:CPU 不工作,外设打开 - 休眠:CPU 不工作,外设关闭 中断优先级 8 x 8 单周期硬件乘法器 扩展型看门狗定时器 (Watchdog Timer, WDT): - 可编程周期从 4 ms 到 134s 通过两个引脚进行单电源 3.3V 在线串行编程 (InCircuit Serial Programming™, ICSP™) 通过两个引脚进行带有 3 个断点的在线调试 (InCircuit Debug, ICD) 工作电压范围为 2.35V 到 3.6V(使用以太网模块时为 3.14V 到 3.45V) 片上 2.5V 稳压器 DS39762A_CN 第 1 页 I/O MSSP 10 位 CCP/ A/D ECCP (通道) 主控 I2C™ SPI 8/16 位 定时器 PSP 外部 存储器总线 器件 SRAM 以太网 TX/RX 数据 存储器 缓冲区 (字节) (字节) 比较器 闪存程序 存储器 (字节) EUSART PIC18F97J60 系列 PIC18F66J60 64K 3808 8192 39 11 2/3 1 有 有 1 2 2/3 无 无 PIC18F66J65 96K 3808 8192 39 11 2/3 1 有 有 1 2 2/3 无 无 PIC18F67J60 128K 3808 8192 39 11 2/3 1 有 有 1 2 2/3 无 无 PIC18F86J60 64K 3808 8192 55 15 2/3 1 有 有 2 2 2/3 无 无 PIC18F86J65 96K 3808 8192 55 15 2/3 1 有 有 2 2 2/3 无 无 PIC18F87J60 128K 3808 8192 55 15 2/3 1 有 有 2 2 2/3 无 无 PIC18F96J60 64K 3808 8192 70 16 2/3 2 有 有 2 2 2/3 有 有 PIC18F96J65 96K 3808 8192 70 16 2/3 2 有 有 2 2 2/3 有 有 PIC18F97J60 128K 3808 8192 70 16 2/3 2 有 有 2 2 2/3 有 有 引脚示意图 VDDTX TPOUT- TPOUT+ VSSTX RBIAS VDDPLL VDD VSS VSSPLL RD2/CCP4/P3D RD0/P1B RD1/ECCP3/P3A RE5/P1C RE4/P3B RE3/P3C RE2/P2B 64 引脚 TQFP 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 RE1/P2C RE0/P2D RF4/AN9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 RF3/AN8 RF2/AN7/C1OUT 15 16 RB0/INT0/FLT0 RB1/INT1 RB2/INT2 RB3/INT3 MCLR RG4/CCP5/P1D VSS VDDCORE/VCAP RF7/SS1 RF6/AN11 RF5/AN10/CVREF 48 47 46 45 44 43 42 41 40 PIC18F66J60 PIC18F66J65 PIC18F67J60 39 38 37 36 35 34 33 VDDRX TPIN+ TPINVSSRX RB4/KBI0 RB5/KBI1 RB6/KBI2/PGC VSS OSC2/CLKO OSC1/CLKI VDD RB7/KBI3/PGD RC5/SDO1 RC4/SDI1/SDA1 RC3/SCK1/SCL1 RC2/ECCP1/P1A DS39762A_CN 第 2 页 RC7/RX1/DT1 RC6/TX1/CK1 RC0/T1OSO/T13CKI RA4/T0CKI RC1/T1OSI/ECCP2/P2A VDD 超前信息 RA5/AN4 VSS RA0/LEDA/AN0 RA1/LEDB/AN1 RA2/AN2/VREF- AVSS RA3/AN3/VREF+ AVDD ENVREG RF1/AN6/C2OUT 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 2006 Microchip Technology Inc. PIC18F97J60 系列 引脚示意图 (续) VDDTX TPOUT- TPOUT+ VSSTX RBIAS VDDPLL VSSPLL RD2 RD1 VSS VDD RD0 RE7/ECCP2(1)/P2A(1) RE6/P1B(2) RE5/P1C(2) RE4/P3B(2) RE3/P3C(2) RE2/P2B RH0 RH1 80 引脚 TQFP 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 RH2 RH3 1 60 2 RE1/P2C RE0/P2D 3 59 58 57 RB0/INT0/FLT0 RB1/INT1 RB2/INT2 RB3/INT3 MCLR RG4/CCP5/P1D VSS VDDCORE/VCAP RF7/SS1 RF6/AN11 RF5/AN10/CVREF RF4/AN9 RF3/AN8 RF2/AN7/C1OUT RH7/AN15/P1B(2) RH6/AN14/P1C(2) 4 5 6 7 8 9 56 55 54 53 52 51 50 PIC18F86J60 PIC18F86J65 PIC18F87J60 10 11 12 13 14 15 16 49 48 47 46 45 17 18 19 20 44 43 42 41 VDDRX TPIN+ TPINVSSRX RG0/ECCP3/P3A RG1/TX2/CK2 RB4/KBI0 RB5/KBI1 RB6/KBI2/PGC VSS OSC2/CLKO OSC1/CLKI VDD RB7/KBI3/PGD RC5/SDO1 RC4/SDI1/SDA1 RC3/SCK1/SCL1 RC2/ECCP1/P1A RG2/RX2/DT2 RG3/CCP4/P3D RJ5 RJ4 RC7/RX1/DT1 RC6/TX1/CK1 RC0/T1OSO/T13CKI RA4/T0CKI RC1/T1OSI/ECCP2(1)/P2A(1) RA5/AN4 VDD VSS RA0/LEDA/AN0 RA1/LEDB/AN1 RA2/AN2/VREF- AVSS RA3/AN3/VREF+ AVDD ENVREG RF1/AN6/C2OUT RH5/AN13/P3B(2) RH4/AN12/P3C(2) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 引脚排列为最早的版本,可能会有变化。 注 1: ECCP2/P2A 引脚位置取决于 CCP2MX 配置位设置。 2: P1B、 P1C、 P3B 和 P3C 引脚位置取决于 ECCPMX 配置位设置。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 3 页 PIC18F97J60 系列 引脚示意图 (续) RH2/A18 RH3/A19 RE1/AD9/WR/P2C RE0/AD8/RD/P2D RB0/INT0/FLT0 RB1/INT1 RB2/INT2 RB3/INT3/ECCP2(1)/P2A(1) NC RG6 RG5 RF0/AN5 MCLR RG4/CCP5/P1D Vss Vddcore/Vcap VDD RF7/SS1 RF6/AN11 RF5/AN10/CVREF RF4/AN9 RF3/AN8 RF2/AN7/C1OUT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 PIC18F96J60 PIC18F96J65 PIC18F97J60 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 VDDRX TPIN+ TPINVSSRX RG0/ECCP3/P3A RG1/TX2/CK2 RB4/KBI0 RB5/KBI1 RB6/KBI2/PGC RJ2/WRL VSS OSC2/CLKO OSC1/CLKI VDD RJ3/WRH VSS VDD RJ6/LB RB7/KBI3/PGD RC5/SDO1 RC4/SDI1/SDA1 RC3/SCK1/SCL1 RC2/ECCP1/P1A RG2/RX2/DT2 RG3/CCP4/P3D RA5/AN4 RA4/T0CKI RC1/T1OSI/ECCP2(1)/P2A(1) RC0/T1OSO/T13CKI RC6/TX1/CK1 RC7/RX1/DT1 RJ4/BA0 RJ5/CE RJ0/ALE RJ1/OE RG7 RJ7/UB VSS RA1/LEDB/AN1 RA0/LEDA/AN0 VSS VDD RH5/AN13/P3B(2) RH4/AN12/P3C(2) RF1/AN6/C2OUT ENVREG AVDD AVSS RA3/AN3/VREF+ RA2/AN2/VREF- 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 RH7/AN15/P1B(2) RH6/AN14/P1C(2) 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 RH1/A17 RH0/A16 RE2/AD10/CS/P2B RE3/AD11/P3C(2) RE4/AD12/P3B(2) RE5/AD13/P1C(2) RE6/AD14/P1B(2) RE7/AD15/ECCP2(1)/P2A(1) RD0/AD0/PSP0 RD1/AD1/PSP1 RD2/AD2/PSP2 RD3/AD3/PSP3 RD4/AD4/PSP4/SDO2 RD5/AD5/PSP5/SDI2/SDA2 VDD VSS RD6/AD6/PSP6/SCK2/SCL2 RD7/AD7/PSP7/SS2 VSSPLL VDDPLL RBIAS VSSTX TPOUT+ TPOUTVDDTX 100 引脚 TQFP 引脚排列为最早的版本,可能会有变化。 注 1: ECCP2/P2A 引脚位置取决于 CCP2MX 配置位和处理器模式设置。 2: P1B、 P1C、 P3B 和 P3C 引脚位置取决于 ECCPMX 配置位设置。 DS39762A_CN 第 4 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 目录 1.0 器件概述 ....................................................................................................................................................................................... 7 2.0 振荡器配置 ................................................................................................................................................................................. 39 3.0 功耗管理模式.............................................................................................................................................................................. 45 4.0 复位 ............................................................................................................................................................................................ 53 5.0 存储器构成 ................................................................................................................................................................................. 67 6.0 闪存程序存储器 .......................................................................................................................................................................... 95 7.0 外部存储器总线 ........................................................................................................................................................................ 105 8.0 8 x 8 硬件乘法器....................................................................................................................................................................... 117 9.0 中断 .......................................................................................................................................................................................... 119 10.0 I/O 端口 .................................................................................................................................................................................... 135 11.0 Timer0 模块 .............................................................................................................................................................................. 163 12.0 Timer1 模块 .............................................................................................................................................................................. 167 13.0 Timer2 模块 .............................................................................................................................................................................. 173 14.0 Timer3 模块 .............................................................................................................................................................................. 175 15.0 Timer4 模块 .............................................................................................................................................................................. 179 16.0 捕捉 / 比较 /PWM (CCP)模块............................................................................................................................................... 181 17.0 增强型捕捉 / 比较 /PWM (ECCP)模块 ................................................................................................................................. 189 18.0 以太网模块 ............................................................................................................................................................................... 205 19.0 主控同步串行口 (MSSP)模块............................................................................................................................................... 255 20.0 增强型通用同步 / 异步收发器 (EUSART).............................................................................................................................. 301 21.0 10 位模数转换器 (A/D)模块.................................................................................................................................................. 325 22.0 比较器模块 ............................................................................................................................................................................... 335 23.0 比较器参考电压模块 ................................................................................................................................................................. 341 24.0 CPU 的特殊功能....................................................................................................................................................................... 345 25.0 指令集汇总 ............................................................................................................................................................................... 359 26.0 开发支持 ................................................................................................................................................................................... 409 27.0 电气特性 ................................................................................................................................................................................... 413 28.0 直流和交流特性图表 ................................................................................................................................................................. 449 29.0 封装信息 ................................................................................................................................................................................... 451 附录 A: 版本历史 ............................................................................................................................................................................ 455 附录 B: 器件差异 ............................................................................................................................................................................ 455 索引 .................................................................................................................................................................................................... 457 Microchip 网站.................................................................................................................................................................................... 469 变更通知客户服务 .............................................................................................................................................................................. 469 客户支持............................................................................................................................................................................................. 469 读者反馈表 ......................................................................................................................................................................................... 470 产品标识体系 ..................................................................................................................................................................................... 471 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 5 页 PIC18F97J60 系列 致客户 我们旨在提供最佳文档供客户正确使用 Microchip 产品。为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版物的质量将随新文档及更新版本的推出而得到提升。 如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 [email protected],或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。 最新数据手册 欲获得本数据手册的最新版本,请查询我公司的网站: http://www.microchip.com 查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号,例如:DS30000A是DS30000 的 A 版本。 勘误表 现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。 欲了解某一器件是否存在勘误表,请通过以下方式之一查询: • Microchip 网站 http://www.microchip.com • 当地 Microchip 销售办事处 (见最后一页) 在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。 客户通知系统 欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。 DS39762A_CN 第 6 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 1.0 器件概述 内部振荡器模块还提供了一个稳定的参考源,增加了以 下功能以使器件更安全地工作: 本文档涉及以下器件的具体信息: • PIC18F66J60 • PIC18F87J60 • PIC18F66J65 • PIC18F96J60 • PIC18F67J60 • PIC18F96J65 • PIC18F86J60 • PIC18F97J60 • 故障保护时钟监视器:该部件持续监视主时钟源, 将其与内部振荡器提供的参考信号作比较。如果时 钟发生了故障,单片机会将时钟源切换到内部振荡 器,使器件可继续低速工作或安全地关闭应用。 • 双速启动:该功能允许在上电复位或从休眠模式唤 醒时将内部振荡器用作时钟源,直到主时钟源可用 为止。 • PIC18F86J65 PIC18F97J60 是新面世的低压产品系列,继承了 PIC18 单片机的传统优点(即出色的计算性能、丰富的功能集 以及极具竞争力的价格)。这些特点使得 PIC18F97J60 系列成为许多高性能,尤其是那些成本作为首要考虑因 素的应用的理想选择。 1.1 1.1.1 内核特性 纳瓦技术 • 备用运行模式:通过将 Timer1 或内部 RC 振荡器作 为单片机时钟源,可使代码执行时的功耗降低大约 90%。 • 多种空闲模式:单片机还可工作在其 CPU 内核禁 止而外设仍然工作的情况下。处于这些状态时,功 耗能降得更低,只有正常工作时的 4%。 • 动态模式切换:在器件工作期间可由用户代码调用 功耗管理模式,允许用户将节能的理念融入到他们 的应用软件设计中。 1.1.4 外部存储器总线 即使万一 (这种情况很少发生) 128 KB 的存储器对于 某种应用不够用, PIC18F97J60 系列的 100 引脚器件 还实现了外部存储器总线。这使单片机的内部程序计数 器的寻址空间可以扩展到高达 2 MB,为用户提供 8 位 器件很少能达到的数据访问水平。这使得有更多的存储 器选项可供选择,包括: • 使用外部闪存来存储可再编程应用程序代码或大数 据表 • 使用外部 RAM 器件存储大量的变量数据 PIC18F97J60 系列的所有器件可提供 5 个不同的振荡器 选项,使用户在开发应用硬件时有很大的选择范围。这 些选择包括: 2006 Microchip Technology Inc. PIC18F97J60 系列为应用程序代码提供了充足的空间 ——从 64 KB 到 128 KB。程序存储器的闪存单元经测 评最多可承受 100 次擦写。在不刷新的情况下,数据保 存期保守地估计在 20 年以上。 • 片上和外部存储器结合使用,存储容量最多可达 2 MB 振荡器选项和特性 • 2 种晶振模式,使用晶振或陶瓷谐振器。 • 2 种外部时钟模式,提供 4 分频时钟输出选项。 • 1 个锁相环 (Phase Lock Loop, PLL)倍频器, 可在外部振荡器模式下使用,可使时钟速度最高达 到 41.67 MHz。 • 具有固定的 31 kHz 输出的 RC 振荡器,为对时序不 敏感的应用提供一个极低功耗的选择。 扩展存储器 PIC18F97J60 系列还为动态应用程序数据提供了充足 的空间——3808 字节的数据 RAM。 PIC18F97J60 系列的所有器件具有一系列能在工作时显 著降低功耗的功能。主要包含以下几项: 1.1.2 1.1.3 1.1.5 扩展指令集 PIC18F97J60 系列在 PIC18 指令集的基础上进行了可 选择的扩展,添加了 8 条新指令和一个变址寻址模式。 此扩展可以使用一个器件配置选项使能,它是为优化重 入应用程序代码而特别设计的,这些代码原来是使用高 级语言 (如 C 语言)开发的。 1.1.6 移植方便 无论存储器容量如何,所有器件都共享相同的丰富外 设,使应用程序的扩展和升级工作变得轻松而容易。 超前信息 DS39762A_CN 第 7 页 PIC18F97J60 系列 1.2 其他特殊功能 • 通信:PIC18F97J60 系列包括一系列串行通信外 设,包括多至 2 个的独立增强型 USART 和多至 2 个的主控 SSP 模块,能够进行 SPI 和 I2C™ (主 控和从动)模式操作。此外,通用 I/O 端口中有一 个可重新配置为 8 位并行从动端口,用于进行直 接的处理器间通信。 • CCP 模块:本系列的所有器件都包括 2 个捕捉 / 比 较 /PWM (CCP) 模块和 3 个增强型 CCP (ECCP) 模块,可方便灵活地实现控制应用。在同一时间, 最多可以使用 4 种不同时基来执行几项不同的操 作。 3 个 ECCP 模块中的每一个最多都可提供 4 路 PWM 输出,从而总共可有 12 路 PWM。 ECCP 模块还提供许多有用功能,包括极性选择、 可编程死区延时、自动关闭与重启,以及半桥与全 桥输出模式。 • 10 位 A/D 转换器 :该模块具备可编程采集时间, 从而不必在选择通道和启动转换之间等待一个采样 周期,因而减少了代码开销。 • 扩展型看门狗定时器 (WDT):该增强型版本加 入了一个 16 位预分频器,可以保证扩展的超时范 围在工作电压和温度变化时保持稳定。超时周期请 参见第 27.0 节 “电气特性”。 DS39762A_CN 第 8 页 1.3 系列中各产品的详细说明 PIC18F97J60 系列器件以 64 引脚、 80 引脚和 100 引 脚封装形式提供。图 1-1、图 1-2 和图 1-3 分别为这三 类器件的框图。 这些器件在以下四个方面存在差异: 1. 2. 3. 4. 闪存程序存储器(3种大小,范围从PIC18FX6J60 器件的 64 KB 到 PIC18FX7J60 器件的 128 KB)。 A/D 通道数(64 引脚器件有 11 路,80 引脚器件 有 15 路, 100 引脚器件有 16 路)。 串行通信模块数(64 引脚器件上有 1 个 EUSART 模块和 1 个 MSSP 模块, 80 引脚器件上有 2 个 EUSART 模块和 1 个 MSSP 模块, 100 引脚器 件上有 2 个 EUSART 模块和 2 个 MSSP 模块)。 I/O 引脚数(64 引脚器件上 39 个,80 引脚器件 上 55 个, 100 引脚器件上 70 个)。 本系列器件的所有其他功能都是相同的。表 1-1、表 1-2 和表 1-3 中总结了这些功能。 表 1-4、表 1-5 和表 1-6 给出了本系列中所有器件的引 脚说明。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-1: PIC18F97J60 系列器件特性 (64 引脚器件) PIC18F66J60 PIC18F66J65 PIC18F67J60 DC – 41.67 MHz DC – 41.67 MHz DC – 41.67 MHz 程序存储器 (字节数) 64K 96K 128K 程序存储器 (指令数) 32764 49148 65532 特性 工作频率 3808 数据存储器 (字节数) 中断源 26 I/O 端口 端口 A, B, C, D, E, F, G I/O 引脚 39 定时器 5 捕捉 / 比较 /PWM 模块 2 增强型捕捉 / 比较 /PWM 模块 3 MSSP (1) 和增强型 USART (1) 串行通信 以太网通信 (10Base-T) 有 并行从动端口通信 (PSP) 无 外部存储器总线 无 10 位模数转换模块 11 路输入通道 POR、 BOR、 RESET 指令、堆栈满、 堆栈下溢、 MCLR 和 WDT (PWRT 和 OST) 复位 (和延时) 75 条指令,使能扩展指令集后总共为 83 条指令 指令集 64 引脚 TQFP 封装 表 1-2: PIC18F97J60 系列器件特性 (80 引脚器件) 特性 工作频率 PIC18F86J60 PIC18F86J65 PIC18F87J60 DC – 41.67 MHz DC – 41.67 MHz DC – 41.67 MHz 程序存储器 (字节数) 64K 96K 128K 程序存储器 (指令数) 32764 49148 65532 3808 数据存储器 (字节数) 中断源 27 I/O 端口 I/O 引脚 端口 A, B, C, D, E, F, G, H, J 55 定时器 5 捕捉 / 比较 /PWM 模块 2 增强型捕捉 / 比较 /PWM 模块 3 MSSP (1) 和增强型 USART (2) 串行通信 以太网通信 (10Base-T) 有 并行从动端口通信 (PSP) 无 外部存储器总线 无 10 位模数转换模块 复位 (和延时) 指令集 15 路输入通道 POR、 BOR、 RESET 指令、堆栈满、 堆栈下溢、 MCLR 和 WDT (PWRT 和 OST) 75 条指令,使能扩展指令集后总共为 83 条指令 80 引脚 TQFP 封装 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 9 页 PIC18F97J60 系列 表 1-3: PIC18F97J60 系列器件特性 (100 引脚器件) PIC18F96J65 PIC18F97J60 PIC18F86J10 DC – 41.67 MHz DC – 41.67 MHz DC – 41.67 MHz 程序存储器 (字节数) 64K 96K 128K 程序存储器 (指令数) 32764 49148 65532 特性 工作频率 3808 数据存储器 (字节数) 中断源 29 I/O 端口 I/O 引脚 端口 A, B, C, D, E, F, G, H, J 70 定时器 5 捕捉 / 比较 /PWM 模块 2 增强型捕捉 / 比较 /PWM 模块 3 MSSP (2) 和增强型 USART (2) 串行通信 以太网通信 (10Base-T) 有 并行从动端口通信 (PSP) 有 外部存储器总线 有 10 位模数转换模块 复位 (和延时) 指令集 16 路输入通道 POR、 BOR、 RESET 指令、堆栈满、 堆栈下溢、 MCLR 和 WDT (PWRT 和 OST) 75 条指令,使能扩展指令集后总共为 83 条指令 100 引脚 TQFP 封装 DS39762A_CN 第 10 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 1-1: PIC18F66J60/66J65/67J60 (64 引脚)框图 数据总线 <8> 表指针 <21> 20 RA0:RA5(1) 数据存储器 (3808 字节) PCLATU PCLATH 21 PORTA 数据锁存器 8 8 加 / 减逻辑 地址锁存器 PCU PCH PCL 程序计数器 12 数据地址 <12> PORTB RB0:RB7(1) 31 级堆栈 4 BSR 地址锁存器 STKPTR 程序存储器 (64、96 或 128 KB) 4 12 FSR0 FSR1 FSR2 快速操作 存储区 12 数据锁存器 8 表锁存器 地址 译码 ROM 锁存器 指令总线 <16> PORTC RC0:RC7(1) 加/减 逻辑 PORTD RD0:RD2(1) IR 8 状态机 控制信号 指令 译码与 控制 OSC2/CLKO OSC1/CLKI PRODH PRODL 3 上电延时 定时器 时序 发生 振荡器 起振定时器 INTRC 振荡器 看门狗 定时器 稳压器 欠压 复位 (2) ENVREG W 8 8 8 8 8 上电 复位 高精度 带隙 参考源 8 x 8 乘法器 BITOP PORTE RE0:RE5(1) 8 PORTF RF1:RF7(1) ALU<8> 8 PORTG RG4(1) VDDCORE/VCAP 注 VDD, VSS MCLR 10 位 ADC Timer0 Timer1 Timer2 Timer3 Timer4 比较器 ECCP1 ECCP2 ECCP3 CCP4 CCP5 MSSP1 EUSART1 以太网 1: 关于 I/O 端口引脚的说明,请参见表 1-4。 2: BOR 功能在使能片上稳压器时提供。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 11 页 PIC18F97J60 系列 图 1-2: PIC18F86J60/86J65/87J60 (80 引脚)框图 数据总线 <8> 表指针 <21> 8 加 / 减逻辑 20 地址锁存器 PCU PCH PCL 程序计数器 31 级堆栈 STKPTR 程序存储器 (64、96 或 128 KB) 4 12 FSR0 FSR1 FSR2 PORTC 快速操作 存储区 RC0:RC7(1) 12 数据锁存器 加/减 逻辑 表锁存器 PORTD RD0:RD2(1) 地址 译码 ROM 锁存器 指令总线 <16> PORTB RB0:RB7(1) 12 数据地址 <12> 4 BSR 地址锁存器 8 RA0:RA5(1) 数据存储器 (3808 字节) PCLATU PCLATH 21 PORTA 数据锁存器 8 PORTE IR RE0:RE7(1) 8 指令 译码与 控制 W 8 8 高精度 带隙 参考源 看门狗 定时器 稳压器 欠压 复位 (2) ENVREG 8 BITOP 8 上电 复位 RF1:RF7(1) 8 x 8 乘法器 3 振荡器 起振定时器 INTRC 振荡器 PORTF PRODH PRODL 上电延时 定时器 时序 发生 OSC2/CLKO OSC1/CLKI 状态机 控制信号 PORTG 8 RG0:RG4(1) 8 ALU<8> PORTH 8 RH0:RH7(1) PORTJ VDDCORE/VCAP ECCP1 注 VDD, VSS RJ4:RJ5(1) MCLR 10 位 ADC Timer0 Timer1 Timer2 Timer3 Timer4 比较器 ECCP2 ECCP3 CCP4 CCP5 EUSART1 EUSART2 MSSP1 以太网 1: 关于 I/O 端口引脚的说明,请参见表 1-5。 2: BOR 功能在使能片上稳压器时提供。 DS39762A_CN 第 12 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 1-3: PIC18F96J60/96J65/97J60 (100 引脚)框图 数据总线 <8> 表指针 <21> 加 / 减逻辑 地址锁存器 20 PCU PCH PCL 程序计数器 31 级堆栈 4 4 12 BSR STKPTR 程序存储器 (64、96 或 128 KB) PORTB RB0:RB7(1) 12 数据地址 <12> 地址锁存器 系统总线接口 RA0:RA5(1) 数据存储器 (3808 字节) PCLATU PCLATH 21 PORTA 数据锁存器 8 8 PORTC 快速操作 存储区 FSR0 FSR1 FSR2 RC0:RC7(1) 12 数据锁存器 加/减 逻辑 8 表锁存器 PORTD RD0:RD7(1) 地址 译码 ROM 锁存器 指令总线 <16> PORTE IR RE0:RE7(1) AD15:AD0 和 A19:A16 (与 PORTD、PORTE 和 PORTH 复用) 8 OSC2/CLKO OSC1/CLKI 时序 发生 INTRC 振荡器 RF0:RF7(1) 8 x 8 乘法器 3 8 W BITOP 8 上电延时 定时器 8 PORTG 8 RG0:RG7(1) 振荡器 起振定时器 8 8 ALU<8> 上电 复位 PORTH 8 高精度 带隙 参考源 看门狗 定时器 稳压器 欠压 复位 (2) ENVREG PORTF PRODH PRODL 指令 译码与 控制 状态机 控制信号 RH0:RH7(1) PORTJ RJ0:RJ7(1) VDDCORE/VCAP VDD, VSS MCLR 10 位 ADC Timer0 Timer1 Timer2 Timer3 Timer4 ECCP1 ECCP2 ECCP3 CCP4 CCP5 EUSART1 注 比较器 EUSART2 MSSP1 MSSP2 以太网 1: 关于 I/O 端口引脚的说明,请参见表 1-6。 2: BOR 功能在使能片上稳压器时提供。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 13 页 PIC18F97J60 系列 表 1-4: PIC18F66J60/66J65/67J60 I/O 引脚说明 引脚号 TQFP 引脚 类型 缓冲区 类型 MCLR 7 I ST OSC1/CLKI OSC1 39 引脚名称 I CLKI I OSC2/CLKO OSC2 主清零 (复位)输入。此引脚为低电平时,器件复位。 振荡器晶振或外部时钟输入。 振荡器晶振或外部时钟源输入。 在内部 RC 模式下带 ST 缓冲区,否则带 CMOS 缓冲区。 CMOS 外部时钟源输入。总是与引脚功能 OSC1 复用。(见相关 的 OSC2/CLKO 引脚信息。) ST 40 CLKO 说明 O — O — 振荡器晶振或时钟输出。 振荡器晶振输出。在晶振振荡器模式下,该引脚与晶振或 谐振器相连。 在内部 RC 模式下, OSC2 引脚输出 CLKO 振荡信号,该 信号是 OSC1 引脚上振荡信号的 4 分频,该频率等于指令 周期的倒数。 PORTA 是双向 I/O 端口。 RA0/LEDA/AN0 RA0 LEDA AN0 24 RA1/LEDB/AN1 RA1 LEDB AN1 23 RA2/AN2/VREFRA2 AN2 VREF- 22 RA3/AN3/VREF+ RA3 AN3 VREF+ 21 RA4/T0CKI RA4 T0CKI 28 RA5/AN4 RA5 AN4 27 图注: TTL ST I P = = = = I/O O I TTL — 模拟 数字 I/O。 以太网 LEDA 指示器输出。 模拟输入 0。 I/O O I TTL — 模拟 数字 I/O。 以太网 LEDB 指示器输出。 模拟输入 1。 I/O I I TTL 模拟 模拟 数字 I/O。 模拟输入 2。 A/D 参考电压 (低电平)输入。 I/O I I TTL 模拟 模拟 数字 I/O。 模拟输入 3。 A/D 参考电压 (高电平)输入。 I/O I ST ST I/O I TTL 模拟 数字 I/O。 Timer0 外部时钟输入。 数字 I/O。 模拟输入 4。 TTL 兼容输入 CMOS 电平的施密特触发器 输入 电源 DS39762A_CN 第 14 页 CMOS Analog O OD 超前信息 = = = = CMOS 兼容输入或输出 模拟输入 输出 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-4: PIC18F66J60/66J65/67J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTB 是双向 I/O 端口。 PORTB 在所有输入端都可软件 编程为内部弱上拉。 RB0/INT0/FLT0 RB0 INT0 FLT0 3 RB1/INT1 RB1 INT1 4 RB2/INT2 RB2 INT2 5 RB3/INT3 RB3 INT3 6 RB4/KBI0 RB4 KBI0 44 RB5/KBI1 RB5 KBI1 43 RB6/KBI2/PGC RB6 KBI2 PGC 42 RB7/KBI3/PGD RB7 KBI3 PGD 37 图注: TTL ST I P = = = = I/O I I TTL ST ST 数字 I/O。 外部中断 0。 增强型 PWM 故障输入 (ECCP 模块);通过软件使能。 I/O I TTL ST 数字 I/O。 外部中断 1。 I/O I TTL ST 数字 I/O。 外部中断 2。 I/O I TTL ST 数字 I/O。 外部中断 3。 I/O I TTL TTL 数字 I/O。 电平变化中断引脚。 I/O I TTL TTL 数字 I/O。 电平变化中断引脚。 I/O I I/O TTL TTL ST 数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程时钟引脚。 I/O I I/O TTL TTL ST 数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP 编程数据引脚。 TTL 兼容输入 CMOS 电平的施密特触发器 输入 电源 2006 Microchip Technology Inc. CMOS Analog O OD 超前信息 = = = = CMOS 兼容输入或输出 模拟输入 输出 漏极开路 (没有 P 二极管接到 VDD) DS39762A_CN 第 15 页 PIC18F97J60 系列 表 1-4: PIC18F66J60/66J65/67J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTC 是双向 I/O 端口。 RC0/T1OSO/T13CKI RC0 T1OSO T13CKI 30 RC1/T1OSI/ECCP2/P2A RC1 T1OSI ECCP2 P2A 29 RC2/ECCP1/P1A RC2 ECCP1 P1A 33 RC3/SCK1/SCL1 RC3 SCK1 SCL1 34 RC4/SDI1/SDA1 RC4 SDI1 SDA1 35 RC5/SDO1 RC5 SDO1 36 RC6/TX1/CK1 RC6 TX1 CK1 31 RC7/RX1/DT1 RC7 RX1 DT1 32 图注: TTL ST I P = = = = I/O O I ST — ST I/O I I/O O ST CMOS ST — 数字 I/O。 Timer1 振荡器输入。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。 ECCP2 PWM 输出 A。 I/O I/O O ST ST — 数字 I/O。 捕捉 1 输入 / 比较 1 输出 /PWM 1 输出。 ECCP1 PWM 输出 A。 I/O I/O I/O ST ST ST 数字 I/O。 SPI 模式的同步串行时钟输入 / 输出。 I2C™ 模式的同步串行时钟输入 / 输出。 I/O I I/O ST ST ST 数字 I/O。 SPI 数据输入。 I2C 数据 I/O。 I/O O ST — 数字 I/O。 SPI 数据输出。 I/O O I/O ST — ST 数字 I/O。 EUSART1 异步发送。 EUSART1 同步时钟 (见相关的 RX1/DT1 引脚信息)。 I/O I I/O ST ST ST 数字 I/O。 EUSART1 异步接收。 EUSART1 同步数据 (见相关的 TX1/CK1 引脚信息)。 数字 I/O。 Timer1 振荡器输出。 Timer1/Timer3 外部时钟输入。 TTL 兼容输入 CMOS 电平的施密特触发器 输入 电源 DS39762A_CN 第 16 页 CMOS Analog O OD 超前信息 = = = = CMOS 兼容输入或输出 模拟输入 输出 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-4: PIC18F66J60/66J65/67J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTD 是双向 I/O 端口。 RD0/P1B RD0 P1B 60 RD1/ECCP3/P3A RD1 ECCP3 P3A 59 RD2/CCP4/P3D RD2 CCP4 P3D 58 图注: TTL ST I P = = = = I/O O ST — 数字 I/O。 ECCP1 PWM 输出 B。 I/O I/O O ST ST — 数字 I/O。 捕捉 3 输入 / 比较 3 输出 /PWM 3 输出。 ECCP3 PWM 输出 A。 I/O I/O O ST ST — 数字 I/O。 捕捉 4 输入 / 比较 4 输出 /PWM 4 输出。 ECCP4 PWM 输出 D。 TTL 兼容输入 CMOS 电平的施密特触发器 输入 电源 2006 Microchip Technology Inc. CMOS Analog O OD 超前信息 = = = = CMOS 兼容输入或输出 模拟输入 输出 漏极开路 (没有 P 二极管接到 VDD) DS39762A_CN 第 17 页 PIC18F97J60 系列 表 1-4: PIC18F66J60/66J65/67J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTE 是双向 I/O 端口。 RE0/P2D RE0 P2D 2 RE1/P2C RE1 P2C 1 RE2/P2B RE2 P2B 64 RE3/P3C RE3 P3C 63 RE4/P3B RE4 P3B 62 RE5/P1C RE5 P1C 61 图注: TTL ST I P = = = = I/O O ST — 数字 I/O。 ECCP2 PWM 输出 D。 I/O O ST — 数字 I/O。 ECCP2 PWM 输出 C。 I/O O ST — 数字 I/O。 ECCP2 PWM 输出 B。 I/O O ST — 数字 I/O。 ECCP3 PWM 输出 C。 I/O O ST — 数字 I/O。 ECCP3 PWM 输出 B。 I/O O ST — 数字 I/O。 ECCP1 PWM 输出 C。 TTL 兼容输入 CMOS 电平的施密特触发器 输入 电源 DS39762A_CN 第 18 页 CMOS Analog O OD 超前信息 = = = = CMOS 兼容输入或输出 模拟输入 输出 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-4: PIC18F66J60/66J65/67J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTF 是双向 I/O 端口。 RF1/AN6/C2OUT RF1 AN6 C2OUT 17 RF2/AN7/C1OUT RF2 AN7 C1OUT 16 RF3/AN8 RF3 AN8 15 RF4/AN9 RF4 AN9 14 RF5/AN10/CVREF RF5 AN10 CVREF 13 RF6/AN11 RF6 AN11 12 RF7/SS1 RF7 SS1 11 图注: TTL ST I P = = = = I/O I O ST 模拟 — 数字 I/O。 模拟输入 6。 比较器 2 的输出。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 7。 比较器 1 的输出。 I/O I ST 模拟 数字 I/O。 模拟输入 8。 I/O I ST 模拟 数字 I/O。 模拟输入 9。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 10。 比较器参考电压输出。 I/O I ST 模拟 数字 I/O。 模拟输入 11。 I/O I ST TTL 数字 I/O。 SPI 从动选择输入。 TTL 兼容输入 CMOS 电平的施密特触发器 输入 电源 2006 Microchip Technology Inc. CMOS Analog O OD 超前信息 = = = = CMOS 兼容输入或输出 模拟输入 输出 漏极开路 (没有 P 二极管接到 VDD) DS39762A_CN 第 19 页 PIC18F97J60 系列 表 1-4: PIC18F66J60/66J65/67J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTG 是双向 I/O 端口。 8 RG4/CCP5/P1D RG4 CCP5 P1D I/O I/O O ST ST — 数字 I/O。 捕捉 5 输入 / 比较 5 输出 /PWM 5 输出。 ECCP1 PWM 输出 D。 VSS 9, 25, 41, 56 P — 逻辑和 I/O 引脚的参考地。 VDD 26, 38, 57 P — 外设数字逻辑和 I/O 引脚的正电源。 AVSS 20 P — 模拟模块的参考地。 AVDD 19 P — 模拟模块的正电源。 ENVREG 18 I ST 片上稳压器使能。 VDDCORE/VCAP VDDCORE VCAP 10 P P — — 内核逻辑电源或外部滤波电容连接。 单片机内核逻辑的正电源 (稳压器禁止)。 外部滤波电容连接 (稳压器使能)。 VSSPLL 55 P — 以太网 PHY PLL 的参考地。 VDDPLL 54 P — 以太网 PHY PLL 的 3.3V 正电源。 VSSTX 52 P — 以太网 PHY 发送子系统的参考地。 VDDTX 49 P — 以太网 PHY 发送子系统的 3.3V 正电源。 VSSRX 45 P — 以太网 PHY 接收子系统的参考地。 VDDRX 48 P — 以太网 PHY 接收子系统的 3.3V 正电源。 RBIAS 53 P — 以太网 PHY 的偏置电流。必须通过电阻连接到 VSS,有关规范 请参见第 18.0 节 “以太网模块”。 TPOUT+ 51 O — 以太网差分信号输出。 TPOUT- 50 O — 以太网差分信号输出。 TPIN+ 47 I 模拟 以太网差分信号输入。 TPIN- 46 I 模拟 以太网差分信号输入。 图注: TTL ST I P = = = = TTL 兼容输入 CMOS 电平的施密特触发器 输入 电源 DS39762A_CN 第 20 页 CMOS Analog O OD 超前信息 = = = = CMOS 兼容输入或输出 模拟输入 输出 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 引脚号 TQFP 引脚 类型 缓冲区 类型 MCLR 9 I ST OSC1/CLKI OSC1 49 引脚名称 I CLKI I OSC2/CLKO OSC2 主清零 (复位)输入。此引脚为低电平时,器件复位。 振荡器晶振或外部时钟输入。 振荡器晶振或外部时钟源输入。 在内部 RC 模式下带 ST 缓冲区,否则带 CMOS 缓冲区。 CMOS 外部时钟源输入。总是与 OSC1 引脚功能复用。(见相关的 OSC2/CLKO 引脚信息。) ST 50 CLKO 说明 O — O — 振荡器晶振或时钟输出。 振荡器晶振输出。在晶振振荡器模式下,该引脚与晶振或 谐振器相连。 在内部 RC 模式下, OSC2 引脚输出 CLKO 振荡信号,该信 号是 OSC1 引脚上振荡信号的 4 分频,该频率等于指令周期 的倒数。 PORTA 是双向 I/O 端口。 RA0/LEDA/AN0 RA0 LEDA AN0 30 RA1/LEDB/AN1 RA1 LEDB AN1 29 RA2/AN2/VREFRA2 AN2 VREF- 28 RA3/AN3/VREF+ RA3 AN3 VREF+ 27 RA4/T0CKI RA4 T0CKI 34 RA5/AN4 RA5 AN4 33 图注: 注 1: 2: 3: 4: I/O O I TTL — 模拟 数字 I/O。 以太网 LEDA 指示器输出。 模拟输入 0。 I/O O I TTL — 模拟 数字 I/O。 以太网 LEDB 指示器输出。 模拟输入 1。 I/O I I TTL 模拟 模拟 数字 I/O。 模拟输入 2。 A/D 参考电压 (低电平)输入。 I/O I I TTL 模拟 模拟 数字 I/O。 模拟输入 3。 A/D 参考电压 (高电平)输入。 I/O I ST ST I/O I TTL 模拟 数字 I/O。 Timer0 外部时钟输入。 数字 I/O。 模拟输入 4。 TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) DS39762A_CN 第 21 页 PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTB 是双向 I/O 端口。 PORTB 在所有输入端都可软件 编程为内部弱上拉。 RB0/INT0/FLT0 RB0 INT0 FLT0 5 RB1/INT1 RB1 INT1 6 RB2/INT2 RB2 INT2 7 RB3/INT3 RB3 INT3 8 RB4/KBI0 RB4 KBI0 54 RB5/KBI1 RB5 KBI1 53 RB6/KBI2/PGC RB6 KBI2 PGC 52 RB7/KBI3/PGD RB7 KBI3 PGD 47 图注: 注 1: 2: 3: 4: I/O I I TTL ST ST 数字 I/O。 外部中断 0。 增强型 PWM 故障输入 (ECCP 模块);通过软件使能。 I/O I TTL ST 数字 I/O。 外部中断 1。 I/O I TTL ST 数字 I/O。 外部中断 2。 I/O I TTL ST 数字 I/O。 外部中断 3。 I/O I TTL TTL 数字 I/O。 电平变化中断引脚。 I/O I TTL TTL 数字 I/O。 电平变化中断引脚。 I/O I I/O TTL TTL ST 数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程时钟引脚。 I/O I I/O TTL TTL ST 数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP 编程数据引脚。 TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 22 页 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTC 是双向 I/O 端口。 RC0/T1OSO/T13CKI RC0 T1OSO T13CKI 36 RC1/T1OSI/ECCP2/P2A RC1 T1OSI ECCP2(1) P2A(1) 35 RC2/ECCP1/P1A RC2 ECCP1 P1A 43 RC3/SCK1/SCL1 RC3 SCK1 SCL1 44 RC4/SDI1/SDA1 RC4 SDI1 SDA1 45 RC5/SDO1 RC5 SDO1 46 RC6/TX1/CK1 RC6 TX1 CK1 37 RC7/RX1/DT1 RC7 RX1 DT1 38 图注: 注 1: 2: 3: 4: I/O O I ST — ST I/O I I/O O ST CMOS ST — 数字 I/O。 Timer1 振荡器输入。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。 ECCP2 PWM 输出 A。 I/O I/O O ST ST — 数字 I/O。 捕捉 1 输入 / 比较 1 输出 /PWM 1 输出。 ECCP1 PWM 输出 A。 I/O I/O I/O ST ST ST 数字 I/O。 SPI 模式的同步串行时钟输入 / 输出。 I2C™ 模式的同步串行时钟输入 / 输出。 I/O I I/O ST ST ST 数字 I/O。 SPI 数据输入。 I2C 数据 I/O。 I/O O ST — 数字 I/O。 SPI 数据输出。 I/O O I/O ST — ST 数字 I/O。 EUSART1 异步发送。 EUSART1 同步时钟 (见相关的 RX1/DT1 引脚信息)。 I/O I I/O ST ST ST 数字 I/O。 EUSART1 异步接收。 EUSART1 同步数据 (见相关的 TX1/CK1 引脚信息)。 数字 I/O。 Timer1 振荡器输出。 Timer1/Timer3 外部时钟输入。 TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) DS39762A_CN 第 23 页 PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 (续) 引脚号 TQFP 引脚 类型 缓冲区 类型 RD0 72 I/O ST 数字 I/O。 RD1 69 I/O ST 数字 I/O。 RD2 68 I/O ST 引脚名称 说明 PORTD 是双向 I/O 端口。 数字 I/O。 PORTE 是双向 I/O 端口。 RE0/P2D RE0 P2D 4 RE1/P2C RE1 P2C 3 RE2/P2B RE2 P2B 78 RE3/P3C RE3 P3C(2) 77 RE4/P3B RE4 P3B(2) 76 RE5/P1C RE5 P1C(2) 75 RE6/P1B RE6 P1B(2) 74 RE7/ECCP2/P2A RE7 ECCP2(3) P2A(3) 73 图注: 注 1: 2: 3: 4: I/O O ST — 数字 I/O。 ECCP2 PWM 输出 D。 I/O O ST — 数字 I/O。 ECCP2 PWM 输出 C。 I/O O ST — 数字 I/O。 ECCP2 PWM 输出 B。 I/O O ST — 数字 I/O。 ECCP3 PWM 输出 C。 I/O O ST — 数字 I/O。 ECCP3 PWM 输出 B。 I/O O ST — 数字 I/O。 ECCP1 PWM 输出 C。 I/O O ST — 数字 I/O。 ECCP1 PWM 输出 B。 I/O I/O O ST ST — 数字 I/O。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。 ECCP2 PWM 输出 A。 TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 24 页 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTF 是双向 I/O 端口。 RF1/AN6/C2OUT RF1 AN6 C2OUT 23 RF2/AN7/C1OUT RF2 AN7 C1OUT 18 RF3/AN8 RF3 AN8 17 RF4/AN9 RF4 AN9 16 RF5/AN10/CVREF RF5 AN10 CVREF 15 RF6/AN11 RF6 AN11 14 RF7/SS1 RF7 SS1 13 图注: 注 1: 2: 3: 4: I/O I O ST 模拟 — 数字 I/O。 模拟输入 6。 比较器 2 的输出。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 7。 比较器 1 的输出。 I/O I ST 模拟 数字 I/O。 模拟输入 8。 I/O I ST 模拟 数字 I/O。 模拟输入 9。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 10。 比较器参考电压输出。 I/O I ST 模拟 数字 I/O。 模拟输入 11。 I/O I ST TTL 数字 I/O。 SPI 从动选择输入。 TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) DS39762A_CN 第 25 页 PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTG 是双向 I/O 端口。 RG0/ECCP3/P3A RG0 ECCP3 P3A 56 RG1/TX2/CK2 RG1 TX2 CK2 55 RG2/RX2/DT2 RG2 RX2 DT2 42 RG3/CCP4/P3D RG3 CCP4 P3D 41 RG4/CCP5/P1D RG4 CCP5 P1D 10 图注: 注 1: 2: 3: 4: I/O I/O O ST ST — 数字 I/O。 捕捉 3 输入 / 比较 3 输出 /PWM 3 输出。 ECCP3 PWM 输出 A。 I/O O I/O ST — ST 数字 I/O。 EUSART2 异步发送。 EUSART2 同步时钟 (见相关的 RX2/DT2 引脚信息)。 I/O I I/O ST ST ST 数字 I/O。 EUSART2 异步接收。 EUSART2 同步数据 (见相关的 TX2/CK2 引脚信息)。 I/O I/O O ST ST — 数字 I/O。 捕捉 4 输入 / 比较 4 输出 /PWM 4 输出。 ECCP3 PWM 输出 D。 I/O I/O O ST ST — 数字 I/O。 捕捉 5 输入 / 比较 5 输出 /PWM 5 输出。 ECCP1 PWM 输出 D。 TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 26 页 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 (续) 引脚号 TQFP 引脚 类型 缓冲区 类型 RH0 79 I/O ST 数字 I/O。 RH1 80 I/O ST 数字 I/O。 RH2 1 I/O ST 数字 I/O。 RH3 2 I/O ST 数字 I/O。 RH4/AN12/P3C RH4 AN12 P3C(4) 22 I/O I O ST 模拟 — 数字 I/O。 模拟输入 12。 ECCP3 PWM 输出 C。 RH5/AN13/P3B RH5 AN13 P3B(4) 21 I/O I O ST 模拟 — 数字 I/O。 模拟输入 13。 ECCP3 PWM 输出 B。 RH6/AN14/P1C RH6 AN14 P1C(4) 20 I/O I O ST 模拟 — 数字 I/O。 模拟输入 14。 ECCP1 PWM 输出 C。 RH7/AN15/P1B RH7 AN15 P1B(4) 19 I/O I O ST 模拟 — 数字 I/O。 模拟输入 15。 ECCP1 PWM 输出 B。 引脚名称 说明 PORTH 是双向 I/O 端口。 图注: 注 1: 2: 3: 4: TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) DS39762A_CN 第 27 页 PIC18F97J60 系列 表 1-5: PIC18F86J60/86J65/87J60 I/O 引脚说明 (续) 引脚号 TQFP 引脚 类型 缓冲区 类型 39 I/O ST 数字 I/O。 RJ5 40 I/O ST 数字 I/O VSS 11, 31, 51, 70 P — VDD 32, 48, 71 P — 外设数字逻辑和 I/O 引脚的正电源。 AVSS 26 P — 模拟模块的参考地。 AVDD 25 P — 模拟模块的正电源。 ENVREG 24 I ST 片上稳压器使能。 VDDCORE/VCAP VDDCORE VCAP 12 P P — — 内核逻辑电源或外部滤波电容连接。 单片机内核逻辑的正电源 (稳压器禁止)。 外部滤波电容连接 (稳压器使能)。 VSSPLL 67 P — 以太网 PHY PLL 的参考地。 VDDPLL 66 P — 以太网 PHY PLL 的 3.3V 正电源。 引脚名称 说明 PORTJ 是双向 I/O 端口。 RJ4 逻辑和 I/O 引脚的参考地。 VSSTX 64 P — 以太网 PHY 发送子系统的参考地。 VDDTX 61 P — 以太网 PHY 发送子系统的 3.3V 正电源。 VSSRX 57 P — 以太网 PHY 接收子系统的参考地。 VDDRX 60 P — 以太网 PHY 接收子系统的 3.3V 正电源。 RBIAS 65 P — 以太网 PHY 的偏置电流。必须通过电阻连接到 VSS,有关规范 请参见第 18.0 节 “以太网模块”。 TPOUT+ 63 O — 以太网差分信号输出。 TPOUT- 62 O — 以太网差分信号输出。 TPIN+ 59 I 模拟 以太网差分信号输入。 TPIN- 58 I 模拟 以太网差分信号输入。 图注: 注 1: 2: 3: 4: TTL = TTL 兼容输入 CMOS ST = CMOS 电平的施密特触发器 Analog I = 输入 O P = 电源 OD CCP2MX 配置位置 1 时, ECCP2/P2A 的默认配置。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 28 页 超前信息 = CMOS 兼容输入或输出 = 模拟输入 = 输出 = 漏极开路 (没有 P 二极管接到 VDD) 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 引脚号 TQFP 引脚 类型 缓冲区 类型 MCLR 13 I ST OSC1/CLKI OSC1 63 引脚名称 I CLKI I OSC2/CLKO OSC2 主清零 (复位)输入。此引脚为低电平时,器件复位。 振荡器晶振或外部时钟输入。 振荡器晶振或外部时钟源输入。 在内部 RC 模式下带 ST 缓冲区,否则带 CMOS 缓冲区。 CMOS 外部时钟源输入。总是与 OSC1 引脚功能复用。(见相关的 OSC2/CLKO 引脚信息。) ST 64 CLKO 说明 O — O — 振荡器晶振或时钟输出。 振荡器晶振输出。在晶振振荡器模式下,该引脚与晶振或谐 振器相连。 在内部 RC 模式下, OSC2 引脚输出 CLKO 振荡信号,该信 号是 OSC1 引脚上振荡信号的 4分频,该频率等于指令周期 的倒数。 PORTA 是双向 I/O 端口。 RA0/LEDA/AN0 RA0 LEDA AN0 35 RA1/LEDB/AN1 RA1 LEDB AN1 34 RA2/AN2/VREFRA2 AN2 VREF- 33 RA3/AN3/VREF+ RA3 AN3 VREF+ 32 RA4/T0CKI RA4 T0CKI 42 RA5/AN4 RA5 AN4 41 图注: 注 1: 2: 3: 4: 5: I/O O I TTL — 模拟 数字 I/O。 以太网 LEDA 指示器输出。 模拟输入 0。 I/O O I TTL — 模拟 数字 I/O。 以太网 LEDB 指示器输出。 模拟输入 1。 I/O I I TTL 模拟 模拟 数字 I/O。 模拟输入 2。 A/D 参考电压 (低电平)输入。 I/O I I TTL 模拟 模拟 数字 I/O。 模拟输入 3。 A/D 参考电压 (高电平)输入。 I/O I ST ST I/O I TTL 模拟 数字 I/O。 Timer0 外部时钟输入。 数字 I/O。 模拟输入 4。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 29 页 PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTB 是双向 I/O 端口。 PORTB 在所有输入端都可软件 编程为内部弱上拉。 RB0/INT0/FLT0 RB0 INT0 FLT0 5 RB1/INT1 RB1 INT1 6 RB2/INT2 RB2 INT2 7 RB3/INT3/ECCP2/P2A RB3 INT3 ECCP2(1) P2A(1) 8 RB4/KBI0 RB4 KBI0 69 RB5/KBI1 RB5 KBI1 68 RB6/KBI2/PGC RB6 KBI2 PGC 67 RB7/KBI3/PGD RB7 KBI3 PGD 57 图注: 注 1: 2: 3: 4: 5: I/O I I TTL ST ST 数字 I/O。 外部中断 0。 增强型 PWM 故障输入 (ECCP 模块);通过软件使能。 I/O I TTL ST 数字 I/O。 外部中断 1。 I/O I TTL ST 数字 I/O。 外部中断 2。 I/O I I/O O TTL ST ST — 数字 I/O。 外部中断 3。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。 ECCP2 PWM 输出 A。 I/O I TTL TTL 数字 I/O。 电平变化中断引脚。 I/O I TTL TTL 数字 I/O。 电平变化中断引脚。 I/O I I/O TTL TTL ST 数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程时钟引脚。 I/O I I/O TTL TTL ST 数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP 编程数据引脚。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 30 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTC 是双向 I/O 端口。 RC0/T1OSO/T13CKI RC0 T1OSO T13CKI 44 RC1/T1OSI/ECCP2/P2A RC1 T1OSI ECCP2(2) P2A(2) 43 RC2/ECCP1/P1A RC2 ECCP1 P1A 53 RC3/SCK1/SCL1 RC3 SCK1 SCL1 54 RC4/SDI1/SDA1 RC4 SDI1 SDA1 55 RC5/SDO1 RC5 SDO1 56 RC6/TX1/CK1 RC6 TX1 CK1 45 RC7/RX1/DT1 RC7 RX1 DT1 46 图注: 注 1: 2: 3: 4: 5: I/O O I ST — ST I/O I I/O O ST CMOS ST — 数字 I/O。 Timer1 振荡器输入。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。 ECCP2 PWM 输出 A。 I/O I/O O ST ST — 数字 I/O。 捕捉 1 输入 / 比较 1 输出 /PWM 1 输出。 ECCP1 PWM 输出 A。 I/O I/O I/O ST ST ST 数字 I/O。 SPI 模式的同步串行时钟输入 / 输出。 I2C™ 模式的同步串行时钟输入 / 输出。 I/O I I/O ST ST ST 数字 I/O。 SPI 数据输入。 I2C 数据 I/O。 I/O O ST — 数字 I/O。 SPI 数据输出。 I/O O I/O ST — ST 数字 I/O。 EUSART1 异步发送。 EUSART1 同步时钟 (见相关的 RX1/DT1 引脚信息)。 I/O I I/O ST ST ST 数字 I/O。 EUSART1 异步接收。 EUSART1 同步数据 (见相关的 TX1/CK1 引脚信息)。 数字 I/O。 Timer1 振荡器输出。 Timer1/Timer3 外部时钟输入。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 31 页 PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTD 是双向 I/O 端口。 RD0/AD0/PSP0 RD0 AD0 PSP0 92 RD1/AD1/PSP1 RD1 AD1 PSP1 91 RD2/AD2/PSP2 RD2 AD2 PSP2 90 RD3/AD3/PSP3 RD3 AD3 PSP3 89 RD4/AD4/PSP4/SDO2 RD4 AD4 PSP4 SDO2 88 RD5/AD5/PSP5/ SDI2/SDA2 RD5 AD5 PSP5 SDI2 SDA2 87 RD6/AD6/PSP6/ SCK2/SCL2 RD6 AD6 PSP6 SCK2 SCL2 84 RD7/AD7/PSP7/SS2 RD7 AD7 PSP7 SS2 83 图注: 注 1: 2: 3: 4: 5: I/O I/O I/O ST TTL TTL 数字 I/O。 外部存储器地址 / 数据 0。 并行从动端口数据。 I/O I/O I/O ST TTL TTL 数字 I/O。 外部存储器地址 / 数据 1。 并行从动端口数据。 I/O I/O I/O ST TTL TTL 数字 I/O。 外部存储器地址 / 数据 2。 并行从动端口数据。 I/O I/O I/O ST TTL TTL 数字 I/O。 外部存储器地址 / 数据 3。 并行从动端口数据。 I/O I/O I/O O ST TTL TTL — 数字 I/O。 外部存储器地址 / 数据 4。 并行从动端口数据。 SPI 数据输出。 I/O I/O I/O I I/O ST TTL TTL ST ST 数字 I/O。 外部存储器地址 / 数据 5。 并行从动端口数据。 SPI 数据输入。 I2C™ 数据 I/O。 I/O I/O I/O I/O I/O ST TTL TTL ST ST 数字 I/O。 外部存储器地址 / 数据 6。 并行从动端口数据。 SPI 模式的同步串行时钟输入 / 输出。 I2C 模式的同步串行时钟输入 / 输出。 I/O I/O I/O I ST TTL TTL TTL 数字 I/O。 外部存储器地址 / 数据 7。 并行从动端口数据。 SPI 从动选择输入。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 32 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTE 是双向 I/O 端口。 RE0/AD8/RD/P2D RE0 AD8 RD P2D 4 RE1/AD9/WR/P2C RE1 AD9 WR P2C 3 RE2/AD10/CS/P2B RE2 AD10 CS P2B 98 RE3/AD11/P3C RE3 AD11 P3C(3) 97 RE4/AD12/P3B RE4 AD12 P3B(3) 96 RE5/AD13/P1C RE5 AD13 P1C(3) 95 RE6/AD14/P1B RE6 AD14 P1B(3) 94 RE7/AD15/ECCP2/P2A RE7 AD15 ECCP2(4) P2A(4) 93 图注: 注 1: 2: 3: 4: 5: I/O I/O I O ST TTL TTL — 数字 I/O。 外部存储器地址 / 数据 8。 并行从动端口的读控制。 ECCP2 PWM 输出 D。 I/O I/O I O ST TTL TTL — 数字 I/O。 外部存储器地址 / 数据 9。 并行从动端口的写控制。 ECCP2 PWM 输出 C。 I/O I/O I O ST TTL TTL — 数字 I/O。 外部存储器地址 / 数据 10。 并行从动端口的片选控制。 ECCP2 PWM 输出 B。 I/O I/O O ST TTL — 数字 I/O。 外部存储器地址 / 数据 11。 ECCP3 PWM 输出 C。 I/O I/O O ST TTL — 数字 I/O。 外部存储器地址 / 数据 12。 ECCP3 PWM 输出 B。 I/O I/O O ST TTL — 数字 I/O。 外部存储器地址 / 数据 13。 ECCP1 PWM 输出 C。 I/O I/O O ST TTL — 数字 I/O。 外部存储器地址 / 数据 14。 ECCP1 PWM 输出 B。 I/O I/O I/O O ST TTL ST — 数字 I/O。 外部存储器地址 / 数据 15。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。 ECCP2 PWM 输出 A。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 33 页 PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTF 是双向 I/O 端口。 RF0/AN5 RF0 AN5 12 RF1/AN6/C2OUT RF1 AN6 C2OUT 28 RF2/AN7/C1OUT RF2 AN7 C1OUT 23 RF3/AN8 RF3 AN8 22 RF4/AN9 RF4 AN9 21 RF5/AN10/CVREF RF5 AN10 CVREF 20 RF6/AN11 RF6 AN11 19 RF7/SS1 RF7 SS1 18 图注: 注 1: 2: 3: 4: 5: I/O I ST 模拟 数字 I/O。 模拟输入 5。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 6。 比较器 2 的输出。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 7。 比较器 1 的输出。 I/O I ST 模拟 数字 I/O。 模拟输入 8。 I/O I ST 模拟 数字 I/O。 模拟输入 9。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 10。 比较器参考电压输出。 I/O I ST 模拟 数字 I/O。 模拟输入 11。 I/O I ST TTL 数字 I/O。 SPI 从动选择输入。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 34 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTG 是双向 I/O 端口。 RG0/ECCP3/P3A RG0 ECCP3 P3A 71 RG1/TX2/CK2 RG1 TX2 CK2 70 RG2/RX2/DT2 RG2 RX2 DT2 52 RG3/CCP4/P3D RG3 CCP4 P3D 51 RG4/CCP5/P1D RG4 CCP5 P1D 14 RG5 RG6 RG7 图注: 注 1: 2: 3: 4: 5: I/O I/O O ST ST — 数字 I/O。 捕捉 3 输入 / 比较 3 输出 /PWM 3 输出。 ECCP3 PWM 输出 A。 I/O O I/O ST — ST 数字 I/O。 EUSART2 异步发送。 EUSART2 同步时钟 (见相关的 RX2/DT2 引脚信息)。 I/O I I/O ST ST ST 数字 I/O。 EUSART2 异步接收。 EUSART2 同步数据 (见相关的 TX2/CK2 引脚信息)。 I/O I/O O ST ST — 数字 I/O。 捕捉 4 输入 / 比较 4 输出 /PWM 4 输出。 ECCP3 PWM 输出 D。 I/O I/O O ST ST — 数字 I/O。 捕捉 5 输入 / 比较 5 输出 /PWM 5 输出。 ECCP1 PWM 输出 D。 11 I/O ST 数字 I/O。 10 I/O ST 数字 I/O。 38 I/O ST 数字 I/O。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 35 页 PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTH 是双向 I/O 端口。 RH0/A16 RH0 A16 99 RH1/A17 RH1 A17 100 RH2/A18 RH2 A18 1 RH3/A19 RH3 A19 2 RH4/AN12/P3C RH4 AN12 P3C(5) 27 RH5/AN13/P3B RH5 AN13 P3B(5) 26 RH6/AN14/P1C RH6 AN14 P1C(5) 25 RH7/AN15/P1B RH7 AN15 P1B(5) 24 图注: 注 1: 2: 3: 4: 5: I/O O ST — 数字 I/O。 外部存储器地址 16。 I/O O ST — 数字 I/O。 外部存储器地址 17。 I/O O ST — 数字 I/O。 外部存储器地址 18。 I/O O ST — 数字 I/O。 外部存储器地址 19。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 12。 ECCP3 PWM 输出 C。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 13。 ECCP3 PWM 输出 B。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 14。 ECCP1 PWM 输出 C。 I/O I O ST 模拟 — 数字 I/O。 模拟输入 15。 ECCP1 PWM 输出 B。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 36 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 引脚名称 TQFP 引脚 类型 缓冲区 类型 说明 PORTJ 是双向 I/O 端口。 RJ0/ALE RJ0 ALE 49 RJ1/OE RJ1 OE 50 RJ2/WRL RJ2 WRL 66 RJ3/WRH RJ3 WRH 61 RJ4/BA0 RJ4 BA0 47 RJ5/CE RJ5 CE 48 RJ6/LB RJ6 LB 58 RJ7/UB RJ7 UB 39 图注: 注 1: 2: 3: 4: 5: I/O O ST — 数字 I/O。 外部存储器地址锁存器使能。 I/O O ST — 数字 I/O。 外部存储器输出使能。 I/O O ST — 数字 I/O。 外部存储器低字节写控制。 I/O O ST — 数字 I/O。 外部存储器高字节写控制。 I/O O ST — 数字 I/O。 外部存储器字节地址 0 控制。 I/O O ST — 数字 I/O 外部存储器芯片使能控制。 I/O O ST — 数字 I/O。 外部存储器低字节控制。 I/O O ST — 数字 I/O。 外部存储器高字节控制。 TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 37 页 PIC18F97J60 系列 表 1-6: PIC18F96J60/96J65/97J60 I/O 引脚说明 (续) 引脚号 TQFP 引脚 类型 缓冲区 类型 NC 9 — — 无连接。 VSS 15, 36, 40, 60, 65, 85 P — 逻辑和 I/O 引脚的参考地。 VDD 17, 37, 59, 62, 86 P — 外设数字逻辑和 I/O 引脚的正电源。 AVSS 31 P — 模拟模块的参考地。 AVDD 30 P — 模拟模块的正电源。 ENVREG 29 I ST 片上稳压器使能。 VDDCORE/VCAP VDDCORE VCAP 16 P P — — 内核逻辑电源或外部滤波电容连接。 单片机内核逻辑的正电源 (稳压器禁止)。 外部滤波电容连接 (稳压器使能)。 引脚名称 说明 VSSPLL 82 P — 以太网 PHY PLL 的参考地。 VDDPLL 81 P — 以太网 PHY PLL 的 3.3V 正电源。 VSSTX 79 P — 以太网 PHY 发送子系统的参考地。 VDDTX 76 P — 以太网 PHY 发送子系统的 3.3V 正电源。 VSSRX 72 P — 以太网 PHY 接收子系统的参考地。 VDDRX 75 P — 以太网 PHY 接收子系统的 3.3V 正电源。 RBIAS 80 P — 以太网 PHY 的偏置电流。必须通过电阻连接到 VSS,有关规范 请参见第 18.0 节 “以太网模块”。 TPOUT+ 78 O — 以太网差分信号输出。 TPOUT- 77 O — 以太网差分信号输出。 TPIN+ 74 I 模拟 以太网差分信号输入。 TPIN- 73 I 模拟 以太网差分信号输入。 图注: 注 1: 2: 3: 4: 5: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出 ST = CMOS 电平的施密特触发器 Analog = 模拟输入 I = 输入 O = 输出 P = 电源 OD = 漏极开路 (没有 P 二极管接到 VDD) CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (扩展单片机模式)。 在所有操作模式中,所有器件的 ECCP2/P2A 的默认配置 (CCP2MX 配置位置 1)。 P1B/P1C/P3B/P3C 的默认配置 (ECCPMX 配置位置 1)。 CCP2MX 配置位清零时, ECCP2/P2A 的替代配置 (单片机模式)。 P1B/P1C/P3B/P3C 的替代配置 (ECCPMX 配置位清零)。 DS39762A_CN 第 38 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 2.0 振荡器配置 2.2 2.1 概述 PIC18F97J60 系列器件可以在 5 种不同的振荡器模式下 工作: PIC18F97J60 系列器件的振荡器和单片机时钟系统不 同于标准 PIC18FXXJXX 器件的。新增的以太网模块需 要一个稳定的 25 MHz 时钟源,因此必须为其配备能提 供该频率的主振荡器以及不同范围的单片机时钟速度。 图 2-1 中简要说明了振荡器的结构。 1. 2. 3. 4. 5. PIC18FXXJXX 增强型单片机中使用的其他振荡器功能 (例如内部 RC 振荡器和时钟切换)仍保持不变。它们 将在本章中稍后讨论。 振荡器类型 HS HSPLL EC ECPLL INTRC 2.2.1 高速晶振 / 谐振器 带软件 PLL 控制的高速晶振 / 谐振器 带 FOSC/4 输出的外部时钟 带软件 PLL控制的外部时钟 31 kHz 内部振荡器 振荡器控制 可以通过编程 FOSC2:FOSC0 配置位来选择振荡器模 式。 FOSC1:FOSC0 位选择默认的主振荡器模式,而 FOSC2 选择何时调用 INTRC。 OSCCON 寄存器 (寄存器 2-2)选择有效时钟模式。它 主要用于在功耗管理模式下控制时钟切换。它的使用在 第 2.7.1 节 “振荡器控制寄存器”中讨论。 通过选择预分频器 / 后分频器组合设置以及使能 PLL, OSCTUNE 寄存器 (寄存器 2-1)用于选择主振荡器源 的系统时钟频率。它的使用在第 2.6.1 节 “PLL 模块” 中讨论。 图 2-1: PIC18F97J60 系列时钟框图 PIC18F97J60 系列 主振荡器 以太网时钟 OSC2 休眠 OSC1 PLL 预分频器 时钟 控制 PLL 后分频器 5x PLL FOSC2:FOSC0 OSCCON<1:0> T1OSO T1OSCEN 使能 振荡器 T1OSC INTRC 源 MUX EC、HS、ECPLL 和 HSPLL 辅助振荡器 T1OSI OSCTUNE<7:5>(1) PLL/ 预分频器 / 后分频器 外设 CPU 内部振荡器 IDLEN WDT、PWRT、FSCM 和双速启动 时钟源选项 (供其他模块使用) 注: 关于 OSCTUNE 寄存器配置及相应的频率,请参见表 2-2。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 39 页 PIC18F97J60 系列 2.3 晶振 / 陶瓷谐振器 (HS 模式) 注 在 HS 或 HSPLL 振荡器模式下,晶振与 OSC1 和 OSC2 引脚相连来产生振荡信号。图2-2显示了引脚连接方式。 2: 因为每种晶振都有其自身特性,用户应当 向晶振制造厂商询问外部元件的适当值。 振荡器的设计要求使用平行切割的晶体。 注: 晶振工作原理 (HS 或 HSPLL 配置) C1(1) C2(1) RS (2) 在 EC 振荡器模式下,由 OSC2 引脚输出振荡器频率的 4 分频信号。此信号可用于测试或同步其他逻辑。图 2-3 显示了 EC 振荡器模式的引脚连接方式。 休眠 OSC2 外部时钟输入 (EC 模式) EC 和 ECPLL 振荡器模式要求 OSC1 引脚与一个外部 时钟源相连。在上电复位后或从休眠模式退出后,不需 要振荡器起振时间。 至 内部 逻辑 RF(3) 4: 请始终在设计的 VDD 和温度范围下验证振 荡器性能。 2.4 OSC1 XTAL 注 3: 可能需要使用电阻Rs以避免对低驱动规格 的晶体造成过驱动。 使用顺序切割的晶体,可能会使振荡器产 生的频率超出晶体制造厂商所给出的参数 范围。 图 2-2: 1: 电容值越大,振荡器的稳定性越高,但同 时起振时间也越长。 PIC18FXXJ6X 图 2-3: 外部时钟输入工作原理 (EC 配置) 1: 关于 C1 和 C2 的初始值,请参见表 2-1。 2: 对于 AT 条形切割的晶体可能会需要一个串联电 阻 (RS)。 OSC1/CLKI 来自外部 系统的时钟 3: RF 的值随选定的振荡器模式变化。 PIC18FXXJ6X FOSC/4 表 2-1: OSC2/CLKO 晶振的电容选择 已测试的典型电容值: 振荡器 类型 晶振频率 HS 25 MHz C1 C2 15 pF 15 pF 如图 2-4 所示,在 HS 模式下, OSC1 引脚也可以连接 外部时钟源。在这种配置下,OSC2引脚保持开路状态。 图 2-4: 外部时钟输入工作原理 (HS 振荡器配置) 上述电容值仅供设计参考。 要得到理想的振荡器工作状况,可能需要不同的电容 值。用户应当在设计的 VDD 和温度条件下测试振荡器 的性能。请参见以下应用笔记以获取振荡器具体信息: • AN588,“PIC® Microcontroller Oscillator Design Guide” OSC1 来自外部 系统的时钟 PIC18FXXJ6X (HS 模式) 开路 OSC2 • AN826,“Crystal Oscillator Basics and Crystal Selection for rfPIC® and PIC® Devices” • AN849,“Basic PIC® Oscillator Design” • AN943,“Practical PIC® Oscillator Analysis and Design” • AN949,“Making Your Oscillator Work” 更多信息,请参见本表下方的 “注”。 DS39762A_CN 第 40 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 2.5 内部振荡器模块 器源内部生成所需的以太网时钟。频率的误差范围已规 定,基本上排除了使用陶瓷谐振器的可能性。更多详细信 息,请参见第 27.0 节 “电气特性”的表 27-6 中的参数 5。 PIC18F97J60 系列器件包含一个内部振荡器源(INTRC), 它提供了标称值为 31 kHz 的输出。INTRC 在器件上电时 被使能,并在器件的配置阶段为其提供时钟直到器件进 入工作模式为止。如果选择 INTRC 作为器件的时钟源或 者使能以下任一功能时,也会使能 INTRC: 2.6.1 • 故障保护时钟监视器 • 看门狗定时器 • 双速启动 • 可配置的预分频器 (1:2 或 1:3) • 5x PLL 倍频器 • 可配置的后分频器 (1:1、 1:2 或 1:3) 为了适应各种应用和单片机时钟速度,在时钟系统中包 括了独立的 PLL 模块。它由 3 个元件组成: 在第 24.0 节 “CPU 的特殊功能”中详细讨论了这些功 能。 PLL 模块的工作受 OSCTUNE 寄存器(寄存器 2-1)的 控制。PLL 模块的预分频器和后分频器可以和 PLL 自身 一起使用或独立使用,提供了一定范围的可供选择的系 统时钟频率,包括不能改变的主振荡器频率 25 MHz。 表 2-2 中给出了与操作兼容的所有可能的振荡器配置。 也可以通过将 FOSC2 配置位置 1,将 INTRC 配置为器 件启动时的默认时钟源。这将在第 2.7.1 节 “振荡器控 制寄存器”中讨论。 2.6 PLL 模块 以太网操作和单片机时钟 尽管PIC18F97J60系列器件可接受范围很广的晶振和外 部振荡器输入信号,但它们用在以太网应用中时,必须 始终使用 25 MHz 时钟源。不支持从其他频率的主振荡 寄存器 2-1: OSCTUNE:PLL 模块控制寄存器 R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0 U-0 U-0 PPST1 PLLEN(1) PPST0 PPRE — — — — bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 PPST1:PLL 后分频器配置位 1 = 2 分频 0 = 3 分频 bit 6 PLLEN:5x 倍频器 PLL 使能位 (1) 1 = 使能 PLL 0 = 禁止 PLL bit 5 PPST0:PLL 后分频器使能位 1 = 使能后分频器 0 = 禁止后分频器 bit 4 PPRE:PLL 预分频器配置位 1 = 2 分频 0 = 3 分频 bit 3-0 未用:读为 0 注 x = 未知 1: 仅在 ECPLL 和 HSPLL 振荡器配置中可用;其他情况下,此位不可用,并且读为 0。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 41 页 PIC18F97J60 系列 表 2-2: 不同 PLL 模块配置的器件时钟速度 5x PLL PLL 模块配置 (OSCTUNE<7:4>) PLL 预分频器 PLL 后分频器 x101 ÷2 禁止 ÷2 1111 (注 1) 31.2500 ÷3 0111 20.8333 禁止 ÷2 x100 41.6667 1110 20.8333 ÷3 0110 13.8899 禁止 ÷2 x00x 1011 25 (默认值) 6.2500 ÷3 0010 4.1667 ÷2 1011 4.1667 ÷3 1000 2.7778 使能 ÷3 禁止 (2) 禁止 ÷2 ÷3 时钟频率 (MHz) 图注: x = 无关位 注 1: 未实现的配置;代表超出单片机运行范围的时钟频率。 2: PLL 和后分频器都禁止时,预分频器自动禁止。 2.7 时钟源与振荡器切换 PIC18F97J60 系列器件包含了允许器件时钟源从主振 荡器切换到其他时钟源的功能。这些器件还提供 2 个备 用时钟源。当使能备用时钟源时,可以使用多种功耗管 理工作模式。 基本上,这些器件都有 3 种时钟源: • 主振荡器 • 辅助振荡器 • 内部振荡器模块 主振荡器包括外部晶振、谐振器模式和外部时钟模式。 特定的模式由 FOSC2:FOSC0 配置位定义。这些模式的 详细信息已在本章前面的内容中作过介绍。 DS39762A_CN 第 42 页 辅助振荡器是指那些不与 OSC1 或 OSC2 引脚连接的外 部时钟源。这些时钟源即使在控制器处于功耗管理模式 时仍然可以继续工作。PIC18F97J60 系列器件支持使用 Timer1 振荡器作为辅助振荡器。此振荡器在所有功耗管 理模式中通常用作实时时钟等功能的时基。 大部分情况下,在 RC0/T1OSO/T13CKI 和 RC1/T1OSI 引脚之间接有一个 32.768 kHz 的时钟晶振。在每个引 脚与地之间均接有负载电容。将在第 12.3 节 “Timer1 振荡器”中详细讨论 Timer1 振荡器。 除了作为主时钟源之外,内部振荡器还可以作为功耗管 理模式的时钟源。INTRC 源也可作为几种特殊功能部件 (例如 WDT 和故障保护时钟监视器)的时钟源。 图 2-1 显示了 PIC18F97J60 系列器件的时钟源。关于配 置寄存器的详细信息,请参见第 24.0 节 “CPU 的特殊 功能”。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 2.7.1 振荡器控制寄存器 OSCCON 寄存器(寄存器 2-2)控制全功耗模式和功耗 管理模式下器件时钟工作的多个方面。 系统时钟选择位 SCS1:SCS0 用于选择时钟源。可用的 时钟源包括主时钟(由 FOSC2:FOSC0 配置位定义)、 辅助时钟 (Timer1 振荡器)和内部振荡器。当更改一 个或多个位之后,接着是一段很短的时钟转换间隔,然 后时钟源会改变。 IDLEN 位决定当执行 SLEEP 指令时器件是进入休眠模 式还是某个空闲模式。 第 3.0 节“功耗管理模式”更详细地讨论了 OSCCON 寄 存器中标志位和控制位的使用。 注 OSTS (OSCCON<3>)和 T1RUN (T1CON<6>)位 指出当前提供器件时钟的是哪一个时钟源。 T1RUN 位 置 1 表明 Timer1 振荡器正在辅助时钟模式下提供器件 时钟。在功耗管理模式下,任何时候这些位中只有一个 会置 1。如果这些位都没有置 1,则表示当前时钟源是 INTRC,或内部振荡器刚刚起振且尚未稳定。 寄存器 2-2: R/W-0 IDLEN 1: 要选择辅助时钟源,必须使能 Timer1 振荡 器。通过将 Timer1 控制寄存器 中的 T1OSCEN 位 (T1CON<3>)置 1,可以 使能 Timer1 振荡器。如果未使能 Timer1 振荡器,则选择辅助时钟源的任何尝试都 会被忽略。 2: 建议在Timer1振荡器稳定工作之后再执行 SLEEP 指令,否则当 Timer1 振荡器起振 时可能会发生很长的延时。 OSCCON:振荡器控制寄存器 U-0 — U-0 U-0 R-q U-0 R/W-0 R/W-0 — OSTS(1) — SCS1 SCS0 — bit 7 bit 0 图注: q = 由配置决定的值 R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 IDLEN:空闲使能位 1 = 执行 SLEEP 指令后器件进入空闲模式 0 = 执行 SLEEP 指令后器件进入休眠模式 bit 6-4 未用:读为 0 bit 3 OSTS:振荡器状态位 (1) 1 = 器件使用 SCS1:SCS0 = 00 定义的振荡器源运行 0 = 器件使用 SCS1:SCS0 = 01、 10 或 11 定义的振荡器源运行 bit 2 未用:读为 0 bit 1-0 SCS1:SCS0:系统时钟选择位 11 = 内部振荡器 10 = 主振荡器 01 =Timer1 振荡器 当 FOSC2 = 1 时; 00 = 主振荡器 当 FOSC2 = 0 时; 00 = 内部振荡器 注 x = 未知 1: 双速启动使能时复位值为 0,禁止时为 1。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 43 页 PIC18F97J60 系列 2.7.1.1 系统时钟选择和 FOSC2 配置位 在所有形式的复位中,SCS 位都会被清零。在器件的默 认配置中,这意味着 FOSC1:FOSC0 (也就是 HS 或 EC 模式的一种)定义的主振荡器用作器件复位时的主 时钟源。 复位时的默认时钟配置可以随着 FOSC2 配置位的改变而 改变。当 SCS1:SCS0 = 00 时此位会影响时钟源的选择。 当 FOSC2 = 1(默认)时,不管何时 SCS1:SCS0 = 00, 都选择由FOSC1:FOSC0定义的振荡器源。当FOSC2 = 0 时,不管何时 SCS1:SCS0 = 00,都选择 INTRC 振荡器。 因为在复位时 SCS 位被清零,FOSC2 的设置也会更改复 位时的默认振荡器模式。 不管 FOSC2 的设置如何,INTRC 总是会在器件上电时 被使能。它将作为时钟源直到器件从存储器中装入了它 的配置值。此时 FOSC 配置位被读取并选择了振荡器的 工作模式。 注意主时钟或内部振荡器在任何给定条件下都会有两种 位设置选项,这取决于 FOSC2 的设置。 2.7.2 振荡器转换 PIC18F97J60 系列器件包含在时钟源切换时防止时钟 产生 “毛刺”的电路。在时钟切换时,系统时钟会有短 暂的停顿。该停顿的时间长度是旧时钟源的两个周期加 上新时钟源的三到四个周期的和。此公式假设新时钟源 是稳定的。 第 3.1.2 节“进入功耗管理模式”详细讨论了时钟切换。 2.8 在 RC_RUN 和 RC_IDLE 模式下,由内部振荡器提供器 件时钟源。无论是哪种功耗管理模式,31 kHz 的 INTRC 输出均可被直接用来提供时钟并且可被使能来支持多种 特殊的功能部件 (关于 WDT、故障保护时钟监视器和 双速启动的更多信息,请参见第 24.2 节 “看门狗定时 器(WDT)”到第 24.5 节“故障保护时钟监视器”)。 如果选择了休眠模式,所有的时钟源都会被停止。因为 休眠模式切断了所有晶体管的开启电流,休眠模式能实 现最小的器件电流消耗 (仅泄漏电流)。 在休眠期间使能任何片上功能都将增加休眠时的电流消 耗。要支持 WDT 工作,需要使能 INTRC。Timer1 振荡 器可以用来为实时时钟提供时钟源。不需要器件时钟源 的其他功能部件也可以工作(即,MSSP 从器件、PSP 和 INTx 引脚等)。在第 27.2 节 “直流特性:掉电和供 电电流”中列出了可能显著增加电流消耗的外设。 2.9 上电延时 由两个定时器控制上电延时,这样大多数应用都无需外 接复位电路。上电延时可以确保在器件电源稳定(常规 环境下)和主时钟稳定工作之前器件保持在复位状态。 关于上电延时的更多信息,请参见第 4.5 节 “上电延时 定时器 (PWRT)”。 第一个定时器是上电延时定时器 (PWRT),在上电时 它提供了固定的延迟时间 (表 27-12 中的参数 33); 它总是使能的。 功耗管理模式对各种时钟源的影响 当选定了 PRI_IDLE 模式后,指定的主振荡器会继续运 行而不中断。对于所有其他功耗管理模式,使用 OSC1 引脚的振荡器会被禁止。OSC1 引脚(以及由振荡器使 用的 OSC2 引脚)将会停止振荡。 表 2-3: 在辅助时钟模式下(SEC_RUN和SEC_IDLE),Timer1 振荡器作为器件时钟源工作。如果需要,Timer1 振荡器 也可以运行在所有功耗管理模式下为 Timer1 或 Timer3 提供时钟。 第二个定时器是振荡器起振定时器 (OST),用于在晶 振稳定前使芯片保持在复位状态 (HS 模式)。 OST 在 计数 1024 个振荡周期后允许振荡器为器件提供时钟。 POR之后有一个TCSD间隔的延时(表 27-12中的参数38), 在此延时期间控制器为执行指令做准备。 休眠模式下 OSC1 和 OSC2 引脚的状态 振荡器模式 OSC1 引脚 OSC2 引脚 EC 和 ECPLL 悬空,由外部时钟驱动 处于逻辑低电平 (时钟 /4 输出) HS 和 HSPLL 反馈反相器被禁止,处于静止电平 反馈反相器被禁止,处于静止电平 注: 关于由休眠和 MCLR 复位引起的延时,请参见第 4.0 节 “复位”中的表 4-2。 DS39762A_CN 第 44 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 3.0 3.1.1 功耗管理模式 SCS1:SCS0 位允许为功耗管理模式在三个时钟源中任 选其一。它们是: PIC18F97J60 系列器件提供了只需通过管理 CPU 和外 设的时钟源就可以管理功耗的功能。一般而言,较低的 时钟频率和由时钟源驱动的电路数目的减少会使功耗降 低。为了在应用中管理功耗,提供了三种主要的工作模 式: • 主时钟,由 FOSC2:FOSC0 配置位定义 • 辅助时钟 (Timer1 振荡器) • 内部振荡器 • 运行模式 • 空闲模式 • 休眠模式 3.1.2 进入功耗管理模式 可以通过装载 OSCCON 寄存器从一种功耗管理模式切 换到另一种功耗管理模式。 SCS1:SCS0 位选择时钟源 并确定使用运行模式还是空闲模式。更改这些位会导致 立即切换到一个新的时钟源 (假定新时钟源正在运 行)。此切换可能会引起时钟转换延时。第 3.1.3 节“时 钟转换和状态指示”及其后续章节将会讨论这些问题。 这些模式定义了需要为器件的哪些部分提供时钟以及时 钟的速度。运行和空闲模式可以使用三种时钟源(主时 钟源、辅助时钟源或内部振荡器)中的任意一种;而休 眠模式则不使用时钟源。 功耗管理模式包括几个由早期的 PIC® 器件提供的节省 功耗的功能。其中之一就是其他 PIC18 器件也提供的时 钟切换功能,该功能允许使用 Timer1 振荡器代替主振 荡器。节省功耗的功能还包括所有 PIC 器件都提供的休 眠模式,在该模式下,器件所有的时钟都停止。 3.1 时钟源 执行SLEEP指令可以触发进入功耗管理空闲模式或休眠 模式。最后实际进入哪个模式由 IDLEN 状态位决定。 更改功耗管理模式并不总是要求设置所有的位,而是取 决 于 当 前 的 模 式 和 将 要 切 换 到 的 模 式。通 过 在发 出 SLEEP 指令之前更改振荡器选择位或更改 IDLEN 位可 完成多种模式转换。如果已经正确配置了 IDLEN 位,可 能只需执行 SLEEP 指令就可实现模式切换。 选择功耗管理模式 选择功耗管理模式之前需要先做出两个决定:是否为 CPU 提 供 时 钟 源 以 及 选 择 何 种 时 钟 源。 IDLEN 位 (OSCCON<7>)控 制 是 否 为 CPU 提 供 时 钟源,而 SCS1:SCS0 位(OSCCON<1:0>)选择时钟源。表 3-1 总结了各个模式下的位设置、时钟源和受影响的模块。 表 3-1: 模式 功耗管理模式 OSCCON 位 (1) IDLEN<7> 模块时钟 可用时钟和振荡器源 SCS1:SCS0<1:0> CPU 外设 休眠 PRI_RUN 0 N/A 关闭 关闭 N/A 10 提供时钟 提供时钟 主时钟—— HS、EC、HSPLL 和 ECPLL ; 这是正常的全功耗执行模式。 无——所有时钟被禁止 SEC_RUN N/A 01 提供时钟 提供时钟 辅助时钟——Timer1 振荡器 RC_RUN N/A 11 提供时钟 提供时钟 内部振荡器 PRI_IDLE 1 10 关闭 提供时钟 主时钟——HS、 EC、 HSPLL 和 ECPLL SEC_IDLE 1 01 关闭 提供时钟 辅助时钟——Timer1 振荡器 RC_IDLE 1 11 关闭 提供时钟 内部振荡器 注 1: IDLEN 反映它在执行 SLEEP 指令时的值。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 45 页 PIC18F97J60 系列 3.1.3 3.2.2 时钟转换和状态指示 在两个时钟源之间进行转换所需的时间长度是旧时钟源 的两个周期与新时钟源的三到四个周期的和。此公式假 设新时钟源是稳定的。 以 下 两 位 用 于 指 明 当 前 的 时 钟 源 及 其 状 态:OSTS (OSCCON<3>)和 T1RUN (T1CON<6>)。一般来 说,在一个给定的功耗管理模式中,这两个位中只有一 个位会置 1。当 OSTS 位置 1 时,表明由主时钟提供器 件时钟。当 T1RUN 位置 1 时,表明由 Timer1 振荡器提 供时钟源。如果这些位均不置 1,则由 INTRC 为器件提 供时钟信号。 注: 3.1.4 3.2 SEC_RUN 模式与其他 PIC18 器件提供的“时钟切换” 功能兼容。在此模式下, CPU 和外设将 Timer1 振荡器 作为时钟源。这允许用户在使用高精度时钟源的情况下 仍可获得较低的功耗。 通过将 SCS1:SCS0 位置为 01 进入 SEC_RUN 模式。 器件时钟源被切换到 Timer1 振荡器(见图 3-1),主振 荡器被关闭, T1RUN 位 (T1CON<6>)被置 1 并且 OSTS 位被清零。 注: 执行 SLEEP 指令并不一定会将器件置于休 眠模式。它只是作为触发条件,让器件进 入休眠模式或一种空闲模式,具体何种模 式由 IDLEN 位的设置决定。 多条 SLEEP 命令 使用 SLEEP 指令调用功耗管理模式时,具体进入何种模 式在该指令执行那一刻由 IDLEN 位的设置决定。如果执 行了另一条 SLEEP 指令,器件将进入由此时 IDLEN 位 指定的功耗管理模式。如果 IDLEN 位已更改,器件将进 入由新的设置指定的新的功耗管理模式。 运行模式 SEC_RUN 模式 Timer1 振荡器应该在进入 SEC_RUN 模式 之前就已经运行了。如果在 SCS1:SCS0 位 被置为 01 时 T1OSCEN 位没有置 1,就不 会进入 SEC_RUN 模式。如果 Timer1 振荡 器已经被使能,但没有开始运行,器件时 钟将会延时直到该振荡器起振。在这种情 况下,最初的振荡器运行很不稳定,可能 会导致无法预料的结果。 在从 SEC_RUN 模式转换到 PRI_RUN 模式期间,外 设和 CPU 继续使用 Timer1 振荡器作为时钟源,直到 主时钟启动。当主时钟准备好以后,时钟切换回主时钟 (见图 3-2)。当时钟切换完成后,T1RUN 位被清零, OSTS 位被置 1 并且由主时钟提供器件时钟。这种唤 醒不会影响 IDLEN 和 SCS 位。Timer1 振荡器继续运 行。 在运行模式中,内核和外设的时钟都是激活的。这些运 行模式之间的区别就在于时钟源的不同。 3.2.1 PRI_RUN 模式 PRI_RUN 模式是单片机的正常全功耗执行模式。除非 使能了双速启动 (详细信息,请参见第 24.4 节 “双速 启动”),该模式也是器件复位后的默认模式。在此模式 下, OSTS 位置 1 (见第 2.7.1 节 “振荡器控制寄存 器”)。 DS39762A_CN 第 46 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 3-1: 进入 SEC_RUN 模式的转换时序 Q1 Q2 Q3 Q4 Q1 Q2 T1OSI 1 2 3 n-1 Q3 Q4 Q1 Q2 Q3 n 时钟转换 OSC1 CPU 时钟 外设 时钟 程序 计数器 PC 图 3-2: PC + 2 PC + 4 从 SEC_RUN 模式切换到 PRI_RUN 模式的转换时序 (HSPLL) Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 T1OSI OSC1 TOST(1) TPLL(1) 1 PLL 时钟 输出 2 n-1 n 时钟 转换 CPU 时钟 外设 时钟 程序 计数器 SCS1:SCS0 位改变 注 PC + 2 PC PC + 4 OSTS 位置 1 1:TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 47 页 PIC18F97J60 系列 3.2.3 RC_RUN 模式 在从 RC_RUN 模式转换到 PRI_RUN 模式期间,在主时 钟处于启动状态时,器件将继续使用 INTRC 作为时钟 源。当主时钟准备好以后,时钟切换回主时钟 (见 图 3-4)。当时钟切换完成后, OSTS 位被置 1 并且由主 时钟提供器件时钟。这种切换不会影响 IDLEN 和 SCS 位。如果使能了 WDT 或故障保护时钟监视器,INTRC 源 将继续运行。 在 RC_RUN 模式下,内部振荡器作为 CPU 和外设的时 钟源;主时钟关闭。此模式是在代码执行期间所有运行 模式中最节省功耗的运行模式。它非常适用于对定时精 度要求不高或者不是一直需要高速时钟的应用。 通过将 SCS 置为 11 可以进入此模式。当将时钟源切换 到 INTRC 时(见图 3-3),主振荡器将被关闭并且 OSTS 位被清零。 图 3-3: 到 RC_RUN 模式的转换时序 Q1 Q2 Q3 Q4 Q1 INTRC Q2 1 2 3 n-1 Q3 Q4 Q1 Q2 Q3 n 时钟转换 OSC1 CPU 时钟 外设 时钟 程序 计数器 PC 图 3-4: PC + 2 PC + 4 从 RC_RUN 模式切换到 PRI_RUN 模式的转换时序 Q1 Q2 Q4 Q3 Q2 Q3 Q4 Q1 Q2 Q3 Q1 INTRC OSC1 TOST(1) TPLL(1) 1 PLL 时钟 输出 2 n-1 n 时钟 转换 CPU 时钟 外设 时钟 程序 计数器 SCS1:SCS0 位改变 注 PC + 2 PC PC + 4 OSTS 位置 1 1:TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。 DS39762A_CN 第 48 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 3.3 如果在执行 SLEEP 指令时,IDLEN 位置 1,外设将使用 由 SCS1:SCS0 位选择的时钟作为时钟源,而 CPU 没有 时钟源。时钟源状态位不受影响。将 IDLEN 置 1 并执行 SLEEP 指令可以从给定的运行模式快速切换到相应的空 闲模式。 休眠模式 功耗管理休眠模式和所有其他 PIC 器件提供的传统休眠 模式相同。通过清零 IDLEN 位 (器件复位时的默认状 态)并执行 SLEEP 指令即可进入此模式。这将关闭所选 择的振荡器 (见图 3-5),并将所有的时钟源状态位清 零。 如果选择了 WDT, INTRC 时钟源将继续工作。如果使 能了 Timer1 振荡器,它也将继续运行。 从其他模式进入休眠模式不需要切换时钟。这是因为单 片机一旦进入休眠模式就不需要时钟了。如果选择了 WDT, INTRC 时钟源将继续工作。如果使能了 Timer1 振荡器,它也将继续运行。 由于 CPU 没有执行指令,器件只能通过中断、WDT 超 时或复位从空闲模式退出。当发生唤醒事件时,CPU 会 在其准备好执行代码前延时一个 TCSD 间隔 (表 27-12 中的参数 38)。当 CPU 开始执行代码时,它将沿用当 前空闲模式所使用的时钟源。例如,当从 RC_IDLE 模 式唤醒时,将使用内部振荡器模块为 CPU 和外设提供 时钟 (即 RC_RUN 模式)。这种唤醒不会影响 IDLEN 和 SCS 位。 当在休眠模式中发生唤醒事件时 (通过中断、复位或 WDT 超时),在时钟源(通过 SCS1:SCS0 位选择)准 备好之前器件将没有时钟源 (见图 3-6),或者如果使 能了双速启动或故障保护时钟监视器,它将使用内部振 荡器作为时钟源(见第 24.0 节“CPU 的特殊功能”)。 在这两种情况下,当由主时钟提供器件时钟时, OSTS 位将置 1。这种唤醒不会影响 IDLEN 和 SCS 位。 3.4 当处于任何空闲模式或休眠模式中时, WDT 超时会导 致 WDT 唤醒并进入当前由 SCS1:SCS0 位指定的运行 模式。 空闲模式 空闲模式允许在外设继续工作的同时有选择地关闭单片 机的 CPU。选择特定的空闲模式允许用户进一步管理功 耗。 图 3-5: 进入休眠模式的转换时序 Q1 Q2 Q3 Q4 Q1 OSC1 CPU 时钟 外设 时钟 休眠 程序 计数器 PC 图 3-6: PC + 2 从休眠模式唤醒的转换时序 (HSPLL) Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 OSC1 TOST(1) PLL 时钟 输出 TPLL(1) CPU 时钟 外设 时钟 程序 计数器 唤醒事件 注 PC + 2 PC PC + 4 PC + 6 OSTS 位置 1 1:TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 49 页 PIC18F97J60 系列 3.4.1 PRI_IDLE 模式 3.4.2 在三种低功耗空闲模式中,只有该模式不会禁止主器件 时钟。由于时钟源不需要 “热身”或是从其他振荡器转 换过来,选用此模式可以使对时间要求较高的应用以最 快的速度恢复器件运行,并使用较精确的主时钟源。 可以通过将 IDLEN 位置 1 并执行 SLEEP 指令以实现从 PRI_RUN 模式进入 PRI_IDLE 模式。如果器件处于另 一种运行模式,首先将 IDLEN 位置 1,然后将 SCS 位 置为 10 并执行 SLEEP。虽然 CPU 已被禁止,但外设 仍继续使用由FOSC1:FOSC0配置位指定的主时钟源为 其提供时钟信号。 OSTS 位保持置 1 (见图 3-7)。 当发生唤醒事件时,由主时钟源为 CPU 提供时钟。在唤 醒事件和代码执行开始之间需要一个 TCSD 间隔的延时。 该延时用来让 CPU 做好执行指令的准备。在唤醒之后, OSTS 位保持置 1 状态。这种唤醒不会影响 IDLEN 和 SCS 位 (见图 3-8)。 图 3-7: SEC_IDLE 模式 在 SEC_IDLE 模式下, CPU 被禁止,但外设继续将 Timer1 振荡器作为时钟源。可以通过将 IDLEN 位置 1 并执行 SLEEP 指令从 SEC_RUN 模式进入此模式。如 果器件处于另一种运行模式,首先将 IDLEN 位置 1,然 后将 SCS1:SCS0 置为 01 并执行 SLEEP。当时钟源切 换到 Timer1 振荡器时,主振荡器关闭, OSTS 位被清 零并且 T1RUN 位置 1。 当唤醒事件发生时,外设继续将 Timer1 振荡器作为时 钟源。唤醒事件发生后经过一个 TCSD 时间间隔, CPU 开始执行代码并使用 Timer1 振荡器作为其时钟源。这 种唤醒不会影响 IDLEN 和 SCS 位。Timer1 振荡器继续 运行 (见图 3-8)。 注: Timer1 振荡器应该在进入 SEC_IDLE 模式 之前就已经运行了。如果执行 SLEEP 指令 时 T1OSCEN 位没有置 1,就会忽略 SLEEP 指令并不会进入 SEC_IDLE 模式。如果使 能了 Timer1 振荡器,但它尚未运行,外设 时钟将会延时直到该振荡器起振。在这种 情况下,最初的振荡器运行很不稳定,可 能会导致无法预料的结果。 进入空闲模式的转换时序 Q1 Q4 Q3 Q2 Q1 OSC1 CPU 时钟 外设 时钟 程序 计数器 PC 图 3-8: PC + 2 从空闲模式唤醒进入运行模式的转换时序 Q1 Q2 Q3 Q4 OSC1 TCSD CPU 时钟 外设 时钟 程序 计数器 PC 唤醒事件 DS39762A_CN 第 50 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 3.4.3 RC_IDLE 模式 3.5.2 通过 WDT 超时退出 RC_IDLE 模式禁止 CPU,但仍继续由内部振荡器为外 设提供时钟。该模式允许在空闲期间对功耗进行控制。 根据 WDT 超时发生时器件所处的不同功耗管理模式会 引发不同的操作。 可以通过将IDLEN位置1并执行SLEEP指令从RC_RUN 模式进入此模式。如果器件处于另一种运行模式,首先 将 IDLEN 位置 1,然后清零 SCS 位并执行 SLEEP。当 时钟源切换到 INTRC 时,主振荡器被关闭, OSTS 位 被清零。 如果器件不在执行代码 (所有空闲模式和休眠模式), 超时将导致从功耗管理模式退出(见第 3.2 节“运行模 式”和第 3.3 节 “休眠模式”)。如果器件正在执行代 码 (所有运行模式),超时将导致 WDT 复位 (见 第 24.2 节 “看门狗定时器 (WDT)”)。 当唤醒事件发生时,外设继续将 INTRC 作为时钟源。在 唤醒事件后的 TCSD 间隔之后,CPU 开始执行代码并使 用 INTRC 作为时钟源。这种唤醒不会影响 IDLEN 和 SCS 位。如果使能了 WDT 或故障保护时钟监视器, INTRC 源将继续运行。 WDT 定时器和后分频器可由以下任一事件清零: 3.5 3.5.3 退出空闲和休眠模式 由中断、复位或 WDT 超时触发从休眠模式或任何空闲 模式的退出。本节将讨论从功耗管理模式退出的触发方 式。在每种功耗管理模式章节中我们已经讨论过其时钟 源子系统的作用 (见第 3.2 节 “运行模式”、第 3.3 节 “休眠模式”和第 3.4 节 “空闲模式”)。 3.5.1 • 执行 SLEEP 或 CLRWDT 指令 • 当前选择的时钟源失效 (如果使能了故障保护时 钟监视器) 通过中断退出 任何可用的中断源都可导致器件从空闲模式或休眠模式 退 出 到 运 行 模 式。要 使 能 此 功 能,必 须 通 过 将 对 应 INTCON 或 PIE 寄存器中的中断源允许位置 1 来允许中 断源。当相应的中断标志位置 1 时,触发退出操作。 当使用中断从空闲或休眠模式退出时,如果 GIE/GIEH 位 (INTCON<7>)置 1,程序就会跳转到中断向量处 执行代码。否则代码就会顺序执行 (见第 9.0 节 “中 断”)。 通过复位退出 通过复位退出空闲或休眠模式会自动强制器件使用 INTRC 运行。 3.5.4 在没有振荡器起振延时的情况下退出 从某些功耗管理模式退出完全不需要 OST 延时。有以 下两种情形: • 主时钟源不停止的 PRI_IDLE 模式 • 主时钟源为 EC 或 ECPLL 模式 在这些情况下,主时钟源不需要振荡器起振延时,因为 它已经在运行(PRI_IDLE),或者它本来就不需要振荡 器起振延时(EC)。但是,当器件退出休眠和空闲模式 时,在唤醒事件之后仍然需要一个固定的 TCSD 间隔的 延时,以便让 CPU 准备好执行代码。在延时后的第一 个时钟周期重新开始执行指令。 唤醒事件之后需要一个固定的 TCSD 间隔的延时,器件 才会退出休眠和空闲模式。CPU 需要此延时来准备执行 代码。在延时后的第一个时钟周期重新开始执行指令。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 51 页 PIC18F97J60 系列 注: DS39762A_CN 第 52 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 4.0 4.1 复位 PIC18F97J60 系列器件有以下几种不同的复位方式: a) b) c) d) e) f) g) h) 上电复位 (POR) 正常工作状态下的 MCLR 复位 功耗管理模式下的 MCLR 复位 看门狗定时器 (WDT)复位 (执行程序期间) 欠压复位 (BOR) RESET 指令复位 堆栈满复位 堆栈下溢复位 RCON 寄存器 通过 RCON 寄存器 (寄存器 4-1)跟踪器件复位事件。 该寄存器的低 5 位表明是否已经发生了特定的复位事 件。在大多数情况下,只能通过事件将这些位置 1,而 且必须在事件发生后由应用程序将它们清零。需要读取 所有这些标志位来确定刚发生的复位的类型。在第 4.6 节 “寄存器的复位状态”中对此进行了更详细的说明。 RCON 寄存器还有设置中断优先级的控制位(IPEN)。 在第 9.0 节 “中断”中讨论了中断优先级。 本节将讨论由 MCLR、 POR 和 BOR 产生的复位,并 涉及各种起振定时器的工作方式。堆栈复位事件将在 第 5.1.6.4 节 “堆栈满和下溢复位”中讨论。 WDT 复 位将在第 24.2 节 “看门狗定时器 (WDT)”中讨论。 图 4-1 给出了片上复位电路的简化框图。 图 4-1: 片上复位电路的简化框图 RESET 指令 堆栈满 / 下溢复位 堆栈 指针 外部复位 MCLR ( )_IDLE 休眠 WDT 超时 VDD 上升 沿检测 VDD POR 脉冲 欠压 复位 (1) S PWRT 32 µs PWRT INTRC 注 66 ms R 11 位脉动计数器 Q Chip_Reset 1: ENVREG 引脚必须连接到高电平以使能欠压复位。当电源电压不能满足器件供电条件时,片上稳压器将产生欠压 复位。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 53 页 PIC18F97J60 系列 寄存器 4-1: RCON:复位控制寄存器 R/W-0 U-0 U-0 R/W-1 R-1 R-1 R/W-0 R/W-0 IPEN — — RI TO PD POR BOR bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 IPEN:中断优先级使能位 1 = 使能中断优先级 0 = 禁止中断优先级 (PIC16CXXX 兼容模式) bit 6-5 未用:读为 0 bit 4 RI:RESET 指令标志位 1 = 未执行 RESET 指令 (只能由固件置 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:上电复位状态位 1 = 未发生上电复位 (只能由固件置 1) 0 = 已发生上电复位 (必须在发生上电复位后由软件置 1) bit 0 BOR:欠压复位状态位 1 = 未发生欠压复位 (只能由固件置 1) 0 = 已发生欠压复位 (必须在发生欠压复位后由软件置 1) 注 1: 建议在检测到上电复位后,将 POR 位置 1,以便继续检测后续的上电复位。 2: 如果禁止了片上稳压器, BOR 则总是保持为 0。更多信息,请参见第 4.4.1 节 “检测 BOR”。 3: 当 BOR 为 0 并且 POR 为 1 时(假定在上电复位之后立即用软件将 POR 置 1),可以说已发生了欠压复位。 DS39762A_CN 第 54 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 4.2 图 4-2: 主复位 (MCLR) MCLR 引脚提供触发硬件外部复位器件的方法。将该引 脚拉低可以产生复位信号。PIC18 扩展的单片机器件在 MCLR 复位路径上有一个噪声滤波器,该滤波器可以检 测并滤除小的干扰脉冲。 D R R1 C 上电复位 (POR) 只要当 VDD 上升超过某个门限时,就会在片上产生上电 复位条件。这使得 VDD 达到满足器件正常工作的数值 时,器件会以初始化状态启动。 注 为了利用 POR 电路,需要将 MCLR 引脚通过一个电阻 (阻值范围为 1 kΩ 到 10 kΩ)连接到 VDD。这样可以省 去产生上电复位延时通常所需的外部 RC 元件。VDD 的 最小上升速率已指定 (参数 D004)。上升速率缓慢的 情况,请参见图 4-2。 POR 事件由 POR 位 (RCON<1>)捕获。每当发生上 电复位时,该位的状态就会被置为 0 ;任何其他复位事 件均不能改变它。任何硬件事件均不能将 POR 复位为 1。要捕获多个事件,用户必须在上电复位之后用软件 手动将该位复位为 1。 欠压复位 (BOR) 当内部稳压器被使能时(ENVREG 引脚连接到 VDD), PIC18F97J60 系列器件就具备了简单的 BOR 功能。只 要 VDD 低于 VBOR (参数 D005)的时间大于 TBOR (参数 35)就会复位器件。如果 VDD 降到 VBOR 以下的时间小 于 TBOR,器件是否发生复位不确定。芯片将保持欠压 复位状态,直至 VDD 电压上升到 VBOR 以上。 MCLR PIC18FXXJ6X 1: 仅当 VDD 上电速率过慢时才需要外部上电复 位电路。二极管 D 有助于在 VDD 掉电时使电 容迅速放电。 2: 建议 R < 40 kΩ,确保电阻 R 两端压降符合器 件的电气规范。 3: R1 ≥ 1 kΩ 将限制任何电流从外部电容 C 流入 MCLR,以避免由于静电放电 (Electrostatic Discharge, ESD)或 电 过 载 (Electrical Overstress, EOS)导致 MCLR/VPP 引脚损 坏。 当器件开始正常工作 (即,退出复位状态)时,器件的 工作参数 (电压、频率和温度等)必须得到满足,以确 保其正常工作。如果不满足这些条件,那么器件必须保 持在复位状态,直到满足工作条件为止。 4.4 VDD VDD 任何内部复位,包括 WDT 复位,均不能将 MCLR 引脚 驱动为低电平。 4.3 外部上电复位电路 (VDD 缓慢上电 的情况) 4.4.1 检测 BOR BOR 位在欠压复位或上电复位事件时总是复位为 0。因 此只通过读 BOR 位的状态很难确定是否发生过欠压复 位事件。更可靠的方法是同时检查 POR 和 BOR 的状 态。假定在发生任何上电复位事件后,POR 位被立即用 软件复位为 1。如果 BOR 为 0 同时 POR 为 1,那么就 可以断定已经发生了欠压复位事件。 如果禁止稳压器,也会禁止欠压复位功能。在这种情况 下,不能使用 BOR 位来确定欠压复位事件。上电复位 事件仍会将 BOR 位清零。 一旦发生BOR,上电延时定时器将芯片保持在复位状态 的时间就是 TPWRT (参数 33)。如果在上电延时定时 器运行过程中, VDD 电压降到 VBOR 以下,芯片将重新 回到欠压复位状态并且初始化上电延时定时器。一旦 VDD 电压上升到 VBOR 以上,上电延时定时器将重新执 行延时。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 55 页 PIC18F97J60 系列 4.5 4.5.1 上电延时定时器 (PWRT) PIC18F97J60 系 列 器 件 具 有 片 上 上 电 延 时 定 时 器 (PWRT)以帮助稳定上电复位过程。 PWRT 总是使能 的。其主要功能是确保在代码执行之前,器件的电压 是稳定的。 PIC18F97J60 系列器件的上电延时定时器(PWRT)是 一个 11 位计数器,它使用INTRC时钟源作为时钟输入。 该定时器可产生大约 2048 x 32 µs = 66 ms 的时间间 隔。 PWRT 计数期间,器件保持在复位状态。 延时时序 在 POR 脉冲被清零后,启动 PWRT 延时。总延迟时间 将取决于 PWRT 的状态。图 4-3、图 4-4、图 4-5 和图 4-6 都说明了在使能上电延时定时器时的延时序列。 由于延时是由 POR 脉冲触发的,因此如果 MCLR 保持 足够长时间的低电平, PWRT 将结束。将 MCLR 电平 拉高后器件将立即开始执行代码 (图 4-5)。这对于测 试或同步多个并行工作的 PIC18FXXJ6X 器件是非常有 用的。 上电延时时间取决于 INTRC 时钟,并且由于温度和工 艺的不同,不同器件的延迟时间也将各不相同。详情请 参见直流参数 33。 图 4-3: 上电延时时序 (MCLR 连接到 VDD, VDD 电压上升时间 < TPWRT) VDD MCLR 内部 POR TPWRT PWRT 延时 内部复位 图 4-4: 上电延时时序 (MCLR 未连接到 VDD):情形 1 VDD MCLR 内部 POR TPWRT PWRT 延时 内部复位 DS39762A_CN 第 56 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 4-5: 上电延时时序 (MCLR 未连接到 VDD):情形 2 VDD MCLR 内部 POR TPWRT PWRT 延时 内部复位 图 4-6: 缓慢上升时间 (MCLR 连接到 VDD, VDD 电压上升时间 > TPWRT) 3.3V VDD 0V 1V MCLR 内部 POR TPWRT PWRT 延时 内部复位 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 57 页 PIC18F97J60 系列 4.6 大多数寄存器不受 WDT 唤醒的影响,这是因为 WDT 唤 醒被视为对正常工作的恢复。如表 4-1 所示,RCON 寄 存器中的状态位:RI、 TO、 PD、 POR 和 BOR,在不 同的复位情形中会分别被置 1 或清零。可在软件中使用 这些状态位判断复位的性质。 寄存器的复位状态 大多数寄存器不受复位的影响。在 POR 时这些寄存器 的状态不确定,而在其他复位时它们的状态不变。而剩 余寄存器则根据不同的复位类型被强制为 “复位状 态”。 表 4-1: 表 4-2 描述了所有特殊功能寄存器的复位状态。可以将 这些复位状态分类为上电和欠压复位、主复位、WDT 复 位以及 WDT 唤醒。 RCON 寄存器的状态位、含义以及初始化状态 RCON 寄存器 STKPTR 寄存器 程序 计数器 (1) RI TO PD POR BOR 上电复位 0000h 1 1 1 0 0 0 0 RESET 指令 0000h 0 u u u u u u 条件 STKFUL STKUNF 欠压复位 0000h 1 1 1 u 0 u u 功耗管理运行模式下的 MCLR 复位 0000h u 1 u u u u u 功耗管理空闲和休眠模式下的 MCLR 复位 0000h u 1 0 u u u u 全功耗或功耗管理运行模式期间的 WDT 超时 0000h u 0 u u u u u 全功耗执行期间的 MCLR 复位 0000h u u u u u u u 堆栈满复位 (STVREN = 1) 0000h u u u u u 1 u 堆栈下溢复位 (STVREN = 1) 0000h u u u u u u 1 堆栈下溢错误 (不是真正的复位, STVREN = 0) 0000h u u u u u u 1 功耗管理空闲或休眠模式下的 WDT 超时 PC + 2 u 0 0 u u u u 通过中断从功耗管理模式退出 PC + 2 u u 0 u u u u 图注: u = 不变 注 1: 当器件被中断唤醒且 GIEH 或 GIEL 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 DS39762A_CN 第 58 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 4-2: 所有寄存器的初始化状态 寄存器 适用器件 上电复位, 欠压复位 MCLR 复位, WDT 复位, RESET 指令, 堆栈复位 通过 WDT 或 中断唤醒器件 TOSU PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---0 uuuu(1) TOSH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu(1) TOSL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu(1) STKPTR PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 00-0 0000 uu-0 0000 uu-u uuuu(1) PCLATU PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu PCLATH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu PCL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 PC + 2(2) TBLPTRU PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --00 0000 --00 0000 --uu uuuu TBLPTRH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu TBLPTRL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu TABLAT PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu PRODH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PRODL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu INTCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 000x 0000 000u uuuu uuuu(3) INTCON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu(3) INTCON3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1100 0000 1100 0000 uuuu uuuu(3) INDF0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A POSTINC0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A POSTDEC0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A PREINC0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A PLUSW0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A FSR0H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- xxxx ---- uuuu ---- uuuu FSR0L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu WREG PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu INDF1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A POSTINC1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A POSTDEC1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A PREINC1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A PLUSW1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A FSR1H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- xxxx ---- uuuu ---- uuuu FSR1L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu BSR PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- 0000 ---- 0000 ---- uuuu INDF2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A POSTINC2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A POSTDEC2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A PREINC2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A PLUSW2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X N/A N/A N/A FSR2H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- xxxx ---- uuuu ---- uuuu FSR2L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu 图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。阴影单元表示不适用于指定器件。 注 1: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU、 TOSH 和 TOSL。将 STKPTR 修改为指 向硬件堆栈的下一个单元。 2: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 59 页 PIC18F97J60 系列 表 4-2: 所有寄存器的初始化状态 (续) 寄存器 适用器件 上电复位, 欠压复位 MCLR 复位, WDT 复位, RESET 指令, 堆栈复位 通过 WDT 或 中断唤醒器件 STATUS PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---x xxxx ---u uuuu ---u uuuu TMR0H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu TMR0L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu T0CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu OSCCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0--- q-00 0--- q-00 u--- q-uu ECON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 00-- 0000 00-- uuuu uu-- WDTCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- ---0 ---- ---0 ---- ---u RCON(4) PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0--1 1100 0--q qquu u--u qquu TMR1H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu TMR1L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu T1CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 u0uu uuuu uuuu uuuu TMR2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu PR2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 1111 1111 T2CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 0000 -000 0000 -uuu uuuu SSP1BUF PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu SSP1ADD PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu SSP1STAT PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu SSP1CON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu SSP1CON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ADRESH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu ADRESL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu ADCON0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0-00 0000 0-00 0000 u-uu uuuu ADCON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --00 0000 --00 0000 --uu uuuu ADCON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0-00 0000 0-00 0000 u-uu uuuu CCPR1H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCPR1L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCP1CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu CCPR2H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCPR2L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCP2CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu CCPR3H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCPR3L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCP3CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ECCP1AS PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu CVRCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu CMCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0111 0000 0111 uuuu uuuu TMR3H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu TMR3L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu T3CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 uuuu uuuu uuuu uuuu 图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。阴影单元表示不适用于指定器件。 注 1: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU、 TOSH 和 TOSL。将 STKPTR 修改为指 向硬件堆栈的下一个单元。 2: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1。 DS39762A_CN 第 60 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 4-2: 所有寄存器的初始化状态 (续) 寄存器 适用器件 上电复位, 欠压复位 MCLR 复位, WDT 复位, RESET 指令, 堆栈复位 通过 WDT 或 中断唤醒器件 PSPCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 ---- 0000 ---- uuuu ---- SPBRG1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu RCREG1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu TXREG1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu TXSTA1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0010 0000 0010 uuuu uuuu RCSTA1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 000x 0000 000x uuuu uuuu EECON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- ---- ---- ---- ---- ---- EECON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 x00- ---0 x00- ---u uuu- IPR3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu PIR3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu(3) PIE3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu IPR2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1-11 1111 1-11 uuuu u-uu PIR2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0-00 0000 0-00 uuuu u-uu(3) PIE2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0-00 0000 0-00 uuuu u-uu IPR1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu PIR1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu(3) PIE1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MEMCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0-00 --00 0-00 --00 u-uu --uu OSCTUNE PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 ---- 0000 ---- uuuu ---- TRISJ PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --11 ---- --11 ---- --uu ---- TRISH TRISG TRISF TRISE TRISD PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---1 ---- ---1 ---- ---u ---- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---1 1111 ---1 1111 ---u uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 111- 1111 111- uuuu uuu- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --11 1111 --11 1111 --uu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- -111 ---- -111 ---- -uuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu TRISC PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu TRISB PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu TRISA PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --11 1111 --11 1111 --uu uuuu LATJ PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --xx ---- --uu ---- --uu ---- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu LATH 图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。阴影单元表示不适用于指定器件。 注 1: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU、 TOSH 和 TOSL。将 STKPTR 修改为指 向硬件堆栈的下一个单元。 2: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 61 页 PIC18F97J60 系列 表 4-2: 所有寄存器的初始化状态 (续) 寄存器 LATG LATF 适用器件 上电复位, 欠压复位 MCLR 复位, WDT 复位, RESET 指令, 堆栈复位 通过 WDT 或 中断唤醒器件 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---x ---- ---u ---- ---u ---- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---x xxxx ---u uuuu ---u uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxx- uuuu uuu- uuuu uuu- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu LATE PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --xx xxxx --uu uuuu --uu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu LATD PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- -xxx ---- -uuu ---- -uuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu LATC PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu LATB PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu LATA PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 00xx xxxx 00uu uuuu uuuu uuuu PORTJ PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --xx ---- --uu ---- --uu ---- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PORTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PORTG PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---x ---- ---u ---- ---u ---- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---x xxxx ---u uuuu ---u uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 111x xxxx 111u uuuu uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X x000 000- x000 000- uuuu uuu- PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X x000 000- x000 000- uuuu uuu--uu uuuu PORTF PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --xx xxxx --uu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- -xxx ---- -uuu ---- -uuu PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PORTC PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PORTB PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu PORTA PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0-0x 0000 0-0u 0000 u-uu uuuu SPBRGH1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu BAUDCON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0100 0-00 01-0 0-00 uu-u u-uu SPBRGH2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu BAUDCON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0100 0-00 01-0 0-00 uu-u u-uu ERDPTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 1010 ---0 1010 ---u uuuu PORTE PORTD ERDPTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 0101 1111 0101 uuuu uuuu ECCP1DEL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu TMR4 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu PR4 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 1111 1111 T4CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 0000 -000 0000 -uuu uuuu CCPR4H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCPR4L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu 图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。阴影单元表示不适用于指定器件。 注 1: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU、 TOSH 和 TOSL。将 STKPTR 修改为指 向硬件堆栈的下一个单元。 2: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1。 DS39762A_CN 第 62 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 4-2: 所有寄存器的初始化状态 (续) 寄存器 适用器件 上电复位, 欠压复位 MCLR 复位, WDT 复位, RESET 指令, 堆栈复位 通过 WDT 或 中断唤醒器件 CCP4CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --00 0000 --00 0000 --uu uuuu CCPR5H PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCPR5L PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu CCP5CON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --00 0000 --00 0000 --uu uuuu SPBRG2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu RCREG2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu TXREG2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu TXSTA2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0010 0000 0010 uuuu uuuu RCSTA2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 000x 0000 000x uuuu uuuu ECCP3AS PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ECCP3DEL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ECCP2AS PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ECCP2DEL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu SSP2BUF PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu SSP2ADD PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu SSP2STAT PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu SSP2CON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu SSP2CON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EDATA PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X xxxx xxxx uuuu uuuu uuuu uuuu EIR PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 0-00 -000 0-00 -uuu u-uu ECON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 100- ---- 100- ---- uuu- ---- ESTAT PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -0-0 -000 -0-0 -000 -u-u -uuu EIE PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 0-00 -000 0-00 -uuu u-uu EDMACSH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EDMACSL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EDMADSTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu EDMADSTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EDMANDH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu EDMANDL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EDMASTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu EDMASTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ERXWRPTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu ERXWRPTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ERXRDPTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0101 ---0 0101 ---u uuuu ERXRDPTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1010 1111 1010 uuuu uuuu ERXNDH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---1 1111 ---1 1111 ---u uuuu ERXNDL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1111 1111 1111 uuuu uuuu ERXSTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0101 ---0 0101 ---u uuuu ERXSTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1111 1010 1111 1010 uuuu uuuu 图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。阴影单元表示不适用于指定器件。 注 1: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU、 TOSH 和 TOSL。将 STKPTR 修改为指 向硬件堆栈的下一个单元。 2: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 63 页 PIC18F97J60 系列 表 4-2: 所有寄存器的初始化状态 (续) 寄存器 适用器件 上电复位, 欠压复位 MCLR 复位, WDT 复位, RESET 指令, 堆栈复位 通过 WDT 或 中断唤醒器件 ETXNDH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu ETXNDL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ETXSTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu ETXSTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EWRPTH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu EWRPTL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPKTCNT PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu ERXFCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 1010 0001 1010 0001 uuuu uuuu EPMOH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu EPMOL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMCSH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMCSL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM7 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM6 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM5 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM4 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EPMM0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT7 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT6 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT5 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT4 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EHT0 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MIRDH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MIRDL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MIWRH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MIWRL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MIREGADR PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu MICMD PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- --00 ---- --00 ---- --uu MICON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0--- ---- 0--- ---- u--- ---- MAMXFLH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0110 0000 0110 uuuu uuuu MAMXFLL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MACLCON2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X --11 0111 --11 0111 --uu uuuu MACLCON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- 1111 ---- 1111 ---- uuuu 图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。阴影单元表示不适用于指定器件。 注 1: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU、 TOSH 和 TOSL。将 STKPTR 修改为指 向硬件堆栈的下一个单元。 2: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1。 DS39762A_CN 第 64 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 4-2: 所有寄存器的初始化状态 (续) 寄存器 适用器件 上电复位, 欠压复位 MCLR 复位, WDT 复位, RESET 指令, 堆栈复位 通过 WDT 或 中断唤醒器件 MAIPGH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 0000 -000 0000 -uuu uuuu MAIPGL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 0000 -000 0000 -uuu uuuu MABBIPG PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 0000 -000 0000 -uuu uuuu MACON4 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X -000 --00 -000 --00 -uuu --uu MACON3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MACON1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---0 0000 ---0 0000 ---u uuuu EPAUSH PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0001 0000 0001 0000 000u uuuu EPAUSL PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu EFLOCON PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- -000 ---- -000 ---- -uuu MISTAT PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X ---- 0000 ---- 0000 ---- uuuu MAADR2 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MAADR1 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MAADR4 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MAADR3 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MAADR6 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu MAADR5 PIC18F6XJ6X PIC18F8XJ6X PIC18F9XJ6X 0000 0000 0000 0000 uuuu uuuu 图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。阴影单元表示不适用于指定器件。 注 1: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU、 TOSH 和 TOSL。将 STKPTR 修改为指 向硬件堆栈的下一个单元。 2: 当器件被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断向量 (0008h 或 0018h)。 3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 65 页 PIC18F97J60 系列 注: DS39762A_CN 第 66 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.0 5.1 存储器构成 PIC18 单片机具有一个 21 位程序计数器,可以对 2 MB 的程序存储器空间进行寻址。访问存储器物理地址上边 界和这个 2 MB 地址之间的存储单元会返回全 0 (NOP 指令)。 PIC18 闪存单片机器件有两种类型的存储器: • 程序存储器 • 数据 RAM 由于是哈佛架构的器件,数据和程序存储器使用不同的 总线,因而可同时访问这两种存储器空间。 第 6.0 节 “闪存程序存储器”提供了关于闪存程序存储 器操作的更多详细信息。 图 5-1: 程序存储器构成 整个 PIC18F97J60 系列提供了三种大小的片上闪存程 序存储器,从 64 KB (至多 32,764 条单字指令)到 128 KB (65,532 条单字指令)。图 5-1 给出了该系列 的各个器件的程序存储器映射图。 PIC18F97J60 系列器件的存储器映射图 PC<20:0> CALL, CALLW, RCALL, RETURN, RETFIE, RETLW, ADDULNK, SUBULNK 21 1 级堆栈 •• • 31 级堆栈 PIC18FX6J60 PIC18FX6J65 PIC18FX7J60 片上 存储器 片上 存储器 片上 存储器 配置字 017FFFh 配置字 未用 读为 0 01FFFFh 用户存储器空间 00FFFFh 配置字 未用 读为 0 000000h 未用 读为 0 1FFFFFh 注: 存储器空间的大小未按比例显示。放大了程序存储器区域以显示细节。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 67 页 PIC18F97J60 系列 5.1.1 5.1.2 存储器硬件编码向量 闪存配置字 所有的 PIC18 器件在它们的程序存储器空间内共有 3 个 硬件编码的返回向量。复位向量地址是在器件发生任何 复位时程序计数器返回的默认值;它位于 0000h。 由于 PIC18F97J60 系列器件没有固定的配置存储器,所 以保留片上程序存储器顶部的 4 个字来保存配置信息。 复位时,该配置信息被复制到配置寄存器。 PIC18 器件还有两个中断向量地址,用于处理高优先级 和低优先级中断。高优先级中断向量位于 0008h,低优 先级中断向量位于 0018h。它们在程序存储器映射图中 的相对位置如图 5-2 所示。 配置字由低到高顺序存储在程序存储器单元中,从最低 地址开始存放 CONFIG1 的低字节,到 CONFIG4 的高 字节结束。对于这些器件,只使用从 CONFIG1 到 CONFIG3 的配置字,保留 CONFIG4。 PIC18F97J60 系列器件的闪存配置字的实际地址如表 5-1所示。图5-2 给出了闪存配置字以及其他的存储器向量在存储器映射 图中的位置。 图 5-2: PIC18F97J60 系列器件的硬件编码 向量和配置字单元 复位向量 0000h 高优先级中断向量 0008h 低优先级中断向量 0018h 第 24.1 节 “配置位”中提供了有关器件配置字的更多 详细信息。 表 5-1: 器件 PIC18F97J60 系列器件的闪存 配置字 程序存储器 (KB) 配置字地址 64 FFF8h 到 FFFFh 96 17FF8h 到 17FFFh 128 1FFF8h 到 1FFFFh PIC18F66J60 片上 程序存储器 PIC18F86J60 PIC18F96J60 PIC18F66J65 PIC18F86J65 PIC18F96J65 闪存配置字 PIC18F67J60 (存储器的顶部 -7) (存储器的顶部) PIC18F87J60 PIC18F97J60 读为 0 1FFFFFh 图注: (存储器的顶部)代表片上程序存储器空 间的上边界 (特定器件的具体值,请参见 图 5-1)。阴影区域表示未实现的存储器。 这些区域未按比例显示。 DS39762A_CN 第 68 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.1.3 PIC18F9XJ60/9XJ65 程序存储器模式 • 扩展单片机模式允许将内部和外部程序存储器作为 一个整体进行访问。器件可以访问其整个的片上程 序存储器。除此之外,器件还可以访问外部程序存 储器,寻址范围最大限制为 2 MB。程序可按照需 要自动在两个存储器之间切换执行。 此系列中的 100 引脚器件可以对总共 2 MB 的程序存储 器进行寻址。这是通过外部存储器总线实现的。控制器 有两种不同的工作模式: • 单片机 (MC) • 扩展单片机 (EMC) EMB 配置位的设置还能控制外部存储器的地址总线宽 度。在第 7.0 节 “外部存储器总线”中对此有更详细的 论述。 通过设置 EMB 配置位 (CONFIG3L<5:4>)决定程序 存储器模式,如寄存器 5-1 所示。(关于器件配置位的 更多详细信息,请参见第 24.1 节 “配置位”。) 在这两种模式下,单片机都能访问数据 RAM。 图 5-3 比较了不同程序存储器模式的存储器映射图。 表 5-2 中更充分地说明了片上存储器和外部存储器在 访问限制方面的差异。 程序存储器模式的工作方式如下: • 单片机模式只访问片上闪存存储器。尝试读片上存储 器顶部以上的地址单元会导致读取值为全 0 (NOP 指令)。 单片机模式也是 64 引脚和 80 引脚器件唯一可用的工 作模式。 寄存器 5-1: CONFIG3L:配置寄存器 3 低字节 R/WO-1 R/WO-1 R/WO-1 R/WO-1 R/WO-1 U-0 U-0 U-0 WAIT(1) BW(1) EMB1(1) EMB0(1) EASHFT(1) — — — bit 7 bit 0 图注: R = 可读位 WO = 一次性写入位 U = 未用位,读为 0 -n = 未对器件编程时的值 1=置1 bit 7 WAIT:外部总线等待使能位 (1) 1 = 禁止外部存储器总线上的操作的等待状态 0 = 使能外部存储器总线上的操作的等待状态并由 MEMCON<5:4> 选择 bit 6 BW:数据总线宽度选择位 (1) 1 = 16 位数据宽度模式 0 = 8 位数据宽度模式 bit 5-4 EMB1:EMB0:外部存储器总线配置位 (1) 11 = 单片机模式,禁止外部总线 10 = 扩展单片机模式, 12 位地址模式 01 = 扩展单片机模式, 16 位地址模式 00 = 扩展单片机模式, 20 位地址模式 bit 3 EASHFT:外部地址总线平移使能位 (1) 1 = 使能地址平移;外部总线上的地址是以 000000h 为起始地址的偏移值 0 = 禁止地址平移;外部总线上的地址反映 PC 值 bit 2-0 未用:读为 0 注 0 = 清零 1: 仅在 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 69 页 PIC18F97J60 系列 5.1.4 为了避免这种情况,扩展单片机模式使用了一个地址平 移功能以使能自动的地址转换。在此模式下,放在外部 总线上的地址值减去片上程序存储器的大小并被重新映 射到从 0000h 开始的地址处。这样就可以利用外部存储 器的全部存储空间。 扩展单片机模式和地址平移 默认情况下,处于扩展单片机模式的器件将指向外部存 储器空间范围内的程序计数器值直接放到外部地址总线 上。实际上,这意味着外部存储器中低于片上存储器顶 部的地址都不能被访问。 图 5-3: PIC18F97J60 系列程序存储器模式的存储器映射图 单片机模式 (1) 片上 存储器 空间 扩展单片机模式 (2) 外部 存储器 空间 片上 存储器 空间 不能 访问 注 片上 程序 存储器 (存储器的顶部) (存储器的顶部)+1 外部 存储器 (存储器的顶部) (存储器的顶部)+1 外部 存储器 映射 到 外部 存储器 空间 映射 到 外部 存储器 空间 1FFFFFh – (存储器的顶部) 1FFFFFh 1FFFFFh 1FFFFFh 图注: 片上 存储器 空间 000000h 片上 程序 存储器 (存储器的顶部) (存储器的顶部)+1 读为 0 外部 存储器 空间 000000h 000000h 片上 程序 存储器 带地址平移的 扩展单片机模式 (2) (存储器的顶部)代表片上程序存储器空间的上边界 (关于器件的具体值,请参见图 5-1)。阴影区域代表未实现或 不能访问的区域,取决于不同模式。 1: 此模式是 64 引脚和 80 引脚器件唯一可用的模式,也是 100 引脚器件的默认模式。 2: 这些模式仅在 100 引脚器件上可用。 表 5-2: PIC18F9XJ60/9XJ65 程序存储器模式下的存储器访问 内部程序存储器 外部程序存储器 工作模式 程序执行 表读 表写 程序执行 表读 表写 单片机 可以 可以 可以 不可以 不可以 不可以 扩展单片机 可以 可以 可以 可以 可以 可以 DS39762A_CN 第 70 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.1.5 通过 21 位的 RAM 和一个 5 位的堆栈指针 STKPTR 来 实现 31 字的堆栈操作。堆栈既不占用程序存储器空间, 也不占用数据存储器空间。堆栈指针是可读写的,并且 通过栈顶的特殊功能寄存器可以读写栈顶地址。也可以 使用这些寄存器将数据压入堆栈或者从堆栈弹出。 程序计数器 程序计数器(Program Counter,PC)指定欲取出执行 的指令的地址。PC 为 21 位宽,且保存在三个不同的 8 位寄存器中。存储低字节的寄存器称为 PCL 寄存器,该 寄存器可读写。存储高字节的寄存器,即 PCH 寄存器, 存储 PC<15:8> 位;该寄存器不可直接读写。更新 PCH 寄存器的操作是通过 PCLATH 寄存器实现的。存储最高 字节的寄存器称为 PCU。该寄存器存储 PC<20:16> 位; 它也不能直接读写。更新 PCU 寄存器的操作是通过 PCLATU 寄存器实现的。 执行 CALL 类型的指令时,执行进栈操作:首先堆栈指 针加 1,并且将 PC 的内容写入堆栈指针所指向的地址 单元(PC 已经指向 CALL 下一条指令)。执行 RETURN 类型的指令时,执行出栈操作:STKPTR 所指向的地址 单元的内容会被传送给 PC,然后堆栈指针减 1。 PCLATH 和 PCLATU 的内容通过执行写 PCL 的操作被 传送到程序计数器。同样,程序计数器的两个高字节通 过读 PCL 的操作被传送到 PCLATH 和 PCLATU。这对 于计算 PC 的偏移量很有用处 (见第 5.1.8.1 节 “计算 GOTO”)。 所有复位后,堆栈指针均会初始化为 00000。堆栈指针 00000 不指向任何 RAM 单元;它仅仅是一个复位值。 状态位表明堆栈是已满、上溢还是下溢。 PC 是按字节寻址程序存储器的。为了防止 PC 不能正 确获取字指令,需要将 PCL 的最低有效位固定取值为 0。 PC 每次加 2 来寻址程序存储器中的顺序指令。 只可读写返回地址堆栈的栈顶(Top-of-Stack,TOS)。 有三个寄存器 TOSU:TOSH:TOSL 用于保存由 STKPTR 寄存器所指向的堆栈单元的内容 (图 5-4)。这可以让 用户在必要时实现软件堆栈。在 CALL、 RCALL 或中断 (如果使能了扩展指令集,则还包括ADDULNK和SUBULNK 指令)后,软件可以通过读取 TOSU:TOSH:TOSL 寄存 器来读取压入堆栈的值。这些值可以被置入由用户定义 的 软 件 堆 栈。返 回 时,软 件 将 这 些 值 存 回 TOSU:TOSH:TOSL 并执行返回。 CALL、RCALL、GOTO 和程序转移指令直接写入程序计 数器。对于这些指令,PCLATH 和 PCLATU 的内容不会 传送到程序计数器。 5.1.6 返回地址堆栈 返回地址堆栈允许保存最多 31 个程序调用地址和中断向 量。当执行 CALL、RCALL 指令或响应中断时,PC 值会 被压入该堆栈。当执行 RETURN, RETLW 或 RETFIE 指 令 (如果使能了扩展指令集,则还包括 ADDULNK 和SUBULNK 指令)时, PC 值会从堆栈弹出。 PCLATU 和 PCLATH 不受 RETURN 或 CALL 指令的影响。 图 5-4: 5.1.6.1 访问栈顶 为防止意外的堆栈操作,访问堆栈时用户必须禁止全局 中断允许位。 返回地址堆栈和相关的寄存器 返回地址堆栈 <20:0> 堆栈指针 栈顶寄存器 TOSU 00h TOSH 1Ah 11111 11110 11101 TOSL 34h 栈顶 2006 Microchip Technology Inc. 001A34h 000D58h 超前信息 STKPTR<4:0> 00010 00011 00010 00001 00000 DS39762A_CN 第 71 页 PIC18F97J60 系列 5.1.6.2 返回堆栈指针 (STKPTR) STKPTR 寄 存 器 (寄 存 器 5-2)包 含 堆 栈 指 针 值、 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。 寄存器 5-2: 当出栈次数足够卸空堆栈时,下一次出栈操作会向 PC 返回一个零值,并将 STKUNF 位置 1,而堆栈指针则保 持为零。STKUNF 位将保持置 1,直到软件清零或发生 POR 为止。 注: 5.1.6.3 下溢时,将零值返回给 PC,会使程序指向 复位向量,此时可以验证堆栈状态并采取 相应的操作。这与复位不同,因为下溢时 SFR 的内容不受影响。 PUSH 和 POP 指令 由于栈顶是可以读写的,因此将值压入堆栈或从堆栈弹 出而不影响程序的正常执行是非常理想的。PIC18 指令 集包含两个指令 PUSH 和 POP,使用这两个指令可在软 件控制下对 TOS 执行操作。然后就可以修改 TOSU、 TOSH 和 TOSL,将数据或返回地址压入堆栈。 PUSH 指令将当前的 PC 值压入堆栈。执行该指令会使 堆栈指针加 1 并将当前的 PC 值装入堆栈。 POP 指令通过将堆栈指针减 1 来放弃当前的 TOS 值。 然后前一个入栈的值就成为了 TOS 值。 STKPTR:堆栈指针寄存器 R/C-0 R/C-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 STKFUL(1) STKUNF(1) — SP4 SP3 SP2 SP1 SP0 bit 7 bit 0 图注: C = 可清零位 R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 STKFUL:堆栈满标志位 (1) 1 = 堆栈满或溢出 0 = 堆栈未满或未溢出 bit 6 STKUNF:堆栈下溢标志位 (1) 1 = 发生堆栈下溢 0 = 未发生堆栈下溢 bit 5 未用:读为 0 bit 4-0 SP4:SP0:堆栈指针地址位 注 x = 未知 1: 通过用户软件或 POR 清零 bit 7 和 bit 6。 DS39762A_CN 第 72 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.1.6.4 5.1.8 堆栈满和下溢复位 通过将配置寄存器 1L 中的 STVREN 位置 1,来使能在 堆栈溢出或下溢时的器件复位。当 STVREN 置 1 时,堆 栈满或堆栈下溢状态会将相应的 STKFUL 或 STKUNF 位置 1,然后使器件复位。当 STVREN 清零时,堆栈满 或堆栈下溢状态会将相应的 STKFUL 或 STKUNF 位置 1,但不会使器件复位。只能通过用户软件或上电复位 使 STKFUL 或 STKUNF 位清零。 5.1.7 快速寄存器堆栈 为 STATUS、WREG 和 BSR 寄存器提供的快速寄存器 堆栈具有从中断 “快速返回”的功能。此堆栈只有一级 且不可读写。当处理器转入中断向量处执行时,它装入 对应寄存器的当前值。所有中断源都会将值压入堆栈寄 存器。如果使用 RETFIE, FAST 指令从中断返回,这 些寄存器中的值就会被装回工作寄存器。 如果同时允许低优先级中断和高优先级中断,从低优先 级中断返回时,无法可靠地使用堆栈寄存器。如果在为 低优先级中断提供服务时,发生了高优先级中断,则低 优先级中断存储在堆栈寄存器中的值将被覆盖。在为低 优先级中断提供服务时,用户必须用软件保存关键寄存 器的值。 如果未使用中断优先级,所有中断都可以使用快速寄存 器堆栈从中断返回。如果没有使用中断,快速寄存器堆 栈可以用于在子程序调用结束后恢复 STATUS、WREG 和 BSR 寄存器。要在子程序调用中使用快速寄存器堆 栈,必须执行 CALL label, FAST 指令,将 STATUS、 WREG 和 BSR 寄存器的内容存入快速寄存器堆栈。然 后执行 RETURN, FAST 指令,从快速寄存器堆栈恢复 这些寄存器。 例 5-1 给出了一个在子程序调用和返回期间使用快速寄 存器堆栈的源代码示例。 例 5-1: CALL SUB1, FAST 快速寄存器堆栈代码示例 ;STATUS, WREG, BSR ;SAVED IN FAST REGISTER ;STACK • • SUB1 • • RETURN FAST 程序存储器中的查找表 有的编程需要在程序存储器中创建数据结构或查找表。 对于 PIC18 器件,可以用两种方式实现查找表: • 计算 GOTO • 表读 5.1.8.1 计算 GOTO 计算 GOTO 是通过向程序计数器加一个偏移量来实现 的。例 5-2 给出了一个示例。 使用 ADDWF PCL 指令和一组 RETLW nn 指令可以创建 一个查找表。在调用该表前,会先将查找表中的偏移量 装入 W 寄存器。被调用子程序的第一条指令应该是 ADDWF PCL 指令。接下去执行的一条是 RETLW nn 指 令,它将值 nn 返回给调用函数。 偏移量 (WREG 中)指定程序计数器应该增加的字节 数,其值应该为 2 的倍数 (LSb = 0)。 在这种方式中,每个指令单元只能存储一个数据字节, 并且要求返回地址堆栈还有空闲单元。 例 5-2: ORG TABLE 5.1.8.2 使用偏移量计算 GOTO MOVF CALL nn00h ADDWF RETLW RETLW RETLW . . . OFFSET, W TABLE PCL nnh nnh nnh 表读 有一种更好的方法可以将数据存储在程序存储器中,这 种方法允许在每个指令单元存储 2 个字节的数据。 编程时,每个程序字可以存储 2 个字节的查找表数据。 表 指 针 (TBLPTR)指 定 字 节 地 址,而 表 锁 存 器 (TABLAT)则存储从程序存储器读取的数据。一次只能 从程序存储器读取一个字节。 在第 6.1 节 “表读与表写”中进一步讨论表读操作。 ;RESTORE VALUES SAVED ;IN FAST REGISTER STACK 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 73 页 PIC18F97J60 系列 5.2 PIC18 指令周期 5.2.1 5.2.2 指令流 / 流水线 一个指令周期由 Q1 到 Q4 四个 Q 周期组成。取指令和 执行指令是以流水线方式进行的,用一个指令周期来取 指令,而用另一个指令周期译码和执行指令。但由于是 流水线操作,所以每条指令的等效执行时间都是一个指 令周期。如果某条指令改变了程序计数器 (如 GOTO), 则需要两个指令周期才能完成该指令 (例 5-3)。 时钟分配 来自内部或外部时钟源的单片机时钟输入都将在内部被 四分频以产生四个互不重叠的正交时钟信号(Q1、Q2、 Q3 和 Q4)。程序计数器在每个 Q1 递增;在 Q4 期间, 从程序存储器取指令并将指令锁存到指令寄存器 (IR) 中。指令的译码和执行在下一个 Q1 到 Q4 周期完成。 图 5-5 所示为时钟和指令执行的流程图。 取指周期中:程序计数器 (PC)在 Q1 周期加 1,开始 取指令。 指令执行周期中:在 Q1 周期,将所取指令锁存到指令 寄存器 (IR)。在随后的 Q2、 Q3 和 Q4 周期中译码并 执行该指令。其中读数据存储器(读操作数)发生在 Q2 周期,写操作发生在 Q4 周期 (写目标寄存器)。 图 5-5: 时钟 /指令周期 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1 Q1 Q2 内部 相位 时钟 Q3 Q4 PC PC PC + 2 PC + 4 OSC2/CLKO (RC 模式) 执行指令(PC – 2) 取指令(PC) 例 5-3: TCY0 TCY1 取指 1 执行 1 2. MOVWF PORTB 4. BSF 执行指令(PC + 2) 取指令(PC + 4) 指令流水线流程 1. MOVLW 55h 3. BRA 执行指令(PC) 取指令(PC + 2) SUB_1 取指 2 TCY2 TCY3 TCY4 TCY5 执行 2 取指 3 执行 3 取指 4 PORTA, BIT3 (Forced NOP) 清除 (NOP) 取指 SUB_1 5. Instruction @ address SUB_1 执行 SUB_1 除程序转移指令外,所有的指令都是单周期指令。由于程序转移指令将导致一条已取指令从流水线清除,需要重新取 指令,然后执行指令,所以程序转移指令需要两个周期。 DS39762A_CN 第 74 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.2.3 程序存储器中的指令 程序存储器按字节寻址。指令以 2 字节或 4 字节的形式 存储在程序存储器中。指令字的最低有效字节始终存储 在地址为偶数的程序存储器单元中(LSb = 0)。要保证 正确指向指令单元,PC 必须以 2 为单位递增,并且 LSb 总是读为 0 (见第 5.1.5 节 “程序计数器”)。 图 5-6 给出了指令字存储在程序存储器中的一个示例。 图 5-6: CALL 和 GOTO 指令在指令中嵌入了程序存储器的绝对地 址。由于指令总是存储为一个字长,因而指令所包含的 数据为一个字地址。字地址会写入 PC<20:1>,用于访问 程序存储器中的目标字节。图 5-6 中的指令 #2 给出了指 令 GOTO 0006h 在程序存储器中的译码过程。程序转移 指令也采取同样的方式对相对地址偏移量进行译码。存 储在转移指令中的偏移量代表单字指令数,PC 将以此作 为偏移量跳转到指定的地址单元。第 25.0 节“指令集汇 总”提供了指令集的更多详细信息。 程序存储器中的指令 LSB = 1 LSB = 0 0Fh EFh F0h C1h F4h 55h 03h 00h 23h 56h 程序存储器 字节单元 → 5.2.4 指令 1: 指令 2: MOVLW GOTO 055h 0006h 指令 3: MOVFF 123h, 456h 双字指令 标准的 PIC18 指令集有 4 条双字指令:CALL、 MOVFF、 GOTO 和 LFSR。这些指令第二个字的高 4 位均为 1111 ; 其他 12 位是立即数数据,通常为一个数据存储器地址。 因跳过了第一个字而自动执行指令的第二个字,那么将 作为一条 NOP 指令执行。如果双字指令跟在修改 PC 的 条件指令后,就有必要执行此操作。例 5-4 给出了它的 执行过程。 注: 指令的高 4 位为 1111,用于代表一条特殊的 NOP 指令。 指令顺序执行的正确顺序为:执行完第一个字之后立即 按顺序访问并使用第二个字中的数据。如果由于某些原 例 5-4: 字地址 ↓ 000000h 000002h 000004h 000006h 000008h 00000Ah 00000Ch 00000Eh 000010h 000012h 000014h 关于扩展指令集中的双字指令信息,请参 见第 5.5 节“程序存储器和扩展指令集”。 双字指令 情形 1: 目标代码 源代码 0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0? 1100 0001 0010 0011 MOVFF REG1, REG2 ; No, skip this word 1111 0100 0101 0110 0010 0100 0000 0000 ; Execute this word as a NOP ADDWF REG3 ; continue code 情形 2: 目标代码 源代码 0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0? 1100 0001 0010 0011 MOVFF REG1, REG2 ; Yes, execute this word ADDWF REG3 ; continue code 1111 0100 0101 0110 0010 0100 0000 0000 2006 Microchip Technology Inc. ; 2nd word of instruction 超前信息 DS39762A_CN 第 75 页 PIC18F97J60 系列 5.3 注: 5.3.1 数据存储器构成 当使能了 PIC18 扩展指令集时,数据存储 器 某 些 方 面的 操 作 会有 所 改变。更 多 信 息,请参见第 5.6 节 “数据存储器和扩展 指令集”。 PIC18 器件中的数据存储器是用静态 RAM 实现的。在数 据存储器中,每个寄存器有 12 位地址,数据存储器可达 4096 个字节。存储器空间被分为 16 个存储区,每个存 储区包含 256 个字节。PIC18F97J60 系列器件实现了所 有可用的存储区,并提供 3808 字节的数据存储区供用户 使用。图 5-7 给出了器件的数据存储器构成。 数 据 存 储 器 由 特 殊 功 能 寄 存 器 (Special Function Register, SFR)和 通 用 寄 存 器 (General Purpose Register,GPR)组成。SFR 用于单片机和外设功能模 块的控制和状态显示,GPR则在用户应用程序中用于存 储数据和临时存储操作的中间结果。任何未实现单元均 读为 0。 这样的指令集和架构支持跨存储区的操作。可以通过直 接、间接或变址寻址模式访问整个数据存储器。本章后 面的部分将讨论寻址模式。 为确保能在一个周期存取常用寄存器 (大多数 SFR 和 所选的 GPR), PIC18 器件设置了一个快速操作存储 区。该存取区是一个 256 字节的存储器空间,它可实现 对大多数 SFR 和 GPR Bank 0 的低地址单元的快速存 取,而无需使用 BSR。第 5.3.2 节“快速操作存储区”提 供了对于快速操作 RAM 的详细说明。 存储区选择寄存器 容量较大的数据存储器需要有效的寻址机制,以便对所 有地址进行快速存取。理想状况下,这意味着不必为每 次读写操作提供完整地址。 PIC18 器件是使用 RAM 存 储区机制实现快速存取的。这种机制将存储器空间分成 连续的 16 个 256 字节的存储区。根据不同的指令,可 以通过完整的 12 位地址直接寻址每个单元,或通过 8 位的低字节地址和 4 位存储区指针寻址每个单元。 PIC18 指令集中的大部分指令都使用存储区指针,也就 是存储区选择寄存器(Bank Select Register,BSR)。 SFR 保存单元地址的高 4 位,而指令本身则包括单元地 址的低 8 位。只使用 BSR 的低 4 位 (BSR3:BSR0), 不使用高 4 位;它们始终读为 0 且不能被写入。可以通 过使用 MOVLB 指令直接装载 BSR。 BSR 的值代表数据存储器中的存储区,指令中的 8 位指 向存储区中的存储单元,可以将它看作距离存储区下边 界的偏移量。图 5-8 显示了 BSR 的值与数据存储器中的 存储区之间的关系。 由于最多可有 16 个寄存器共享同一个低位地址,用户 必须非常小心以确保在执行数据读或写之前选择了正确 的存储区。例如,当 BSR 为 0Fh 时将程序数据写入地 址为F9h的8位地址单元,将导致程序计数器重新赋值。 当选择存储区时,只有已实现的存储区才可以读写。对 未实现存储区进行的写操作将被忽略,而读这些存储区 会返回 0。虽然是这样, STATUS 寄存器仍然会受到影 响,好像操作是成功的。图 5-7 中的数据存储器映射图 指出了已实现的存储区。 在 PIC18 的内核指令集中,只有 MOVFF 指令指定源寄 存器和目标寄存器的完整 12 位地址。该指令在执行时 完全忽略 BSR。所有其他指令仅包含作为操作数的低位 地址,而且必须使用 BSR 或快速操作存储区来寻址目 标寄存器。 DS39762A_CN 第 76 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 5-7: PIC18F97J60 系列器件的数据存储器映射图 当 a = 0 时: BSR<3:0> 数据存储器映射图 00h = 0000 = 0001 = 0010 = 0011 = 0100 = 0101 = 0110 = 0111 = 1000 = 1001 = 1010 = 1011 = 1100 = 1101 = 1110 = 1111 Bank 0 FFh 00h Bank 1 快速操作 RAM GPR Bank 2 1FFh 200h GPR FFh 00h Bank 3 2FFh 300h GPR 剩余的 160 个字节是特殊功能寄 存器 (来自 Bank 15)。 Bank 4 当 a = 1 时: BSR指定指令所使用的存储区。 3FFh 400h FFh 00h GPR FFh 00h 4FFh 500h GPR Bank 5 FFh 00h 5FFh 600h GPR Bank 6 FFh 00h 6FFh 700h GPR Bank 7 7FFh 800h GPR Bank 8 FFh 00h Bank 9 FFh 00h Bank 10 GPR FFh 00h Bank 13 FFh 00h Bank 14 FFh 00h Bank 15 GPR FFh BFFh C00h CFFh D00h GPR GPR 以太网 SFR SFR FFh AFFh B00h GPR GPR (SFR) 9FFh A00h GPR Bank 12 00h 5Fh 快速操作 RAM 的高地址 60h 8FFh 900h FFh 00h FFh 00h 快速操作存储区 快速操作 RAM 的低地址 FFh 00h 2006 Microchip Technology Inc. 前 96 个字节是通用 RAM(来自 Bank 0)。 GPR FFh 00h Bank 11 000h 05Fh 060h 0FFh 100h 将忽略BSR而使用快速操作存储 区。 DFFh E00h E7Fh E80h EFFh F00h F5Fh F60h FFFh 超前信息 DS39762A_CN 第 77 页 PIC18F97J60 系列 图 5-8: 使用存储区选择寄存器 (直接寻址) BSR(1) 7 0 0 0 0 0 0 0 存储区选择 (2) 1 0 000h 数据存储器 Bank 0 100h Bank 1 7 FFh 00h 11 来自操作码 (2) 11 11 11 11 1 0 1 1 FFh 00h 200h 300h 00h Bank 2 FFh 00h Bank 3 到 Bank 13 FFh 00h E00h Bank 14 FFh 00h F00h FFFh 注 Bank 15 FFh 1: 指令的快速操作 RAM 位强制跳过选定的存储区 (BSR<3:0>)直接寻址快速操作存储区的寄存器。 2: MOVFF 指令嵌入了完整的 12 位地址。 5.3.2 快速操作存储区 使用 BSR 和嵌入的 8 位地址,用户可以寻址数据存储 器的整个空间,但这同时也意味着用户必须始终确保选 择了正确的存储区。否则,可能会从错误的单元读取数 据或将数据写入错误的单元。如果本来是向 GPR 进行 写操作,却将结果写入了 SFR,后果是非常严重的。但 是在每次向数据存储器进行读或写操作时确认和 / 或更 改 BSR 会严重影响工作效率。 为了连续访问大多数常用数据存储器单元,现为数据存 储器配置了快速操作存储区,这样可以允许用户访问被 映射的存储区而无需指定 BSR。快速操作存储区由 Bank 0 的前 96 个字节(00h-5Fh)和 Bank 15 的后 160 个字节 (60h-FFh)组成。地址较低的部分被称为 “快 速操作 RAM”,由 GPR 组成。地址较高的部分则被映 射为器件的 SFR。这两个区域被连续地映射到快速操作 存储区并且可以用一个8位地址进行线性寻址(图5-7)。 包括快速操作 RAM 位(指令中的“a”参数)的 PIC18 内核指令在执行时使用快速操作存储区。当 “a”等于 1 时,指令使用 BSR 和包含在操作码中的 8 位地址对数 据存储器寻址。当 “a”为 0 时,强制指令使用快速操 作存储区地址映射,此时忽略 BSR 的当前值。 DS39762A_CN 第 78 页 此“强制”寻址方式可使指令在一个周期内对数据地址 进行操作,而不需要首先更新 BSR。这意味着用户可以 更有效地对 8 位地址为 60h 或以上的 SFR 进行取值和 操作。地址为 60h 以下的快速操作 RAM 非常适合于存 储那些用户可能需要快速访问的数据值,如直接计算结 果或常用程序变量。快速操作 RAM 也可实现更加快速 和有效的现场保护和变量切换。 使能扩展的指令集 (XINST 配置位 = 1)时的快速操作 存储区的映射略有不同。在第 5.6.3 节 “在立即数变址 模式中映射快速操作存储区”中对此进行了更详细的讨 论。 5.3.3 通用寄存器文件 PIC18 器件可能在 GPR 区中划分了一部分存储区。这 部分存储区为数据 RAM,所有指令均可访问它。 GPR 区从 Bank 0 的底部 (地址 000h)开始向上直到 SFR 区的底部。上电复位不会初始化 GPR,并且其他复位也 不会改变其内容。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.3.4 特殊功能寄存器 特殊功能寄存器 (SFR)是 CPU 和外设模块用来控制 器件操作的寄存器。这些寄存器以静态 RAM 的形式实 现。 SFR 从数据存储器的顶部 (FFFh)开始向下,它占用 了 Bank 15 上半部分的单元空间(F60h 到 FFFh)。可 以将 SFR 归类为两组:与 “内核”器件功能 (ALU、 表 5-3: 地址 SFR 通常分布在受其控制的外设中。未使用的 SFR 单元 是未实现的,读为 0。表 5-3 给出了 SFR 的列表;表 5-5 中提供了完整说明。 PIC18F97J60 系列器件的特殊功能寄存器映射图 名称 地址 名称 (1) 地址 名称 地址 名称 地址 名称 FFFh TOSU FDFh FBFh CCPR1H F9Fh IPR1 F7Fh SPBRGH1 FFEh TOSH FDEh POSTINC2(1) FBEh CCPR1L F9Eh PIR1 F7Eh BAUDCON1 FFDh TOSL FDDh POSTDEC2(1) FBDh CCP1CON F9Dh PIE1 F7Dh SPBRGH2 FFCh STKPTR FDCh PREINC2(1) FBCh CCPR2H F9Ch MEMCON(3) F7Ch BAUDCON2 FFBh PCLATU FDBh PLUSW2(1) FBBh CCPR2L F9Bh OSCTUNE F7Bh ERDPTH INDF2 (3) FFAh PCLATH FDAh FSR2H FBAh CCP2CON F9Ah TRISJ F7Ah ERDPTL FF9h PCL FD9h FSR2L FB9h CCPR3H F99h TRISH(3) F79h ECCP1DEL FF8h TBLPTRU FD8h STATUS FB8h CCPR3L F98h TRISG F78h TMR4 FF7h TBLPTRH FD7h TMR0H FB7h CCP3CON F97h TRISF F77h PR4 FF6h TBLPTRL FD6h TMR0L FB6h ECCP1AS F96h TRISE F76h T4CON FF5h TABLAT FD5h T0CON FB5h CVRCON F95h TRISD F75h CCPR4H FF4h PRODH FD4h —(2) FB4h CMCON F94h TRISC F74h CCPR4L FF3h PRODL FD3h OSCCON FB3h TMR3H F93h TRISB F73h CCP4CON FF2h INTCON FD2h ECON1 FB2h TMR3L F92h TRISA F72h CCPR5H FF1h INTCON2 FD1h WDTCON FB1h T3CON F91h LATJ(3) F71h CCPR5L FF0h INTCON3 FD0h RCON FB0h PSPCON F90h LATH(3) F70h CCP5CON FEFh INDF0(1) FCFh TMR1H FAFh SPBRG1 F8Fh LATG F6Fh SPBRG2 (1) FEEh POSTINC0 FCEh TMR1L FAEh RCREG1 F8Eh LATF F6Eh RCREG2 FEDh POSTDEC0(1) FCDh T1CON FADh TXREG1 F8Dh LATE F6Dh TXREG2 FECh PREINC0(1) FCCh TMR2 FACh TXSTA1 F8Ch LATD F6Ch TXSTA2 FEBh PLUSW0(1) FCBh PR2 FABh RCSTA1 F8Bh LATC F6Bh RCSTA2 FEAh FSR0H FCAh T2CON FAAh —(2) F8Ah LATB F6Ah ECCP3AS FE9h FSR0L FC9h SSP1BUF FA9h —(2) F89h LATA F69h ECCP3DEL FE8h WREG FC8h SSP1ADD FA8h —(2) F88h PORTJ(3) F68h ECCP2AS F87h (3) F67h ECCP2DEL (1) FC7h SSP1STAT FA7h FC6h SSP1CON1 FA6h EECON1 F86h PORTG F66h SSP2BUF FE5h POSTDEC1(1) FC5h SSP1CON2 FA5h IPR3 F85h PORTF F65h SSP2ADD INDF1 EECON2 (1) FE6h POSTINC1(1) FE7h 注 复位和中断)相关的寄存器和与外设功能相关的寄存 器。复位和中断寄存器在相关的章节中进行讨论,本章 后面的部分将对 ALU 状态寄存器进行说明。与外设操作 相关的寄存器将在该外设的章节中进行说明。 PORTH FE4h PREINC1(1) FC4h ADRESH FA4h PIR3 F84h PORTE F64h SSP2STAT FE3h PLUSW1(1) FC3h ADRESL FA3h PIE3 F83h PORTD F63h SSP2CON1 FE2h FSR1H FC2h ADCON0 FA2h IPR2 F82h PORTC F62h SSP2CON2 FE1h FSR1L FC1h ADCON1 FA1h PIR2 F81h PORTB F61h EDATA FE0h BSR FC0h ADCON2 FA0h PIE2 F80h PORTA F60h EIR 1: 这不是实际存在的寄存器。 2: 未实现的寄存器,读为 0。 3: 在 64 引脚的器件上寄存器不可用。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 79 页 PIC18F97J60 系列 5.3.5 以太网 SFR 注: 除了 Bank 15 中的标准 SFR, PIC18F97J60 系列器件 还有另外一组 SFR。后者专用于以态网模块,占用 Bank 14 的上半部分 (E80h 到 EFFh)。 表 5-4: 表 5-4 给出了以太网 SFR 的完整列表。表 5-5 对所有 SFR 进行了完整的说明。 PIC18F97J60 系列器件的以太网 SFR 映射图 地址 名称 地址 名称 地址 名称 地址 名称 EFFh —(1) EDFh —(1) EBFh —(1) E9Fh —(1) EDEh (1) EBEh — (1) E9Eh —(1) — (1) E9Dh —(1) (1) E9Ch —(1) EFEh EFDh ECON2 ESTAT EDDh — (1) — EBDh EFCh — (1) EFBh EIE EFAh — (1) EF9h — (2) ED9h EPKTCNT EB9h EF8h —(2) ED8h ERXFCON EB8h EF7h EDMACSH ED7h —(1) EF6h EDMACSL ED6h —(1) EDCh — (1) EBCh — EDBh —(1) EBBh —(1) E9Bh —(1) EDAh (1) EBAh (1) E9Ah —(1) MIRDH E99h EPAUSH MIRDL E98h EPAUSL EB7h MIWRH E97h EFLOCON EB6h MIWRL E96h —(2) E95h —(2) — — EF5h EDMADSTH ED5h EPMOH EB5h —(1) EF4h EDMADSTL ED4h EPMOL EB4h MIREGADR E94h —(2) EF3h EDMANDH ED3h —(2) EB3h —(2) E93h —(2) EB2h MICMD E92h —(2) EB1h MICON E91h —(2) E90h —(2) EF2h EDMANDL ED2h —(2) EF1h EDMASTH ED1h EPMCSH EF0h EDMASTL ED0h EPMCSL EB0h —(1) EEFh ERXWRPTH ECFh EPMM7 EAFh —(2) E8Fh —(2) EAEh — (1) E8Eh —(2) EADh —(1) E8Dh —(2) E8Ch —(2) EEEh EEDh 注 要改善性能,经常访问的以太网寄存器应 位于标准 SFR 存储区 (F60h 到 FFFh)。 ERXWRPTL ERXRDPTH ECEh ECDh EPMM6 EPMM5 EECh ERXRDPTL ECCh EPMM4 EACh —(1) EEBh ERXNDH ECBh EPMM3 EABh MAMXFLH E8Bh —(2) EEAh ERXNDL ECAh EPMM2 EAAh MAMXFLL E8Ah MISTAT EE9h ERXSTH EC9h EPMM1 EA9h MACLCON2 E89h —(1) EE8h ERXSTL EC8h EPMM0 EA8h MACLCON1 E88h —(1) EE7h ETXNDH EC7h EHT7 EA7h MAIPGH E87h —(1) EE6h ETXNDL EC6h EHT6 EA6h MAIPGL E86h —(1) — (2) EE5h ETXSTH EC5h EHT5 EA5h E85h MAADR2 EE4h ETXSTL EC4h EHT4 EA4h MABBIPG E84h MAADR1 EE3h EWRPTH EC3h EHT3 EA3h MACON4 E83h MAADR4 EE2h EWRPTL EC2h EHT2 EA2h MACON3 E82h MAADR3 EE1h —(1) EC1h EHT1 EA1h —(1) E81h MAADR6 EE0h —(1) EC0h EHT0 EA0h MACON1 E80h MAADR5 1: 保留的寄存器单元,不能修改。 2: 未实现的寄存器,读为 0。 DS39762A_CN 第 80 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 5-5: 寄存器名称 TOSU 寄存器文件汇总 (PIC18F97J60 系列) Bit 7 Bit 6 Bit 5 — — — TOSH 栈顶寄存器高字节 (TOS<15:8>) TOSL 栈顶寄存器低字节 (TOS<7:0>) STKPTR STKFUL(1) STKUNF(1) — PCLATU — — bit 21(2) Bit 4 Bit 3 Bit 2 Bit 1 POR/BOR 时的值 Bit 0 栈顶寄存器最高字节 (TOS<20:16>) SP4 SP3 SP2 SP1 SP0 PC<20:16> 的保持寄存器 详情请见 (页): ---0 0000 59, 71 0000 0000 59, 71 0000 0000 59, 71 00-0 0000 59, 72 ---0 0000 59, 71 PCLATH PC<15:8> 的保持寄存器 0000 0000 59, 71 PCL PC 低字节 (PC<7:0>) 0000 0000 59, 71 --00 0000 59, 98 TBLPTRU — — bit 21 程序存储器表指针最高字节 (TBLPTR<20:16>) TBLPTRH 程序存储器表指针高字节 (TBLPTR<15:8>) 0000 0000 59, 98 TBLPTRL 程序存储器表指针低字节 (TBLPTR<7:0>) 0000 0000 59, 98 TABLAT 程序存储器表锁存器 0000 0000 59, 98 PRODH 乘积寄存器高字节 xxxx xxxx 59, 117 PRODL 乘积寄存器低字节 INTCON xxxx xxxx 59, 117 RBIF 0000 000x 59, 121 INT3IP RBIP 1111 1111 59, 122 INT2IF INT1IF 1100 0000 59, 123 59, 89 GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INTCON3 INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INDF0 使用 FSR0 的内容寻址数据存储器——FSR0 的值不变 (不是实际存在的寄存器) N/A POSTINC0 使用 FSR0 的内容寻址数据存储器——FSR0 的值后增 (不是实际存在的寄存器) N/A 59, 90 POSTDEC0 使用 FSR0 的内容寻址数据存储器——FSR0 的值后减 (不是实际存在的寄存器) N/A 59, 90 PREINC0 使用 FSR0 的内容寻址数据存储器——FSR0 的值预增 (不是实际存在的寄存器) N/A 59, 90 使用 FSR0 的内容寻址数据存储器——FSR0 的值预增 (不是实际存在的寄存器), FSR0 的偏移量由 W 寄存器 提供 N/A 59, 90 ---- xxxx 59, 89 59, 90 PLUSW0 — FSR0H — — — 间接数据存储器地址指针 0 的高字节 FSR0L 间接数据存储器地址指针 0 的低字节 xxxx xxxx WREG 工作寄存器 xxxx xxxx 59 59, 89 INDF1 使用 FSR1 的内容寻址数据存储器——FSR1 的值不变 (不是实际存在的寄存器) N/A POSTINC1 使用 FSR1 的内容寻址数据存储器——FSR1 的值后增 (不是实际存在的寄存器) N/A 59, 90 POSTDEC1 使用 FSR1 的内容寻址数据存储器——FSR1 的值后减 (不是实际存在的寄存器) N/A 59, 90 PREINC1 使用 FSR1 的内容寻址数据存储器——FSR1 的值预增 (不是实际存在的寄存器) N/A 59, 90 使用 FSR1 的内容寻址数据存储器——FSR1 的值预增 (不是实际存在的寄存器), FSR1 的偏移量由 W 寄存器 提供 N/A 59, 90 PLUSW1 — FSR1H FSR1L — — — 间接数据存储器地址指针 1 的高字节 间接数据存储器地址指针 1 的低字节 — BSR INDF2 POSTINC2 — — — ---- xxxx 59, 89 xxxx xxxx 59, 89 ---- 0000 59, 89 使用 FSR2 的内容寻址数据存储器——FSR2 的值不变 (不是实际存在的寄存器) N/A 59, 89 59, 90 存储区选择寄存器 使用 FSR2 的内容寻址数据存储器——FSR2 的值后增 (不是实际存在的寄存器) N/A POSTDEC2 使用 FSR2 的内容寻址数据存储器——FSR2 的值后减 (不是实际存在的寄存器) N/A 59, 90 PREINC2 使用 FSR2 的内容寻址数据存储器——FSR2 的值预增 (不是实际存在的寄存器) N/A 59, 90 PLUSW2 使用 FSR2 的内容寻址数据存储器——FSR2 的值预增 (不是实际存在的寄存器), FSR2 的偏移量由 W 寄存器 提供 N/A 59, 90 FSR2H FSR2L 图注: 注 1: 2: 3: 4: 5: 6: 7: 8: 9: — — — — 间接数据存储器地址指针 2 的高字节 间接数据存储器地址指针 2 的低字节 ---- xxxx 59, 89 xxxx xxxx 59, 89 x = 未知, u = 不变, - = 未用 (读为 0), q = 值取决于具体条件, r = 保留位 (不能修改)。阴影单元未实现,读为 0。 通过用户软件或 POR 清零 bit 7 和 bit 6。 PC 的 bit 21 仅在串行编程模式下可用。 使能双速启动时复位值为 0,禁止双速启动时复位值为 1。 当 MSSP 模块工作在 I2C™ 从动模式下时,这些位的其他名称和定义。 这些位和 / 或寄存器仅在 100 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 这些位和 / 或寄存器仅在 80 引脚和 100 引脚器件上可用;在 64 引脚器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 在单片机模式下,此寄存器中的位不可写且读为 0。 仅当选定了 ECPLL 或 HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0。 仅在单片机模式下的 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 81 页 PIC18F97J60 系列 表 5-5: 寄存器名称 STATUS 寄存器文件汇总 (PIC18F97J60 系列) (续) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 — — — N OV Z DC C TMR0H Timer0 寄存器的高字节 TMR0L Timer0 寄存器的低字节 POR/BOR 时的值 详情请见 (页): ---x xxxx 60, 87 0000 0000 60, 163 xxxx xxxx 60, 163 TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 60, 163 OSCCON IDLEN — — — OSTS(3) — SCS1 SCS0 0--- q-00 60, 43 ECON1 TXRST RXRST DMAST CSUMEN TXRTS RXEN — — 0000 00-- 60, 211 — — — — — — — SWDTEN --- ---0 60, 353 IPEN — — RI TO PD POR BOR T0CON WDTCON RCON 0--1 1100 60, 54, 133 TMR1H Timer1 寄存器的高字节 xxxx xxxx 60, 167 TMR1L Timer1 寄存器的低字节 xxxx xxxx 60, 167 T1CON RD16 T1RUN TMR2 Timer2 寄存器 PR2 Timer2 周期寄存器 T2CON — SSP1BUF T2OUTPS3 T1CKPS1 T2OUTPS2 T1CKPS0 T2OUTPS1 T1OSCEN T2OUTPS0 T1SYNC TMR2ON TMR1CS T2CKPS1 TMR1ON T2CKPS0 MSSP1 接收缓冲区 / 发送寄存器 SSP1ADD 2 2 MSSP1 地址寄存器 (I C™ 从动模式), MSSP1 波特率重载寄存器 (I C 主控模式) 0000 0000 60, 167 0000 0000 60, 173 1111 1111 60, 173 -000 0000 60, 173 xxxx xxxx 60, 265 0000 0000 60, 265 SSP1STAT SMP CKE D/A P S R/W UA BF 0000 0000 60, 256, 266 SSP1CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 60, 257, 267 SSP1CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 60, 268 GCEN ACKSTAT ADMSK5(4) ADMSK4(4) ADMSK3(4) ADMSK2(4) ADMSK1(4) SEN ADRESH A/D 结果寄存器的高字节 xxxx xxxx 60, 333 ADRESL A/D 结果寄存器的低字节 xxxx xxxx 60, 333 ADCON0 ADCAL — CHS3 CHS2 CHS1 CHS0 GO/DONE ADON 0-00 0000 60, 325 ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0000 60, 326 ADCON2 ADFM — ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 0-00 0000 60, 327 60, 185 CCPR1H 捕捉 / 比较 /PWM 寄存器 1 的高字节 xxxx xxxx CCPR1L 捕捉 / 比较 /PWM 寄存器 1 的低字节 xxxx xxxx 60, 185 0000 0000 60, 189 60, 185 CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 CCPR2H 捕捉 / 比较 /PWM 寄存器 2 的高字节 xxxx xxxx CCPR2L 捕捉 / 比较 /PWM 寄存器 2 的低字节 xxxx xxxx 60, 185 CCP2CON P2M1 0000 0000 60, 189 CCPR3H 捕捉 / 比较 /PWM 寄存器 3 的高字节 xxxx xxxx 60, 185 CCPR3L 捕捉 / 比较 /PWM 寄存器 3 的低字节 xxxx xxxx 60, 185 CCP3CON ECCP1AS P3M1 P2M0 P3M0 ECCP1ASE ECCP1AS2 DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 DC3B1 DC3B0 CCP3M3 CCP3M2 CCP3M1 CCP3M0 0000 0000 60, 189 ECCP1AS1 ECCP1AS0 PSS1AC1 PSS1AC0 PSS1BD1 PSS1BD0 0000 0000 60, 201 60, 341 CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 0000 0000 CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0111 60, 335 60, 175 60, 175 TMR3H Timer3 寄存器的高字节 xxxx xxxx TMR3L Timer3 寄存器的低字节 xxxx xxxx 图注: 注 1: 2: 3: 4: 5: 6: 7: 8: 9: x = 未知, u = 不变, - = 未用 (读为 0), q = 值取决于具体条件, r = 保留位 (不能修改)。阴影单元未实现,读为 0。 通过用户软件或 POR 清零 bit 7 和 bit 6。 PC 的 bit 21 仅在串行编程模式下可用。 使能双速启动时复位值为 0,禁止双速启动时复位值为 1。 当 MSSP 模块工作在 I2C™ 从动模式下时,这些位的其他名称和定义。 这些位和 / 或寄存器仅在 100 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 这些位和 / 或寄存器仅在 80 引脚和 100 引脚器件上可用;在 64 引脚器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 在单片机模式下,此寄存器中的位不可写且读为 0。 仅当选定了 ECPLL 或 HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0。 仅在单片机模式下的 100 引脚器件上实现。 DS39762A_CN 第 82 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 5-5: 寄存器名称 T3CON PSPCON(5) 寄存器文件汇总 (PIC18F97J60 系列) (续) Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR/BOR 时的值 详情请见 (页): T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 0000 0000 60, 175 IBOV PSPMODE — — — — 0000 ---- 61, 161 Bit 7 Bit 6 Bit 5 RD16 T3CCP2 IBF OBF SPBRG1 EUSART1 波特率发生器寄存器的低字节 0000 0000 61, 306 RCREG1 EUSART1 接收寄存器 0000 0000 61, 313 TXREG1 EUSART1 发送寄存器 xxxx xxxx 61, 315 TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 61, 306 RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 61, 306 ---- ---- 61, 96 EECON2 数据存储器控制寄存器 (不是实际存在的寄存器) EECON1 — — — FREE WRERR WREN WR — ---0 x00- 61, 97 IPR3 SSP2IP(5) BCL2IP(5) RC2IP(6) TX2IP(6) TMR4IP CCP5IP CCP4IP CCP3IP 1111 1111 61, 132 PIR3 SSP2IF(5) BCL2IF(5) RC2IF(6) TX2IF(6) TMR4IF CCP5IF CCP4IF CCP3IF 0000 0000 61, 126 PIE3 (5) (5) (6) TX2IE(6) TMR4IE CCP5IE CCP4IE CCP3IE 0000 0000 61, 129 SSP2IE BCL2IE RC2IE IPR2 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP 1111 1-11 61, 131 PIR2 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF 0000 0-00 61, 125 PIE2 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE 0000 0-00 61, 128 IPR1 PSPIP(9) ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 1111 1111 61, 130 PIR1 PSPIF(9) ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 0000 0000 61, 124 PIE1 PSPIE(9) ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 0000 0000 61, 127 61, 106 MEMCON(5.7) EBDIS — WAIT1 WAIT0 — — WM1 WM0 0-00 --00 OSCTUNE PPST1 PLLEN(8) PPST0 PPRE — — — — 0000 ---- 61, 41 TRISJ(6) TRISJ7(5) TRISJ6(5) TRISJ5(5) TRISJ4(5) TRISJ3(5) TRISJ2(5) TRISJ1(5) TRISJ0(5) 1111 1111 61, 159 TRISH(6) TRISH7(6) TRISH6(6) TRISH5(6) TRISH4(6) TRISH3(6) TRISH2(6) TRISH1(6) TRISH0(6) 1111 1111 61, 157 (5) (5) (5) (6) (6) (6) TRISG0(6) 1111 1111 61, 155 TRISG TRISG7 TRISG6 TRISG5 TRISG4 TRISG3 TRISG2 TRISG1 TRISF TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0(5) 1111 1111 61, 152 TRISE TRISE7(6) TRISE6(6) TRISE5 TRISE4 TRISE3 TRISE2 TRISE1 TRISE0 1111 1111 61, 150 TRISD TRISD7(5) TRISD6(5) TRISD5(5) TRISD4(5) TRISD3(5) TRISD2 TRISD1 TRISD0 1111 1111 61, 147 TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 1111 1111 61, 143 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 61, 140 TRISA — — TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 --11 1111 61, 137 LATJ(6) LATJ7(5) LATJ6(5) LATJ5(6) LATJ4(6) LATJ3(5) LATJ2(5) LATJ1(5) LATJ0(5) xxxx xxxx 61, 159 (6) (6) (6) (6) (6) (6) (6) (6) LATH1 LATH0(6) xxxx xxxx 61, 157 LATH LATH7 LATH6 LATH5 LATH4 LATH3 LATH2 LATG LATG7(5) LATG6(5) LATG5(5) LATG4 LATG3(6) LATG2(6) LATG1(6) LATG0(6) xxxx xxxx 62, 155 LATF LATF7 LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 LATF0(5) xxxx xxxx 62, 152 LATE LATE7(6) LATE6(6) LATE5 LATE4 LATE3 LATE2 LATE1 LATE0 xxxx xxxx 62, 150 LATD LATD7(5) LATD6(5) LATD5(5) LATD4(5) LATD3(5) LATD2 LATD1 LATD0 xxxx xxxx 62, 147 LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 xxxx xxxx 62, 143 LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 xxxx xxxx 62, 140 LATA RDPU REPU LATA5 LATA4 LATA3 LATA2 LATA1 LATA0 00xx xxxx 62, 137 PORTJ(6) RJ7(5) RJ6(5) RJ5(6) RJ4(6) RJ3(5) RJ2(5) RJ1(5) RJ0(5) xxxx xxxx 62, 159 PORTH(6) RH7(6) RH6(6) RH5(6) RH4(6) RH3(6) RH2(6) RH1(6) RH0(6) 0000 xxxx 62, 157 PORTG RG7(5) RG6(5) RG5(5) RG4 RG3(6) RG2(6) RG1(6) RG0(6) 111x xxxx 62, 155 图注: 注 1: 2: 3: 4: 5: 6: 7: 8: 9: x = 未知, u = 不变, - = 未用 (读为 0), q = 值取决于具体条件, r = 保留位 (不能修改)。阴影单元未实现,读为 0。 通过用户软件或 POR 清零 bit 7 和 bit 6。 PC 的 bit 21 仅在串行编程模式下可用。 使能双速启动时复位值为 0,禁止双速启动时复位值为 1。 当 MSSP 模块工作在 I2C™ 从动模式下时,这些位的其他名称和定义。 这些位和 / 或寄存器仅在 100 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 这些位和 / 或寄存器仅在 80 引脚和 100 引脚器件上可用;在 64 引脚器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 在单片机模式下,此寄存器中的位不可写且读为 0。 仅当选定了 ECPLL 或 HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0。 仅在单片机模式下的 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 83 页 PIC18F97J60 系列 表 5-5: 寄存器名称 PORTF 寄存器文件汇总 (PIC18F97J60 系列) (续) POR/BOR 时的值 详情请见 (页): Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0(5) 0000 0000 62, 152 RE5 RE4 RE3 RE2 RE1 RE0 xxxx xxxx 62, 150 (6) (6) PORTE RE7 RE6 PORTD RD7(5) RD6(5) RD5(5) RD4(5) RD3(5) RD2 RD1 RD0 xxxx xxxx 62, 147 PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx 62, 143 PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx 62, 140 PORTA RJPU(6) — RA5 RA4 RA3 RA2 RA1 RA0 0-0x 0000 62, 137 0000 0000 62, 306 TXCKP BRG16 — WUE ABDEN 0100 0-00 62, 304 0000 0000 62, 306 SPBRGH1 BAUDCON1 SPBRGH2 BAUDCON2 ERDPTH ERDPTL EUSART1 波特率发生器寄存器的高字节 ABDOVF RCIDL RXDTP EUSART2 波特率发生器寄存器的高字节 ABDOVF RCIDL RXDTP — — — TXCKP BRG16 — WUE ABDEN 缓冲区读指针的高字节 缓冲区读指针的低字节 ECCP1DEL P1RSEN P1DC6 P1DC5 P1DC4 P1DC3 P1DC2 P1DC1 P1DC0 0100 0-00 62, 304 ---0 0101 62, 209 1111 1010 62, 209 0000 0000 62, 200 TMR4 Timer4 寄存器 0000 0000 62, 179 PR4 Timer4 周期寄存器 1111 1111 62, 179 -000 0000 62, 179 62, 185 T4CON — T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 CCPR4H 捕捉 / 比较 /PWM 寄存器 4 的高字节 xxxx xxxx CCPR4L 捕捉 / 比较 /PWM 寄存器 4 的低字节 xxxx xxxx 62, 185 --00 0000 63, 181 CCP4CON — — DC4B1 DC4B0 CCP4M3 CCP4M2 CCP4M1 CCP4M0 CCPR5H 捕捉 / 比较 /PWM 寄存器 5 的高字节 xxxx xxxx 63, 185 CCPR5L 捕捉 / 比较 /PWM 寄存器 5 的低字节 xxxx xxxx 63, 185 --00 0000 63, 181 CCP5CON — — DC5B1 DC5B0 CCP5M3 CCP5M2 CCP5M1 CCP5M0 SPBRG2 EUSART2 波特率发生器寄存器的低字节 0000 0000 63, 306 RCREG2 EUSART2 接收寄存器 0000 0000 63, 313 TXREG2 EUSART2 发送寄存器 0000 0000 63, 315 TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 63, 302 RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 63, 303 ECCP3AS1 ECCP3AS0 PSS3AC1 PSS3AC0 PSS3BD1 PSS3BD0 0000 0000 63, 201 P3DC5 P3DC4 P3DC3 P3DC2 P3DC1 P3DC0 0000 0000 63, 200 ECCP2AS1 ECCP2AS0 PSS2AC1 PSS2AC0 PSS2BD1 PSS2BD0 0000 0000 63, 201 P2DC5 P2DC4 P2DC3 P2DC2 P2DC1 P2DC0 0000 0000 63, 200 ECCP3AS ECCP3DEL ECCP2AS ECCP2DEL ECCP3ASE ECCP3AS2 P3RSEN P3DC6 ECCP2ASE ECCP2AS2 P2RSEN P2DC6 SSP2BUF MSSP2 接收缓冲区 / 发送寄存器 xxxx xxxx 63, 265 SSP2ADD MSSP2 地址寄存器 (I2C™ 从动模式), MSSP2 波特率重载寄存器 (I2C 主控模式) 0000 0000 63, 265 SSP2STAT SMP CKE D/A P S R/W UA BF 0000 0000 63, 256 SSP2CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 63, 257, 267 SSP2CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 63, 268 GCEN ACKSTAT ADMSK5(4) ADMSK4(4) ADMSK3(4) ADMSK2(4) ADMSK1(4) SEN EDATA EIR ECON2 图注: 注 1: 2: 3: 4: 5: 6: 7: 8: 9: xxxx xxxx 63, 211 — PKTIF DMAIF LINKIF TXIF — TXERIF RXERIF -000 0-00 63, 227 AUTOINC PKTDEC ETHEN — — — — — 100- ---- 63, 212 以太网发送 / 接收缓冲区寄存器 (EDATA<7:0>) x = 未知, u = 不变, - = 未用 (读为 0), q = 值取决于具体条件, r = 保留位 (不能修改)。阴影单元未实现,读为 0。 通过用户软件或 POR 清零 bit 7 和 bit 6。 PC 的 bit 21 仅在串行编程模式下可用。 使能双速启动时复位值为 0,禁止双速启动时复位值为 1。 当 MSSP 模块工作在 I2C™ 从动模式下时,这些位的其他名称和定义。 这些位和 / 或寄存器仅在 100 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 这些位和 / 或寄存器仅在 80 引脚和 100 引脚器件上可用;在 64 引脚器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 在单片机模式下,此寄存器中的位不可写且读为 0。 仅当选定了 ECPLL 或 HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0。 仅在单片机模式下的 100 引脚器件上实现。 DS39762A_CN 第 84 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 5-5: 寄存器文件汇总 (PIC18F97J60 系列) (续) Bit 7 Bit 6 ESTAT — EIE — 寄存器名称 Bit 3 Bit 2 Bit 1 Bit 0 POR/BOR 时的值 详情请见 (页): LATECOL — RXBUSY TXABRT PHYRDY -0-0 -000 63, 212 LINKIE TXIE — TXERIE RXERIE -000 0-00 63, 226 63, 253 Bit 5 Bit 4 BUFER — PKTIE DMAIE EDMACSH DMA 校验和寄存器的高字节 0000 0000 EDMACSL DMA 校验和寄存器的低字节 0000 0000 63, 253 ---0 0000 63, 253 EDMADSTH EDMADSTL EDMANDH EDMANDL EDMASTH EDMASTL ERXWRPTH — — — DMA 目标寄存器的高字节 — DMA 结束寄存器的高字节 0000 0000 63, 253 — DMA 开始寄存器的高字节 ---0 0000 63, 253 0000 0000 63, 253 — 接收缓冲区写指针的高字节 ---0 0000 63, 241 0000 0000 63, 241 — 接收缓冲区读指针的高字节 DMA 目标寄存器的低字节 — — DMA 结束寄存器的低字节 — — DMA 开始寄存器的低字节 — — ERXWRPTL 接收缓冲区写指针的低字节 ERXRDPTH ERXRDPTL ERXNDH — 接收缓冲区读指针的低字节 — ERXNDL — — ERXSTH — ERXSTL — ETXNDL — — 接收开始寄存器的高字节 — — 发送结束寄存器的高字节 发送结束寄存器的低字节 ETXSTH — ETXSTL — — 发送开始寄存器的高字节 发送开始寄存器的低字节 EWRPTH — — EWRPTL 缓冲区写指针的低字节 EPKTCNT 以太网数据包计数寄存器 ERXFCON EPMOL 接收结束寄存器的高字节 接收开始寄存器的低字节 ETXNDH EPMOH — 接收结束寄存器的低字节 — UCEN ANDOR CRCEN — — — 缓冲区写指针的高字节 PMEN MPEN 模式匹配偏移寄存器的高字节 模式匹配偏移寄存器的低字节 HTEN MCEN BCEN 0000 0000 63, 253 ---0 0000 63, 253 ---0 0101 63, 241 1111 1010 63, 241 ---1 1111 63, 241 1111 1111 63, 241 ---0 0101 63, 241 1111 1010 63, 241 ---0 0000 64, 241 0000 0000 64, 241 ---0 0000 64, 241 0000 0000 64, 241 ---0 0000 64, 209 0000 0000 64, 209 0000 0000 64, 241 1010 0001 64, 246 ---0 0000 64, 249 0000 0000 64, 249 EPMCSH 模式匹配校验和寄存器的高字节 0000 0000 64, 249 EPMCSL 模式匹配校验和寄存器的低字节 0000 0000 64, 249 EPMM7 模式匹配屏蔽寄存器的字节 7 0000 0000 64, 249 EPMM6 模式匹配屏蔽寄存器的字节 6 0000 0000 64, 249 EPMM5 模式匹配屏蔽寄存器的字节 5 0000 0000 64, 249 EPMM4 模式匹配屏蔽寄存器的字节 4 0000 0000 64, 249 EPMM3 模式匹配屏蔽寄存器的字节 3 0000 0000 64, 249 EPMM2 模式匹配屏蔽寄存器的字节 2 0000 0000 64, 249 EPMM1 模式匹配屏蔽寄存器的字节 1 0000 0000 64, 249 EPMM0 模式匹配屏蔽寄存器的字节 0 0000 0000 64, 249 EHT7 哈希表寄存器的字节 7 0000 0000 64, 249 EHT6 哈希表寄存器的字节 6 0000 0000 64, 245 EHT5 哈希表寄存器的字节 5 0000 0000 64, 245 图注: 注 1: 2: 3: 4: 5: 6: 7: 8: 9: x = 未知, u = 不变, - = 未用 (读为 0), q = 值取决于具体条件, r = 保留位 (不能修改)。阴影单元未实现,读为 0。 通过用户软件或 POR 清零 bit 7 和 bit 6。 PC 的 bit 21 仅在串行编程模式下可用。 使能双速启动时复位值为 0,禁止双速启动时复位值为 1。 当 MSSP 模块工作在 I2C™ 从动模式下时,这些位的其他名称和定义。 这些位和 / 或寄存器仅在 100 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 这些位和 / 或寄存器仅在 80 引脚和 100 引脚器件上可用;在 64 引脚器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 在单片机模式下,此寄存器中的位不可写且读为 0。 仅当选定了 ECPLL 或 HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0。 仅在单片机模式下的 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 85 页 PIC18F97J60 系列 表 5-5: 寄存器名称 寄存器文件汇总 (PIC18F97J60 系列) (续) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR/BOR 时的值 详情请见 (页): EHT4 哈希表寄存器的字节 4 0000 0000 64, 245 EHT3 哈希表寄存器的字节 3 0000 0000 64, 245 EHT2 哈希表寄存器的字节 2 0000 0000 64, 245 EHT1 哈希表寄存器的字节 1 0000 0000 64, 245 EHT0 哈希表寄存器的字节 0 0000 0000 64, 245 MIRDH MII 读数据寄存器的高字节 0000 0000 64, 217 MIRDL MII 读数据寄存器的低字节 0000 0000 64, 217 MIWRH MII 写数据寄存器的高字节 0000 0000 64, 217 MIWRL MII 写数据寄存器的低字节 0000 0000 64, 217 ---0 0000 64, 217 64, 216 MIREGADR — — — MICMD — — — — — — MIISCAN MIIRD ---- --00 MICON RSTMII — — — — — — — 0--- ---- 64, 215 0000 0110 64, 241 0000 0000 64, 241 MAMXFLH 最大帧长寄存器的高字节 MAMXFLL 最大帧长寄存器的低字节 MACLCON2 — — MACLCON1 — — MII 地址寄存器 冲突窗口寄存器 — — 重发最大数寄存器 --11 0111 64, 241 ---- 1111 64, 241 MAIPGH — 非背对背包间间隔寄存器的高字节 -000 0000 65, 241 MAIPGL — 非背对背包间间隔寄存器的低字节 -000 0000 65, 241 MABBIPG — 背对背包间间隔发送寄存器 -000 0000 65, 232 MACON4 — DEFER BPEN NOBKOFF — — r r -000 --00 65, 215 MACON3 PADCFG2 PADCFG1 PADCFG0 TXCRCEN PHDRLEN HFRMEN FRMLNEN FULDPX 0000 0000 65, 214 MACON1 — — — r TXPAUS RXPAUS PASSALL MARXEN ---0 0000 65, 213 0001 0000 65, 244 0000 0000 65, 244 EPAUSH 暂停定时器值寄存器的高字节 EPAUSL 暂停定时器值寄存器的低字节 EFLOCON — — — — — FULDPXS FCEN1 FCEN0 ---- -000 65, 244 MISTAT — — — — r NVALID SCAN BUSY ---- 0000 65, 216 MAADR2 MAC 地址寄存器的字节 2 (MAADR<39:32>), OUI 字节 2 0000 0000 65, 231 MAADR1 MAC 地址寄存器的字节 1 (MAADR<47:40>), OUI 字节 1 0000 0000 65, 231 MAADR4 MAC 地址寄存器的字节 4 (MAADR<23:16>) 0000 0000 65, 231 MAADR3 MAC 地址寄存器的字节 3 (MAADR<31:24>), OUI 字节 3 0000 0000 65, 231 MAADR6 MAC 地址寄存器的字节 6 (MAADR<7:0>) 0000 0000 65, 231 MAADR5 MAC 地址寄存器的字节 5 (MAADR<15:8>) 0000 0000 65, 231 图注: 注 1: 2: 3: 4: 5: 6: 7: 8: 9: x = 未知, u = 不变, - = 未用 (读为 0), q = 值取决于具体条件, r = 保留位 (不能修改)。阴影单元未实现,读为 0。 通过用户软件或 POR 清零 bit 7 和 bit 6。 PC 的 bit 21 仅在串行编程模式下可用。 使能双速启动时复位值为 0,禁止双速启动时复位值为 1。 当 MSSP 模块工作在 I2C™ 从动模式下时,这些位的其他名称和定义。 这些位和 / 或寄存器仅在 100 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 这些位和 / 或寄存器仅在 80 引脚和 100 引脚器件上可用;在 64 引脚器件上,它们未实现并读为 0。所示为 100 引脚器件的复位值。 在单片机模式下,此寄存器中的位不可写且读为 0。 仅当选定了 ECPLL 或 HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0。 仅在单片机模式下的 100 引脚器件上实现。 DS39762A_CN 第 86 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.3.6 STATUS 寄存器 如寄存器 5-3 所示,STATUS 寄存器包含 ALU 的算术运 算状态。STATUS 寄存器与任何其他寄存器一样,可以 作为任何指令的操作数。如果一条影响 Z、DC、C、OV 或 N 位的指令以 STATUS 寄存器作为目标寄存器,则 会禁止对这 5 位进行写操作。 到 “000u u1uu” 。因此,建议仅使用 BCF、 BSF、 SWAPF、MOVFF 和 MOVWF 指令来改变 STATUS 寄存器, 因为这些指令不会影响STATUS寄存器中的Z、C、DC、 OV 或 N 位。 关于其他不会影响状态位的指令,请参见表 25-2和表 25-3 中的指令集汇总。 这些位根据器件逻辑来置 1 或清零。因此,当执行一条 把 STATUS 寄存器作为目标寄存器的指令后,运行结果 可能会与预想的不同。例如, CLRF STATUS 会将 Z 位 置 1,而保留其余位不变。然后读 STATUS 寄存器将得 寄存器 5-3: U-0 — 注: 在减法运算中,C 和 DC 位分别作为借位位 和半借位位。 STATUS 寄存器 U-0 — U-0 — R/W-x N R/W-x R/W-x R/W-x R/W-x Z DC(1) C(2) OV bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7-5 未用:读为 0 bit 4 N:负标志位 此位用于有符号的算术运算 (2 进制补码)。它可以表示结果是否为负 (ALU MSb = 1)。 1 = 结果为负 0 = 结果为正 bit 3 OV:溢出标志位 此位用于有符号的算术运算 (2 进制补码)。表明运算结果溢出了 7 位二进制数的范围,溢出导致符 号位 (bit 7)发生改变。 1 = 有符号算术运算中发生溢出 (本次运算) 0 = 未发生溢出 bit 2 Z:全零标志位 1 = 算术运算或逻辑运算的结果为零 0 = 算术运算或逻辑运算的结果不为零 bit 1 DC:半进位 / 借位位 (1) 用于 ADDWF、 ADDLW、 SUBLW 和 SUBWF 指令: 1 = 结果的第 4 个低位发生了进位 0 = 结果的第 4 个低位未发生进位 bit 0 C:进位 / 借位位 (2) 用于 ADDWF、 ADDLW、 SUBLW 和 SUBWF 指令: 1 = 结果中最高位发生了进位 0 = 结果中最高位未发生进位 注 1: 对于借位,极性是相反的。减法是通过加上第二个操作数的 2 进制补码来执行的。对于移位指令 (RRF 和 RLF),此位来自源寄存器的 bit 4 或 bit 3。 2: 对于借位,极性是相反的。减法是通过加上第二个操作数的 2 进制补码来执行的。对于移位指令 (RRF 和 RLF),此位来自源寄存器的最高位或最低位。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 87 页 PIC18F97J60 系列 5.4 注: 数据寻址模式 当使能 PIC18 扩展指令集时, PIC18 内核 指令集中某些指令的执行方式会发生改 变。更多信息,请参见第 5.6 节“数据存储 器和扩展指令集”。 程序存储器只能用一种方式寻址 (通过程序计数器), 而数据存储器空间可用多种方式寻址。大部分指令的寻 址模式都是固定的。其他指令可能使用最多三种模式, 根据它们所使用的操作数和是否使能了扩展指令集而 定。 这些寻址模式为: • • • • 固有寻址 立即数寻址 直接寻址 间接寻址 有几个指令,例如 MOVFF,在操作码中包含完整的 12 位地址(源地址或目标地址)。在这些情况下,BSR 被 完全忽略。 操作目标地址由目标位 “d”确定。当 “d”为 1 时, 结果被存回源寄存器并覆盖原来的内容。当 “d”为 0 时,结果被存储在 W 寄存器中。没有 “d”参数的指令 的目标地址是隐含的,它们是正在操作的目标寄存器或 W 寄存器。 5.4.3 当使能了扩展指令集时 (XINST 配置位 = 1),还可使 用另外一种寻址模式,即立即数变址寻址模式。第 5.6.1 节“使用立即数偏移量进行变址寻址”将更详细讨论它 的操作。 5.4.1 快速操作 RAM 位 “a”决定地址的解析方式。当 “a” 为 1 时, BSR (第 5.3.1 节 “存储区选择寄存器”)的 内容将和指令中的直接地址一起用于确定寄存器的完整 12 位地址。当 “a”为 0 时,此直接地址将被解析为快 速操作存储区中的一个寄存器。使用快速操作 RAM 的 寻址模式有时也被称为直接强制寻址模式。 固有和立即数寻址 很多 PIC18 控制指令根本不需要任何参数。执行这些指 令要么对整个器件造成影响,要么仅针对一个寄存器进 行操作。此寻址模式就是固有寻址。例如指令 SLEEP、 RESET 和 DAW。 其他指令的工作方式与此类似,但需要操作码中有其他 的参数。由于需要一些立即数作为参数,这种寻址模式 被称为立即数寻址。例如 ADDLW 和 MOVLW,它们分别 向 W 寄存器添加或移入立即数值。其他立即数寻址指 令,例如 CALL 和 GOTO,它们包括 20 位的程序存储器 地址。 间接寻址模式允许用户访问数据存储器中的单元而无需 在指令中给出一个固定的地址。这种寻址方式是通过使 用文件选择寄存器 (File Select Register, FSR)作为 指向被读写单元的指针实现的。由于 FSR 本身作为特殊 功能寄存器位于 RAM 中,因此也可在程序中直接控制 它们。这使得 FSR 对于在数据存储器中实现诸如表和数 组等数据结构时非常有用。 也可以使用间接文件操作数 (Indirect File Operand, INDF)进行间接寻址。这种操作允许自动递增、递减或 偏移指针,从而自动控制指针的值。它通过使用循环提 高代码执行效率,如例 5-5 所示的清零整个 RAM 存储 区的操作。它还允许用户在数据存储器中执行变址寻址 和其他针对程序存储器堆栈指针的操作。 例 5-5: NEXT 5.4.2 间接寻址 使用间接寻址清零 RAM (BANK 1) LFSR CLRF FSR0, 100h POSTINC0 直接寻址 直接寻址方式在操作码中指定操作的全部或部分源地址 和 / 或目标地址。此选项由指令附带的参数指定。 在 PIC18 内核指令集中,针对位和针对字节的指令默认 情况下使用直接寻址模式。所有这些指令都包含某个 8 位的直接地址作为它们的最低有效字节。此地址指定数 据 RAM 的某个存储区中寄存器的地址(第 5.3.3 节“通 用寄存器文件”)或快速操作存储区 (第 5.3.2 节 “快 速操作存储区”)中作为指令数据源的单元地址。 DS39762A_CN 第 88 页 BTFSS FSR0H, 1 BRA CONTINUE 超前信息 NEXT ; ; ; ; ; ; ; ; Clear INDF register then inc pointer All done with Bank1? NO, clear next YES, continue 2006 Microchip Technology Inc. PIC18F97J60 系列 5.4.3.1 FSR 寄存器和 INDF 操作数 INDF 寄存器执行读或写操作实际上访问的是与之对应 的一对 FSR 寄存器。例如,读 INDF1 就是读 FSR1H:FSR1L 指向单元中的数据。使用 INDF 寄存器作 为操作数的指令实际上使用的是相应的 FSR 的内容,该 内容为指向目标地址的指针。INDF 操作数只是使用该指 针的一种简便方法。 间接寻址的核心是三组寄存器:FSR0、FSR1和FSR2。 每组寄存器都含有一对 8 位寄存器:FSRnH 和 FSRnL。 FSRnH 寄存器的高 4 位未使用,因此每对 FSR 只保存 一个 12 位值,从而可以线性寻址数据存储器的整个空 间。因此, FSR 寄存器对被用作数据存储器的地址指 针。 由于间接寻址使用完整的 12 位地址,因此没有必要进 行数据 RAM 分区。所以 BSR 的当前内容和快速操作 RAM 位对于确定目标地址没有影响。 间接寻址是通过一组间接文件操作数(INDF0到INDF2) 完成的。这些操作数可被看作 “虚拟”寄存器:它们被 映射到 SFR 空间而不是通过物理方式实现的。对特定的 图 5-9: 间接寻址 000h 使用带有一个间接寻址寄存器作为 操作数的指令 .... Bank 0 ADDWF INDF1, 1 100h Bank 1 200h ... 使用存储在与该寄存器相关联的 一对 FSR 中的 12 位地址 .... 300h FSR1H:FSR1L 7 0 x x x x 1 1 1 1 7 0 1 1 0 0 1 1 0 0 Bank 3 到 Bank 13 ... 确定将在该操作中使用的数据存 储器单元。 在本例中,FSR1 寄存器对中的值为 FCCh。这意味着将把 FCCh 单元的 内容与 W 寄存器的内容相加,并将 结果存回 FCCh 单元中。 Bank 2 E00h Bank 14 F00h FFFh Bank 15 数据存储器 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 89 页 PIC18F97J60 系列 5.4.3.2 FSR 寄存器和 POSTINC、 POSTDEC、 PREINC 以及 PLUSW 除了 INDF 操作数之外,每对 FSR 寄存器还有 4 个额外 的间接操作数。和 INDF 一样,它们也都是不能直接读 写的 “虚拟”寄存器。访问这些寄存器实际上访问的是 与之相关的一对 FSR 寄存器,并对其所存储的数值进行 特定的操作。这些寄存器是: • • • • POSTDEC:访问 FSR 的值,然后将它自动减 1 POSTINC:访问 FSR 的值,然后将它自动加 1 PREINC :将 FSR 的值加 1,然后在操作中使用该值 PLUSW:将 W 寄存器中有符号的值 (-128 到 127)与 FSR 寄存器中的值相加,并在操作中使 用得到的新值 5.5 使用 POSTDEC、 POSTINC 和 PREINC 对 FSR 进行 操作会影响整对寄存器:即, FSRnL 寄存器从 FFh 到 00h 溢出并向 FSRnH 寄存器进位。但这些操作的结果 不会更改状态寄存器中的标志位(如 Z、N 和 OV 等)。 PLUSW 寄存器可用于在数据存储器空间实现变址寻 址。通过控制 W 寄存器中的值,用户可以访问相对当前 指针地址有固定偏移量的地址单元。在某些应用中,该 功能可被用于在数据存储器内部实现某些强大的程序控 制结构,如软件堆栈。 通过 FSR 对其他 FSR 进行操作 在某些特殊情况下,间接寻址操作以其他 FSR 或虚拟寄 存器作为目标。例如,使用 FSR 指向一个虚拟寄存器会 导致操作不成功。假设如下特殊情况 :FSR0H:FSR0L 对保存的是 INDF1 的地址 FE7h。尝试使用 INDF0 作为 操作数读取 INDF1 的值,将返回 00h。尝试使用 INDF0 作为操作数写入 INDF1,将会导致执行一条 NOP 指令。 DS39762A_CN 第 90 页 由于 FSR 是映射到 SFR 空间中的物理寄存器,所以可 以通过直接寻址来控制它们。用户在使用这些寄存器时 应该特别小心,尤其是在代码使用间接寻址的方式时。 同样,通常允许通过间接寻址对所有其他 SFR 进行操 作。用户在进行此类操作时应该特别小心,以免不小心 更改设置从而影响器件操作。 在本文中使用 FSR 寄存器中的值 (不会更改此值)访 问 INDF 寄存器。同样,访问 PLUSW 寄存器是将 W 寄 存器中的值作为 FSR 的偏移量。该操作不会改变这两个 寄存器中的值,而访问其他虚拟寄存器均会更改 FSR 寄 存器的值。 5.4.3.3 另一方面,使用虚拟寄存器对一对 FSR 寄存器进行写操 作可能会产生与预期不同的结果。在这些情况下,会将 值写入一对 FSR 寄存器,但 FSR 不会递增或递减。因 此,写入 INDF2 或 POSTDEC2 时会把同样的值写入 FSR2H:FSR2L 对。 程序存储器和扩展指令集 程序存储器的操作不受扩展指令集的影响。 使能扩展指令集会将 5 条额外的双字命令添加到现有的 PIC18 指令集中:即 ADDFSR、CALLW、MOVSF、MOVSS 和 SUBFSR。这些指令如第 5.2.4 节 “双字指令”中所 述执行。 5.6 数据存储器和扩展指令集 使能 PIC18 扩展指令集 (XINST 配置位 = 1)显著改变 了数据存储器及其寻址的某些方面。特别是许多 PIC18 内核指令使用快速操作存储区的方式有所不同。这是由 于扩展指令集引入了对数据存储器空间的新的寻址模 式。该模式还会更改使用 FSR2 及其相关操作数进行间 接寻址的方式。 同样需要了解哪些部分保持不变。数据存储器空间的大 小及其线性寻址方式都不会改变。 SFR 映射也保持不 变。PIC18 内核指令也仍然以直接和间接寻址模式进行 操作;固有和立即数指令操作照旧。 FSR0 和 FSR1 的 间接寻址方式也保持不变。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.6.1 5.6.2 使用立即数偏移量进行变址寻址 使能 PIC18 扩展指令集将更改使用 FSR2 寄存器对及其 相关文件操作数进行间接寻址的方式。在适当的条件 下,使用快速操作存储区的指令(即绝大多数针对位和 针对字节的指令)可以利用指令中的偏移量来执行变址 寻址。这种特定的寻址模式被称为使用立即数偏移量的 变址寻址或立即数变址寻址模式。 使用扩展指令集时,这种寻址模式有如下要求: • 强制使用快速操作存储区 (a = 0);且 • 文件地址参数要小于或等于 5Fh。 在这些条件下,指令的文件地址不会被解析为地址的低 字节 (在直接寻址中和 BSR 一起使用),或快速操作 存储区中的 8 位地址,而是被解析为由 FSR2 指定的地 址指针的偏移量。将该偏移量与 FSR2 的内容相加以获 取操作的目标地址。 2006 Microchip Technology Inc. 受立即数变址寻址模式影响的指令 任何采用直接寻址模式的 PIC18 内核指令均会受到立即 数变址寻址模式的潜在影响,包括所有针对字节和针对 位的指令,或标准 PIC18 指令集中几乎一半的指令。只 有使用固有或立即数寻址模式的指令不受影响。 此外,如果针对字节和针对位的指令使用快速操作存储 区 (快速操作 RAM 位为 1)或包含 60h 以上的文件地 址,它们也不受影响。符合这些条件的指令会像以前一 样执行。图 5-10 显示了当使能扩展指令集时,各种寻址 模式之间的对比。 那些想要在立即数变址寻址模式中使用针对位或针对字 节的指令的用户,应该注意此模式下汇编语法的改变。 在第 25.2.1 节 “扩展指令的语法”中对此进行了更详 细的说明。 超前信息 DS39762A_CN 第 91 页 PIC18F97J60 系列 图 5-10: 针对位和针对字节的指令的寻址方式对比 (使能了扩展指令集) 示例指令:ADDWF f, d, a(操作码 :0010 01da ffff ffff) 当 a = 0 且 f ≥ 60h 时: 此指令以直接强制模式执行。 “f”被解析为快速操作 RAM 中 060h 到 FFFh 之间的单元地 址,该地址也是数据存储器的 F60h 到 FFFh (Bank 15)。 000h 060h Bank 0 100h 00h Bank 1 到 Bank 14 不可用此模式寻址地址低于 060h 的单元。 F00h 60h “f”的 有效范围 快速操作 RAM FFh Bank 15 F40h SFR FFFh 数据存储器 当 a = 0 且 f ≤ 5Fh 时: 此指令以立即数变址寻址模式 执行。“f”被解析为 FSR2 中地 址值的偏移量。将这两个值相 加可以得到指令的目标寄存器 的地址。此地址可以在数据存 储器空间的任何地方。 注意在此模式中,正确的语法 如下: ADDWF [k], d 其中 “k”就是 “f”。 000h Bank 0 060h 100h 001001DA FFFFFFFF Bank 1 到 Bank 14 FSR2H FSR2L F00h Bank 15 F40h SFR FFFh 当 a = 1(f 可为任何值)时: 指令以直接寻址模式 (也称为 直接长地址寻址模式)执行。 “f”被解析为数据存储器空间 的16个存储区中的一个单元地 址。存储区由存储区选择寄存 器 (BSR)指定。此地址可以 在数据存储器空间的任何地 方。 数据存储器 BSR 00000000 000h Bank 0 060h 100h Bank 1 到 Bank 14 001001DA FFFFFFFF F00h Bank 15 F40h SFR FFFh DS39762A_CN 第 92 页 数据存储器 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 5.6.3 在立即数变址模式中映射快速操作存 储区 使用立即数变址寻址模式能有效改变快速操作 RAM 低 地址单元(00h 到 5Fh)的映射方式。此模式映射 Bank 0 的内容和由用户定义的、可位于数据存储器空间中任何 地方的 “窗口”内容,而不仅仅映射 Bank 0 底部的内 容。 FSR2 的值定义映射到窗口的地址的下边界,而上 边界则由 FSR2 加 95 (5Fh)决定。地址为 5Fh 以上 的快速操作 RAM 的映射方法如前所述 (见第 5.3.2 节 “快速操作存储区”)。图 5-11 显示了在此寻址模式下 重新映射的快速操作存储区示例。 图 5-11: 快速操作存储区的重新映射仅适用于立即数变址寻址模 式。使用 BSR (快速操作 RAM 位为 1)的操作和以前 一样继续使用直接寻址模式。任何明确使用间接文件操 作数 (包括 FSR2)的间接或变址操作都将像标准间接 寻址一样操作。任何使用快速操作存储区的指令(包含 大于 05Fh 的寄存器地址)都将使用直接寻址和常规的 快速操作存储区映射。 5.6.4 立即数变址模式中的 BSR 尽管使能扩展指令集时会重新映射快速操作存储区,但 BSR 的操作不变。使用 BSR 选择数据存储区的直接寻 址操作方式和以前描述的相同。 使用立即数变址寻址模式重新映射快速操作存储区 示例 : ADDWF f, d, a FSR2H:FSR2L = 120h 000h 05Fh 从 FSR2 指针 (120h)到 FSR2指针加05Fh(17Fh) 区域内的存储单元被映射 到快速操作 RAM 的底部 (000h-05Fh)。 100h 120h 17Fh 从 F60h 到 FFFh 的特殊功 能寄存器被映射到 60h 到 FFh,和常规寻址一样。 不能访问 Bank 0 200h 窗口 00h Bank 1 Bank 1“窗口” 5Fh 60h Bank 2 到 Bank 14 Bank 0 中低于 5Fh 的地址 在该模式下不可用。它们 仍可通过 BSR 寻址。 SFR FFh 快速操作存储区 F00h Bank 15 F60h FFFh SFR 数据存储器 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 93 页 PIC18F97J60 系列 注: DS39762A_CN 第 94 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 6.0 6.1 闪存程序存储器 表读与表写 正常工作状态下,闪存程序存储器在整个 VDD 范围内都 是可读写可擦除的。 为了读写程序存储器,有两个操作指令可供处理器在程 序存储器空间和数据 RAM 之间移动字节: 读程序存储器时,每次读取一个字节。写程序存储器 时,每次写入一个 64 字节的块。擦除程序存储器时,每 次擦除一个 1024 字节的块。用户代码不能执行批量擦 除操作。 • 表读 (TBLRD) • 表写 (TBLWT) 在擦写程序存储器时,系统会停止取指令直到操作完 成。擦写期间不能访问该程序存储器,因此也就无法执 行代码。由内部编程定时器来终止程序存储器的擦写操 作。 写入程序存储器的值不一定非要是有效指令。执行存储 无效指令的程序存储器单元会导致执行 NOP。 程序存储器空间为 16 位宽,而数据 RAM 空间为 8 位 宽。表读和表写操作通过一个 8 位寄存器 (TABLAT) 在这两个存储器空间之间传送数据。 表读操作从程序存储器获取数据并将其放入数据 RAM 空间。图 6-1 显示了程序存储器和数据 RAM 之间的一 次表读操作。 表写操作将数据存储器中的数据存入程序存储器的保持 寄存器。第 6.5 节 “写闪存程序存储器”详细介绍了将 保持寄存器内容写入程序存储器的过程。图 6-2 显示了 程序存储器和数据 RAM 之间的一次表写操作。 表操作以字节为单位。包含数据而非程序指令的表块不 需要按字对齐。因此,表块可以在任何字节地址开始和 结束。如果使用表写操作向程序存储器写入可执行代 码,程序指令必须按字对齐。 图 6-1: 表读操作 指令:TBLRD* 程序存储器 表指针 (1) TBLPTRU TBLPTRH 表锁存器(8 位) TBLPTRL TABLAT 程序存储器 (TBLPTR) 注 1: 表指针寄存器指向程序存储器中的某个字节。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 95 页 PIC18F97J60 系列 图 6-2: 表写操作 指令:TBLWT* 程序存储器 保持寄存器 表指针 (1) TBLPTRU TBLPTRH 表锁存器(8 位) TBLPTRL TABLAT 程序存储器 (TBLPTR) 注 6.2 1: 表指针实际指向 64 个保持寄存器中的某一个,其地址由 TBLPTRL<5:0> 决定。第 6.5 节 “写闪存程序 存储器”中将讨论向程序存储器阵列写入数据的物理过程。 控制寄存器 TBLRD 和 TBLWT 指令要用到几个控制寄存器。包括: • • • • EECON1 寄存器 EECON2 寄存器 TABLAT 寄存器 TBLPTR 寄存器 6.2.1 当 WREN 位置 1 时,允许进行写操作。上电时,WREN 位被清零。WRERR 位在 WR 位置 1 时由硬件置 1,在 内部编程定时器超时、写操作结束时被清零。 注: 在正常操作期间,WRERR 读为 1。这表明 写操作被复位提早终止或进行了不合法的 写操作。 WR 控制位用于启动写操作。用软件只能将该位置 1 而 无法清零。在写操作完成后,由硬件将其清零。 EECON1 和 EECON2 寄存器 EECON1 寄存器(寄存器 6-1)是存储器访问的控制寄 存器。EECON2 寄存器不是实际存在的寄存器,专用于 存储器的擦写操作。读 EECON2 将得到全 0。 当 FREE 位置 1 时,允许对程序存储器进行擦除操作, 擦除操作由下一条 WR 命令启动。当 FREE 清零时,则 仅使能写操作。 DS39762A_CN 第 96 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 6-1: EECON1:EEPROM 控制寄存器 1 U-0 U-0 U-0 R/W-0 R/W-x R/W-0 R/S-0 U-0 — — — FREE WRERR WREN WR — bit 7 bit 0 图注: S = 可设置位 R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7-5 未用:读为 0 bit 4 FREE:闪存行擦除使能位 1 = 在下一条 WR 命令时擦除 TBLPTR 指定的程序存储器行 (擦除操作完成后清零) 0 = 仅执行写操作 bit 3 WRERR:闪存程序存储器错误标志位 1 = 写操作提早终止 (由于正常操作中自定时编程期间的任何复位,或不合法的写操作) 0 = 写操作完成 bit 2 WREN:闪存程序存储器写使能位 1 = 允许对闪存程序存储器的写周期 0 = 禁止对闪存程序存储器的写周期 bit 1 WR:写控制位 1 = 启动程序存储器的擦写周期 (操作是自定时的,一旦写操作完成,该位即由硬件清零。 用软件只能将 WR 位置 1,但不能清零。) 0 = 写周期完成 bit 0 未用:读为 0 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 97 页 PIC18F97J60 系列 6.2.2 6.2.4 表锁存寄存器 (TABLAT) 表指针范围 表锁存器(TABLAT)是映射到 SFR 空间的一个 8 位寄 存器。表锁存器用于在程序存储器和数据 RAM 之间传 输数据时保存 8 位数据。 TBLPTR 用于读、写和擦除闪存程序存储器。 6.2.3 当执行 TBLWT 时,表指针寄存器的低 6 位 (TBLPTR<5:0>)决定要写入程序存储器的哪个保持寄 存器 (共有 64 个)。当程序存储器的定时写入 (通过 WR 位)开始时,TBLPTR 的高 15 位(TBLPTR<20:6>) 将决定要写入哪个程序存储器块 (每块 64 字节)。更 多详细信息,请参见第 6.5 节 “写闪存程序存储器”。 当执行 TBLRD 时,TBLPTR 的所有 22 位决定将程序存 储器的哪个字节读入 TABLAT。 表指针寄存器 (TBLPTR) 表指针 (TBLPTR)寄存器在程序存储器中以字节为单 位进行寻址。 TBLPTR 由 3 个 SFR 寄存器组成:表指 针 最 高 字 节、表 指 针 高 字 节 和 表 指 针 低 字 节 (TBLPTRU:TBLPTRH:TBLPTRL)。这 3 个寄存器合 起来组成一个 22 位宽的指针。其中低 21 位允许器件寻 址高达 2MB 程序存储器空间。第 22 位则允许访问器件 ID 和配置位。 当执行擦除程序存储器时,表指针寄存器的高 11 位 (TBLPTR<20:10>)指向将要擦除的 1024 字节块。低有 效位 (TBLPTR<9:0>)被忽略。 TBLRD 和 TBLWT 指令要使用表指针寄存器 TBLPTR。 这些指令可以基于表操作以 4 种方法更新 TBLPTR。 表 6-1 列出了这些操作。这些表操作只会影响 TBLPTR 的低 21 位。 表 6-1: 图 6-3 说明了基于闪存程序存储器操作的 TBLPTR 相关 范围。 执行 TBLRD 和 TBLWT 指令的表指针操作 示例 表指针操作 TBLRD* TBLWT* 不修改 TBLPTR TBLRD*+ TBLWT*+ TBLPTR 在读 / 写后递增 TBLRD*TBLWT*- TBLPTR 在读 / 写后递减 TBLRD+* TBLWT+* TBLPTR 在读 / 写前递增 图 6-3: 21 基于操作的表指针范围 TBLPTRU 16 15 TBLPTRH 8 7 TBLPTRL 0 表擦除 TBLPTR<20:10> 表写 TBLPTR<20:6> 表读——TBLPTR<21:0> DS39762A_CN 第 98 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 6.3 TBLPTR 指向程序存储器空间的某个字节地址。执行 TBLRD 指令将把指向的字节装入 TABLAT。此外,还可 以自动修改 TBLPTR 以进行下一次表读操作。 读闪存程序存储器 TBLRD 指令用于从程序存储器获取数据并放入数据 RAM。表读操作每次从程序存储器读取一个字节。 图 6-4: 内部程序存储器通常以字为单位进行组织。由地址的最 低有效位来选择字的高字节或者低字节。图 6-4 显示了 内部程序存储器和 TABLAT 之间的接口。 读闪存程序存储器 程序存储器 (偶字节地址) (奇字节地址) TBLPTR = xxxxx1 指令寄存器 (IR) 例 6-1: FETCH TBLRD TBLPTR = xxxxx0 TABLAT 读寄存器 读闪存程序存储器的一个字 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CODE_ADDR_UPPER TBLPTRU CODE_ADDR_HIGH TBLPTRH CODE_ADDR_LOW TBLPTRL ; Load TBLPTR with the base ; address of the word READ_WORD TBLRD*+ MOVF MOVWF TBLRD*+ MOVFW MOVF TABLAT, W WORD_EVEN TABLAT, W WORD_ODD 2006 Microchip Technology Inc. ; read into TABLAT and increment ; get data ; read into TABLAT and increment ; get data 超前信息 DS39762A_CN 第 99 页 PIC18F97J60 系列 6.4 6.4.1 擦除闪存程序存储器 最小擦除块大小为 1024 字节。只有通过使用外部编程 器,或通过 ICSP 控制,才能够批量擦除更大的程序存 储器块。闪存阵列不支持字擦除。 当单片机本身开始一个擦除过程时,会擦除一个 1024 字 节的程序存储器块。 11 个最高有效位 TBLPTR<20:10> 指向要擦除的块。 TBLPTR<9:0> 被忽略。 擦除操作由 EECON1 寄存器控制。WREN 位必须被置 1 以使能写操作。 FREE 位被置 1 以选择擦除操作。 为了安全起见,必须使用 EECON2 的写启动序列。 擦除内部闪存必须执行长写操作。在长写周期中,指令 停止执行。由内部编程定时器终止长写操作。 擦除内部程序存储器块的步骤如下: 1. 2. 3. 4. 5. 6. 7. 8. 例 6-2: 闪存程序存储器擦除序列 将要擦除的行地址装入表指针寄存器。 设置 EECON1 寄存器来执行擦除操作: • 将 WREN 位置 1 以使能写操作; • 将 FREE 位置 1 以使能擦除操作。 禁止中断。 向 EECON2 写入 55h。 向 EECON2 写入 0AAh。 将 WR 位置 1。这将开始行擦除周期。 CPU 在擦除期间将会停止工作 (使用内部定时 器约为 2 ms)。 重新允许中断。 擦除闪存程序存储器的一行 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CODE_ADDR_UPPER TBLPTRU CODE_ADDR_HIGH TBLPTRH CODE_ADDR_LOW TBLPTRL ; load TBLPTR with the base ; address of the memory block BSF BSF BCF MOVLW MOVWF MOVLW MOVWF BSF BSF EECON1, EECON1, INTCON, 55h EECON2 0AAh EECON2 EECON1, INTCON, ; enable write to memory ; enable Row Erase operation ; disable interrupts ERASE_ROW 必需的序列 DS39762A_CN 第 100 页 WREN FREE GIE ; write 55h ; write 0AAh ; start erase (CPU stall) ; re-enable interrupts WR GIE 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 6.5 由 EEPROM 片上定时器控制写入的时间。写入 / 擦除 电压由片上的电荷泵产生,该电荷泵可以工作在器件的 电压范围内。 写闪存程序存储器 最小编程块大小为 32 字或 64 字节。不支持字或字节编 程。 注 在内部使用表写命令将需要写入闪存存储器的内容装入 保持寄存器中。表写操作使用 64 个保持寄存器进行编 程。 由于表锁存器 (TABLAT)只是单字节寄存器,所以每 次编程操作, TBLWT 指令都必须执行 64 次。因为只写 保持寄存器,所以所有的表写操作实际上都是短写。更 新 64 个保持寄存器后,必须写 EECON1 寄存器,以便 启动长写周期开始编程操作。 2: 为了保证程序存储器单元的耐擦写次数, 在两次擦除操作之间不应对某一闪存字节 编程多于一次。在第二次尝试改写目标行 的内容之前,需要对其执行行擦除或整个 存储器的批量擦除。 对内部闪存编程要求使用长写操作。在长写周期中,指 令停止执行。由内部编程定时器终止长写操作。 图 6-5: 1: 与早期的 PIC 器件不同,PIC18F97J60 系 列器件在写操作发生后并不会复位保持寄 存器。必须在编程序列之前清零或改写保 持寄存器。 对闪存程序存储器的表写操作 TABLAT 写寄存器 8 8 TBLPTR = xxxxx0 TBLPTR = xxxxx1 保持寄存器 8 TBLPTR = xxxxx2 保持寄存器 8 TBLPTR = xxxx3F 保持寄存器 保持寄存器 程序存储器 6.5.1 写入闪存程序存储器操作顺序 内部程序存储器单元的编程事件顺序应为: 1. 如果要写入的程序存储器段已被事先编程,那么 在写入之前必须首先将其擦除 (见第 6.4.1 节 “闪存程序存储器擦除序列”)。 2. 通过自动递增将 64 个字节写入保持寄存器。 3. 将 WREN 位置 1 以使能字节写操作。 4. 禁止中断。 5. 6. 7. 8. 向 EECON2 写入 55h。 向 EECON2 写入 AAh。 将 WR 位置 1。这将开始写周期。 CPU 在写入期间将会停止工作 (使用内部定时 器约为 2 ms)。 9. 重新允许中断。 10. 验证存储器 (表读)。 例 6-3 给出了所需代码的示例。 注: 2006 Microchip Technology Inc. 超前信息 在将 WR 位置 1 前,表指针必须指向保持 寄存器中的 64 个字节的地址范围内。 DS39762A_CN 第 101 页 PIC18F97J60 系列 例 6-3: 写闪存程序存储器 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CODE_ADDR_UPPER TBLPTRU CODE_ADDR_HIGH TBLPTRH CODE_ADDR_LOW TBLPTRL ; Load TBLPTR with the base ; address of the memory block BSF BSF BCF MOVLW MOVWF MOVLW MOVWF BSF BSF MOVLW MOVWF EECON1, WREN EECON1, FREE INTCON, GIE 55h EECON2 0AAh EECON2 EECON1, WR INTCON, GIE D'16' WRITE_COUNTER ; enable write to memory ; enable Row Erase operation ; disable interrupts MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF D'64' COUNTER BUFFER_ADDR_HIGH FSR0H BUFFER_ADDR_LOW FSR0L ERASE_BLOCK ; write 55h ; write 0AAh ; start erase (CPU stall) ; re-enable interrupts ; Need to write 16 blocks of 64 to write ; one erase block of 1024 RESTART_BUFFER ; point to buffer FILL_BUFFER ... ; read the new data from I2C, SPI, ; PSP, USART, etc. WRITE_BUFFER MOVLW MOVWF WRITE_BYTE_TO_HREGS MOVFF MOVWF TBLWT+* D’64 COUNTER ; number of bytes in holding register POSTINC0, WREG TABLAT ; ; ; ; ; DECFSZ COUNTER BRA WRITE_WORD_TO_HREGS get low byte of buffer data present data to table latch write data, perform a short write to internal TBLWT holding register. loop until buffers are full PROGRAM_MEMORY 必需的序列 BSF BCF MOVLW MOVWF MOVLW MOVWF BSF BSF BCF EECON1, INTCON, 55h EECON2 0AAh EECON2 EECON1, INTCON, EECON1, WREN GIE ; write 55h WR GIE WREN DECFSZ WRITE_COUNTER BRA RESTART_BUFFER DS39762A_CN 第 102 页 ; enable write to memory ; disable interrupts ; ; ; ; write 0AAh start program (CPU stall) re-enable interrupts disable write to memory ; done with one write cycle ; if not done replacing the erase block 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 6.5.2 6.5.4 写校验 根据具体应用情况,一个比较好的编程习惯可能要求将 写入存储器的值与原始值作比较,进行校验。过多的写 操作可能会导致某些位接近规范的极限,在这样的应用 场合就应该采用写校验。 6.5.3 如果由于意外事件 (如掉电或意外复位)终止了写操 作,应该对刚刚编程的存储器单元进行验证,如有必 要,还要重新进行编程。当写操作在正常操作过程中因 MCLR 复位或 WDT 超时复位而中断时,用户可以检查 WRERR 位,并根据需要重写该单元。 表 6-2: 名称 为防止对闪存程序存储器的误写操作,必须遵循写操作 的启动顺序。更多详细信息,请参见第 24.0 节 “CPU 的特殊功能”。 6.6 意外终止写操作 防止误写操作的保护措施 代码保护期间闪存程序存储器的操作 关于闪存 程序存储器代码保护的详细信息,请参见 第 24.6 节 “程序校验和代码保护”。 与闪存程序存储器相关的寄存器 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 — — bit 21 程序存储器表指针最高字节 (TBLPTR<20:16>) TBLPTRU TBPLTRH 程序存储器表指针高字节 (TBLPTR<15:8>) TBLPTRL 程序存储器表指针低字节 (TBLPTR<7:0>) 59 TABLAT 59 INTCON EECON2 EECON1 图注: 程序存储器表锁存器 GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE EEPROM 控制寄存器 2 (不是实际存在的寄存器) — — — FREE WRERR TMR0IF INT0IF 59 59 RBIF 59 61 WREN WR — 61 — = 未用,读为 0。闪存 /EEPROM 访问期间不使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 103 页 PIC18F97J60 系列 注: DS39762A_CN 第 104 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 7.0 外部存储器总线 注: 64 引脚和 80 引脚器件上未实现外部存储 器总线。 外部存储器总线使器件可以访问外部存储器件 (如闪 存、 EPROM、 SRAM 等),将其作为程序或数据存储 器。它既支持 8 位和 16 位数据宽度模式,也支持三种 地址宽度 (最高达 20 位)。 表 7-1: 名称 该总线与 4 个 I/O 端口复用,占 28 个引脚。有三个端口 (PORTD、 PORTE 和 PORTH)与地址 / 数据总线复 用,总共有 20 条线可供使用,而端口 PORTJ 和总线控 制信号复用。 表 7-1 列出了各个引脚及其功能。 PIC18F96J60/96J65/97J60 外部总线——I/O 端口功能 端口 位 外部存储器总线功能 RD0/AD0 PORTD 0 RD1/AD1 PORTD 1 地址 bit 1 或数据 bit 1 RD2/AD2 PORTD 2 地址 bit 2 或数据 bit 2 RD3/AD3 PORTD 3 地址 bit 3 或数据 bit 3 RD4/AD4 PORTD 4 地址 bit 4 或数据 bit 4 RD5/AD5 PORTD 5 地址 bit 5 或数据 bit 5 RD6/AD6 PORTD 6 地址 bit 6 或数据 bit 6 RD7/AD7 PORTD 7 地址 bit 7 或数据 bit 7 RE0/AD8 PORTE 0 地址 bit 8 或数据 bit 8 RE1/AD9 PORTE 1 地址 bit 9 或数据 bit 9 RE2/AD10 PORTE 2 地址 bit 10 或数据 bit 10 RE3/AD11 PORTE 3 地址 bit 11 或数据 bit 11 RE4/AD12 PORTE 4 地址 bit 12 或数据 bit 12 RE5/AD13 PORTE 5 地址 bit 13 或数据 bit 13 RE6/AD14 PORTE 6 地址 bit 14 或数据 bit 14 RE7/AD15 PORTE 7 地址 bit 15 或数据 bit 15 RH0/A16 PORTH 0 地址 bit 16 RH1/A17 PORTH 1 地址 bit 17 RH2/A18 PORTH 2 地址 bit 18 RH3/A19 PORTH 3 地址 bit 19 RJ0/ALE PORTJ 0 地址锁存使能 (ALE)控制引脚 RJ1/OE PORTJ 1 输出使能 (OE)控制引脚 RJ2/WRL PORTJ 2 低字节写 (WRL)控制引脚 RJ3/WRH PORTJ 3 高字节写 (WRH)控制引脚 RJ4/BA0 PORTJ 4 字节地址 bit 0 (BA0) RJ5/CE PORTJ 5 芯片使能 (CE)控制引脚 RJ6/LB PORTJ 6 低字节使能 (LB)控制引脚 RJ7/UB PORTJ 7 高字节使能 (UB)控制引脚 注: 地址 bit 0 或数据 bit 0 为清楚起见,此处仅显示了 I/O 端口和外部总线的分配情况。某些引脚上可能具有一个或多个其他复用功 能。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 105 页 PIC18F97J60 系列 7.1 外部存储器总线控制 接口的操作由 MEMCON 寄存器 (寄存器 7-1)控制。 该寄存器可以在除单片机模式以外的所有程序存储器操 作模式下使用。在单片机模式下该寄存器被禁止,且不 能被写入。 EBDIS 位 (MEMCON<7>)控制总线操作及相关端口 功能。清零 EBDIS 位将使能接口,并禁止端口的 I/O 功 能及引脚上的其他复用功能。置 1 该位将使能 I/O 端口 及其他功能,但允许接口在要求进行外部存储器操作 时,改写引脚上的数据。在默认情况下,总是使能外部 总线并禁止其他所有 I/O 功能。 寄存器 7-1: EBDIS 位的操作还会受所使用的程序存储器模式影响。 在第 7.5 节 “程序存储器模式和外部存储器总线”中对 此进行了更为详细的讨论。 WAIT 位允许为外部存储器操作插入等待状态。在第 7.3 节 “等待状态”中对这些位的使用方法进行了讨论。 WM 位用于选择在总线工作于 16 位数据宽度模式下时 使用的具体操作模式。在第 7.6 节 “16 位数据宽度模 式”中对这些操作模式进行了更为详细的讨论。选择 8 位数据宽度模式时 WM 位不起任何作用。 MEMCON: 外部存储器总线控制寄存器 R/W-0 U-0 R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 EBDIS — WAIT1 WAIT0 — — WM1 WM0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 EBDIS:外部总线禁止位 1 = 当单片机访问外部存储器时将使能外部总线;否则,所有外部总线驱动器映射为 I/O 端口。 0 = 始终使能外部总线,并禁止 I/O 端口 bit 6 未用:读为 0 bit 5-4 WAIT1:WAIT0:表读和表写操作总线等待周期数位 11 = 表读和表写操作等待 0 个 TCY 10 = 表读和表写操作等待 1 个 TCY 01 = 表读和表写操作等待 2 个 TCY 00 = 表读和表写操作等待 3 个 TCY bit 3-2 未用:读为 0 bit 1-0 WM1:WM0:16 位数据总线宽度下的 TBLWT 操作模式选择位 1x = 字写模式:当写入 TABLAT 并且 TBLPTR 包含奇地址时,WRH 有效。当 TBLPTR 包含偶地址时, 写入 TABLAT 会将写入值装入保持锁存器。 01 = 字节选择模式:TABLAT 数据复制到 MSB 和 LSB, WRH 与 UB (或 LB)将有效 00 = 字节写模式:TABLAT 数据复制到 MSB 和 LSB, WRH 或 WRL 将有效 DS39762A_CN 第 106 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 7.2 7.2.1 地址和数据宽度 外部总线上的地址平移 PIC18F97J60 系列器件可以将同一存储器总线配置成 不 同 的 地 址 和 数 据 宽 度。地 址 和 数 据 宽 度 都 通 过 CONFIG3L 寄存器中的配置位来设置。配置位意味着这 些选项只能通过器件编程来配置,而不能通过软件进行 控制。 在默认情况下,外部总线上的地址是 PC 的值。实际上, 这意味着外部存储器器件中,位于片上存储器上边界以 下的地址,对于单片机是不可用的。要访问这些物理单 元,单片机与外部存储器之间的连接逻辑必须能够进行 地址转换。 BW 位是 8 位或 16 位数据总线宽度的选择位。置 1 该 位 (默认)将选择 16 位数据宽度。 为了简化接口,外部总线提供了单片机模式,它可以自 动执行地址平移。该功能由 EASHFT 配置位控制。置 1 该位会将总线上的地址进行偏移,偏移量为单片机片上 程序存储器大小,且下限地址设为 0000h。这使器件可 以使用外部存储器物理地址的全部范围。 EMB1:EMB0 位同时决定程序存储器的操作模式和地址 总线宽度。可用的选项有 20 位、16 位和 12 位地址总线 宽度,以及默认的单片机模式 (禁止外部总线)。选择 16 位或 12 位将使多出的高位地址线可被用于 I/O 端口 功能,这些引脚将不再受 EBDIS 位设置的影响。例如, 选择 16 位地址模式 (EMB1:EMB0 = 01)将禁止 A19:A16,并使 PORTH<3:0> 位可以不受总线影响而作 为端口工作。使用较小的地址宽度使用户可以根据特定 应用的外部存储器空间大小来定制存储器总线,同时又 空出引脚专门用于 I/O操作。 由于 EMB 位可以禁止引脚用于存储器总线操作,因此要 注意选择的地址宽度要始终大于等于数据宽度。如果为 16 位数据宽度配以 12 位地址宽度,则总线上将无法得 到数据的高 4 位。 7.2.2 21 位寻址 作为 20 位地址宽度操作的扩展,外部存储器总线还可 以对 2 MB 的所有存储器空间进行寻址。这通过使用总 线地址 Bit 0(BA0)控制线作为地址的最低有效位来实 现。对于某些存储器器件,还可以使用 UB 和 LB 控制 信号来选择 16 位宽数据字中的高字节和低字节。 在 8 位数据宽度和某些 16 位数据宽度模式中可以使用 该寻址模式。更多详细信息,请参见第 7.6.3 节“16 位 字节选择模式”和第 7.7 节 “8 位数据宽度模式”。 所有的地址与数据宽度组合都需要复用信号线。表 7-2 中对地址和数据线复用,以及使用较小地址宽度时可用 的 I/O 端口进行了总结。 表 7-2: 数据宽度 不同地址和数据宽度的地址和数据线 地址宽度 数据和地址复用线 (及相应的端口) 12 位 8位 16 位 AD7:AD0 (PORTD<7:0>) 20 位 16 位 16 位 20 位 2006 Microchip Technology Inc. AD15:AD0 (PORTD<7:0>, PORTE<7:0>) 超前信息 仅地址线 (及相应的端口) AD11:AD8 (PORTE<3:0>) AD15:AD8 (PORTE<7:0>) A19:A16 和 AD15:AD8 (PORTH<3:0>, PORTE<7:0>) — A19:A16 (PORTH<3:0>) 可用于 I/O 的端口 PORTE<7:4>, PORTH 的所有位 PORTH 的所有位 — PORTH 的所有位 — DS39762A_CN 第 107 页 PIC18F97J60 系列 7.3 等待状态 人们可能认为外部存储器件是工作在单片机的时钟速率 下的,但通常并非如此。事实上,许多器件写数据或检 索数据所需的时间要比执行表读或表写操作所允许的时 间长。 为补偿这一点,可以将外部存储器总线配置为在每个使 用总线的表操作中增加固定的延时。等待状态可通过将 WAIT 配 置 位 置 1 来 使 能。使 能 后,延 时 时 间 量由 WAIT1:WAIT0 位 (MEMCON<5:4>)设置。该延时为 单片机指令周期的整数倍,并在执行表操作时添加到其 指令周期后面。范围从无延时到 3 个 TCY (默认值)。 7.4 端口引脚弱上拉 除了高地址线 A19:A16,与外部存储器总线相关的引脚 都配有弱上拉电路。上拉功能由 PORTG 寄存器的高 3 位控制。它们是 RDPU、 REPU 和 RJPU,分别控制 PORTD、 PORTE 和 PORTJ 端口的弱上拉。置 1 其中 任何一位将使能相应端口的弱上拉。默认情况下,器件 复位时所有弱上拉都被禁止。 7.5 如果在 EBDIS = 0 时,器件执行内部存储器操作,存储 器总线地址 / 数据引脚和控制引脚将无效。它们将转为 以下状态:有效地址 / 数据引脚为三态, CE、 OE、 WRH、 WRL、 UB 和 LB 信号为 1,而 ALE 和 BA0 为 0。请注意,只有那些与当前地址宽度相关的引脚才会 被强制设为三态,其他引脚将继续用作 I/O 端口。例如, 在地址为 16 位宽时,只有 AD<15:0> (PORTD 和 PORTE)会受影响,A19:A16(PORTH<3:0>)继续用 作 I/O 端口。 在所有外部存储器模式中,总线的优先级高于其他任何 与其共用引脚的外设。其中包括并行从动端口 (PSP) 和串行通信模块;在非外部存储器模式时,它们的优先 级高于 I/O 端口。 7.6 16 位数据宽度模式 在 16 位数据宽度模式中,外部存储器接口可以使用三 种不同的配置与外部存储器连接: 程序存储器模式和外部存储器总线 使 用 片 上 程 序 存 储 器 和 外 部程 序 存 储 器组 合,可 使 PIC18F97J60 系列器件能够工作于两种程序存储器模 式下。复用端口引脚的功能取决于所选择的程序存储器 模式和 EBDIS 位的设置。 在单片机模式下,总线处于无效状态,引脚只具有端口 功能。写 MEMCOM 寄存器是不允许的。EBDIS 的复位 值 (0)被忽略, EMB 引脚用作 I/O 端口。 在扩展单片机模式下,外部程序存储器总线共用引脚上 的 I/O 端口功能。当器件在外部程序存储空间上取数据 或进行表读 / 表写操作时,引脚将具有外部总线功能。 如 果 器 件 仅 对 内 部 程 序 存 储 器 取 数 据 和 进 行 访 问, EBDIS 控制位将把引脚从外部存储器功能变换为 I/O 端 口功 能。当 EBDIS = 0 时,引 脚 用 作 外 部 总 线。当 EBDIS = 1 时,引脚用作 I/O 端口。 DS39762A_CN 第 108 页 如果在 EBDIS = 1 时,器件对外部存储器取数据或进行 访问,引脚将转换为外部总线。如果外部存储器执行的 程序将 EBDIS 位置 1,则置 1 该位的操作将被延迟,直 到程序跳转到内部存储器。此时,引脚将从外部总线变 换为 I/O 端口。 • 16 位字节写 • 16 位字写 • 16 位字节选择 要使用的配置取决于 MEMCON 寄存器中的 WM1:WM0 (MEMCON<1:0>)位。这三种不同配置使设计者可以在 使用8位和16位器件处理16位数据时获得最大的灵活性。 对于所有 16 位数据宽度模式,地址锁存使能(ALE)引 脚用于表明地址位 AD<15:0> 在外部存储器接口总线上 是有效的。地址锁存之后,输出使能信号(OE)将一次 使能程序存储器的两个字节来形成一个 16 位的指令字。 芯片使能信号(CE)在单片机访问外部存储器的任何时 刻,无论是执行读操作还是写操作时,都是有效的。每 当器件处于休眠模式时,它是无效的 (保持高电平)。 在字节选择模式中, JEDEC 标准闪存存储器需要使用 BA0 作为字节地址线,并使用一条 I/O 线来选择字节或 字模式。其他 16 位数据宽度模式不需要使用 BA0。 JEDEC 标准静态 RAM 存储器将使用 UB 或 LB 信号来 选择字节。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 7.6.1 16 位字节写模式 在TBLWT指令周期中,TABLAT中的数据送到AD15:AD0 总线的高字节和低字节。TBLPTR 的最低有效位将选通 相应的 WRH 或 WRL 控制线。 图 7-1 给出了 PIC18F97J60 系列器件 16 位字节写模式 的一个示例。该模式用于连接两个独立 8 位存储器进行 16 位操作。这通常包括基本 EPROM 和闪存器件。它 允许对字节宽度的外部存储器进行表写操作。 图 7-1: 16 位字节写模式示例 D<7:0> PIC18F97J60 AD<7:0> (MSB) 373 A<19:0> D<15:8> (LSB) A<x:0> A<x:0> D<7:0> D<7:0> CE AD<15:8> 373 OE D<7:0> CE WR(2) OE WR(2) ALE A<19:16>(1) CE OE WRH WRL 地址总线 数据总线 控制线 注 1: 高位地址线仅用于 20 位地址宽度。 2: 该信号仅适用于表写操作。请参见第 6.1 节 “表读与表写”。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 109 页 PIC18F97J60 系列 7.6.2 16 位字写模式 图 7-2 给出了 PIC18F97J60 器件 16 位字写模式的一个 示例。该模式用于以字长为单位的存储器,包括一些 EPROM 和闪存类型的存储器。该模式允许从所有形式 的 16 位存储器中取操作码和对其进行表读操作,以及 对任意类型的 16 位外部存储器进行表写操作。使用该 方法时,访问奇地址和偶地址的 TBLWT 周期之间存在区 别。 对于访问奇地址的 TBLWT 周期 (TBLPTR<0> = 1), TABLAT 中的数据送到 AD15:AD0 总线的高字节。保持 锁存器的内容送到 AD15:AD0 总线的低字节。 WRH信号在每个写周期被选通,WRL引脚未使用。BA0 引脚上的信号表明 TBLPTR 的最低有效位,但处于未连 接状态。实际上将使用 UB 和 LB 信号来选择两个字节。 该方法的明显局限在于,必须在特定字边界成对地执行 表写操作,才能正确地写一个字单元。 对于访问偶地址的 TBLWT 周期 (TBLPTR<0> = 0), TABLAT 中的数据将传送到保持锁存器,外部地址数据 总线在总线作为数据总线时被置为三态。写信号不会激 活。 图 7-2: 16 位字写模式示例 PIC18F97J60 AD<7:0> 373 A<20:1> A<x:0> D<15:0> JEDEC 字 EPROM 存储器 D<15:0> CE AD<15:8> OE WR(2) 373 ALE A<19:16>(1) CE OE WRH 地址总线 数据总线 控制线 注 1: 高位地址线仅用于 20 位地址宽度。 2: 该信号仅适用于表写操作。请参见第 6.1 节 “表读与表写”。 DS39762A_CN 第 110 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 7.6.3 16 位字节选择模式 闪存和SRAM器件使用不同的控制信号组合来实现字节 选择模式。 JEDEC 标准闪存存储器要求将一个控制器 I/O 端口引脚连接到存储器的 BYTE/WORD 引脚来提供 选择信号。它们使用控制器的 BA0 信号作为字节地址。 而 JEDEC 标准静态 RAM 存储器则使用 UB 或 LB 信号 来选择字节。 图 7-3 给出了 16 位字节选择模式的一个示例。该模式 允许向字宽度的外部存储器进行表写操作,同时还可以 进行字节选择。这通常包括字宽度的闪存和 SRAM 器 件。 在 TBLWT 周期中,TABLAT 中的数据送到 AD15:AD0 总 线的高字节和低字节。 WRH 信号在每一个写周期被选 通,WRL 引脚未使用。BA0 或 UB/LB 信号根据 TBLPTR 寄存器的最低有效位选择要写的字节。 图 7-3: 16 位字节选择模式示例 PIC18F97J60 AD<7:0> 373 A<20:1> JEDEC 字 闪存存储器 A<x:1> D<15:0> AD<15:8> 138(3) 373 CE A0 BYTE/WORD ALE D<15:0> OE WR(1) A<19:16>(2) OE WRH A<20:1> A<x:1> BA0 JEDEC 字 SRAM 存储器 I/O D<15:0> CE LB UB LB UB D<15:0> OE WR(1) 地址总线 数据总线 控制线 注 1: 该信号仅适用于表写操作。请参见第 6.1 节 “表读与表写”。 2: 高位地址线仅用于 20 位地址宽度。 3: 只有在访问多个存储器件时才需要进行信号分离。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 111 页 PIC18F97J60 系列 7.6.4 16 位模式时序 对于各种操作模式,送到外部存储器总线的控制信号是 不同的。图 7-4 和图 7-5 给出了典型的信号时序图。 图 7-4: 执行 TBLRD 操作时外部存储器总线的时序 (扩展单片机模式) Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 0Ch A<19:16> CF33h AD<15:0> 9256h CE ALE OE 存储器 周期 指令 执行 图 7-5: 取操作码 TBLRD* 自 000100h 取操作码 MOVLW 55h 自 000102h TBLRD 92h 自 199E67h 取操作码 ADDLW 55h 自 000104h INST(PC – 2) TBLRD 周期 1 TBLRD 周期 2 MOVLW 执行休眠操作时外部存储器总线时序 (扩展单片机模式) Q1 Q2 A<19:16> AD<15:0> Q3 Q4 Q1 Q2 00h 3AAAh Q3 Q4 Q1 00h 0003h 3AABh 0E55h CE ALE OE 存储器 周期 指令 执行 DS39762A_CN 第 112 页 取操作码 SLEEP 自 007554h 取操作码 MOVLW 55h 自 007556h INST(PC – 2) SLEEP 超前信息 休眠模式,总线处于无效状态 2006 Microchip Technology Inc. PIC18F97J60 系列 7.7 8 位数据宽度模式 节,然后 BA0 将改变,从而使能第二个字节来形成 16 位指令字。在该模式下,地址的最低有效位 BA0 必须连 接到存储器件。芯片使能信号 (CE)在单片机访问外 部存储器的任何时刻,无论是执行读操作还是写操作 时,都是有效的。每当器件处于休眠模式时,它是无效 的 (保持高电平)。 在 8 位数据宽度模式中,外部存储器总线仅工作于复用 模式;也就是说,数据共用地址总线的低 8 位。 图 7-6 给出了 100 引脚器件 8 位复用模式的一个示例。该 模式用于对单个 8 位存储器进行 16 位操作。在数据 / 地 址复用总线上,将按照取两个 8 位字节的方式取指令。这 两个字节在一个指令周期 (TCY)内顺序地取出。因此, 设计者必须以 1/2 TCY (双倍指令速率)为单位计算时 序,并据此来选择外部存储器。为了选择合适的存储器 速率,必须在考虑建立时间和保持时间的同时,考虑连 接逻辑传输延时。 该过程通常包括基本 EPROM 和闪存器件。它允许对字 节宽度的外部存储器进行表写操作。 在 TBLWT 指令周期中, TABLAT 中的数据送到 AD15:AD0 总线的高字节和低字节。在 TBLPTR 的最低 有效位将选通 BA0 控制线,送出适当的电平。 地址锁存使能 (ALE)引脚表明地址位 AD<15:0> 在外 部存储器接口总线上是有效的。输出使能信号 (OE) 将在指令周期的部分时间内使能程序存储器的一个字 图 7-6: 8 位复用模式示例 D<7:0> PIC18F97J60 AD<7:0> 373 ALE A<19:0> A<x:1> A0 D<15:8> D<7:0> AD<15:8>(1) A<19:16> CE (1) OE WR(2) BA0 CE OE WRL 地址总线 数据总线 控制线 注 1: 高位地址位仅用于 20 位地址宽度。 AD 的高字节用于除 8 位以外的所有地址宽度。 2: 该信号仅适用于表写操作。请参见第 6.1 节 “表读与表写”。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 113 页 PIC18F97J60 系列 7.7.1 8 位模式时序 对于各种操作模式,送到外部存储器总线的控制信号是 不同的。图 7-7 和图 7-8 给出了典型的信号时序图。 图 7-7: 执行 TBLRD 操作时外部存储器总线时序 (扩展单片机模式) Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 0Ch A<19:16> CFh AD<15:8> 33h AD<7:0> 92h CE ALE OE 存储器 周期 指令 执行 图 7-8: 取操作码 TBLRD* 自 000100h 取操作码 MOVLW 55h 自 000102h TBLRD 92h 自 199E67h 取操作码 ADDLW 55h 自 000104h INST(PC – 2) TBLRD 周期 1 TBLRD 周期 2 MOVLW 执行休眠操作时外部存储器总线时序 (扩展单片机模式) Q1 Q2 A<19:16> Q4 Q1 Q2 3Ah AAh 00h Q3 Q4 Q1 00h 00h AD<15:8> AD<7:0> Q3 3Ah 03h ABh 0Eh 55h BA0 CE ALE OE 存储器 周期 指令 执行 DS39762A_CN 第 114 页 取操作码 SLEEP 自 007554h 取操作码 MOVLW 55h 自 007556h INST(PC – 2) SLEEP 超前信息 休眠模式,总线处于无效状态 2006 Microchip Technology Inc. PIC18F97J60 系列 7.8 功耗管理模式下的操作 在功耗管理运行模式下,外部存储器总线继续正常工 作。如果选择了一个较低速的时钟源,总线操作以该速 率运行。在这些情况下,如果使能等待状态且在外部存 储器操作中增加了等待状态,则可能造成外部存储器访 问时间过长。如果希望以低功耗运行模式执行操作,则 用户应用程序应在低时钟速率时对存储器访问时间进行 调整。 2006 Microchip Technology Inc. 在休眠和空闲模式下,单片机内核不需要访问数据,总 线操作会暂停。外部总线的状态被冻结,地址 / 数据引 脚和大部分控制引脚保持在模式激活时的状态。唯一可 能变化的是 CE、LB 和 UB 引脚,它们被保持为逻辑高 电平。 超前信息 DS39762A_CN 第 115 页 PIC18F97J60 系列 注: DS39762A_CN 第 116 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 8.0 8.1 8 x 8 硬件乘法器 例 8-1: MOVF MULWF 简介 所有 PIC18 器件均包含一个 8 x 8 硬件乘法器(是 ALU 的一部分)。该乘法器可执行无符号运算并产生一个 16 位 运 算 结 果,该 结 果 存 储 在 一 对 乘 积 寄 存 器 PRODH:PRODL 中。该乘法器执行的运算不会影响 STATUS 寄存器中的任何标志。 例 8-2: 通过硬件执行乘法运算只需要一个指令周期。硬件乘法 器具有更高的计算吞吐量并减少了乘法算法的代码长 度,从而可在许多先前仅能使用数字信号处理器的应用 中使用 PIC18 器件。表 8-1 给出了硬件和软件乘法运算 的比较,包括所需存储器空间和执行时间。 8.2 8 x 8 无符号乘法程序 ARG1, W ARG2 工作原理 ; ; ARG1 * ARG2 -> ; PRODH:PRODL 8 x 8 有符号乘法程序 MOVF MULWF ARG1, W ARG2 BTFSC SUBWF ARG2, SB PRODH, F MOVF BTFSC SUBWF ARG2, W ARG1, SB PRODH, F 例 8-1 给出了一个 8 x 8 无符号乘法运算的指令序列。当 已在 WREG 寄存器中装入了一个乘数时,实现该运算仅 需一条指令。 ; ; ; ; ; ARG1 * ARG2 -> PRODH:PRODL Test Sign Bit PRODH = PRODH - ARG1 ; Test Sign Bit ; PRODH = PRODH ; - ARG2 例 8-2 给出了一个 8 x 8 有符号乘法运算的指令序列。要 弄清乘数的符号位,必须检查每个乘数的最高有效位 (MSb),并做相应的减法。 表 8-1: 程序 8 x 8 无符号 8 x 8 有符号 16 x 16 无符号 16 x 16 有符号 各种乘法运算的性能比较 乘法实现方法 程序 存储器 (字) 周期数 (最多) 无硬件乘法 13 硬件乘法 1 无硬件乘法 33 硬件乘法 6 无硬件乘法 硬件乘法 无硬件乘法 硬件乘法 2006 Microchip Technology Inc. 时间 40 MHz 时 10 MHz 时 4 MHz 时 69 6.9 µs 27.6 µs 69 µs 1 100 ns 400 ns 1 µs 91 9.1 µs 36.4 µs 91 µs 6 600 ns 2.4 µs 6 µs 21 242 24.2 µs 96.8 µs 242 µs 28 28 2.8 µs 11.2 µs 28 µs 52 254 25.4 µs 102.6 µs 254 µs 35 40 4.0 µs 16.0 µs 40 µs 超前信息 DS39762A_CN 第 117 页 PIC18F97J60 系列 例 8-3 给出了一个 16 x 16 无符号乘法运算的指令序列。 公式 8-1 为所使用的算法。32 位结果存储在 4 个寄存器 (RES3:RES0)中。 公式 8-1: RES3:RES0 例 8-3: 例 8-4: 16 x 16 无符号乘法算法 = = ARG1H:ARG1L • ARG2H:ARG2L (ARG1H • ARG2H • 216) + (ARG1H • ARG2L • 28) + (ARG1L • ARG2H • 28) + (ARG1L • ARG2L) ARG1L, W ARG2L MOVFF MOVFF PRODH, RES1 PRODL, RES0 MOVF MULWF ARG1H, W ARG2H MOVFF MOVFF PRODH, RES3 PRODL, RES2 MOVF MULWF ARG1L, W ARG2H MOVF ADDWF MOVF ADDWFC CLRF ADDWFC PRODL, W RES1, F PRODH, W RES2, F WREG RES3, F MOVF MULWF ARG1H, W ARG2L MOVF ADDWF MOVF ADDWFC CLRF ADDWFC PRODL, W RES1, F PRODH, W RES2, F WREG RES3, F ARG1L, W ARG2L MOVFF MOVFF PRODH, RES1 PRODL, RES0 MOVF MULWF ARG1H, W ARG2H MOVFF MOVFF PRODH, RES3 PRODL, RES2 MOVF MULWF ARG1L, W ARG2H MOVF ADDWF MOVF ADDWFC CLRF ADDWFC PRODL, W RES1, F PRODH, W RES2, F WREG RES3, F MOVF MULWF ARG1H, W ARG2L MOVF ADDWF MOVF ADDWFC CLRF ADDWFC PRODL, W RES1, F PRODH, W RES2, F WREG RES3, F BTFSS BRA MOVF SUBWF MOVF SUBWFB ARG2H, 7 SIGN_ARG1 ARG1L, W RES2 ARG1H, W RES3 ; ARG2H:ARG2L neg? ; no, check ARG1 ; ; ; ; ; ARG1H * ARG2H-> ; PRODH:PRODL ; ; ARG1H, 7 CONT_CODE ARG2L, W RES2 ARG2H, W RES3 ; ARG1H:ARG1L neg? ; no, done ; ; ; ARG1L * ARG2H-> PRODH:PRODL Add cross products ARG1L * ARG2H -> PRODH:PRODL Add cross products ; ; ; ; ; ; ; ; ; ARG1H * ARG2L -> PRODH:PRODL Add cross products ; ; ARG1H * ARG2L-> PRODH:PRODL Add cross products 例 8-4 给出了 16 x 16 有符号乘法运算的指令序列。 公式 8-2 为所使用的算法。32 位结果存储在 4 个寄存器 (RES3:RES0)中。要弄清乘数的符号位,必须检查每 个乘数的最高有效位 (MSb),并做相应的减法。 公式 8-2: ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ARG1H * ARG2H -> ; PRODH:PRODL ; ; ; ; ARG1L * ARG2L-> ; PRODH:PRODL ; ; ; ; ; ; ; ; ; ; ; ARG1L * ARG2L -> ; PRODH:PRODL ; ; ; 16 x 16 无符号乘法程序 MOVF MULWF 16 x 16 有符号乘法程序 MOVF MULWF ; SIGN_ARG1 BTFSS BRA MOVF SUBWF MOVF SUBWFB ; CONT_CODE : 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) DS39762A_CN 第 118 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 9.0 中断 PIC18F97J60 系列器件具有多个中断源及一个中断优先 级功能,该功能可以给大多数中断源分配高优先级或者 低优先级。高优先级中断向量位于 0008h,低优先级中 断向量位于 0018h。高优先级中断事件可以中断正在处 理的低优先级中断。 有 13 个寄存器用于控制中断操作。这些寄存器是: • • • • RCON INTCON INTCON2 INTCON3 当 IPEN 位清零 (默认状态)时,便会禁止中断优先级 功能,此时中断是与 PIC® 中档系列器件兼容的。在兼容 模 式 下,各 个 中 断 源 的 中 断 优 先 级 位 不 起 作 用。 INTCON<6> 是 PEIE 位,用于允许 / 禁止所有的外设中 断源。 INTCON<7> 是 GIE 位,用于允许 / 禁止所有中 断源。在兼容模式下,所有中断均跳转到 0008h。 当响应中断时,全局中断允许位被清零以禁止其他中 断。如果 IPEN 位是零,则该位就是 GIE 位。如果使用 了中断优先级,这个位就是 GIEH 位或者 GIEL 位。高 优先级中断源会中断低优先级中断。在处理高优先级中 断时,低优先级中断将不被响应。 返回地址被压入堆栈,中断向量地址(0008h或0018h) 被装入 PC。只要在中断服务程序中,就可以通过查询 中断标志位来确定中断源。在重新允许中断前,必须用 软件将中断标志位清零,以避免重复响应中断。 • PIR1、 PIR2 和 PIR3 • PIE1、 PIE2 和 PIE3 • IPR1、 IPR2 和 IPR3 建议使用 MPLAB® IDE 提供的 Microchip 头文件命名这 些寄存器中的位。这使得汇编器 / 编译器能够自动识别 指定寄存器内的这些位。 通常,中断源有 3 个位用于控制其操作。这些位的功能 分别是: • 标志位表明发生了中断事件 • 允许位允许程序跳转到中断向量地址处执行 (当 标志位置 1 时) • 优先级位用于选择高优先级还是低优先级 执行“从中断返回”指令 RETFIE 将退出中断程序,同 时将 GIE 位(若使用中断优先级则为 GIEH 或 GIEL 位) 置 1,从而重新允许中断。 对于外部中断事件,例如 INT 引脚中断或者 PORTB 输 入电平变化中断,中断响应延时将会是 3 到 4 个指令周 期。对于单周期或双周期指令,中断响应延时完全相 同。各中断标志位的置 1 不受对应的中断允许位和 GIE 位状态的影响。 注: 通过将 IPEN 位 (RCON<7>)置 1,可使能中断优先 级功能。当使能中断优先级时,有 2 个全局中断允许位。 将 GIEH 位 (INTCON<7>)置 1,可允许所有优先级位 已置 1(高优先级)的中断。将 GIEL 位(INTCON<6>) 置 1,可允许所有优先级位已清零(低优先级)的中断。 当中断标志位、允许位及相应的全局中断允许位均被置 1 时,中断将根据设置的中断优先级立即跳转到地址 0008h 或 0018h。也可以通过设置相应的允许位来禁止 单个中断。 2006 Microchip Technology Inc. 超前信息 当允许任何中断时,不要使用 MOVFF 指令 修改中断控制寄存器。否则可能导致单片 机操作出错。 DS39762A_CN 第 119 页 PIC18F97J60 系列 图 9-1: PIC18F97J60 系列中断逻辑 PIR1<7:0> PIE1<7:0> IPR1<7:0> PIR2<7:5,3,1:0> PIE2<7:5,3,1:0> IPR2<7:5,3,1:0> 如果处于空闲或休眠模式 则唤醒 CPU TMR0IF TMR0IE TMR0IP RBIF RBIE RBIP INT0IF INT0IE INT1IF INT1IE INT1IP INT2IF INT2IE INT2IP INT3IF INT3IE INT3IP 到 CPU 的中断 向量单元 0008h GIE/GIEH IPEN IPEN PEIE/GIEL PIR3<7:0> PIE3<7:0> IPR3<7:0> IPEN 产生高优先级中断 产生低优先级中断 PIR1<7:0> PIE1<7:0> IPR1<7:0> PIR2<7:5,3,1:0> PIE2<7:5,3,1:0> IPR2<7:5,3,1:0> PIR3<7:0> PIE3<7:0> IPR3<7:0> TMR0IF TMR0IE TMR0IP RBIF RBIE RBIP INT1IF INT1IE INT1IP INT2IF INT2IE INT2IP INT3IF INT3IE INT3IP DS39762A_CN 第 120 页 超前信息 到 CPU 的中断 向量单元 0018h IPEN GIE/GIEH PEIE/GIEL 2006 Microchip Technology Inc. PIC18F97J60 系列 9.1 INTCON 寄存器 注: INTCON 寄存器是可读写的寄存器,包含多个允许位、 优先级位和标志位。 寄存器 9-1: 当中断条件产生时,不管相应的中断允许 位或全局中断允许位的状态如何,中断标 志位都将置 1。用户软件应在允许一个中断 前,先将相应的中断标志位清零。中断标志 位可由软件查询。 INTCON:中断控制寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF(1) bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 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:RB 端口电平变化中断允许位 1 = 允许 RB 端口电平变化中断 0 = 禁止 RB 端口电平变化中断 bit 2 TMR0IF:TMR0 溢出中断标志位 1 = TMR0 寄存器已溢出 (必须用软件清零) 0 = TMR0 寄存器未溢出 bit 1 INT0IF:INT0 外部中断标志位 1 = 发生了 INT0 外部中断 (必须用软件清零) 0 = 未发生 INT0 外部中断 bit 0 RBIF:RB 端口电平变化中断标志位 (1) 1 = RB7:RB4 引脚中至少有一个引脚的电平状态发生了改变 (必须用软件清零) 0 = RB7:RB4 引脚电平状态没有改变 注 1: 电平的不匹配会不断地将该位置 1。读取 PORTB 可以结束不匹配情况,并将该位清零。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 121 页 PIC18F97J60 系列 寄存器 9-2: INTCON2:中断控制寄存器 2 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 RBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 RBPU:PORTB 上拉使能位 1 = 禁止所有 PORTB 上拉 0 = 根据各端口锁存值使能 PORTB 上拉 bit 6 INTEDG0:外部中断 0 边沿选择位 1 = 上升沿触发中断 0 = 下降沿触发中断 bit 5 INTEDG1:外部中断 1 边沿选择位 1 = 上升沿触发中断 0 = 下降沿触发中断 bit 4 INTEDG2:外部中断 2 边沿选择位 1 = 上升沿触发中断 0 = 下降沿触发中断 bit 3 INTEDG3:外部中断 3 边沿选择位 1 = 上升沿触发中断 0 = 下降沿触发中断 bit 2 TMR0IP:TMR0 溢出中断优先级位 1 = 高优先级 0 = 低优先级 bit 1 INT3IP:INT3 外部中断优先级位 1 = 高优先级 0 = 低优先级 bit 0 RBIP:RB 端口电平变化中断优先级位 1 = 高优先级 0 = 低优先级 注: x = 未知 当中断条件产生时,不管相应的中断允许位或全局中断允许位的状态如何,中断标志位都将置 1。用户软件 应在允许一个中断前,先将相应的中断标志位清零。中断标志位可由软件查询。 DS39762A_CN 第 122 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 9-3: INTCON3:中断控制寄存器 3 R/W-1 R/W-1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 INT2IP:INT2 外部中断优先级位 1 = 高优先级 0 = 低优先级 bit 6 INT1IP:INT1 外部中断优先级位 1 = 高优先级 0 = 低优先级 bit 5 INT3IE:INT3 外部中断允许位 1 = 允许 INT3 外部中断 0 = 禁止 INT3 外部中断 bit 4 INT2IE:INT2 外部中断允许位 1 = 允许 INT2 外部中断 0 = 禁止 INT2 外部中断 bit 3 INT1IE:INT1 外部中断允许位 1 = 允许 INT1 外部中断 0 = 禁止 INT1 外部中断 bit 2 INT3IF:INT3 外部中断标志位 1 = 发生了 INT3 外部中断 (必须用软件清零) 0 = 未发生 INT3 外部中断 bit 1 INT2IF:INT2 外部中断标志位 1 = 发生了 INT2 外部中断 (必须用软件清零) 0 = 未发生 INT2 外部中断 bit 0 INT1IF:INT1 外部中断标志位 1 = 发生了 INT1 外部中断 (必须用软件清零) 0 = 未发生 INT1 外部中断 注: x = 未知 当中断条件产生时,不管相应的中断允许位或全局中断允许位的状态如何,中断标志位都将置 1。用户软件 应在允许一个中断前,先将相应的中断标志位清零。中断标志位可由软件查询。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 123 页 PIC18F97J60 系列 9.2 PIR 寄存器 注 PIR 寄存器包含各外设中断的标志位。根据外设中断源 的数量,有三个外设中断请求(标志)寄存器(PIR1、 PIR2 和 PIR3)。 寄存器 9-4: R/W-0 PSPIF (1) 1: 当中断条件产生时,不管相应的中断允许 位或全局中断允许位 GIE(INTCON<7>) 的状态如何,中断标志位都将置 1。 2: 用户软件应在允许一个中断前和处理完一 次中断后,将相应的中断标志位清零。 PIR1:外设中断请求 (标志)寄存器 1 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 PSPIF:并行从动端口读 / 写中断标志位 (1) 1 = 发生了读或写操作 (必须用软件清零) 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:ECCP1 中断标志位 捕捉模式: 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 寄存器未溢出 注 x = 未知 1: 仅在单片机模式下的 100 引脚器件上实现。 DS39762A_CN 第 124 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 9-5: PIR2:外设中断请求 (标志)寄存器 2 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 OSCFIF:振荡器失效中断标志位 1 = 系统振荡器失效,改成由 INTRC 作为时钟输入 (必须用软件清零) 0 = 系统时钟正常运行 bit 6 CMIF:比较器中断标志位 1 = 比较器输入已改变 (必须用软件清零) 0 = 比较器输入未变化 bit 5 ETHIF:以太网模块中断标志位 1 = 发生了以太网模块中断事件;查询 EIR 寄存器来判断中断原因 0 = 未发生以太网模块中断事件 bit 4 保留:保持为 0 bit 3 BCL1IF:总线冲突中断标志位 (MSSP1 模块) 1 = 发生了总线冲突 (必须用软件清零) 0 = 未发生总线冲突 bit 2 未用:读为 0 bit 1 TMR3IF:TMR3 溢出中断标志位 1 = TMR3 寄存器已溢出 (必须用软件清零) 0 = TMR3 寄存器未溢出 bit 0 CCP2IF:ECCP2 中断标志位 捕捉模式: 1 = 发生了 TMR1/TMR3 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器捕捉 比较模式: 1 = 发生了 TMR1/TMR3 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器的比较匹配 PWM 模式: 在此模式下未使用。 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 125 页 PIC18F97J60 系列 寄存器 9-6: PIR3:外设中断请求 (标志)寄存器 3 R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 SSP2IF(1) BCL2IF(1) RC2IF(2) TX2IF(2) TMR4IF CCP5IF CCP4IF CCP3IF bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 SSP2IF:主控同步串口 2 中断标志位 (1) 1 = 发送 / 接收已完成 (必须用软件清零) 0 = 等待发送 / 接收 bit 6 BCL2IF:总线冲突中断标志位 (MSSP2 模块) (1) 1 = 发生了总线冲突 (必须用软件清零) 0 = 未发生总线冲突 bit 5 RC2IF:EUSART2 接收中断标志位 (2) 1 = EUSART2 接收缓冲区 RCREG2 已满 (读取 RCREG2 时清零) 0 = EUSART2 接收缓冲区为空 bit 4 TX2IF:EUSART2 发送中断标志位 (2) 1 = EUSART2 发送缓冲区 TXREG2 为空 (写入 TXREG2 时清零) 0 = EUSART2 发送缓冲区已满 bit 3 TMR4IF:TMR4 与 PR4 匹配中断标志位 1 = TMR4 与 PR4 发生匹配(必须用软件清零) 0 = TMR4 与 PR4 未发生匹配 bit 2 CCP5IF:CCP5 中断标志位 捕捉模式: 1 = 发生了 TMR1/TMR3 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器捕捉 比较模式: 1 = 发生了 TMR1/TMR3 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器的比较匹配 PWM 模式: 在此模式下未使用。 bit 1 CCP4IF:CCP4 中断标志位 捕捉模式: 1 = 发生了 TMR1/TMR3 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器捕捉 比较模式: 1 = 发生了 TMR1/TMR3 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器的比较匹配 PWM 模式: 在此模式下未使用。 bit 0 CCP3IF:ECCP3 中断标志位 捕捉模式: 1 = 发生了 TMR1/TMR3 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器捕捉 比较模式: 1 = 发生了 TMR1/TMR3 寄存器的比较匹配 (必须用软件清零) 0 = 未发生 TMR1/TMR3 寄存器的比较匹配 PWM 模式: 在此模式下未使用。 注 x = 未知 1: 仅在 100 引脚器件上实现。 2: 仅在 80 引脚和 100 引脚器件上实现。 DS39762A_CN 第 126 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 9.3 PIE 寄存器 PIE 寄存器包含各外设中断的允许位。根据外设中断源 的数量,有三个外设中断允许寄存器 (PIE1、 PIE2 和 PIE3)。当 IPEN = 0 时,要允许任一外设中断,必须将 PEIE 位置 1。 寄存器 9-7: PIE1:外设中断允许寄存器 1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PSPIE(1) ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 PSPIE:并行从动端口读 / 写中断允许位 (1) 1 = 允许 0 = 禁止 bit 6 ADIE:A/D 转换器中断允许位 1 = 允许 0 = 禁止 bit 5 RC1IE:EUSART1 接收中断允许位 1 = 允许 0 = 禁止 bit 4 TX1IE:EUSART1 发送中断允许位 1 = 允许 0 = 禁止 bit 3 SSP1IE:主控同步串口 1 中断允许位 1 = 允许 0 = 禁止 bit 2 CCP1IE:ECCP1 中断允许位 1 = 允许 0 = 禁止 bit 1 TMR2IE:TMR2 与 PR2 匹配中断允许位 1 = 允许 0 = 禁止 bit 0 TMR1IE:TMR1 溢出中断允许位 1 = 允许 0 = 禁止 注 x = 未知 1: 仅在单片机模式下的 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 127 页 PIC18F97J60 系列 寄存器 9-8: PIE2:外设中断允许寄存器 2 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 OSCFIE:振荡器失效中断允许位 1 = 允许 0 = 禁止 bit 6 CMIE:比较器中断允许位 1 = 允许 0 = 禁止 bit 5 ETHIE:以太网模块中断允许位 1 = 允许 0 = 禁止 bit 4 保留:保持为 0 bit 3 BCL1IE:总线冲突中断允许位 (MSSP1 模块) 1 = 允许 0 = 禁止 bit 2 未用:读为 0 bit 1 TMR3IE:TMR3 溢出中断允许位 1 = 允许 0 = 禁止 bit 0 CCP2IE:ECCP2 中断允许位 1 = 允许 0 = 禁止 DS39762A_CN 第 128 页 超前信息 x = 未知 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 9-9: R/W-0 SSP2IE(1) PIE3:外设中断允许寄存器 3 R/W-0 BCL2IE (1) R-0 RC2IE R-0 (2) TX2IE (2) R/W-0 R/W-0 R/W-0 R/W-0 TMR4IE CCP5IE CCP4IE CCP3IE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 SSP2IE:主控同步串口 2 中断允许位 (1) 1 = 允许 0 = 禁止 bit 6 BCL2IE:总线冲突中断允许位 (MSSP2 模块) (1) 1 = 允许 0 = 禁止 bit 5 RC2IE:EUSART2 接收中断允许位 (2) 1 = 允许 0 = 禁止 bit 4 TX2IE:EUSART2 发送中断允许位 (2) 1 = 允许 0 = 禁止 bit 3 TMR4IE:TMR4 与 PR4 匹配中断允许位 1 = 允许 0 = 禁止 bit 2 CCP5IE:CCP5 中断允许位 1 = 允许 0 = 禁止 bit 1 CCP4IE:CCP4 中断允许位 1 = 允许 0 = 禁止 bit 0 CCP3IE:ECCP3 中断允许位 1 = 允许 0 = 禁止 注 x = 未知 1: 仅在 100 引脚器件上实现。 2: 仅在 80 引脚和 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 129 页 PIC18F97J60 系列 9.4 IPR 寄存器 IPR 寄存器包含各外设中断的优先级位。根据外设中断 源的数量,有三个外设中断优先级寄存器(IPR1、IPR2 和 IPR3) 。使用优先级位时,要求将中断优先级允许 (IPEN)位置 1。 寄存器 9-10: R/W-1 PSPIP (1) IPR1:外设中断优先级寄存器 1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 PSPIP:并行从动端口读 / 写中断优先级位 (1) 1 = 高优先级 0 = 低优先级 bit 6 ADIP:A/D 转换器中断优先级位 1 = 高优先级 0 = 低优先级 bit 5 RC1IP:EUSART1 接收中断优先级位 1 = 高优先级 0 = 低优先级 bit 4 TX1IP:EUSART1 发送中断优先级位 x = 未知 1 = 高优先级 0 = 低优先级 bit 3 SSP1IP:主控同步串口 1 中断优先级位 1 = 高优先级 0 = 低优先级 bit 2 CCP1IP:ECCP1 中断优先级位 1 = 高优先级 0 = 低优先级 bit 1 TMR2IP:TMR2 与 PR2 匹配中断优先级位 1 = 高优先级 0 = 低优先级 bit 0 TMR1IP:TMR1 溢出中断优先级位 1 = 高优先级 0 = 低优先级 注 1: 仅在单片机模式下的 100 引脚器件上实现。 DS39762A_CN 第 130 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 9-11: IPR2:外设中断优先级寄存器 2 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0 R/W-1 R/W-1 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 OSCFIP:振荡器失效中断优先级位 1 = 高优先级 0 = 低优先级 bit 6 CMIP:比较器中断优先级位 1 = 高优先级 0 = 低优先级 bit 5 ETHIP:以太网模块中断优先级位 1 = 高优先级 0 = 低优先级 bit 4 保留:保持为 1 bit 3 BCL1IP:总线冲突中断优先级位 (MSSP1 模块) 1 = 高优先级 0 = 低优先级 bit 2 未用:读为 0 bit 1 TMR3IP:TMR3 溢出中断优先级位 1 = 高优先级 0 = 低优先级 bit 0 CCP2IP:ECCP2 中断优先级位 1 = 高优先级 0 = 低优先级 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 131 页 PIC18F97J60 系列 寄存器 9-12: IPR3:外设中断优先级寄存器 3 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 SSP2IP(1) BCL2IP(1) RC2IP(2) TX2IP(2) TMR4IP CCP5IP CCP4IP CCP3IP bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 SSP2IP:主控同步串口 2 中断优先级位 (1) 1 = 高优先级 0 = 低优先级 bit 6 BCL2IP:总线冲突中断优先级位 (MSSP2 模块) (1) 1 = 高优先级 0 = 低优先级 bit 5 RC2IP:EUSART2 接收中断优先级位 (2) 1 = 高优先级 0 = 低优先级 bit 4 TX2IP:EUSART2 发送中断优先级位 (2) x = 未知 1 = 高优先级 0 = 低优先级 bit 3 TMR4IE:TMR4 与 PR4 匹配中断优先级位 1 = 高优先级 0 = 低优先级 bit 2 CCP5IP:CCP5 中断优先级位 1 = 高优先级 0 = 低优先级 bit 1 CCP4IP:CCP4 中断优先级位 1 = 高优先级 0 = 低优先级 bit 0 CCP3IP:ECCP3 中断优先级位 1 = 高优先级 0 = 低优先级 注 1: 仅在 100 引脚器件上实现。 2: 仅在 80 引脚和 100 引脚器件上实现。 DS39762A_CN 第 132 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 9.5 RCON 寄存器 RCON寄存器中包含的位可用来确定器件上次复位或从 空闲或休眠模式唤醒的原因。 RCON 还包含一个可允 许中断优先级的位 (IPEN)。 寄存器 9-13: RCON:复位控制寄存器 R/W-0 U-0 U-0 R/W-1 R-1 R-1 R/W-0 R/W-0 IPEN — — RI TO PD POR BOR bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 IPEN:中断优先级使能位 1 = 使能中断优先级 0 = 禁止中断优先级 (PIC16CXXX 兼容模式) bit 6-5 未用:读为 0 bit 4 RI:RESET 指令标志位 位操作的详细信息,请参见寄存器 4-1。 bit 3 TO:看门狗定时器超时标志位 位操作的详细信息,请参见寄存器 4-1。 bit 2 PD:掉电检测标志位 位操作的详细信息,请参见寄存器 4-1。 bit 1 POR:上电复位状态位 (2) 位操作的详细信息,请参见寄存器 4-1。 bit 0 BOR:欠压复位状态位 位操作的详细信息,请参见寄存器 4-1。 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 133 页 PIC18F97J60 系列 9.6 INTx 引脚中断 9.7 RB0/INT0/FLT0、 RB1/INT1、 RB2/INT2 和 RB3/INT3 引脚上的外部中断都是边沿触发的。如果 INTCON2 寄 存器中相应的 INTEDGx 位被置 1 (= 1),则为上升沿 触发;如果该位被清零,则为下降沿触发。当 RBx/INTx 引脚上出现一个有效边沿时,相应的标志位 INTxIF 被置 1。通过清零相应的允许位 INTxIE,可禁止该中断。在 重新允许该中断前,必须在中断服务程序中先用软件将 中断标志位 INTxIF 清零。 如果 INTxIE 位在进入功耗管理模式前被置 1,则所有的 外部中断(INT0、INT1、INT2 和 INT3)均能将处理器 从功耗管理模式唤醒。如果全局中断允许位GIE被置1, 则处理器将在被唤醒之后转移到中断向量处执行程序。 INT1、 INT2 和 INT3 的中断优先级由中断优先级位 INT1IP(INTCON3<6>)、INT2IP(INTCON3<7>)和 INT3IP (INTCON2<1>)中的值决定。没有与 INT0 相 关的优先级位。 INT0 始终是一个高优先级的中断源。 TMR0 中断 在 8 位模式 (默认模式)下, TMR0 寄存器的溢出 (FFh → 00h)会使 TMR0IF 标志位置 1。在 16 位模式 下,TMR0H:TMR0L寄存器对的溢出(FFFFh → 0000h) 会使 TMR0IF 标志位置 1。通过将允许位 TMR0IE (INTCON<5>)置 1 或清零,可以允许或禁止该中断。 Timer0 的中断优先级由中断优先级位 TMR0IP (INTCON2<2>)中的值决定。欲进一步了解 Timer0 模 块的详细信息,请参见第 11.0 节 “Timer0 模块”。 9.8 PORTB 电平变化中断 PORTB<7:4> 上的输入电平变化会将标志位 RBIF (INTCON<0>)置 1。通过将允许位 RBIE(INTCON<3>) 置 1 或清零,可以允许或禁止该中断。 PORTB 电平变 化中断的优先级由中断优先级位RBIP(INTCON2<0>) 中的值决定。 9.9 中断的现场保护 在中断期间, PC 的返回地址被保存在堆栈中。另外, WREG、 STATUS 和 BSR 寄存器的值被压入快速返回 堆栈。如果未使用从中断快速返回功能 (见第 5.3 节 “数据存储器构成”),那么用户可能需要在进入中断服 务程序前,保存 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 DS39762A_CN 第 134 页 ; W_TEMP is in virtual bank ; STATUS_TEMP located anywhere ; BSR_TMEP located anywhere ; Restore BSR ; Restore WREG ; Restore STATUS 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 10.0 I/O 端口 10.1 根据选定的器件和使能的功能,最多有 9 个端口可供使 用。 I/O 端口的一些引脚与器件上外设功能复用。一般 来说,当外设被使能时,其对应的引脚就不能被用作通 用 I/O 引脚。 每个端口都有三个工作寄存器。这些寄存器是: • TRIS 寄存器 (数据方向寄存器) • PORT 寄存器 (读取器件引脚的电平) • LAT 寄存器 (输出锁存器) 在对 I/O 引脚驱动值进行读-修改-写时会用到数据锁 存器 (LAT 寄存器)。 图 10-1 给出了通用 I/O 端口的简化模型,没有给出到其 他外设的接口。 图 10-1: 通用 I/O 端口的工作原理 引脚输出驱动电平 各引脚组的输出引脚驱动能力是不同的,这样可以满足 不同应用的需求。 PORTB 和 PORTC 是为驱动较高的 负载 (例 如 LED)而设计的。外部存储器接口端口 (PORTD、PORTE 和 PORTJ)是为驱动中等的负载而 设计的。除此之外,所有的其他端口都是为驱动较小的 负载而设计的,通常只用于驱动指示器。表 10-1 汇总了 输出功能。更多详细信息,请参见第 27.0 节 “电气特 性”。 表 10-1: 端口 PORTA 输出驱动电平 驱动 说明 低 用于驱动指示器。 中 足够高的驱动电平,用于外 部存储器接口以及指示器。 高 适合直接输出 LED 驱动电 平。 PORTG(2) Q I/O 引脚 (1) D PORTH(3) PORTD(2) CK 数据锁存器 写 TRIS 10.1.1 PORTF(2) D 写 LAT 或 PORT 在开发应用程序时,必须考虑到端口引脚的功能。某些 引脚上的输出驱动能力比其他引脚要高。同样,某些引 脚可以承受高于 VDD 的输入电平。 (1) 读 LAT 数据 总线 I/O 端口引脚功能 PORTE PORTJ(3) Q PORTB CK PORTC TRIS 锁存器 输入 缓冲区 注 读 TRIS Q D 1: RA0:RA1 是例外,它们可以直接驱动 LED。 2: 在 64 引脚和 80 引脚器件上部分实现;在 100 引脚器件上完全实现。 3: 在 64 引脚器件上未实现。 ENEN 读 PORT 注 1: I/O 引脚与 VDD 和 VSS 之间接有保护二极管。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 135 页 PIC18F97J60 系列 10.1.2 输入引脚和电压注意事项 用作器件输入的引脚的电压容差取决于引脚的输入功 能。仅用作数字输入的引脚能够承受高达 5.5V 的直流电 压,这个电压值是数字逻辑电路的典型电压值。相反,具 有模拟输入功能的引脚只能承受最高为VDD 的电压值。应 避免在这些引脚上施加超过 VDD 的电压。表 10-2 汇总了 所有引脚的输入能力。更多详细信息,请参见第 27.0 节 “电气特性”。 表 10-2: 端口或引脚 PORTA<5:0> TRISA 寄存器控制着 PORTA 引脚的方向,即使它们被 用作模拟输入。当引脚用于模拟输入时,用户必须确保 TRISA 寄存器中相应的位保持置 1。 说明 VDD 只能承受 VDD 以下的 输入电压。 RA0 和 RA1 引脚也可以配置为 2 个以太网 LED 指示器 的输出。这样配置时,这两个引脚是 PORTA 上仅有的 能够产生高输出驱动电平的引脚。 5.5V 可承受高于 VDD 的输 入电压,可用于大部分 标准逻辑电路。 尽管该端口只有 6 位宽,实际上还有一个位 PORTA<7> 是实现为 PORTJ 的弱上拉控制位 RJPU 的。以类似的 方式,LATA<7:6> 不是实现为锁存位,而是作为 PORTD 和 PORTE 的上拉控制位 RDPU 和 REPU。将这些位置 1 将使能相应端口的上拉电路。由于其端口引脚不使 用, TRISA<7:6> 位未实现。 PORTF<6:1>(1) PORTH<7:4>(2) PORTB<7:0> PORTC<7:0> PORTD<7:0>(1) PORTE<7:0> PORTF<7> PORTG<7:0>(1) 例 10-1: PORTH<3:0>(2) CLRF PORTJ<7:0>(2) 注 10.2 RA5 和 RA3:RA0 在任何复位时被配置为模 拟输入引脚并读为 0。 RA4 被配置为数字 输入引脚。 注: RA4/T0CKI 引脚是施密特触发器输入引脚。所有其他 PORTA引脚都是TTL电平输入和全CMOS驱动输出的。 输入电平 可承受的 最高输入 电平 RA4 引脚与 Timer0 模块的时钟输入引脚复用,成为 RA4/T0CKI 引脚。其他 PORTA 引脚与模拟 VREF+ 和 VREF- 输入引脚复用。通过将 ADCON1 寄存器中的 PCFG3:PCFG0 控制位清零或置 1,可将 RA5:RA0 引 脚选作 A/D 转换器输入引脚。 1: 在 64 引脚和 80 引脚器件上部分实现;在 100 引脚器件上完全实现。 2: 在 64 引脚器件上不可用。 PORTA、 TRISA 和 LATA 寄存器 PORTA 是一个 6 位宽的双向端口;它在所有器件上都 是完全实现的。对应的数据方向寄存器是 TRISA。将 TRISA 某位置 1 (= 1)时,会将 PORTA 的相应引脚 设为输入 (即,使相应的输出驱动器呈高阻状态)。将 TRISA 某位清零 (= 0)时,会将 PORTA 的相应引脚 设为输出(即,将输出锁存器中的内容置于选中引脚)。 CLRF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF PORTA 初始化 PORTA ; Initialize PORTA by clearing output data latches Alternate method to clear output data latches Configure A/D for digital inputs Configure comparators for digital input Value used to initialize data direction Set RA<3:0> as inputs ; RA<5:4> as outputs ; ; LATA ; ; ; 07h ; ADCON1 ; 07h ; CMCON ; 0CFh ; ; ; TRISA ; 读 PORTA 寄存器将读出相应引脚的状态,而对其进行 写操作则是将数据写入端口锁存器。 数据锁存器 (LATA)也是存储器映射的。对 LATA 寄存 器执行读-修改-写操作将读写PORTA的输出锁存值。 DS39762A_CN 第 136 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-3: PORTA 功能 引脚名称 功能 RA0/LEDA/AN0 RA0 RA1/LEDB/AN1 RA2/AN2/VREF- TRIS 设置 I/O I/O 类型 0 O DIG LATA<0> 数据输出;不受模拟输入影响。 1 I TTL PORTA<0> 数据输入;当使能模拟输入时被禁止。 LEDA 0 O DIG 以太网 LEDA 输出;优先于数字数据。 AN0 1 I ANA A/D 输入通道 0。 POR 时的默认输入配置;不影响数字输出。 RA1 0 O DIG LATA<1> 数据输出;不受模拟输入影响。 1 I TTL PORTA<1> 数据输入;当使能模拟输入时被禁止。 LEDB 0 O DIG 以太网 LEDB 输出;优先于数字数据。 AN1 1 I ANA A/D 输入通道 1。 POR 时的默认输入配置;不影响数字输出。 RA2 0 O DIG LATA<2> 数据输出;不受模拟输入影响。当使能 CVREF 输出时被禁 止。 1 I TTL PORTA<2> 数据输入。当使能模拟功能时被禁止;当使能 CVREF 输出 时被禁止。 1 I ANA A/D 输入通道 2 和比较器 C2+ 输入。POR 时的默认输入配置;不受模 拟输出影响。 AN2 RA3/AN3/VREF+ RA4/T0CKI RA5/AN4 VREF- 1 I ANA A/D 和比较器低参考电压输入。 RA3 0 O DIG LATA<3> 数据输出;不受模拟输入影响。 1 I TTL PORTA<3> 数据输入;当使能模拟输入时被禁止。 AN3 1 I ANA A/D 输入通道 3。 POR 时的默认输入配置。 VREF+ 1 I ANA A/D 高参考电压输入。 RA4 0 O DIG LATA<4> 数据输出。 1 I ST PORTA<4> 数据输入; POR 时的默认配置。 T0CKI x I ST Timer0 的时钟输入。 RA5 0 O DIG LATA<5> 数据输出;不受模拟输入影响。 1 I TTL PORTA<5> 数据输入;当使能模拟输入时被禁止。 1 I ANA A/D 输入通道 4。 POR 时的默认配置。 AN4 图注: 表 10-4: 说明 O = 输出,I = 输入,ANA = 模拟信号,DIG = 数字输出,ST = 施密特缓冲区输入,TTL = TTL 缓冲区输入,x = 无关位 (TRIS 位不影响端口方向或在此可忽略)。 与 PORTA 相关的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RJPU(1) — RA5 RA4 RA3 RA2 RA1 RA0 62 LATA RDPU REPU LATA5 LATA4 LATA3 LATA2 LATA1 LATA0 62 TRISA — — TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 61 ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 60 名称 PORTA 图注: — = 未用,读为 0。 PORTA 不使用阴影单元。 注 1: 仅在 80 引脚和 100 引脚器件中实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 137 页 PIC18F97J60 系列 10.3 PORTB、 TRISB 和 LATB 寄存器 PORTB 是一个 8 位宽的双向端口;它在所有器件上都 是完全实现的。对应的数据方向寄存器是 TRISB。将 TRISB 某位置 1 (= 1)时,会将 PORTB 的相应引脚 设为输入 (即,使相应的输出驱动器呈高阻状态)。将 TRISB 某位清零 (= 0)时,会将 PORTB 的相应引脚 设为输出(即,将输出锁存器中的内容置于选中引脚)。 PORTB 上的所有引脚都是仅数字引脚,并且可以承受 高达 5.5V 的电压。 数据锁存器 (LATB)也是存储器映射的。对 LATB 寄 存器执行读-修改-写操作将读写 PORTB 的输出锁存 值。 例 10-2: 初始化 PORTB PORTB ; Initialize PORTB by CLRF LATB ; ; ; ; ; MOVLW 0CFh ; CLRF ; ; MOVWF TRISB ; ; ; PORTB 的四个引脚 (RB7:RB4)具有电平变化中断功 能。仅当将这些引脚配置为输入时,才可使用此中断功 能(即当 RB7:RB4 中的任何一个引脚被配置为输出时, 该引脚将不再具有电平变化中断功能) 。将输入引脚 (RB7:RB4)上的电平与 PORTB 上次读入锁存器的旧 值进行比较。对 RB7:RB4 上的 “不匹配”输出进行或 运算,产生 RB 端口电平变化中断,并将标志位 RBIF (INTCON<0>)置 1。 该中断可唤醒处于功耗管理模式下的器件。用户可用以 下方式在中断服务程序中清除该中断: a) 读或写 PORTB(MOVFF (ANY), PORTB 指令除 外)。这将结束不匹配条件。 b) 将标志位 RBIF 清零。 不匹配条件将继续把标志位 RBIF 置 1。读 PORTB 将 结束不匹配条件并允许将标志位 RBIF 清零。 clearing output data latches Alternate method to clear output data latches Value used to initialize data direction Set RB<3:0> as inputs RB<5:4> as outputs RB<7:6> as inputs 建议使用电平变化中断功能实现按键唤醒操作,以及那 些仅用到 PORTB 的电平变化中断功能的操作。在使用 电平变化中断功能时,建议不要查询 PORTB 的状态。 对工作于扩展单片机模式下的 100 引脚器件,可通过将 CCP2MX 配置位清零,将 RB3 配置为 ECCP2 模块和 增强型 PWM 输出 P2A 的备用外设引脚。如果器件处于 单片机模式下, ECCP2 的替代引脚为 RE7。至于其他 ECCP2 配置,用户必须确保为要进行的操作将 TRISB<3> 位进行相应的设置。 每个 PORTB 引脚都具有内部弱上拉电路。一个控制位 即可 接 通 所 有 上 拉 电 路。这 是 通 过 清 零 RBPU 位 (INTCON2<7>)实现 的。当端口 引脚被 配置为 输出 时,其弱上拉电路会自动切断。上电复位会禁止弱上拉 电路。 DS39762A_CN 第 138 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-5: PORTB 功能 引脚名称 功能 TRIS 设置 I/O I/O 类型 RB0/INT0/FL T0 RB0 0 O DIG LATB<0> 数据输出。 1 I TTL PORTB<0> 数据输入;当 RBPU 位清零时启用弱上拉电路。 INT0 1 I ST 外部中断 0 输入。 FLT0 1 I ST 增强型 PWM 故障输入 (ECCP1 模块);通过软件使能。 RB1 0 O DIG LATB<1> 数据输出。 1 I TTL PORTB<1> 数据输入;当 RBPU 位清零时启用弱上拉电路。 INT1 1 I ST 外部中断 1 输入。 RB2 0 O DIG LATB<2> 数据输出。 1 I TTL PORTB<2> 数据输入;当 RBPU 位清零时启用弱上拉电路。 INT2 1 I ST 外部中断 2 输入。 RB3 0 O DIG LATB<3> 数据输出。 1 I TTL PORTB<3> 数据输入;当 RBPU 位清零时启用弱上拉电路。 INT3 1 I ST 外部中断 3 输入。 CCP2 比较输出和 CCP2 PWM 输出;优先于端口数据。 RB1/INT1 RB2/INT2 RB3/INT3/ ECCP2/P2A ECCP2 ( 0 O DIG 1 I ST CCP2 捕捉输入。 P2A (1) 0 O DIG ECCP2 增强型 PWM 输出,通道 A。可以在增强型 PWM 关闭期间 被配置为三态。优先于端口数据。 RB4 0 O DIG LATB<4> 数据输出。 1 I TTL PORTB<4> 数据输入;当 RBPU 位清零时启用弱上拉电路。 KBI0 1 I TTL 引脚电平变化中断。 RB5 0 O DIG LATB<5> 数据输出。 1 I TTL PORTB<5> 数据输入;当 RBPU 位清零时启用弱上拉电路。 KBI1 1 I TTL 引脚电平变化中断。 RB6 0 O DIG LATB<6> 数据输出。 1 I TTL PORTB<6> 数据输入;当 RBPU 位清零时启用弱上拉电路。 KBI2 1 I TTL PGC x I ST 引脚电平变化中断。 供 ICSP 和 ICD 工作使用的串行执行 (ICSP™ )时钟输入。(2) 1) RB4/KBI0 RB5/KBI1 RB6/KBI2/PG C RB7/KBI3/PG D 说明 RB7 0 O DIG LATB<7> 数据输出。 1 I TTL PORTB<7> 数据输入;当 RBPU 位清零时启用弱上拉电路。 KBI3 1 I TTL 引脚电平变化中断。 PGD x O DIG 供 ICSP 和 ICD 工作使用的串行执行数据输出。 (2) x I ST 供 ICSP 和 ICD 工作使用的串行执行数据输入。 (2) O = 输出, I = 输入, DIG = 数字输出, ST = 施密特缓冲区输入, TTL = TTL 缓冲区输入, x = 无关位 (TRIS 位不影响端口方向或在此可忽略)。 1: 当 CCP2MX 配置位被清零时, ECCP2/P2A 的备用配置 (扩展单片机模式下的 100 引脚器件)。默认分配是 RC1。 2: 当使能 ICSP 或 ICD 时,禁止所有其他引脚功能。 图注: 注 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 139 页 PIC18F97J60 系列 表 10-6: 名称 PORTB 与 PORTB 相关的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 62 LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 62 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 61 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP 59 INT2IF INT1IF 59 INTCON GIE/GIEH PEIE/GIEL INTCON2 RBPU INTCON3 INT2IP 图注: INT1IP INT3IE INT2IE INT1IE INT3IF PORTB 不使用阴影单元。 DS39762A_CN 第 140 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 10.4 PORTC、 TRISC 和 LATC 寄存器 注: PORTC 是一个 8 位宽的双向端口;它在所有器件上都 是完全实现的。对应的数据方向寄存器是 TRISC。将 TRISC 某位置 1 (= 1)时,会将 PORTC 的相应引脚 设为输入 (即,使相应的输出驱动器呈高阻状态)。将 TRISC 某位清零 (= 0)时,会将 PORTC 的相应引脚 设为输出(即,将输出锁存器中的内容置于选中引脚)。 PORTC 引脚 RC2 到 RC7 只能作为数字引脚并且可以 承受高达 5.5V 的输入电压。 这些引脚在任何器件复位时都被配置为数 字输入引脚。 外设对引脚的改写会影响 TRISC 寄存器的内容。尽管如 此,读 TRISC 总是会返回其当前的内容。 例 10-3: CLRF ; Initialize PORTC by ; ; ; ; ; 数据锁存器 (LATC)也是存储器映射的。对 LATC 寄 存器执行读-修改-写操作将读写 PORTC 的输出锁存 值。 CLRF LATC PORTC 与几种外设功能复用 (表 10-7)。这些引脚配 有施密特触发输入缓冲区。通常由配置位 CCP2MX 将 RC1配置为ECCP2模块的默认外设引脚和增强型PWM 输出 P2A 引脚 (默认状态, CCP2MX = 1)。 MOVLW 0CFh MOVWF TRISC 当使能外设功能时,应小心定义每个 PORTC 引脚的 TRIS 位。有些外设会无视 TRIS 位的设置,将引脚定义 为输出引脚或输入引脚。用户应该查阅相应的外设章节 来正确设置TRIS 位。 2006 Microchip Technology Inc. 超前信息 初始化 PORTC PORTC 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 DS39762A_CN 第 141 页 PIC18F97J60 系列 表 10-7: 引脚名称 RC0/T1OSO/ T13CKI RC1/T1OSI/ ECCP2/P2A RC2/ECCP1/ P1A PORTC 功能 功能 TRIS 设置 I/O I/O 类型 RC0 0 O DIG LATC<0> 数据输出。 1 I ST PORTC<0> 数据输入。 T1OSO x O ANA T13CKI 1 I ST Timer1/Timer3 计数器输入。 RC1 0 O DIG LATC<1> 数据输出。 1 I ST PORTC<1> 数据输入。 T1OSI x I ANA ECCP2(1) 0 O DIG CCP2 比较输出和 CCP2 PWM 输出;优先于端口数据。 1 I ST CCP2 捕捉输入。 P2A(1) 0 O DIG ECCP2 增强型 PWM 输出,通道 A。可以在增强型 PWM 关闭期间被配置为 三态。优先于端口数据。 RC2 0 O DIG LATC<2> 数据输出。 1 I ST PORTC<2> 数据输入。 0 O DIG CCP1 比较输出和 CCP1 PWM 输出;优先于端口数据。 1 I ST CCP1 捕捉输入。 P1A 0 O DIG ECCP1 增强型 PWM 输出,通道 A。可以在增强型 PWM 关闭期间被配置为 三态。优先于端口数据。 RC3 0 O DIG LATC<3> 数据输出。 1 I ST PORTC<3> 数据输入。 0 O DIG SPI 时钟输出 (MSSP1 模块);优先于端口数据。 1 I ST SPI 时钟输入 (MSSP1 模块)。 0 O DIG I2C™ 时钟输出 (MSSP1 模块);优先于端口数据。 1 I ST I2C 时钟输入 (MSSP1 模块);输入类型取决于模块设置。 0 O DIG LATC<4> 数据输出。 1 I ST PORTC<4> 数据输入。 SDI1 1 I ST SPI 数据输入 (MSSP1 模块)。 SDA1 1 O DIG I2C 数据输出 (MSSP1 模块);优先于端口数据。 1 I ST I2C 数据输入 (MSSP1 模块);输入类型取决于模块设置。 0 O DIG LATC<5> 数据输出。 1 I ST PORTC<5> 数据输入。 SDO1 0 O DIG SPI 数据输出 (MSSP1 模块);优先于端口数据。 RC6 0 O DIG LATC<6> 数据输出。 1 I ST PORTC<6> 数据输入。 TX1 1 O DIG 同步串行数据输出 (EUSART1 模块);优先于端口数据。 CK1 1 O DIG 同步串行数据输入 (EUSART1 模块)。用户必须将其配置为输入。 1 I ST 同步串行时钟输入 (EUSART1 模块)。 RC7 0 O DIG LATC<7> 数据输出。 1 I ST PORTC<7> 数据输入。 RX1 1 I ST 异步串行接收数据输入 (EUSART1 模块)。 DT1 1 O DIG 同步串行数据输出 (EUSART1 模块);优先于端口数据。 1 I ST 同步串行数据输入 (EUSART1 模块)。用户必须将其配置为输入。 ECCP1 RC3/SCK1/ SCL1 SCK1 SCL1 RC4/SDI1/ SDA1 RC5/SDO1 RC6/TX1/CK1 RC7/RX1/DT1 图注: 注 RC4 RC5 说明 Timer1 振荡器输出;当使能 Timer1 振荡器时被使能。禁止数字 I/O。 Timer1 振荡器输入;当使能 Timer1 振荡器时被使能。禁止数字 I/O。 O = 输出,I = 输入,ANA = 模拟信号,DIG = 数字输出,ST = 施密特缓冲区输入, x = 无关位(TRIS 位不影响端口方 向或在此可忽略)。 1: 当配置位 CCP2MX 置 1 时,对 ECCP2/P2A 进行默认分配。 DS39762A_CN 第 142 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-8: 名称 PORTC 与 PORTC 相关的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 62 LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 62 TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 61 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 143 页 PIC18F97J60 系列 10.5 PORTD、 TRISD 和 LATD 寄存器 PORTD 以两种方式实现为双向端口: • 64 引脚和 80 引脚器件:3 位宽 (RD<2:0>) • 100 引脚器件:8 位宽 (RD<7:0>) 对应的数据方向寄存器是 TRISD。将 TRISD 某位置 1 (= 1)时,会将 PORTD 的相应引脚设为输入(即,使 相应的输出驱动器呈高阻状态)。将 TRISD 某位清零 (= 0)时,会将 PORTD 的相应引脚设为输出(即,将 输出锁存器中的内容置于选中引脚)。PORTD上的所有 引脚都是仅数字引脚,并且可以承受高达 5.5V 的电压。 数据锁存器 (LATD)也是存储器映射的。对 LATD 寄 存器执行读-修改-写操作将读写 PORTD 的输出锁存 值。 PORTD 上的所有引脚都配有施密特触发输入缓冲区。 每个引脚都可被单独配置为输入或输出。 注: 这些引脚在任何器件复位时都被配置为数 字输入引脚。 在 100 引脚器件上, PORTD 与系统总线复用作为外部 存储器接口的一部分。 I/O 端口和其他功能只有在通过 将 EBDIS 位 (MEMCON<7>)置 1 而禁止接口功能时 才可用。当使能接口时, PORTD 是复用的地址 / 数据 总线的低字节 (AD7:AD0)。 TRISD 位也被改写。 DS39762A_CN 第 144 页 PORTD 的每个引脚都具有内部弱上拉电路。提供上拉 电路是为了保证上电时外部存储器接口输入为一个已知 状态。单个控制位可以关闭所有上拉电路。可以通过清 零 RDPU 位 (LATA<7>)来实现。当端口引脚被配置 为输出时,其弱上拉电路会自动切断。在所有器件复位 时上拉电路被使能。 在 100 引脚器件上,还可通过将控制位 PSPMODE (PSPCON<4>)置 1,将 PORTD 配置为 8 位宽的并行 单片机端口。在此模式下,并行端口数据优先于其他数 字 I/O(但外部存储器接口除外)数据。当激活并行端口 时,输入缓冲区为 TTL。更多信息,请参见第 10.11 节 “并行从动端口”。 例 10-4: CLRF 初始化 PORTD PORTD ; CLRF LATD ; ; ; ; ; MOVLW 0CFh ; TRISD ; ; ; MOVWF 超前信息 ; ; 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 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-9: PORTD 功能 引脚名称 功能 TRIS 设置 I/O I/O 类型 RD0/AD0/PSP0 (RD0/P1B) RD0 0 O DIG 1 I ST PORTD<0> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 0 输出。 (2) x I TTL 外部存储器接口,数据 bit 0 输入。 (2) x O DIG PSP 读输出数据 (LATD<0>);优先于端口数据。 x I TTL PSP 写数据输入。 P1B(3) 0 O DIG ECCP1 增强型 PWM 输出,通道 B ;优先于端口数据和 PSP 数据。 可以在增强型 PWM 关闭期间被配置为三态。 RD1 0 O DIG LATD<1> 数据输出。 1 I ST PORTD<1> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 1 输出。 (2) x I TTL 外部存储器接口,数据 bit 1 输入。 (2) x O DIG PSP 读输出数据 (LATD<1>);优先于端口数据。 x I TTL PSP 写数据输入。 0 O DIG ECCP3 比较和 PWM 输出;优先于端口数据。 AD0(1) PSP0(1) RD1/AD1/PSP1 (RD1/ECCP3/ P3A) AD1(1) PSP1 (1) ECCP3(3) RD2/AD2/PSP2 (RD2/CCP4/ P3D) 1 I ST ECCP3 捕捉输入。 0 O DIG ECCP3 增强型 PWM 输出,通道 A ;优先于端口数据和 PSP 数据。 可以在增强型 PWM 关闭期间被配置为三态。 RD2 0 O DIG LATD<2> 数据输出。 1 I ST PORTD<2> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 2 输出。 (2) x I TTL 外部存储器接口,数据 bit 2 输入。 (2) x O DIG PSP 读输出数据 (LATD<2>);优先于端口数据。 x I TTL PSP 写数据输入。 0 O DIG CCP4 比较输出和 CCP4 PWM 输出;优先于端口数据。 AD2(1) CCP4(3) 1 I ST CCP4 捕捉输入。 P3D(3) 0 O DIG ECCP3 增强型 PWM 输出,通道 D ;优先于端口和 PSP 数据。可以 在增强型 PWM 关闭期间被配置为三态。 RD3(1) 0 O DIG LATD<3> 数据输出。 1 I ST PORTD<3> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 3 输出。 (2) x I TTL 外部存储器接口,数据 bit 3 输入。 (2) x O DIG PSP 读输出数据 (LATD<3>);优先于端口数据。 x I TTL PSP 写数据输入。 AD3(1) PSP3 图注: 注 LATD<0> 数据输出。 P3A(3) PSP2(1) RD3/AD3/ PSP3(1) 说明 (1) O = 输出,I = 输入,DIG = 数字输出,ST = 施密特缓冲区输入,TTL = TTL 缓冲区输入, x = 无关位(TRIS 位不影响 端口方向或在此可忽略)。 1: 这些功能或端口引脚仅在 100 引脚器件上实现。 2: 外部存储器接口 I/O 优先于所有其他数字和 PSP I/O。 3: 这些功能仅在 64 引脚器件的该引脚上实现;对于所有其他器件,它们与 RE6/RH7 (P1B)、 RG0 (ECCP3/P3A)或 RG3 (CCP4/P3D)复用。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 145 页 PIC18F97J60 系列 表 10-9: PORTD 功能 (续) 引脚名称 功能 TRIS 设置 I/O I/O 类型 RD4/AD4/ PSP4/SDO2(1) RD4(1) 0 O DIG LATD<4> 数据输出。 1 I ST PORTD<4> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 4 输出。 (2) x I TTL 外部存储器接口,数据 bit 4 输入。 (2) AD4(1) PSP4 RD5/AD5/ PSP5/SDI2/ SDA2(1) (1) x O DIG PSP 读输出数据 (LATD<4>);优先于端口数据。 x I TTL PSP 写数据输入。 SDO2(1) 0 O DIG SPI 数据输出 (MSSP2 模块);优先于端口数据。 RD5(1) 0 O DIG LATD<5> 数据输出。 1 I ST PORTD<5> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 5 输出。 (2) x I TTL 外部存储器接口,数据 bit 5 输入。 (2) x O DIG PSP 读输出数据 (LATD<5>);优先于端口数据。 x I TTL PSP 写数据输入。 SDI2(1) 1 I ST SPI 数据输入 (MSSP2 模块)。 SDA2(1) 1 O DIG I2C™ 数据输出 (MSSP2 模块);优先于端口数据。 1 I ST I2C 数据输入 (MSSP2 模块);输入类型取决于模块设置。 0 O DIG LATD<6> 数据输出。 1 I ST PORTD<6> 数据输入。 x O DIG-3 x I TTL 外部存储器接口,数据 bit 6 输入。 (1) AD5(1) PSP5(1) RD6/AD6/ PSP6/SCK2/ SCL2(1) (1) RD6 AD6(1) PSP6 (1) SCK2(1) SCL2(1) RD7/AD7/ PSP7/SS2(1) (1) RD7 AD7(1) PSP7 (1) SS2(1) 图注: 注 说明 外部存储器接口,地址 / 数据 bit 6 输出。 (1) x O DIG PSP 读输出数据 (LATD<6>);优先于端口数据。 x I TTL PSP 写数据输入。 0 O DIG SPI 时钟输出 (MSSP2 模块);优先于端口数据。 1 I ST SPI 时钟输入 (MSSP2 模块)。 0 O DIG I2C 时钟输出 (MSSP2 模块);优先于端口数据。 1 I ST I2C 时钟输入 (MSSP2 模块);输入类型取决于模块设置。 0 O DIG LATD<7> 数据输出。 1 I ST PORTD<7> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 7 输出。 (1) x I TTL 外部存储器接口,数据 bit 7 输入。 (1) x O DIG PSP 读输出数据 (LATD<7>);优先于端口数据。 x I TTL PSP 写数据输入。 x I TTL MSSP 的从动选择输入 (MSSP2 模块)。 O = 输出,I = 输入,DIG = 数字输出,ST = 施密特缓冲区输入,TTL = TTL 缓冲区输入, x = 无关位(TRIS 位不影响 端口方向或在此可忽略)。 1: 这些功能或端口引脚仅在 100 引脚器件上实现。 2: 外部存储器接口 I/O 优先于所有其他数字和 PSP I/O。 3: 这些功能仅在 64 引脚器件的该引脚上实现;对于所有其他器件,它们与 RE6/RH7 (P1B)、 RG0 (ECCP3/P3A)或 RG3 (CCP4/P3D)复用。 DS39762A_CN 第 146 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-10: 与 PORTD 相关的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RD7(1) RD6(1) RD5(1) RD4(1) RD3(1) RD2 RD1 RD0 62 LATD LATD7(1) LATD6(1) LATD5(1) LATD4(1) LATD3(1) LATD2 LATD1 LATD0 62 TRISD TRISD7(1) TRISD6(1) TRISD5(1) TRISD4(1) TRISD3(1) TRISD2 TRISD1 TRISD0 61 LATA2 LATA1 LATA0 62 名称 PORTD LATA RDPU REPU LATA5 LATA4 LATA3 图注: PORTD 不使用阴影单元。 注 1: 在 64 引脚和 80 引脚器件上未实现,读为 0。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 147 页 PIC18F97J60 系列 10.6 PORTE、 TRISE 和 LATE 寄存器 PORTE 以两种不同方式实现为双向端口: • 64 引脚器件:6 位宽 (RE<5:0>) • 80 引脚和 100 引脚器件:8 位宽 (RE<7:0>) 对应的数据方向寄存器是 TRISE。将 TRISE 某位置 1 (= 1)时,会将 PORTE 的相应引脚设为输入(即,使 相应的输出驱动器呈高阻状态)。将 TRISE 某位清零 (= 0)时,会将 PORTE 的相应引脚设为输出(即,将 输出锁存器中的内容置于选中引脚)。PORTE上的所有 引脚都是仅数字引脚,并且可以承受高达 5.5V 的电压。 数据锁存器 (LATE)也是存储器映射的。对 LATE 寄 存器执行读-修改-写操作将读写 PORTE 的输出锁存 值。 PORTE 上的所有引脚都配有施密特触发输入缓冲区。 每个引脚都可被单独配置为输入或输出。 注: 这些引脚在任何器件复位时都被配置为数 字输入引脚。 在 100 引脚器件上, PORTE 与系统总线复用作为外部 存储器接口的一部分。 I/O 端口和其他功能只有在通过 将 EBDIS 位 (MEMCON<7>)置 1 而禁止接口功能时 才可用。当使能接口时,PORTE 是复用的地址 / 数据总 线的高字节 (AD15:AD8)。 TRISE 位也被改写。 PORTE 的每个引脚都具有内部弱上拉电路。提供上拉 电路是为了保证上电时外部存储器接口输入为一个已知 状态。单个控制位可以关闭所有上拉电路。可以通过清 零 REPU 位 (LATA<6>)来实现。当端口引脚被配置 为输出时,其弱上拉电路会自动切断。发生任何器件复 位时,上拉功能会被禁止。 DS39762A_CN 第 148 页 PORTE 也可与以下这些功能复用:ECCP1 和 ECCP3 的增强型 PWM 输出 B 和 C,以及 ECCP2 的输出 B、 C 和 D。对于 80 引脚和 100 引脚器件,它们的默认分 配是在 PORTE<6:0> 上。对于 64 引脚器件,它们的默 认分配是在 PORTE<5:0> 和 PORTD<0> 上。在 80 引 脚和 100 引脚器件上, ECCP1 和 ECCP3 的输出复用 受 ECCPMX 配置位的控制。清零该位将把 P1B/P1C 和 P3B/P3C 输出重新分配到 PORTH。 对于运行于单片机模式的 80 引脚和 100 引脚器件,引 脚 RE7 可配置为 ECCP2 模块和增强型 PWM 输出 P2A 的备用外设引脚。这是通过将 CCP2MX 配置位清零实 现的。 当 PORTD 上的并行从动端口为激活状态时, 3 个 PORTE 引脚(RE0、RE1 和 RE2)将被配置为该端口 的数字控制输入。表 10-11 中汇总了此控制功能。当 PSPMODE 控制位(PSPCON<4>)被置 1 时,会自动 重新配置。用户还必须保证将相应的 TRISE 位置 1 以 便将这些引脚配置为数字输入。 例 10-5: CLRF 初始化 PORTE PORTE ; Initialize PORTE by CLRF LATE ; ; ; ; ; MOVLW 03h ; ; ; MOVWF 超前信息 TRISE ; ; clearing output data latches Alternate method to clear output data latches Value used to initialize data direction Set RE<1:0> as inputs RE<7:2> as outputs 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-11: 引脚名称 RE0/AD8/RD/ P2D PORTE 功能 功能 TRIS 设置 I/O I/O 类型 RE0 0 O DIG LATE<0> 数据输出。 1 I ST PORTE<0> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 8 输出。 (2) x I TTL 外部存储器接口,数据 bit 8 输入。 (2) AD8(1) RE1/AD9/WR/ P2C RD(6) 1 I TTL 并行从动端口读使能控制输入。 P2D 0 O DIG ECCP2 增强型 PWM 输出,通道 D ;优先于端口和 PSP 数据。可以 在增强型 PWM 关闭期间被配置为三态。 RE1 0 O DIG LATE<1> 数据输出。 1 I ST PORTE<1> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 9 输出。 (2) x I TTL 外部存储器接口,数据 bit 9 输入。 (2) WR(6) 1 I TTL 并行从动端口写使能控制输入。 P2C 0 O DIG ECCP2 增强型 PWM 输出,通道 C ;优先于端口和 PSP 数据。可以 在增强型 PWM 关闭期间被配置为三态。 LATE<2> 数据输出。 AD9(1) RE2/AD10/CS/ P2B RE2 AD10(1) RE3/AD11/ P3C ST PORTE<2> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 10 输出。 (2) x I TTL 外部存储器接口,数据 bit 10 输入。 (2) 1 I TTL 并行从动端口片选控制输入。 O DIG ECCP2 增强型 PWM 输出,通道 B ;优先于端口数据和 PSP 数据。 可以在增强型 PWM 关闭期间被配置为三态。 RE3 0 O DIG LATE<3> 数据输出。 1 I ST PORTE<3> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 11 输出。 (2) x I TTL 外部存储器接口,数据 bit 11 输入。 (2) 0 O DIG ECCP3 增强型 PWM 输出,通道 C ;优先于端口和 PSP 数据。可以 在增强型 PWM 关闭期间被配置为三态。 0 O DIG LATE<4> 数据输出。 1 I ST PORTE<4> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 12 输出。 (2) x I TTL 外部存储器接口,数据 bit 12 输入。 (2) 0 O DIG ECCP3 增强型 PWM 输出,通道 B ;优先于端口数据和 PSP 数据。 可以在增强型 PWM 关闭期间被配置为三态。 RE4 AD12(1) P3B 1: 2: 3: 4: 5: 6: DIG I 0 P3C 注 O P2B (3) 图注: 0 1 CS(6) AD11(1) RE4/AD12/ P3B 说明 (3) O = 输出,I = 输入,DIG = 数字输出,ST = 施密特缓冲区输入,TTL = TTL 缓冲区输入, x = 无关位(TRIS 位不影响 端口方向或在此可忽略)。 仅在 100 引脚器件上实现了 EMB 功能。 外部存储器接口 I/O 优先于所有其他数字和 PSP I/O。 ECCPMX 配置位置 1 时 P1B/P1C 和 P3B/P3C 的默认分配 (80 引脚和 100 引脚器件)。 在 64 引脚器件上未实现。 CCP2MX 配置位清零时 ECCP2/P2A 的备用分配 (单片机模式中的 80 引脚和 100 引脚器件)。 在 64 引脚和 80 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 149 页 PIC18F97J60 系列 表 10-11: PORTE 功能 (续) 引脚名称 RE5/AD13/ P1C 功能 TRIS 设置 I/O I/O 类型 RE5 0 O DIG 1 I ST PORTE<5> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 13 输出。 (2) AD13(1) RE6/AD14/ P1B(4) x I TTL 外部存储器接口,数据 bit 13 输入。 (2) 0 O DIG ECCP1 增强型 PWM 输出,通道 C ;优先于端口和 PSP 数据。可以 在增强型 PWM 关闭期间被配置为三态。 RE6 0 O DIG LATE<6> 数据输出。 1 I ST PORTE<6> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 14 输出。 (2) x I TTL 外部存储器接口,数据 bit 14 输入。 (2) P1B(3) 0 O DIG ECCP1 增强型 PWM 输出,通道 B ;优先于端口数据和 PSP 数据。 可以在增强型 PWM 关闭期间被配置为三态。 RE7 0 O DIG LATE<7> 数据输出。 1 I ST PORTE<7> 数据输入。 x O DIG 外部存储器接口,地址 / 数据 bit 15 输出。 (2) x I TTL 外部存储器接口,数据 bit 15 输入。 (2) 0 O DIG CCP2 比较输出和 CCP2 PWM 输出;优先于端口数据。 1 I ST CCP2 捕捉输入。 0 O DIG ECCP2 增强型 PWM 输出,通道 A ;优先于端口数据和 PSP 数据。 可以在增强型 PWM 关闭期间被配置为三态。 AD15(1) ECCP2(5) P2A(5) 图注: 1: 2: 3: 4: 5: 6: 注 LATE<5> 数据输出。 P1C(3) AD14(1) RE7/AD15/ ECCP2/P2A(4) 说明 O = 输出,I = 输入,DIG = 数字输出,ST = 施密特缓冲区输入,TTL = TTL 缓冲区输入, x = 无关位(TRIS 位不影响 端口方向或在此可忽略)。 仅在 100 引脚器件上实现了 EMB 功能。 外部存储器接口 I/O 优先于所有其他数字和 PSP I/O。 ECCPMX 配置位置 1 时 P1B/P1C 和 P3B/P3C 的默认分配 (80 引脚和 100 引脚器件)。 在 64 引脚器件上未实现。 CCP2MX 配置位清零时 ECCP2/P2A 的备用分配 (单片机模式中的 80 引脚和 100 引脚器件)。 在 64 引脚和 80 引脚器件上实现。 表 10-12: 与 PORTE 相关的寄存器汇总 Bit 7 Bit 6 RE7(1) RE6(1) RE5 RE4 RE3 RE2 LATE LATE7(1) LATE6(1) LATE5 LATE4 LATE3 LATE2 TRISE TRISE7(1) TRISE6(1) TRISE5 TRISE4 TRISE3 TRISE2 LATA RDPU REPU LATA5 LATA4 LATA3 LATA2 名称 PORTE Bit 5 Bit 4 Bit 3 Bit 2 Bit 0 复位值 所在页 RE1 RE0 62 LATE1 LATE0 62 TRISE1 TRISE0 61 LATA1 LATA0 62 Bit 1 图注: — = 未用,读为 0。 PORTE 不使用阴影单元。 注 1: 在 64 引脚器件上未实现,读为 0。 DS39762A_CN 第 150 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 10.7 PORTF、 LATF 和 TRISF 寄存器 PORTF 以两种不同方式实现为双向端口: 1:当器件复位时,引脚 RF6:RF1 被配置为模拟 输入并读为 0。 • 64 引脚和 80 引脚器件:7 位宽 (RF<7:1>) • 100 引脚器件:8 位宽 (RF<7:0>) 2:要将 PORTF 配置为数字 I/O,可以关闭比较 器并设置 ADCON1 的值。 注 对应的数据方向寄存器是 TRISF。将 TRISF 某位置 1 (= 1)时,会将 PORTF 的相应引脚设为输入 (即,使 相应的输出驱动器呈高阻状态) 。将 TRISF 某位清零 (= 0)时,会将 PORTF 的相应引脚设为输出 (即,将 输出锁存器中的内容置于选中引脚)。只有 PORTF 的 引脚 7 没有模拟输入;它是唯一可以承受高达 5.5V 的 电压的引脚。 数据锁存器(LATF)也是存储器映射的。对 LATF 寄存 器执行读-修改-写操作将读写 PORTF 的输出锁存 值。 PORTF 上的所有引脚都配有施密特触发输入缓冲区。 每个引脚都可被单独配置为输入或输出。 PORTF 与几种模拟外设功能复用,包括 A/D 转换器、 比较器输入和比较器输出。可以通过设置 CMCON 寄存 器,将 RF1 到 RF6 引脚用作比较器输入或输出。要将 RF6:RF1 用作数字输入,还必须关闭比较器。 2006 Microchip Technology Inc. 例 10-6: CLRF CLRF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF 超前信息 PORTF ; ; ; LATF ; ; ; 07h ; CMCON ; 0Fh ; ADCON1 ; 0CEh ; ; ; TRISF ; ; ; 初始化 PORTF Initialize PORTF by clearing output data latches Alternate method to clear output data latches Turn off comparators Set PORTF as digital I/O Value used to initialize data direction Set RF3:RF1 as inputs RF5:RF4 as outputs RF7:RF6 as inputs DS39762A_CN 第 151 页 PIC18F97J60 系列 表 10-13: 引脚名称 RF0/AN5(1) RF1/AN6/ C2OUT RF2/AN7/ C1OUT RF3/AN8 RF4/AN9 PORTF 功能 功能 TRIS 设置 I/O I/O 类型 RF0(1) 0 O DIG LATF<0> 数据输出;不受模拟输入影响。 1 I ST PORTF<0> 数据输入;当使能模拟输入时被禁止。 AN5(1) 1 I ANA A/D 输入通道 5。 POR 时的默认配置。 RF1 0 O DIG LATF<1> 数据输出;不受模拟输入影响。 PORTF<1> 数据输入;当使能模拟输入时被禁止。 1 I ST AN6 1 I ANA A/D 输入通道 6。 POR 时的默认配置。 C2OUT 0 O DIG 比较器 2 的输出;优先于端口数据。 RF2 0 O DIG LATF<2> 数据输出;不受模拟输入影响。 1 I ST PORTF<2> 数据输入;当使能模拟输入时被禁止。 AN7 1 I ANA A/D 输入通道 7。 POR 时的默认配置。 C1OUT 0 O TTL 比较器 1 的输出;优先于端口数据。 RF3 0 O DIG LATF<3> 数据输出;不受模拟输入影响。 1 I ST PORTF<3> 数据输入;当使能模拟输入时被禁止。 AN8 1 I ANA A/D 输入通道 8 和比较器 C2+ 输入。 POR 时的默认输入配置;不受模拟输 出影响。 RF4 0 O DIG LATF<4> 数据输出;不受模拟输入影响。 1 I ST PORTF<4> 数据输入;当使能模拟输入时被禁止。 1 I ANA A/D 输入通道 9 和比较器 C2- 输入。 POR 时的默认输入配置;不影响数字 输出。 0 O DIG LATF<5> 数据输出;不受模拟输入影响。当使能 CVREF 输出时被禁止。 1 I ST PORTF<5> 数据输入;当使能模拟输入时被禁止。当使能 CVREF 输出时被 禁止。 AN9 RF5/AN10/ CVREF RF6/AN11 RF7/SS1 RF5 AN10 1 I ANA CVREF x O ANA 比较器参考电压输出。使能该功能将禁止数字 I/O。 RF6 0 O DIG LATF<6> 数据输出;不受模拟输入影响。 PORTF<6> 数据输入;当使能模拟输入时被禁止。 注 A/D 输入通道 10 和比较器 C1+ 输入。 POR 时的默认输入配置。 1 I ST AN11 1 I ANA A/D 输入通道 11 和比较器 C1- 输入。 POR 时的默认输入配置;不影响数字 输出。 RF7 0 O DIG LATF<7> 数据输出。 1 I ST PORTF<7> 数据输入。 1 I TTL MSSP 的从动选择输入 (MSSP1 模块)。 SS1 图注: 说明 O = 输出,I = 输入,ANA = 模拟信号,DIG = 数字输出,ST = 施密特缓冲区输入,TTL = TTL 缓冲区输入,x = 无关位 (TRIS 位不影响端口方向或在此可忽略)。 1: 仅在 100 引脚器件上实现。 表 10-14: 与 PORTF 相关的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0(1) 62 LATF LATF7 LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 LATF0(1) 62 TRISF TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0(1) 61 名称 PORTF ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 60 CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 60 CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 60 图注: — = 未用,读为 0。 PORTF 不使用阴影单元。 注 1: 仅在 100 引脚器件上实现。 DS39762A_CN 第 152 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 10.8 PORTG、 TRISG 和 LATG 寄存器 取决于特定的器件, PORTG 以三种方式之一实现为双 向端口: • 64 引脚器件:1 位宽 (RG<4>) • 80 引脚器件:5 位宽 (RG<4:0>) • 100 引脚器件:8 位宽 (RG<7:0>) 对应的数据方向寄存器是 TRISG。将 TRISG 某位置 1 (= 1)时,会将 PORTG 的相应引脚设为输入(即,使 相应的输出驱动器呈高阻状态)。将 TRISG 某位清零 (= 0)时,会将 PORTG 的相应引脚设为输出(即,将 输出锁存器中的内容置于选中引脚)。 PORTG 上的所 有引脚都是仅数字引脚,并且可以承受高达 5.5V 的电 压。 当使能外设功能时,应小心定义每个 PORTG 引脚的 TRIS 位。有些外设会无视 TRIS 位的设置,将引脚定义 为输出引脚或输入引脚。用户应该查阅相应的外设章节 来正确设置 TRIS 位。引脚改写值未装入 TRIS 寄存器 中。这将允许对 TRIS 寄存器执行读-修改-写操作而 无需担心外设的改写。 例 10-7: 数据锁存器 (LATG)也是存储器映射的。对 LATG 寄 存器执行读-修改-写操作将读写 PORTG 的输出锁存 值。 PORTG 与 80 引脚及 100 引脚器件上的 EUSART2 功 能复用 (表 10-15)。 PORTG 引脚配有施密特触发输 入缓冲区。 2006 Microchip Technology Inc. 超前信息 CLRF PORTG CLRF LATG MOVLW 04h MOVWF TRISG 初始化 PORTG ; Initialize PORTG by clearing output data latches Alternate method to clear output data latches ; Value used to ; initialize data ; direction ; Set RG1:RG0 as outputs ; RG2 as input ; RG4:RG3 as inputs ; ; ; ; ; DS39762A_CN 第 153 页 PIC18F97J60 系列 表 10-15: 引脚名称 RG0/ECCP3/ P3A(1) PORTG 功能 功能 TRIS 设置 I/O I/O 类型 RG0(1) 0 O DIG LATG<0> 数据输出。 1 I ST PORTG<0> 数据输入。 0 O DIG CCP3 比较输出和 PWM 输出;优先于端口数据。 1 I ST CCP3 捕捉输入。 P3A(1) 0 O DIG ECCP3 增强型 PWM 输出,通道 A ;优先于端口数据和 PSP 数据。可以 在增强型 PWM 关闭期间被配置为三态。 RG1(1) 0 O DIG LATG<1> 数据输出。 1 I ST PORTG<1> 数据输入。 TX2(1) 1 O DIG 同步串行数据输出 (EUSART2 模块);优先于端口数据。 CK2(1) 1 O DIG 同步串行数据输入 (EUSART2 模块)。用户必须将其配置为输入。 1 I ST 同步串行时钟输入 (EUSART2 模块)。 0 O DIG LATG<2> 数据输出。 1 I ST PORTG<2> 数据输入。 RX2(1) 1 I ST 异步串行接收数据输入 (EUSART2 模块)。 DT2(1) 1 O DIG 同步串行数据输出 (EUSART2 模块);优先于端口数据。 ECCP3(1) RG1/TX2/ CK2(1) RG2/RX2/ DT2(1) RG3/CCP4/ P3D(1) RG2(1) RG3(1) CCP4(1) RG4/CCP5/ P1D 1 I ST 同步串行数据输入 (EUSART2 模块)。用户必须将其配置为输入。 0 O DIG LATG<3> 数据输出。 1 I ST PORTG<3> 数据输入。 0 O DIG CCP4 比较输出和 CCP4 PWM 输出;优先于端口数据。 1 I ST CCP4 捕捉输入。 P3D(1) 0 O DIG ECCP3 增强型 PWM 输出,通道 D ;优先于端口和 PSP 数据。可以在增 强型 PWM 关闭期间被配置为三态。 RG4 0 O DIG LATG<4> 数据输出。 1 I ST PORTG<4> 数据输入。 0 O DIG CCP5 比较输出和 CCP5 PWM 输出;优先于端口数据。 1 I ST CCP5 捕捉输入。 P1D 0 O DIG ECCP1 增强型 PWM 输出,通道 D ;优先于端口和 PSP 数据。可以在增 强型 PWM 关闭期间被配置为三态。 RG5(2) 0 O DIG LATG<0> 数据输出。 1 I ST PORTG<0> 数据输入。 0 O DIG LATG<0> 数据输出。 1 I ST PORTG<0> 数据输入。 0 O DIG LATG<0> 数据输出。 1 I ST PORTG<0> 数据输入。 CCP5 RG5(2) 说明 RG6(2) RG6(2) RG7(2) (2) RG7 图注: O = 输出,I = 输入,DIG = 数字输出,ST = 施密特缓冲区输入, x = 无关位(TRIS 位不影响端口方向或在此可忽略)。 注 1: 仅在 80 引脚和 100 引脚器件上实现。 2: 仅在 100 引脚器件上实现。 DS39762A_CN 第 154 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-16: 名称 PORTG 与 PORTG 相关的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RG7(1) RG6(1) RG5(1) RG4 RG3(2) RG2(2) RG1(2) RG0(2) 62 LATG LATG7 (2) 62 TRISG TRISG7(1) TRISG6(1) TRISG5(1) TRISG4 TRISG3(2) TRISG2(2) TRISG1(2) TRISE0(2) 61 注 (1) (1) LATG6 (1) LATG5 LATG4 (2) LATG3 (2) LATG2 LATG1 (2) LATG0 1: 仅在 100 引脚器件上实现。 2: 仅在 80 引脚和 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 155 页 PIC18F97J60 系列 10.9 注: PORTH、 LATH 和 TRISH 寄存器 PORTH 仅在 80 引脚和 100 引脚器件上存 在。 PORTH 是一个 8 位宽的双向 I/O 端口;它在 80 引脚和 100 引脚器件上是完全实现的。对应的数据方向寄存器 是 TRISH。将 TRISH 某位置 1(= 1)时,会将 PORTH 的相应引脚设为输入(即,使相应的输出驱动器呈高阻 状态)。将 TRISH 某位清零 (= 0)时,会将 PORTH 的相应引脚设为输出(即,将输出锁存器中的内容置于 选中引脚)。PORTH<3:0> 是仅数字引脚,并且可以承 受高达 5.5V 的电压。 数据锁存器 (LATH)也是存储器映射的。对 LATH 寄 存器执行读-修改-写操作将读写 PORTH 的输出锁存 值。 PORTH 上的所有引脚都配有施密特触发输入缓冲区。 每个引脚都可被单独配置为输入或输出。 当使能外部存储器接口时, 4 个 PORTH 引脚被用作该 接口的高位地址线。来自接口的地址输出优先于其他数 字 I/O。相应的 TRISH 位也被改写。 PORTH 引脚 RH4 到 RH7 与模拟转换器输入复用。通 过将 ADCON1 寄存器中的 PCFG3:PCFG0 控制位清零 或置 1,可将这些引脚选作模拟输入引脚。 PORTH 也可配置为 ECCP1 和 ECCP3 模块的备用增强 型 PWM 输出通道 B 和 C。这是通过将 ECCPMX 配置 位清零实现的。 例 10-8: CLRF PORTH CLRF LATH MOVLW MOVWF MOVLW 0Fh ADCON1 0CFh 初始化 PORTH ; Initialize PORTH by ; ; ; ; ; ; ; ; ; ; MOVWF TRISH ; ; ; DS39762A_CN 第 156 页 超前信息 clearing output data latches Alternate method to clear output data latches Configure PORTH as digital I/O Value used to initialize data direction Set RH3:RH0 as inputs RH5:RH4 as outputs RH7:RH6 as inputs 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-17: 引脚名称 RH0/A16 RH1/A17 RH2/A18 RH3/A19 RH4/AN12/P3C PORTH 功能 功能 TRIS 设置 I/O I/O 类型 RH0 0 O DIG LATH<0> 数据输出。 1 I ST PORTH<0> 数据输入。 A16(1) x O DIG 外部存储器接口,地址线 16。优先于端口数据。 RH1 0 O DIG LATH<1> 数据输出。 1 I ST PORTH<1> 数据输入。 A17(1) x O DIG 外部存储器接口,地址线 17。优先于端口数据。 RH2 0 O DIG LATH<2> 数据输出。 1 I ST PORTH<2> 数据输入。 A18(1) x O DIG 外部存储器接口,地址线 18。优先于端口数据。 RH3 0 O DIG LATH<3> 数据输出。 PORTH<3> 数据输入。 1 I ST A19(1) x O DIG 外部存储器接口,地址线 19。优先于端口数据。 RH4 0 O DIG LATH<4> 数据输出。 1 I ST PORTH<4> 数据输入。 I ANA A/D 输入通道 12。 POR 时的默认输入配置;不影响数字输出。 AN12 RH5/AN13/P3B P3C(2) 0 O DIG ECCP3 增强型 PWM 输出,通道 C ;优先于端口和 PSP 数据。可以在增强 型 PWM 关闭期间被配置为三态。 RH5 0 O DIG LATH<5> 数据输出。 1 I ST PORTH<5> 数据输入。 I ANA A/D 输入通道 13。 POR 时的默认输入配置;不影响数字输出。 AN13 RH6/AN14/P1C P3B(2) 0 O DIG ECCP3 增强型 PWM 输出,通道 B ;优先于端口数据和 PSP 数据。可以在 增强型 PWM 关闭期间被配置为三态。 RH6 0 O DIG LATH<6> 数据输出。 1 I ST PORTH<6> 数据输入。 I ANA A/D 输入通道 14。 POR 时的默认输入配置;不影响数字输出。 AN14 RH7/AN15/P1B P1C(2) 0 O DIG ECCP1 增强型 PWM 输出,通道 C ;优先于端口和 PSP 数据。可以在增强 型 PWM 关闭期间被配置为三态。 RH7 0 O DIG LATH<7> 数据输出。 1 I ST PORTH<7> 数据输入。 I ANA A/D 输入通道 15。 POR 时的默认输入配置;不影响数字输出。 O DIG ECCP1 增强型 PWM 输出,通道 B ;优先于端口数据和 PSP 数据。可以在 增强型 PWM关闭期间被配置为三态。 AN15 P1B(2) 图注: 注 说明 0 O = 输出,I = 输入,ANA = 模拟信号,DIG = 数字输出,ST = 施密特缓冲区输入, x = 无关位(TRIS 位不影响端口方 向或在此可忽略)。 1: 在 80 引脚器件上未实现。 2: ECCPMX 配置位清零时 P1B/P1C 和 P3B/P3C 的备用分配 (80 引脚和 100 引脚器件)。默认分配是 PORTE<6:3>。 表 10-18: 与 PORTH 相关的寄存器汇总 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 PORTH RH7 RH6 RH5 RH4 RH3 RH2 RH1 RH0 62 LATH LATH7 LATH6 LATH5 LATH4 LATH3 LATH2 LATH1 LATH0 61 TRISH TRISH7 TRISH6 TRISH5 TRISH4 TRISH3 TRISH2 TRISH1 TRISH0 61 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 157 页 PIC18F97J60 系列 10.10 PORTJ、 TRISJ 和 LATJ 寄存器 注: PORTJ 仅在 80 引脚和 100 引脚器件上存 在。 PORTJ 以两种不同方式实现为双向端口: • 80 引脚器件:2 位宽 (RJ<5:4>) • 100 引脚器件:8 位宽 (RJ<7:0>) 对应的数据方向寄存器是 TRISJ。将 TRISJ 某位置 1 (= 1)时,会将 PORTJ 的相应引脚设为输入(即,使 相应的输出驱动器呈高阻状态)。将 TRISJ 某位清零 (= 0)时,会将 PORTJ 的相应引脚设为输出 (即,将 输出锁存器中的内容置于选中引脚)。PORTJ 上的所有 引脚都是仅数字引脚,并且可以承受高达 5.5V 的电压。 数据锁存器 (LATJ)也是存储器映射的。对 LATJ 寄存 器执行读-修改-写操作将读写 PORTJ 的输出锁存 值。 当使能外部存储器接口时,所有的 PORTJ 引脚都用于控 制接口的输出。通过清零EBDIS控制位(MEMCON<7>) 使能接口时,这将自动发生。 TRISJ 位也被改写。 PORTJ 的每个引脚都具有内部弱上拉电路。提供上拉 电路是为了保证上电时外部存储器接口输入为一个已知 状态。单个控制位可以关闭所有上拉电路。可以通过清 零 RJPU 位(PORTA<7>)来实现。当端口引脚被配置 为输出时,其弱上拉电路会自动切断。发生任何器件复 位时,上拉功能会被禁止。 例 10-9: CLRF PORTJ ; CLRF LATJ ; ; ; ; ; MOVLW 0CFh MOVWF TRISJ PORTJ 上的所有引脚都配有施密特触发输入缓冲区。 每个引脚都可被单独配置为输入或输出。 注: 这些引脚在任何器件复位时都被配置为数 字输入引脚。 DS39762A_CN 第 158 页 初始化 PORTJ 超前信息 Initialize PORTG by clearing output data latches Alternate method to clear output data latches ; Value used to ; initialize data ; direction ; Set RJ3:RJ0 as inputs ; RJ5:RJ4 as output ; RJ7:RJ6 as inputs 2006 Microchip Technology Inc. PIC18F97J60 系列 表 10-19: 引脚名称 RJ0/ALE(1) RJ1/OE(1) RJ2/WRL(1) RJ3/WRH(1) RJ4/BA0 RJ5/CE RJ6/LB(1) RJ7/UB(1) PORTJ 功能 功能 TRIS 设置 I/O I/O 类型 RJ0(1) 0 O DIG LATJ<0> 数据输出。 1 I ST PORTJ<0> 数据输入。 ALE(1) x O DIG 外部存储器接口地址锁存器使能控制输出;优先于数字 I/O。 RJ1(1) 0 O DIG LATJ<1> 数据输出。 1 I ST PORTJ<1> 数据输入。 OE(1) x O DIG 外部存储器接口输出使能控制输出;优先于数字 I/O。 RJ2(1) 0 O DIG LATJ<2> 数据输出。 1 I ST PORTJ<2> 数据输入。 WRL(1) x O DIG 外部存储器总线写入低字节控制输出;优先于数字 I/O。 RJ3(1) 0 O DIG LATJ<3> 数据输出。 1 I ST PORTJ<3> 数据输入。 WRH(1) x O DIG 外部存储器接口写入高字节控制输出;优先于数字 I/O。 RJ4 0 O DIG LATJ<4> 数据输出。 1 I ST PORTJ<4> 数据输入。 BA0(2) x O DIG 外部存储器接口字节地址 0 控制输出;优先于数字 I/O。 RJ5 0 O DIG LATJ<5> 数据输出。 1 I ST PORTJ<5> 数据输入。 CE(2) x O DIG 外部存储器接口芯片使能控制输出;优先于数字 I/O。 RJ6(1) 0 O DIG LATJ<6> 数据输出。 1 I ST PORTJ<6> 数据输入。 LB(1) x O DIG 外部存储器接口低字节使能控制输出;优先于数字 I/O。 RJ7(1) 0 O DIG LATJ<7> 数据输出。 1 I ST PORTJ<7> 数据输入。 x O DIG 外部存储器接口高字节使能控制输出;优先于数字 I/O。 UB(1) 说明 图注: O = 输出,I = 输入,DIG = 数字输出,ST = 施密特缓冲区输入, x = 无关位(TRIS 位不影响端口方向或在此可忽略)。 注 1: 仅在 100 引脚器件上实现。 2: 仅在 100 引脚器件上实现了 EMB 功能。 表 10-20: 与 PORTJ 相关的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RJ7(1) RJ6(1) RJ5 RJ4 RJ3(1) RJ2(1) RJ1(1) RJ0(1) 62 LATJ LATJ7(1) LATJ6(1) LATJ5 LATJ4 LATJ3(1) LATJ2(1) LATJ1(1) LATJ0(1) 61 TRISJ TRISJ7 (1) TRISJ6(1) TRISJ5 TRISJ4 TRISJ3(1) TRISJ2(1) TRISJ1(1) TRISJ0(1) 61 PORTA RJPU — RA5 RA4 RA3 RA2 RA1 RA0 62 名称 PORTJ 图注: — = 未用,读为 0。 PORTJ 不使用阴影单元。 注 1: 仅在 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 159 页 PIC18F97J60 系列 10.11 并行从动端口 注: 图 10-2: 并行从动端口仅在 100 引脚器件上实现。 当控制位 PSPMODE(PSPCON<4>)置 1 时,PORTD 也可用作 8 位宽的并行从动端口或单片机端口。外部可 通过 RD 控制输入引脚(RE0/AD8/RD/P2D)和 WR 控 制输入引脚(RE1/AD9/WR/P2C)对其进行异步读写。 注: PORTD 和 PORTE 框图 (并行从动端口) 并行从动端口只在单片机模式可用。 PSP 可以直接与 8 位微处理器数据总线连接。外部微 处理器可以读或写 PORTD 8 位锁存值。PSPMODE 位 置 1 将把端口引脚 RE0/AD8/RD/P2D 使能为 RD 输 入,把 RE1/AD9/WR/P2C 使能为 WR 输入,并把 RE2/AD10/CS/P2B 使能为 CS (片选)输入。要实现 此功能, TRISE 寄存器 (TRISE<2:0>)对应的数据 方向位必须配置为输入 (置 1)。 当第一次检测到 CS 和 WR 线均为低电平时发生对 PSP 的写操作,当检测到任何一根线为高电平时结束操作。 写操作结束后, PSPIF 和 IBF 标志位均置 1。 当第一次检测到 CS 和 RD 线均为低电平时发生对 PSP 的读操作。PORTD 中的数据被读出且 OBF 位置 1。如 果用户通过将新数据写入 PORTD 而试图将 OBF 置 1, 该数据会立即被读出;但 OBF 位不会被置 1。 数据总线 D 写 LATD 或 PORTD Q RDx 引脚 CK 数据锁存器 Q 读 PORTD TTL D ENEN TRIS 锁存器 读 LATD PORTD 的一位 将中断标志位置 1 PSPIF(PIR1<7>) 当 CS 或 RD 线被检测到高电平时, PORTD 引脚返回 到输入状态且 PSPIF 位被置 1。用户应用程序在为 PSP 提供服务之前应该等待 PSPIF 被置 1。发生这种情况 时,可以查询 IBF 和 OBF 位并进行相应的操作。 读 写和读模式下控制位的时序分别如图 10-3 和图 10-4 所 示。 片选 写 TTL RD TTL CS TTL WR 注 :I/O 引脚与 VDD 和 VSS 之间接有保护二极管。 DS39762A_CN 第 160 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 10-1: PSPCON:并行从动端口控制寄存器 R-0 R-0 R/W-0 R/W-0 U-0 U-0 U-0 U-0 IBF OBF IBOV PSPMODE — — — — bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 IBF:输入缓冲区满状态位 1 = 已接收一个字,等待 CPU 读取 0 = 未接收到任何字 bit 6 OBF:输出缓冲区满状态位 1 = 输出缓冲区仍保存着之前写入的字 0 = 输出缓冲区已被读取 bit 5 IBOV:输入缓冲区溢出检测位 1 = 之前输入的字尚未被读取时发生写操作 (必须用软件清零) 0 = 未发生溢出 bit 4 PSPMODE:并行从动端口模式选择位 1 = 并行从动端口模式 0 = 通用 I/O 模式 bit 3-0 未用:读为 0 图 10-3: 并行从动端口写波形图 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 CS WR RD PORTD<7:0> IBF OBF PSPIF 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 161 页 PIC18F97J60 系列 图 10-4: 并行从动端口读波形图 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 CS WR RD PORTD<7:0> IBF OBF PSPIF 表 10-21: 名称 PORTD 与并行从动端口相关的寄存器 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 62 LATD LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0 62 TRISD TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 61 PORTE RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0 62 LATE LATE7 LATE6 LATE5 LATE4 LATE3 LATE2 LATE1 LATE0 62 TRISE TRISE7 TRISE6 TRISE5 TRISE4 TRISE3 TRISE2 TRISE1 TRISE0 61 IBF OBF IBOV PSPMODE — — — — 61 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 PSPCON INTCON GIE/GIEH PEIE/GIEL PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 图注: — = 未用,读为 0。并行从动端口不使用阴影单元。 DS39762A_CN 第 162 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 11.0 TIMER0 模块 T0CON 寄存器 (寄存器 11-1)控制该模块操作的所有 方面,包括预分频比的选择。它是可读写的。 Timer0 模块具有以下特性: • • • • • • 图 11-1 给出了 8 位模式下 Timer0 模块的简化框图。 图 11-2 给出了16 位模式下 Timer0 模块的简化框图。 可由软件选择作为 8 位或 16 位定时器 / 计数器 可读写寄存器 专用的 8 位软件可编程预分频器 可选的时钟源 (内部或外部) 外部时钟的边沿选择 溢出时中断 寄存器 11-1: T0CON:TIMER0 控制寄存器 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 TMR0ON:Timer0 开 / 关控制位 1 = 使能 Timer0 0 = 停止 Timer0 bit 6 T08BIT:Timer0 8 位 /16 位控制位 1 = Timer0 被配置为 8 位定时器 / 计数器 0 = Timer0 被配置为 16 位定时器 / 计数器 bit 5 T0CS:Timer0 时钟源选择位 1 = T0CKI 引脚上的传输信号 0 = 内部指令周期时钟 (CLKO) bit 4 T0SE:Timer0 时钟源边沿选择位 1 = 在 T0CKI 引脚上电平的下降沿递增 0 = 在 T0CKI 引脚上电平的上升沿递增 bit 3 PSA:Timer0 预分频器分配位 1 = 未分配 Timer0 预分频器。 Timer0 时钟输入不经过预分频器。 0 = 已分配 Timer0 预分频器。 Timer0 时钟输入来自预分频器的输出。 bit 2-0 T0PS2:T0PS0: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 预分频值 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 163 页 PIC18F97J60 系列 11.1 Timer0 工作原理 11.2 Timer0 的 16 位读写模式 Timer0 既可用作定时器也可用作计数器。可通过 T0CS 位 (T0CON<5>)来 选 择 模 式。在 定 时 器 模 式 下 (T0CS = 0),该模块在每个时钟周期计时都会递增(默 认情况下),除非选择了其他预分频值(见第 11.3 节“预 分频器”)。如果写入 TMR0,那么在随后的两个指令 周期内,计时都不再递增。用户可通过将调整值写入 TMR0 寄存器来避开这一问题。 TMR0H 并不是 16 位模式下 Timer0 的高字节,而是被 缓存的 Timer0 高字节。 Timer0 的高字节不可以被直接 读写 (见图 11-2)。在读 TMR0L 时使用 Timer0 高字 节的内容更新 TMR0H。这样可以一次读取 Timer0 的全 部 16 位,而无需验证读到的高字节和低字节的有效性 (在连续读取高字节和低字节时,由于可能存在进位, 因此需要验证读到的高字节和低字节的有效性)。 通过将 T0CS 位置 1 (= 1)选择计数器模式。在该模 式下, Timer0 可在 RA4/T0CKI 引脚上信号的每个上升 沿或下降沿递增。递增边沿由 Timer0 时钟源边沿选择 位 T0SE(T0CON<4>)决定。清零该位即选择上升沿。 下面讨论外部时钟输入的限制条件。 同样,写入 Timer0 的高字节也是通过 TMR0H 缓冲寄 存器来操作的。在写入 TMR0L 的同时,使用 TMR0H 的内容更新 Timer0 的高字节。这样一次就可以完成 Timer0 全部 16 位的更新。 可以使用外部时钟源来驱动 Timer0。但是,必须满足一 定要求,以确保外部时钟和内部相位时钟(TOSC)保持 同步。在同步之后,定时器 / 计数器仍需要一定的延时 才会引发递增操作。 图 11-1: TIMER0 框图 (8 位模式) FOSC/4 0 1 同步 内部 时钟 1 可编程 预分频器 T0CKI 引脚 T0SE T0CS 0 溢出时 TMR0IF 置 1 TMR0L (延时 2 个 TcY) 8 3 T0PS2:T0PS0 8 PSA 内部数据总线 复位时, Timer0 被使能为在 8 位模式下工作,其时钟输入来自 T0CKI 引脚的最大预分频信号。 注: 图 11-2: TIMER0 框图 (16 位模式) Fosc/4 0 1 1 T0CKI 引脚 T0SE T0CS 可编程 预分频器 0 同步 内部 时钟 溢出时 TMR0IF 置 1 TMR0 高字节 TMR0L 8 (延时 2 个 TcY) 3 读 TMR0L T0PS2:T0PS0 写 TMR0L PSA 8 8 TMR0H 8 8 内部数据总线 注: 复位时, Timer0 被使能为在 8 位模式下工作,其时钟输入来自 T0CKI 引脚的最大预分频信号。 DS39762A_CN 第 164 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 11.3 11.3.1 预分频器 切换预分频器的分配 Timer0 模块的预分频器为一个 8 位计数器。该预分频器 不可直接读写。通过 PSA 和 T0PS2:T0PS0 位 (T0CON<3:0>)进行预分频器的分配和设定预分频比 值。 预分频器的分配完全由软件控制,并且在程序执行期间 可以随时更改。 将 PSA 位清零可将预分频器分配给 Timer0 模块。预分 频值可以在 1:2 到 1:256 之间进行选择,以 2 的整数次 幂递增。 8 位模式下的 TMR0 寄存器从 FFh 到 00h 发生溢出,或 16 位模式下的 TMR0 从 FFFFh 到 0000h 发生溢出时, 将产生 TMR0 中断。这种溢出会使 TMR0IF 标志位置 1。可以通过清零 TMR0IE 位 (INTCON<5>)来屏蔽 该中断。在重新允许该中断前,必须在中断服务程序中 用软件清零 TMR0IF 位。 如果将预分频器分配给 Timer0 模块,所有写入 TMR0 寄存器的指令 (例如, CLRF TMR0、 MOVWF TMR0 和 BSF TMR0 等),都会将预分频器的计数值清零。 注: 表 11-1: 名称 如果将预分频器分配给 Timer0,写入 TMR0 会将预分频器的计数值清零,但不 会改变预分频器的分配。 Timer0 中断 由于 Timer0 在休眠模式下是关闭的,所以 TMR0 中断 无法将处理器从休眠状态唤醒。 与 TIMER0 相关的寄存器 Bit 7 Bit 6 Bit 5 TMR0L Timer0 寄存器的低字节 TMR0H Timer0 寄存器的高字节 GIE/GIEH PEIE/GIEL TMR0IE INTCON 11.4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 60 60 INT0IE RBIE INT0IF RBIF 59 TMR0IP INT3IP RBIP 59 TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 60 TRISA — — TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 61 图注: INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IF T0CON INTCON2 RBPU Bit 4 — = 未用,读为 0。 Timer0 不使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 165 页 PIC18F97J60 系列 注: DS39762A_CN 第 166 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 12.0 TIMER1 模块 图 12-1 给出了 Timer1 模块的简化框图。图 12-2 给出 了此模块在读写模式下的工作原理框图。 Timer1 定时器 / 计数器模块具有以下特性: 此模块自身带有低功耗振荡器可提供额外的时钟选项。 Timer1 振荡器也可作为单片机处于节能状态时的低功 耗时钟源。 • 可由软件选择作为 16 位定时器或计数器 • 可读写的 8 位寄存器 (TMR1H 和 TMR1L) • 可选择器件时钟或 Timer1 内部振荡器作为时钟源 (内部或外部) • 溢出时中断 • ECCP 特殊事件触发模块复位 • 器件时钟状态标志位 (T1RUN) 寄存器 12-1: 仅需极少量外部元件和代码开销,Timer1 就可为应用提 供实时时钟 (RTC)。 Timer1 由 T1CON 控制寄存器 (寄存器 12-1)控制。 该寄存器还包含 Timer1 振荡器使能位 (T1OSCEN)。 可以通过将控制位 TMR1ON (T1CON<0>)置 1 或清 零来使能或禁止 Timer1。 T1CON:TIMER1 控制寄存器 R/W-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 RD16:16 位读 / 写模式使能位 1 = 使能 Timer1 通过一次 16 位操作进行寄存器读 / 写 0 = 使能 Timer1 通过两次 8 位操作进行寄存器读 / 写 bit 6 T1RUN:Timer1 系统时钟状态位 1 = 器件时钟由 Timer1 振荡器产生 0 = 器件时钟由另一个时钟源产生 bit 5-4 T1CKPS1:T1CKPS0:Timer1 输入时钟预分频值选择位 11 = 1:8 预分频值 10 = 1:4 预分频值 01 = 1:2 预分频值 00 = 1:1 预分频值 bit 3 T1OSCEN:Timer1 振荡器使能位 1 = 使能 Timer1 振荡器 0 = 关闭 Timer1 振荡器 关闭振荡器的反相器和反馈电阻以降低功耗。 bit 2 T1SYNC:Timer1 外部时钟输入同步选择位 当 TMR1CS = 1 时: 1 = 不同步外部时钟输入 0 = 同步外部时钟输入 当 TMR1CS = 0 时: 该位为无关位。当 TMR1CS = 0 时, Timer1 使用内部时钟。 bit 1 TMR1CS:Timer1 时钟源选择位 1 = 使用 RC0/T1OSO/T13CKI 引脚上的外部时钟 (上升沿计数) 0 = 内部时钟 (FOSC/4) bit 0 TMR1ON:Timer1 使能位 1 = 使能 Timer1 0 = 停止 Timer1 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 167 页 PIC18F97J60 系列 12.1 Timer1 工作原理 工作模式由时钟选择位 TMR1CS(T1CON<1>)决定。 当 TMR1CS 清零 (= 0)时, Timer1 在每个内部指令 周期(FOSC/4)递增。当该位置 1 时,Timer1 在 Timer1 外部时钟输入信号或 Timer1 振荡器输出信号 (如果使 能)的每个上升沿递增。 Timer1 可在以下模式工作: • 定时器 • 同步计数器 • 异步计数器 图 12-1: 当使能 Timer1 时,RC1/T1OSI 和 RC0/T1OSO/T13CKI 引脚变为输入引脚。这意味着 TRISC<1:0> 的值被忽略 并且这些引脚将读为 0。 TIMER1 框图 Timer1 振荡器 Timer1 时钟输入 开/关 T1OSO/T13CKI 1 1 FOSC/4 内部 时钟 T1OSI 预分频器 1, 2, 4, 8 同步检测 0 0 2 T1OSCEN (1) 休眠输入 TMR1CS Timer1 开/关 T1CKPS1:T1CKPS0 T1SYNC TMR1ON 清零 TMR1 (ECCPx 特殊事件触发信号) 注 溢出时 TMR1IF 置 1 TMR1 高字节 TMR1L 1:当使能位 T1OSCEN 清零时,将关断振荡器的反相器和反馈电阻以减少功耗。 图 12-2: TIMER1 框图 (16 位读 / 写模式) Timer1 振荡器 Timer1 时钟输入 1 T1OSO/T13CKI 1 FOSC/4 内部 时钟 T1OSI 预分频器 1, 2, 4, 8 同步检测 0 0 2 休眠输入 (1) TMR1CS T1OSCEN T1CKPS1:T1CKPS0 T1SYNC Timer1 开/关 TMR1ON 清零 TMR1 (ECCPx 特殊事件触发信号) TMR1 高字节 TMR1L 溢出时 TMR1IF 置 1 8 读 TMR1L 写 TMR1L 8 8 TMR1H 8 8 内部数据总线 注 1:当使能位 T1OSCEN 清零时,将关断振荡器的反相器和反馈电阻以减少功耗。 DS39762A_CN 第 168 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 12.2 Timer1 的 16 位读 / 写模式 可将 Timer1 配置为 16 位读写模式 (见图 12-2)。当 RD16 控制位 (T1CON<7>)置 1 时, TMR1H 的地址 被映射到 Timer1 的高字节缓冲寄存器。读 TMR1L 将把 Timer1的高字节的内容装入Timer1高字节缓冲寄存器。 这种方式使用户可以精确地读取 Timer1 的全部 16 位, 而不需要像先读高字节再读低字节那样,由于两次读取 之间可能存在进位,而不得不验证读取的有效性。 振荡器类型 LP 注 在该模式下不能直接读写 Timer1 的高字节。所有读写 都必须通过 Timer1 高字节缓冲寄存器来进行。写入 TMR1H 不会清零 Timer1 预分频器。只有在写 TMR1L 时才会清零该预分频器。 Timer1 振荡器 片上 晶 体振 荡器电 路连 接 在 T1OSI (输 入)引脚和 T1OSO (放大器输出)引脚之间。可以通过将 Timer1 振荡器使能位 T1OSCEN(T1CON<3>)置 1 来使能该 振荡电路。该振荡电路是一种低功耗电路,它采用了额 定振荡频率为 32 kHz 的晶振。在所有功耗管理模式下 都可继续运行。图 12-3 所示是典型的 LP 振荡器电路。 表 12-1 给出了供 Timer1 振荡器选择的电容值。 用户必须提供软件延时来确保 Timer1 振荡器的正常起 振。 图 12-3: 频率 32 kHz C1 C2 (1) 27 pF 27 pF(1) 1: Microchip 建议将该值作为验证振荡电路 的起始点。 2: 电容越大,振荡器越稳定,但起振时间越 长。 写 Timer1 的高字节也必须通过 TMR1H 缓冲寄存器进 行。在写入 TMR1L 的同时,使用 TMR1H 的内容更新 Timer1 的高字节。这样允许用户将 16 位值一次写入 Timer1 的高字节和低字节。 12.3 TIMER1振荡器的电容选择(2,3,4) 表 12-1: 3: 因为每种谐振器 / 晶振都有其自身特性, 用户应当向谐振器 / 晶振制造厂商咨询外 部元件的适当值。 4: 上述电容值仅供设计参考。 12.3.1 使用 TIMER1 作为时钟源 在功耗管理模式下也可以将Timer1振荡器用作时钟源。 通过将时钟选择位 SCS1:SCS0 (OSCCON<1:0>)设 置为 01,器件可以切换到 SEC_RUN 模式,CPU 和外 设都可以用 Timer1 振荡器作为时钟源。如果 IDLEN 位 (OSCCON<7>)被清零并且执行了 SLEEP 指令,器件 将进入 SEC_IDLE 模式。更多详细信息,请参见第 3.0 节 “功耗管理模式”。 无论何时将 Timer1 振荡器用作时钟源, Timer1 系统时 钟状态标志位 T1RUN (T1CON<6>)均会置 1。这可 用于确定控制器的当前时钟模式。该位也可指示故障保 护时钟监视器当前正使用的时钟源。如果使能了故障保 护时钟监视器并且 Timer1 振荡器在提供时钟信号时发 生了故障,查询 T1RUN 位可以确定时钟源是 Timer1 振 荡器还是其他时钟源。 TIMER1 振荡器的外部元件 C1 27 pF PIC18F97J60 T1OSI XTAL 32.768 kHz T1OSO C2 27 pF 注: 关于电容选择的更多信息,请参见表 12-1 下方 的 “注”。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 169 页 PIC18F97J60 系列 12.3.2 12.5 TIMER1 振荡器布线注意事项 Timer1 振荡器电路在工作期间仅消耗极少的电流。鉴于 此振荡器的低功耗特性,它对附近变化较快的信号比较 敏感。 如图 12-3 所示,振荡电路应该尽可能靠近单片机。除 了 VSS 或 VDD 外,在该振荡电路区域内不应有其他电 路。 如果必须要在该振荡器附近布置高速电路(如输出比较 模式或 PWM 模式的 ECCP1 引脚,或使用 OSC2 引脚 的主振荡器),那么在该振荡电路周围布置接地保护环 (如图 12-4 所示),对于单面 PCB 板或外加接地层的 电路板来讲可能会有帮助。 图 12-4: 如果 ECCP1 或 ECCP2 配置为在比较模式下产生特 殊事件触发信号 (CCPxM3:CCPxM0 = 1011),该 信 号 将 复 位 Timer3。如 果使 能了 A/D 模 块,来 自 ECCP2 的触发信号还将启动 A/D 转换 (更多信息, 请参见第 17.2.1 节 “特殊事件触发器”)。 要使用这一功能,必须将模块配置为定时器或同步计数 器。在这种情况下,CCPRxH:CCPRxL 这对寄存器实际 上变成了 Timer1 的周期寄存器。 如果 Timer1 在异步计数器模式下运行,复位操作可能 不起作用。 如果 Timer1 的写操作和特殊事件触发同时发生,则写 操作优先。 带有接地保护环的振荡电路 VDD 注: VSS 12.6 OSC2 为 Timer1 外接一个 LP 振荡器(如第 12.3 节“Timer1 振荡器”中所述),可以允许用户在他们的应用中包括 RTC 功能。只需通过一个提供精确时基的廉价时钟晶振 以及几行计算时间的应用程序代码就可以实现这一功 能。当器件在休眠模式下工作并使用电池或超大容量电 容作为电源时,可省去另外的 RTC 器件和备用电池。 RC1 使用 Timer1 作为实时时钟 应用代码程序 RTCisr(如例 12-1 所示),演示了使用 中断服务程序以 1 秒的间隔递增计数器的简单方法。将 TMR1 寄存器对的值递增至溢出将触发中断并调用中断 服务程序,该程序会使秒计数器加 1,其他的分钟和小 时计数器则会在前面的计数器溢出时加 1。 RC2 注 :未按比例绘制。 Timer1 中断 TMR1 寄存器对(TMR1H:TMR1L)从 0000h 开始,增 加到 FFFFh,然后溢出返回到 0000h 重新开始计数。如 果允许了 Timer1 中断,则溢出时会产生 Timer1 中断, 并由中断标志位 TMR1IF (PIR1<0>)捕捉。可以通过 对 Timer1 中断允许位 TMR1IE (PIE1<0>)置 1 或清 零来允许或禁止该中断。 DS39762A_CN 第 170 页 ECCPx 模块产生的特殊事件触发信号不会 将 TMR1IF 中断标志位(PIR1<0>)置 1。 OSC1 RC0 12.4 使用 ECCP 特殊事件触发信号复位 Timer1 由于这对寄存器为 16 位宽,因此使用 32.768 kHz 时 钟,将其计数到溢出需要 2 秒。要使溢出按所需的 1 秒 间隔进行,必须预先装载这对寄存器。最简单的方法是 使用 BSF 指令将 TMR1H 的最高有效位置 1。请注意决 不要预先加载或改变 TMR1L 寄存器,这样做可能会引 起多个周期的累积误差。 要使此方法精确,Timer1 必须工作于异步模式且必须允 许 Timer1 溢出中断(PIE1<0> = 1),如程序 RTCinit 所示。同时 Timer1 振荡器也必须被使能并始终运行。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 例 12-1: 使用 TIMER1 中断服务实现实时时钟 RTCinit MOVLW MOVWF CLRF MOVLW MOVWF CLRF CLRF MOVLW MOVWF BSF RETURN 80h TMR1H TMR1L b’00001111’ T1CON secs mins .12 hours PIE1, TMR1IE BSF BCF INCF MOVLW CPFSGT RETFIE CLRF INCF MOVLW CPFSGT RETFIE CLRF INCF MOVLW CPFSGT RETFIE CLRF RETFIE TMR1H, 7 PIR1, TMR1IF secs, F .59 secs ; Preload TMR1 register pair ; for 1 second overflow ; Configure for external clock, ; Asynchronous operation, external oscillator ; Initialize timekeeping registers ; ; Enable Timer1 interrupt RTCisr 表 12-2: 名称 INTCON ; ; ; ; Preload for 1 sec overflow Clear interrupt flag Increment seconds 60 seconds elapsed? ; No, done ; Clear seconds ; Increment minutes ; 60 minutes elapsed? secs mins, F .59 mins ; ; ; ; mins hours, F .23 hours No, done clear minutes Increment hours 24 hours elapsed? ; No, done ; Reset hours ; Done hours 与 TIMER1 作为定时器 / 计数器相关的寄存器 Bit 7 Bit 6 GIE/GIEH PEIE/GIEL Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 IPR1 TMR1L Timer1 寄存器的低字节 TMR1H Timer1 寄存器的高字节 T1CON 图注: RD16 T1RUN 60 60 T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 60 Timer1 模块不使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 171 页 PIC18F97J60 系列 注: DS39762A_CN 第 172 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 13.0 TIMER2 模块 13.1 Timer2 工作原理 • 8 位定时器和周期寄存器(分别为 TMR2 和 PR2) • 可读写 (以上两个寄存器) • 可软件编程的预分频器 (分频比为 1:1、 1:4 和 1:16) • 可软件编程的后分频器 (分频比为 1:1 到 1:16) • TMR2 与 PR2 匹配时产生中断 • 可选作 MSSP 模块的移位时钟 在正常工作模式下, TMR2 从 00h 开始,每个时钟周期 (FOSC/4)加 1。4 位计数器 / 预分频器提供了对时钟输 入不分频、4 分频和 16 分频三种选项,并可通过预分频 控制位 T2CKPS1:T2CKPS0 (T2CON<1:0>)进行选 择。在每个时钟周期,TMR2的值都会与周期寄存器PR2 中的值进行比较。当两个值匹配时,由比较器产生匹配 信号作为定时器的输出。此信号也会使 TMR2 的值在下 一个周期复位到 00h,并驱动计数器 / 后分频器 (见 第 13.2 节 “Timer2 中断”)。 此模块由 T2CON 寄存器(寄存器 13-1)控制,此寄存 器使能或禁止定时器并配置预分频器和后分频器。可以 通过清零控制位 TMR2ON(T2CON<2>)关闭 Timer2, 以实现功耗最小。 TMR2 和 PR2 寄存器均可直接读写。在任何器件复位 时,TMR2 寄存器都会清零,而 PR2 寄存器则初始化为 FFh。预分频和后分频计数器均会在发生以下事件时清 零: 图 13-1 给出了此模块的简化框图。 • 对 TMR2 寄存器进行写操作 • 对 T2CON 寄存器进行写操作 • 任何器件复位 (上电复位、 MCLR 复位、看门狗 定时器复位或欠压复位) Timer2 定时器模块具有以下特性: 写 T2CON 时 TMR2 不会清零。 寄存器 13-1: T2CON:TIMER2 控制寄存器 U-0 R/W-0 R/W-0 — T2OUTPS3 T2OUTPS2 R/W-0 R/W-0 T2OUTPS1 T2OUTPS0 R/W-0 R/W-0 R/W-0 TMR2ON T2CKPS1 T2CKPS0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 未用:读为 0 bit 6-3 T2OUTPS3:T2OUTPS0:Timer2 输出后分频比选择位 0000 = 1:1 后分频比 0001 = 1:2 后分频比 • • • 1111 = 1:16 后分频比 bit 2 TMR2ON:Timer2 使能位 1 = 使能 Timer2 0 = 关闭 Timer2 bit 1-0 T2CKPS1:T2CKPS0:Timer2 时钟预分频值选择位 00 = 预分频值为 1 01 = 预分频值为 4 1x = 预分频值为 16 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 173 页 PIC18F97J60 系列 13.2 Timer2 中断 13.3 Timer2 也可以产生可选的器件中断。 Timer2 输出信号 (TMR2 与 PR2 匹配时)为 4 位输出计数器 / 后分频器 提供输入。此计数器产生的 TMR2 匹配中断标志位为 TMR2IF (PIR1<1>)。可以通过将 TMR2 匹配中断允 许位 TMR2IE (PIE1<1>)置 1 来允许此中断。 Timer2 输出 TMR2 的不经分频的输出主要用于 CCP 模块,它用作 CCP 模块在 PWM 模式下工作时的时基。 还可选择将 Timer2 用作 MSSP 模块在 SPI 模式下工作 时的移位时钟源。第 19.0节“主控同步串行口(MSSP) 模块”中提供了更多信息。 可以通过后分频控制位 T2OUTPS3:T2OUTPS0 (T2CON<6:3>)在 16 个后分频比值选项 (从 1:1 到 1:16)中选择其一。 图 13-1: TIMER2 框图 4 T2OUTPS3:T2OUTPS0 T2CKPS1:T2CKPS0 TMR2 PR2 比较器 8 8 内部数据总线 名称 TMR2 输出 (至 PWM 或 MSSP) TMR2/PR2 匹配 复位 8 表 13-1: TMR2IF 置 1 2 1:1, 1:4, 1:16 预分频器 FOSC/4 1:1 至 1:16 后分频器 与 TIMER2 作为定时器 / 计数器相关的寄存器 Bit 7 Bit 6 INTCON GIE/GIEH PEIE/GIEL Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP TMR2 T2CON PR2 图注: Timer2 寄存器 — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON 61 60 T2CKPS1 T2CKPS0 60 60 Timer2 周期寄存器 — = 未用,读为 0。 Timer2 模块不使用阴影单元。 DS39762A_CN 第 174 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 14.0 TIMER3 模块 图 14-1 给出了 Timer3 模块的简化框图。图 14-2 给出 了此模块在读写模式下的工作原理框图。 Timer3 定时器 / 计数器模块具有以下特性: Timer3 模块是通过 T3CON 寄存器 (寄存器 14-1)来 控制的。此寄存器还可用作 CCP 和 ECCP 模块的可选 时钟源。更多信息,请参见第 16.1.1 节 “CCP 模块和 定时器资源”。 • 可由软件选择作为 16 位定时器或计数器 • 可读写的 8 位寄存器 (TMR3H 和 TMR3L) • 可选择器件时钟或 Timer1 内部振荡器作为时钟源 (内部或外部) • 溢出时中断 • 可利用 CCP 特殊事件触发模块复位 寄存器 14-1: T3CON:TIMER3 控制寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 RD16:16 位读 / 写模式使能位 1 = 使能 Timer3 通过一次 16 位操作进行寄存器读 / 写 0 = 使能 Timer3 通过两次 8 位操作进行寄存器读 / 写 bit 6,3 T3CCP2:T3CCP1:CCPx 的时钟源 (Timer3 和 Timer1)使能位 11 = Timer3 和 Timer4 作为所有 CCP/ECCP 模块的时钟源 10 = Timer3 和 Timer4 作为 ECCP3、 CCP4 和 CCP5 的时钟源; Timer1 和 Timer2 作为 ECCP1 和 ECCP2 的时钟源 01 = Timer3 和 Timer4 作为 ECCP2、 ECCP3、 CCP4 和 CCP5 的时钟源; Timer1 和 Timer2 作为 ECCP1 的时钟源 00 = Timer1 和 Timer2 作为所有 CCP/ECCP 模块的时钟源 bit 5-4 T3CKPS1:T3CKPS0:Timer3 输入时钟预分频值选择位 11 = 1:8 预分频值 10 = 1:4 预分频值 01 = 1:2 预分频值 00 = 1:1 预分频值 bit 2 T3SYNC:Timer3 外部时钟输入同步选择位 (不适用于器件时钟来自 Timer1/Timer3 的场合。) 当 TMR3CS = 1 时: 1 = 不同步外部时钟输入 0 = 同步外部时钟输入 当 TMR3CS = 0 时: 该位为无关位。当 TMR3CS = 0 时, Timer3 使用内部时钟。 bit 1 TMR3CS:Timer3 时钟源选择位 1 = 使用Timer1振荡器或T13CKI引脚信号作为外部时钟输入(在第一个下降沿之后的上升沿开始计数) 0 = 内部时钟 (FOSC/4) bit 0 TMR3ON:Timer3 使能位 1 = 使能 Timer3 0 = 停止 Timer3 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 175 页 PIC18F97J60 系列 14.1 Timer3 工作原理 工作模式由时钟选择位 TMR3CS(T3CON<1>)决定。 当 TMR3CS 清零 (= 0)时, Timer3 在每个内部指令 周期(FOSC/4)递增。当该位置 1 时,Timer3 在 Timer1 外部时钟输入信号或 Timer1 振荡器输出信号 (如果使 能)的每个上升沿递增。 Timer3 可工作在以下三种模式之一: • 定时器 • 同步计数器 • 异步计数器 图 14-1: 当使能 Timer1 时,RC1/T1OSI 和 RC0/T1OSO/T13CKI 引脚变为输入引脚。这意味着 TRISC<1:0> 的值被忽略 并且这些引脚将读为 0。 TIMER3 框图 Timer1 振荡器 Timer1 时钟输入 1 T1OSO/T13CKI 1 FOSC/4 内部 时钟 T1OSI 预分频器 1, 2, 4, 8 同步检测 0 2 T1OSCEN (1) 0 休眠输入 TMR3CS Timer3 开/关 T3CKPS1:T3CKPS0 T3SYNC TMR3ON ECCPx 特殊事件触发信号 通过 T3CON<6,3> 选择的 ECCPx 注 清零 TMR3 TMR3 高字节 TMR3L 溢出时 TMR3IF 置 1 1:当使能位 T1OSCEN 清零时,将关断振荡器的反相器和反馈电阻以减少功耗。 图 14-2: TIMER3 框图 (16 位读 / 写模式) Timer1 振荡器 Timer1 时钟输入 1 T1OSO/T13CKI 1 FOSC/4 内部 时钟 T1OSI 预分频器 1, 2, 4, 8 同步检测 0 0 2 休眠输入 (1) TMR3CS T1OSCEN T3CKPS1:T3CKPS0 T3SYNC Timer3 开/关 TMR3ON ECCPx 特殊事件触发信号 通过 T3CON<6,3> 选择的 ECCPx 清零 TMR3 TMR3 高字节 TMR3L 8 溢出时 TMR3IF 置 1 读 TMR3L 写 TMR3L 8 8 TMR3H 8 8 内部数据总线 注 1:当使能位 T1OSCEN 清零时,将关断振荡器的反相器和反馈电阻以减少功耗。 DS39762A_CN 第 176 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 14.2 Timer3 16 位读 / 写模式 14.4 Timer3 中断 可将 Timer3 配置为 16 位读写模式 (见图 14-2)。当 RD16 控制位 (T3CON<7>)置 1 时, TMR3H 的地址 被映射到 Timer3 的高字节缓冲寄存器。读 TMR3L 将把 Timer3的高字节的内容装入Timer3高字节缓冲寄存器。 这种方式使用户可以精确地读取 Timer1 的全部 16 位, 而不需要像先读高字节再读低字节那样,由于两次读取 之间可能存在进位,而不得不验证读取的有效性。 TMR3 寄存器对(TMR3H:TMR3L)从 0000h 开始,增 加到 FFFFh,然后溢出返回到 0000h 重新开始计数。如 果允许了 Timer3 中断,则溢出时会产生 Timer3 中断, 并由中断标志位 TMR3IF (PIR2<1>)捕捉。可以通过 对 Timer3 中断允许位 TMR3IE (PIE2<1>)置 1 或清 零来允许或禁止该中断。 写 Timer3 的高字节也必须通过 TMR3H 缓冲寄存器进 行。在写入 TMR3L 的同时,使用 TMR3H 的内容更新 Timer3 的高字节。这样允许用户将 16 位值一次写入 Timer3 的高字节和低字节。 14.5 在该模式下不能直接读写 Timer3 的高字节。所有读写 都必须通过 Timer3 高字节缓冲寄存器来进行。 写入 TMR3H 不会清零 Timer3 预分频器。只有在写 TMR3L 时才会清零该预分频器。 14.3 如果 ECCP1 或 ECCP2 配置为使用 Timer3,并在 比 较 模 式 下 产 生 特 殊 事 件 触 发 信 号 (CCPxM3:CCPxM0 = 1011),该信号将复位 Timer3。 如果使能了 A/D 模块,来自 ECCP2 的触发信号还将启 动 A/D 转换 (更多信息,请参见第 17.2.1 节 “特殊事 件触发器”)。 要使用这一功能,必须将模块配置为定时器或同步计数 器。在这种情况下,CCPRxH:CCPRxL 这对寄存器实际 上变成了 Timer3 的周期寄存器。 使用 Timer1 振荡器作为 Timer3 的 时钟源 Timer1 内部振荡器可用作 Timer3 的时钟源。通过将 T1OSCEN(T1CON<3>)位置 1,可使能 Timer1 振荡 器。要将它用作 Timer3 的时钟源,还必须将 TMR3CS 位置 1。如前文所述,这样做也会将 Timer3 配置为在振 荡器的每个上升沿递增。 如果 Timer3 在异步计数器模式下运行,复位操作可能 不起作用。 如果 Timer3 的写操作和来自 ECCP 模块的特殊事件同 时发生,则写操作优先。 注: 在第 12.0 节 “Timer1 模块”中对 Timer1 振荡器进行 了描述。 表 14-1: 名称 INTCON 使用 ECCP 特殊事件触发信号复位 Timer3 ECCPx 模块产生的特殊事件触发信号不会 将 TMR3IF 中断标志位(PIR2<1>)置 1。 与 TIMER3 作为定时器 / 计数器相关的寄存器 Bit 7 Bit 6 GIE/GIEH PEIE/GIEL Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR2 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF 61 PIE2 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE 61 IPR2 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP 61 TMR3L Timer3 寄存器的低字节 TMR3H Timer3 寄存器的高字节 60 60 T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 60 T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 TMR3CS TMR3ON 60 图注: T3CCP1 T3SYNC — = 未用 (读为 0), r = 保留。 Timer3 模块不使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 177 页 PIC18F97J60 系列 注: DS39762A_CN 第 178 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 15.0 TIMER4 模块 15.1 Timer4 可以作为 CCP 模块在 PWM 模式下的 PWM 时 基。TMR4 寄存器是可读写的,在任何器件复位时都会 被清零。输入时钟(FOSC/4)有三种预分频比,分别是 1:1、 1:4 或 1:16,可通过控制位 T4CKPS1:T4CKPS0 (T4CON<1:0>)选择。 TMR4 的匹配输出通过一个 4 位后分频器 (分频比在 1:1 到 1:16 之间)产生 TMR4 中断,由标志位 TMR4IF (PIR3<3>)表示。 Timer4 模块具有以下特性: • • • • • • 8 位定时器寄存器 (TMR4) 8 位周期寄存器 (PR4) 可读写 (以上两个寄存器) 软件可编程预分频器(分频比为 1:1、1:4 和 1:16) 软件可编程后分频器 (分频比为 1:1 到 1:16) TMR4 与 PR4 匹配时产生中断 预分频和后分频计数器在发生以下事件时均会清零: Timer4 具有一个控制寄存器,如寄存器 15-1 所示。可 以通过清零控制位 TMR4ON (T4CON<2>)关闭 Timer4,以实现功耗最小。此寄存器还控制对 Timer4 的预分频比和后分频比的选择。图 15-1 所示为 Timer4 模块的简化框图。 寄存器 15-1: Timer4 工作原理 • 对 TMR4 寄存器进行写操作 • 对 T4CON 寄存器进行写操作 • 任何器件复位 (上电复位、 MCLR 复位、看门狗 定时器复位或欠压复位) 写 T4CON 时, TMR4 不会清零。 T4CON:TIMER4 控制寄存器 U-0 R/W-0 R/W-0 — T4OUTPS3 T4OUTPS2 R/W-0 R/W-0 T4OUTPS1 T4OUTPS0 R/W-0 R/W-0 R/W-0 TMR4ON T4CKPS1 T4CKPS0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 未用:读为 0 bit 6-3 T4OUTPS3:T4OUTPS0:Timer4 输出后分频比选择位 0000 = 1:1 后分频比 0001 = 1:2 后分频比 • • • 1111 = 1:16 后分频比 bit 2 TMR4ON:Timer4 使能位 1 = 使能 Timer4 0 = 关闭 Timer4 bit 1-0 T4CKPS1:T4CKPS0:Timer4 时钟预分频值选择位 00 = 预分频值为 1 01 = 预分频值为 4 1x = 预分频值为 16 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 179 页 PIC18F97J60 系列 15.2 Timer4 中断 15.3 Timer4 模块具有一个 8 位周期寄存器 PR4,该寄存器 是可读写的。 Timer4 从 00h 开始递增,直到与 PR4 匹 配为止,然后在下一个计数周期复位为00h。在复位时, PR4 寄存器初始化为 FFh。 图 15-1: TMR4 的输出 TMR4 的输出 (在通过后分频器之前)只能用作 CCP 模块的 PWM 时基。它不可以像 Timer2 输出一样用作 MSSP 模块的波特率时钟。 TIMER4 框图 4 T4OUTPS3:T4OUTPS0 TMR4IF 置 1 2 T4CKPS1:T4CKPS0 TMR4 输出 (至 PWM) 1:1, 1:4, 1:16 预分频器 FOSC/4 1:1 至 1:16 后分频器 TMR4/PR4 匹配 复位 PR4 比较器 TMR4 8 8 8 内部数据总线 表 15-1: 名称 与 TIMER4 作为定时器 / 计数器相关的寄存器 Bit 7 Bit 6 INTCON GIE/GIEH PEIE/GIEL Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 IPR3 SSP2IP BCL2IP RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 PIR3 SSP2IF BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 TMR4 Timer4 寄存器 — T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 62 PR4 Timer4 周期寄存器 62 图注: — = 未用,读为 0。 Timer4 模块不使用阴影单元。 T4CON DS39762A_CN 第 180 页 超前信息 62 2006 Microchip Technology Inc. PIC18F97J60 系列 16.0 捕捉 / 比较 /PWM (CCP)模块 PIC18F97J60系列器件都有5个CCP(捕捉/比较/PWM) 模块,其中两个模块 (CCP4 和 CCP5)实现标准的捕 捉、比较和脉宽调制 (Pulse-Width Modulation, PWM) 模 式,在 本 节 中 将 讨 论 这 两 个 模 块。另 外 三 个 模 块 (ECCP1、ECCP2 和 ECCP3)实现标准的捕捉和比较模 式,以及增强型 PWM 模式。这些在第 17.0 节 “增强型 捕捉 / 比较 /PWM (ECCP)模块”中讨论。 在本章中描述的捕捉和比较操作适用于所有标准和增强 型 CCP 模块。第 16.4 节“PWM 模式”中描述的 PWM 模式的操作只适用于 CCP4 和 CCP5。 注: 每个 CCP/ECCP 模块包含一个 16 位寄存器,可用作 16 位捕捉寄存器、16 位比较寄存器或 PWM 主 / 从占空比 寄存器。为避免混淆,以下所有的 CCP 模块操作描述 均针对 CCP4,但同样适用于 CCP5。 寄存器 16-1: 在本节和第 17.0 节“增强型捕捉 / 比较 /PWM (ECCP)模块”中,在提到与特定 CCP 模块 相关的寄存器和位名称时,一般会使用 “x” 或 “y”代 替 特 定 的 模 块 编 号。因 此, “CCPxCON”可能指 ECCP1、 ECCP2、 ECCP3、 CCP4 或 CCP5 的控制寄存器。 CCPxCON:CCPx 控制寄存器 (CCP4 和 CCP5) U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 — — DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7-6 未用:读为 0 bit 5-4 DCxB1:DCxB0:CCPx 模块 PWM 占空比 bit 1 和 bit 0 捕捉模式: 未使用。 比较模式: 未使用。 PWM 模式: 这两位是10位PWM占空比的低2位(bit 1和bit 0)。占空比的高8位(DCxB9:DCxB2)在CCPRxL中。 bit 3-0 CCPxM3:CCPxM0:CCPx 模块模式选择位 0000 = 禁止捕捉 / 比较 /PWM (复位 CCPx 模块) 0001 = 保留 0010 = 比较模式,匹配时输出电平翻转 (CCPxIF 位置 1) 0011 = 保留 0100 = 捕捉模式,每个下降沿 0101 = 捕捉模式,每个上升沿 0110 = 捕捉模式,每 4 个上升沿 0111 = 捕捉模式,每 16 个上升沿 1000 = 比较模式:初始化 CCPx 引脚为低电平,比较匹配时强制 CCPx 引脚为高电平 (CCPxIF 位置 1) 1001 = 比较模式:初始化 CCPx 引脚为高电平,比较匹配时强制 CCPx 引脚为低电平 (CCPxIF 位置 1) 1010 = 比较模式,比较匹配时产生软件中断 (CCPxIF 位置 1, CCPx 引脚反映 I/O 状态) 1011 = 保留 11xx = PWM 模式 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 181 页 PIC18F97J60 系列 16.1 CCP 模块配置 每个捕捉 / 比较 /PWM 模块均与一个控制寄存器(通常 为 CCPxCON)和一个数据寄存器(CCPRx)相对应。 数据寄存器由两个 8 位寄存器组成:CCPRxL (低字 节)和CCPRxH(高字节)。所有寄存器都是可读写的。 16.1.1 16.1.2 CCP 模块和定时器资源 CCP/ECCP 模块根据选定的模式使用 Timer1、Timer2、 Timer3 或 Timer4。 Timer1 和 Timer3 适用于工作在捕 捉或比较模式下的模块,而 Timer2 和 Timer4 适用于工 作在 PWM 模式下的模块。 表 16-1: CCP 模式——定时器资源 CCP 模式 定时器资源 捕捉 比较 PWM Timer1 或 Timer3 Timer1 或 Timer3 Timer2 或 Timer4 图 16-1: 将某个特定的定时器分配给哪个模块是由 T3CON 寄存 器 (第 175 页的寄存器 14-1)中的 “Timer-to-CCP” 使能位决定的。根据选定的配置,至多同时可以有 4 个 定时器有效,具有相同配置 (捕捉 / 比较或 PWM)的 模块共用定时器资源。图 16-1 给出了可能的配置情况。 ECCP2 引脚分配 根据器件配置, ECCP2 的引脚分配 (捕捉输入、比较 和 PWM 输出)可以更改。CCP2MX 配置位决定哪个引 脚将与 ECCP2 复用。默认情况下,ECCP2 引脚被分配 给 RC1 (CCP2MX = 1)。如果该配置位被清零,在单 片机模式下, ECCP2 将与 RE7 (80 引脚和 100 引脚 器件)复用;在扩展单片机模式下,将与 RB3(100 引 脚器件)复用。 改变 ECCP2 的引脚分配不会自动更改该端口引脚的配 置。无 论 其 引 脚 的 分 配 如 何,用 户 必 须 始 终 确 保 与 ECCP2 操作相对应的 TRIS 寄存器配置正确。 CCP 和定时器互连配置 T3CCP<2:1> = 00 T3CCP<2:1> = 01 T3CCP<2:1> = 10 T3CCP<2:1> = 11 TMR1 TMR1 TMR1 TMR1 TMR3 TMR3 ECCP1 ECCP1 TMR3 TMR3 ECCP1 ECCP1 ECCP2 ECCP2 ECCP2 ECCP2 ECCP3 ECCP3 ECCP3 ECCP3 CCP4 CCP4 CCP4 CCP4 CCP5 CCP5 CCP5 CCP5 TMR2 TMR4 Timer1 用于所有 CCP 模块的 所有捕捉和比较操作。Timer2 用于所有 CCP 模块的 PWM 操 作。模块可以共用这两个定时 器资源中的任何一个作为公共 时基。 Timer3 和 Timer4 不可用。 DS39762A_CN 第 182 页 TMR2 TMR4 TMR2 Timer1 和 Timer2 仅 用于 ECCP1 的捕捉和比较或 PWM 操作 (取决于选定的模式)。 所有其他模块使用 Timer3 或 Timer4。如果模块处于捕捉 / 比较或 PWM 模式,模块可以 共用这两个定时器资源中的任 何一个作为公共时基。 TMR4 Timer1 和 Timer2 仅 用于 ECCP1 和 ECCP2 的捕捉和比 较或 PWM 操作 (取决于为每 个模块选定的模式) 。如果这 两个模块都处于捕捉 / 比较或 PWM 模式,则它们可以使用 同一个定时器作为公共时基。 TMR2 TMR4 Timer3 用于所有 CCP 模块的 所有捕捉和比较操作。Timer4 用于所有 CCP 模块的 PWM 操 作。模块可以共用这两个定时 器资源中的任何一个作为公共 时基。 Timer1 和 Timer2 不可用。 其 他 模块 使 用 Timer3 或 Timer4。如果模块处于捕捉 / 比较或 PWM 模式,模块可以 共用这两个定时器资源中的任 何一个作为公共时基。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 16.2 16.2.3 捕捉模式 软件中断 在捕捉模式下,当相应的 CCPx 引脚发生以下事件时, CCPRxH:CCPRxL 寄存器对捕捉 TMR1 或 TMR3 寄存 器的 16 位值。事件定义为下列情况之一: 当捕捉模式改变时,可能会产生错误的捕捉中断。用户 应该保持 CCPxIE 中断允许位清零以避免错误中断。应 在工作模式改变后清零中断标志位 CCPxIF。 • • • • 16.2.4 每个下降沿 每个上升沿 每 4 个上升沿 每 16 个上升沿 在捕捉模式下有 4 种预分频比设置。它们作为工作模式 的一部分由模式选择位(CCPxM3:CCPxM0)选择。只 要关闭 CCP 模块或禁止捕捉模式,预分频计数器就会 被清零。这意味着任何复位都会将预分频计数器清零。 事件由模式选择位 CCPxM3:CCPxM0 (CCPxCON<3:0>) 选择。当完成一次捕捉时,中断请求标志位 CCPxIF 置 1 ; 它必须用软件清零。如果在读取寄存器 CCPRx 值之前发生 了另一次捕捉,那么原来的捕捉值会被新的捕捉值覆盖。 16.2.1 在两个预分频比之间切换会产生中断。而且,预分频计 数器不会被清零;因此第一次捕捉可能来自于一个非零 的预分频器。例 16-1 给出了切换捕捉预分频比时建议 采用的方法。这个示例使预分频计数器清零且不会产生 错误中断。 CCP 引脚配置 在捕捉模式下,应通过将相应的 TRIS 方向位置 1 将 CCPx 引脚配置为输入。 注: 16.2.2 例 16-1: 如果 RG4/CCP5/P1D 引脚被配置为输出, 对该端口的写操作可能产生捕捉条件。 CLRF MOVLW TIMER1/TIMER3 模式选择 用于捕捉功能的定时器(Timer1 和 / 或 Timer3)必须运 行在定时器模式或同步计数器模式下。在异步计数器模 式下,无法进行捕捉操作。可在 T3CON 寄存器中选择用 于每个 CCP 模块的定时器(见第 16.1.1 节“CCP 模块 和定时器资源”)。 图 16-2: CCP 预分频器 MOVWF 改变捕捉预分频比 (以 CCP5 为例) CCP5CON ; Turn CCP module off NEW_CAPT_PS ; Load WREG with the ; new prescaler mode ; value and CCP ON CCP5CON ; Load CCP5CON with ; this value 捕捉模式工作原理框图 CCP4IF 置 1 T3CCP2 CCP4 引脚 预分频器 ÷ 1, 4, 16 和 边沿检测 Q1:Q4 CCP5CON<3:0> 4 4 CCPR4L TMR1 使能 TMR1H TMR1L TMR3H TMR3L CCP5IF 置 1 4 T3CCP1 T3CCP2 CCP5 引脚 预分频器 ÷ 1, 4, 16 TMR3L TMR3 使能 CCPR4H T3CCP2 CCP4CON<3:0> TMR3H 和 边沿检测 TMR3 使能 CCPR5H CCPR5L TMR1 使能 T3CCP2 T3CCP1 2006 Microchip Technology Inc. 超前信息 TMR1H TMR1L DS39762A_CN 第 183 页 PIC18F97J60 系列 16.3 比较模式 清零 CCP5CON 寄存器会将 RG4 比较输出 锁存器 (取决于器件配置)强制为默认的 低电平。这不是 PORTB 或 PORTC I/O 数 据锁存器。 注: 在比较模式下,16 位 CCPRx 寄存器的值不断与 TMR1 或 TMR3 寄存器对的值作比较。当两者匹配时, CCPx 引脚将会: • 驱动为高电平 • 驱动为低电平 • 电平翻转 (高电平变为低电平或低电平变为高电 平) • 保持不变 (即反映 I/O 锁存器的状态) 16.3.2 如果 CCP 模块使用比较功能,则 Timer1 和 / 或 Timer3 必须运行在定时器模式或同步计数器模式下。在异步计 数器模式下,可能无法进行比较操作。 引脚动作取决于模式选择位 (CCPxM3:CCPxM0)的 值。同时,中断标志位 CCPxIF 置 1。 16.3.1 TIMER1/TIMER3 模式选择 CCP 引脚配置 16.3.3 软件中断模式 当选择了“生成软件中断模式”时(CCPxM3:CCPxM0 = 1010),相应的 CCPx 引脚不受影响。如果中断被允 许,将仅产生 CCP 中断并将 CCPxIE 位置 1。 用户必须通过将相应的 TRIS 位清零,将 CCPx 引脚配 置为输出。 图 16-3: 比较模式工作原理框图 CCPR4H CCP4IF 置 1 CCPR4L CCP4 引脚 比较器 输出 逻辑 比较 匹配 S Q R TRIS 输出使能 4 CCP4CON<3:0> 0 TMR1H TMR1L 0 1 TMR3H TMR3L 1 T3CCP1 T3CCP2 CCP5IF 置 1 比较器 CCPR5H 比较 匹配 CCP5 引脚 输出 逻辑 4 CCPR5L S Q R TRIS 输出使能 CCP5CON<3:0> DS39762A_CN 第 184 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 16-2: 名称 INTCON RCON 与捕捉、比较、 TIMER1 和 TIMER3 相关的寄存器 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 — RI TO PD POR BOR 60 Bit 7 Bit 6 IPEN Bit 5 — PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR2 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF 61 PIE2 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE 61 IPR2 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP 61 PIR3 SSP2IF BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 TRISG TRISG7 TRISG6 TRISG5 TRISG4 TRISG3(1) TRISG2 TRISG1 TRISG0 61 TMR1L Timer1 寄存器的低字节 60 TMR1H Timer1 寄存器的高字节 60 T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 60 TMR3H Timer3 寄存器的高字节 60 TMR3L Timer3 寄存器的低字节 60 T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 60 CCPR4L 捕捉 / 比较 /PWM 寄存器 4 的低字节 62 CCPR4H 捕捉 / 比较 /PWM 寄存器 4 的高字节 62 CCPR5L 捕捉 / 比较 /PWM 寄存器 5 的低字节 63 CCPR5H 捕捉 / 比较 /PWM 寄存器 5 的高字节 — — DC4B1 DC4B0 CCP4CON CCP5CON — — DC5B1 DC5B0 63 CCP4M3 CCP4M2 CCP4M1 CCP4M0 63 CCP5M3 CCP5M2 CCP5M1 CCP5M0 63 图注: — = 未用 (读为 0), r = 保留。捕捉 / 比较、 Timer1 或 Timer3 不使用阴影单元。 注 1: 该位仅在 80 引脚和 100 引脚器件中可用;在其他器件中未实现且读为 0。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 185 页 PIC18F97J60 系列 16.4 PWM 模式 16.4.1 在脉宽调制 (PWM)模式下, CCPx 引脚会产生高达 10 位分辨率的 PWM 输出信号。由于 CCP4 和 CCP5 引脚与 PORTG 数据 锁 存 器复 用,必 须清 零 相应的 TRISG 位才能使 CCP4 或 CCP5 引脚成为输出引脚。 清零 CCP4CON 或 CCP5CON 寄存器会将 RG3 或 RG4 比较输出锁存器 (取决于器 件 配 置)强 制 为 默 认 的 低 电 平。这 不 是 PORTG 的 I/O 数据锁存器。 注: 图 16-4 给出了 PWM 模式下 CCP 模块的简化框图。 关于如何设置 CCP 模块使之工作于 PWM 模式的详细 步骤,请参见第 16.4.3 节 “设置 PWM 工作模式”。 图 16-4: 简化的 PWM 框图 占空比寄存器 9 可通过写 PR2 (PR4)寄存器指定 PWM 周期。 PWM 周期可由公式 16-1 计算: 公式 16-1: PWM 周期 = 当 TMR2 (TMR4)中的值与 PR2 (PR4)中的值相等 时,在下一个递增周期将发生以下 3 个事件: • TMR2 (TMR4)被清零 • CCPx 引脚置 1(例外:如果 PWM 占空比 = 0%, CCPx 引脚将不会置 1) • PWM 占空比从 CCPRxL 锁存到 CCPRxH 注: CCP1CON<5:4> 锁存 占空比 (1) CCPR1H S 比较器 16.4.2 Q R 复位 ECCP1 引脚 TMR2 TMR2 = PR2 匹配 2 个 LSb 已锁存 来自 Q 时钟 比较器 PR2 注 PWM 占空比 通过写 CCPRxL 寄存器和 CCPxCON<5:4> 位来指定 PWM 占空比。分辨率最高可达 10 位。CCPRxL 包含占 空比的高 8 位而 CCPxCON<5:4> 包含低 2 位。这 10 位 值由 CCPRxL:CCPxCON<5:4> 表示。公式 16-2 用于 计算 PWM 的占空比时间。 PWM 占空比 = 1: 占空比寄存器的两个 LSb 由作为该模块一部分的 2 位 锁存器保留。物理上是和 CCPRx 寄存器分离的。 PWM 输出 (图 16-5)有一个时基 (周期)和一段输 出保持为高电平的时间(占空比)。PWM 的频率是周 期的倒数 (1/ 周期)。 图 16-5: 确定PWM频率时不会用到Timer2和Timer4 后分频器 (见第 13.0 节 “Timer2 模块” 和第 15.0 节 “Timer4 模块”)。后分频器 可用不同于PWM 输出频率的频率进行数据 更新。 公式 16-2: TRIS 输出使能 CCPx 引脚置 1 [(PR2) + 1] • 4 • TOSC • (TMR2 预分频值 ) PWM 频率定义为 1/[PWM 周期 ]。 0 CCPR1L PWM 周期 (CCPRXL:CCPXCON<5:4>) • TOSC • (TMR2 预分频值 ) 可以在任何时候写入 CCPRxL 和 CCPxCON<5:4>,但 是在 PR2 (PR4)和 TMR2 (TMR4)发生匹配 (即 周期结束)前占空比值不会被锁存到 CCPRxH 中。在 PWM 模式下, CCPRxH 是只读寄存器。 PWM 输出 周期 占空比 TMR2(TMR4)= PR2(PR4) TMR2(TMR4)= 占空比 TMR2(TMR4)= PR2(TMR4) DS39762A_CN 第 186 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 CCPRxH 寄存器和一个 2 位的内部锁存器用于给 PWM 占空比提供双重缓冲。这种双重缓冲结构非常重要,它 可以避免在 PWM 操作中产生毛刺。 16.4.3 当配置 CCP 模块使之工作于 PWM 模式时,应遵循以 下步骤: 当 CCPRxH 和 2 位锁存值与 TMR2(TMR4)(以及内 部 2 位 Q 时钟或 TMR2(TMR4)预分频值的 2 位)匹 配时, CCPx 引脚被清零。 1. 2. 在给定 PWM 频率的情况下,最大的 PWM 分辨率(位) 由公式 16-3 给出: 3. 公式 16-3: 4. PWM 分辨率(最大)= 注: 表 16-3: ( FOSC log FPWM log(2) ) 5. 位 设置 PWM 工作模式 通过写 PR2 (PR4)寄存器设置 PWM 周期。 通过写 CCPRxL 寄存器和 CCPxCON<5:4> 位设 置 PWM 占空比。 通过清零相应的 TRIS 位将 CCPx 引脚设为输出 引脚。 设置 TMR2 (TMR4)预分频值并随后通过写 T2CON (T4CON)使能 Timer2 (Timer4)。 配置 CCPx 模块使之工作于 PWM 模式。 如果 PWM 占空比的值大于 PWM 周期,则 CCPx 引脚将不会被清零。 40 MHz 时 PWM 频率和分辨率示例 PWM 频率 定时器预分频值 (1、 4 和 16) PR2 值 最大分辨率 (位) 2006 Microchip Technology Inc. 2.44 kHz 9.77 kHz 39.06 kHz 156.25 kHz 312.50 kHz 416.67 kHz 16 4 1 1 1 1 FFh FFh FFh 3Fh 1Fh 17h 10 10 10 8 7 6.58 超前信息 DS39762A_CN 第 187 页 PIC18F97J60 系列 表 16-4: 名称 INTCON RCON 与 PWM、 TIMER2 和 TIMER4 相关的寄存器 Bit 7 Bit 6 GIE/GIEH PEIE/GIEL — IPEN Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 — RI TO PD POR BOR 60 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR3 SSP2IF BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 TRISG4 TRISG3(1) TRISG2 TRISG1 TRISG0 TRISG TRISG7 TRISG6 TRISG5 61 TMR2 Timer2 寄存器 60 PR2 Timer2 周期寄存器 — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 60 T2CON TMR4 Timer4 寄存器 62 PR4 Timer4 周期寄存器 — T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 62 CCPR4L 捕捉 / 比较 /PWM 寄存器 4 的低字节 62 CCPR4H 捕捉 / 比较 /PWM 寄存器 4 的高字节 62 CCPR5L 捕捉 / 比较 /PWM 寄存器 5 的低字节 63 CCPR5H 捕捉 / 比较 /PWM 寄存器 5 的高字节 — — DC4B1 DC4B0 T4CON CCP4CON CCP5CON — — DC5B1 DC5B0 60 62 63 CCP4M3 CCP4M2 CCP4M1 CCP4M0 63 CCP5M3 CCP5M2 CCP5M1 CCP5M0 63 图注: — = 未用 (读为 0)。 PWM、 Timer2 或 Timer4 不使用阴影单元。 注 1: 该位仅在 80 引脚和 100 引脚器件中可用;在其他器件中未实现且读为 0。 DS39762A_CN 第 188 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 17.0 增强型捕捉 / 比较 /PWM (ECCP)模块 在 PIC18F97J60 系列器件中,有 3 个 CCP 模块实现为 具有增强型 PWM 功能的标准 CCP 模块。这些功能包 括 2 或 4 路输出通道、用户可选极性、死区控制和自动 关闭与重启。第 17.4 节 “增强型 PWM 模式”将详细 讨论增强功能。ECCP 模块的捕捉、比较和单输出 PWM 功能与标准 CCP 模块的相同。 寄存器 17-1: 增强型 CCP 模块的控制寄存器如寄存器 17-1 所示。它 与 CCP4CON/CCP5CON 寄存器的不同之处在于,它 有两个最高有效位用来控制 PWM 功能。 除了通过增强型 CCPxCON 寄存器提供的扩展模式外, 每个 ECCP 模块还有两个与增强型 PWM 操作和自动关 闭功能相关的寄存器。它们是: • ECCPxDEL (死区延时) • ECCPxAS (自动关闭配置) CCPxCON:增强型 CCPx 控制寄存器 (ECCP1/ECCP2/ECCP3) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PxM1 PxM0 DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7-6 PxM1:PxM0:增强型 PWM 输出配置位 如果 CCPxM3:CCPxM2 = 00、 01 和 10: xx = PxA 配置为捕捉 / 比较输入 / 输出; PxB、 PxC 和 PxD 配置为端口引脚 如果 CCPxM3:CCPxM2 = 11: 00 = 单输出:PxA 被调制; PxB、 PxC 和 PxD 配置为端口引脚 01 = 全桥正向输出:P1D 被调制; P1A 有效; P1B 和 P1C 无效 10 = 半桥输出:P1A 和 P1B 被调制,带有死区控制; P1C 和 P1D 配置为端口引脚 11 = 全桥反向输出:P1B 被调制; P1C 有效; P1A 和 P1D 无效 bit 5-4 DCxB1:DCxB0:ECCPx 模块 PWM 占空比 bit 1 和 bit 0 捕捉模式: 未使用。 比较模式: 未使用。 PWM 模式: 这些位是 10 位 PWM 占空比的低 2 位。占空比的高 8 位在 CCPRxL 中。 bit 3-0 CCPxM3:CCPxM0:ECCPx 模块模式选择位 0000 = 禁止捕捉 / 比较 /PWM (复位 ECCPx 模块) 0001 = 保留 0010 = 比较模式:匹配时翻转输出 0011 = 捕捉模式 0100 = 捕捉模式,每个下降沿 0101 = 捕捉模式,每个上升沿 0110 = 捕捉模式,每 4 个上升沿 0111 = 捕捉模式,每 16 个上升沿 1000 = 比较模式:初始化 ECCPx 引脚为低电平;比较匹配时输出置 1 (CCPxIF 置 1) 1001 = 比较模式:初始化 ECCPx 引脚为高电平;比较匹配时输出清零 (CCPxIF 置 1) 1010 = 比较模式:仅产生软件中断; ECCPx 引脚回复到 I/O 状态 1011 = 比较模式:触发特殊事件 (ECCPx 复位 TMR1 或 TMR3, CCPxIF 位置 1,如果使能了 A/D 模块, ECCP2 触发器还将启动 A/D 转换) (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: 只在 ECCP1 和 ECCP2 上实现;对于 ECCP3,它和 1010 相同。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 189 页 PIC18F97J60 系列 17.1 ECCP 输出和配置 17.1.2 取决于所选定的工作模式,每个增强型 CCP 模块最多 有四路 PWM 输出。这些指定为 PxA 到 PxD 的输出, 可以与不同的 I/O 引脚复用。某些 ECCPx 引脚分配是 不变的,其他引脚分配则根据器件配置而变化。对于那 些可变引脚,控制位是: • CCP2MX 配置位(仅限 80 引脚和 100 引脚器件) • ECCPMX 配置位(仅限 80 引脚和 100 引脚器件) • 设置程序存储器操作模式的 EMB 配置位 (仅限 100 引脚器件) 表 17-1、表 17-2 和表 17-3 中总结了增强型 CCP 模块 的引脚分配。若要将 I/O 引脚配置为 PWM 输出,必须 通过设置PxMx和CCPxMx位(分别是CCPxCON<7:6> 和 <3:0>)来选择适当的 PWM 模式。相应端口引脚的 相应 TRIS 方向位也必须设置为输出。 17.1.1 ECCP1/ECCP3 输出和程序存储器模式 在 100 引脚器件中,使用扩展单片机模式会对增强型 PWM 模式下的 ECCP1 和 ECCP3 引脚产生间接影响。 默认情况下, PWM 输出 P1B/P1C 和 P3B/P3C 将与 PORTE 引脚以及外部存储器总线的高位字节复用。总 线在扩展单片机模式下工作时,它将改写增强型CCP输 出,使它们不可用。因此,器件处于扩展单片机模式和 默认引脚配置时,ECCP1 和 ECCP3 只能在兼容的(单 输出) PWM 模式下使用。 该配置有一种例外情况,即为外部总线选择 12 位地址 宽度时 (EMB1:EMB0 配置位 = 10)。在这种情况下, 即使外部总线有效,PORTE 的高位引脚仍用作数字 I/O。 P1B/P1C 和 P3B/P3C 仍可用作增强型 PWM 输出。 ECCP2 输出和程序存储器模式 对于 100 引脚器件,器件的程序存储器模式(第 5.1.3 节 “PIC18F9XJ60/9XJ65 程序存储器模式”)也会影响该 模块的引脚复用。 ECCP2 输入 / 输出 (ECCP2/P2A)可以与 3 个引脚之 一复用。所有器件的默认分配 (CCP2MX 配置位置 1) 是 RC1。清零 CCP2MX 会将 ECCP2/P2A 重新分配到 RE7。 100 引脚器件有另外一个选项。这些器件在单片机模式 下工作时,上述的复用选项仍适用。在扩展单片机模式 下,清零 CCP2MX 会将 ECCP2/P2A 重新分配到 RB3。 17.1.3 CCP4 和 CCP5 与 ECCP1 和 ECCP3 一起使用 只有 ECCP2 模块有 4 个专用输出引脚可用。假如不需 要那些引脚上的 I/O 端口或其他复用功能,则它们在使 用时就不会牵扯到任何其他 CCP 模块。 另一方面,ECCP1 和 ECCP3 只有 3 个专用输出引脚: ECCPx/PxA、PxB 和 PxC。当这些模块配置为四 PWM 模式时,通常用于 CCP4 或 CCP5 的引脚就变为 ECCP3 或 ECCP1 的 PxD 输出引脚。CCP4 和 CCP5 模块仍正 常工作,但其输出会被改写。 17.1.4 ECCP 模块和定时器资源 与标准的 CCP 模块一样, ECCP 模块根据选定的模式 使用 Timer1、Timer2、Timer3 或 Timer4。该模块在捕 捉或比较模式下使用 Timer1 和 Timer3,而在 PWM 模 式下使用 Timer2 和 Timer4。第 16.1.1 节 “CCP 模块 和定时器资源”给出了定时器资源的更多详细信息。 如果在扩展单片机模式中应用要求使用更多的 PWM 输 出,可以将 P1B/P1C 和 P3B/P3C 输出重新分配到 PORTH 的高位。这是通过将 ECCPMX 配置位清零实现 的。 DS39762A_CN 第 190 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 17-1: ECCP1 的引脚配置 ECCP 模式 兼容的 CCP CCP1CON 配置 RC2 RD0 或 RE6(1) RE5 RG4 RH7(2) 64 引脚器件; 80 引脚器件, ECCPMX = 1 ; 100 引脚器件, ECCPMX = 1,单片机模式或扩展单片机模式, 12 位地址宽度: RD0/RE6 RE5 RG4/CCP5 RH7/AN15 00xx 11xx ECCP1 RH6(2) RH6/AN14 双 PWM 10xx 11xx P1A P1B RE5 RG4/CCP5 RH7/AN15 RH6/AN14 四 PWM x1xx 11xx P1A P1B P1C P1D RH7/AN15 RH6/AN14 兼容的 CCP 80 引脚器件, ECCPMX = 0 ; 100 引脚器件, ECCPMX = 0,所有程序存储器模式: 00xx 11xx ECCP1 RD0/RE6 RE5/AD13 RG4/CCP5 RH7/AN15 RH6/AN14 双 PWM 四 PWM (3) 兼容的 CCP 图注: 注 1: 2: 3: 10xx 11xx P1A RD0/RE6 RE5/AD13 RG4/CCP5 P1B RH6/AN14 x1xx 11xx P1A RD0/RE6 RE5/AD13 P1D P1B P1C 100 引脚器件, ECCPMX = 1,扩展单片机模式, 16 位或 20 位地址宽度: RD0/RE6 RE5/AD13 RG4/CCP5 RH7/AN15 00xx 11xx ECCP1 RH6/AN14 x = 无关位, N/A = 不可用。阴影单元表示在给定模式下 ECCP1 不使用的引脚分配。 P1B 与 64 引脚器件上的 RD0、 80 引脚和 100 引脚器件上的 RE6 复用。 64 引脚器件上不提供这些引脚选项。 ECCP1 处于四 PWM 模式时, CCP5 引脚的输出被 P1D 改写;其他模式下, CCP5 完全正常工作。 表 17-2: ECCP2 的引脚配置 ECCP 模式 CCP2CON 配置 RB3 RC1 RE7 RE2 RE1 RE0 所有器件, CCP2MX = 1,所有程序存储器模式: RB3/INT3 ECCP2 RE7 RE2 兼容的 CCP 00xx 11xx RE1 RE0 双 PWM 10xx 11xx RB3/INT3 P2A RE7 P2B RE1 RE0 四 PWM x1xx 11xx RB3/INT3 P2A RE7 P2B P2C P2D 兼容的 CCP 80 引脚和 100 引脚器件, CCP2MX = 0,单片机模式: 00xx 11xx RB3/INT3 RC1/T1OS1 ECCP2 RE2 RE1 RE0 双 PWM 10xx 11xx RB3/INT3 RC1/T1OS1 P2A P2B RE1 RE0 四 PWM x1xx 11xx RB3/INT3 RC1/T1OS1 P2A P2B P2C P2D 兼容的 CCP 00xx 11xx ECCP2 RC1/T1OS1 RE7/AD15 RE2/CS RE1/WR RE0/RD 双 PWM 10xx 11xx P2A RC1/T1OS1 RE7/AD15 P2B RE1/WR RE0/RD 四 PWM x1xx 11xx P2A RC1/T1OS1 RE7/AD15 P2B P2C P2D 100 引脚器件, CCP2MX = 0,扩展单片机模式: 图注: x = 无关位。阴影单元表示在给定模式下 ECCP2 不使用的引脚分配。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 191 页 PIC18F97J60 系列 表 17-3: ECCP3 的引脚配置 ECCP 模式 CCP3CON 配置 RD1 或 RG0(1) RE4 RD2 或 RG3(1) RE3 64 引脚器件; 80 引脚器件, ECCPMX = 1 ; 100 引脚器件, ECCPMX = 1,单片机模式: RE4 RE3 RD2/RG3 ECCP3 RH5(2) RH4(2) 兼容的 CCP 00xx 11xx RH5/AN13 RH4/AN12 双 PWM 10xx 11xx P3A P3B RE3 RD2/RG3 RH5/AN13 RH4/AN12 四 PWM x1xx 11xx P3A P3B P3C P3D RH5/AN13 RH4/AN12 兼容的 CCP 80 引脚器件, ECCPMX = 0 ; 100 引脚器件, ECCPMX = 0,所有程序存储器模式: 00xx 11xx ECCP3 RE6/AD14 RE5/AD13 RD2/RG3 RH5/AN13 RH4/AN12 双 PWM 10xx 11xx P3A RE6/AD14 RE5/AD13 RD2/RG3 P3B RH4/AN12 x1xx 11xx P3A RE6/AD14 RE5/AD13 P3D P3B P3C 四 PWM (3) 兼容的 CCP 100 引脚器件, ECCPMX = 1,扩展单片机模式, 12 位地址宽度: RE4/AD12 RE3/AD11 RD2/RG3 RH5/AN13 00xx 11xx ECCP3 双 PWM 10xx 11xx RH5/AN13 RH4/AN12 兼容的 CCP 100 引脚器件, ECCPMX = 1,扩展单片机模式, 16 位或 20 位地址宽度: RE6/AD14 RE5/AD13 RD2/RG3 RH5/AN13 00xx 11xx ECCP3 RH4/AN12 P3A P3B RE3/AD11 RD2/RG3 RH4/AN12 图注: x = 无关位, N/A = 不可用。阴影单元表示在给定模式下 ECCP3 不使用的引脚分配。 注 1: ECCP3/P3A 和 CCP4/P3D 与 64 引脚器件上的 RD1 和 RD2、 80 引脚和 100 引脚器件上的 RG0 和 RG3 复 用。 2: 64 引脚器件上不提供这些引脚选项。 3: ECCP3 处于四 PWM 模式时, CCP4 引脚的输出被 P3D 改写;其他模式下, CCP4 完全正常工作。 17.2 捕捉和比较模式 除了下面讨论的特殊事件触发器的操作, ECCP 模块 的捕捉和比较模式与 CCP4 的操作是相同的。这些已 在第 16.2 节 “捕捉模式”和第 16.3 节 “比较模式” 中有详细讨论。 17.2.1 在 ECCP3、CCP4 或 CCP5 上未实现特殊事件触发器。 为这些模块选择特殊事件触发器模式与选择“软件中断 比较”模式 (CCPxM3:CCPxM0 = 1010)具有相同效 果。 注: ECCP2的特殊事件触发信号不会将Timer1 或 Timer3 中断标志位置 1。 特殊事件触发器 ECCP1 和 ECCP2 包含内部硬件触发器,在比较模式 下, CCPRx 寄存器对与选定的定时器匹配时,它会产 生输出。其输出又可用于启动一项操作。该模式可通过 将 CCPxCON<3:0> 设置为 1011 而选中。 ECCP1 或 ECCP2 的特殊事件触发信号会复位 TMR1 或 TMR3 寄存器对,具体复位哪一对寄存器,视当前选 定的定时器资源而定。这使得 CCPRx 寄存器实际上成 为 Timer1 或 Timer3 的 16 位可编程周期寄存器。此外, 如果 A/D 模块被使能, ECCP2 特殊事件触发信号还会 启动一次 A/D 转换。 DS39762A_CN 第 192 页 17.3 标准 PWM 模式 当配置为单输出模式时,ECCP 模块的功能与 PWM 模 式下的标准 CCP 模块相同,如第 16.4 节“PWM 模式” 中所述。有时也称为 “兼容的 CCP”模式,如表 17-1 到 17-3 中所示。 超前信息 注: 当设置单输出 PWM操作时,用户可自由使 用第 16.4.3 节 “设置 PWM 工作模式”或 第 17.4.9 节 “设置 PWM 工作模式”中所 述的任一过程。后者更为通用,并可用于 单输出或多输出 PWM。 2006 Microchip Technology Inc. PIC18F97J60 系列 17.4 增强型 PWM 模式 增强型 PWM 模式为更大范围的控制应用提供了更多的 PWM 输出选项。该模块是标准 CCP 模块的后向兼容版 本,可提供最多四路输出,指定为 PxA 到 PxD。用户还 可以选择信号的极性 (高电平有效或低电平有效)。该 模块的输出模式和极性可通过设置CCPxCON寄存器的 PxM1:PxM0 和 CCPxM3:CCPxM0 位 (分别是 CCPxCON<7:6> 和 CCPxCON<3:0>)配置。 为清楚起见,在本节中针对 ECCP1 和 TMR2 模块概述 了增强型 PWM 模式的操作。控制寄存器名称用 ECCP1 的代表。所有 3 个增强型模块以及 2 个定时器都可以互 换使用,功能相同。可通过选择 T3CON 中正确的位, 为 PWM 操作选择 TMR2 或 TMR4。 图 17-1 给出了 PWM 工作原理的简化框图。所有控制寄 存器都是双重缓冲的,且在新的 PWM 周期(Timer2 复 位时的周期边界)开始时装入,以防止任何输出出现毛 刺。ECCP1 死区延时寄存器 ECCP1DEL 是个例外,它 在占空比边界或者周期边界装入 (取决于哪一个先出 现)。由于缓冲作用,模块会一直等到指定的定时器复 位,而不是立即开始。这意味着增强型 PWM 波形与标 准 PWM 波形并不完全一致,而是偏移一个指令周期 (4 TOSC)。 图 17-1: 像以前一样,用户必须手动将相应的 TRIS 位设置为输 出。 17.4.1 PWM 周期 可通过写 PR2 寄存器指定 PWM 周期。PWM 周期可由 以下公式计算: 公式 17-1: PWM 周期 = [(PR2) + 1] • 4 • TOSC • (TMR2 预分频值 ) PWM 频率定义为 1/[PWM 周期 ]。当 TMR2 中的值与 PR2 中的值相等时,在下一个递增周期将发生以下 3 个 事件: • TMR2 被清零 • ECCP1 引脚置 1 (如果 PWM 占空比 = 0%, ECCP1 引脚不会被置 1) • PWM 占空比从 CCPR1L 复制到 CCPR1H 在确定 PWM 频率时不会用到 Timer2 后分 频器(见第 13.0 节“Timer2 模块”)。后 分频器可用于获得与PWM输出不同频率的 伺服更新速率。 注: 增强型 PWM 模块的简化框图 CCP1CON<5:4> 占空比寄存器 CCP1M<3:0> 4 P1M1<1:0> 2 CCPR1L ECCP1/P1A ECCP1/P1A TRISx<x> CCPR1H(从动) P1B R 比较器 TMR2 Q 输出 控制器 P1C (注 1) P1D 比较器 注: P1C TRISx<x> S PR2 P1B TRISx<x> 清零定时器, 将 ECCP1 引脚置 1 并 锁存 D.C. P1D TRISx<x> ECCP1DEL 8 位定时器 TMR2 寄存器的值与 2 位内部 Q 时钟或预分频器中的 2 位一起构成 10 位时基。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 193 页 PIC18F97J60 系列 17.4.2 PWM 占空比 注: 通过写 CCPR1L 寄存器和 CCP1CON<5:4> 位来指定 PWM 占空比。分辨率最高可达 10 位。CCPR1L 包含高 8 位而 CCP1CON<5:4> 包含低 2 位。这 10 位值由 CCPRxL:CCPxCON<5:4> 表示。PWM 占空比可由以下 公式计算: 公式 17-2: PWM 占空比 = 17.4.3 可以在任何时候写入 CCPR1L 和 CCP1CON<5:4>,但 是在 PR2 和 TMR2 发生匹配 (即周期结束)前占空比 值 不 会 被 复 制 到 CCPR1H 中。在 PWM 模 式 下, CCPR1H 是只读寄存器。 CCPRxH 寄存器和一个 2 位的内部锁存器用于给 PWM 占空比提供双重缓冲。这种双重缓冲结构非常重要,它 可以避免在 PWM 操作中产生毛刺。当 CCPR1H 和 2 位 锁存值与 TMR2,及内部 2 位 Q 时钟或 2 位 TMR2 预 分频 器 值 相 匹 配 时, ECCP1 引 脚 被 清 零。在 给定 PWM 频率的情况下,最大的 PWM 分辨率 (位)由以 下公式给出: PWM 输出配置 CCP1CON 寄存器的 P1M1:P1M0 位可用于设置以下 4 种配置之一: • • • • (CCPR1L:CCP1CON<5:4>) • TOSC • (TMR2 预分频值 ) 如果 PWM 占空比的值大于 PWM 周期,则 ECCP1 引脚将不会被清零。 单输出 半桥输出 全桥输出,正向模式 全桥输出,反向模式 单输出模式也就是在第 17.4 节 “增强型 PWM 模式” 中讨论的标准 PWM 模式。半桥和全桥输出模式在接下 来的章节中详细讨论。 图 17-2 总结了所有配置输出的对应关系。 公式 17-3: PWM 分辨率(最大)= 表 17-4: ( log FOSC FPWM log(2) )位 40 MHz 时 PWM 频率和分辨率示例 PWM 频率 2.44 kHz 9.77 kHz 39.06 kHz 156.25 kHz 312.50 kHz 416.67 kHz 定时器预分频值 (1、 4 和 16) 16 4 1 1 1 1 FFh FFh FFh 3Fh 1Fh 17h 10 10 10 8 7 6.58 PR2 值 最大分辨率 (位) DS39762A_CN 第 194 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 17-2: PWM 输出关系 (高电平有效状态) CCP1CON<7:6> 信号 0 PR2 + 1 占空比 周期 00 (单输出) P1A 调制 延时 (1) 延时 (1) P1A 调制 10 (半桥) P1B 调制 P1A 有效 01 (全桥, 正向) P1B 无效 P1C 无效 P1D 调制 P1A 无效 11 (全桥, 反向) P1B 调制 P1C 有效 P1D 无效 图 17-3: PWM 输出关系 (低电平有效状态) CCP1CON<7:6> 信号 0 PR2 + 1 占空比 周期 00 (单输出) P1A 调制 P1A 调制 10 (半桥) 延时 (1) 延时 (1) P1B 调制 P1A 有效 01 (全桥, 正向) P1B 无效 P1C 无效 P1D 调制 P1A 无效 11 (全桥, 反向) P1B 调制 P1C 有效 P1D 无效 关系: • 周期 = 4 * TOSC * (PR2 + 1) * (TMR2 预分频值 ) • 占空比 = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 预分频值 ) • 延时 = 4 * TOSC * (ECCP1DEL<6:0>) 注 1: 使用 ECCP1DEL 寄存器对死区延时编程 (见第 17.4.6 节 “可编程死区延时”)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 195 页 PIC18F97J60 系列 17.4.4 图 17-4: 半桥模式 在半桥输出模式下,有两个引脚用作输出驱动推挽式负 载。P1A 引脚输出 PWM 输出信号,P1B 引脚输出互补 的 PWM 输出信号 (图 17-4)。这种模式可用于半桥应 用 (如图 17-5 所示),或者用于全桥应用,这种情况 下使用两个 PWM 信号调制 4 个功率开关。 周期 占空比 P1A(2) td 在半桥输出模式下,可编程死区延时可用来防止半桥功 率 器 件 中 流 过 直 通 (Shoot-through)电 流。 PxDC6:PxDC0 位的值对应在输出被驱动为有效之前的 指令周期数。如果这个值比占空比大,则在整个周期中 相应的输出保持为无效。关于死区延时操作的详细信 息,请参见第 17.4.6 节 “可编程死区延时”。 td P1B(2) (1) (1) (1) td = 死区延时 由于 P1A 和 P1B 输出与 PORTC<2> 和 PORTE<6> 数 据锁存是复用的, TRISC<2> 和 TRISE<6> 位必须清 零,将 P1A 和 P1B 配置为输出。 图 17-5: 半桥 PWM 输出 周期 注 1:此时 TMR2 寄存器和 PR2 寄存器的值相等。 2:图中输出信号高电平有效。 半桥输出模式应用示例 V+ 标准半桥电路(“推挽式”) PIC18F97J60 FET 驱动器 + V - P1A 负载 FET 驱动器 + V - P1B V- 驱动全桥电路的半桥输出 V+ PIC18F97J60 FET 驱动器 FET 驱动器 P1A FET 驱动器 负载 FET 驱动器 P1B V- DS39762A_CN 第 196 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 17.4.5 全桥模式 在全桥输出模式下,四个引脚都用作输出;但是,同一 时间只有两个输出同时有效。在正向模式下,引脚 P1A 持续有效,引脚 P1D 被调制。在反向模式下,引脚 P1C 持续有效,引脚 P1B 被调制。如图 17-6 所示。 图 17-6: P1A、P1B、P1C 和 P1D 输出与表 17-1 和表 17-3 中列 出的端口引脚的数据锁存器复用。相应的 TRIS 位必须 清零,以便将P1A、P1B、P1C和P1D引脚配置为输出。 全桥 PWM 输出 正向模式 周期 P1A(2) 占空比 P1B(2) P1C(2) P1D(2) (1) (1) 反向模式 周期 占空比 P1A(2) P1B(2) P1C(2) P1D(2) (1) (1) 注 1 :此时 TMR2 寄存器和 PR2 寄存器的值相等。 注 2 :图中输出信号高电平有效。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 197 页 PIC18F97J60 系列 图 17-7: 全桥应用示例 V+ PIC18F97J60 QC QA FET 驱动器 FET 驱动器 P1A 负载 P1B FET 驱动器 FET 驱动器 P1C QD QB VP1D 17.4.5.1 1. 全桥模式中的方向改变 在全桥输出模式下,CCP1CON 寄存器中的 P1M1 位允 许用户控制正 / 反方向。当应用软件改变这个方向控制 位时,模块将在下一个 PWM 周期改用新的方向。 在当前 PWM 周期结束之前,调制输出(P1B 和 P1D) 进入无效状态,而未调制输出 (P1A 和 P1C)切换到 以相反的方向驱动。这发生在下一个 PWM 周期开始之 前的(4 TOSC * (Timer2预分频比))时间间隔内。Timer2 预分频比可以是 1、 4 或 16,这取决于 T2CKPS 位 (T2CON<1:0>)的值。从切换未调制输出驱动方向到 下一个周期开始这一段时间内,调制输出 (P1B 和 P1D)保持无效。这种关系如图 17-8 所示。 注意在全桥输出模式下, ECCP1 模块不提供任何死区 延时。通常,因为始终只有一个输出被调制,所以不需 要死区延时。然而,有一种情况将需要死区延时。这一 情况发生在以下两个条件同时满足时: 2. 当输出的占空比达到或者接近 100% 时, PWM 输出方向改变。 功率开关(包括功率器件和驱动电路)的关断时 间比开通的时间要长。 在图 17-9所示的示例中,在占空比接近 100%时,PWM 方向从正向改变到反向。在时间 t1,输出 P1A 和 P1D 变为无效,而输出 P1C 变为有效。在这个示例中,因为 功率器件的关断时间比开通时间要长,在 “t”时间内, 功率器件 QC 和 QD 中可能流过直通电流(见图 17-7)。 当 PWM 方向从反向改变到正向时,功率器件 QA 和 QB 也将出现相同的现象。 如果应用中需要在高占空比时改变 PWM 方向,必须满 足以下要求之一: 1. 2. 在改变方向之前的一个 PWM 周期降低 PWM 占 空比。 使用开关驱动电路,使开关管关断的时间比导通 的时间短。 也可能存在其他避免直通电流的方案。 DS39762A_CN 第 198 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 17-8: PWM 方向改变 周期 (1) 信号 周期 P1A(高电平有效) P1B(高电平有效) DC P1C(高电平有效) (注 2) P1D(高电平有效) DC 1: 可在 PWM 周期的任意时刻,写 ECCP1 控制寄存器的方向位 (CCP1CON<7>)。 2: 当改变方向时, P1A 和 P1C 信号在当前 PWM 周期结束之前的 4 TOSC、 16 TOSC 或者 64 TOSC 时间间隔内切换 方向,时间长短取决于 Timer2 预分频值。此时被调制的 P1B 和 P1D 信号是无效的。 注 图 17-9: 在占空比接近 100% 时改变 PWM 方向 正向周期 t1 反向周期 P1A(1) P1B(1) DC P1C(1) P1D(1) DC tON(2) 外部开关 C(1) tOFF(3) 外部开关 D(1) t = toff – ton(2,3) 潜在的直通 电流 (1) 注 1: 图中所有信号均为高电平有效。 2: tON 是功率开关 QC 及其驱动电路的导通延时。 3: tOFF 是功率开关 QD 及其驱动电路的关断延时。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 199 页 PIC18F97J60 系列 17.4.6 可编程死区延时 在所有功率开关管都以 PWM 频率调制的半桥应用中, 功率开关管关断通常需要更多的时间。如果上下两个功 率开关管在同一时间开关 (一个开通,另一个关断), 那么在一段很短的时间里,两个开关管可能同时导通, 直到一个开关管完全关断为止。在这短暂的时间中,两 个功率开关管中可能流过较高的电流 (直通电流),将 逆变桥的电源与地短路。为避免开关过程中可能会出现 的破坏性直通电流,通常需要延迟功率开关管的导通, 保证在另一个开关管完全关断之后,再导通相应的功率 开关管。 在半桥输出模式下,可采用数字可编程死区延时来避免 出现损坏逆变桥功率开关管的直通电流。在信号从无效 状态切换到有效状态时增加延时。请参见图 17-4。 ECCPxDEL 寄存器 (寄存器 17-2)的低 7 位以单片机 指令周期 (TCY 或 4 TOSC)为单位设置延时。 17.4.7 增强型 PWM 自动关闭 当 ECCP1 编程设置为任一种增强型 PWM 模式时,有 效输出引脚可配置为自动关闭。当关闭事件发生时,可 立即把增强型 PWM 输出引脚置为定义的关闭状态。 关闭事件可能由两个比较器模块或 FLT0 引脚 (或这三 个来源的任意组合)引起。比较器可用来监控桥电路中 与被监控电流成比例的电压输入。如果电压超过门限 值,比较器将切换状态并触发关闭。或者,也可以由 FLT0 引脚上的低电平数字信号来触发关闭。不选择任何 自动关闭源可以禁止自动关闭功能。使用的自动关闭源 由 ECCP1AS2:ECCP1AS0 位 (ECCP1AS 寄存器的 <6:4> 位)选择。 当关闭发生时,输出引脚被异步置为关闭状态,关闭状 态由 PSS1AC1:PSS1AC0 和 PSS1BD1:PSS1BD0 位 (ECCP1AS3:ECCP1AS0)指定。每对引脚(P1A/P1C 和 P1B/P1D)可以设置为驱动高电平、驱动低电平或者 三态 (不驱动)。 ECCP1ASE 位 (ECCP1AS<7>)也 被置 1,以保持增强型 PWM 输出为关闭状态。 当关闭事件发生时,ECCP1ASE 位由硬件置 1。如果自 动 重 启 功 能 没 有 使 能,当 关 闭 条 件 被 清 除 时, ECCP1ASE 位由固件清零。如果自动重启被使能,当自 动关闭起因被清除时, ECC1PASE 位自动清零。 如果 ECCP1ASE 位在 PWM 周期开始时被置 1,则 PWM 输出在整个 PWM 周期保持关闭状态。当 ECCP1ASE 位 被清零时,PWM 输出将在下一个 PWM 周期开始时恢复 正常操作。 注: 寄存器 17-2: 当关闭条件有效时,禁止写 位。 ECCP1ASE ECCPxDEL:ECCPx 死区延时寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PxRSEN PxDC6 PxDC5 PxDC4 PxDC3 PxDC2 PxDC1 PxDC0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 PxRSEN:PWM 重启使能位 1 = 自动关闭时,一旦关闭事件消失, ECCPxASE 位自动清零; PWM 自动重启 0 = 自动关闭时, ECCPxASE 必须用软件清零以重启 PWM bit 6-0 PxDC6:PxDC0:PWM 延时计数位 延时时间,指的是 PWM 信号转换为有效的预定时间和实际时间之间的时间差,单位为 FOSC/4 (4 * TOSC)。 DS39762A_CN 第 200 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 17-3: ECCPxAS:ECCPx 自动关闭配置寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 ECCPxASE ECCPxAS2 ECCPxAS1 ECCPxAS0 PSSxAC1 PSSxAC0 PSSxBD1 PSSxBD0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 ECCPxASE:ECCPx 自动关闭事件状态位 0 = ECCPx 输出正常工作 1 = 发生了关闭事件; ECCPx 输出为关闭状态 bit 6-4 ECCPxAS2:ECCPxAS0:ECCPx 自动关闭源选择位 000 = 禁止自动关闭 001 = 比较器 1 的输出 010 = 比较器 2 的输出 011 = 比较器 1 或比较器 2 100 = FLT0 101 = FLT0 或比较器 1 110 = FLT0 或比较器 2 111 = FLT0 或比较器 1 或比较器 2 bit 3-2 PSSxAC1:PSSxAC0:引脚 A 和 C 关闭状态控制位 00 = 驱动引脚 A 和 C 为 0 01 = 驱动引脚 A 和 C 为 1 1x = 引脚 A 和 C 为三态 bit 1-0 PSSxBD1:PSSxBD0:引脚 B 和 D 关闭状态控制位 00 = 驱动引脚 B 和 D 为 0 01 = 驱动引脚 B 和 D 为 1 1x = 引脚 B 和 D 为三态 17.4.7.1 自动关闭和自动重启 自动关闭功能可以配置为允许在关闭事件后自动重启模 块。这可通过将 ECCP1DEL 寄存器的 P1RSEN 位 (ECCP1DEL<7>)置 1 使能。 在关闭模式下,如果 P1RSEN = 1 (图 17-10),只要 导致关闭的起因持续不变,ECCP1ASE 位将保持置 1。当 关闭条件清除时,ECCP1ASE 位清零。如果 P1RSEN = 0 (图 17-11),一旦关闭条件发生,ECCP1ASE 位将保持置 1 直到被软件清零。一旦 ECCP1ASE 位被清零,增强 型 PWM 将在下一个 PWM 周期的开始重新工作。 注: 当关闭条件有效时,禁止写 位。 ECCP1ASE 与 P1RSEN 位的设置无关,如果自动关闭源为比较器之 一,关闭条件是一个电平值。只要关闭的条件一直持 续, ECCP1ASE 位就不能被清零。 2006 Microchip Technology Inc. x = 未知 可以通过写 1 到 ECCP1ASE 位,强制器件为自动关闭 模式。 17.4.8 启动注意事项 当 ECCP 模块工作在 PWM 模式时,必须在 PWM 输出 引脚上外接适当的上拉和 / 或下拉电阻。当单片机退出 复位状态时,所有 I/O 引脚呈高阻状态。外部电路必须 保持功率开关器件处于截止状态,直到单片机将 I/O 引 脚驱动为适当的信号电平,或者激活 PWM 输出为止。 CCP1M1:CCP1M0 位(CCP1CON<1:0>)允许用户为 每一对 PWM 输出引脚 (P1A/P1C 和 P1B/P1D)选择 PWM 输出信号为高电平有效或低电平有效。 PWM 输 出极性必须在 PWM 引脚配置为输出之前选择。由于可 能导致应用电路的损坏,因此不推荐在 PWM 引脚配置 为输出的同时改变极性配置。 超前信息 DS39762A_CN 第 201 页 PIC18F97J60 系列 当 PWM 模块初始化时,P1A、P1B、P1C 和 P1D 输出 锁存器可能不在正确的状态。这样在使能 ECCP 模块的 同时使能 PWM 引脚为输出,可能损坏应用电路。应首 先将 ECCP 模块配置为正确的输出模式并经过一个完整 图 17-10: 的 PWM 周期之后,再将 PWM 引脚设置为输出。当第 二个 PWM 周期开始时, TMR2IF 位置 1 表明一个完整 的 PWM 周期结束了。 PWM 自动关闭 (P1RSEN = 1,使能自动重启) PWM 周期 关闭事件 ECCP1ASE 位 PWM 活动 正常 PWM 开始 PWM 周期 图 17-11: 关闭 事件发生 PWM 恢复工作 关闭 事件清除 PWM 自动关闭 (P1RSEN = 0,禁止自动重启) PWM 周期 关闭事件 ECCP1ASE 位 PWM 活动 正常 PWM 开始 PWM 周期 DS39762A_CN 第 202 页 ECCP1ASE 由固件清零 关闭 事件发生 超前信息 关闭 事件清除 PWM 恢复工作 2006 Microchip Technology Inc. PIC18F97J60 系列 17.4.9 设置 PWM 工作模式 8. 如果要将 ECCPx 模块配置成工作于 PWM 模式,可采 用以下步骤: 1. 2. 3. 4. 5. 6. 7. 通过将相应的 TRIS 位置 1,配置 PWM 引脚 PxA 和 PxB(以及 PxC 和 PxD,如果使用)为输入。 通过装载 PR2 (PR4)寄存器设置 PWM 周期。 通过装载恰当的值到CCPxCON寄存器将ECCPx 模块设置为需要的 PWM 模式和配置: • 用 PxM1:PxM0 位选择输出配置和方向。 • 用 CCPxM3:CCPxM0 位选择 PWM 输出信号的 极性。 通过装载 CCPRxL 寄存器和 CCPxCON<5:4> 位 设置 PWM 占空比。 对于自动关闭: • 禁止自动关闭; ECCP1ASE = 0 • 配置自动关闭源 • 等待运行条件 对 于 半 桥 输 出 模 式,通 过 装 载 恰 当 的 值 到 ECCPxDEL<6:0> 设置死区延时。 如果需要自动关闭操作,装载ECCPxAS寄存器: • 使用 ECCPxAS2:ECCPxAS0 位选择自动关闭 源。 • 使用PSSxAC1:PSSxAC0和PSSxBD1:PSSxBD0 位选择 PWM输出引脚在关闭时的状态。 • 将 ECCPxASE 位 (ECCPxAS<7>)置 1。 2006 Microchip Technology Inc. 如果需要自动重启,将PxRSEN位(ECCPxDEL<7>) 置 1。 9. 配置和启动 TMRx (TMR2 或 TMR4): • 通过清零 TMRxIF 位 (对于 Timer2 是 PIR1<1>,对于 Timer4 是 PIR3<3>)清零 TMRx 中断标志位。 • 通过装载 TxCKPS 位 (TxCON<1:0>)设置 TMRx 预分频值。 • 通过将 TMRxON 位 (TxCON<2>)置 1 使能 Timer2 (或 Timer4)。 10. 在新的 PWM 周期开始后使能 PWM 输出: • 等待直到 TMRx 溢出 (TMRxIF 位置 1)。 • 通过清零相应的 TRIS 位,使能 ECCPx/PxA、 PxB、 PxC 和 / 或 PxD 引脚为输出。 • 清零 ECCPxASE 位 (ECCPxAS<7>)。 17.4.10 复位的影响 上电复位及后续的复位都将强制所有端口为输入模式, 并强制 CCP 寄存器为复位状态。 这将强制增强型 CCP 模块复位到与标准 CCP 模块兼容 的状态。 超前信息 DS39762A_CN 第 203 页 PIC18F97J60 系列 表 17-5: 与 ECCP 模块和 TIMER1 到 TIMER4 相关的寄存器 Bit 7 名称 INTCON Bit 6 GIE/GIEH PEIE/GIEL Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 RCON IPEN — — RI TO PD POR BOR 60 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR2 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF 61 PIE2 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE 61 IPR2 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP 61 PIR3 SSP2IF BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 61 TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 61 TRISD(1) TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 61 TRISE7 TRISE6 TRISE5 TRISE3 TRISE2 TRISE1 TRISE0 61 TRISE TRISA6(2) TRISG6(2) TRISG5(2) TRISG TRISH (2) TRISH7 TRISH6 TRISH5 TRISE4 TRISG4 TRISH4 TRISG3(2) TRISG2(2) TRISG1(2) TRISG0(2) TRISH3 TRISH2 TRISH1 TRISH0 61 61 TMR1L Timer1 寄存器的低字节 60 TMR1H Timer1 寄存器的高字节 60 T1CON RD16 TMR2 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 60 60 T2CON Timer2 寄存器 — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON PR2 Timer2 周期寄存器 60 TMR3L Timer3 寄存器的低字节 60 TMR3H Timer3 寄存器的高字节 T3CON RD16 TMR4 T3CCP2 60 60 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC Timer4 寄存器 — T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CON T2CKPS1 T2CKPS0 TMR3CS TMR3ON 60 T4CKPS1 T4CKPS0 62 62 PR4 Timer4 周期寄存器 62 CCPRxL(3) 捕捉 / 比较 /PWM 寄存器 x 的低字节 60 CCPRxH(3) 捕捉 / 比较 /PWM 寄存器 x 的高字节 PxM1 PxM0 DCxB1 60 CCPxCON(3) CCPxM3 CCPxM2 CCPxM1 CCPxM0 60 ECCPxAS(3) ECCPxASE ECCPxAS2 ECCPxAS1 ECCPxAS0 PSSxAC1 PSSxAC0 PSSxBD1 PSSxBD0 60, 63 PxDC2 PxDC1 PxDC0 63 ECCPxDEL(3) 图注: 注 1: 2: 3: PxRSEN PxDC6 PxDC5 DCxB0 PxDC4 PxDC3 — = 未用 (读为 0), r = 保留。 ECCP 操作中不使用阴影单元。 仅适用于 64 引脚器件。 寄存器和 / 或特定位在 64 引脚器件上未实现。 所有增强型 CCP 模块中具有该名称的功能相同寄存器的通称,其中 “x”代表特定模块 (ECCP1、 ECCP2 或 ECCP3)。通称相同的所有寄存器的位分配和复位值相同。 DS39762A_CN 第 204 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.0 以太网模块 以太网模块包含以下五个主要功能模块: 所有 PIC18F97J60 系列器件都具有嵌入式以太网控制 器模块。这是一个完整的连接解决方案,完全实现了介 质访问控制(Media Access Control,MAC)和物理层 收发器(Physical Layer Transceiver,PHY)模块。只 需使用两个脉冲变压器和一些无源元件就可以将单片机 直接与以太网相连。 以太网模块符合 IEEE 802.3 中所有关于双绞线网络 10-BaseT 连接的规定。它在内部实现了一些数据包过 滤机制,用以限制传入的数据包。它还提供了一个用于 实现快速数据吞吐的内置 DMA 模块,以及硬件 IP 校验 和计算。另外还提供了两个用于指示链路和网络活动的 LED 输出。 1. 2. 3. 4. 5. 图 18-1 给出了该模块的简化框图。 图 18-1: PHY 收发器模块——对传输双绞线接口上的模拟 数据进行编码和解码,并通过网络发送和接收 它。 MAC 模块——实现了符合 IEEE 802.3 规范的 MAC 逻辑,并提供了用以控制 PHY 的 MIIM (Media Independent Interface Management)。 独立的 8 KB RAM 缓冲区——用于存储已经接收 和将要发送的数据包。 判优器——在单片机内核、DMA、发送和接收模 块发出请求时,控制对 RAM 缓冲区的访问。 寄存器接口——用作以太网模块和单片机特殊功 能寄存器(SFR)之间命令和内部状态信号的译 码器。 以太网模块框图 RX MAC RXBM 判优器 ch0 8 KB 以太网 RAM 缓冲区 PHY RXF(过滤器) TX MII 接口 ch1 ch0 ch2 TPOUT+ TPOUT- DMA 与 IP 校验和 TPIN+ TX ch1 RX TXBM 以太网 缓冲区 地址 流量控制 以太网 数据 TPIN- RBIAS MIIM 接口 主机接口 EDATA 以太网 以太网 控制 缓冲区指针 MIRD/MIWR MIREGADR PHY 寄存器数据 PHY 寄存器地址 单片机 SFR LEDA/LEDB 控制 8 2006 Microchip Technology Inc. 单片机数据总线 超前信息 DS39762A_CN 第 205 页 PIC18F97J60 系列 18.1 18.1.1 物理接口和外部连接 信号和电源接口 PIC18F97J60 系列器件均提供一个 4 引脚的以太网模块 专用信号接口。这些引脚没有与其他的单片机或外设功 能复用,因此不必考虑潜在的器件配置冲突问题。这些 引脚是: • • • • TPIN+:双绞线差分信号正向输入 TPIN-:双绞线差分信号负向输入 TPOUT+:双绞线差分信号正向输出 TPOUT-:双绞线差分信号负向输出 LED 闪烁延时长度 典型延时 (ms) 40 TNSTRCH (正常) 除了信号连接之外,以太网模块还具有自己独立的电压 源和地供内部 PHY 模块使用。对于接收器、发送器和发 送器的内部 PLL,都提供独立的电压源和地引脚;接收 器是 VDDRX 和 VSSRX,发送器是 VDDTX 和 VSSTX,发 送器的内部 PLL 是 VDDPLL 和 VSSPLL。虽然它们的电压 要求与单片机的 VDD 和 VSS 相同,但在内部并未将这些 引脚相连。为使以太网模块正常工作,还必须将供电电 压和地与这些引脚相连接。此外,还需要在外部将单片 机的电源和地引脚连接到同一电源或接地点。 除了独立的电源连接,PHY 模块还具有独立的偏置电流 输入引脚 RBIAS。为使收发器正常工作,必须向 RBIAS 引脚施加偏置电流。 LED 配置 PHY 模块提供了独立的输出来驱动标准以太网指示器 LEDA 和 LEDB。 LED 输出与 PORTA 引脚 RA0 和 RA1 复用。通过置 1 配置位 ETHLED(寄存器 24-6, CONFIG3H<2>),可以将它们配置为 LED 输出。当 配置为 LED 输出时, RA0/LEDA 和 RA1/LEDB 具有 足够的驱动能力 (8mA),可以直接驱动 LED。必须 始终将这两个引脚配置为向 LED 提供电流 (源)。用 户还必须通过清零 TRISA<1:0> 将这两个引脚配置为 输出。 DS39762A_CN 第 206 页 表 18-1: 延时长度 目前尚无法与外部以太网控制器或 MAC/PHY 子系统之 间进行数字以太网数据的收发。 18.1.2 这 两 个 LED 可 以 分 别 配 置 为 自 动 显 示 链 路 状 态、 RA/TX 活动等。它们还具有可配置延时功能,可以对 短时间事件 (如单个数据包发送)的 LED 闪烁时间进 行延长,以方便人们查看。相关选项由 PHLCON 寄存 器 (寄存器 18-14)控制。表 18-1 列出了闪烁延时的 典型值。 TMSTRCH (中等) 70 TLSTRCH (长) 140 18.1.3 振荡器要求 以太网模块的设计工作频率为 25 MHz。该频率由单片 机主时钟 (在 OSC1 和 OSC2 引脚连接晶振,或者在 OSC1 引脚连接外部时钟源)提供。不能为模块配置一 个不同的时钟源。 18.1.3.1 起振定时器 以太网模块具有一个起振定时器,它独立于单片机的起振 定时器 OST,用以保证模块在 PHY 模块的 PLL 稳定以后 再开始工作。清零模块使能位 ETHEN (ECON2<5>)将 清零 PHYRDY 状态位 (ESTAT<0>)。将 ETHEN 位置 1 会使起振定时器开始计数。当定时器定时结束时,经过 1 ms 之后, PHYRDY 位会自动置 1。 应用软件应一直查询 PHYRDY 位,以确定何时可以启 动正常的以太网操作。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.1.4 器和 RJ-45 连接器的 1、2 引脚之间。许多以太网变压器 模块都在同一器件封装内包含了共模扼流器。变压器应 该至少达到表 27-28 中规定的绝缘等级,才能防止静电 的干扰,并符合 IEEE 802.3 中的绝缘要求(关于变压器 的具体要求,请参见第 27.5 节“以太网规范和要求”)。 此外,发送和接收接口均需要另外使用两个电阻和一 个电容来正确地端接传输线,以最大限度地减少信号反 射。 磁性元件、端接元件和其他外部元件 为实现以太网接口,以太网模块需要外部连接一些标准 元件。应按图 18-2 所示来连接这些元件。 PHY 模块中的内部模拟电路要求在 RBIAS 和地之间连 接一个外部电阻 REBIAS。该电阻会影响 TPOUT+/- 信 号的幅度,应布置在尽可能靠近芯片的位置,并避免 与信号走线相邻,以防止噪声耦合到引脚中,从而对发 送操作造成不利影响。建议该电阻采用表贴元件。 所有的电源引脚必须外接于同一电源。类似地,所有参 考地也必须外接于同一接地点。对于每个 VDD 和 VSS 引 脚对,都应该在尽可能靠近引脚的位置安放一个 0.1 µF 的陶瓷旁路电容。 在 TPIN+/TPIN- 和 TPOUT+/TPOUT- 引脚,需要连接 用于以太网操作的 1:1 中心抽头脉冲变压器。当使能以 太网模块时,两个 TPOUT 引脚会有持续的电流流入。 当 PHY 在发送数据时,通过改变 TPOUT+ 和 TPOUT的相对电流大小,将在以太网电缆上产生一个差分电 压。 由于双绞线接口工作时需要相对较高的电流,因此所有 接线都应该尽可能的短。电源线的线径要合适,以减少 阻性损耗。如果无法使用较短的差分数据线,则应将其 配接成具有 50Ω 的特性阻抗。 建议不要在 TPOUT 引脚和以太网变压器 (未显示)之 间,安放针对 TPOUT 接口的共模扼流器。如果要使用 共模扼流器来减少 EMI 辐射,应将它安放在以太网变压 图 18-2: 以太网模块工作需要的外部元件 3.3V TPOUT+ 49.9Ω,1% 49.9Ω,1% RJ-45 1 铁氧体 磁珠 (1,3) 0.1 µF 1 2 (3) 3 1:1 CT TPOUTTPIN+ 4 49.9Ω,1% PIC18FXXJ6X 49.9Ω,1% 5 0.1 µF 1:1 CT TPIN- 6 REBIAS(2) 75Ω(3) RBIAS 75Ω(3) LEDB 75Ω(3) LEDA 75Ω(3) 7 8 1 nF, 2 kV(3) 注 1: 铁氧体磁珠的额定电流应至少为 80 mA。 2: REBIAS 电阻值待定。请参见当前的硅片勘误表获取合适的值。 3: 安装这些元件是为了减少电磁干扰 (EMI)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 207 页 PIC18F97J60 系列 18.2 以太网缓冲区和 PHY 控制寄存器全部位于以太网模块 内,单片机不能直接对其进行访问。在以太网和单片机 之间,数据通过使用缓冲区和映射在单片机 SFR 空间中 的指针寄存器来传送。图 18-3 给出了 SFR 与以太网模 块存储器空间之间的关系。 以太网缓冲区和寄存器空间 以太网模块使用三个独立的存储器空间: • 以太网 RAM 缓冲区——用于存储接收到的数据 和准备进行发送的数据。 • 一组 8 位的特殊功能寄存器(SFR)——用于控制 模块,以及在模块和单片机内核之间来回传递数 据。 • 一组独立的 16 位 PHY 寄存器——专门用于 PHY 控 制和状态报告。 图 18-3: 单片机和以太网存储器空间之间的关系 单片机 SFR 以太网模块 以太网缓冲区 0000h EDATA ERDPT(H:L) EWRPT(H:L) ETXST(H:L) ETXND(H:L) ERXST(H:L) ERXND(H:L) ERXRDPT(H:L) ERXWRPT(H:L) 以太网数据 1FFFh 缓冲区地址 PHY 寄存器 PHY 寄存器数据(输入 / 输出) MIRD(H:L) MIWR(H:L) MIREGADR 注 00h 1Fh PHY 寄存器地址 1: 单片机的 SFR 不是按照它们在数据存储器空间中的存放顺序显示的。存储器区域未按比例显示。 DS39762A_CN 第 208 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.2.1 18.2.1.2 以太网缓冲区和缓冲区指针寄存器 以太网缓冲区中包含了供以太网控制器使用的发送存储 器和接收存储器。整个缓冲区为 8 KB 大小,分为单独 的接收缓冲区空间和发送缓冲区空间。不论以太网模块 是否使能,总是可以通过 EDATA 和以太网指针 SFR 来 对缓冲区进行访问。发送和接收存储器的大小和位置可 以使用以太网 SFR 空间中的指针自由定义。 18.2.1.1 接收缓冲区 接收缓冲区实际上是一个由硬件管理的循环 FIFO 缓冲 区。寄存器对 ERXSTH:ERXSTL 和 ERXNDH:ERXNDL 用作指针,用来定义缓冲区在存储器中的大小和位置。 ERXST和ERXND指向的字节都包含在FIFO缓冲区中。 在从以太网接口接收到数据字节时,会将它们顺序地写 入接收缓冲区。不过,在写入 ERXND 所指向的存储单 元 之 后,硬 件 将 自 动 将 接 收 数 据 的 下 一 字 节 写 入 ERXST 所指向的存储单元。从而,接收硬件永远不会 将数据写入 FIFO 边界之外的存储单元。 当接收逻辑禁止时,用户可以设定 ERXST 和 ERXND 指针。当接收逻辑使能,即 ERXEN (ECON1<2>)置 1 时,绝对不能修改指针。 ERXWRPTH:ERXWRPTL 寄存器定义在 FIFO 中,硬件 将接收的数据字节写入的位置。该指针为只读指针,每 当收到新的数据包 (如果未被过滤掉),硬件都会自动 更新它。指针可用来判断 FIFO 中有多少剩余空间。 ERXRDPT 寄存器定义 FIFO 中禁止接收硬件写入的单 元。在正常操作下,接收硬件会一直写入数据,直到 ERXRDPT 所指向的存储单元 (不包括该单元)。如果 FIFO 中已充满数据,而新的数据继续到达,硬件并不会 用新数据覆盖前面接收到的数据。相反,它将丢弃新收 到的数据,而保留旧的数据。为了能连续接收新数据, 应用程序必须在每次处理完部分或全部旧的接收数据之 后周期性地递增指针。 2006 Microchip Technology Inc. 发送缓冲区 8 KB 存储器中未被定义为接收 FIFO 缓冲区的部分被视 为发送缓冲区。应用程序需要负责管理数据包在发送缓 冲区中的存储位置。每当应用程序要发送数据包时,它 需要设定 ETXST 与 ETXND 指针,使之指向发送缓冲区 中的待发送数据包。硬件并不检查起始和结束地址是否 与接收缓冲区重叠。为防止缓冲区数据遭到破坏,在 ETXST 和 ETXND 指针与接收缓冲区重叠时,或 ETXND 指针与接收缓冲区太靠近时 , 固件都不应发送数据包。 更多信息,请参见第 18.5.2 节 “发送数据包”。 18.2.1.3 读写缓冲区 以太网缓冲区的内容可通过 EDATA 寄存器进行访问, EDATA 寄存器是单片机数据总线到缓冲区的一个窗 口。该窗口的位置由 ERDPT 或者 EWRPT 指针决定, 具 体 使 用 哪 个 指 针 取 决 于 所 执 行 的 操 作。例 如,写 EDATA 将导致在 EWRPTH:EWRPTL 当前指示的地址 处对以太网缓冲区进行写操作。类似地,将 EDATA 中 的 内 容 移 动 到 另 外 一 个 寄 存 器 时,实 际 上 移 动 的 是 ERDPTH:ERDPTL 所指地址处的缓冲区内容。 将 AUTOINC 位(ECON2<7>)置 1 会使相关的读或写 指针在每次读或写操作之后递增一位地址。这使得不必 在每次读或写操作之后不断地更新指针,从而简化了连 续读写操作的步骤。 当顺序地读接收缓冲区时,在接收缓冲区的底部会出现 折回现象。根据 ERXNDH:ERXNDL 寄存器中的地址对 EDATA 进行读操作,将导致 ERDPTH:ERDPTL 递增从 而与 ERXSTH:ERXSTL 寄存器中所包含的值相等。当顺 序地写缓冲区时,将不会出现折回现象。 18.2.1.4 缓冲区 DMA 访问 当计算校验和时,内部集成的 DMA 控制器必须读缓冲 区;当复制存储器内容时,它必须读写缓冲区。DMA 同 样遵循前面所描述的折回规则。当顺序地读时,在接收 缓冲区的底部将发生折回。而进行写操作时则不会出现 折回现象。更多信息,请参见第 18.9 节 “直接存储器 访问控制器”。 超前信息 DS39762A_CN 第 209 页 PIC18F97J60 系列 图 18-4: 以太网缓冲区的构成 发送缓冲区起始地址 (ETXSTH:ETXSTL) 0000h 缓冲区写指针 (EWRPTH:EWRPTL) AAh 发送缓冲区结束地址 (ETXNDH:ETXNDL) 发送缓冲区 写缓冲区数据 (数据 AAh 移入 EDATA) 接收缓冲区起始地址 (ERXSTH:ERXSTL) 接收缓冲区 (循环 FIFO) 缓冲区读指针 (ERDPTH:ERDPTL) 接收缓冲区结束地址 (ERXNDH:ERXNDL) DS39762A_CN 第 210 页 读缓冲区数据 (数据 55h 移出 EDATA) 55h 1FFFh 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.2.2 SFR 和以太网模块 和其他外设一样,以太网模块的直接控制是通过一组 SFR 来完成的。因为数量众多,其中的大多数寄存器位 于单片机数据存储器空间中 Bank 14 的下半部分。 以太网模块的 5 个关键 SFR 位于单片机 Bank 15 的常 用 SFR 区,以便可以进行快速访问。它们是: • ECON1 • EDATA • EIR • 以太网缓冲区读指针对 (ERDPTH 和 ERDPTL) ECON1 将留在下一节中与其他以太网控制寄存器一起 进行讨论。EDATA 和 ERDPTH:ERDPTL 分别是以太网 数据缓冲区寄存器及其读操作指针(见第 18.2.1 节“以 太网缓冲区和缓冲区指针寄存器”)。 EIR 是以太网中 断结构的一部分,将在第 18.3 节 “以太网中断”中对 它进行说明。 寄存器 18-1: Bank 14 中的大部分以太网 SFR 都用作指针寄存器,用 来指定专用以太网缓冲区中的地址,供数据存储和检索 之用。其他寄存器则存储用于数据包格式屏蔽或校验和 操作的信息。有几个寄存器用于控制整体的模块操作和 具体的 MAC 和 PHY 功能。 18.2.3 以太网控制寄存器 ECON1 寄存器 (寄存器 18-1)用来控制模块的主要功 能。接收使能位、发送请求位和 DMA 控制位都位于其 中。 ECON2 寄存器 (寄存器 18-2)用来控制模块的其 他上层功能。ESTAT寄存器(寄存器 18-3)用来报告模 块和以太网通信的高级状态。 不论模块是否使能,总是可以对名称含有 E 前缀的以太 网 SFR 进行访问。 ECON1:以太网控制寄存器 1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0 TXRST RXRST DMAST CSUMEN TXRTS RXEN — — bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 TXRST:发送逻辑复位位 1 = 发送逻辑保持在复位状态 0 = 正常操作 bit 6 RXRST:接收逻辑复位位 1 = 接收逻辑保持在复位状态 0 = 正常操作 bit 5 DMAST:DMA 启动和忙状态位 1 = DMA 复制或校验和操作正在进行中 (由软件置 1、由硬件或软件清零) 0 = DMA 硬件空闲 bit 4 CSUMEN:DMA 校验和使能位 1 = DMA 硬件计算校验和 0 = DMA 硬件复制缓冲存储区内容 bit 3 TXRTS:发送请求位 1 = 发送逻辑正在尝试发送数据包 (由软件置 1、由硬件或软件清零) 0 = 发送逻辑空闲 bit 2 RXEN:接收使能位 1 = 通过当前过滤器配置的数据包将被写入接收缓冲区 0 = 所有接收到的数据包将被硬件丢弃 bit 1-0 未用:读为 0 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 211 页 PIC18F97J60 系列 寄存器 18-2: ECON2:以太网控制寄存器 2 R/W-1 R/W-0(1) R/W-0 U-0 U-0 U-0 U-0 U-0 AUTOINC PKTDEC ETHEN — — — — — bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 AUTOINC:缓冲区指针自动递增使能位 1 = 在读或写 EDATA 时自动递增 ERDPT 或 EWRPT 0 = 访问 EDATA 后不自动改变 ERDPT 和 EWRPT bit 6 PKTDEC:数据包递减位 1 = 将 EPKTCNT 寄存器减 1 0 = 不改变 EPKTCNT bit 5 ETHEN:以太网模块使能位 1 = 使能以太网模块 0 = 禁止以太网模块 bit 4-0 未用:读为 0 注 x = 未知 1:一旦被置 1,该位会自动清零。 寄存器 18-3: ESTAT:以太网状态寄存器 U-0 R/C-0 U-0 R/C-0 U-0 R-0 R/C-0 R-0 — BUFER — LATECOL — RXBUSY TXABRT PHYRDY bit 7 bit 0 图注: R = 可读位 C = 可清零位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 未用:读为 0 bit 6 BUFER:以太网缓冲区错误状态位 1 = 以太网读或写操作发生了缓冲区错误 (数据溢出或数据不足) 0 = 未发生缓冲区错误 bit 5 未用:读为 0 bit 4 LATECOL:迟冲突错误位 1 = 在发送完 64 字节后发生冲突 0 = 发送 64 字节后无冲突发生 bit 3 未用:读为 0 bit 2 RXBUSY:接收忙位 1 = 接收逻辑正在接收数据包 0 = 接收逻辑空闲 bit 1 TXABRT:发送中止错误位 1 = 发送请求被中止 0 = 无发送中止错误 bit 0 PHYRDY:以太网 PHY 时钟就绪位 1 = 以太网 PHY 起振定时器 (OST)定时结束, PHY 就绪 0 = 以太网 PHY 起振定时器仍在计数, PHY 未就绪 DS39762A_CN 第 212 页 超前信息 x = 未知 2006 Microchip Technology Inc. PIC18F97J60 系列 18.2.4 MAC 和 MII 寄存器 注 这些 SFR 用于控制 MAC 的操作,并通过 MIIM 控制 PHY 的 操 作。 MAC 和 MII 寄 存 器 占 用 数 据地址 E80h-E85h、 E8Ah,以及从 EA0h 至 EB9h。 虽然 MAC 和 MII 寄存器出现在单片机的常规存储器映 射中,但它们实际上是内嵌在 MAC 模块中的。主机接 口逻辑会转换单片机数据 / 地址总线数据,以便能够访 问这些寄存器。主机接口逻辑对固件访问 MAC 和 MII 特 殊功能寄存器的方式作出了一些限制。请参见下方的 “注”。 寄存器 18-4: 1: 只有在以太网模块使能时,即 ETHEN (ECON2<5>)= 1 时,才可以对 MAC 和 MII 特殊功能寄存器 (SFR)进行访问。 2: 不支持背对背访问 MAC 或 MII 寄存器。在 寻址 MAC 或 MII 寄存器的任意两条指令之 间,必须执行至少一条 NOP 或其他指令。 三个 MACON 寄存器控制具体的 MAC 操作和数据包配 置操作。它们如寄存器 18-4 至寄存器 18-6 所示。 MII 寄存器用于控制 MIIM 接口,并用作与 PHY 寄存器 之间的通信通道。请参见寄存器 18-7、寄存器 18-8 和 寄存器 18-9。 MACON1:MAC 控制寄存器 1 U-0 U-0 U-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 — — — r TXPAUS RXPAUS PASSALL MARXEN bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7-5 未用:读为 0 bit 4 保留:保持为 0 bit 3 TXPAUS:暂停控制帧发送使能位 1 = 允许 MAC 发送暂停控制帧 (全双工模式中用于流量控制) 0 = 禁止暂停帧发送 bit 2 RXPAUS:暂停控制帧接收使能位 1 = 当接收到暂停控制帧时禁止发送 (正常操作) 0 = 忽略接收到的暂停控制帧 bit 1 PASSALL:所有接收帧通过使能位 1 = MAC 接收到的控制帧如果未被过滤掉则写入接收缓冲区 0 = 控制帧在 MAC 处理后被丢弃 (正常操作) bit 0 MARXEN:MAC 接收使能位 1 = 允许 MAC 接收数据包 0 = 禁止接收数据包 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 213 页 PIC18F97J60 系列 寄存器 18-5: MACON3:MAC 控制寄存器 3 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PADCFG2 PADCFG1 PADCFG0 TXCRCEN PHDREN HFRMEN FRMLNEN FULDPX bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7-5 PADCFG2:PADCFG0:自动填充和 CRC 配置位 111 = 对所有短帧用 0 填充至 64 字节,然后追加一个有效的 CRC 110 = 对短帧不进行自动填充 101 = MAC将自动检测具有8100h类型字段的VLAN协议帧,并自动填充至64字节。如果该帧不是VLAN 帧,则填充至 60 字节。填充之后,追加一个有效的 CRC。 100 = 对短帧不进行自动填充 011 = 对所有短帧用 0 填充至 64 字节,然后追加一个有效的 CRC 010 = 对短帧不进行自动填充 001 = 对所有短帧用 0 填充至 60 字节,然后追加一个有效的 CRC 000 = 对短帧不进行自动填充 bit 4 TXCRCEN:发送 CRC 使能位 1 = 不论PADCFG状态如何,MAC将对所有发送的帧追加一个有效的CRC。如果PADCFG指定追加一 个有效的 CRC,则 TXCRCEN 必须置 1。 0 = MAC 不会追加 CRC。对最后 4 个字节进行校验,如果不是有效的 CRC,将在发送状态向量中给予 报告。 bit 3 PHDREN:专用报头使能位 1 = 发送给 MAC 的帧包含一个 4 字节的专用报头,在计算 CRC 时不包括该报头。 0 = 不存在专用报头。 CRC 将涵盖所有数据 (正常操作)。 bit 2 HFRMEN:超大帧使能位 1 = 允许发送和接收任意大小的帧 0 = 帧如果大于 MAMXFL,则中止发送或接收。 bit 1 FRMLNEN:帧长度检查使能位 1 = 对发送和接收帧的类型 / 长度字段进行检查。如果是长度字段,则比较帧的大小,并在发送 / 接收状 态向量中报告不匹配状态。 0 = 不将帧长度和类型 / 长度字段进行比较。 bit 0 FULDPX:MAC 全双工使能位 1 = MAC 将工作于全双工模式。 PDPXMD 位也必须置 1。 0 = MAC 将工作于半双工模式。 PDPXMD 位也必须清零。 DS39762A_CN 第 214 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 18-6: MACON4:MAC 控制寄存器 4 U-0 R/W-0 R/W-0 R/W-0 U-0 U-0 R-0 R-0 — DEFER BPEN NOBKOFF — — r r bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 未用:读为 0 bit 6 DEFER:延迟发送使能位 (仅适用于半双工模式) 1 = 当介质被占用时, MAC 将无限期等待,直至介质空闲才尝试发送 (该设置符合 802.3 规范) 0 = 当介质被占用时, MAC 在等待时间达到极限值后将中止发送 bit 5 BPEN:背压期间无后退 (Backoff)使能位 (仅适用于半双工模式) 1 = 在背压期间意外发生冲突之后, MAC 将立即开始重发 0 = 在背压期间意外发生冲突之后, MAC 将延时一段时间后 (延时时间采用二进制指数后退算法计 算)再尝试重发 (正常操作) bit 4 NOBKOFF:无后退使能位 (仅适用于半双工模式) 1 = 在发生任何冲突后, MAC 将立即开始重发 0 = 在发生任何冲突后,MAC 将延时一段时间后(延时时间采用二进制指数后退算法计算)再尝试重 发 (正常操作) bit 3-2 未用:读为 0 bit 1-0 保留:保持为 0 寄存器 18-7: MICON:MII 控制寄存器 R/W-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 RSTMII — — — — — — — bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 RSTMII:MII 管理模块复位位 1 = MII 管理模块保持在复位状态 0 = 正常操作 bit 6-0 未用:读为 0 2006 Microchip Technology Inc. 超前信息 x = 未知 DS39762A_CN 第 215 页 PIC18F97J60 系列 寄存器 18-8: MICMD:MII 命令寄存器 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 — — — — — — MIISCAN MIIRD bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7-2 未用:读为 0 bit 1 MIISCAN:MII 扫描使能位 1 = 连续读 MIREGADR 中的 PHY 寄存器,并将数据写入 MIRD 0 = 不在进行 MII 管理扫描操作 bit 0 MIIRD:MII 读使能位 1 = 读 MIREGADR 中的 PHY 寄存器一次,并将数据写入 MIRD 0 = 不在进行 MII 管理读操作 寄存器 18-9: MISTAT:MII 状态寄存器 U-0 U-0 U-0 U-0 R-0 R-0 R-0 R-0 — — — — r NVALID SCAN BUSY bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7-4 未用:读为 0 bit 3 保留:保持为 0 1 = 不存在链路伙伴,或者以太网电缆未连接 0 = 链路未失效 bit 2 NVALID:MII 管理读数据无效位 1 = MIRD 的内容尚未变为有效 0 = MII 管理读周期已经完成,并且 MIRD 已经更新 bit 1 SCAN:MII 管理扫描操作位 1 = 正在进行 MII 管理扫描操作 0 = 未进行 MII 管理扫描操作 bit 0 BUSY:MII 管理忙位 1 = 正在读或写 PHY 寄存器 0 = MII 管理接口空闲 DS39762A_CN 第 216 页 超前信息 x = 未知 2006 Microchip Technology Inc. PIC18F97J60 系列 18.2.5 PHY 寄存器 18.2.5.2 PHY 寄存器可对 PHY 模块进行配置和控制,并提供操 作状态信息。所有 PHY 寄存器都是 16 位宽。 总共有 32 个 PHY 地址,但只实现了其中 9 个。对未实 现单元进行写操作将被忽略,而对这些单元的所有读操 作都将返回 0。所有保留的单元都应写为 0 ;当读取时 应忽略其内容。 表 18-2 列出了所有已实现的 PHY 寄存器。关于主要 PHY 控制寄存器的描述,请参见寄存器 18-10 至寄存器 18-14。 其他的 PHY 控制和状态寄存器在本章后续部分中讨论。 只有通过 MII 管理接口才可以对 PHY 寄存器进行访问。 只有在 PHY 起振定时器定时结束,并且 PHYRDY 位 (ESTAT<0>)置 1 之后,才可以对 PHY 寄存器进行读 写。 18.2.5.1 PHSTAT 寄存器 PHSTAT1 与 PHSTAT2 寄存器中含有一些只读位,它们 显示 PHY模块操作的当前状态,特别是与网络其他部分 的通信链路的状态。 PHSTAT1 寄存器(寄存器 18-11)中含有 LLSTAT 位; 如果从上次读寄存器之后物理层链路断开,该位将清零 并锁存为低电平。主机控制器可以周期性地查询该位, 以确定链路失效的确切时间。如果未使用链路变化中 断,那么该方法尤其有用。 PHSTAT1 寄存器还包含一个超时传输 (jabber)状态 位。如果以太网控制器不间断地发送数据,使其他节点 无法共享介质,那么就称之为超时传输。通常,超时传 输状态表明本地控制器很可能违反了 IEEE 规范中的最 大数据包长度的规定。该位锁存为高电平表示上次读寄 存器之后发生了超时传输状态。 PHSTAT2 寄存器 (寄存器 18-13)中含有指示 PHY 模 块是否连入网络、是否在进行发送或接收的状态位。 PHID1 和 PHID2 寄存器为只读寄存器。它们保存用以 帮助鉴别以太网控制器的常数,对于进行调试可能会有 帮助。其中包括: • PHY 模块的部件号 (PPN5:PPN0) • PHY 模块的版本号 (PREV3:PREV0) • PHY 标识符,是 Microchip 公司组织唯一标识符 (Organizationally Unique Identifier, OUI)的一 部分 (OUI3:OUI24) PHY 部件号和版本号是 PHID2 的一部分。 PHY 标识 符的两个高字节位于 PHID1,其余部分位于 PHID2。 表 18-2 给出了它们在寄存器中的确切位置。 版本信息也存储在 EREVID 中。这是一个只读控制寄存 器,其中包含一个 5 位的标识符,指示器件的具体硅片 版本号。 18.2.5.3 访问 PHY 寄存器 如上文所述,PHY 寄存器位于不同的存储器空间,且单 片机不能直接访问它们。它们是通过以太网 SFR 存储区 中一组专门的 MII 寄存器来进行寻址,这些寄存器实现 了介质无关接口管理 (Media Independent Interface Management, MIIM)。 其访问方式与以太网缓冲区的访问方式类似,但是使用 独立的读和写缓冲区(MIRDH:MIRDL和MIWRH:MIWRL) 及一个 5 位的地址寄存器(MIREGADR)。此外,还用 到 MICMD 和 MISTAT 寄存器来控制读写操作。 读 PHY 寄存器: 1. 2. 3. 4. 5. 2006 Microchip Technology Inc. PHID1 和 PHID2 寄存器 超前信息 将要读的 PHY 寄存器的地址写入 MIREGADR 寄 存器。 将 MIIRD 位 (MICMD<0>)置 1。读操作开始, BUSY 位 (MISTAT<0>)置 1。 等待 10.24 µs,然后查询 BUSY 位,确定操作是 否完成。当 MAC 已获得寄存器的内容时,BUSY 位将自动清零。当 BUSY 位置 1 时,用户应用程 序不能启动任何 MIISCAN 操作,或写 MIWRH 寄存器。 清零 MIIRD 位。 从 MIRDL 和 MIRDH 寄存器中读取 PHY 寄存器 的全部 16 位。 DS39762A_CN 第 217 页 PIC18F97J60 系列 写 PHY 寄存器: 1. 2. 3. MIISCAN 置 1 后,NVALID(MISTAT<2>)、SCAN 和 BUSY 位也都置 1。第一个读操作完成需要 10.24 µs。 然后,后续的读操作会以相同的时间间隔执行,同时 MIRDL 和 MIRDH 寄存器会不断地自动更新,直至操作 被取消为止。可以通过查询 NVALID 位判断第一个读操 作何时完成。 将要写的 PHY 寄存器的地址写入 MIREGADR 寄 存器。 将要写数据的低 8 位写入 MIWRL 寄存器。 将要写数据的高 8 位写入 MIWRH 寄存器。写 MIWRH 寄存器会自动启动 MII 事务,因此必须 在写 MIWRL 之后才能写 MIWRH。 BUSY 位自 动置 1。 在 MII 操作完成之后会开始写 PHY 寄存器,这需要 10.24 µs 的时间。当写操作完成后, BUSY 位会自动清零。在忙 时,应用程序不能进行任何 MII 扫描或读操作。 没有可以用来确定 MIRD 寄存器何时更新的相关状态信 息。因为一次只能读取一个 MII 寄存器,所以绝对不能 认为 MIRDL 和 MIRDH 的值是同时从 PHY 中读出的。 在扫描模式下,MIRDH 和 MIRDL 的值只有在 NVALID 清零之后才是有效的。 NVALID 会在第一个读序列完成 后立即自动清零。 当写 PHY 寄存器时,整个 16 位是一次性写入的,不能 够选择性地对某些位进行写操作。如果只需要对寄存器 中的某些位进行重新设定,控制器必须首先读取 PHY寄 存器,修改结果数据,然后将数据再写回 PHY 寄存器。 只要需要进行扫描操作, MIISCAN 都应保持置 1。在 MIISCAN 清零且最后一个读序列完成之后, BUSY 和 SCAN 位会自动清零。在 MIISCAN 置 1 时,不能对 MIREGADR 进行更新。 MAC 也可以配置为对 PHY 寄存器进行自动背对背读操 作。要执行此扫描操作: 当正在进行扫描时,不应启动新的 PHY 操作,例如进 行读操作或写 MIWRH 寄存器。可以通过清零 MIISCAN 位然后查询 BUSY 位来取消操作。在 BUSY 位清零之 后,可以启动新的操作。 1. 2. 将要扫描的 PHY 寄存器的地址写入 MIREGADR 寄存器。 将 MIISCAN 位 (MICMD<1>)置 1。扫描操作 开始, BUSY 位置 1。 DS39762A_CN 第 218 页 超前信息 2006 Microchip Technology Inc. 2006 Microchip Technology Inc. 表 18-2: 地址 PIC18F97J60 系列 PHY 寄存器汇总 名称 Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 — PPWRSV 00h PHCON1 PRST PLOOPBK — 01h PHSTAT1 — — — 02h PHID1 PHY 标识符 (OUI3:OUI18) = 0083h 03h PHID2 PHY 标识符 (OUI19:OUI24) = 000101 PHFDPX PHHDPX Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 r — — — PDPXMD r — — — — — — — — — — Bit 2 Bit 1 Bit 0 复位值 — — — 00-- 00-0 0--- ---- LLSTAT JBSTAT — ---1 1--- ---- -000000 0000 1000 0011 10h PHCON2 — FRCLNK TXDIS 11h PHSTAT2 — — TXSTAT 12h PHIE r r r r 13h PHIR r r r r 14h PHLCON r r r r r PHY P/N (PPN5:PPN0) = 00h r PHY 版本号 (PREV3:PREV0) = 00h 0001 0100 0000 0000 JABBER r HDLDIS r r r r r r r r -000 0000 0000 0000 LSTAT DPXSTAT(1) — — — PLRITY — — — — — --00 00x- --0- ---- r r r r r r r PLNKIE r r PGEIE r xxxx xxxx xx00 xx00 r r r r r r r PLNKIF r PGIF r r xxxx xxxx xx00 00x0 STRCH r 0011 0100 0010 001x RXSTAT COLSTAT LACFG3:LACFG0 LBCFG3:LBCFG0 LFRQ1:LFRQ0 图注: x = 未知, u = 不变, - = 未用 (读为 0), r = 保留 (不能修改)。未使用阴影单元,读为 0。 注 1: 双工模式 / 状态位的复位值取决于 LED 到 LEDB 引脚的连接 (更多详细信息,请参见第 18.1.2 节 “LED 配置”)。 超前信息 PIC18F97J60 系列 DS39762A_CN 第 219 页 PIC18F97J60 系列 寄存器 18-10: PHCON1:PHY 控制寄存器 1 R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 U-0 R/W-0 PRST PLOOPBK — — PPWRSV r — PDPXMD bit 15 bit 8 R/W-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 r — — — — — — — bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 15 PRST:PHY 软件复位位 1 = PHY 正在进行软件复位 (完成后自动复位为 0) 0 = 正常操作 bit 14 PLOOPBK:PHY 环回位 1 = 所有发送的数据都返回到 MAC。双绞线接口被禁止。 0 = 正常操作 bit 13-12 未用:读为 0 bit 11 PPWRSV:PHY 掉电位 1 = PHY 关闭 0 = 正常操作 bit 10 保留:保持为 0 bit 9 未用:读为 0 bit 8 PDPXMD:PHY 双工模式位 1 = MAC 工作于全双工模式 0 = MAC 工作于半双工模式 bit 7 保留:保持为 0 bit 6-0 未用:读为 0 DS39762A_CN 第 220 页 超前信息 x = 未知 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 18-11: PHSTAT1:物理层状态寄存器 1 U-0 U-0 U-0 R-1 R-1 U-0 U-0 U-0 — — — PHFDPX PHHDPX — — — bit 15 bit 8 U-0 U-0 U-0 U-0 U-0 R/LL-0 R/LH-0 U-0 — — — — — LLSTAT JBSTAT — bit 7 bit 0 图注: 1=置1 R = 只读位 0 = 清零 U = 未用位,读为 0 -n = POR 值 R/L = 只读锁存位 LL = 低电平锁存位 LH = 高电平锁存位 bit 15-13 未用:读为 0 bit 12 PHFDPX: PHY 全双工功能位 1 = 在全双工模式下, PHY 工作速率可达 10 Mbps (该位始终置 1) bit 11 PHHDPX: PHY 半双工功能位 1 = 在半双工模式下, PHY 工作速率可达 10 Mbps (该位始终置 1) bit 10-3 未用:读为 0 bit 2 LLSTAT:PHY 锁存链路状态位 1 = 链路建立,并且自上次读 PHSTAT1 之后一直处于建立状态 0 = 链路断开,或上次读 PHSTAT1 之后断开一段时间 bit 1 JBSTAT: PHY 锁存超时传输状态位 1 = 上次读 PHSTAT1 之后, PHY 检测到有一次数据发送满足超时传输条件 0 = 上次读 PHSTAT1 之后, PHY 未检测到任何超时传输 bit 0 未用:读为 0 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 221 页 PIC18F97J60 系列 寄存器 18-12: PHCON2:PHY 控制寄存器 2 U-0 R/W-0 R/W-0 R/W-x R/W-x R/W-0 R/W-0 R/W-0 — FRCLNK TXDIS r r JABBER r HDLDIS bit 15 bit 8 R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x r r r r r r r r bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 15 未用:读为 0 bit 14 FRCLNK:PHY 强制建立链路位 1 = 即使未检测到链路伙伴也强制建立链路 0 = 正常操作 bit 13 TXDIS:双绞线发送器禁止位 1 = 禁止双绞线发送器 0 = 正常操作 bit 12-11 保留:写为 0 bit 10 JABBER:超时传输校正禁止位 1 = 禁止超时传输校正 0 = 正常操作 bit 9 保留:写为 0 bit 8 HDLDIS: PHY 半双工环回禁止位 当 PHCON1<8> = 1 或 PHCON1<14> = 1 时: 该位被忽略。 当 PHCON1<8> = 0 且 PHCON1<14> = 0 时: 1 = 发送数据仅在双绞线接口送出 0 = 发送数据将环回到 MAC,并在双绞线接口送出 bit 7-0 保留:写为 0 DS39762A_CN 第 222 页 超前信息 x = 未知 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 18-13: PHSTAT2:物理层状态寄存器 2 U-0 U-0 R-0 R-0 R-0 R-0 R-x U-0 — — TXSTAT RXSTAT COLSTAT LSTAT DPXSTAT(1) — bit 15 bit 8 U-0 U-0 R-0 U-0 U-0 U-0 U-0 U-0 — — PLRITY — — — — — bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 15-14 未用:读为 0 bit 13 TXSTAT: PHY 发送状态位 1 = PHY 正在发送数据 0 = PHY 不在发送数据 bit 12 RXSTAT:PHY 接收状态位 1 = PHY 正在接收数据 0 = PHY 不在接收数据 bit 11 COLSTAT: PHY 冲突状态位 1 = 当前发生了冲突 0 = 当前未发生冲突 bit 10 LSTAT: PHY 链路状态位 (非锁存位) 1 = 链路建立 0 = 链路断开 bit 9 DPXSTAT:PHY 双工状态位 (1) 1 = PHY 配置为全双工操作 (PHCON1<8> 置 1) 0 = PHY 配置为半双工操作 (PHCON1<8> 清零) bit 8-6 未用:读为 0 bit 5 PLRITY:极性状态位 1 = TPIN+/TPIN- 上信号的极性相反 0 = TPIN+/TPIN- 上信号的极性正确 bit 4-0 未用:读为 0 注 x = 未知 1:双工模式 / 状态位的复位值取决于 LED 到 LEDB 引脚的连接 (更多详细信息,请参见第 18.1.2 节 “LED 配 置”)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 223 页 PIC18F97J60 系列 寄存器 18-14: PHLCON:PHY 模块 LED 控制寄存器 R/W-0 R/W-0 R/W-1 R/W-1 R/W-0 R/W-1 R/W-0 R/W-0 r r r r LACFG3 LACFG2 LACFG1 LACFG0 bit 15 bit 8 R/W-0 R/W-0 R/W-1 R/W-0 R/W-0 R/W-0 R/W-1 R/W-x LBCFG3 LBCFG2 LBCFG1 LBCFG0 LFRQ1 LFRQ0 STRCH r bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 15-14 保留:写为 0 bit 13-12 保留:写为 1 bit 11-8 LACFG3:LACFG0: LEDA 配置位 0000 = 保留 0001 = 显示发送活动 (时间可延长) 0010 = 显示接收活动 (时间可延长) 0011 = 显示冲突活动 (时间可延长) 0100 = 显示链路状态 0101 = 显示双工状态 0110 = 保留 0111 = 显示发送和接收活动 (时间可延长) 1000 = 亮 1001 = 灭 1010 = 快速闪烁 1011 = 慢速闪烁 1100 = 显示链路状态和接收活动 (时间总是延长的) 1101 = 显示链路状态和发送 / 接收活动 (时间总是延长的) 1110 = 显示双工状态和冲突活动 (时间总是延长的) 1111 = 保留 bit 7-4 LBCFG3:LBCFG0: LEDB 配置位 0000 = 保留 0001 = 显示发送活动 (时间可延长) 0010 = 显示接收活动 (时间可延长) 0011 = 显示冲突活动 (时间可延长) 0100 = 显示链路状态 0101 = 显示双工状态 0110 = 保留 0111 = 显示发送和接收活动 (时间可延长) 1000 = 亮 1001 = 灭 1010 = 快速闪烁 1011 = 慢速闪烁 1100 = 显示链路状态和接收活动 (时间总是延长的) 1101 = 显示链路状态和发送 / 接收活动 (时间总是延长的) 1110 = 显示双工状态和冲突活动 (时间总是延长的) 1111 = 保留 bit 3-2 LFRQ1:LFRQ0:LED 脉冲延长时间配置位 (见表 18-1) 11 = 保留 10 = LED 事件延长 TLSTRCH 01 = LED 事件延长 TMSTRCH 00 = LED 事件延长 TNSTRCH bit 1 STRCH: LED 脉冲延长使能位 1 = 根据 LFRQ1:LFRQ0 的配置,对可延长 LED 事件进行 LED 脉冲延长 0 = 仅当可延长 LED 事件发生时才显示 bit 0 保留:不能修改 DS39762A_CN 第 224 页 超前信息 x = 未知 2006 Microchip Technology Inc. PIC18F97J60 系列 18.3 以太网中断 注: 以太网模块可生成多个中断条件。为了适应所有这些中 断源,模块具有其自身的中断逻辑结构,与单片机的中 断逻辑结构很相似。模块使用了独立的寄存器组来允许 和标志不同的中断条件。 EIE 寄存器包含各个中断源的中断允许位,而 EIR 寄存 器包含相应的中断标志位。当发生中断时,中断标志位 置1。如果 EIE寄存器中允许了中断,并且相应的ETHIE 全局中断允许位置 1,那么单片机主以太网中断标志 (ETHIF)也将置 1 (见图 18-5)。 图 18-5: 18.3.1 当产生中断条件时,不论相应的中断允许 位或相关的全局中断允许位的状态如何, 除了 LINKIF 中断标志之外,中断标志位都 将置 1。用户软件应在允许中断前,确保先 将相应的中断标志位清零。中断标志位用 于软件查询。 控制中断 (ETHIE) 寄存器 18-15 至寄存器 18-18 给出了与中断控制相关的 4 个寄存器。 以太网模块中断逻辑 PKTIF PKTIE DMAIF PLNKIF PLNKIE PGIF PGEIE DMAIE LINKIF LINKIE 将 ETHIF 置 1 TXIF TXIE ETHIE TXERIF TXERIE RXERIF RXERIE 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 225 页 PIC18F97J60 系列 寄存器 18-15: EIE:以太网中断允许寄存器 U-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 — PKTIE DMAIE LINKIE TXIE — TXERIE RXERIE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 未用:读为 0 bit 6 PKTIE:接收数据包等待处理中断允许位 1 = 允许接收数据包等待处理中断 0 = 禁止接收数据包等待处理中断 bit 5 DMAIE:DMA 中断允许位 1 = 允许 DMA 中断 0 = 禁止 DMA 中断 bit 4 LINKIE:链路状态改变中断允许位 1 = 允许来自 PHY 的链路状态改变中断 0 = 禁止链路改变中断 bit 3 TXIE:发送使能位 1 = 允许发送中断 0 = 禁止发送中断 bit 2 未用:读为 0 bit 1 TXERIE:发送错误中断允许位 1 = 允许发送错误中断 0 = 禁止发送错误中断 bit 0 RXERIE:接收错误中断允许位 1 = 允许接收错误中断 0 = 禁止接收错误中断 DS39762A_CN 第 226 页 超前信息 x = 未知 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 18-16: EIR:以太网中断请求 (标志)寄存器 U-0 R-0 R/C-0 R-0 R/C-0 U-0 R/C-0 R/C-0 — PKTIF DMAIF LINKIF TXIF — TXERIF RXERIF bit 7 bit 0 图注: R = 可读位 C = 可清零位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 未用:读为 0 bit 6 PKTIF:接收数据包等待处理中断标志位 1 = 接收缓冲区中有一个或多个未处理的数据包;当 PKTDEC 置 1 时 PKTIF 清零。 0 = 接收缓冲区为空 bit 5 DMAIF:DMA 中断标志位 1 = DMA 复制或校验和计算已完成 0 = 没有等待响应的 DMA 中断 bit 4 LINKIF:链路改变中断标志位 1 = PHY 报告链路状态已经改变,读 PHIR 寄存器清零该位 0 = 链路状态未改变 bit 3 TXIF:发送中断标志位 1 = 发送请求已结束 0 = 没有等待响应的发送中断 bit 2 未用:读为 0 bit 1 TXERIF:发送错误中断标志位 1 = 发生了发送错误 0 = 未发生发送错误 bit 0 RXERIF:接收错误中断标志位 1 = 由于缓冲区空间不足或者数据包数已经达到 255,而中止数据包接收 0 = 没有等待响应的接收错误中断 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 227 页 PIC18F97J60 系列 寄存器 18-17: PHIE:PHY 中断允许寄存器 R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x r r r r r r r r bit 15 bit 8 R/W-x R/W-x R/W-0 R/W-0 R/W-x R/W-x R/W-0 R/W-0 r r r PLNKIE r r PGEIE r bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 15-6 保留:写为 0,读取则忽略 bit 5 保留:保持为 0 bit 4 PLNKIE: PHY 链路改变中断允许位 1 = 允许 PHY 链路改变中断 0 = 禁止 PHY 链路改变中断 bit 3-2 保留:写为 0,读取则忽略 bit 1 PGEIE:PHY 全局中断允许位 1 = 允许 PHY 中断 0 = 禁止 PHY 中断 bit 0 保留:保持为 0 寄存器 18-18: x = 未知 PHIR:PHY 中断请求 (标志)寄存器 R-x R-x R-x R-x R-x R-x R-x R-x r r r r r r r r bit 15 bit 8 R-x R-x R-0 R/SC-0 R-0 R/SC-0 R-x R-0 r r r PLNKIF r PGIF r r bit 7 bit 0 图注: R = 可读位 SC = 自清零位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 15-6 bit 5 x = 未知 保留:不能修改 保留:读为 0 bit 4 PLNKIF:PHY 链路改变中断标志位 1 = 上次读 PHIR 之后 PHY 链路状态已经改变,读取时复位为 0 0 = 上次读 PHIR 之后 PHY 链路状态未改变 bit 3 保留:读为 0 bit 2 PGIF:PHY 全局中断标志位 1 = 上次读 PHIR 之后,发生了一个或多个被允许的 PHY 中断,读取时复位为 0 0 = 未发生 PHY 中断 bit 1 保留:不能修改 bit 0 保留:读为 0 DS39762A_CN 第 228 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.3.1.1 接收错误中断 (RXERIF) 接收错误中断用来指示接收缓冲区的溢出状况。或者, 该中断也可能指示接收缓冲区中数据包太多,再接收的 话将造成 EPKTCNT 寄存器溢出。 如果在接收数据包时,接收缓冲区空间完全用尽,或者 EPKTCNT 达到 255 已不能再增加,则中止正在接收的 数据包(永久丢失),并将 RXERIF 位置 1。一旦置 1, RXERIF 就只能由固件或复位条件清零。如果允许接收 错误中断和以太网中断 (RXERIE 和 ETHIE 均置 1), 则 将 产 生 以 太 网 中 断。如 果 未 允 许 接 收 错 误 中 断 (RXERIE 或 ETHIE 清零),用户应用程序可以查询 RXERIF 并执行适当的操作。 通常,在出现接收错误时,应用程序将处理接收缓冲区 中等待处理的数据包,然后通过递增 ERXRDPT 寄存器 (首先是低字节)和递减 EPKTCNT 寄存器,为以后接 收的数据包留出更多空间。关于数据包处理的更多信 息,请参见第 18.5.3.3 节 “释放接收缓冲区空间”。处 理之后,应用程序应当立即清零 RXERIF 位。 18.3.1.2 发送错误中断 (TXERIF) 发送错误中断用来指示发送被中止的情况。中止可由以 下任何条件造成: 1. 2. 3. 4. 5. 发生过多的冲突,超过 MACLCON1 寄存器中重 发最大数 (RETMAX)位定义的数目。 发生了MACLCON2寄存器中冲突窗口(COLWIN) 位定义的迟冲突。 发送 64 字节之后发生了冲突(LATECOL 置 1)。 由于介质被持续占用的时间过长,达到了延迟时 限,无法发送数据包。DEFER 位(MACON4<6>) 清零。 在未将 HFRMEN 位 (MACON3<2>)或每个数 据包的 POVERRIDE 和 PHUGEEN 位置 1 的情 况下,尝试发送大于 MAMXFL 寄存器中定义的 最大帧长的数据包。 2006 Microchip Technology Inc. 在以上任何情况下, TXERIF 标志位都将置 1。一旦置 1,就只能由固件或复位条件清零。如果允许了发送错 误中断 (TXERIE 和 ETHIE 均置 1),则将产生以太网 中断。如果未允许发送错误中断(TXERIE 或 ETHIE 清 零),应用程序可以查询 TXERIF 并执行适当的操作。 处理中断之后,应当立即清零标志位。 在发送中止之后, TXRTS 位清零、 TXABRT 位 (ESTAT<1>)置 1、发送状态向量将写入 ETXND + 1 位置处。MAC 不会自动尝试重发数据包。应用程序可以 读发送状态向量和 LATECOL 位来判断中止的原因。确 定问题和解决方法之后,应用程序应清零 LATECOL 位 (如果置 1)和 TXABRT 位,以便可以准确地检测到以 后发生的中止。 在全双工模式下,只有条件 5 可以引发中断。在全双工 网络中,不会发生冲突及其他与网络共享相关的问题。 导致发送错误中断的条件满足发送中断的要求。因而, 当发生该中断时, TXIF 也将同时置 1。 18.3.1.3 发送中断 (TXIF) 发送中断用于指示所请求的数据包发送已经结束 (TXRTS 位由 1 转变为 0)。在发送完成、中止或应用 程序取消发送时,TXIF 标志都会置 1。如果应用程序未 清零 TXRTS 位,而 TXABRT 位未置 1,则说明数据包 发送成功。一旦 TXIF 置 1,就只能由固件或复位条件清 零。如果允许了发送中断 (TXIE 和 ETHIE 均置 1), 则将产生中断。如果未允许发送中断 (TXIE 或 ETHIE 清零),应用程序可以查询 TXIF 位并执行适当的操作。 超前信息 DS39762A_CN 第 229 页 PIC18F97J60 系列 18.3.1.4 18.3.1.6 链路改变中断 (LINKIF) 接收数据包等待处理中断 (PKTIF) LINKIF 用于指示链路状态发生了改变。当前的链路状态可 通过 LLSTAT(PHSTAT1<2>)或 LSTAT(PHSTAT2<10>) 位获得(见寄存器 18-11 和寄存器 18-13)。与其他中断源 不同,链路状态改变中断产生于 PHY 模块的内部;必须采 取另外的步骤来允许该中断。 接收数据包等待处理中断用来指出接收缓冲区中存在一 个或多个数据包,并用来通知接收到新的数据包。当接 收缓冲区中有至少一个数据包时, PKTIF 标志位置 1。 换言之,只要以太网数据包计数寄存器 (EPKTCNT) 非零,该中断标志都将置 1。 在默认复位状态下,无论如何都不会将 LINKIF 位置 1。 要允许该中断,必须将 PLNKIE 和 PGEIE 位都置 1。当 允许该中断时,LINKIF 位将覆盖 PGIF 位的内容。由于 PHY 仅支持一个中断,因此 PGIF 位始终和 PLNKIF 位 的状态保持一致 (两个 PHY 允许位都置 1 时)。 当允许接收数据包等待处理中断(PKTIE 和 INTIE 均置 1)时,只要成功接收到新的数据包并写入接收缓冲区, 就会产生以太网中断。如果未允许接收数据包等待处理 中断 (PKTIE 或 INTIE 清零),用户应用程序可以查询 PKTIF 位并执行适当的操作。 一旦 LINKIF 置 1,就只能由软件或复位清零。如果允许 了链路改变中断(LINKIE、PLNKIE、PGEIE 和 ETHIE 均置 1) ,则将产生中断。如果未允许链路改变中断 (LINKIE、PLNKIE、PGEIE 或 ETHIE 清零),用户应 用程序可以查询 PLNKIF 并执行适当的操作。 PKTIF 位只能通过在软件中将 EPKTCNT 寄存器减至 0 来 间 接 清 零,或 者 通 过 复 位 条 件 清 零。关 于 清 零 EPKTCNT 寄存器的更多信息,请参见第 18.5.3 节 “接 收数据包” 。当处理完接收缓冲区中的最后一个数据包 时, EPKTCNT 变为 0, PKTIF 位自动清零。 LINKIF 是只读位。由于读 PHY寄存器需要一段不可忽略 的时间,应用程序可以将 PLNKIE 和 PGEIE 置 1,然后 查询 LINKIF 标志位。对 PHIR 寄存器执行 MII 读操作将 自动清零 LINKIF、 PGIF 和 PLNKIF 位,并允许以后的 链路改变中断。关于访问 PHY 寄存器的更多信息,请参 见第 18.2.5 节 “PHY 寄存器”。 18.3.1.5 DMA 中断 (DMAIF) DMA 中断指示 DMA 模块已经完成存储器内容复制或校 验和计算 (DMAST 位从 1 转换为 0)。此外,如果应 用程序通过手动清零 DMAST 位而取消 DMA 操作,也 会引发该中断。DMAIF 一旦置 1,就只能由固件或复位 条件清零。如果允许了 DMA 中断,则将产生以太网中 断。如果未允许 DMA 中断,用户应用程序可以查询 DMAIF 标志位的状态,并执行适当的操作。处理中断之 后,应当立即清零标志位。 DS39762A_CN 第 230 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.4 18.4.5 模块初始化 只有在对器件的某些设置进行初始化之后,以太网模块 才能发送和接收数据包。根据应用的不同,一些配置选 项可能需要更改。正常情况下,这些在复位之后一次性 配置即可,之后就不再变动。 18.4.1 如果应用程序要处理大量的数据,并频繁传送数据包, 可以将大部分存储空间分配作为接收缓冲区。如果应用 程序需要保存旧的数据包,或者准备同时发送几个数据 包,则应分配较少的接收存储器空间。 当设定 ERXST 或 ERXND 指针时,ERXWRPT 指针寄存 器将自动更新为 ERXST 中的值。当硬件开始写接收到的 数据时,将使用ERXWRPT 中的地址作为写操作的起始 地址。为了进行跟踪,ERXRDPT 寄存器应设定为相同的 值。在设定ERXRDPT寄存器时,应首先写ERXRDPTL, 然后再写 ERXRDPTH。更多信息,请参见第 18.5.3.3 节 “释放接收缓冲区空间”。 18.4.2 发送缓冲区 2. 3. 4. 5. 7. 8. 接收过滤器 通过写 ERXFCON 寄存器可以使能或禁止接收过滤器。 关于如何配置接收过滤器的信息,请参见第 18.8 节 “接 收过滤器”。 18.4.4 1. 6. 所有未用于接收缓冲区的存储器空间都属于发送缓冲 区。要发送的数据应写入未用的空间。不过,在发送数 据包之后,硬件会在数据包的最后一个字节之后,向存 储器写入一个 7 字节的状态向量。因此,应用程序应在 数据包之间,以及接收缓冲区的起始单元之前,保留至 少 7 字节的空间。 18.4.3 初始化期间需要对几个 MAC 寄存器进行配置。这只需 要在初始化期间进行一次即可,设定次序无关紧要。 接收缓冲区 接收缓冲区必须通过设置 ERXST 和 ERXND 指针进行 初始化,然后才能接收数据包。 ERXST 和 ERXND 地 址 (含)之间的所有存储空间都专供接收硬件使用。建 议将 ERXST 指针设定为偶地址。 MAC 初始化设置 9. 将 MARXEN 位 (MACON1<0>)置 1 以使能 MAC 接收帧。如果使用全双工模式,大部分应用 还应该将 TXPAUS 和 RXPAUS 置 1,以使 IEEE 定义的流量控制生效。 配置 MACON3 寄存器中的 PADCFG<2:0>、 TXCRCEN 和 FULDPX 位。大部分应用应当使能 自动填充至 60 字节,并始终追加一个有效的 CRC。为了方便起见,许多应用可能还需要将 FRMLNEN 位置 1,以使能帧长状态报告。如果 应用要连接到配置为全双工模式的远程节点,则 应将 FULDPX 位置 1 ;否则,应保持清零。 配置 MACON4 中的位。为了符合 IEEE 802.3 的 规定,应确保将DEFER位(MACON4<6>)置1。 将 MAMXFL 寄存器设定为允许接收或发送的最 大帧长。网络节点通常设计为处理不大于 1518字 节的数据包。 配置背对背包间间隔寄存器 MABBIPG。当使用 全双工模式时,大部分应用将该寄存器设定为 15h ;当使用半双工模式时,设定为 12h。关于配 置包间间隔的更多详细描述,请参见寄存器 18-19。 配置非背对背包间间隔低字节寄存器 MAIPGL。 大部分应用将该寄存器设定为 12h。 如果使用半双工模式,应对非背对背包间间隔高 字节寄存器 MAIPGH 进行设定。大部分应用将该 寄存器设定为 0Ch。 如果使用半双工模式,需要对重发最大数和冲突 窗口寄存器 MACLCON1 和 MACLCON2 进行设 定。大部分应用不需要修改默认的复位值。在网 路 线 特 别 长 的 情 况 下,可 能 需 要 增 大 MACLCON2 的默认值。 将本地 MAC 地址写入 MAADR1:MAADR6 寄存 器。 等待 PHY 起振定时器 如果在使能模块之后立即执行初始化过程(ECON2<5> 置 1),则应查询 PHYRDY 位,确保修改 PHY 寄存器 之前已经经过足够的时间(典型值为 1 ms)。关于 PHY 起振定时器的更多信息,请参见第 18.1.3.1 节“起振定 时器”。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 231 页 PIC18F97J60 系列 寄存器 18-19: MABBIPG:MAC 背对背包间间隔寄存器 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 — BBIPG6 BBIPG5 BBIPG4 BBIPG3 BBIPG2 BBIPG1 BBIPG0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 未用:读为 0 bit 6-0 BBIPG6:BBIPG0:背对背包间间隔延时时间位 当 FULDPX (MACON3<0>) = 1 时: 在背对背序列中,前一次发送结束和下一次发送起始之间延时半字节的时间。应使用半字节时间的整 数倍时间减 3 来对寄存器值进行设定。建议将该寄存器设置为 15h,它表示 IEEE 中规定的最小包间间 隔 (IPG) 9.6 µs。 当 FULDPX (MACON3<0>) = 0 时: 在背对背序列中,前一次发送结束和下一次发送起始之间延时半字节的时间。应使用半字节时间的整 数倍时间减 6 来对寄存器的值进行设定。建议将该寄存器设置为 12h,它表示 IEEE 中指定的最小包间 间隔 (IPG) 9.6 µs。 18.4.6 PHY 初始化设置 18.4.7 根据应用的不同,可能还需要对 3 个 PHY 模块寄存器 中的位进行配置。 PDPXMD 位 (PHCON1<8>)控制 PHY 半 / 全双工模 式的配置。应用程序必须正确地设定该位和 FULDPX 位 (MACON3<0>)。 HDLDIS 位 (PHCON2<8>)禁止数据自动环回。该位 应始终置 1。 PHY 寄存器 PHLCON (寄存器 18-14)控制 LEDA 和 LEDB 的输出。如果应用需要不同于默认的 LED 配置, 可以修改该寄存器来满足新的要求。在第 18.1.2 节 “LED 配置”中讨论了 LED 操作的设置。 DS39762A_CN 第 232 页 禁止以太网模块 在某些情况下,可能会有较长时间不会用到以太网模 块。例如,有些情况只需要在发生特殊事件时才发送或 接收以太网数据包。在这些情况下,可以选择性地关闭 模块。 要选择性地禁止模块: 1. 2. 3. 4. 超前信息 通过清零 RXEN 位禁止数据包接收。 通过查询 RXBUSY 位 (ESTAT<2>)等待正在 接收中的数据包完成接收。应先将该位清零。 通过确认 TXRTS 位 (ECON1<3>)是否清零等 待当前所有的发送结束。 清零 ETHERN 位。这使所有 MAC、MII 和 PHY 寄存器变成不可访问,并自动清零 PHYRDY 位。 2006 Microchip Technology Inc. PIC18F97J60 系列 18.5 发送和接收数据 以太网协议 (IEEE 标准 802.3)非常详细地描述了基 于帧的 10 Mbps 串行通信系统。在讨论以太网模块的实 际使用之前,有必要简要概述一下典型以太网数据帧的 结构。以下内容假设用户已经对 IEEE 802.3 有一定程 度的了解。对于那些需要更多信息的用户,可以参考官 方标准或其他关于以太网的参考文章,以获取更全面的 信息。 18.5.1 数据包格式 符合 IEEE 802.3 标准的正常以太网帧的长度介于 64 和 1518 字节之间。它们由 5 或 6 个不同的字段组成。这 些字段分别是:目标 MAC 地址、源 MAC 地址、类型 / 长度字段、数据有效负载、可选的填充字段和循环冗余 校验 (Cyclic Redundancy Check, CRC)。此外,在 图 18-6: 以太网介质上进行发送时,在以太网数据包的前面还要 添加一个 7 字节的前导字段和一个 Start-of-Frame 定界 符字节。因此,双绞线电缆上的通信数据将会如图 18-6 所示。 18.5.1.1 前导 /Start-of-Frame 定界符 当以太网模块发送和接收数据时,将在发送时自动生成 前导和 Start-of-Frame 定界符字节,而在接收时从数据 包中剥离它们。还可以在发送时自动地根据需要生成 CRC 字段和填充数据,并在接收时校验 CRC 数据。用 户应用程序无需创建或处理这些字段,或手动校验CRC 数据。不过,当数据包到达时,填充数据和 CRC 字段 会被写入接收缓冲区,所以用户应用程序可以根据需要 对其进行评估。 以太网数据包格式 字节 编号 字段 注释 7 前导 由模块滤除 1 SFD Start-of-Frame 定界符 (由模块滤除) 6 DA 目标地址, 例如组播、广播或单播地址 6 SA 源地址 2 类型 / 长度 用于 计算 FCS 数据包的类型或长度 数据 数据包有效负载 (以及可选的填充数据) 46-1500 填充数据 4 注 FCS(1) 帧校验序列——CRC 1: FCS 从 bit 31 开始发送,以 bit 0 结束。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 233 页 PIC18F97J60 系列 18.5.1.2 18.5.1.5 目标地址 数据 目标地址字段为 6 字节长,包含数据包要发往的设备的 MAC 地址。如果 MAC 地址首字节的最低有效位置 1, 则地址为组播目标地址。例如, 01-00-00-00-F0-00 和 33-45-67-89-AB-CD 是组播地址,而 00-00-00-00-F0-00 和 32-45-67-89-AB-CD 不是组播地址。 数据字段是一个可变长度的字段,长度可以为 0 到 1500 字节。更大的数据包会违反以太网标准,会被大部分以 太网节点抛弃。不过,在超大帧使能位 HFRMEN 置 1 时 (MACON3<2> = 1),以太网模块可以发送和接收更大 的数据包。 带组播目标地址的数据包将被送至一组选定的以太网节 点。如 果 目 标 地 址 字 段 是 保 留 的 组 播 地 址 FF-FF-FF-FF-FF-FF,则数据包是广播数据包,它将被 发送给共享网络的每一个节点。如果 MAC 地址首字节 的最低有效位清零,则地址为单播地址,只能供被寻址 的节点使用。 18.5.1.6 以太网模块在内部实现了一些接收过滤器,它们可以用 来滤除或接收具有组播、广播和 / 或单播目标地址的数 据包。在发送数据包时,应用程序需要负责将所需的目 标地址写入发送缓冲区。 18.5.1.3 源地址 源地址字段为 6 字节长,包含创建以太网数据包的节点 的 MAC 地址。以太网模块用户必须为所使用的每个单 片机生成一个唯一的 MAC 地址。 MAC地址包含两个部分。前三个字节是组织唯一标识符 (OUI)。OUI 由 IEEE 分配。后三个字节是由购买 OUI 的公司定义的地址字节。 在发送数据包时,应用程序必须将分配的源 MAC 地址 写入发送缓冲区。模块不会自动发送 MAADR 寄存器的 内容,这些寄存器是供单播接收过滤器使用的。 18.5.1.4 类型 / 长度 类型 / 长度字段是一个 2 字节字段,它定义后面数据包 中的数据属于何种协议。或者,如果该字段填充的数值 小于等于 05DCh (1500),则字段视为长度字段,它 指定后面的数据字段中非填充数据的数量。使用专用网 络的用户可以选择将此字段用作长度字段;使用诸如因 特网 协 议 (Internet Protocol, IP)或地址解析协议 (Address Resolution Protocol,ARP)的用户,在发送数 据包时应将该字段设定为协议规范中所定义的适当类 型。 DS39762A_CN 第 234 页 填充数据 填充字段也是一个可变长度的字段,添加该字段是为了 在数据有效负载较小时也能满足 IEEE 802.3 规范要求。 以太网数据包的目标、源、类型、数据和填充字段合起 来不能小于 60 字节。加上必要的 4 字节 CRC 字段,数 据包不能小于 64 字节。如果数据字段长度小于 46 字 节,则需要填充字段。 在发送数据包时,如果 PADCFG2:PADCFG0 位 (MACON3<7:5>)配置为执行填充操作,以太网模块会 自动生成填充数据 0。否则,用户应用程序需要在发送 数据包之前,为其添加填充数据。如果应用程序命令发 送小于规定大小的数据包,模块并不会拒绝该操作。 在接收数据包时,模块会自动拒收长度小于 18 字节的 数据包。所有 18 字节或更大的数据包将按标准接收过 滤条件进行处理,可能会作为正常通信数据而接收。因 为模块仅拒绝长度小于 18 字节的数据包,固件应对每 个接收到的数据包进行长度检查并拒绝长度小于 64 字 节的数据包,以符合 IEEE 802.3 规范要求,这一点很 重要。 18.5.1.7 CRC CRC 字段是一个 4 字节的字段,其中包含工业标准的 32 位 CRC 值,该值是从目标、源、类型、数据和填充 字段计算得到的。 在接收数据包时,以太网模块会检查每个到达数据包的 CRC。如果 CRCEN 位置 1,将自动丢弃具有无效 CRC 的数据包。如果 CRCEN 清零,并且数据包满足其他所 有接收过滤条件,则将数据包写入接收缓冲区,应用程 序可以通过读接收状态向量来确定 CRC 是否有效 (见 第 18.5.3 节 “接收数据包”)。 在发送数据包时,模块会自动生成一个有效的 CRC,并 自动发送它 (如果 PADCFG2:PADCFG0 位配置为执行 此操作)。否则,必须由用户应用程序生成 CRC,并将 其写入发送缓冲区。鉴于 CRC 计算的复杂性,强烈建议 用户让模块自动计算和添加 CRC。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.5.2 发送数据包 在发送时,以太网模块的 MAC 会自动生成前导字段和 Start-of-Frame 定界符字段。此外,MAC 可以生成任何 填充数据(如果需要)和 CRC(如果配置为这样做)。 其他所有帧字段必须由应用程序生成,并将其写入发送 缓冲存储区。 图 18-7: 此外,以太网模块要求每个发送数据包之前有一个数据 包控制字节。控制字节的结构如图 18-7 所示。在发送 数据包之前,应对修改发送特性的MAC寄存器进行初始 化设置 (请参见第 18.4 节 “模块初始化”)。 数据包控制字节的格式 — — — — PHUGEEN PPADN PCRCEN POVERRIDE bit 7 bit 0 bit 7-4 未使用 bit 3 PHUGEEN:数据包超大帧使能位 当 POVERRIDE = 1 时: 1 = 发送完整的数据包 0 = MAC 发送 MAMXFL 规定的最大字节数。如果数据包大于 MAMXFL,发送字节数达到 MAMXFL 后将中止发送。 当 POVERRIDE = 0 时: 该位被忽略。 bit 2 PPADN:数据包填充使能位 当 POVERRIDE = 1 时: 1 = 如果数据包小于 60 字节,将用 0 填充至 60 字节 0 = 直接发送数据包,不添加任何填充字节 当 POVERRIDE = 0 时: 该位被忽略。 bit 1 PCRCEN:数据包 CRC 使能位 当 POVERRIDE = 1 时: 1 = 计算出一个有效的 CRC,并加入帧内 0 = 不追加 CRC。将帧的最后 4 个字节作为 CRC 来验证其有效性。 当 POVERRIDE = 0 时: 该位被忽略。 bit 0 POVERRIDE:数据包改写位 1 = PCRCEN、 PPADN 和 PHUGEEN 的值将改写 MACON3 定义的配置 0 = 使用 MACON3 中的值确定如何发送数据包 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 235 页 PIC18F97J60 系列 图 18-8 给出了完整的发送数据包在存储器中的结构示 例。以如下方式构建和发送数据包: 1. 2. 3. 4. 5. 设置ETXST指针使其指向缓冲区中的未用单元。 这将是数据包控制字节的存储位置。在示例中, 其地址为 0120h。建议该地址使用偶地址。 将数据包控制字节的数据、目标地址、源 MAC 地址、类型 / 长度和数据有效负载顺序地写入以 太网缓冲区。 将 ETXND 指针设置为指向数据有效负载的末字 节。在示例中,它将设定为 0156h。 完成以上操作后,清零 TXIF 标志位(EIR<3>), 并将 TXIE 位 (EIE<3>)和 ETHIE 位置 1,以 允许发生中断 (如果需要)。 通过将 TXRTS 位 (ECON1<3>)置 1 来启动发 送过程。 当正在进行发送时,不应修改 ETXST 和 ETXND 指针。 如果需要取消发送,可以清零 TXRTS 位。 当数据包发送结束,或由于错误 / 取消而中止时,将会 产生以下情况: • TXRTS 位清零 • 在ETXND + 1所指向的缓冲区位置写入一个7字节 的发送状态向量。 • TXIF 标志位置 1 • 将产生中断 (如果允许) • ETXST 与 ETXND 指针不改变。 如果将 TXRTS 位置 1 时正在进行 DMA 操作,那么模 块将等待 DMA 操作完成,之后再尝试发送数据包。这 个延时是必要的,因为 DMA 和发送引擎共用同一个存 图 18-8: 储器访问端口。类似地,如果在 TXRTS 已经置 1 之后 将 DMAST 位置 1,DMA 将等待 TXRTS 位清零,然后 再执行操作。 要检查数据包是否成功发送,可以读取 TXABRT 位。 如果它已经置 1,可以查询 LATECOL 位及发送状态向 量中的各个字段来确定原因。发送状态向量的结构如 表 18-3 所示。多字节字段使用小尾数法写入。 发送数据包结构示例 缓冲区指针 地址 存储器 ETXST = 0120h 0120h 0Eh data[1] data[2] 0121h 0122h 说明 控制 数据包 ETXND = 0156h DS39762A_CN 第 236 页 0156h 0157h 0158h 0159h 016Ah 016Bh 016Ch 016Dh 016Eh data[m] tsv[7:0] tsv[15:8] tsv[23:16] tsv[31:24] tsv[39:32] tsv[47:40] tsv[55:48] 状态向量 PHUGEEN、PPADN、 PCRCEN 和 POVERRIDE 目标地址、 源地址和 类型 / 长度和数据 由硬件写入 状态向量 下一数据包开头 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 18-3: 发送状态向量 位 55-52 字段 说明 零 0 51 发送 VLAN 标记帧 帧的长度 / 类型字段包含的值为 VLAN 协议标识符 8100h。 50 应用背压 已应用载波侦听式背压。 49 发送暂停控制帧 发送帧是一个含有有效暂停操作码的控制帧。 48 发送控制帧 发送帧是一个控制帧。 线上发送的总字节数 为当前数据包在线上发送的总字节数,包括所有因冲突尝试的字节。 发送数据不足 保留。该位始终为 0。 47-32 31 30 发送超大帧 帧字节数大于 MAXXFL。 29 发送迟冲突 冲突发生在冲突窗口 (MACLCON2)之外。 28 发送冲突过量 数据包在冲突数超过重发最大数 (MACLCON1)后中止发送。 27 发送延时过长 数据包延时时间超过 24,287 个比特时间 (2.4287ms)。 26 发送数据包延时 数据包至少延迟了一次,但延时未超出规定值。 25 发送广播 数据包的目标地址是广播地址。 24 发送组播 数据包的目标地址是组播地址。 23 发送完成 数据包发送已经完成。 22 发送长度超出范围 指示帧的类型 / 长度字段大于 1500 字节 (类型字段)。 21 发送长度校验错误 指示数据包中帧长度字段的值与实际数据字节长度不符,并且不是类型 字段。 MACON3.FRMLNEN 置 1 才能捕捉此错误。 20 发送 CRC 错误 数据包中的 CRC 与内部生成的 CRC 不匹配。 19-16 发送冲突数 在尝试发送期间,当前数据包引起的冲突次数。它适用于成功发送的数 据包,因此不会显示可能的最大冲突次数 16。 15-0 发送字节数 帧中的总字节数,不包括冲突字节。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 237 页 PIC18F97J60 系列 18.5.3 接收数据包 假设接收缓冲区已经初始化,MAC 已经正确配置,并且 已经配置了接收过滤器,那么应用程序应执行以下步骤 来接收以太网数据包: 1. 2. 3. 将 PKTIE 和 ETHIE 位置 1,以便在接收到数据 包时产生以太网中断 (如果需要)。 清零 RXERIF 标志,并将 RXERIE 和 ETHIE 都 置 1,以便在由于缓冲区空间不足而导致数据包 丢失时,产生中断 (如果需要)。 通过将RXEN位(ECON1<2>)置1来使能接收。 • • • • EPKTCNT 寄存器递增; PKTIF 位置 1 ; 产生中断 (如果允许),以及 硬件写指针 ERXWRPT 自动递增。 18.5.3.1 接收数据包结构 图 18-9 显示了接收数据包的结构。数据包的开始是一 个 6 字节的报头,报头中含有下一数据包指针,以及接 收状态向量(其中含有包括数据包大小在内的接收统计 信息)。接收状态报头如表 18-4 所示。 将 RXEN 置 1 之后,双工模式和接收缓冲区起始与结束 指针应该保持不变。此外,为防止意外数据包进入,建 议在改变接收过滤器配置 (ERXFCON)和 MAC 地址 之前,先清零 RXEN 位。 如果数据包中的末字节以奇地址结尾,那么硬件会在递 增硬件写指针时,自动追加一个填充字节。这样,所有 数据包都将起始于偶地址边界。 在使能接收之后,未过滤掉的数据包将写入循环接收缓 冲区。不符合必要过滤器条件的所有数据包都会被丢 弃,应用程序无法通过任何方式确定是否丢弃了数据 包。在接收并将数据包成功写入缓冲区之后,会发生如 下情况: 图 18-9: 接收数据包结构示例 地址 存储器 说明 数据包 N – 1 前一数据包结束 101Fh 1020h 1021h 1022h 1023h 1024h 1025h 1026h 1027h 6Eh 10h rsv[7:0] rsv[15:8] rsv[23:16] rsv[30:24] data[1] data[2] 低字节 高字节 status[7:0] status[15:8] status[23:16] status[31:24] 下一数据包指针 接收状态向量 数据包 N 1059h 106Ah 106Bh 106Ch 106Dh 106Eh data[m-3] data[m-2] data[m-1] data[m] crc[31:24] crc[23:16] crc[15:8] crc[7:0] 数据包 N + 1 DS39762A_CN 第 238 页 数据包数据:目标地址、 源地址、类型 / 长度、数据、 填充和 CRC 被跳过的字节(以确保 使用偶缓冲区地址) 下一数据包开头 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 18-4: 接收状态向量 位 字段 说明 31 零 0 30 检测到接收 VLAN 类型 确认当前帧为 VLAN 标记帧。 29 接收未知操作码 确认当前帧为控制帧,但它包含未知操作码。 28 接收暂停控制帧 确认当前帧为控制帧,其中包含有效暂停帧操作码和有效目标地址。 27 接收控制帧 确认当前帧为控制帧,因为有效的类型 / 长度字段指明它为控制帧。 26 多余数据 指示在数据包末尾,额外接收到 1 到 7 位数据。多余的位被丢弃。 25 接收广播数据包 指示接收到的数据包具有有效的广播地址。 24 接收组播数据包 指示接收到的数据包具有有效的组播地址。 23 接收正确 指示数据包具有有效的 CRC,并且无符号错误。 22 长度超出范围 指示帧的类型 / 长度字段大于 1500 字节 (类型字段)。 21 长度校验错误 指示数据包中帧长字段的值与实际数据字节长度不符,并指定了一个有效 的长度。 指示帧 CRC 字段的值与 MAC 计算的 CRC 值不匹配。 20 CRC 错误 19 保留 18 检测到载波事件 17 保留 16 长事件 / 丢弃事件 指示数据包接收时间超过 50,000 个比特时间,或上次接收之后丢弃了数据 包。 接收字节数 指示接收帧的长度。这包括目标地址、源地址、类型 / 长度、数据、填充和 CRC 字段。该字段以小尾格式存储。 15-0 18.5.3.2 指示在上次接收之后的某个时间,检测到载波事件。载波事件与该数据包 无关。载波事件是指接收通道上与数据包接收尝试操作无关的活动。 读取接收到的数据包 要处理数据包,正常情况下应用程序将从下一数据包指 针开始处读起。应用程序将保存下一数据包指针和接收 状态向量的所有必要字节,然后开始读取实际的数据包 内容。如果 AUTOINC 位置 1,则可以无需修改 ERDPT 寄存器而顺序地读取整个数据包。读指针会在达到循环 接收缓冲区的末尾时自动折回到起始处。 公式 18-1: 在应用程序需要随机访问数据包的情况下,将需要手动 计算ERDPT的值;如果数据包存储时刚好跨越ERXND 到 ERXST 的缓冲区边界,要注意不能超过接收缓冲区 的边界。也就是说,在给定数据包起始地址和所需偏移 量时,应用程序应遵循公式 18-1 中的逻辑关系。 随机访问地址计算 如果数据包起始地址 + 偏移量 > ERXND,则 ERDPT = 数据包起始地址 + 偏移量 – (ERXND – ERXST + 1) 否则 ERDPT = 数据包起始地址 + 偏移量 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 239 页 PIC18F97J60 系列 18.5.3.3 释放接收缓冲区空间 在用户应用程序处理完数据包 (或数据包的部分内 容) ,并需要释放已处理数据所占用的缓冲区空间时, 它必须递增接收缓冲区读指针 ERXRDPT。模块总是一 直写到接收缓冲区读指针所指的存储单元(不包括该单 元) 。在要覆盖接收缓冲区读指针所指向的存储单元 时,将会中止正在处理的数据包,EXERIF 标志位置 1, 并会产生中断 (如果允许)。按照这种方式,硬件将永 远不会覆盖未处理的数据包。通常,ERXRDPT 将递增 至下一数据包指针 (位于当前数据包的接收状态向量 前)所指向的地址值。遵循这样的过程,就不需要进行 任何指针计算来处理在循环接收缓冲区的末尾折回到起 始处的问题。 由于只有一个指针可用于控制缓冲区的使用权,应用程 序必须按照数据包的接收顺序来处理数据包。如果要保 存某个数据包以便稍后进行处理,应用程序应将该数据 包复制到存储器中的未用位置。通过使用内部集成的 DMA 控制器可以有效地实现该操作 (见第 18.9 节 “直 接存储器访问控制器”)。 18.5.3.4 任何时候如果应用程序需要了解接收缓冲区还剩余多少 空间,应该读硬件写指针 (ERXWRPT 寄存器),并且 将其与 ERXRDPT 寄存器进行比较。结合接收缓冲区的 已知大小,就可以算出剩余空间的大小。 注: 接收缓冲区读指针低字节 (ERXRDPTL 寄存器)会在 内部进行缓冲,以防止在仅更新一个字节时移动指针。 要移动 ERXRDPT,应用程序必须首先写 ERXRDPTL。 写操作将更新内部缓冲区,但不会影响寄存器。当应用 程序写 ERXRDPTH 时,会同时将内部缓冲的低字节装 入 ERXRDPTL 寄存器。 ERXRDPT 的两个字节可以按 任意次序读取。当读 ERXRDPT 字节时,将返回寄存器 的实际值。因而,缓冲的低字节是不可读的。 在处理完每个数据包之后,除了递增接收缓冲区读指 针 之 外,用 户 应 用 程 序 还 必 须 将 PKTDEC 位 (ECON2<6>)置 1。这将导致 EPKTCNT 寄存器减 1。递减之后,如果 EPKTCNT 为 0, PKTIF 标志位将 自动清零。否则,它将保持置 1,表示接收缓冲区中还 有其他数据包在等待处理。尝试将 EPKTCNT 减到 0 以 下的操作会被忽略。此外,如果 EPKTCNT 寄存器已达 到最大值 255,那么将中止接收所有新的数据包,即便 是还有可用的缓冲区空间。 RXERIF 位将置 1,并将产 生中断 (如果允许),以此来报告该错误。为防止这种 情况发生,每当处理完一个数据包时,用户应用程序必 须正确地递减计数器。 公式 18-2: 接收缓冲区剩余空间 只有在成功接收数据包之后, ERXWRPT 寄存器才会更新。如果应用程序在成功接 收另一个数据包之前读 ERXWRPT,那么 返回的值可能小于实际值,两者的差值为 所允许的最大帧长(MAMXFLN)+ 7。此 外,当应用程序读 ERXWRPT 的一个字节 时,可能会有新的数据包到达,并在应用 程序读 ERXWRPT 的另一字节之前更新了 指针。 如果在使能接收硬件时读 ERXWRPT 寄存器,则必须特 别小心,确保低字节和高字节是作为一对被读取的。 为确保获得配对的高低字节: 1. 2. 3. 4. 读 EPKTCNT 寄存器并保存其内容。 读 ERXWRPTL 和 ERXWRPTH。 再次读 EPKTCNT 寄存器。 比较两个数据包计数。如果不相同,则返回步骤 2。 获得硬件写指针之后,剩余空间可以按例 18-2 中所示 的方法计算。硬件禁止将写指针移动到 ERXRDPT 所指 向的地址 (除了配置缓冲区指针的情况),所以缓冲区 中始终至少有一个字节未用。公式 18-2 中的计算反映 了这一空出的字节。 接收缓冲区剩余空间计算 如果 ERXWRPT > ERXRDPT,则 剩余空间 = (ERXND – ERXST) – (ERXWRPT – ERXRDPT) 否则 如果 ERXWRPT = ERXRDPT,则 剩余空间 = (ERXND – ERXST) 否则 剩余空间 = ERXRDPT – ERXWRPT – 1 DS39762A_CN 第 240 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 18-5: 用于数据包发送的寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 EIE — PKTIE DMAIE LINKIE TXIE — TXERIE RXERIE 63 EIR — PKTIF DMAIF LINKIF TXIF — TXERIF RXERIF 63 ESTAT — BUFER — LATECOL — RXBUSY TXABRT PHYRDY 63 ECON1 TXRST RXRST DMAST CSUMEN TXRTS RXEN — — 寄存器名称 ETXSTL ETXSTH ETXNDL ETXNDH MACON1 发送开始寄存器低字节 (ETXST<7:0>) — — — 发送开始寄存器高字节 (ETXST<12:8>) 发送结束寄存器低字节 (ETXND<7:0>) — — — 发送结束寄存器高字节 (ETXND<12:8>) 64 — MACON3 60 64 — — r PADCFG2 PADCFG1 PADCFG0 TXCRCEN 64 64 TXPAUS RXPAUS PASSALL MARXEN 65 PHDREN HFRMEN FRMLNEN FULDPX 65 65 MACON4 — DEFER BPEN NOBKOFF — — r r MABBIPG — BBIPG6 BBIPG5 BBIPG4 BBIPG3 BBIPG2 BBIPG1 BBIPG0 MAIPGL — 非背对背包间间隔寄存器低字节 (MAIPGL<6:0>) 65 MAIPGH — — 非背对背包间间隔寄存器高字节 (MAIPGH<6:0>) — — — 重发最大数寄存器 (RETMAX<3:0>) 65 MACLCON1 MACLCON2 — — 65 64 64 冲突窗口寄存器 (COLWIN<5:0>) MAMXFLL 最大帧长寄存器低字节 (MAMXFL<7:0>) 64 MAMXFLH 最大帧长寄存器高字节 (MAMXFL<15:8>) 64 图注: — = 未用, r = 保留位。未使用阴影单元。 表 18-6: 用于数据包接收的寄存器汇总 寄存器名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 EIE — PKTIE DMAIE LINKIE TXIE — TXERIE RXERIE 63 EIR — PKTIF DMAIF LINKIF TXIF — TXERIF RXERIF 63 ESTAT — BUFER — LATECOL — RXBUSY TXABRT PHYRDY 63 ECON2 AUTOINC PKTDEC ETHEN — — — — — 63 ECON1 TXRST RXRST DMAST CSUMEN TXRTS RXEN — — 60 ERXSTL ERXSTH ERXNDL ERXNDH 接收开始寄存器低字节 (ERXST<7:0>) — — — 接收开始寄存器高字节 (ERXST<12:8>) 64 接收结束寄存器低字节 (ERXND<7:0>) — — — 接收结束寄存器高字节 (ERXND<12:8>) 64 64 64 ERXRDPTL 接收缓冲区读指针低字节 (ERXRDPT<7:0>) ERXRDPTH — — — 接收缓冲区读指针高字节 (ERXRDPT<12:8>) ERXFCON EPKTCNT UCEN ANDOR PMEN MPEN HTEN MCEN BCEN 64 — r TXPAUS RXPAUS PASSAL MARXEN 65 PHDREN HFRMEN FRMLNEN FULDPX 65 r 65 64 MACON1 MACON3 PADCFG2 PADCFG1 PADCFG0 TXCRCEN — DEFER 63 CRCEN 以太网数据包计数寄存器 — — MACON4 63 BPEN NOBKOFF — — r MAMXFLL 最大帧长寄存器低字节 (MAMXFL<7:0>) 64 MAMXFLH 最大帧长寄存器高字节 (MAMXFL<15:8>) 64 图注: — = 未用, r = 保留位。未使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 241 页 PIC18F97J60 系列 18.6 双工模式配置与协商 以太网模块不支持自动双工模式协商。如果将模块连接 到使能自动双工协商的网络交换机或以太网控制器上, 模块将被检测为半双工设备。要在全双工模式下通信, 必须手动将模块和远程节点(交换机、路由器或以太网 控制器)配置为全双工操作方式。 18.6.1 半双工工作方式 当 清 零 FULDPX (MACON3<0>)和 PDPXMD (PHCON1<8>)位 (= 0)时,以太网模块工作于半 双工模式。如果仅置 1 这两个位的其中一位,模块将处 于不确定的状态,无法正常工作。由于在全双工和半双 工模式之间切换会造成这种不确定状态,所以在此期间 应用程序不应发送任何数据包(保持 TXRTS 位清零), 并禁止数据包接收 (保持 RXEN 位清零)。 在半双工模式下,任何时候在物理介质上都只能有一个 以 太 网 控 制 器 发 送 数 据 包。如 果 应 用 程 序 通 过 将 TXRTS 位置 1 来请求发送数据包,而此时已有另外一 个以太网控制器正在发送,那么以太网模块将延迟,等 待远程发送器停止。当远程发送器停止时,模块将尝试 发送其数据包。如果正好有另外一个以太网控制器在近 乎同一时间也启动发送,那么将造成线上的数据损坏, 并发生冲突。 硬件将使用两种方法之一来处理这种情况。如果冲突发 生时,发送字节数未达到 MACLCON2 中冲突窗口所指 定的字节数,那么 TXRTS 位将保持置 1,并发生发送错 误中断,然后在经过一段随机指数后退延时 (由 IEEE 802.3 规范定义)之后,重新尝试从头开始发送数据包。 应 用 程 序 不 需 要 进 行 干 预。如 果 重 发 尝 试 次 数 达 到 MACLCON1 中定义的重发最大次数(RETMAX),那么 将中止数据包发送,并清零 TXRTS 位。此时,应用程序 就需要执行适当的操作。应用程序可以通过读 TXABRT 标志位确定数据包是被中止,而不是成功发送。更多信 息,请参见第 18.5.2 节 “发送数据包”。 DS39762A_CN 第 242 页 如果冲突发生时,发送字节数达到 MACLCON2 中冲突 窗口所指定的字节数,那么将立即中止数据包,不再尝 试任何重发操作。通常,如果正确配置了符合 802.3 规 范的网络,将不会发生这种迟冲突。此时,可能需要用 户干预来纠正该问题。该问题可能是由于全双工节点尝 试在半双工介质上进行发送造成的。或者,模块可能在 连接到全双工网络上时尝试工作于半双工模式。电缆过 长或网络规模过大也可能会是造成迟冲突的原因。 当设置为半双工模式时,复位默认配置会将发送的数据 包环回到发送节点。除非接收过滤器配置成将数据包过 滤掉,否则它们会像其他网络通信数据一样被写入循环 接收缓冲区中。为防止这种情况发生,需将 HDLDIS 位 置 1。 18.6.2 全双工工作方式 当 FULDPX 和 PDPXMD 位都置 1 (= 1)时,以太网 模块工作于全双工模式。如果仅清零这两个位的其中一 位,模块将处于不确定的状态,无法正常工作。重复前 面所言,由于在全双工和半双工模式之间切换可能会造 成这种不确定状态,在此期间应用程序不应发送任何数 据包,并要禁止接收数据包。 在全双工模式下,可以在发送数据包的同时接收数据 包。因此,发送数据包时不会造成任何冲突。所以将不 使用一些配置字段,如 MACLCON1 中的重发最大数 (RETMAX)字段和 MACLCON2 中的冲突窗 口 (COLWIN)字段。 当设置为全双工模式时,复位默认配置不会将发送的数 据包环回到发送节点。如果需要利用环回来进行故障诊 断,那么应用程序应将 PLOOPBK 位(PHCON1<14>) 置 1。在全双工模式下使能环回时,将禁止双绞线输出 驱动器,并忽略所有传入数据,从而将断开所有链路 (如果已建立)。所有因为环回配置而接收到的数据包, 都会像正常网络通信数据一样,需经过所有使能的接收 过滤器过滤处理。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.7 流量控制 以太网模块同时实现了全双工和半双工模式下的硬件流 量控制。该功能的操作随所使用的模式而不同。 18.7.1 半双工模式 在半双工模式下,将 FCEN0 位(EFLOCON<0>)置 1 可以使能流量控制。当 FCEN0 置 1 时,将自动在以太 网介质上持续不断地发送由交替的 1 和 0 组成的前导信 号 (55h)。所有连接节点都会检测到该数据,此时它 们或者不发送任何数据、等待该发送结束,或者尝试发 送数据并立即造成冲突。由于这种情况下始终会发生冲 突,所以网络中的节点将无法互相通信,将不会收到任 何新的数据包。 当应用程序通过将 TXRTS 位置 1 来使能模块发送数据 包时,前导信号将停止发送。然后,在经过一个包间延 时 (由 MABBIPG 配置)后,模块开始尝试发送自己的 数据包。在包间延时期间,其他节点可能会开始发送。 由于前面的通信堵塞,所以可能会有几个节点同时开始 发送,从而可能造成一系列的冲突。当模块成功完成数 据包发送或中止了数据包发送时,前导信号会自动重新 开始发送。当应用程序不希望再堵塞网络时,应该将 FCEN0 位清零。这样,前导信号将停止发送,恢复正 常的网路操作。 图 18-10 给出了一个示例网络。在全双工模式下,如 果计算机 A 要向基于单片机的应用发送太多的数据,以 太网模块可以发送一个暂停控制帧来暂停向它发送的数 据。以太网交换机将收到暂停帧并停止向单片机发送数 据。如果计算机 A 继续发送数据,以太网交换机将对数 据进行缓冲,以便稍后在暂停定时器结束时再进行发 送。如果以太网交换机缓冲区空间出现不足,它通常会 向计算机 A 发送一个它自己的暂停控制帧。 如果由于某种原因,以太网交换机没有生成自己的暂停 控制帧,或者某个节点未正确处理所接收到的暂停帧, 那么数据包将不可避免地丢失。在任何情况下,计算机 A 和计算机 B 之间的通信完全不会受到影响。 图 18-10: 考虑到半双工流量控制对网络的不利影响和低效率,除 非是在经过正确测试的封闭网络环境下进行应用,否则 建议不要使用半双工流量控制。 18.7.2 全双工网络示例 䅵ㅫᴎB 䅵ㅫᴎA ҹ㔥Ѹᤶᴎ 全双工模式 在全双工模式 (MACON3<0> = 1)下,硬件流量控制 通过发送暂停控制帧 (由 IEEE 802.3 规范定义)来实 现。暂停控制帧为 64 字节长,它包含保留的组播目标地 址 01-80-C2-00-00-01、发送节点源地址、特殊的暂停操 作码、 2 字节的暂停定时器值和填充数据 /CRC。 ѢPIC18F97J60ⱘᑨ⫼ 通常,当 MAC 接收到暂停帧时,MAC 会完成正在发送 的数据包,然后停止发送任何新的帧。暂停定时器值将 被从控制帧中提取出来,用于对内部定时器进行初始 化。每 512 比特时间 (51.2 µs)定时器都会自动递减 一次。当定时器在递减计数时,依然允许接收数据包。 如果收到新的暂停帧,将用新的暂停定时器值重新初始 化定时器。当定时器递减到 0 时,或者收到暂停定时器 值为 0 的帧时,接收到暂停帧的 MAC 将恢复发送所有 等待发送的数据包。为防止暂停帧造成整个网络上的所 有通信中断,以太网交换机和路由器不会在全双工模式 下传播暂停控制帧。暂停操作仅适用于接收节点。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 243 页 PIC18F97J60 系列 要使能全双工模式下的流量控制,需要将 MACON1 寄存 器中的 EXPAUS 和 RXPAUS 位置 1。然后,每当接收缓 冲区空间用尽时,置 1 流量控制使能位 FCEN1:FCEN0 (EFLOCON<1:0>) 。模块将会自动完成正在发送的所 有数据,然后发送一个载有合适定时器值的有效暂停 帧。根据所选择的模式,应用程序最终可能需要通过再 次写 FCEN 位来清除流量控制模式。 寄存器 18-20: 当 RXPAUS 置 1,并且收到具有非 0 暂停定时器值的有 效暂停帧时,模块将自动禁止发送。如果 TXRTS 位被置 1 而需要发送一个数据包,硬件将一直等到暂停定时器定 时结束,然后再尝试发送该数据包,并随后清零 EXRTS 位。通常,这些对于单片机来说是透明的,单片机永远 不会知道接收到了一个暂停帧。如果希望知道 MAC 是否 暂停,用户应该将 PASSALL 位 (MACON1<1>)置 1, 然后手动分析可能会收到的暂停控制帧。 EFLOCON:以太网流量控制寄存器 U-0 U-0 U-0 U-0 U-0 R-0 R/W-0 R/W-0 — — — — — FULDPXS FCEN1 FCEN0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7-3 未用:读为 0 bit 2 FULDPXS:只读 MAC 全双工影子位 1 = MAC 配置为全双工模式, FULDPX (MACON3<0>)置 1 0 = MAC 配置为半双工模式, FULDPX (MACON3<0>)清零 bit 1-0 FCEN1:FCEN0:流量控制使能位 当 FULDPXS = 1 时: 11 = 发送一个定时器值为 0 的暂停帧,然后关闭流量控制 10 = 周期性地发送暂停帧 01 = 发送一个暂停帧,然后关闭流量控制 00 = 流量控制关闭 当 FULDPXS = 0 时: 11 = 流量控制打开 10 = 流量控制关闭 01 = 流量控制打开 00 = 流量控制关闭 表 18-7: 用于流量控制的寄存器汇总 寄存器名称 ECON1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 — — 60 TXRST RXRST DMAST CSUMEN TXRTS RXEN MACON1 — — — r TXPAUS RXPAUS MABBIPG — BBIPG6 BBIPG5 BBIPG4 BBIPG3 BBIPG2 BBIPG1 BBIPG0 65 EFLOCON — — — — — FULDPXS FCEN1 FCEN0 65 PASSALL MARXEN 65 EPAUSL 暂停定时器值寄存器低字节 (EPAUS<7:0>) 65 EPAUSH 暂停定时器值寄存器高字节 (EPAUS<15:8>) 65 图注: — = 未用, r = 保留位。未使用阴影单元。 DS39762A_CN 第 244 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.8 18.8.1 接收过滤器 为了最大程度地减小单片机处理工作量,以太网模块在 内部实现了一系列不同的接收过滤器,可以自动拒绝不 需要的数据包。总共实现了 6 种不同类型的数据包过滤 器: • • • • • 单播 组播 广播 格式匹配 Magic Packet™ 单播接收过滤器会检查所有传入数据包的目标地址。如 果目标地址与 MAADR 寄存器中的内容完全匹配,数据 包就满足单播过滤器的条件。 18.8.2 组播过滤器 组播接收过滤器会检查所有传入数据包的目标地址。如 果目标地址首字节的最低有效位置 1,数据包就满足组 播过滤器的条件。 18.8.3 • 哈希表 各个过滤器均通过ERXFCON 寄存器 (寄存器 18-21) 进行配置。任何时间均可以有一个以上的过滤器同时有 效。此外,还可以通过 ANDOR 位对几个过滤器的测试 结果进行逻辑 “与”或者逻辑 “或”运算。也就是说, 可以设置为只有当所有有效的过滤器都接受才接受数据 包,或者只要有一个过滤器接受就接受数据包。图 18-11 和图 18-12 中的流程图显示了不同 ANDOR 设置情况下 每个过滤器的作用。 器件可以通过清零 ERXFCON 寄存器来进入混杂模式 (Promiscuous mode),并接收所有数据包。用户需要 根据应用的要求对寄存器进行适当的设置。 2006 Microchip Technology Inc. 单播过滤器 广播过滤器 广播接收过滤器会检查所有传入数据包的目标地址。如 果目标地址为 FF-FF-FF-FF-FF-FF,那么数据包满足广 播过滤器的条件。 18.8.4 哈希表过滤器 哈希表接收过滤器会根据数据包中的 6 个目标地址字节 计算 CRC。然后 CRC 用作指针指向 EHT 寄存器中的 位。如果指针所指位置 1,那么数据包满足哈希表过滤 器的条件。例如,如果计算得到的 CRC 为 05h,则检 查哈希表中的 bit 5。如果该位置 1,则满足哈希表过滤 器的条件。如果哈希表中的每个位都是零,数据包将永 远不会满足过滤器的条件。类似地,如果哈希表中的每 个位都置 1,数据包将总是满足过滤器的条件。 超前信息 DS39762A_CN 第 245 页 PIC18F97J60 系列 寄存器 18-21: ERXFCON:以太网接收过滤器控制寄存器 R/W-1 R/W-0 R/W-1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-1 UCEN ANDOR CRCEN PMEN MPEN HTEN MCEN BCEN bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 UCEN:单播过滤器使能位 当 ANDOR = 1 时: 1 = 目标地址与本地 MAC 地址不匹配的数据包将被丢弃 0 = 禁止过滤器 当 ANDOR = 0 时: 1 = 接受目标地址与本地 MAC 地址匹配的数据包 0 = 禁止过滤器 bit 6 ANDOR:与 / 或过滤器选择位 1 = 与:只有所有使能的过滤器都接受时才接受数据包,否则拒绝数据包 0 = 或:只要有任一使能的过滤器接受时就接受数据包,只有全部拒绝时才拒绝 bit 5 CRCEN:后过滤器 CRC 校验使能位 1 = 丢弃所有具有无效 CRC 的数据包 0 = 忽略 CRC bit 4 PMEN:格式匹配过滤器使能位 当 ANDOR = 1 时: 1 = 数据包必须满足格式匹配条件,否则将被丢弃 0 = 禁止过滤器 当 ANDOR = 0 时: 1 = 接受满足格式匹配条件的数据包 0 = 禁止过滤器 bit 3 MPEN:Magic Packet 过滤器使能位 当 ANDOR = 1 时: 1 = 数据包必须为本地 MAC 地址的 Magic Packet,否则将被丢弃 0 = 禁止过滤器 当 ANDOR = 0 时: 1 = 接受本地 MAC 地址的 Magic Packet 0 = 禁止过滤器 bit 2 HTEN:哈希表过滤器使能位 当 ANDOR = 1 时: 1 = 数据包必须满足哈希表条件,否则将被丢弃 0 = 禁止过滤器 当 ANDOR = 0 时: 1 = 接受满足哈希表条件的数据包 0 = 禁止过滤器 bit 1 MCEN:组播过滤器使能位 当 ANDOR = 1 时: 1 = 数据包中目标地址的最低有效位必须置 1,否则数据包将被丢弃 0 = 禁止过滤器 当 ANDOR = 0 时: 1 = 接受目标地址最低有效位置 1 的数据包 0 = 禁止过滤器 bit 0 BCEN:广播过滤器使能位 当 ANDOR = 1 时: 1 = 数据包的目标地址必须为 FF-FF-FF-FF-FF-FF,否则将被丢弃 0 = 禁止过滤器 当 ANDOR = 0 时: 1 = 接受目标地址为 FF-FF-FF-FF-FF-FF 的数据包 0 = 禁止过滤器 DS39762A_CN 第 246 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 18-11: 采用或逻辑的接收过滤器 线上检测到的数据包, ANDOR = 0(或) UCEN 置 1? 是 是 单播 数据包? 否 否 PMEN 置 1? 是 是 格式 匹配? 否 否 MPEN 置 1? 是 是 本地的 Magic Packet™? 否 否 HTEN 置 1? 是 是 哈希表 位置 1? 否 否 MCEN 置 1? 是 是 组播 目标地址? 否 否 BCEN 置 1? 是 广播 目标地址? 否 是 CRCEN 置 1? 是 否 否 CRC 有效? 否 是 拒收数据包 2006 Microchip Technology Inc. 超前信息 接受数据包 DS39762A_CN 第 247 页 PIC18F97J60 系列 图 18-12: 采用与逻辑的接收过滤器 线上检测到的数据包, ANDOR = 1(与) UCEN 置 1? 是 否 单播 数据包? 否 是 PMEN 置 1? 是 否 格式 匹配? 否 是 MPEN 置 1? 是 本地的 Magic Packet™ ? 否 否 是 HTEN 置 1? 是 否 哈希表 位置 1? 否 是 MCEN 置 1? 是 组播 目标地址? 否 否 是 BCEN 置 1? 是 广播 目标地址? 否 否 是 否 CRCEN 置 1? 是 CRC 有效? 否 是 接受数据包 DS39762A_CN 第 248 页 超前信息 拒收数据包 2006 Microchip Technology Inc. PIC18F97J60 系列 18.8.5 格式匹配过滤器 格式匹配过滤器会从传入数据包中选择 64 个字节,并 计算字节的 IP 校验和,然后将校验和与 EPMCS 寄存器 进行比较。如果计算的校验和与 EPMCS 寄存器匹配, 则数据包满足格式匹配过滤器的条件。格式匹配过滤器 通常用于过滤内部包含期望数据的数据包。 要使用格式匹配过滤器,应用程序必须设定格式匹配偏 移 量 (EPMOH:EPMOL) 、所 有 格 式 匹 配 屏 蔽 字 节 (EPMM0:EPMM7)和 格 式 匹 配 校 验 和 寄 存 器 对 (EPMCSH:EPMCSL)。格式匹配偏移量应等于从目标 地址字段起始处到 64 字节窗口 (用于计算校验和)的 偏移。对于处于 64 字节窗口内的各个字节,通过在格 式匹配屏蔽字节中置 1 或清零它们的相应位,可以有选 择地将其包括在校验和计算内或排除在校验和计算外。 如果接收到的数据包导致 64 字节窗口超出 CRC 的末 尾,将立即导致不满足过滤器的条件,即便是相应的屏 蔽位都为 0。格式匹配校验和寄存器应该设定为选定字 图 18-13: 节的校验和。校验和的计算方法与 DMA 模块计算校验 和的方法相同 (见第 18.9.2 节 “校验和计算”)。相应 屏蔽位设定为 0 的数据字节将从校验和计算中完全排 除,而不是将数据字节视为 0。 例如,如果应用程序要过滤所有具有特定源 MAC 地址 00-04-A3-FF-FF-FF 的数据包,可以将格式匹配偏移量 设定为 0000h,然后将 EPMM0 的 bit 6、 bit 7,以及 EPMM1 的 bit 0、bit 1、bit2 和 bit 3 置 1(假设所有其 他的屏蔽位均为 0)。EPMCS 寄存器中的校验和应编程 为 5BFCh。还有一种配置方法,可以将偏移量设定为 0006h,并将 EPMM0 的 bit 0、 bit 1、bit 2、 bit 3、bit 4 和 bit 5 置 1。校验和将仍为 5BFCh。不过,第二种方 法有些不太理想,因为当数据包长度小于 70 字节时,虽 然它们同样可以生成正确的校验和,但却永远不会满足 格式匹配的条件。 图 18-13 给出了格式匹配过滤器的另外一个示例。 格式匹配示例 输入配置: EMPOH:EPMOL = 0006h EPMM0:EPMM7 = 0000000000001F0Ah EPMCSH:EPMCSL = 563Fh DA 字段 SA 类型 / 长度 FCS 数据 接收的 数据 11 22 33 44 55 66 77 88 99 AA BB CC 00 5A 09 0A 0B 0C 0D .. . 40 . . . FE 45 23 01 字节编号 0 1 2 3 4 5 14 15 16 17 18 . . . 70 . . . 6 7 8 9 10 11 12 13 用于 计算校验和的字节 用于格式匹配的 64 字节窗口 用于计算校验和的值 = {88h, AAh, 09h, 0Ah, 0Bh, 0Ch, 0Dh, 00h} (00h 是由硬件添加的填充字节) 注: 接收数据以十六进制显示。字节编号以十进制格式显示。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 249 页 PIC18F97J60 系列 18.8.6 MAGIC PACKET 过滤器 Magic Packet 格式由一个包含 6 个 FFh 字节的同步格 式和重复 16 次的目标地址 (图 18-14)组成。 Magic Packet 过滤器会检查所有传入数据包的目标地址和数 据字段。如果目标地址与 MAADR 寄存器匹配,并且数 据字段内包含有效的 Magic Packet 格式,那么数据包满 足 Magic Packet 过滤器的条件。 图 18-14: MAGIC PACKET™ 格式示例 接收的数据 11 22 33 44 55 66 77 88 99 AA BB CC 00 FE 字段 注释 DA SA 类型 / 长度 09 0A 0B 0C 0D 0E FF FF FF FF FF 00 同步格式 FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 数据 11 22 33 44 55 66 重复 16 次的 站点地址 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 19 1A 1B 1C 1D 1E EF 54 32 10 DS39762A_CN 第 250 页 FCS 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 18.9 直接存储器访问控制器 注 以太网模块内部包含一个双功能的 DMA 控制器,它可以 用来在8 KB缓冲存储器中复制数据;也可以用来计算兼 容各种工业标准通信协议(包括 TCP、UDP、IP 和 ICMP 等)的 16 位校验和。 可通过 3 个指针和一些状态 / 控制位来控制 DMA: • • • • • EDMASTH:EDMASTL——源起始地址 EDMANDH:EDMANDL——源结束地址 EDMADSTH:EDMADSTL——目标起始地址 ECON1<DMAST> 和 ECON1<CSUMEN> EIR<DMAIF> 和 EIE<DMAIE> 18.9.1 源指针和结束指针定义要进行复制或计算校验和的数 据。目标指针仅在复制数据时使用,它定义被复制数据 的存放位置。3 个指针都只用于 8 KB 以太网存储器,不 能用来访问 PIC® 单片机数据存储器空间。 当 DMA 操作开始时,EDMAST 寄存器对被复制到内部 源指针中。DMA 将一次执行一个字节,然后递增内部源 指针。不过,如果在处理一个字节之后,内部源指针与 接收缓冲区结束指针 ERXND 相等,那么源指针不会递 增。此 时,内 部 源 指 针 将 装 入 接 收 缓 冲 区 起 始 指 针 ERXST 的值。这样, DMA 将按照接收缓冲区的循环 FIFO 结构进行操作,从而接收到的数据包可以遵循同 一种方式进行处理。当内部源指针与 EDMAND 指针匹 配时, DMA 操作将结束。 当正在进行任何 DMA 操作时,不应修改 DMA 指针和 CSUMEN 位(ECON1<4>)。任何时候都可以通过清零 DMAST 位(ECON1<5>)来取消 DMA 操作。所有寄存 器的值都不会改变;不过,如果取消前正在进行 DMA 复 制,则可能有一些存储器字节已经被复制。使用 DMA 时,应注意一些实施注意事项和固件要求 (见注 1)。 1: 如果由于接收缓冲区折回操作的原因而无 法到达 EDMAND 指针处,DMA 操作将永 远不会结束。 2: 根据设计要求,DMA 模块不能用来仅对一 个字节(EDMAST = EDMAND)进行复制 或校验和计算。如果尝试这样操作,则可 能会覆盖缓冲区中的所有存储单元,并且 永远不会停止。 3: DMA 操作结束(DMAST 由硬件或软件清 零)之后,固件绝对不能在 4 个指令周期 内将 DMAST 位再次置 1。 复制存储器内容 要复制缓冲区中的存储器内容: 1. 使 用 合 适 的 起 始、结 束 和 目 标 地 址 设 定 EDMAST、 EDMAND 和 EDMADST 寄存器对。 EDMAST 寄存器应指向要复制数据的第一个字 节,EDMAND 寄存器应指向要复制数据的最后一 个字节,而 EDMADST 寄存器应指向目标地址范 围内的第一个字节。目标地址范围始终为线性 的,除了从 8191 返回到 0 (8 KB 存储器边界) 之外,不会在任何地方发生折回。在计算结束指 针时,要特别小心,以防止出现会覆盖整个 8 KB 缓冲区的永远无法结束的 DMA 操作。 2. 如果需要,可以将 DMAIE (EIE<5>)和 ETHIE (PIE2<5>)位置 1,并清零 DMAIF (EIR<5>) 标志位,以允许在复制过程结束时产生中断。 3. 清零 CSUMEN (ECON1<4>)位。 4. 通过将 DMAST (ECON1<5>)位置 1 来启动 DMA 复制操作。 如果将 DMAST 位置 1 时正在进行发送操作 (TXRTS 位置 1),那么模块将等待至发送操作完成之后,再尝 试进行 DMA 复制。这个延时是必要的,因为 DMA 和发 送引擎不能同时访问缓冲区。 完成复制之后,DMA 硬件将清零 DMAST 位,将 DMAIF 位置 1,并产生中断(如果允许)。指针和 EDMACS 寄 存器将不变。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 251 页 PIC18F97J60 系列 在 DMA 模块已经初始化并开始复制操作之后,复制每 个字节都需要 1 个指令周期 (TCY)。不过,如果 CPU 内核对 EDATA 寄存器执行读或写指令,或者以太网接 收硬件累积了一个字节的数据,DMA 将停止该周期,让 步于高优先级的操作。如果复制一个 1518 字节 (最大 长度)的数据包,同时没有任何其他存储器使用带宽, 那么在内核频率 41.667 MHz 下,DMA 模块将需要略长 于 145.7 µs 的时间来完成复制。复制一个最小大小(64 字节)的数据包大约需要 6.2 µs 的时间 (41.667 MHz 下)加上寄存器配置时间。 18.9.2 校验和计算 各种协议 (例如 TCP 和 IP)都会在校验和所涵盖的数 据范围内包含一个校验和字段。如果接收到需要进行验 证的数据包,应用程序可以执行以下操作: 1. 2. 3. 4. 从数据包中读校验和,并将其保存在一个临时单 元。 向校验和字段写入 0。 使用 DMA 控制器计算新的校验和。 将结果与步骤 1 保存的校验和进行比较。 当通过 ERXRDPT 指针保护写地址之后,写接收缓冲区 是允许的。更多信息,请参见第 18.5.3 节 “接收数据 包”。 校验和计算逻辑将源数据视为一系列16位大尾整数。如 果源数据个数为奇数个字节,为了计算校验和,将会在 数据末尾追加一个填充字节 (00h)。 IP 校验和具有唯一的数学特性,可以用来在某些情况下 进一步减少处理工作量。在某些应用中,可能并不需要 将数据写入接收缓冲区。 计算得到的校验和是所有 16 位整数补码和的补码。例 如,如果校验和中包含的字节为 {89h, ABh, CDh},那 么计算校验和时首先计算 89ABh + CD00h。在示例中, 第 16 位会发生进位,所以在计算 16 位反码时,进位将 加到第 1 位上。对得到的结果值 56ACh 求反码,最终 将得到校验和 A953h。 当 DMA 工作于校验和模式下时,处理校验和中包含的 每个字节都需要一个指令周期 (TCY) 。因而,如果对 超过 1446 字节的数据执行校验和计算,在 41.667 MHz 下DMA模块将需要略长于138.8 µs的时间来完成操作。 要计算校验和: 1. 设置 EDMAST 和 EDMAND 寄存器对,使它们分 别指向校验和中要包括的缓冲区数据的第一和最 后 一 个 字 节。在 设 定 这 些 指 针 时,要 特 别 小 心,避免出现由于接收缓冲区折回而引起的永远 无法结束的校验和计算。 2. 如果要在计算完成时产生中断,可以将 DMAIE (EIE<5>)和 ETHIE (PIE2<5>)位置 1,并清 零 DMAIF (EIR<5>)位。 3. 通过将 CSUMEN (ECON1<4>)和 DMAST (ECON1<5>)位置 1 来启动计算。 在相同频率下,一个较小的 20 字节的报头字段需要的 时间大约是 1.9 µs 加上 DMA 设置时间。这些估计时间 是在这样的假设下得出的:假设以太网接收硬件不需要 存储器访问带宽,并且当 DMA 在进行计算时 CPU 内核 不会向 EDATA 寄存器发出任何读或写命令。 与 DMA 复制模式一样,只有 TXRTS 位(ECON1<3>) 清零时,校验和操作才会开始。如果应用程序刚刚发送 很大的数据包,并立即对一个接收到的数据包进行校验 和验证,这将会在一定程度上增加校验和计算时间。 完成 校 验 和 计 算 之 后,硬 件 将 清 零 DMAST 位,将 DMAIF 位置 1,并产生中断 (如果允许)。 DMA 指针 将保持不变,不会将数据写入任何存储单元。计算得到 的校验和将保存在 EDMACSH 与 EDMACSL 寄存器中。 应用程序可以将该值写入一个数据包、将其与 0 进行比 较 (以验证接收到的数据块中是否包含校验和字段), 或 将 其 与 其 他 一 些 校 验 和 进行 比 较,例 如 各种 协 议 (TCP、 UDP 等)中所使用的伪报头校验和。 DS39762A_CN 第 252 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 18-8: 与 DMA 控制器相关的寄存器汇总 寄存器名称 EIE EIR ECON1 ERXNDL Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 — PKTIE DMAIE LINKIE TXIE — TXERIE RXERIE 63 — PKTIF DMAIF LINKIF TXIF — TXERIF RXERIF 63 TXRST RXRST DMAST CSUMEN TXRTS RXEN — — 60 接收结束寄存器低字节 (ERXND<7:0>) — — — 接收结束寄存器高字节 (ERXND<12:8>) ERXNDH EDMASTL DMA 开始寄存器低字节 (EDMAST<7:0>) — — — DMA 开始寄存器高字节 (EDMAST<12:8>) EDMASTH EDMANDL EDMANDH EDMADSTL DMA 结束寄存器低字节 (EDMAND<7:0>) — — — DMA 结束寄存器高字节 (EDMAND<12:8>) 63 63 63 63 63 63 63 EDMADSTH DMA 目标寄存器低字节 (EDMADST<7:0>) — — — DMA 目标寄存器高字节 (EDMADST<12:8>) EDMACSL DMA 校验和寄存器低字节 (EDMACS<7:0>) 63 DMA 校验和寄存器高字节 (EDMACS<15:8>) 63 EDMACSH 图注: 63 — = 未用。未使用阴影单元。 18.10 模块复位 18.10.2 以太网模块提供了以下模块复位方式: • 仅发送复位 • 仅接收复位 仅发送复位通过将 TXRST 位(ECON1<7>)置 1 来实 现。它仅对发送逻辑进行复位。其他寄存器和控制电路 (例如缓冲区管理和主机接口)不会受仅发送复位影 响。要恢复为正常操作,可以用软件清零 TXRST 位。 18.10.1 18.10.3 上电复位 (POR) 当 VDD 的电平达到工作要求时,以太网模块同时使用单 片机的上电复位脉冲来进入初始化状态。器件规定了 VDD 的最小上升速率 (见第 27.0 节 “电气特性”)。 上电复位之后,以太网缓冲存储器中的内容处于未知状 态。所有 SFR 和 PHY 寄存器都将装入其规定的复位值。 不过,只有在 PHY 起振定时器定时结束并且 PHYRDY 位 (ESTAT<0>)置 1,或者 ETHEN 位置 1 超过 1 ms 时,才可以访问 PHY 寄存器。更多详细信息,请参见 第 18.1.3.1 节 “起振定时器”。 2006 Microchip Technology Inc. 仅发送复位 仅接收复位 仅接收复位通过将 RXRST 位 (ECON1<6>)置 1 来实 现。该操作仅对接收逻辑进行复位。其他寄存器和控制 电路 (例如缓冲区管理和主机接口)不会受仅接收复位 影响。要恢复为正常操作,可以用软件清零 RXRST 位。 超前信息 DS39762A_CN 第 253 页 PIC18F97J60 系列 注: DS39762A_CN 第 254 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.0 主控同步串行口 (MSSP)模块 19.3 19.1 主控 SSP (MSSP)模块概述 SPI 模式允许同时同步发送和接收 8 位数据。器件支持 SPI 的所有四种模式。通常使用以下三个引脚来实现通 信: 主控同步串行口 (MSSP)模块是用于同其他外设或单 片机器件进行通信的串行接口。这些外设器件可以是串 行 EEPROM、移位寄存器、显示驱动器和 A/D 转换器 等。 MSSP 模块有下列两种工作模式: • 串行外设接口 (Serial Peripheral Interface, SPI) • I2C™ - 全主控模式 - 从动模式 (支持广播地址呼叫) I2C 接口硬件上支持下列模式: • 串行数据输出 (Serial Data Out, SDOx)—— RC5/SDO1 (或 RD4/SDO2,适用于 100 引脚器 件) • 串行数据输入 (Serial Data In, SDIx)—— RC4/SDI1/SDA1 (或 RD5/SDI2/SDA2,适用于 100 引脚器件) • 串行时钟 (Serial Clock, SCKx)—— RC3/SCK1/SCL1 (或 RD6/SCK2/SCL2,适用于 100 引脚器件) 此外,当处于从动工作模式时要使用第 4 根引脚: • 主控模式 • 多主机模式 • 从动模式 • 从动选择 (Slave Select, SSx)——RF7/SS1 (或 RD7/SS2,适用于 100 引脚器件) PIC18F97J60 系列的 64 引脚和 80 引脚器件有一个 MSSP 模块,称为 MSSP1。100 引脚器件有两个 MSSP 模块,称为 MSSP1 和 MSSP2。每个模块都独立工作。 注: SPI 模式 图 19-1 给出了 MSSP 模块在 SPI 模式下的工作原理框 图。 图 19-1: 在本节中,在所有工作模式下,通常指的 MSSP 模 块 都 可 以 解 释 为 MSSP1 或 MSSP2。寄存器名称和模块 I/O 信号使用 通用标识符 “x”(数字)来区分某个特定 模块。控制位名称没有区别。 MSSP 框图 (SPI 模式) 内部 数据总线 读 写 SSPxBUF 寄存器 19.2 控制寄存器 每个 MSSP 模块有三个相关的控制寄存器,包括一个状 态 寄 存 器 (SSPxSTAT)和 两 个 控 制 寄 存 器 (SSPxCON1 和 SSPxCON2)。根据 MSSP 模块是在 SPI 模式还是 I2C 模式下工作,这些寄存器的用途及它 们各自的配置位将完全不同。 SDIx SSPxSR 寄存器 SDOx 移位 时钟 bit 0 下面各节会提供更多详细信息。 注: 在具有多个 MSSP 模块的器件中,要特别 注意 SSPxCON 寄存器名称。SSP1CON1 和SSP1CON2控制同一模块工作的不同方 面,而 SSP1CON1 和 SSP2CON1 控制两 个不同模块的相同功能。 SSx SSx 控制 使能 边沿 选择 2 时钟选择 SSPM3:SSPM0 SCKx SMP:CKE 4 2 边沿 选择 ( TMR22 输出 ) 预分频器 TOSC 4, 16, 64 数据移入 SSPxSR 中的 TXx/RXx TRIS 位 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 255 页 PIC18F97J60 系列 19.3.1 寄存器 MSSP 模块有四个寄存器用于 SPI 工作模式。这些寄存 器包括: • • • • 接收数据时,SSPxSR 和 SSPxBUF 共同构成一个双重 缓冲接收器。当 SSPxSR 接收到一个完整的字节之后, 该字节会被送入 SSPxBUF,同时将中断标志位 SSPxIF 置 1。 MSSP 控制寄存器 1 (SSPxCON1) MSSP 状态寄存器 (SSPxSTAT) 串行接收 / 发送缓冲寄存器 (SSPxBUF) MSSP 移位寄存器 (SSPxSR)——不可直接访问 SSPxCON1 和 SSPxSTAT 是 SPI 模式下的控制寄存器 和 状 态 寄 存 器。 SSPxCON1寄 存 器 是 可 读 写 的。 SSPxSTAT 的低 6 位是只读的,而高 2 位是可读写的。 寄存器 19-1: SSPxSR 是用来将数据移入或移出的移位寄存器。 SSPxBUF 是缓冲寄存器,可用于数据字节的写入或读 出。 在数据发送过程中, SSPxBUF 不是双重缓冲的,对 SSPxBUF的写操作将同时写入SSPxBUF和SSPxSR。 SSPxSTAT:MSSPx 状态寄存器 (SPI 模式) R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0 SMP CKE(1) D/A P S R/W UA BF bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 SMP:采样位 SPI 主控模式: 1 = 在数据输出时间的末端采样输入数据 0 = 在数据输出时间的中间采样输入数据 SPI 从动模式: 当 SPI 工作在从动模式时,必须将 SMP 清零。 bit 6 CKE:SPI 时钟选择位 (1) 1 = 时钟状态从有效转换到空闲时发送 0 = 时钟状态从空闲转换到有效时发送 bit 5 D/A:数据 / 地址位 只在 I2C 模式下使用。 bit 4 P:停止位 只在 I2C 模式下使用。当禁止 MSSP 模块 (SSPEN 清零)时,该位被清零。 bit 3 S:启动位 只在 I2C 模式下使用。 bit 2 R/W:读 / 写信息位 只在 I2C 模式下使用。 bit 1 UA:更新地址位 只在 I2C 模式下使用。 bit 0 BF:缓冲区满状态位 (仅用于接收模式) 1 = 接收完成, SSPxBUF 满 0 = 接收未完成, SSPxBUF 空 注 1: 时钟状态的极性由 CKP 位 (SSPxCON1<4>)设置。 DS39762A_CN 第 256 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 19-2: SSPxCON1:MSSPx 控制寄存器 1 (SPI 模式) R/W-0 R/W-0 WCOL SSPOV(1) R/W-0 SSPEN (2) R/W-0 CKP R/W-0 (3) SSPM3 R/W-0 SSPM2 (3) R/W-0 SSPM1 (3) bit 7 R/W-0 SSPM0(3) bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 WCOL:写冲突检测位 (仅用于发送模式) 1 = 正在发送前一个字时,又有数据写入 SSPxBUF 寄存器 (必须用软件清零) 0 = 未发生冲突 bit 6 SSPOV:接收溢出指示位 (1) SPI 从动模式: 1 = SSPxBUF 中仍保存前一数据时,又接收到一个新的字节。如果发生溢出,SSPxSR 中的数据会丢 失。溢出只会在从动模式下发生。即使只是发送数据,用户也必须读 SSPxBUF,以避免将溢出标 志位置 1 (该位必须用软件清零)。 0 = 无溢出 bit 5 SSPEN:主控同步串口使能位 (2) 1 = 使能串口并将 SCKx、 SDOx、 SDIx 和 SSx 配置为串口引脚 0 = 禁止串口并将上述引脚配置为 I/O 端口引脚 bit 4 CKP:时钟极性选择位 1 = 空闲状态时,时钟为高电平 0 = 空闲状态时,时钟为低电平 bit 3-0 SSPM3:SSPM0:主控同步串口模式选择位 (3) 0101 = SPI 从动模式,时钟 = SCKx 引脚,禁止 SSx 引脚控制,可将 SSx 用作 I/O 引脚 0100 = SPI 从动模式,时钟 = SCKx 引脚,使能 SSx 引脚控制 0011 = SPI 主控模式,时钟 = TMR2 输出 /2 0010 = SPI 主控模式,时钟 = FOSC/64 0001 = SPI 主控模式,时钟 = FOSC/16 0000 = SPI 主控模式,时钟 = FOSC/4 注 1: 在主控模式下,溢出位不会被置 1,因为每次接收 (和发送)新数据都是通过写入 SSPxBUF 寄存器启动 的。 2: 当使能时,必须将这些引脚正确地配置为输入或输出。 3: 在此未列出的位组合用于保留或仅在 I2C™ 模式下使用。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 257 页 PIC18F97J60 系列 19.3.2 工作原理 当初始化 SPI 时,需要指定几个选项。可以通过编程相 应的控制位 (SSPxCON1<5:0> 和 SSPxSTAT<7:6>) 来指定。这些控制位用于指定以下选项: • • • • • • • 主控模式 (SCKx 作为时钟输出) 从动模式 (SCKx 作为时钟输入) 时钟极性 (SCKx 的空闲状态) 数据输入采样相位 (数据输出时间的中间或末尾) 时钟边沿 (在 SCKx 的上升沿 / 下降沿输出数据) 时钟速率 (仅用于主控模式) 从动选择模式 (仅用于从动模式) (SSPxBUF),允许在 CPU 读取刚接收的数据之前,就 开始接收下一个字节。在数据发送 / 接收期间,任何试 图写 SSPxBUF 寄存器的操作都无效,并且写冲突检测 位 WCOL(SSPxCON1<7>)将被置 1。用户必须用软 件将 WCOL 位清零才能判断以后对 SSPxBUF 寄存器的 写入是否成功。 MSSP 模块由一个发送 / 接收移位寄存器 (SSPxSR) 和一个缓冲寄存器 (SSPxBUF)组成。 SSPxSR 将数 据移入 / 移出器件,最高有效位在前。在新数据接收完 毕前,SSPxBUF 保存上次写入 SSPxSR 的数据。一旦 8 位数据接收完毕,该字节就被移入 SSPxBUF 寄存器。 然后,缓冲区满检测位 BF(SSPxSTAT<0>)和中断标 志位 SSPxIF 被 置 1。这 种 双 重 缓 冲 数 据 接 收 方式 例 19-1: LOOP 为确保应用软件能有效地接收数据,在下一个要发送的 数据字节写入 SSPxBUF 之前,读取 SSPxBUF 中现有 的数据。缓冲区满位 BF (SSPxSTAT<0>)用于表示何 时 SSPxBUF 装入了接收到的数据 (发送完成) 。当 SSPxBUF 中的数据被读取后,BF 位即被清零。如果 SPI 仅仅作为一个发送器,则不必理会该数据。通常,可用 MSSP 中断来判断发送 / 接收是否已完成。必须读取和 / 或写入 SSPxBUF。如果不打算使用中断,用软件查询的 方法同样可确保不会发生写冲突。例 19-1 举例说明了装 载 SSP1BUF (SSP1SR)进行数据发送的过程。 不能直接读写SSPxSR寄存器,只能通过寻址SSPxBUF 寄存器来访问。此外,SSPxSTAT 寄存器用于指示各种 状态。 装载 SSP1BUF (SSP1SR)寄存器 BTFSS BRA MOVF SSP1STAT, BF LOOP SSP1BUF, W ;Has data been received (transmit complete)? ;No ;WREG reg = contents of SSP1BUF MOVWF RXDATA ;Save in user RAM, if data is meaningful MOVF MOVWF TXDATA, W SSP1BUF ;W reg = contents of TXDATA ;New data to xmit DS39762A_CN 第 258 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.3.3 使能 SPI I/O 要使能串口,MSSP 使能位 SSPEN(SSPxCON1<5>) 必须置 1。要复位或重新配置 SPI 模式,要先将 SSPEN 位清零,重新初始化 SSPxCON 寄存器,然后将 SSPEN 位置 1。这将把 SDIx、SDOx、SCKx 和 SSx 引脚配置 为串口引脚。要让上述引脚充当串口,必须正确设置引 脚的数据方向位 (在 TRIS 寄存器中)。 • SDIx 由 SPI 模块自动控制 • SDOx 必须将 TRISC<5> (或 TRISD<4>)位清零 • SCKx (主控模式)必须将 TRISC<3> (或 TRISD<6>)位清零 • SCKx (从动模式)必须将 TRISC<3> (或 TRISD<6>)位置 1 • SSx 必须将 TRISF<7> (或 TRISD<7>)位置 1 图 19-2: 对于不需要的串口功能,可通过将对应的数据方向寄存 器 (TRIS)设置为相反值来屏蔽。 19.3.4 典型连接 图 19-2 给出了两个单片机之间的典型连接。主器件(处 理器 1)通过发送 SCKx 信号来启动数据传输。在两个 处理器的移位寄存器之间,数据在编程设定的时钟边沿 被传送,并在相反的时钟边沿被锁存。必须将两个处理 器的时钟极性(CKP)设置为相同,这样就可以同时收 发数据。数据是否有效,取决于应用软件。这就导致以 下三种数据传输情形: • 主器件发送数据——从器件发送无效 (Dummy) 数据 • 主器件发送数据 —— 从器件发送数据 • 主器件发送无效数据 —— 从器件发送数据 SPI 主 / 从器件连接 SPI 主器件 SSPM3:SSPM0 = 00xxb SPI 从器件 SSPM3:SSPM0 = 010xb SDOx SDIx 串行输入缓冲区 (SSPxBUF) 串行输入缓冲区 (SSPxBUF) SDIx 移位寄存器 (SSPxSR) SDOx LSb MSb MSb SCKx 串行时钟 处理器 1 2006 Microchip Technology Inc. 移位寄存器 (SSPxSR) LSb SCKx 处理器 2 超前信息 DS39762A_CN 第 259 页 PIC18F97J60 系列 19.3.5 主控模式 因为由主器件控制 SCKx 信号,所以它可以在任意时刻 启动数据传输。主器件根据软件协议确定从器件(图 19-2 中的处理器 2)应在何时广播数据。 在主控模式下,数据一旦写入 SSPxBUF 寄存器就开始 发送或接收。如果只打算将 SPI 作为接收器,则可以禁 止 SDOx 输出(将其编程设置为输入)。SSPxSR 寄存 器按设置的时钟速率,对 SDIx 引脚上的信号进行连续 移位输入。每收到一个字节,就将其装入 SSPxBUF 寄 存器,就像接收到普通字节一样(中断和状态位相应置 1)。这在以 “线路活动监控”(Line Activity Monitor) 方式工作的接收器应用中很有用。 图 19-3: 可通过对 CKP 位 (SSPxCON1<4>)进行适当的编程 来选择时钟极性。图 19-3、图 19-5 和图 19-6 将给出 SPI 通信的时序图,其中最先发送的是最高有效位。在 主控模式下, SPI 时钟速率 (位速率)可由用户编程设 定为下面几种之一: • • • • FOSC/4 (或 TCY) FOSC/16 (或 4 • TCY) FOSC/64 (或 16 • TCY) Timer2 输出 /2 这样可使数据速率最高达到 10.00 Mbps (时钟频率为 40 MHz)。 图 19-3 给出了主控模式的波形图。当 CKE 位置 1 时, SDOx 数据在 SCKx 出现时钟边沿前一直有效。图中所 示的输入采样的变化由 SMP 状态位反映。图中给出了 将接收到的数据装入 SSPxBUF 的时间。 SPI 模式波形图 (主控模式) 写入 SSPxBUF SCKx (CKP = 0 CKE = 0) SCKx (CKP = 1 CKE = 0) 4 种时钟 模式 SCKx (CKP = 0 CKE = 1) SCKx (CKP = 1 CKE = 1) SDOx (CKE = 0) bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 SDOx (CKE = 1) bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 SDIx (SMP = 0) bit 0 bit 7 输入 采样 (SMP = 0) SDIx (SMP = 1) bit 0 bit 7 输入 采样 (SMP = 1) SSPxIF 在 Q2↓ 之后的 下一个 Q4 周期 SSPxSR 到 SSPxBUF DS39762A_CN 第 260 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.3.6 从动模式 在从动模式下,当 SCKx 引脚上有外部时钟脉冲时启动 发送和接收数据。当最后一位数据被锁存后,中断标志 位 SSPxIF 置 1。 SDOx 引脚被驱动。当 SSx 引脚变为高电平时,即使是 在字节的发送过程中,也不再驱动 SDOx 引脚,而是将 其变成悬空输出状态。根据应用需要,可在 SDOx 引脚 上外接上拉 / 下拉电阻。 注 在 SPI 从动模式下使能该模块时,时钟线必须与适当的 空闲状态相匹配。时钟线可通过读 SCKx 引脚来查看。 空闲状态由 CKP 位 (SSPxCON1<4>)决定。 在从动模式下,外部时钟由 SCKx 引脚上的外部时钟源 提供。外部时钟必须满足电气规范中规定的高电平和低 电平的最短时间要求。 在休眠模式下,从器件仍可发送 / 接收数据。当接收到 一个字节时,器件从休眠状态中唤醒。 19.3.7 从动选择同步 SSx 引脚允许器件工作于同步从动模式。SPI 必须处于 从动模式,并使能SSx引脚控制(SSPxCON1<3:0> = 04h)。 当 SSx 引脚为低电平时,使能数据的发送和接收,同时 图 19-4: 1: 当 SPI 处于从动模式,并且使能 SSx 引脚 控制(SSPxCON1<3:0> = 0100)时,如果 SSx 引脚设置为 VDD 电平将使 SPI 模块复 位。 2: 如果 SPI 工作在从动模式下并且 CKE 置 1,则必须使能 SSx 引脚控制。 当 SPI 模块复位后,位计数器被强制为 0。这是通过强 制将SSx引脚拉为高电平或将SSPEN位清零来实现的。 将 SDOx 引脚和 SDIx 引脚相连,可以仿真二线制通信。 当 SPI 需要作为接收器工作时,SDOx 引脚可以被配置 为输入端。这样就禁止了从 SDOx 发送数据。因为 SDIx 不 会 引 起 总 线 冲 突,所 以 可 以 一 直 将 其 保 留 为输 入 (SDIx 功能)。 从动同步波形图 SSx SCKx (CKP = 0 CKE = 0) SCKx (CKP = 1 CKE = 0) 写入 SSPxBUF SDOx SDIx (SMP = 0) bit 7 bit 6 bit 7 bit 0 bit 0 bit 7 bit 7 输入 采样 (SMP = 0) SSPxIF 中断 标志 在 Q2↓ 之后的 下一个 Q4 周期 SSPxSR 到 SSPxBUF 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 261 页 PIC18F97J60 系列 图 19-5: SPI 模式波形图 (从动模式, CKE = 0) SSx 可选的 SCKx (CKP = 0 CKE = 0) SCKx (CKP = 1 CKE = 0) 写入 SSPxBUF SDOx bit 7 SDIx (SMP = 0) bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 bit 0 bit 7 输入 采样 (SMP = 0) SSPxIF 中断 标志 在 Q2↓ 之后的 下一个 Q4 周期 SSPxSR 到 SSPxBUF 图 19-6: SPI 模式波形图 (从动模式, CKE = 1) SSx 不可选 SCKx (CKP = 0 CKE = 1) SCKx (CKP = 1 CKE = 1) 写入 SSPxBUF SDOx SDIx (SMP = 0) bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 bit 0 bit 7 输入 采样 (SMP = 0) SSPxIF 中断 标志 在 Q2↓ 之后的 下一个 Q4 周期 SSPxSR 到 SSPxBUF DS39762A_CN 第 262 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.3.8 19.3.10 在功耗管理模式下的操作 在 SPI 主控模式下,模块时钟速度与全功耗模式下的不 同;处于休眠模式时,所有时钟都停止。 在空闲模式下,需要为外设提供一个时钟。该时钟应该 来自于主时钟源、辅助时钟源 (32.768 kHz 的 Timer1 振荡器)或 INTRC 时钟源。更多信息,请参见第 2.7 节 “时钟源与振荡器切换”。 表 19-1 中所示是标准 SPI 模式与 CKP 和 CKE 控制位 状态的对应关系。 表 19-1: 如果选择了休眠模式,所有模块的时钟都将停止,并且 在器件被唤醒前,发送 / 接收将保持此停滞状态。当器 件返回到运行模式后,该模块将恢复发送和接收数据。 在 SPI 从动模式下, SPI 发送 / 接收移位寄存器与器件 异步工作。这可以使器件处于任何功耗管理模式下,而 且数据仍可被移入 SPI 发送 / 接收移位寄存器。当 8 位 数据全部接收到后, MSSP 中断标志位将置 1,并且如 果允许中断的话,器件被唤醒。 19.3.9 复位的影响 复位操作会禁止 MSSP 模块并终止当前的数据传输。 2006 Microchip Technology Inc. SPI 总线模式 标准 SPI 模式术语 在大多数情况下,主器件为 SPI 数据提供的时钟速度并 不重要;但是,每个系统都应该评估此因素。 如果允许了 MSSP 中断,那么当主器件发送完数据时这 些中断可以将控制器从休眠模式或某种空闲模式唤醒。 如果不想从休眠或空闲模式退出,应该禁止 MSSP 中 断。 总线模式兼容性 控制位状态 CKP CKE 0, 0 0 1 0, 1 0 0 1, 0 1 1 1, 1 1 0 还有一个 SMP 位用来控制数据何时被采样。 19.3.11 SPI 时钟速度和模块相互关系 因为 MSSP1 和 MSSP2 是独立的模块,它们可以使用 不同的数据速率同时工作。设置 SSPxCON1 寄存器的 SSPM3:SSPM0 位来设定相应模块的速率。 有一种例外情况就是在两个模块都在主控模式下使用 Timer2 作为时基的时候。在这种情况下,任何对 Timer2 工作模式的更改都会对两个 MSSP 模块造成相同的影 响。如果每个模块需要不同的位速率,用户应该为一个 模块选择其他三种时基中的一种。 超前信息 DS39762A_CN 第 263 页 PIC18F97J60 系列 表 19-2: 名称 INTCON 与 SPI 操作相关的寄存器 Bit 7 Bit 6 Bit 5 GIE/GIEH PEIE/GIEL TMR0IE Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR3 SSP2IF(1) BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 (1) SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP(1) BCL2IP RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 61 TRISD3 TRISD2 TRISD1 TRISD0 61 TRISF3 TRISF2 TRISF1 TRISF0 TRISC TRISD TRISF SSP1BUF SSP1CON1 SSP1STAT SSP2BUF SSP2CON1 SSP2STAT TRISD7(1) TRISD6(1) TRISD5(1) TRISD4(1) TRISF7 TRISF6 TRISF5 MSSP1 接收缓冲区 / 发送寄存器 WCOL SSPOV SSPEN SMP CKE D/A MSSP2 接收缓冲区 / 发送寄存器 WCOL SSPOV SSPEN SMP CKE D/A TRISF4 61 60 CKP SSPM3 SSPM2 SSPM1 SSPM0 P S R/W UA BF 60 60 63 CKP SSPM3 SSPM2 SSPM1 SSPM0 63 P S R/W UA BF 63 图注: SPI 模式下的 MSSP 模块不使用阴影单元。 注 1: 这些位仅在 100 引脚器件上实现;在其他器件上未实现且读为 0。 DS39762A_CN 第 264 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4 I2C 模式 19.4.1 MSSP 模块工作在 I 2C 模式时,可以实现所有的主控和 从动功能 (包括广播呼叫支持),并且硬件上提供启动 位和停止位的中断来判断总线何时空闲 (多主机功 能)。 MSSP 模块实现了标准模式规范以及 7 位和 10 位寻址。 有两个引脚用于数据传输: • 串行时钟 (SCLx)——RC3/SCK1/SCL1 (或 RD6/SCK2/SCL2,适用于 100 引脚器件) • 串行数据 (SDAx)——RC4/SDI1/SDA1 (或 RD5/SDI2/SDA2,适用于 100 引脚器件) 用户必须通过将 TRISC<4:3> 或 TRISD<5:4> 位置 1 将 这些引脚配置为输入引脚。 MSSP 框图 (I2C™ 模式) 图 19-7: 内部 数据总线 读 写 SSPxBUF 寄存器 SCLx SDAx SSPxSR 寄存器 LSb 匹配检测 MSSP 模块有 6 个寄存器用于 I2C 操作。这些寄存器包 括: • • • • • • MSSP 控制寄存器 1 (SSPxCON1) MSSP 控制寄存器 2 (SSPxCON2) MSSP 状态寄存器 (SSPxSTAT) 串行接收 / 发送缓冲寄存器 (SSPxBUF) MSSP 移位寄存器 (SSPxSR)——不可直接访问 MSSP 地址寄存器 (SSPxADD) SSPxCON1、SSPxCON2 和 SSPxSTAT 是在 I2C 模式 下的控制寄存器和状态寄存器。 SSPxCON1 和 SSPxCON2 寄存器是可读写的。 SSPxSTAT 的低 6 位 是只读的,而高 2 位是可读写的。 SSPxCON2 的多数位会呈现不同的功能,取决于该模 块是运行在主控还是从动模式下;SSPxCON2<5:1>位 在从动模式下还具有不同的名称。寄存器 19-5 (主控 模式)和寄存器 19-6 (从动模式)显示了 SSPxCON2 的不同方面。 SSPxSR 是用来将数据移入或移出的移位寄存器。 SSPxBUF 是缓冲寄存器,可用于数据字节的写入或读 出。 当 MSSP 被配置为工作在 I2C 从动模式下时,SSPxADD 寄存器将保存从器件的地址。当 MSSP 工作在主控模式 下时,SSPxADD 的低 7 位用作波特率发生器的重载值。 移位 时钟 MSb 寄存器 地址匹配 地址屏蔽 接收数据时,SSPxSR 和 SSPxBUF 共同构成一个双重 缓冲接收器。当 SSPxSR 接收到一个完整的字节之后, 该字节会被送入 SSPxBUF,同时将中断标志位 SSPxIF 置 1。 在数据发送过程中, SSPxBUF 不是双重缓冲的,对 SSPxBUF的写操作将同时写入SSPxBUF和SSPxSR。 SSPxADD 寄存器 启动和 停止位检测 2006 Microchip Technology Inc. 置 1 或复位 S 位和 P 位 (SSPxSTAT 寄存器) 超前信息 DS39762A_CN 第 265 页 PIC18F97J60 系列 寄存器 19-3: SSPxSTAT:MSSPx 状态寄存器 (I2C™ 模式) R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0 SMP CKE D/A P(1) S(1) R/W(2,3) UA BF bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 SMP:边沿斜率控制位 在主控或从动模式下: 1 = 标准速度模式下禁止边沿斜率控制 (100 kHz 和 1 MHz) 0 = 高速模式下使能边沿斜率控制 (400 kHz) bit 6 CKE:SMBus 选择位 在主控或从动模式下: 1 = 使能 SMBus 特定输入 0 = 禁止 SMBus 特定输入 bit 5 D/A:数据 / 地址位 在主控模式下: 保留。 在从动模式下: 1 = 表示上一个接收或发送的字节是数据 0 = 表示上一个接收或发送的字节是地址 bit 4 P:停止位 (1) 1 = 表示最近检测到停止位 0 = 最近未检测到停止位 bit 3 S:启动位 (1) 1 = 表示最近检测到起始位 0 = 最近未检测到起始位 bit 2 R/W:读 / 写信息位 (仅用于 I2C 模式) (2,3) 在从动模式下: 1=读 0=写 在主控模式下: 1 = 正在进行发送 0 = 未进行发送 bit 1 UA:更新地址位 (仅用于 10 位从动模式) 1 = 表示用户需要更新 SSPxADD 寄存器中的地址 0 = 不需要更新地址 bit 0 BF:缓冲区满状态位 在发送模式下: 1 = SSPxBUF 已满 0 = SSPxBUF 为空 在接收模式下: 1 = SSPxBUF 已满 (不包括 ACK 和停止位) 0 = SSPxBUF 为空 (不包括 ACK 和停止位) 注 x = 未知 1: 该位在复位及 SSPEN 清零时被清零。 2: 该位保存最后一个地址匹配后的 R/W 位信息。该位仅在从地址匹配到下一个起始位、停止位或非 ACK 位 之间有效。 3: 将该位与 SEN、 RSEN、 PEN、 RCEN 或 ACKEN 进行或运算将指示 MSSP 是否处于有效模式。 DS39762A_CN 第 266 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 19-4: SSPxCON1:MSSPx 控制寄存器 1 (I2C™ 模式) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 WCOL:写冲突检测位 在主控发送模式下: 1 = 当 I2C 不满足启动发送数据的条件时,试图向 SSPxBUF 寄存器写入数据 (必须用软件清零) 0 = 未发生冲突 在从动发送模式下: 1 = 正在发送前一个字时,又有数据写入 SSPxBUF 寄存器 (必须用软件清零) 0 = 未发生冲突 在接收模式 (主控或从动模式)下: 该位是无关位。 bit 6 SSPOV:接收溢出指示位 在接收模式下: 1 = SSPxBUF 寄存器仍在保存前一字节时,接收到一个新的字节 (必须用软件清零) 0 = 无溢出 在发送模式下: 在发送模式下,该位是无关位。 bit 5 SSPEN:主控同步串口使能位 1 = 使能串口并将 SDAx 和 SCLx 引脚配置为串口引脚 (1) 0 = 禁止串口并将上述引脚配置为 I/O 端口引脚 (1) bit 4 CKP:SCKx 释放控制位 在从动模式下: 1 = 释放时钟 0 = 保持时钟低电平 (时钟延长),用来确保数据建立时间 在主控模式下: 在此模式下未使用。 bit 3-0 SSPM3:SSPM0:主控同步串口模式选择位 1111 = I2C 从动模式, 10 位地址,并使能启动位和停止位中断 (2) 1110 = I2C 从动模式, 7 位地址,并使能启动位和停止位中断 (2) 1011 = I2C 由固件控制的主控模式 (从器件空闲) (2) 1000 = I2C 主控模式,时钟 = FOSC/(4 * (SSPADD + 1))(2) 0111 = I2C 从动模式, 10 位地址 (2) 0110 = I2C 从动模式, 7 位地址 (2) 注 1: 当该位被使能时,必须将 SDAx 和 SCLx 引脚配置为输入引脚。 2: 此处未列出的位组合为保留或只用于 SPI 模式。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 267 页 PIC18F97J60 系列 寄存器 19-5: R/W-0 GCEN SSPxCON2:MSSPx 控制寄存器 2 (I2C™ 主控模式) R/W-0 ACKSTAT R/W-0 ACKDT (1) R/W-0 (2) ACKEN R/W-0 (2) RCEN R/W-0 (2) PEN R/W-0 (2) RSEN bit 7 R/W-0 SEN(2) bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 GCEN:广播呼叫使能位 (仅用于从动模式) 在主控模式下未使用。 bit 6 ACKSTAT:应答状态位 (仅用于主控发送模式) 1 = 未收到来自从器件的应答 0 = 收到来自从器件的应答 bit 5 ACKDT:应答数据位 (仅用于主控接收模式) (1) 1 = 无应答 0 = 应答 bit 4 ACKEN:应答序列使能位 (2) 1 = 在 SDAx 和 SCLx 引脚上发起应答序列,并发送 ACKDT 数据位。由硬件自动清零。 0 = 应答序列空闲 bit 3 RCEN:接收使能位 (仅用于主控接收模式) (2) 1 = 使能 I2C 接收模式 0 = 接收空闲 bit 2 PEN:停止条件使能位 (2) 1 = 在 SDAx 和 SCLx 引脚上发起停止条件。由硬件自动清零。 0 = 停止条件空闲 bit 1 RSEN:重复启动条件使能位 (2) 1 = 在 SDAx 和 SCLx 引脚上发起重复启动条件。由硬件自动清零。 0 = 重复启动条件空闲 bit 0 SEN:启动条件使能 / 延长使能位 (2) 1 = 在 SDAx 和 SCLx 引脚上发起启动条件。由硬件自动清零。 0 = 启动条件空闲 注 1: 用户在接收结束时发起一个应答时序,同时发送该值。 2: 如果 I2C 模块处于激活状态,可能这些位不会被置 1 (没有缓存),并且也可能不会写入 SSPxBUF (或 禁止写 SSPxBUF)。 DS39762A_CN 第 268 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 19-6: SSPxCON2:MSSPx 控制寄存器 2 (I2C™ 从动模式) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 GCEN ACKSTAT ADMSK5 ADMSK4 ADMSK3 ADMSK2 ADMSK1 SEN(1) bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 GCEN:广播呼叫使能位 (仅用于从动模式) 1 = 当 SSPxSR 接收到广播呼叫地址 (0000h)时允许中断 0 = 禁止广播呼叫地址 bit 6 ACKSTAT:应答状态位 在从动模式下未使用。 bit 5-2 ADMSK5:ADMSK2:从动地址屏蔽选择位 1 = 使能 SSPxADD 相应位的屏蔽 0 = 禁止 SSPxADD 相应位的屏蔽 bit 1 ADMSK1:从动地址最低有效位屏蔽选择位 在 7 位地址模式下: 1 = 仅使能 SSPxADD<1> 屏蔽 0 = 禁止 SSPxADD<1> 屏蔽 在 10 位地址模式下: 1 = 使能 SSPxADD<1:0> 屏蔽 0 = 禁止 SSPxADD<1:0> 屏蔽 bit 0 SEN:延长使能位 (1) 1 = 为从动发送和从动接收使能时钟延长 0 = 时钟延长被禁止 注 x = 未知 1: 如果 I2C 模块处于激活状态,可能该位不会被置 1 (没有缓存),并且也可能不会写入 SSPxBUF (或禁 止写 SSPxBUF)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 269 页 PIC18F97J60 系列 19.4.2 工作原理 通过将 MSSP 使能位 SSPEN(SSPxCON1<5>)置 1, 可使能 MSSP 模块。 SSPxCON1 寄存器用于控制 I 2C 工作模式。可通过设置 模式选择位 (SSPxCON1<3:0>)选择以下 I 2C 模式之 一: I2C 主控模式,时钟 = (FOSC/4) x (SSPxADD + 1) I 2C 从动模式 (7 位地址) I 2C 从动模式 (10 位地址) I 2C 从动模式 (7 位地址),使能启动位和停止位 中断 • I 2C 从动模式 (10 位地址),使能启动位和停止位 中断 • I 2C 固件控制的主控模式,从器件空闲 • • • • 通过将相应的 TRISC 或 TRISD 位置 1,将 SCLx 和 SDAx 引脚编程为输入引脚;在 SSPEN 位置 1 时选择 任何 I 2C 模式,将强制上述引脚漏极开路。要确保此模 块的正常工作,必须为 SCLx 和 SDAx 引脚提供外接上 拉电阻。 19.4.3 从动模式 在从动模式下, SCLx 引脚和 SDAx 引脚必须被配置为 输入 (TRISC<4:3> 或 TRISD<5:4> 置 1)。必要时 MSSP 模块将使用输出数据改写输入状态 (从发送 器)。 2C 从动模式硬件总是在地址精确匹配时产生中断。此 I 外,地址屏蔽功能可使硬件在多个地址发生匹配时 (7 位寻址模式下多达 31 个,10 位寻址模式下多达 63 个) 产生一个中断。用户也可以通过模式选择位,选择使用 启动位或停止位中断。 当地址匹配或在地址匹配后发送的数据被接收时,硬件 会自动产生一个应答(ACK)脉冲,并把当时 SSPxSR 寄存器中接收到的值装入 SSPxBUF 寄存器。 为确保正常工作, SCLx 时钟输入必须满足最小高电平 和最小低电平时间要求。在时序参数 100 和参数 101 中 显示了 I2C 规范的高低电平时间和对 MSSP 模块的具体 要求。 19.4.3.1 一旦 MSSP 模块被使能,它就会等待启动条件出现。启 动条件出现后,8 位数据被移入 SSPxSR 寄存器。在时 钟 (SCLx)线的上升沿采样所有的输入位。寄存器 SSPxSR<7:1> 的值会和 SSPxADD 寄存器的值比较, 该比较是在第 8 个时钟 (SCLx)脉冲下降沿进行的。 如果地址匹配,并且 BF 位和 SSPOV 位都被清零,会 发生下列事件: 1. 2. 3. 4. 1. 2. 3. 4. 5. 6. 7. 8. 在上述情况下,SSPxSR寄存器的值不会装入SSPxBUF, 但是 SSPxIF 位会置 1。BF 位是通过读取 SSPxBUF 寄存 器清零的,而 SSPOV 位是通过软件清零的。 DS39762A_CN 第 270 页 SSPxSR 寄存器值被装入 SSPxBUF 寄存器。 将缓冲区满标志位 BF 置 1。 产生 ACK 脉冲。 在第 9 个 SCLx 脉冲的下降沿,MSSP 中断标志 位 SSPxIF 置 1(如果允许中断,则产生中断)。 在 10 位地址模式下,从器件需要接收两个地址字节。第 一个地址字节的高 5 位将指定这是否是一个 10 位地址。 R/W 位 (SSPxSTAT<2>)必须指定写操作,这样从器 件才能接收到第二个地址字节。对于 10 位地址,第一个 字节应该是“11110 A9 A8 0”,其中“A9”和“A8” 是该地址的两个最高有效位。10 位地址模式的操作步骤 如下,其中 7-9 步是针对从发送器而言的。 只要满足下列条件之一,MSSP 模块就不会产生此 ACK 脉冲: • 在接收到数据前,缓冲区满位 BF (SSPxSTAT<0>)被置 1。 • 在接收到数据前,溢出位 SSPOV (SSPxCON1<6>)被置 1。 寻址 9. 超前信息 接收地址的第一个(高)字节(SSPxIF、BF 和 UA 位置 1)。 用地址的第二个(低)字节更新 SSPxADD 寄存 器 (UA 位清零并释放 SCLx 时钟线)。 读 SSPxBUF 寄存器 (BF 位清零)并将标志位 SSPxIF 清零。 接收地址的第二个(低)字节(SSPxIF、BF 和 UA 位置 1)。 使用地址的第一个(高)字节更新 SSPxADD 寄 存器。如果匹配的话就释放 SCLx 时钟线,这将 清零 UA 位。 读 SSPxBUF 寄存器 (BF 位清零)并将标志位 SSPxIF 清零。 接收重复启动条件。 接收地址的第一个(高)字节(SSPxIF 位和 BF 位置 1)。 读 SSPxBUF 寄存器 (BF 位清零)并将标志位 SSPxIF 清零。 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.3.2 地址屏蔽 将地址的某一位屏蔽意味着该位可为任意值,此时会 响应两个地址并产生一个中断。由于同一时刻可以有 多个地址位被屏蔽,所以在 7 位模式下可响应多达 31 个地址,而在 10 位模式下则可响应多达 63 个地址(见 例 19-2)。 不管是否使用地址屏蔽, I2C 从器件的工作方式保持不 变。当使用地址屏蔽时, I2C 从器件能够响应多个地址 并产生中断,此时需要通过查询 SSPxBUF 来判断是哪 一个地址引起的中断。 在 10 位地址模式下,地址屏蔽位 ADMSK<5:2> 可用来 屏蔽 SSPxADD 寄存器中对应的地址位,而 ADMSK1 可以同时屏蔽地址的低 2 位 (SSPxADD<1:0>)。如果 ADMSK 的某位是有效的 (ADMSK<n> = 1),则对应 的地址位可以被忽略 (SSPxADD<n> = x)。需要注意 的是,尽管在 10 位地址模式下,地址的高位也要用到 SSPxADD 寄存器中的某些位,但地址屏蔽位对这些位 不起作用,地址屏蔽位只会影响地址低字节中的位。 注 1: ADMSK1 屏蔽地址的低 2 位。 2: 地址屏蔽不会对地址的高 2 位起作用。 在 7 位 地 址 模 式 下,地 址 屏 蔽 位 ADMSK<5:1> (SSPxCON2<5:1>)可用来屏蔽 SSPxADD 寄存器中对 应的地址位。如果ADMSK的某位被置1(ADMSK<n> = 1), 则对应的地址位可以被忽略 (SSPxADD<n> = x)。对 于发出地址应答的模块来讲,只要与没被屏蔽的地址位 匹配就可以了。 例 19-2: 地址屏蔽示例 7 位寻址模式: SSPxADD<7:1> = A0h (1010000)(SSPxADD<0> 假设为 0) ADMSK<5:1> = 00111 可被应答的地址:A0h, A2h, A4h, A6h, A8h, AAh, ACh, AEh 10 位寻址模式: SSPxADD<7:0> = A0h (10100000)(此例中地址高 2 位被忽略,因为它们不受影响) ADMSK<5:1> = 00111 可被应答的地址:A0h, A1h, A2h, A3h, A4h, A5h, A6h, A7h, A8h, A9h, AAh, ABh, ACh, ADh, AEh, AFh 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 271 页 PIC18F97J60 系列 19.4.3.3 19.4.3.4 接收 当地 址 字 节 的 R/W 位 清 零 并 发 生 地 址 匹 配 时, SSPxSTAT 寄存器的 R/W 位清零。接收的地址被装入 SSPxBUF 寄存器,且 SDAx 信号保持低电平(ACK)。 当 发 生 地 址 字 节 溢 出 时,则 不 会 产 生 应 答 脉 冲 (ACK) 。溢出条件是指 BF 位 (SSPxSTAT<0>)置 1,或者 SSPOV 位 (SSPxCON1<6>)置 1。 每个数据传输字节都会产生一个 MSSP 中断。中断标志 位 SSPxIF 必须用软件清零。通过 SSPxSTAT 寄存器可 以确定该字节的状态。 如果 SEN 被使能(SSPxCON2<0> = 1),SCKx/SCLx (RC3 或 RD6)将在每个数据传输之后保持为低电平 (时钟延长)。必须通过将 CKP 位 (SSPxCON1<4>) 置 1 才能释放时钟。更多详细信息,请参见第 19.4.4 节 “时钟延长”。 发送 当输入的地址字节的 R/W 位置 1 并发生地址匹配 时,SSPxSTAT 寄存器的 R/W 位置 1。接收到的地址被 装入 SSPxBUF 寄存器。 ACK 脉冲在第 9 位上发送,同 时不管 SEN 的值如何, RC3 或 RD6 引脚保持低电平 (更多详细信息,请参见第 19.4.4 节“时钟延长”)。通 过延长时钟,主器件只有在从器件准备好发送数据时, 才 发 出 另 一 个 时 钟 脉 冲。发 送 的 数 据 必 须 被 装 入 SSPxBUF 寄存器,同时也被装入 SSPxSR 寄存器。然 后,应该通过将 CKP (SSPxCON1<4>)置 1 来使能 RC3 或 RD6 引脚。8 个数据位在 SCLx 输入的下降沿被 移出。这可确保在 SCLx 为高电平期间 SDAx 信号是有 效的 (图 19-10)。 来自主接收器的 ACK 脉冲将在第 9 个 SCLx 输入脉冲的 上升沿锁存。如果 SDAx 信号为高电平(无 ACK 应答信 号),那么表示数据传输已完成。在这种情况下,如果从 器件锁存了 ACK,将复位从动逻辑 (复位 SSPxSTAT寄 存器) ,同时从器件监视下一个起始位的出现。如果 SDAx 线为低电平 (ACK),则必须将下一个要发送的 数据装入 SSPxBUF 寄存器。同样,必须通过将 CKP 位 置 1 来使能 RC3 或 RD6 引脚。 每传输一个数据字节都会产生一个MSSP中断。SSPxIF 位必须用软件清零,SSPxSTAT 寄存器用于确定字节的 状态。 SSPxIF 位在第 9 个时钟脉冲的下降沿被置 1。 DS39762A_CN 第 272 页 超前信息 2006 Microchip Technology Inc. 2006 Microchip Technology Inc. 2 A6 超前信息 CKP 3 4 A4 接收地址 A5 5 A3 6 A2 (当 SEN = 0 时,CKP 不会复位为 0) SSPOV(SSPxCON1<6>) BF(SSPxSTAT<0>) SSPxIF(PIR1<3> 或 PIR3<7>) 1 SCLx S A7 7 A1 8 9 ACK R/W = 0 1 D7 3 4 D4 接收数据 D5 用软件清零 SSPxBUF 被读取 2 D6 5 D3 6 D2 7 D1 8 D0 9 ACK 1 D7 2 D6 3 4 D4 接收数据 D5 5 D3 6 D2 7 D1 8 D0 总线主控器件 终止传输 P SSPOV 置 1 因为 SSPxBUF 仍为满, 不发送 ACK。 9 ACK 图 19-8: SDAx PIC18F97J60 系列 I2C™ 从动模式接收时序 (SEN = 0, 7 位地址) DS39762A_CN 第 273 页 DS39762A_CN 第 274 页 2 A6 超前信息 注 CKP 3 A5 4 X 5 A3 6 X 7 X 8 9 ACK 1 D7 3 4 D4 接收数据 D5 用软件清零 SSPxBUF 被读取 2 D6 2: 在本例中,等于 A7.A6.A5.X.A3.X.X 的地址会得到应答并产生中断。 1: x = 无关位 (即,该地址位可以是 1 或 0)。 (当 SEN = 0 时,CKP 不会复位为 0) SSPOV(SSPxCON1<6>) BF(SSPxSTAT<0>) SSPxIF(PIR1<3> 或 PIR3<7>) 1 SCLx S A7 R/W = 0 5 D3 6 D2 7 D1 8 D0 9 ACK 1 D7 2 D6 3 4 D4 接收数据 D5 5 D3 6 D2 7 D1 8 D0 总线主控器件 终止传输 P SSPOV 置 1 因为 SSPxBUF 仍为满, 不发送 ACK。 9 ACK 图 19-9: SDAx 接收地址 PIC18F97J60 系列 I2C™ 从动模式接收时序 (SEN = 0 且 ADMSK<5:1> = 01011, 7 位地址) 2006 Microchip Technology Inc. 2006 Microchip Technology Inc. 1 数据 采样 2 A6 3 超前信息 CKP BF(SSPxSTAT<0>) 4 A4 接收地址 A5 SSPxIF(PIR1<3> 或 PIR3<7>) S A7 5 A3 6 A2 7 A1 8 R/W = 0 9 ACK 当 CPU 响应 SSPxIF 时, SCLx 保持低电平 1 D7 3 D5 4 用软件将 CKP 置 1 SSPxBUF 要用软件写入 5 D3 发送数据 D4 用软件清零 2 D6 6 D2 7 8 D0 9 在 SSPxIF ISR 中 D1 ACK 1 D7 4 D4 用软件清零 3 D5 5 D3 用软件将 CKP 置 1 SSPxBUF 要用软件写入 2 D6 6 D2 发送数据 7 8 D0 9 ACK 在 SSPxIF ISR 中 D1 P 图 19-10: SCLx SDAx PIC18F97J60 系列 I2C™ 从动模式发送时序 (7 位地址) DS39762A_CN 第 275 页 DS39762A_CN 第 276 页 2 1 3 1 4 1 超前信息 CKP 6 A9 7 A8 UA 置 1 表示 SSPxADD 需要更新 将 SSPxSR 的内容 写入 SSPxBUF 5 0 8 (当 SEN = 0 时,CKP 不会复位为 0) UA(SSPxSTAT<1>) SSPOV(SSPxCON1<6>) BF(SSPxSTAT<0>) 用软件清零 SSPxIF(PIR1<3> 或 PIR3<7>) 1 SCLx S 1 9 ACK R/W = 0 A7 2 4 A4 5 A3 用软件清零 3 A5 7 A1 8 9 A0 ACK UA 置 1 表示 SSPxADD 需要更新 6 A2 当用地址的低字节 更新 SSPxADD 后, 由硬件清零 假读 SSPxBUF 使 BF 标志位清零 1 A6 接收地址的第二个字节 1 D7 4 5 用软件清零 3 当用地址的高字节 更新 SSPxADD 后, 由硬件清零 2 6 D3 D2 接收数据字节 D6 D5 D4 时钟保持低电平直到 更新 SSPxADD 7 D1 8 9 1 2 4 5 用软件清零 3 6 D3 D2 接收数据字节 D0 ACK D7 D6 D5 D4 7 8 D1 D0 9 P 总线主控器 件终止传输 I2C™ 从动模式接收时序 (SEN = 0, 10 位地址) SSPOV 置 1 因为 SSPxBUF 仍为满, 不发送 ACK。 ACK 图 19-11: SDAx 接收地址的第一个字节 时钟保持低电平直到 更新 SSPxADD PIC18F97J60 系列 2006 Microchip Technology Inc. 2006 Microchip Technology Inc. 2 1 3 1 4 1 超前信息 注 CKP 6 A9 7 A8 UA 置 1 表示 SSPxADD 需要更新 将 SSPxSR 的内容 写入 SSPxBUF 5 0 8 9 A7 2 X 4 5 A3 用软件清零 3 A5 7 X 8 X UA 置 1 表示 SSPxADD 需要更新 6 A2 当用地址的低字节 更新 SSPxADD 后, 由硬件清零 假读 SSPxBUF 使 BF 标志位清零 1 A6 接收地址的第二个字节 3: 请注意地址屏蔽不会对地址的高位起作用。 2: 在本例中,等于 A9.A8.A7.A6.A5.X.A3.A2.X.X 的地址会得到应答并产生中断。 1: x = 无关位 (即,该地址位可以为 1 或 0)。 (当 SEN = 0 时,CKP 不会复位为 0) UA(SSPxSTAT<1>) SSPOV(SSPxCON1<6>) BF(SSPxSTAT<0>) 用软件清零 SSPxIF(PIR1<3> 或 PIR3<7>) 1 SCLx S 1 ACK R/W = 0 9 ACK 1 D7 2 4 5 6 D3 D2 用软件清零 3 D6 D5 D4 接收数据字节 当用地址的高字节 更新 SSPxADD 后, 由硬件清零 时钟保持低电平直到 更新 SSPxADD 7 8 9 1 2 4 5 用软件清零 3 6 D3 D2 接收数据字节 D1 D0 ACK D7 D6 D5 D4 7 8 D1 D0 9 P 总线主控器件 终止传输 SSPOV 置 1 因为 SSPxBUF 仍为满, 不发送 ACK。 ACK 图 19-12: SDAx 接收地址的第一个字节 时钟保持低电平直到 更新 SSPxADD PIC18F97J60 系列 I2C™ 从动模式接收时序 (SEN = 0 且 ADMSK<5:1> = 01001, 10 位地址) DS39762A_CN 第 277 页 DS39762A_CN 第 278 页 2 3 1 4 1 超前信息 CKP(SSPxCON1<4>) UA(SSPxSTAT<1>) BF(SSPxSTAT<0>) 5 0 6 7 A9 A8 UA 置 1 表示 SSPxADD 需要更新 将 SSPxSR 的内容 写入 SSPxBUF SSPxIF(PIR1<3> 或 PIR3<7>) 1 S SCLx 1 接收地址的第一个字节 1 SDAx 8 9 ACK 1 3 用软件清零 2 5 6 7 8 A0 UA 置 1 表示 SSPxADD 需要更新 当用地址的低字节 更新 SSPxADD 后, 由硬件清零 4 A6 A5 A4 A3 A2 A1 接收地址的第二个字节 假读 SSPxBUF 使 BF 标志位清零 A7 9 ACK 2 1 3 用软件清零 1 1 4 1 当用地址的高字节 更新 SSPxADD 后, 由硬件清零 假读 SSPxBUF 使 BF 标志位清零 SR 1 5 0 接收地址的第一个字节 6 8 9 ACK R/W = 1 4 5 用软件清零 3 写 SSPxBUF 启动发送 2 用软件将 CKP 置 1 1 6 7 9 ACK P 数据发送完毕 清零 BF 标志位 8 D4 D3 D2 D1 D0 发送数据字节 D7 D6 D5 CKP 由硬件自动清零,保持 SCLx 为低电平 使 BF 标志位 在第三个地址序列的 末尾清零 7 A9 A8 时钟保持低电平直到 CKP 被置 1 总线主控器件 终止传输 图 19-13: R/W = 0 时钟保持低电平直到 更新 SSPxADD 时钟保持低电平直到 更新 SSPxADD PIC18F97J60 系列 I2C™ 从动模式发送时序 (10 位地址) 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.4 19.4.4.3 时钟延长 7 位和 10 位从动模式均能在发送序列期间自动实现时钟 延长。 SEN 位 (SSPxCON2<0>)允许在接收期间使能时钟 延长。将 SEN 置 1 将使 SCLx 引脚在每个数据接收序 列的末尾保持低电平。 19.4.4.1 7 位从动接收模式 (SEN = 1)的时 钟延长 在 7 位从动接收模式下,如果在 ACK 序列末的第 9 个 时钟的下降沿将 BF 位置 1,则 SSPxCON1 寄存器中的 CKP 位就会自动清零,强制 SCLx 输出保持在低电平。 CKP 被清零会将 SCLx 线拉为低电平。在允许继续接收 之前,必须在用户的中断服务程序中将 CKP 位置 1。保 持 SCLx 信号为低电平,用户可以在主器件发起另一个接 收序列之前,有时间处理中断服务程序并读取 SSPxBUF 的内容。这将防止发生缓冲区溢出 (见图 19-15)。 注 1: 如果用户在第 9 个时钟的下降沿到来之前 读取了 SSPxBUF 的内容,使得 BF 位被 清零,那么 CKP 位就不会被清零,也不会 发生时钟延长。 2: 不管 BF 位的状态如何, CKP 位都可以用 软件置 1。为避免溢出,在下一个接收序列 开始之前,用户要注意在中断服务程序中 清零 BF 位。 19.4.4.2 7 位从动发送模式的时钟延长 如果 BF 位被清零, 7 位从动发送模式将通过在第 9 个 时钟的下降沿出现后清零 CKP 位,以实现时钟延长。上 述情形与 SEN 位的状态无关。 用户的中断服务程序必须先将CKP位置1才可以继续发 送。在保持 SCLx 信号为低电平期间,用户在主器件发 起另一个发送序列之前,将有时间处理中断服务程序并 装入 SSPxBUF 的内容 (见图 19-10)。 注 1: 如果用户在第 9 个时钟的下降沿之前就装 入 SSPxBUF 的内容,使 BF 位置 1,CKP 位就不会被清零,也不会发生时钟延长。 2: 不管 BF 位的状态如何, CKP 位都可以用 软件置 1。 19.4.4.4 10 位从动发送模式的时钟延长 在 10 位从动发送模式下,在前两个地址序列中由 UA 位 的状态来控制时钟延长,正如同 10 位从动接收模式一 样。头两个地址后跟着第三个地址序列,该地址序列包 含 10 位地址的高位和被置为 1 的 R/W 位。在执行完第 三个地址序列后,UA 位不置 1,此时模块配置为发送模 式,由 BF 标志位控制时钟延长,正如 7 位从动发送模 式一样 (见图 19-13)。 10 位从动接收模式 (SEN = 1)的 时钟延长 在 10 位从动接收模式下,在地址序列中会自动发生时 钟延长,但是 CKP 位不会被清零。在这期间,如果 UA 位在第 9 个时钟之后置 1,将启动时钟延长。UA 位在接 收到 10 位地址的高字节后被置 1,然后接收 10 位地址 的第二个字节并清零 R/W 位。在更新 SSPxADD 的时 候释放时钟线。如同 7 位模式一样,在每个数据接收序 列中会发生时钟延长。 注: 如果用户在第9个时钟的下降沿出现之前查 询 UA 位,并通过更新 SSPxADD 寄存器清 零 UA 位,而 且 在此 之 前 用 户 没有读取 SSPxBUF 寄存器使 BF 位清零,则 CKP 位 的电平仍然不会被拉低。基于 BF 位状态的 时钟延长仅在数据序列中出现,不会出现 在地址序列中。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 279 页 PIC18F97J60 系列 19.4.4.5 时钟同步和 CKP 位 当 CKP 位被清零时,SCLx 输出被强制为 0。然而,将 CKP 位清零不会将 SCLx 输出拉为低电平,除非已经采 样到 SCLx 输出为低电平。因此, CKP 位不会将 SCLx 信号拉为低电平,除非外部 I2C 主器件将 SCLx 线拉低。 图 19-14: SCLx 输出将保持低电平,直到 CKP 位置 1 且 I2C 总线 上的其他器件将 SCLx 电平拉高为止。这可以确保对 CKP 位的写操作不会违反 SCLx 的最小高电平时间要求 (见图 19-14)。 时钟同步时序 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 DX – 1 DX SCLx CKP 主器件 占有时钟 主器件 释放时钟 WR SSPxCON1 DS39762A_CN 第 280 页 超前信息 2006 Microchip Technology Inc. 2006 Microchip Technology Inc. 2 A6 超前信息 CKP SSPOV(SSPxCON1<6>) BF(SSPxSTAT<0>) 3 4 A4 接收地址 A5 SSPxIF(PIR1<3> 或 PIR3<7>) 1 SCLx S A7 5 A3 6 A2 7 A1 8 9 ACK R/W = 0 3 如果 BF 清零发生在 第 9 个时钟的下降沿 之前,则 CKP 将不会 被复位为 0 而且也 不会发生时钟延长 4 D4 接收数据 D5 用软件清零 2 D6 SSPxBUF 被读取 1 D7 5 D3 6 D2 7 D1 9 ACK 1 D7 BF 在第 9 个时钟的 下降沿之后被置 1, CKP 复位为 0 并且 发生时钟延长 8 D0 3 4 D4 接收数据 D5 用软件将 CKP 置 1 2 D6 时钟保持低电平直到 CKP 被置 1 5 D3 6 D2 7 D1 8 D0 总线主控器件 终止传输 P SSPOV 置 1 因为 SSPxBUF 仍为满, 不发送 ACK。 9 ACK 时钟未保持在低电平 因为 ACK = 1 图 19-15: SDAx 时钟未保持在低电平, 因为缓冲区满标志位 在第 9 个时钟的下降 沿之前已清零 PIC18F97J60 系列 I2C™ 从动模式接收时序 (SEN = 1, 7 位地址) DS39762A_CN 第 281 页 DS39762A_CN 第 282 页 2 1 3 1 4 1 超前信息 CKP UA(SSPxSTAT<1>) SSPOV(SSPxCON1<6>) BF(SSPxSTAT<0>) 用软件清零 5 0 6 7 A9 A8 UA 置 1 表示 SSPxADD 需要更新 将 SSPxSR 的内容 写入 SSPxBUF SSPxIF(PIR1<3> 或 PIR3<7>) 1 SCLx S 1 8 9 ACK R/W = 0 A7 2 4 A4 6 A2 注: 7 A1 8 A0 在第 9 个时钟的下降沿之前 更新 SSPxADD 寄存器不会 影响 UA, UA 将保持置 1。 9 ACK UA 置 1 表示 SSPxADD 需要更新 在第 9 个时钟的下降沿 之后用地址的低字节 更新 SSPxADD 后, 由硬件清零 5 A3 用软件清零 3 A5 假读 SSPxBUF 使 BF 标志位清零 1 A6 接收地址的第二个字节 2 4 5 用软件清零 3 6 注: 7 8 D1 D0 9 ACK 1 4 5 用软件清零 3 用软件将 CKP 置 1 2 6 D3 D2 接收数据字节 D7 D6 D5 D4 时钟保持低电平直到 CKP 被置为 1 在第 9 个时钟的下降沿之前更新 SSPxADD 寄存 器不会影响 UA, UA 将保持置 1。 在第 9 个时钟的下降沿 之后用地址的高字节 更新 SSPxADD 后, 由硬件清零 假读 SSPxBUF 使 BF 标志位清零 1 D3 D2 接收数据字节 D7 D6 D5 D4 时钟保持低电平直到 更新 SSPxADD 7 8 9 ACK 总线主控器件 终止传输 P SSPOV 置 1 因为 SSPxBUF 仍为满, 不发送 ACK。 D1 D0 时钟未保持在低电平 因为 ACK = 1 图 19-16: SDAx 接收地址的第一个字节 时钟保持低电平直到 更新 SSPxADD PIC18F97J60 系列 I2C™ 从动模式接收时序 (SEN = 1, 10 位地址) 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.5 如果与广播呼叫地址匹配, SSPxSR 的值将被传输到 SSPxBUF, BF 标志位 (第 8 位)置 1,并且 SSPxIF 中断标志位在第 9 位 (ACK 位)的下降沿置 1。 支持广播呼叫地址 2 在 I C 总线的寻址过程中,通常由启动条件后的第一个 字节决定主器件将寻址哪个从器件。但广播呼叫地址例 外,它能寻址所有器件。当使用这个地址时,理论上所 有的器件都应该发送一个应答信号来响应。 当中断得到响应时,可以通过读取 SSPxBUF 的内容来 检查中断源。该值可用于判断是特定器件的地址还是一 个广播呼叫地址。 广播呼叫地址是由 I2C 协议为特定目的保留的 8 个地址 之一。 它由全 0 组成,且 R/W = 0。 在 10 位地址模式下,需要更新 SSPxADD 用来匹配地 址的后半部分,同时 UA 位置 1(SSPxSTAT<1>)。如 果 GCEN 位置 1 时采样到广播呼叫地址,同时从器件被 配置为 10 位地址模式,则不再需要地址的后半部分,也 不会将 UA 位置 1,从器件将在应答后开始接收数据 (图 19-17)。 当使能广播呼叫使能位 (GCEN)(SSPxCON2<7> 置 1)时,即可识别广播呼叫地址。检测到起始位后,8 位 数据会被移入 SSPxSR,同时将该地址与 SSPxADD 进 行比较。它还会与广播呼叫地址进行比较并用硬件设 定。 图 19-17: 从动模式广播呼叫地址时序 (7 位或 10 位地址模式) 地址与广播呼叫地址作比较, ACK 后,设置中断标志 接收数据 R/W = 0 广播呼叫地址 SDAx SCLx S 1 2 3 4 ACK D7 5 6 7 8 9 1 ACK D6 D5 D4 D3 D2 D1 D0 2 3 4 5 6 7 8 9 SSPxIF BF(SSPxSTAT<0>) 用软件清零 SSPxBUF 被读取 SSPOV(SSPxCON1<6>) ‘0’ GCEN(SSPxCON2<7>) ‘1’ 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 283 页 PIC18F97J60 系列 19.4.6 主控模式 当配置为 I2C 主控模式时,MSSP 模块不允 许事件排队。例如,在启动条件结束前,不 允许用户立即写SSPxBUF寄存器以启动传 输。在 这 种 情 况 下,将 不 会 执 行 写 SSPxBUF,WCOL 位将被置 1,这表明没 有发生对 SSPxBUF 的写操作。 注: 通过将 SSPxCON1 中的相应 SSPM 位置 1 和清零,同 时将 SSPEN 位置 1,可以使能主控模式。在主控模式 下, SCLx 和 SDAx 信号线由 MSSP 硬件控制。 主控模式通过在检测到启动和停止条件时产生中断来工 作。停止 (P)位和启动 (S)位在复位或禁止 MSSP 模块时清零。当 P 位置 1 时,可以获得 I 2C 总线的控制 权;否则, P 位和 S 位都清零,总线处于空闲状态。 下列事件会使 MSSP 中断标志位 SSPxIF 置 1(如果使 能 MSSP 中断,则产生中断): 在固件控制的主控模式下,用户代码根据启动和停止位 条件执行所有的 I 2C 总线操作。 • • • • • 一旦使能主控模式,用户即可选择以下 6 项操作: 1. 2. 3. 4. 5. 6. 在 SDAx 和 SCLx 上发出一个启动条件。 在 SDAx 和 SCLx 上发出一个重复启动条件。 写入 SSPxBUF 寄存器,启动数据 / 地址的发送。 配置 I2C 端口用于接收数据。 在接收数据字节末尾产生应答信号。 在 SDAx 和 SCLx 上产生停止条件。 图 19-18: 启动条件 停止条件 数据字节发送 / 接收 应答发送 重复启动 MSSP 框图 (I2C™ 主控模式) 内部 数据总线 读 SSPM3:SSPM0 SSPxADD<6:0> 写 SSPxBUF SDAx 波特率 发生器 移位 时钟 SDAx 输入 SCLx 输入 总线冲突 DS39762A_CN 第 284 页 启动位和停止位 应答产生 启动位检测 停止位检测 写冲突检测 时钟仲裁 XMIT/RCV 结束时的 状态计数器 超前信息 时钟控制 接收使能 SCLx LSb 时钟仲裁 /WCOL 检测 (延迟时钟源) SSPxSR MSb 置 1/ 复位 S、P 和 WCOL(SSPxSTAT 和 SSPxCON1) 将 SSPxIF 和 BCLxIF 置 1 复位 ACKSTAT 和 PEN(SSPxCON2) 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.6.1 I2C 主控模式工作原理 下面是一个典型的发送时序: 主器件产生所有串行时钟脉冲和启动 / 停止条件。以停 止条件或重复启动条件结束传输过程。因为重复启动条 件也是下一次串行传输的开始,因此 I2C 总线一直保持 不被释放的状态。 在主控发送器模式下,串行数据通过 SDAx 输出,而串 行时钟由 SCLx 输出。发送的第一个字节包括作为接收 方的从器件地址 (7 位)和读 / 写 (R/W)位。在这种 情况下, R/W 位将是逻辑 0。一次发送 8 位串行数据。 每发送一个字节,会收到一个应答位。输出启动和停止 条件,表明串行传输的开始和结束。 在主控接收模式下,发送的第一个字节包括作为发送方 的从器件地址(7 位)和 R/W 位。在这种情况下,R/W 将是逻辑 1。因此,发送的第一个字节是一个 7 位从器 件地址,后面跟 1 表示接收。串行数据通过 SDAx 接 收,而串行时钟由 SCLx 输出。每次接收 8 位串行数据。 每接收到一个字节,都会发送一个应答位。启动和停止 条件分别代表发送的开始和结束。 在 I2C 模式下,将使用 SPI 模式中的波特率发生器将 SCLx 时钟频率设置为 100 kHz、 400 kHz 或 1 MHz。 更多详细信息,请参见第 19.4.7 节 “波特率”。 2006 Microchip Technology Inc. 1. 用户通过将启动使能位 SEN(SSPxCON2<0>) 置 1,产生启动条件。 2. SSPxIF 置 1。在进行下一步操作前, MSSP 模 块将等待所需的启动时间。 3. 用户将从器件地址装入 SSPxBUF 进行发送。 4. 器件地址从 SDAx 引脚移出,直到发送完所有 8 位地址数据。 5. MSSP 模块移入来自从器件的 ACK 位,并将它的 值写入 SSPxCON2 寄存器(SSPxCON2<6>)。 6. MSSP 模块在第 9 个时钟周期的末尾将 SSPxIF 置 1,产生一个中断。 7. 用户将 8 位数据装入 SSPxBUF。 8. 数据从 SDAx 引脚移出,直到发送完所有 8 位数 据。 9. MSSP 模块移入来自从器件的 ACK 位,并将它的 值写入 SSPxCON2 寄存器(SSPxCON2<6>)。 10. MSSP 模块在第 9 个时钟周期的末尾将 SSPxIF 置 1,产生一个中断。 11. 用户通过将停止使能位 PEN(SSPxCON2<2>) 置 1 产生停止条件。 12. 一旦停止条件完成,将产生一个中断。 超前信息 DS39762A_CN 第 285 页 PIC18F97J60 系列 19.4.7 19.4.7.1 波特率 2 在I C主控模式下,波特率发生器(Baud Rate Generator, BRG)的重载值位于SSPxADD寄存器的低7位(图 19-19)。 当发生对 SSPxBUF 的写操作时,波特率发生器将自动 开始计数。BRG 会递减计数至 0,然后停止直到再次发 生重载。 BRG 计数器会在每个指令周期 (TCY)中的 Q2 和 Q4 时钟周期上进行两次减计数。在 I2C 主控模式 下,会自动重载 BRG。 波特率和模块的相互关系 因为 MSSP1 和 MSSP2 是彼此独立的模块,所以它们 可以以不同的波特率同时在 I2C 主控模式下工作。这是 通过每个模块使用不同的 BRG 重载值实现的。 由于此模式的基本时钟源来自系统时钟,对系统时钟的 任何更改将会同等程度地影响这两个模块。通过更改 BRG重载值可以将一个或两个波特率改回到前一个值。 如果指定操作完成(即,在传输的最后一个数据位后面 跟着 ACK),内部时钟将自动停止计数, SCLx 引脚将 保持在其最后的状态。 表 19-3 给出了不同的指令周期下的时钟频率以及装入 SSPxADD 的 BRG 值。 图 19-19: 波特率发生器框图 SSPM3:SSPM0 SSPM3:SSPM0 SCLx SSPxADD<6:0> 重载 重载 控制 CLKO 表 19-3: 注 BRG 向下计数器 FOSC/4 使用 BRG 的 I2C™ 时钟频率 FOSC BRG 值 FSCL (两次 BRG 计满返回) 41.667 MHz 19h 400 kHz(1) 41.667 MHz 67h 100 kHz 31.25 MHz 13h 400 kHz(1) 31.25 MHz 4Dh 100 kHz 20.833 MHz 09h 400 kHz(1) 20.833 MHz 33h 100 kHz 1: 虽然 I2C™ 接口各方面都不符合 400 kHz I2C 规范 (该规范适用于大于 100 kHz 的频率),但在需要较高 频率的应用场合可以慎重使用。 DS39762A_CN 第 286 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.7.2 样到 SCLx 引脚为高电平为止,然后波特率发生器将被 重新装入 SSPxADD<6:0> 的值并开始计数。这可以保 证当外部器件将时钟拉低时,SCLx 在至少一个 BRG 周 期内保持高电平 (图 19-20)。 时钟仲裁 如果在任何接收、发送或重复启动 / 停止条件过程中, 主器件拉高了 SCLx 引脚 (允许 SCLx 引脚悬空为高电 平),就会发生时钟仲裁。如果允许 SCLx 引脚悬空为 高电平,波特率发生器(BRG)将暂停计数直到实际采 图 19-20: 带有时钟仲裁的波特率发生器时序 SDAx DX – 1 DX SCLx 被试图拉高但从器件将 SCLx 保持为低电平(时钟仲裁) 允许 SCLx 变为高电平 SCLx BRG 在 Q2 和 Q4 周期 进行递减计数 BRG 值 03h BRG 重载 2006 Microchip Technology Inc. 02h 01h 00h(延时) 03h 02h SCLx 采样为高电平,发生 BRG 重载并开始计数 超前信息 DS39762A_CN 第 287 页 PIC18F97J60 系列 19.4.8 I2C 主控模式启动条件时序 注: 要产 生 启 动 条 件,用 户 应 将 启 动 条 件 使 能 位 SEN (SSPxCON2<0>)置 1。当 SDAx 和 SCLx 引脚采样 为高电平时,波特率发生器重新装入 SSPxADD<6:0> 的 内 容 并 开 始 计 数。如 果 波 特 率 发 生 器 发 生 超 时 (TBRG)时, SCLx 和 SDAx 都采样为高电平时,则 SDAx 引脚被驱动为低电平。当 SCLx 为高电平时,将 SDAx 驱动为低电平将产生启动条件,并使 S 位 (SSPxSTAT<3>)置 1。随 后 波 特 率 发 生 器 重 新 装 入 SSPxADD<6:0>的值并恢复计数。当波特率发生器再次 超时 (TBRG)时, SEN 位 (SSPxCON2<0>)将自动 被硬件清零,波特率发生器暂停工作, SDAx 保持低电 平,启动条件结束。 图 19-21: 19.4.8.1 如果在启动条件开始时,SDAx 和 SCLx 引 脚已经采样为低电平,或者在启动条件期 间,SCLx 在 SDAx 线被驱动为低电平之前 已经采样为低电平,则会发生总线冲突。总 线冲突中断标志位 BCLxIF 置 1,启动条件 中止, I2C 模块复位到空闲状态。 WCOL 状态标志 在启动时序进行当中,如果用户写SSPxBUF,则WCOL 被置 1,同时缓冲区内容不变 (写操作无效)。 注: 由于不允许事件排队,在启动条件结束之 前,不能写 SSPxCON2 的低 5 位。 第一个启动位时序 将 S 位(SSPxSTAT<3>)置 1 此处写 SEN 位 SDAx = 1, SCLx = 1 TBRG 启动位完成后, 由硬件将 SEN 位清零 并将 SSPxIF 位置 1 TBRG 此处写 SSPxBUF 第1位 SDAx 第2位 TBRG SCLx TBRG S DS39762A_CN 第 288 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.9 I2C 主控模式重复启动条件时序 注 将 RSEN 位 (SSPxCON2<1>)编程为高电平,并且 I2C逻辑模块处于空闲状态时,就会产生重复启动条件。 当 RSEN 位置 1 时,SCLx 引脚被拉为低电平。当 SCLx 引 脚 采 样 为 低 电 平 时,波 特 率 发 生 器 装 入 SSPxADD<6:0> 的值,并开始计数。在该波特率发生器 计数周期 (TBRG)内 SDAx 引脚被释放 (其引脚电平 被拉高)。当波特率发生器超时时,如果 SDAx 采样为 高电平, SCLx 引脚将被拉高。当 SCLx 被采样为高电 平时,波特率发生器重新装入 SSPxADD<6:0> 的值并 开始计数。SDAx 和 SCLx 必须在一个计数周期 TBRG 内 采样为高电平。接下来,在一个 TBRG 中,将 SDAx 引 脚驱动为低电平 (SDAx = 0),同时 SCLx 保持高电 平。然后 RSEN 位(SSPxCON2<1>)将自动清零,这 次波特率发生器不会重载, SDAx 引脚保持低电平。一 旦在 SDAx 和 SCLx 引脚上检测到启动条件, S 位 (SSPxSTAT<3>)将被置 1。直到波特率发生器发生超 时后, SSPxIF 位才会置 1。 2: 在重复启动条件期间,下列事件将会导致 总线冲突: • 当 SCLx 由低电平变为高电平时, SDAx 采样为低电平。 • 在 SDAx 被拉低之前,SCLx 变为低电 平。这表明另一个主器件正试图发送 一个数据 1。 一旦 SSPxIF 位被置 1,用户便可以在 7 位地址模式下将 7 位地址,或者在 10 位地址模式下将默认的第一个地址 字节写入 SSPxBUF。当发送完第一个 8 位数据并接收到 一个 ACK 后,用户可以发送另外 8 位地址 (10 位地址 模式)或 8 位数据 (7 位地址模式)。 19.4.9.1 WCOL 状态标志 在重复启动时序进行当中,如果用户写 SSPxBUF,则 WCOL被置 1,同时缓冲区内容不变(写操作无效)。 注: 图 19-22: 1: 有其他事件在进行时,编程设置对 RSEN 无效。 由于不允许事件排队,在重复启动条件结 束之前,不能写 SSPxCON2 的低 5 位。 重复启动条件波形图 S 位由硬件置 1 SDAx = 1, SCLX = 1 启动位完成后, 由硬件将 RSEN 位清零 并将 SSPxIF 置 1 此处写 SSPxCON2 : SDAx = 1, SCLx(不变)。 TBRG TBRG TBRG 第1位 SDAx 在第 9 个时钟周期的下降沿, RSEN 位由硬件置 1 Xmit 结束 此处写 SSPxBUF TBRG SCLx TBRG Sr = 重复启动 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 289 页 PIC18F97J60 系列 19.4.10 I2C 主控模式下的发送 发送一个数据字节、一个 7 位地址或一个 10 位地址的一 半,都是通过写一个值到 SSPxBUF 寄存器来实现的。该 操作将使缓冲区满标志位 BF 置 1,波特率发生器开始计 数,同时开始下一次发送。在 SCLx 的下降沿有效后(见 数据保持时间规范参数 106),地址 / 数据的每一位被移 出至 SDAx 引脚。在一个波特率发生器计满返回周期 (TBRG)内,SCLx 保持低电平。数据应该在 SCLx 释放 为高电平前保持有效(见数据建立时间规范参数 107)。 当 SCLx 引脚释放为高电平时,它将在一个 TBRG 内保持 高电平状态。在此期间以及 SCLx 的下一个下降沿之后的 一段时间内,SDAx 引脚上的数据必须保持稳定。在第 8 位数据被移出(第 8 个时钟周期的下降沿)之后,BF 标 志位被清零,同时主器件释放 SDAx。此时如果发生地址 匹配或是数据被正确接收,被寻址的从器件将在第 9 个 时钟周期发出一个 ACK 位作为响应。ACK 的状态在第 9 个时钟周期的下降沿写入 ACKDT 位。主器件接收到应答 之后,应答状态位ACKSTAT 会被清零。如果未收到应 答,则该位被置 1。第 9 个时钟周期之后, SSPxIF 位会 置 1,主控时钟(波特率发生器)暂停,直到下一个数据 字节装入 SSPxBUF, SCLx 引脚保持低电平, SDAx 保 持不变 (图 19-23)。 在写 SSPxBUF 之后,地址的每一位在 SCLx 的下降沿 被移出,直至所有 7 位地址位和 R/W 位都被移出。在第 8 个时钟的下降沿,主器件将释放 SDAx 引脚,以允许 从器件发出一个应答响应。在第 9 个时钟的下降沿,主 器件通过采样 SDAx 引脚来判断地址是否被从器件识 位 的 状态 被 装 入 ACKSTAT 状 态位 别。 ACK (SSPxCON2<6>)。在发送地址的第 9 个时钟下降沿 之后,SSPxIF 置 1,BF 标志位清零,波特率发生器关 闭直到下一次写 SSPxBUF,且 SCLx 引脚保持低电平, 允许 SDAx 引脚悬空。 19.4.10.1 BF 状态标志 在发送模式下, BF 位 (SSPxSTAT<0>)在 CPU 写 SSPxBUF 时置 1,在所有 8 位数据移出后清零。 19.4.10.2 WCOL 状态标志 如果用户在发送进行中写 SSPxBUF(即,SSPxSR 仍 在移出数据字节),则 WCOL 标志位被置 1 并且在写 SSPxBUF 之后的 2 TCY 内缓冲区的内容不变 (不发生 写操作)。如果在 2 TCY 内 SSPxBUF 被重新写入,则 WCOL 位被置 1 并且 SSPBUF 被更新。这可能导致传 输被破坏。 DS39762A_CN 第 290 页 用户应在每次写 SSPxBUF 后检查 WCOL 标志位是否清 零,以确保传送正确。在所有情况下, WCOL 都必须 用软件清零。 19.4.10.3 ACKSTAT 状态标志 在发送模式下,当从器件发送应答响应(ACK = 0)时, ACKSTAT 位 (SSPxCON2<6>)清零;当从器件没有 应答 (ACK = 1)时,该位置 1。从器件在识别出其地 址 (包括广播呼叫地址)或正确接收数据后,会发出一 个应答。 19.4.11 I2C 主控模式接收 通过编程接收使能位 RCEN(SSPxCON2<3>)使能主 控模式接收。 注: RCEN 位置 1 前, MSSP 必须处于空闲状 态,否则上述操作无效。 波特率发生器开始计数,每次计满返回时, SCLx 引脚 的状态发生改变 (由高变低或由低变高),数据被移入 SSPxSR。第 8 个时钟的下降沿之后,接收使能标志位 自动清零,SSPxSR 的内容装入 SSPxBUF,BF 标志位 置 1,SSPxIF 标志位置 1,波特率发生器暂停计数,且 SCLx 保持为低电平。此时 MSSP 处于空闲状态,等待 下一条命令。当 CPU 读缓冲区时,BF 标志位将自动清 零。通过将应答时序使能位 ACKEN(SSPxCON2<4>) 置 1,用户可以在接收结束后发送应答位。 19.4.11.1 BF 状态标志 接收数据过程中,把地址或数据字节从 SSPxSR 装入 SSPxBUF 时,BF 位置 1。在读 SSPxBUF 寄存器时将 其清零。 19.4.11.2 SSPOV 状态标志 接收数据过程中,当 SSPxSR 接收到 8 位数据时, SSPOV 位置 1, BF 标志位已经在上一次接收时置 1。 19.4.11.3 WCOL 状态标志 如果用户在接收过程中(即,SSPxSR 仍在移入数据字 节时)写 SSPxBUF,则 WCOL 位置 1,缓冲区内容不 变 (写操作无效)。 超前信息 2006 Microchip Technology Inc. 2006 Microchip Technology Inc. 超前信息 S R/W PEN SEN BF(SSPxSTAT<0>) SSPxIF SCLx SDAx A6 A5 A4 A3 A2 3 用软件清零 2 4 5 6 启动条件之后,用硬件清零 SEN 写 SSPxBUF 1 7 A1 把 7 位地址和 R/W 写入 SSPxBUF 开始发送 A7 向从器件发送地址 8 9 1 D7 当 CPU 响应 SSPxIF 时, SCLx 保持低电平 ACK = 0 R/W = 0 3 D5 4 D4 5 D3 6 D2 SSPxBUF 要用软件写入 在 MSSP 中断服务 程序中清零 2 D6 发送数据或 10 位 地址的后半部分 7 D1 8 D0 P 用软件清零 9 ACK 来自从器件,清零 ACKSTAT 位(SSPxCON2<6>) SSPxCON2 的 ACKSTAT = 1 图 19-23: SEN = 0 写 SSPxCON2<0>(SEN = 1) 启动条件开始 PIC18F97J60 系列 I 2C™ 主控模式发送波形图 (7 位或 10 位地址) DS39762A_CN 第 291 页 DS39762A_CN 第 292 页 S 超前信息 ACKEN SSPOV (SSPxSTAT<0>) BF 当 CPU 响应 SSPxIF 时, SDAx = 0,SCLx = 1 SSPxIF SCLx SDAx 1 A7 2 4 用软件清零 3 5 6 A6 A5 A4 A3 A2 向从器件发送地址 7 A1 8 9 R/W = 0 ACK 来自从器件的 ACK 接收来自从器件的数据 2 用软件清零 1 4 5 6 7 8 D0 9 ACK 2 3 4 5 6 用软件清零 在应答结束时 将 SSPxIF 中断标志位置 1 在 CLK 下降沿将数据移入 1 7 用软件清零 在接收结束时 将 SSPxIF 置 1 9 不发送 ACK ACK P 在应答结束时 将 SSPxIF 中断 标志位置 1 总线主控器件 终止传输 将P位 (SSPxSTAT<4>) 和 SSPxIF 置 1 此处写 PEN 位 = 1 由于 SSPxBUF 仍为满, SSPOV 被置 1 8 D0 RCEN 被自动 清零 ACKEN 置 1,开始应答序列 SDAx = ACKDT = 1 D7 D6 D5 D4 D3 D2 D1 接收来自从器件的数据 RCEN = 1,开始 下一次接收 来自主器件的 ACK, SDAx = ACKDT = 0 最后一位移入 SSPxSR, 并不将其内容移入 SSPxBUF 用软件清零 在接收结束时 将 SSPxIF 中断标志位置 1 3 D7 D6 D5 D4 D3 D2 D1 RCEN 被自动 自清零 通过对 SSPxCON2<3> 编程(RCEN = 1) 将主器件配置为接收器 图 19-24: SEN = 0 此处写 SSPxBUF, 开始 XMIT 写 SSPxCON2<0>(SEN = 1), 启动条件开始 写 SSPxCON2<4> 开始应答序列 SDAx = ACKDT(SSPxCON2<5>)= 0 PIC18F97J60 系列 I 2C™ 主控模式接收波形图 (7 位地址) 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.12 19.4.13 应答序列时序 将应答序列使能位 ACKEN (SSPxCON2<4>)置 1 即 可使能应答序列。当该位被置 1 时,SCLx 引脚被拉低, 应答数据位的内容输出到 SDAx 引脚上。如果用户希望 产生一个应答,则应该将 ACKDT 位清零。否则,用户 要在应答序列开始前将 ACKDT 位置 1。然后波特率发生 器进行一个周期 (TBRG)的计数,随后 SCLx 引脚电平 被拉高。当 SCLx 引脚采样为高电平时 (时钟仲裁), 波特率发生器再进行一个 TBRG 周期的计数。然后 SCLx 引脚被拉低。在这之后,ACKEN 位自动清零,波特率发 生器关闭, MSSP 模块进入空闲模式 (图 19-25)。 19.4.12.1 如果将停止时序使能位 PEN (SSPxCON2<2>)置 1, 则在接收 / 发送结束后,SDAx 引脚上将产生停止位。在 接收 / 发送结束时,SCLx 引脚在第 9 个时钟的下降沿后 保持低电平。当 PEN 位置 1 时,主器件将 SDAx 线置 为低电平。当 SDAx 线采样为低电平时,波特率发生器 被重载并递减计数至 0。当波特率发生器发生超时, SCLx 引脚被拉为高电平,在一个 TBRG (波特率发生 器计满返回周期)之后,SDAx 引脚将被拉高。当 SDAx 引脚采样为高电平且 SCLx 也是高电平时, P 位 (SSPxSTAT<4>)置 1。另一个 TBRG 之后,PEN 位被 清零,同时 SSPxIF 位被置 1 (图 19-26)。 WCOL 状态标志 19.4.13.1 如果用户在应答序列进行过程中试图写 SSPxBUF,则 WCOL 将置 1,缓冲区的内容不会改变(写操作无效)。 图 19-25: 停止条件时序 WCOL 状态标志 如果用户在停止时序过程中试图写 SSPxBUF,则 WCOL 位将置 1,缓冲区的内容不会改变 (写操作无 效)。 应答序列波形图 应答时序在此处开始, 写 SSPxCON2 ACKEN = 1,ACKDT = 0 SDAx ACKEN 自动清零 TBRG ACK D0 SCLx TBRG 8 9 SSPxIF 用软件 清零 在接收结束时 SSPxIF 置 1 在应答时序结束时 SSPxIF 置 1 用软件 清零 注 :TBRG = 一个波特率发生器周期。 图 19-26: 停止条件接收或发送模式 在采样到 SDAx 为高电平后,SCLx = 1 保持一个 TBRG, 接着 SDAx = 1 保持一个 TBRG。P 位(SSPxSTAT<4>)置 1。 写 SSPxCON2, PEN 置 1 第 9 个时钟 下降沿 TBRG SCLx SDAx PEN 位(SSPxCON2<2>)被 硬件清零且 SSPxIF 位被置 1 ACK P TBRG TBRG TBRG TBRG 后,SCLx 拉高 在时钟脉冲上升沿前拉低 SDAx 以建立停止条件 注 :TBRG = 一个波特率发生器周期。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 293 页 PIC18F97J60 系列 19.4.14 19.4.17 休眠模式下的操作 2 在休眠模式下, I C 模块能够接收地址或数据,并且在 地址匹配或字节传输完成后,如果允许 MSSP 中断,将 唤醒处理器。 19.4.15 复位的影响 复位操作会禁止 MSSP 模块并终止当前的数据传输。 19.4.16 多主机模式 在多主机模式下,在检测到启动和停止条件时将产生中 断,这可以用于判断总线是否空闲。停止 (P)位和启 动 (S)位在复位或禁止 MSSP 模块时清零。当 P 位 (SSPxSTAT<4>)置 1 时,可以取得 I2C 总线的控制权; 否则,S 位和 P 位都清零,总线处于空闲状态。当总线 忙时,一旦出现停止条件,将产生 MSSP 中断。 在多主机模式下,必须一直监视 SDAx 线,查看信号电 平是否为期望的输出电平。此操作由硬件实现,其结果 保存在 BCLxIF 位中。 可能导致仲裁失败的情况是: • • • • • 多主机模式是通过总线仲裁来支持的。当主器件将地址 / 数据位输出到 SDAx 引脚时,如果一个主器件在 SDAx 上输出 1 (将 SDAx 引脚悬空为高电平),而另一个主 器件输出 0,就会发生总线仲裁。当 SCLx 引脚悬空为 高电平时,数据必须是稳定的。如果 SDAx 引脚上期望 的数据是 1,而实际采样到的数据是 0,则发生了总线 冲突。主器件将把总线冲突中断标志位 BCLxIF 置 1,并 将 I2C 端口复位到空闲状态 (图 19-27)。 如果在发送过程中发生总线冲突,则发送操作停止,BF 标志位被清零, SDAx 和 SCLx 线被拉高,并且将 SSPxBUF置于可写入状态。当执行完总线冲突中断服务 程序后,如果 I2C 总线空闲,用户可通过发出启动条件 恢复通信。 如果在启动、重复启动、停止或应答信号的执行过程中 发生总线冲突,则这种状态被中止, SDAx 和 SCLx 线 被拉高,SSPxCON2 寄存器中的对应控制位清零。当执 行完总线冲突中断服务程序后,如果 I2C 总线空闲,用 户可通过发出启动条件恢复通信。 主器件将继续监视 SDAx 和 SCLx 引脚。一旦出现停止条 件, SSPxIF 位将被置 1。 地址传输 数据传输 启动条件 重复的启动条件 应答条件 图 19-27: 多主机通信、总线冲突与总线仲裁 发生总线冲突时无论发送的进度如何,写入 SSPxBUF 都会从第一个数据位开始发送数据。 在多主机模式下,通过在检测到启动和停止条件时产生 中断可以确定总线何时空闲。SSPxSTAT 寄存器中的 P 位置 1 时,可以获取 I2C 总线的控制权;否则, S 位和 P 位都清零,总线处于空闲状态。 发送和应答时的总线冲突时序 当 SCLx = 0 时 数据改变 SDAx 线被其他源 拉为低电平 SDAx 被主器件释放 采样 SDAx。SCLx 为高电平时, 数据与主器件发送的不匹配, 发生了总线冲突。 SDAx SCLx 总线冲突 中断标志位(BCLxIF)置 1 BCLxIF DS39762A_CN 第 294 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.17.1 启动条件期间的总线冲突 启动条件期间,以下事件将导致总线冲突: a) 在启动条件开始时, SDAx 或 SCLx 被采样为低 电平 (图 19-28)。 b) SDAx 被拉低之前,SCLx采样为低电平(图 19-29)。 在启动条件期间, SDAx 和 SCLx 引脚都会被监视。 如果 SDAx 引脚在该计数周期内采样为低电平,则 BRG 复位,同时 SDAx 线保持原值 (图 19-30)。但是,如 果 SDAx 引脚采样为 1,则在 BRG 计数结束时该引脚 将被置为低电平。接着,波特率发生器被重载并递减计 数至 0,在此期间,如果 SCLx 引脚采样到 0,则不会 发生总线冲突。在 BRG 计数结束时,SCLx 引脚被拉为 低电平。 注: 如果 SDAx 引脚已经是低电平,或 SCLx 引脚已经是低 电平,则: • 中止启动条件, • BCLxIF 标志位置 1, • MSSP 模块复位为空闲状态 (图 19-28)。 启动条件从 SDAx 和 SCLx 引脚被拉高开始。当 SDAx 引 脚 采 样 为 高 电 平 时,波 特 率 发 生 器 装 入 SSPxADD<6:0> 的值并递减计数至 0。如果在 SDAx 为高电平时, SCLx 引脚采样为低电平,则发生了总线 冲突,因为这表示另一个主器件在启动条件期间试图发 送一个数据 1。 图 19-28: 在启动条件期间不太可能发生总线冲突, 因为两个总线主控器件不可能精确地在同 一时刻发出启动条件。因此一个主器件将 总是先于另一个主器件将 SDAx 拉低。但 是上述情况不会引起总线冲突,因为两个 主器件一定会对启动条件后的第一个地 址进行仲裁。如果地址是相同的,必须继 续对数据部分、重复启动条件或停止条件 进行仲裁。 启动条件期间的总线冲突 (仅 SDAx) 在 SEN 位置 1 之前 SDAx 变为低电平。 BCLxIF 置 1, 因为 SDAx = 0,SCLx = 1, 所以 S 位和 SSPxIF 位被置 1。 SDAx SCLx SDAx = 1,SCLx = 1 时 将 SEN 置 1,使能启动条件 因为发生总线冲突,SEN 自动清零。 MSSP 模块复位到空闲状态。 SEN BCLxIF SDAx 在启动条件之前 被采样到低电平,BCLxIF 置 1。 因为 SDAx = 0,SCLx = 1, 所以 S 位和 SSPxIF 位被置 1。 SSPxIF 和 BCLxIF 用软件清零 S SSPxIF SSPxIF 和 BCLxIF 用软件清零 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 295 页 PIC18F97J60 系列 图 19-29: 启动条件期间的总线冲突 (SCLx = 0) SDAx = 0,SCLx = 1 TBRG TBRG SDAx 当 SDAx = 1,SCLx = 1 时 将 SEN 置 1,使能启动序列 SCLx SDAx = 0 前 SCLx = 0, 发生总线冲突。BCLxIF 置 1。 SEN BRG 超时前 SCLx = 0, 发生总线冲突。BCLxIF 置 1。 BCLxIF 中断用 软件清零 S ‘0’ ‘0’ SSPxIF ‘0’ ‘0’ 图 19-30: 启动条件期间由 SDAx 仲裁引起的 BRG 复位 SDAx = 0,SCLx = 1 S置1 小于 TBRG SDAx SCLx SSPxIF 置 1 TBRG SDAx 被其他主器件拉低。 复位 BRG 并拉低 SDAx。 S BRG 超时之后将 SCLx 拉低 SEN BCLxIF 当 SDAx = 1,SCLx = 1 时, 将 SEN 置 1,使能启动序列 ‘0’ S SSPxIF SDAx = 0,SCLx = 1, SSPxIF 置 1 DS39762A_CN 第 296 页 超前信息 中断用 软件清零 2006 Microchip Technology Inc. PIC18F97J60 系列 19.4.17.2 数。如果 SDAx 在 BRG 超时之前从高电平变为低电平, 则不会发生总线冲突,因为两个主器件不可能精确地在 同一时刻将 SDAx 拉低。 重复启动条件期间的总线冲突 在下列情况中,重复启动条件期间会发生总线冲突: a) 在 SCLx 由低电平变为高电平期间,在 SDAx 上 采样到低电平。 b) 在 SDAx 被拉为低电平之前,SCLx 变为低电平, 表示另一个主器件正试图发送一个数据 1。 如果 SCLx 在 BRG 超时之前从高电平变为低电平,且 SDAx 尚未被拉低,那么将发生总线冲突。在此情况下, 另一个主器件在重复启动条件期间正试图发送一个数据 1 (见图 19-32)。 当用户释放 SDAx 并允许该引脚悬空时, BRG 装入 SSPxADD<6:0> 中的值并递减计数至 0,接着 SCLx 引 脚被拉高,当 SCLx 引脚采样到高电平时,对 SDAx 引 脚进行采样。 如果在 BRG 计时结束时 SCLx 和 SDAx 都仍然是高电 平,则 SDAx 引脚被拉低, BRG 重新装入值并开始计 数。在计数结束时,不管 SCLx 引脚的状态如何,SCLx 引脚都被拉低,重复启动条件结束。 如果 SDAx 为低电平,则已发生了总线冲突 (即,另一 个主器件正试图发送一个数据 0,见图 19-31) 。如果 SDAx 被采样到高电平,则 BRG 被重新装入值并开始计 图 19-31: 重复启动条件期间的总线冲突 (情形 1) SDAx SCLx 当 SCLx 变高时对 SDAx 采样。 如果 SDAx = 0,BCLxIF 置 1 并释放 SDAx 和 SCLx。 RSEN BCLxIF 用软件清零 S ‘0’ SSPxIF ‘0’ 图 19-32: 重复启动条件期间的总线冲突 (情形 2) TBRG TBRG SDAx SCLx BCLxIF SCLx 先于 SDAx 变为低电平, BCLxIF 置 1。释放 SDAx 和 SCLx。 中断用 软件清零 RSEN ‘0’ S SSPxIF 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 297 页 PIC18F97J60 系列 19.4.17.3 停止条件从 SDAx 被置成低电平开始。当 SDAx 采样为 低电平时,SCLx 引脚被允许悬空。当 SDAx 被采样到高 电平时(时钟仲裁),波特率发生器装入SSPxADD<6:0> 的值并递减计数至 0。 BRG 超时后, SDAx 被采样。如 果 SDAx 采样为低电平,则已发生总线冲突。这是因为 另一个主器件正试图发送一个数据 0(图 19-33)。如果 SCLx 引脚在允许 SDAx 悬空为高电平前被采样到低电 平,也会发生总线冲突。这是另一个主器件正试图发送 一个数据 0 的另外一种情况 (图 19-34)。 停止条件期间的总线冲突 以下事件会导致停止条件期间发生总线冲突: a) SDAx 已被拉高并允许悬空为高电平之后,SDAx 在 BRG 超时后被采样到低电平。 b) SCLx 引脚被拉高之后,SCLx 在 SDAx 变成高电 平之前被采样到低电平。 图 19-33: 停止条件期间的总线冲突 (情形 1) TBRG TBRG TBRG 在 TBRG 后 SDAx 被采样, BCLxIF 置 1 SDAx SDAx 被拉低 SCLx PEN BCLxIF P ‘0’ SSPxIF ‘0’ 图 19-34: 停止条件期间的总线冲突 (情形 2) TBRG TBRG TBRG SDAx 在 SDAx 变高前,SCLx 变为低电平, BCLxIF 置 1 SDAx 被拉低 SCLx PEN BCLxIF P ‘0’ SSPxIF ‘0’ DS39762A_CN 第 298 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 与 I2C™ 操作相关的寄存器 表 19-4: Bit 7 名称 INTCON Bit 6 GIE/GIEH PEIE/GIEL Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR2 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF 61 PIE2 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE 61 IPR2 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP 61 (1) (1) PIR3 SSP2IF BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 SSP2IE(1) BCL2IE(1) RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP(1) BCL2IP(1) RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 61 TRISD TRISD7 TRISD6(1) TRISD5(1) TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 61 SSP1BUF 60 MSSP1 接收缓冲区 / 发送寄存器 MSSP1 地址寄存器 (I2C™ 从动模式), MSSP1 波特率重载寄存器 (I2C 主控模式) SSP1CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSP1ADD SSP1CON2 SSP1STAT GCEN ACKSTAT GCEN ACKSTAT ADMSK5(2) ADMSK4(2) ADMSK3(2) ADMSK2(2) ADMSK1(2) SMP SSP2BUF CKE ACKDT D/A ACKEN RCEN P PEN 63 S RSEN R/W UA SSPM0 60 SEN 60 SEN BF MSSP2 地址寄存器 (I2C 从动模式), MSSP2 波特率重载寄存器 (I2C 主控模式) SSP2CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSP2ADD SSP2CON2 GCEN GCEN SSP2STAT 图注: 注 1: 2: SMP ACKSTAT ACKDT (2) ACKSTAT ADMSK5 CKE 60 60 MSSP2 接收缓冲区 / 发送寄存器 D/A ACKEN (2) ADMSK4 RCEN PEN (2) ADMSK3 P S 63 RSEN (2) ADMSK2 (2) ADMSK1 R/W UA SSPM0 63 SEN 63 SEN BF 63 I2C™ — = 未用 (读为 0), r = 保留。 模式下的 MSSP 模块不使用阴影单元。 这些位仅在 100 引脚器件上实现;在其他器件上未实现且读为 0。 I2C™ 从动模式下的位定义。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 299 页 PIC18F97J60 系列 注: DS39762A_CN 第 300 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 20.0 增强型通用同步 / 异步收发器 (EUSART) 增强型通用同步 / 异步收发器 (Enhanced Universal Synchronous Asynchronous Receiver Transmitter, EUSART)模块是两个串行 I/O 模块之一。(EUSART 也称为“串行通信接口”或 SCI。)可以将 EUSART 配 置为能与 CRT 终端和个人计算机等外设通信的全双 工异步系统,也可以将它配置成能够与 A/D 或 D/A 集成 电路、串行 EEPROM 等外设通信的半双工同步系统。 增强型 USART 模块还实现了其他功能,包括自动波特率 检测和校准、接收到同步间隔字符时的自动唤醒和 12 位 间隔字符发送。因为具有这些功能,所以用在局域互连 网络(Local Interconnect Network,LIN)总线系统中非 常理想。 PIC18F97J60 系列的 64 引脚器件配备有一个 EUSART 模块,称为 EUSART1。80 引脚和 100 引脚器件都有两 个 独 立 的 EUSART 模 块,分 别 称 为 EUSART1 和 EUSART2。可将这两个模块配置为以下几种工作模式: • 带有以下功能的异步模式 (全双工): - 接收到字符时自动唤醒 - 自动波特率校准 - 12 位间隔字符发送 • 同步——主控 (半双工)模式,时钟极性可选 • 同步——从动 (半双工)模式,时钟极性可选 EUSART1 和 EUSART2 的引脚分别与 PORTC (RC6/TX1/CK1 和 RC7/RX1/DT1)和 PORTG (RG1/TX2/CK2 和 RG2/RX2/DT2)的功能复用。要把 这些引脚配置为 EUSART: • 对于 EUSART1: - SPEN (RCSTA1<7>)位必须置 1 (= 1) - TRISC<7> 位必须置 1 (= 1) - TRISC<6> 位必须清零 (= 0)使该模块工作 于异步和同步主控模式 - TRISC<6> 位必须置 1 (= 1)使该模块工作 于同步从动模式 • 对于 EUSART2: - SPEN (RCSTA2<7>)位必须置 1 (= 1) - TRISG<2> 位必须置 1 (= 1) - TRISG<1> 位必须清零 (= 0)使该模块工作 于异步和同步主控模式 - TRISC<6> 位必须置 1 (= 1)使该模块工作 于同步从动模式 注: EUSARTx 控制逻辑在需要时会自动将引 脚从输入重新配置为输出。 增强型USART模块的操作是由以下3个寄存器控制的: • 发送状态和控制寄存器 (TXSTAx) • 接收状态和控制寄存器 (RCSTAx) • 波特率控制寄存器 (BAUDCONx) 这些寄存器将在寄存器 20-1、寄存器 20-2 和寄存器 20-3 中分别详细介绍。 注: 2006 Microchip Technology Inc. 超前信息 在本节中,凡是涉及与特定 EUSART 模块 相关的寄存器和位的名称一般都采用以 “x”代 替 特 定 模 块 编 号 的 方 式。因 此, “RCSTAx”可能指 EUSART1 的接收状态 寄存器,也可能指 EUSART2 的接收状态 寄存器。 DS39762A_CN 第 301 页 PIC18F97J60 系列 寄存器 20-1: R/W-0 CSRC TXSTAx:发送状态和控制寄存器 R/W-0 TX9 R/W-0 TXEN (1) R/W-0 R/W-0 R/W-0 R-1 R/W-0 SYNC SENDB BRGH TRMT TX9D bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 CSRC:时钟源选择位 异步模式: 无关位。 同步模式: 1 = 主控模式 (时钟来自内部 BRG) 0 = 从动模式 (时钟来自外部时钟源) bit 6 TX9:9 位发送使能位 1 = 选择 9 位发送 0 = 选择 8 位发送 bit 5 TXEN:发送使能位 (1) 1 = 使能发送 0 = 禁止发送 bit 4 SYNC:EUSARTx 模式选择位 1 = 同步模式 0 = 异步模式 bit 3 SENDB:发送间隔字符位 异步模式: 1 = 在下一次发送时发送 “同步间隔”字符 (在完成时由硬件清零) 0 = “同步间隔”字符发送完成 x = 未知 同步模式: 无关位。 bit 2 BRGH:高波特率选择位 异步模式: 1 = 高速 0 = 低速 同步模式: 在此模式下未使用。 bit 1 TRMT:发送移位寄存器状态位 1 = TSR 空 0 = TSR 满 bit 0 TX9D:发送数据的第 9 位 可以是地址 / 数据位或奇偶校验位。 注 1:在同步模式下, SREN/CREN 的优先级高于 TXEN。 DS39762A_CN 第 302 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 20-2: RCSTAx:接收状态和控制寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0 R-x SPEN RX9 SREN CREN ADDEN FERR OERR RX9D bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 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 位可作为奇偶校验位 9 位异步模式 (RX9 = 0): 无关位。 bit 2 FERR:帧错误位 1 = 帧错误 (可以通过读 RCREGx 寄存器刷新该位并接收下一个有效字节) 0 = 无帧错误 bit 1 OERR:溢出错误位 1 = 溢出错误 (可以通过清除 CREN 位清零) 0 = 无溢出错误 bit 0 RX9D:接收数据的第 9 位 该位可以是地址 / 数据位或奇偶校验位,并且必须由用户固件计算得到。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 303 页 PIC18F97J60 系列 寄存器 20-3: BAUDCONx:波特率控制寄存器 R/W-0 R-1 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 ABDOVF RCIDL RXDTP TXCKP BRG16 — WUE ABDEN bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 x = 未知 bit 7 ABDOVF:自动波特率采样进位状态位 1 = 在自动波特率检测模式下出现了 BRG 进位 (必须用软件清零) 0 = 没有发生 BRG 进位 bit 6 RCIDL:接收操作空闲状态位 1 = 接收操作处于空闲状态 0 = 接收操作处于活动状态 bit 5 RXDTP:接收数据极性选择位 异步模式: 1 = RXx 数据反相 0 = 接收的 RXx 数据未反相 同步模式: 1 = CKx 时钟反相 0 = CKx 时钟未反相 bit 4 TXCKP:时钟和数据极性选择位 异步模式: 1 = TXx 数据反相 0 = TXx 数据未反相 同步模式: 1 = CKx 时钟反相 0 = CKx 时钟未反相 bit 3 BRG16:16 位波特率寄存器使能位 1 = 16 位波特率发生器——SPBRGHx 和 SPBRGx 0 = 8 位波特率发生器——仅 SPBRGx,忽略 SPBRGHx 的值 (兼容模式) bit 2 未用:读为 0 bit 1 WUE:唤醒使能位 异步模式: 1 = EUSARTx 将继续采样 RXx 引脚——中断在下降沿产生,在下一个上升沿由硬件清零该位 0 = 未监测 RXx 引脚或检测到了上升沿 同步模式: 在此模式下未使用。 bit 0 ABDEN:自动波特率检测使能位 异步模式: 1 = 在下一个字符使能波特率检测。需要收到 “同步”字段 (55h),完成时由硬件清零 0 = 禁止波特率检测或检测已完成 同步模式: 在此模式下未使用。 DS39762A_CN 第 304 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 20.1 值。使用高波特率 (BRGH = 1)或 16 位 BRG 有利于 减小波特率误差,或者在快速振荡频率条件下实现低波 特率。 波特率发生器 (BRG) BRG 是一个专用的 8 位或 16 位发生器,支持 EUSARTx 的异步和同步模式。默认情况下,BRG 工作在 8 位模式 下,通过将 BRG16 位 (BAUDCONx<3>)置 1 可以选 择 16 位模式。 向 SPBRGHx:SPBRGx 寄存器写入新值会使 BRG 定时 器复位 (或清零)。这可以确保 BRG 无需等待定时器 溢出就可以输出新的波特率。 SPBRGHx:SPBRGx 寄存器对控制自由运行的定时器周 期。在异步模式下, BRGH (TXSTAx<2>)和 BRG16 (BAUDCONx<3>)也用于控制波特率。在同步模式下, BRGH 位会被忽略。表 20-1 所示为不同 EUSARTx 模式 的波特率计算公式,但仅适用于主控模式 (由内部产生 时钟信号)。 20.1.1 器件时钟用于产生所需的波特率。当进入一种功耗管理 模式时,新时钟源可能会工作在一个不同的频率下。这 可能需要调整 SPBRGx 寄存器对中的值。 20.1.2 给出期望的波特率和 FOSC 值,就可以使用表 20-1 中的 公式计算 SPBRGHx:SPBRGx 寄存器的最近似整数值。 这样就可以判断波特率误差。例 20-1 给出了计算示例。 表 20-2 中给出了不同异步模式下典型的波特率和误差 表 20-1: 在功耗管理模式下的操作 采样 检测电路对RXx引脚(RC7/RX1/DT1或RG2/RX2/DT2) 采样三次,以判定 RXx 引脚上出现的是高电平还是低电 平。 波特率公式 配置位 BRG/EUSARTx 模式 波特率计算公式 0 8 位 / 异步 FOSC/[64 (n + 1)] 0 1 8 位 / 异步 1 0 16 位 / 异步 0 1 1 16 位 / 异步 1 0 x 8 位 / 同步 1 1 x 16 位 / 同步 SYNC BRG16 BRGH 0 0 0 0 图注: FOSC/[16 (n + 1)] FOSC/[4 (n + 1)] x = 无关位, n = SPBRGHx:SPBRGx 寄存器对的值 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 305 页 PIC18F97J60 系列 例 20-1: 计算波特率误差 器件工作在 Fosc = 16 MHz,目标波特率 = 9600,异步模式, 8 位 BRG: 目标波特率 = Fosc/(64 ([SPBRGHx:SPBRGx] + 1)) 求解 SPBRGHx:SPBRGx: X = ((Fosc/ 目标波特率 )/64) – 1 = ((16000000/9600)/64) – 1 = [25.042] = 25 波特率计算结果 = 16000000/(64 (25 + 1)) = 9615 误差 = ( 波特率计算结果 – 目标波特率 )/ 目标波特率 = (9615 – 9600)/9600 = 0.16% 表 20-2: 名称 与波特率发生器相关的寄存器 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值所在页 TXSTAx CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 61 RCSTAx SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 61 RCIDL RXDTP TXCKP BRG16 — WUE ABDEN 62 BAUDCONx ABDOVF SPBRGHx SPBRGx 图注: EUSARTx 波特率发生器寄存器的高字节 62 EUSARTx 波特率发生器寄存器的低字节 62 — = 未用,读为 0。 BRG 不使用阴影单元。 DS39762A_CN 第 306 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 20-3: 异步模式下的波特率 SYNC = 0, BRG16 = 0, BRGH = 0 波特率 (K) 0.3 1.2 FOSC = 41.667 MHz FOSC = 31.25 MHz SPBRG 值 实际 波特率 (K) % 误差 — — — — — — ( 十进制 ) 实际 波特率 (K) % 误差 — FOSC = 25.000 MHz SPBRG 值 SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 — — — — — — 0.22 — 202 — 2.396 — -0.15 — 162 -0.27 50 9.527 -0.76 40 ( 十进制 ) FOSC = 20.833 MHz SPBRG 值 实际 波特率 (K) % 误差 — 1.271 — 5.96 — 255 2.393 -0.27 135 9.574 -0.27 33 16 ( 十进制 ) 2.4 2.543 5.96 255 — 2.405 9.6 9.574 -0.27 67 9.574 19.2 19.148 -0.27 33 19.531 1.73 24 19.531 1.73 19 19.147 -0.27 57.6 59.186 2.75 10 61.035 5.96 7 55.804 -3.12 6 54.253 -5.81 5 115.2 108.508 -5.81 5 122.070 5.96 3 130.208 13.03 2 108.505 -5.81 2 SYNC = 0, BRG16 = 0, BRGH = 0 波特率 (K) FOSC = 13.889 MHz FOSC = 6.250 MHz SPBRG 值 FOSC = 4.167 MHz SPBRG 值 SPBRG 值 实际 波特率 (K) % 误差 0.3 1.2 — 1.198 — -0.08 2.4 2.411 0.47 9.6 9.435 -1.71 22 9.766 1.73 9 9.301 -3.11 6 19.2 19.279 2.75 10 19.531 1.73 4 21.703 13.04 2 ( 十进制 ) 实际 波特率 (K) % 误差 — 180 — 1.206 — 0.47 89 2.382 -0.76 ( 十进制 ) 实际 波特率 (K) % 误差 — 80 0.300 1.206 0.01 0.48 216 53 40 2.411 0.48 26 ( 十进制 ) 57.6 54.254 -5.81 3 48.828 -15.23 1 65.109 13.04 0 115.2 108.508 -5.81 1 97.656 -15.23 0 65.109 -43.48 0 SYNC = 0, BRG16 = 0, BRGH = 1 波特率 (K) FOSC = 41.667 MHz 实际 波特率 (K) % 误差 0.3 1.2 — — — — 2.4 — — FOSC = 31.25 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 — — — — — — — — FOSC = 25.000 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 — — — — — — — — — SPBRG 值 FOSC = 20.833 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 — — — — — — — — — — — — — ( 十进制 ) 9.6 10.172 5.96 255 9.621 0.22 202 9.586 -0.15 162 9.573 -0.27 135 19.2 19.148 -0.27 135 19.148 -0.27 101 19.290 0.47 80 19.147 -0.27 67 57.6 57.871 0.47 44 57.445 -0.27 33 57.870 0.47 26 56.611 -1.72 22 115.2 113.226 -1.71 22 114.890 -0.27 16 111.607 -3.12 13 118.369 2.75 10 SYNC = 0, BRG16 = 0, BRGH = 1 波特率 (K) 0.3 1.2 FOSC = 13.889 MHz 实际 波特率 (K) % 误差 — — — — SPBRG 值 FOSC = 6.250 MHz FOSC = 4.167 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 — — — — — — — — ( 十进制 ) SPBRG 值 实际 波特率 (K) % 误差 — — — 1.200 0.01 216 108 ( 十进制 ) 2.4 — — — 2.396 -0.15 162 2.389 -0.44 9.6 9.645 0.47 89 9.527 -0.76 40 9.645 0.48 26 19.2 19.290 0.47 44 19.531 1.73 19 18.603 -3.11 13 57.6 57.871 0.47 14 55.804 -3.12 6 52.088 -9.57 4 115.2 108.508 -5.81 7 130.208 13.03 2 130.219 13.04 1 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 307 页 PIC18F97J60 系列 表 20-3: 异步模式下的波特率 (续) SYNC = 0, BRG16 = 1, BRGH = 0 波特率 (K) FOSC = 41.667 MHz FOSC = 31.25 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 8680 2169 0.300 1.200 0.00 -0.02 0.01 1084 2.399 实际 波特率 (K) % 误差 0.3 1.2 0.300 1.200 0.00 0.01 2.4 2.400 FOSC = 25.000 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 6509 1627 0.300 1.200 0.01 0.01 -0.02 813 2.400 FOSC = 20.833 MHz SPBRG 值 SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 5207 1301 0.300 1.200 0.00 0.00 4339 1084 0.01 650 2.398 -0.09 542 ( 十进制 ) 9.6 9.609 0.10 270 9.621 0.22 202 9.586 -0.15 162 9.574 -0.27 135 19.2 19.148 -0.27 135 19.148 -0.27 101 19.290 0.47 80 19.148 -0.27 67 57.6 57.871 0.47 44 57.444 -0.27 33 57.870 0.47 26 56.611 -1.72 22 115.2 113.226 -1.71 22 114.890 -0.27 16 111.607 -3.12 13 118.369 2.75 10 SYNC = 0, BRG16 = 1, BRGH = 0 波特率 (K) FOSC = 13.889 MHz 实际 波特率 (K) % 误差 0.3 1.2 0.300 1.201 -0.02 2.4 2.398 0.05 FOSC = 6.250 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 2893 722 0.300 1.198 0.01 361 2.396 -0.15 9.6 9.645 -0.08 0.47 89 9.527 -0.15 -0.76 19.2 19.290 0.47 44 19.531 1.73 FOSC = 4.167 MHz SPBRG 值 SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 1301 325 0.300 1.200 0.01 0.01 867 216 162 2.389 -0.44 108 40 9.646 0.48 26 19 18.603 -3.11 13 ( 十进制 ) 57.6 57.871 0.47 14 55.804 -3.12 6 52.088 -9.57 4 115.2 108.508 -5.81 7 130.208 13.03 2 130.218 13.04 1 SYNC = 0, BRG16 = 1, BRGH = 1 或 SYNC = 1, BRG16 = 1 波特率 (K) FOSC = 41.667 MHz SPBRG 值 FOSC = 31.25 MHz ( 十进制 ) 实际 波特率 (K) % 误差 34722 8680 0.300 1.200 0.00 0.01 0.01 4339 2.400 0.01 1084 9.598 19.184 -0.08 542 19.195 57.6 57.551 -0.08 180 115.2 115.742 0.47 89 实际 波特率 (K) % 误差 0.3 1.2 0.300 1.200 0.00 0.00 2.4 2.400 9.6 9.601 19.2 FOSC = 25.000 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 26041 6509 0.300 1.200 0.00 0.01 0.01 3254 2.400 -0.02 813 9.601 -0.02 406 57.445 -0.27 114.890 -0.27 FOSC = 20.833 MHz SPBRG 值 SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 20832 5207 0.300 1.200 0.00 0.00 17360 4339 0.01 2603 2.400 0.00 2169 0.01 650 9.592 -0.09 542 19.172 -0.15 325 19.219 0.10 270 135 57.339 -0.45 108 57.869 0.47 89 67 115.741 0.47 53 115.739 0.47 44 ( 十进制 ) SYNC = 0, BRG16 = 1, BRGH = 1 或 SYNC = 1, BRG16 = 1 波特率 (K) 0.3 1.2 FOSC = 13.889 MHz SPBRG 值 FOSC = 6.250 MHz ( 十进制 ) 实际 波特率 (K) % 误差 0.00 -0.02 11573 2893 0.300 1.200 0.01 实际 波特率 (K) % 误差 0.300 1.200 0.01 FOSC = 4.167 MHz SPBRG 值 ( 十进制 ) 实际 波特率 (K) % 误差 5207 1301 0.300 1.200 -0.01 0.01 SPBRG 值 ( 十进制 ) 3472 867 2.4 2.400 -0.02 1446 2.400 0.01 650 2.400 0.01 433 9.6 9.592 -0.08 361 9.586 162 9.557 -0.44 108 19.2 19.184 -0.08 180 19.290 -0.15 0.47 80 19.292 0.48 53 57.6 57.870 0.47 59 57.870 0.47 26 57.875 0.48 17 115.2 115.742 0.47 29 111.607 -3.12 13 115.750 0.48 8 DS39762A_CN 第 308 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 20.1.3 自动波特率检测 增强型 USARTx 模块支持波特率自动检测和校准。此功 能仅在异步模式下当 WUE 位清零时有效。 只要接收到起始位并且 ABDEN 位已置 1,就会开始自 动波特率检测(图 20-1)。波特率计算采用自平均的方 式。 当产生 ABD 时序时, EUSARTx 状态机保持在空闲状 态。一旦在 RXx 上检测到第 5 个上升沿,中断标志位 RCxIF 就会置 1。需要读取 RCREGx 中的值,来清除中 断标志位 RCxIF。应丢弃 RCREGx 的值。 1: 如果 WUE 位与 ABDEN 位同时置 1,自动 波特率检测会在间隔字符 之后 的字节开 始。 注 在自动波特率检测(Auto-Baud Rate Detect,ABD)模 式下, BRG 的时钟是反向的。不是由 BRG 为进入的 RXx 信号提供时钟信号,而是由 RXx 信号为 BRG 定 时。在 ABD 模式下,内部波特率发生器被用作计数器 来计算输入的串行字节流的位间隔时间。 一旦 ABDEN 位置 1,状态机就会将 BRG 清零并寻找起 始位。为了正确计算比特率,自动波特率检测必须接收 到一个值为 55h (ASCII 字符 U,也是 LIN 总线的同步 字符)的字节。为了尽量减少输入信号不对称造成的影 响,测量时段内要包含一个高位和一个低位时间。在起 始位后,SPBRGx 使用预先选择的时钟源在 RXx 的第一 个上升沿开始计数。在 RXx 引脚传输了 8 个位,或在检 测到第 5 个上升沿后,会将相应 BRG 周期内的累加值保 存在 SPBRGHx:SPBRGx 寄存器对中。当第 5 个时钟周 期出现时(应与停止位对应),ABDEN 位会自动清零。 如果发生了 BRG 计满返回 (从 FFFFh 到 0000h 的溢 出),会在 ABDOVF 状态位 (BAUDCONx<7>)有所 反映。该位可在 BRG 溢出时由硬件置 1,也可以由用户 通过软件置 1 或清零。在发生进位事件后,ABD 模式继 续有效, ABDEN 位保持置 1 (图 20-2)。 在校准波特率周期时,BRG 寄存器时钟频率为预配置时 钟频率的 1/8。请注意 BRG 时钟将由 BRG16 和 BRGH 位配置。不管 BRG16 如何设置,SPBRGx 和 SPBRGHx 都将被用作 16 位计数器。用户通过检查 SPBRGHx 寄 存器的值是否为 00h,可以验证 8 位模式下是否发生了 进位。表 20-4 所示为 BRG 计数器的时钟速率。 2006 Microchip Technology Inc. 2: 需要由用户来判断进入字符波特率是否处 于所选 BRG 时钟源范围内。由于位错误率 的原因,某些振荡频率和 EUSARTx 波特 率的组合无法实现。使用自动波特率检测 功能时,必须综合考虑系统总的时序和通 信波特率。 表 20-4: BRG 计数器时钟速率 BRG16 BRGH BRG 计数器时钟 0 0 FOSC/512 0 1 FOSC/128 1 0 FOSC/128 1 1 FOSC/32 注: 在产生 ABD 时序时,不管 BRG16 如何设置, SPBRGx 和 SPBRGHx 都被用作 16位计数器。 20.1.3.1 ABD 和 EUSARTx 发送 由于 ABD 采样期间 BRG 时钟是反向的,因此在 ABD 期 间不能使用 EUSARTx 发送器。这意味着只要 ABDEN 位置 1,就不能写入 TXREGx。用户还应确保在发送期 间 ABDEN 不能为置 1 状态,否则可能会导致无法预料 的 EUSARTx 操作。 超前信息 DS39762A_CN 第 309 页 PIC18F97J60 系列 图 20-1: 自动波特率计算 BRG 值 XXXXh 0000h 001Ch 边沿 2 边沿 1 RXx 引脚 起始位 Bit 1 Bit 0 Bit 2 Bit 3 Bit 4 边沿 5 边沿 4 边沿 3 Bit 5 Bit 6 Bit 7 停止位 BRG 时钟 自动清零 由用户置 1 ABDEN 位 RCxIF 位 (中断) 读 RCREGx SPBRGx XXXXh 1Ch SPBRGHx XXXXh 00h 注: 需要将 EUSARTx 模块配置为异步模式,并且 WUE = 0 才能开始 ABD 序列。 图 20-2: BRG 溢出时序 BRG 时钟 ABDEN 位 RXx 引脚 起始位 Bit 0 ABDOVF 位 FFFFh BRG 值 XXXXh DS39762A_CN 第 310 页 0000h 0000h 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 20.2 EUSARTx 异步模式 通过将 SYNC 位 (TXSTAx<4>)清零可选择异步工作 模 式。在 此 模 式 下, EUSARTx 使 用 标 准 的不归零 (Non-Return-to-Zero,NRZ)格式(1 个起始位、8 个 或 9 个数据位和 1 个停止位)。最常用的格式是含有 8 个数据位。片上专用8位/16位波特率发生器可借助于振 荡器产生标准波特率频率。 EUSARTx 首先发送和接收 LSb。 EUSARTx 模块的发 送器和接收器在功能上是独立的,但采用相同的数据格 式和波特率。波特率发生器可以根据BRGH位和BRG16 位(TXSTAx<2> 和 BAUDCONx<3>)的设置值产生两 种不同的波特率时钟,频率分别为移位速率的 16 倍或 64 倍。硬件不支持奇偶校验,但可以用软件实现,校验 值保存在第 9 个数据位中。 TXCKP(BAUDCONx<4>)和 RXDTP(BAUDCONx<5>) 位可使得 TXx 和 RXx 信号反相 (极性相反)。在 TTL 和 RS-232 电平之间缓冲信号的器件也能反转信号。将 TXCKP 和 RXDTP 位置 1 允许使用提供缓冲的电路,但 不会反转信号。 当工作在异步模式下时, EUSARTx 模块包括以下重要 组成部分: • • • • • • • 波特率发生器 采样电路 异步发送器 异步接收器 同步间隔字符自动唤醒 12 位间隔字符发送 自动波特率检测 20.2.1 TXxIF 指示的是 TXREGx 寄存器的状态,而另一个位 TRMT (TXSTAx<1>)则指示 TSR 寄存器的状态。 TRMT 是只读位,它在TSR 寄存器为空时被置1。TRMT 位与任何中断均无关联,因此要确定 TSR 寄存器是否为 空,用户只能对此位进行查询。 注 设置异步发送操作的步骤如下: 1. 2. 4. 5. 6. 图 20-3 给出了 EUSARTx 发送器框图。发送器的核心 是发送 (串行)移位寄存器 (Transmit Shift Register, TSR)。移位寄存器从读 / 写发送缓冲寄存器 TXREGx 中获取数据。TXREGx 寄存器中的数据由软件写入。在 前一次装入数据的停止位发送前,不会向 TSR 寄存器装 入新数据。一旦停止位发送完毕,TXREGx 寄存器中的 新数据 (如果有)就会被装入 TSR。 1: TSR 寄存器并未映射到数据存储器中,因 此用户无法直接访问它。 2: 当使能位TXEN置1时,标志位TXxIF置1。 3. EUSARTx 异步发送器 2006 Microchip Technology Inc. 一旦 TXREGx 寄存器向 TSR 寄存器传输了数据 (在 1 个 TCY 内发生), TXREGx 寄存器就为空,同时 TXxIF 标志位置 1。可以通过将中断允许位 TXxIE 置 1 或清零 来允许或禁止该中断。不管 TXxIE 的状态如何,只要中 断发生, TXxIF 就会置 1 并且不能用软件清零。 TXxIF 不会在 TXREGx 装入新数据时立即被清零,而是在装入 指令后的第二个指令周期被清零。因此在 TXREGx 装入 新数据后立即查询 TXxIF,会得到无效结果。 7. 8. 9. 超前信息 对 SPBRGHx:SPBRGx 寄存器进行初始化,设置 合适的波特率。按需要将 BRGH 和 BRG16 位置 1 或清零,以获得所需的波特率。 通过将 SYNC 位清零并将 SPEN 位置 1,使能异 步串口。 如果要使 TXx 引脚的信号反相,将 TXCKP 位置 1。 如果需要中断,将允许位 TXxIE 置 1。 如果需要 9 位发送,将发送位 TX9 置 1。可以作 为地址 / 数据位使用。 通过将 TXEN 位置 1 使能发送,此操作同时也会 将 TXxIF 位置 1。 如果选择了 9 位发送,将第 9 位装入 TX9D 位。 将数据装入 TXREGx 寄存器 (开始发送)。 如果使用中断,应确保 INTCON 寄存器中的 GIE 和 PEIE 位 (INTCON<7:6>)已置 1。 DS39762A_CN 第 311 页 PIC18F97J60 系列 图 20-3: EUSARTx 发送框图 数据总线 TXxIF TXREGx 寄存器 TXxIE 8 MSb LSb • • • (8) 引脚缓冲区 和控制 0 TSR 寄存器 TXx 引脚 中断 TXEN 波特率时钟 TRMT SPEN TXCKP BRG16 SPBRGHx SPBRGx TX9 波特率发生器 图 20-4: TX9D 异步发送, TXCKP = 0 (TXx 未反相) 写入 TXREGx 第 1 个字 BRG 输出 (移位时钟) TXx(引脚) bit 0 起始位 bit 1 bit 7/8 停止位 第 1 个字 TXxIF 位 (发送缓冲 寄存器空标志) 1 TCY 第 1 个字 发送移位寄存器 TRMT 位 (发送移位 寄存器空标志) 图 20-5: 异步发送 (背对背), TXCKP = 0 (TXx 未反相) 写入 TXREGx 第 1 个字 BRG 输出 (移位时钟) TXx(引脚) TXxIF 位 (中断寄存器标志) 第 2 个字 起始位 bit 0 1 TCY bit 1 bit 7/8 停止位 起始位 bit 0 第 2 个字 第 1 个字 1 TCY TRMT 位 (发送移位 寄存器空标志) 注: 第 1 个字 发送移位寄存器 第 2 个字 发送移位寄存器 此时序图表示的是两次连续的发送。 DS39762A_CN 第 312 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 20-5: 名称 INTCON 与异步发送相关的寄存器 Bit 7 Bit 6 Bit 5 GIE/GIEH PEIE/GIEL TMR0IE Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR3 SSP2IF BCL2IF RC2IF TX2IF(1) TMR4IF CCP5IF CCP4IF CCP3IF 61 (1) PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP TX2IP(1) TMR4IP CCP5IP CCP4IP CCP3IP 61 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 61 RCSTAx TXREGx 61 TXSTAx EUSARTx 发送寄存器 CSRC TX9 BAUDCONx ABDOVF SPBRGHx EUSARTx 波特率发生器寄存器的高字节 62 SPBRGx EUSARTx 波特率发生器寄存器的低字节 62 RCIDL TXEN SYNC SENDB BRGH TRMT TX9D 61 RXDTP TXCKP BRG16 — WUE ABDEN 62 图注: — = 未用单元,读为 0。异步发送不使用阴影单元。 注 1:这些位仅在 80 引脚和 100 引脚器件上实现;在其他器件上则未实现且读为 0。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 313 页 PIC18F97J60 系列 20.2.2 EUSARTx 异步接收器 20.2.3 图 20-6 给出了接收器框图。在 RXx 引脚上接收数据, 并驱动数据恢复电路。数据恢复电路实际上是一个工作 频率为 16 倍波特率的高速移位器,而主接收串行移位 器的工作频率等于比特率或 FOSC。此模式通常用于 RS-232 系统。 RXDTP 位(BAUDCON<5>)可使得 RXx 信号反相(极 性相反)。从 RS-232 到 TTL 电平之间缓冲信号的器件 也可执行信号的反转 (当 RS-232 = 正, TTL = 0 时)。 通过将 RXDTP 置 1 反转 RXx 引脚数据的极性可允许用 户使用只提供缓冲并不反转信号的电路。 设置异步接收操作的步骤如下: 1. 对 SPBRGHx:SPBRGx 寄存器进行初始化,设置 合适的波特率。按需要将 BRGH 和 BRG16 位置 1 或清零,以获得所需的波特率。 2. 通过将 SYNC 位清零并将 SPEN 位置 1,使能异 步串口。 3. 如果要使 RXx 引脚的信号反相,将 RXDTP 位置 1。 4. 如果需要中断,将允许位 RCxIE 置 1。 5. 如果需要接收 9 位数据,将 RX9 位置 1。 6. 通过将 CREN 位置 1 使能接收。 7. 当接收完成时标志位 RCxIF 将被置 1,此时如 果中断允许位RCxIE已置1,还将产生一个中断。 8. 读 RCSTAx 寄存器获取第 9 位数据 (如果已使 能),并判断在接收过程中是否发生了错误。 9. 读 RCREGx 寄存器来读取接收到的 8 位数据。 10. 如果发生错误,通过将使能位 CREN 清零来清除 错误。 11. 如果使用中断,应确保 INTCON 寄存器中的 GIE 和 PEIE 位 (INTCON<7:6>)已置 1。 DS39762A_CN 第 314 页 设置带有地址检测功能的 9 位模式 此模式通常用于 RS-485 系统。按如下步骤设置带有地 址检测功能的异步接收操作: 1. 对 SPBRGHx:SPBRGx 寄存器进行初始化,设置 合适的波特率。按需要将 BRGH 和 BRG16 位置 1 或清零,以获得所需的波特率。 2. 通过将 SYNC 位清零并将 SPEN 位置 1,使能异 步串口。 3. 如果要使 RXx 引脚的信号反相,将 RXDTP 位置 1。如果要使 TXx 引脚的信号反相,将 TXCKP 位置 1。 4. 如果需要中断,将 RCEN 位置 1 并用 RCxIP 位 选择所需的优先级别。 5. 将 RX9 位置 1,使能 9 位接收。 6. 将 ADDEN 位置 1,使能地址检测。 7. 将 CREN 位置 1,使能接收。 8. 当接收完成时 RCxIF 位将被置 1。此时如果 RCxIE 和 GIE 位已置 1,还将响应中断。 9. 读 RCSTAx 寄存器判断在接收时是否发生了错 误,同时读取第 9 位数据 (如果适用)。 10. 读 RCREGx 判断是否正在对器件进行寻址。 11. 如果发生错误,将 CREN 位清零。 12. 如果已找到器件,将 ADDEN 位清零,允许所有 的接收数据进入接收缓冲区并中断 CPU。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 20-6: EUSARTx 接收框图 CREN FERR OERR 64 倍波特率时钟 BRG16 SPBRGHx ÷ 64 或 ÷ 16 或 ÷4 SPBRGx 波特率发生器 RSR 寄存器 MSb 停止位 (8) • • • 7 LSb 1 0 起始位 RX9 引脚缓冲区 和控制 数据 恢复 RXx RX9D RCREGx 寄存器 FIFO RXDTP SPEN 8 中断 图 20-7: 数据总线 RCxIF RCxIE 异步接收, RXDTP = 0 (RXx 未反相) 起始 位 RXx(引脚) bit 0 bit 1 起始 位 bit 7/8 停止 位 接收移位寄存器 接收缓冲寄存器 bit 0 第 1 个字 RCREGx 读接收 缓冲寄存器 RCREGx bit 7/8 停止 位 起始 位 bit 7/8 停止 位 第 2 个字 RCREGx RCxIF (中断标志) OERR 位 CREN 注: 表 20-6: 名称 INTCON 此时序图显示了在 RXx 输入引脚上顺序接收的 3 个字。在第 3 个字之后读 RCREGx(接收缓冲寄存器)会使 OERR(溢出)位置 1。 与异步接收相关的寄存器 Bit 7 Bit 6 Bit 5 GIE/GIEH PEIE/GIEL TMR0IE Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值所在页 INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 (1) TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 PIR3 SSP2IF BCL2IF RC2IF PIE3 SSP2IE BCL2IE RC2IE(1) IPR3 SSP2IP BCL2IP RC2IP(1) TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 61 TXEN SYNC SENDB BRGH TRMT TX9D 61 RXDTP TXCKP BRG16 — WUE ABDEN 62 RCSTAx RCREGx TXSTAx EUSARTx 接收寄存器 CSRC TX9 BAUDCONx ABDOVF RCIDL 61 SPBRGHx EUSARTx 波特率发生器寄存器的高字节 62 SPBRGx EUSARTx 波特率发生器寄存器的低字节 62 图注: — = 未用单元,读为 0。异步接收不使用阴影单元。 注 1:这些位仅在 80 引脚和 100 引脚器件上实现;在其他器件上则未实现且读为 0。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 315 页 PIC18F97J60 系列 20.2.4 同步间隔字符自动唤醒 在休眠模式下,EUSARTx 的所有时钟都会暂停。因此, 波特率发生器处于非激活状态,且无法进行正确的数据 接收。自动唤醒功能允许当 RXx/DTx 线上有事件发生时 唤醒控制器,该功能需要 EUSARTx 工作在异步模式 下。 通过将 WUE 位 (BAUDCONx<1>)置 1,使能自动唤 醒功能。该功能启用后,将禁止 RXx/DTx 上的典型接收 操作,且 EUSARTx 保持在空闲状态并监视唤醒事件(不 管 CPU 运行模式如何)。唤醒事件是指 RXx/DTx 线上 发生高电平到低电平的转换。(这刚好与 “同步间隔” 字符或 LIN 协议唤醒信号字符的启动条件一致。) 唤醒事件后,模块产生一个 RCxIF 中断。在正常工作模 式下,中断会与 Q 时钟同步产生 (图 20-8);如果器 件处于休眠模式,则两者是不同步的 (图 20-9)。通过 读 RCREGx 寄存器可清除中断条件。 唤醒事件后,当 RXx 线上出现由低向高的电平转换时, WUE 位自动清零。此时,EUSARTx 模块将从空闲状态 返回正常工作模式,由此用户可知 “同步间隔”事件已 经结束。 20.2.4.1 另外还必须考虑振荡器起振时间,尤其在采用起振时间 较长的振荡器 (即, HS 或 HSPLL 模式)应用中更要 注意这一点。“同步间隔”(或唤醒信号)字符必须足够 长,并且跟有足够长的时间间隔,以便使选定振荡器有 充足的时间起振并保证 EUSARTx 正确初始化。 20.2.4.2 使用 WUE 位的特别注意事项 使用 WUE 和 RCxIF 事件的时序来判断接收数据的有效 性时,有可能会引起一些混淆。如前所述,将 WUE 位 置 1 会使 EUSARTx 进入空闲状态。唤醒事件会通过将 RCxIF 位置 1 产生一个接收中断。此后当 RXx/DTx 出现 上升沿时,WUE 位被清零。然后通过读 RCREGx 寄存 器清除中断条件。一般情况下,RCREGx 中的数据是无 效数据,应该丢弃。 WUE 位清零 (或仍然置 1)同时 RCxIF 标志位置 1 并 不能表明 RCREGx 中数据接收是完整的。用户应该考 虑在固件中同时验证是否完整地接收了数据。 要确保没有丢失有效数据,应检查 RCIDL 位来验证是否 还在接收数据。如果不在接收数据,则可将 WUE 位置 1,使器件立即进入休眠模式。 使用自动唤醒功能的特别注意事项 因为自动唤醒功能是通过检测 RXx/DTx 上的上升沿跳变 实现的,所以在停止位前该引脚上任何的状态改变都可 能会产生错误的结束信号并导致数据或帧错误。因此, 为了确保正常的传输,必须首先发送全 0 字符。对于标 准的RS-232 器件,该字符是 00h (8 位),而对于 LIN 总线器件则是 000h (12 位)。 DS39762A_CN 第 316 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 20-8: 正常工作模式下的自动唤醒位 (WUE)时序 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1 WUE 位 (1) 由用户置 1 自动清零 RXx/DTx 线 RCxIF 注 因用户读 RCREGx 而清零 1: WUE 位置 1 时, EUSARTx 保持在空闲状态。 图 20-9: 休眠模式下的自动唤醒位 (WUE)时序 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 OSC1 WUE 位 (2) 由用户置 1 自动清零 RXx/DTx 线 注1 RCxIF 执行了休眠指令 注 休眠结束 因用户读 RCREGx 而清零 1: 如果唤醒事件需要较长的振荡器预热时间,在振荡器就绪前会发生 WUE 位自动清零。该时序与 Q 时钟出现与否无关。 2: WUE 位置 1 时, EUSARTx 保持在空闲状态。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 317 页 PIC18F97J60 系列 20.2.5 间隔字符序列 EUSARTx 模块能够发送符合 LIN 总线标准的特殊间隔 字符序列。发送的间隔字符包括 1 个起始位,后面跟有 12 个 0 位和一个停止位。当发送移位寄存器装有数据 时,只 要 SENDB 和 TXEN 位 (TXSTAx<3> 和 TXSTAx<5>)置 1,就会发送帧间隔字符。请注意写入 TXREGx 的数据值会被忽略,并会发送全 0。 在发送了相应的停止位后,硬件会自动将 SENDB 位复 位。这样用户可以在间隔字符(在 LIN 规范中通常是同 步字符)后预先将下一个要发送字节装入发送 FIFO 队 列。 1. 2. 3. 4. 5. 将 EUSARTx 配置为所需的模式。 将 TXEN 和 SENDB 位置 1,以设置间隔字符。 将无效字符装入 TXREGx,启动发送(该值会被 忽略)。 将55h写入TXREGx,以便把同步字符装入FIFO 缓冲区。 间隔字符发送后,硬件会将 SENDB 位复位。此 时,同步字符会以预先配置的模式发送。 当 TXREGx 为空时 (由 TXxIF 指出),下一个数据字 节会写入 TXREGx。 请注意在发送间隔字符时写入TXREGx的数据值会被忽 略。写入仅仅是为了启动正确的序列。 20.2.6 正如其在正常发送操作中一样,TRMT 位表明发送正在 进行还是处于空闲状态。关于发送间隔字符的时序,请 参见图 20-10。 第一种方法是强制将波特率配置为典型速率的 9/13。这 可以使停止位在正确的采样点(对于间隔字符为起始位 之后的 13 位,对于典型数据则是 8 个数据位)产生。 20.2.5.1 第二种方法是使用第 20.2.4 节 “同步间隔字符自动唤 醒”中 描 述 的 自 动 唤 醒 功 能。通 过 使 能 此 功 能, EUSARTx 将采样 RXx/DTx 线的下两次跳变,产生一个 RCxIF 中断,接收下一个数据字节,并在随后产生另一 个中断。 间隔和同步发送序列 下述序列会发送一个报文帧头,包括一个间隔字符和其 后的自动波特率同步字节。此序列适用于典型的 LIN 总 线主器件。 接收间隔字符 增强型 USARTx 模块接收间隔字符有两种方法。 请注意在间隔字符后,用户通常希望使能自动波特率检 测 功 能。无 论 使 用 哪 种 方 法,用 户 都 可 以 在 检 测 到 TXxIF 中断时马上将 ABDEN 位置 1。 图 20-10: 发送间隔字符时序 写入 TXREGx 无效写入 BRG 输出 (移位时钟) TXx(引脚) 起始位 bit 0 bit 1 bit 11 停止位 间隔 TXxIF 位 (发送缓冲 寄存器空标志) TRMT 位 (发送移位 寄存器空标志) 在此采样 SENDB 自动清零 SENDB 位 (发送移位 寄存器空标志) DS39762A_CN 第 318 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 20.3 EUSARTx 同步主控模式 将 CSRC 位 (TXSTAx<7>)置 1 可以进入同步主控模 式。在此模式中,数据以半双工方式发送 (即发送和接 收不能同时进行)。发送数据时禁止接收,反之亦然。将 SYNC 位 (TXSTAx<4>)置 1 可以进入同步模式。此 外,应将使能位 SPEN (RCSTAx<7>)置 1,分别把 TXx 和 RXx 引脚配置为 CKx(时钟)和 DTx(数据)线。 时钟极性(CKx)是通过 TXCKP 位(BAUDCON<4>) 选择的。将 TXCKP 置 1 是将空闲状态的 CKx 设为高电 平,将该位清零则将空闲状态的 CKx 设为低电平。数据 极性 (DTx)是通过 RXDTP 位 (BAUDCONx<5>)选 择的。将 RXDTP 置 1 是将空闲状态的 DTx 设为高电 平,将该位清零则将空闲状态的 DTx 设为低电平。当 CKx 返回到其空闲状态时对 DTx 进行采样。此选项支持 将本模块与 Microwire 器件配合使用。 20.3.1 EUSARTx 同步主控发送 标志位 TXxIF 表示的是 TXREGx 寄存器的状态,而另一 个标志位 TRMT (TXSTAx<1>)则表示TSR 寄存器的 状态。TRMT 位是一个只读位,当 TSR 为空时,TRMT 被置 1。TRMT 位与任何中断均无关联,因此要确定 TSR 寄存器是否为空,用户只能对此位进行查询。TSR 并未 映射到数据存储器中,所以用户不能直接访问它。 设置同步主控发送操作的步骤如下: 1. 2. 图 20-3 给出了 EUSARTx 发送器框图。发送器的核心 是发送 (串行)移位寄存器 (TSR)。移位寄存器从读 / 写发送缓冲寄存器 TXREGx 中获取数据。 TXREGx 寄 存器中的数据由软件写入。在前一次装入数据的最后一 位发送完成后,才向 TSR 寄存器装入新数据。一旦最后 一位发送完成,就会将 TXREGx 寄存器的新数据 (如 果有)装入 TSR。 图 20-11: 一旦 TXREGx 寄存器向 TSR 寄存器传输了数据 (在 1 个 TCY 内发生), TXREGx 寄存器就为空,同时 TXxIF 标志位被置 1。可以通过将中断允许位 TXxIE 置 1 或清 零来允许或禁止该中断。TXxIF 的设置不受 TXxIE 状态 的 影 响,且 不 能 用 软 件 清 零。只 有 在 新 数 据 写 入 TXREGx 寄存器时, TXxIF 才会复位。 3. 4. 5. 6. 7. 8. 9. 对 SPBRGHx:SPBRGx 寄存器进行初始化,设置 合适的波特率。按需要将 BRG16 位置 1 或清零, 以获得所需的波特率。 通过将 SYNC、SPEN 和 CSRC 位置 1,使能同 步主控串口。 如果要使 CKx 引脚的信号反相,将 TXCKP 位置 1。如果要使 DTx 引脚的信号反相,将 RXDTP 位置 1。 如果需要中断,将允许位 TXxIE 置 1。 如果需要 9 位发送,将 TX9 位置 1。 将 TXEN 位置 1,使能发送。 如果选择了 9 位发送,将第 9 位装入 TX9D 位。 将数据装入 TXREGx 寄存器,启动发送。 如果使用中断,应确保 INTCON 寄存器中的 GIE 和 PEIE 位 (INTCON<7:6>)已置 1。 同步发送时序 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 RC7/RX1/DT1 bit 0 bit 1 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 bit 2 bit 7 第 1 个字 RC6/TX1/CK1 引脚 (TXCKP = 0) bit 0 bit 1 bit 7 第 2 个字 RC6/TX1/CK1 引脚 (TXCKP = 1) 写入 TXREG1 寄存器 写第 1 个字 写第 2 个字 TX1IF 位 (中断标志) TRMT 位 TXEN 位 注: ‘1’ ‘1’ 同步主控模式, SPBRG1 = 0,连续发送两个 8 位字。本例同样适用于 EUSART2 (RG1/TX2/CK2 和 RG2/RX2/DT2)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 319 页 PIC18F97J60 系列 图 20-12: 同步发送时序 (由 TXEN 位控制) RC7/RX1/DT1 引脚 bit 0 bit 1 bit 2 bit 6 bit 7 RC6/TX1/CK1 引脚 写入 TXREG1 寄存器 TX1IF 位 TRMT 位 TXEN 位 注: 表 20-7: 名称 本例同样适用于 EUSART2 (RG1/TX2/CK2 和 RG2/RX2/DT2)。 与同步主控发送相关的寄存器 Bit 7 Bit 6 Bit 5 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 INTCON GIE/GIEH PEIE/GIEL TMR0IE Bit 4 PIR3 SSP2IF BCL2IF RC2IF TX2IF(1) TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 SSP2IE BCL2IE RC2IE TX2IE(1) TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP TX2IP(1) TMR4IP CCP5IP CCP4IP CCP3IP 61 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 61 TXEN SYNC SENDB BRGH TRMT TX9D 61 RXDTP TXCKP BRG16 — WUE ABDEN 62 RCSTAx TXREGx TXSTAx EUSARTx 发送寄存器 CSRC TX9 BAUDCONx ABDOVF RCIDL 61 SPBRGHx EUSARTx 波特率发生器寄存器的高字节 62 SPBRGx EUSARTx 波特率发生器寄存器的低字节 62 图注: — = 未用,读为 0。同步主控发送不使用阴影单元。 注 1:这些位仅在 80 引脚和 100 引脚器件上实现;在其他器件上则未实现且读为 0。 DS39762A_CN 第 320 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 20.3.2 EUSARTx 同步主控接收 4. 一旦选择了同步模式,只要将单字节接收使能位 SREN (RCSTAx<5>)或连续接收使能位 CREN(RCSTAx<4>) 置 1,即可使能接收。在时钟的下降沿采样 RXx 引脚上 的数据。 如果使能位 SREN 置 1,则只接收单个字。如果将使能 位 CREN 置 1,则会连续接收数据,直到将 CREN 位清 零。如果两个位均被置 1,则 CREN 优先。 设置同步主控接收操作的步骤如下: 1. 2. 3. 对 SPBRGHx:SPBRGx 寄存器进行初始化,设置 合适的波特率。按需要将 BRG16 位置 1 或清零, 以获得所需的波特率。 通过将 SYNC、SPEN 和 CSRC 位置 1,使能同 步主控串口。 确保将 CREN 和 SREN 位清零。 图 20-13: 如果要使 CKx 引脚的信号反相,将 TXCKP 位置 1。如果要使 DTx 引脚的信号反相,将 RXDTP 位置 1。 5. 如果需要中断,将允许位 RCxIE 置 1。 6. 如果需要接收 9 位数据,将 RX9 位置 1。 7. 如果需要单字节接收,将 SREN 位置 1。如果需 要连续接收,将 CREN 位置 1。 8. 当接收完成时中断标志位 RCxIF 将置 1,此时如 果中断允许位 RCxIE 已置 1,则还将产生一个中 断。 9. 读 RCSTAx 寄存器获取第 9 位数据 (如果已使 能),并判断在接收过程中是否发生了错误。 10. 读 RCREGx 寄存器来读取接收到的 8 位数据。 11. 如果发生错误,将 CREN 位清零以清除错误。 12. 如果使用中断,应确保 INTCON 寄存器中的 GIE 和 PEIE 位 (INTCON<7:6>)已置 1。 同步接收 (主控模式, SREN) Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 RC7/RX1/DT1 引脚 bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 RC6/TX1/CK1 引脚 (TXCKP = 0) RC6/TX1/CK1 引脚 (TXCKP = 1) 写入 SREN 位 SREN 位 CREN 位 ‘0’ ‘0’ RC1IF 位 (中断) 读 RCREG1 注: 时序图说明 SREN = 1 且 BRGH = 0 时的同步主控模式。本例同样适用于 EUSART2 (RG1/TX2/CK2 和 RG2/RX2/DT2)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 321 页 PIC18F97J60 系列 表 20-8: 与同步主控接收相关的寄存器 Bit 7 名称 INTCON Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 Bit 6 GIE/GIEH PEIE/GIEL PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR3 SSP2IF BCL2IF RC2IF(1) TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 (1) PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP(1) TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 61 RCSTAx RCREGx TXSTAx 61 EUSARTx 接收寄存器 CSRC TX9 BAUDCONx ABDOVF RCIDL TXEN SYNC SENDB BRGH TRMT TX9D 61 RXDTP TXCKP BRG16 — WUE ABDEN 62 SPBRGHx EUSARTx 波特率发生器寄存器的高字节 62 SPBRGx EUSARTx 波特率发生器寄存器的低字节 62 图注: — = 未用,读为 0。同步主控接收不使用阴影单元。 注 1:这些位仅在 80 引脚和 100 引脚器件上实现;在其他器件上则未实现且读为 0。 20.4 EUSARTx 同步从动模式 设置同步从动发送的步骤如下: 将 CSRC(TXSTAx<7>)清零可进入同步从动模式。此 模式与同步主控模式的区别在于移位时钟由 CKx 引脚上 的外部时钟提供 (主控模式中由内部时钟提供)。这使 得器件能在任何低功耗模式下发送或接收数据。 20.4.1 1. 2. 3. EUSARTx 同步从动发送 除了休眠模式以外,同步主控模式和从动模式的工作方 式是相同的。 如果向 TXREGx 写 2 个字,然后执行 SLEEP 指令,则 会发生以下事件: a) b) c) d) 第一个字立即传送到 TSR 寄存器进行发送。 第二个字仍保留在 TXREGx 寄存器中。 不会将标志位 TXxIF 置 1。 当第一个字移出 TSR 后,TXREGx 寄存器将把第 二个字传送给 TSR,同时将标志位 TXxIF 置 1。 e) 如果中断允许位 TXxIE 置 1,中断将把器件从休 眠状态唤醒。如果允许了全局中断,程序则会跳 转到中断向量处执行。 DS39762A_CN 第 322 页 4. 5. 6. 7. 8. 9. 超前信息 通过将 SYNC 和 SPEN 位置 1、CSRC 位清零, 使能同步从动串口。 将 CREN 和 SREN 位清零。 如果要使 CKx 引脚的信号反相,将 TXCKP 位置 1。如果要使 DTx 引脚的信号反相,将 RXDTP 位置 1。 如果需要中断,将允许位 TXxIE 置 1。 如果需要 9 位发送,将 TX9 位置 1。 将使能位 TXEN 置 1 以使能发送。 如果选择了 9 位发送,将第 9 位装入 TX9D 位。 将数据装入 TXREGx 寄存器,启动发送。 如果使用中断,应确保 INTCON 寄存器中的 GIE 和 PEIE 位 (INTCON<7:6>)已置 1。 2006 Microchip Technology Inc. PIC18F97J60 系列 表 20-9: 名称 INTCON 与同步从动发送相关的寄存器 Bit 7 Bit 6 Bit 5 GIE/GIEH PEIE/GIEL TMR0IE Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR3 SSP2IF BCL2IF RC2IF TX2IF(1) TMR4IF CCP5IF CCP4IF CCP3IF 61 (1) PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP TX2IP(1) TMR4IP CCP5IP CCP4IP CCP3IP 61 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 61 RCSTAx TXREGx TXSTAx EUSARTx 发送寄存器 CSRC TX9 BAUDCONx ABDOVF SPBRGHx SPBRGx RCIDL 61 TXEN SYNC SENDB BRGH TRMT TX9D 61 RXDTP TXCKP BRG16 — WUE ABDEN 62 EUSARTx 波特率发生器寄存器的高字节 62 EUSARTx 波特率发生器寄存器的低字节 62 图注: — = 未用,读为 0。同步从动发送不使用阴影单元。 注 1:这些位仅在 80 引脚和 100 引脚器件上实现;在其他器件上则未实现且读为 0。 20.4.2 EUSARTx 同步从动接收 设置同步从动接收操作的步骤如下: 除了休眠模式、空闲模式以及在从动模式下忽略 SREN 位以外,同步主控和从动模式的工作方式完全相同。 如果在进入休眠或空闲模式前将 CREN 位置 1 使能接 收,那么在低功耗模式下可以接收到一个数据字。接收 到该字后,RSR 寄存器将把数据发送到 RCREGx 寄存 器。如果中断允许位 RCxIE 已置 1,产生的中断将把芯 片从低功耗模式唤醒。如果允许了全局中断,程序则 会跳转到中断向量处执行。 2006 Microchip Technology Inc. 1. 通过将 SYNC 和 SPEN 位置 1 并将 CSRC 位清 零,使能同步从动串口。 2. 如果需要中断,将允许位 RCxIE 置 1。 3. 如果要使 CKx 引脚的信号反相,将 TXCKP 位置 1。如果要使 DTx 引脚的信号反相,将 RXDTP 位置 1。 4. 如果需要接收 9 位数据,将 RX9 位置 1。 5. 将使能位 CREN 置 1 以使能接收。 6. 当接收完成时 RCxIF 位将被置 1。如果中断允许 位 RCxIE 置 1,还将产生一个中断。 7. 读 RCSTAx 寄存器获取第 9 位数据 (如果已使 能),并判断在接收过程中是否发生了错误。 8. 读 RCREGx 寄存器来读取接收到的 8 位数据。 9. 如果发生错误,将 CREN 位清零以清除错误。 10. 如果使用中断,应确保 INTCON 寄存器中的 GIE 和 PEIE 位 (INTCON<7:6>)已置 1。 超前信息 DS39762A_CN 第 323 页 PIC18F97J60 系列 表 20-10: 名称 INTCON 与同步从动接收相关的寄存器 Bit 7 Bit 6 Bit 5 GIE/GIEH PEIE/GIEL TMR0IE Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR3 SSP2IF BCL2IF RC2IF(1) TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 61 PIE3 SSP2IE BCL2IE RC2IE(1) TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 61 IPR3 SSP2IP BCL2IP RC2IP(1) TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 61 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 61 RCSTAx RCREGx TXSTAx EUSARTx 接收寄存器 CSRC TX9 BAUDCONx ABDOVF RCIDL 61 TXEN SYNC SENDB BRGH TRMT TX9D 61 RXDTP TXCKP BRG16 — WUE ABDEN 62 SPBRGHx EUSARTx 波特率发生器寄存器的高字节 62 SPBRGx EUSARTx 波特率发生器寄存器的低字节 62 图注: — = 未用,读为 0。同步从动接收不使用阴影单元。 注 1:这些位仅在 80 引脚和 100 引脚器件上实现;在其他器件上则未实现且读为 0。 DS39762A_CN 第 324 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 21.0 10 位模数转换器 (A/D)模块 此模块有五个寄存器: 64 引脚器件的模数 (Analog-to-Digital, A/D)转换器 模块有 11 路输入,80 引脚器件有 15 路输入,100 引脚 器件有 16 路输入。此模块能将一个模拟输入信号转换 成相应的 10 位数字信号。 • • • • • A/D 转换结果高位寄存器 (ADRESH) A/D 转换结果低位寄存器 (ADRESL) A/D 转换控制寄存器 0 (ADCON0) A/D 转换控制寄存器 1 (ADCON1) A/D 转换控制寄存器 2 (ADCON2) ADCON0 寄存器(如寄存器 21-1 所示)控制 A/D 模块 的工作。ADCON1 寄存器(如寄存器 21-2 所示)配置 端口引脚功能。 ADCON2 寄存器 (如寄存器 21-3 所 示)配置 A/D 时钟源、可编程采样时间和输出结果的对 齐方式。 寄存器 21-1: ADCON0:A/D 控制寄存器 0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 ADCAL — CHS3 CHS2 CHS1 CHS0 GO/DONE ADON bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 ADCAL:A/D 校准位 1 = 在下个 A/D 转换时执行校准 0 = 正常 A/D 转换器操作 (不执行转换) bit 6 未用:读为 0 bit 5-2 CHS3:CHS0:模拟通道选择位 0000 = 通道 0 (AN0) 0001 = 通道 1 (AN1) 0010 = 通道 2 (AN2) 0011 = 通道 3 (AN3) 0100 = 通道 4 (AN4) 0101 = 通道 5 (AN5) (1,3) 0110 = 通道 6 (AN6) 0111 = 通道 7 (AN7) 1000 = 通道 8 (AN8) 1001 = 通道 9 (AN9) 1010 = 通道 10 (AN10) 1011 = 通道 11 (AN11) 1100 = 通道 12 (AN12) (2,3) 1101 = 通道 13 (AN13) (2,3) 1110 = 通道 14 (AN14) (2,3) 1111 = 通道 15 (AN15) (2,3) bit 1 GO/DONE:A/D 转换状态位 当 ADON = 1 时: 1 = A/D 转换正在进行 0 = A/D 空闲 bit 0 ADON:A/D 模块使能位 1 = 使能 A/D 转换器模块 0 = 禁止 A/D 转换器模块 注 x = 未知 1: 该通道仅在 100 引脚器件上实现。 2: 这些通道仅在 80 引脚和 100 引脚器件上实现。 3: 在未实现通道上执行转换会返回随机值。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 325 页 PIC18F97J60 系列 寄存器 21-2: ADCON1:A/D 控制寄存器 1 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 — — VCFG0 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 PCFG3: PCFG0 AN9 AN8 AN7 AN6 AN5(2) AN4 AN3 AN2 AN1 AN0 PCFG3:PCFG0:A/D 端口配置控制位: AN10 bit 3-0 AN11 VCFG0:参考电压配置位 (VREF+ 电压源) 1 = VREF+ (AN3) 0 = AVDD AN12(1) bit 4 AN13(1) VCFG0:参考电压配置位 (VREF- 电压源) 1 = VREF- (AN2) 0 = AVSS AN14(1) 未用:读为 0 bit 5 AN15(1) bit 7-6 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 A D D D D D D D D D D D D D D D A D D D D D D D D D D D D D D D A A D D D D D D D D D D D D D D A A A D D D D D D D D D D D D D A A A A D D D D D D D D D D D D A A A A A D D D D D D D D D D D A A A A A A D D D D D D D D D D A A A A A A A D D D D D D D D D A A A A A A A A D D D D D D D D A A A A A A A A A D D D D D D D A A A A A A A A A A D D D D D D A A A A A A A A A A A D D D D D A A A A A A A A A A A A D D D D A A A A A A A A A A A A A D D D A A A A A A A A A A A A A A D D A A A A A A A A A A A A A A A D A = 模拟输入 注 x = 未知 D = 数字 I/O 1: AN12 到 AN15 仅在 80 引脚和 100 引脚器件上可用。 2: AN5 仅在 100 引脚器件上可用。 DS39762A_CN 第 326 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 21-3: ADCON2:A/D 控制寄存器 2 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 ADFM — ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 ADFM:A/D 结果格式选择位 1 = 右对齐 0 = 左对齐 bit 6 未用:读为 0 bit 5-3 ACQT2:ACQT0:A/D 采样时间选择位 111 = 20 个 TAD 110 = 16 个 TAD 101 = 12 个 TAD 100 = 8 个 TAD 011 = 6 个 TAD 010 = 4 个 TAD 001 = 2 个 TAD 000 = 0 个 TAD(1) bit 2-0 ADCS2:ADCS0:A/D 转换时钟选择位 111 = FRC (时钟来自 A/D 模块 RC 振荡器) (1) 110 = FOSC/64 101 = FOSC/16 100 = FOSC/4 011 = FRC (时钟来自 A/D 模块 RC 振荡器) (1) 010 = FOSC/32 001 = FOSC/8 000 = FOSC/2 注 x = 未知 1: 如果选择了 FRC 时钟源,在 A/D 时钟启动之前会加上一个 TCY (指令周期)的延时。这可以保证在开始 转换之前执行 SLEEP 指令。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 327 页 PIC18F97J60 系列 可通过软件选择将器件的正负电源电压 (VDD 和 VSS) 或 RA3/AN3/VREF+ 和 RA2/AN2/VREF- 引脚上的电压作 为 A/D 转换的模拟参考电压。 与 A/D 转换器相关的每个端口引脚都可以被配置为模拟 输入或数字 I/O。ADRESH 和 ADRESL 寄存器保存 A/D 转换的结果。当 A/D 转换完成时,结果被装入 ADRESH:ADRESL寄存器,GO/DONE位(ADCON0<1>) 被清零且 A/D 中断标志位 ADIF 被置 1。 A/D 转换器具有可在休眠状态下工作的特性。要使 A/D 转换器在休眠状态下工作,其时钟必须来自于 A/D 转换 器内部的 RC 振荡器。 器件复位将强制所有寄存器进入复位状态。这将迫使 A/D 模块关闭并中止正在进行的转换。上电复位时, ADRESH:ADRESL 寄存器对的值保持不变。上电复位 后,这些寄存器的值不确定。 采样保持电路的输出是转换器的输入,A/D 转换器采用 逐次逼近法得到转换结果。 图 21-1 给出了 A/D 模块的框图。 图 21-1: A/D 框图 CHS3:CHS0 1111 AN15(1) 1110 AN14(1) 1101 AN13(1) 1100 AN12(1) 1011 AN11 1010 1001 1000 0111 0110 0101 0100 VAIN 0011 (输入电压) 10 位 A/D 转换器 0010 0001 VCFG1:VCFG0 0000 VDD(3) AN10 AN9 AN8 AN7 AN6 AN5(2) AN4 AN3 AN2 AN1 AN0 VREF+ 参考 电压 VREFVSS(3) 注 1: 通道 AN15 到 AN12 在 64 引脚器件上不可用。 2: 通道 AN5 仅在 100 引脚器件上实现。 3: 在 I/O 引脚与 VDD 和 VSS 之间连有保护二极管。 DS39762A_CN 第 328 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 按要求配置好 A/D 模块后,在开始转换之前必须采样选 定的通道。模拟输入通道的相应 TRIS 位必须设置为输 入。采集时间的确定,请参见第 21.1 节 “A/D 采集要 求”。在采样完成之后,即可启动 A/D 转换。采集时间 可以被编程置于 GO/DONE 位置 1 和启动转换之间。 在执行 A/D 转换时应该遵循以下步骤: 1. 配置 A/D 模块: • 配置模拟引脚、参考电压和数字 I/O (通过 ADCON1 寄存器) • 选择 A/D 输入通道 (通过 ADCON0 寄存器) • 选择 A/D 采集时间 (通过 ADCON2 寄存器) • 选择 A/D 转换时钟 (通过 ADCON2 寄存器) • 使能 A/D 模块 (通过 ADCON0 寄存器) 2. 3. 4. 5. 或 6. 7. 图 21-2: 需要时,配置 A/D 中断: • ADIF 位清零 • ADIE 位置 1 • GIE 位置 1 需要时,等待所需的采样时间。 启动转换: • 将 GO/DONE 位 (ADCON0<1>)置 1 等待 A/D 转换完成,可通过以下两种方法之一来 判断转换是否完成: • 查询 GO/DONE 位是否被清零 • 等待 A/D 中断 读取 A/D 结果寄存器(ADRESH:ADRESL),需 要时将 ADIF 位清零。 如需再次进行 A/D 转换,返回步骤 1 或步骤 2。 每位的 A/D 转换时间定义为 TAD。在下一次采样 开始前需要等待至少 2TAD 的时间。 模拟输入模型 VDD RS VAIN 采样开关 VT = 0.6V ANx RIC ≤ 1k CPIN 5 pF VT = 0.6V SS RSS ILEAKAGE ±100 nA CHOLD = 25 pF VSS 图注: CPIN VT ILEAKAGE RIC SS CHOLD RSS 2006 Microchip Technology Inc. = 输入电容 = 门限电压 = 各个连接点在引脚产生的泄漏电流 = 内部连线等效阻抗 = 采样开关 = 采样 / 保持电容(来自 DAC) = 采样开关电阻 超前信息 VDD 1 2 3 4 采样开关(kΩ) DS39762A_CN 第 329 页 PIC18F97J60 系列 21.1 A/D 采集要求 为了使 A/D 转换器达到规定的精度,必须使充电保持电 容 (CHOLD)充满至输入通道的电压电平。模拟输入模 型见图 21-2。电源阻抗 (RS)和内部采样开关阻抗 (RSS)直接影响给电容 CHOLD 充电所需要的时间。采 样开关阻抗(RSS)值随器件电压(VDD)变化而改变。 电源阻抗影响模拟输入的失调电压(由于引脚泄漏电流 的原因)。模拟信号源的最大阻抗推荐值为 2.5 kΩ。选 择 (改变)模拟输入通道后,必须对通道进行采样才能 启动转换,采集时间必须大于最小采集时间。 注: CHOLD Rs 转换误差 VDD 温度 = = ≤ = = 25 pF 2.5 kΩ 1/2 LSb 3V → Rss = 2 kΩ 85°C (系统最大值) 采集时间 = 放大器稳定时间 + 保持电容充电时间 + 温度系数 = TAMP + TC + TCOFF 公式 21-2: VHOLD 或 TC 公式 21-3 显示了所需的最小采集时间 TACQ 的计算过 程。计算结果基于以下假设: 当开始转换时,将保持电容与输入引脚断 开。 公式 21-1: TACQ 可以使用公式 21-1 来计算最小采集时间。该公式假设 误差为 1/2 LSb (A/D 转换需要 1024 步)。 1/2 LSb 误 差是 A/D 达到规定分辨率所允许的最大误差。 A/D 最小充电时间 = (VREF – (VREF/2048)) • (1 – e(-TC/CHOLD(RIC + RSS + RS))) = -(CHOLD)(RIC + RSS + RS) ln(1/2048) 公式 21-3: 计算所需要的最小采集时间 TACQ = TAMP + TC + TCOFF TAMP = 0.2 µs TCOFF = = = (Temp – 25°C)(0.02 µs/°C) (85°C – 25°C)(0.02 µs/°C) 1.2 µs 只有在温度 > 25°C 时才需要温度系数。当温度低于 25°C 时, TcoFF = 0 ms。 TC = = = -(CHOLD)(RIC + RSS + RS) ln(1/2048) µs -(25 pF) (1 kΩ + 2 kΩ + 2.5 kΩ) ln(0.0004883) µs 1.05 µs TACQ = = 0.2 µs + 1 µs + 1.2 µs 2.4 µs DS39762A_CN 第 330 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 21.2 选择和配置自动采集时间 用户可以利用 ADCON2 寄存器选择采集时间,该采集 时间发生在每次 GO/DONE 位置 1 之后。 当 GO/DONE 位被置 1 时,采样停止并开始转换。用户 必须确保在选择输入通道和将 GO/DONE 位置 1 之间已 插入了所需的采集时间。这发生在 ACQT2:ACQT0 位 (ADCON2<5:3>)保持在其 “复位”状态 (000)的 情况下,与不提供可编程采集时间的器件相兼容。 表 21-1 显示了器件在不同的工作频率下和选择不同的 A/D 时钟源时得到的 TAD。 表 21-1: A/D 时钟源 (TAD) 如果需要,可设置 ACQT 位以便为 A/D 模块选择可编程 采集时间。当 GO/DONE 位被置 1 时, A/D 模块会继续 在选定采集时间内采样输入通道,然后自动开始一次转 换。由于采集时间是编程的,因此没有必要在选择通道 和将 GO/DONE 位置 1 之间等待一个采集时间。 在这两种情况下,当转换完成时, GO/DONE 位均被清 零, ADIF 标志位均被置 1 并且 A/D 开始再次对当前选 择的通道进行采样。如果采集时间已经被编程,那么将 不会有任何指示位显示采集时间是否结束,或转换是否 开始。 21.3 选择 A/D 转换时钟 每位的 A/D 转换时间定义为 TAD。每完成一次 10 位 A/D 转换需要 11 个 TAD。可用软件选择 A/D 转换的时钟源。 TAD 可有以下 7 种选择: • • • • • • 2 TOSC 4 TOSC 8 TOSC 16 TOSC 32 TOSC 64 TOSC 不同器件工作频率下的 TAD 工作状态 ADCS2:ADCS0 最高器件频率 2 TOSC 000 2.68 MHz 4 TOSC 100 5.71 MHz 8 TOSC 001 11.43 MHz 16 TOSC 101 22.86 MHz 32 TOSC 010 41.67 MHz 64 TOSC 110 41.67 MHz RC(2) x11 1.00 MHz(1) 1: RC 源的典型 TAD 时间为 4 ms。 2: 请参见表 27-27 中 A/D RC 时钟规范的参 数 130。 注 21.4 配置模拟端口引脚 ADCON1、 TRISA、 TRISF 和 TRISH 寄存器控制 A/D 端口引脚的操作。如果希望端口引脚为模拟输入,则必 须将相应的 TRIS 位置 1(输入)。如果将 TRIS 位清零 (输出),则数字输出电平 (VOH 或 VOL)将被转换。 A/D 转换与 CHS3:CHS0 位及 TRIS 位的状态无关。 • 内部 RC 振荡器 1: 读取端口寄存器时,所有配置为模拟输入 通道的引脚均读为 0 (低电平)。配置为 数字输入的引脚将按模拟输入进行转换。 配置为数字输入的引脚将模拟输入电平精 确转换为数字引脚电平。 为了实现正确的 A/D 转换, A/D 转换时间 (TAD)必须 尽可能得小,但它必须大于最小 TAD。更多信息,请参 见表 27-27 中的 A/D 参数 130 (“A/D 转换要求”)。 2: 定义为数字输入引脚上的模拟电平可能会 导致数字输入缓冲区消耗的电流超出器件 规范。 2006 Microchip Technology Inc. 注 超前信息 DS39762A_CN 第 331 页 PIC18F97J60 系列 21.5 A/D 转换 21.6 图 21-3 显示了在 GO/DONE 位置 1 且 ACQT2:ACQT0 位被清零后 A/D 转换器的工作状态。转换在下一条指令 执行之后开始,以允许器件在转换开始之前进入休眠模 式。 ECCP2 触发器的使用 ECCP2 模块的特殊事件触发信号可以启动 A/D 转换。 这需要将 CCP2M3:CCP2M0 位 (CCP2CON<3:0>) 设置为 1011,且使能 A/D 模块 (ADON 位置 1)。发 生触发事件时, GO/DONE 位被置 1,启动 A/D 采集和 转换并将 Timer1 (或 Timer3)计数器复位为 0。复位 Timer1 (或 Timer3)可自动重复 A/D 采集周期,最大 限度地降低了软件开销(将 ADRESH:ADRESL 内容移 到指定单元)。特殊事件触发信号将 GO/DONE 位置 1 (启动转换)之前,用户必须选择正确的模拟输入通道 和最小采集时间,或选择合适的 TACQ 时间。 图 21-4 显示了在 GO/DONE 位置 1,ACQT2:ACQT0 位 被设置为 010,且在转换开始之前选择 4 TAD 采集时间 后 A/D 转换器的工作状态。 在转换期间将 GO/DONE 位清零将中止当前的 A/D 转 换。不会用尚未完成的 A/D 转换结果更新 A/D 结果寄存 器对。这意味着 ADRESH:ADRESL 寄存器仍将保持上 一次转换的结果(或上一次写入 ADRESH:ADRESL 寄 存器的值)。 如果未使能 A/D 模块(ADON 清零),则特殊事件触发 信号将被 A/D 模块忽略,但它仍会将 Timer1 (或 Timer3)计数器复位。 在 A/D 转换完成或停止以后,需要等待 2 个 TAD 才能开 始下一次采集。等待时间一到,将自动开始对所选通道 进行采集。 不应在启动 A/D模块的指令中将GO/DONE 位置 1。 注: 图 21-3: A/D 转换 TAD 周期 (ACQT2:ACQT0 = 000, TACQ = 0) TCY - TAD TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11 b4 b1 b0 b6 b7 b2 b9 b8 b3 b5 转换开始 保持电容与模拟输入断开(通常为 100 ns) 将 GO/DONE 位置 1 下一个 Q4:装入 ADRESH/ADRESL,清零 GO/DONE 位, ADIF 位置 1,保持电容和模拟输入通道连接。 图 21-4: A/D 转换 TAD 周期 (ACQT2:ACQT0 = 010, TACQ = 4 TAD) TACQT 周期 1 2 3 自动 采集时间 将 GO/DONE 位置 1 (保持电容继续 采样输入) DS39762A_CN 第 332 页 TAD 周期 4 1 2 3 4 5 6 7 8 9 10 11 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 转换开始 (保持电容断开) 下一个 Q4:装入 ADRESH:ADRESL,清零 GO/DONE 位, ADIF 位置 1,保持电容和模拟输入通道重新连接。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 21.7 A/D 转换器校准 如果希望器件处于功耗管理模式时进行 A/D 采集转换, 就应该根据该模式下使用的时钟对 ADCON2 中的 ACQT2:ACQT0 和 ADCS2:ADCS0 位进行更新。在进 入功耗管理模式之后 (两种功耗管理运行模式之一), 就可以开始 A/D 采集或转换。采集或转换开始以后,器 件应继续使用相同的功耗管理模式时钟源直到转换完 成。如果需要,在转换期间也可以将器件置于相应的功 耗管理空闲模式。 PIC18F97J60 系列器件中的 A/D 转换器包括自校准功 能,能补偿模块产生的任何偏移。校准过程是通过将 ADCAL 位 (ADCON0<7>)置 1 而 自 动启动的。 GO/DONE 位下次置 1 时,模块将执行“假”转换(即 不读输入通道) ,将结果值内部存储起来,补偿偏移。 这样就补偿了后续偏移。 校准过程假定器件处于相对稳态运行条件下。如果使用 了 A/D 校准功能,应在每次器件复位后或运行条件有重 大变化时执行校准操作。 21.8 如果功耗管理模式的时钟频率小于 1 MHz,就应该选择 A/D RC 时钟源。 在休眠模式下工作需要选择 A/D RC 时钟。如果将 ACQT2:ACQT0 设置为 000 并启动 A/D 转换,转换将 延时一个指令周期以允许执行SLEEP指令并进入休眠模 式。OSCCON 寄存器中的 IDLEN 和 SCS 位必须在转换 开始之前被清零。 在功耗管理模式下的操作 在功耗管理模式中,自动采集时间和 A/D 转换时钟的选 择一定程度上可由时钟源和频率决定。 表 21-2: 名称 INTCON A/D 寄存器汇总 Bit 7 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 Bit 6 GIE/GIEH PEIE/GIEL PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 61 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE 61 IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 61 PIR2 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF 61 PIE2 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE 61 IPR2 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP 61 ADRESH A/D 结果寄存器的高字节 60 A/D 结果寄存器的低字节 60 ADRESL ADCON0 ADCAL — CHS3 CHS3 CHS1 CHS0 GO/DONE ADON 60 ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 60 ADCON2 ADFM — ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 60 CCP2CON P2M1 P2M0 DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 60 PORTA RJPU — RA5 RA4 RA3 RA2 RA1 RA0 62 TRISA — — TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 61 PORTF RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0(1) 62 61 TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0(1) PORTH(2) RH7 RH6 RH5 RH4 RH3 RH2 RH1 RH0 62 TRISH(2) TRISH7 TRISH6 TRISH5 TRISH4 TRISH3 TRISH2 TRISH1 TRISH0 61 TRISF 图注: — = 未用 (读为 0), r = 保留。 A/D 转换不使用阴影单元。 注 1: 仅在 100 引脚器件上实现。 2: 在 64 引脚器件上未实现此寄存器。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 333 页 PIC18F97J60 系列 注: DS39762A_CN 第 334 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 22.0 比较器模块 模拟比较器模块包含两个比较器,可以用多种方式对它们 进行配置。该比较器的输入可以是与 RF1 到 RF6 引脚复 用的模拟输入,也可以为片上参考电压(见第 23.0 节“比 较器参考电压模块”)。数字输出 (正常或翻转的)可从 引脚电平读取,也可通过控制寄存器读取。 寄存器 22-1: CMCON 寄存器 (寄存器 22-1)选择比较器的输入和 输出配置。图 22-1 给出了各种比较器配置的框图。 CMCON:比较器控制寄存器 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-1 R/W-1 R/W-1 C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 x = 未知 C2OUT:比较器 2 输出位 当 C2INV = 0 时: 1 = C2 VIN+ > C2 VIN0 = C2 VIN+ < C2 VIN当 C2INV = 1 时: 1 = C2 VIN+ < C2 VIN0 = C2 VIN+ > C2 VIN- bit 6 C1OUT:比较器 1 输出位 当 C1INV = 0 时: 1 = C1 VIN+ > C1 VIN0 = C1 VIN+ < C1 VIN当 C1INV = 1 时: 1 = C1 VIN+ < C1 VIN0 = C1 VIN+ > C1 VIN- bit 5 C2INV:比较器 2 输出翻转位 1 = C2 输出翻转 0 = C2 输出不翻转 bit 4 C1INV:比较器 1 输出翻转位 1 = C1 输出翻转 0 = C1 输出不翻转 bit 3 CIS:比较器输入切换位 当 CM2:CM0 = 110 时: 1 = C1 VIN- 连接到 RF5/AN10/CVREF C2 VIN- 连接到 RF3/AN8 0 = C1 VIN- 连接到 RF6/AN11 C2 VIN- 连接到 RA4/AN9 bit 2-0 CM2:CM0:比较器模式位 图 22-1 给出了比较器的几种模式以及相应 CM2:CM0 位的设置。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 335 页 PIC18F97J60 系列 22.1 比较器配置 图 22-1 给出了比较器的 8 种工作模式。 CMCON 寄存 器的 CM2:CM0 位用于选择模式。TRISF 寄存器控制每 种模式下比较器引脚的数据方向。如果改变比较器模 图 22-1: VIN- RF5/AN10/ A CVREF VIN+ A VIN- RF3/AN8 A VIN+ C1 关(读为 0) C2 关(读为 0) 两个独立的比较器 CM2:CM0 = 010 VIN- RF5/AN10/ A CVREF VIN+ A VIN- A VIN+ RF4/AN9 RF3/AN8 RF6/AN11 D VIN- RF5/AN10/ CVREF D VIN+ RF4/AN9 D VIN- RF3/AN8 D VIN+ C1 关(读为 0) C2 关(读为 0) C1 C1OUT C2 C2OUT 两个带输出的独立比较器 CM2:CM0 = 011 A RF6/AN11 改变比较器模式期间应禁止比较器中断;否 则会产生错误的中断。 比较器关闭(POR 默认值) CM2:CM0 = 111 A RF4/AN9 注: 比较器 I/O 工作模式 禁止比较器输出 CM2:CM0 = 000 RF6/AN11 式,由于存在特定的模式改变延时 (如第 27.0 节 “电 气特性”所示),比较器的输出电平可能会在此延时期 间无效。 RF6/AN11 A VIN- C1 C1OUT RF5/AN10/ A CVREF RF2/AN7/C1OUT* C2 C2OUT RF4/AN9 A VIN- RF3/AN8 A VIN+ VIN+ RF1/AN6/C2OUT* 两个具有公共参考端的比较器 CM2:CM0 = 100 A VIN- RF5/AN10/ A CVREF VIN+ A VIN- D VIN+ RF6/AN11 RF4/AN9 RF3/AN8 两个具有公共参考端且带输出的比较器 CM2:CM0 = 101 RF6/AN11 C1 C1OUT C2 C2OUT A VIN- A RF5/AN10/ CVREF RF2/AN7/C1OUT* VIN+ RF4/AN9 A VIN- RF3/AN8 D VIN+ C1 C1OUT C2 C2OUT RF1/AN6/C2OUT* 两个比较器复用四路输入 CM2:CM0 = 110 一个带输出的独立比较器 CM2:CM0 = 001 A VIN- RF5/AN10/ A VIN+ RF6/AN11 C1 C1OUT CVREF RF2/AN7/C1OUT* RF4/AN9 D VIN- RF3/AN8 D VIN+ C2 RF6/AN11 A RF5/AN10/ CVREF A RF4/AN9 A RF3/AN8 A VIN- CIS = 0 CIS = 1 VIN+ C1 C1OUT C2 C2OUT VIN- CIS = 0 CIS = 1 VIN+ 关(读为 0) CVREF 来自 VREF 模块 A = 模拟输入,端口始终读为 0 D = 数字输入 CIS(CMCON<3>)是比较器输入切换位 * 将 TRISF<2:1> 位置 1 会通过把引脚配置为输入引脚而禁止比较器输出。 DS39762A_CN 第 336 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 22.2 22.3.2 比较器工作原理 图 22-2 显示了单个比较器,以及其模拟输入电平和数字 输出之间的关系。当 VIN+ 上的模拟输入电平值小于 VIN上的模拟输入值时,比较器输出数字低电平。当 VIN+ 上 的模拟输入电平值大于 VIN- 上的模拟输入值时,比较器 输出数字高电平。图 22-2 中比较器输出的阴影部分表示 因输入失调电压和响应时间所造成的输出不确定区域。 22.3 比较器参考电压 根据不同的比较器工作模式,可选择使用外部或内部参 考电压。将 VIN- 上的模拟信号与 VIN+ 上的信号作比较, 并相应地调整比较器的数字输出 (图 22-2)。 图 22-2: VIN+ VIN- 单个比较器 – 比较器模块也可以选择使用内部比较器参考电压模块产 生的参考电压。在第 23.0 节 “比较器参考电压模块” 中详细介绍了该模块。 只 有 在 两 个 比 较 器 复 用 四 路 输 入 的 模 式 (CM2:CM0 = 110)中才可使用内部参考电压。在该模 式下,内部参考电压被施加到两个比较器的 VIN+ 引脚 上。 22.4 输出 比较器响应时间 响应时间是指从选定一个新的参考电压或输入源到比 较器输出达到一个有效电平的最短时间。如果内部参考 电压改变了,在使用比较器输出时,必须考虑内部参考 电压的最大延时。否则,应使用比较器的最大延时(见 第 27.0 节 “电气特性”)。 22.5 + 内部参考电压信号 比较器输出 通过 CMCON 寄存器可读取比较器输出。这些位是只读 的。比较器输出也可以直接输出到 RF1 和 RF2 I/O 引 脚。当被使能时, RF1 和 RF2 引脚输出路径上的多路 开关会发生切换,并且每个引脚输出的信号与比较器输 出信号是异步的。每个比较器输出的不确定区域的大小 与规范中给出的输入失调电压和响应时间有关。图 22-3 给出了比较器的输出框图。 VIN- 在该模式下,TRISF 仍作为 RF1 和 RF2 引脚的输出使 能 / 禁止位。 VIN+ 使用 C2INV 和 C1INV 位(CMCON<5:4>)可改变比较 器输出的极性。 输出 22.3.1 注 外部参考电压信号 当使用外部参考电压时,可将比较器模块中的两个比较 器配置为使用同一个参考源或使用不同的参考源。但 是,门限检测电路可能要求使用同一个参考源。参考信 号幅值必须在 VSS 和 VDD 之间,并且可被施加到比较 器的任一引脚上。 2006 Microchip Technology Inc. 超前信息 1: 读端口寄存器时,所有配置为模拟输入的 引脚将读为 0。配置为数字输入的引脚将 根据施密特触发器输入规范,对模拟输入 进行相应转换。 2: 定义为数字输入引脚上的模拟电平可能会 使输入缓冲区的电流消耗超过规定值。 DS39762A_CN 第 337 页 PIC18F97J60 系列 图 22-3: + 至 RF1 或 RF2 引脚 - 多路开关 端口引脚 比较器输出框图 D 总线 数据 Q CxINV EN 读 CMCON D Q EN CL 来自其他 比较器 复位 22.6 22.7 比较器中断 任一比较器的输出值发生变化,都会将该比较器的中断 标志位置 1。需要用软件保存输出位的状态信息 (从 CMCON<7:6> 读取),以确定实际发生的变化。 CMIF 位 (PIR2<6>)是比较器中断标志位,且必须通过清零 复位。由于可以向该寄存器写入 1,因此可以产生模拟 中断。 必须将 CMIE 位(PIE2<6>)和 PEIE 位(INTCON<6>) 置1以允许中断。此外,还必须将GIE位(INTCON<7>) 置 1。如果这些位中的任何一个被清零,将无法允许中 断,尽管中断条件发生时仍会将 CMIF 位置 1。 注: CMIF 位 置1 当执行读操作时 (Q2 周期开始) ,如果 CMCON 寄存器 (C1OUT 或 C2OUT)的 值发生变化,那么 CMIF (PIR2 寄存器) 中断标志位可能不会被置 1。 用户可用以下方式在中断服务程序中清除该中断: 休眠期间的比较器操作 当比较器处于激活状态而器件处于休眠模式时,比较器 仍保持激活状态并可产生中断 (如果中断被允许)。中 断会把器件从休眠模式唤醒。每个处于工作状态中的比 较器都会消耗额外的电流,如比较器规范中所示。若要 将休眠模式下的功耗减到最低,可在进入休眠模式前关 闭比较器(CM2:CM0 = 111)。如果器件从休眠状态唤 醒, CMCON 寄存器的内容不受影响。 22.8 复位的影响 器件复位强制 CMCON 寄存器进入复位状态,从而使比 较器模块进入关闭模式(CM2:CM0 = 111)。但是,器 件复位时输入引脚 (RF3 到 RF6)被默认配置为模拟 输入。这些引脚的 I/O 配置由 PCFG3:PCFG0 位 (ADCON1<3:0>)的设置决定。因此,当复位时引脚呈 现模拟输入状态,将使得器件电流降至最小。 a) 任何对 CMCON 的读或写都将结束不匹配条件。 b) 将标志位 CMIF 清零。 不匹配条件将继续把标志位 CMIF 置 1。读 CMCON 将 结束不匹配条件并允许将标志位 CMIF 清零。 DS39762A_CN 第 338 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 22.9 如果输入电压超出该范围 0.6V 以上,就可能发生一个 二极管正向偏置而使输入电压箝位。模拟信号源的最大 阻抗推荐值为 10 kΩ。任何连接到模拟输入引脚的外部 元件(如电容或齐纳二极管),要保证其泄漏电流极小。 模拟输入连接注意事项 模拟输入的简化电路如图 22-4 所示。由于模拟引脚被连 接到数字输出端,它们与 VDD 和 VSS 之间连有反向偏 置的二极管。因此,模拟输入必须在 VSS 和 VDD 之间。 图 22-4: 比较器模拟输入模型 VDD VT = 0.6V RS < 10k RIC AIN CPIN 5 pF VA VT = 0.6V 比较器 输入 ILEAKAGE ±500 nA VSS CPIN VT ILEAKAGE RIC RS VA 图注: 表 22-1: 名称 = = = = = = 输入电容 门限电压 各个连接点在引脚上产生的泄漏电流 内部连线电阻 信号源阻抗 模拟电压 与比较器模块相关的寄存器 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 59 PIR2 OSCFIF CMIF ETHIF r BCL1IF — TMR3IF CCP2IF 61 PIE2 OSCFIE CMIE ETHIE r BCL1IE — TMR3IE CCP2IE 61 IPR2 OSCFIP CMIP ETHIP r BCL1IP — TMR3IP CCP2IP 61 INTCON GIE/GIEH PEIE/GIEL CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 60 CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 60 PORTF RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0 62 TRISF TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0 61 图注: — = 未用 (读为 0), r = 保留。比较器模块不使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 339 页 PIC18F97J60 系列 注: DS39762A_CN 第 340 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 23.0 比较器参考电压模块 比较器参考电压模块是一个 16 阶的梯形电阻网络,可 提供多个参考电压供选择。虽然它的主要目的是为模拟 比较器提供参考电压,但也可将它用于其他场合。 的主要区别在于其电压值之间的步长不同(其中一种范 围可提供较高的分辨率) ,该步长由 CVREF 选择位 (CVR3:CVR0)来决定。下面是计算比较器参考电压输 出值的公式: 如果 CVRR = 1: CVREF = ((CVR3:CVR0)/24) x (CVRSRC) 图 23-1 给出了此模块的框图。梯形电阻经过分段可提 供两种范围的 CVREF 值,并且该网络还具有断电功能, 可以在不使用参考电压的情况下节省功耗。器件的 VDD/ VSS 或外部参考电压都可以作为此模块的参考电源。 23.1 配置比较器参考电压 参考电压模块是通过 CVRCON 寄存器 (寄存器 23-1) 来控制的。比较器参考电压模块提供两种范围的输出电 压,每 种 范 围 都 具 有 16 个 不 同 的 电 平。 CVRR 位 (CVRCON<5>)选 择 输 出 电 压 的 范 围。这 两种范围 寄存器 23-1: 如果 CVRR = 0: CVREF = (CVRSRC /4) + ((CVR3:CVR0)/32) x (CVRSRC) 比较器参考电压模块的电源可以来自 VDD 和 VSS,也可 以来自与 RA2 和 RA3 复用的外部 VREF+ 和 VREF-。电 压源由 CVRSS 位 (CVRCON<4>)选择。 在更改 CVREF 输出值时,必须考虑比较器参考电压的稳 定时间 (见第 27.0 节 “电气特性”中的表 27-3)。 CVRCON:比较器参考电压控制寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 CVREN CVROE(1) CVRR CVRSS CVR3 CVR2 CVR1 CVR0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7 CVREN:比较器参考电压使能位 1 = CVREF 电路上电 0 = CVREF 电路断电 bit 6 CVROE:比较器 VREF 输出使能位 (1) 1 = CVREF 电平也从 RF5/AN10/CVREF 引脚输出 0 = CVREF 电压与 RF5/AN10/CVREF 引脚断开 bit 5 CVRR:比较器 VREF 范围选择位 1 = 0 到 0.667 CVRSRC,步长为 CVRSRC/24 (低电平范围) 0 = 0.25 CVRSRC 到 0.75 CVRSRC,步长为 CVRSRC/32 (高电平范围) bit 4 CVRSS:比较器 VREF 源选择位 1 = 比较器参考电压源, CVRSRC = (VREF+) – (VREF-) 0 = 比较器参考电压源, CVRSRC = VDD – VSS bit 3-0 CVR3:CVR0:比较器 VREF 值选择位 (0 ≤ (CVR3:CVR0) ≤ 15) 当 CVRR = 1 时: CVREF = ((CVR3:CVR0)/24) • (CVRSRC) x = 未知 当 CVRR = 0 时: CVREF = (CVRSRC/4) + ((CVR3:CVR0)/32) • (CVRSRC) 注 1: CVROE 改写 TRISF<5> 位设置。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 341 页 PIC18F97J60 系列 图 23-1: 比较器参考电压模块框图 VREF+ VDD CVRSS = 1 8R CVRSS = 0 CVR3:CVR0 R CVREN R R 16 选 1 MUX R 16 阶 R CVREF R R CVRR VREF- 8R CVRSS = 1 CVRSS = 0 23.2 参考电压精度 / 误差 23.4 由于模块结构的限制,并不能实现整个参考电压范围 的满 量 程 输 出。梯形 电 阻 网 络 顶 部 和 底 部 的 晶 体管 (图 23-1)使 CVREF 值不能达到参考电压源的满幅 值。参 考 电 压 是 由 参 考 电 压 源 分 压 而 来 的,因 此 CVREF 输出随参考电压源的波动而变化。经过测试的 参考电压的绝对精度,请参见第 27.0节“电气特性”。 23.3 器件复位时, CVREN 位 (CVRCON<7>)将被清零从 而禁止参考电压模块。复位还将 CVROE 位 (CVRCON<6>)清零,使参考电压与 RA2 引脚断开; 同时通过将 CVRR 位 (CVRCON<5>)清零选择高电 压范围。 CVR 值选择位也将清零。 23.5 休眠期间的操作 如果因中断或看门狗定时器超时将器件从休眠模式唤 醒, CVRCON 寄存器的内容将不受影响。为了降低休 眠模式下的电流消耗,应禁止参考电压模块。 复位的影响 连接注意事项 参考电压模块的工作独立于比较器模块。如果 CVROE 位被置 1,那么参考电压发生器的输出可能与 RF5 引脚 相连。当 RA2 被配置为数字输入引脚时,将参考电压输 出连接到 RA2 引脚,将会增加电流消耗。使能 CVRSS 时,将 RF5 用作数字输出引脚也将增加电流消耗。 RF5 引脚可被用作简单的 D/A 输出,但是其驱动能力有 限。要提高电流驱动能力,VREF 参考电压输出端必须外 接缓冲区。图 23-2 举例说明了这一缓冲技术。 DS39762A_CN 第 342 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 23-2: 参考电压输出缓冲示例 PIC18FXXJ6X R(1) CVREF 模块 注 表 23-1: 名称 CVRCON 参考 电压 输出 阻抗 + – RF5 CVREF 输出 1: R 的值取决于参考电压配置位 CVRCON<5> 和 CVRCON<3:0>。 与比较器参考电压模块相关的寄存器 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值 所在页 CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 60 CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 60 TRISF TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0 61 图注: — = 未用,读为 0。比较器参考电压模块不使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 343 页 PIC18F97J60 系列 注: DS39762A_CN 第 344 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 24.0 CPU 的特殊功能 24.1.1 配置 PIC18F97J60 系列器件的注意事项 PIC18F97J60 系列器件具有几项特殊的功能旨在最大 限度地提高系统可靠性,并通过减少外部元件将成本降 至最低。这些功能包括: PIC18F97J60 系列器件不再使用耐久性存储寄存器存 储配置信息。配置字节以易失性存储方式实现,这就意 味着在器件每次上电时都必须对配置数据进行编程。 • 振荡器选择 • 复位: - 上电复位 (POR) - 上电延时定时器 (PWRT) - 振荡器起振定时器 (OST) - 欠压复位 (BOR) • 中断 • 看门狗定时器 (WDT) • 故障保护时钟监视器 • 双速启动 • 代码保护 • 在线串行编程 配置数据存储在片上程序存储空间顶部的 4 个字中,这 些字被称为闪存配置字,如表 5-1 中所示。配置字按表 24-1 中相同的次序存储在程序存储器中,CONFIG1L 位 于地址最低的单元,CONFIG3H 位于地址最高的单元。 在器件上电时这些数据被自动装入正确的配置寄存器。 当为这些器件创建应用程序时,用户应该为配置数据特 别分配闪存配置字单元,以确保当编译代码时程序代码 不会存储在该地址上。 在上电复位时存储配置位的易失性存储单元始终复位为 1。对于其他类型的复位事件,将保留和使用先前已编 程的值,而无需从程序存储器重新装入数据。 要根据具体应用对频率、功耗、精度和成本的要求来选 择振荡器。在第 2.0 节 “振荡器配置”中详细讨论了所 有的选项。 在本数据手册的前面几章中已完整地讨论了器件的复 位和中断。 PIC18F97J60 系列器件除了为复位提供上电延时定时 器和振荡器起振定时器之外,还具有一个可配置的看门 狗定时器,该定时器由软件控制。 程序存储器中 CONFIG1H、CONFIG2H 和 CONFIG3H 的高 4 位也应为 1111。这样当这些配置字被意外执行 到时,被当作一条 NOP 指令。由于配置位并未在对应的 单元中真正实现,因此向这些单元写入 1 不会影响器件 工作。 为了避免在代码执行期间配置被意外更改,可编程配置 位只可被写入一次。在上电周期内对这些位进行初始化 之后就不能再改写了。要改变器件的配置需要对器件重 新上电。 器件自带的内部 RC 振荡器还提供了故障保护时钟监视 器(FSCM)和双速启动这两个额外的功能。FSCM 对 外设时钟进行后台监视,并在外设时钟发生故障时自动 切换时钟源。双速启动使得几乎可在启动发生那一刻立 即执行代码,同时主时钟源继续其起振延时。 通过设置相应的配置寄存器位可以使能和配置所有这些 功能。 24.1 配置位 可以通过对配置位编程 (读为 0)或不编程 (读为 1) 来选择不同的器件配置。这些配置位被映射到程序存储 器以 300000h 开始的单元中。表 24-1 列出了所有的配 置位。从寄存器 24-1 到寄存器 24-8 详细解释了各配置 位的不同功能。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 345 页 PIC18F97J60 系列 表 24-1: 配置位和器件 ID 寄存器名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 默认 / 未编程值 (1) 300000h CONFIG1L DEBUG XINST STVREN — — — — WDTEN 111- ---1 300001h CONFIG1H —(2) —(2) —(2) —(2) —(3) CP0 — — ---- 01-- 300002h CONFIG2L IESO FCMEN — — — FOSC2 FOSC1 FOSC0 11-- -111 300003h CONFIG2H —(2) —(2) —(2) —(2) WDTPS3 WDTPS2 WDTPS1 WDTPS0 ---- 1111 300004h CONFIG3L WAIT(4) BW(4) EMB1(4) — — — 1111 1--- 300005h CONFIG3H —(2) —(2) —(2) —(2) — 3FFFFEh DEVID1 DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0 xxxx xxxx(6) 3FFFFFh DEVID2 DEV10 DEV9 DEV8 DEV7 DEV6 DEV5 DEV4 DEV3 xxxx xxxx(6) 图注: 注 1: 2: 3: 4: 5: 6: EMB0(4) EASHFT(4) ETHLED ECCPMX(5) CCP2MX(5) ---- -111 x = 未知, u = 不变, - = 未用。未使用阴影单元,读为 0。 这些值反映出厂时和上电复位后的未编程状态。在所有其他复位状态中,配置字节保持原先的编程状态。 程序存储器中这些位的值应始终为 1。这样可确保如果意外地执行了这些单元,将会执行 NOP 指令。 该位应始终保持为 0。 仅在 100 引脚器件上实现。 仅在 80 引脚和 100 引脚器件上实现。 请参见寄存器 24-7 和寄存器 24-8 查询 DEVID 的值。这些寄存器为只读寄存器,用户不能对其进行编程。 DS39762A_CN 第 346 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 24-1: CONFIG1L:配置寄存器 1 的低字节 (字节地址为 300000h) R/WO-1 R/WO-1 R/WO-0 U-0 U-0 U-0 U-0 R/WO-1 DEBUG XINST STVREN — — — — WDTEN bit 7 bit 0 图注: R = 可读位 WO = 一次性写入位 U = 未用位,读为 0 -n = 未对器件编程时的值 1=置1 bit 7 DEBUG:后台调试器使能位 1 = 禁止后台调试器, RB6 和 RB7 被配置为通用 I/O 引脚 0 = 使能后台调试器, RB6 和 RB7 专用于在线调试 bit 6 XINST:扩展指令集使能位 1 = 使能指令集扩展和变址寻址模式 0 = 禁止指令集扩展和变址寻址模式 (传统模式) bit 5 STVREN:堆栈上溢 / 下溢复位使能位 1 = 使能堆栈上溢 / 下溢复位 0 = 禁止堆栈上溢 / 下溢复位 bit 4-1 未用:读为 0 bit 0 WDTEN:看门狗定时器使能位 1 = 使能 WDT 0 = 禁止 WDT (由 SWDTEN 位控制) 寄存器 24-2: 0 = 清零 CONFIG1H:配置寄存器 1 的高字节 (字节地址为 300001h) U-0 U-0 U-0 U-0 U-0(1) R/WO-1 U-0 U-0 —(2) —(2) —(2) —(2) — CP0 — — bit 7 bit 0 图注: R = 可读位 WO = 一次性写入位 -n = 未对器件编程时的值 bit 7-3 未用:读为 0 bit 2 CP0:代码保护位 1 = 程序存储器未受代码保护 0 = 程序存储器受代码保护 bit 1-0 未用:读为 0 注 U = 未用位,读为 0 1=置1 0 = 清零 1: 该位应始终保持为 0。 2: 程序存储器中这些位的值应始终为 1。这样可确保如果意外地执行了这些单元,将会执行 NOP 指令。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 347 页 PIC18F97J60 系列 寄存器 24-3: CONFIG2L:配置寄存器 2 的低字节 (字节地址为 300002h) R/WO-1 R/WO-1 U-0 U-0 U-0 R/WO-1 R/WO-1 R/WO-1 IESO FCMEN — — — FOSC2 FOSC1 FOSC0 bit 7 bit 0 图注: R = 可读位 WO = 一次性写入位 U = 未用位,读为 0 -n = 未对器件编程时的值 1=置1 0 = 清零 bit 7 IESO:双速启动 (内部 / 外部振荡器切换)控制位 1 = 使能双速启动 0 = 禁止双速启动 bit 6 FCMEN:故障保护时钟监视器使能位 1 = 使能故障保护时钟监视器 0 = 禁止故障保护时钟监视器 bit 5-3 未用:读为 0 bit 2 FOSC2:默认 / 复位系统时钟选择位 1 = 当 OSCCON<1:0> = 00 时,使用由 FOSC1:FOSC0 选择的时钟作为系统时钟 0 = 当 OSCCON<1:0> = 00 时,使用 INTRC 作为系统时钟 bit 1-0 FOSC1:FOSC0:振荡器选择位 11 = EC 振荡器, PLL 使能并由软件控制, OSC2 用作 CLKO 功能 10 = EC 振荡器, OSC2 用作 CLKO 功能 01 = HS 振荡器, PLL 使能并由软件控制 00 = HS 振荡器 DS39762A_CN 第 348 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 24-4: CONFIG2H:配置寄存器 2 的高字节 (字节地址为 300003h) U-0 U-0 U-0 U-0 R/WO-1 R/WO-1 R/WO-1 R/WO-1 —(1) —(1) —(1) —(1) WDTPS3 WDTPS2 WDTPS1 WDTPS0 bit 7 bit 0 图注: R = 可读位 WO = 一次性写入位 -n = 未对器件编程时的值 U = 未用位,读为 0 1=置1 bit 7-4 未用:读为 0 bit 3-0 WDTPS3:WDTPS0:看门狗定时器后分频比选择位 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 注 0 = 清零 1: 程序存储器中这些位的值应始终为 1。这样可确保如果意外地执行了这些单元,将会执行 NOP 指令。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 349 页 PIC18F97J60 系列 寄存器 24-5: CONFIG3L:配置寄存器 3 的低字节 (字节地址为 300004h) R/WO-1 R/WO-1 R/WO-1 R/WO-1 R/WO-1 U-0 U-0 U-0 WAIT(1) BW(1) EMB1(1) EMB0(1) EASHFT(1) — — — bit 7 bit 0 图注: R = 可读位 WO = 一次性写入位 U = 未用位,读为 0 -n = 未对器件编程时的值 1=置1 0 = 清零 bit 7 WAIT:外部总线等待使能位 (1) 1 = 禁止为外部存储器总线上的操作插入等待状态 0 = 使能为外部存储器总线上的操作插入等待状态,并由 MEMCON<5:4> 选择 bit 6 BW:数据总线宽度选择位 (1) 1 = 16 位数据宽度模式 0 = 8 位数据宽度模式 bit 5-4 EMB1:EMB0:外部存储器总线配置位 (1) 11 = 单片机模式,禁止外部总线 10 = 扩展单片机模式, 12 位地址模式 01 = 扩展单片机模式, 16 位地址模式 00 = 扩展单片机模式, 20 位地址模式 bit 3 EASHFT:外部地址总线平移使能位 (1) 1 = 使能地址平移;外部总线上的地址是以 000000h 为起始地址的偏移值 0 = 禁止地址平移;外部总线上的地址反映 PC 值 bit 2-0 未用:读为 0 注 1: 仅在 100 引脚器件上实现。 DS39762A_CN 第 350 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 寄存器 24-6: CONFIG3H:配置寄存器 3 的高字节 (字节地址为 300005h) U-0 U-0 U-0 U-0 U-0 R/WO-1 R/WO-1 R/WO-1 —(1) —(1) —(1) —(1) — ETHLED ECCPMX(2) CCP2MX(2) bit 7 bit 0 图注: R = 可读位 WO = 一次性写入位 -n = 未对器件编程时的值 U = 未用位,读为 0 1=置1 0 = 清零 bit 7-3 未用:读为 0 bit 2 ETHLED:以太网 LED 使能位 1 = 当使能以太网模块时,RA0/RA1 与 LEDA/LEDB 复用;当禁止以太网模块时,RA0/RA1 用作 I/O 0 = RA0/RA1 用作 I/O,与以太网模块状态无关 bit 1 ECCPMX:ECCP 多路复用位 (2) 1 = ECCP1 输出 (P1B/P1C)与 RE6 和 RE5 复用; ECCP3 输出 (P3B/P3C)与 RE4 和 RE3 复用 0 = ECCP1 输出 (P1B/P1C)与 RH7 和 RH6 复用; ECCP3 输出 (P3B/P3C)与 RH5 和 RH4 复用 bit 0 CCP2MX:ECCP2 多路复用位 (2) 1 = ECCP2/P2A 与 RC1 复用 0 = 在单片机模式下 ECCP2/P2A 与 RE7 复用 (80 引脚和 100 引脚器件) 或在扩展单片机模式下与 RB3 复用 (仅 100 引脚器件) 注 1: 程序存储器中这些位的值应始终为 1。这样可确保如果意外地执行了这些单元,将会执行 NOP 指令。 2: 仅在 80 引脚和 100 引脚器件上实现。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 351 页 PIC18F97J60 系列 寄存器 24-7: DEVID1:PIC18F97J60 系列器件的器件 ID 寄存器 1 R R R R R R R R DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0 bit 7 bit 0 图注: R = 只读位 P = 可编程位 U = 未用位,读为 0 -n = 未对器件编程时的值 u = 编程后状态不变 bit 7-5 DEV2:DEV0:器件 ID 位 请参见寄存器 24-8 获取完整列表。 bit 4-0 REV4:REV0:版本 ID 位 这些位用于表明器件版本。 寄存器 24-8: DEVID2:PIC18F97J60 系列器件的器件 ID 寄存器 2 R R R R R R R R DEV10 DEV9 DEV8 DEV7 DEV6 DEV5 DEV4 DEV3 bit 7 bit 0 图注: R = 只读位 P = 可编程位 -n = 未对器件编程时的值 bit 7-0 U = 未用位,读为 0 u = 编程后状态不变 DEV10:DEV3:器件 ID 位: DS39762A_CN 第 352 页 DEV10:DEV3 (DEVID2<7:0>) DEV2:DEV0 (DEVID1<7:5>) 器件 0001 1000 000 PIC18F66J60 0001 1111 000 PIC18F66J65 0001 1111 001 PIC18F67J60 0001 1000 001 PIC18F86J60 0001 1111 010 PIC18F86J65 0001 1111 011 PIC18F87J60 0001 1000 010 PIC18F96J60 0001 1111 100 PIC18F96J65 0001 1111 101 PIC18F97J60 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 24.2 看门狗定时器 (WDT) 注 PIC18F97J60 系列器件的 WDT 是由 INTRC 振荡器驱 动的。当使能 WDT 时,时钟源也将同时使能。WDT 定 时周期的标称值为 4 ms,其稳定性与 INTRC 振荡器相 同。 2: 当执行 CLRWDT 指令时,后分频器的计数 值将被清零。 24.2.1 4 ms 的 WDT 定时周期将与 16 位后分频器的值相乘来 得到更长的时间周期。通过配置寄存器 2H 中的 WDTPS 位来控制一个多路开关以对 WDT 后分频器的输出进行 选择。因此可获得的定时周期范围为4 ms至131.072 秒 (2.18 分钟)。当发生以下任一事件时,WDT 和后分频 器将被清零,这些事件包括:执行了 SLEEP 或 CLRWDT 指令,或者发生了时钟故障 (主时钟或 Timer1 振荡 器)。 图 24-1: 1: 当执行 CLRWDT 和 SLEEP 指令时, WDT 和后分频器的计数值将被清零。 控制寄存器 WDTCON 寄存器 (寄存器 24-9)是可读写寄存器。 SWDTEN 位使能或禁止 WDT 操作。仅当 WDT 被配置 位禁止时,才允许使用软件改写 WDTEN 配置位并使能 WDT。 WDT 框图 使能 WDT SWDTEN INTRC 控制 WDT 计数器 ÷128 INTRC 振荡器 从功耗管理 模式唤醒 可编程后分频器 1:1 至 1:32,768 CLRWDT 所有的器件复位 WDT 复位 复位 WDT 4 WDTPS3:WDTPS0 休眠 寄存器 24-9: WDTCON:看门狗定时器控制寄存器 U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 — — — — — — — SWDTEN(1) bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未用位,读为 0 -n = POR 值 1=置1 0 = 清零 bit 7-1 未用:读为 0 bit 0 SWDTEN:由软件控制的看门狗定时器使能位 (1) 1 = 打开看门狗定时器 0 = 关闭看门狗定时器 注 x = 未知 1: 当使能 WDTEN 配置位时该位不起作用。 表 24-2: 名称 RCON WDTCON 图注: 看门狗定时器寄存器汇总 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位值所在页 IPEN — — RI TO PD POR BOR 60 — — — — — — — SWDTEN 60 — = 未用,读为 0。看门狗定时器不使用阴影单元。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 353 页 PIC18F97J60 系列 24.3 图 24-2: 片上稳压器 所有的 PIC18F97J60 系列器件使用标称值为 2.5V 的电 压 为 其 内 核 数 字 逻 辑 供 电。对 于需 要 工 作 在更 高 电 压(如典型电压值为 3.3V)下的应用,PIC18F97J60 系 列的所有器件均包含一个片上稳压器,可使器件内核逻 辑运行在 VDD 下。 使能稳压器(ENVREG 连到 VDD): 3.3V PIC18FXXJ6X VDD ENVREG ENVREG 引脚控制该稳压器。把 VDD 连到该引脚将使能 稳压器,然后稳压后的电压通过其他VDD 引脚向内核供 电。当使能稳压器时,必须将一个低 ESR 滤波电容连接 到 VDDCORE/VCAP 引脚 (图 24-2),这有利于保持稳压 器的稳定性。第 27.3 节 “直流特性: PIC18F97J60 系 列 (工业级)”中提供了该滤波电容的推荐值。 如果 ENVREG 与 VSS 相连,则禁止稳压器。在这种情 况 下,必 须 使 用 独 立 的 2.5V 标 称 值 的 电 源 通过 VDDCORE/VCAP 引脚为器件的内核逻辑供电,从而将I/O 引脚 驱 动 为 一 个 较 高 的 电 平,通 常 为 3.3V。另 外, VDDCORE/VCAP 和 VDD 引脚可以连在一起,使器件工作 在较低的标称电压下。请参见图 24-2 了解可能的配置。 24.3.1 片上稳压器连接 VDDCORE/VCAP CF 禁止稳压器(ENVREG 接地): (VDD > VDDCORE) 2.5V(1) 3.3V(1) PIC18FXXJ6X VDD 片上稳压器和 BOR 当使能片上稳压器时,PIC18F97J60 系列器件也会有一 个简单的欠压保护功能。如果向稳压器提供的电压不足 以维持一个稳定的电平,那么稳压器复位电路将产生欠 压复位。 BOR 标志位 (RCON<0>)会捕捉该事件。 第 4.4 节 “欠压复位 (BOR)”和第 4.4.1 节 “检测 BOR”详细描述了 BOR 的工作原理。第 27.1 节 “直 流特性: 供电电压, PIC18F97J60 系列(工业级)”中 指定了欠压复位电压值。 24.3.2 VSS ENVREG VDDCORE/VCAP VSS (VDD = VDDCORE) 2.5V(1) 上电要求 PIC18FXXJ6X VDD 片上稳压器是为了满足器件的上电要求而设计的。如果 应用不使用稳压器,那就必须严格遵守上电条件。在上 电时, VDDCORE 决不能比 VDD 高出 0.3V 以上。 ENVREG VDDCORE/VCAP VSS 注 DS39762A_CN 第 354 页 超前信息 1: 这些为典型的工作电压。请参见第 27.1 节 “直流特性:供电电压”了解 VDD 和 VDDCORE 的全部工作电压范围。 2006 Microchip Technology Inc. PIC18F97J60 系列 24.4 双速启动 在其他功耗管理模式下,不使用双速启动。器件将使用 当前选定的时钟源直到主时钟源可用为止。 IESO 位的 设置被忽略。 双速启动功能 允许单片 机在主 时钟源稳 定之前使用 INTRC 振荡器作为时钟源,从而帮助器件最大限度地缩 短从振荡器起振到代码执行之间的延时。通过将 IESO 配置位置 1 可使能该功能。 24.4.1 当在双速启动模式中使用 INTRC 振荡器时,器件仍将 遵守进入功耗管理模式的正常指令顺序,包括执行多条 SLEEP 指令 (见第 3.1.4 节 “多条 SLEEP 命令”)。 实际上,这意味着在 OST 超时前用户代码可以改变 SCS1:SCS0 位的设置或执行 SLEEP 指令。这就使应用 程序能短暂地唤醒器件,执行 “日常事务”,并在器件 开始使用主时钟源前返回休眠状态。 仅当主振荡器模式为 HS 或 HSPLL (基于晶振)时才 可使用双速启动。由于 EC 和 ECPLL 模式不需要 OST 起振延时,因此应禁止双速启动。 一旦使能双速启动,当器件复位或从休眠模式中被唤醒 时,在上电延时定时器发生超时后,器件将被配置成使 用内部振荡电路作为时钟源。这使得在主振荡器起振、 OST 运行的同时,代码开始执行。一旦 OST 超时,器 件就自动切换到 PRI_RUN 模式。 图 24-3: 使用双速启动时的注意事项 用户代码还能通过检查 OSTS 位 (OSCCON<3>)的 状态来确定主时钟源是否正在为系统提供时钟。如果该 位置 1,则表示主振荡器正在为系统提供时钟。否则, 表示当器件复位或从休眠模式被唤醒期间由内部振荡器 电路为系统提供时钟。 双速启动时钟转换的时序图 (从 INTRC 切换到 HSPLL) Q1 Q3 Q2 Q4 Q2 Q3 Q4 Q1 Q2 Q3 Q1 INTRC OSC1 TOST(1) TPLL(1) 1 PLL 时钟 输出 2 n-1 n 时钟 转换 CPU 时钟 外设 时钟 程序 计数器 PC 通过中断事件唤醒 注 PC + 4 PC + 2 PC + 6 OSTS 位置 1 1: TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 355 页 PIC18F97J60 系列 24.5 故障保护时钟监视器 故障保护时钟监视器 (FSCM)可使单片机在外部时钟 发生故障时,自动将系统时钟切换到内部振荡器电路以 保证器件能继续运行。将 FCMEN 配置位置 1 可使能 FSCM 功能。 当使能 FSCM 时, INTRC 振荡器将一直保持运行以监 视外设时钟,并且在外设时钟发生故障时作为备用时 钟。时钟监视 (如图 24-4 所示)通过创建一个采样时 钟信号实现,该信号为 INTRC 输出的 64 分频。这样就 使得 FSCM 采样时钟脉冲之间有充足的时间间隔,从而 保证在此期间至少有一个外设时钟沿出现。外设时钟和 采样时钟作为时钟监视锁存器 (CM)的输入。 CM 在 器件时钟源的下降沿被置 1,在采样时钟的上升沿被清 零。 图 24-4: 时钟监视器 锁存器(CM) (边沿触发) INTRC 源 (32 µs) S FSCM 只能检测出主时钟源或辅助时钟源的故障。如果 内部振荡器电路发生故障,将不会被检测到,当然也不 可能采取任何措施。 24.5.1 FSCM 和 WDT 均以 INTRC 振荡器作为时钟源。由于 WDT 使用独立的分频器和计数器,使能 FSCM 时,禁 止 WDT 对 INTRC 振荡器的运行没有任何影响。 Q 24.5.2 ÷ 64 C FSCM 和看门狗定时器 如前所述,当发生时钟故障时,时钟源将切换到 INTRC 时钟源。这可能意味着代码执行速度会发生很大变化。 如果使能 WDT 的时候使用的是小预分频值,时钟速度 的下降将引起 WDT 超时,随后使器件复位。由于这个 原因,故障保护事件也会使 WDT 和后分频器复位,使 WDT 从执行速度发生变化那一刻起开始重新计数,从 而避免发生错误超时。 FSCM 框图 外设 时钟 切换过程中,对于时序要求较高的应用,内部振荡器电 路的后分频频率可能不够稳定。在这些情况下,最好选 择另一种时钟配置并进入其他功耗管理模式。可以尝试 部分恢复或执行安全的关闭。更多详细信息,请参见 第 3.1.4 节“多条 SLEEP 命令”和第 24.4.1 节“使 用双速启动时的注意事项”。 Q 退出故障保护运行模式 器件复位或进入功耗管理模式均可结束故障保护状态。 发生复位时,控制器启动在配置寄存器 2H 中指定的主 时钟源 (伴有如 OST 或 PLL 定时器等所需的起振延 时)。INTRC 振荡器将在主时钟源就绪之前提供系统时 钟 (类似于双速启动)。当主时钟源可用时,系统时钟 源将切换为主时钟 (OSCCON 寄存器中的 OSTS 位将 置 1,表明当前使用的是主时钟源)。然后,故障保护时 钟监视器恢复对外设时钟的监视。 488 Hz (2.048 ms) 检测到 时钟故障 在采样时钟的下降沿检测外部时钟故障。如果在出现采 样时钟的下降沿时, CM 仍置 1,就表示检测到外部时 钟故障 (图 24-5)。这将引发以下事件: 在启动期间,主时钟源可能永远不能就绪。在这种情况 下,器件运行将以INTRC振荡器作为时钟源。OSCCON 寄存器将保持复位状态直到进入功耗管理模式为止。 • 通过将 OSCFIF (PIR2<7>)置 1,由 FSCM 产生 振荡器故障中断; • 器件时钟源切换为内部振荡器电路 (OSCCON 不 会被更新,因此无法显示当前时钟源——这就是故 障保护状态);并且 • WDT 复位。 DS39762A_CN 第 356 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 24-5: FSCM 时序图 采样时钟 振荡器 故障 器件 时钟 输出 CM 输出 (Q) 检测到 故障 OSCFIF CM 检测 CM 检测 注: 24.5.3 通常,器件时钟的频率比采样时钟频率高很多。本例中选择了相对频率以便说明。 功耗管理模式下的 FSCM 中断 进入功耗管理模式时,时钟多路开关选择由 OSCCON 寄存器选定的时钟源。在该模式下将恢复对功耗管理时 钟源的故障保护监视。 如果在功耗管理运行模式下发生了振荡器故障,接下来 的操作取决于是否允许了振荡器故障中断。如果允许了 (OSCFIF = 1),代码执行将以 INTRC 复用器作为时钟 源,并且不会自动转换回发生故障的时钟源。 对于 HS 或 HSPLL 模式,情况会有所不同。由于这类 振荡器需要的起振时间可能比FSCM采样时钟的周期长 很多,因此可能会检测到假的时钟故障。为了避免这种 情况,在此类模式中,内部振荡器电路会被自动配置为 器件时钟并一直工作到主时钟稳定下来为止 (OST 和 PLL 定时器发生超时)。这与双速启动模式相同。一旦 主时钟稳定下来,INTRC 就将重新作为 FSCM 时钟源。 注: 如果禁止了该中断,处于空闲模式之后产生的中断将使 CPU 开始执行指令,同时以 INTRC 源作为系统时钟源。 24.5.4 CM 检测 POR 或从休眠中唤醒 FSCM 在器件退出上电复位(POR)或低功耗休眠模式 后开始检测振荡器故障。当器件主时钟为 EC 或 INTRC 时,监视会在这些事件发生后立即开始。 2006 Microchip Technology Inc. 用于防止在 POR 或从休眠状态唤醒时发生 错误中断的逻辑电路,同样也将阻止随后 对振荡器故障的检测。通过监视 OSTS 位, 并使用定时程序来确定振荡器起振时间是 否过长,可避免这个问题。即使如此,在 检测到振荡器故障时也不会将振荡器故障 中断标志位置 1。 正如第 24.4.1 节 “使用双速启动时的注意事项”中所 述,在等待系统主时钟稳定的过程中,可以选择另一种 时钟配置和另一种功耗管理模式。当选择了新的功耗管 理模式时,主时钟将被禁止。 超前信息 DS39762A_CN 第 357 页 PIC18F97J60 系列 24.6 24.7 程序校验和代码保护 对于 PIC18F97J60 系列中的所有器件,片上程序存储 空间被视为一个统一的存储区。配置位 CP0 控制该存储 区的代码保护。该位阻止外部对程序存储空间的读写。 但对正常的代码执行没有直接影响。 24.6.1 配置寄存器保护 有两种方法保护配置寄存器使其免遭破坏性的改写或读 取。主要的保护方式是配置位的一次写入功能,该功能 阻止对在上电周期内完成编程的位再次进行配置。要阻 止不可预见的事件,由于电池故障 (如 ESD 事件)产 生的配置位更改将导致奇偶校验错误并触发器件复位。 配置寄存器的数据来自于程序存储器中的闪存配置字。 当 CP0 位置 1 时,也将保护器件配置的源数据。 在线串行编程 PIC18F97J60 系列单片机可以在最终的应用电路中进 行串行编程。只需要 5 根线即可实现这一操作,其中时 钟线、数据线各一根,其余 3 根分别是电源线、接地线 和编程电压线。这允许用户在制造电路板时使用未编程 器件,仅在产品交付之前才对单片机进行编程,从而可 以使用最新版本的固件或者定制固件。 24.8 在线调试器 将 DEBUG 配置位编程为 0,可使能在线调试功能。该 功能允许使用 MPLAB® IDE 进行一些简单的调试。当使 能了单片机的这项功能时,有些资源就不再是通用的 了。表 24-3 给出了后台调试器所需的资源。 表 24-3: DS39762A_CN 第 358 页 调试器资源 I/O 引脚: RB6 和 RB7 堆栈: 2级 程序存储器: 512 字节 数据存储器: 10 字节 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 25.0 指令集汇总 立即数操作类指令使用以下操作数: PIC18F97J60 系列器件具有一个含有 75 条 PIC18 内核 指令的标准指令集,和一个含有优化递归或软件堆栈代 码的 8 条新指令的扩展指令集。本章后面的部分将讨论 扩展指令集。 25.1 • 要装入文件寄存器中的立即数 (由 “k”指定) • 要装入立即数的 FSR 寄存器 (由 “f”指定) • 不需要操作数 (由 “—”指定) 控制类指令可以使用以下操作数: • 程序存储器地址 (由 “n”指定) 标准指令集 • CALL 或 RETURN 指令的模式 (由 “s”指定) 标准的 PIC18 指令集与以前的 PIC® 指令集相比,添加 了很多增强功能,并保持了易于从其他 PIC 指令集移植 的特点。大部分指令为单字指令(16 位),只有 4 条指 令是双字指令。 每个单字指令都是一个 16 位字,由操作码 (指明指令 类型)和一个或多个操作数 (指定指令操作)组成。 整个指令集具有高度的正交性,可以分为以下 4 种基本 类型: • 表读和表写指令的模式 (由 “m”指定) • 不需要操作数 (由 “—”指定) 除了 4 条双字指令外,所有的指令都是单字指令。双字 指令将所需的信息保存在 32 位中。第二个字的高 4 位 都是 1。如果第二个字作为一条指令执行,它会执行NOP 指令。 • 位操作类指令 除非条件测试结果为 true 或者指令执行改变了程序计数 器的值,否则执行所有的单字指令都只需要一个指令周 期。对于上述两种特殊情况,指令执行需要两个指令周 期,在第二个指令周期中执行一条 NOP 指令。 • 立即数操作类指令 执行双字指令需要两个指令周期。 • 控制操作类指令 每个指令周期由 4 个振荡器周期组成。因此,如果振荡 器频率为 4 MHz,正常的指令执行时间为 1 µs。如果条 件测试结果为 true 或指令执行改变了程序计数器的值, 则该指令的执行时间为 2 µs。双字跳转指令 (如果为 true)的执行则需要 3 µs。 • 字节操作类指令 表 25-2 为 PIC18 指令集汇总,列出了上述四类指令。 表 25-1 给出了操作码字段的说明。 大部分字节操作类的指令都含有三种操作数: 1. 2. 3. 文件寄存器 (由 “f”指定) 保存结果的目标寄存器 (由 “d”指定) 被访问存储器 (由 “a”指定) 图 25-1 给出了指令的几种通用格式。所有示例均使用 “nnh”来表示十六进制数。 文件寄存器标识符 “f”指定了指令将会使用哪一个文 件寄存器。目标寄存器标识符 “d”指定了操作结果的 存放位置。如果 “d”为 0,操作结果存入 WREG 寄存 器中。如果 “d”为 1,操作结果存入指令指定的文件 寄存器中。 指令集汇总(见表25-2)列出了可被Microchip MPASMTM 汇编器识别的标准指令。 第 25.1.1 节“标准指令集”中对每个指令进行了介绍。 所有位操作类指令都含有三种操作数: 1. 2. 3. 文件寄存器 (由 “f”指定) 文件寄存器中的位 (由 “b”指定) 被访问存储器 (由 “a”指定) 位域标识符 “b”选择操作所影响的位的编号,而文件 寄存器标识符 “f”则代表这些位所在的寄存器编号。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 359 页 PIC18F97J60 系列 表 25-1: 操作码字段说明 字段 说明 a 快速操作 RAM 位: a = 0:快速操作 RAM 内的 RAM 单元 (BSR 寄存器被忽略) a = 1:由 BSR 寄存器指定 RAM 存储区 bbb 8 位文件寄存器内的位地址 (0 到 7)。 BSR 存储区选择寄存器。用于选择当前的 RAM 存储区。 C、 DC、 Z、 OV 和 N d ALU 状态位:进位、半进位、全零、溢出和负标志位。 目标寄存器选择位: d = 0:结果保存至 WREG 寄存器 d = 1:结果保存至文件寄存器 f dest 目标寄存器:可以是 WREG 寄存器或指定的文件寄存器地址。 f 8 位文件寄存器地址 (00h 到 FFh),或 2 位 FSR 标识符 (0h 到 3h)。 fs 12 位文件寄存器地址 (000h 到 FFFh)。这是源地址。 fd 12 位文件寄存器地址 (000h 到 FFFh)。这是目标地址。 GIE 全局中断允许位。 k 立即数、常数或者标号 (可能是 8 位、 12 位或 20 位的值)。 Label 标号名称。 mm 表读和表写指令的 TBLPTR 寄存器模式。只与表读和表写指令一起使用: * 不改变寄存器 (如用于表读和表写的 TBLPTR) *+ 后增寄存器 (如用于表读和表写的 TBLPTR) *- 后减寄存器 (如用于表读和表写的 TBLPTR) 预增寄存器 (如用于表读和表写的 TBLPTR) +* n 相对跳转指令的相对地址 (2 的补码),或 Call/Branch 和 Return 指令的直接地址。 PC 程序计数器。 PCL 程序计数器低字节。 PCH 程序计数器高字节。 PCLATH 程序计数器高字节锁存器。 PCLATU 程序计数器最高字节锁存器。 PD 掉电位。 PRODH 乘积的高字节。 PRODL 乘积的低字节。 s 快速调用 / 返回模式选择位: s = 0:不对影子寄存器进行更新,也不用影子寄存器的内容更新其他寄存器 s = 1:将寄存器的值存入影子寄存器或把影子寄存器中的值载入寄存器 (快速模式) TBLPTR 21 位表指针 (指向程序存储器地址)。 TABLAT 8 位表锁存器。 TO 超时溢出位。 TOS 栈顶。 u 未使用或未改变。 WDT 看门狗定时器。 WREG 工作寄存器 (累加器)。 x 无关位 (0 或 1)。汇编器将产生 x = 0 的代码。为了与所有的 Microchip 软件工具兼容,建议使用这种格式。 zs 对寄存器 (源)进行间接寻址的 7 位偏移量。 对寄存器 (目标)进行间接寻址的 7 位偏移量。 zd { } 可选参数。 [text] 表示变址地址。 (text) text 的内容。 [expr]<n> 表示由指针 expr 指定的寄存器中的位 n。 → 赋值。 < > 寄存器位域。 ∈ 表示属于某个集合。 斜体文字 用户定义项 (字体为 Courier)。 DS39762A_CN 第 360 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 25-1: 指令的通用格式 面向字节的文件寄存器操作 15 10 9 8 7 d 操作码 指令示例 0 a f(寄存器地址) ADDWF MYREG, W, B d = 0 表示结果存入 WREG 寄存器 d = 1 表示结果存入文件寄存器(f) a = 0 强制使用快速操作存储区 a = 1 根据 BSR 选择存储区 f = 8 位文件寄存器地址 字节到字节的传送操作(双字) 15 12 11 0 f(源寄存器地址) 操作码 15 12 11 MOVFF MYREG1, MYREG2 0 f(目标寄存器地址) 1111 f = 12 位文件寄存器地址 面向位的文件寄存器操作 15 12 11 9 8 7 0 b(位号) a 操作码 f(寄存器地址) BSF MYREG, bit, B b = 占 3 位,表示文件寄存器(f)中位的位置 a = 0 强制使用快速操作存储区 a = 1 根据 BSR 选择存储区 f = 8 位文件寄存器地址 立即数操作 15 8 7 0 k(立即数) 操作码 MOVLW 7Fh k = 8 位立即值 控制操作 CALL、GOTO 和跳转类操作指令 15 8 7 15 0 n<7:0>(立即数) 操作码 12 11 GOTO Label 0 n<19:8>(立即数) 1111 k = 20 位立即数的值 15 8 7 操作码 15 S 0 n<7:0>(立即数) 12 11 CALL MYFUNC 0 n<19:8>(立即数) 1111 S = 快速位 15 11 10 15 0 n<10:0>(立即数) 操作码 8 7 操作码 2006 Microchip Technology Inc. BRA MYFUNC 0 n<7:0>(立即数) 超前信息 BC MYFUNC DS39762A_CN 第 361 页 PIC18F97J60 系列 表 25-2: PIC18F97J60 系列指令集 助记符, 操作数 说明 周期 WREG 与 f 相加 WREG 与 f 带进位相加 WREG 和 f 作与运算 将 f 清零 对 f 取反 将 f 与 WREG 作比较,相等则跳过 将 f 与 WREG 作比较,大于则跳过 将 f 与 WREG 作比较,小于则跳过 f减1 f 减 1,为 0 则跳过 f 减 1,非 0 则跳过 f加1 f 加 1,为 0 则跳过 f 加 1,非 0 则跳过 WREG 和 f 作或运算 移动 f fs (源)地址装入第一个字 fd (目标)地址装入第二个字 将 WREG 移入 f WREG 乘以 f 对 f 取补 f 带进位循环左移 f 循环左移 (不带进位) f 带进位循环右移 f 循环右移 (不带进位) 将 f 的内容置为全 1 WREG 减去 f (带借位) f 减去 WREG f 减去 WREG (带借位) 将 f 中的两个半字节进行交换 测试 f,为 0 则跳过 WREG 和 f 作异或运算 1 1 1 1 1 1 (2 或 3) 1 (2 或 3) 1 (2 或 3) 1 1 (2 或 3) 1 (2 或 3) 1 1 (2 或 3) 1 (2 或 3) 1 1 2 16 位指令字 MSb LSb 受影响的 状态位 注 面向字节的操作类指令 ADDWF ADDWFC ANDWF CLRF COMF CPFSEQ CPFSGT CPFSLT DECF DECFSZ DCFSNZ INCF INCFSZ INFSNZ IORWF MOVF MOVFF 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 MOVWF MULWF NEGF RLCF RLNCF RRCF RRNCF SETF SUBFWB SUBWF SUBWFB SWAPF TSTFSZ XORWF 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 注 0010 0010 0001 0110 0001 0110 0110 0110 0000 0010 0100 0010 0011 0100 0001 0101 1100 1111 0110 1 0000 1 0110 1 0011 1 0100 1 0011 1 0100 1 0110 1 0101 1 0101 1 0101 1 0011 1 1 (2 或 3) 0110 0001 1 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: PORT 寄存器的值随端口状态的变化而不断修改 (例如, MOVF PORTB, 1, 0),修改时使用的值是引脚上的当 前值。例如,如果将一引脚配置为输入,其对应数据锁存器中的值将为 1,但此时若有外部器件将该引脚驱动为低 电平,则被写回数据锁存器的数据值将是 0。 2: 当对 TMR0 寄存器执行该指令 (并且 d = 1)时,如果已为其分配了预分频器,则将该预分频器清零。 3: 如果程序计数器 (PC)被修改或者条件检测为 true,则该指令需要两个周期。第二个周期执行一条 NOP 指令。 4: 某些指令是双字指令。除非指令的第一个字获取这 16 位中包含的信息,否则第二个字将作为 NOP 指令执行。这将 确保所有程序存储器单元内存储的都是合法的指令。 DS39762A_CN 第 362 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 25-2: PIC18F97J60 系列指令集 (续) 助记符, 操作数 说明 周期 16 位指令字 MSb 受影响的 状态位 LSb 注 面向位的操作类指令 BCF BSF BTFSC BTFSS BTG f, b, a f, b, a f, b, a f, b, a f, b, a 将 f 寄存器中的某位清零 将 f 寄存器中的某位置 1 测试 f 中的某位,为 0 则跳过 测试 f 中的某位,为 1 则跳过 将 f 中的某位取反 1 1 1 (2 或 3) 1 (2 或 3) 1 1001 1000 1011 1010 0111 bbba bbba bbba bbba bbba ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff 无 无 无 无 无 n n n n n n n n n n, s 1 (2) 1 (2) 1 (2) 1 (2) 1 (2) 1 (2) 1 (2) 2 1 (2) 2 0010 0110 0011 0111 0101 0001 0100 0nnn 0000 110s kkkk 0000 0000 1111 kkkk 0000 xxxx 0000 0000 1nnn 0000 0000 nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn kkkk kkkk 0000 0000 kkkk kkkk 0000 xxxx 0000 0000 nnnn 1111 0001 nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn nnnn kkkk kkkk 0100 0111 kkkk kkkk 0000 xxxx 0110 0101 nnnn 1111 000s 无 无 无 无 无 无 无 无 无 无 1 1 1 1 2 1 2 1110 1110 1110 1110 1110 1110 1110 1101 1110 1110 1111 0000 0000 1110 1111 0000 1111 0000 0000 1101 0000 0000 2 2 1 0000 0000 0000 1100 0000 0000 kkkk 0001 0000 kkkk 无 001s 无 0011 TO, PD 1, 2 1, 2 3, 4 3, 4 1, 2 控制类指令 BC BN BNC BNN BNOV BNZ BOV BRA BZ CALL NOP NOP POP PUSH RCALL RESET RETFIE — — — — n s 进位则跳转 为负则跳转 无进位则跳转 不为负则跳转 不溢出则跳转 不为零则跳转 溢出则跳转 无条件跳转 为零则跳转 调用子程序 第一个字 第二个字 将看门狗定时器清零 对 WREG 进行十进制调整 跳转到地址 第一个字 第二个字 空操作 空操作 返回堆栈栈顶 (TOS)出栈 返回堆栈栈顶 (TOS)进栈 相对调用 用软件使器件复位 中断返回允许 RETLW RETURN SLEEP k s — 返回时将立即数送入 WREG 从子程序返回 进入待机模式 CLRWDT — DAW — GOTO n 注 1 1 2 TO, PD C 无 无 无 无 无 无 全部 GIE/GIEH, PEIE/GIEL 4 1: PORT 寄存器的值随端口状态的变化而不断修改 (例如, MOVF PORTB, 1, 0),修改时使用的值是引脚上的当 前值。例如,如果将一引脚配置为输入,其对应数据锁存器中的值将为 1,但此时若有外部器件将该引脚驱动为低 电平,则被写回数据锁存器的数据值将是 0。 2: 当对 TMR0 寄存器执行该指令 (并且 d = 1)时,如果已为其分配了预分频器,则将该预分频器清零。 3: 如果程序计数器 (PC)被修改或者条件检测为 true,则该指令需要两个周期。第二个周期执行一条 NOP 指令。 4: 某些指令是双字指令。除非指令的第一个字获取这 16 位中包含的信息,否则第二个字将作为 NOP 指令执行。这将 确保所有程序存储器单元内存储的都是合法的指令。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 363 页 PIC18F97J60 系列 表 25-2: PIC18F97J60 系列指令集 (续) 助记符, 操作数 说明 周期 16 位指令字 MSb 受影响的 状态位 LSb 注 立即数操作类指令 ADDLW ANDLW IORLW LFSR k k k f, k MOVLB MOVLW MULLW RETLW SUBLW XORLW k k k k k k WREG 与立即数相加 WREG 和立即数进行与运算 WREG 和立即数进行或运算 移动立即数 (12 位)第二个字到 FSR (f)第一个字 将立即数移入 BSR<3:0> 将立即数移入 WREG WREG 和立即数相乘 返回时将立即数送入 WREG 立即数减去 WREG WREG 和立即数进行异或运算 1 1 1 2 1 1 1 2 1 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 无 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000 1001 1010 1011 1100 1101 1110 1111 无 无 无 无 无 无 无 无 无 无 无 无 C, DC, Z, OV, N Z, N 数据存储器 ↔ 程序存储器操作 TBLRD* TBLRD*+ TBLRD*TBLRD+* TBLWT* TBLWT*+ TBLWT*TBLWT+* 注 表读 后增表读 后减表读 预增表读 表写 后增表写 后减表写 预增表写 2 2 1: PORT 寄存器的值随端口状态的变化而不断修改 (例如, MOVF PORTB, 1, 0),修改时使用的值是引脚上的当 前值。例如,如果将一引脚配置为输入,其对应数据锁存器中的值将为 1,但此时若有外部器件将该引脚驱动为低 电平,则被写回数据锁存器的数据值将是 0。 2: 当对 TMR0 寄存器执行该指令 (并且 d = 1)时,如果已为其分配了预分频器,则将该预分频器清零。 3: 如果程序计数器 (PC)被修改或者条件检测为 true,则该指令需要两个周期。第二个周期执行一条 NOP 指令。 4: 某些指令是双字指令。除非指令的第一个字获取这 16 位中包含的信息,否则第二个字将作为 NOP 指令执行。这将 确保所有程序存储器单元内存储的都是合法的指令。 DS39762A_CN 第 364 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 25.1.1 标准指令集 ADDLW W 与立即数相加 ADDWF W 与 f 寄存器相加 语法: ADDLW 语法: ADDWF 操作数: 0 ≤ k ≤ 255 操作数: 操作: (W) + k → W 受影响的状态位: N、 OV、 C、 DC 和 Z 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (W) + (f) → dest 受影响的状态位: N、 OV、 C、 DC 和 Z 机器码: 0000 k 1111 kkkk kkkk 将 W 寄存器的内容与 8 位立即数 k 相 加,结果存储在 W 寄存器中。 机器码: 指令字数: 1 说明: 指令周期数: 1 说明: Q 周期操作: Q1 译码 示例: Q2 Q3 Q4 读立即数 k 处理数据 写入 W ADDLW 0010 ffff ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 W REG 执行指令后 W REG 注: 01da 将 W 的内容与 f 寄存器的内容相加。如 果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 15h 执行指令前 W = 10h 执行指令后 W = 25h f {,d {,a}} ADDWF = = 17h 0C2h = = 0D9h 0C2h REG, 0, 0 所有的 PIC18 指令都可能在其指令助记符之前使用可选的标号参数,用于符号寻址。如果使用了标号,那么 指令语法将变为:{label} 指令参数。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 365 页 PIC18F97J60 系列 ADDWFC W 与 f 带进位相加 ANDLW 立即数和 W 寄存器作逻辑与运算 语法: ADDWFC 语法: ANDLW 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作数: 0 ≤ k ≤ 255 操作: (W) .AND. k → W 受影响的状态位: N和Z f {,d {,a}} 操作: (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 Q 周期操作: Q1 译码 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 进位标志位 REG W 执行指令后 进位标志位 REG W ADDWFC 0000 k 1011 kkkk kkkk 说明: 将 W 的内容与 8 位立即数 k 进行逻辑与 运算。结果存储在 W 寄存器中。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q2 Q3 Q4 读立即数 k 处理数据 写入 W 示例: 执行指令前 W 执行指令后 W ANDLW = A3h = 03h 05Fh REG, 0, 1 = 1 = 02h = 4Dh = 0 = 02h = 50h DS39762A_CN 第 366 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 ANDWF 将 W 和 f 作逻辑与运算 BC 进位则跳转 语法: ANDWF 语法: BC 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作数: -128 ≤ n ≤ 127 操作: 如果进位标志位为 1 (PC) + 2 + 2n → PC 无 f {,d {,a}} 操作: (W) .AND.(f) → dest 受影响的状态位: 受影响的状态位: N和Z 机器码: 机器码: 0001 01da ffff ffff 1110 说明: 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 W REG 执行指令后 W REG 指令字数: 1 指令周期数: 1(2) Q 周期操作: 如果跳转: Q1 ANDWF = = 17h C2h = = 02h C2h 示例: REG, 0, 0 2006 Microchip Technology Inc. nnnn Q2 Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 译码 Q3 nnnn “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 如果不跳转: Q1 Q2 0010 如果进位标志位为 1,程序将跳转。 将 W 的内容与寄存器 f 的内容进行逻辑 与运算。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 说明: n 超前信息 Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC = 执行指令后 如果进位标志位 = PC = 如果进位标志位 = PC = BC 5 地址 (HERE) 1; 地址 (HERE + 12) 0; 地址 (HERE + 2) DS39762A_CN 第 367 页 PIC18F97J60 系列 BCF 将 f 寄存器中的某位清零 BN 为负则跳转 语法: BCF 语法: BN 操作数: 0 ≤ f ≤ 255 0≤b≤7 a ∈ [0,1] 操作数: -128 ≤ n ≤ 127 操作: 如果负标志位为 1 (PC) + 2 + 2n → PC 无 f, b {,a} 操作: 0 → f<b> 受影响的状态位: 受影响的状态位: 无 机器码: 机器码: 1001 bbba ffff ffff 1110 说明: 指令字数: 指令周期数: Q 周期操作: Q1 译码 示例: 1 指令字数: 1 指令周期数: 1(2) Q 周期操作: 如果跳转: Q1 1 Q2 Q3 Q4 读寄存器 f 处理数据 写寄存器 f BCF FLAG_REG, 7, 0 nnnn Q2 Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 如果不跳转: Q1 译码 示例: 执行指令前 FLAG_REG = C7h 执行指令后 FLAG_REG = 47h DS39762A_CN 第 368 页 nnnn “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 0110 如果负标志位为 1,程序将跳转。 将寄存器 f 中的位 b 清零。 说明: n Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC 执行指令后 如果负标志位 PC 如果负标志位 PC 超前信息 BN Jump = 地址 (HERE) = = = = 1; 地址 (Jump) 0; 地址 (HERE + 2) 2006 Microchip Technology Inc. PIC18F97J60 系列 BNC 无进位则跳转 BNN 不为负则跳转 语法: BNC 语法: BNN 操作数: -128 ≤ n ≤ 127 操作数: -128 ≤ n ≤ 127 操作: 如果进位标志位为 0 (PC) + 2 + 2n → PC 操作: 如果负标志位为 0 (PC) + 2 + 2n → PC 受影响的状态位: 无 受影响的状态位: 无 机器码: n 1110 说明: 0011 nnnn nnnn 如果进位标志位为 0,程序将跳转。 机器码: 1110 说明: 1 指令字数: 1 指令周期数: 1(2) 指令周期数: 1(2) Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 如果不跳转: Q1 译码 示例: Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC = 执行指令后 如果进位标志位 = PC = 如果进位标志位 = PC = BNC Jump Q 周期操作: 如果跳转: Q1 nnnn Q2 Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 如果不跳转: Q1 译码 示例: Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC 执行指令后 如果负标志位 PC 如果负标志位 PC 地址 (HERE) 0; 地址 (Jump) 1; 地址 (HERE + 2) 2006 Microchip Technology Inc. nnnn “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 指令字数: Q2 0111 如果负标志位为 0,程序将跳转。 “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 Q 周期操作: 如果跳转: Q1 n 超前信息 BNN Jump = 地址 (HERE) = = = = 0; 地址 (Jump) 1; 地址 (HERE + 2) DS39762A_CN 第 369 页 PIC18F97J60 系列 BNOV 不溢出则跳转 BNZ 不为零则跳转 语法: BNOV 语法: BNZ 操作数: -128 ≤ n ≤ 127 操作数: -128 ≤ n ≤ 127 操作: 如果溢出标志位为 0 (PC) + 2 + 2n → PC 操作: 如果全零标志位为 0 (PC) + 2 + 2n → PC 受影响的状态位: 无 受影响的状态位: 无 机器码: n 1110 说明: 0101 nnnn nnnn 如果溢出标志位为 0,程序将跳转。 机器码: 1110 说明: 1 指令字数: 1 指令周期数: 1(2) 指令周期数: 1(2) Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 如果不跳转: Q1 译码 示例: Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC = 执行指令后 如果溢出标志位 = PC = 如果溢出标志位 = PC = DS39762A_CN 第 370 页 BNOV Jump nnnn nnnn “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 指令字数: Q2 0001 如果全零标志位为 0,程序将跳转。 “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 Q 周期操作: 如果跳转: Q1 n Q 周期操作: 如果跳转: Q1 Q2 Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 如果不跳转: Q1 译码 示例: Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC = 执行指令后 如果全零标志位 = PC = 如果全零标志位 = PC = 地址 (HERE) 0; 地址 (Jump) 1; 地址 (HERE + 2) 超前信息 BNZ Jump 地址 (HERE) 0; 地址 (Jump) 1; 地址 (HERE + 2) 2006 Microchip Technology Inc. PIC18F97J60 系列 BRA 无条件跳转 BSF 将 f 寄存器中的某位置 1 语法: BRA 语法: BSF 操作数: -1024 ≤ n ≤ 1023 操作数: 操作: (PC) + 2 + 2n → PC 受影响的状态位: 无 0 ≤ f ≤ 255 0≤b≤7 a ∈ [0,1] 操作: 1 → f<b> 受影响的状态位: 无 机器码: n 1101 0nnn nnnn nnnn “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 说明: 指令字数: 1 指令周期数: 2 机器码: 1000 Q2 Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 示例: 执行指令前 PC 执行指令后 PC HERE = BRA Jump 地址 (HERE) ffff ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 = bbba 将寄存器 f 的位 b 置 1。 说明: Q 周期操作: Q1 f, b {,a} Q2 Q3 Q4 读寄存器 f 处理数据 写寄存器 f 地址 (Jump) 示例: BSF 执行指令前 FLAG_REG 执行指令后 FLAG_REG 2006 Microchip Technology Inc. 超前信息 FLAG_REG, 7, 1 = 0Ah = 8Ah DS39762A_CN 第 371 页 PIC18F97J60 系列 BTFSC 测试寄存器中的位,为 0 则跳过 BTFSS 测试寄存器中的位,为 1 则跳过 语法: BTFSC f, b {,a} 语法: BTFSS f, b {,a} 操作数: 0 ≤ f ≤ 255 0≤b≤7 a ∈ [0,1] 操作数: 0 ≤ f ≤ 255 0≤b<7 a ∈ [0,1] 操作: 如果 (f<b>) = 0,则跳过 操作: 如果 (f<b>) = 1,则跳过 受影响的状态位: 无 受影响的状态位: 无 机器码: 1011 bbba ffff 如果寄存器 f 的位 b 为 0,则跳过下一条 指令。即在 b 位为 0 时,丢弃下一条指令 (执行当前指令期间取的指令)转而执行 一条 NOP 指令,使该指令变成双周期指 令。 说明: bbba ffff ffff 如果寄存器 f 的位 b 为 1,则跳过下一条 指令。即在 b 位为 1 时,丢弃下一条指令 (执行当前指令期间取的指令)转而执行 一条 NOP 指令,使该指令变成双周期指 令。 说明: 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 指令周期数: 1(2) 注: Q 周期操作: Q1 指令字数: 1 指令周期数: 1(2) 注: 如果跳过的指令后面跟有 2 字指 令,则执行 BTFSC 需要 3 个周 期。 Q2 Q3 Q4 读寄存器 f 处理数据 空操作 Q2 Q3 Q4 空操作 空操作 空操作 Q3 Q4 如果跳过: Q1 空操作 1010 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区 (默 认)。 1 译码 机器码: 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区 (默 认)。 指令字数: 如果跳过的指令后面跟有 2 字指令: Q1 Q2 示例: ffff Q 周期操作: Q1 译码 如果跳过: Q1 空操作 如果跳过的指令后面跟有 2 字指 令,则执行 BTFSS 需要 3 个周 期。 Q2 Q3 Q4 读寄存器 f 处理数据 空操作 Q2 Q3 Q4 空操作 空操作 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 HERE FALSE TRUE 执行指令前 PC = 执行指令后 如果 FLAG<1> = PC = 如果 FLAG<1> = PC = DS39762A_CN 第 372 页 BTFSC : : FLAG, 1, 0 示例: HERE FALSE TRUE 执行指令前 PC = 执行指令后 如果 FLAG<1> = PC = 如果 FLAG<1> = PC = 地址 (HERE) 0; 地址 (TRUE) 1; 地址 (FALSE) 超前信息 BTFSS : : FLAG, 1, 0 地址 (HERE) 0; 地址 (FALSE) 1; 地址 (TRUE) 2006 Microchip Technology Inc. PIC18F97J60 系列 BTG 将 f 中的某位取反 BOV 溢出则跳转 语法: BTG f, b {,a} 语法: BOV 操作数: 0 ≤ f ≤ 255 0≤b<7 a ∈ [0,1] 操作数: -128 ≤ n ≤ 127 操作: 如果溢出标志位为 1 (PC) + 2 + 2n → PC 无 操作: (f<b>) → f<b> 受影响的状态位: 受影响的状态位: 无 机器码: 机器码: 0111 bbba ffff ffff 1110 说明: 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 示例: Q2 Q3 Q4 读寄存器 f 处理数据 写寄存器 f BTG 执行指令前: PORTC = 执行指令后: PORTC = PORTC, 4, 0 指令字数: 1 指令周期数: 1(2) Q 周期操作: 如果跳转: Q1 nnnn Q2 Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 如果不跳转: Q1 译码 示例: Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC = 执行指令后 如果溢出标志位 = PC = 如果溢出标志位 = PC = 0111 0101 [75h] 0110 0101 [65h] 2006 Microchip Technology Inc. nnnn “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 0100 如果溢出标志位为 1,程序将跳转。 将数据存储单元 f 中的位 b 取反。 说明: n 超前信息 BOV Jump 地址 (HERE) 1; 地址 (Jump) 0; 地址 (HERE + 2) DS39762A_CN 第 373 页 PIC18F97J60 系列 BZ 为零则跳转 CALL 调用子程序 语法: BZ 语法: CALL k {,s} 操作数: -128 ≤ n ≤ 127 操作数: 操作: 如果全零标志位为 1 (PC) + 2 + 2n → PC 0 ≤ k ≤ 1048575 s ∈ [0,1] 操作: (PC) + 4 → TOS, k → PC<20:1>, 如果 s = 1 (W) → WS, (STATUS) → STATUSS, (BSR) → BSRS 受影响的状态位: 无 受影响的状态位: n 无 机器码: 1110 说明: 0000 nnnn nnnn 如果全零标志位为 1,程序将跳转。 “2n”(以二进制补码表示)与 PC 相 加。由于 PC 将递增以便取出下一条指 令,所以新地址将为 PC + 2 + 2n。该指 令为一条双周期指令。 指令字数: 1 机器码: 第一个字 (k<7:0>) 1110 第二个字 (k<19:8>) 1111 指令周期数: 1(2) 说明: 可在整个 2MB 的存储器范围内进行子程 序调用。首先,将返回地址 (PC + 4) 压入返回堆栈。如果 s = 1,还会将 W、 STATUS 和 BSR 寄存器的内容存入它们 各自的影子寄存器 WS、 STATUSS 和 BSRS。如果 s = 0,将不会进行任何更 新 (默认)。然后,将 20 位的值 k 装 入 PC<20:1>。 CALL 是一条双周期指 令。 指令字数: 2 指令周期数: 2 Q 周期操作: 如果跳转: Q1 Q2 Q3 Q4 译码 读立即数 n 处理数据 写入 PC 空操作 空操作 空操作 空操作 如果不跳转: Q1 译码 示例: Q2 Q3 Q4 读立即数 n 处理数据 空操作 HERE 执行指令前 PC = 执行指令后 如果全零标志位 = PC = 如果全零标志位 = PC = BZ Jump Q 周期操作: Q1 地址 (HERE) 1; 地址 (Jump) 0; 地址 (HERE + 2) kkkk0 kkkk8 Q2 Q3 Q4 读立即数 k<7:0> 将 PC 压入 堆栈 读立即数 k<19:8>, 写入 PC 空操作 空操作 空操作 空操作 示例: 超前信息 k7kkk kkkk 译码 执行指令前 PC = 执行指令后 PC = TOS = WS = BSRS = STATUSS = DS39762A_CN 第 374 页 110s k19kkk HERE CALL THERE,1 地址 (HERE) 地址 (THERE) 地址 (HERE + 4) W BSR STATUS 2006 Microchip Technology Inc. PIC18F97J60 系列 CLRF 将 f 清零 CLRWDT 将看门狗定时器清零 语法: CLRF 语法: CLRWDT 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作数: 无 000h → f 1→Z 操作: 操作: 受影响的状态位: Z 000h → WDT, 000h → WDT 后分频器, 1 → TO, 1 → PD 受影响的状态位: TO 和 PD 机器码: 0110 说明: ffff ffff 清零指定寄存器的内容。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 说明: CLRWDT指令复位看门狗定时器及其后分 频器。状态位 TO 和 PD 置 1。 指令字数: 1 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 指令周期数: 1 1 指令周期数: 1 Q 周期操作: Q1 译码 101a 机器码: 指令字数: 示例: f {,a} Q3 Q4 读寄存器 f 处理数据 写寄存器 f CLRF 执行指令前 FLAG_REG 执行指令后 FLAG_REG Q 周期操作: Q1 译码 示例: Q2 5Ah = 00h 2006 Microchip Technology Inc. 超前信息 0000 0000 0100 Q2 Q3 Q4 空操作 处理数据 空操作 CLRWDT 执行指令前 WDT 计数器 执行指令后 WDT 计数器 WDT 后分频器 TO PD FLAG_REG,1 = 0000 = ? = = = = 00h 0 1 1 DS39762A_CN 第 375 页 PIC18F97J60 系列 COMF 对 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 (默认)。 说明: CPFSEQ 比较 f 和 W,如果 f = W 则跳过 语法: CPFSEQ 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作: (f) – (W), 如果 (f) = (W),则跳过 (无符号比较) 受影响的状态位: 无 机器码: 0110 说明: 指令周期数: 1 译码 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 REG 执行指令后 REG W 指令周期数: Q2 COMF = 13h = = 13h ECh REG, 0, 0 ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 指令字数: Q 周期操作: Q1 ffff 如果 f = W,则所取的指令被丢弃并执行 一条 NOP 指令,使这个指令成为双周期 指令。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 1 001a 通过执行无符号的减法,将数据存储单 元 f 的内容与 W 的内容作比较。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 指令字数: f {,a} Q 周期操作: Q1 译码 如果跳过: Q1 空操作 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 1 1(2) 注: 如果跳过的指令后面跟有 2 字指 令,则执行 CPFSEQ 需要 3 个周 期。 Q2 Q3 Q4 读寄存器 f 处理数据 空操作 Q2 Q3 Q4 空操作 空操作 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: 执行指令前 PC 地址 W REG 执行指令后 如果 REG PC 如果 REG PC DS39762A_CN 第 376 页 超前信息 Q4 空操作 HERE NEQUAL EQUAL CPFSEQ REG, 0 : : = = = HERE ? ? = = ≠ = W; 地址 (EQUAL) W; 地址 (NEQUAL) 2006 Microchip Technology Inc. PIC18F97J60 系列 CPFSGT 比较 f 和 W,如果 f > W 则跳过 CPFSLT 比较 f 和 W,如果 f < W 则跳过 语法: CPFSGT 语法: CPFSLT 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作: (f) – (W), 如果 (f) > (W),则跳过 (无符号比较) 操作: (f) – (W), 如果 (f) < (W),则跳过 (无符号比较) 受影响的状态位: 无 受影响的状态位: 无 机器码: 0110 说明: f {,a} 010a ffff ffff 通过执行无符号的减法,将数据存储单 元 f 的内容与 W 的内容作比较。 机器码: 0110 说明: 指令周期数: Q 周期操作: Q1 译码 如果跳过: Q1 空操作 1(2) 注: 如果跳过的指令后面跟有 2 字 指令,则执行 CPFSGT 需要 3 个周期。 Q2 Q3 Q4 读寄存器 f 处理数据 空操作 Q2 Q3 空操作 空操作 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 执行指令前 PC W 执行指令后 如果 REG PC 如果 REG PC HERE NGREATER GREATER 1 指令周期数: 1(2) 注: Q 周期操作: Q1 译码 如果跳过: Q1 空操作 如果跳过的指令后面跟有 2 字指 令,则执行 CPFSLT 需要 3 个周 期。 Q2 Q3 Q4 读寄存器 f 处理数据 空操作 Q2 Q3 Q4 空操作 空操作 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: CPFSGT REG, 0 : : = = 地址 (HERE) ? > = ≤ = W; 地址 (GREATER) W; 地址 (NGREATER) 2006 Microchip Technology Inc. 指令字数: Q4 空操作 示例: ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 ffff 如果 f < W,则所取的指令被丢弃并执行 一条 NOP 指令,使这个指令成为双周期 指令。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 指令字数: 000a 通过执行无符号的减法,将数据存储单 元 f 的内容与 W 的内容作比较。 如果 f > W,则所取的指令被丢弃并执行 一条 NOP 指令,使这个指令成为双周期 指令。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 1 f {,a} 执行指令前 PC W 执行指令后 如果 REG PC 如果 REG PC 超前信息 HERE NLESS LESS CPFSLT REG, 1 : : = = 地址 (HERE) ? < = ≥ = W; 地址 (LESS) W; 地址 (NLESS) DS39762A_CN 第 377 页 PIC18F97J60 系列 DAW 对 W 寄存器进行十进制调整 DECF f减1 语法: DAW 语法: DECF f {,d {,a}} 操作数: 无 操作数: 操作: 如果 [W<3:0> > 9] 或 [DC = 1],则 (W<3:0>) + 6 → W<3:0> ; 否则 (W<3:0>) → W<3:0> 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f) – 1 → dest 受影响的状态位: C、 DC、 N、 OV 和 Z 机器码: 如果 [W<7:4> > 9] 或 [C = 1],则 (W<7:4>) + 6 → W<7:4> ; C=1; 否则 (W<7:4>) → W<7:4> 机器码: 0000 0000 0000 DAW 指令调整 W 寄存器内的 8 位值,即前 两个压缩 BCD 格式的变量之和,并产 生一个正确的压缩 BCD 格式结果。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 Q2 Q3 Q4 读寄存器 W 处理数据 写W 例 1: 执行指令前 W C DC 执行指令后 W C DC A5h 0 0 = = = 05h 1 0 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 = = = CEh 0 0 = = = 34h 1 0 DS39762A_CN 第 378 页 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 CNT Z 执行指令后 CNT Z 例 2: 执行指令前 W C DC 执行指令后 W C DC ffff 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 DAW = = = ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 0111 说明: 01da 将寄存器 f 的内容减 1。如果 d 为 0,结 果存储在 W 中。如果 d 为 1,结果存回 寄存器 f (默认)。 说明: C 受影响的状态位: 译码 0000 超前信息 DECF = = 01h 0 = = 00h 1 CNT, 1, 0 2006 Microchip Technology Inc. PIC18F97J60 系列 DECFSZ f 减 1,为 0 则跳过 DCFSNZ f 减 1,非 0 则跳过 语法: DECFSZ f {,d {,a}} 语法: DCFSNZ 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f) – 1 → dest, 如果结果 = 0 则跳过 操作: (f) – 1 → dest, 如果结果 ≠ 0 则跳过 受影响的状态位: 无 受影响的状态位: 无 机器码: 0010 11da ffff 机器码: ffff 将寄存器 f 的内容减 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 说明: 11da ffff ffff 将寄存器 f 的内容减 1。如果 d 为 0, 结果存储在 W 中。如果 d 为 1,结果存 回寄存器 f (默认)。 说明: 如果结果为 0,则丢弃已取的指令转而 执行一条 NOP 指令,使该指令成为双周 期指令。 如果结果不为 0,则丢弃已取的指令转 而执行一条 NOP 指令,使该指令成为双 周期指令。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 指令字数: 1 指令周期数: 1(2) 注: Q 周期操作: Q1 译码 0100 f {,d {,a}} 指令周期数: 1(2) 注: Q 周期操作: Q1 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 Q2 Q3 Q4 空操作 空操作 空操作 空操作 1 如果跳过的指令后面跟有 2 字指 令,则执行 DECFSZ 需要 3 个 周期。 Q2 如果跳过: Q1 指令字数: 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 译码 如果跳过的指令后面跟有 2 字 指令,则执行 DCFSNZ 需要 3 个周期。 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 如果跳过: Q1 空操作 Q2 Q3 Q4 空操作 空操作 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 Q4 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 DECFSZ GOTO CNT, 1, 1 LOOP 示例: HERE 示例: CONTINUE 执行指令前 PC = 执行指令后 CNT = 如果 CNT = PC = 如果 CNT ≠ PC = 执行指令前 TEMP 执行指令后 TEMP 如果 TEMP PC 如果 TEMP PC 地址 (HERE) CNT – 1 0; 地址 (CONTINUE) 0; 地址 (HERE + 2) 2006 Microchip Technology Inc. 超前信息 HERE ZERO NZERO DCFSNZ : : TEMP, 1, 0 = ? = = = ≠ = TEMP – 1, 0; 地址 (ZERO) 0; 地址 (NZERO) DS39762A_CN 第 379 页 PIC18F97J60 系列 GOTO 无条件跳转 INCF f加1 语法: GOTO k 语法: INCF 操作数: 0 ≤ k ≤ 1048575 操作数: 操作: k → PC<20:1> 受影响的状态位: 无 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f) + 1 → dest 受影响的状态位: C、 DC、 N、 OV 和 Z 机器码: 第一个字 (k<7:0>) 1110 第二个字 (k<19:8>) 1111 1111 k19kkk k7kkk kkkk kkkk0 kkkk8 机器码: f {,d {,a}} 0010 10da ffff ffff 将寄存器 f 的内容加 1。如果 d 为 0,结 果存储在 W 中。如果 d 为 1,结果存回 寄存器 f (默认)。 说明: GOTO 指令允许无条件跳转到整个 2 MB 存储器范围中的任何位置。将 20 位值 k 装入 PC<20:1>。 GOTO 始终为双周期 指令。 指令字数: 2 指令周期数: 2 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 Q2 Q3 Q4 译码 读立即数 k<7:0> 空操作 读立即数 k<19:8>, 写入 PC 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 空操作 空操作 空操作 空操作 Q 周期操作: Q1 示例: 执行指令后 PC = GOTO THERE 说明: 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 地址 (THERE) Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 CNT Z C DC 执行指令后 CNT Z C DC DS39762A_CN 第 380 页 超前信息 INCF = = = = FFh 0 ? ? = = = = 00h 1 1 1 CNT, 1, 0 2006 Microchip Technology Inc. PIC18F97J60 系列 INCFSZ f 加 1,为 0 则跳过 INFSNZ f 加 1,非 0 则跳过 语法: INCFSZ 语法: INFSNZ 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] f {,d {,a}} f {,d {,a}} 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作数: 操作: (f) + 1 → dest, 如果结果 = 0 则跳过 操作: (f) + 1 → dest, 如果结果 ≠ 0 则跳过 受影响的状态位: 无 受影响的状态位: 无 机器码: 0011 11da ffff ffff 将寄存器 f 的内容加 1。如果 d 为 0,结 果存储在 W 中。如果 d 为 1,结果存回 f 寄存器。(默认) 说明: 机器码: 0100 1 指令周期数: 1(2) 注: 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 Q 周期操作: Q1 译码 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 如果跳过: Q1 空操作 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 1 指令字数: 1(2) 注: 指令周期数: 如果跳过的指令后面跟有 2 字 指令,则执行 INCFSZ 需要 3 个周期。 Q2 Q3 Q4 空操作 空操作 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 Q 周期操作: Q1 译码 空操作 空操作 空操作 空操作 空操作 空操作 空操作 Q2 Q3 Q4 处理数据 写入 目标寄存器 空操作 执行指令前 PC = 执行指令后 CNT = 如果 CNT = PC = 如果 CNT ≠ PC = HERE NZERO ZERO INCFSZ : : Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 执行指令前 PC = 执行指令后 REG = 如果 REG≠ PC = 如果 REG= PC = CNT + 1 0; 地址 (ZERO) 0; 地址 (NZERO) 超前信息 Q4 空操作 CNT, 1, 0 地址 (HERE) 2006 Microchip Technology Inc. Q2 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 示例: 示例: 如果跳过的指令后面跟有 2 字指 令,则执行 INFSNZ 需要 3 个周 期。 读寄存器 f 如果跳过: Q1 Q4 空操作 ffff 如果结果不为 0,则丢弃已取的指令转 而执行一条 NOP 指令,使该指令成为双 周期指令。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 指令字数: ffff 将寄存器 f 的内容加 1。如果 d 为 0,结 果存储在 W 中。如果 d 为 1,结果存回 寄存器 f (默认)。 说明: 如果结果为 0,则丢弃已取的指令转而 执行一条 NOP 指令,使该指令成为双周 期指令。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 10da HERE ZERO NZERO INFSNZ REG, 1, 0 地址 (HERE) REG + 1 0; 地址 (NZERO) 0; 地址 (ZERO) DS39762A_CN 第 381 页 PIC18F97J60 系列 IORLW 将立即数与 W 作逻辑或运算 IORWF 将 W 与 f 作逻辑或运算 语法: IORLW k 语法: IORWF 操作数: 0 ≤ k ≤ 255 操作数: 操作: (W) .OR. k → W 受影响的状态位: N和Z 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (W) .OR.(f) → dest 受影响的状态位: N和Z 机器码: 0000 1001 kkkk kkkk 说明: 将 W 的内容与 8 位立即数 k 进行逻辑或 运算。结果存储在 W 寄存器中。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 执行指令前 W 执行指令后 W 0001 Q2 Q3 Q4 处理数据 写入 W IORLW = 9Ah = BFh ffff ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 35h 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 RESULT W 执行指令后 RESULT W DS39762A_CN 第 382 页 00da 将 W 的内容与寄存器 f 的内容进行逻辑 或运算。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 说明: 读立即数 k 示例: 机器码: f {,d {,a}} 超前信息 IORWF = = 13h 91h = = 13h 93h RESULT, 0, 1 2006 Microchip Technology Inc. PIC18F97J60 系列 LFSR 载入 FSR MOVF 移动 f 语法: LFSR f, k 语法: MOVF 操作数: 0≤f≤2 0 ≤ k ≤ 4095 操作数: 操作: k → FSRf 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 受影响的状态位: 无 操作: f → dest 受影响的状态位: N和Z 机器码: 1110 1111 1110 0000 00ff k7kkk k11kkk kkkk 说明: 将 12 位立即数 k 载入 f 所指向的文件选 择寄存器。 指令字数: 2 指令周期数: 2 Q 周期操作: Q1 译码 译码 示例: 执行指令后 FSR2H FSR2L Q2 Q3 Q4 读立即数 k 的 MSB 处理数据 将立即数 k 的 MSB 写入 FSRfH 读立即数 k 的 LSB 处理数据 LFSR 2, 3ABh = = 03h ABh 机器码: 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 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 将立即数 k 的 LSB 写入 FSRfL 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 示例: 执行指令前 REG W 执行指令后 REG W 2006 Microchip Technology Inc. f {,d {,a}} 超前信息 Q2 Q3 Q4 读寄存器 f 处理数据 写W MOVF REG, 0, 0 = = 22h FFh = = 22h 22h DS39762A_CN 第 383 页 PIC18F97J60 系列 MOVFF 将源寄存器的内容移到目标寄存器 MOVLB 将立即数移入 BSR 的低半字节 语法: MOVFF fs,fd 语法: MOVLW k 操作数: 0 ≤ fs ≤ 4095 0 ≤ fd ≤ 4095 操作数: 0 ≤ k ≤ 255 (fs) → fd 操作: k → BSR 操作: 受影响的状态位: 无 受影响的状态位: 无 机器码: 第一个字 (源) 第二个字 (目标) 机器码: 1100 1111 ffff ffff ffff ffff ffffs ffffd 将源寄存器 fs 的内容移入目标寄存器 fd。源寄存器 fs 可以是 4096 字节数据 空间 (000h 到 FFFh)中的任何单元, 目标寄存器 fd 也可以是 000h 到 FFFh 中的任何单元。 说明: 2 指令周期数: 2 Q 周期操作: Q1 译码 译码 Q2 Q3 Q4 读寄存器 f (源寄存器) 处理数据 空操作 空操作 空操作 写寄存器 f (目标寄存器) 无效读取 示例: 执行指令前 REG1 REG2 执行指令后 REG1 REG2 MOVFF kkkk 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 示例: Q2 Q3 Q4 读立即数 k 处理数据 将立即数 k 写入 BSR MOVLB 执行指令前 BSR 寄存器 执行指令后 BSR 寄存器 5 = 02h = 05h REG1, REG2 = = 33h 11h = = 33h 33h DS39762A_CN 第 384 页 kkkk 将 8 位立即数 k 装入存储区选择寄存器 (BSR)。不管 k7:k4 的值如何, BSR<7:4> 的值将始终保持为 0。 MOVFF 指令不能使用 PCL、 TOSU、 TOSH 或 TOSL 作为目标寄存器。 指令字数: 0001 说明: 源或目标寄存器都可以是 W (这是个有 用的特例)。 MOVFF 指令对于将数据存储单元中的内 容移入外设寄存器 (如发送缓冲器或 I/O 端口)的场合非常有用。 0000 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 MOVLW 将立即数移入 W MOVWF 将 W 的内容移入 f 语法: MOVLW k 语法: MOVWF 操作数: 0 ≤ k ≤ 255 操作数: 操作: k→W 0 ≤ f ≤ 255 a ∈ [0,1] 受影响的状态位: 无 操作: (W) → f 受影响的状态位: 无 机器码: 0000 1110 kkkk kkkk 说明: 将 8 位立即数 k 装入 W。 机器码: 指令字数: 1 说明: 指令周期数: 1 Q 周期操作: Q1 译码 Q2 Q3 Q4 读立即数 k 处理数据 写入 W 示例: 执行指令后 W MOVLW = 0110 111a ffff ffff 将 W 寄存器中的数据移入寄存器 f。 f 可 以是 256 字节存储区中的任何地址单 元。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 5Ah 5Ah 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q2 Q3 Q4 读寄存器 f 处理数据 写寄存器 f 示例: 执行指令前 W REG 执行指令后 W REG 2006 Microchip Technology Inc. f {,a} 超前信息 MOVWF = = 4Fh FFh = = 4Fh 4Fh REG, 0 DS39762A_CN 第 385 页 PIC18F97J60 系列 MULLW 将立即数与 W 中的内容相乘 语法: MULLW 操作数: 0 ≤ k ≤ 255 操作: (W) x k → PRODH:PRODL 受影响的状态位: 无 机器码: k 0000 1101 kkkk 将 W 与 f 的内容相乘 语法: MULWF 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作: (W) x (f) → PRODH:PRODL 机器码: 0000 所有状态标志位都不受影响。 指令周期数: 1 Q 周期操作: Q1 译码 示例: 执行指令前 W PRODH PRODL 执行指令后 W PRODH PRODL ffff ffff 所有状态标志位都不受影响。 请注意此操作不可能发生溢出或进位。 结果有可能为零,但不会被检测到。 1 001a 将 W 的内容与寄存器单元 f 的内容执行无 符号的乘法运算。运算的 16 位结果保存 在 PRODH:PRODL 寄存器对中,其中 PRODH 用于存储高字节。 W 和 f 的内容 都不改变。 说明: W 的内容不改变。 指令字数: f {,a} 受影响的状态位: 无 kkkk 将 W 的内容与 8 位立即数 k 进行无符 号的乘法运算。 16 位的结果存储在 PRODH:PRODL 寄存器对中,其中 PRODH 用于存储高字节。 说明: MULWF 请注意此操作不可能发生溢出或进位。结 果有可能为零,但不会被检测到。 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区 (默 认)。 Q2 Q3 Q4 读立即数 k 处理数据 写寄存器 PRODH: PRODL MULLW 0C4h = = = E2h ? ? = = = E2h ADh 08h 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 示例: 执行指令前 W REG PRODH PRODL 执行指令后 W REG PRODH PRODL DS39762A_CN 第 386 页 超前信息 Q2 Q3 Q4 读寄存器 f 处理数据 写寄存器 PRODH: PRODL MULWF REG, 1 = = = = C4h B5h ? ? = = = = C4h B5h 8Ah 94h 2006 Microchip Technology Inc. PIC18F97J60 系列 NEGF 对 f 取补 语法: NEGF 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作: (f) + 1 → f 受影响的状态位: N、 OV、 C、 DC 和 Z 机器码: 0110 f {,a} 110a 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 1 指令周期数: 1 Q 周期操作: Q1 译码 执行指令前 REG 执行指令后 REG NOP 操作数: 无 操作: 空操作 受影响的状态位: 无 0000 1111 0000 xxxx 说明: 不执行任何操作。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 0000 xxxx 0000 xxxx Q2 Q3 Q4 空操作 空操作 空操作 示例: 无。 Q2 Q3 Q4 读寄存器 f 处理数据 写寄存器 f 示例: 语法: ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 指令字数: 空操作 机器码: ffff 用二进制补码对单元 f 取补,结果存储 在数据存储单元 f 中。 说明: NOP NEGF REG, 1 = 0011 1010 [3Ah] = 1100 0110 [C6h] 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 387 页 PIC18F97J60 系列 POP 弹出返回堆栈栈顶的内容 PUSH 将数据压入返回堆栈栈顶 语法: POP 语法: PUSH 操作数: 无 操作数: 无 操作: (TOS) → 丢弃 操作: (PC + 2) → TOS 受影响的状态位: 无 受影响的状态位: 无 机器码: 0000 0000 0000 0110 机器码: 0000 0000 0000 0101 说明: 从返回堆栈弹出 TOS 值并丢弃。然后, 前一个压入返回堆栈的值成为 TOS 值。 此指令可以让用户正确管理返回堆栈, 从而实现软件堆栈。 说明: PC + 2 的值被压入返回堆栈的栈顶。原 先的 TOS 值被压入堆栈的下一级。 此指令允许通过修改 TOS 并将其压入返 回堆栈来实现软件堆栈。 指令字数: 1 指令字数: 1 指令周期数: 1 指令周期数: 1 Q 周期操作: Q1 译码 示例: Q2 Q3 Q4 空操作 弹出 TOS 值 空操作 POP GOTO 译码 示例: NEW 执行指令前 TOS 堆栈 (下一级) = = 0031A2h 014332h 执行指令后 TOS PC = = 014332h NEW DS39762A_CN 第 388 页 Q 周期操作: Q1 超前信息 Q2 Q3 Q4 将 PC + 2 压 入返回堆栈 空操作 空操作 PUSH 执行指令前 TOS PC = = 345Ah 0124h 执行指令后 PC TOS 堆栈 (下一级) = = = 0126h 0126h 345Ah 2006 Microchip Technology Inc. PIC18F97J60 系列 RCALL 相对调用 RESET 语法: RCALL 复位 语法: RESET 操作数: -1024 ≤ n ≤ 1023 操作数: 无 操作: (PC) + 2 → TOS, (PC) + 2 + 2n → PC 操作: 将所有受 MCLR 复位影响的寄存器和标 志位复位。 受影响的状态位: 无 受影响的状态位: 全部 机器码: 1101 n 1nnn nnnn nnnn 从当前地址跳转 (最多 1K)来调用子 程序。首先,将返回地址 (PC + 2)压 入返回堆栈。然后,将 “2n”(以二进 制补码表示)与 PC 相加。由于 PC 将 递增以便取出下一条指令,所以新地址 将为 PC + 2 + 2n。该指令为一条双周期 指令。 说明: 指令字数: 1 指令周期数: 2 Q 周期操作: Q1 译码 机器码: 0000 Q2 Q3 Q4 处理数据 写入 PC 空操作 空操作 1111 1111 说明: 此指令可实现用软件执行 MCLR 复位。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q2 Q3 Q4 开始复位 空操作 空操作 示例: 读立即数 n 0000 执行指令后 寄存器 = 标志位 * = RESET 复位值 复位值 将 PC 压入堆栈 空操作 示例: 执行指令前 PC = 执行指令后 PC = TOS = 空操作 HERE RCALL Jump 地址 (HERE) 地址 (Jump) 地址 (HERE + 2) 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 389 页 PIC18F97J60 系列 RETFIE 从中断返回 RETLW 将立即数返回给 W 语法: RETFIE {s} 语法: RETLW k 操作数: s ∈ [0,1] 操作数: 0 ≤ k ≤ 255 操作: (TOS) → PC, 1 → GIE/GIEH 或 PEIE/GIEL, 如果 s = 1 (WS) → W, (STATUSS) → STATUS, (BSRS) → BSR, PCLATU 和 PCLATH 保持不变。 操作: k → W, (TOS) → PC, PCLATU 和 PCLATH 保持不变。 受影响的状态位: 无 受影响的状态位: 0000 0000 0001 指令字数: 1 指令周期数: 2 译码 示例: kkkk kkkk 将 8 位立即数 k 装入 W。将栈顶内容 (返回地址)装入程序计数器。高位地 址锁存器 (PCLATH)内容保持不变。 指令字数: 1 指令周期数: 2 Q 周期操作: Q1 Q2 Q3 Q4 译码 读 立即数 k 处理数据 从堆栈弹出 PC 值, 写入 W 空操作 空操作 空操作 空操作 示例: Q2 Q3 Q4 空操作 空操作 从堆栈弹出 PC 值 将 GIEH 或 GIEL 置 1 空操作 1100 说明: 000s 从中断返回。执行出栈操作,将栈顶 (TOS)的内容装入 PC。通过将高或低 优先级全局中断允许位置 1,来允许中 断。如果 s = 1,则影子寄存器 WS、STATUSS 和 BSRS 的内容将被装 入对应的寄存器 W、 STATUS 和 BSR。 如果 s = 0,则不更新这些寄存器 (默 认)。 Q 周期操作: Q1 0000 GIE/GIEH 和 PEIE/GIEL 机器码: 说明: 机器码: 空操作 RETFIE 空操作 1 中断后 PC W BSR STATUS GIE/GIEH, PEIE/GIEL DS39762A_CN 第 390 页 空操作 = = = = = TOS WS BSRS STATUSS 1 CALL TABLE ; ; ; ; : TABLE ADDWF PCL ; RETLW k0 ; RETLW k1 ; : : RETLW kn ; 执行指令前 W 执行指令后 W 超前信息 W contains table offset value W now has table value W = offset Begin table End of table = 07h = kn 的值 2006 Microchip Technology Inc. PIC18F97J60 系列 RETURN 从子程序返回 RLCF f 带进位循环左移 语法: RETURN {s} 语法: RLCF 操作数: s ∈ [0,1] 操作数: 操作: (TOS) → PC, 如果 s = 1 (WS) → W, (STATUSS) → STATUS, (BSRS) → BSR, PCLATU 和 PCLATH 保持不变。 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f<n>) → dest<n + 1>, (f<7>) → C, (C) → dest<0> 受影响的状态位: 机器码: 0000 说明: 受影响的状态位: C、 N 和 Z 无 机器码: 0000 0001 001s 0011 1 指令周期数: 2 Q 周期操作: Q1 Q2 Q3 Q4 空操作 处理数据 从堆栈弹出 PC 值 空操作 空操作 空操作 空操作 RETURN 执行指令后: PC = TOS ffff 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 寄存器 f C 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 REG C 执行指令后 REG W C 2006 Microchip Technology Inc. ffff 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 译码 示例: 01da 将寄存器 f 的内容连同进位标志位一起循 环左移 1 位。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 说明: 从子程序返回。执行出栈操作,将栈顶 (TOS)内容装入程序计数器。如果 s = 1, 将影子寄存器 WS、STATUSS 和 BSRS 的 内容装入相应的 W、STATUS 和 BSR 寄存 器。如果 s = 0,则不更新这些寄存器 (默 认)。 指令字数: f {,d {,a}} 超前信息 RLCF REG, 0, 0 = = 1110 0110 0 = = = 1110 0110 1100 1100 1 DS39762A_CN 第 391 页 PIC18F97J60 系列 RLNCF f 循环左移 (不带进位) RRCF f 带进位循环右移 语法: RLNCF 语法: RRCF 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f<n>) → dest<n + 1>, (f<7>) → dest<0> 操作: 受影响的状态位: N和Z (f<n>) → dest<n – 1>, (f<0>) → C, (C) → dest<7> 受影响的状态位: C、 N 和 Z 机器码: 0100 f {,d {,a}} 01da ffff ffff 将寄存器 f 的内容循环左移 1 位。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 说明: 机器码: 0011 1 Q 周期操作: Q1 译码 读寄存器 f Q3 处理数据 Q4 写入 目标寄存器 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 示例: 执行指令前 REG 执行指令后 REG 寄存器 f C Q2 RLNCF 1010 1011 = 0101 0111 DS39762A_CN 第 392 页 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 REG, 1, 0 = ffff 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 寄存器 f 指令周期数: ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 1 00da 将寄存器 f 的内容连同进位标志位一起 循环右移 1 位。如果 d 为 0,结果存储 在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 说明: 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 指令字数: f {,d {,a}} 示例: 执行指令前 REG C 执行指令后 REG W C 超前信息 RRCF REG, 0, 0 = = 1110 0110 0 = = = 1110 0110 0111 0011 0 2006 Microchip Technology Inc. PIC18F97J60 系列 RRNCF f 循环右移 (不带进位) SETF 将 f 的内容置为全 1 语法: RRNCF 语法: SETF 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作: FFh → f 操作: (f<n>) → dest<n – 1>, (f<0>) → dest<7> 受影响的状态位: 无 f {,d {,a}} 机器码: N和Z 受影响的状态位: 机器码: 0100 00da ffff ffff 0110 寄存器 f 1 指令周期数: 1 Q 周期操作: Q1 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 例 1: 执行指令前 REG 执行指令后 REG RRNCF 1101 0111 = 1110 1011 RRNCF 执行指令前 REG 执行指令后 REG Q2 Q3 Q4 读寄存器 f 处理数据 写寄存器 f SETF REG,1 = 5Ah = FFh REG, 1, 0 = 例 2: 执行指令前 W REG 执行指令后 W REG 示例: Q2 ffff 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 译码 指令字数: ffff 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0,选择快速操作存储区,忽 略 BSR 的值。如果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 100a 将指定寄存器的内容置为 FFh。 说明: 将寄存器 f 的内容循环右移 1 位。如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 说明: f {,a} REG, 0, 0 = = ? 1101 0111 = = 1110 1011 1101 0111 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 393 页 PIC18F97J60 系列 SLEEP 进入休眠模式 SUBFWB W 减去 f (带借位) 语法: SLEEP 语法: SUBFWB 操作数: 无 操作数: 操作: 00h → WDT, 0 →WDT 后分频器, 1 → TO, 0 → PD 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (W) – (f) – (C) → dest 受影响的状态位: N、 OV、 C、 DC 和 Z TO 和 PD 受影响的状态位: 机器码: 0000 说明: 机器码: 0000 0000 0011 0101 指令周期数: 1 Q 周期操作: Q1 译码 示例: Q2 Q3 Q4 空操作 处理数据 进入 休眠模式 SLEEP 执行指令前 TO = PD = ? ? 执行指令后 TO = PD = 1† 0 † 如果由 WDT 引起唤醒,则此位将被清零。 ffff 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 例 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 DS39762A_CN 第 394 页 ffff 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区 (默 认)。 振荡器停振,处理器进入休眠模式。 1 01da 将 W 的内容减去 f 寄存器的内容和进位 (借位)(通过二进制补码方式进行运 算)。如果 d 为 0,结果存储在 W 中。如 果 d 为 1,结果存回寄存器 f (默认)。 说明: 掉电状态位 (PD)清零。超时状态位 (TO)置 1。看门狗定时器及其后分 频器清零。 指令字数: f {,d {,a}} 超前信息 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 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 ;结果为零 2006 Microchip Technology Inc. PIC18F97J60 系列 SUBLW 立即数减去 W 的内容 SUBWF f 减去 W 语法: SUBLW k 语法: SUBWF 操作数: 0 ≤ k ≤ 255 操作数: 操作: k – (W) → W 受影响的状态位: N、 OV、 C、 DC 和 Z 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (f) – (W) → dest 受影响的状态位: N、 OV、 C、 DC 和 Z 机器码: 0000 1000 kkkk kkkk 说明: 用 8 位立即数 k 减去 W。结果存储在 W 寄存器中。 机器码: 指令字数: 1 说明: 指令周期数: 1 0101 Q2 Q3 Q4 译码 读立即数 k 处理数据 写入 W 例 1: 执行指令前 W C 执行指令后 W C Z N SUBLW = = 01h ? = = = = 01h 1 0 0 例 2: 执行指令前 W C 执行指令后 W C Z N SUBLW = = 02h ? = = = = 00h 1 1 0 例 3: 执行指令前 W C 执行指令后 W C Z N SUBLW = = 03h ? = = = = FFh 0 0 1 02h 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 SUBWF REG, 1, 0 例 1: 执行指令前 REG W C 执行指令后 REG W C Z N ;结果为零 02h = = = 3 2 ? = = = = = 1 2 1 0 0 例 2: 执行指令前 REG W C 执行指令后 REG W C Z N SUBWF = = = 2 2 ? = = = = = 2 0 1 1 0 例 3: 执行指令前 REG W C 执行指令后 REG W C Z N 2006 Microchip Technology Inc. ffff 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 译码 ; (二进制补码) ;结果为负 ffff 如果 a 为 0,选择快速操作存储区。如果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 02h ;结果为正 11da 用寄存器 f 中的内容减去 W 寄存器的内 容 (通过二进制补码方式进行运算)。如 果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 Q 周期操作: Q1 f {,d {,a}} 超前信息 SUBWF ;结果为正 REG, 0, 0 ;结果为零 REG, 1, 0 = = = 1 2 ? = = = = = FFh ; (二进制补码) 2 0 ;结果为负 0 1 DS39762A_CN 第 395 页 PIC18F97J60 系列 SUBWFB f 减去 W (带借位) SWAPF 将 f 的高半字节和低半字节交换 语法: SUBWFB 语法: SWAPF f {,d {,a}} 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作数: 操作: (f) – (W) – (C) → dest 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: 受影响的状态位: N、 OV、 C、 DC 和 Z 0101 10da ffff (f<3:0>) → dest<7:4>, (f<7:4>) → dest<3:0> 受影响的状态位: 无 机器码: f {,d {,a}} ffff 用 f 寄存器的内容减去 W 的内容和进位 (借位)(通过二进制补码方式进行运 算)。如果 d 为 0,结果存储在 W 中。 如果 d 为 1,结果存回寄存器 f (默 认)。 说明: 机器码: 0011 10da ffff ffff f 寄存器的高半字节和低半字节相互交 换。如果 d 为 0,结果存储在 W 中。如 果 d 为 1,结果存回寄存器 f (默认)。 说明: 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 指令字数: 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中面 向字节和面向位的指令”。 1 指令字数: 1 指令周期数: 1 指令周期数: 1 Q 周期操作: Q 周期操作: Q1 译码 Q2 Q3 Q4 Q1 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 译码 读寄存器 f 处理数据 写入 目标寄存器 例 1: SUBWFB 执行指令前 REG W C 执行指令后 REG W C Z N REG, 1, 0 示例: = = = 19h 0Dh 1 (0001 1001) (0000 1101) = = = = = 0Ch 0Dh 1 0 0 (0000 1011) (0000 1101) 例 2: 执行指令前 REG 执行指令后 REG SWAPF = 53h = 35h REG, 1, 0 ;结果为正 SUBWFB REG, 0, 0 执行指令前 REG W C 执行指令后 REG W C Z N = = = 1Bh 1Ah 0 (0001 1011) (0001 1010) = = = = = 1Bh 00h 1 1 0 (0001 1011) 例 3: SUBWFB ;结果为零 REG, 1, 0 执行指令前 REG W C 执行指令后 REG = = = 03h 0Eh 1 (0000 0011) (0000 1101) = F5h W C Z N = = = = 0Eh 0 0 1 (1111 0100) ; [ 二进制补码 ] (0000 1101) DS39762A_CN 第 396 页 ;结果为负 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 TBLRD 表读 TBLRD 表读 (续) 语法: TBLRD ( *; *+; *-; +*) 例 1: TBLRD 操作数: 无 操作: 如果执行 TBLRD *, ( 程序存储器 (TBLPTR))→ TABLAT ; TBLPTR 不改变 如果执行 TBLRD *+, ( 程序存储器 (TBLPTR))→ TABLAT ; (TBLPTR) + 1 → TBLPTR 如果执行 TBLRD *-, ( 程序存储器 (TBLPTR))→ TABLAT ; (TBLPTR) – 1 → TBLPTR 如果执行 TBLRD +*, (TBLPTR) + 1 → TBLPTR ; ( 程序存储器 (TBLPTR)) → TABLAT 执行指令前 TABLAT TBLPTR 存储单元 (00A356h) 执行指令后 TABLAT TBLPTR 例 2: 受影响的状态位:无 机器码: 说明: 0000 0000 0000 *+ ; 10nn nn=0 * =1 *+ =2 *=3 +* TBLRD = = = 55h 00A356h 34h = = 34h 00A357h +* ; 执行指令前 TABLAT TBLPTR 存储单元 (01A357h) 存储单元 (01A358h) 执行指令后 TABLAT TBLPTR = = = = AAh 01A357h 12h 34h = = 34h 01A358h 该指令用于读取程序存储器 (P.M.)的内 容。使用表指针 (TBLPTR)对程序存储器 进行寻址。 TBLPTR (一个 21 位指针)指向程序存储 器的每个字节。 TBLPTR 的寻址范围为 2MB。 TBLPTR[0] = 0:程序存储器字的低有效字 节 TBLPTR[0] = 1:程序存储器字的高有效字 节 TBLRD 指令可用如下方法修改 TBLPTR 的 值: • 不变 • 后加 • 后减 • 预加 指令字数: 1 指令周期数: 2 Q 周期操作: Q1 Q2 Q3 Q4 译码 空操作 空操作 空操作 空操作 空操作 (读程序存储器) 空操作 空操作 (写 TABLAT) 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 397 页 PIC18F97J60 系列 TBLWT 表写 TBLWT 表写 (续) 语法: TBLWT ( *; *+; *-; +*) 例 1: TBLWT *+; 操作数: 无 操作: 如果执行 TBLWT*, (TABLAT) → 保持寄存器; TBLPTR 不改变 如果执行 TBLWT*+, (TABLAT) → 保持寄存器; (TBLPTR) + 1 → TBLPTR 如果执行 TBLWT*-, (TABLAT) → 保持寄存器; (TBLPTR) – 1 → TBLPTR 如果执行 TBLWT+*, (TBLPTR) + 1 → TBLPTR ; (TABLAT) → 保持寄存器 执行指令前 TABLAT = TBLPTR = 保持寄存器 (00A356h) = 执行指令后 (表写操作完成) TABLAT = TBLPTR = 保持寄存器 (00A356h) = 例 2: 受影响的状态位: 无 机器码: 说明: 0000 0000 0000 11nn nn=0 * =1 *+ =2 *=3 +* 此指令使用 TBLPTR 的低 3 位来确定要将 TABLAT 中的内容写入 8 个保持寄存器中 的哪一个。该保持寄存器用于对程序存储 器 (P.M.)的内容编程。(关于对闪存程 序存储器编程的更多详细信息,请参见第 5.0 节 “存储器构成”。) 55h 00A356h FFh 55h 00A357h 55h TBLWT +*; 执行指令前 TABLAT = TBLPTR = 保持寄存器 (01389Ah) = 保持寄存器 (01389Bh) = 执行指令后 (表写操作完成) TABLAT = TBLPTR = 保持寄存器 (01389Ah) = 保持寄存器 (01389Bh) = 34h 01389Ah FFh FFh 34h 01389Bh FFh 34h TBLPTR (一个 21 位指针)指向程序存 储器的每个字节。 TBLPTR 的寻址范围为 2MB。 TBLPTR 的 LSb 选择要访问的程序 存储器单元。 TBLPTR[0] = 0:程序存储器字的低有 效字节 TBLPTR[0] = 1:程序存储器字的高有 效字节 TBLWT 指令可用如下方法修改 TBLPTR 的 值: 指令字数: • • • • 1 指令周期数: 2 不变 后加 后减 预加 Q 周期操作: Q1 Q2 Q3 Q4 译码 空操作 空操作 空操作 空操作 DS39762A_CN 第 398 页 空操作 空操作 (读 TABLAT) 空操作 (写保持 寄存器) 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 TSTFSZ 测试 f,为 0 则跳过 XORLW 将立即数与 W 作逻辑异或运算 语法: TSTFSZ f {,a} 语法: XORLW k 操作数: 0 ≤ f ≤ 255 a ∈ [0,1] 操作数: 0 ≤ k ≤ 255 操作: (W) .XOR. k → W 操作: f 为 0 则跳过 受影响的状态位: N和Z 受影响的状态位: 无 机器码: 机器码: 0110 011a ffff ffff 如果 f = 0,丢弃已取的指令并执行一条 NOP 指令,使这条指令成为双周期指 令。 说明: 如果 a 为 0,选择快速操作存储区。如 果 a 为 1,使用 BSR 选择 GPR 存储区 (默认)。 如果 a 为 0 且使能了扩展指令集,只要 f ≤ 95 (5Fh),指令就将以立即数变址 寻址模式进行操作。详细信息,请参见 第 25.2.3 节 “立即数变址寻址模式中 面向字节和面向位的指令”。 指令字数: 1 指令周期数: 1(2) 注: 0000 1010 kkkk kkkk 说明: 将 W 的内容与 8 位立即数 k 进行逻辑 异或运算。结果存储在 W 寄存器中。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 Q2 Q3 Q4 译码 读立即数 k 处理数据 写入 W 示例: 执行指令前 W 执行指令后 W XORLW = B5h = 1Ah 0AFh 如果跳过的指令后面跟有 2 字指 令,则执行 TSTFSZ 需要 3 个 周期。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 空操作 如果跳过: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 如果跳过的指令后面跟有 2 字指令: Q1 Q2 Q3 Q4 空操作 空操作 空操作 空操作 空操作 空操作 空操作 空操作 示例: 执行指令前 PC 执行指令后 如果 CNT PC 如果 CNT PC HERE NZERO ZERO TSTFSZ : : CNT, 1 = 地址 (HERE) = = ≠ = 00h, 地址 (ZERO) 00h, 地址 (NZERO) 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 399 页 PIC18F97J60 系列 XORWF 将 W 与 f 作逻辑异或运算 语法: XORWF 操作数: 0 ≤ f ≤ 255 d ∈ [0,1] a ∈ [0,1] 操作: (W) .XOR.(f) → dest 受影响的状态位: N和Z 机器码: 0001 f {,d {,a}} 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 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 写入 目标寄存器 示例: 执行指令前 REG W 执行指令后 REG W XORWF = = AFh B5h = = 1Ah B5h DS39762A_CN 第 400 页 REG, 1, 0 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 25.2 表 25-3 提供了扩展指令集中的指令汇总。第 25.2.2 节 “扩展指令集”对这些指令进行了详细说明。第 360 页 的表 25-1 提供了标准和扩展的 PIC18 指令集的操作码 字段说明。 扩展指令集 除了PIC18指令集的75条标准指令之外,PIC18F97J60 系列器件还提供了针对内核CPU功能的可选扩展指令。 这些新增的功能包括 8 条额外的指令,它们可以实现间 接和变址寻址操作,并使得许多标准 PIC18 指令可以实 现立即数变址寻址。 注: 扩展指令集的额外功能在默认情况下对未编程器件是使 能的。用户必须在编程期间将 XINST 配置位正确置 1 或 清零,从而使能或禁止这些功能。 25.2.1 扩展指令集中的指令可以全部被归为立即数操作类指令, 它们既可以控制文件选择寄存器,也可以使用这些寄存器 进行变址寻址。其中的两个指令 ADDFSR 和SUBFSR,可以 直接对 FSR2 进行操作。而 ADDULNK 和SUBULNK 指令允 许在执行后自动返回。 扩展指令的语法 大部分扩展指令都使用变址参数,同时使用一个文件选 择寄存器和某一偏移量来指定源寄存器或目标寄存器。 当指令的参数作为变址寻址的一部分时,会用方括号 (“[ ]”)把它括起来。这时表示此参数用作变址地址或 偏移量。如果 MPASM™ 汇编器发现一个变址地址或偏 移量没有被括起来,它就会给出出错信息。 这些扩展的指令专门用于优化用高级语言特别是 C 语言 编写的重入程序代码(也就是递归调用或使用软件堆栈 的代码)。此外,它们使用户能更有效地用高级语言对 数据结构执行特定的操作。这些操作包括: 当使能扩展指令集时,括号也用于表示面向字节和面向 位的指令中的变址参数。这是对指令语法的额外更改。 更多详细信息,请参见第 25.2.3.1 节 “标准 PIC18 命 令的扩展指令语法”。 • 在进入和退出子程序时对软件堆栈空间进行动态分 配和释放 • 功能指针调用 注: • 对软件堆栈指针进行控制 • 对软件堆栈中的变量进行控制 表 25-3: 扩展指令集和立即数变址寻址模式是专为 优化用 C 语言编写的应用程序而设计的, 用户可能不会在汇编器中直接使用这些指 令。对 于 那 些 查 看 编 译 器 生 成 代 码的 用 户,这些命令的语法可作为参考。 以前,在 PIC18 和早期的指令集中使用方 括号来表示可选参数。在此文本和以后的 文本中,可选参数将用大扩号 (“{ }”)表 示。 PIC18 指令集的扩展 助记符, 操作数 ADDFSR ADDULNK CALLW MOVSF f, k k MOVSS zs, zd PUSHL SUBFSR SUBULNK k f, k k zs , f d 说明 周期 将立即数与 FSR 相加 将立即数与 FSR2 相加并返回 使用 WREG 调用子程序 将 zs (源)移入 (第一个字) fd (目标)移入 (第二个字) 将 zs (源)移入 (第一个字) zd (目标)移入 (第二个字) 将立即数保存到 FSR2,FSR2 减 1 FSR 减去立即数 FSR2 减去立即数并返回 1 2 2 2 2006 Microchip Technology Inc. 2 1 1 2 超前信息 16 位指令字 MSb 1110 1110 0000 1110 1111 1110 1111 1110 1110 1110 LSb 1000 1000 0000 1011 ffff 1011 xxxx 1010 1001 1001 ffkk 11kk 0001 0zzz ffff 1zzz xzzz kkkk ffkk 11kk kkkk kkkk 0100 zzzz ffff zzzz zzzz kkkk kkkk kkkk 受影响的 状态位 无 无 无 无 无 无 无 无 DS39762A_CN 第 401 页 PIC18F97J60 系列 25.2.2 扩展指令集 ADDFSR FSR 的内容与立即数相加 ADDULNK FSR2 的内容与立即数相加并返回 语法: ADDFSR f, k 语法: ADDULNK k 操作数: 0 ≤ k ≤ 63 f ∈ [ 0, 1, 2 ] 操作数: 0 ≤ k ≤ 63 FSR(f) + k → FSR(f) 操作: 操作: FSR2 + k → FSR2, (TOS) → PC 受影响的状态位: 无 1110 受影响的状态位: 机器码: 无 1110 说明: 将 FSR2 的内容加上一个 6 位的立即 数 k。然后通过将 TOS 的值装入 PC,执行一条 RETURN 指令。 机器码: 1000 ffkk kkkk 指令字数: 将由 f 指定的 FSR 的内容加上一个 6 位的立即数 k。 1 指令周期数: 1 说明: Q 周期操作: Q1 译码 Q2 Q3 Q4 处理数据 写入 FSR ADDFSR 2, 23h 执行指令前 FSR2 执行指令后 FSR2 = = kkkk 03FFh 指令字数: 该指令可以被认为是 ADDFSR 指令的 特例,其中 f = 3 (二进制 “11”), 它仅针对 FSR2 进行操作。 1 指令周期数: 2 Q 周期操作: Q1 0422h Q2 Q3 Q4 译码 读立即数 k 处理数据 写入 FSR 空操作 空操作 空操作 空操作 示例: 注: 11kk 执行该指令需要两个周期;在第二个 周期执行一条 NOP 指令。 读立即数 k 示例: 1000 ADDULNK 23h 执行指令前 FSR2 PC = = 03FFh 0100h 执行指令后 FSR2 PC = = 0422h (TOS) 所有的 PIC18 指令都可能在其指令助记符之前使用可选的标号参数,用于符号寻址。如果使用了标号,那么 指令语法将变为:{label} 指令参数。 DS39762A_CN 第 402 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 CALLW 使用 WREG 调用子程序 语法: CALLW 语法: MOVSF [zs], fd 操作数: 无 操作数: 操作: (PC + 2) → TOS, (W) → PCL, (PCLATH) → PCH, (PCLATU) → PCU 0 ≤ zs ≤ 127 0 ≤ fd ≤ 4095 操作: ((FSR2) + zs) → fd 受影响的状态位: 无 受影响的状态位: MOVSF 无 机器码: 0000 0000 0001 0100 首先,返回地址 (PC + 2)被压入返回 堆栈。接下来,将 W 寄存器的内容写入 PCL, PCL 现有的值被丢弃。然后, PCLATH 和 PCLATU 的内容被分别 锁存到 PCH 和 PCU。第二个周期 执行一条 NOP 指令,并同时取下一条指 令。 说明 将变址寻址单元内容移入 f 机器码: 第一个字 (源) 第二个字 (目标) 1110 1111 1011 ffff 0zzz ffff zzzzs ffffd 将源寄存器的内容移入目标寄存器 fd。 通过将第一个字中的 7 位立即数偏移量 zs 与 FSR2 的值相加来确定源寄存器的 实际地址。第二个字中的 12 位立即数 fd 指向目标寄存器的地址。两个地址均可 以是 4096 字节的数据空间 (000h 到 FFFh)中的任何单元。 说明: 和 CALL 不一样,该指令没有更新 W、 STATUS 或 BSR 寄存器的选项。 MOVSF 指令中的目标寄存器不能是 PCL、 TOSU、 TOSH 或 TOSL。 指令字数: 1 指令周期数: 2 如果计算得到的源地址指向间接寻址寄 存器,将返回 00h。 Q 周期操作: Q1 Q2 Q3 Q4 译码 读 WREG 将 PC 压入 堆栈 空操作 空操作 空操作 空操作 空操作 示例: 执行指令前 PC PCLATH PCLATU W 执行指令后 PC TOS PCLATH PCLATU W HERE 指令字数: 2 指令周期数: 2 Q 周期操作: Q1 CALLW = = = = 地址 (HERE) 10h 00h 06h = = = = = 001006h 地址 (HERE + 2) 10h 00h 06h 2006 Microchip Technology Inc. 示例: Q2 Q3 Q4 译码 确定源地址 确定源地址 读源寄存器 译码 空操作 无效读取 空操作 写寄存器 f (目标寄存器) MOVSF 执行指令前 FSR2 = 85h 单元的内容= REG2 = 执行指令后 FSR2 = 85h 单元的内容= REG2 = 超前信息 [05h], REG2 80h 33h 11h 80h 33h 33h DS39762A_CN 第 403 页 PIC18F97J60 系列 MOVSS 变址寻址移动数据 PUSHL 将立即数保存到 FSR2, FSR2 减 1 语法: MOVSS [zs], [zd] 语法: PUSHL k 操作数: 0 ≤ zs ≤ 127 0 ≤ zd ≤ 127 操作数: 0 ≤ k ≤ 255 操作: ((FSR2) + zs) → ((FSR2) + zd) 操作: k → (FSR2), FSR2 – 1→ FSR2 受影响的状态位: 无 机器码: 第一个字 (源) 第二个字 (目标) 说明 受影响的状态位: 无 1110 1111 1011 xxxx 1zzz xzzz zzzzs zzzzd 将源寄存器的内容移到目标寄存器。通 过将 FSR2 中的值分别加上 7 位立即数 偏移量 zs 和 zd 来确定源寄存器和目标 寄存器的地址。两个寄存器都可以是 4096 字节数据存储器空间 (000h 到 FFFh)中的任意单元。 指令字数: 如果计算得到的源地址指向间接寻址寄 存器,将返回 00h。如果计算得到的 目标地址指向间接寻址寄存器,将执行 一条 NOP 指令。 2 指令周期数: 2 示例: 1111 Q2 Q3 Q4 译码 确定源地址 确定源地址 读源寄存器 译码 确定 目标地址 确定 目标地址 写 目标寄存器 1010 kkkk kkkk 8 位立即数 k 被写入由 FSR2 指定的数据 存储器单元。 操作完后 FSR2 减 1。 说明: 此指令允许用户将值压入软件堆栈。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 MOVSS 指令不能使用 PCL、 TOSU、 TOSH 或 TOSL 作为目标寄存器。 Q 周期操作: Q1 机器码: 译码 示例: Q2 Q3 Q4 读取 k 处理数据 写入 目标寄存器 PUSHL 08h 执行指令前 FSR2H:FSR2L 存储单元 (01ECh) = = 01ECh 00h 执行指令后 FSR2H:FSR2L 存储单元 (01ECh) = = 01EBh 08h MOVSS [05h], [06h] 执行指令前 FSR2 = 85h 单元的内容 = 86h 单元的内容 = 执行指令后 FSR2 = 85h 单元的内容= 86h 单元的内容 = DS39762A_CN 第 404 页 80h 33h 11h 80h 33h 33h 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 SUBFSR FSR 减去立即数 SUBULNK FSR2 减去立即数并返回 语法: SUBFSR f, k 语法: SUBULNK k 操作数: 0 ≤ k ≤ 63 操作数: 0 ≤ k ≤ 63 f ∈ [ 0, 1, 2 ] 操作: FSR2 – k → FSR2 操作: FSRf – k → FSRf 受影响的状态位: 无 1110 机器码: 1001 (TOS) → PC ffkk kkkk 指令字数: 用 f 指定的 FSR 的内容减去 6 位立 即数 k。 1 指令周期数: 1 说明: Q 周期操作: Q1 译码 受影响的状态位: 无 1110 机器码: 11kk kkkk 用 FSR 的内容减去 6 位立即数 k,然后 通过将 TOS 的值装入 PC,执行一条 RETURN 指令。 说明: 执行该指令需要两个指令周期,第二个 指令周期执行一条 NOP 指令。 Q2 Q3 Q4 读寄存器 f 处理数据 写入 目标寄存器 示例: 1001 SUBFSR 2, 23h 执行指令前 FSR2 = 03FFh 执行指令后 FSR2 = 03DCh 指令字数: 该指令可以被看作是 SUBFSR 指令的特 殊情况,其中 f = 3 (二进制数 “11”); 它只针对 FSR2 进行操作。 1 指令周期数: 2 Q 周期操作: Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 写入 目标寄存器 空操作 空操作 空操作 空操作 示例: 2006 Microchip Technology Inc. 超前信息 SUBULNK 23h 执行指令前 FSR2 PC = = 03FFh 0100h 执行指令后 FSR2 PC = = 03DCh (TOS) DS39762A_CN 第 405 页 PIC18F97J60 系列 25.2.3 注: 25.2.3.1 立即数变址寻址模式中面向字节和面 向位的指令 使能 PIC18 扩展指令集可能导致常规应用 程序运行不正常或完全失败。 一旦使能扩展指令集,除了可以使用 8 条新命令之外, 还可以使用立即数变址寻址 (第 5.6.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 的寄存器用于立即数变 址寻址。 标准 PIC18 命令的扩展指令语法 当使能了扩展指令集时,立即数偏移量 “k”被用来替 换标准的面向字节和位的命令中的文件寄存器参数 “f”。如前所述,只有在 “f”小于或等于 5Fh 时才会 发生这种情况。当使用偏移量时,该偏移量必须用方括 号 “[ ]”标出。因为在扩展指令集中,编译器将括号中 的数值解析为变址地址或偏移量。省略括号,或在括号 内使用大于 5Fh 的值会在 MPASM 汇编器中产生错误。 如果变址参数已被加上了括号,那么就不再需要指定快 速操作 RAM 参数;此参数被假定为 0。这与标准操作 (禁止扩展指令集时)刚好相反。在变址寻址模式中, 声明快速操作 RAM 位也将在 MPASM 汇编器中产生错 误。 目标参数 “d”的操作和以前一样。 在 MPASM 汇编器的最新版本中,必须明确调用对扩展 指令集的语言支持。可以通过命令行选项 /y 或在源代 码中加入 PE 伪指令进行调用。 25.2.4 使能扩展指令集时的注意事项 需要注意的是并非所有用户都有必要使用扩展指令集, 尤其是那些不使用软件堆栈的用户。 此外,立即数变址寻址模式可能会给写入 PIC18 汇编器 的常规应用程序带来问题。这是因为常规的指令会尝试 寻址快速操作存储区中地址低于 5Fh 的寄存器。当使能 了扩展指令集时,这些地址被解析为相对于 FSR2 的立 即数偏移量,所以应用程序会读或写错误的地址。 将应用程序移植到 PIC18F97J60 系列器件时,代码的 类型是非常重要的。在使用扩展指令集时,用 C 语言编 写的代码较长的重入应用程序会运行地很好,而大量使 用快速操作存储区的常规应用程序不会获得任何益处。 下面是在立即数变址寻址模式中,一些面向字节和位的 指令的示例,通过示例可以看出指令执行如何受到影 响。示例中的操作数条件适用于所有这一类的指令。 DS39762A_CN 第 406 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 ADDWF 将 W 与变址寻址单元的内容相加 (立即数变址寻址模式) BSF 将变址寻址单元相应位置 1 (立即数变址寻址模式) 语法: ADDWF 语法: BSF [k], b 操作数: 0 ≤ k ≤ 95 d ∈ [0,1] 操作数: 0 ≤ f ≤ 95 0≤b≤7 操作: (W) + ((FSR2) + k) → dest 操作: 1 → ((FSR2) + k)<b> 受影响的状态位: N、 OV、 C、 DC 和 Z 受影响的状态位: 无 机器码: 0010 说明: 机器码: kkkk 1000 bbb0 kkkk kkkk 将由 FSR2 加上偏移量 k 指定的寄存器 中的位 b 置 1。 如果 d 为 0,结果存储在 W 中。如果 d 为 1,结果存回寄存器 f (默认)。 指令字数: 1 指令周期数: 1 指令周期数: 1 译码 kkkk 说明: 1 Q 周期操作: Q1 01d0 将 W 的内容与由 FSR2 加上偏移量 k 指 定的寄存器的内容相加。 指令字数: 示例: [k] {,d} Q 周期操作: Q2 Q3 Q4 读取 k 处理数据 写入 目标寄存器 ADDWF [OFST] ,0 执行指令前 W OFST FSR2 0A2Ch 单元的内容 执行指令后 W 0A2Ch 单元的内容 = = = = 17h 2Ch 0A00h 20h = = 37h 20h Q1 Q2 Q3 Q4 译码 读寄存器 f 处理数据 写入 目标寄存器 示例: BSF 执行指令前 FLAG_OFST FSR2 0A0Ah 单元的内容 执行指令后 0A0Ah 单元的内容 = = = 0Ah 0A00h 55h = D5h SETF 将变址寻址单元置全 1 (立即数变址寻址模式) 语法: SETF [k] 操作数: 0 ≤ k ≤ 95 操作: FFh → ((FSR2) + k) 受影响的状态位: 无 机器码: 0110 1000 kkkk kkkk 说明: 将由 FSR2 加上偏移量 k 指定的寄存器 的内容置为 FFh。 指令字数: 1 指令周期数: 1 Q 周期操作: Q1 译码 示例: Q2 Q3 Q4 读取 k 处理数据 写寄存器 SETF 执行指令前 OFST = FSR2 = 0A2Ch 单元的内容= 执行指令后 0A2Ch 单元的内容= 2006 Microchip Technology Inc. [FLAG_OFST], 7 超前信息 [OFST] 2Ch 0A00h 00h FFh DS39762A_CN 第 407 页 PIC18F97J60 系列 25.2.5 使用 MICROCHIP MPLAB® IDE 工具 的注意事项 最新版本的 Microchip 软件工具完全支持 PIC18F97J60 系列器件的扩展指令集。包括 MPLAB C18 C 语言编译 器、MPASM 汇编语言和 MPLAB 集成开发环境(IDE)。 在选择了使用软件开发的目标器件后, MPLAB IDE 将 自动按默认模式设置该器件的配置位。XINST 配置位的 默认设置是 0,禁用扩展指令集和立即数变址寻址模 式。在编程过程中必须将 XINST 位置 1 才能确保使用扩 展指令集开发的应用程序能够正确执行。 DS39762A_CN 第 408 页 要使用扩展指令集开发软件,用户必须设置他们的语言 工具以实现对扩展指令和变址寻址模式的支持。根据所 使用的环境,可以通过以下几种方法: • 开发环境中的菜单选项或对话框,允许用户配置项 目的语言工具及其设置 • 命令行选项 • 源代码中的伪指令 这些选项在不同的编译器、汇编器和开发环境中将有所 不同。建议用户在其开发系统所附带的文档中查询相应 的信息。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 26.0 26.1 开发支持 一系列硬件及软件开发工具对 PIC® 单片机提供支持: • 集成开发环境 - MPLAB® IDE 软件 • 汇编器 / 编译器 / 链接器 - MPASMTM 汇编器 - MPLAB C18 和 MPLAB C30 C 编译器 - MPLINKTM 目标链接器 / MPLIBTM 目标库管理器 - MPLAB ASM30 汇编器 / 链接器 / 库 • 模拟器 - MPLAB SIM 软件模拟器 • 仿真器 - MPLAB ICE 2000 在线仿真器 - MPLAB REAL ICE™ 在线仿真器 • 在线调试器 - MPLAB ICD 2 • 器件编程器 - PICSTART® Plus 开发编程器 - MPLAB PM3 器件编程器 - PICkit™ 2 开发编程器 • 低成本演示和开发板及评估工具包 MPLAB 集成开发环境软件 MPLAB IDE 软件为 8/16 位单片机市场提供了前所未有 的易于使用的软件开发平台。 MPLAB IDE 是基于 Windows® 操作系统的应用软件,包括: • 一个包含所有调试工具的图形界面 - 模拟器 - 编程器 (单独销售) - 仿真器 (单独销售) - 在线调试器 (单独销售) • 具有彩色上下文代码显示的全功能编辑器 • 多项目管理器 • 内容可直接编辑的可定制式数据窗口 • 高级源代码调试 • 可视化器件初始化程序,便于进行寄存器的初始化 • 鼠标停留在变量上进行查看的功能 • 通过拖放把变量从源代码窗口拉到观察窗口 • 丰富的在线帮助 • 集成了可选的第三方工具,如 HI-TECH 软件 C 编 译器和 IAR C 编译器 MPLAB IDE 可以让您: • 编辑源文件 (汇编语言或 C 语言) • 点击一次即可完成汇编 (或编译)并将代码下载 到 PIC MCU 仿真器和模拟器工具中 (自动更新所 有项目信息) • 可使用如下各项进行调试: - 源文件 (汇编语言或 C 语言) - 混合汇编语言和 C 语言 - 机器码 MPLAB IDE 在单个开发范例中支持使用多种调试工 具,包括从成本效益高的模拟器到低成本的在线调试 器,再到全功能的仿真器。这样缩短了用户升级到更加 灵活而功能更强大的工具时的学习时间。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 409 页 PIC18F97J60 系列 26.2 MPASM 汇编器 26.5 MPASM 汇编器是全功能通用宏汇编器,适用于所有的 PIC MCU。 MPASM 汇编器可生成用于 MPLINK 目标链接器的可重 定位目标文件、Intel® 标准 HEX 文件、详细描述存储器 使用状况和符号参考的 MAP 文件、包含源代码行及生 成机器码的绝对 LST 文件以及用于调试的 COFF 文件。 MPASM 汇编器具有如下特征: • • • • 26.3 MPLAB C18 和 MPLAB C30 C 编译器 MPLAB C18 和 MPLAB C30 代码开发系统是完全的 ANSI C 编译器,分别适用于 Microchip 的 PIC18 系列 单片机及 dsPIC30F、dsPIC33 和 PIC24 系列数字信号 控制器。这些编译器可提供其他编译器并不具备的强大 的集成功能和出众的代码优化能力,且使用方便。 为便于源代码调试,编译器提供了针对 MPLAB IDE 调 试器的优化符号信息。 26.4 MPLAB ASM30 汇编器为 dsPIC30F 器件提供转换自符 号汇编语言的可重定位机器码。 MPLAB C30 C 编译器 使用该汇编器生成目标文件。汇编器产生可重定位目标 文件之后,可将这些目标文件存档,或与其他可重定位 目标文件和存档链接以生成可执行文件。该汇编器有如 下显著特征: • • • • • • 集成在 MPLAB IDE 项目中 用户定义的宏可简化汇编代码 对多用途源文件进行条件汇编 允许完全控制汇编过程的指令 MPLINK 目标链接器 / MPLIB 目标库管理器 MPLINK 目标链接器包含了由 MPASM 汇编器、MPLAB C18 C 编译器产生的可重定位目标。通过使用链接器脚 本中的指令,它还可链接预编译库中的可重定位目标。 MPLAB ASM30 汇编器、 链接器和库管理器 支持整个 dsPIC30F 指令集 支持定点数据和浮点数据 命令行界面 丰富的指令集 灵活的宏语言 MPLAB IDE 兼容性 26.6 MPLAB SIM 软件模拟器 MPLAB SIM软件模拟器在指令级对PIC MCU和dsPIC® DSC 进行模拟,使得用户可以在 PC 主机的环境下进行 代码开发。对于任何给定的指令,用户均可对数据区进 行检查或修改,并通过各种触发机制来产生激励。可以 将各寄存器的情况记录在文件中,以便进行进一步地运 行时分析。跟踪缓冲器和逻辑分析器的显示使模拟器还 能记录和跟踪程序的执行、 I/O 的动作、大部分的外设 及内部寄存器的状况。 MPLAB SIM 软件模拟器完全支持使用 MPLAB C18 和 MPLAB C30 C 编译器以及MPASM和MAPLAB ASM30 汇编器的符号调试。该软件模拟器可用于在硬件实验室 环境外灵活地开发和调试代码,是一款完美且经济的软 件开发工具。 MPLIB目标库管理器管理预编译代码库文件的创建和修 改。当从源文件调用库中的一段子程序时,只有包含此 子程序的模块被链接到应用中。这样可使大型库在许多 不同应用中被高效地利用。 目标链接器 / 库管理器具有如下特征: • 高效地连接单个的库而不是许多小文件 • 通过将相关的模块组合在一起来增强代码的可维护 性 • 只要列出、替换、删除和抽取模块,便可灵活地创 建库 DS39762A_CN 第 410 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 26.7 MPLAB ICE 2000 高性能在线仿真器 MPLAB ICE 2000 在线仿真器旨在为产品开发工程师提 供一整套用于 PIC 单片机的设计工具。 MPLAB ICE 2000 在线仿真器的软件控制由 MPLAB 集成开发环境平 台提供,它允许在单一环境下进行编辑、编译、下载以 及源代码调试。 MPLAB ICE 2000 是全功能仿真器系统,它具有增强的 跟踪、触发和数据监控功能。处理器模块可插拔,使系 统可轻松进行重新配置以适应各种不同处理器的仿真需 要。MPLAB ICE 2000 在线仿真器的架构允许对其进行 扩展以支持新的 PIC 单片机。 MPLAB ICE 2000 在线仿真器系统设计为一款实时仿真 系统,该仿真系统具备通常只有昂贵的开发工具中才有 的高级功能。选择 PC 平台和 Microsoft® Windows® 32 位操作系统可使这些功能在一个简单而统一的应用中得 到很好的利用。 26.8 MPLAB REAL ICE 在线仿真器系统 MPLAB REAL ICE在线仿真器系统是Microchip针对其闪 存 DSC® 和 MCU 器件而推出的新一代高速仿真器。结 合 MPLAB 集成开发环境 (IDE)所具有的易于使用且 功 能 强 大 的 图 形 用 户 界 面,该 仿 真 器 可 对 PIC® 和 dsPIC® 闪存单片机进行调试和编程。IDE 是随每个工具 包一起提供的。 MPLAB REAL ICE 探针通过高速 USB 2.0 接口与设计工 程师的 PC 相连,并利用与常用 MPLAB ICD 2 系统兼容 的连接器 (RJ11)或新型抗噪声、高速低压差分信号 (LVDS)互连电缆 (CAT5)与目标板相连。 26.9 MPLAB ICD 2 在线调试器 Microchip 的在线调试器 MPLAB ICD 2 是一款功能强大 而成本低廉的运行时开发工具,通过 RS-232 或高速 USB 接口与 PC 主机相连。该工具基于闪存 PIC MCU, 可用于开发本系列及其他 PIC MCU 和 dsPIC DSC。 MPLAB ICD 2使用了闪存器件中内建的在线调试功能。 该功能结合 Microchip 的在线串行编程(In-Circuit Serial ProgrammingTM, ICSPTM)协议,可在 MPLAB 集成开 发环境的图形用户界面上提供成本效益很高的在线闪存 调试。这使设计人员可通过设置断点、单步运行以及对 变量、CPU 状态以及外设寄存器进行监视的方法实现源 代码的开发和调试。其全速运行特性可对硬件和应用进 行实时测试。 MPLAB ICD 2 还可用作某些 PIC 器件的 开发编程器。 26.10 MPLAB PM3 器件编程器 MPLAB PM3 器件编程器是一款通用的、符合 CE 规范 的器件编程器,其可编程电压设置在 VDDMIN 和 VDDMAX 之间时可靠性最高。它有一个用来显示菜单和错误信息 的大 LCD 显示器(128 x 64),以及一个支持各种封装 类型的可拆卸模块化插槽装置。编程器标准配置中带有 一根 ICSPTM 电缆。在单机模式下, MPLAB PM3 器件 编程器不必与 PC 相连即可对 PIC 器件进行读取、验证 和编程。在该模式下它还可设置代码保护。 MPLAB PM3 通过 RS-232 或 USB 电缆连接到 PC 主机上。 MPLAB PM3 具备高速通信能力以及优化算法,可对存 储器很大的器件进行快速编程,它还采用 SD/MMC 卡 用作文件存储及数据安全应用。 可通过 MPLAB IDE 下载将来版本的固件,对 MPLAB REAL ICE 进行现场升级。在即将推出的 MPLAB IDE 版 本中,会支持许多新器件,还将增加一些新特性,如软 件断点和汇编代码跟踪等。在同类仿真器中, MPLAB REAL ICE 的优势十分明显:低成本、高速仿真、实时变 量监视、跟踪分析、复杂断点、耐用的探针接口及较长 (长达 3 米)的互连电缆。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 411 页 PIC18F97J60 系列 26.11 PICSTART Plus 开发编程器 26.13 演示、开发和评估板 PICSTART Plus开发编程器是一款易于使用而成本低廉 的原型编程器。它通过 COM (RS-232)端口与 PC 相 连。 MPLAB 集成开发环境软件使得该编程器的使用简 便、高效。PICSTART Plus 开发编程器支持采用 DIP 封 装的大部分 PIC 器件,其引脚数最多可达 40 个。引脚 数更多的器件,如 PIC16C92X 和 PIC17C76X,可通过 连接一个转接插槽来获得支持。PICSTART Plus 开发编 程器符合 CE 规范。 有许多演示、开发和评估板可用于各种 PIC MCU 和 dsPIC DSC,实现对全功能系统的快速应用开发。大多 数的演示、开发和评估板都有实验布线区,供用户添加 定制电路;还有应用固件和源代码,用于测试和修改。 26.12 PICkit 2 开发编程器 PICkit™ 2 开发编程器是一个低成本编程器;对于某些 选定闪存器件,它也是一个调试器,通过其易于使用的 接口可对众多 Microchip 的低档、中档和 PIC18F 系列 闪存单片机进行编程。 PICkit 2 入门工具包中包含一个 有实验布线区的开发板、十二堂系列课程、软件和 HITECH 的 PICC™ Lite C 编译器,有助于用户快速掌握 PIC® 单片机的使用。这一工具包为使用 Microchip 功能 强大的中档闪存系列单片机进行编程、评估和应用开 发,提供了所需的一切。 DS39762A_CN 第 412 页 这些板支持多种功能部件,包括 LED、温度传感器、开 关、扬声器、 RS-232 接口、 LCD 显示器、电位计和附 加 EEPROM 存储器。 演示和开发板可用于教学环境,在实验布线区设计定制 电路,从而掌握各种单片机应用。 除了 PICDEM™ 和 dsPICDEM™ 演示 / 开发板系列电路 外, Microchip 还有一系列评估工具包和演示软件, 适 用于模拟滤波器设计、 KEELOQ® 数据安全产品 IC、 CAN、 IrDA®、 PowerSmart® 电池管理、 SEEVAL® 评 估系统、 Σ−∆ ADC、流速传感器,等等。 有 关 演 示、开 发 和 评 估 工 具 包 的 完 整 列 表,请 查 阅 Microchip 公司网页 (www.microchip.com)以及最新 的 “Product Selector Guide (产品选型指南) ” (DS00148)。 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 27.0 电气特性 绝对极限参数值 (†) 偏置电压下的环境温度 ........................................................................................................................... -40°C 至 +100°C 储存温度................................................................................................................................................. -65°C 至 +150°C 任一仅数字输入引脚或 MCLR 相对于 VSS 的电压 (除 VDD 外).................................................................-0.3V 至 6.0V 任一数模组合引脚相对于 VSS 的电压..........................................................................................-0.3V 至 (VDD + 0.3V) 息 VDDCORE 引脚相对于 VSS 的电压 ..............................................................................................................-0.3V 至 2.75V VDD 引脚相对于 VSS 的电压.........................................................................................................................-0.3V 至 3.6V 总功耗 (注 1)..........................................................................................................................................................1.0W 流出 VSS 引脚的最大电流......................................................................................................................................300 mA 信 流入 VDD 引脚的最大电流 .....................................................................................................................................250 mA 输入箝位电流, IIK (VI < 0 或 VI > VDD)(注 3)............................................................................................................ ±0 mA 输出箝位电流, IOK (VO < 0 或 VO > VDD)(注 3)........................................................................................................ ±0 mA 前 PORTB 和 PORTC I/O 引脚的最大输出灌电流 .......................................................................................................25 mA PORTD、 PORTE 和 PORTJ I/O 引脚的最大输出灌电流 .........................................................................................8 mA PORTA(2)、 PORTF、 PORTG 和 PORTH I/O 引脚的最大输出灌电流 ....................................................................2 mA 超 PORTB 和 PORTC I/O 引脚的最大输出拉电流 .......................................................................................................25 mA PORTD、 PORTE 和 PORTJ I/O 引脚的最大输出拉电流 .........................................................................................8 mA PORTA(2)、 PORTF、 PORTG 和 PORTH I/O 引脚的最大输出拉电流 ....................................................................2 mA 所有组合端口的最大灌电流 ...................................................................................................................................200 mA 所有组合端口的最大拉电流 ...................................................................................................................................200 mA 注 1: 功耗计算公式为: Pdis = VDD x {IDD – ∑ IOH} + ∑ {(VDD – VOH) x IOH} + ∑ (VOL x IOL) + ∑ (VTPOUT x ITPOUT) 2: 例外情况是 RA0:RA1,可高达 8 mA,能够直接驱动 LED。 3: 不存在箝位二极管。 † 注:如果运行条件超过了上述 “绝对极限参数值”,即可能对器件造成永久性损坏。上述值仅为运行条件的极大 值,我们不建议器件运行在该规范范围以外。器件长时间工作在绝对极限参数条件下,其稳定性可能受到影响。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 413 页 PIC18F97J60 系列 图 27-1: PIC18F97J60 系列电压-频率关系图,使能稳压器 (ENVREG 连接到 VDD) 4.0V 3.6V 3.5V 2.7V 2.5V 2.0V 息 电压(VDD)(1) PIC18F6XJ6X/8XJ6X/9XJ6X 3.0V 0 信 41.6667 MHz 前 1: 当使能片上稳压器时,其 BOR 电路在 VDD 达到无法进行全速操作的电平之前,将自动触发器 件复位。 图 27-2: PIC18F97J60 系列电压-频率关系图,禁止稳压器 (ENVREG 连接到 VSS) 3.00V 超 注 频率 电压(VDDCORE)(1) 2.75V 2.7V 2.50V PIC18F6XJ6X/8XJ6X/9XJ6X 2.25V 2.35V 2.00V 4 MHz 频率 41.6667 MHz 对于 4 MHz 到 41.6667 MHz 之间的频率, FMAX = (107.619 MHz/V) * (VDDCORE – 2V) + 4 MHz 注 1: 当禁止片上稳压器时, VDD 和 VDDCORE 必须维持在 VDDCORE ≤ VDD ≤ 3.6V。 DS39762A_CN 第 414 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 供电电压, PIC18F97J60 系列 (工业级) 直流特性: PIC18F97J60 系列 (工业级) 符号 D001 VDD D001B 特性 供电电压 D001C VDDCORE 单片机内核的外部电源 AVDD 模拟供电电压 D002 VDR RAM 数据保持电压 D003 VPOR VDD 上电复位电压 D004 SVDD VDD 上升率 (确保内部上电复位) 典型值 最大值 单位 VDDCORE 2.65 — — 3.6 3.6 V V 2.00 — 2.70 V VDD – 0.3 — VDD + 0.3 V 1.5 — — V — — TBD V 0.05 — — 条件 ENVREG = 0 ENVREG = 1 详见第 4.3 节 “上电复位 (POR)”。 V/ms 详见第 4.3 节 “上电复位 (POR)”。 1: 这是在不丢失 RAM 数据的前提下,休眠模式或器件复位期间 VDD 所能降到的最小电压值。 超 前 注 (1) 最小值 息 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 信 27.1 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 415 页 PIC18F97J60 系列 27.2 直流特性: 掉电和供电电流 PIC18F97J60 系列 (工业级) PIC18F97J60 系列 (工业级) 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 器件 典型值 最大值 单位 条件 掉电电流 (IPD) (1) 所有器件 TBD µA -40°C TBD µA +25°C TBD TBD µA TBD TBD µA TBD TBD µA TBD TBD µA TBD TBD µA -40°C TBD TBD µA +25°C TBD TBD µA +85°C 息 所有器件 TBD TBD 信 所有器件 +85°C -40°C +25°C +85°C VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 (休眠模式) VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 (休眠模式) VDD = 3.3V, ENVREG = 1 (休眠模式) 超 前 图注: TBD = 待定 注 1: 在休眠模式下,掉电电流并不取决于振荡器的类型。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状态并且 连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器等)时测得的。 2: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 上电工作模式下,所有 IDD 测量值的测试条件为: OSC1 = 外部方波,轨到轨摆幅;所有 I/O 引脚均为三态,上拉至 VDD ; MCLR = VDD ;根据具体应用使能 / 禁止 WDT。 3: 标准低成本 32 kHz 晶振的工作温度范围为 -10°C 至 +70°C。扩展温度晶振成本则高很多。 DS39762A_CN 第 416 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 27.2 直流特性: 掉电和供电电流 PIC18F97J60 系列 (工业级) (续) PIC18F97J60 系列 (工业级) 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 器件 典型值 最大值 单位 条件 供电电流 (IDD) (2,3) 所有器件 所有器件 -40°C +25°C TBD TBD µA +85°C TBD TBD µA -40°C TBD TBD µA +25°C TBD TBD µA +85°C TBD TBD µA -40°C TBD TBD µA +25°C TBD TBD µA +85°C TBD TBD µA TBD TBD µA TBD TBD µA -40°C +25°C +85°C TBD TBD µA -40°C TBD TBD µA +25°C TBD TBD µA +85°C TBD TBD µA -40°C TBD TBD µA +25°C TBD TBD µA +85°C 超 所有器件 µA µA VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 息 所有器件 TBD TBD 信 所有器件 TBD TBD 前 所有器件 FOSC = 31 kHz (RC_RUN 模式, 内部振荡器作为时钟源) VDD = 3.3V, ENVREG = 1 VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 FOSC = 31 kHz (RC_IDLE 模式, 内部振荡器作为时钟源) VDD = 3.3V, ENVREG = 1 图注: TBD = 待定 注 1: 在休眠模式下,掉电电流并不取决于振荡器的类型。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状态并且 连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器等)时测得的。 2: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 上电工作模式下,所有 IDD 测量值的测试条件为: OSC1 = 外部方波,轨到轨摆幅;所有 I/O 引脚均为三态,上拉至 VDD ; MCLR = VDD ;根据具体应用使能 / 禁止 WDT。 3: 标准低成本 32 kHz 晶振的工作温度范围为 -10°C 至 +70°C。扩展温度晶振成本则高很多。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 417 页 PIC18F97J60 系列 27.2 直流特性: 掉电和供电电流 PIC18F97J60 系列 (工业级) (续) PIC18F97J60 系列 (工业级) 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 器件 典型值 最大值 单位 条件 供电电流 (IDD) (2,3) 所有器件 所有器件 所有器件 µA -40°C µA +25°C TBD TBD µA +85°C TBD TBD µA -40°C TBD TBD µA +25°C +85°C TBD TBD µA TBD TBD mA -40°C TBD TBD mA +25°C +85°C TBD TBD mA TBD TBD mA -40°C TBD TBD mA +25°C TBD TBD mA +85°C TBD TBD mA -40°C TBD TBD mA +25°C TBD TBD mA +85°C TBD TBD mA -40°C TBD TBD mA +25°C TBD mA +85°C TBD mA -40°C TBD mA +25°C TBD mA +85°C TBD 所有器件 TBD TBD 超 TBD VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 FOSC = 1 MHZ (PRI_RUN 模式, EC 振荡器) VDD = 3.3V, ENVREG = 1 息 所有器件 TBD TBD 信 所有器件 TBD TBD 前 所有器件 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 VDD = 3.3V, ENVREG = 1 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 VDD = 3.3V, ENVREG = 1 FOSC = 25 MHz (PRI_RUN 模式, EC 振荡器) FOSC = 41.6667 MHZ (PRI_RUN 模式, EC 振荡器) 图注: TBD = 待定 注 1: 在休眠模式下,掉电电流并不取决于振荡器的类型。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状态并且 连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器等)时测得的。 2: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 上电工作模式下,所有 IDD 测量值的测试条件为: OSC1 = 外部方波,轨到轨摆幅;所有 I/O 引脚均为三态,上拉至 VDD ; MCLR = VDD ;根据具体应用使能 / 禁止 WDT。 3: 标准低成本 32 kHz 晶振的工作温度范围为 -10°C 至 +70°C。扩展温度晶振成本则高很多。 DS39762A_CN 第 418 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 27.2 直流特性: 掉电和供电电流 PIC18F97J60 系列 (工业级) (续) PIC18F97J60 系列 (工业级) 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 器件 典型值 最大值 单位 条件 供电电流 (IDD) (2) 所有器件 所有器件 所有器件 所有器件 所有器件 -40°C mA +25°C TBD TBD mA +85°C TBD TBD mA -40°C TBD TBD mA +25°C +85°C TBD TBD mA TBD TBD mA -40°C TBD TBD mA +25°C +85°C TBD TBD mA TBD TBD mA TBD TBD mA TBD TBD mA TBD TBD mA TBD TBD mA +25°C -40°C VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 FOSC = 25 MHZ, 2.7778 MHz 内部 (PRI_RUN HS 模式) VDD = 3.3V, ENVREG = 1 FOSC = 25 MHZ, 2.7778 MHz 内部 (PRI_RUN HS 模式) 息 mA TBD VDD = 2.5V, FOSC = 25 MHZ, VDDCORE = 2.5V, 13.8889 MHz 内部 ENVREG = 0 (PRI_RUN HSPLL 模式) 信 所有器件 TBD 前 所有器件 TBD TBD VDD = 3.3V, ENVREG = 1 FOSC = 25 MHZ, 13.8889 MHz 内部 (PRI_RUN HSPLL 模式) -40°C VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 FOSC = 25 MHZ, 25 MHz 内部 (PRI_RUN HS 模式) VDD = 3.3V, ENVREG = 1 FOSC = 25 MHZ, 25 MHz 内部 (PRI_RUN HS 模式) +25°C +85°C TBD TBD mA +85°C TBD TBD mA -40°C TBD TBD mA +25°C +85°C TBD TBD mA TBD TBD mA -40°C TBD TBD mA +25°C +85°C 超 所有器件 TBD TBD mA TBD TBD mA -40°C TBD TBD mA +25°C TBD TBD mA +85°C VDD = 2.5V, FOSC = 25 MHZ, VDDCORE = 2.5V, 41.6667 MHz 内部 ENVREG = 0 (PRI_RUN HSPLL 模式) VDD = 3.3V, ENVREG = 1 FOSC = 25 MHZ, 41.6667 MHz 内部 (PRI_RUN HSPLL 模式) 图注: TBD = 待定 注 1: 在休眠模式下,掉电电流并不取决于振荡器的类型。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状态并且 连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器等)时测得的。 2: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 上电工作模式下,所有 IDD 测量值的测试条件为: OSC1 = 外部方波,轨到轨摆幅;所有 I/O 引脚均为三态,上拉至 VDD ; MCLR = VDD ;根据具体应用使能 / 禁止 WDT。 3: 标准低成本 32 kHz 晶振的工作温度范围为 -10°C 至 +70°C。扩展温度晶振成本则高很多。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 419 页 PIC18F97J60 系列 27.2 直流特性: 掉电和供电电流 PIC18F97J60 系列 (工业级) (续) PIC18F97J60 系列 (工业级) 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 器件 典型值 最大值 单位 条件 所有器件 所有器件 所有器件 所有器件 µA -40°C µA +25°C TBD TBD µA +85°C TBD TBD µA -40°C TBD TBD µA +25°C TBD TBD µA +85°C TBD TBD µA -40°C TBD TBD µA +25°C TBD TBD µA TBD TBD µA TBD TBD µA TBD TBD µA +85°C TBD TBD mA -40°C TBD TBD mA +25°C +85°C -40°C +25°C TBD TBD mA +85°C TBD TBD mA -40°C TBD TBD mA +25°C TBD TBD mA +85°C TBD TBD mA -40°C TBD TBD mA +25°C TBD TBD mA +85°C VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 息 所有器件 TBD TBD 信 所有器件 TBD TBD 超 所有器件 前 供电电流 (IDD) (2,3) FOSC = 1 MHz (PRI_IDLE 模式, EC 振荡器) VDD = 3.3V, ENVREG = 1 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 VDD = 3.3V, ENVREG = 1 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 VDD = 3.3V, ENVREG = 1 FOSC = 25 MHZ (PRI_IDLE 模式, EC 振荡器) FOSC = 41.6667 MHz (PRI_IDLE 模式, EC 振荡器) 图注: TBD = 待定 注 1: 在休眠模式下,掉电电流并不取决于振荡器的类型。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状态并且 连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器等)时测得的。 2: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 上电工作模式下,所有 IDD 测量值的测试条件为: OSC1 = 外部方波,轨到轨摆幅;所有 I/O 引脚均为三态,上拉至 VDD ; MCLR = VDD ;根据具体应用使能 / 禁止 WDT。 3: 标准低成本 32 kHz 晶振的工作温度范围为 -10°C 至 +70°C。扩展温度晶振成本则高很多。 DS39762A_CN 第 420 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 27.2 直流特性: 掉电和供电电流 PIC18F97J60 系列 (工业级) (续) PIC18F97J60 系列 (工业级) 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 器件 典型值 最大值 单位 条件 供电电流 (IDD) (2,3) 所有器件 所有器件 µA -10°C µA +25°C TBD TBD µA +70°C TBD TBD µA -10°C TBD TBD µA +25°C TBD TBD µA +70°C TBD TBD µA -10°C TBD TBD µA +25°C TBD TBD µA +70°C TBD TBD µA -10°C TBD TBD µA +25°C TBD TBD µA +70°C TBD TBD µA -10°C TBD TBD µA +25°C TBD µA +70°C TBD µA -10°C TBD TBD µA +25°C TBD TBD µA +70°C TBD 超 所有器件 TBD VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 息 所有器件 TBD TBD 信 所有器件 TBD TBD 前 所有器件 FOSC = 32 kHz(4) (SEC_RUN 模式, Timer1 作为时钟源) VDD = 3.3V, ENVREG = 1 VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 FOSC = 32 kHz(4) (SEC_IDLE 模式, Timer1 作为时钟源) VDD = 3.3V, ENVREG = 1 图注: TBD = 待定 注 1: 在休眠模式下,掉电电流并不取决于振荡器的类型。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状态并且 连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器等)时测得的。 2: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 上电工作模式下,所有 IDD 测量值的测试条件为: OSC1 = 外部方波,轨到轨摆幅;所有 I/O 引脚均为三态,上拉至 VDD ; MCLR = VDD ;根据具体应用使能 / 禁止 WDT。 3: 标准低成本 32 kHz 晶振的工作温度范围为 -10°C 至 +70°C。扩展温度晶振成本则高很多。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 421 页 PIC18F97J60 系列 27.2 直流特性: 掉电和供电电流 PIC18F97J60 系列 (工业级) (续) PIC18F97J60 系列 (工业级) 参数 编号 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 器件 典型值 最大值 单位 条件 模块差分电流 (∆IWDT、 ∆IOSCB、 ∆IAD 和 ∆IETH) TBD TBD µA VDD = 2.0V, -40°C 至 +85°C VDDCORE = 2.0V, ENVREG = 0 TBD TBD µA VDD = 2.5V, -40°C 至 +85°C VDDCORE = 2.5V, ENVREG = 0 TBD TBD µA -40°C 至 +85°C 140 TBD mA -40°C 至 +85°C A/D 转换器 超 D026 (∆IAD) µA µA µA µA µA µA µA µA µA µA µA µA µA µA µA µA µA µA D027 ∆IETH -40°C +25°C +85°C -40°C +25°C +85°C -40°C +25°C +85°C -40°C +25°C +85°C -40°C +25°C +85°C -40°C +25°C +85°C VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 VDD = 3.3V, ENVREG = 1 息 Timer1 振荡器 TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD 信 D025 (∆IOSCB) 看门狗定时器 前 D022 (∆IWDT) 以太网模块 VDD = 2.0V, VDDCORE = 2.0V, ENVREG = 0 Timer1(3) 为 32 kHz VDD = 2.5V, VDDCORE = 2.5V, ENVREG = 0 Timer1(3) 为 32 kHz VDD = 3.3V, ENVREG = 1 Timer1(3) 为 32 kHz A/D 启动,但不进行转换 VDD = 3.3V, ENVREG = 1 VDD = 3.3V, ENVREG = 1 包括 TPOUT+ 和 TPOUT- 的灌 电流,LEDA 和 LEDB 被禁止 图注: TBD = 待定 注 1: 在休眠模式下,掉电电流并不取决于振荡器的类型。掉电电流是在器件处于休眠模式、所有 I/O 引脚处于高阻状态并且 连接到 VDD 或 VSS,禁止所有会带来新增电流的功能部件 (如 WDT、 Timer1 振荡器等)时测得的。 2: 供电电流主要受工作电压、频率和模式的影响。其他因素,如 I/O 引脚负载和开关速率、振荡器类型和电路、内部代码 执行模式和温度也会对电流消耗产生影响。 上电工作模式下,所有 IDD 测量值的测试条件为: OSC1 = 外部方波,轨到轨摆幅;所有 I/O 引脚均为三态,上拉至 VDD ; MCLR = VDD ;根据具体应用使能 / 禁止 WDT。 3: 标准低成本 32 kHz 晶振的工作温度范围为 -10°C 至 +70°C。扩展温度晶振成本则高很多。 DS39762A_CN 第 422 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 27.3 PIC18F97J60 系列 (工业级) 直流特性: 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 直流特性 参数 编号 符号 VIL 特性 最小值 最大值 单位 条件 输入低电压 I/O 端口: D030 带 TTL 缓冲器 VSS 0.15 VDD V D031 带施密特触发缓冲器 VSS 0.2 VDD V MCLR VSS 0.2 VDD V D033 OSC1 VSS 0.3 VDD V HS 和 HSPLL 模式 D033A OSC1 VSS 0.2 VDD V EC 模式 D034 T13CKI VSS 0.3 V 0.25 VDD + 0.8V VDD V 0.8 VDD VDD V 0.8 VDD VDD V 0.7 VDD VDD V HS 和 HSPLL 模式 0.8 VDD VDD V EC 模式 1.6 VDD V — ±1 µA 输入高电压 I/O 端口: D040 带 TTL 缓冲器 D041 带施密特触发缓冲器 MCLR D043 OSC1 D043A OSC1 T13CKI IIL D060 I/O 端口 D061 D063 D070 注 输入泄漏电流 (1) 超 D044 前 D042 信 VIH 息 D032 VSS ≤ VPIN ≤ VDD, 引脚处于高阻状态 MCLR — ±1 µA Vss ≤ VPIN ≤ VDD OSC1 — ±1 µA Vss ≤ VPIN ≤ VDD 30 250 µA VDD = 3.3V, VPIN = VSS IPU 弱上拉电流 IPURB PORTB 弱上拉电流 1: 负电流定义为引脚的拉电流。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 423 页 PIC18F97J60 系列 直流特性: PIC18F97J60 系列 (工业级) (续) 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 直流特性 参数 编号 符号 最小值 输出低电压 最大值 单位 条件 0.6 V IOL = 8.5 mA, VDD = 3.3V, -40°C 至 +85°C D080 I/O 端口 — D083 OSC2/CLKO (EC 和 ECPLL 模式) — 0.6 V 信 VOL 特性 息 27.3 IOL = 1.6 mA, VDD = 3.3V, -40°C 至 +85°C VDD – 0.7 — V IOH = -3.0 mA, VDD = 3.3V, -40°C 至 +85°C VDD – 0.7 — V IOH = -1.3 mA, VDD = 3.3V, -40°C 至 +85°C — 15 pF 当外部时钟用于驱动 OSC1 时处于 HS 模式下 VOH 输出高电压 (1) I/O 端口 D092 OSC2/CLKO (内部 RC、 EC 和 ECPLL 模式) 前 D090 输出引脚上的容性负载规范 COSC2 OSC2 引脚 D101 CIO 所有 I/O 引脚和 OSC2 (在内部 RC、 EC 和 ECPLL 模式下) — 50 pF 满足交流时序规范 D102 CB SCLX 和 SDAX — 400 pF I2C™ 规范 注 超 D100 1: 负电流定义为引脚的拉电流。 DS39762A_CN 第 424 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 27-1: 存储器编程要求 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 直流特性 参数 编号 符号 特性 最小值 典型值† 最大值 单位 条件 程序闪存 D130 EP 单元擦写次数 100 1K — D131 VPR E/W -40°C 至 +85°C 用于读取的 VDD VMIN — 3.6 V VMIN = 最小工作电压 D132B VPEW 自定时写的 VDD VMIN — 3.6 V VMIN = 最小工作电压 D133A TIW 自定时写周期时间 — 2.8 — ms 20 — — — 10 — 年 mA D134 D135 TRETD 特性保存期 IDDP 编程期间的供电电流 假设没有违反其他规范 超 前 信 息 † 除非另外说明,否则“典型值”栏中的数据均为 3.3V 和 25°C 条件下的值。这些参数仅供设计参考,未经测 试。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 425 页 PIC18F97J60 系列 表 27-2: 比较器规范 运行条件:3.0V ≤ VDD ≤ 3.6V, -40°C ≤ TA ≤ +85°C (除非另外说明) 参数 编号 符号 特性 最小值 典型值 最大值 单位 D300 VIOFF 输入失调电压 — ±5.0 ±10 mV D301 VICM 输入共模电压 * 0 — AVDD – 1.5 V 共模抑制比 * 55 — — dB (1)* — 150 400 ns — — 10 µs D302 CMRR 300 TRESP 响应时间 301 TMC2OV 比较器模式变为输出有效的时间 * 注释 * 这些参数为特性值,但未经测试。 1: 响应时间是在比较器的一个输入端电压为 (AVDD – 1.5)/2,而另一个输入端从 VSS 跳变到 AVDD 时测得的。 注 表 27-3: 参考电压规范 参数 编号 特性 最小值 典型值 最大值 单位 — VDD/32 LSb — — 1/2 LSb — 2k — Ω — — 10 µs VRES 分辨率 VDD/24 D311 VRAA 绝对精度 D312 VRUR 单位电阻值 (R) TSET 稳定时间 (1) 信 符号 息 运行条件: 3.0V ≤ VDD ≤ 3.6V, -40°C ≤ TA ≤ +85°C (除非另外说明) D310 310 前 1: 稳定时间是在 CVRR = 1 并且 CVR3:CVR0 从 0000 跳变到 1111 时测得的。 表 27-4: 内部稳压器规范 超 注 注释 运行条件: -40°C ≤ TA ≤ +85°C (除非另外说明) 参数 编号 符号 * 特性 最小值 典型值 最大值 单位 VRGOUT 稳压器输出电压 — 2.5 — V CEFC 外部滤波电容值 1 10 — µF 注释 电容必须为低串联电阻 这些参数为特性值,但未经测试。尚未为这些规范分配参数编号。 DS39762A_CN 第 426 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 27.4 27.4.1 交流 (时序)特性 时序参数符号体系 时序参数符号采用以下格式之一进行创建: 1. TppS2ppS 2. TppS T 3. TCC:ST 4. Ts F 频率 小写字母 (pp)及其含义: pp cc ECCP1 ck CLKO cs CSx di SDIx do SDOx dt io mc 数据输入 I/O 端口 MCLR (仅用于 I2C 规范) (仅用于 I2C 规范) T 时间 osc rd OSC1 RD rw sc ss t0 t1 wr RD 或 WR SCKx SSx T0CKI T13CKI WR P R V Z 周期 上升 有效 高阻 High Low 高 低 大写字母及其含义: S F 下降 H 高 I 无效 (高阻) L 低 仅用于 I2C AA 输出访问 BUF 总线空闲 TCC:ST (仅用于 I2C 规范) CC HD 保持 SU 建立 DAT STA 数据输入保持 启动条件 STO 停止条件 ST 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 427 页 PIC18F97J60 系列 27.4.2 时序条件 表 27-5中指定的温度和电压适用于所有的时序规范(除 非另外说明)。图 27-3 规定了时序规范的负载条件。 表 27-5: 温度和电压规范——交流 标准运行条件 (除非另外说明) 运行温度 工业级为 -40°C ≤ TA ≤ +85°C 直流规范第 27.1 节和第 27.3 节描述了工作电压 VDD 的范围。 交流特性 图 27-3: 器件时序规范的负载条件 负载条件 1 负载条件 2 VDD/2 RL CL 引脚 VSS CL 引脚 RL = 464Ω VSS DS39762A_CN 第 428 页 CL = 50 pF 适用于除 OSC2/CLKO 外的所有引脚 包括作为输出的 D 和 E 端口 CL = 15 pF 适用于 OSC2/CLKO 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 27.4.3 时序图和规范 图 27-4: 外部时钟时序 (除 PLL 外的所有模式) Q4 Q1 Q2 Q3 Q4 Q1 OSC1 1 3 4 3 4 2 表 27-6: 1A 外部时钟时序要求 符号 FOSC 特性 最小值 最大值 单位 DC 41.6667 MHz EC 振荡器模式 6 25 MHz HS 振荡器模式 24 — ns HS 振荡器模式 振荡器周期 (1) 40 167 ns 外部 CLKI 频率 (1) 振荡器频率 (1) 1 TOSC 外部 CLKI 周期 (1) 前 参数 编号 信 息 CLKO 条件 TCY 指令周期时间 (1) 96 — ns HS 振荡器模式 TCY = 4/FOSC,工业级 3 TOSL, TOSH 外部时钟输入 (OSC1)的 高电平或低电平时间 10 — ns EC 振荡器模式 4 TOSR, TOSF 外部时钟输入 (OSC1)的 上升或下降时间 — 7.5 ns EC 振荡器模式 时钟频率容差 — ±50 ppm 使能以太网模块 5 注 超 2 1: 对于除 PLL 外的所有配置,指令周期时间 (TCY)等于输入振荡器时基周期的四倍。所有规定值均为基于 器件在标准运行条件下执行代码所对应的特定振荡器类型的特性数据。超出规定值可能导致振荡器运行不 稳定和 / 或电流消耗超出预期值。所有器件在测试 “最小值”时,都在 OSC1/CLKI 引脚连接了外部时钟。 当使用了外部时钟输入时,所有器件的 “最大”周期时间限制为 “DC”(无时钟)。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 429 页 PIC18F97J60 系列 表 27-7: 参数 编号 PLL 时钟时序规范 (VDD = 2.6V 至 3.6V) 符号 特性 最小值 典型值 † 最大值 单位 F10 FOSC 振荡器频率范围 8 — 25 F11 FSYS 片上 VCO 系统频率 8 20 — — 37.5 62.5 F12 trc PLL 起振时间 (锁定时间) — — 2 ms F13 ∆CLK CLKO 稳定性 (抗抖动) -2 — +2 % 条件 MHz HSPLL 模式 MHz 仅 ECPLL 模式 MHz 息 † 除非另外说明,否则“典型值”栏中的数据均为 3.3V 和 25°C 条件下的值。这些参数仅供设计参考,未经测 试。 最小值 典型值 最大值 单位 在频率为 31 kHz(1) 时的 INTRC 精度 21.7 — 40.3 kHz 前 特性 参数 编号 条件 1: INTRC 频率随 VDDCORE 的变化而改变。 超 注 内部 RC 精度 PIC18F97J60 系列 (工业级) 交流特性: 信 表 27-8: DS39762A_CN 第 430 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 27-5: CLKO 和 I/O 时序 Q1 Q4 Q2 Q3 OSC1 11 10 CLKO 13 19 14 12 18 16 I/O 引脚 (输入) 15 17 I/O 引脚 (输出) 新值 旧值 20, 21 参数 编号 CLKO 和 I/O 时序要求 符号 特性 10 TOSH2CKL OSC1 ↑ 到 CLKO ↓ 的时间 11 TOSH2CKH OSC1 ↑ 到 CLKO ↑ 的时间 12 TCKR 13 TCKF 最小值 信 表 27-9: 息 负载条件请参见图 27-3。 注: CLKO 上升时间 CLKO 下降时间 TCKL2IOV CLKO ↓ 到端口输出有效的时间 15 TIOV2CKH 在 CLKO ↑ 之前端口输入有效的时间 前 14 TCKH2IOI TOSH2IOV OSC1 ↑ (Q1 周期)到端口输出有效的时 间 18 TOSH2IOI 19 最大值 单位 — 75 200 ns — 75 200 ns — 15 30 ns — 15 30 ns — — 0.5 TCY + 20 ns 0.25 TCY + 25 — — ns 在 CLKO ↑ 之后端口输入保持的时间 16 17 典型值 — — ns 50 150 ns 100 — — ns TIOV2OSH 端口输入有效到 OSC1↑ 的时间 (I/O 输入建立时间) 0 — — ns 超 0 — OSC1 ↑ (Q2 周期)到端口输入无效的时 间 (I/O 输入保持时间) 20 TIOR 端口输出上升时间 — — 6 ns 21 TIOF 端口输出下降时间 — — 5 ns 22† TINP INTx 引脚高电平或低电平时间 TCY — — ns 23† TRBP RB7:RB4 电平变化中断 INTx 高电平或低 电平时间 TCY — — ns 条件 † 这些参数是与任何内部时钟边沿无关的异步事件。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 431 页 PIC18F97J60 系列 图 27-6: 读程序存储器时序图 Q1 Q2 Q3 Q4 Q1 Q2 OSC1 A<19:16> BA0 地址 地址 AD<15:0> 地址 外部数据 150 151 地址 163 160 162 161 155 166 167 168 ALE 164 169 171 CE 171A 息 OE 165 表 27-10: CLKO 和 I/O 时序要求 符号 特性 前 参数 编号 信 运行条件:2.0V < VCC < 3.6V,-40°C < TA < +125°C(除非另外说明)。 最小值 典型值 最大值 单位 TadV2alL 地址输出有效到 ALE ↓ 的时间 (地址建立时间) 0.25 TCY – 10 — — ns 151 TalL2adl ALE ↓ 到地址输出无效的时间 (地址保持时间) 5 — — ns 155 TalL2oeL ALE ↓ 到 OE ↓ 的时间 10 0.125 TCY — ns 160 TadZ2oeL AD 高阻态到 OE ↓ 的时间 (总线释放 OE) 0 — — ns 161 ToeH2adD OE ↑ 到驱动 AD 的时间 0.125 TCY – 5 — — ns 162 TadV2oeH 在 OE ↑ 之前的低位数据有效时间 (数据建立时间) 20 — — ns 163 ToeH2adl OE ↑ 到数据输入无效的时间 (数据保持时间) 0 — — ns 164 TalH2alL ALE 脉冲宽度 — TCY — ns 165 ToeL2oeH OE 脉冲宽度 0.5 TCY – 5 0.5 TCY — ns 166 TalH2alH ALE ↑ 到 ALE ↑ 的时间 (周期时间) — 0.25 TCY — ns 167 Tacc 地址有效到数据有效的时间 0.75 TCY – 25 — — ns 168 Toe OE ↓ 到数据有效的时间 — 0.5 TCY – 25 ns 169 TalL2oeH ALE ↓ 到 OE ↑ 的时间 0.625 TCY – 10 — 0.625 TCY + 10 ns 171 TalH2csL 芯片使能有效到 ALE ↓ 的时间 0.25 TCY – 20 — — ns 171A TubL2oeH AD 有效到芯片使能有效的时间 — — 10 ns 超 150 DS39762A_CN 第 432 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 27-7: 写程序存储器时序图 Q1 Q2 Q3 Q4 Q1 Q2 OSC1 A<19:16> BA0 地址 地址 166 AD<15:0> 数据 地址 地址 153 150 156 151 ALE 171 CE 171A 154 WRH 或 WRL 157A 表 27-11: 写程序存储器时序要求 前 参数 编号 信 运行条件:2.0V < VCC < 3.6V,-40°C < TA < +125°C(除非另外说明)。 息 157 UB 或 LB 符号 特性 最小值 典型值 最大值 单位 TadV2alL 地址输出有效到 ALE ↓ 的时间 (地址建立时间) 0.25 TCY – 10 — — ns 151 TalL2adl ALE ↓ 到地址输出无效的时间 (地址保持时间) 5 — — ns 153 TwrH2adl WRn ↑ 到数据输出无效的时间 (数据保持时间) 154 TwrL WRn 脉冲宽度 156 TadV2wrH 在 WRn ↑ 之前的数据有效时间 (数据建立时间) 157 TbsV2wrL 在 WRn ↓ 之前的字节选择有效时间 (字节选择建立时间) 157A TwrH2bsI WRn ↑ 到字节选择无效的时间 (字节选择保持时间) 0.125 TCY – 5 166 TalH2alH ALE ↑ 到 ALE ↑ 的时间 (周期时间) 171 TalH2csL 芯片使能有效到 ALE ↓ 的时间 171A TubL2oeH AD 有效到芯片使能有效的时间 超 150 2006 Microchip Technology Inc. 超前信息 5 — — ns 0.5 TCY – 5 0.5 TCY — ns 0.5 TCY – 10 — — ns 0.25 TCY — — ns — — ns — 0.25 TCY — ns 0.25 TCY – 20 — — ns — — 10 ns DS39762A_CN 第 433 页 PIC18F97J60 系列 图 27-8: 复位、看门狗定时器、振荡器起振定时器和上电延时定时器时序 VDD MCLR 30 内部 POR 33 PWRT 超时 32 振荡器 超时 内部 复位 看门狗 定时器 复位 31 34 34 I/O 引脚 负载条件请参见图 27-3。 注: 图 27-9: 息 欠压复位时序 BVDD VDD 35 VBGAP = 1.2V 信 VIRVST 使能内部 参考电压 内部参考 电压稳定 复位、看门狗定时器、振荡器起振定时器、上电延时定时器和欠压复位要求 符号 特性 最小值 超 参数 编号 前 表 27-12: 36 典型值 最大值 单位 2 — — µs 看门狗定时器超时周期 (无后分频器) 2.8 4.1 5.4 ms TOST 振荡器起振定时器周期 1024 TOSC — 1024 TOSC — TPWRT 上电延时定时器周期 46.2 66 85.8 ms 34 TIOZ 自 MCLR 低电平或看门狗定时器复 位起 I/O 处于高阻状态的时间 — 2 — µs 38 TCSD CPU 启动时间 — TBD — µs 30 TMCL 31 TWDT 32 33 图注: MCLR 脉冲宽度 (低电平) 条件 TOSC = OSC1 周期 TBD = 待定 DS39762A_CN 第 434 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 27-10: TIMER0 和 TIMER1 外部时钟时序 T0CKI 41 40 42 T1OSO/T13CKI 46 45 47 48 TMR0 或 TMR1 41 42 45 46 符号 TT0H TT0L TT0P TT1H TT1L 特性 T0CKI 高电平脉冲宽度 T0CKI 低电平脉冲宽度 最小值 48 单位 无预分频器 0.5 TCY + 20 — ns 10 — ns 无预分频器 0.5 TCY + 20 — ns 有预分频器 10 — ns 无预分频器 TCY + 10 — ns 有预分频器 取较大值: 20 ns 或 (TCY + 40)/N — ns T13CKI 高电 同步,无预分频器 平时间 同步,有预分频器 0.5 TCY + 20 — ns 10 — ns 异步 30 — ns T13CKI 低电 同步,无预分频器 平时间 同步,有预分频器 0.5 TCY + 5 — ns 10 — ns T0CKI 周期 30 — ns 取较大值: 20 ns 或 (TCY + 40)/N — ns 异步 60 — ns FT1 T13CKI 振荡器输入频率范围 TCKE2TMRI 从外部 T13CKI 时钟边沿到定时器递增的延时 DC 50 kHz 2 TOSC 7 TOSC — 异步 47 最大值 有预分频器 前 40 TIMER0 和 TIMER1 外部时钟要求 超 参数 编号 息 表 27-13: 负载条件请参见图 27-3。 信 注: TT1P T13CKI 输入 同步 周期 2006 Microchip Technology Inc. 超前信息 条件 N = 预分频值 (1, 2, 4,..., 256) N = 预分频值 (1, 2, 4, 8) DS39762A_CN 第 435 页 PIC18F97J60 系列 图 27-11: 捕捉 / 比较 /PWM 时序 (包括 ECCP 模块) CCPx (捕捉模式) 50 51 52 CCPx (比较或 PWM 模式) 54 捕捉 / 比较 /PWM 要求 (包括 ECCP 模块) 符号 特性 50 TCCL CCPx 输入低电 平时间 无预分频器 51 TCCH CCPx 输入高电 平时间 无预分频器 52 TCCP CCPx 输入周期 53 TCCR 54 TCCF 表 27-15: 参数 编号 有预分频器 前 参数 编号 信 负载条件请参见图 27-3。 注: 表 27-14: 息 53 最小值 最大值 单位 0.5 TCY + 20 — ns 10 — ns 0.5 TCY + 20 — ns 10 — ns 3 TCY + 40 N — ns CCPx 输出下降时间 — 25 ns CCPx 输出下降时间 — 25 ns 最小值 最大值 单位 超 有预分频器 条件 N = 预分频值 (1、 4 或 16) 并行从动端口要求 符号 特性 62 TdtV2wrH 在 WR ↑ 或 CS ↑ 之前的数据输入有效时间 (建立时间) 20 — ns 63 TwrH2dtI WR ↑ 或 CS ↑ 到数据输入无效的时间 (保持时间) 20 — ns 64 TrdL2dtV RD ↓ 和 CS ↓ 到数据输出有效的时间 — 80 ns 65 TrdH2dtI RD ↑ 或 CS ↓ 到数据输出无效的时间 10 30 ns 66 TibfINH 禁止 IBF 标志位被 WR ↑ 或 CS ↑ 清零 — 3 TCY DS39762A_CN 第 436 页 超前信息 条件 2006 Microchip Technology Inc. PIC18F97J60 系列 图 27-12: SPI 主控模式时序示例 (CKE = 0) SSx 70 SCKx (CKP = 0) 71 72 78 79 79 78 SCKx (CKP = 1) 80 bit 6 - - - - - - 1 MSb SDOx LSb 75, 76 SDIx MSb 输入 LSb 输入 bit 6 - - - -1 息 74 73 信 负载条件请参见图 27-3。 注: 表 27-16: 符号 特性 前 参数 编号 SPI 模式要求示例 (主控模式, CKE = 0) 70 TSSL2SCH, SSx ↓ 到 SCKx ↓ 或 SCKx ↑ 输入的时间 TSSL2SCL 71 TSCH 72 TSCL 72A SCKx 输入高电平时间 (从动模式) 超 71A SCKx 输入低电平时间 (从动模式) 连续 单字节 连续 单字节 73 TDIV2SCH, SDIx 数据输入到 SCKx 边沿的建立时间 TDIV2SCL 73A TB2B 74 TSCH2DIL, SDIx 数据输入到 SCKx 边沿的保持时间 TSCL2DIL 字节 1 的最后一个时钟边沿到字节 2 的第一个时 钟边沿之间的时间 最小值 最大值 单位 TCY — ns 1.25 TCY + 30 — ns 40 — ns 1.25 TCY + 30 — ns 40 — ns 100 — ns 1.5 TCY + 40 — ns 100 — ns 75 TDOR SDOx 数据输出上升时间 — 25 ns 76 TDOF SDOx 数据输出下降时间 — 25 ns 78 TSCR SCKx 输出上升时间 (主控模式) — 25 ns 79 TSCF SCKx 输出下降时间 (主控模式) — 25 ns 80 TSCH2DO, 在 SCKx 边沿之后 SDOx 数据输出有效的时间 TSCL2DOV — 50 ns 注 条件 (注 1) (注 1) (注 2) 1: 要求使用参数 #73A。 2: 仅当使用参数 #71A 和 #72A 时。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 437 页 PIC18F97J60 系列 图 27-13: SPI 主控模式时序示例 (CKE = 1) SSx 81 SCKx (CKP = 0) 71 72 79 73 SCKx (CKP = 1) 80 78 LSb bit 6 - - - - - - 1 MSb SDOx 75, 76 SDIx MSb 输入 bit 6 - - - -1 LSb 输入 74 参数 编号 71 SPI 模式要求示例 (主控模式, CKE = 1) 符号 TSCH 71A 72 TSCL 72A 信 表 27-17: 息 负载条件请参见图 27-3。 特性 SCKx 输入高电平时间 (从动模式) SCKx 输入低电平时间 (从动模式) 连续 单字节 前 注: 连续 单字节 TDIV2SCH, SDIx 数据输入到 SCKx 边沿的建立时间 TDIV2SCL 73A TB2B 74 TSCH2DIL, SDIx 数据输入到 SCKx 边沿的保持时间 TSCL2DIL 超 73 字节 1 的最后一个时钟边沿到字节 2 的第一个时 钟边沿之间的时间 最小值 最大值 单位 1.25 TCY + 30 — ns 40 — ns 1.25 TCY + 30 — ns 40 — ns 100 — ns 1.5 TCY + 40 — ns 100 — ns 75 TDOR SDOx 数据输出上升时间 — 25 ns 76 TDOF SDOx 数据输出下降时间 — 25 ns 78 TSCR SCKx 输出上升时间 (主控模式) — 25 ns 79 TSCF SCKx 输出下降时间 (主控模式) — 25 ns 80 TSCH2DO, 在 SCKx 边沿之后 SDOx 数据输出有效的时间 TSCL2DOV — 50 ns 81 TDOV2SCH, SDOx 数据输出建立到出现 SCKx 边沿的时间 TDOV2SCL TCY — ns 注 条件 (注 1) (注 1) (注 2) 1: 要求使用参数 #73A。 2: 仅当使用参数 #71A 和 #72A 时。 DS39762A_CN 第 438 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 27-14: SPI 从动模式时序示例 (CKE = 0) SSx 70 SCKx (CKP = 0) 83 71 72 78 79 79 78 SCKx (CKP = 1) 80 MSb SDOx bit 6 - - - - - - 1 LSb 75, 76 MSb 输入 SDI SDIx 77 bit 6 - - - -1 LSb 输入 74 负载条件请参见图 27-3。 注: SPI 模式要求示例 (从动模式时序, CKE = 0) 符号 特性 TSSL2SCH, SSx ↓ 到 SCKX ↓ 或 SCKX ↑ 输入的时间 TSSL2SCL 71 TSCH 71A 72 TSCL 连续 单字节 SCKX 输入低电平时间 (从动模式) 连续 单字节 超 72A SCKX 输入高电平时间 (从动模式) 前 70 信 表 27-18: 参数 编号 息 73 最小值 最大值 单位 TCY — ns 1.25 TCY + 30 — ns 40 — ns 1.25 TCY + 30 — ns 40 — ns 100 — ns 1.5 TCY + 40 — ns 100 — ns — 25 ns 73 TDIV2SCH, SDIX 数据输入到 SCKX 边沿的建立时间 TDIV2SCL 73A TB2B 74 TSCH2DIL, SDIX 数据输入到 SCKX 边沿的保持时间 TSCL2DIL 75 TDOR SDOX 数据输出上升时间 76 TDOF SDOX 数据输出下降时间 — 25 ns 77 TSSH2DOZ SSx ↑ 到 SDOX 输出高阻态的时间 10 50 ns 78 TSCR SCKX 输出上升时间 (主控模式) — 25 ns 79 TSCF SCKX 输出下降时间 (主控模式) — 25 ns 80 TSCH2DOV, 在 SCKX 边沿之后 SDOX 数据输出有效的时间 TSCL2DOV — 50 ns 83 TSCH2SSH, 在 SCKX 边沿之后出现 SSx ↑ 的时间 TSCL2SSH 1.5 TCY + 40 — ns 注 字节 1 的最后一个时钟边沿到字节 2 的第一个时钟边沿 之间的时间 条件 (注 1) (注 1) (注 2) 1: 要求使用参数 #73A。 2: 仅当使用参数 #71A 和 #72A 时。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 439 页 PIC18F97J60 系列 图 27-15: SPI 从动模式时序示例 (CKE = 1) 82 SSx 70 SCKx (CKP = 0) 83 71 72 SCKx (CKP = 1) 80 MSb SDOx bit 6 - - - - - - 1 LSb 75, 76 SDIx SDI MSb 输入 77 bit 6 - - - -1 LSb 输入 负载条件请参见图 27-3。 参数 编号 SPI 从动模式要求示例 (CKE = 1) 符号 信 表 27-19: 特性 TSSL2SCH, SSx ↓ 到 SCKX ↓ 或 SCKX ↑ 输入的时间 TSSL2SCL 71 TSCH TSCL 72A SCKX 输入低电平时间 (从动模式) 连续 单字节 连续 单字节 超 72 SCKX 输入高电平时间 (从动模式) 前 70 71A 息 74 注: 最小值 TCY 最大值 单位 — ns 1.25 TCY + 30 — ns 40 — ns — ns 40 — ns (注 1) 1.5 TCY + 40 — ns (注 2) 100 — ns — 25 ns TB2B 74 TSCH2DIL, SDIX 数据输入到 SCKX 边沿的保持时间 TSCL2DIL 75 TDOR SDOX 数据输出上升时间 76 TDOF SDOX 数据输出下降时间 — 25 ns 77 TSSH2DOZ SSx ↑ 到 SDOX 输出高阻态的时间 10 50 ns 78 TSCR SCKX 输出上升时间 (主控模式) — 25 ns 79 TSCF SCKX 输出下降时间 (主控模式) — 25 ns 80 TSCH2DOV, 在 SCKX 边沿之后 SDOX 数据输出有效的时间 TSCL2DOV — 50 ns 82 TSSL2DOV 在 SSx ↓ 边沿之后 SDOX 数据输出有效的时间 — 50 ns 83 TSCH2SSH, 在 SCKX 边沿之后出现 SSx ↑ 的时间 TSCL2SSH 1.5 TCY + 40 — ns 注 (注 1) 1.25 TCY + 30 73A 字节 1 的最后一个时钟边沿到字节 2 的第一个时钟边沿 之间的时间 条件 1: 要求使用参数 #73A。 2: 仅当使用参数 #71A 和 #72A 时。 DS39762A_CN 第 440 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 I2C™ 总线启动 / 停止位时序 图 27-16: SCLx 91 93 90 92 SDAx 停止 条件 启动 条件 负载条件请参见图 27-3。 90 91 92 93 符号 TSU:STA THD:STA TSU:STO 特性 最小值 最大值 单位 100 kHz 模式 4700 — ns 仅与重复启动条件相关 建立时间 400 kHz 模式 600 启动条件 100 kHz 模式 ns 这个周期后产生第一个时钟 脉冲 启动条件 — 4700 — 400 kHz 模式 600 — 100 kHz 模式 4000 — 400 kHz 模式 600 — 400 kHz 模式 100 kHz 模式 ns ns 超 保持时间 图 27-17: — 600 保持时间 条件 — 4000 停止条件 建立时间 THD:STO 停止条件 信 参数 编号 息 I2C™ 总线启动 / 停止位要求 (从动模式) 表 27-20: 前 注: I2C™ 总线数据时序 103 102 100 101 SCLx 90 106 107 91 92 SDAx 输入 110 109 109 SDAx 输出 注: 负载条件请参见图 27-3。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 441 页 PIC18F97J60 系列 100 符号 THIGH 特性 时钟高电平时间 最小值 最大值 单位 条件 100 kHz 模式 4.0 — µs PIC18F97J60 系列的工作频率 不得低于 1.5 MHz 400 kHz 模式 0.6 — µs PIC18F97J60 系列的工作频率 不得低于 10 MHz 1.5 TCY — 100 kHz 模式 4.7 — µs PIC18F97J60 系列的工作频率 不得低于 1.5 MHz 400 kHz 模式 1.3 — µs PIC18F97J60 系列的工作频率 不得低于 10 MHz MSSP 模块 101 TLOW 时钟低电平时间 1.5 TCY — 100 kHz 模式 — 1000 ns 400 kHz 模式 20 + 0.1 CB 300 ns 100 kHz 模式 — 300 ns 400 kHz 模式 20 + 0.1 CB 300 ns CB 值的范围在 10 至 400 pF 之 间 100 kHz 模式 4.7 — µs 仅与重复启动条件相关 400 kHz 模式 0.6 — µs 100 kHz 模式 4.0 — µs 0.6 — µs 0 — ns µs MSSP 模块 102 103 90 91 TR TF TSU:STA THD:STA SDAx 和 SCLx 上升时间 SDAx 和 SCLx 下降时间 启动条件建立时间 启动条件保持时间 400 kHz 模式 息 参数 编号 I2C™ 总线数据要求 (从动模式) 信 表 27-21: 106 THD:DAT 数据输入保持时间 100 kHz 模式 0 0.9 107 TSU:DAT 数据输入建立时间 100 kHz 模式 250 — ns 400 kHz 模式 100 — ns 100 kHz 模式 4.7 — µs 400 kHz 模式 TSU:STO 停止条件建立时间 109 TAA 时钟输出有效时间 110 D102 注 TBUF CB 总线空闲时间 0.6 — µs 100 kHz 模式 — 3500 ns 400 kHz 模式 — — ns 100 kHz 模式 4.7 — µs 400 kHz 模式 1.3 — µs — 400 pF 超 92 前 400 kHz 模式 总线容性负载 CB 值的范围在 10 至 400 pF 之 间 这个周期后产生第一个时钟脉 冲 (注 2) (注 1) 在启动一个新的传输前总线必 须保持空闲的时间 1: 为避免产生意外的启动或停止条件,作为发送器的器件必须提供这个内部最小延时以避开 SCLx 下降沿的未定义区域 (最小值 300 ns)。 2: 快速模式的 I2C™ 总线器件也可在标准模式的 I2C 总线系统中使用,但必须满足 TSU:DAT ≥ 250 ns 的要求。如果快速模 式器件没有延长 SCLx 信号的低电平时间,则必然满足此条件。如果该器件延长了 SCLx 信号的低电平时间,其下一个 数据位必须输出到 SDAx 线。 SCLx 线被释放前,根据标准模式 I2C 总线规范, TR max. + TSU:DAT = 1000 + 250 = 1250 ns。 DS39762A_CN 第 442 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 主控 SSP I2C™ 总线启动 / 停止位时序波形 图 27-18: SCLx 93 91 90 92 SDAx 停止 条件 启动 条件 负载条件请参见图 27-3。 主控 SSP I2C™ 总线启动 / 停止位要求 表 27-22: 90 符号 最小值 最大值 单位 100 kHz 模式 2(TOSC)(BRG + 1) — ns 400 kHz 模式 2(TOSC)(BRG + 1) — 仅与重复启动条件相 关 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — THD:STA 启动条件 100 kHz 模式 2(TOSC)(BRG + 1) — ns 保持时间 400 kHz 模式 2(TOSC)(BRG + 1) — 这个周期后产生第一 个时钟脉冲 2(TOSC)(BRG + 1) — 100 kHz 模式 2(TOSC)(BRG + 1) — 400 kHz 模式 2(TOSC)(BRG + 1) — 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — THD:STO 停止条件 100 kHz 模式 2(TOSC)(BRG + 1) — 保持时间 400 kHz 模式 2(TOSC)(BRG + 1) — 2(TOSC)(BRG + 1) — TSU:STA 特性 启动条件 建立时间 91 1 MHz 模式 (1) 92 TSU:STO 停止条件 超 93 前 建立时间 1 MHz 模式 注 息 参数 编号 信 注: (1) 条件 ns ns 1: 对于所有 I2C™ 引脚,最大引脚电容均为 10 pF。 主控 SSP I2C™ 总线数据时序 图 27-19: 103 102 100 101 SCLx 90 106 91 107 92 SDAx 输入 109 109 110 SDAx 输出 注: 负载条件请参见图 27-3。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 443 页 PIC18F97J60 系列 100 符号 THIGH 特性 时钟高电平时间 最小值 最大值 单位 100 kHz 模式 2(TOSC)(BRG + 1) — ms 400 kHz 模式 2(TOSC)(BRG + 1) — ms 2(TOSC)(BRG + 1) — ms 100 kHz 模式 2(TOSC)(BRG + 1) — ms 400 kHz 模式 2(TOSC)(BRG + 1) — ms 2(TOSC)(BRG + 1) — ms 100 kHz 模式 — 1000 ns 400 kHz 模式 20 + 0.1 CB 300 ns 1 MHz 模式 (1) — 300 ns 100 kHz 模式 — 300 ns 400 kHz 模式 20 + 0.1 CB 300 ns 1 MHz 模式 (1) — 100 ns 100 kHz 模式 2(TOSC)(BRG + 1) — ms 400 kHz 模式 2(TOSC)(BRG + 1) — ms 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — ms 100 kHz 模式 2(TOSC)(BRG + 1) — ms 400 kHz 模式 2(TOSC)(BRG + 1) — ms 1 MHz 模式 (1) 2(TOSC)(BRG + 1) — ms 100 kHz 模式 0 — ns 1 MHz 101 TLOW 时钟低电平时间 1 MHz 102 103 90 91 106 TR TF TSU:STA SDAx 和 SCLx 上升时间 SDAx 和 SCLx 下降时间 启动条件 建立时间 THD:STA 启动条件 保持时间 THD:DAT 数据输入 保持时间 模式 (1) 模式 (1) 1 MHz 模式 107 TSU:DAT 0 400 kHz 模式 (1) 100 kHz 模式 数据输入 建立时间 D102 TBUF CB 时钟输出有效时 间 总线空闲时间 总线容性负载 250 — ns — ns ns 100 kHz 模式 2(TOSC)(BRG + 1) — ms 400 kHz 模式 2(TOSC)(BRG + 1) — ms 2(TOSC)(BRG + 1) — ms 100 kHz 模式 — 3500 ns 400 kHz 模式 — 1000 ns 1 MHz 模式 (1) — — ns 100 kHz 模式 4.7 — ms 400 kHz 模式 1.3 — ms 1 MHz 模式 (1) TBD — ms — 400 pF (1) 超 110 TAA ns — 1 MHz 模式 109 ms — 100 前 TSU:STO 停止条件 建立时间 0.9 TBD TBD 400 kHz 模式 1 MHz 模式 (1) 92 息 参数 编号 主控 SSP I2C™ 总线数据要求 信 表 27-23: 条件 CB 值的范围在 10 至 400 pF 之间 CB 值的范围在 10 至 400 pF 之间 仅与重复启动条件相关 这个周期后产生第一个 时钟脉冲 (注 2) 在启动一个新的传输前 总线必须保持空闲的时 间 图注: TBD = 待定 注 1: 对于所有 I2C™ 引脚,最大引脚电容均为 10 pF。 2: 快速模式的 I2C 总线器件也可在标准模式的 I2C 总线系统中使用,但必须满足参数 #107 ≥ 250 ns 的要求。 如果快速模式器件没有延长 SCLx 信号的低电平时间,则必然满足此条件。如果该器件延长了 SCLx 信号的 低电平时间,它必须将下一个数据位输出到 SDAx 线。 SCLx 线被释放前,在 100 kHz 模式下, 参数 #102 + 参数 #107 = 1000 + 250 = 1250 ns。 DS39762A_CN 第 444 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 图 27-20: EUSART 同步发送 (主控 / 从动)时序 TXx/CKx 引脚 121 121 RXx/DTx 引脚 120 负载条件请参见图 27-3。 注: 表 27-24: 参数 编号 122 EUSART 同步发送要求 最小值 最大值 单位 — 40 ns 121 TCKH2DTV 同步 XMIT (主控和从动) 时钟高电平到数据输出有效的时间 TCKRF 时钟输出上升时间和下降时间 (主控模式) — 20 ns 122 TDTRF — 20 ns 特性 数据输出上升时间和下降时间 图 27-21: EUSART 同步接收 (主控 / 从动)时序 TXx/CKx 引脚 125 RXx/DTx 引脚 表 27-25: 126 EUSART 同步接收要求 符号 特性 超 125 负载条件请参见图 27-3。 前 注: 信 126 参数 编号 条件 息 120 符号 TDTV2CKL 同步接收 (主控和从动) 在 CKx ↓ 之前数据的保持时间 (DTx 保持 时间) TCKL2DTL 在 CKx ↓ 之后数据的保持时间 (DTx 保持 时间) 2006 Microchip Technology Inc. 超前信息 最小值 最大值 单位 10 — ns 15 — ns 条件 DS39762A_CN 第 445 页 PIC18F97J60 系列 表 27-26: 参数 编号 A/D 转换器特性:PIC18F97J60 系列 (工业级) 符号 特性 最小值 典型值 最大值 单位 条件 NR 分辨率 — — 10 A03 EIL 积分线性误差 — — <±1 位 ∆VREF ≥ 2.0V LSb ∆VREF ≥ 2.0V A04 EDL 微分线性误差 — — <±1 LSb ∆VREF ≥ 2.0V A06 EOFF 失调误差 — — <±3 LSb ∆VREF ≥ 2.0V A07 EGN 增益误差 — — <±3 LSb ∆VREF ≥ 2.0V — VSS ≤ VAIN ≤ VREF 参考电压范围 (VREFH – VREFL) 1.8 3 — — — — V V VDD < 3.0V VDD ≥ 3.0V — — AVDD+0.5 V A21 VREFSUM 参考电压总和 (VREFH + VREFL) VREFH 参考电压高电平 VREFL — A22 VREFL 参考电压低电平 AVSS — 息 A01 A25 VAIN 模拟输入电压 VREFL — VREFH V A30 ZAIN 模拟电源阻抗的推荐值 — — 2.5 kΩ A50 IREF VREF 输入电流 (2) — — — — 5 1000 µA µA A10 — A20 ∆VREF AVDD V VREFH V 信 单调性 在采集 VAIN 期间。 在 A/D 转换周期期间。 1: A/D 转换结果不会因输入电压的增加而减小,并且不会丢失代码。 2: VREFH 电流来自作为 VREFH 源的 RA3/AN3/VREF+ 引脚或 AVDD。 VREFL 电流来自作为 VREFL 源的 RA2/AN2/VREF- 引脚或 AVSS。 图 27-22: A/D 转换时序 BSF ADCON0, GO 超 前 注 保证 (1) (注 2) 131 Q4 A/D CLK 130 132 A/D 数据 ADRES 9 8 7 ... ... 2 1 0 NEW_DATA OLD_DATA TCY ADIF GO 采样 注 DONE 采样已停止 1: 如果选择 A/D 时钟源作为 RC,在 A/D 时钟启动前要加上一个 TCY 时间, 用以执行 SLEEP 指令。 2: 这是最小的 RC 延时 (典型值为 100 ns),在这段时间保持电容与模拟输入端是断开的。 DS39762A_CN 第 446 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 表 27-27: 参数 编号 A/D 转换要求 符号 特性 130 TAD 131 TCNV 转换时间 (不包括采集时间)(注 2) 132 TACQ 采集时间 (注 3) 135 TSWC TBD TDIS A/D 时钟周期 最小值 最大值 单位 0.7 25.0(1) µs 基于 TOSC, VREF ≥ 2.0V A/D RC 模式 TBD 1 µs 11 12 TAD 1.4 TBD — — µs µs 转换 → 采样的切换时间 — 电容放电时间 0.2 (注 4) — µs 条件 -40°C 至 +85°C 0°C 至 +85°C TBD = 待定 A/D 时钟周期取决于器件频率和 TAD 时钟分频比。 可在后续 TCY 周期内读 ADRES 寄存器。 转换完成后当电压满量程变化时 (VDD 至 VSS 或 VSS 至 VDD),保持电容采样一个 “新”输入电压所需的 时间。在输入通道上的电源阻抗 (RS)为 50Ω。 4: 在器件时钟的下一个周期。 以太网规范和要求 表 27-28: 以太网收发器外部磁场的要求 参数 RXx 匝数比 最小值 正常值 最大值 单位 — 1:1 — — 超 27.5 前 信 息 图注: 注 1: 2: 3: — 1:1 — — 插入损耗 0.0 0.6 1.1 dB 初级电感 350 — — µH — 1.5 — kVrms TXx 匝数比 变压器隔离 差分共模抑制 40 — — dB 回波损耗 -16 — — dB 2006 Microchip Technology Inc. 超前信息 条件 变压器中心抽头 = 3.3V 8 mA 偏置电流 0.1 至 10 MHz DS39762A_CN 第 447 页 PIC18F97J60 系列 注: DS39762A_CN 第 448 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 449 页 PIC18F97J60 系列 28.0 直流和交流特性图表 当前没有可用图表。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 449 页 PIC18F97J60 系列 注: DS39762A_CN 第 450 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 29.0 封装信息 29.1 封装标识信息 64 引脚 TQFP 示例 XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX YYWWNNN 18F67J60I/PT e3 0610017 80 引脚 TQFP 示例 XXXXXXXXXXXX XXXXXXXXXXXX YYWWNNN PIC18F87J60I/PT e3 0610017 100 引脚 TQFP 示例 XXXXXXXXXXXX XXXXXXXXXXXX YYWWNNN 图注: 注: PIC18F97J60I/PF e3 0610017 XX...X Y YY WW NNN 客户指定信息 年代码 (公历年份的最后一位) 年代码 (公历年份的最后两位) 星期代码 (1 月 1 日的星期代码为 “01”) 字母数字的追踪代码 e3 雾锡 (Sn)的无铅 JEDEC 标志 * 本封装为无铅封装。在封装的外部包装上可以找到无铅 JEDEC 标志 ( e3 )。 如果 Microchip 器件编号不能在一行中完全标出,它将换行继续标出。因此限制 了用户指定信息的可用字符数。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 451 页 PIC18F97J60 系列 29.2 封装详细信息 以下部分将介绍各种封装的技术细节。 64 引脚塑封薄型正方扁平封装 (PT) 10x10x1 mm 主体, 1.0/0.10 mm 引脚形式 (TQFP) 注: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 E E1 引脚数 = n1 p D1 D 2 1 B n CH x 45° α A φ c L β A2 A1 F 单位 尺寸范围 n p 最小 英寸 正常 最大 最小 引脚数 64 引脚间距 .020 每侧引脚数 n1 16 总高度 A .039 .043 .047 1.00 塑模封装厚度 A2 .037 .039 .041 0.95 悬空间隙 A1 .002 .006 .010 0.05 底脚长度 L .018 .024 .030 0.45 F .039 REF. 引脚投影长度 φ 底脚倾斜角 0 3.5 7 0 总宽度 E .463 .472 .482 11.75 总长度 D .463 .472 .482 11.75 塑模封装宽度 E1 .390 .394 .398 9.90 塑模封装长度 D1 .390 .394 .398 9.90 c 引脚厚度 .005 .007 .009 0.13 引脚宽度 B .007 .009 .011 0.17 引脚 1 切角斜面 CH .025 .035 .045 0.64 α 塑模顶部锥度 5 10 15 5 β 塑模底部锥度 5 10 15 5 * 控制参数 注: 尺寸 D 和 E1 不包括塑模毛边或突起。塑模每侧的毛边或突起不得超过 0.010 英寸(0.254 毫米)。 REF:参考尺寸,通常无公差,仅供参考。 参见 ASME Y14.5M 等同于 JEDEC 号:MS-026 图号 C04-085 DS39762A_CN 第 452 页 超前信息 毫米 * 正常 64 0.50 16 1.10 1.00 0.15 0.60 1.00 REF. 3.5 12.00 12.00 10.00 10.00 0.18 0.22 0.89 10 10 最大 1.20 1.05 0.25 0.75 7 12.25 12.25 10.10 10.10 0.23 0.27 1.14 15 15 修订于 07-22-05 2006 Microchip Technology Inc. PIC18F97J60 系列 80 引脚塑封薄型正方扁平封装 (PT) 12x12x1 mm 主体, 1.0/0.10 mm 引脚形式 (TQFP) 注: 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 E E1 引脚数 = n1 p D1 D 2 1 B n α CH x 45° A c φ β 引脚数 引脚间距 每侧引脚数 总高度 塑模封装厚度 悬空间隙 底脚长度 引脚投影长度 底脚倾斜角 总宽度 总长度 塑模封装宽度 L 单位 尺寸范围 n p n1 A A2 A1 L F φ E D E1 A2 A1 F 80 0.020 BSC 20 .039 .043 .037 .039 .047 .041 毫米 * 正常 80 0.50 BSC 20 1.00 1.10 0.95 1.00 .002 .018 .006 .030 0.05 0.45 英寸 正常 最小 .004 .024 .039 REF. 0° 3.5° 0.551 BSC 0.551 BSC 0.472 BSC 最大 最小 7° 0.10 0.60 1.00 REF. 0° 3.5° 14.00 BSC 14.00 BSC 12.00 BSC 最大 1.20 1.05 0.15 0.75 7° 塑模封装长度 D1 0.472 BSC 12.00 BSC c .004 .006 .008 0.09 0.15 0.20 引脚厚度 引脚宽度 B .007 .009 .011 0.17 0.22 0.27 CH .025 .035 .045 0.64 0.89 1.14 引脚 1 切角斜面 α 塑模顶部锥度 5° 10° 15° 5° 10° 15° β 塑模底部锥度 5° 10° 15° 5° 10° 15° * 控制参数 注: 尺寸 D1 和 E1 不包括塑模毛边或突起。塑模每侧的毛边或突起不得超过 0.010 英寸(0.254 毫米)。 BSC:基本尺寸。理论上显示的是没有公差的精确值。 参见 ASME Y14.5M REF:参考尺寸,通常无公差,仅供参考。 参见 ASME Y14.5M 修订于 07-22-05 等同于 JEDEC 号:MS-026 图号 C04-092 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 453 页 PIC18F97J60 系列 100 引脚塑封薄型正方扁平封装 (PF) 14x14x1 mm 主体, 1.0/0.10 mm 引脚形式 (TQFP) 最新封装图请至 http://www.microchip.com/packaging 查看 Microchip 封装规范。 注: E E1 引脚数 = n1 p D1 D B 2 1 α n A φ c β 单位 引脚数 引脚间距 A2 L 尺寸范围 n p A1 F 毫米 * 英寸 最小 正常 最大 最小 正常 100 最大 100 0.020 BSC 0.50 BSC 25 25 每侧引脚数 总高度 n1 A 塑模封装厚度 A2 .037 悬空间隙 A1 .002 底脚长度 L .018 引脚投影长度 底脚倾斜角 F φ 总宽度 总长度 E D 0.630 BSC 0.630 BSC 16.00 BSC 16.00 BSC 塑模封装宽度 E1 0.551 BSC 14.00 BSC 塑模封装长度 0.551 BSC 引脚厚度 D1 c .004 引脚宽度 塑模顶部锥度 B α .007 11° 塑模底部锥度 β 11° .047 .039 .024 1.20 .041 0.95 .006 0.05 .030 0.45 0.039 REF 0° 3.5° 1.05 0.15 0.60 0.75 1.00 REF 7° 0° 7° 3.5° 14.00 BSC .008 0.09 .009 12° .011 13° 0.17 11° 0.22 12° 0.27 13° 12° 13° 11° 12° 13° * 控制参数 注: 尺寸 D1 和 E1 不包括塑模毛边或突起。塑模每侧的毛边或突起不得超过 0.010 英寸(0.254 毫米)。 BSC:基本尺寸。理论上显示的是没有公差的精确值。 参见 ASME Y14.5M REF:参考尺寸,通常无公差,仅供参考。 参见 ASME Y14.5M 等同于 JEDEC 号:MS-026 图号 C04-110 DS39762A_CN 第 454 页 1.00 超前信息 0.20 修订于 07-21-05 2006 Microchip Technology Inc. PIC18F97J60 系列 附录 A: 附录 B: 版本历史 器件差异 表 B-1 为本数据手册中所列器件之间的差异。 版本 A (2006 年 3 月) PIC18F97J60 系列器件的原始数据手册。 PIC18F97J60 PIC18F96J65 PIC18F96J60 PIC18F87J60 PIC18F86J65 PIC18F86J60 PIC18F67J60 功能部件 PIC18F66J65 PIC18F97J60 系列中的器件差异 PIC18F66J60 表 B-1: 程序存储器 (字节) 64K 96K 128K 64K 96K 128K 64K 96K 128K 程序存储器 (指令) 32764 49148 65532 32764 49148 65532 32764 49148 65532 中断源 I/O 端口 (引脚) 增强型 USART 模块 26 27 端口 A, B, C, D, E, F, G (39) 29 端口 A, B, C, D, E, F, G, H, J 端口 A, B, C, D, E, F, G, H, J (55) (70) 1 2 MSSP 模块 1 2 并行从动端口通信 (PSP) 无 有 外部存储器总线 无 有 10 位模数转换模块 11 路输入通道 15 路输入通道 16 路输入通道 封装 64 引脚 TQFP 80 引脚 TQFP 100 引脚 TQFP 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 455 页 PIC18F97J60 系列 注: DS39762A_CN 第 456 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 索引 A A/D ................................................................................... 325 A/D 转换器中断,配置 ............................................. 329 ADCAL 位 ................................................................ 333 ADCON0 寄存器 ...................................................... 325 ADCON1 寄存器 ...................................................... 325 ADCON2 寄存器 ...................................................... 325 ADRESH 寄存器 .............................................. 325, 328 ADRESL 寄存器 ....................................................... 325 ECCP2 触发器的使用 .............................................. 332 采集要求 ................................................................... 330 校准 .......................................................................... 333 模拟端口引脚,配置 ................................................. 331 配置模块 ................................................................... 329 特殊事件触发器 (ECCP) ....................................... 192 特殊事件触发信号 (ECCP) ................................... 332 相关的寄存器 ........................................................... 333 在功耗管理模式下的操作 ......................................... 333 转换 .......................................................................... 332 转换器特性 ............................................................... 446 转换时钟 (TAD) ..................................................... 331 转换要求 ................................................................... 447 转换状态 (GO/DONE 位) ...................................... 328 自动采集时间 ........................................................... 331 ACKSTAT ........................................................................ 290 ACKSTAT 状态标志 ......................................................... 290 ADCAL 位 ......................................................................... 333 ADCON0 寄存器 .............................................................. 325 GO/DONE 位 ........................................................... 328 ADCON1 寄存器 .............................................................. 325 ADCON2 寄存器 .............................................................. 325 ADDFSR .......................................................................... 402 ADDLW ............................................................................ 365 ADDWF ............................................................................ 365 ADDWFC ......................................................................... 366 ADDULNK ........................................................................ 402 ADRESH 寄存器 .............................................................. 325 ADRESL 寄存器 ....................................................... 325, 328 ANDLW ............................................................................ 366 ANDWF ............................................................................ 367 B BC .................................................................................... 367 BCF .................................................................................. 368 BF .................................................................................... 290 BF 状态标志 ..................................................................... 290 BN .................................................................................... 368 BNC ................................................................................. 369 BNN ................................................................................. 369 BNOV ............................................................................... 370 BNZ .................................................................................. 370 BOR。请参见欠压复位。 BOV ................................................................................. 373 BRA .................................................................................. 371 BRG。请参见波特率发生器。 BSF .................................................................................. 371 BSR .................................................................................... 93 BTFSC ............................................................................. 372 BTFSS ............................................................................. 372 BTG .................................................................................. 373 BZ .................................................................................... 374 版本历史 ........................................................................... 455 比较器 .............................................................................. 335 2006 Microchip Technology Inc. 参考 ......................................................................... 337 内部信号 .......................................................... 337 外部信号 .......................................................... 337 复位的影响 ............................................................... 338 工作原理 .................................................................. 337 模拟输入连接注意事项 ............................................. 339 配置 ......................................................................... 336 输出 ......................................................................... 337 相关的寄存器 ........................................................... 339 响应时间 .................................................................. 337 休眠期间的操作 ....................................................... 338 中断 ......................................................................... 338 比较器参考电压 ............................................................... 341 复位的影响 ............................................................... 342 精度和误差 ............................................................... 342 连接注意事项 ........................................................... 342 配置 ......................................................................... 341 相关的寄存器 ........................................................... 343 休眠期间的操作 ....................................................... 342 比较器规范 ....................................................................... 426 比较 (CCP 模块) ........................................................... 184 CCPRx 寄存器 ......................................................... 184 CCP 引脚配置 .......................................................... 184 Timer1/Timer3 模式选择 .......................................... 184 软件中断 .................................................................. 184 相关的寄存器 ........................................................... 185 比较 (ECCP 模块) ........................................................ 192 特殊事件触发器 ....................................................... 192 特殊事件触发信号 ............................................ 177, 332 编程,器件指令 ............................................................... 359 变更通知客户服务 ............................................................ 469 表读 / 表写 ......................................................................... 73 表指针操作 (表) .............................................................. 98 并行从动端口 (PSP) ..................................................... 160 PORTD .................................................................... 160 相关的寄存器 ........................................................... 162 选择 (PSPMODE 位) ............................................ 160 波特率发生器 ................................................................... 286 捕捉 / 比较 /PWM (CCP) .............................................. 181 CCPRxH 寄存器 ...................................................... 182 CCPRxL 寄存器 ....................................................... 182 CCP 模式和定时器资源 ........................................... 182 比较模式。请参见比较。 捕捉模式。请参见捕捉。 互连配置 .................................................................. 182 模块配置 .................................................................. 182 捕捉 (CCP 模块) ........................................................... 183 CCPRxH:CCPRxL 寄存器 ....................................... 183 CCP 引脚配置 .......................................................... 183 Timer1/Timer3 模式选择 .......................................... 183 软件中断 .................................................................. 183 相关的寄存器 ........................................................... 185 预分频器 .................................................................. 183 捕捉 (ECCP 模块) ........................................................ 192 C CALL ................................................................................ 374 CALLW ............................................................................ 403 C 编译器 MPLAB C18 ............................................................. 410 MPLAB C30 ............................................................. 410 CLRF ............................................................................... 375 CLRWDT ......................................................................... 375 COMF .............................................................................. 376 CPFSEQ .......................................................................... 376 CPFSGT .......................................................................... 377 超前信息 DS39762A_CN 第 457 页 PIC18F97J60 系列 CPFSLT ........................................................................... 377 CPU 的特殊功能 ............................................................... 345 参考电压规范 .................................................................... 426 操作码字段说明 ................................................................ 360 程序存储器 查找表 ........................................................................ 73 存储器映射图 ............................................................. 67 硬件编码向量和配置字 ....................................... 68 复位向量 ..................................................................... 68 扩展指令集 ................................................................. 90 模式 ............................................................................ 69 存储器访问 (表) .............................................. 70 单片机 ................................................................ 69 地址平移 (扩展单片机) ................................... 70 扩展单片机 ......................................................... 69 映射图 程序存储器模式 .................................................. 70 指令 ............................................................................ 75 双字 .................................................................... 75 中断向量 ..................................................................... 68 程序存储器模式 外部存储器总线操作 ................................................. 108 程序计数器 ......................................................................... 71 PCLATH 和 PCLATU 寄存器 ...................................... 71 PCL、 PCH 和 PCU 寄存器 ....................................... 71 程序校验和代码保护 ......................................................... 358 串行时钟, SCKx ............................................................. 255 串行数据输出 (SDOx) ................................................... 255 串行数据输入 (SDIx) ..................................................... 255 串行外设接口。请参见 SPI 模式。 从动选择 (SSx) ............................................................. 255 存储器编程要求 ................................................................ 425 存储器构成 ......................................................................... 67 程序存储器 ................................................................. 67 数据存储器 ................................................................. 76 D DAW ................................................................................. 378 DCFSNZ ........................................................................... 379 DECF ............................................................................... 378 DECFSZ ........................................................................... 379 代码保护 ........................................................................... 345 代码示例 16 x 16 无符号乘法程序 ........................................... 118 16 x 16 有符号乘法程序 ........................................... 118 8 x 8 无符号乘法程序 ............................................... 117 8 x 8 有符号乘法程序 ............................................... 117 擦除闪存程序存储器的一行 ...................................... 100 初始化 PORTA ......................................................... 136 初始化 PORTB ......................................................... 138 初始化 PORTC ......................................................... 141 初始化 PORTD ......................................................... 144 初始化 PORTE ......................................................... 148 初始化 PORTF ......................................................... 151 初始化 PORTG ......................................................... 153 初始化 PORTH ......................................................... 156 初始化 PORTJ .......................................................... 158 读闪存程序存储器的一个字 ........................................ 99 改变捕捉预分频比 .................................................... 183 将 STATUS、 WREG 和 BSR 寄存器的值 保存在 RAM 中 ................................................. 134 快速寄存器堆栈 .......................................................... 73 使用间接寻址清零 RAM (Bank 1) ........................... 88 使用偏移量计算 GOTO .............................................. 73 使用 Timer1 中断服务实现实时时钟 ......................... 171 写闪存程序存储器 .................................................... 102 DS39762A_CN 第 458 页 装载 SSP1BUF (SSP1SR)寄存器 ....................... 258 单片机模式 ....................................................................... 108 电气特性 .......................................................................... 413 以太网收发器外部磁场的要求 .................................. 447 读者反馈 .......................................................................... 470 对标准 PIC 的影响 ........................................................... 406 堆栈满 / 下溢复位 ............................................................... 73 E ENVREG 引脚 ................................................................. 354 EUSART 波特率发生器 在功耗管理模式下的操作 ................................. 305 波特率发生器 (BRG) ............................................ 305 波特率误差,计算 ............................................ 306 波特率,异步模式 ............................................ 307 采样 ................................................................. 305 高波特率选择 (BRGH 位) ............................. 305 相关的寄存器 ................................................... 306 自动波特率检测 ............................................... 309 同步从动模式 ........................................................... 322 发送 ................................................................. 322 接收 ................................................................. 323 相关的寄存器,发送 ........................................ 323 相关的寄存器,接收 ........................................ 324 同步主控模式 ........................................................... 319 发送 ................................................................. 319 接收 ................................................................. 321 相关的寄存器,发送 ........................................ 320 相关的寄存器,接收 ........................................ 322 异步模式 .................................................................. 311 12 位间隔发送和接收 ....................................... 318 发送器 .............................................................. 311 接收器 .............................................................. 314 设置带有地址检测功能的 9 位模式 .................. 314 同步间隔自动唤醒 ............................................ 316 相关的寄存器,发送 ........................................ 313 相关的寄存器,接收 ........................................ 315 F FSCM。请参见故障保护时钟监视器。 发送数据包 状态向量 .................................................................. 237 返回地址堆栈 ..................................................................... 71 返回堆栈指针 (STKPTR) ................................................ 72 访问栈顶 ............................................................................ 71 封装 .................................................................................. 451 标识 ......................................................................... 451 详细信息 .................................................................. 452 复位 ............................................................................ 53, 345 MCLR 复位,功耗管理模式 ....................................... 53 MCLR 复位,正常工作状态 ....................................... 53 堆栈满复位 ................................................................. 53 堆栈下溢复位 ............................................................. 53 寄存器的状态 ............................................................. 58 看门狗定时器 (WDT)复位 ...................................... 53 欠压复位 (BOR) ............................................. 53, 345 上电复位 (POR) ............................................. 53, 345 上电延时定时器 (PWRT) ...................................... 345 振荡器起振定时器 (OST) ..................................... 345 G GOTO .............................................................................. 380 功耗管理模式 ..................................................................... 45 多条 SLEEP 命令 ....................................................... 46 和 EUSART 操作 ...................................................... 305 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 和 SPI 工作原理 ....................................................... 263 汇总 (表) ................................................................. 45 进入 ............................................................................ 45 空闲模式 ..................................................................... 49 PRI_IDLE ........................................................... 50 RC_IDLE ............................................................ 51 SEC_IDLE ......................................................... 50 时钟源 ........................................................................ 45 时钟转换和状态指示 ................................................... 46 退出空闲和休眠模式 ................................................... 51 通过复位 ............................................................ 51 通过 WDT 超时 .................................................. 51 通过中断 ............................................................ 51 在没有振荡区起振延时的情况下 ........................ 51 休眠模式 ..................................................................... 49 选择 ............................................................................ 45 运行模式 ..................................................................... 46 PRI_RUN ........................................................... 46 RC_RUN ............................................................ 48 SEC_RUN .......................................................... 46 功耗管理模式对各种时钟源的影响 ..................................... 44 公式 A/D 采集时间 ............................................................ 330 A/D 最小充电时间 .................................................... 330 计算所需要的最小 A/D 采集时间 .............................. 330 接收缓冲区剩余空间计算 ......................................... 240 随机访问地址计算 .................................................... 239 固件指令 ........................................................................... 359 故障保护时钟监视器 ................................................. 345, 356 POR 或从休眠中唤醒 ............................................... 357 功耗管理模式下的中断 ............................................. 357 和看门狗定时器 ........................................................ 356 退出操作 ................................................................... 356 H 汇编器 MPASM 汇编器 ........................................................ 410 I I/O 端口 ............................................................................ 135 引脚功能 ................................................................... 135 I/O 引脚说明 PIC18F66J60/66J65/67J60 ....................................... 14 PIC18F86J60/86J65/87J60 ....................................... 21 PIC18F96J60/96J65/97J60 ....................................... 29 I2C 模式 (MSSP) 波特率发生器 ........................................................... 286 串行时钟 (SCKx/SCLx) ........................................ 272 从动模式 ................................................................... 270 地址屏蔽 .......................................................... 271 发送 .................................................................. 272 接收 .................................................................. 272 寻址 .................................................................. 270 读 / 写位信息 (R/W 位) ................................. 270, 272 多主机模式 ............................................................... 294 多主机通信、总线冲突与仲裁 .................................. 294 复位的影响 ............................................................... 294 工作原理 ................................................................... 270 寄存器 ...................................................................... 265 使用 BRG 的时钟频率 .............................................. 286 时钟同步和 CKP 位 .................................................. 280 时钟延长 ................................................................... 279 10 位从动发送模式 ........................................... 279 10 位从动接收模式 (SEN = 1) ...................... 279 7 位从动发送模式 ............................................. 279 7 位从动接收模式 (SEN = 1) ........................ 279 2006 Microchip Technology Inc. 时钟仲裁 .................................................................. 287 停止条件时序 ........................................................... 293 相关的寄存器 ........................................................... 299 休眠模式下的操作 .................................................... 294 应答序列时序 ........................................................... 293 支持广播呼叫地址 .................................................... 283 主控模式 .................................................................. 284 波特率发生器 ................................................... 286 发送 ................................................................. 290 工作原理 .......................................................... 285 接收 ................................................................. 290 启动条件时序 ................................................... 288 重复启动条件时序 ............................................ 289 总线冲突 停止条件期间 ................................................... 298 重复启动条件期间 ............................................ 297 INCF ................................................................................ 380 INCFSZ ............................................................................ 381 INFSNZ ............................................................................ 381 INTCON 寄存器 ............................................................... 121 RBIF 位 .................................................................... 138 INTOSC, INTRC。请参见内部振荡器模块。 IORLW ............................................................................. 382 IORWF ............................................................................. 382 IPR 寄存器 ....................................................................... 130 J 寄存器 ADCON0 (A/D 控制 0) ......................................... 325 ADCON1 (A/D 控制 1) ......................................... 326 ADCON2 (A/D 控制 2) ......................................... 327 BAUDCONx (波特率控制) .................................... 304 CCPxCON (捕捉 / 比较 /PWM 控制、 CCP4 和 CCP5) ........................................................ 181 CCPxCON (增强型捕捉 / 比较 /PWM 控制, ECCP1/ECCP2/ECCP3) ................................ 189 CMCON (比较器控制) .......................................... 335 CONFIG1H (配置 1 高字节) ................................. 347 CONFIG1L (配置 1 低字节) .................................. 347 CONFIG2H (配置 2 高字节) ................................. 349 CONFIG2L (配置 2 低字节) .................................. 348 CONFIG3H (配置 3 高字节) ................................. 351 CONFIG3L (配置 3 低字节) ............................ 69, 350 CVRCON (比较器参考电压控制) ......................... 341 DEVID1 (器件 ID 1) .............................................. 352 DEVID2 (器件 ID 2) .............................................. 352 ECCPxAS (ECCPx 自动关闭配置) ....................... 201 ECCPxDEL (ECCPx 死区延时) ............................ 200 ECON1 (以太网控制 1) ........................................ 211 ECON2 (以太网控制 2) ........................................ 212 EECON1 (EEPROM 控制 1) .................................. 97 EFLOCON (以太网流量控制) ............................... 244 EIE (以太网中断允许) .......................................... 226 EIR (以太网中断请求,标志) ............................... 227 ERXFCON (以太网接收过滤器控制) .................... 246 ESTAT (以太网状态) ............................................ 212 INTCON2 (中断控制 2) ........................................ 122 INTCON3 (中断控制 3) ........................................ 123 INTCON (中断控制) ............................................. 121 IPR1 (外设中断优先级 1) ..................................... 130 IPR2 (外设中断优先级 2) ..................................... 131 IPR3 (外设中断优先级 3) ..................................... 132 MABBIPG (MAC 背对背包间间隔) ....................... 232 MACON1 (MAC 控制 1) ....................................... 213 MACON3 (MAC 控制 3) ....................................... 214 MACON4 (MAC 控制 4) ....................................... 215 超前信息 DS39762A_CN 第 459 页 PIC18F97J60 系列 MEMCON (外部存储器总线控制) ......................... 106 MICMD (MII 命令) ................................................. 216 MICON (MII 控制) ................................................. 215 MISTAT (MII 状态) ................................................ 216 OSCCON (振荡器控制) .......................................... 43 OSCTUNE (PLL 块控制) ........................................ 41 PHCON1 (PHY 控制 1) ........................................ 220 PHCON2 (PHY 控制 2) ........................................ 222 PHIE (PHY 中断允许) ........................................... 228 PHLCON (PHY 模块 LED 控制) ........................... 224 PHSTAT1 (物理层状态 1) ..................................... 221 PHSTAT2 (物理层状态 2) ..................................... 223 PHY (PHY 中断请求,标志) ................................. 228 PIE1 (外设中断允许 1) .......................................... 127 PIE2 (外设中断允许 2) .......................................... 128 PIE3 (外设中断允许 3) .......................................... 129 PIR1 (外设中断请求 (标志) 1) .......................... 124 PIR2 (外设中断请求 (标志) 2) .......................... 125 PIR3 (外设中断请求 (标志) 3) .......................... 126 PSPCON (并行从动端口控制) .............................. 161 RCON (复位控制) ........................................... 54, 133 RCSTAx (接收状态和控制) ................................... 303 SSPxCON1 (MSSPx 控制 1, I2C 模式) .............. 267 SSPxCON1 (MSSPx 控制 1, SPI 模式) ............. 257 SSPxCON2 (MSSPx 控制 2, I2C 从动模式) ....... 269 SSPxCON2 (MSSPx 控制 2, I2C 主控模式) ....... 268 SSPxSTAT (MSSPx 状态, I2C 模式) .................. 266 SSPxSTAT (MSSPx 状态, SPI 模式 ) .................. 256 STATUS ..................................................................... 87 STKPTR (堆栈指针) ............................................... 72 T0CON (Timer0 控制) .......................................... 163 T1CON (Timer1 控制) .......................................... 167 T2CON (Timer2 控制) .......................................... 173 T3CON (Timer3 控制) .......................................... 175 T4CON (Timer4 控制) .......................................... 179 TXSTAx (发送状态和控制) ................................... 302 WDTCON (看门狗定时器控制) ............................. 353 寄存器文件汇总 ............................................................ 81–86 计算 GOTO ........................................................................ 73 间隔字符 (12 位)发送和接收 ........................................ 318 间接寻址 ............................................................................. 89 交流 (时序)特性 ........................................................... 427 参数符号体系 ........................................................... 427 器件时序规范的负载条件 ......................................... 428 时序条件 ................................................................... 428 温度和电压规范 ........................................................ 428 校准 (A/D 转换器) ......................................................... 333 接收过滤器 Magic Packet 格式 ................................................... 250 格式匹配过滤器格式 ................................................. 249 或逻辑流程 ............................................................... 247 与逻辑流程 ............................................................... 248 晶振 / 陶瓷谐振器 (HS 模式) ........................................... 40 绝对极限参数值 ................................................................ 413 K 开发支持 ........................................................................... 409 看门狗定时器 (WDT) ............................................ 345, 353 编程注意事项 ........................................................... 353 控制寄存器 ............................................................... 353 相关的寄存器 ........................................................... 353 勘误表 .................................................................................. 6 客户通知服务 .................................................................... 469 客户支持 ........................................................................... 469 快速操作存储区 在立即数变址寻址模式中映射 .................................... 93 DS39762A_CN 第 460 页 快速寄存器堆栈 .................................................................. 73 框图 16 位字节写模式 ...................................................... 109 16 位字节选择模式 ................................................... 111 16 位字写模式 .......................................................... 110 8 位复用模式 ............................................................ 113 A/D ........................................................................... 328 EUSART 发送 .......................................................... 312 EUSART 接收 .......................................................... 315 MSSP (I2C 模式) .................................................. 265 MSSP (I2C 主控模式) ........................................... 284 MSSP (SPI 模式) ................................................. 255 PIC18F66J60/66J65/67J60 ....................................... 11 PIC18F86J60/86J65/87J60 ....................................... 12 PIC18F96J60/96J65/97J60 ....................................... 13 PORTD 和 PORTE (并行从动端口) ...................... 160 PWM 工作原理 (简化) .......................................... 186 Timer0 (16 位模式) ............................................... 164 Timer0 (8 位模式) ................................................. 164 Timer2 ..................................................................... 174 Timer3 ..................................................................... 176 Timer4 ..................................................................... 180 Timer3 (16 位读 / 写模式) ..................................... 176 Timer1 ..................................................................... 168 Timer1 (16 位读 / 写模式) ..................................... 168 比较模式工作原理 .................................................... 184 比较器参考电压 ....................................................... 342 比较器 I/O 工作模式 ................................................. 336 比较器模拟输入模型 ................................................ 339 比较器输出 ............................................................... 338 表读操作 .................................................................... 95 表写操作 .................................................................... 96 波特率发生器 ........................................................... 286 捕捉模式工作原理 .................................................... 183 参考电压输出缓冲示例 ............................................. 343 单个比较器 ............................................................... 337 读闪存程序存储器 ...................................................... 99 对闪存程序存储器的表写操作 .................................. 101 故障保护时钟监视器 ................................................ 356 看门狗定时器 ........................................................... 353 模拟输入模型 ........................................................... 329 片上复位电路 ............................................................. 53 片上稳压器连接 ....................................................... 354 器件时钟 .................................................................... 39 通用 I/O 端口的工作原理 .......................................... 135 外部上电复位电路 (VDD 缓慢上电的情况) .............. 55 以太网模块 ............................................................... 205 以太网需要的外部元件 ............................................. 207 以太网中断逻辑 ....................................................... 225 增强型 PWM ............................................................ 193 中断逻辑 .................................................................. 120 扩展单片机模式 ................................................................ 108 扩展指令集 ADDFSR .................................................................. 402 ADDULNK ................................................................ 402 CALLW .................................................................... 403 MOVSF .................................................................... 403 MOVSS .................................................................... 404 PUSHL ..................................................................... 404 SUBFSR .................................................................. 405 SUBULNK ................................................................ 405 L LFSR ................................................................................ 383 立即数变址寻址模式 ............................................ 91, 93, 406 立即数变址寻址 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 和标准 PIC18 指令 ................................................... 406 M Microchip 因特网网站 ....................................................... 469 MOVF ............................................................................... 383 MOVFF ............................................................................ 384 MOVLB ............................................................................ 384 MOVLW ........................................................................... 385 MOVSF ............................................................................ 403 MOVSS ............................................................................ 404 MOVWF ........................................................................... 385 MPLAB ASM30 汇编器、链接器和库管理器 .................... 410 MPLAB ICD 2 在线调试器 ................................................ 411 MPLAB ICE 2000 高性能通用在线仿真器 ........................ 411 MPLAB ICE 4000 高性能通用在线仿真器 ........................ 411 MPLAB PM3 器件编程器 .................................................. 411 MPLAB 集成开发环境软件 ............................................... 409 MPLINK 目标链接器 /MPLIB 目标库管理器 ...................... 410 MSSP ACK 脉冲 ......................................................... 270, 272 SPI 主 / 从器件连接 .................................................. 259 SSPxBUF 寄存器 ..................................................... 260 SSPxSR 寄存器 ....................................................... 260 TMR4 时钟输出 ........................................................ 180 控制寄存器 (通用) ................................................. 255 模块概述 ................................................................... 255 MULLW ............................................................................ 386 MULWF ............................................................................ 386 脉宽调制。请参见 PWM(CCP 模块)和 PWM(ECCP 模块)。 默认系统时钟 ..................................................................... 44 模数转换器。请参见 A/D。 N NEGF ............................................................................... 387 NOP ................................................................................. 387 内部 RC 振荡器 与 WDT 一起使用 ..................................................... 353 内部稳压器规范 ................................................................ 426 内部振荡器模块 .................................................................. 41 内核功能 扩展存储器 ................................................................... 7 扩展指令集 ................................................................... 7 纳瓦技术 ....................................................................... 7 外部存储器总线 ............................................................ 7 移植方便 ....................................................................... 7 振荡器选项 ................................................................... 7 O OUI。请参见组织唯一标识符。 P PICSTART 2 开发编程器 ................................................. 412 PICSTART Plus 开发编程器 ............................................ 412 PIE 寄存器 ........................................................................ 127 PIR 寄存器 ....................................................................... 124 PLL 块 ................................................................................ 41 不同配置的时钟速度 ................................................... 42 POP ................................................................................. 388 PORTA LATA 寄存器 ............................................................ 136 PORTA 寄存器 ......................................................... 136 TRISA 寄存器 ........................................................... 136 相关的寄存器 ........................................................... 137 PORTB LATB 寄存器 ............................................................ 138 PORTB 寄存器 ......................................................... 138 2006 Microchip Technology Inc. RB7:RB4 电平变化中断标志 (RBIF 位) ................ 138 TRISB 寄存器 .......................................................... 138 相关的寄存器 ........................................................... 140 PORTC LATC 寄存器 ............................................................ 141 PORTC 寄存器 ........................................................ 141 RC3/SCK1/SCL1 引脚 ............................................. 272 TRISC 寄存器 .......................................................... 141 相关的寄存器 ........................................................... 143 PORTD LATD 寄存器 ............................................................ 144 PORTD 寄存器 ........................................................ 144 TRISD 寄存器 .......................................................... 144 相关的寄存器 ........................................................... 147 PORTE LATE 寄存器 ............................................................ 148 PORTE 寄存器 ......................................................... 148 PSP 模式选择 (PSPMODE 位) ............................ 160 RE0/AD8/RD/P2D 引脚 ........................................... 160 RE1/AD9/WR/P2C 引脚 ........................................... 160 RE2/AD10/CS/P2B 引脚 .......................................... 160 TRISE 寄存器 .......................................................... 148 相关的寄存器 ........................................................... 150 PORTF LATF 寄存器 ............................................................ 151 PORTF 寄存器 ......................................................... 151 TRISF 寄存器 ........................................................... 151 相关的寄存器 ........................................................... 152 PORTG LATG 寄存器 ........................................................... 153 PORTG 寄存器 ........................................................ 153 TRISG 寄存器 .......................................................... 153 相关的寄存器 ........................................................... 155 PORTH LATH 寄存器 ............................................................ 156 PORTH 寄存器 ........................................................ 156 TRISH 寄存器 .......................................................... 156 相关的寄存器 ........................................................... 157 PORTJ LATJ 寄存器 ............................................................ 158 PORTJ 寄存器 ......................................................... 158 TRISJ 寄存器 ........................................................... 158 相关的寄存器 ........................................................... 159 POR。请参见上电复位。 PRI_IDLE 模式 ................................................................... 50 PRI_RUN 模式 ................................................................... 46 PSP。请参见并行从动端口。 PWM (CCP 模块) TMR2 到 PR2 匹配 .................................................. 193 TMR4 到 PR4 匹配 .................................................. 179 工作模式设置 ........................................................... 187 频率 / 分辨率示例 ..................................................... 187 相关的寄存器 ........................................................... 188 占空比 ...................................................................... 186 周期 ......................................................................... 186 PWM (ECCP 模块) ....................................................... 193 CCPR1H:CCPR1L 寄存器 ....................................... 193 半桥模式 .................................................................. 196 半桥输出模式应用示例 ............................................. 196 复位的影响 ............................................................... 203 可编程死区延时 ....................................................... 200 频率 / 分辨率示例 ..................................................... 194 启动注意事项 ........................................................... 201 全桥模式 .................................................................. 197 全桥输出模式中的方向改变 ..................................... 198 超前信息 DS39762A_CN 第 461 页 PIC18F97J60 系列 全桥应用示例 ........................................................... 198 设置 PWM 工作模式 ................................................. 203 输出关系 (低电平有效) ......................................... 195 输出关系 (高电平有效) ......................................... 195 输出配置 ................................................................... 194 增强型 PWM 自动关闭 ............................................. 200 占空比 ...................................................................... 194 周期 .......................................................................... 193 PUSH ............................................................................... 388 PUSH 和 POP 指令 ............................................................ 72 PUSHL ............................................................................. 404 配置寄存器保护 ................................................................ 358 配置位 .............................................................................. 345 Q Q 时钟 ...................................................................... 187, 194 器件差异 ........................................................................... 455 器件概述 ............................................................................... 7 特性 (100 引脚器件) ............................................... 10 特性 (64 引脚器件) ................................................... 9 特性 (80 引脚器件) ................................................... 9 系列中各产品的详细说明 ............................................. 8 欠压复位 (BOR) .............................................................. 55 和片上稳压器 ........................................................... 354 在休眠模式下禁止 ...................................................... 55 R RAM。请参见数据存储器。 RC_IDLE 模式 .................................................................... 51 RC_RUN 模式 .................................................................... 48 RCALL .............................................................................. 389 RCON 寄存器 初始化时位的状态 ...................................................... 58 RESET ............................................................................. 389 RETFIE ............................................................................ 390 RETLW ............................................................................. 390 RETURN .......................................................................... 391 RLCF ................................................................................ 391 RLNCF ............................................................................. 392 RRCF ............................................................................... 392 RRNCF ............................................................................. 393 软件模拟器 (MPLAB SIM) ............................................ 410 S SCKx ................................................................................ 255 SDIx ................................................................................. 255 SDOx ................................................................................ 255 SEC_IDLE 模式 .................................................................. 50 SEC_RUN 模式 .................................................................. 46 SETF ................................................................................ 393 SLEEP .............................................................................. 394 SPI 模式 (MSSP) SPI 时钟 ................................................................... 260 串行时钟 ................................................................... 255 串行数据输出 ........................................................... 255 串行数据输入 ........................................................... 255 从动模式 ................................................................... 261 从动选择 ................................................................... 255 从动选择同步 ........................................................... 261 典型连接 ................................................................... 259 复位的影响 ............................................................... 263 工作原理 ................................................................... 258 使能 SPI I/O ............................................................. 259 时钟速度和模块相互关系 ......................................... 263 相关的寄存器 ........................................................... 264 在功耗管理模式下的操作 ......................................... 263 DS39762A_CN 第 462 页 主 / 从器件连接 ........................................................ 259 主控模式 .................................................................. 260 总线模式兼容性 ....................................................... 263 SSPOV ............................................................................ 290 SSPOV 状态标志 ............................................................. 290 SSPSTAT 寄存器 R/W 位 ..................................................................... 272 SSPxSTAT 寄存器 R/W 位 ..................................................................... 270 SSx .................................................................................. 255 SWAPF ............................................................................ 396 SUBFSR .......................................................................... 405 SUBFWB ......................................................................... 394 SUBLW ............................................................................ 395 SUBWF ............................................................................ 395 SUBWFB ......................................................................... 396 SUBULNK ........................................................................ 405 闪存程序存储器 .................................................................. 95 表读与表写 ................................................................. 95 表指针 基于操作的范围 ................................................. 98 表指针范围 ................................................................. 98 擦除 ......................................................................... 100 擦除序列 .................................................................. 100 代码保护期间的操作 ................................................ 103 读取 ........................................................................... 99 控制寄存器 ................................................................. 96 EECON1 和 EECON2 ........................................ 96 TABLAT (表锁存)寄存器 ............................... 98 TBLPTR (表指针)寄存器 ............................... 98 相关的寄存器 ........................................................... 103 写 ............................................................................. 101 防止误写操作的保护措施 ................................. 103 写校验 .............................................................. 103 意外终止 .......................................................... 103 写顺序 ...................................................................... 101 闪存配置字 ................................................................. 68, 345 上电复位 (POR) ............................................................. 55 上电延时定时器 (PWRT) ........................................ 56 延时时序 .................................................................... 56 上电延时 ............................................................................ 44 上电延时定时器 (PWRT) .......................................... 44, 56 时序图 A/D 转换 ................................................................... 446 BRG 溢出时序 .......................................................... 310 CLKO 和 I/O ............................................................. 431 EUSART 同步发送 (主控 / 从动) .......................... 445 EUSART 同步接收 (主控 / 从动) .......................... 445 I2C 从动模式广播呼叫地址时序 (7 位或 10 位地址模式) ................................. 283 I2C 从动模式 (10 位发送) ..................................... 278 I2C 从动模式 (10 位接收, SEN = 0) ................... 276 I2C 从动模式 (10 位接收, SEN = 0, ADMSK = 01001) ........................................... 277 I2C 从动模式 (10 位接收, SEN = 1) ................... 282 I2C 从动模式 (7 位发送) ....................................... 275 I2C 从动模式 (7 位接收, SEN = 0) ..................... 273 I2C 从动模式 (7 位接收, SEN = 0, ADMSK = 01011) ........................................... 274 I2C 从动模式 (7 位接收, SEN = 1) ..................... 281 I2C 发送和应答的总线冲突 ....................................... 294 I2C 启动条件期间的总线冲突 (仅 SDAx) .............. 295 I2C 启动条件期间的总线冲突 (SCLx = 0) ............. 296 I2C 停止条件接收或发送模式 ................................... 293 I2C 停止条件期间的总线冲突 (情形 1) .................. 298 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 I2C 停止条件期间的总线冲突 (情形 2) .................. 298 I2C 应答序列 ............................................................ 293 I2C 重复启动条件期间的总线冲突 (情形 1) ........... 297 I2C 重复启动条件期间的总线冲突 (情形 2) ........... 297 I2C 主控模式 (7 位或 10 位地址发送) ................... 291 I2C 主控模式 (7 位接收) ........................................ 292 I2C 总线数据 ............................................................ 441 PWM 方向改变 ......................................................... 199 PWM 输出 ................................................................ 186 PWM 自动关闭 (P1RSEN = 0,禁止自动重启) .... 202 PWM 自动关闭 (P1RSEN = 1,使能自动重启) .... 202 SPI 从动模式示例 (CKE = 0) ................................ 439 SPI 从动模式示例 (CKE = 1) ................................ 440 SPI 模式 (从动模式, CKE = 0) ........................... 262 SPI 模式 (从动模式, CKE = 1) ........................... 262 SPI 模式 (主控模式) ............................................. 260 SPI 主控模式示例 (CKE = 0) ................................ 437 SPI 主控模式示例 (CKE = 1) ................................ 438 Timer0 和 Timer1 外部时钟 ...................................... 435 半桥 PWM 输出 ........................................................ 196 并行从动端口 (PSP)读 ........................................ 162 并行从动端口 (PSP)写 ........................................ 161 捕捉 / 比较 /PWM (包括 ECCP 模块) .................... 436 从动同步 ................................................................... 261 从空闲模式唤醒进入运行模式的转换 ......................... 50 从 RC_RUN 模式切换到 PRI_RUN 模式的转换 ......... 48 从 SEC_RUN 模式切换到 PRI_RUN 模式的 转换 (HSPLL) ................................................. 47 从休眠模式唤醒的转换 (HSPLL) ............................ 49 带有时钟仲裁的波特率发生器 .................................. 287 到 RC_RUN 模式的转换 ............................................. 48 第一个启动位 ........................................................... 288 读程序存储器 ........................................................... 432 发送间隔字符时序 .................................................... 318 复位、看门狗定时器 (WDT)、振荡器起振 定时器 (OST)和上电延时定时器 (PWRT) 434 故障保护时钟监视器 ................................................. 357 缓慢上升时间 (MCLR 连接到 VDD, VDD 电压 上升时间 > TPWRT) ........................................... 57 进入空闲模式的转换 ................................................... 50 进入 SEC_RUN 模式的转换 ....................................... 47 进入休眠模式的转换 ................................................... 49 启动条件期间由 SDAx 仲裁引起的 BRG 复位 .......... 296 欠压复位 (BOR) .................................................... 434 全桥 PWM 输出 ........................................................ 197 上电延时时序 (MCLR 连接到 VDD, VDD 电压 上升时间 TPWRT) .............................................. 56 上电延时时序 (MCLR 未连接到 VDD),情形 1 ........ 56 上电延时时序 (MCLR 未连接到 VDD),情形 2 ........ 57 时钟 / 指令周期 ........................................................... 74 时钟同步 ................................................................... 280 双速启动转换 (从 INTRC 切换到 HSPLL) ............. 355 同步发送 ................................................................... 319 同步发送 (由 TXEN 位控制) .................................. 320 同步接收 (主控模式, SREN) .............................. 321 外部时钟 (除 PLL 外的所有模式) .......................... 429 写程序存储器 ........................................................... 433 休眠模式下的自动唤醒位 (WUE) .......................... 317 异步发送 (背对背), TXCKP = 0 (TXx 未反相) . 312 异步发送, TXCKP = 0 (TXx 未反相) ................... 312 异步接收, RXDTP = 0 (RXx 未反相) .................. 315 在占空比接近 100% 时改变 PWM 方向 .................... 199 正常工作模式下的自动唤醒位 (WUE) ................... 317 执行 TBLRD 操作时外部存储器总线时序 (扩展单片机模式) .................................. 112, 114 2006 Microchip Technology Inc. 执行休眠操作时外部存储器总线时序 (扩展单片机模式) .................................. 112, 114 重复启动条件 ........................................................... 289 主控 SSP I2C 总线启动 / 停止位 .............................. 443 主控 SSP I2C 总线数据 ............................................ 443 自动波特率计算 ....................................................... 310 时序图和规范 CLKO 和 I/O 要求 ............................................ 431, 432 EUSART 同步发送要求 ............................................ 445 EUSART 同步接收要求 ............................................ 445 I2C 总线启动 / 停止位要求 (从动模式) .................. 441 I2C 总线数据要求 (从动模式) ............................... 442 PLL 时钟 .................................................................. 430 SPI 从动模式要求示例 (CKE = 1) ........................ 440 SPI 模式要求示例 (从动模式, CKE = 0) ............. 439 SPI 模式要求示例 (主控模式, CKE = 0) ............. 437 SPI 模式要求示例 (主控模式, CKE = 1) ............. 438 Timer0 和 Timer1 外部时钟要求 .............................. 435 并行从动端口要求 .................................................... 436 捕捉 / 比较 /PWM 要求 (包括 ECCP 模块) ........... 436 复位、看门狗定时器、振荡器起振定时器、上电延时定时 器和欠压复位要求 ............................................ 434 交流特性 内部 RC 精度 ................................................... 430 外部时钟要求 ........................................................... 429 写程序存储器要求 .................................................... 433 主控 SSP I2C 总线启动 / 停止位要求 ....................... 443 主控 SSP I2C 总线数据要求 ..................................... 444 时钟源 复位时的默认系统时钟 ............................................... 44 振荡器切换 ................................................................. 42 受影响的指令 ..................................................................... 91 数据存储器 ......................................................................... 76 PIC18F97J60 系列的映射图 ...................................... 77 存储区选择寄存器 (BSR) ....................................... 76 快速操作存储区 ......................................................... 78 扩展指令集 ................................................................. 90 特殊功能寄存器 ......................................................... 79 通用寄存器文件 ......................................................... 78 以太网 SFR ................................................................ 80 数据寻址模式 ..................................................................... 88 固有和立即数寻址 ...................................................... 88 间接寻址 .................................................................... 88 立即数变址寻址 ......................................................... 91 使能了扩展指令集的对比寻址模式 ............................. 92 直接寻址 .................................................................... 88 双速启动 .................................................................. 345, 355 双字指令 示例情形 .................................................................... 75 所有寄存器的初始化状态 ............................................. 59–65 T TBLRD ............................................................................. 397 TBLWT ............................................................................ 398 Timer0 ............................................................................. 163 16 位读写模式 .......................................................... 164 工作原理 .................................................................. 164 切换预分频器的分配 ................................................ 165 时钟源边沿选择 (T0SE 位) ................................... 164 时钟源选择 (T0CS 位) .......................................... 164 相关的寄存器 ........................................................... 165 溢出中断 .................................................................. 165 预分频器 .................................................................. 165 预分频器分配 (PSA 位) ........................................ 165 预分频器选择 (T0PS2:T0PS0 位) ........................ 165 预分频器。请参见预分频器, Timer0。 超前信息 DS39762A_CN 第 463 页 PIC18F97J60 系列 Timer2 .............................................................................. 173 PR2 寄存器 ...................................................... 186, 193 TMR2 到 PR2 匹配中断 ............................................ 193 工作原理 ................................................................... 173 输出 .......................................................................... 174 相关的寄存器 ........................................................... 174 中断 .......................................................................... 174 Timer3 .............................................................................. 175 16 位读 / 写模式 ....................................................... 177 TMR3H 寄存器 ......................................................... 175 TMR3L 寄存器 .......................................................... 175 工作原理 ................................................................... 176 特殊事件触发信号 (ECCP) ................................... 177 相关的寄存器 ........................................................... 177 溢出中断 ........................................................... 175, 177 振荡器 .............................................................. 175, 177 Timer4 .............................................................................. 179 MSSP 时钟 ............................................................... 180 PR4 寄存器 ...................................................... 179, 186 TMR4 到 PR4 匹配中断 .................................... 179, 180 TMR4 寄存器 ............................................................ 179 工作原理 ................................................................... 179 后分频器。请参见后分频器, Timer4。 相关的寄存器 ........................................................... 180 预分频器。请参见预分频器, Timer4。 Timer1 .............................................................................. 167 16 位读 / 写模式 ....................................................... 169 TMR1H 寄存器 ......................................................... 167 TMR1L 寄存器 .......................................................... 167 复位,使用 ECCP 特殊事件触发信号 ...................... 170 工作原理 ................................................................... 168 特殊事件触发器 (ECCP) ....................................... 192 相关的寄存器 ........................................................... 171 溢出中断 ................................................................... 167 用作实时时钟 ........................................................... 170 振荡器 .............................................................. 167, 169 布线注意事项 ................................................... 170 中断 .......................................................................... 170 作为时钟源 ............................................................... 169 TRISE 寄存器 PSPMODE 位 ........................................................... 160 TSTFSZ ............................................................................ 399 TXSTAx 寄存器 BRGH 位 .................................................................. 305 特殊功能寄存器 .................................................................. 79 以太网 SFR ................................................................ 80 映射图 ........................................................................ 79 特殊事件触发器。请参见比较 (ECCP 模块)。 同步间隔字符自动唤醒 ..................................................... 316 W WCOL ...................................................... 288, 289, 290, 293 WCOL 状态标志 ....................................... 288, 289, 290, 293 VDDCORE/VCAP 引脚 ......................................................... 354 WWW 地址 ....................................................................... 469 WWW,在线支持 ................................................................. 6 外部存储器总线 ................................................................ 105 16 位模式时序 .......................................................... 112 16 位数据宽度模式 ................................................... 108 16 位字节写模式 ....................................................... 109 16 位字节选择模式 ................................................... 111 16 位字写模式 .......................................................... 110 21 位寻址 ................................................................. 107 8 位模式时序 ............................................................ 114 8 位数据宽度模式 ..................................................... 113 I/O 端口功能 ............................................................. 105 DS39762A_CN 第 464 页 等待状态 .................................................................. 108 地址和数据宽度 ....................................................... 107 地址和数据线的使用 (表) ..................................... 107 地址平移 .................................................................. 107 端口引脚弱上拉 ....................................................... 108 功耗管理模式下的操作 ............................................. 115 和程序存储器模式 .................................................... 108 控制 ......................................................................... 106 外部时钟输入 (EC 模式) ................................................. 40 稳压器 (片上) ................................................................ 354 X XORLW ............................................................................ 399 XORWF ........................................................................... 400 休眠 OSC1 和 OSC2 引脚的状态 ....................................... 44 Y 以太网操作,单片机时钟 ................................................... 41 以太网模块 ....................................................................... 205 CRC ......................................................................... 234 EREVID 寄存器 ........................................................ 217 LED 配置 .................................................................. 206 MAC 和 MII 寄存器 ................................................... 213 PHID 寄存器 ............................................................ 217 PHSTAT 寄存器 ....................................................... 217 PHY 寄存器 .............................................................. 217 PHY 寄存器汇总 ...................................................... 219 PHY 起振定时器 ...................................................... 206 初始化 ...................................................................... 231 磁性元件、端接元件和其他外部元件 ....................... 207 发送和接收数据 ....................................................... 233 读取接收到的数据包 ........................................ 239 发送数据包 ....................................................... 235 发送数据包结构 ............................................... 236 接收缓冲区空间 ............................................... 240 接收数据包 ....................................................... 238 接收数据包结构 ............................................... 238 接收状态向量 ................................................... 239 数据包字段定义 ....................................... 233–234 复位 ......................................................................... 253 仅发送 .............................................................. 253 仅接收 .............................................................. 253 上电复位 (POR) ........................................... 253 缓冲区构成 ............................................................... 210 缓冲区和缓冲区指针 ................................................ 209 接收过滤器 ............................................................... 245 Magic Packet ................................................... 245 单播 ................................................................. 245 格式匹配 .......................................................... 245 广播 ................................................................. 245 哈希表 .............................................................. 245 组播 ................................................................. 245 禁止 ......................................................................... 232 流量控制 .................................................................. 243 数据包格式 ............................................................... 233 数据包控制字节 ....................................................... 235 双工模式配置 ........................................................... 242 特殊功能寄存器 (SFR) ......................................... 211 相关的寄存器,发送 ................................................ 241 相关的寄存器,接收 ................................................ 241 相关的寄存器,直接存储器访问控制器 .................... 253 相关寄存器,流量控制 ............................................. 244 信号和电源接口 ....................................................... 206 以太网控制寄存器 .................................................... 211 以太网与单片机存储器的关系 .................................. 208 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 振荡器要求 ............................................................... 206 直接存储器访问控制器 ............................................. 251 复制存储器内容 ................................................ 251 校验和计算 ....................................................... 252 中断 .......................................................................... 225 以太网特殊功能寄存器 映射图 ........................................................................ 80 引脚功能 AVDD .............................................................. 20, 28, 38 AVSS .............................................................. 20, 28, 38 ENVREG ........................................................ 20, 28, 38 MCLR ............................................................. 14, 21, 29 OSC1/CLKI .................................................... 14, 21, 29 OSC2/CLKO .................................................. 14, 21, 29 RA0/LEDA/AN0 .............................................. 14, 21, 29 RA1/LEDB/AN1 .............................................. 14, 21, 29 RA2/AN2/VREF- .............................................. 14, 21, 29 RA3/AN3/VREF+ ............................................. 14, 21, 29 RA4/T0CKI ..................................................... 14, 21, 29 RA5/AN4 ........................................................ 14, 21, 29 RB0/INT0/FLT0 .............................................. 15, 22, 30 RB1/INT1 ....................................................... 15, 22, 30 RB2/INT2 ....................................................... 15, 22, 30 RB3/INT3 ............................................................. 15, 22 RB3/INT3/ECCP2/P2A .............................................. 30 RB4/KBI0 ....................................................... 15, 22, 30 RB5/KBI1 ....................................................... 15, 22, 30 RB6/KBI2/PGC .............................................. 15, 22, 30 RB7/KBI3/PGD .............................................. 15, 22, 30 RBIAS ............................................................ 20, 28, 38 RC0/T1OSO/T13CKI ..................................... 16, 23, 31 RC1/T1OSI/ECCP2/P2A ................................ 16, 23, 31 RC2/ECCP1/P1A ........................................... 16, 23, 31 RC3/SCK1/SCL1 ........................................... 16, 23, 31 RC4/SDI1/SDA1 ............................................ 16, 23, 31 RC5/SDO1 ..................................................... 16, 23, 31 RC6/TX1/CK1 ................................................ 16, 23, 31 RC7/RX1/DT1 ................................................ 16, 23, 31 RD0 ............................................................................ 24 RD0/AD0/PSP0 .......................................................... 32 RD0/P1B .................................................................... 17 RD1 ............................................................................ 24 RD1/AD1/PSP1 .......................................................... 32 RD1/ECCP3/P3A ....................................................... 17 RD2 ............................................................................ 24 RD2/AD2/PSP2 .......................................................... 32 RD2/CCP4/P3D ......................................................... 17 RD3/AD3/PSP3 .......................................................... 32 RD4/AD4/PSP4/SDO2 ............................................... 32 RD5/AD5/PSP5/SDI2/SDA2 ...................................... 32 RD6/AD6/PSP6/SCK2/SCL2 ..................................... 32 RD7/AD7/PSP7/SS2 .................................................. 32 RE0/AD8/RD/P2D ...................................................... 33 RE0/P2D .............................................................. 18, 24 RE1/AD9/WR/P2C ..................................................... 33 RE1/P2C .............................................................. 18, 24 RE2/AD10/CS/P2B .................................................... 33 RE2/P2B .............................................................. 18, 24 RE3/AD11/P3C .......................................................... 33 RE3/P3C .............................................................. 18, 24 RE4/AD12/P3B .......................................................... 33 RE4/P3B .............................................................. 18, 24 RE5/AD13/P1C .......................................................... 33 RE5/P1C .............................................................. 18, 24 RE6/AD14/P1B .......................................................... 33 RE6/P1B .................................................................... 24 RE7/AD15/ECCP2/P2A ............................................. 33 RE7/ECCP2/P2A ....................................................... 24 RF0/AN5 .................................................................... 34 RF1/AN6/C2OUT ........................................... 19, 25, 34 RF2/AN7/C1OUT ........................................... 19, 25, 34 RF3/AN8 ........................................................ 19, 25, 34 RF4/AN9 ........................................................ 19, 25, 34 RF5/AN10/CVREF .......................................... 19, 25, 34 RF6/AN11 ...................................................... 19, 25, 34 RF7/SS1 ........................................................ 19, 25, 34 RG0/ECCP3/P3A ................................................ 26, 35 RG1/TX2/CK2 ...................................................... 26, 35 RG2/RX2/DT2 ..................................................... 26, 35 RG3/CCP4/P3D ................................................... 26, 35 RG4/CCP5/P1D ............................................. 20, 26, 35 RG5 ........................................................................... 35 RG6 ........................................................................... 35 RG7 ........................................................................... 35 RH0 ........................................................................... 27 RH0/A16 .................................................................... 36 RH1 ........................................................................... 27 RH1/A17 .................................................................... 36 RH2 ........................................................................... 27 RH2/A18 .................................................................... 36 RH3 ........................................................................... 27 RH3/A19 .................................................................... 36 RH4/AN12/P3C ................................................... 27, 36 RH5/AN13/P3B .................................................... 27, 36 RH6/AN14/P1C ................................................... 27, 36 RH7/AN15/P1B .................................................... 27, 36 RJ0/ALE .................................................................... 37 RJ1/OE ...................................................................... 37 RJ2/WRL ................................................................... 37 RJ3/WRH ................................................................... 37 RJ4 ............................................................................ 28 RJ4/BA0 .................................................................... 37 RJ5 ............................................................................ 28 RJ5/CE ...................................................................... 37 RJ6/LB ....................................................................... 37 RJ7/UB ...................................................................... 37 TPIN- ............................................................. 20, 28, 38 TPIN+ ............................................................ 20, 28, 38 TPOUT- ......................................................... 20, 28, 38 TPOUT+ ........................................................ 20, 28, 38 VDD ................................................................ 20, 28, 38 VDDCORE/VCAP .............................................. 20, 28, 38 VDDPLL ........................................................... 20, 28, 38 VDDRX ............................................................ 20, 28, 38 VDDTX ............................................................ 20, 28, 38 VSS ................................................................ 20, 28, 38 VSSPLL ........................................................... 20, 28, 38 VSSRX ............................................................ 20, 28, 38 VSSTX ............................................................. 20, 28, 38 因特网地址 ....................................................................... 469 硬件乘法器 ....................................................................... 117 工作原理 .................................................................. 117 简介 ......................................................................... 117 性能比较 .................................................................. 117 预分频器 Timer2 ..................................................................... 194 预分频器, Timer0 ........................................................... 165 预分频器, Timer2 ........................................................... 187 Z 在线串行编程 (ICSP) ........................................... 345, 358 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 465 页 PIC18F97J60 系列 在线调试器 ....................................................................... 358 增强型捕捉 / 比较 /PWM (ECCP) ................................. 189 CCP4/CCP5 与 ECCP1/ECCP3 一起使用 ............... 190 ECCP1/ECCP3 输出和程序存储器模式 ................... 190 ECCP1 的引脚配置 .................................................. 191 ECCP2 的引脚配置 .................................................. 191 ECCP2 输出和程序存储器模式 ................................ 190 ECCP3 的引脚配置 .................................................. 192 PWM 模式。请参见 PWM (ECCP 模块)。 标准 PWM 模式 ........................................................ 192 捕捉和比较模式 ........................................................ 192 捕捉模式。请参见捕捉 (ECCP 模块)。 定时器资源 ............................................................... 190 输出和配置 ............................................................... 190 相关的寄存器 ........................................................... 204 增强型 PWM 模式 .................................................... 193 增强型通用同步 / 异步收发器(EUSART)。请参见 EUSART。 振荡器配置 ......................................................................... 39 EC .............................................................................. 39 ECPLL ........................................................................ 39 HS .............................................................................. 39 HSPLL ........................................................................ 39 INTRC ........................................................................ 39 内部振荡器模块 .......................................................... 41 振荡器起振定时器 (OST) ................................................ 44 振荡器选择 ....................................................................... 345 振荡器转换 ......................................................................... 44 振荡器, Timer3 ............................................................... 175 振荡器, Timer1 ....................................................... 167, 177 直接寻址 ............................................................................. 89 指令集 .............................................................................. 359 ADDLW .................................................................... 365 ADDWF .................................................................... 365 ADDWFC ................................................................. 366 ADDWF (立即数变址寻址模式) ............................ 407 ANDLW .................................................................... 366 ANDWF .................................................................... 367 BC ............................................................................ 367 BCF .......................................................................... 368 BN ............................................................................ 368 BNC ......................................................................... 369 BNN ......................................................................... 369 BNOV ....................................................................... 370 BNZ .......................................................................... 370 BOV ......................................................................... 373 BRA .......................................................................... 371 BSF .......................................................................... 371 BSF (立即数变址寻址模式) .................................. 407 BTFSC ..................................................................... 372 BTFSS ..................................................................... 372 BTG .......................................................................... 373 BZ ............................................................................ 374 CALL ........................................................................ 374 CLRF ........................................................................ 375 CLRWDT .................................................................. 375 COMF ...................................................................... 376 CPFSEQ .................................................................. 376 CPFSGT .................................................................. 377 CPFSLT ................................................................... 377 DAW ......................................................................... 378 DCFSNZ .................................................................. 379 DECF ....................................................................... 378 DECFSZ ................................................................... 379 GOTO ...................................................................... 380 INCF ......................................................................... 380 INCFSZ .................................................................... 381 DS39762A_CN 第 466 页 INFSNZ .................................................................... 381 IORLW ..................................................................... 382 IORWF ..................................................................... 382 LFSR ....................................................................... 383 MOVF ...................................................................... 383 MOVFF .................................................................... 384 MOVLB .................................................................... 384 MOVLW ................................................................... 385 MOVWF ................................................................... 385 MULLW .................................................................... 386 MULWF .................................................................... 386 NEGF ....................................................................... 387 NOP ......................................................................... 387 POP ......................................................................... 388 PUSH ....................................................................... 388 RCALL ..................................................................... 389 RESET ..................................................................... 389 RETFIE .................................................................... 390 RETLW .................................................................... 390 RETURN .................................................................. 391 RLCF ....................................................................... 391 RLNCF ..................................................................... 392 RRCF ....................................................................... 392 RRNCF .................................................................... 393 SETF ....................................................................... 393 SETF (立即数变址寻址模式) ................................ 407 SLEEP ..................................................................... 394 SWAPF .................................................................... 396 SUBFWB ................................................................. 394 SUBLW .................................................................... 395 SUBWF .................................................................... 395 SUBWFB ................................................................. 396 TBLRD ..................................................................... 397 TBLWT .................................................................... 398 TSTFSZ ................................................................... 399 XORLW ................................................................... 399 XORWF ................................................................... 400 标准指令集 ............................................................... 359 扩展指令 .................................................................. 401 使能时的注意事项 ............................................ 406 使用 MPLAB IDE 工具 ..................................... 408 语法 ................................................................. 401 通用格式 .................................................................. 361 指令周期 ............................................................................ 74 时钟分配 .................................................................... 74 指令流 / 流水线 .......................................................... 74 直流和交流特性 图表 ......................................................................... 449 直流特性 .......................................................................... 423 掉电和供电电流 ....................................................... 416 供电电压 .................................................................. 415 中断 .................................................................................. 119 中断的现场保护 ................................................................ 134 中断源 .............................................................................. 345 A/D 转换完成 ........................................................... 329 INTx 引脚 ................................................................. 134 PORTB,电平变化中断 ........................................... 134 TMR0 ....................................................................... 134 TMR0 溢出 ............................................................... 165 TMR1 溢出 ............................................................... 167 TMR2 到 PR2 匹配 (PWM) .................................. 193 TMR3 溢出 ....................................................... 175, 177 TMR4 到 PR4 匹配 .................................................. 180 TMR4 到 PR4 匹配 (PWM) .................................. 179 比较完成 (CCP) ................................................... 184 捕捉完成 (CCP) ................................................... 183 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 电平变化中断 (RB7:RB4) ..................................... 138 中断,标志位 电平变化中断 (RB7:RB4)标志 (RBIF 位) ......... 138 主复位 (MCLR) ............................................................... 55 主控同步串行口 (MSSP)。请参见 MSSP。 组织唯一标识符 (OUI) .................................................. 234 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 467 页 PIC18F97J60 系列 注: DS39762A_CN 第 468 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 MICROCHIP 网站 客户支持 Microchip 网站 (www.microchip.com)为客户提供在 线支持。客户可通过该网站方便地获取文件和信息。只 要使用常用的因特网浏览器即可访问。网站提供以下信 息: Microchip 产品的用户可通过以下渠道获得帮助: • 产品支持——数据手册和勘误表、应用笔记和样本 程序、设计资源、用户指南以及硬件支持文档、最 新的软件版本以及存档软件 • 一般技术支持——常见问题 (FAQ)、技术支持请 求、在线讨论组以及 Microchip 顾问计划成员名单 • Microchip 业务——产品选型和订购指南、最新 Microchip 新闻稿、研讨会和活动安排、 Microchip 销售办事处、代理商以及工厂代表列表 • • • • 代理商或代表 当地销售办事处 应用工程师 (FAE) 技术支持 客户应联系其代理商、代表或应用工程师 (FAE)寻求 支持。当地销售办事处也可为客户提供帮助。本文档后 附有销售办事处的联系方式。 也可通过http://support.microchip.com获得网上技术 支持。 变更通知客户服务 Microchip 的客户通知服务有助于客户了解 Microchip 产 品的最新信息。注册客户可在他们感兴趣的某个产品系 列或开发工具发生变更、更新、发布新版本或勘误表 时,收到电子邮件通知。 欲注册,请登录 Microchip 网站 www.microchip.com, 点 击 “变 更 通 知 客 户 (Customer Change Notification)”服务并按照注册说明完成注册。 2006 Microchip Technology Inc. 超前信息 DS39762A_CN 第 469 页 PIC18F97J60 系列 读者反馈表 我们努力为您提供最佳文档,以确保您能够成功使用 Microchip 产品。如果您对文档的组织、条理性、主题及其他有助 于提高文档质量的方面有任何意见或建议,请填写本反馈表并传真给我公司 TRC 经理,传真号码为 86-21-5407-5066。 请填写以下信息,并从下面各方面提出您对本文档的意见。 致: TRC 经理 总页数 ________ 关于: 读者反馈 发自: 姓名 公司 地址 国家 / 省份 / 城市 / 邮编 电话:(_______) _________ - _________ 传真: (______) _________ - _________ 应用(选填): 您希望收到回复吗?是 器件: 否 PIC18F97J60 系列 文献编号: DS39762A_CN 问题: 1. 本文档中哪些部分最有特色? 2. 本文档是否满足了您的软硬件开发要求?如何满足的? 3. 您认为本文档的组织结构便于理解吗?如果不便于理解,那么问题何在? 4. 您认为本文档应该添加哪些内容以改善其结构和主题? 5. 您认为本文档中可以删减哪些内容,而又不会影响整体使用效果? 6. 本文档中是否存在错误或误导信息?如果存在,请指出是什么信息及其具体页数。 7. 您认为本文档还有哪些方面有待改进? DS39762A_CN 第 470 页 超前信息 2006 Microchip Technology Inc. PIC18F97J60 系列 产品标识体系 欲订货或获取价格、交货等信息,请与我公司生产厂或各销售办事处联系。 器件编号 X /XX XXX 器件 温度范围 封装 模板 示例: a) b) 器件 PIC18F66J60/66J65/67J60, PIC18F86J60/86J65/87J60, PIC18F96J60/96J65/97J60, PIC18F66J60/66J65/67J60T(1), PIC18F86J60/86J65/87J60T(1), PIC18F96J60/96J65/97J60T(1) ; 温度范围 I 封装 PT = PF = 模板 QTP、 SQTP、代码或特殊要求 (其他情况空白) = PIC18F67J60-I/PT 301 = 工业级温度, TQFP 封装, QTP 模板 #301。 PIC18F67J60T-I/PT = 卷带式,工业级温度, TQFP 封装。 -40°C 至 +85°C (工业级) 64 和 80 引脚 TQFP (薄型正方扁平封装) 100 引脚 TQFP (薄型正方扁平封装) 注 2006 Microchip Technology Inc. 超前信息 1: T = 卷带式 DS39762A_CN 第 471 页 全球销售及服务网点 美洲 亚太地区 亚太地区 欧洲 公司总部 Corporate Office 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel: 1-480-792-7200 Fax: 1-480-792-7277 技术支持: http://support.microchip.com 网址:www.microchip.com 亚太总部 Asia Pacific Office Suites 3707-14, 37th Floor Tower 6, The Gateway Habour City, Kowloon Hong Kong Tel: 852-2401-1200 Fax: 852-2401-3431 澳大利亚 Australia - Sydney Tel: 61-2-9868-6733 Fax: 61-2-9868-6755 奥地利 Austria - Wels Tel: 43-7242-2244-39 Fax: 43-7242-2244-393 印度 India - Bangalore Tel: 91-80-4182-8400 Fax: 91-80-4182-8422 丹麦 Denmark-Copenhagen Tel: 45-4450-2828 Fax: 45-4485-2829 印度 India - New Delhi Tel: 91-11-4160-8631 Fax: 91-11-4160-8632 法国 France - Paris Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79 印度 India - Pune Tel: 91-20-2566-1512 Fax: 91-20-2566-1513 德国 Germany - Munich Tel: 49-89-627-144-0 Fax: 49-89-627-144-44 日本 Japan - Yokohama Tel: 81-45-471- 6166 Fax: 81-45-471-6122 意大利 Italy - Milan Tel: 39-0331-742611 Fax: 39-0331-466781 亚特兰大 Atlanta Duluth, GA Tel: 678-957-9614 Fax: 678-957-1455 波士顿 Boston Westborough, MA Tel: 1-774-760-0087 Fax: 1-774-760-0088 芝加哥 Chicago Itasca, IL Tel: 1-630-285-0071 Fax: 1-630-285-0075 达拉斯 Dallas Addison, TX Tel: 1-972-818-7423 Fax: 1-972-818-2924 底特律 Detroit Farmington Hills, MI Tel: 1-248-538-2250 Fax: 1-248-538-2260 科科莫 Kokomo Kokomo, IN Tel: 1-765-864-8360 Fax: 1-765-864-8387 洛杉矶 Los Angeles Mission Viejo, CA Tel: 1-949-462-9523 Fax: 1-949-462-9608 圣克拉拉 Santa Clara Santa Clara, CA Tel: 408-961-6444 Fax: 408-961-6445 加拿大多伦多 Toronto Mississauga, Ontario, Canada Tel: 1-905-673-0699 Fax: 1-905-673-6509 中国 - 北京 Tel: 86-10-8528-2100 Fax: 86-10-8528-2104 中国 - 成都 Tel: 86-28-8665-5511 Fax: 86-28-8665-7889 中国 - 福州 Tel: 86-591-8750-3506 Fax: 86-591-8750-3521 中国 - 香港特别行政区 Tel: 852-2401-1200 Fax: 852-2401-3431 中国 - 青岛 Tel: 86-532-8502-7355 Fax: 86-532-8502-7205 中国 - 上海 Tel: 86-21-5407-5533 Fax: 86-21-5407-5066 中国 - 沈阳 Tel: 86-24-2334-2829 Fax: 86-24-2334-2393 中国 - 深圳 Tel: 86-755-8203-2660 Fax: 86-755-8203-1760 中国 - 顺德 Tel: 86-757-2839-5507 Fax: 86-757-2839-5571 中国 - 武汉 Tel: 86-27-5980-5300 Fax: 86-27-5980-5118 韩国 Korea - Gumi Tel: 82-54-473-4301 Fax: 82-54-473-4302 韩国 Korea - Seoul Tel: 82-2-554-7200 Fax: 82-2-558-5932 或 82-2-558-5934 马来西亚 Malaysia - Penang Tel: 60-4-646-8870 Fax: 60-4-646-5086 荷兰 Netherlands - Drunen Tel: 31-416-690399 Fax: 31-416-690340 西班牙 Spain - Madrid Tel: 34-91-708-08-90 Fax: 34-91-708-08-91 英国 UK - Wokingham Tel: 44-118-921-5869 Fax: 44-118-921-5820 菲律宾 Philippines - Manila Tel: 63-2-634-9065 Fax: 63-2-634-9069 新加坡 Singapore Tel: 65-6334-8870 Fax: 65-6334-8850 泰国 Thailand - Bangkok Tel: 66-2-694-1351 Fax: 66-2-694-1350 中国 - 西安 Tel: 86-29-8833-7250 Fax: 86-29-8833-7256 台湾地区 - 高雄 Tel: 886-7-536-4818 Fax: 886-7-536-4803 台湾地区 - 台北 Tel: 886-2-2500-6610 Fax: 886-2-2508-0102 台湾地区 - 新竹 Tel: 886-3-572-9526 Fax: 886-3-572-6459 12/08/06 DS39762A_CN 第 472 页 超前信息 2006 Microchip Technology Inc.