PIC18F2423/2523/4423/4523
深圳市英锐恩科技有限公司(Microchip Authorized Design Partner)指定授权
Add: Room 1203-1205 Top office,Glittery City,No. 3027, Shennan Road Central,Futian ,
Shenzhen City
电话(tel) :86-755-88845951,82543411 传真(fax) :86-755-82543511
Web: Http://www.Enroo.com ,"o"为字母.
E-mail: enroo@enroo.com jason.ma@139.com
联系人:马先生,王小姐 公司在线咨询:QQ:27781279 MSN:picmcu@hotmail.com
数据手册
采用 12 位 A/D 和纳瓦技术的
28/40/44 引脚
增强型闪存单片机
2007 Microchip Technology Inc. 初稿 DS39755A_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、 K
EEL OQ、 K EEL OQ 徽标、 microID 、 MPLAB、 PIC、
PICmicro、 PICSTART、 PRO MATE、 PowerSmart、 rfPIC
和 SmartShunt 均为 Microchip Technology Inc . 在美国和其他
国家或地区的注册商标。
AmpLab、 FilterLab、 Linear Active Thermistor、 Migratable
Memory、 MXDEV、 MXLAB、 PS 徽标、 SEEVAL、
SmartSensor 和 The Embedded Contr ol 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、
Mindi、 MiWi、 MPASM、 MPLAB Certified 徽标、 MPLIB、
MPLINK、 PICkit、 PICDEM、 PICDEM.net、 PICLAB、
PICtail、 PowerCal、 PowerInfo、 PowerMate、 PowerTool、
REAL ICE、 rfLAB、 rfPICDEM、 Select Mode、 Smart
Serial、 Smart Tel、 Total Endurance、 UNI/O、 WiperLock 和
ZENA 均为 Microchip Technology Inc. 在美国和其他国家或地
区的商标。
SQTP 是 Microchip Technology Inc . 在美国的服务标记。
在此提及的所有其他商标均为各持有公司所有。
© 2007, Microchip Technology Inc . 版权所有。
Microchip
Gresham
晶圆 生产厂 均于通过 了
与
片机外设 、非易失 性存储 器和模拟 产品方面的质量体系流程 均符合
ISO/TS-16949:2002
的质量体系也已通过 了
位于美国亚 利桑那州
及位于加利福尼亚州
®
dsPIC
数字 信号控制 器、
Chandler和Tempe
Mountain View
ISO/TS-16949:2002
KEE LOQ
。此外 ,
Microchip
ISO 9001:2000
、位于俄勒冈州
的全球总 部、设计中心 和
认 证。公司在
®
跳 码器件、串行
在开 发系统 的设计 和生产方面
认 证。
PIC
EEPROM
®
单片机
、单
DS39755A_CN 第 ii 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
采用 12 位 A/D 和纳瓦技术的
28/40/44 引脚增强型闪存单片机
外设特点:
• 最多 13 路通道的 12 位模 数转换 器 模块 (A/D):
- 自动 采样 功能
- 可在休眠模 式下进行 转换
• 带有 输入多路选择的 双模拟比较器
• 高灌 / 拉电流 : 25 mA/25 mA
• 3 个可 编程外部中 断
• 4 个输入电平变化 中断
• 多达两个捕捉 / 比较 /PWM( CCP)模 块 ,一 个具 有
自 动 关 闭 的功能 (28 引脚器件 )
• 增强型捕捉 / 比较 /PWM( ECCP)模块 ( 仅限 40/44
引脚器件):
-1、 2 或 4 路 PWM 输 出
- 可选择极 性
- 可编程死区时 间
- 自动 关闭 和自动重启
• 主同步串行 口 (Master Synchronous Serial Port,
MSSP)模块,支 持 3 线 SPI (所有 4 种模式 )和
2
I
C™ 主 / 从模 式
• 增强型 USART 模块 :
- 支持 RS-485、 RS-232 和 LIN 1.2
- 使用内部振荡 器模块 的 RS-232 工作 模式 (无
需外部晶振)
- 检测到 起始 位自动唤醒
- 自动波 特率检测
功耗 管理模 式:
• 运行:CPU 工作, 外设打开
• 空闲:CPU 不工作, 外设打开
• 休眠:CPU 不工作, 外设关闭
• 空闲模式时 电流可 降至 5.8 µA (典型 值)
• 休眠模式时 电流可 降至 0.1 µA (典型 值)
• Timer1振荡器: 1.8 µA, 32 kHz, 2V
• 看门狗定时器: 2.1 µA
• 双速振荡器 启动
灵活的 振荡器结构:
• 4 种晶振模式, 频率最高 为 25 MHz
• 4 倍频锁 相环(Phase Lock Loop, PLL)( 可用于
晶振和内部 振荡器)
• 两种外部 RC 模 式, 频率最高为 4 MHz
• 两种外部时 钟模式, 频率最高为 25 MHz
• 内部振荡 器模块 :
-8个可由用 户选择的 频率, 从 31 kHz 到 8MHz
- 当与 PLL 结合使用时可提供较宽 的时钟频率 范
围 , 从 31 kHz 到 32 MHz
- 用户 可对该电路进行调节 以补 偿频率漂移
• 辅助振荡器使用 Timer1 ( 工作频率 为 32 kHz)
• 故障保护时钟监 视器:
- 当外部时 钟停止工作时自 动切 换到内部 振荡器
单片机特性:
• 优化的 C 编 译器架 构:
- 为优化 可重入 代码而设计 的可选 的扩展指令集
• 可进行100,000次擦写操作的增强型闪存 程序 存储 器
(典型 值)
• 可进行 1,000,000 次擦写操 作的数据 EEPROM 存 储
器 (典 型值)
• 闪存 / 数据 EEPROM 保存时间 : 100 年(典型值)
• 可在软件 控制 下自编程
• 中断优先 级
• 8 x 8 单周期硬 件乘 法器
• 扩展型 看门狗定时器 (Watchdog Timer, WDT ):
- 可编程周期从 4ms到 131s
• 通过两个引脚 进行单 电源在 线串行编程 ( In-Circuit
Serial Programming™, ICSP™)
• 通过两个引脚 进行在 线调试 ( In-Circuit Debug,
ICD)
• 工作电压 范围 :2.0V 到 5.5V
• 可编程 16 级高 / 低压检测 (High/Low-Voltage
Detection, HLVD)模块:
- 支持 高 / 低压检测 中断
• 可编程欠压复 位 (Brown-out Reset, BOR):
- 带软件使能 选项
程序 存储 器 数据存 储 器
器件
PIC18F2423 16K 8192 768 256 25 10 2/0
PIC18F2523 32K 16384 1536 256 25 10 2/0
PIC18F4423 16K 8192 768 256 36 13 1/1
PIC18F4523 32K 16384 1536 256 36 13 1/1
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 1 页
闪存
(字节)单 字 指令 数
SRAM
(字节)
EEPROM
(字节)
I/O
12 位
A/D
(通道)
CCP/
ECCP
( PWM)
MSSP
主控
SPI
2
C™
I
有有
有有
有有
有有
比较 器
EUSART
121 / 3
121 / 3
121 / 3
121 / 3
8/16 位
定时器
PIC18F2423/2523/4423/4523
引脚示意 图
28 引脚 PDIP 和 SOIC
28 引脚 QFN
RA2/AN2/V
RA5/AN4/SS
(1)
MCLR/VPP /RE3
RA0/AN0
RA1/AN1
REF-/CV REF
RA3/AN3/VREF +
RA4/T0CKI/C1OUT
/HLVDIN/C2OUT
OSC1/CLKI
OSC2/CLKO
RC0/T1OSO/T13CKI
RC1/T1OSI/CCP2
RC3/SCK/SCL
V
(3)
/RA7
(3)
/RA6
RC2/CCP1
PIC18F2523
RB7/KBI3/PGD
28
27
26
25
24
23
22
21
20
19
18
17
16
15
RB6/KBI2/PGC
RB5/KBI1/PGM
RB4KBI0/AN11
RB7/KBI3/PGD
RB6//KBI2/PGC
RB5/KBI1/PGM
RB4/KBI0/AN11
RB3/AN9/CCP2
RB2/INT2/AN8
RB1/INT1/AN10
RB0/INT0/FLT0/AN12
V
DD
VSS
RC7/RX/DT
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
(2)
1
2
3
4
5
6
7
SS
(2)
8
9
10
11
12
13
14
RA1/AN1
RA0/AN0
PIC18F2423
/VPP /RE3
MCLR
RA2/AN2/VREF -/CVREF
RA5/AN4/SS
RA4/T0CKI/C1OUT
/HLVDIN/C2OUT
OSC1/CLKI
OSC2/CLKO
RA3/AN3/VREF +
V
(3)
/RA7
(3)
/RA6
23 24 25 26 27 28
1
2
3
PIC18F2423
4
SS
PIC18F2523
5
6
7
8
9
(2)
RC1/T1OSI/CCP2
RC0/T1OSO/T13CKI
1011
RC2/CCP1
1213 14
RC3/SCK/SCL
RC5/SDO
RC6/TX/CK
RC4/SDI/SDA
21
20
19
18
17
16
15
RB3/AN9/CCP2
RB2/INT2/AN8
RB1/INT1/AN10
RB0/INT0/FLT0/AN12
V
DD
VSS
RC7/RX/DT
(2)
22
注 1: 建议将 QFN 封装 器件 底 部的 焊垫连 接到 VSS 。
2: RB3 是与 CCP2 复 用的备 用引脚。
3: OSC1/CLKI 和 OSC2/CLKO 仅在某 些振荡 器模 式下,并且 这两个引脚不用作数 字 I/O 引脚时才 可用。更多
信息,请参 见第 2.0 节 “振荡器 配置 ” 。
DS39755A_CN 第 2 页 初稿 2007 Microchip Technology Inc.
引脚示意图(续)
40 引脚 PDIP
PIC18F2423/2523/4423/4523
44 引脚 TQFP
RA2/AN2/V
RA4/T0CKI/C1OUT
RA5/AN4/SS
OSC2/CLKO
RC0/T1OSO/T13CKI
RC1/T1OSI/CCP2
MCLR/VPP /RE3
RA0/AN0
RA1/AN1
REF-/CV REF
RA3/AN3/VREF +
/HLVDIN/C2OUT
RE0/RD
RE1/WR
RE2/CS
OSC1/CLKI
(2)
(2)
RC2/CCP1/P1A
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
/AN5
/AN6
/AN7
V
DD
VSS
/RA7
/RA6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RC6/TX/CK
RC5/SDO
15
16
17
18
19
20
RC4/SDI/SDA
RD3/PSP3
(1)
RD2/PSP2
RD1/PSP1
RD0/PSP0
PIC18F4423
RC3/SCK/SCL
40
39
38
37
36
35
34
33
32
31
30
29
PIC18F4523
28
27
26
25
24
23
22
21
(1)
NC
RC2/CCP1/P1A
RC1/T1OSI/CCP2
RB7/KBI3/PGD
RB6/KBI2/PGC
RB5/KBI1/PGM
RB4/KBI0/AN11
RB3/AN9/CCP2
RB2/INT2/AN8
RB1/INT1/AN10
RB0/INT0/FLT0/AN12
DD
V
VSS
RD7/PSP7/P1D
RD6/PSP6/P1C
RD5/PSP5/P1B
RD4/PSP4
RC7/RX/DT
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
RD3/PSP3
RD2/PSP2
(1)
15
RB5/KBI1/PGM
38
39
1819202122
16
17
/VPP /RE3
RB7/KBI3/PGD
RB6/KBI2/PGC
MCLR
363435
37
33
32
31
30
29
28
27
26
25
24
23
RA1/AN1
RA0/AN0
REF-/CV REF
RA3/AN3/VREF +
RA2/AN2/V
NC
RC0/T1OSO/T13CKI
OSC2/CLKO
OSC1/CLKI
SS
V
VDD
RE2/CS/AN7
RE1/WR
RE0/RD
RA5/AN4/SS
RA4/T0CKI/C1OUT
(2)
/RA6
(2)
/RA7
/AN6
/AN5
/HLVDIN/C2OUT
RC7/RX/DT
RD4/PSP4
RD5/PSP5/P1B
RD6/PSP6/P1C
RD7/PSP7/P1D
RB0/INT0/FLT0/AN12
RB1/INT1/AN10
RB2/INT2/AN8
RB3/AN9/CCP2
V
VDD
4443424140
1
2
3
4
PIC18F4423
SS
(1)
5
6
7
8
9
10
11
121314
NC
PIC18F4523
NC
RB4/KBI0/AN11
注 1: RB3 是与 CCP2 复 用的 备 用引脚。
2: OSC1/CLKI 和 OSC2/CLKO 仅在某 些振荡 器模 式下,并且 这两个引脚不用作数 字 I/O 引脚时才 可用。更多
信息,请参 见第 2.0 节 “振荡器 配置 ” 。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 3 页
PIC18F2423/2523/4423/4523
引脚示意 图(续)
44 引脚 QFN
(1)
RC7/RX/DT
RD4/PSP4
RD5/PSP5/P1B
RD6/PSP6/P1C
RD7/PSP7/P1D
RB0/INT0/FLT0/AN12
RB1/INT1/AN10
RB2/INT2/AN8
V
VDD
VDD
(2)
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
RD3/PSP3
RD2/PSP2
RD1/PSP1
RD0/PSP0
RC3/SCK/SCL
RC2/CCP1/P1A
RC1/T1OSI/CCP2
RC0/T1OSO/T13CKI
15
16
RB6/KBI2/PGC
RB5/KBI1/PGM
38
39
37
1819202122
17
RA0/AN0
/VPP /RE3
RB7/KBI3/PGD
MCLR
363435
RA1/AN1
33
32
31
30
29
28
27
26
25
24
23
REF+
REF-/CV REF
RA3/AN3/V
RA2/AN2/V
OSC2/CLKO
OSC1/CLKI
SS
V
VSS
VDD
VDD
RE2/CS/AN7
RE1/WR
RE0/RD
RA5/AN4/SS
RA4/T0CKI/C1OUT
(3)
/RA6
(3)
/RA7
/AN6
/AN5
/HLVDIN/C2OUT
4443424140
1
2
3
4
5
SS
6
7
8
9
10
11
121314
(2)
RB3/AN9/CCP2
PIC18F4423
PIC18F4523
NC
RB4/KBI0/AN11
注 1: 建议将 QFN 封装 器件 底 部的 焊垫连接到 VSS 。
2: RB 3 是与 CCP2 复 用的备 用引脚。
3: OSC1/CLKI 和 OSC2/CLKO 仅在某 些振荡 器模 式下,并且 这两个 引脚不用作数字 I/O 引脚时才 可用。更多
信息,请参 见第 2.0 节“振荡器配置”。
DS39755A_CN 第 4 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
目录
1.0 器件概 述 .......................................................................................................................................................................................7
2.0 振荡器配置 ................................................................................................................................................................................. 23
3.0 功耗 管理模 式 ..............................................................................................................................................................................33
4.0 复位 ............................................................................................................................................................................................ 41
5.0 存储 器构成 ................................................................................................................................................................................. 53
6.0 闪存程序 存储 器 .......................................................................................................................................................................... 73
7.0 数据 EEPROM 存储 器 ................................................................................................................................................................ 83
8.0 8 x 8 硬件 乘法器......................................................................................................................................................................... 89
9.0 中断 ............................................................................................................................................................................................ 91
10.0 I/O 端口 .................................................................................................................................................................................... 105
11.0 Timer0 模块 .............................................................................................................................................................................. 123
12.0 Timer1 模块 .............................................................................................................................................................................. 127
13.0 Timer2 模块 .............................................................................................................................................................................. 133
14.0 Timer3 模块 .............................................................................................................................................................................. 135
15.0 捕捉 / 比较 /PWM ( CCP)模块 ............................................................................................................................................... 139
16.0 增强型捕捉 / 比较 /PWM ( ECCP)模块 ................................................................................................................................. 147
17.0 主同步串行 口 ( MSSP)模块 .................................................................................................................................................. 161
18.0 增强型通 用同步 / 异 步收 发器 ( EUSART)..............................................................................................................................205
19.0 12 位模 数转换 器 ( A/D)模块 .................................................................................................................................................. 227
20.0 比较器 模块 ...............................................................................................................................................................................237
21.0 比较器参考电压模块 ................................................................................................................................................................. 243
22.0 高 / 低压检测 ( HLVD)............................................................................................................................................................ 247
23.0 CPU 的特殊 功能 ....................................................................................................................................................................... 253
24.0 指令集汇 总 ...............................................................................................................................................................................271
25.0 开发 支持 ................................................................................................................................................................................... 321
26.0 电气特性 ...................................................................................................................................................................................325
27.0 直流和 交流特性 图 表 .................................................................................................................................................................363
28.0 封装信息 ...................................................................................................................................................................................365
附录 A:版 本 历史 ........................................................................................................................................................................ 373
附录 B:器 件 差 异 ........................................................................................................................................................................ 373
附录 C:转换注意事 项 .................................................................................................................................................................374
附录 D: 从低 档器件移 植到增强型器件 ........................................................................................................................................ 374
附录 E: 从 中档器件移 植到增强型器件 ........................................................................................................................................ 375
附录 F: 从高 档器件移 植到增强型器件 ........................................................................................................................................ 375
索引 ............................................................................................................................................ ...................................................... 377
Microchip 网站 .................................................................................................................................................................................... 387
变更 通知 客户服务 ..............................................................................................................................................................................387
客户支持............................................................................................................................................................................................. 387
读者 反 馈表 ......................................................................................................................................................................................... 388
PIC18F2423/2523/4423/4523 产品标识体系 ..................................................................................................................................... 389
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 5 页
PIC18F2423/2523/4423/4523
致客户
我们旨 在提供 最佳文档供客户正确使用 Microchip 产品。为此, 我们将不断改进出版物的内容和质量,使之更好地 满足您的要 求。
出版物的质量将随 新文档及更新版本的推出而得到 提升。
如果您对本出版物有任何问题 和建议,请通过电子邮件联 系我 公司 TRC 经 理,电 子邮 件地址为 CTRC@microchip.com ,或将本
数据手册后附的 《读者 反馈表 》 传真到 86-21-5407 5066 。我们期 待 您的反馈。
最 新数据手册
欲获 得本数据手册的最新版本,请 查询 我公司的 网站 :
http://www.microchip.com
查 看数据手册中任意一页下 边角 处的文 献 编号 即 可确定其版本。文献 编号 中数 字串 后的 字母 是版本 号,例如:DS30000A 是 DS30000
的 A 版本。
勘误表
现有器件可能 带有一份勘误表, 描述了 实际运行与数据手册中记 载内容之 间存在的 细微差 异以及建议的变通 方法。一 旦我们了解 到
器件 / 文档存在 某些差 异时, 就 会发 布勘误表。 勘误表上 将注明其所适用的 硅片版本和文件版本。
欲了解 某一器件是 否存在 勘误表,请通过 以下方式之一 查询:
• Microchip 网站 http://www.microchip.com
• 当地 Microchip 销售办 事 处(见最后一页 )
在 联络 销 售办 事 处时,请 说 明您所使用的器件型 号、 硅 片版本和数据手册版本 (包括文 献编号)。
客户通知 系统
欲 及时 获 知 Microchip 产品的 最 新信息,请 到我 公司 网站 www.microchip.com 上 注册。
DS39755A_CN 第 6 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
1.0 器件概 述
本文档涉 及以下器件的具体 信息:
• PIC18F2423
• PIC18F2523
• PIC18F4423
• PIC18F4523
该系列具 备所有 PIC18 单片机 固 有的 优 点,即以 实惠 的
价格提供出 色的计 算性能,以及高 耐用性的增强型闪存
程序 存储 器。 除 了这些 优 点之 外 , PIC18F2423/2523/
4423/4523 系列还增强了器件 设计,使得 该系列单片机
成为许 多高性能以及功 耗敏感应用的明 智 选择。
1.1 新的内核 特性
1.1.1 纳瓦技术
PIC18F2423/2523/4423/4523 系列的所有器件 具有一
系列能显著 降低工作时的功 耗的功能。主要包含以下几
项:
• 备用运行模 式: 通过将 Timer1 或内部振荡 器 模块
作为单片机时钟源 ,可使代码执行 时的功耗降低大
约 90%。
• 多种空闲模式:单片机还 可在其 CPU 内核禁止 而
外设仍然工作的情况下工作。 处于这些状态 时,功
耗能 降得更 低,只 有 正常工作时的 4% 。
• 动态 模 式切换 :在器件工作期间 可由用 户 代码 调
用功耗 管理模 式,允 许用户 将节 能的理念融入到 他
们的应用软 件设计 中。
• 关键模块低 功 耗 : Timer1 和看门狗 定时器 模块 的
功耗需求 可降至最小 。具体 数值 请参见 第 26.0 节
“电 气特性 ” 。
1.1.2 多个振荡器 选项和特性
PIC18F2423/2523/4423/4523 系列的所有器件可提供
10个不同的 振荡器 选项,使用户 在开 发应用硬 件时有很
大的选择 范围 。这些选项 包括:
•4种晶振模式,使用 晶振或陶瓷谐 振器。
• 两种外部时 钟模式,提供使用 两个引脚 (振荡器
输入引脚和四 分 频时 钟输出引脚 )或一 个引脚
(振荡器 输入引脚,四 分 频时 输出引脚 重新分配 为
通用 I/O 引脚 )的 选项。
• 两种外部 RC 振荡器模 式,具 有与外 部时钟模 式相
同的引脚选项 。
• 一个 内部 振荡 器 模块,它提供一个 8MHz的时钟源
和一个 INTRC 时钟源 (近似 值为 31 kHz ),并有
6 种时 钟频率可供用 户选择 (从 125 kHz 到
4MHz),总共 8 种 时钟频率 。此选项 可以空 出两
个振荡 器引脚作为额外的 通 用 I/O 引脚。
• 一个锁 相环(PLL)倍频器,可在高速晶振 和内部
振荡器模式下使用,使来自 HS 时 钟源的时 钟速度
最高达到 40 MHz。 PLL 和内部 振荡器配 合使用,
可以 向用户提供 频率 范 围从 31 kHz 到 32 MHz 的时
钟速度 选择,而且不需要使用 外部 晶振或时 钟电
路。
除 了可用作时钟源外 ,内部 振荡 器 模块 还 提供了一个 稳
定的参考源 ,为此系列 器件增加了以下功能以使器件更
可靠 地工作:
• 故障保护时钟监 视器:该 部件持续监 视主时钟源 ,
将其与内部振荡 器提供的参考信号 作比较 。如果时
钟 发生了故 障,单片机会将时钟源 切换到 内部振荡
器模块 ,使器件可继续 工作或安全地关闭 应用。
• 双速启动: 该 功能允 许在 上电复 位或 从休眠模 式 唤
醒时将内部 振荡器用作时 钟源,直 到主时 钟源可用
为 止。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 7 页
PIC18F2423/2523/4423/4523
1.2 其他特殊 功能
• 12 位 A/D 转换器 : 该模块具备可 编程 采 集 时 间 ,
从而不必 在 选择通道和 启动转 换之 间等待一 个采 样
周期,因而减少 了代码 开销。
• 存储 器 耐 用性: 程序存储 器和数据 EEPROM 的增
强型闪存单元经 评测 ,可以耐受 数万次擦写 ,程序
存储 器高达 100,000 次 , EEPROM 高达
1,000,000 次。在不刷 新的情况下,数据保存时 间
保守 地估计 在 40 年 以上 。
• 自编程 能 力 :这些器件能在内部 软 件 控制 下 写入 各
自的程序 存储 器空间 。通过 使用受 保护的引导 区
( 位于程序 存储 器的顶端 ) 中的自举 程序 ,可创 建
能在现场进行 自我 更新的应用程序 。
• 扩展指令集: PIC18F2423/2523/4423/4523 系列
在 PIC18 指令集 的基础上进行 了可选择 的扩展 ,
添 加了 8 条 新指令 和 变 址寻址 模式。此扩展 可以
使用一个 器件配置选项 使能,它是为优化 可重入 应
用程序 代码而特别设计 的,这些代码原来 是使用高
级语言 ( 如 C 语言)开 发的。
• 增强型 CCP 模块 :在 PWM 模 式下, 该模块提供用
于控制半桥 或全桥驱动 器的 1 、 2 或 4 路调制输
出。其他功能包括自动 关闭 ,用于在中断 或其他条
件下禁止 PWM 输 出; 自动重启 ,一旦条 件清除 后
重 新激 活输 出。
• 增强型可寻址 USART : 该串行通信 模块 可 进行 标
准的 RS-232 通 信并支 持 LIN 总线 协议。其他增强
功能包括自动波 特率检测 和分辨率 更高 的 16 位波
特率 发生器。当 单片机使用内部振荡 器模块 时,
EUSART 为与外界 对 话 的应用提供 稳 定的 通 信方
式,而无需 使用外 部晶振也无需额 外 的功耗 。
• 扩展型看门狗 定时器 ( WDT ):该增强型版本增
加了一个 16 位预 分频 器,可以提供在工作电压 和
温度 变化时保持 稳 定的扩展 超 时范围。 超 时周期的
具体数 值请参见 第 26.0 节“电气特性”。
1.3 系列中各 成 员的详细说明
PIC18F2423/2523/4423/4523 系列器件 具有 28 引脚和
40/44 引脚封装 形式。图 1-1 和图 1-2 分别 为这两 类器
件的框图 。
这两 类器件在以下五个 方面存在差异 :
1. 闪存程序 存储 器 ( PIC18F2423/4423 器件为
16 KB, PIC18F2523/4523 器件为 32 KB)。
2. A/D 通道 ( 28 引脚器件有 10 路, 40/44 引脚
器件有 13 路)。
3. I/O 端口 ( 28 引脚器件有 3 个双向端口, 40/44
引脚器件有 5 个双向端 口 )。
4. CCP和增强型 CCP 实现( 28 引脚器 件有 2 个
标准 的 CCP 模块 , 40/44 引脚器件有 1 个 标准
的 CCP 模块 和 1 个 ECCP 模块)。
5. 并行从动端 口 ( 仅存在于 40/44 引脚器件)。
本系列 器件的所有其他功能都 是相同的。表 1-1 总结 了
这些功能。
表 1-2 和 表 1-3 给 出了本系列 中所有器件的引脚 说 明。
PIC18F2423/2523/4423/4523 系列器件仅提供 低压器
件,用 “LF” 表 示 ( 如 PIC18LF 2423 ),其工作电压
VDD 范围 为 2.0V 到 3.6V。
DS39755A_CN 第 8 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 1-1: 器件特性
特性
工作频率
程序存 储器 (字节数 )
程序存 储器 (指令数 )
数据存储 器 (字节 数)
数据 EEPROM 存储 器 (字节 数)
中断源
I/O 端口 端 口 A, B, C, (E) 端口 A, B, C, (E) 端口 A, B, C, D, E 端口 A, B, C, D, E
定时器
捕捉 / 比较 /PWM 模块
增强型 捕捉 / 比较 /PWM 模块
串行通信 MSSP 和增强型 USART MSSP 和增强型 USART MSSP 和增强型 USART MSSP 和增强型 USART
并 行通 信 (PSP)无 无 有有
12 位模 数转换模块 10 路输入通道 10 路输入通道 13 路输入通道 13 路输入通道
复 位 ( 和延 时 ) POR 、 BOR 、
可编程高 / 低压检测 有有有有
可编程欠压复 位 有有有有
指令集 75 条 指令;使能了扩展指
封装 28 引脚 PDIP
PIC18F2423 PIC18F2523 PIC18F4423 PIC18F4523
DC – 40 MHz DC – 40 MHz DC – 40 MHz DC – 40 MHz
16384 32768 16384 32768
8192 16384 8192 16384
768 1536 768 1536
256 256 256 256
19 19 20 20
4444
2211
0011
RESET 指令、
堆栈满 、堆栈
下溢 (PWRT 和 OST )、
( 可 选) 和 WDT
MCLR
令集 后总共为 83 条指令
28 引脚 SOIC
28 引脚 QFN
POR、 BOR、
RESET 指令、
堆栈满 、堆栈
下溢 (PWRT 和 OST )、
MCLR (可 选)和 WDT
75条指令 ;使能了扩展指
令集 后总共为 83 条指令
28 引脚 PDIP
28 引脚 SOIC
28 引脚 QFN
POR、 BOR、
RESET 指令、
堆栈满 、堆栈
下溢 (PWRT 和 OST )、
MCLR (可 选)和 WDT
75 条指令 ;使能了扩展指
令集 后总共为 83 条指令
40 引脚 PDIP
44 引脚 QFN
44 引脚 TQFP
下 溢 (PWRT 和 OST)、
MCLR (可 选)和 WDT
75 条指令 ;使能了扩展指
令集 后总共为 83 条指令
POR、 BOR、
RESET 指令、
堆栈满、 堆栈
40 引脚 PDIP
44 引脚 QFN
44 引脚 TQFP
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 9 页
PIC18F2423/2523/4423/4523
图 1-1 : PIC18F2423/2523 ( 28 引脚 ) 框图
表指针 <21>
递增 / 递减逻辑
21
地 址锁 存器
程序存储器
(16/32KB )
数据 锁存器
指令总线 <16>
(3)
OSC1
(3)
OSC2
T1OSI
T1OSO
(2)
MCLR
V
VDD ,
SS
20
8
内部
振荡器
模块
INTRC
振荡器
8 MHz
振荡 器
单电源
编程
在 线
调试器
PCLATH
PCLATU
PCU
程序计数器
31 级堆栈
STKPTR
表锁存器
ROM 锁存器
IR
指令
译码与
控制
数据 总线 <8>
8
PCH PCL
状态机
控制信 号
上电延时
定时器
振荡 器
起振 定时器
上电
复位
看门狗
定时器
欠压
复位
故障保护
时 钟监视器
8
数据锁 存器
数据存储器
(3.9KB )
地 址锁存器
12
数据地 址 <12>
BSR
4
FSR0
FSR1
FSR2
递增/ 递
减逻辑
地址
译码
12
4
快 速操 作
存储 区
12
PORTA
PORTB
RA0/AN0
RA1/AN1
RA2/AN2/VREF -/CVREF
RA3/AN3/VREF +
RA4/T0CKI/C1OUT
RA5/AN4/SS
OSC2/CLKO
OSC1/CLKI
/HLVDIN/C2OUT
(3)
/RA6
(3)
/RA7
RB0/INT0/FLT0/AN12
RB1/INT1/AN10
RB2/INT2/AN8
RB3/AN9/CCP2
(1)
RB4/KBI0/AN11
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD
8
PRODL PRODH
BITOP
3
8
8 x 8 乘法器
W
8
PORTC
8
8
RC0/T1OSO/T13CKI
RC1/T1OSI/CCP2
(1)
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
8
8
RC6/TX/CK
RC7/RX/DT
ALU<8>
8
高精度
带隙
参考 源
PORTE
MCLR/VPP /RE3
(2)
BOR
HLVD
数据
EEPROM
CCP1
CCP2
MSSP
Timer2 Timer1 Timer3 Timer0
EUSART比较器
12 位
ADC
注 1: 当配置 位 CCP2MX 置 1 时, CCP2 与 RC1 复 用; 而 当 CCP2MX 清零时, CCP2 与 RB3 复 用。
2: 只有在 禁止 MCLR
3: OSC1/CLKI 和 OSC2/CLKO 仅在某 些振荡 器模 式下,并且 这两个 引脚不用作数字 I/O 引脚时才 可用。
更多 信息,请参见 第 2.0 节 “振荡器配置 ”。
功能时, RE3 才 可用。
DS39755A_CN 第 10 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
图 1-2 : PIC18F4423/4523 ( 40/44 引脚 ) 框图
表指针 <21>
递增 / 递减逻辑
21
地 址锁 存器
程序存储器
(16/32KB )
数据 锁存器
指令总线 <16>
20
8
PCLATH
PCLATU
PCU
程序计数器
31 级堆栈
STKPTR
表锁存器
ROM 锁存器
IR
指令
译码与
控制
数据 总线 <8>
8
PCH PCL
状态机
控制信号
PORTA
8
数据锁 存器
数据存储器
(3.9KB )
地 址锁存器
12
4
BSR
数据地 址 <12>
12
快速操 作
FSR0
存储 区
FSR1
FSR2
递增/ 递
减逻辑
地址
译码
4
12
PORTB
PORTC
RA0/AN0
RA1/AN1
RA2/AN2/VREF -/CVREF
RA3/AN3/VREF +
RA4/T0CKI/C1OUT
RA5/AN4/SS
OSC2/CLKO
OSC1/CLKI
/HLVDIN/C2OUT
(3)
/RA6
(3)
/RA7
RB0/INT0/FLT0/AN12
RB1/INT1/AN10
RB2/INT2/AN8
RB3/AN9/CCP2
(1)
RB4/KBI0/AN11
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD
RC0/T1OSO/T13CKI
RC1/T1OSI/CCP2
(1)
RC2/CCP1/P1A
RC3/SCK/SCL
RC4/SDI/SDA
8
RC5/SDO
RC6/TX/CK
RC7/RX/DT
PRODL PRODH
OSC1
OSC2
T1OSI
T1OSO
MCLR
VDD ,
V
BOR
HLVD
8 x 8 乘法器
3
8
带隙
W
8
ALU<8>
8
8
12 位
ADC
BITOP
(3)
(3)
(2)
SS
内部
振荡器
模块
INTRC
振荡器
8 MHz
振荡 器
单电源
编程
在 线
调试器
数据
EEPROM
ECCP1
CCP2
上电 延时
定时器
振荡 器
起振 定时器
上电
复位
看门狗
定时器
欠压
复位
故障保护
时 钟监视器
MSSP
高精度
参考 源
Timer2 Timer1 Timer3 Timer0
EUSART比较器
8
8
8
PORTD
PORTE
注 1: 当配置位 CCP2MX 置 1 时, CCP2 与 RC1 复 用; 而 当 CCP2MX 清零 时, CCP2 与 RB3 复 用。
2: 只有在 禁止 MCLR
功能时, RE3 才 可用。
3 : OSC1/CLKI 和 OSC2/CLKO 仅在某些振荡 器 模 式下,并 且 这两个 引脚不用作数 字 I/O 引脚时才 可用。
更多 信息,请参见 第 2.0 节“振荡器配置”。
RD0/PSP0
:RD4/PSP4
RD5/PSP5/P1B
RD6/PSP6/P1C
RD7/PSP7/P1D
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
MCLR/VPP /RE3
(2)
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 11 页
PIC18F2423/2523/4423/4523
表 1-2 : PIC18F2423/2523 引脚 说 明
引脚号
引脚名称
/VPP /RE3
MCLR
MCLR
VPP
RE3
OSC1/CLKI/RA7
OSC1
CLKI
RA7
OSC2/CLKO/RA6
OSC2
CLKO
RA6
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
注 1: 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认 引脚分配 。
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
PDIP,
SOIC
12 6
96
10 7
QFN
引脚类型缓冲器
类型
I
ST
P
I
ST
I
ST
I
CMOS
I/O
TTL
O
—
O
—
I/O
TTL
说 明
主复 位 (输入) 或编程电压 (输入)。
主复 位输入 。此引脚为低电平 时,器件复 位。
编程电压输入 。
数字输入 。
振荡器 晶振或 外部时 钟输入。
振荡器 晶振或 外部时 钟源输入。
在 RC 模式下 带 ST 缓冲器, 否则 带 CMOS 缓冲器。
外部时 钟源输入。 总是与 OSC1 引脚功能 复用。
(见相关的 OSC1/CLKI 和 OSC2/CLKO 引脚信息。)
通用 I/O 引脚。
振荡器 晶振或时 钟输出。
振荡器 晶振输出。在 晶振模式下, 该引脚与 晶振或谐 振器相
连。
在 RC 模 式下, OSC2 引脚 输 出 CLKO 信 号 , 该 信 号 是
OSC1引脚上信号的4分 频,该频 率 等于指令周期 的倒数。
通 用 I/O 引脚。
DS39755A_CN 第 12 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 1-2 : PIC18F2423/2523 引脚 说 明 (续)
引脚号
引脚名称
RA0/AN0
RA0
AN0
RA1/AN1
RA1
AN1
RA2/AN2/V
RA2
AN2
VREF CV
RA3/AN3/V
RA3
AN3
V
RA4/T0CKI/C1OUT
RA4
T0CKI
C1OUT
RA5/AN4/SS
C2OUT
RA5
AN4
SS
HLVDIN
C2OUT
RA6
RA7
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
注 1 : 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认引脚分配。
REF-/CV REF
REF
REF+
REF+
/HLVDIN/
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
PDIP,
SOIC
22 7
32 8
41
52
63
74
QFN
引脚类型缓冲器
类型
I/OITTL
模拟
I/OITTL
模拟
I/O
TTL
I
模拟
I
模拟
O
模拟
I/O
TTL
I
模拟
I
模拟
I/O
ST
I
ST
O
—
I/O
TTL
I
模拟
I
TTL
I
模拟
O
—
说明
PORTA 是双向 I/O 端口。
数字 I/O 。
模拟输入 0。
数字 I/O 。
模拟输入 1。
数字 I/O 。
模拟输入 2。
A/D 参考电压 (低电压)输入 。
比较 器参考电压输 出。
数字 I/O 。
模拟输入 3。
A/D 参考电压 (高电压)输入 。
数 字 I/O 。
Timer0 外部时 钟输入。
比较 器 1 的 输 出。
数字 I/O 。
模拟输入 4。
SPI 从动选择输入。
高 / 低压检测输入。
比较器 2 的 输出。
请参见 OSC2/CLKO/RA6 引脚信息。
请参见 OSC1/CLKI/RA7 引脚信息。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 13 页
PIC18F2423/2523/4423/4523
表 1-2 : PIC18F2423/2523 引脚 说 明 (续)
引脚号
引脚名称
RB0/INT0/FLT0/AN12
RB0
INT0
FLT0
AN12
RB1/INT1/AN10
RB1
INT1
AN10
RB2/INT2/AN8
RB2
INT2
AN8
RB3/AN9/CCP2
RB3
AN9
(1)
CCP2
RB4/KBI0/AN11
RB4
KBI0
AN11
RB5/KBI1/PGM
RB5
KBI1
PGM
RB6/KBI2/PGC
RB6
KBI2
PGC
RB7/KBI3/PGD
RB7
KBI3
PGD
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
注 1: 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认 引脚分配 。
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
PDIP,
SOIC
21 18
22 19
23 20
24 21
25 22
26 23
27 24
28 25
QFN
引脚类型缓冲器
类型
I/O
TTL
I
ST
I
ST
I
模拟
I/O
TTL
I
ST
I
模拟
I/O
TTL
I
ST
I
模拟
I/O
TTL
I
模拟
I/O
ST
I/O
TTL
I
TTL
I
模拟
I/O
TTL
I
TTL
I/O
ST
I/O
TTL
I
TTL
I/O
ST
I/O
TTL
I
TTL
I/O
ST
说明
PORTB 是双向 I/O 端口。 PORTB 在所有输入端 都 可 软 件 编程
为内部弱上拉 。
数字 I/O 。
外 部中 断 0。
CCP1 的 PWM 故障 输入。
模拟输入 12 。
数字 I/O 。
外部中 断 1。
模拟输入 10 。
数 字 I/O 。
外部中 断 2。
模拟输入 8。
数 字 I/O 。
模拟输入 9。
捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。
数 字 I/O 。
电平变化中 断引脚。
模拟输入 11 。
数 字 I/O 。
电平变化中 断引脚。
低电压 ICSP™ 编程使能引脚。
数 字 I/O 。
电平变化中 断引脚。
在线调试 器和 ICSP 编程 时钟 引脚。
数字 I/O 。
电平变化 中断 引脚。
在线调试 器和 ICSP 编程 数据引脚。
DS39755A_CN 第 14 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 1-2 : PIC18F2423/2523 引脚 说 明 (续)
引脚号
引脚名称
RC0/T1OSO/T13CKI
RC0
T1OSO
T13CKI
RC1/T1OSI/CCP2
RC1
T1OSI
(2)
CCP2
RC2/CCP1
RC2
CCP1
RC3/SCK/SCL
RC3
SCK
SCL
RC4/SDI/SDA
RC4
SDI
SDA
RC5/SDO
RC5
SDO
RC6/TX/CK
RC6
TX
CK
RC7/RX/DT
RC7
RX
DT
RE3 — — — —
SS 8, 19 5, 16 P —
V
VDD 20 17 P —
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
注 1: 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认 引脚分 配。
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
PDIP,
SOIC
11 8
12 9
13 10
14 11
15 12
16 13
17 14
18 15
QFN
引脚类型缓冲器
类型
I/O
ST
O
—
I
ST
I/O
ST
I
模拟
I/O
ST
I/O
I/OSTST
I/O
ST
I/O
ST
I/O
ST
I/O
ST
I
ST
I/O
ST
I/OOST
—
I/O
ST
O
—
I/O
ST
I/O
ST
I
ST
I/O
ST
说明
PORTC 是双向 I/O 端口。
数字 I/O 。
Timer1 振荡器 输出。
Timer1/Timer3 外部时 钟输入。
数 字 I/O 。
Timer1 振荡器 输入。
捕捉 2 输入 / 比较 2 输 出 /PWM 2 输 出。
数字 I/O 。
捕捉 1 输入 / 比较 1 输 出 /PWM 1 输 出。
数字 I/O 。
SPI 模式的同 步串行时 钟输入 / 输出。
2
C™ 模式的同 步串行时 钟输入 / 输出。
I
数 字 I/O 。
SPI 数据输入 。
2
C 数据 I/O。
I
数 字 I/O 。
SPI 数据输 出。
数 字 I/O 。
EUSART 异步发 送。
EUSART 同步 时钟(见 RX/DT 引脚信息)。
数 字 I/O 。
EUSART 异步 接收。
EUSART 同步 数据 (见 TX/CK 引脚信息)。
请参 见 MCLR
逻辑和 I/O 引脚的参考地。
逻辑和 I/O 引脚的正电源 。
/VPP /RE3 引脚信息。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 15 页
PIC18F2423/2523/4423/4523
表 1-3 : PIC18F4423/4523 引脚 说 明
引脚名称
MCLR
/VPP /RE3
MCLR
VPP
RE3
OSC1/CLKI/RA7
OSC1
CLKI
RA7
OSC2/CLKO/RA6
OSC2
CLKO
RA6
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
注 1: 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认 引脚分配 。
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
引脚号
PDIP QFN TQFP
11 81 8
13 32 30
14 33 31
引脚类型缓冲器
类型
I
ST
P
I
ST
I
ST
I
CMOS
I/O
TTL
O
—
O
—
I/O
TTL
说 明
主复 位 (输入) 或编程电压 (输入)。
主复位输入。此引脚为低电平时,器件 复位。
编程电压输入 。
数字输入 。
振荡器 晶振或 外部时 钟输入。
振荡器 晶振或外部时 钟源 输入 。
在 RC 模式下 带 ST 缓冲器, 否则 为 模拟。
外部时钟源输入。总是与 OSC1 引脚功能 复用。
(见相关的 OSC1/CLKI 和 OSC2/CLKO 引脚信息。)
通用 I/O 引脚。
振荡器 晶振或时 钟输出。
振荡器 晶振输出。在 晶振模式下, 该引脚与 晶振或
谐 振器相连 。
在 RC 模 式下, OSC2 引脚输 出 CLKO 信号 ,该 信号
是 OSC1 引脚上 信号 的 4 分频 ,该频率 等 于指令周期
的倒 数。
通 用 I/O 引脚。
DS39755A_CN 第 16 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 1-3 : PIC18F4423/4523 引脚 说 明 (续)
引脚名称
RA0/AN0
RA0
AN0
RA1/AN1
RA1
AN1
RA2/AN2/V
RA3/AN3/V
RA4/T0CKI/C1OUT
RA5/AN4/SS
C2OUT
RA6
RA7
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
注 1 : 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认引脚分配。
REF-/CV REF
RA2
AN2
VREF -
REF
CV
REF+
RA3
AN3
REF+
V
RA4
T0CKI
C1OUT
/HLVDIN/
RA5
AN4
SS
HLVDIN
C2OUT
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
2 : 当配置位 CCP2MX 清零 时,对 CCP2 使用 备 用引脚分配 。
引脚号
PDIP QFN TQFP
21 91 9
32 02 0
42 12 1
52 22 2
62 32 3
72 42 4
引脚类型缓冲器
类型
I/OITTL
模拟
I/OITTL
模拟
I/O
TTL
I
模拟
I
模拟
O
模拟
I/O
TTL
I
模拟
I
模拟
I/O
I/O
ST
I
ST
O
—
TTL
I
模拟
I
TTL
I
模拟
O
—
说明
PORTA 是双向 I/O 端口。
数字 I/O 。
模拟输入 0。
数字 I/O 。
模拟输入 1。
数字 I/O 。
模拟输入 2。
A/D 参考电压 (低电压)输入 。
比较 器参考电压输 出。
数字 I/O 。
模拟输入 3。
A/D 参考电压 (高电压)输入 。
数 字 I/O 。
Timer0 外部时 钟输入。
比较 器 1 的 输 出。
数字 I/O 。
模拟输入 4。
SPI 从动选择输入。
高 / 低压检测输入。
比较器 2 的 输出。
请参见 OSC2/CLKO/RA6 引脚信息。
请参见 OSC1/CLKI/RA7 引脚信息。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 17 页
PIC18F2423/2523/4423/4523
表 1-3 : PIC18F4423/4523 引脚 说 明 (续)
引脚名称
RB0/INT0/FLT0/AN12
RB0
INT0
FLT0
AN12
RB1/INT1/AN10
RB1
INT1
AN10
RB2/INT2/AN8
RB2
INT2
AN8
RB3/AN9/CCP2
RB3
AN9
(1)
CCP2
RB4/KBI0/AN11
RB4
KBI0
AN11
RB5/KBI1/PGM
RB5
KBI1
PGM
RB6/KBI2/PGC
RB6
KBI2
PGC
RB7/KBI3/PGD
RB7
KBI3
PGD
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
注 1: 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认 引脚分配 。
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
引脚号
PDIP QFN TQFP
33 9 8
34 10 9
35 11 10
36 12 11
37 14 14
38 15 15
39 16 16
40 17 17
引脚类型缓冲器
类型
I/O
TTL
I
ST
I
ST
I
模拟
I/O
TTL
I
ST
I
模拟
I/O
TTL
I
ST
I
模拟
I/O
TTL
I
模拟
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
ST
TTL
I
TTL
I
模拟
TTL
I
TTL
ST
TTL
I
TTL
ST
TTL
I
TTL
ST
说明
PORTB 是双向 I/O 端口。 PORTB 在所有输入端 都 可
软件 编程为内部弱 上拉。
数 字 I/O 。
外部中 断 0。
增强型 CCP1 的 PWM 故障 输入。
模拟输入 12 。
数 字 I/O 。
外部中 断 1。
模拟输入 10 。
数 字 I/O 。
外部中 断 2。
模拟输入 8。
数 字 I/O 。
模拟输入 9。
捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。
数 字 I/O 。
电平变化中 断引脚。
模拟输入 11 。
数 字 I/O 。
电平变化中 断引脚。
低电压 ICSP™ 编程使能引脚。
数 字 I/O 。
电平变化中 断引脚。
在线调试 器和 ICSP 编程 时钟 引脚。
数字 I/O 。
电平变化 中断 引脚。
在线调试 器和 ICSP 编程 数据引脚。
DS39755A_CN 第 18 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 1-3 : PIC18F4423/4523 引脚 说 明 (续)
引脚名称
RC0/T1OSO/T13CKI
RC0
T1OSO
T13CKI
RC1/T1OSI/CCP2
RC1
T1OSI
(2)
CCP2
RC2/CCP1/P1A
RC2
CCP1
P1A
RC3/SCK/SCL
RC3
SCK
SCL
RC4/SDI/SDA
RC4
SDI
SDA
RC5/SDO
RC5
SDO
RC6/TX/CK
RC6
TX
CK
RC7/RX/DT
RC7
RX
DT
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
注 1: 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认 引脚分 配。
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
引脚号
PDIP QFN TQFP
15 34 32
16 35 35
17 36 36
18 37 37
23 42 42
24 43 43
25 44 44
26 1 1
引脚类型缓冲器
类型
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/OOST
I/O
I/O
I/O
I/O
ST
O
—
I
ST
ST
I
CMOS
ST
ST
ST
O
—
ST
ST
ST
ST
I
ST
ST
—
ST
O
—
ST
ST
I
ST
ST
说明
PORTC 是双向 I/O 端口。
数字 I/O 。
Timer1 振荡器 输出。
Timer1/Timer3 外部时 钟输入。
数 字 I/O 。
Timer1 振荡器 输入。
捕捉 2 输入 / 比较 2 输 出 /PWM 2 输 出。
数字 I/O 。
捕捉 1 输入 / 比较 1 输 出 /PWM 1 输 出。
增强型 CCP1 输 出。
数字 I/O 。
SPI 模式的同 步串行时 钟输入 / 输出。
2
C™ 模式的同 步串行时 钟输入 / 输出。
I
数 字 I/O 。
SPI 数据输入 。
2
C 数据 I/O。
I
数 字 I/O 。
SPI 数据输 出。
数 字 I/O 。
EUSART 异步发 送。
EUSART 同步 时钟(见 RX/DT 引脚信息)。
数 字 I/O 。
EUSART 异步 接收。
EUSART 同步 数据 (见 TX/CK 引脚信息)。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 19 页
PIC18F2423/2523/4423/4523
表 1-3 : PIC18F4423/4523 引脚 说 明 (续)
引脚名称
RD0/PSP0
RD0
PSP0
RD1/PSP1
RD1
PSP1
RD2/PSP2
RD2
PSP2
RD3/PSP3
RD3
PSP3
RD4/PSP4
RD4
PSP4
RD5/PSP5/P1B
RD5
PSP5
P1B
RD6/PSP6/P1C
RD6
PSP6
P1C
RD7/PSP7/P1D
RD7
PSP7
P1D
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
注 1: 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认 引脚分配 。
2: 当配置位 CCP2MX 清零时,对 CCP2 使用 备用引脚分 配。
引脚号
PDIP QFN TQFP
19 38 38
20 39 39
21 40 40
22 41 41
27 2 2
28 3 3
29 4 4
30 5 5
引脚类型缓冲器
类型
I/O
I/OSTTTL
I/O
I/OSTTTL
I/O
I/OSTTTL
I/O
I/OSTTTL
I/O
I/OSTTTL
I/O
I/O
I/O
I/O
I/O
I/O
ST
TTL
O
—
ST
TTL
O
—
ST
TTL
O
—
说明
PORTD 是双向 I/O 端口或与 微 处理器 端 口 接 口的并行
从动端口 (PSP )。当使能 PSP 模块时,这些引脚具
有 TTL 输入缓冲 器。
数字 I/O 。
并行从动端 口数据。
数字 I/O 。
并行从动端 口数据。
数字 I/O 。
并行从动端 口数据。
数字 I/O 。
并行从动端 口数据。
数字 I/O 。
并行从动端 口数据。
数字 I/O 。
并行从动端 口数据。
增强型 CCP1 输 出。
数字 I/O 。
并行从动端 口数据。
增强型 CCP1 输 出。
数字 I/O 。
并行从动端 口数据。
增强型 CCP1 输 出。
DS39755A_CN 第 20 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 1-3 : PIC18F4423/4523 引脚 说 明 (续)
引脚名称
RE0/RD
RE1/WR/AN6
RE2/CS/AN7
RE3 — — — — —
V
V
NC — 13 12, 13,
图 注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入 或 输 出
注 1 : 当配置位 CCP2MX 置 1 时,对 CCP2 使用 默 认引脚分配。
/AN5
RE0
RD
AN5
RE1
WR
AN6
RE2
CS
AN7
SS 12, 31 6, 30,
DD 11, 32 7, 8,
ST = CMOS 电平的施密 特触 发器 输入 I=输入
O=输出 P=电源
2 : 当配置位 CCP2MX 清零 时,对 CCP2 使用 备 用引脚分配 。
引脚号
PDIP QFN TQFP
82 52 5
92 62 6
10 27 27
6, 29 P —
31
7, 28 P —
28, 29
33, 34
引脚类型缓冲器
类型
I/O
I/O
I/O
——
ST
I
TTL
I
模拟
ST
I
TTL
I
模拟
ST
I
TTL
I
模拟
说明
PORTE 是双向 I/O 端口。
数字 I/O 。
并行从动 端口的读 控制 (见 WR
模拟输入 5。
数字 I/O 。
并行从动端 口的写控制 (见 CS
模拟输入 6。
数字 I/O 。
并行从动 端口的片选控制 (见 RD
模拟输入 7。
请参见 MCLR
逻辑和 I/O 引脚的参考地。
逻辑和 I/O 引脚的正电源 。
无连 接。
/V PP /RE3 引脚信息。
和 CS 引脚信息)。
和 RD 引脚信息)。
和 WR 引脚信息)。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 21 页
PIC18F2423/2523/4423/4523
注:
DS39755A_CN 第 22 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
2.0 振荡器配置
2.1 振荡器类型
PIC18F2423/2523/4423/4523 器件可以在 10 种不同的
振荡器模式下工作。 通过编程配置寄存器 1H 中的 配置
位 FOSC3:FOSC0 ,用 户可以 选择这 10 种模式中的一
种模式:
1. LP 低功 耗晶振模式
2. XT 晶振 / 谐 振器 模式
3. HS 高速晶振 / 谐 振器 模式
4. HSPLL 使能 PLL 的高速晶振 / 谐 振 器模 式
5. RC 外部 电阻 / 电容 振荡器 模式, 通过 RA6
引脚 输 出 F
6. RCIO 外部 电阻 / 电容 振荡器 模式, RA6 用作
I/O引脚
7. INTIO1 内部振荡 器模 式,通过 RA6 引脚输 出
OSC/4 信号 , RA7 用作 I/O 引脚
F
8. INTIO2 内部振荡 器模 式, RA6 和 RA7 均用作
I/O 引脚
9. EC 带 F
10. ECIO RA6 用作 I/O 引脚的外 部时钟模 式
2.2 晶振 / 陶瓷谐振器
在 XT 、LP 、HS 或 HSPLL 振荡 器模 式下, 晶振 或陶瓷谐
振 器与 OSC1 和 OSC2 引脚相 连来 产生 振荡 信 号 。图 2-1
显 示了引脚 连接方式。
振荡器的 设计要求 使用 平行切割 的 晶体。
OSC/4 信号
OSC/4 输出的 外部时 钟模式
图 2-1 : 晶振 / 陶瓷谐 振器工作原理
(XT 、LP、HS 或 HSPLL 配置)
(1)
C1
(1)
C2
注 1: 关于 C1 和 C2 的初 始值 ,请 参 见表2-1 和 表 2-2 。
2: 对于 AT 条 形切割 的晶体可能会 需要一 个串 联电
3: R
OSC1
XTAL
(2)
RS
OSC2
S)。
阻 (R
F 的值随 选 定的振荡 器模 式变化 。
(3)
RF
PIC18FXXXX
至
内部
逻辑
休眠
表 2-1 : 陶瓷谐 振器的电 容选择
使用的典 型电 容值 :
模 式 频率
XT 3.58 MHz 15 pF 15 pF
上 述电 容值 仅供设计 参考。
要达到 理想 的振荡 器工作 状 况,可能需 要不 同的 电 容
值。用 户应 当在应用要求 的 V
荡器的性能。
更 多信息,请参 见表 2-2 下方的 “注 ”。
OSC1 OSC2
DD 和温度 范围 内测试振
注: 使用顺序切 割的 晶体 ,可能会使振荡 器产
生的频率超出 晶体制造厂 商所给 出的参数
范围 。
注: 如果使用的谐振 器频率超 过 3.6 MHz ,建
议使用 HS 模 式而不使用 XT 模 式。 HS 模
式可以在单片机标称的任何 VDD 电压 下使
用。如果选 用 HS 模 式,则振荡器的增 益有
可能过驱 动谐 振 器。因此在 OSC2 引脚和
谐 振器之间 应串 联 一个电 阻 。建议先 尝 试
使用 330 Ω 的 R
S。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 23 页
PIC18F2423/2523/4423/4523
表 2-2 : 晶振的 电容 选择
振荡器
类型
晶振频率
LP 32 kHz 18 pF 18 pF
XT 1 MHz
4 MHz
HS 4 MHz
10 MHz
20 MHz
25 MHz
上述 电容 值仅供 设计参考。
已使用下面 列出的晶振在基 本的启动和运行过程中对
这些电 容值 作了测试 。这些值未经过优化 。
要达到 理想 的振荡 器工 作 状 况,可能需 要不同的电 容
值。用 户应 当在应用要求 的 V
荡器的性能。
更多 信息,请参见 本表 下方的 “ 注”。
使用的晶振 :
32 kHz 4 MHz
25 MHz 10 MHz
1 MHz 20 MHz
注 1 : 当工作电压 VDD 低于 3V ,或在任何电压
下使用频率高 于 3.6 MHz 的陶瓷谐振器
时,可能需 要使用 HS 振荡 器模 式或切换
到晶振模 式。
2 : 因为每种 谐 振 器 / 晶振都 有其自身特性,
用户 应当向谐 振 器 / 晶振制造 厂 商询问外
部元 件的适当值 。
3 : 可能需要使用 R
成过驱 动,例 如在 LP 模式下 常用的 晶振
或 Timer1 振荡 器。RS 也 可用于在其他模
式下降低晶振驱动 ,在这些模 式下,波形
失真可能 成为一 个问题。请参 见 AN949
“
Making Your Oscillator Work
4 : 请始终 在应用要 求 的 V
证振荡 器性 能。关 于 测试 方法,请参 见
AN949, “Making Your Oscillator
”
。
Work
已测试的 典型 电容 值:
C1 C2
15 pF
15 pF
15 pF
15 pF
15 pF
15 pF
DD 和温度 范围 内测试振
S 以避 免对音叉 式晶振造
DD和温度 范围 下验
15 pF
15 pF
15 pF
15 pF
15 pF
15 pF
”
。
,
如图 2-2 所示,在 HS 模 式下, OSC1 引脚也 可以连接
外部时 钟源。
图 2-2 : 外部时 钟输入工作原理
(HS 振荡器配置 )
来自 外部
系统的时 钟
开路
OSC1
OSC2
PIC18FXXXX
(HS 模式 )
2.3 外部时 钟输入
EC 和 ECIO 振荡器 模 式要求 OSC1 引脚与一个外部时
钟源相 连。在 上电复位后或 从休眠模式退 出后,不 需要
振荡器起 振时 间。
在 EC 振荡 器 模 式下,由 OSC2 引脚 输 出 振荡 器 频率 的
4 分频 信号 。此 信 号 可用于测试 或同步 其他逻辑 。图 2-3
显 示了 EC 振荡器 模 式的引脚 连 接 方式。
图 2-3 : 外部时 钟输入工作原理
(EC 配置 )
来自 外部
系统的时 钟
F
OSC/4
ECIO 振荡器 模式的工作方式类似于 EC 模式,不同之
处 在于 OSC2 引脚 变成 了一 个 额 外 的 通 用 I/O 引脚。 该
I/O 引脚成 为 PORTA 的 bit 6 ( RA6)。图 2-4 显 示了
ECIO 振荡器 模式下的引脚 连接方式。
图 2-4 : 外部时 钟输入工作原理
来自 外部
系统的时 钟
RA6
OSC1/CLKI
PIC18FXXXX
OSC2/CLKO
(ECIO 配置 )
OSC1/CLKI
PIC18FXXXX
I/O(OSC2)
DS39755A_CN 第 24 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
2.4 RC 振荡器
对于对时序 要求 不高 的应用,适当选择 RC 和 RCIO 器
件能更好 地节约 成 本。实际 的振荡 器频率 由以下几个 因
素决 定:
• 供电电压
• 外部 电阻 ( R
• 工作温度
给 定同样的器件、工作 电压和 温度 以及 元 件值, 振荡的
频率仍然会各不相同。这些 频率上的差异 是由以下因素
引起的:
• 正常生产工艺 的差异
• 不同封装 类型引线电 容的不同 (尤 其当 C
小 时)
EXT 和 C EXT 在容限范围 内的数值波动
•R
在 RC 振荡 器 模 式下,由 OSC2 引脚 输 出 振荡 器 频率 的
4 分频 信号。此信号 可用于测试 或同步 其他逻辑 。图 2-5
显 示了 外接 R/C 组合电路的 连 接 方式。
图 2-5 : RC 振荡器 模式
VDD
REXT
CEXT
VSS
建议: 5K ≤ R EXT ≤ 100 k Ω
EXT)和 电容 (C EXT)的 值
OSC1
PIC18FXXXX
OSC2/CLKO
OSC/4
F
EXT > 20 pF
C
EXT 值较
内部
时钟
2.5 PLL 倍频器
如果用户希望 使用低频振荡电路 或通过晶振 将器件频率
调节至其 最高额定 频率,可以 选择使用 锁相 环(PLL)
电路。对于担心高频晶振引起 EMI 或需要内部振荡器提
供 高速时 钟的用 户而 言 ,这 样做可能有用。
2.5.1 HSPLL 振荡器 模式
HSPLL模式使用 HS 模式 振荡器产生 最高 10 MHz 的频
率 。然后 PLL 将 振荡 器 输 出 频率 4 倍频 , 从而产生 最高
40 MHz 的内部时钟频率 。PLLEN位在此振荡 器模 式下
不可用。
仅当 将 FOSC3:FOSC0 配置 位编程 为 HSPLL 模 式
(= 0110 )时,晶振 才可以使用 PLL 。
图 2-7 : PLL 框 图(HS 模式 )
使能 HS 振荡器
使能 PLL
(来 自 配置寄存器 1H )
OSC2
OSC1
HS 模式
晶振
F
IN
FOUT
÷ 4
相位
比较器
环路
滤 波器
VCO
系统时 钟
MUX
RCIO 振荡器模 式(图 2-6)的工作方式类似于 RC 模 式,
不同之处 在于 OSC2 引脚变成 了一个额 外的通用 I/O 引
脚。该 I/O 引脚成为 PORTA 的 bit 6 (RA6 )。
图 2-6 : RCIO 振荡 器模 式
VDD
REXT
OSC1
CEXT
VSS
RA6
建议: 5K ≤ R EXT ≤ 100 k Ω
I/O(OSC2)
C
EXT > 20 pF
内部
时钟
PIC18FXXXX
2.5.2 PLL 和 INTOSC
当 INTOSC 配置为主时 钟源 时,内部振荡 器 模块也 可以
使用 PLL 。在 此 配置 下,用软 件使能 PLL 并产生最高 为
32 MHz 的时钟输 出。第 2.6.4 节“INTOSC 模式下的
PLL”描述了使用 PLL 的 INTOSC 的工作原理。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 25 页
PIC18F2423/2523/4423/4523
2.6 内部振荡 器模块
PIC18F2423/2523/4423/4523 器件含有可产生两种 不
同时钟 信号 的内部振荡 器模块 。这两种 信号 均可充当 单
片机的时钟源 ,从而无需在 OSC1 和 / 或 OSC2 引脚上
使用外 部振荡电路 。
主输 出(INTOSC ) 是一个 8MHz的时钟源 ,可以用于
直接驱 动器件时 钟 。它 还 可以 驱 动一 个 后分 频 器, 该 分
频器可提供 从 31 kHz 到 4MHz的时钟频率。当选择了
125 kHz 到 8MHz 的时钟频率 时,使能 INTOSC 输 出,
如果需 要,还 可提供 31 kHz 。
另 一个 时 钟源 是内部 RC 振荡 器 (INTRC ) ,它提供了
标称值 为 31 kHz 的输 出。如果选择 INTRC 作为器件的
时钟源 ,它就 会被 使能;当 使能以下任一功能时,也 将
自动 使能 INTRC :
• 上电延时定时器
• 故障保护时 钟监视器
• 看门狗定时器
第 23.0 节“CPU 的特殊 功能 ”将 详细讨论 以 上功能。
通过配置 OSCCON 寄存器 (第 30 页 )的 IRCF 位,可
以 选择时 钟源频率 (INTOSC 直接 频率 、 INTRC 直接
频率或 INTOSC 后分 频器 频率)。此 外,31 kHz时钟可
以由 INTOSC 或 INTRC 时钟源 提供,取决 于 INTSRC
位 (OSCTUNE<7> )。
2.6.1 INTIO 模式
使用内部振荡 器作为时钟源 可以不需 要使用两个外 部振
荡 器引脚,从 而可将它们用作数字 I/O 。目前 有两种 不
同的配置 :
• 在 INTIO1 模式下, OSC2 引脚输 出 F
OSC1 引脚充当 RA7,用于数字输入 和输 出。
• 在 INTIO2 模式下, OSC1 充当 RA7, OSC2 充当
RA6,两者 都 用于数字输入 和输 出。
2.6.2 INTOSC 输出 频率
出厂 时已校准 了内部振荡 器模块 使之能够 产生 8.0 MHz
的 INTOSC 输 出频率 。
INTRC 振荡器的工作独立于 INTOSC 时钟源 。 电压 和
温度变化导致的 INTOSC 变化并不一定会使 INTRC 变
化 , 反 之亦然。
OSC/4,而
2.6.3 OSCTUNE 寄存器
内部振荡 器的输出已在出厂前经过校准 ,但仍可以在用户
应用中调整 。这 是 通过写 OSCTUNE 寄 存器(寄存器 2-1 )
完成的。
当修 改了 OSCTUNE 寄 存器后,INTOSC 的频率将改变
为新的 频率。 INTOSC 时 钟会在 1ms内稳 定下 来。在
频率改变期间,代码会继 续执 行。不会有任何迹象表 明
时 钟频率发生了 改变。
OSCTUNE 寄存器也有 INTSRC 和 PLLEN 位,它们控
制内部 振荡器 模块的某 些功能。 当选择了 31 kHz 频率
后,用户 可通过 INTSRC 位选择 用作时钟源 的内部振荡
器。在第 2.7.1 节 “振荡器控制寄存器 ” 中对此进行 了
更详细 的说 明。
在内部振荡 器模 式下, PLLEN 位控制 PLL 倍频 器的工
作。
2.6.4 INTOSC 模式下的 PLL
内部振荡 器模块 可以通过 使用 4x 倍频 器来 产生比 一般
内部振荡 器所能产生的时钟速度更快 的器件时钟速度。
当 使能时, PLL 最高 可产生 32 MHz 的时 钟速 度。
与 HSPLL 模 式不同,PLL 由软 件控制 。控制位 PLLEN
( OSCTUNE<6> ) 用来 使能或禁 止 其工作。
在以下情况下, PLL 可以与 INTOSC 配 合使用:
1. 主时钟 为 INTOSC 时钟源(在 CONFIG1H<3:0>
中选取 ),以及
2. 选择 4 或 8 MHz INTOSC 输 出。
只 有当上 述 两个 条 件都 满足 时, 才 能写入 PLLEN 位。
2.6.5 INTOSC 频率漂移
出 厂 时将内部 振荡 器 模块 的 输 出 (INTOSC) 校准 为
8MHz。但是,此频率 可能会随着 V
变而发生 漂移,这一点可能会以各 种方式影响 控制器的
运行。通过修改 OSCTUNE 寄 存器的值可以调节
INTOSC 的频率 。这不会对 INTRC 时钟源 的 频率造成
影响。
调节 INTOSC 时 钟源需 要了解何时调节 、调节 的方向
以及在某 些情况下的调整 量。 第 2.6.5.1 节“用
EUSART 进行补偿”、第 2.6.5.2 节“ 用定时器 进行补
偿” 和第 2.6.5.3 节“在捕捉模 式下用 CCP 模块进行
补 偿” 讨论了三种补偿技术,但是也 可使用其他技术。
DD 电压或温度 的 改
DS39755A_CN 第 26 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
寄 存器 2-1: OSCTUNE: 振荡 器 调节 寄 存器
R/W-0 R/W-0
INTSRC PLLEN
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
(1)
(1)
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— TUN4 TUN3 TUN2 TUN1 TUN0
bit 7
bit 6
bit 5
bit 4-0
注 1 : 仅在某 些振荡 器配置 中可用; 其他情况下,此位不可用,并且读 为 0 。详细 信息,请参见 第 2.6.4 节
2.6.5.1 用 EUSART 进行补偿
当 EUSART 开始产生帧 错误 ,或者 在异 步模式下接收
数据有错误 时可能需 要进行调节 。帧 错误表 示器件时钟
的频率太 高; 要对此进行调节 ,可以减小 OSCTUNE 寄
存器中的值来降低 时钟频率 。另 一方面,数据中有错误
可能表 明时钟速度太 低 ; 要 进行补偿,可 以 增 大
OSCTUNE 寄存器中的值来 提高 时钟频率 。
2.6.5.2 用定时器进行补 偿
此技术是将器件时 钟的 速 度与 某 一 个 参考时 钟进行比
较。可能要用 到两个定时器; 一 个由 外设时 钟提供时 钟
源,而 另一 个由一 个固定的参考 源( 如 Timer1 振荡器 )
提供时 钟源。
两个定时器 都被清零,但由参考 源提供时 钟信 号的定时
器产生中 断。 当中 断发生时,使用内部时 钟源的定时器
值被读取且 两个定时器均被清零 。如果使用内部时 钟源
的定时器的 值大 于 期望 值 , 则表 示内部 振荡器 模块运行
过快。要对此进行调整,需减小 OSCTUNE 寄存器中的
值。
INTSRC : 内部振荡器 低频时 钟源选择位
1 = 来自 8MHz INTOSC时钟源 的 31.25 kHz 器件时钟(使能 256 分频)
0 = 直接来自 INTRC 内部 振荡器的 31 kHz 器件时 钟
PLLEN: INTOSC 的倍频 器 PLL 使能位
1 = 为 INTOSC 使能 PLL ( 仅 4MHz和 8MHz)
0 = 禁止 PLL
未 实现: 读 为 0
TUN4:TUN0:频率调节位
01111 = 最高频率
• •
• •
00001
00000 = 中心频率 。振荡 器模块运行 在校准频率上 。
11111
• •
• •
10000 = 最低频率
“INTOSC 模式下的 PLL ”。
(1)
2.6.5.3 在捕捉模式下用 CCP 模块进行补偿
CCP 模块可以使 用由 内部 振荡器 模块提供时 钟信 号的
独立 运行 Timer1 ( 或 Timer3 ) 和 已 知 周期 的 外 部事件
(即交 流电源频率)。在 CCPRxH:CCPRxL 寄存器中捕
捉并记录 第一 个事件的时 间以备 以后使用。 当第二 个事
件导致捕捉 时,要用第二个 事件的时间减去 第一个 事件
的时间。由于 外 部事件的周期 是已 知的,因此 可以计
算 事件之间 的时 间 差。
如果测 得的时间比计算 得到 的时间大很 多 ,则表 示内部
振荡 器 模块运行过 快; 要对此进行补 偿,需 减小
OSCTUNE 寄存器中的值 。如果 测 得的时 间比计 算 得到
的时间小 得多 ,则表 示内部振荡 器模块运行过慢 。需 增
大 OSCTUNE 寄 存器中的值来补 偿。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 27 页
PIC18F2423/2523/4423/4523
2.7 时钟源 与振荡 器切换
辅助振荡 器是指那 些不与 OSC1 或 OSC2 引脚 连接 的 外
部时钟源 。即 使在控制 器处 于功耗 管理模 式时这些时钟
与早期 的PIC18 器件一样 ,PIC18F2423/2523/4423/4523
系列 包含允 许将器件时 钟源从 主振荡 器切换到 备用 低频
时钟源 的功能。 PIC18F2423/2523/4423/4523 器件提供
了两个 备 用时 钟源 。当使能备用时钟源 时,可以使用多种
功耗 管理工作模 式。
基 本上 ,这些器件 都 有 3 种 时 钟源 :
• 主振荡 器
• 辅助振荡器
• 内部振荡 器模块
主 振荡器包括 外部 晶振和 谐振 器 模式、 外部 RC 模式、
外 部时钟模式和内部振荡器 模块。特定 的 模 式由
FOSC3:FOSC0 配置位定义。这些模 式的 详细 信息已
在本章前 面的内容中作过介绍 。
源仍 可继 续 工作。
PIC18F2423/2523/4423/4523 器件将 Timer1 振荡器作
为 辅助振荡器。此 振荡器 (在所有功 耗管理 模式中 )通
常是实 时时 钟等功能的时 基。
大 部分情况下,在 RC0/T1OSO/T13CKI 和 RC1/T1OSI
引脚之间接 有一个 32.768 kHz 的时钟晶振 。与 LP 模 式
振荡电路 类似,在每 个 引脚与地之间 均接 有负 载 电 容。
将在第 12.3 节“Timer1 振荡器”中详细讨论 Timer1
振荡 器。
除 了作为主时钟源之 外,内部 振荡器 模块 还 可以作为功
耗管理 模式的时 钟源。INTRC 源也可作为几 种特殊 功能
部件 (例 如 WDT 和 故障保护时 钟监视器 )的时 钟源。
图 2-8 显示了 PIC18F2423/2523/4423/4523 器件的时 钟
源。关于配置寄存器的详细 信息,请参见第 23.0 节
“CPU 的特 殊功能 ”。
图 2-8 : PIC18F2423/2523/4423/4523 时 钟框 图
PIC18F2423/2523/4423/4523
OSCCON<6:4>
8 MHz
4 MHz
2 MHz
1 MHz
500 kHz
后分频 器
250 kHz
125 kHz
31 kHz
1
0
OSCTUNE<7>
OSC2
OSC1
T1OSO
T1OSI
主振荡器
辅助振荡器
OSCCON<6:4>
休眠
T1OSCEN
使能
振荡 器
内部
振荡器
模块
8 MHz
时钟源
INTRC
时钟源
31 kHz(INTRC)
OSCTUNE<6>
8 MHz
( INTOSC)
4 x PLL
111
110
101
100
011
010
001
000
LP、XT、HS、RC和 EC
HSPLL 和 INTOSC/PLL
内部振荡 器
MUX
FOSC3:FOSC0
T1OSC
时 钟
控制
时 钟源选项
(供其他模块使用 )
WDT 、PWRT、FSCM
和双速启动
外设
MUX
CPU
IDLEN
OSCCON<1:0>
DS39755A_CN 第 28 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
2.7.1 振荡器 控制寄存器
OSCCON 寄存器 ( 寄存器 2-2)控制全功 耗模式和功
耗管理 模式下器件时 钟工作的 多个方面。
系统时 钟选择位 SCS1:SCS0 用于 选择时 钟源。可用的
时 钟源包括主时 钟(由 FOSC3:FOSC0 配置 位定 义)、
辅助时 钟(Timer1 振荡器)和内部 振荡器 模块。 当写
入一 个或 多个位之后,接着是一 段 很短的时 钟转 换间
隔 ,然后时钟源 会 立即 改变。在所有形式的复 位中 SCS
位都 会被清零 。
内部振荡 器频率选择 位(IRCF2:IRCF0 )选 择 内部振荡
器模块 的 输 出频率来 驱动 器件时钟 。这些频率可以是
INTRC 时钟源 的 频率 、 INTOSC时钟源 的 频率(8MHz)
或 INTOSC 后分频 器产生的频率 之一 (31.25 kHz 到
4MHz ) 。如果器件时钟 由内部振荡 器模块 提供,改变
这些位的状态 会使内部振荡 器输 出立即改变 。器件复 位
时,内部振荡 器模块 的默认输 出频率设置 为 1MHz。
当选 定了 31 kHz 的标称 输 出频率( IRCF2 :IRCF0 = 000 )
时,用户 可以选择 用作时钟源 的内部振荡器。这通过
OSCTUNE 寄存器中的 INTSRC 位(OSCT UNE< 7> )完
成。将 该位置 1 选择 INTOSC 作为时钟源,并 通过使能
INTOSC 后分频 器的 256 分频输 出,使该 时钟源输 出
31.25 kHz 的时钟信 号 。将 INTSRC 位清零选择 INTRC
(标称 值为 31 kHz )作为时 钟源,同时 禁 止 INTOSC 时
钟源。
此 选项使用 户能 选择可 调节且 更 精 确的 INTOSC 作为时
钟源,同时以 非常低的时 钟速度 运行以 节省功 耗。 无论
INTSRC 的设置 如何, INTRC 总是作为 看门狗 定时器和
故障保护时 钟监视器之类功能部件的时 钟源。
OSTS 、IOFS和 T1RUN 位指出 当前提供器件时 钟的是
哪 一个 时 钟源 。 OSTS 位 置 1 表 明 振荡 器起 振 定时器 已
超时 且主时钟 在主时钟模 式下作为器件时钟 。 IOFS 位
置 1 表明内部振荡 器模块已 稳定并在 RC 时钟模 式下提
供器件时 钟。 T1RUN 位(T1CON<6> ) 置 1 表 明 Timer1
振荡器 正在 辅助时 钟模式下提供器件时 钟。在功 耗管理
模式下,任何时候 这 3 个位中只 有一 个会置 1 。如果这
些位 都没 有 置 1 , 则表 示 当前 时 钟源 是 INTRC,或
INTOSC 刚刚起振且 尚未稳定。
IDLEN 位决 定当执 行 SLEEP 指令 时器件是进入休眠模
式还 是某个空闲模 式。
第 3.0 节“ 功耗 管理模 式”更详细 地讨论 了 OSCCON 寄
存器中标志 位和控制 位的使用。
注 1 : 要选择辅助 时钟源 ,必须使能 Timer1 振荡
器。通过 将 Timer1 控制 寄 存器中的
T1OSCEN 位 ( T1CON<3> )置 1,可以
使能 Timer1 振荡 器。如果未 使能 Timer1
振荡 器,则 选择辅助 时钟源 的任何尝 试都
会被 忽略 。
2 : 建议在Timer1 振荡器 稳 定工作之后 再选择
辅助时 钟,否则当 Timer1 振荡器起 振时可
能会发生 很长 的 延 时。
2.7.2 振荡器转 换
PIC18F2423/2523/4423/4523 器件包含了防止 在切换
时钟源 时发生时钟“毛刺”的电路 。在切换 时钟 时,器
件时钟 会有短暂 的停顿 。该停顿 的时间长度 是旧 时钟源
的两个周期 加上 新时钟源 的三到 四个周期 的和。此公式
假 设新时钟源 是稳 定的。
第 3.1.2 节“进入功耗管理模式”详细讨论了时钟 转换 。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 29 页
PIC18F2423/2523/4423/4523
寄 存器 2-2: OSCCON: 振荡 器 控制 寄 存器
R/W-0 R/W-1 R/W-0 R/W-0 R
IDLEN IRCF2 IRCF1 IRCF0 OSTS IOFS SCS1 SCS0
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
(1)
R-0 R/W-0 R/W-0
bit 7
bit 6-4
bit 3
bit 2
bit 1-0
注 1: 复位状态取决 于 IESO 配置 位的 状态 。
2: 时钟源 由 INTSRC 位 (OSCTUNE<7> )选择 ,请参见上 文。
3: 复位时 INTOSC 的默 认输出 频率。
IDLEN:空闲使能位
1 = 执行 SLEEP 指令后器件 进入空闲模式
0 = 执行 SLEEP 指令后器件 进入休眠模式
IRCF2:IRCF0:内部振荡 器频率选择 位
111 = 8 MHz (由 INTOSC 直接驱 动时 钟)
110 = 4 MHz
101 = 2 MHz
100 = 1 MHz
011 = 500 kHz
010 = 250 kHz
001 = 125 kHz
000 = 31 kHz (来自 INTOSC/256 或直接 来自 INTRC )
OSTS:振荡器起 振延时 状态位
1 = 振荡器起 振定时器延 时 已结束;主 振荡器 正在 运行
0 = 振荡器起 振定时器延 时 正在 进行;主 振荡器尚 未就绪
IOFS: INTOSC 频率稳定位
1 =INTOSC频率已稳定
0 =INTOSC频率尚 未稳定
SCS1:SCS0:系统时 钟选择位
1x = 内部振荡 器模块
01 = 辅助 (Timer1 )振荡器
00 = 主振荡 器
(3)
(1)
(2)
DS39755A_CN 第 30 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
2.8 功耗 管理模 式对各种 时钟源 的影响
当选定了 PRI_IDLE 模式后, 指定的主 振荡器会继 续运
行而不中 断。对于所有其他功 耗管理 模式,使用 OSC1
引脚的振荡 器会被禁止 。OSC1 引脚( 以及由振荡 器使
用的 OSC2 引脚) 将会停止振荡 。
在辅助 时钟模 式下(SEC_RUN 和SEC_IDLE ),Timer1
振荡器作为器件时 钟源工作。如果需要,Timer1 振荡器
也可以 运行在所有功 耗管理 模式下为 Timer1 或 Timer3
提供时钟 。
在内部振荡 器模 式下(RC_RUN 和 RC_IDLE ),由 内
部振荡 器模块提供器件时钟 。无论 是哪种 功耗 管理模
式,31 kHz 的 INTRC输出均可被直接 用来提供时钟并
且 可 被 使能来支持 多种特 殊 的功能部件 (关于 WDT 、
故障保护时钟监视器和双速启动的更 多信息,请参 见
第 23.2 节“看门狗定时 器 (WDT )” 、第 23.3 节“双
速启动”和第 23. 4 节“故障保护时钟监视器” ) 。
8MHz 的INTOSC 输 出可以 直接用于为器件提供时 钟 ,
或者也 可先 由后分频 器进行 分频再 用作器件 时钟 。如
果直接 由 INTRC 输 出提供时钟 ,则会禁止 INTOSC 输
出。
如果选择 了休眠模 式,所有的时钟源都 会被停止 。因为
休眠模 式消除 了所有 晶体 管的 开 关 电流 , 休眠模 式能实
现最 小的器件电流消 耗(仅泄漏电流)。
在 休眠期间使能任何片 上功能 都将增加 休眠时的 电流消
耗。要 支持 WDT 工作,需要使能 INTRC 。Timer1 振荡
器可以用来 为实 时时钟 提供时钟源 。不需 要器件时钟源
的其他功能部件也 可以工作(即,MSSP 从器件、PSP、
INTn 引脚等)。在第 26.2 节“直流特性:掉 电 和供 电
电流”中列出了可能显著 增加电流消 耗的外设。
2.9 上电延时
由两个 定时器控制上电延 时,这样大 多 数应用都无需外
接 复位 电路 。上电延时可以确保在器件 电源 稳定 (常 规
环境下 )和主时 钟稳定工作之 前器件保持在 复位状态 。
关于上电延 时的更多 信息,请参见 第 4.5 节“器件复 位
定时器”。
第一个 定时器是上电延 时定时器 (PWRT ),在上电 时
它提供了固 定的延迟 时间( 表 26-10 中的参数 33 )。通
过清零 (= 0 ) PWRTEN
第 二个 定时器是 振荡器起 振定时器 (OST ) ,用于在晶
振稳定 前使芯 片保持在 复位状态 (LP 、 XT 和 HS 模
式)。 OST 在计 数 1024 个振荡周期 后允 许振荡 器为器
件提供时钟 。
当选 定 HSPLL 振荡 器 模 式时,器件将在 HS 模 式下的
OST 延时之后 另外再保持 2ms的复 位状态 ,这样 可使
PLL 锁定为 输入时 钟频率。
POR 之后有一个 T
参数 38) ,在此 延时期间控制 器为 执 行指令做 好 了 准
备。此延时与其他延时同时发生。当将 EC 、RC或 INTIO
模 式之一用作主时 钟源 时,这可能是唯 一的 延时。
配置位可使能它。
CSD 间隔的延时 ( 表 26-10 中的
表 2-3 : 休眠模 式下 OSC1 和 OSC2 引脚的 状态
振荡器 模式 OSC1 引脚 OSC2 引脚
RC 和 INTIO1 悬空,应 经外部 电阻 上拉为 高电平 处于逻辑 低电平 (时 钟 4 分 频输出 )
RCIO
INTIO2
ECIO
EC
LP、 XT 和 HS 反馈 反相器被禁 止, 处于静 止电平 反馈 反相器被禁 止, 处于静 止电平
注: 关于由 休眠 和 MCLR
悬 空,应 经外 部 电 阻上拉 为 高电平 配置为 PORTA 的 bit 6
配置为 PORTA 的 bit 7 配置为 PORTA 的 bit 6
悬空, 连接 外部时 钟源 配置为 PORTA 的 bit 6
悬空, 连接 外部时 钟源 处于逻辑 低电平 (时 钟 4 分 频输出 )
复位引起的延 时,请参见 第 4.0 节“复位”中的表 4-2 。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 31 页
PIC18F2423/2523/4423/4523
注:
DS39755A_CN 第 32 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
3.0 功耗 管理模 式
PIC18F2423/2523/4423/4523 器件总共 提供 7种 工作 模
式,可以更高效 地进行 功耗 管理。这些工作模 式提供了
多种选择 ,可在资 源受 限的应用 ( 即, 电 池供 电 的 设
备)中 节省功 耗。
功 耗 管理 模 式有 三种 类 别:
• 运行模式
• 空闲模式
• 休眠模式
这些类 别定 义 了 需 要为器件的 哪 些部分提供时 钟 ,有时
还需要定义 时 钟的 速 度。运行 和空闲模 式可以使用 三种
时钟源 ( 主时钟源 、辅助 时钟源 或内部振荡 器)中的任
意一种; 而休眠模 式则 不使用时钟源 。
®
功耗 管理模 式包括几个 由早期 的 PIC
功耗 的功能。其中之一就 是其他 PIC18 器件也 提供的时
钟切 换功能, 该功能允 许使用 Timer1 振荡器代替主 振
荡器。节省功 耗的功能还 包括所有 PIC 器件 都提供的 休
眠模式,在 该模式下,器件所有的时 钟都停止。
3.1 选择功 耗 管理 模 式
选择功耗管理模式之 前需要 先做出 两个决定:是 否为
CPU 提供时钟源以及 选择 何 种时 钟源。 IDLEN 位
(OSCCON<7> )控制 是 否 为 CPU 提供时钟源,而
SCS1:SCS0 位 ( OSCCON<1:0> )选择时 钟源 。表 3-1
总结了各 个模式下的位 设置 、时 钟源和受 影响的 模块。
器件提供的 节省
3.1.1 时钟源
SCS1:SCS0 位允 许为功耗 管理模 式在三个 时钟源 中任
选 其一。它们是:
• 主时钟 ,由 FOSC3:FOSC0 配置位定义
• 辅助时 钟(Timer1 振荡器 )
• 内部振荡 器模块 ( 用于 RC 模式 )
3.1.2 进入功 耗管理 模式
可以 通过装载 OSCCON 寄 存器 从一 种 功 耗 管理 模式切
换到另一种功耗管理模式。SCS1:SCS0位选择要使用的
时 钟源。更 改这些位会 导致立即 切 换到一 个新的时 钟源
(假定新时钟源正在运行)。此切换可能会引起时钟转 换
延 时。第 3.1.3 节“时钟转 换和 状态指 示 ”及其后 续章
节将会讨论 这些 问题。
执 行SLEEP 指令 可以 触 发进入功 耗管理 空闲模式或 休眠
模式。最后实际 进入哪 个模式由 IDLEN 位的状态决 定。
更 改 功 耗 管理 模 式并不 总 是要 求设 置 所有的位,而是 取
决于 当前 的模 式和将要切换到 的 模 式。通过 在发 出
SLEEP 指令之 前 更 改振荡 器 选择 位或更 改 IDLEN 位可完
成多种模式转 换。如果 已经正确 配置了 IDLEN 位,可能
只需 执行 SLEEP 指令就 可 实现模式切 换。
表 3-1 :功耗管理 模式
模式
休眠
PRI_RUN N/A 00
SEC_RUN N/A 01
RC_RUN N/A 1x
PRI_IDLE 10 0
SEC_IDLE 10 1
RC_IDLE 11 x
注 1: 当执 行 SLEEP 时, IDLEN 的 值 得 到反 映。
2: 包含 INTOSC 和 INTOSC 后分频 器以及 INTRC 时钟源 。
IDLEN
OSCCON 位 模块 时钟
(1)
SCS1:SCS0<1:0> CPU
0 N/A
关闭 关闭无——所有时钟被禁 止
提供时钟 提供时钟 主时钟——LP 、 XT 、 HS 、 HSPLL 、 RC 、 EC
提供时钟 提供时钟辅 助 时钟——Timer1 振荡 器
提供时钟 提供时钟 内部振荡 器模块
关闭 提供时钟 主时钟——LP 、 XT 、 HS 、 HSPLL 、 RC 和
关闭 提供时钟辅 助 时钟——Timer1 振荡 器
关闭 提供时钟 内部振荡 器模块
外设
可用时 钟和 振荡器 源
(2)
(2)
(2)
。
和内部振荡 器模块
这是正常 的全功耗执 行模式。
EC
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 33 页
PIC18F2423/2523/4423/4523
3.1.3 时钟 转 换 和 状态 指 示
在两个 时钟源 之间进行 转换 所需 的时间长度 是旧 时钟源
的两个周期 与新时钟源 的三到 四个周期 的和。此公式假
设 新时钟源 是稳 定的。
以下三 位用于指 明当前 的时钟源 及其状态 。它们是:
•OSTS(OSCCON<3>)
•IOFS(OSCCON<2>)
• T1RUN ( T1CON<6>)
一 般来 说 ,在一 个给 定的功 耗 管理 模 式中,这 三个 位中
只有一个 位会 置 1。当 OSTS 位 置 1 时, 表明由主时钟
提供器件时钟 。当 IOFS 位置 1 时,表 明由 INTOSC 输
出提供稳 定的 8MHz的时钟源到 分频 器,实际上由分频
器驱动 器件时钟 。当 T1RUN 位置 1 时,表明由 Timer1
振荡 器提供时钟源 。如果这些位均不置 1 , 则表 明要 么
由 INTRC 时钟源 为器件提供时钟 信号 ,要 么 INTRC 时
钟源 尚 未 稳定。
如果用 FOSC3:FOSC0 配置 位将内部振荡 器模块配置
为主时钟源 ,则 在 PRI_RUN 或 PRI_IDLE 模 式中,
OSTS 和 IOFS 位可能同时置1 。这 表 示主时 钟(INTOSC
输出 )正 在产生稳 定的 8MHz输出。进入工作 频率相同
的另 一个 功耗 管理 RC 模 式将清零 OSTS 位。
注 1 : 在仅修改 IRCF 位时应该 特别小心 。如果
DD 电压小于 3V,可以 选择比低 V DD 电
V
压所能 支持的时钟速 度更 高的 速度。 违反
V DD /F OSC 规范会导致器件 运行不 正常
(见 图 26-1 和 图 26-2 )。
2 : 执行SLEEP 指令 并不一定会将器件 置 于休
眠模式。它只 是作为触 发条 件,让器件进
入休眠模式或一 种空闲模式, 具体何 种模
式由 IDLEN 位的 设置决 定。
3.1.4 多条 SLEEP 命令
使用 SLEEP 指令调 用功耗 管理模 式时,具体进入何种模
式由该指令执 行 时 IDLEN 位的设置决 定。如果执行 了另
一条 SLEEP 指令 ,器件将进入 由此时 IDLEN 位指 定的
功耗 管理模 式。如果 IDLEN 位已 更改 ,器件将进入 由新
的设置 指 定的新的功耗 管理模 式。进入 和退 出空闲模 式
不会影响 IDLEN 位的状态 。
3.2 运行模式
在运行模 式中,内核 和外设 的时钟都 是激活 的。这些运
行模 式之间 的区别 就 在于时钟源 的不同。
3.2.1 PRI_RUN 模式
PRI_RUN 模式是单片机的正常 全功 耗执 行模式。除 非
使能了 双速启动 (详细 信息,请参 见 第 23.3 节 “双速
启动”),该模式 也是器件 复位后的默 认模式。在此模式
下, OSTS 位 置 1 。如果内部 振荡 器 模块 为主时 钟源 ,
IOFS 位也 可能置 1 ( 见 第 2.7.1 节 “振荡器 控制寄存
器”)。
3.2.2 SEC_RUN 模式
SEC_RUN 模式与其他 PIC18 器件提供的“ 时钟 切换”
功能兼 容。在此模 式下,CPU 和外设 将 Timer1 振荡 器
作为时钟源 。这允 许用户 在使用高精度 时钟源 的情况下
仍可获 得 较低的功 耗。
通过将 SCS1:SCS0 位置 为 01 进入 SEC_RUN 模式。
器件时 钟源被 切 换到 Timer1 振荡 器 (见 图 3-1 ) ,主振
荡器被 关 闭, T1RUN 位 (T1CON<6> )被置 1 并 且
OSTS 位被清零 。
注: 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 振荡 器 继续运行。
DS39755A_CN 第 34 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
图 3-1: 进入 SEC_RUN 模 式的转 换 时 序
Q4 Q3 Q2
Q1
Q1
Q4 Q3 Q2 Q1 Q3 Q2
T1OSI
OSC1
CPU
时 钟
外设
时 钟
程序
计数器
注 1 :时钟 转 换通常 发生在 2-4 个 T
123 n - 1n
时钟 转换
OSC 内。
(1)
PC + 2 PC
图 3-2 : 从 SEC_RUN 模式切 换到 PRI_RUN 模式的转 换时 序(HSPLL)
T1OSI
OSC1
PLL 时钟
输出
CPU 时钟
外设
时 钟
程序
计数器
Q1 Q3 Q4
(1)
TOST
PC
Q3 Q4 Q1
Q2 Q2 Q3
(1)
TPLL
12 n-1n
时钟
(2)
转换
PC + 2
Q1
PC + 4
Q2
PC + 4
SCS1:SCS0 位改变
注 1: TOST = 1024 TOSC ; T PLL = 2 ms (近似 值) 。这些时间间隔 未 按 比 例绘 制 。
2:时钟 转换通常 发生在 2-4 个 T
OSC 内。
OSTS位置 1
3.2.3 RC_RUN 模式
在 RC_RUN 模式下,内部 振荡器 模块使用 INTOSC 多
路开关的 输出作为 CPU 和 外设的时 钟源。在 此 模式下,
主时钟 关闭 。在使用 INTRC 时钟源 时,此模 式是在代
码执行期间 所有运行模 式中最节省 功耗 的运行模 式。它
非常 适用于对时序 要求 不 高 或者 不是一 直 需 要高速 时钟
的应用。
如果主时钟源 为内部振荡 器模块(INTRC 或 INTOSC ),
在代码执 行期间 , PRI_RUN 和 RC_RUN 这两种模 式区
别 不大 。但是 在 进入 和 退 出 RC_RUN 模 式时会发生时 钟
切换延 时。因此,如果主时钟源 为内部振荡 器模块 ,建
议不要使用 RC_RUN 模 式。
通过 将 SCS1 位 置 1 可以 进入 此模 式。虽然 SCS0 位可
以被 忽略 ,但还 是建议将 SCS0 位清零 ,从 而保证与未
来器件的 软件兼 容性。当将时 钟源切 换到 INTOSC 多路
开关 (见 图 3-3 )时,主振荡器将被 关闭并且 OSTS 位
被清零。在任何时候 更改 IRCF 位可以 立即更改 时钟速
度。
注: 在仅 修改 IRCF 位时应 该 特 别小心 。如果
DD 电压小于 3V,可以选择比低 VDD 电压
V
所能支 持的时钟速度 更 高 的速 度。 违反
V DD /F OSC 规范会导致器件 运行不 正常(见
图 26-1 和 图 26-2 )。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 35 页
PIC18F2423/2523/4423/4523
如果 IRCF 位和 INTSRC 位均 被清零 ,将 禁止 INTOSC
输出并且 IOFS 位将保持清零; 不会有关于 当前时 钟源
的任何指 示。由 INTRC 时钟源 提供器件时钟 。
如果IRCF 位从 全清零状态 发生改变(因而使能INTOSC
输 出 ) ,或者 INTSRC 被置 1 ,在 INTOSC 输出稳 定后
IOFS 位将被置 1 。在一个 T
IOBST 间隔之后, INTOSC
时钟源趋 于稳 定,此时器件时钟继 续运行 。
如果之前 的 IRCF 为一个非零 值 ,或者 在设置 SCS1 之
前 INTSRC 已经 置 1 并 且 INTOSC 已达到 稳定, 那 么
IOFS 位将保持置 1 状态 。
图 3-3 : 到 RC_RUN 模式的转 换时 序
Q4 Q3 Q2
Q1
123 n - 1n
时钟 转换
INTRC
OSC1
CPU
时 钟
外设
时 钟
程序
计数器
Q1
在从 RC_RUN 模 式转换到 PRI_RUN 模 式期间 ,在主
时钟处 于启动状态 时,器件将继续 使用 INTOSC 多路开
关的输 出作为时钟源 。当 主时钟准备好 以后,时钟 切换
到 主时 钟( 见图 3-4 ) 。当时 钟 切 换完成 后,IOFS 位 被
清零,OSTS 位 被置 1 并 且由主时钟 提供器件时钟 。这
种 切换 不会影响 IDLEN 和 SCS 位。如果使能了 WDT
或故 障保护时钟监 视器, INTRC 时钟源 将继续运行 。
Q4 Q3 Q2 Q1 Q3 Q2
(1)
PC + 2 PC
PC + 4
注 1 :时钟 转 换通常 发生在 2-4 个 T
OSC 内。
图 3-4 : 从 RC_RUN 模式切 换到 PRI_RUN 模式的转 换时 序
Q1
Q4
Q1
INTOSC
复用器
OSC1
PLL 时钟
输出
CPU 时钟
外设
时 钟
程序
计数器
SCS1:SCS0 位改变
注 1 :TOST = 1024 T OSC ; T PLL = 2 ms (近似 值)。这些时间间隔 未按 比例绘 制 。
2 :时钟 转 换通常发生在 2-4 个 T
TOST
(1)
PC
OSC 内。
Q2
Q3
(1)
TPLL
OSTS 位置 1
12
时钟
转换
n-1 n
(2)
PC + 2
Q2
Q3 Q4
Q1
Q2
PC + 4
Q3
DS39755A_CN 第 36 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
3.3 休眠模式
PIC18F2423/2523/4423/4523 器件的功耗 管理 休眠模 式和
所有其他 PIC 器件提供的传 统休眠模 式相同 。通过清零
IDLEN 位(器件复 位时的默认状态)并执行 SLEEP 指令 即
可进入 此模式。这将关闭所选择 的振荡器(见图 3-5),并
将所有的时钟源状态 位清零 。
从 任何其他模 式进入休眠模 式不需 要切换 时钟 。这是因
为单片机一旦进入休眠模 式就 不需 要时钟 了。如果选择
了WDT ,INTRC时钟源 将继续 工作。如果使能了Timer1
振荡器,它 也将继 续运行。
当在 休眠模式中发生 唤醒事件时 (通过中 断、 复位或
WDT 超时),在 时 钟源(通过 SCS1:SCS0 位 选择) 准
备好之前 器件将没 有时钟源 ( 见图 3-6 ),或 者如果使
能了 双速启动或 故障保护时 钟监视器,它将使用内部 振
荡器 模块作为时 钟源 (见第 23.0 节“CPU 的特殊 功
能 ”)。在 这两种情况下,当由主时 钟 提供器件时 钟 时,
OSTS 位将置 1 。这 种唤醒不会 影响 IDLEN 和 SCS 位。
图 3-5 : 进入休眠模式的转 换时 序
Q4 Q3 Q2
Q1 Q1
OSC1
3.4 空闲模式
空闲模式允 许在 外设继 续 工作的同时关 闭单片机的
CPU 。选择 特定的 空闲模 式 允 许用 户进 一 步 管理功 耗 。
如果在执行 SLEEP 指令 时,IDLEN 位被置 为 1 ,外设将
使用由 SCS1:SCS0 位选择 的时钟源 ,而 CPU 没 有时钟
源。时钟源状态位不 受影响 。将 IDLEN 置1 并执行SLEEP
指令可以 从给 定的 运行模式快速 切 换到相应的 空闲模
式。
如果选择 了 WDT , INTRC 时钟源 将继续 工作。如果使
能了 Timer1 振荡 器,它也 将继续运行 。
由于 CPU 没 有执行指令 ,器 件 只 能通过 中断 、WDT 超
时或复 位从空闲模 式退 出。当发生唤醒事件时,CPU会
在其准备好执行 代码前延 时一个 T
中的参数 38 )。当 CPU 开始执 行 代码时,它将沿 用当
前空闲模 式所使用的时钟源 。例 如, 当从 RC_IDLE 模
式唤醒 时,将使用内部振荡 器模块 为 CPU 和外设 提供
时钟(即 RC_RUN 模式)。这种唤醒 不会影响 IDLEN
和 SCS 位。
当处于任何 空闲模式或 休眠模式中时, WDT 超时会导
致 WDT 唤醒并 进入当前由 SCS1:SCS0 位 指定的 运行
模式。
CSD 间隔 (表 26-10
CPU
时 钟
外设
时 钟
休眠
程序
计数器
PC + 2 PC
图 3-6 : 从休眠模式 唤醒的时 序转 换(HSPLL)
Q1 Q2 Q3 Q4 Q1 Q2
OSC1
PLL 时钟
输出
CPU 时钟
外设
时 钟
程序
计数器
注 1 : T
(1)
Tost
唤醒事件
OST = 1024 T OSC; T PLL = 2 ms (近似 值)。这些时间间隔 未按 比例绘 制 。
TPLL
PC
OSTS 位置 1
(1)
Q3 Q4 Q1 Q2
PC + 2
Q3 Q4
PC + 4
Q1 Q2 Q3 Q4
PC + 6
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 37 页
PIC18F2423/2523/4423/4523
3.4.1 PRI_IDLE 模式
在三种低 功耗空闲模 式中,只 有该模 式不会禁止 主器件
时钟 。由于时钟源 不需 要“热 身” 或是从 其他振荡 器转
换过来 , 选 用此 模 式可以使对时 间 要求 较高 的应用以 最
快的速 度恢复器件 运行并使用 较 精确的主时钟源 。
可以 通过 将 IDLEN 位 置 1 并 执行 SLEEP 指令 以 实现从
PRI_RUN 模式 进入 PRI_IDLE 模式。如果器件在另 一
种运行模 式,可以先 将 IDLEN 位 置 1 , 然 后 清零 SCS
位并执行 SLEEP 。虽然 CPU 已 被禁止 ,但外设仍继 续
使用由FOSC3:FOSC0 配置 位指 定的主时钟源 为其提供
时钟 信号 。 OSTS 位保持置 1 ( 见图 3-7 )。
当发生 唤醒事件时,由主时钟源为 CPU 提供时钟。在 唤
醒事件和代码执 行开始之 间需要一 个T
CSD间隔的延 时。
该 延时用 来 让 CPU 做 好执 行指令 的准备 。在 唤醒 之后,
OSTS 位保持置 1 状态 。这种唤醒不会影响 IDLEN 和
SCS 位 (见 图 3-8)。
图 3-7 : 进入空闲模式的转 换时 序
Q1
Q1
Q2
Q3
Q4
3.4.2 SEC_IDLE 模式
在 SEC_IDLE 模 式下, CPU 被禁 止 ,但 外设 继续 将
Timer1 振荡器作为时 钟源。可以 通过将 IDLEN 位置 1
并执行 SLEEP 指令从 SEC_RUN 模 式进入 此模 式。如
果器件处 于另 一种运行模 式,首先将 IDLEN 位置 1 ,然
后将 SCS1:SCS0 置 为 01 并执行 SLEEP 。当 时钟源 切
换到 Timer1 振荡 器时,主 振荡 器关 闭 , OSTS 位 被清
零并 且 T1RUN 位 置 1。
当唤醒事件发生时, 外设继 续将 Timer1 振荡器作为时
钟源。 唤醒事件发生后 经过一 个 T
开始执 行代码并使用 Timer1 振荡器作为其时 钟源。这
种唤醒不会影响 IDLEN 和 SCS 位。Timer1 振荡器继 续
运行 (见 图 3-8 )。
注: Timer1 振荡器应该在进入 SEC_IDLE模式
之前就已经运行 了。如果执行 SLEEP 指令
时T1OSCEN 位没 有置 1 ,就会忽略 SLEEP
指令 并不会进入 SEC_IDLE 模 式。如果使
能了 Timer1 振荡 器,但它尚未运行 ,外设
时钟 将会延 时直到该振荡器起振 。在这种
情况下,最初的振荡 器运行 很不稳定,可
能会导致无 法预料 的结 果。
CSD 时间间隔 , CPU
OSC1
CPU 时钟
外设
时 钟
程序
计数器
PC
图 3-8 : 从空闲模式 唤醒进入运行模式的转 换时 序
Q1 Q3 Q4
OSC1
CPU 时钟
外设
时 钟
程序
计数器
唤醒事件
TCSD
PC
PC + 2
Q2
DS39755A_CN 第 38 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
3.4.3 RC_IDLE 模式
RC_IDLE 模式禁 止 CPU,但仍继 续由使用 INTOSC 多
路开 关的内部振荡 器模块 为外设 提供时钟 。该模 式允 许
在空闲期间 对功耗进行控制 。
可以通过 将IDLEN 位置 1 并执行SLEEP 指令从RC_RUN
模式 进入此 模式。如果器件 处于另 一 种运行模式,可以
先将 IDLEN 位置 1 ,然 后再 将 SCS1 位置 1 并执 行
SLEEP 。虽然 SCS0 的 值常常被 忽 略 ,但 仍 建议将其 清
零,这将保证与未来 器件的 软件 兼容性。通过 在 执行
SLEEP 指令之前 修 改 IRCF 位可以使用 INTOSC 多路开
关来选择 更高 的时钟频率 。当时钟源切换到 INTOSC 多
路开 关时,主振荡 器被 关 闭 , OSTS 位 被清零 。
如果 IRCF 位被设 置 为任何非零 值 ,或 者 INTSRC 位被
置 1,就会使能 INTOSC 输出。在一 个 T
(表 26-10 中的参数 39 )之后 INTOSC 输出将趋 于稳
定, 随 后 IOFS 位 置 1 。 外设的时 钟 继 续运行 直 到
INTOSC 时钟源趋 于稳 定。如果之前 的 IRCF 位为一个
非 零值 或者在 执 行 SLEEP 指令 之 前 INTSRC 已 置 1,并
且当前 INTOSC 源已经 稳定,IOFS位将保持置 1 状态。
如果 IRCF 和 INTSRC 位全部 清零 , 就不会使能INTOSC
输出, IOFS 位将保持清零状态 ,此时将不会有 当前时
钟源的任何 指示。
当唤醒事件发生时,外设继 续将 INTOSC 多路开关作为
时钟源 。在唤醒 事件后的 T
用 INTOSC 多路开 关作为时钟源执 行 代码。这种唤醒 不
会影响 IDLEN 和 SCS 位。如果使能了 WDT 或故 障保
护时钟监 视器, INTRC 时钟源 将继续运行 。
CSD 间隔之后,CPU 开始使
IOBST 间隔
3.5 退出空闲 和 休眠模 式
由中断 、复 位或 WDT 超 时触 发从休眠模 式或任何空闲
模 式的退 出。本 节 将讨论 从 功耗 管理模 式退 出的 触 发方
式。在每种 功耗 管理模 式中我 们已经讨论 过 其时钟源子
系统的作用 (见第 3.2 节 “运行模式 ”、第 3.3 节“休
眠模式 ”和第 3.4 节 “空闲模式 ”)。
3.5.1 通过中断 退出
任何可用的中断源都 可导致 器件从空闲模 式或休眠模 式
退 出到运行模 式。要使能此功能, 必须将对应 INTCON
或 PIE 寄 存器中的中断源允 许位置 1 来 允 许中断源 。当
相应的中断 标志 位置 1 时,触 发退 出操 作。
当通过 中断从空闲 或休眠模 式退 出时,如果 GIE/GIEH
位 (INTCON<7> )置 1 ,程序就 会跳 转到 中断向 量处
执 行代码。 否则 代码就 会 顺 序 执 行或重 新开始 执 行,而
不跳 转 (见 第 9.0 节“中断”)。
唤醒 事件之后 需 要一 个 固定的 T
才会 退出休眠 和空闲模 式。CPU 需要此延时 来准备执行
代码。在 延时后的第一 个 时 钟周期重 新 开始执行指令 。
CSD 间隔的延 时,器件
3.5.2 通过 WDT 超时 退出
WDT 超时根 据 超时发生时器件所 处的不同功 耗管理 模
式会引发不同的操 作。
如果器件不在执行 代码 ( 所有空闲模 式和休眠模 式),超
时将导致从 功耗 管理模 式退出(见第 3.2 节“运行 模式”
和第 3.3 节“休眠模式”)。如 果器件正在执 行 代码(所
有运行模 式),超时将导致 WDT 复位(见第 23.2 节“ 看
门狗 定时器 ( WDT )”) 。
执 行 SLEEP 或 CLRWDT 指令 、 当前选择 的时 钟源失 效
(如果使能了 故障保护 监视器 )以及如果器件时钟源为
内部振荡 器模块 ,修改 OSCCON 寄存器中的 IRCF 位,
均将清零 WDT 定时器和后分频 器。
3.5.3 通过复位退 出
通常,器件 通过振荡器起 振定时器 (OST )保持在 复位
状态 ,直到主时钟就 绪。主 时 钟就 绪后,OSTS 位 置 1,
器件开始执 行 代码。如果以内部振荡 器模块 作为新的时
钟源,则 IOFS 位将置 1 。
从复位状态退 出 到开始执 行代码之 间的延迟 时 间由 唤醒
前后的时 钟源以及主时 钟振荡器的类型 (如果新的时 钟
源为主时 钟)决定。 表 3-2 总结了退 出延 时。
可以在主时 钟就绪 之 前开始执 行 代码。如果使能了 双速
启动 (见第 23.3 节 “双速启动”)或 故障保护时 钟监
视器(见 第 23.4 节“故障保护时钟监 视器”),器件可
以在复 位源被清除 之后马上开始执 行 代码。由内部振荡
器模块驱 动 的 INTOSC 多路开 关的输 出作为代码执行 的
时钟源 。执行 代码时,由内部振荡 器模块 提供时钟源直
到 主时钟就 绪;或者 在主时钟就 绪 前进入 功耗 管理 模
式,随 后将关闭 主时钟 。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 39 页
PIC18F2423/2523/4423/4523
3.5.4 在没 有 振荡器起 振延 时的情况下 退 出
从某些功 耗管理 模式退 出 完全不 需要 OST 延 时。有以
下 两种情形:
• 主时钟源 不停止 的 PRI_IDLE 模式
• 主时钟源 不是 LP、 XT、 HS或 HSPLL 中的任意一
在这些情况下,要 么 主时 钟源已经在 运行
(PRI_IDLE ) ,要么 它本来就不 需要 振荡器起 振延时
(RC 、 EC 和 INTIO 振荡器 模式 )。但是,当器件退 出
休眠和 空闲模式时,在 唤醒事件之后 仍然 需要一 个固定
CSD 间隔的延 时,以便让 CPU 准备好执行 代码。在
的 T
延 时后的第一个时 钟周期重新 开始 执 行指令。
种模式
表 3-2 : 通过复位 从休眠模式或任何 空闲模式 唤醒的 退 出 延 时 (按 时 钟源分类 )
唤醒之 前的时 钟源 唤醒之后的时 钟源 退出 延时
LP 、 XT 或 HS
主器件时钟
( PRI_IDLE 模 式 )
T1OSC 或 INTRC
INTOSC
(1)
(2)
无
(休眠模式 )
注 1 : 当从休眠模式和所有空闲模 式唤醒 时都需 要 T
第 3.4 节“空闲模式”)。复 位时, INTOSC 默认值 为 1 MHz 。
2: 包括 INTOSC 8 M Hz 时钟源 和后分频 器产生的频率 。
3: T
OST 是振荡 器起 振 定时器的 延迟 时 间(参数 32 )。 t
后者也 被 称为 T
4 : 在 INTOSC 稳 定 周期——T
PLL。
IOBST (参数 39 )延时 期间,代码继 续执 行。
HSPLL
EC 或 RC
INTOSC
(2)
LP、 XT 或 HS
EC 或 RC
INTOSC
(1)
LP、 XT 或 HS
EC 或 RC
INTOSC
(1)
LP、 XT 或 HS
EC 或 RC
INTOSC
(1)
(1)
CSD
T
(3)
OST
T
(3)
rc
(1)
CSD
T
(4)
TIOBST
(4)
OST
T
(3)
rc
(1)
CSD
T
无
(3)
OST
T
(3)
rc
(1)
CSD
T
(4)
TIOBST
CSD (参数 38 )延时, 该延时与所 需的其他 延时并 行(见
是 PLL 锁 定 延 时定时器的 延迟 时 间(参数 F12)。
rc
时 钟就绪状态 位
(OSCCON )
OSTS
IOFS
OSTS HSPLL TOST + t
IOFS
OSTS HSPLL TOST + t
IOFS
OSTS HSPLL TOST + t
IOFS
DS39755A_CN 第 40 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
4.0 复位
PIC18F2423/252 3/4423/4523 器件有以下几种 不同的 复
位方式:
a) 上电复位 ( POR)
b)正常工作状态 下的 MCLR
c) 功 耗管理 模式下的 MCLR 复位
d) 看门狗定时器 ( WDT)复位 (执 行程序期间)
e) 可 编程欠压复位 ( BOR)
f) RESET 指令
g) 堆栈满 复位
h) 堆栈下 溢 复位
本节 将讨论 由 MCLR
、 POR 和 BOR 产生的复 位,并
涉 及各种启动 定时器的工作方式。 堆栈复位事件将在
第 5.1.2.4 节“堆栈满和下溢复位”中 讨论。 WDT 复
位将在第 23.2 节“看门狗定时器 (WDT )” 中讨论 。
图 4-1 :片上复位电路 的简 化 框 图
RESET
指令
堆栈
指针
复位
堆栈满 / 下 溢 复位
外部 复位
图 4-1 给出了片 上复位 电路的简 化框 图。
4.1 RCON 寄存器
通过 RCON 寄 存器 (寄存器 4-1 )跟踪器件 复位事件。
该寄存器的 低5位表 明是否 已经发生了特定的 复位事件。
在 大多 数情况下, 只 能 通过事件将这些位 清零 ,而 且必
须 在事件发生后由应 用程序将它们 置 1。需要读取所有 这
些标志位来 确定刚发生的复 位的类型。在第 4.6 节“寄
存器的复位状态 ” 中对此进行了更详细 的说明。
RCON 寄存器中还 有设置中断优先级的控制 位 (IPEN)和
对 BOR 进行软 件控制 的控制 位(SBOREN)。在第 9.0 节
“中 断”中讨论了中断优先级。在 第 4.4 节“欠压复位
(BOR )”中讨论 了 BOR 。
Sleep
WDT
超时
DD 上升
欠压
复位
OST
PWRT
MCLRE
POR 脉冲
BOREN
1024 个周期
10 位异步计 数器
65.5 ms
11 位异步计 数器
MCLR
VDD
OSC1
注 1: 这是 来 自内部 振荡 器 模块 的 INTRC 时 钟源,它与 CLKI 引脚 上 的 RC 振荡 器 无 关。
2: 超时情况请参见表 4-2 。
( )_IDLE
V
沿检测
OST/PWRT
32 µs
(1)
INTRC
S
Chip_Reset
R
Q
使能 PWRT
使能 OST
(2)
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 41 页
PIC18F2423/2523/4423/4523
寄 存器 4-1: RCON: 复 位 控制 寄 存器
R/W-0 R/W-1
IPEN SBOREN
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
(1)
U-0 R/W-1 R-1 R-1 R/W-0
—R ITO PD POR BOR
(2)
R/W-0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
IPEN:中断优先 级使能位
1 = 使能中断优先 级
0 = 禁止中 断优先级 (PIC16CXXX 兼容模 式)
(2)
(1)
SBOREN: BOR 软件使能位
如果 BOREN1:BOREN0 = 01:
1 = 使能 BOR
0 = 禁止 BOR
BOREN1:BOREN0 = 00、 10 或 11 :
如果
该位被禁 止并读 为 0 。
未实现: 读为 0
RI
: RESET 指令标志 位
1 = 未执 行 RESET 指令 (只能由 固件 置 1 )
0 = 已执 行了 RESET 指令, 导致器件 复位 (必须在发生 复位后由 软件置 1 )
TO
:看门狗超时标志 位
1 = 通过上电、 CLRWDT 指令或 SLEEP 指令置 1
0 = 发生了 WDT 超 时溢 出
PD
:掉电检测标 志位
1 = 通过上电或 CLRWDT 指令置 1
0 = 通过执 行 SLEEP 指令置 1
POR
:上电复位状态 位
1 = 未发生 上电复位 (只能由 固件 置 1 )
0 = 已发生 上电复位 (必须在发生 上电复位后由 软件置 1 )
:欠压复位状态 位
BOR
1 = 未发生 欠压复位 (只能由 固件 置 1 )
0 = 已发生 欠压复位 (必须在发生 欠压复位后由 软件置 1 )
注 1: 如果使能了 SBOREN 位,其 复 位 状态 为 1 ;否则 为 0 。
2: POR 的实际复 位值 由器件复 位的类型决 定。更多 信息,请参见 本寄 存器下方的 “ 注” 和第 4.6 节“寄存
器的复 位状态”。
注 1 : 建议在检测到上电复 位后,将 POR 位置 1 ,以便继续检测 后续 的上电复 位。
2 : 当 BOR
DS39755A_CN 第 42 页 初稿 2007 Microchip Technology Inc.
为 0 并 且 POR 为 1 时 (假 定在 POR 之后 立即 用 软 件将 POR 置 1),可以说已发生了 欠压复 位。
PIC18F2423/2523/4423/4523
4.2 主复 位 ( MCLR)
MCLR 引脚提供了用外部 硬件 触 发器件 复位的方法。将
该引脚 拉低可以产生 复位信 号。这些器件在 MCLR
复位
路径 上有一 个噪声滤 波器, 该滤 波器 检测并滤除小 的干
扰脉 冲。
任何内部复 位,包括 WDT 复 位,均不能将 MCLR
引脚
驱 动为低电平 。
在 PIC18F2423/2523/4423/4523 器件中,可以用
MCLRE 配置位禁止 MCLR
输入。当禁 止 MCLR 时,
该引脚将 成为一 个数 字输入引脚。更 多信息,请参 见
第 10.5 节“PORTE、 TRISE 和 LATE 寄存器 ”。
4.3 上电复位 ( POR)
只 要当 VDD 上 升 到 某 个门限时,就会在片上 产生上电复
位脉冲 。这使得 V
器件会以初始化状态 启动 。
为了利用 POR 电路 ,需 要将 MCLR 引脚通过 一个电阻
( 阻值 范 围 为 1kΩ 到 10 k Ω )连 接到 V
去产生上电复 位 延时通常 所需 的外 部 RC 元件。V
最 小 上 升 速率已指 定 ( 参数 D004 ) 。上升 速率 缓慢 的
情况,请参见图 4-2 。
当 器件开始正常 工作 ( 即,退 出 复 位状态 ) 时,器件的
工作参数 (电压 、频率 和温度等) 必须 得到满足 ,以确
保其正常 工作。如果不满足 这些条 件,那么 器件必须 保
持在复 位状态 ,直到 满足 工作条 件为止 。
POR 事件 由 POR
POR 时,该 位的状态就 会被置 为 0 ; 任何其他复 位事
件均不能 改变 它。任何 硬 件事件均不能将 POR
1 。要 捕获 多个 事件,用户必须 在 POR 之后用 软 件手 动
将该 位复 位为 1 。
DD 达到满足器件 正常工作的数 值时,
DD。这 样可以省
DD 的
位 (RCON<1>)捕获。 每 当 发生
复位为
图 4-2 : 外部 上电复位 电路 (VDD 缓慢 上电
的情况 )
V
VDD
注 1 : 仅 当 VDD 上电速率过 慢 时 才需 要 外 部 上电复
DD
D
R
R1
C
位电路 。二极 管 D 有助 于在 V
容迅速 放电 。
2 : 建议 R < 40 k Ω ,确 保 电阻 R 两 端 压降 符合器
件的电气 规范。
3 : R1 ≥ 1 k Ω 将限制任何电流从外 部 电 容 C 流入
,以避 免由于静电 放电(El ectrostatic
MCLR
Discharge, ESD)或 电过载 ( Electrical
Overstress, EOS)导致 MCLR
坏。
MCLR
PIC18FXXXX
DD 掉电时使 电
/VPP 引脚损
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 43 页
PIC18F2423/2523/4423/4523
4.4 欠压复位 ( BOR)
PIC18F2423/252 3/4423/4523 器件带 有一 个 BOR 电路,
它将为用户 提供一系列配置 和 节 能选项。 BOR 由
BORV1:BORV0 和 BOREN1:BOREN0 配置位控制 。 总
共有 4 种 BOR 配置,归 纳在 表 4-1 中。
BOR 门限 值由 BORV1:BORV0 位设置 。如果使能了
BOR,当 V
大 于 T
到 V
生 复位。发生 欠压复位以后, 芯 片将保持这 种状态 , 直
至 V
如果使能了 上电延 时定时器, 则 它将在 V
V
BOR 之后开始 工作,并使芯 片在延时 TPWRT(参数 33 )
期间保持 复位。如 果 在 上电延时定 时器运行过程中,
V DD 电压降到了 V BOR 以下,芯 片将 重新 回到欠压复 位
状态 并 且 上电延 时定时器会恢复 为初 始 状态 。一 旦 V
电压上升 到 VBOR 以 上, 上电延时定时器将 重新执 行延
时。
BOR 和上电 延 时定时器 ( PWRT)是分别配置 的。使
能 BOR 复 位并不会自 动 使能 PWRT。
4.4.1 用软 件使能 BOR
当 BOREN1:BOREN0 = 01 时,用户 可以用 软 件使能或
禁 止 BOR 。这可 通过控制 位 SBOREN ( RCON<6> )
完成。如 前所述,将 SBOREN 置 1 可使能 BOR 。清零
SBOREN 将完全 禁止 BOR 。SBOREN 位只 工作在这 个
模式,其他情况下它将读 为 0 。
DD 跌落到低于 V BOR (参数 D005 )的时 间
BOR (参数 35 )就会 复位器件。如果 V DD 跌落
BOR 以下的时间小 于 T BOR 可能发生也 可能不会发
DD 上升 到 V BOR 以上 。
DD 上升 到超过
DD
用软 件控制 BOR 位可使用户 能更灵活 地定制 应用程序
以使其适应环境,而 无需通过 对器件重新编程来更改
BOR 配置。它还允 许用户通过 减少 BOR 消耗的电流 ,
用软 件调节 器件的功耗 。虽然 BOR 的电流通常很小 ,
但是它可能对低 功耗 应用有一些影响 。
注: 即使当 BOR 受软 件控制 时, BOR 复 位电
平仍将由 BORV1:BORV0 配置 位 设置。 该
值不能用 软件更 改。
4.4.2 检测 BOR
使能 BOR 后,当发生 BOR 或 POR 事件时,BOR位总
是复 位为 0 。因此只通过 读 BOR
否 发生过 BOR 事件。更可 靠 的方法是同时 检查 POR
的状态 。假定在发生任何 POR 事件后,POR 位被
BOR
立即 用软件 复位为 1 。如果 BOR
那么 就可以 断定 已经发生了 BOR 事件。
位的状态很难 确定是
和
为 0 同时 POR 为 1 ,
4.4.3 在休眠模式下 禁止 BOR
当 BOREN1:BOREN0 = 10 时, BOR 受硬件 控制并且
像 前面描 述的 那样 工作。每 当 器件进入休眠模 式时,就
会自动禁 止 BOR 。当器件返回 到任何其他工作模式时,
又 将自动重 新使能 BOR 。
此模 式使应用能在有效执行 代码的同时从欠压状态 恢
复 ,这也 是器件最需 要 BOR 保护的 状 况。同时, 通过
消 除增加的 BOR 电流,可以 省 去休眠模式下的 额 外功
耗。
表 4-1: BOR 配置
BOR 配置
BOREN1 BOREN0
00
01
10
11
SBOREN
( RCON<6>)
的状态
无 关位 禁 止 BOR ;必须对 配置 位 重 新编程 才能使能 BOR 。
可用 用软 件使能 BOR ; 工作模 式由 SBOREN 控制 。
无关位 用 硬件在 运行和 空闲模式下使能 BOR ,在 休眠模式下禁 止。
无关位 用 硬件使能 BOR 。
BOR 操作
DS39755A_CN 第 44 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
4.5 器件复 位定时器
PIC18F2423/2523/4423/4523 器件包含了三个独立 的片
上定时器,有 助于 调节上电复位 过程。它们的主要功能
是确保在代码 执行之 前 器件时 钟 稳 定。这些定时器是:
• 上电延时定时器 ( PWRT)
• 振荡器起 振定时器 ( OST)
•PLL锁定延 时定时器
4.5.1 上电延时定时器 ( PWRT)
PIC18F2423/2523/4423/4523 器件的上电延 时定时器
( PWRT ) 是一个 11 位计 数器,它使用 INTRC 时 钟源
作为时钟输入。该 定时器可产生大约
2048 x 32 µ s=65.6ms 的时间间隔 。 PWRT计数期间 ,
器件保持在复 位状态 。
上电 延时时 间 取决于 INTRC 时 钟 ,并且由于 温度和工
艺的不同,不同器件的 延迟时间也 将各不相同。 详情请
参 见直流 参数 33 。
通过清零 PWRTEN
4.5.2 振荡器起振 定时器 ( OST )
在 PWRT 延 时 ( 参数 33)结 束 以后,由振荡 器起振 定
时器 (OST ) 提供 1024 个振荡周期 (来 自 OSC1 输
入) 的延 时, 从 而确保晶振 或谐 振 器已 起振 并足够稳 定
可以为控制 器提供时钟 。振荡 器可能需 要更长 时间 以满
足其频率 容差规范。
只有在 XT 、LP 、HS 和 HSPLL 模 式下,并且仅当 发生
上电复 位或 从 大多 数功 耗 管理 模 式退出时, 才启用 OST
延时。
配置位可使能 PWRT。
4.5.3 PLL 锁定延 时定时器
当 在 PLL 模 式下使能 PLL 时, 上电复 位后的延 时时 序
与其他振荡 器模 式略 有不同。在 PLL 模 式下需 要使用一
个独立的定时器 来提供一段足够 让PLL 锁定 到主 振荡器
频率的固 定延 时。PLL 锁定延 时 (T
且 在振荡器起 振 延 时后发生。
PLL)通 常 为 2 ms,
4.5.4 延时时 序
上电延时时 序如下:
1. 清除 POR 脉冲。
2. 启用 PWRT 延时 ( 如果使能)。
3. 启用 OST 延时。振荡 器在此周期 的开始 起振 。
4. PLL 锁定延 时 (如果使用 HSPLL 模式 )。
总延迟时 间将取决 于 振荡器的配置 和 PWRT 的状态 。
图 4-3 、 图 4-4 、 图 4-5 、 图 4-6 和 图 4-7 各自 描述了
不同的 上电延 时时 序 ,其 中 上电延 时定时器 被使能,并
且器件工作在 HS 振荡 器模 式下。图 4-3 到图 4-6 也适
用于在 XT 或 LP 模式下工作 的器 件。 对于 工作 在 RC
模式下的器件以及 禁 止了 PWRT 的器件,将根 本没 有
延 时。
由于延 时是由 POR 脉冲触 发的,因此如果 MCLR
足够 长时间的 低电平,所 有 延 时都将 结束 。将 MCLR
平拉高后器件将立即 开始执 行代码 (图 4-5 )。这对于
测试或同 步多个并 行工作的 PIC18FXXXX 器件是 非常
有用的。
保持
电
表 4-2 : 不同情形下的 延时
振荡 器配置
HSPLL 66 ms
HS、 XT 和 LP
EC 和 ECIO
RC 和 RCIO
INTIO1 和 INTIO2
注 1: 66 ms (65.5 ms ) 是 上电 延时定时器 ( PWRT ) 延迟时 间 的标称 值 。
2: 2 ms 是 PLL 锁 定所需 的标称时间 。
PWRTEN
(1)
+ 1024 TOSC + 2 ms
(1)
66 ms
66 ms
66 ms
66 ms
上电复位
= 0 PWRTEN = 1
+ 1024 TOSC 1024 TOSC 1024 TOSC
(1)
(1)
(1)
(2)
和欠压复 位
(2)
1024 TOSC + 2 ms
——
——
——
(2)
从功 耗管理 模式退 出
1024 TOSC + 2 ms
(2)
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 45 页
PIC18F2423/2523/4423/4523
图 4-3: 上电 延时时 序( MCLR 连接 到 V DD , V DD 电压上升时 间 < T PWRT )
VDD
MCLR
内部 POR
TPWRT
PWRT延时
OSC1
OST 延时
内部 复位
图 4-4 : 上电延时时 序(MCLR
VDD
MCLR
内部 POR
PWRT延时
OSC1
OST 延时
TOST
在 TOST 结束之 前上升 )
TPWRT
TOST
内部 复位
图 4-5 : 上电延时时 序(MCLR
VDD
MCLR
内部 POR
PWRT延时
OSC1
OST 延时
内部复 位
DS39755A_CN 第 46 页 初稿 2007 Microchip Technology Inc.
在 TOST 结束 之后上升 )
T
PWRT
TOST
PIC18F2423/2523/4423/4523
图 4-6: 缓慢 VDD 上 升时 间( MCLR 连接 到 V DD , V DD 电压上升时间 > T PWRT )
3V
VDD
MCLR
内部 POR
PWRT 延时
OSC1
OST 延时
内部复位
0V
TPWRT
TOST
图 4-7 : 在 PLL 使能时 POR 的延 时时 序(MCLR
VDD
MCLR
内部 POR
TPWRT
PWRT 延时
TOST
OSC1
OST 延时
PLL 延 时
内部复位
注: TOST = 1024 个 OSC1 周期。 TPLL ≈ 2 ms (至多)。
连接 到 VDD )
TPLL
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 47 页
PIC18F2423/2523/4423/4523
4.6 寄存器的 复位 状态
大 多数 寄 存器不受复 位的 影响 。在 POR 时这些 寄 存器
的状态 不确定,而在其他复 位时它们的状态 不变 。而剩
余 寄存器 则 根 据不同的 复 位类型 被 强 制 为 “复 位 状
态”。
大多数 寄存器不受 WDT 唤醒 的 影响,这是因为 WDT 唤
醒 被视为对 正常 工作的恢 复 。如 表 4-3 所示,RCON 寄
存器中的状态 位:RI
同的复 位情形中会分别被置 1 或清零 。可在软 件中使用
这些状态 位判断复 位的性质。
、 TO 、 PD 、 POR 和 BOR ,在不
表 4-4 描 述了所有特殊 功能寄 存器的复 位 状态 。可以将
这些复 位状态 分类为上电 和欠压复 位、主复 位、WDT 复
位以及 WDT 唤醒 。
表 4-3 : RCON 寄存器的状态位、含义 以及初始化 状态
条件 程序计 数器
上电复位
RESET 指令
欠压复位
功耗 管理运行模 式下的 MCLR
功耗 管理空闲 和休眠模 式下的
复 位
MCLR
全功耗 或功耗 管理运行模 式期间 的
WDT 超时
全功耗执 行期间 的 MCLR
堆栈满复位 (STVREN = 1 )
堆栈下 溢复位 (STVREN = 1 )
堆栈下 溢错 误 (不是 真正的 复位,
STVREN = 0)
功 耗 管理 空闲 或 休眠模 式下的 WDT
超时
通过中 断从功 耗管理 模式退 出
图注: u = 不变
注 1: 当器件被 中 断唤醒 且 GIEH 或 GIEL 置 1 时, PC 装入 中 断 向量 ( 008h 或 0018h ) 。
2: 当软件使能 BOR 时 (BOREN1:BOREN0 配置位 = 01 且 SBOREN = 1 ), POR 位的复 位状态 是 1 且 所
有其他 复位不能 改变该状态 。 否则 ,其 复位 状态 是 0 。
复位
复位
0000h 11100 0 0
0000h 0uuuu u u
0000h 111u0 u u
0000h u1uuu u u
0000h u10uu u u
0000h u0uuu u u
0000h uuuuu u u
0000h uuuuu 1 u
0000h uuuuu u 1
0000h uuuuu u 1
PC + 2 u00uu u u
(1)
PC + 2
RI
uu0uu u u
RCON 寄存器 STKPTR 寄存器
TO PD POR BOR STKFUL STKUNF
DS39755A_CN 第 48 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 4-4:所有 寄存器的初始化 状态
MCLR
寄存器 适用器件
TOSU 2423 2523 4423 4523 ---0 0000 ---0 0000 ---0 uuuu
TOSH 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
TOSL 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
STKPTR 2423 2523 4423 4523 00-0 0000 uu-0 0000 uu-u uuuu
PCLATU 2423 2523 4423 4523 ---0 0000 ---0 0000 ---u uuuu
PCLATH 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
PCL 2423 2523 4423 4523 0000 0000 0000 0000 PC + 2
TBLPTRU 2423 2523 4423 4523 --00 0000 --00 0000 --uu uuuu
TBLPTRH 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
TBLPTRL 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
TABLAT 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
PRODH 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
PRODL 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
INTCON 2423 2523 4423 4523 0000 000x 0000 000u uuuu uuuu
INTCON2 2423 2523 4423 4523 1111 -1-1 1111 -1-1 uuuu -u-u
INTCON3 2423 2523 4423 4523 11-0 0-00 11-0 0-00 uu-u u-uu
INDF0 2423 2523 4423 4523 N/A N/A N/A
POSTINC0 2423 2523 4423 4523 N/A N/A N/A
POSTDEC0 2423 2523 4423 4523 N/A N/A N/A
PREINC0 2423 2523 4423 4523 N/A N/A N/A
PLUSW0 2423 2523 4423 4523 N/ A N/A N/A
FSR0H 2423 2523 4423 4523 ---- 0000 ---- 0000 ---- uuuu
FSR0L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
WREG 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
INDF1 2423 2523 4423 4523 N/A N/A N/A
POSTINC1 2423 2523 4423 4523 N/A N/A N/A
POSTDEC1 2423 2523 4423 4523 N/A N/A N/A
PREINC1 2423 2523 4423 4523 N/A N/A N/A
PLUSW1 2423 2523 4423 4523 N/ A N/A N/A
图 注: u = 不变 , x = 未知, - = 未实现位 ( 读为 0 ), q = 值取决 于 具体 条 件。 阴影 单 元表 示不适用于 指 定器件。
注 1 : INTCONx 或 PIRx 寄 存器中的一位或多 位会受到影响 (引起唤醒)。
2: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时, PC 装入中 断向量 (0008h 或 0018h )。
3: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时,用 PC 的 当前值更新 TOSU 、 TOSH 和 TOSL 。将 STKPTR 修 改为 指
向硬件 堆栈的下一 个存 储单 元。
4: 具体条件下的 复位 值,请参见表 4-3 。
5: 根据所 选择的 振荡器 模式使能 PORTA、 LATA 和 TRISA 中的 bit 6 和 bit 7。如果未 被配置 为 PORTA 引脚 ,则 它们将被
禁 止并 读 为 0 。
上电复位,
欠压复位
复位,
WDT 复位,
RESET 指令,
堆栈 复位
通过 WDT 或
中 断唤醒器件
(3)
(3)
(3)
(3)
(2)
(1)
(1)
(1)
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 49 页
PIC18F2423/2523/4423/4523
表 4-4:所有 寄存器的初始化 状态 (续)
MCLR
寄存器 适用器件
FSR1H 2423 2523 4423 4523 ---- 0000 ---- 0000 ---- uuuu
FSR1L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
BSR 2423 2523 4423 4523 ---- 0000 ---- 0000 ---- uuuu
INDF2 2423 2523 4423 4523 N/A N/A N/A
POSTINC2 2423 2523 4423 4523 N/A N/A N/A
POSTDEC2 2423 2523 4423 4523 N/A N/A N/A
PREINC2 2423 2523 4423 4523 N/A N/A N/A
PLUSW2 2423 2523 4423 4523 N/ A N/A N/A
FSR2H 2423 2523 4423 4523 ---- 0000 ---- 0000 ---- uuuu
FSR2L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
STATUS 2423 2523 4423 4523 ---x xxxx ---u uuuu ---u uuuu
TMR0H 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
TMR0L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
T0CON 2423 2523 4423 4523 1111 1111 1111 1111 uuuu uuuu
OSCCON 2423 2523 4423 4523 0100 q000 0100 q000 uuuu uuqu
HLVDCON 2423 2523 4423 4523 0-00 0101 0-00 0101 u-uu uuuu
WDTCON 2423 2523 4423 4523 ---- ---0 ---- ---0 ---- ---u
(4)
RCON
TMR1H 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
TMR1L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
T1CON 2423 2523 4423 4523 0000 0000 u0uu uuuu uuuu uuuu
TMR2 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
PR2 2423 2523 4423 4523 1111 1111 1111 1111 1111 1111
T2CON 2423 2523 4423 4523 -000 0000 -000 0000 -uuu uuuu
SSPBUF 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
SSPADD 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
SSPSTAT 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
SSPCON1 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
SSPCON2 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
图 注: u = 不变 , x = 未知, - = 未实现位 ( 读为 0 ), q = 值取决 于 具体 条 件。 阴影 单 元表 示不适用于 指 定器件。
注 1 : INTCONx 或 PIRx 寄 存器中的一位或多 位会受到影响 (引起唤醒)。
2: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时, PC 装入中 断向量 (0008h 或 0018h )。
3: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时,用 PC 的 当前值更新 TOSU 、 TOSH 和 TOSL 。将 STKPTR 修 改为 指
向硬件 堆栈的下一 个存 储单 元。
4: 具体条件下的 复位 值,请参见表 4-3 。
5: 根据所 选择的 振荡器 模式使能 PORTA、 LATA 和 TRISA 中的 bit 6 和 bit 7。如果未 被配置 为 PORTA 引脚,则 它们将被
禁 止并 读 为 0 。
2423 2523 4423 4523 0q-1 11q0 0q-q qquu uq-u qquu
上电复位,
欠压复位
复位,
WDT 复位,
RESET 指令,
堆栈 复位
通过 WDT 或
中 断唤醒器件
DS39755A_CN 第 50 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 4-4:所有 寄存器的初始化 状态 (续)
MCLR
寄存器 适用器件
ADRESH 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
ADRESL 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
ADCON0 2423 2523 4423 4523 --00 0000 --00 0000 --uu uuuu
ADCON1 2423 2523 4423 4523 --00 0qqq --00 0qqq --uu uuuu
ADCON2 2423 2523 4423 4523 0-00 0000 0-00 0000 u-uu uuuu
CCPR1H 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR1L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
CCP1CON
CCPR2H 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR2L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
CCP2CON 2423 2523 4423 4523 --00 0000 --00 0000 --uu uuuu
BAUDCON 2423 2523 4423 4523 01-0 0-00 01-0 0-00 --uu uuuu
ECCP1DEL 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
ECCP1AS
CVRCON 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
CMCON 2423 2523 4423 4523 0000 0111 0000 0111 uuuu uuuu
TMR3H 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
TMR3L 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
T3CON 2423 2523 4423 4523 0000 0000 uuuu uuuu uuuu uuuu
SPBRGH 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
SPBRG 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
RCREG 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
TXREG 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
TXSTA 2423 2523 4423 4523 0000 0010 0000 0010 uuuu uuuu
RCSTA 2423 2523 4423 4523 0000 000x 0000 000x uuuu uuuu
EEADR 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
EEDATA 2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
EECON2 2423 2523 4423 4523 0000 0000 0000 0000 0000 0000
EECON1 2423 2523 4423 4523 xx-0 x000 uu-0 u000 uu-0 u000
图 注: u = 不变 , x = 未知, - = 未实现位 ( 读为 0 ), q = 值取决 于 具体 条 件。 阴影 单 元表 示不适用于 指 定器件。
注 1 : INTCONx 或 PIRx 寄 存器中的一位或多 位会受到影响 (引起唤醒)。
2: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时, PC 装入中 断向量 (0008h 或 0018h )。
3: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时,用 PC 的 当前值更新 TOSU 、 TOSH 和 TOSL 。将 STKPTR 修 改为 指
向硬件 堆栈的下一 个存 储单 元。
4: 具体条件下的 复位 值,请参见表 4-3 。
5: 根据所 选择的 振荡器 模式使能 PORTA、 LATA 和 TRISA 中的 bit 6 和 bit 7。如果未 被配置 为 PORTA 引脚 ,则 它们将被
禁 止并 读 为 0 。
2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
2423 2523
2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
2423 2523
4423 4523 --00 0000 --00 0000 --uu uuuu
4423 4523 0000 00-- 0000 00-- uuuu uu--
上电复位,
欠压复位
复位,
WDT 复位,
RESET 指令,
堆栈 复位
通过 WDT 或
中 断唤醒器件
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 51 页
PIC18F2423/2523/4423/4523
表 4-4:所有 寄存器的初始化 状态 (续)
MCLR
寄存器 适用器件
上电复位,
欠压复位
IPR2 2423 2523 4423 4523 11-1 1111 11-1 1111 uu-u uuuu
PIR2 2423 2523 4423 4523 00-0 0000 00-0 0000 uu-u uuuu
PIE2 2423 2523 4423 4523 00-0 0000 00-0 0000 uu-u uuuu
IPR1
PIR1
PIE1
2423 2523 4423 4523 1111 1111 1111 1111 uuuu uuuu
2423 2523
4423 4523 -111 1111 -111 1111 -uuu uuuu
2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
2423 2523 4423 4523 -000 0000 -000 0000 -uuu uuuu
2423 2523 4423 4523 0000 0000 0000 0000 uuuu uuuu
2423 2523
4423 4523 -000 0000 -000 0000 -uuu uuuu
OSCTUNE 2423 2523 4423 4523 0q-0 0000 00-0 0000 uu-u uuuu
TRISE
TRISD
2423 2523 4423 4523 0000 -111 0000 -111 uuuu -uuu
2423 2523 4423 4523 1111 1111 1111 1111 uuuu uuuu
TRISC 2423 2523 4423 4523 1111 1111 1111 1111 uuuu uuuu
TRISB 2423 2523 4423 4523 1111 1111 1111 1111 uuuu uuuu
TRISA
(5)
2423 2523 4423 4523 1111 1111
(5)
LATE 2423 2523 4423 4523 ---- -xxx ---- -uuu ---- -uuu
LATD
2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
LATC 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
LATB 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
LATA
(5)
2423 2523 4423 4523 xxxx xxxx
(5)
PORTE 2423 2523 4423 4523 ---- xxxx ---- uuuu ---- uuuu
PORTD
2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
PORTC 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
PORTB 2423 2523 4423 4523 xxxx xxxx uuuu uuuu uuuu uuuu
PORTA
(5)
2423 2523 4423 4523 xx0x 0000
(5)
图 注: u = 不变 , x = 未知, - = 未实现位 ( 读为 0 ), q = 值取决 于 具体 条 件。 阴影 单 元表 示不适用于 指 定器件。
注 1 : INTCONx 或 PIRx 寄 存器中的一位或多 位会受到影响 (引起唤醒)。
2: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时, PC 装入中 断向量 (0008h 或 0018h )。
3: 当器件 被中 断唤醒且 GIEL 或 GIEH 位 被置 1 时,用 PC 的 当前值更新 TOSU 、 TOSH 和 TOSL 。将 STKPTR 修 改为 指
向硬件 堆栈的下一 个存 储单 元。
4: 具体条件下的 复位 值,请参见表 4-3 。
5: 根据所 选择的 振荡器 模式使能 PORTA、 LATA 和 TRISA 中的 bit 6 和 bit 7。如果未 被配置 为 PORTA 引脚,则 它们将被
禁 止并 读 为 0 。
复位,
WDT 复位,
RESET 指令,
堆栈 复位
1111 1111
uuuu uuuu
uu0u 0000
通过 WDT 或
中断唤醒器件
(5)
(5)
(5)
uuuu uuuu
uuuu uuuu
uuuu uuuu
(1)
(1)
(1)
(5)
(5)
(5)
DS39755A_CN 第 52 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
5.0 存储 器构成
PIC18 增强型单片机器件有三种 类型的存储 器:
• 程序存 储器
• 数据 RAM
• 数据 EEPROM
由于是 哈佛架 构的器件,数据和 程序存 储器使用不同的
总线,因而可同时 访问这 两种存 储器 空间。出于实 用 目
的,可将数据 EEPROM 当作 外设器件,因为它可以 通
过一组 控制寄存器 进行寻址和 访问。
第 6.0 节“闪存 程序存 储器 ”提供了关于闪存程序存 储器
操作的更 多详细信息。数据 EEPROM 将单 独在第 7.0 节
“数据 EEPROM 存 储器 ”中讨论 。
5.1 程序存储器构 成
PIC18 单片机具有 21 位程序计数器,可以对 2 MB 的 程
序存 储空间进行寻址。 访问物理实现 存 储器的 上边界和
这 个2 MB 地 址 之 间 的存 储 单 元 会 返回 全 0(NOP 指令) 。
PIC18F2423 和 PIC18F4423 各有 16 KB 的闪存存储
器,可以存 储最多 8,192 条 单 字指令 。 PIC18F2523 和
PIC18F4523各有 32 KB 的闪存存储 器,可以存储最多
16,384 条单字指令 。
PIC18 器件有两个 中断向 量。复位向 量地址 为 0000h,中
断向量地 址为 0008h 和 0018h 。
图 5-1 给出了 PIC18F2423/2523/4423/4523 器件的 程
序存 储器映射 。
图 5-1 : PIC18F2423/2523/4423/4523 器件的程序存 储器映射 和堆栈
PC<20:0>
CALL,RCALL,RETURN
RETFIE,RETLW
高优先级中 断向量
低优先级中 断向量
1 级堆栈
•
•
•
31 级堆栈
复位向 量
21
0000h
0008h
0018h
片 上
程序存储器
3FFFh
4000h
PIC18FX423
读 为 0
片上
程序 存储 器
PIC18FX523
读为 0
7FFFh
8000h
用户 存储空间
1FFFFFh
200000h
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 53 页
PIC18F2423/2523/4423/4523
5.1.1 程序计数器
程序计数器 (Program Counter ,PC )指 定欲取 出执 行
的 指令 的地 址。 PC为 21 位宽 ,保存在 三个 不同的 8 位
寄存器中。存储低字节 的 寄存器称为 PCL 寄存器, 该 寄
存器可 读写 。存 储高字节的 寄 存器, 即 PCH 寄 存器,存
储 PC<15:8> 位; 该寄存器不可直接读写 。更新 PCH 寄
存器的 操作是 通过 PCLATH 寄存器实现 的。存 储最高字
节的寄 存器 称为 PCU 。该寄存器存 储 PC<20:16> 位; 它
也不能直接读 写。更新 PCU 寄存器的 操作是通过
PCLATU寄存器实现 的。
PCLATH 和 PCLATU 的内容通过写 PCL 的任何操 作传
送到程序计数器。同 样, 程序计数器的 两个高字节通过
读 PCL 的操 作 传送到 PCLATH 和 PCLATU。这对于计
算 PC 的 偏移 量 很 有用 处(见 第 5.1.4.1 节“计算
GOTO”)。
PC 是按字节寻址 程序 存 储 器的。为了 防止 PC 不能正
确获取字指令 ,需 要将 PCL 的最低 有效 位固 定取值 为
0。 PC 每次 递 增 2 来寻址 程序 存储 器中的顺序指令 。
CALL、 RCALL、 GOTO 和程序 转移指令直接 写入程序计
数器。对于这些指令 ,PCLATH 和 PCLATU 的内容不会
传送 到程序计数器。
5.1.2 返回地址堆栈
返回地址堆栈允 许保存最多 31 个程序调 用地址 和中断
向 量。当执 行 CALL、RCALL 指令或响 应中 断 时,PC值
会被压入该 堆栈 。而在执行 RETURN 、RETLW或RETFIE
指令时,PC 值会 从堆栈弹出。PCLATU 和 PCLATH不
受 RETURN 或 CALL 指令的影响 。
通过 21 位的 RAM 和一 个 5 位的堆栈 指针 STKPTR 来
实现 31 字的 堆栈 操作。堆栈既不 占 用程序存 储器 空间,
也不占 用数据存 储器 空间。堆栈 指针是可读 写的,并且
通过栈顶的特 殊功能 寄存器可以 读 写栈顶地 址。 也可以
使用这些 寄存器将数据 压入堆栈 或 者从 堆栈 弹 出。
执行 CALL 类型的 指令时, 执行进 栈操作:首 先 堆栈指
针 递 增 1 ,并 且 将 PC 的内容 写入堆栈 指 针所 指向 的存
储单元 (PC 已经指向 CALL 指令的下一条 指令)。执
行 RETURN 类型的 指令时,执行出 栈操作:STKPTR 所
指向的存 储单元 的内容会被传送给 PC ,然 后堆栈 指针
递减 1。
所有复 位后,堆栈指针均会初始化为 00000 。堆栈指针
值 00000 不 指向任何 RAM 单 元;它仅仅是一 个复位
值。状态 位表 明堆栈 是否 已满,是 否 已溢出或下 溢。
5.1.2.1 访问栈顶
只可 读写返回地址堆栈的栈顶(T op-of-S t ack ,TOS)。有
三个 寄存器 TOSU:TOSH:TOSL 用于保存由 STKPTR 寄
存器所指向的堆栈单元的内容(图 5-2 )。这可以让用户
在必 要时实现 软 件堆栈 。在 CALL 、 RCALL 或中断 后,
软件可以通过 读取 TOSU:TOSH:TOSL 寄存器 来读取 压
入堆栈的 值。这些 值可以被 存放 到由用 户定义 的 软件堆
栈。返回 时,软 件将这些值 存回 TOSU:TOSH:TOSL 并
执行返回。
为防止 意外 的堆栈操 作,访问堆栈 时用户必须 禁 止 全局
中断允 许位。
图 5-2: 返回 地 址堆栈 和相关的 寄 存器
返回地址堆栈 <20:0>
栈顶寄存器 堆栈指针
TOSL TOSH TOSU
34h 1Ah 00h
栈顶
001A34h
000D58h
11111
11110
11101
STKPTR<4:0>
00010
00011
00010
00001
00000
DS39755A_CN 第 54 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
5.1.2.2 返回堆栈 指针 ( STKPTR)
STKPTR 寄存器(寄存器 5-1)包含堆栈指针 值、STKFUL
(堆栈满 )状态位和 STKUNF( 堆栈下溢)状态位。堆栈
指针 值可为 0 到 31 范围 内的值。向堆栈压入值前, 堆栈
指针递增 1 ; 而从堆栈弹出值后,堆栈 指针递减 1 。复位
时, 堆栈指针值为零 。用 户可以 读写堆栈指针的 值 。实时
操作 系统 (Real-Time Operating System , RTOS )可以
利用此特性对 返回堆栈进行 维护。
向堆栈压入 PC 值 31 次(且没有值从 堆栈弹出) 后,
STKFUL 位置 1 。 通过软件或 POR 使 STKFUL 位 清零 。
由 STVREN (堆栈溢 出复位使能)配置位的状态决 定堆
栈满 时将执 行的操 作。(关于器件配置 位的 说明,请参见
第 23.1 节“配置 位”。)如果 STVREN 位置 1( 默认),
第 31 次进 栈 将把 (PC + 2 )值压入 堆栈 ,将 STKFUL
位置 1 并复 位器件。STKFUL 位将保持置 1 ,而 堆栈指针
将被清零 。
如果 STVREN 值清零 ,第 31 次进栈 时 STKFUL 位将会
置 1,堆栈指针值 递 增到 31 。任何其他 进 栈 操作都 不会
覆盖 第 31 次进栈 的 值,并 且 STKPTR 将保持为 31 。
当堆栈 弹出 次数足够卸 空堆栈时,下一 次出栈 会向 PC
返回 一个零 值 ,并 将 STKUNF 位 置 1 ,而 堆栈指 针 则 保
持为零 。STKUNF 位将保持置 1 ,直到 由软 件清零 或发
生 POR 为止 。
注: 下溢 时,将零值返回 给 PC ,会 使 程序指向
复 位向 量,此时可以 验 证 堆栈状态 并采 取
相应的操作。这与复 位不同,因为下溢时
SFR 的内容不受影响 。
5.1.2.3 PUSH 和 POP 指令
由于栈顶 是可以读写 的,因此将值压入堆栈 或从堆栈弹
出而不影响程序 的正常执 行 是非常 理想 的。PIC18 指令
集 包含两 条 指令 PUSH 和 POP ,使用这 两 条 指令 可在软
件控制 下对 TOS 执行操 作。然 后就 可以修改 TOSU 、
TOSH 和 TOSL ,将数据或返回 地 址压入 堆栈 。
PUSH 指令将 当前 的 PC 值压入 堆栈。 执 行该指令 会使
堆栈指针 递增 1 并将当前 的 PC 值装入 堆栈。
POP 指令通过将堆栈 指 针递减 1 来 放弃 当前 的 TOS 值 。
然后前 一个入 栈的值就成 为了 TOS 值 。
寄存器 5-1 : 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
bit 7 bit 0
(1)
STKUNF
(1)
— SP4 SP3 SP2 SP1 SP0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4-0
注 1: 通过用 户软 件或 POR 清零 bit 7 和 bit 6 。
STKFUL:堆栈满标志 位
1 = 堆栈满或 溢出
0 = 堆栈未 满或未 溢出
STKUNF:堆栈下 溢标志 位
1 = 发生堆栈 下溢
0 = 未发生堆栈 下溢
未 实现: 读 为 0
SP4:SP0:堆栈指针 值位
C = 可清零 位
(1)
(1)
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 55 页
PIC18F2423/2523/4423/4523
5.1.2.4 堆栈满和下 溢 复位
通过将配置寄 存器 4L 中的 STVREN 位置 1 , 来使能在
堆栈溢出或下 溢时的器件复 位。当 STVREN 置 1 时,堆
栈满或 堆栈下 溢状态会将相应的 STKFUL 或 STKUNF
位置 1 ,然后使器件复 位。当 STVREN 清零时,堆栈满
或堆栈 下溢状态 会将相应的 STKFUL 或 STKUNF 位置
1 ,但不会使器件复位。只 能 通过 用户软 件或上电 复 位
使 STKFUL 或 STKUNF 位清零 。
5.1.3 快速 寄 存器堆栈
为 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 ;RESTORE VALUES SAVED
;IN FAST REGISTER STACK
5.1.4 程序存储 器中的查找 表
有的编程场 合需 要在程序 存储 器中创 建数据结 构或查找
表 。对于 PIC18 器件,可以用 两种 方式 实现查 找 表 :
• 计算 GOTO
• 表读
5.1.4.1 计算 GOTO
计 算 GOTO 是 通过 向 程序计 数器加一 个 偏 移 量来 实现
的。例 5-2 给 出了一个 示例 。
使用 ADDWF PCL 指令 和一组 RETLW nn 指令 可以创 建
一个查找 表 。在调 用该表 前 ,会先 将查找 表 中的偏移 量
装入 W 寄 存器。被调用 子 程序 的第一条 指令 应该 是
ADDWF PCL 指令。接 下 去执 行 的一条 是 RETLW nn 指
令,它将 值 nn 返回给 调用函 数。
偏 移量 ( WREG 中 )指 定程序计 数器应该 增加的字节
数,其值 应该 为 2 的倍 数 (LSb = 0 )。
在这种 方式中,每个指令 存储 单元只 能存储 一个 数据字
节 ,并且要 求返回 地 址堆栈还有 空闲 存 储 单元。
例 5-2 :使 用偏移量 计算 GOTO
MOVF OFFSET, W
CALL TABLE
ORG nn00h
TABLE ADDWF PCL
RETLW nnh
RETLW nnh
RETLW nnh
.
.
.
5.1.4.2 表读与表 写
有一种 更好 的方法可以将数据存储 在程序 存储 器中,这
种 方法允 许在 每 个指令 存储 单元 存 储 2 个字节 的数据。
使用表读 和表写 ,每个程序字 可以存储 2 个字节 的查找
表数据。 表指针 (TBLPTR ) 寄存器指 定字节 地 址,而
表锁存 (TABLAT)寄存器存储从程序存储 器中读取或
写入 的数据。一 次 只能 向 程序 存 储 器或 从程序 存 储 器传
送一个字节 。
第 6.1 节“表读与 表 写” 将进 一 步讨论表读 和 表写操 作。
DS39755A_CN 第 56 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
5.2 PIC18 指令周期
5.2.1 时钟分 配
来自内部或 外部时 钟源的单片机时 钟输入都将在内部被
四 分频 以产生 四 个互不 重 叠的 正 交 时钟 信 号( Q1 、 Q2、
Q3 和 Q4)。在单片机内部,程序计 数器在每个 Q1 递
增 ; 在 Q4 期间, 从程序存 储器 取指令 并将 指令锁存 到
指令寄存器中。 指令的译码和执 行在下一 个 Q1 到 Q4
周期完成。 图 5-3 所示为时 钟和 指令执 行的 流程图。
图 5-3 :时 钟 / 指令周期
Q2 Q3 Q4
OSC1
Q1
Q2
Q3
Q4
PC
OSC2/CLKO
( RC 模 式 )
Q1
PC PC + 2 PC + 4
执行指令(PC – 2 )
取指令(PC )
Q1
5.2.2 指令流 / 流水 线
一 个 “指令周期”由 4 个 Q 周期 组 成: Q1 到 Q4 。 取指
令和执行指令是以 流水线方式 进行的,用一个指令周期来
取 指令,而 用 另 一个指令周期译码和 执 行指令。但由 于 是
流水 线操作,所以每条指令 的等效 执行时间都是一个指令
周期。如果某条 指令改变了 程序计数器 (如 GOTO ),则
需要 两个指令 周期才能完成该指令 (例 5-3 )。
取 指周期中: 程序计 数器 ( PC ) 在 Q1 周期 递 增 1 , 开
始取 指令。
指令执 行周期中:在 Q1 周期,将所取 指令锁存 到指令
寄存器 (IR )。在随后的 Q2 、 Q3 和 Q4 周期 中译码并
执行该指令。其 中 读数据存储 器(读操作数 )发生在 Q2
周期 , 写操 作 (写目 标寄 存器 ) 发生在 Q4 周期 。
Q2 Q3 Q4
执行指令(PC )
取指令(PC + 2 )
Q2 Q3 Q4
Q1
执行指令(PC + 2 )
取指令(PC + 4 )
内部
相位
时钟
例 5-3 : 指令流水 线流程
TCY0TCY1TCY2TCY3TCY4TCY5
1. MOVLW 55h
2. MOVWF PORTB
3. BRA SUB_1
4. BSF PORTA, BIT3 (Forced NOP)
5. Instruction @ address SUB_1
除程序转 移指令外,所有的 指令都是单 周期指令。由于 程序转 移指令将 导致一 条已 取指令从流水 线 清除,同时 重新
取新指令 , 然后 执行指令,所以 程序转 移指令需要 两个周期。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 57 页
取指 1 执行 1
取指 2 执行 2
取指 3 执行 3
取指 4 清除 (NOP )
取指 SUB_1 执行 SUB_1
PIC18F2423/2523/4423/4523
5.2.3 程序存 储 器中的 指令
程序存 储器按 字节寻址。指令以 2 字节或 4 字节的形式
存储 在程序 存储 器中。指令字 的最低 有效字节始终 存储
在地址 为偶 数的程序 存储 单元 中 (LSb = 0 ) 。要保证
正 确 指 向指令 存 储 单元, PC 必须 以 2 为单位 递增,并
且 LSb 总是 读为 0 ( 见第 5.1.1 节 “程序计数器 ”)。
图 5-4 给出了如何将 指令字 存储 在程序 存储 器中的一个
示例 。
图 5-4 : 程序存 储器中的 指令
指令 1:
指令 2:
指令 3:
程序存储器
字节存储单元
MOVLW 055h 0Fh 55h 000008h
GOTO 0006h EFh 03h 00000Ah
MOVFF 123h, 456h C1h 23h 00000Eh
→
CALL和 GOTO指令在 指令中嵌 入了 程序存 储器的 绝对地
址 。由于指令总是按 字 边界 存储 ,因而 指令 所包含的数
据为一个字 地址 。字地址 会写入 PC<20:1>,用 于 访问程
序存 储器中的 目标 字节地址 。图 5-4 中的指令 #2 给出了
指令 GOTO 0006h 在 程序存储器中的编码。程序转移指
令也采取 同 样的方式对相对地址偏 移量 进行编码。存 储
在转 移指令 中的 偏移 量代 表单字指令数,PC 将以此作为
偏移量 跳转 到指定的地址 单元 。第 24.0 节 “指令集汇
总”提供了 指令集的更 多详细信息。
LSB = 1 LSB = 0 ↓
F0h 00h 00000Ch
F4h 56h 000010h
字地址
000000h
000002h
000004h
000006h
000012h
000014h
5.2.4 双字指令
标 准的 PIC18 指令集 有 4 条双字指令 : CALL、 MOVFF、
GOTO 和 LSFR。这些指令 第二 个字 的高4 位均为 1111 ;
其他 12 位是 立即 数数据, 通常为一 个数据存 储器地址。
指令的 高 4 位为 1111 ,用于代表 一条 特殊 的 NOP 指令。
指令顺 序执 行的 正确顺 序为:执 行完第一 个字之后立即
按 顺序访问并使用第 二 个字中的数据。如果由于 某 些原
因跳过 了第一个字 而自动执 行指令 的第二个字 ,那么 将
作为一条 NOP 指令 执行 。如 果 双字指令跟 在修改 PC 的
条件指令 后,就 有 必要 执行此 操作。 例 5-4 给出了它的
执行过程。
注: 关于扩展指令集 中的双字指令 信息,请参
见 第 5.6 节“PIC18 指令执 行 和 扩展指令
集”。
例 5-4 : 双字指令
情形 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 ; Execute this word as a NOP
0010 0100 0000 0000 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
1111 0100 0101 0110 ; 2nd word of instruction
0010 0100 0000 0000 ADDWF REG3 ; continue code
DS39755A_CN 第 58 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
5.3 数据存储 器构成
注: 当使能了 PIC18 扩展指令集时,数据存储
器某 些方面的操 作会有所改变 。更多 信
息,请参见 第 5.5 节“数据存储 器和扩展
指令集” 。
PIC18 器件中的数据存储器是用 静态 RAM 实现的。 每
个数据存 储器寄 存器有 12 位地址 ,可 存 储数据 达 4096
个字节。存储空间被 分为 16 个存储区,每个存 储区包含
256 个字节。PIC18F2423/2523/4423/4523 器件实现 了
所有 16 个 存储 区。图 5-5 给 出了 PIC18F2423/2523/
4423/4523 器件的数据存储 器构 成 。
数据存储 器由特殊 功能寄 存器 (Special Function
Register, SFR)和 通 用寄 存器 ( General Purpose
Register, GPR)组成 。SFR 用于单片机和外设 功能模
块的 控制和状态 指示,GPR则用于在用户应用程序中存
储数据和 暂存中 间结果。任何 未实现 存 储单元 均读 为
0 。
这样 的指令集 和架 构支 持跨 存储 区的操 作。可以通过直
接 、间 接 或变 址寻址 模式访问整个 数据存储 器。本章 后
面的部分将讨论寻址模 式。
为确保能在一个周期 内访问常 用寄 存器 (SFR 和某 些
GPR ), PIC18 器件 实现 了一 个快 速操 作存 储区。 该存
储区是一 个 256 字节的存 储空间,它可实现 对 SFR 和
GPR Bank 0 的低 地址 单 元 的快 速访问 ,而无需使用
BSR。第 5.3.2 节“快速操作存 储区 ”提供了对于快速
操 作 RAM 的 详细说 明。
5.3.1 存储 区选择寄 存器 ( BSR)
容量较大 的数据存储 器需 要高效 的寻址 机制 ,以便对所
有地址进行 快速访问 。理想状 况下,这意味着 不必 为每
次读 写操作提供 完整地址 。 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-7 显示了 BSR 的 值与数据存 储器中的
存储 区之间 的关系 。
由于最多 可有 16 个寄 存器共享 同一个低字节 地址 ,用
户 必须 非常 小 心 以确保在执 行 数据读 或 写 之前选择 了正
确的存储 区。例 如,当 BSR 为 0Fh 时将程序 数据写入
地址 为F9h 的8 位地址 单元 ,将导致程序计 数器的复 位。
当选择 存储 区时, 只 有 实际实现的存 储 区才 可以 读 写 。
对未实现 存储 区进行 的写操 作将被 忽略 ,而读 这些存储
区会返回 0 。虽然 是这样 ,STATUS 寄存器仍 然会受到
影响 , 好 像操作是 成 功的。 图 5-5 和 图 5-6 中的数据存
储器映射 指出了 已实现的存 储区。
在 PIC18 的核心指令集 中,只 有 MOVFF 指令指 定源寄
存器和目 标寄 存器的完整 12 位地址 。该指令 在执行 时
完全忽略 BSR 。所有其他指令仅包含作为操作数的低字
节地址 ,而且必须 使用 BSR 或快 速操作存 储区 来定位
目标寄 存器。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 59 页
PIC18F2423/2523/4423/4523
图 5-5: PIC18F2423/4423 器件的数据存 储 器映射
BSR<3:0>
= 0000
= 0001
= 0010
= 0011
= 0100
= 0101
= 0110
= 0111
= 1000
= 1001
= 1010
= 1011
= 1100
= 1101
= 1110
= 1111
Bank 0
Bank 1
Bank 2
Bank 3
Bank 4
Bank 5
Bank 6
Bank 7
Bank 8
Bank 9
Bank 10
Bank 11
Bank 12
Bank 13
Bank 14
Bank 15
数据存储器 映射
00h
快 速操 作 RAM
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
GPR
GPR
GPR
未用
读为 00h
未用
SFR
000h
07Fh
080h
0FFh
100h
1FFh
200h
2FFh
300h
3FFh
400h
4FFh
500h
5FFh
600h
6FFh
700h
7FFh
800h
8FFh
900h
9FFh
A00h
AFFh
B00h
BFFh
C00h
CFFh
D00h
DFFh
E00h
EFFh
F00h
F7Fh
F80h
FFFh
当 a = 0 时:
将忽略 BSR 而使用快速操 作
存储 区。
前 128 个字节是 通用 RAM
(来自 Bank 0 )。
后128 个字节 是特殊 功能寄 存
器 (来 自 Bank 15 )。
当 a = 1 时:
BSR 指定 指令使用的存 储
区。
快速操作存 储区
快速操作 RAM 的
低 地址
快速操 作 RAM 的
高 地址(SFR)
00h
7Fh
80h
FFh
DS39755A_CN 第 60 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
图 5-6: PIC18F2523/4523 器件的数据存 储 器映射
BSR<3:0>
= 0000
= 0001
= 0010
= 0011
= 0100
= 0101
= 0110
= 0111
= 1000
= 1001
= 1010
= 1011
= 1100
= 1101
= 1110
= 1111
Bank 0
Bank 1
Bank 2
Bank 3
Bank 4
Bank 5
Bank 6
Bank 7
Bank 8
Bank 9
Bank 10
Bank 11
Bank 12
Bank 13
Bank 14
Bank 15
数据存储器 映射
00h
快 速操 作 RAM
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
GPR
GPR
GPR
GPR
GPR
GPR
未用
读为 00h
未用
SFR
000h
07Fh
080h
0FFh
100h
1FFh
200h
2FFh
300h
3FFh
400h
4FFh
500h
5FFh
600h
6FFh
700h
7FFh
800h
8FFh
900h
9FFh
A00h
AFFh
B00h
BFFh
C00h
CFFh
D00h
DFFh
E00h
EFFh
F00h
F7Fh
F80h
FFFh
当 a = 0 时:
将忽略 BSR 而使用快速操 作
存储 区。
前 128 个字节是 通用 RAM
(来自 Bank 0 )。
后128 个字节 是特殊 功能寄 存
器 (来 自 Bank 15 )。
当 a = 1 时:
BSR 指定 指令使用的存 储
区。
快速操作存 储区
快速操 作 RAM
的 低 地 址
快速操 作 RAM 的
高 地址(SFR)
00h
7Fh
80h
FFh
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 61 页
PIC18F2423/2523/4423/4523
图 5-7: 使用存 储 区 选择 寄存器 (指 向 0x02FF 的 直接寻址 )
(1)
7
0000
存储 区选择
注 1 : 可使用指令 的快 速操 作 RAM 位强制忽略 选 定的存储区 (BSR<3:0> ) 而使用快速操作存储 区中的寄 存器。
2 : MOVFF 指令指定了 完整 的 12 位地 址 。
BSR
0010
(2)
0
000h
100h
200h
300h
E00h
F00h
FFFh
数据存储 器
Bank 0
Bank 1
Bank 2
Bank 3
到
Bank 13
Bank 14
Bank 15
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
7
来自 操作码
11111111
(2)
0
5.3.2 快速操 作存储 区
使用 BSR 和在指令 中包含 8 位地址 ,用户 可以寻址 数
据存储 器的整个空间 ,但这同时也 意味着 用户必须 始终
确保选择 了正 确的存储 区。否则 ,可能会从 错误 的存储
单元读取 数据或将数据写入 错误 的存储 单元 。如果本来
希望 对一个 GPR 执 行写操 作,却 将 结 果 写入 了一 个
SFR,后果是非常严 重 的。但是在每次 对数据存储 器进
行 读或 写操 作时确认 和 / 或更 改 BSR 会降低 效 率 。
为了简化 对大多 数常 用数据存储 单元 的访问 ,在数据存
储 器中配置了 快 速操 作存 储 区,这 样 可以允许用 户访问
被映射的存 储区而 无需指定 BSR 。 快速操作存 储区由
Bank 0 的前 128 个字节 (00h-7Fh) 和 Bank 15 的后
128 个字节 ( 80h-FFh)组 成。 低半部分称为 “快 速
操 作 RAM ” ,由 GPR 组 成 。 高半部分则被 映射 为器件
的 SFR 。这两个 区域被连续 地映射 到快 速操 作存储 区
并且 可以用一个 8 位地址进行线 性寻址 (图 5-5 )。
快 速操作存 储 区由包含 快 速操作 RAM 位 (指令中的
“a ”参数 )的 PIC18 核 心指令使用。 当“a”等于 1
时,指令 使用 BSR 和包含在操 作码中的 8 位地址 对数
据存储 器寻址 。当“a”为 0 时,强制指令使用快 速操
作存储 区地址映射 ,此时完 全忽略 BSR 的当前值 。
此“ 强制”寻址模式可使指令在一个周期内对数据地 址
进行操 作,而不需 要 首先 更新 BSR 。这 意 味着 用 户 可以
更高效 地对 8 位地址 为 80h 或以上 的 SFR 进行求 值 和
操作。地址 低于 80h 的快 速操作 RAM 非常适合于存 储
那些用 户可能 需要快 速访问的数据 值,如直接 计算 结果
或 常用 程序变量。 快速操 作 RAM 也可 实现 更加 快速 和
高效的现 场保护和 变量切 换。
使能扩展 的指令集 (XINST 配置 位 = 1) 时的快速操 作
存储 区映射略 有不同。在第 5.5.3 节“在立即 数变址寻
址模式下映射 快速操作存 储区 ”中对此进行 了更详细的
讨论。
5.3.3 通用寄 存器文件
PIC18器件的 GPR区中包含了分区存储 区。这部分存储
区为数据 RAM,所 有 指令 均可使用它。 GPR 区 从 Bank
0 的最低 地址 ( 地址 000h)开始向 上直 到 SFR 区的 最
低 地址 。 上电复位不会初始化 GPR,并且其他复 位 也 不
会改变其内容。
DS39755A_CN 第 62 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
5.3.4 特殊 功能 寄 存器
特殊 功能寄 存器 (SFR ) 是 CPU 和外设模块 用来控制
器件操 作的寄 存器。这些寄 存器以静态 RAM 的形式实
现 。SFR 从数据存储 器的顶 部 (FFFh )开 始 向下延 伸,
它占 据了 Bank 15 上半 部分的空间(F80h 到 FFFh )。
表 5-1 和表 5-2 列出了这些 寄 存器。
可以将 SFR 归 类为两 组:与 “ 内核” 器件功能(ALU 、
复 位和中 断) 相关的寄存器和与外设 功能相关的 寄 存
器。复 位和中断寄 存器在相关的章节 中进行讨论 ,本章
后面的部分将对 ALU 的 STATUS 寄存器进行 说明。与
外设操 作相关的寄 存器将在相应 外设 的章节 中 进行 说
明。
SFR 通常分布 在功能 受 其控制 的外设 中。未使用的 SFR
单元 是未实现 的,读 为 0 。
表 5-1 : PIC18F2423/2523/4423/4523 器件的特 殊 功能寄 存器映射
地址 名称 地址 名称 地址 名称 地址 名称
FFFh TOSU FDFh INDF2
FFEh TOSH FDEh POSTINC2
FFDh TOSL FDDh POSTDEC2
FFCh STKPTR FDCh PREINC2
FFBh PCLATU FDBh PLUSW2
FFAh PCLATH FDAh FSR2H FBAh CCP2CON F9Ah —
FF9h PCL FD9h FSR2L FB9h —
FF8h TBLPTRU FD8h STATUS FB8h BAUDCON F98h —
FF7h TBLPTRH FD7h TMR0H FB7h ECCP1DEL
FF6h TBLPTRL FD6h TMR0L FB6h ECCP1AS
FF5h TABLAT FD5h T0CON FB5h CVRCON F95h TRISD
FF4h PRODH FD4h —
FF3h PRODL FD3h OSCCON FB3h TMR3H F93h TRISB
FF2h INTCON FD2h HLVDCON FB2h TMR3L F92h TRISA
FF1h INTCON2 FD1h WDTCON FB1h T3CON F91h
FF0h INTCON3 FD0h RCON FB0h SPBRGH F90h —
FEFh INDF0
FEEh POSTINC0
FEDh POSTDEC0
FECh PREINC0
FEBh PLUSW0
(1)
FCFh TMR1H FAFh SPBRG F8Fh —
(1)
(1)
(1)
(1)
FCEh TMR1L FAEh RCREG F8Eh —
FCDh T1CON FADh TXREG F8Dh LATE
FCCh TMR2 FACh TXSTA F8Ch LATD
FCBh PR2 FABh RCSTA F8Bh LATC
FEAh FSR0H FCAh T2CON FAAh
FE9h FSR0L FC9h SSPBUF FA9h EEADR F89h LATA
FE8h WREG FC8h SSPADD FA8h EEDATA F88h —
FE7h INDF1
FE6h POSTINC1
FE5h POSTDEC1
FE4h PREINC1
FE3h PLUSW1
(1)
(1)
(1)
(1)
(1)
FC7h SSPSTAT FA7h EECON2
FC6h SSPCON1 FA6h EECON1 F86h —
FC5h SSPCON2 FA5h —
FC4h ADRESH FA4h —
FC3h ADRESL FA3h —
FE2h FSR1H FC2h ADCON0 FA2h IPR2 F82h PORTC
FE1h FSR1L FC1h ADCON1 FA1h PIR2 F81h PORTB
FE0h BSR FC0h ADCON2 FA0h PIE2 F80h PORTA
(1)
FBFh CCPR1H F9Fh IPR1
(1)
(1)
(1)
(1)
(2)
FBEh CCPR1L F9Eh PIR1
FBDh CCP1CON F9Dh PIE1
FBCh CCPR2H F9Ch —
FBBh CCPR2L F9Bh OSCTUNE
(2)
(3)
(3)
F99h —
F97h —
F96h TRISE
FB4h CMCON F94h TRISC
(2)
—
(1)
(2)
(2)
(2)
F8Ah LATB
F87h —
F85h —
F84h PORTE
F83h PORTD
—
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(3)
(3)
(3)
(3)
(3)
(3)
注 1: 这不是 实际 存在的 寄 存器。
2: 未实现的 寄存器, 读为 0 。
3: 28 引脚器件不包含此寄 存器。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 63 页
PIC18F2423/2523/4423/4523
表 5-2 : 寄存器文件 汇总(PIC18F2423/2523/4423/4523)
寄存器名称
TOSU
TOSH
TOSL
STKPTR STKFUL STKUNF
PCLATU
PCLATH
PCL
TBLPTRU
TBLPTRH
TBLPTRL
TABLAT
PRODH
PRODL
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 49, 93
INTCON2 RBPU
INTCON3 INT2IP INT1IP
INDF0
POSTINC0
POSTDEC0
PREINC0
PLUSW0
FSR0H
FSR0L
WREG
INDF1
POSTINC1
POSTDEC1
PREINC1
PLUSW1
FSR1H
FSR1L
BSR
INDF2
POSTINC2
POSTDEC2
PREINC2
PLUSW2
FSR2H
FSR2L
STATUS
图 注: x = 未知, u = 不变 , — = 未实现, q = 值取决 于具体 条件
注 1 : SBOREN 位仅在 BOREN1:BOREN0 配置 位 = 01 时可用;否则 ,它被禁止 且读 为 0 。请参见 第 4.4 节 “欠压复 位 (BOR )” 。
2: 这些 寄存器和 / 或位在 28 引脚器件上未 实现, 读为 0 。提供的是 40/44 引脚器件的复 位值 ;各未 实现位 表示为 -。
3: 只有在特定的振荡 器 配置中 才可使用 PLLEN 位 ;否则,它 被禁止并 读为 0 。请参 见第 2.6.4 节“INTOSC模式下的 PLL”。
4: 只有在 禁止主 复位 (MCLRE 配置位 = 0) 时 才可使用 RE3 位 ;否则, RE3 读为 0 。该 位是 只读的。
5: 根据不同的主振荡 器模 式,可将 RA6/RA7 及其相关的锁 存器及方向 位分别配置 为端 口引脚。这些位在禁止 时读 为 0 。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
— — —
栈顶高字节 (TOS<15:8> )
栈顶低字节 (TOS<7:0> )
— — —
PC<15:8> 的保持寄 存器
PC 低字节 ( PC<7:0>)
— —b i t 2 1
程序存 储器表 指针 高字节 (TBLPTR<15:8> )
程序存 储器表 指针 低字节 (TBLPTR<7:0> )
程序存 储器表 锁存器
乘积寄存器的 高字节
乘积寄存器的 低字节
INTEDG0 INTEDG1 INTEDG2 —T M R 0 I P—R B I P1111 -1-1 49, 94
使用 FSR0 的内容寻址 数据存储 器——FSR0 的值 不变(不是实际存在的寄存器)
使用 FSR0 的内容寻址 数据存储 器——FSR0 的值 后递 增 ( 不是实际 存在的寄 存器)
使用 FSR0 的内容寻址 数据存储 器——FSR0 的值 后递减 ( 不是实际 存在的寄 存器)
使用 FSR0 的内容寻址 数据存储 器——FSR0 的值预递 增 ( 不是实际 存在的寄 存器)
使用 FSR0 的内容寻址 数据存储 器——FSR0 的值预递 增 ( 不是实际 存在的寄 存器), FSR0 的偏移 量由 W 寄
存器提供
— — — —
间 接数据存 储 器地址 指 针 0 的 低字节
工作寄 存器
使用 FSR1 的内容寻址 数据存储 器——FSR1 的值 不变(不是实际存在的寄存器)
使用 FSR1 的内容寻址 数据存储 器——FSR1 的值 后递 增 ( 不是实际 存在的寄 存器)
使用 FSR1 的内容寻址 数据存储 器——FSR1 的值 后递减 ( 不是实际 存在的寄 存器)
使用 FSR1 的内容寻址 数据存储 器——FSR1 的值预递 增 ( 不是实际 存在的寄 存器)
使用 FSR1 的内容寻址 数据存储 器——FSR1 的值预递 增 ( 不是实际 存在的寄 存器), FSR1 的偏移 量由 W 寄
存器提供
— — — —
间 接数据存 储 器地址 指 针 1 的 低字节
— — — —
使用 FSR2 的内容寻址 数据存储 器——FSR2 的值 不变(不是实际存在的寄存器)
使用 FSR2 的内容寻址 数据存储 器——FSR2 的值 后递 增 ( 不是实际 存在的寄 存器)
使用 FSR2 的内容寻址 数据存储 器——FSR2 的值 后递减 ( 不是实际 存在的寄 存器)
使用 FSR2 的内容寻址 数据存储 器——FSR2 的值预递 增 ( 不是实际 存在的寄 存器)
使用 FSR2 的内容寻址 数据存储 器——FSR2 的值预递 增 ( 不是实际 存在的寄 存器), FSR2 的偏移 量由 W 寄
存器提供
— — — —
间 接数据存 储 器地址 指 针 2 的 低字节
— — —NO VZD CC---x xxxx 50, 67
栈顶 最高字节 (TOS<20:16>)
— SP4 SP3 SP2 SP1 SP0 00-0 0000 49, 55
PC<20:16> 的保持寄 存器
程序 存 储 器表 指 针 最高字节 ( TBLPTR<20:16>)
—I N T 2 I EI N T 1 I E— INT 2IF INT1IF 11-0 0-00 49, 95
间接数据存 储器地 址 指针 0 的 高字节
间接数据存 储器地 址 指针 1 的 高字节
存 储区 选择寄 存器
间接数据存 储器地 址 指针 2 的 高字节
POR/BOR
时的值
---0 0000 49, 54
0000 0000 49, 54
0000 0000 49, 54
---0 0000 49, 54
0000 0000 49, 54
0000 0000 49, 54
--00 0000 49, 76
0000 0000 49, 76
0000 0000 49, 76
0000 0000 49, 76
xxxx xxxx 49, 89
xxxx xxxx 49, 89
N/A 49, 69
N/A 49, 69
N/A 49, 69
N/A 49, 69
N/A 49, 69
---- 0000 49, 69
xxxx xxxx 49, 69
xxxx xxxx 49
N/A 49, 69
N/A 49, 69
N/A 49, 69
N/A 49, 69
N/A 49, 69
---- 0000 50, 69
xxxx xxxx 50, 69
---- 0000 50, 59
N/A 50, 69
N/A 50, 69
N/A 50, 69
N/A 50, 69
N/A 50, 69
---- 0000 50, 69
xxxx xxxx 50, 69
详情请 见
(页 ):
DS39755A_CN 第 64 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 5-2 : 寄存器文件 汇总(PIC18F2423/2523/4423/4523)(续)
寄存器名称
TMR0H
TMR0L
T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 50, 123
OSCCON IDLEN IRCF2 IRCF1 IRCF0 OSTS IOFS SCS1 SCS0 0100 q000 30, 50
HLVDCON VDIRMAG
WDTCON
RCON IPEN SBOREN
TMR1H
TMR1L
T1CON R D16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC
TMR2
PR2
T2CON
SSPBUF
SSPADD
SSPSTAT SMP CKE D/A
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 50, 163,
SSPCON2 GCEN ACKSTAT ACKDT/
ADRESH
ADRESL
ADCON0
ADCON1
ADCON2 ADFM
CCPR1H
CCPR1L
CCP1CON P1M1
CCPR2H
CCPR2L
CCP2CON
BAUDCON ABDOVF RCIDL
ECCP1DEL PRSEN PDC6
ECCP1AS ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1
CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 0000 0000 51, 243
CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0111 51, 237
TMR3H
TMR3L
T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC
图 注: x = 未知, u = 不变 , — = 未实现, q = 值取决 于具体 条件
注 1 : SBOREN 位仅在 BOREN1:BOREN0 配置 位 = 01 时可用;否则 ,它被禁止 且读 为 0 。请参见 第 4.4 节 “欠压复 位 (BOR )” 。
2: 这些 寄存器和 / 或位在 28 引脚器件上未 实现, 读为 0 。提供的是 40/44 引脚器件的复 位值 ;各未 实现位 表示为 -。
3: 只有在特定的振荡 器 配置中 才可使用 PLLEN 位 ;否则,它 被禁止并 读为 0 。请参 见第 2.6.4 节“INTOSC模式下的 PLL”。
4: 只有在 禁止主 复位 (MCLRE 配置位 = 0) 时 才可使用 RE3 位 ;否则, RE3 读为 0 。该 位是 只读的。
5: 根据不同的主振荡 器模 式,可将 RA6/RA7 及其相关的锁 存器及方向 位分别配置 为端 口引脚。这些位在禁止 时读 为 0 。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Timer0寄存器的高字节
Timer0寄存器的低字节
— IRVST HLVDEN HLVDL3 HLVDL2 HLVDL1 HLVDL0 0-00 0101 50, 251
— — — — — — —S W D T E N--- ---0 50, 263
(1)
—R ITO PD POR BOR 0q-1 11q0 42, 48,
Timer1寄存器的高字节
Timer1寄存器的低字节
TMR1CS TMR1ON 0000 0000 50, 127
Timer2寄存器
Timer2周期寄存器
— T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 50, 133
MSSP 接收缓冲器 / 发 送寄存器
2
I
C™ 从动模式下的 MSSP 地址寄 存器。 I 2C 主控模 式下的 MSSP 波特 率重载寄存器。
PSR / WUA BF 0000 0000 50, 162,
ADMSK5
A/D 结果寄 存器的 高字节
A/D 结果寄 存器的 低字节
— — CHS3 CHS2 CHS1 CHS0 GO/DONE ADON --00 0000 51, 227
— — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0qqq 51, 228
— ACQT2 ACQT1 ACQT0 ADCS2 A DCS1 ADCS0 0-00 0000 51, 229
捕捉 / 比较 /PWM 寄存器 1 的 高字节
捕捉 / 比较 /PWM 寄存器 1 的 低字节
(2)
P1M0
捕捉 / 比较 /PWM 寄存器 2 的 高字节
捕捉 / 比较 /PWM 寄存器 2 的 低字节
— — DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M 1 CCP2M0 --00 0000 51, 139
Timer3寄存器的高字节
Timer3寄存器的低字节
(2)
DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000 51, 139,
(2)
—S C K PB R G 1 6— WUE ABDEN 01-0 0-00 51, 208
PDC5
ACKEN/
ADMSK4
(2)
PDC4
RCEN/
ADMSK3
(2)
PDC3
PEN/
ADMSK2
(2)
PDC2
RSEN/
ADMSK1
(2)
(2)
PDC1
TMR3CS TMR3ON 0000 0000 51, 135
SEN 0000 0000 50, 173
PDC0
(2)
PSSBD0
POR/BOR
时的值
0000 0000 50, 125
xxxx xxxx 50, 125
xxxx xxxx 50, 131
xxxx xxxx 50, 131
0000 0000 50, 134
1111 1111 50, 134
xxxx xxxx 50, 169,
0000 0000 50, 170
xxxx xxxx 51, 236
xxxx xxxx 51, 236
xxxx xxxx 51, 140
xxxx xxxx 51, 140
xxxx xxxx 51, 140
xxxx xxxx 51, 140
(2)
0000 0000 51, 157
(2)
0000 0000 51, 157
xxxx xxxx 51, 137
xxxx xxxx 51, 137
详情请 见
(页 ):
102
170
171
172
147
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 65 页
PIC18F2423/2523/4423/4523
表 5-2 : 寄存器文件 汇总(PIC18F2423/2523/4423/4523)(续)
寄存器名称
SPBRGH
SPBRG
RCREG
TXREG
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EUSART 波特 率发生器寄 存器的 高字节
EUSART 波特 率发生器寄 存器的 低字节
EUSART 接收寄存器
EUSART 发送寄 存器
POR/BOR
时的值
0000 0000 51, 210
0000 0000 51, 210
0000 0000 51, 218
0000 0000 51, 216
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 51, 206
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 51, 207
EEADR
EEDATA
EECON2
EEPROM 地址寄 存器
EEPROM 数据寄 存器
EEPROM 控制寄存器 2 (不是 实际存在的 寄存器 )
EECON1 EEPGD CFGS
IPR2 OSCFIP CMIP
PIR2 OSCFIF CMIF
PIE2 OSCFIE CMIE
IPR1 PSPIP
PIR1 PSPIF
PIE1 PSPIE
(2)
ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TM R1IP 1111 1111 52, 100
(2)
ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 52, 96
(2)
ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TM R1IE 0000 0000 52, 98
OSCTUNE INTSRC PLLEN
(2)
TRISE
(2)
TRISD
TRISC
TRISB
TRISA TRISA7
(2)
LATE
IBF OBF IBOV PSPMODE — TRISE2 TRISE1 TRISE0 0000 -111 52, 118
PORTD 数据方向控制 寄存器
PORTC 数据方向控制 寄存器
PORTB 数据方向控制 寄 存器
(5)
TRISA6
— — — — —
— FREE WRERR WREN WR RD xx-0 x000 51, 74, 84
— EEIP BCLIP HLVDIP TMR3IP CCP2IP 11-1 1111 52, 101
— EEIF BCLIF HLVDIF TMR3IF CCP2IF 00-0 0000 52, 97
— EEIE BCLIE HLVDIE TMR3IE CCP2IE 00-0 0000 52, 99
(3)
(5)
— TUN4 TUN3 TUN2 TUN1 TUN0 0q-0 0000 27, 52
PORTA 数据方向控制 寄存器
PORTE 数据锁 存寄 存器
0000 0000 51, 74, 83
0000 0000 51, 74, 83
0000 0000 51, 74, 83
1111 1111 52, 114
1111 1111 52 , 111
1111 1111 52, 108
1111 1111 52, 105
---- -xxx 52, 117
(读和 写数据 锁存器 )
(2)
LATD
LATC
LATB
PORTD 数据锁存寄 存器 (读和 写数据 锁存器 )
PORTC 数据锁存寄 存器 (读和 写数据 锁存器 )
PORTB 数据锁 存寄 存器 (读 和写 数据锁 存器)
LATA LATA7
PORTE
PORTD
(2)
— — — —R E 3
RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 xxxx xxxx 52, 114
(5)
LATA6
(5)
PORTA 数据锁存寄 存器 (读和 写数据 锁存器 )
(4)
RE2
(2)
RE1
(2)
RE0
xxxx xxxx 52, 114
xxxx xxxx 52 , 111
xxxx xxxx 52, 108
xxxx xxxx 52, 105
(2)
---- xxxx 52, 117
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx 52, 111
PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx 52, 108
PORTA RA7
(5)
RA6
(5)
RA5 RA4 RA3 RA2 RA1 RA0 xx0x 0000 52, 105
图 注: x = 未知, u = 不变 , — = 未实现, q = 值取决 于具体 条件
注 1 : SBOREN 位仅在 BOREN1:BOREN0 配置 位 = 01 时可用;否则 ,它被禁止 且读 为 0 。请参见 第 4.4 节 “欠压复 位 (BOR )” 。
2: 这些 寄存器和 / 或位在 28 引脚器件上未 实现, 读为 0 。提供的是 40/44 引脚器件的复 位值 ;各未 实现位 表示为 -。
3: 只有在特定的振荡 器 配置中 才可使用 PLLEN 位 ;否则,它 被禁止并 读为 0 。请参 见第 2.6.4 节“INTOSC模式下的 PLL”。
4: 只有在 禁止主 复位 (MCLRE 配置位 = 0) 时 才可使用 RE3 位 ;否则, RE3 读为 0 。该 位是 只读的。
5: 根据不同的主振荡 器模 式,可将 RA6/RA7 及其相关的锁 存器及方向 位分别配置 为端 口引脚。这些位在禁止 时读 为 0 。
详情请 见
(页 ):
DS39755A_CN 第 66 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
5.3.5 STATUS 寄存器
如寄 存器 5-2 所示,STATUS寄存器包含 ALU 的算 术运
算状态 。和任何其他 SFR 一 样 ,它 也 可以作为任何 指令
的操 作数。
如果一条影响 Z 、DC、C、OV 或 N 位的指令 以 STATUS
寄 存器作为目 标 寄 存器,将不会将指令 的 结 果 写入
STA TUS 寄存器,而是根 据 指令 的 执行 更新 STATUS寄
存器。因此,当执 行一条把 STATUS寄存器作为目 标寄
存器的指令 后,STATUS 寄存器的结 果可能和预想的不
一样 。例如,CLRF STATUS 将 Z 位置 1 并保持其余 状
态 位不变(000u u1uu)。
因此,建议仅使用 BCF 、BSF、SWAPF、MOVFF 和 MOVWF
指令来改变 STATUS 寄存器,因为这些指令 不会 影响
STA TUS寄存器中的 Z、 C、 DC、 OV 或 N 位。
关于其他不会 影响状态位的 指令,请参 见表 24-2 和
表 24-3 中的指令集 汇总。
注: 在减 法运算 中,C 和 DC 位分别 作为借 位位
和半借 位
位。
寄 存器 5-2 : STATUS 寄存器
U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x
— — —NO VZD C
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7-5
bit 4
bit 3
bit 2
bit 1
bit 0
未实现: 读为 0
N :负标志 位
此位用于有符号 的算 术运算 (二 进制补 码)。它表 明结 果是否 为负 (ALU MSB = 1 )。
1 = 结果为负
0 = 结果为 正
OV :溢出标志 位
此位用于有符号 的算 术运算 (二 进制补 码)。表 明溢 出了 7 位二进制 数的范围 ,溢 出将导致 符号 位
( bit 7 ) 发生改变 。
1 = 有符号算 术运算 中发生溢 出 ( 本次运算 )
0 = 未发生溢 出
Z:全零 标志 位
1 = 算术运 算或 逻辑运 算的结 果为 零
0 = 算术运 算或 逻辑运 算的结 果不为 零
位
(2)
位
(1)
DC:半进位 / 借 位
用于 ADDWF、 ADDLW、 SUBLW 和 SUBWF 指令 :
1 = 结果的第 4 个低位发生了 进位
0 = 结果的第 4 个低位 未发生 进位
C :进位 / 借 位
用于 ADDWF 、 ADDLW 、 SUBLW 和 SUBWF 指令 :
1 = 结果中 最高位发生了 进位
0 = 结果中 最高位 未发生 进位
(1)
(2)
C
注 1 : 对于借 位
RLF ),此位装入源寄 存器的 bit 4 或 bit 3 。
2 : 对于借 位
RLF ),此位装入源寄 存器的 最高 位或 最低 位。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 67 页
,极 性是相反 的。减 法是通过 加上 第二个操 作数的二进制补 码来执 行 的。对于移 位指令 (RRF 和
,极 性是相反 的。减 法是通过 加上 第二个操 作数的二进制补 码来执 行 的。对于移 位指令 (RRF 和
PIC18F2423/2523/4423/4523
5.4 数据寻址 模 式
注: 当使能 PIC18 扩展指令集时, PIC18 核心
指令集中某 些 指令的执行 会发生 改变。更
多信息,请参见第 5.5 节“ 数据存储器和扩
展指令集”。
程序存 储器只 能用一 种方式寻址 (通过程序计数器 ),
而数据存 储空间可用 多种方式 寻址 。 大 部分 指令的 寻址
模式 都是固 定的。其他 指令可能使用 最多三 种模式,根
据它们所使用的操 作数和是否 使能了扩展指令集 而定。
这些寻址模 式为:
• 固有 寻址
• 立即数 寻址
• 直接寻址
• 间接寻址
当 使能了 扩展指令集( XINST 配置位 = 1 ) 时,还可使用
另外一种寻址模式,即立即数变 址寻址模式。第 5.5.1 节
“ 使用立即 数 偏移量进行变址寻址 ” 将更详细讨论 它的 操
作。
5.4.1 固有 寻址 和 立即 数 寻址
很多 PIC18 控制指令根本不 需要任何参数。 执行这些 指
令 要么 对 整个 器件造 成 影响,要 么仅隐 式地对一 个 寄存
器 进行操 作。此 寻址 模 式称为固 有 寻址 。例 如 指令
SLEEP 、 RESET 和 DAW 。
其他指令 的工作方式与此类似,但需 要操 作码中有其他
显 式的参数。由于需要一些 立即 数作为参数,这种 寻址
模式被 称为立即 数寻址 。例 如 ADDLW 和 MOVLW ,它们
分 别向 W 寄 存器加或 传送 一 个立即 数。其他 立即 数 寻址
指令,例如 CALL 和 GOTO ,包含一个 20 位的程序存储
器地址 。
5.4.2 直接寻址
直接寻址模式在 操作码中 指定 操作的全部或部分 源地 址
和 / 或目 标地址 。这些选项 由指令附 带 的参数指 定。
在 PIC18 核心指令集 中,针对位和针对字节 的指令默 认
情况下使用直接寻址模 式。所有这些指令都 包含某个 8
位的立即 数地址 作为其最低 有效字节 。此地址指 定数据
RAM 的某个 存 储 区中 寄 存器的地 址 ( 第 5.3.3 节“通
用寄 存器文件”)或快 速操作存储区 (第 5.3.2 节“快
速操 作存 储 区 ”) 中作为 指令 数据 源 的存 储 单元地 址。
快速操作 RAM 位 “a ” 决定地 址的解析 方式。当“a”
为 1 时, BSR (第 5.3.1 节“存 储 区 选择寄 存器
(BSR )”)的内容将和 指令中 指定的地址 一起用于确
定寄 存器的完整 12 位地址 。当“a”为 0 时,此地址
将被 解析 为快速操 作存储 区中的一个寄 存器。使用快速
操 作 RAM 的 寻址 模 式有时也 被称为强 制 寻址 模 式。
有几条指令 ,例 如 MOVFF ,在操 作码中包含完整 的 12
位地址(源 地址 或目 标地址)。在这些情况下,BSR 被
完 全忽略 。
保存操作结 果的目标寄 存器由目 标位 “d ” 确定。当
“d ”为 1 时,结果被 存回源寄 存器并覆盖 原来的内容。
当“d”为 0 时,结果被 存 储在 W 寄 存器中。没有“d ”
参数的指令 的目 标寄 存器隐 含在指令 中,这些指令 的目
标寄 存器是正 在操 作的目 标寄 存器或 W 寄 存器。
5.4.3 间接寻址
间接寻址 模式允 许用 户访问数据存 储器中的存 储单元 而
无需在 指令中给 出一 个固定的地 址。这 种寻址 模式是 通
过使用文件 选择寄存器 (File Select Register, FSR )
作为指向被读 写 单元 的指 针实现 的。由于 FSR 本身作为
特殊 功能寄 存器位于 RAM 中,因此也 可在程序控制 下
直接对其进行操 作。这使得 FSR 对于在数据存储 器中实
现诸如 表和数组 等数据结 构时非常 有用。
也 可以 通过间 接文件 操 作数 ( Indirect File Operand,
INDF)进行间接寻址。这 种操作允 许自 动递增、 递减 指
针或 向指 针加 偏移 量 值, 从而自 动操作 指针的 值。它 通
过使用循 环提 高代码执 行效 率,如例 5-5 所示的清零 整
个 RAM 存 储区的 操作。
例 5-5 :使用 间接寻址清零 RAM
(BANK 1 )
LFSR FSR0, 100h ;
NEXT CLRF POSTINC0 ; Clear INDF
; register then
; inc pointer
BTFSS FSR0H, 1 ; All done with
; Bank1?
BRA NEXT ; NO, clear next
CONTINUE ; YES, continue
DS39755A_CN 第 68 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
5.4.3.1 FSR 寄存器和 INDF 操作数
间接寻址的 核 心是三 组寄 存器 :FSR0、FSR1和 FSR2。
每 组 寄 存器都 含有一对 8 位 寄 存器 :FSRnH和 FSRnL 。
FSRnH 寄存器的高 4 位未 使用,因此 每对 FSR 只保存
一 个 12 位 值, 从而可以 线性 寻址 数据存 储器的 整个空
间。因此, FSR 寄 存器对被 用作数据存 储器的地 址 指
针。
间 接寻址 是 通过 一组 间 接文件 操 作数 ( INDF0 到
INDF2)完成 的。这 些 操 作数可 被 看作 “虚 拟”寄存
器:它们被映射到 SFR 空间 而不是通过 物理方式实现
的。对特定的 INDF 寄 存器执行 读 或写操 作实际上访问
的是与之对应的一对 FSR 寄 存器。例 如,读 INDF1 就
是读 FSR1H:FSR1L 指 向 地址 中的数据。使用 INDF 寄
存器作为操 作数的指令实际 上 使用相应FSR 的内容作为
指 向 指令目 标地址 的 指 针。 INDF 操 作数只 是使用 该指
针的一种简 便方法。
由于间接寻址 使用完整 的 12 位地址 ,因此没 有必 要确
定数据 RAM 区。所以 BSR 的当前 内容和快速操 作 RAM
位对于确定目 标地址没 有影响 。
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 寄 存器中的有符号值 (从 -127 到
128)与 FSR 寄存器中的值 相加,并在操 作中使
用得 到的新 值
访问 INDF 寄存器时使用 FSR 寄存器中的 值而不会更 改
该值。同样,访问 PLUSW 寄存器是将 W 寄存器中的 值
作为 FSR 的 偏移 量。 该操作不会 改变 这 两个 寄存器中的
值,而访问其他虚拟寄 存器均会更改 FSR 寄 存器的值。
使用 POSTDEC 、 POSTINC 和 PREINC 对 FSR 进行
操作会影响 整对寄 存器 :即 FSRnL 寄 存器 从 FFh 到
00h 溢出并向 FSRnH 寄存器进 位。但这些 操 作的 结 果
不会更改 STATUS寄存器中的标志 位( 如 Z 、 N 和 OV
等 )。
图 5-8 : 间接寻址
使用以一个间接寻址寄 存器作为操
作数的指令 ....
... 使用存储 在与 该寄 存器相关 联的
一对 FSR 中的 12 位地址 ....
... 确定将在该操作中使用的数据存
储单元 。
在本 例 中, FSR1 寄存器对中的 值为
ECCh。这 意 味着将把 ECCh 单元 的
内容与 W 寄 存器的内容相加,并将
结 果存回 ECCh 单 元 中。
ADDWF, INDF1, 1
FSR1H:FSR1L
0 7
7
xxxx1110 11001100
000h
Bank 0
100h
200h
300h
0
E00h
F00h
FFFh
Bank 1
Bank 2
Bank 3
到
Bank 13
Bank 14
Bank 15
数据存储 器
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 69 页
PIC18F2423/2523/4423/4523
PLUSW 寄存器可用于在数据存储空间 中 实现 变 址寻
址。通过控制 W 寄存器中的 值,用 户可以 访问相对 当前
指 针地址 有 固 定 偏 移 量的地址 单 元 。在 某 些应用中, 该
功能可用于在数据存储 器内部实现某 些强大 的程序控制
结 构,如软 件堆栈 。
5.4.3.3 通过 FSR 对其他 FSR 进行操作
在某 些特殊 情况下,间接寻址 操作以其他 FSR 或虚 拟寄
存器作为目 标寄 存器。例如,使用 FSR 指向 一个虚 拟寄
存器会导致操 作不成 功。假 设 如下特殊 情况:
FSR0H:FSR0L 保存的是 INDF1 的地址 FE7h 。尝试 使
用 INDF0 作为操 作数读取 INDF1 的值 ,将返回 00h 。
尝 试使用 INDF0 作为 操 作数 写入 INDF1 ,将会 导致 执
行一条 NOP 指令。
另 一方面,使用虚拟寄 存器对一对 FSR 寄 存器 进行写操
作可能会产生与预期 不同的结 果。在这些情况下,会将
值写入 一对 FSR 寄 存器,但 FSR 不会 递 增或 递减 。因
此,写入 INDF2 或 POSTDEC2 时会把 同样 的值写入
FSR2H:FSR2L 。
由于 FSR 是映射到 SFR 空间 中的物理寄 存器,所以可
以通过直接寻址 来 对它们进行操 作。用户 在使用这些寄
存器时应该 特别小心 ,尤 其是在代码使用间接寻址 的方
式时。
同样 ,通常允 许通过间接寻址 对所有其他 SFR 进行操
作。用户 在进行 此类操 作时应该 特别小心 ,以免不小心
更改设置 从 而影响 器件操 作。
5.5 数据存储 器和 扩展指令集
使能 PIC18 扩展指令集(XINST 配置 位 = 1)显著改变
了数据存储 器及其寻址 的某 些方面。特别 是许多 PIC18
核 心指令使用 快 速操作存储 区的方式有所不同。这是由
于扩展指令集 引 入 了对数据存储 器空间的新的寻址 模
式。
同样需 要了解哪 些部分保持不变 。数据存储空间 的大小
及其线性寻址模式都 不会改变 。 SFR 映射也 保持不变。
PIC18 核心指令也仍 然 以直接和间接寻址模式进行操作;
固有和 立即数指令操 作照旧。FSR0 和 FSR1 的间接寻址
模式 也保持不变。
5.5.1 使用立即 数 偏移 量 进行变址寻址
使能 PIC18 扩展指令集 将更改快 速操 作 RAM 中使用
FSR2 寄存器对进行间接寻址 的方式。在适 当 的 条 件
下,使用快速操 作存储 区的指令(即绝 大 多 数针对位和
针对字节 的指令) 可以利用指令 中的偏移 量来执 行变址
寻址。这种 特 殊的 寻址模式称为使用 立即数偏移 量的变
址寻址或 立即数变 址寻址模式。
使用 扩展指令集 时,这 种寻址模 式有如下要 求:
• 强制 使用快速操 作存储 区 ( a = 0);且
• 文件地址 参数要小 于或等 于 5Fh。
在这些 条 件下, 指令的文件地 址 不会 被 解 析 为地 址 的 低
字节 (在直接寻址 中和 BSR 一起使用 ),或快速操 作
存 储 区中的 8 位地 址,而是 被解 析 为由 FSR2 指 定的地
址指针的偏 移量。将 该偏 移量与 FSR2 的内容相加以 获
取操作的 目标地 址。
5.5.2 受立即 数变 址寻址 模 式影响 的 指令
任何采用直接寻址模 式的PIC18 核心指令 均有可能受到
立即 数变 址寻址 模式的影响 ,包括所有针对 字节 和针对
位的指令 ,或 标 准 PIC18 指令集 中几乎 一半 的指令 。仅
使用固 有或立即 数寻址模 式的指令 不受影响 。
此外 ,如果针对字节 和针对位的指令 使用快速操 作存储
区 (快 速操 作 RAM 位为 1) 或包含 60h 或以上 的文件
地址 ,它们也 不受影响 。符合这些条 件的指令 会像 以前
一样执 行 。图 5-9 显 示了当 使能扩展指令集 时,各种寻
址 模式之 间 的对 比 。
那些想 要在立即 数 变址寻址 模式中使用针对位或针对 字
节的 指令的用 户,应 该注意此 模式下 汇 编语法的改变。
在第 24.2.1 节 “扩展指令的语法 ” 中对此 进行 了更 详
细的 说明。
DS39755A_CN 第 70 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
图 5-9 : 针对位和针对 字节 的指令 的寻址 模 式对比( 使能了扩展指令集)
示例指令 :ADDWF, f, d, a(操作码 : 0010 01da ffff ffff)
当 a = 0 且 f ≥ 60h 时:
此指令 以 直接 强制模 式执行 。
“ f” 被解析 为 快 速操作 RAM 中
060h 到 0FFh 之间 的地址 ,该
地 址 位于数据存 储 器的 060h到
07Fh ( Bank 0)和 F80h 到
FFFh ( Bank 15)中。
不可用此模式 寻址 地 址 低 于
60h 的单元 。
当 a = 0 且 f ≤ 5Fh 时:
此指令 以立即 数变 址寻址 模 式
执行。“f ”被解析 为 FSR2 中地
址值 的 偏 移量。将这 两个值相
加可以得到指令 的目 标寄 存器
的地址。此地 址 可以在数据存
储空间 的任何地方。
注意在此模 式中,正确的语法
如下:
ADDWF [k], d
其中 “k”就 是 “f” 。
000H
060H
080H
100H
F00H
F80H
FFFH
000H
080H
100H
F00H
F80H
FFFH
Bank 0
Bank 1
到
Bank 14
Bank 15
SFR
数据存储 器
Bank 0
Bank 1
到
Bank 14
Bank 15
SFR
数据存储 器
00H
60H
80H
快速操作 RAM
FSR2H FSR2L
FFH
FFFFFFFF 001001DA
“ f ” 的
有效 范围
BSR
00000000
FFFFFFFF 001001DA
当 a = 1(f 可为任何 值)时:
指令以直接寻址 模式 (也称为
直接 长地 址寻址 模式 ) 执 行 。
“f ”被解析 为数据存储空间的
16 个存 储 区中的一 个 地址 。存
储 区由存 储 区 选择寄 存器
(BSR )指定。此地址 可以位
于数据存 储空间的任何 实现 分
000H
080H
100H
Bank 0
Bank 1
到
Bank 14
区存储 区中。
F00H
Bank 15
F80H
FFFH
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 71 页
SFR
数据存储 器
PIC18F2423/2523/4423/4523
5.5.3 在立即 数 变址寻址 模 式下 映射 快速操
作存储 区
使用立即 数变址寻址 模 式能有效改变快 速操 作 RAM 前
96 个存 储单元 ( 00h 到 5Fh)的映射 方式。此模 式映射
Bank 0的内容和由用户 定义 的、可位于数据存储空间 中
任何地方的 “窗 口” 内容,而不仅仅映射 Bank 0 低半
部分的内容。 FSR2 的值 定义映射到 窗 口的地址 的下边
界 ,而上 边界则 由 FSR2 加 95 (5Fh) 决 定。地 址 为
5Fh 以上 的快速操 作 RAM 的映射方法如 前 所述 (见
第 5.3.2 节“快速操作存储区”)。图 5-10 显 示了在
此寻址 模 式下重 新映射 的快速操 作存储 区示例 。
图 5-10 :使用 立即数变址寻址 模 式 重 新 映射 快 速操作存储 区
示例 :
ADDWF f, d, a
FSR2H:FSR2L = 120h
从 FSR2 指 针 ( 120h)到
FSR2指针加 05Fh(17Fh)
区 域 内的存 储单 元被映射
到快 速操作 RAM 的 底 部
(000h-05Fh )。
Bank 0 中从 060h 到 07Fh
的存储单 元被 映射到快 速
操 作存储 区的中间 ,和常
规寻址 一样 。
从 F 80h 到 FFFh 的特 殊功
能寄 存器被映射 到 80h 到
FFh ,和常规寻址 一 样 。
低于 5Fh 的 Bank 0 地址 仍
然可以使用 BSR 对其 进行
寻址。
000h
05Fh
07Fh
100h
120h
17Fh
200h
F00h
F80h
FFFh
Bank 0
Bank 0
Bank 1
窗口
Bank 1
Bank 2
到
Bank 14
Bank 15
SFR
数据存储 器
快 速操作存储 区的重 新映射
式。使用 BSR (快 速操 作 RAM 位为 1) 的操 作和以前
一样继 续 使用直接寻址模 式。
5.6 PIC18 指令执行和 扩展指令集
使能扩展指令集 将额 外 添 加 8 条 其他命令到现 有的
PIC18 指令集中。这些 指令 如第 24.2.2 节 “扩展指令
集”中所述执行。
仅
适用于立即 数变址寻址 模
Bank 1“窗口 ”
Bank 0
SFR
快速操作存 储区
00h
5Fh
7Fh
80h
FFh
DS39755A_CN 第 72 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
6.0 闪存程序 存储 器
正常 工作状态 下,闪存 程序 存 储 器在 整个 VDD 范 围 内 都
是可读写 可擦除 的。
读 程序 存储 器时, 每次 读取 一个字节 。 写程序 存 储 器
时,每次写入一个 32 字节的块。擦除 程序存储器时,每
次擦除一 个 64 字节的 块。用 户代码不能执 行批量 擦除
操作。
在 擦写程序存 储器时, 系统会 停止取指令直 到操 作 完
成。 擦写期间不能 访问该程序存 储器,因此 也就无法执
行代码。由内部 编程定时器 来终 止程序存 储器的 擦写操
作。
写入程序存 储器的 值不一定 非要是有效 指令。执 行存 储
无效 指令的 程序存 储单元 会 导致执 行 NOP。
图 6-1 : 表读 操作
6.1 表读与表写
为了读写程序 存储 器,有两个操 作指令 可供处 理器在程
序 存 储 器 空间 和数据 RAM 之 间移动字节 :
• 表读 (TBLRD )
• 表写(TBLWT)
程序 存 储空间 为 16 位 宽 ,而数据 RAM 空间 为 8 位 宽 。
表读 和 表 写操作 通过 一 个 8 位 寄 存器 (TABLAT)在这
两个存 储器 空间之 间传送数据。
表读 操作 从程序 存 储 器 获取 数据并将其放入 数据 RAM
空间。 图 6-1 显示了 程序存 储器和数据 RAM 之 间的一
次表读 操作。
表 写操作将数据存储空间 中的数据存入程序 存储 器的保
持寄 存器。第 6.5 节“写闪存程序 存储 器” 详细介绍了
将保持寄 存器内容写入程序 存储 器的 过程 。图 6-2 显示
了程序 存储 器和数据 RAM 之间 的一次表 写操作。
表 操作以 字节 为单位。包含数据而 非程序指令 的 表 块不
需要按 字对齐 。因此,表 块可以在任何 字节地址 开始和
结束。如果使用 表 写操作向 程序存 储器 写入可执 行代
码, 程序指令必 须按 字 对齐 。
指令:TBLRD*
表指针
TBLPTRU
注 1: 表指针 寄 存器 指 向 程序 存储 器中的 某 个字节 。
(1)
TBLPTRH TBLPTRL
程序存 储器
(TBLPTR )
程序存储 器
表锁存器(8 位 )
TABLAT
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 73 页
PIC18F2423/2523/4423/4523
图 6-2: 表 写操 作
指令:TBLWT*
程序存储 器
保持寄 存器
TBLPTRU
表指针
TBLPTRH TBLPTRL
(1)
程序存储器
(TBLPTR )
表锁存器(8 位 )
TABLAT
注 1 :表指针 实际指 向 32 个保持 寄存器中的某一个 ,其地址由 TBLPTRL<4:0> 决定。 第 6.5 节“写闪存程序
存储 器” 中将讨论向程序存储器阵 列写入数据的物理过程。
6.2 控制寄存器
TBLRD 和 TBLWT 指令要用到 几 个控制 寄存器。包括:
• EECON1 寄存器
• EECON2 寄存器
• TABLAT 寄存器
• TBLPTR 寄存器
6.2.1 EECON1 和 EECON2 寄存器
EECON1 寄存器( 寄存器 6-1)是存 储器 访问的 控制寄
存器。EECON2 寄存器不是实际存在的寄存器,专用于
存储 器的擦写操 作。读 EECON2 将得到 全 0 。
控制 位 EEPGD 决 定 访问 的是 程序 存储 器 还 是数据
EEPROM 存储 器。当清零 时,后续 的操 作将访问数据
EEPROM 存储 器。当置 1 时,任何后续操 作都 将针对
程序存 储器 进行。
控制位 CFGS 决 定 访问的是配置 / 校准寄 存器还是程
序存 储器 / 数据 EEP ROM 存 储器。 当置 1 时,不管
EEPGD 的值 如何,后 续操 作将 访问配置寄 存器 (见
第 23.0 节“CPU 的特殊 功能”)。当清零 时,则 由
EEPGD 来选择访问的存 储 器。
当 FREE 位置 1 时,允 许对 程序存 储器 进行擦除 操作,
擦除 操作在下一条 WR 命 令时 启动。 当 FREE 清零时,
则 仅使能写操作。
当 WREN 位置 1 时,允许将 WR 位 置 1 并开始写操作。
上电时,WREN 位被清零 。 WREN 必须 在 WR 置 1 前
由代码 置 1 。 WREN 保持 置 1 直 到 由代码 清零 为 止 。
WRERR 位在 WR 位置 1 时由硬 件置 1 ,在内部编程 定
时器 超 时、 写操作 结束 时 被清零 。如果由于任何原因 导
致写操作中 断, WRERR 位 仍保持置 1 。
注: 在 正常工作 期间, WRERR 读为 1 。这 表 明
写操作被复 位提早终止 或 进行了不合法的
写操作。
WR 控制位用于 启动写操 作。用 软 件只 能将 该 位置 1 而
无法清零 。在 写操作 完成后,由 硬件将其清零 。
注: 当写操作 完成 时, EEIF 中 断 标 志 位
(PIR2<4> )被置 1。它 必须用 软件清零 。
DS39755A_CN 第 74 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
寄 存器 6-1: EECON1: EEPROM 控制 寄 存器 1
R/W-x R/W-x U-0 R/W-0 R/W-x R/W-0 R/S-0 R/S-0
EEPGD CFGS
bit 7 bit 0
— FREE WRERR
(1)
WREN WR RD
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
EEPGD :闪存程序 存 储 器或数据 EEPROM 存 储 器 选择 位
1 = 访问闪存 程序存 储器
0 = 访问数据 EEPROM 存 储器
CFGS:闪存程序 存储 器 / 数据 EEPROM 存储 器或配置寄 存器选择 位
1 = 访问配置寄存器
0 = 访问闪存 程序存 储器或数据 EEPROM 存 储器
未 实现: 读 为 0
FREE:闪存行擦除 使能位
1 = 在下一条 WR 命令 时擦除 TBLPTR 指 定的程序 存储 器行(擦除操作 完成后 清零)
0 = 仅执行写操 作
WRERR:闪存程序 存储 器 / 数据 EEPROM 存储 器错误 标志 位
1 = 写操作提早终 止(由于正常操 作中自定时编程期间 的任何复 位,或不合法的写操 作)
0 = 写操作 完成
WREN:闪存程序 存储 器 / 数据 EEPROM 存储 器写 使能位
1 = 允许对闪存程序 存储 器 / 数据 EEPROM 存储 器的写周期
0 = 禁止对闪存 程序存 储器 / 数据 EEPROM 存 储器的 写周期
WR:写控制位
1 = 启动数据 EEPROM 擦写周期或 程序存 储 器的擦写周期或 写周期 (操作是自定时的,一旦写操 作 完
成, 该位即 由 硬件清零 。 用软件只 能将 WR 位置 1,但不能清零 。)
0 = EEPROM 写周期完成
RD :读控制位
1 = 启动 EEPROM 读操 作(读操 作 需 要一个周期 。 RD 位由硬件 清零。用 软 件 只能将 RD 位 置 1 ,但不能
清零。 EEPGD = 1 或 CFGS = 1 时, RD 位无 法 置 1。)
0 = 不启动 EEPROM 读 操 作
S = 可设置 位
(1)
注 1: 当发生 WRERR 时, EEPGD 和 CFGS 位不会 被清零 。这 样 可以跟踪 错 误状 况。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 75 页
PIC18F2423/2523/4423/4523
6.2.2 TABLAT ——表锁存 寄 存器
表锁存器 (TABLAT)是映射到 SFR 空间 的一个 8 位寄
存器。 表锁 存器用于在 程序存 储器和数据 RAM 之 间传
输数据时保存 8 位数据。
6.2.3 TBLPTR ——表指针 寄 存器
表指针 (TBLPTR ) 寄存器在程序 存储 器中以字节 为单
位进行寻址 。 TBLPTR 由 3 个 SFR 寄 存器组成 :表指
针 最高字节、表 指 针 高字节 和 表 指 针 低字节
( TBLPTRU:TBLPTRH:TBLPTRL)。这 3 个寄 存器合
起来 组成 一个 22 位宽 的指 针。其中低 21 位允 许器件寻
址 高达 2MB 程序 存 储 器 空间 。第 22 位 则允 许访问 器件
ID、用户 ID 和配置 位。
TBLRD 和 TBLWT 指令要使用表指针 寄 存器 TBLPTR 。
这些指令 可以基于表操 作以4种 方法之一更新TBLPTR 。
表 6-1 列出了这些 操 作。这些 操 作只会 影响 TBLPTR 的
低 21 位。
表 6-1 : 执 行 TBLRD 和 TBLWT 指令 的 表 指针操 作
示例表指针操作
TBLRD*
TBLWT*
TBLRD*+
TBLWT*+
TBLRD*TBLWT*-
TBLRD+*
TBLWT+*
不 修改 TBLPTR
TBLPTR 在读 / 写 后递 增
TBLPTR 在读 / 写 后递减
TBLPTR 在读 / 写前 递 增
6.2.4 表指针范 围
TBLPTR 用于读 、写 和擦除 闪存程序 存储 器。
当执 行 TBLRD 时,TBLPTR 的所有 22 位决 定将程序存
储器的哪 个字节读 入 TABLAT。
当执 行TBLWT时,表指针寄存器的 低5位(TBLPTR<4:0> )
决 定要写入程序存 储器的 哪个保持 寄存器 (共有 32 个)。
当程序存储 器的定时写 入 (通 过 WR 位)开 始时,
TBLPTR 的高 17 位 ( TBLPTR<21:5> )将决 定要 写入
哪 个程序存储 器块( 每 块 32 字节) 。更 多详细信息,请
参见 第 6.5 节“写闪存程序 存储 器”。
当执 行擦除 程序存 储器时,表指针 寄存器 的 高 16 位
(TBLPTR<21:6> )指向将要 擦除的 64 字节块。低有效
位 (TBLPTR<5:0> ) 被 忽 略 。
图 6-3 说明了 基于闪存 程序存 储器 操作的 TBLPTR 相关
范 围。
图 6-3 : 基 于 操作的表 指针范 围
21 16 15 87 0
TBLPTRU
表 擦 除 ——TBLPTR<21:6>
表写—— TBLPTR<21:5>
表读—— TBLPTR<21:0>
TBLPTRH
TBLPTRL
DS39755A_CN 第 76 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
6.3 读闪存 程序存 储器
TBLRD 指令用于 从程序 存储 器读取数据并 放入 数据
RAM 。表读操 作 每次从程序 存 储器 读取 一 个字节。
图 6-4 : 读 闪存 程序存 储器
程序存 储 器
(偶 字节地址 )
TBLPTR 指向 程序存 储空间的 某 个字节地址 。执 行
TBLRD 指令将把 指 向的 字节装入 TABLAT。此外,还 可
以自动修 改 TBLPTR 以进行 下一次表读 操 作。
内部程序 存储 器通常 以字 为单位进行 组织 。由地址 的最
低 有效 位 来选择字 的高字节 或者 低字节 。图 6-4 显示了
内部程序存储器和 TABLAT 之间的接 口。
( 奇 字节 地址 )
TBLPTR = xxxxx1
TBLPTR = xxxxx0
指令寄存器
(IR)
FETCH
例 6-1 : 读闪存程序 存储 器的一个字
MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base
MOVWF TBLPTRU ; address of the word
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
READ_WORD
TBLRD*+ ; read into TABLAT and increment
MOVF TABLAT, W ; get data
MOVWF WORD_EVEN
TBLRD*+ ; read into TABLAT and increment
MOVFW TABLAT, W ; get data
MOVF WORD_ODD
TBLRD
TABLAT
读寄存器
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 77 页
PIC18F2423/2523/4423/4523
6.4 擦除闪存程序 存 储器
最 小 擦 除 块 大小为 32 个字 或 64 字节 。只有通过 使用 外
部编程 器,或通过 ICSP™ 控制 ,才 能够批 量擦除 更大
的程序 存储 器块 。闪存阵列 不支 持字擦除 。
当单片机本身 开始一 个擦除 过程时,会 擦除一 个 64 字
节的 程序存 储器 块。 16 个最高有效 位 TBLPTR<21:6>
指向要 擦除的 块。 TBLPTR<5:0> 被 忽略 。
擦除 操作由 EECON1 寄 存器 控制。必须 将 EEPGD 位
置 1 以指 向 闪存程序 存 储 器。 WREN 位必须 被置 1 以使
能写操 作。 FREE 位被置 1 以选择擦除 操 作。
为了安全起见 ,必须 使用 EECON2 的写启动序列 。
擦 除内部闪存 必 须执 行 长写操 作。在长 写周期 中, 指令
暂停执 行。由内部 编程定时器终 止 长写操作。
例 6-2 : 擦 除闪存 程序存 储器的一 行
MOVLW CODE_ADDR_UPPER ; load TBLPTR with the base
MOVWF TBLPTRU ; address of the memory block
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
ERASE_ROW
BSF EECON1, EEPGD ; point to Flash program memory
BCF EECON1, CFGS ; access Flash program memory
BSF EECON1, WREN ; enable write to memory
BSF EECON1, FREE ; enable Row Erase operation
BCF INTCON, GIE ; disable interrupts
MOVLW 55h
MOVWF EECON2 ; write 55h
必 需的 序列 MOVLW 0AAh
MOVWF EECON2 ; write 0AAh
BSF EECON1, WR ; start erase (CPU stall)
BSF INTCON, GIE ; re-enable interrupts
6.4.1 闪存程序存 储器 擦除 序列
擦除内部 程序存 储器 块的 步骤如下:
1. 将要擦除 的行 地址装入 表指 针寄 存器。
2. 设置 EECON1 寄存器 来 执行擦 除操作:
• 将 EEPGD 位置 1 以指向 程序 存储 器;
• 将 CFGS 位清零 以访问程序 存储 器;
• 将 WREN 位置 1 以使能写操 作;
• 将 FREE 位置 1 以使能擦除 操 作。
3. 禁止中 断。
4. 向 EECON2 写入 55h。
5. 向 EECON2 写入 0AAh。
6. 将 WR 位置 1 。这将开始行擦除 周期 。
7. CPU 在擦除 期间 将会暂停 工作 ( 使用内部定时
器定时 约 2ms)。
8. 重新允 许中 断。
DS39755A_CN 第 78 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
6.5 写闪存 程序存 储器
最小 编程块大小为 16 个字或 32 字节。不 支持 字或 字节
编程。
在内部使用表写 命令 将需 要写入 闪存存储 器的内容装入
保持寄 存器中。表写操 作使用 32 个 保持寄 存器进行编
程 。
由于表锁 存器 (TABLAT)只是单 字节寄存器,所以对
于每次编程操 作, TBLWT 指令都必须 执 行 32 次 。因为
只 写保持 寄 存器,所以所有的表写操作 实际 上都是 短
写。更新 32个 保持寄 存器后,必须写 EECON1 寄存器,
以便 启动长 写周期开始编程操 作。
图 6-5 : 对闪存 程序存 储器的 表 写操作
8
保持 寄 存器 保持 寄 存器 保持 寄 存器 保持 寄 存器
8 8 8
TBLPTR = x xxx x2
对内部闪存 编程要 求 使用 长写操 作。在 长写周期 中, 指
令暂 停执 行。由内部 编程定时器终 止长 写操作。
由 EEPROM 片 上定时器 控制写入的时 间。 写入 / 擦 除
电压由片 上的 电荷泵产生, 该电荷泵可以工作在器件的
电压范 围内。
注: 器件 复位和 写操作 完成后保持 寄 存器的 默
认值为 FFh 。将 FFh 写入保持寄 存器不会
修 改其中的 值 。这意 味着 可以单 独修 改程
序存 储器的各字节 ( 假如不是 想 把 任何位
从 0 更 改为 1 )。当单独修改字节时, 无需
在执行写操 作前装入所有 32 个保持 寄 存
器。
TABLAT
写寄存器
TBLPTR = xxxx1F TBLPTR = xxxxx1 TBLPTR = xxxxx0
6.5.1 写入闪存 程序存 储器的 过程
对内部程序 存储 单元 的编程 的过程 为:
1. 将 64 字节读 入 RAM。
2. 必要时更新 RAM 中的数据值 。
3. 把要擦除 的目 标地址装入 表指 针寄 存器。
4. 执行行擦 除。
5. 将要写入 的第一个字节 的地址 装入表指针 寄 存
器。
6. 表指针 递减 1。
7. 将 32 个字节写入保持寄 存器 (预递增 )。
8. 设置 EECON1 寄存器来 执行写操作:
• 将 EEPGD 位置 1 以指向 程序 存储 器;
• 将 CFGS 位清零 以访问程序 存储 器;
• 将 WREN 位置 1 以使能字节写操 作。
程序存 储器
9. 禁止中 断。
10. 向 EECON2 写入 55h。
11. 向 EECON2 写入 0AAh。
12. 将 WR 位置 1 。这将开始写周期 。
13. CPU 在写入期间 将会暂停 工作 ( 使用内部定时
器定时 约 2ms)。
14. 重新允 许中 断。
15. 重复从步骤 6 开始的 操作 写入剩余的 32个字节。
16. 校验存储 器 ( 表读)。
此 过程需 要 大约 6ms以更新存储 器的一 行 64 字节。
例 6-3 给出了所 需代码 的示 例。
注: 在将 WR 位 置 1 前 , 表指 针 必须指 向 保持
寄存器中的 32 个字节 的地 址范围 内。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 79 页
PIC18F2423/2523/4423/4523
例 6-3: 写 闪存 程序 存 储 器
MOVLW D’64’ ; number of bytes in erase block
MOVWF COUNTER
MOVLW BUFFER_ADDR_HIGH ; point to buffer
MOVWF FSR0H
MOVLW BUFFER_ADDR_LOW
MOVWF FSR0L
MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base
MOVWF TBLPTRU ; address of the memory block
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW ; 6 LSB = '0'
MOVWF TBLPTRL
READ_BLOCK
TBLRD*+ ; read into TABLAT, and inc
MOVF TABLAT, W ; get data
MOVWF POSTINC0 ; store data
DECFSZ COUNTER, F ; done?
BRA READ_BLOCK ; repeat
MODIFY_WORD
MOVLW DATA_ADDR_HIGH ; point to buffer
MOVWF FSR0H
MOVLW DATA_ADDR_LOW
MOVWF FSR0L
MOVLW NEW_DATA_LOW ; update buffer word
MOVWF POSTINC0
MOVLW NEW_DATA_HIGH
MOVWF INDF0
ERASE_BLOCK
MOVLW CODE_ADDR_UPPER ; load TBLPTR with the base
MOVWF TBLPTRU ; address of the memory block
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
BSF EECON1, EEPGD ; point to Flash program memory
BCF EECON1, CFGS ; access Flash program memory
BSF EECON1, WREN ; enable write to memory
BSF EECON1, FREE ; enable Row Erase operation
BCF INTCON, GIE ; disable interrupts
MOVLW 55h
必 需的 MOVWF EECON2 ; write 55h
序列 MOVLW 0AAh
MOVWF EECON2 ; write 0AAh
BSF EECON1, WR ; start erase (CPU stall)
BSF INTCON, GIE ; re-enable interrupts
TBLRD*- ; dummy read - decrement pointer
MOVLW BUFFER_ADDR_HIGH ; point to buffer
MOVWF FSR0H
MOVLW BUFFER_ADDR_LOW
MOVWF FSR0L
WRITE_BUFFER_BACK1 ; write first 32 bytes to Flash
MOVLW D’32’ ; number of bytes in holding register
MOVWF COUNTER
WRITE_BYTE_TO_HREGS1
MOVFF POSTINC0,WREG ; get low byte of buffer data
MOVWF TABLAT ; present data to table latch
TBLWT+* ; short write to holding
; register using pre-increment
DECFSZ COUNTER ; loop until buffers are full
BRA WRITE_BYTE_TO_HREGS1
DS39755A_CN 第 80 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
例 6-3: 写 闪存 程序 存 储 器 (续)
PROGRAM_MEMORY1
BSF EECON1, EEPGD ; point to Flash program memory
BCF EECON1, CFGS ; access Flash program memory
BSF EECON1, WREN ; enable write to memory
BCF INTCON, GIE ; disable interrupts
MOVLW 55h
必 需的 MOVWF EECON2 ; write 55h
序列 MOVLW 0Aah
MOVWF EECON2 ; write 0AAh
BSF EECON1, WR ; start program (CPU stall)
BSF INTCON, GIE ; re-enable interrupts
BCF EECON1, WREN ; disable write to memory
WRITE_BUFFER_BACK2 ; write remaining 32 bytes to Flash
MOVLW D’32’ ; number of bytes in holding register
MOVWF COUNTER
WRITE_BYTE_TO_HREGS2
MOVFF POSTINC0, WREG ; get low byte of buffer data
MOVWF TABLAT ; present data to table latch
TBLWT+* ; short write to holding
; register using pre-increment
DECFSZ COUNTER, F ; loop until buffers are full
BRA WRITE_BYTE_TO_HREGS2
PROGRAM_MEMORY2
BSF EECON1, EEPGD ; point to Flash program memory
BCF EECON1, CFGS ; access Flash program memory
BSF EECON1, WREN ; enable write to memory
BCF INTCON, GIE ; disable interrupts
MOVLW 55h
必 需的 MOVWF EECON2 ; write 55h
序列 MOVLW 0AAh
MOVWF EECON2 ; write 0AAh
BSF EECON1, WR ; start program (CPU stall)
BSF INTCON, GIE ; re-enable interrupts
BCF EECON1, WREN ; disable write to memory
6.5.2 写校验
根 据具体 应用,将 写入 存 储 器的 值 与原 始值校验 比 对是
一个很好 的编程习惯 。在应用中,如果某 些位的写次 数
接近 规定极 限 值 , 就 应 该 采用 写 校验 。
6.5.3 意外终 止写操 作
如果由于意外 事件 (如掉 电 或意外复 位)终 止 了写操
作,应该 对刚刚编程的存储 单元进行 验 证,如有必 要,
还 要 重 新 进行编程。当写操作在 正常操 作 过程中因
复位或 WDT 超 时 复位而中 断时,用 户可以 检查
MCLR
WRERR 位,并根 据需 要重写该 存储 单元 。
6.5.4 防止误 写操作的保护 措施
为防止 对闪存程序 存储 器意外误 写操 作,必须遵循写操
作的启动序列 。在例 6-3 中,“必 需的序列”通过使用
5 条指令的特定序列来 防 止 存储 器 被 意外 误 写。 必 须正
确执行 所示序列 ,否则写操 作不会发生。
6.6 代码保护期间 闪存 程序 存 储 器的 操作
其他保护措施 可通过 使用第 23.5 节 “程序校验和代码
保护” 中描 述的代码保护功能来实现 。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 81 页
PIC18F2423/2523/4423/4523
表 6-2 : 与闪存 程序 存 储 器相关的 寄 存器
名称
TBLPTR U
TBPLTRH
TBLPTRL
TABLAT
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 49
EECON2
EECON1 EEPGD CFGS
IPR2 OSCFIP CMIP — EEIP BCLIP HLVDIP TMR3IP CCP2IP 52
PIR2 OSCFIF CMIF — EEIF BCLIF HLVDIF TMR3IF CCP2IF 52
PIE2
图 注: — = 未 实现, 读 为 0 。闪存 /EEPROM 访问期间 不使用阴影 单 元 。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
— —b i t 2 1
程序存 储器表 指针 高字节 (TBLPTR<15:8> )
程序存 储器表 指针 低字节 (TBLPTR<7:0> )
程序存 储器表 锁存器
EEPROM 控制寄存器 2 (不是实际 存在的寄 存器 )
OSCFIE CMIE — EEIE BCLIE HLVDIE TMR3IE CCP2IE 52
程序 存储 器 表指针最高字节 (TBLPTR<20:16>)
— FREE WRERR WREN WR RD 51
复 位值
所在页
49
49
49
49
51
DS39755A_CN 第 82 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
7.0 数据 EEPROM 存储 器
数据 EEPROM 是 非易失 性的存 储 器 阵列 , 独立 于数据
RAM 和程序 存储 器,用于程序 数据的长期 存储 。它并不
直接 映射到 寄 存器文件或程序 存 储空间 ,而是 通过 特 殊
功能寄 存器 (SFR )来间接寻址 。在整个 V
的正常运行期间 , EEPROM 是可读写 的。
有 5 个 SFR 用于读写 数据 EEPROM 以及程序 存储 器,
它们是:
• EECON1
• EECON2
• EEDATA
• EEADR
数据 EEPROM 允 许以字节 为单位读写 。当 与数据存储
器接 口时,EEDATA存放 8 位读写 数据,而 EEADR 寄
存器存放被访问 的 EEPROM 存储 单元 的地址 。
EEPROM 数据存储 器 具 有 高耐 擦写次 数。 字节写操作会
自动擦 除目 标存储 单 元 并写入新数据 ( 在 写入 前擦
除) 。 写入时 间由片 上定时器 控制,其 值根据 电压、 温
度和不同的 芯片而不同。具体 的限制值 ,请参 见 D122
( 第 26.0 节“电 气特性 ”中的表 26-1 )。
7.1 EEADR 寄存器
EEADR 寄存器用于寻址 数据 EEPROM 以进行读 写操
作。8 位的寄 存器可寻址 256 字节(00h 至 FFh )的存
储 器范围 。
7.2 EECON1 和 EECON2 寄存器
DD 范围 内
EECON1 寄存器( 寄存器 7-1)是数据和 程序存 储器 访
问的 控制寄存器。 控制位 EEPGD 决 定 访问程序闪存存
储器还 是数据 EEPROM 存 储器。清零 时, 操作将 访问
数据 EEPROM 存储 器。置 1 时,则访问程序 闪存存储
器。
控制 位CFGS决 定 访问 配置寄存器 还 是 程序 闪存存 储 器
/ 数据 EEPROM 存储 器。置 1 时,后续操 作会访问配置
寄 存器。而当 CFGS 清零 时, 则 由 EEPGD 位 来选择具
体访问程序闪存存 储器还 是数据 EEPROM 存 储器。
当 WREN 位置 1 时,允许进行写操作。上电时,WREN
位被清零 。 WRERR 位在 WR 位被置 1 时由硬 件置 1 ,
在内部编程 定时器定时结束 和写操 作结束 时被清零 。
注: 在正常操 作期间 ,WRERR 可能会读 为 1 。
这表 明写操 作被复 位提早终止 或进行了不
合法的写操 作。
WR 控制位用于 启动写操 作。用 软 件只 能将 该 位置 1 而
无法清零 。在 写操作 完成后,由 硬件将其清零 。
注: 当写操作 完成 时, EEIF 中 断 标志 位
(PIR2<4> )被置 1。它 必须用 软件清零 。
控制位 RD 和 WR 分别 启动读和 擦写操作。这些位由固
件 置 1 ,并在 操作 完成时由 硬件 清零 。
当访问程序存 储器(EEPGD = 1 )时,RD 位无法置 1 。
程序存储器是通过 表读 指令读取的。关于 表读的信息,
请参 见 第 6.1 节“表读与 表 写”。
EECON2 寄存器不是实际 存在的寄 存器。它专 用于存 储
器写 和擦除 过程 。读 EECON2 将得到 全 0 。
对数据 EEPROM 的访问 由 EECON1 和 EECON2 两
个寄存器 控制。它们 也用 来控制对 程序存 储器的访问,
访问这 两种存 储器时对这 两个寄存器的使用方法类似。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 83 页
PIC18F2423/2523/4423/4523
寄 存器 7-1: EECON1: EEPROM 控制 寄 存器 1
R/W-x R/W-x U-0 R/W-0 R/W-x R/W-0 R/S-0 R/S-0
EEPGD CFGS — FREE WRERR
bit 7 bit 0
(1)
WREN WR RD
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
EEPGD :闪存程序 存 储 器或数据 EEPROM 存 储 器 选择 位
1 = 访问闪存 程序存 储器
0 = 访问数据 EEPROM 存 储器
CFGS:闪存程序 存储 器 / 数据 EEPROM 存储 器或配置寄 存器选择 位
1 = 访问配置寄存器
0 = 访问闪存 程序存 储器或数据 EEPROM 存 储器
未 实现: 读 为 0
FREE:闪存行擦除 使能位
1 = 在下一条 WR 命令 时擦除 TBLPTR 寻址 的程序 存储 器行(擦除操作 完成后 清零)
0 = 仅执行写操 作
WRERR:闪存程序 存储 器 / 数据 EEPROM 存储 器错误 标志 位
1 = 写操作提早终 止(由于正常操 作中自定时编程期间 的任何复 位,或不合法的写操 作)
0 = 写操作 完成
WREN:闪存程序 存储 器 / 数据 EEPROM 存储 器写 使能位
1 = 允许对闪存程序 存储 器 / 数据 EEPROM 存储 器的写周期
0 = 禁止对闪存 程序存 储器 / 数据 EEPROM 存 储器的 写周期
WR:写控制位
1 = 启动数据 EEPROM 擦写周期或 程序存 储 器的 擦 除 周期 或 写周期 (操作是自定时的,一旦写操 作 完
成, 该位即 由 硬件清零 。 用软件只 能将 WR 位置 1,但不能清零 。)
0 = EEPROM 写周期完成
RD :读控制位
1 = 启动 EEPROM 读操 作(读操 作 需 要一个周期 。 RD 位由硬件 清零。用 软 件 只能将 RD 位 置 1 ,但不能
清零。 EEPGD = 1 或 CFGS = 1 时, RD 位无 法 置 1。)
0 = 不启动 EEPROM 读 操 作
S = 可设置 位
(1)
注 1 : 当发生 WRERR 时, EEPGD 和 CFGS 位不会 清零 。这 样 可以跟踪 错 误状 况。
DS39755A_CN 第 84 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
7.3 读数据 EEPROM 存储 器
要读取 数据存储 单元 ,用户必须 将地址写入 EEADR 寄
存器,清零 EEPGD 控制 位 (EECON1<7> ),然 后将
控制位 RD (EECON1<0> )置 1。可在下一 个指令周
期访问该数据; 因此,EEDATA 寄存器可由下一 条指令
读取 。EEDATA 将把 此 值 保存 至 下一 次读取 或用 户向 该
存储 单元写入 数据时 (写操 作) 为止 。
基 本过程 如 例 7-1 中所示。
7.4 写数据 EEPROM 存储 器
要向 EEPROM 数据存储 单元写入 数据,必须首先 将地
址 写入 EEADR 寄 存器,并将数据写入 EEDATA 寄存
器。必须遵循 例 7-2 中的序列启动写周期 。
如果没有 完 全遵循该指令序列 ( 即 首先将 55h 写入
EECON2 ,随后将 0AAh 写入 EECON2 , 最后将 WR 位
置 1)写 每个字节,将不会 启动写操作。强烈 建议在这
个 代码段执 行期间 禁止 中 断 。
例 7-1 : 读数据 EEPROM
MOVLW DATA_EE_ADDR ;
MOVWF EEADR ; Data Memory Address to read
BCF EECON1, EEPGD ; Point to DATA memory
BCF EECON1, CFGS ; Access EEPROM
BSF EECON1, RD ; EEPROM Read
MOVF EEDATA, W ; W = EEDATA
此外 ,必须将 EECON1 中的 WREN 位 置 1 以使能写操
作。这种 机制 可防止 由于意外执 行 代码 (即 程序失控)
导致 误 写 数据 EEPROM。 除了更新 EEPROM 时以 外 ,
WREN位应始终 保持清零 。WREN位不会被硬 件清零 。
一个写序列启动 后,EECON1 、EEADR和 EEDATA不
能被修改 。除非 将 WREN 位置 1 ,否则 将禁止 WR 位
被置 1。 WR 和 WREN 不能由同一指令 置 1。
写周期完成后,WR位由硬件清零 并且 EEPROM中断标
志 位 EEIF 被置 1 。用 户 可以 允 许此中 断 或 查询 此位。
EEIF 必须用软 件 清零。
7.5 写校验
根 据具体 应用,将 写入 存 储 器的 值 与原 始值校验 比 对是
一个很好 的编程习惯 。在应用中,如果某 些位的写次 数
接近额定极 限值 ,就 应该 采用写 校验。
例 7-2 : 写 数据 EEPROM
MOVLW DATA_EE_ADDR ;
MOVWF EEADR ; Data Memory Address to write
MOVLW DATA_EE_DATA ;
MOVWF EEDATA ; Data Memory Value to write
BCF EECON1, EEPGD ; Point to DATA memory
BCF EECON1, CFGS ; Access EEPROM
必 需的 序列 MOVWF EECON2 ; Write 0AAh
BSF EECON1, WREN ; Enable writes
BCF INTCON, GIE ; Disable Interrupts
MOVLW 55h ;
MOVWF EECON2 ; Write 55h
MOVLW 0AAh ;
BSF EECON1, WR ; Set WR bit to begin write
BSF INTCON, GIE ; Enable Interrupts
; User code execution
BCF EECON1, WREN ; Disable writes on write complete (EEIF set)
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 85 页
PIC18F2423/2523/4423/4523
7.6 代码保护期间 的操 作
数据 EEPROM 存储 器在配置字 中有它自己 的代码保护
位。如果使能任一种 代码保护机制 ,外 部读写操 作就被
禁 止。
单片机本身可以读写 内部数据 EEPROM ,与代码保护
配置 位的状态 无关。更多 信息,请参 见 第 23.0 节“ CPU
的特殊 功能”。
7.8 使用数据 EEPROM
数据 EEPROM 是高耐 用性可字节寻址 的阵列 ,已 将其
优化以便存 储频繁 变动的信息 (例如,程序变量或其他
经常更新的数据 )。 频繁 变动值的更新 频率通常高于规
范 D124 中的规定。如果情况并 非 如此, 必须 执 行阵 列
刷新。因此,只是偶尔改变 的变 量( 如常 量、ID 和 校准
值 等) 应 该 存 储 在闪存 程序 存 储 器中。
简 单的数据 EEPROM 刷新 程序 如 例 7-3 中所示。
7.7 防止误 写操 作的保护 措 施
注: 如果数据 EEPROM 仅用于存储常 量和 / 或
有些情况下,用户 并不希望写入 数据 EEPROM 存储 器。
为了防止 EEPROM 误 写操 作,器件实现 了各种 保护机
制 。上电时,WREN 位 被清零 。而 且 , 上电 延时定时 期
PWRT,参数 33)也 会阻止 对 EEPROM 进行写操
间( T
作。
在欠压 、电源毛刺 或软 件故 障期间 ,写操 作的启动序列
以及 WREN 位可共 同防止 意外写操 作的发生。
例 7-3 :数据 EEPROM 刷新程序
CLRF EEADR ; Start at address 0
BCF EECON1, CFGS ; Set for memory
BCF EECON1, EEPGD ; Set for Data EEPROM
BCF INTCON, GIE ; Disable interrupts
Loop ; Loop to refresh array
BSF EECON1, WREN ; Enable writes
BSF EECON1, RD ; Read current address
MOVLW 55h ;
MOVWF EECON2 ; Write 55h
MOVLW 0AAh ;
MOVWF EECON2 ; Write 0AAh
BSF EECON1, WR ; Set WR bit to begin write
BTFSC EECON1, WR ; Wait for write to complete
BRA $-2
INCFSZ EEADR, F ; Increment address
BRA LOOP ; Not zero, do it again
很少 改变 的数据,没有 必 要 执 行 阵 列 刷
新。请参见 规范 D124 。
BCF EECON1, WREN ; Disable writes
BSF INTCON, GIE ; Enable interrupts
DS39755A_CN 第 86 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
表 7-1 : 与数据 EEPROM 存 储 器相关的 寄 存器
名称
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 49
EEADR
EEDATA
EECON2
EECON1 EEPGD CFGS
IPR2 OSCFIP CMIP — EEIP BCLIP HLVDIP TMR3IP CCP2IP 52
PIR2
PIE2 OSCFIE CMIE — EEIE BCLIE HLVDIE TMR3IE CCP2IE 52
图 注: — = 未 实现, 读 为 0 。闪存 /EEPROM 访问 时不使用阴影 单 元 。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 B it 2 Bit 1 Bit 0
EEPROM 地址寄 存器
EEPROM 数据寄 存器
EEPROM 控制寄存器 2 (不是实际 存在的寄 存器 )
— FREE WRERR WREN WR RD 51
OSCFIF CMIF — EEIF BCLIF HLVDIF TMR3IF CCP2IF 52
复 位值
所在页
51
51
51
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 87 页
PIC18F2423/2523/4423/4523
注:
DS39755A_CN 第 88 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
8.0 8 x 8 硬件 乘法器
8.1 简介
所有 PIC18 器件均包含一个 8 x 8 硬 件乘 法器(是 ALU
的一部分)。该乘 法器可执行无 符号运算 并产生一个 16
位 运 算 结 果,该结 果存储 在一对乘 积 寄 存器
PRODH:PRODL 中。该乘法器 执 行 的 运算 不会影响
STA TUS寄存器中的任何标志 。
通过硬 件执 行乘 法运 算只 需 要一个指令周期 。硬 件乘 法
器具 有更高 的计算吞吐量并减少 了乘 法算 法 的代码长
度 ,从 而可在许 多先前 仅能使用数 字 信 号处 理器的应用
中使用 PIC18 器件。表 8-1 给出了硬 件和软 件乘 法运 算
的比较 ,包括所需 存储空间 和执行 时间 。
8.2 工作原理
例 8-1 给 出了一 个 8 x 8 无 符 号乘 法 运 算 的指令序列。 当
已在 WREG 寄 存器中装入了一个乘数时,实现该运算仅
需一条 指令。
例 8-2 给 出了一个 8 x 8 有符 号乘法 运 算 的指令序列。要
弄清参数的符号 位, 必 须检查每 个参数的 最 2007 高有
效位 (MSb ),并做 相应的减 法。
例 8-1 : 8 x 8 无 符号乘 法程序
MOVF ARG1, W ;
MULWF ARG2 ; ARG1 * ARG2 ->
; PRODH:PRODL
例 8-2 : 8 x 8 有符号乘 法程序
MOVF ARG1, W
MULWF ARG2 ; ARG1 * ARG2 ->
; PRODH:PRODL
BTFSC ARG2, SB ; Test Sign Bit
SUBWF PRODH, F ; PRODH = PRODH
; - ARG1
MOVF ARG2, W
BTFSC ARG1, SB ; Test Sign Bit
SUBWF PRODH, F ; PRODH = PRODH
; - ARG2
表 8-1 :各 种乘法 运 算的性能 比较
程序 乘法实现 方法
8 x 8 无符 号
8 x 8 有符号
16 x 16 无符 号
16 x 16 有符号
非硬件 乘法
硬件 乘法
非硬件 乘法
硬件 乘法
非硬件 乘法
硬件 乘法
非硬件 乘法
硬件 乘法
程序
存 储器
(字)
13 69 8.63 µ s2 7 . 6 µs6 9 µs
1 1 125 ns 400 ns 1 µs
33 91 11.4 µ s3 6 . 4 µs9 1 µs
6 6 750 ns 2.4 µs6 µs
21 242 30.3 µ s9 6 . 8 µs 242 µs
28 28 3.5 µs 11.2 µ s2 8 µs
52 254 31.8 µ s1 0 2 . 6 µs 254 µs
35 40 5.0 µs1 6 . 0 µs4 0 µs
周期数
(最多)
32 MHz 时 10 MHz 时 4 MHz 时
时间
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 89 页
PIC18F2423/2523/4423/4523
例 8-3 给 出了一个 16 x 16 无 符 号乘 法 运 算 的指令序列 。
公式 8-1 为所使用的算 法。32 位结 果存储 在 4 个寄 存器
( RES3:RES0 ) 中。
公式 8-1 : 16 x 16 无 符号乘 法算 法
RES3:RES0 = ARG1H:ARG1L • ARG2H:ARG2L
= (ARG1H • ARG2H • 2
(ARG1H • ARG2L • 2
(ARG1L • ARG2H • 2
(ARG1L • ARG2L)
16
) +
8
) +
8
) +
例 8-3 : 16 x 16 无 符号乘 法程序
MOVF ARG1L, W
MULWF ARG2L ; ARG1L * ARG2L->
MOVFF PRODH, RES1 ;
MOVFF PRODL, RES0 ;
;
MOVF ARG1H, W
MULWF ARG2H ; ARG1H * ARG2H->
MOVFF PRODH, RES3 ;
MOVFF PRODL, RES2 ;
;
MOVF ARG1L, W
MULWF ARG2H ; ARG1L * ARG2H->
MOVF PRODL, W ;
ADDWF RES1, F ; Add cross
MOVF PRODH, W ; products
ADDWFC RES2, F ;
CLRF WREG ;
ADDWFC RES3, F ;
;
MOVF ARG1H, W ;
MULWF ARG2L ; ARG1H * ARG2L->
MOVF PRODL, W ;
ADDWF RES1, F ; Add cross
MOVF PRODH, W ; products
ADDWFC RES2, F ;
CLRF WREG ;
ADDWFC RES3, F ;
例 8-4 给 出了 16 x 16 有符 号乘 法 运 算 的指令序列 。
公式 8-2 为所使用的算 法。32 位结 果存储 在 4 个寄 存
器 (RES3:RES0 ) 中。要弄清乘 数的符号 位,必须检
查每 个乘数的最高 有效 位 ( MSb ) ,并做 相应的 减 法。
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
公式 8-2 : 16 x 16 有符号乘 法算 法
RES3:RES0 = ARG1 H:ARG1L • ARG2H:ARG2L
= (ARG1H • ARG2H • 2
(ARG1H • ARG2L • 2
(ARG1L • ARG2H • 2
(ARG1L • ARG2L) +
(-1 • ARG2H<7> • ARG1H:ARG1L • 2
(-1 • ARG1H<7> • ARG2H:ARG2L • 2
16
) +
8
) +
8
) +
16
16
例 8-4 : 16 x 16 有符号乘 法程序
MOVF ARG1L, W
MULWF AR G2L ; ARG1L * ARG2L ->
MOVFF PRODH, RES1 ;
MOVFF PRODL, RES0 ;
;
MOVF ARG1H, W
MULWF AR G2H ; ARG1H * ARG2H ->
MOVFF PRODH, RES3 ;
MOVFF PRODL, RES2 ;
;
MOVF ARG1L, W
MULWF AR G2H ; ARG1L * ARG2H ->
MOVF PRODL, W ;
ADDWF RES1, F ; Add cross
MOVF PRODH, W ; products
ADDWFC RES2, F ;
CLRF WREG ;
ADDWFC RES3, F ;
;
MOVF ARG1H, W ;
MULWF AR G2L ; ARG1H * ARG2L ->
MOVF PRODL, W ;
ADDWF RES1, F ; Add cross
MOVF PRODH, W ; products
ADDWFC RES2, F ;
CLRF WREG ;
ADDWFC RES3, F ;
;
BTFSS ARG2H, 7 ; ARG2H:ARG2L neg?
BRA SIGN_ARG1 ; no, check ARG1
MOVF ARG1L, W ;
SUBWF RES2 ;
MOVF ARG1H, W ;
SUBWFB RES3
;
SIGN_ARG1
BTFSS ARG1H, 7 ; ARG1H:ARG1L neg?
BRA CONT_CODE ; no, done
MOVF ARG2L, W ;
SUBWF RES2 ;
MOVF ARG2H, W ;
SUBWFB RES3
;
CONT_CODE
:
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
) +
)
DS39755A_CN 第 90 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
9.0 中断
PIC18F2423/2523/4423/4523 器件具有多个 中断源 及
中断优先 级功能,该 功能可以给每个 中断源 分配高优先
级或者低优先 级。高优先 级中断向 量位于 0008h ,低优
先级中 断向量位于 0018h 。 高优先级中 断事件可以中 断
正在 处理的 低优先级中 断。
有 10 个寄 存器用于 控制 中 断操 作。这些 寄 存器是:
• RCON
•INTCON
• INTCON2
• INTCON3
•PIR1和 PIR2
•PIE1和 PIE2
•IPR1和 IPR2
®
建议使用随 MPLAB
名这些寄 存器中的位。这使得汇编 器 / 编 译器能够 自动
识别指 定寄 存器内的这些位。
通常 ,中断源 有 3 个 位用于控制 其操 作。这些位的功能
分别 是:
• 标志 位 表明发生了中断 事件
• 允许位 允许程序跳 转到 中断 向量地 址处 执行(当
标 志 位 置 1 时 )
• 优先级位用于选择高优先 级还 是低优先 级
通过 将 IPEN 位 ( RCON<7> ) 置 1,可使能中 断优先 级
功能。当使能中断优先级时,有 2 个全局 中断允许位。将
GIEH 位 ( INTCON<7> )置 1,可 允 许所有 优先 级位 已
置 1 (高优先 级) 的中断 。将 GIEL 位 ( INTCON<6>)
置 1,可 允许所有优先级位 已 清零(低优先 级)的中断。
当 中断 标志位、允许位及相应的全局中断允许位均被置 1
时,中断将根 据优先级位的设置立即 跳转到地址 0008h
或0018h 。也可以通过设 置相应的中 断允许位来禁 止各个
中断 。
IDE 提供的 Microchip 头文件命
当 IPEN 位清零 ( 默 认 状态 ) 时,便会禁 止 中断优先 级
功能,此时中断 是与 PIC
模 式 下,各 个 中 断源 的中断优先 级位不起作用。
INTCON<6> 是 PEIE 位,用于允 许 / 禁止 所有的 外设中
断源。 INTCON<7> 是 GIE 位,用于允 许 / 禁 止所有中
断源。在兼 容 模式下,所有中 断均 跳转 到 0008h 。
当响应中 断时,全局 中 断允许位被清零 以 禁 止其他中
断。清零 后的 IPEN 位 就是 GIE 位。如果使用了中 断优
先级,这 个位 就是 GIEH 位或者 GIEL 位。 高优先级中
断源会中 断低优先级中 断。在 处理 高优先级中 断时, 低
优先级中 断将不被响 应。
返回 地址被压入 堆栈 ,中 断向 量地 址(0008h 或 0018h )
被装入 PC 。 只要在中断 服务程序 中,就 可以通过查询
中 断标 志 位 来确定中 断源。在 重新 允 许中 断前, 必须 用
软件将中 断标志 位清零 ,以避 免 重复响应中 断。
执 行“从中断返回 ”指令 RETFIE 将 退 出中 断程序 ,同
时将 GIE 位(若使用中 断优先级则 为 GIEH 或 GIEL 位)
置 1,从 而 重 新 允 许中断 。
对于外 部中断 事件,例 如 INT 引脚中断 或者 PORTB 输
入电平变化中 断,中 断响应 延时将会是 3 到 4 个指令周
期。对于单 周期或 双周期指令,中 断响应 延时 完全相
同。各中断 标志 位的置 1 不受 对应的中断允 许位和 GIE
位状态 的影响 。
注: 当允许 任何中断 时,不要使用 MOVFF 指令
修 改中断控制 寄 存器。否则 可能导致单片
机操 作出错。
®
中档系列 器件兼 容的。在兼 容
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 91 页
PIC18F2423/2523/4423/4523
图 9-1: PIC18 中 断 逻辑
TMR0IF
TMR0IE
TMR0IP
RBIF
RBIE
RBIP
INT0IF
INT0IE
INT1IF
INT1IE
INT1IP
INT2IE
INT2IP
IPEN
PEIE/GIEL
INT2IF
产生高优先 级中断
产生低优先 级中断
ADIF
ADIE
ADIP
RCIF
RCIE
RCIP
SSPIF
SSPIE
SSPIP
ADIF
ADIE
ADIP
RCIF
RCIE
RCIP
SSPIF
SSPIE
SSPIP
其他外设 中断
其他外设 中断
IPEN
TMR0IF
TMR0IE
TMR0IP
RBIF
RBIE
RBIP
INT1IF
INT1IE
INT1IP
INT2IF
INT2IE
INT2IP
IPEN
GIE/GIEH
PEIE/GIEL
如果 处于 空闲或
休眠模式则 唤醒
到 CPU 的中 断
跳转 到
0008h
GIE/GIEH
到 CPU 的中 断
跳转 到
0018h
DS39755A_CN 第 92 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
9.1 INTCON 寄存器
INTCON 寄存器是可读 写的 寄 存器,包含各个 中 断允 许
位、优先 级位和标志 位。
注: 当中断条件产生时,不管相应的中 断允许
位或全局中断允 许位的状态 如何,中断 标
志 位都 将 置 1 。中 断 标 志 位可由软 件 查询 。
用户软 件应在允 许一个 中断前 ,先将相应的
中断 标志 位清零;否则只要允 许了中断 ,就
会产生中断。
寄 存器 9-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
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
注 1: 电平的不匹配 会不 断 地将 该 位置 1 。 读取 PORTB 可以 结 束不 匹 配情况,并将 该 位清零 。
GIE/GIEH:全局 中断允 许位
当 IPEN = 0 时:
1 = 允许所有未 被屏蔽的中断
0 = 禁止所有中 断
IPEN = 1 时:
当
1 = 允许所有高优先 级中断
0 = 禁止所有中 断
PEIE/GIEL: 外设中 断允许位
IPEN = 0 时:
当
1 = 允许所有未 被屏蔽的外设 中断
0 = 禁止所有 外设中 断
当
IPEN = 1 时:
1 = 允许所有低优先 级的外设 中断
0 = 禁止所有 低优先级的 外设中 断
TMR0IE: TMR0 溢出中断 允许位
1 = 允许 TMR0 溢出中断
0 = 禁止 TMR0 溢出中断
INT0IE: INT0 外部中 断允许位
1 = 允许 INT0 外 部中断
0 = 禁止 INT0 外部中 断
RBIE: RB端口电平变化 中断 允许位
1 = 允许 RB 端口电平变化 中断
0 = 禁止 RB 端口电平变化 中断
TMR0IF: TMR0 溢出中断 标志 位
1 = TMR0 寄存器已 溢出 ( 必须用软 件 清零)
0 = TMR0 寄存器未 溢出
INT0IF: INT0 外部中 断标志 位
1 = 发生了 INT0 外 部中断(必须用软 件 清零)
0 = 未发生 INT0 外部中 断
RBIF: RB端口电平变化 中断 标志 位
1 = RB7:RB4 引脚中至少 有一个 引脚的电平状态 发生了改变 (必须 用软 件清零)
0 = RB7:RB4 引脚电平状态没 有改变
(1)
(1)
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 93 页
PIC18F2423/2523/4423/4523
寄 存器 9-2: INTCON2:中 断控制 寄 存器 2
R/W-1 R/W-1 R/W-1 R/W-1 U-0 R/W-1 U-0 R/W-1
RBPU
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
INTEDG0 INTEDG1 INTEDG2 —T M R 0 I P—R B I P
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
注: 当中 断 条件产生时,不管相应的中断允 许位或全 局 中 断允 许位的 状态 如何,中 断 标 志 位 都 将 置 1 。中 断 标 志
RBPU
:PORTB 上拉使能位
1 = 禁止所有 PORTB 上拉
0 = 根据各端 口锁 存值 使能 PORTB 上拉
INTEDG0:外部中 断 0 边沿 选择位
1 = 上升沿 触发中 断
0 = 下降沿触 发中断
INTEDG1:外部中 断 1 边沿 选择位
1 = 上升沿 触发中 断
0 = 下降沿触 发中断
INTEDG2:外部中 断 2 边沿 选择位
1 = 上升沿 触发中 断
0 = 下降沿触 发中断
未 实现: 读 为 0
TMR0IP: TMR0 溢出中断优先 级位
1 = 高优先级
0 = 低优先级
未 实现: 读 为 0
RBIP: RB端口电平变化 中断优先 级位
1 = 高优先级
0 = 低优先级
位可由软 件查询 。
用户软 件应在允 许一个 中断前 ,先 将相应的中断 标志 位清零;否则只 要允 许了中断 ,就 会产生中断 。
DS39755A_CN 第 94 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
寄 存器 9-3: INTCON3:中 断控制 寄 存器 3
R/W-1 R/W-1 U-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0
INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
注: 当中 断 条件产生时,不管相应的中断允 许位或全 局 中 断允 许位的 状态 如何,中 断 标 志 位 都 将 置 1 。中 断 标 志
INT2IP : INT2 外部中 断优先 级位
1 = 高优先级
0 = 低优先级
INT1IP: INT1 外部中 断优先级位
1 = 高优先级
0 = 低优先级
未 实现: 读 为 0
INT2IE: INT2 外部中 断允许位
1 = 允许 INT2 外 部中断
0 = 禁止 INT2 外部中 断
INT1IE: INT1 外部中 断允许位
1 = 允许 INT1 外 部中断
0 = 禁止 INT1 外部中 断
未 实现: 读 为 0
INT2IF: INT2 外部中 断标志 位
1 = 发生了 INT2 外部中 断(必须用软 件 清零)
0 = 未发生 INT2 外部中 断
INT1IF: INT1 外部中 断标志 位
1 = 发生了 INT1 外部中 断(必须用软 件 清零)
0 = 未发生 INT1 外部中 断
位可由软 件查询 。
用户软 件应在允 许一个 中断前 ,先 将相应的中断 标志 位清零;否则只 要允 许了中断 ,就 会产生中断 。
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 95 页
PIC18F2423/2523/4423/4523
9.2 PIR 寄存器
PIR 寄存器包含各外设 中 断 的标 志 位。 根 据 外设 中 断源
的数 量,有两个外设 中断 请 求 标 志寄 存器 (PIR1 和
PIR2 )。
注 1 : 当中断条件产生时,不管相应的中断允许
位或全局 中断允 许位 GIE (INTCON<7> )
的状态 如何,中断 标志 位都 将置 1 。
2: 用户软件应在 允 许中 断前 和 处 理 完 中 断
后,将相应的中断 标志 位清零 。
寄 存器 9-4 : PIR1 : 外设 中 断 请 求 (标志 ) 寄 存器 1
R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0
(1)
PSPIF
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
PSPIF :并行从动端 口 读 / 写 中 断 标 志 位
1 = 发生了读 或写操 作 (必须 用软 件清零)
0 = 未发生读 或 写操作
ADIF: A/D转换 器中断 标志 位
1 =A/D转换完成 (必须 用软 件清零)
0 =A/D转换未完成
RCIF: EUSART接收中断 标志 位
1 =EUSART接收缓冲器 RCREG 满 ( 读取 RCREG 时 清零)
0 =EUSART接收缓冲器为空
TXIF: EUSART 发送 中断 标志 位
1 =EUSART发送缓冲 器 TXREG 空 (写入 TXREG 时清零 )
0 =EUSART发送缓冲 器满
SSPIF:主同步串行 口中断 标志 位
1 = 发送 / 接收完成 ( 必须 用软 件清零)
0 = 等待发 送 / 接收
CCP1IF :CCP1 中 断标 志 位
捕捉模式:
1 = 发生了 TMR1 寄 存器捕捉(必须用 软件清零 )
0 = 未发生 TMR1 寄 存器 捕捉
比较模式:
1 = 发生了 TMR1 寄 存器的比较匹配 (必须 用软 件清零)
0 = 未发生 TMR1 寄 存器的 比较匹配
PWM
在此 模 式下 未 使用。
TMR2IF : TMR2 与 PR2 匹配中断 标 志 位
1 =TMR2与 PR2 匹配(必须用 软件清零 )
0 =TMR2与 PR2 未 发生匹配
TMR1IF: TMR1 溢出中断 标志 位
1 =TMR1寄存器 溢出 ( 必须用软 件 清零)
0 =TMR1寄存器未 溢出
模式:
(1)
注 1 : 该位在 28 引脚器件 上未 实现, 读 为 0 。
DS39755A_CN 第 96 页 初稿 2007 Microchip Technology Inc.
PIC18F2423/2523/4423/4523
寄 存器 9-5: PIR2: 外设 中 断 请 求 (标志 ) 寄 存器 2
R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
OSCFIF CMIF — EEIF BCLIF HLVDIF TMR3IF CCP2IF
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
OSCFIF:振荡器 失效中 断标志 位
1 = 系统振荡器 失效, 改成由 INTOSC 作为时 钟输入 (必须用 软件清零 )
0 = 系统时 钟正常运行
CMIF:比较器中 断标志 位
1 = 比较器 输入已改变 (必须用 软件清零 )
0 = 比较器 输入未变化
未 实现: 读 为 0
EEIF:数据 EEPROM/ 闪存写操 作中断 标志 位
1 = 写操作 完成 (必须用 软件清零 )
0 = 写操作 未完成或尚 未开始
BCLIF:总线冲突中 断标志 位
1 = 发生了总线冲突 (必须 用软 件清零)
0 = 未发生 总线冲突
HLVDIF:高 / 低压检测中 断标志 位
1 = 发生了高 / 低压条 件 ( 方向 由 VDIRMAG 位 HLVDCON<7> 决定)
0 = 未发生 高 / 低压条件
TMR3IF: TMR3 溢出中断 标志 位
1 =TMR3寄存器 溢出 ( 必须用软 件 清零)
0 =TMR3寄存器未 溢出
CCP2IF :CCP2 中 断标 志 位
捕捉模式:
1 = 发生了 TMR1 寄 存器捕捉 (必须 用软 件清零)
0 = 未发生 TMR1 寄 存器 捕捉
比较模式:
1 = 发生了 TMR1 寄 存器的比较匹配 (必须 用软 件清零)
0 = 未发生 TMR1 寄 存器的 比较匹配
PWM
在此 模式下不使用。
模式:
2007 Microchip Technology Inc. 初稿 DS39755A_CN 第 97 页
PIC18F2423/2523/4423/4523
9.3 PIE 寄存器
PIE 寄存器包含各外设 中 断 的 允 许位。根 据 外设 中 断源
的数量,有两个外设 中断允 许寄 存器(PIE1 和 PIE2 )。
当 IPEN = 0 时,要允许任一 外设 中 断 ,必须 将 PEIE 位
置 1。
寄存器 9-6 : PIE1 :外设 中断 允许 寄存器 1
R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0
(1)
PSPIE
bit 7 bit 0
图注:
R = 可读 位 W = 可写 位 U = 未实现位, 读为 0
-n = POR 值 1 = 置 10 = 清零 x = 未知
ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
PSPIE :并行从动端 口 读 / 写 中 断允 许位
1 = 允许 PSP 读 / 写中 断
0 = 禁止 PSP 读 / 写中 断
ADIE: A/D转换 器中断允 许位
1 = 允许 A/D 中断
0 = 禁止 A/D 中 断
RCIE: EUSART接收中断 允许位
1 = 允许 EUSART 接收中断
0 = 禁止 EUSART 接收中断
TXIE: EUSART发送 中断允 许位
1 = 允许 EUSART 发 送中断
0 = 禁止 EUSART 发 送中断
SSPIE:主同步串行 口中断允 许位
1 = 允许 MSSP 中断
0 = 禁止 MSSP 中 断
CCP1IE:CCP1 中断允 许位
1 = 允许 CCP1 中断
0 = 禁止 CCP1 中 断
TMR2IE: TMR2 与 PR2 匹配中断 允许位
1 = 允许 TMR2 与 PR2 匹 配中断
0 = 禁止 TMR2 与 PR2 匹 配中断
TMR1IE: TMR1 溢出中断 允许位
1 = 允许 TMR1 溢出中断
0 = 禁止 TMR1 溢出中断
(1)
注 1 : 该位在 28 引脚器件 上未 实现, 读 为 0 。
DS39755A_CN 第 98 页 初稿 2007 Microchip Technology Inc.