PIC18F45J10 系列
数据手册
采用纳瓦技术的 28/40/44 引脚
高性能 RISC 单片机
2005 Microchip Technology Inc. 高级信息 DS39682A_CN
请注意以下有关 Microchip 器件代码保护功能的要点:
•M i c r o c h i p的产品均达到 Microchip 数据手册中所述的技术指标。
•M i c r o c h i p确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。
• 目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的
操作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。
•M i c r o c h i p愿与那些注重代码完整性的客户合作。
•M i c r o c h i p或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视
为违反了 《数字器件千年版权法案 (Digital Millennium Copyright Act )》。如果这种行为导致他人在未经授权的情况下,能访问您的
软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
提供本文档的中文版本仅为了便于理解。Microchip
Technology Inc. 及其分公司和相关公司、各级主管与员工及
事务代理机构对译文中可能存在的任何差错不承担任何责任。
建议参考 Microchip Technology Inc. 的英文原版文档。
本出版物中所述的器件应用信息及其他类似内容仅为您提供便
利,它们可能由更新之信息所替代。确保应用符合技术规范,
是您自身应负的责任。Microchip 对这些信息不作任何明示或
暗示、书面或口头、法定或其他形式的声明或担保,包括但不
限于针对其使用情况、质量、性能、适销性或特定用途的适用
性的声明或担保。 Microchip 对因这些信息及使用这些信息而
引起的后果不承担任何责任。未经 Microchip 书面批准,不得
将 Microchip 的产品用作生命维持系统中的关键组件。在
Microchip 知识产权保护下,不得暗中或以其他方式转让任何
许可证。
商标
Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron、
dsPIC、 K
EEL OQ、 microID 、 MPLAB、 PIC、 PICmicro、
PICSTART、 PRO MATE、 PowerSmart、 rfPIC 和
SmartShunt 均为 Microchip Technology Inc. 在美国和其他国
家或地区的注册商标。
AmpLab、 FilterLab、 Migratable Memory、 MXDEV、
MXLAB、 PICMASTER、 SEEVAL、 SmartSensor 和 The
Embedded Control Solutions Company 均为 Microchip
Technology Inc. 在美国的注册商标。
Analog-for-the-Digital Age、 Application Maestro、
dsPICDEM、 dsPICDEM.net、 dsPICworks、 ECAN、
ECONOMONITOR、 FanSense、 FlexROM、 fuzzyLAB、
In-Circuit Serial Programming、 ICSP、 ICEPIC、 Linear
Active Thermistor、 MPASM、 MPLIB、 MPLINK、 MPSIM、
PICkit、 PICDEM、 PICDEM.net、 PICLAB、 PICtail、
PowerCal、 PowerInfo、 PowerMate、 PowerTool、 Real
ICE、 rfLAB、 rfPICDEM、 Select Mode、 Smart Serial、
SmartTel、 Total Endurance、 UNI/O、 WiperLock 和 Zena
均为 Microchip Technology Inc . 在美国和其他国家或地区的
商标。
SQTP 是 Microchip Technology Inc. 在美国的服务标记。
在此提及的所有其他商标均为各持有公司所有。
© 2005, Microchip Technology Inc . 版权所有。
Microchip
州
10
位单片机、
性存储器和模拟产品方面的质量体系流程均符合
16949:2002
系也已通过了
位于美国亚利桑那州
Mountain View
月通过了
ISO/TS-16949:2002
KEE LOQ
。此外,
ISO 9001:2000
的全球总部、设计中心和晶圆生产厂均于
®
跳码器件、串行
Microchip
Chandler和Tem pe
质量体系认证。公司在
EEPROM
在开发系统的设计和生产方面的质量体
认证。
及位于加利福尼亚
PICmicro
、单片机外设、非易失
ISO/TS-
2003
年
®
DS39682A_CN 第 ii 页 高级信息 2005 Microchip Technology Inc.
8
PIC18F45J10 系列
采用纳瓦技术的 28/40/44 引脚
高性能 RISC 单片机
单片机的特殊性能:
• 工作电压范围:2.0V 至 3.6V
• 可接受 5.5V 输入 (仅数字引脚)
• 片上 2.5V 稳压器
• 低功耗的高速 CMOS 闪存技术
• 优化的 C 编译器架构:
- 为优化重入代码而设计的可选的扩展指令集
• 中断优先级
• 8 x 8 单周期硬件乘法器
• 扩展的看门狗定时器 ( Watchdog Timer, WDT):
- 可编程周期从 4ms到 131s
• 通过两个引脚进行单电源供电的在线串行编程
( In-Circuit Serial Programming™, ICSP™)
• 通过两个引脚采用三个断点进行在线调试 (In-
Circuit Debug, ICD)
• 功耗管理模式:
- 运行: CPU 打开,外设打开
- 空闲: CPU 关闭,外设打开
- 休眠: CPU 关闭,外设关闭
灵活的振荡器结构:
• 两种晶振模式,频率最高为 40 MHz
• 两种外部时钟模式,频率最高为 40MHz
• 内部 31 kHz 振荡器
• 辅助振荡器使用 Timer1 (工作频率为 32kHz)
• 双速振荡器起振
• 故障保护时钟监视器:
- 当外设时钟停止时可使器件安全关闭
外设特点:
• 高灌 / 拉电流 25 mA/25 mA (PORTB 和 PORTC)
• 3 个可编程外部中断
• 4 个输入电平变化中断
• 一个捕捉 / 比较 /PWM (CCP)模块
• 一个增强型捕捉 / 比较 /PWM (ECCP)模块:
-1路、 2 路或 4 路 PWM 输出
- 可选择的极性
- 可编程的死区时间
- 自动关闭和自动重启
• 2 个主控同步串行端口 ( Master Synchronous
Serial Port, MSSP)模块,支持 3 线 SPI (共 4
种模式)和 I
• 一个增强型可寻址 USART 模块:
- 支持 RS-485、 RS-232 和 LIN 1.2
- 起始位自动唤醒
- 自动波特率检测
• 10 位最多 13 路通道的数 / 模转换器模块 (A/D):
- 自动采集功能
- 可在休眠模式下进行转换
- 自动校准功能
• 输入复用的双模拟比较器
2
C™ 主 / 从模式
程序存储器
器件
PIC18F24J10 16K 8192 1024 21 10 2/0 1
PIC18F25J10 32K 16384 1024 21 10 2/0 1
PIC18F44J10 16K 8192 1024 32 13 1/1 2
PIC18F45J10 32K 16384 1024 32 13 1/1 2
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 1 页
闪存
(字节)单字指令数
SRAM 数据
存储器
(字节)
I/O
10 位
A/D
(通道数)
CCP/
ECCP
( PWM)
MSSP
主控
SPI
2
C™
I
有有
有有
有有
有有
比较器
EUSART
121 / 2
121 / 2
121 / 2
121 / 2
8/16 位
定时器
PIC18F45J10 系列
引脚图
28 引脚 SPDIP 、SOIC 和 SSOP (300 MIL )
RA2/AN2/V
RA5/AN4/SS1/C2OUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2*
* 引脚功能取决于器件配置。
28 引脚 QFN
MCLR
RA0/AN0
RA1/AN1
REF-/CV REF
RA3/AN3/VREF+
VDDCORE /VCAP
V
OSC1/CLKI
OSC2/CLKO
RC2/CCP1
RC3/SCK1/SCL1
PIC18F25J10
28
27
26
25
24
23
22
21
20
19
18
17
16
15
RB7/KBI3/PGD
RB6/KBI2/PGC
RB5/KBI1/T0CKI/C1OUT
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/SDO1
RC4/SDI1/SDA1
1
2
3
4
5
6
7
SS
8
9
10
11
12
13
14
PIC18F24J10
RA2/AN2/VREF -/CVREF
RA5/AN4/SS1/C2OUT
* 引脚功能取决于器件配置。
RA3/AN3/VREF +
V
DDCORE/V CAP
V
OSC1/CLKI
OSC2/CLKO
RB7/KBI3/PGD
RB6/KBI2/PGC
RB5/KBI1/T0CKI/C1OUT
MCLR
RA0/AN0
RA1/AN1
1
2
3
PIC18F24J10
4
SS
PIC18F25J10
5
6
7
10 11
9
8
RC2/CCP1
RC1/T1OSI/CCP2*
RC0/T1OSO/T1CKI
RB4/KBI0/AN11
22
23 24 25 26 27 28
21
20
19
18
17
16
15
12 13 14
RC5/SDO1
RC6/TX/CK
RC4/SDI1/SDA1
RC3/SCK1/SCL1
RB3/AN9/CCP2*
RB2/INT2/AN8
RB1/INT1/AN10
RB0/INT0/FLT0/AN12
V
DD
VSS
RC7/RX/DT
DS39682A_CN 第 2 页 高级信息 2005 Microchip Technology Inc.
引脚图 (续)
40 引脚 PDIP(600 MIL)
PIC18F45J10 系列
RA2/AN2/V
RA5/AN4/SS1/C2OUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2*
RC3/SCK1/SCL1
RD0/PSP0/SCK2/SCL2
RD1/PSP1/SDI2/SDA2
* 引脚功能取决于器件配置。
44 引脚 QFN
MCLR
RA0/AN0
RA1/AN1
REF-/C VREF
RA3/AN3/VREF +
V
DDCORE/V CAP
RE0/RD
/AN5
RE1/WR
/AN6
/AN7
RE2/CS
V
DD
VSS
OSC1/CLKI
OSC2/CLKO
RC2/CCP1/P1A
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PIC18F44J10
PIC18F45J10
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
RB7/KBI3/PGD
RB6/KBI2/PGC
RB5/KBI1/T0CKI/C1OUT
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/SDO1
RC4/SDI1/SDA1
RD3/PSP3/SS2
RD2/PSP2/SDO2
RB0/INT0/FLT0/AN12
* 引脚功能取决于器件配置。
RC7/RX/DT
RD4/PSP4
RD5/PSP5/P1B
RD6/PSP6/P1C
RD7/PSP7/P1D
RB1/INT1/AN10
RB2/INT2/AN8
V
AVDD
VDD
RD2/PSP2/SDO2
RD1/PSP1/SDI2/SDA2
RD0/PSP0/SCK2/SCL2
RC3/SCK1/SCL1
RC2/CCP1/P1A
RC1/T1OSI/CCP2*
37
RA0/AN0
363435
RA1/AN1
RC0/T1OSO/T1CKI
33
32
31
30
29
28
27
26
25
24
23
REF-/CV REF-
RA3/AN3/VREF +
RA2/AN2/V
OSC2/CLKO
OSC1/CLKI
V
SS
AVSS
VDD
AVDD
RE2/CS/AN7
RE1/WR
/AN6
RE0/RD
/AN5
RA5/AN4/SS1
V
DDCORE/V CAP
/C2OUT
RC6/TX/CK
RC5/SDO1
RC4/SDI1/SDA1
RD3/PSP3/SS2
414039
42
44
43
1
2
3
4
5
SS
PIC18F44J10
6
PIC18F45J10
7
8
9
10
11
121314
NC
RB3/AN9/CCP2*
RB4/KBI0/AN11
15
16
RB6/KBI2/PGC
RB5/KBI1/T0CKI/C1OUT
38
1819202122
17
MCLR
RB7/KBI3/PGD
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 3 页
PIC18F45J10 系列
引脚表 (续)
44 引脚 TQFP
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
SS
RC6/TX/CK
RC5/SDO1
44
43
1
2
3
4
5
PIC18F44J10
6
PIC18F45J10
7
8
9
10
11
121314
RC4/SDI1/SDA1
RD3/PSP3/SS2
RD2/PSP2/SDO2
RD1/PSP1/SDI2/SDA2
RD0/PSP0/SCK2/SCL2
RC3/SCK1/SCL1
38
16
17
1819202122
37
414039
42
15
RC2/CCP1/P1A
RC1/T1OSI/CCP2*
NC
363435
33
32
31
30
29
28
27
26
25
24
23
NC
RC0/T1OSO/T1CKI
OSC2/CLKO
OSC1/CLKI
V
SS
VDD
RE2/CS/AN7
/AN6
RE1/WR
RE0/RD
/AN5
RA5/AN4/SS1
V
DDCORE/V CAP
/C2OUT
* 引脚功能取决于器件配置。
NC
NC
RB4/KBI0/AN11
RB6/KBI2/PGC
RB5/KBI1/T0CKI/C1OUT
RB7/KBI3/PGD
MCLR
RA0/AN0
RA1/AN1
REF-/CV REF-
RA3/AN3/VREF +
RA2/AN2/V
DS39682A_CN 第 4 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
目录
1.0 器件概述 ....................................................................................................................................................................................... 7
2.0 振荡器配置 ................................................................................................................................................................................. 23
3.0 功耗管理模式 .............................................................................................................................................................................. 31
4.0 复位 ............................................................................................................................................................................................ 37
5.0 存储器构成 ................................................................................................................................................................................. 47
6.0 闪存程序存储器 .......................................................................................................................................................................... 67
7.0 8 x 8 硬件乘法器......................................................................................................................................................................... 77
8.0 中断 ............................................................................................................................................................................................ 79
9.0 I/O 端口 ...................................................................................................................................................................................... 93
10.0 Timer0 模块 .............................................................................................................................................................................. 111
11.0 Timer1 模块 .............................................................................................................................................................................. 115
12.0 Timer2 模块 .............................................................................................................................................................................. 121
13.0 捕捉 / 比较 /PWM ( CCP)模块 ............................................................................................................................................... 123
14.0 增强型捕捉 / 比较 /PWM ( ECCP)模块 ................................................................................................................................. 131
15.0 主控同步串口 ( MSSP)模块 .................................................................................................................................................. 145
16.0 增强型通用同步 / 异步收发器 ( EUSART).............................................................................................................................. 187
17.0 10 位模数转换器 ( A/D)模块 .................................................................................................................................................. 209
18.0 比较器模块 ............................................................................................................................................................................... 219
19.0 比较器参考电压源模块 ............................................................................................................................................................. 225
20.0 CPU 的特殊性能 ....................................................................................................................................................................... 229
21.0 指令集综述 ............................................................................................................................................................................... 241
22.0 开发支持 ................................................................................................................................................................................... 291
23.0 电气规范 ................................................................................................................................................................................... 297
24.0 DC 和 AC 特性图表 .................................................................................................................................................................. 331
25.0 封装信息 ................................................................................................................................................................................... 333
附录 A :版 本 历 史........................................................................................................................................................................ 343
附录 B : 高档器件系列间的移植................................................................................................................................................... 343
索引................................................................................................................................................................................................... 345
Microchip 网站.................................................................................................................................................................................... 355
客户变更通知服务 .............................................................................................................................................................................. 355
客户支持............................................................................................................................................................................................. 355
读者反馈............................................................................................................................................................................................. 356
PIC18F45J10 系列产品标识体系 ....................................................................................................................................................... 357
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 5 页
PIC18F45J10 系列
致客户
我们旨在提供最佳文档供客户正确使用 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 上注册。
DS39682A_CN 第 6 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
1.0 器件概述
该文档包含以下器件特定的信息:
• PIC18F24J10 • PIC18LF24J10
• PIC18F25J10 • PIC18LF25J10
• PIC18F44J10 • PIC18LF44J10
• PIC18F45J10 • PIC18LF45J10
PIC18F45J10 系列除了具有 PIC18单片机的传统优点,
即出色的计算性能和经济实惠的价格之外,还引进了一
些增强的功能,使其成为许多高性能、低功耗应用的理
想选择。
1.1 新的内核特性
1.1.1 纳瓦技术
PIC18F45J10 系列的所有器件都具有一系列能显著降
低工作功耗的特性。主要包括以下几项:
• 备用运行模式:通过将 Timer1 或内部振荡器模块
作为单片机时钟源,可使代码执行时的功耗大约降
低 90% 。
• 多种空闲模式:单片机还可在其 CPU 内核禁止而
外设工作的情况下运行。处于这些状态时,功耗能
降得更低,只有正常工作需求的 4% 。
• 动态模式切换:在器件工作期间可由用户代码调用
该功耗管理模式,允许用户将节能的理念融入到他
们的应用软件设计中。
• 关键模块低功耗: Timer1 和看门狗定时器的功耗
需求最低。 请参见第 23.0 节 “电气规范” 了解具
体数值。
1.1.2 振荡器选项和特性
PIC18F45J10系列的所有器件提供 3种不同的振荡器选
项,包括:
• 一个晶振模式,使用晶振或陶瓷谐振器
• 一个外部时钟模式
• INTRC 时钟源 (约 31 kHz)
除了可用作时钟源外,内部振荡器模块还提供了一个稳
定的参考源,用以实现下列额外的功能以使器件更安全
可靠地工作:
• 故障保护时钟监视器:该部件不停地监视主时钟
源,将其与内部振荡器提供的参考信号作比较。如
果发生了时钟故障,单片机会切换到内部振荡器模
块,使器件可继续低速工作或安全关闭。
• 双速启动:该功能允许在上电复位或从休眠模式唤
醒时将内部振荡器用作时钟源,直到主时钟源可用
为止。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 7 页
PIC18F45J10 系列
1.2 其他特殊性能
• 通信:PIC18F45J10 系列包含了一系列串行通信
外设,包括一个独立增强型 USART 和 2 个主控
SSP 模块,具备 SPI 和 I 2C (主控和从动)两种
工作模式。 此外,一个通用 I/O 端口可以被重新配
置为 8 位并行从动端口,实现处理器到处理器的
直接通信。
• 自编程性:这些器件能在内嵌软件控制下对各自的
程序存储空间进行写操作。通过使用引导加载子程
序,可以创建能够实现现场自我更新的应用程序。
• 扩展指令集:PIC18F45J10 系列在 PIC18 指令集
的基础上进行了扩展,添加了 8 条新指令和变址
寻址模式。此扩展可以使用一个器件配置选项使
能,它是为优化重入代码而特别设计的,这些代码
是使用高级语言 (如 C 语言)开发的。
• 增强型 CCP 模块:在 PWM 模式下,该模块提供
1、 2 或 4 路调制输出来控制半桥和全桥驱动器。
其他功能包括自动关闭 (自动关闭能在中断或其
他条件下禁止 PWM 输出)和自动重启 (自动重
启能在禁止条件被清除时再次激活输出)。
• 增强型可寻址 USART :该串行通信模块可进行标
准的 RS-232 通信并支持 LIN 总线协议。 其他增强
功能包括自动波特率检测和精度更高的 16 位波特
率发生器。
• 10 位 A/D 转换器:该模块实现了可编程采集时
间,从而不必在选择通道和启动转换之间等待一个
采样周期,因而减少了代码开销。
• 扩展的看门狗定时器 (WDT ): 该增强的看门狗
定时器添加了 16 位预分频器,扩展了超时周期范
围,该超时周期在整个工作电压和温度范围内保持
稳定。 请参见第 23.0 节 “电气规范”了解超时周
期。
1.3 系列中各产品的具体信息
PIC18F45J10 系列器件具有 28 引脚和 40/44 引脚两种
封装形式。图 1-1 和图 1-2 分别为这两类器件的框图。
这两类器件在以下 5 个方面存在差异:
1. 闪存程序存储器 ( PIC18F24J10/44J10 器件为
16KB, PIC18F25J10/45J10 为 32KB)。
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 引脚器件)。
6. PIC18F24J10/25J10 器件具备 1 个 MSSP 模块,
PIC18F44J10/45J10 器件具备 2 个 MSSP 模块。
7. 器件编号中带 “ F”的器件 (如 PIC18F 25J10)
DD 最小值可为 2.8 V,而器件编号中带“LF”
的 V
的器件 (如 PIC18LF 25J10 )能在 2.0-3.6 V 的
DD 范围内工作,但是 VDDCORE 决不能超过
V
VDD 。
该系列器件的其他功能都是相同的。表 1-1 汇总了这些
功能。
表 1-2 和表 1-3 列举了所有器件的引脚排列方式。
PIC18F45J10 系列器件具有片内稳压器,可向内核提供
稳定的电平。器件编号中带有“F”的器件(如
PIC18F 25J10)使能了稳压器。这些器件能在 2.7-3.6 V
DD 范围内运行,但是要在 V DDCORE 引脚和 V SS 引
的 V
脚之间连接低 ESR 的电容。 器件编号中带 “LF”的器
件(如PIC18LF 24J10 )没有使能稳压器。 应给VDDCORE
引脚施加 2.0-2.7 V 的电压,而给 VDD 引脚施加 2.0-3.6 V
的电压(VDDCORE 决不能超过 VDD )。请 参 见 第 20.3 节
“片内稳压器”了解内部稳压器的详细信息。
DS39682A_CN 第 8 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 1-1 : 器件特性
特性
工作频率 DC - 40 MHz DC - 40 MHz DC - 40 MHz DC - 40 MHz
程序存储器 (字节)
程序存储器 (指令)
数据存储器 (字节)
中断源
I/O 端口 端口 A 、 B 和 C 端口 A 、 B 和 C 端口 A 、B 、C 、D 和 E 端口 A 、B 、C 、D 和 E
定时器
捕捉 / 比较 /PWM 模块
增强型捕捉 / 比较 /PWM 模块
串行通信 MSSP ,
并行通信 (PSP ) 无无有有
10 位模数转换模块 10 路输入通道 10 路输入通道 13 路输入通道 13 路输入通道
复位 (和延迟) POR , BOR
可编程欠压复位 有 有 有 有
指令集 75 条指令;
封装 28 引脚 SPDIP
注 1 : PIC18LF2XJ10/4XJ10 器件不能使用欠压复位。
PIC18F24J10 PIC18F25J10 PIC18F44J10 PIC18F45J10
16384 32768 16384 32768
8192 16384 8192 16384
768 1536 768 1536
19 19 20 20
3333
2211
0011
增强型 USART
(1)
,
RESET 指令,
堆栈满,
堆栈下溢 (PWRT 和
OST),
MCLR
和 WDT
使能了扩展指令集
后总共为 83 条指令
28 引脚 SOIC
28 引脚 SSOP
28 引脚 QFN
MSSP,
增强型 USART
堆栈满,
OST ),
和 WDT
(1)
,
POR, BOR
RESET 指令,
堆栈下溢 (PWRT 和
MCLR
75 条指令;
使能了扩展指令集
后总共为 83 条指令
28 引脚 SPDIP
28 引脚 SOIC
28 引脚 SSOP
28 引脚 QFN
MSSP,
增强型 USART
堆栈满,
OST ),
和 WDT
(1)
,
POR, BOR
RESET 指令,
堆栈下溢 (PWRT 和
MCLR
75 条指令;
使能了扩展指令集
后总共为 83 条指令
40 引脚 PDIP
44 引脚 QFN
44 引脚 TQFP
MSSP,
增强型 USART
POR, BOR
RESET 指令,
堆栈满,
堆栈下溢 (PWRT 和
OST),
MCLR
75 条指令;
使能了扩展指令集
后总共为 83 条指令
40 引脚 PDIP
44 引脚 QFN
44 引脚 TQFP
(1)
和 WDT
,
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 9 页
PIC18F45J10 系列
图 1-1 : PIC18F24J10/25J10 (28 引脚)框图
表指针 <21>
加 / 减逻辑
地址锁存器
程序存储器
(16/32 KB )
数据锁存器
指令总线 <16>
VDDCORE
OSC1
OSC2
T1OSI
T1OSO
MCLR
V
DD,VSS
数据总线 <8>
8
8
PCLATH
20
8
内部
振荡器
模块
INTRC
振荡器
单电源
编程
在线
调试器
PCLATU
PCU
程序计数器
31 级堆栈
STKPTR
表锁存器
ROM 锁存器
IR
指令
解码和
控制
PCH PCL
状态机
控制信号
上电延时
定时器
振荡器
起振定时器
上电
复位
看门狗
定时器
欠压
复位
故障保护
时钟监视器
BITOP
(2)
21
数据锁存器
数据存储器
(1KB)
地址锁存器
数据地址 <12>
4
BSR
FSR0
FSR1
FSR2
加 / 减
逻辑
地址
译码
3
8
高精度
带隙
参考源
12
12
快速操作
存储区
PRODL PRODH
8 × 8 乘法器
W
8
8
ALU<8>
8
4
12
8
8
8
PORTA
RA0/AN0
RA1/AN1
RA2/AN2/VREF -/CVREF
RA3/AN3/VREF +
RA5/AN4/SS1
PORTB
RB0/INT0/FLT0/AN12
RB1/INT1/AN10
RB2/INT2/AN8
RB3/AN9/CCP2
RB4/KBI0/AN11
RB5/KBI1/T0CKI/C1OUT
RB6/KBI2/PGC
RB7/KBI3/PGD
PORTC
8
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK1/SCL1
RC4/SDI1/SDA1
RC5/SDO1
RC6/TX/CK
RC7/RX/DT
/C2OUT
(1)
(1)
EUSART比较器
10 位
ADC
(2)
BOR
CCP2 CCP1
注 1: 当配置位 CCP2MX 置 1 时, CCP2 与 RC1 复用;而当 CCP2MX 清零时, CCP2 与 RB3 复用。
2: PIC18LF2XJ10/4XJ10 器件不能使用欠压复位。
Timer2 Timer1 Timer0
MSSP
DS39682A_CN 第 10 页 高级信息 2005 Microchip Technology Inc.
图 1-2: PIC18F44J10/45J10 ( 40/44 引脚)框图
PIC18F45J10 系列
表指针 <21>
加 / 减逻辑
地址锁存器
程序存储器
(16/32 KB )
数据锁存器
指令总线 <16>
VDDCORE
OSC1
OSC2
T1OSI
T1OSO
MCLR
V
DD,
SS
V
数据总线 <8>
BSR
4
3
8
高精度
带隙
参考源
数据锁存器
数据存储器
(3.9 KB)
地址锁存器
12
数据地址 <12>
12
快速操作
FSR0
存储区
FSR1
FSR2
加 / 减
逻辑
地址
译码
PRODL PRODH
8 × 8 乘法器
W
8
8
ALU<8>
8
4
12
8
8
8
8
8
8
PCLATH
20
8
内部
振荡器
模块
INTRC
振荡器
单电源
编程
在线
调试器
PCLATU
PCU
程序计数器
31 级堆栈
表锁存器
ROM 锁存器
IR
指令
解码和
控制
PCH PCL
STKPTR
起振定时器
欠压
时钟监视器
状态机
控制信号
上电延时
定时器
振荡器
上电
复位
看门狗
定时器
复位
故障保护
BITOP
(2)
21
PORTA
PORTB
PORTC
PORTD
PORTE
RA0/AN0
RA1/AN1
RA2/AN2/VREF -/CVREF
RA3/AN3/VREF +
RA5/AN4/SS1
RB0/INT0/FLT0/AN12
RB1/INT1/AN10
RB2/INT2/AN8
RB3/AN9/CCP2
RB4/KBI0/AN11
RB5/KBI1/T0CKI/C1OUT
RB6/KBI2/PGC
RB7/KBI3/PGD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1/P1A
RC3/SCK1/SCL1
RC4/SDI1/SDA1
RC5/SDO1
RC6/TX/CK
RC7/RX/DT
RD0/PSP0/SCK2/SCL2
RD1/PSP1/SDI2/SDA2
RD2/PSP2/SDO2
RD3/PSP3/SS2
RD4/PSP4
RD5/PSP5/P1B
RD6/PSP6/P1C
RD7/PSP7/P1D
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
/C2OUT
(1)
(1)
EUSART比较器
10 位
ADC
(2)
BOR
CCP2 ECCP1
注 1: 当配置位 CCP2MX 置 1 时, CCP2 与 RC1 复用;而当 CCP2MX 清零时, CCP2 与 RB3 复用。
2: PIC18LF2XJ10/4XJ10 器件不能使用欠压复位。
Timer2 Timer1 Timer0
MSSP
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 11 页
PIC18F45J10 系列
表 1-2 : PIC18F24J10/25J10 I/O 引脚排列说明
引脚号
QFN
引脚类型缓冲器
类型
IS T
I
I-CMOS
O
-
O
-
说明
主清零 (输入)或编程电压 (输入)。
主清零 (复位)输入。此引脚为低电平时,器件复位。
振荡器晶振或外部时钟输入。
振荡器晶振输入或外部时钟源输入。
外部时钟源输入。总是与 OSC1 引脚功能复用。 请参见
相关的 OSC2/CLKO 引脚。
振荡器晶振或时钟输出。
振荡器晶振输出。在晶振模式下,该引脚与晶振或谐振
器相 连。
在 EC 模式下, OSC2 引脚输出 CLKO 振荡信号,该信
号是
OSC1 引脚上振荡信号的 4 分频,该频率等于指令周期的
倒数。
引脚名称
MCLR
MCLR
OSC1/CLKI
OSC1
CLKI
OSC2/CLKO
OSC2
CLKO
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 I=输入
O=输出 P=电源
注 1:当配置位 CCP2MX 置 1 时,对 CCP2 进行默认分配。
2:当配置位 CCP2MX 清零时,对 CCP2 进行其他分配。
SPDIP,
SOIC,
SSOP
12 6
96
10 7
DS39682A_CN 第 12 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 1-2 : PIC18F24J10/25J10 I/O 引脚排列说明 (续)
引脚号
QFN
引脚类型缓冲器
类型
I/OITTL
模拟
I/OITTL
模拟
I/O
TTL
I
模拟
I
模拟
O
模拟
I/O
TTL
I
模拟
I
模拟
I/O
TTL
I
模拟
I
TTL
O
-
说明
PORTA 是双向 I/O 端口。
数字 I/O 。
模拟输入 0 。
数字 I/O 。
模拟输入 1 。
数字 I/O 。
模拟输入 2 。
A/D 参考电压 (低电平端)输入。
比较器参考电压输出。
数字 I/O 。
模拟输入 3 。
A/D 参考电压 (高电平端)输入。
数字 I/O 。
模拟输入 4 。
SPI 从动选择输入。
比较器 2 输出。
引脚名称
RA0/AN0
RA0
AN0
RA1/AN1
RA1
AN1
RA2/AN2/V
RA2
AN2
V
CVREF
RA3/AN3/V
RA3
AN3
V
RA5/AN4/SS1
RA5
AN4
SS1
C2OUT
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
注 1 :当配置位 CCP2MX 置 1 时,对 CCP2 进行默认分配。
REF-/CV REF
REF-
REF+
REF+
/C2OUT
ST = CMOS 电平的施密特触发器输入 I=输入
O=输出 P=电源
2:当配置位 CCP2MX 清零时,对 CCP2 进行其他分配。
SPDIP,
SOIC,
SSOP
22 7
32 8
41
52
74
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 13 页
PIC18F45J10 系列
表 1-2 : PIC18F24J10/25J10 I/O 引脚排列说明 (续)
引脚号
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
ST
O
-
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 输出 /PWM2 输出。
数字 I/O 。
电平变化中断引脚。
模拟输入 11 。
数字 I/O 。
电平变化中断引脚。
Timer0 外部时钟输入。
比较器 1 输出。
数字 I/O 。
电平变化中断引脚。
在线调试器和 ICSP™ 编程时钟引脚。
数字 I/O 。
电平变化中断引脚。
在线调试器和 ICSP 编程数据引脚。
引脚名称
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/T0CKI/C1OUT
RB5
KBI1
T0CKI
C1OUT
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 进行其他分配。
SPDIP,
SOIC,
SSOP
21 18
22 19
23 20
24 21
25 22
26 23
27 24
28 25
DS39682A_CN 第 14 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 1-2 : PIC18F24J10/25J10 I/O 引脚排列说明 (续)
引脚号
QFN
引脚类型缓冲器
类型
I/O
ST
O
-
ST
I
I/O
ST
I
模拟
ST
I/O
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
I/O
I/O
-
ST
ST
I
ST
ST
- 逻辑电路和 I/O 引脚的参考地。
- 逻辑电路和 I/O 引脚的正电源。
P
-
P
-
说明
PORTC 是双向 I/O 端口。
数字 I/O 。
Timer1 振荡器输出。
Timer1 外部时钟输入。
数字 I/O。
Timer1 振荡器输入。
捕捉 2 输入 / 比较器 2 输出 /PWM2 输出。
数字 I/O 。
捕捉 1 输入 / 比较器 1 输出 /PWM1 输出。
数字 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 引脚)。
逻辑电路和 I/O 引脚的正电源。
逻辑电路和 I/O 引脚的参考地。
引脚名称
RC0/T1OSO/T1CKI
RC0
T1OSO
T1CKI
RC1/T1OSI/CCP2
RC1
T1OSI
(2)
CCP2
RC2/CCP1
RC2
CCP1
RC3/SCK1/SCL1
RC3
SCK1
SCL1
RC4/SDI1/SDA1
RC4
SDI1
SDA1
RC5/SDO1
RC5
SDO1
RC6/TX/CK
RC6
TX
CK
RC7/RX/DT
RC7
RX
DT
SS 8, 19 5, 16 P
V
DD 20 17 P
V
V
DDCORE/V CAP
VDDCORE
VCAP
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 I=输入
O=输出 P=电源
注 1:当配置位 CCP2MX 置 1 时,对 CCP2 进行默认分配。
2:当配置位 CCP2MX 清零时,对 CCP2 进行其他分配。
SPDIP,
SOIC,
SSOP
11 8
12 9
13 10
14 11
15 12
16 13
17 14
18 15
63
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 15 页
PIC18F45J10 系列
表 1-3 : PIC18F44J10/45J10 I/O 引脚排列说明
引脚名称
MCLR
MCLR
OSC1/CLKI
OSC1
CLKI
OSC2/CLKO
OSC2
CLKO
图注: 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
引脚类型缓冲器
类型
IS T
I
I-CMOS
O
O
-
-
说明
主清零 (输入)或编程电压 (输入)。
主清零 (复位)输入。此引脚为低电平时,器件复位。
振荡器晶振或外部时钟输入。
振荡器晶振输入或外部时钟源输入。
外部时钟源输入。总是与 OSC1 引脚功能复用。 参
见相关的 OSC2/CLKO 引脚。
振荡器晶振或时钟输出。
振荡器晶振输出。在晶振模式下,该引脚与晶振或
谐振器相连。
在 RC 模式下, OSC2 引脚输出 CLKO 振荡信号,
该信号是 OSC1 引脚上振荡信号的 4 分频,该频率等
于指令周期的倒数。
DS39682A_CN 第 16 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 1-3 : PIC18F44J10/45J10 I/O 引脚排列说明 (续)
引脚名称
RA0/AN0
RA0
AN0
RA1/AN1
RA1
AN1
RA2/AN2/V
RA2
AN2
V
CVREF
RA3/AN3/V
RA3
AN3
V
RA5/AN4/SS1/C2OUT
RA5
AN4
SS1
C2OUT
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
注 1 :当配置位 CCP2MX 置 1 时,对 CCP2 进行默认分配。
REF-/CV REF
REF-
REF+
REF+
ST = CMOS 电平的施密特触发器输入 I=输入
O=输出 P=电源
2 :当配置位 CCP2MX 清零时,对 CCP2 进行其他分配。
引脚号
PDIP QFN TQFP
21 91 9
32 02 0
42 12 1
52 22 2
72 42 4
引脚类型缓冲器
类型
I/OITTL
模拟
I/OITTL
模拟
I/O
TTL
I
模拟
I
模拟
O
模拟
I/O
TTL
I
模拟
I
模拟
I/O
TTL
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 。
模拟输入 4 。
SPI 从动选择输入。
比较器 2 输出。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 17 页
PIC18F45J10 系列
表 1-3 : PIC18F44J10/45J10 I/O 引脚排列说明 (续)
引脚名称
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/C1OUT
RB5
KBI1
C1OUT
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
ST
TTL
I
TTL
I
模拟
TTL
I
TTL
O
-
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 输出 /PWM2 输出。
数字 I/O 。
电平变化中断引脚。
模拟输入 11 。
数字 I/O 。
电平变化中断引脚。
比较器 1 输出。
数字 I/O 。
电平变化中断引脚。
在线调试器和 ICSP™ 编程时钟引脚。
数字 I/O 。
电平变化中断引脚。
在线调试器和 ICSP 编程数据引脚。
DS39682A_CN 第 18 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 1-3 : PIC18F44J10/45J10 I/O 引脚排列说明 (续)
引脚名称
RC0/T1OSO/T1CKI
RC0
T1OSO
T1CKI
RC1/T1OSI/CCP2
RC1
T1OSI
(2)
CCP2
RC2/CCP1/P1A
RC2
CCP1
P1A
RC3/SCK1/SCL1
RC3
SCK1
SCL1
RC4/SDI1/SDA1
RC4
SDI1
SDA1
RC5/SDO1
RC5
SDO1
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
O
O
-
I
ST
ST
I
CMOS
ST
ST
ST
-
ST
ST
ST
ST
I
ST
ST
-
ST
-
ST
ST
I
ST
ST
说明
PORTC 是双向 I/O 端口。
数字 I/O 。
Timer1 振荡器输出。
Timer1 外部时钟输入。
数字 I/O。
Timer1 振荡器输入。
捕捉 2 输入 / 比较器 2 输出 /PWM2 输出。
数字 I/O 。
捕捉 1 输入 / 比较器 1 输出 /PWM1 输出。
增强型 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 引脚)。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 19 页
PIC18F45J10 系列
表 1-3 : PIC18F44J10/45J10 I/O 引脚排列说明 (续)
引脚名称
RD0/PSP0/SCK2/
SCL2
RD0
PSP0
SCK2
SCL2
RD1/PSP1/SDI2/SDA2
RD1
PSP1
SDI2
SDA2
RD2/PSP2/SDO2
RD2
PSP2
SDO2
RD3/PSP3/SS2
RD3
PSP3
SS2
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/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/OSTTTL
I/O
I/O
I/O
I/O
I/O
I/O
ST
TTL
ST
ST
ST
TTL
I
ST
ST
ST
TTL
O
O
O
O
-
ST
TTL
I
TTL
ST
TTL
-
ST
TTL
-
ST
TTL
-
说明
PORTD 是双向 I/O 端口或与微处理器连接的并行从动
端口 (Parallel Slave Port , PSP )。当使能 PSP 模块
时,这些引脚具有 TTL 输入缓冲器。
数字 I/O 。
并行从动端口数据。
SPI 模式的同步串行时钟输入 / 输出。
2
C™ 模式的同步串行时钟输入 / 输出。
I
数字 I/O 。
并行从动端口数据。
SPI 数据输入。
2
C 数据 I/O。
I
数字 I/O 。
并行从动端口数据。
SPI 数据输出。
数字 I/O 。
并行从动端口数据。
SPI 从动选择输入。
数字 I/O 。
并行从动端口数据。
数字 I/O 。
并行从动端口数据。
增强型 CCP1 输出。
数字 I/O 。
并行从动端口数据。
增强型 CCP1 输出。
数字 I/O 。
并行从动端口数据。
增强型 CCP1 输出。
DS39682A_CN 第 20 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 1-3 : PIC18F44J10/45J10 I/O 引脚排列说明 (续)
引脚名称
RE0/RD/AN5
RE0
RD
AN5
RE1/WR
RE2/CS
V
VDD 11, 32 7, 8,
V
NC
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
注 1 :当配置位 CCP2MX 置 1 时,对 CCP2 进行默认分配。
/AN6
RE1
WR
AN6
/AN7
RE2
CS
AN7
SS 12, 31 6, 30,
DDCORE/V CAP
VDDCORE
VCAP
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
62 32 3
-
13 12, 13,
33, 34
引脚类型缓冲器
类型
PORTE 是双向 I/O 端口。
I/O
I/O
I/O
ST
I
TTL
I
模拟
ST
I
TTL
I
模拟
ST
I
TTL
I
模拟
- 逻辑电路和 I/O 引脚的参考地。
- 逻辑电路和 I/O 引脚的正电源。
P
P
- - 不连接。
-
-
数字 I/O 。
并行从动端口读控制。
(参见 WR
模拟输入 5 。
数字 I/O 。
并行从动端口写控制
(参见 CS
模拟输入 6 。
数字 I/O 。
并行从动端口片选控制。
(参见相关的 RD
模拟输入 7 。
逻辑电路和 I/O 引脚的正电源。
逻辑电路和 I/O 引脚的参考地。
说明
和 CS 引脚)。
和 RD 引脚)。
和 WR 引脚)。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 21 页
PIC18F45J10 系列
注:
DS39682A_CN 第 22 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
2.0 振荡器配置
2.1 振荡器类型
PIC18F45J10 系列器件可以在五种不同的振荡器模式
下工作:
1. HS 高速晶振 / 谐振器
2. HSPLL 带软件 PLL 控制的高速晶振 /
谐振器
3. EC 带 F
4. ECPLL 带软件 PLL 控制的外部时钟
5. INTRC 31 kHz 内部振荡器
用户可以通过编程FOSC2:FOSC0 配置位来选择这其中
的前四种模式。而第五种模式(INTRC )可能要在软件
控制下进入;也可以将它配置为器件复位时的默认模
式。
2.2 晶振 / 陶瓷谐振器 (HS 模式)
在 HS 或 HSPLL 振荡器模式中,晶振或陶瓷谐振器与
OSC1 和 OSC2 引脚连接来产生振荡。图 2-1 显示了引
脚连接方式。
振荡器的设计要求使用平行切割的晶体。
注: 使用顺序切割的晶体,会使振荡器产生的
OSC /4 输出的外部时钟
频率不在晶体制造厂商所给的参数范围
内。
图 2-1 :晶 振/ 陶瓷谐振器工作原理
(HS 或 HSPLL 配置)
(1)
C1
(1)
C2
注 1 : 如需了解 C1 和 C2 的初始值,请参见表 2-1 和
表 2-2 。
2 : AT 条形切割的晶体可能会需要一个串联电阻
(R
3 : R
OSC1
XTAL
OSC2
(2)
RS
S)。
F 的值根据所选择的振荡器模式而定。
RF
(3)
休眠模式
PIC18F45J10
至
内部逻
辑电路
表 2-1 : 陶瓷谐振器的电容选择
使用的典型电容值:
模式 频率
HS 8.0 MHz
16.0 MHz
上述电容值仅供设计参考。
已在下列谐振器的基本起振和工作过程中测试了这些
电容。这些值不是最佳值。
要得到合适的振荡器工作状况,可能需要不同的电容
值。用户应在应用的预期 V
器的性能。
欲知更多信息,请参见表 2-2 后的 “注”。
所使用的谐振器:
16.0 MHz
OSC1 OSC2
27 pF
22 pF
DD 和温度范围内测试振荡
4.0 MHz
8.0 MHz
27 pF
22 pF
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 23 页
PIC18F45J10 系列
表 2-2 : 晶振的电容选择
振荡器类
型
HS 4 MHz 27 pF 27 pF
上述电容值仅供设计参考。
已在下列晶振的基本起振和运行过程中测试了这些电
容。这些值不是最佳值。
要得到合适的振荡器工作状况,可能需要不同的电容
值。用户应在应用的预期 V
器的性能。
欲知更多信息,请参见本表后的 “注”。
注 1 : 较高的电容值可以增加振荡器的稳定性,
2: 因为每种谐振器 / 晶振都有其自身特性,
3: 为避免对低驱动电平规格的晶体造成过驱
4: 请在应用中的预期 V
晶振
频率
8 MHz 22 pF 22 pF
20 MHz 15 pF 15 pF
所使用的晶振:
但同时也会增加起振时间。
用户应当向谐振器 / 晶振制造厂商询问外
部元件的相应值。
动,可能会需要使用电阻 Rs 。
振荡器的性能。
已测试的典型电容值:
C1 C2
DD 和温度范围内测试振荡
4 MHz
8 MHz
20 MHz
DD 和温度范围内验证
2.3 外部时钟输入 ( EC 模式)
EC 和 ECPLL 振荡器模式需要在 OSC1 引脚连接一个
外部时钟源。在上电复位后或从休眠模式退出后,不需
要振荡器起振时间。
在 EC 振荡器模式下,振荡器频率的 4 分频信号可由
OSC2 引脚输出。此信号可用于测试或同步其他逻辑。
图 2-2 显示了 EC 振荡器模式的引脚连接方式。
图 2-2 : 外部时钟输入工作原理
(EC 配置)
来自外部系
统的时钟
OSC/4
F
如图 2-3 所示,在 HS 模式下,OSC1 引脚也可以连接
外部时钟源。在此配置中, OSC2 引脚上的 4 分频输出
不可用。
图 2-3 : 外部时钟输入工作原理
来自外部系
统的时钟
开路
OSC1/CLKI
PIC18F45J10
OSC2/CLKO
(HS 振荡器配置)
OSC1
PIC18F45J10
OSC2
( HS 模式)
DS39682A_CN 第 24 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
2.4 PLL 倍频器
如果用户希望使用低频晶振电路或通过晶振将器件频率
调节至其最高额定频率,可以选择使用锁相环 (Phase
Locked Loop ,PLL)电路。对于担心高频晶振引起 EMI
或需要内部振荡器提供高速时钟的用户而言,这样做可
能会有用。 由于这些原因,提供了 HSPLL 和 ECPLL 模
式。
HSPLL 和 ECPLL 模式使器件能够有选择性地以外部振
荡源的 4 倍速运行以产生最高为 40 MHz 的频率。通过
在 OSCTUNE 寄存器(寄存器 2-1 )中将 PLLEN 位置
1 来使能 PLL 。
寄存器 2-1 : OSCTUNE :PLL 控制寄存器
U-0 R/W-0
- PLLEN
bit 7 bit 0
(1)
(1)
U-0 U-0 U-0 U-0 U-0 U-0
- - - - - -
图 2-4 : PLL 框图
HSPLL 或 ECPLL(CONFIG2L)
PLL 使能(OSCTUNE)
OSC2
OSC1
HS 或 EC
模式
IN
F
FOUT
÷ 4
相位
比较器
环路
滤波器
VCO
系统时钟
MUX
bit 7
bit 6
bit 5-0
未用:读为 0
PLLEN:倍频器 PLL 使能位
(1)
1 =PLL已使能
0 =PLL已禁止
注 1 : 用于 ECPLL 和 HSPLL 振荡器配置,否则,此位不可用并读为 0 。
未用:读为 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 25 页
PIC18F45J10 系列
2.5 内部振荡器电路
PIC18F45J10 系列器件包含内部振荡源(INTRC ),它
提供标称频率为 31 kHz 的输出。INTRC 在器件上电时
使能并在器件配置周期期间作为器件时钟源,直至器件
进入工作模式。如果选择 INTRC 作为器件时钟源或者
使能了以下各项之一也会使能 INTRC :
• 故障保护时钟监视器
• 看门狗定时器
• 双速启动
在第 20.0 节“CPU 的特殊性能”中对这些功能进行了
更详细的讨论。
也可以通过将 FOSC2 配置位置 1 把INTRC 配置为器件
启动时的默认时钟源。这将在第 2.6.1 节“振荡器控制
寄存器”中进行讨论。
2.6 时钟源和振荡器切换
PIC18F45J10 系列提供的功能包括允许将器件时钟源
从主振荡器切换到备用时钟源。PIC18F45J10 系列器件
提供了两种备用时钟源。当备用时钟源使能时,各种功
耗管理工作模式都可用。
基本上,这些器件有三种时钟源:
• 主振荡器
• 辅助振荡器
• 内部振荡器
主振荡器包括外部晶振和谐振器模式以及外部时钟模
式。特定的模式由 FOSC2:FOSC0 配置位定义。这些模
式的具体情况已在本章前面的内容中作过介绍。
辅助振荡器是不与 OSC1 或OSC2 引脚连接的外部时钟
源。这些时钟源即使在控制器处于功耗管理模式时仍然
可以继续工作。
PIC18F45J10 系列器件提供 Timer1 振荡器作为辅助振
荡器。此振荡器在所有功耗管理模式中通常是实时时钟
等功能的时基。
大部分情况下,在 RC0/T1OSO/T13CKI 和 RC1/T1OSI
引脚之间接有一个 32.768 kHz 的时钟晶振。在每个引
脚与地之间同时接有负载电容。
第 11.3 节“Timer1 振荡器”中将对 Timer1 振荡器作
更详细的讨论。
除了作为主时钟源之外,内部振荡器还可以作为功耗管
理模式的时钟源。INTRC 源也可以作为几种特殊功能部
件的时钟源,例如 WDT 和故障保护时钟监视器。
图 2-5 中所示为 PIC18F45J10 系列器件的时钟源。 如
需了解配置寄存器的详细信息,请参见第 20.0 节“CPU
的特殊性能”。
图 2-5 : PIC18F45J10 系列时钟框图
OSC2
OSC1
T1OSO
T1OSI
主振荡器
辅助振荡器
休眠模式
T1OSCEN
使能
振荡器
PIC18F45J10 系列
4 x PLL
INTRC
时钟源
HS, EC
HSPLL, ECPLL
T1OSC
内部振荡器
FOSC2:FOSC0
供其他模块使用的
时钟源选项
WDT 、PWRT、FSCM
和双速启动
时钟
控制
外设
MUX
CPU
IDLEN
OSCCON<1:0>
DS39682A_CN 第 26 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
2.6.1 振荡器控制寄存器
OSCCON 寄存器 (寄存器 2-2)控制全功耗模式和功
耗管理模式下器件时钟工作的几个方面。
系统时钟选择位 SCS1:SCS0 用于选择时钟源。可用的
时钟源有主时钟(由 FOSC2:FOSC0 配置位定义)、辅
助时钟 (Timer1 振荡器)和内部振荡器。在写入一个
或多个位后,有一段短的时钟切换间隔,之后,时钟源
发生改变。
OSTS (OSCCON<3> )和 T1RUN (T1CON<6> )位
表明当前由哪个时钟源提供器件时钟。OSTS 位置 1 表
明振荡器起振定时器(OST )延时已结束,且主时钟在
主时钟模式下提供器件时钟。T1RUN 位置 1 表明 Timer1
振荡器在辅助时钟模式下提供器件时钟。在功耗管理模
式下的任何时间,这两个位中都只有一个位会被置 1。
如果这两个位都没有置 1 ,则当前器件时钟源是
INTRC,或者内部振荡器刚刚起振且尚未稳定。
IDLEN 位决定当执行 SLEEP 指令时,器件是进入休眠
模式还是某种空闲模式。
第 3.0 节“功耗管理模式”中将更详细地讨论 OSCCON
寄存器中的标志位和控制位的使用。
注 1 : 要选择辅助时钟源,必须使能 Timer1 振荡
器。通过 将 Timer1 控制寄存器中的
T1OSCEN 位(T1CON<3>)置 1 ,可以
使能 Timer1 振荡器。如果未使能 Timer1
振荡器,则在执行 SLEEP 指令期间任何选
择辅助时钟源的操作都会被忽略。
2 : 建议当Timer1 振荡器稳定工作之后再执行
SLEEP 指令,否则当 Timer1 振荡器起振时
可能会发生很长的延迟。
2.6.1.1 系统时钟选择和 FOSC2 配置位
发生所有形式的复位时,SCS 位都会被清零。在器件的
默认配置中,这意味着将 FOSC1:FOSC0 (也就是 HS
或 EC 模式的一种)定义的主振荡器用作器件复位时的
主时钟源。
复位时的默认时钟配置可以随着FOSC2 配置位的改变而
改变。此位的作用是在 SCS1:SCS0 = 00 时选择时钟源。
当 FOSC2 = 1(默认)时,不管何时 SCS1:SCS0 = 00 ,
都选择由 FOSC1:FOSC0 定义的振荡源。 当FOSC2 = 0
时,不管何时 SCS1:SCS2 = 00 ,都选择 INTRC 振荡器
作为时钟源。因为在复位时 SCS 位被清零,所以 FOSC2
的设置也会更改复位时的默认振荡器模式。
不管 FOSC2 的设置如何,INTRC 总是会在器件上电时
被使能。它将作为时钟源直到器件已经从存储器中装入
了它的配置值为止。此时 FOSC 配置位被读取并选择了
振荡器的工作模式。
注意主时钟或内部振荡器在任何给定时间都会有两种位
设置选项,取决于 FOSC2 的设置。
2.6.2 振荡器转换
PIC18F45J10 系列器件包含了防止在切换时钟源时发
生时钟 “毛刺”的电路。在时钟切换时,器件时钟会有
短暂的停顿。停顿的长度是旧时钟源的两个周期加上新
时钟源的三到四个周期的和。此公式假设新时钟源是稳
定的。
第 3.1.2 节“进入功耗管理模式”中对时钟转换进行了
更详细的讨论。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 27 页
PIC18F45J10 系列
寄存器 2-2 : OSCCON :振荡器控制寄存器
R/W-0 U-0 U-0 U-0 R-q
IDLEN - - - OSTS - SCS1 SCS0
bit 7 bit 0
bit 7
bit 6-4
bit 3
bit 2
bit 1-0
IDLEN:空闲使能位
1 = 在执行 SLEEP 指令时,器件进入空闲模式
0 = 在执行 SLEEP 指令时,器件进入休眠模式
未用:读为 0
OSTS :振荡器起振延时状态位
1 = 振荡器起振定时器延时已经结束;主振荡器正在运行
0 = 振荡器起振定时器正在进行延时;主振荡器尚未准备就绪
注 1 : 当 HS 模式和双速启动都使能时,复位值为 0 ;否则,复位值为 1 。
未用:读为 0
SCS1:SCS0 :系统时钟选择位
11 = 内部振荡器
10 = 主振荡器
01 = Timer1 振荡器
FOSC2 = 1 时:
当
00 = 主振荡器
当 FOSC2 = 0 时:
00 = 内部振荡器
(1)
(1)
U-0 R/W-0 R/W-0
图注:
U = 未用位,读为 0q = 值由配置确定
-n = 上电复位时的值 R = 可读位 0 = 清零 W = 可写位
2.7 功耗管理模式对各种时钟源的影响
当选择了 PRI_IDLE 模式时,指定的主振荡器会继续运
行而不中断。对于所有其他功耗管理模式,使用 OSC1
引脚的振荡器会被禁止。OSC1 引脚(以及由振荡器使
用 OSC2 引脚)将会停止振荡。
在辅助时钟模式下(SEC_RUN 和SEC_IDLE ),Timer1
振荡器作为器件时钟源工作。如果需要,Timer1 振荡器
也可以运行在所有功耗管理模式下为 Timer1 或 Timer3
提供时钟源。
在 RC_RUN 和 RC_IDLE 模式下,内部振荡器提供器件
时钟。无论在何种功耗管理模式下,都可以直接使用
31 kHz 的 INTRC 输出来提供时钟或者使能它来支持多
种特殊功能部件 (欲知更多有关 WDT 、故障保护时钟
监视器和双速启动的信息,请参见第 20.2 节 “看门狗
定时器 (WDT )”到第 20.5 节 “故障保护时钟监视
器”)。
如果选择了休眠模式,所有的时钟源都会停止。因为消
除了所有的晶体管切换电流,休眠模式能实现最小的器
件电流消耗 (仅泄漏电流)。
在休眠期间使能任何片上功能将会增加休眠时的电流消
耗。需要 INTRC 来支持 WDT 工作。 Timer1 振荡器可
以用来为实时时钟提供时钟源。 不需要器件时钟源的其
他功能部件也可以工作 (即 MSSP 从动器件、 PSP 和
INTn 引脚等)。第 23.2 节 “直流规范:掉电和供电电
流”列出了会明显增加电流消耗的外设。
DS39682A_CN 第 28 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
2.8 上电延时
有两个定时器控制上电延迟,这样大部分应用都无需外
接复位电路。上电延迟可以确保在器件电源稳定 (常规
环境下)且主时钟稳定工作之前器件保持复位状态。欲
知有关上电延迟的其他信息,请参见第 4.5 节“上电延
迟定时器 (PWRT )”。
第一个定时器是上电延时定时器 (PWRT ),它在上电
时提供一个固定的延迟(表 23-10 中的参数 33 )。它 总
是使能的。
第二个定时器是振荡器起振定时器 (OST ),旨在使芯
片在晶振稳定之前保持在复位状态 (HS 模式)。 OST
通过计数 1024 个振荡周期实现此延迟,并在延迟后允
许振荡器为器件提供时钟。
在上电复位后,会有一段延迟间隔 T
的参数 38 ),控制器在这段时间中为执行指令做准备。
CSD (表 23-10 中
表 2-3 : 休眠模式下 OSC1 和 OSC2 引脚状态
振荡器模式 OSC1 引脚 OSC2 引脚
EC , ECPLL 悬空,由外部时钟拉高 处于逻辑低电平 (输出时钟的 4 分频信
号)
HS , HSPLL 处于静态电平时,反馈反相器被禁止 处于静态电平时,反馈反相器被禁止
注: 如需了解有关由于休眠和 MCLR
复位引起的延时的信息,请参见第 4.0 节 “复位”中的表 4-2 。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 29 页
PIC18F45J10 系列
注:
DS39682A_CN 第 30 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
3.0 功耗管理模式
PIC18F45J10 系列器件提供了只需通过管理 CPU 和外
设的时钟源就可以管理功耗的功能。一般而言,降低时
钟频率和减少由时钟源驱动的电路数目会使功耗降低。
为了在应用中管理功耗,提供了三种主要的工作模式:
• 运行模式
• 空闲模式
• 休眠模式
这些模式定义了器件的哪些部分由时钟源驱动,以及以
多高的时钟速度驱动。运行和空闲模式可以使用三种可
用时钟源 (主时钟源、辅助时钟源或内部振荡器电路)
中的任意一种;而休眠模式则不使用时钟源。
®
功耗管理模式包括几种在以前的 PICmicro
的节省功耗的功能。其中之一就是在其他的 PIC18 器件
上提供的时钟切换功能,允许控制器使用 Timer1 振荡
器代替主振荡器。还包括所有 PICmicro 器件都提供的
休眠模式,在此模式下器件时钟停止。
3.1 选择功耗管理模式
选择功耗管理模式需要考虑两个因素:是否用时钟源驱
动 CPU 以及使用哪个时钟源。IDLEN 位(OSCCON<7>)
控制 CPU 的时钟驱动,而 SCS1:SCS0 位(OSCCON<1:0> )
选择时钟源。表 3-1 总结了各个模式、位设置、时钟源和
受影响的模块。
器件上提供
3.1.1 时钟源
SCS1:SCS0 位可以为功耗管理模式选择三个时钟源中
的一个。它们是:
• 主时钟,由 FOSC1:FOSC0 配置位定义
• 辅助时钟 (Timer1 振荡器)
• 内部振荡器
3.1.2 进入功耗管理模式
从一种功耗管理模式切换到另一种功耗管理模式是通过
装载 OSCCON 寄存器开始的。 SCS1:SCS0 位选择时
钟源并确定使用哪一种运行模式或空闲模式。更改这些
位将导致立即切换到新的时钟源(假定新的时钟源正在
运行)。切换也可能会遇到时钟转换延迟。第 3.1.3 节
“时钟切换和状态指示位”和其后的章节将会讨论这些
问题。
执行SLEEP 指令可以触发进入功耗管理空闲模式或休眠
模式。最后实际进入哪个模式由 IDLEN 位的状态决定。
更改功耗管理模式并不总是要求设置所有这些位,这由
当前模式和将要切换到的模式决定。可以通过在发出
SLEEP 指令之前 , 更改振荡器选择位或更改 IDLEN 位来
进行模式转换。如果已经正确地配置了 IDLEN 位,则只
需通过执行 SLEEP 指令就能切换到所需的模式。
表 3-1 : 功耗管理模式
模式
休眠
PRI_RUN N/A 10
SEC_RUN N/A 01
RC_RUN N/A 11
PRI_IDLE 11 0
SEC_IDLE 10 1
RC_IDLE 11 1
注 1: 仅当执行 SLEEP 指令时, IDLEN 才反映出有效值。
IDLEN<7>
OSCCON 位 模块时钟控制
(1)
SCS1:SCS0<1:0> CPU
0 N/A
关闭 关闭 无——所有时钟被禁止
被时钟
源驱动
被时钟
源驱动
被时钟
源驱动
关闭 被时钟源驱动主时钟——HS , EC
关闭 被时钟源驱动辅助时钟——Timer1 振荡器
关闭 被时钟源驱动内部振荡器
被时钟源驱动主时钟—— HS , EC ;
被时钟源驱动辅助时钟——Timer1 振荡器
被时钟源驱动内部振荡器
外设
可用时钟和振荡器源
这是正常的全功耗运行模式
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 31 页
PIC18F45J10 系列
3.1.3 时钟切换和状态指示位
时钟源切换的延迟时间长度是旧时钟源的 2 个周期与新
时钟源的 3 到 4 个周期的和。此公式假设新时钟源是稳
定的。
OSTS (OSCCON<3> )和 T1RUN (T1CON<6> )两
个位表示当前的时钟源及其状态。通常,在给定功耗管
理模式下,这两个位中只有一个将被置 1 。当 OSTS 位
被置 1 时,主时钟提供器件时钟。当 T1RUN 位被置 1
时,Timer1 振荡器提供器件时钟。如果这两个位都不置
1 , INTRC 为器件提供时钟。
注: 执行 SLEEP 指令不一定会使器件进入休眠
模式。该指令充当触发条件,根据 IDLEN
位的设置,使控制器进入休眠模式或某种
空闲模式。
3.1.4 多条 SLEEP 命令
用 SLEEP 指令启动的功耗管理模式由执行这条指令时
IDLEN 位的设置决定。如果执行另一条 SLEEP 指令,器
件将进入由那时 IDLEN 位指定的功耗管理模式。如果
IDLEN 位已更改,则器件将进入由新的设置指定的功耗
管理模式。
3.2 运行模式
在运行模式中,内核和外设的时钟均有效。这些模式之
间的差异在于时钟源的不同。
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 振荡器继续运行。
3.2.1 PRI_RUN 模式
PRI_RUN 模式是单片机的正常的全功耗工作模式。除
非使能双速启动,这也是器件复位时的默认模式 (详细
信息请参见第 20.4 节 “双速启动”)。在此模式下,
OSTS 位置1(参见第 2.6.1 节“振荡器控制寄存器”)。
图 3-1 :进 入SEC_RUN 模式的转换时序
Q4 Q3 Q2
Q1
123
时钟转换
T1OSI
OSC1
CPU
时钟
外设
时钟
程序
计数器
Q1
Q4 Q3 Q2 Q1 Q3 Q2
n-1
n
PC + 2 PC
PC +4
DS39682A_CN 第 32 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
3.2.3 RC_RUN 模式
在 RC_RUN 模式下,使用内部振荡器作为 CPU 和外设
的时钟源;主时钟关闭。在所有运行模式之中,此模式
最节约功耗,且仍然执行代码。它非常适用于对时间精
度要求不高或者不是总需要高速时钟的应用。
通过将 SCS 设置为 “11 ”可以进入此模式。当时钟源
切换到 INTRC (见图 3-2 )时,主振荡器关闭, OSTS
位清零。
图 3-2 :到RC_RUN 模式的转换时序
Q4 Q3 Q2
Q1
123 n - 1n
时钟转换
INTRC
OSC1
CPU
时钟
外设
时钟
程序
计数器
Q1
从 RC_RUN 模式切换到 PRI_RUN 模式时,在主时钟
起振期间外设和器件继续使用 INTRC 作为时钟源。当
主时钟准备就绪以后,时钟开始切换到主时钟 (参见
图 3-3 )。当时钟切换完成后,OSTS 位被置 1 ,主时钟
提供器件时钟。这种切换不会影响 IDLEN 和 SCS 位。
如果使能了 WDT 或故障保护时钟监视器,INTRC 时钟
源将继续运行。
Q4 Q3 Q2 Q1 Q3 Q2
PC + 2 PC
PC +4
图 3-3 :从RC_RUN 模式到 PRI_RUN 模式的转换时序
Q1
Q4
Q1
INTRC
OSC1
CPU 时钟
外设
时钟
程序
计数器
SCS1:SCS0 位变化
注 1 :TOST = 1024 TOSC。这些时间间隔未按比例显示。
TOST
Q2
(1)
PC
Q3
OSTS 位置 1
PC + 2
Q2
Q3 Q4
Q1
Q2
PC +4
Q3
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 33 页
PIC18F45J10 系列
3.3 休眠模式
功耗管理休眠模式与所有其他 PICmicro 器件提供的传
统休眠模式相同。通过清零 IDLEN 位 (器件复位时的
默认状态)并执行 SLEEP 指令进入该模式。 这将关闭
所选的振荡器(图 3-4 )。并清零所有的时钟源状态位。
从其他模式进入休眠模式不需要时钟切换,这是因为一
旦单片机进入休眠模式就不需要时钟了。如果选择了
WDT , INTRC 时钟源将继续运行。如果使能了 Timer1
振荡器, INTRC 时钟源也将继续运行。
在休眠模式下发生唤醒事件时(由于中断、复位或 WDT
超时),器件将没有时钟源直到由 SCS1:SCS0 位选定
的时钟源准备就绪为止 (见图 3-5 ),或者当双速启动
或故障保护监视器被使能时,它会将内部振荡器作为时
钟源 (见第 20.0 节“CPU 的特殊性能”)。在这两种
情况下,当主时钟提供器件时钟时, OSTS 位被置 1 。
唤醒不会影响 IDLEN 和 SCS 位。
图 3-4 : 进入休眠模式的转换时序
Q4 Q3 Q2
Q1 Q1
OSC1
CPU
时钟
外设
时钟
休眠
程序
计数器
3.4 空闲模式
空闲模式允许在外设继续运行的情况下,有选择地关闭
单片机的 CPU 。选择某种特定的空闲模式可使用户能进
一步管理功耗。
执行 SLEEP 指令时,如果 IDLEN 位被置 1 ,外设将使用
SCS1:SCS0 位选定的时钟源;然而,将不会为 CPU 提
供时钟。时钟源状态位不受影响。将 IDLEN 置 1 并执行
SLEEP 指令是一种从给定运行模式切换到其对应空闲模
式的快速方法。
如果选择了 WDT , INTRC 时钟源将继续运行。如果使
能了 Timer1 振荡器, INTRC 时钟源也将继续运行。
由于在空闲模式下 CPU 没有执行指令,只能通过中断、
WDT 超时或复位使器件从空闲模式退出。 当唤醒事件
发生时, CPU 在准备好执行代码前,要延迟一个 T
的时间(表 23-10 中的参数 38 )延迟。当 CPU 开始执
行代码时,它将沿用与当前空闲模式相同的时钟源。例
如,当从 RC_IDLE 模式唤醒时,将使用内部振荡器电
路作为 CPU 和外设的时钟源(即 RC_RUN 模式)。唤
醒不会影响 IDLEN 和 SCS 位。
当处于任何空闲模式或休眠模式时, WDT 超时将导致
器件退出到由当前 SCS1:SCS0 位指定的运行模式。
PC + 2 PC
CSD
图 3-5 : 从休眠模式唤醒的转换时序
Q1 Q2 Q3 Q4 Q1 Q2
OSC1
(1)
TOST
CPU 时钟
外设
时钟
程序
计数器
唤醒事件
注 1 :T
DS39682A_CN 第 34 页 高级信息 2005 Microchip Technology Inc.
OST = 1024 TOSC。这些时间间隔未按比例显示。
PC
OSTS 位置 1
Q3 Q4 Q1 Q2
PC + 2
PC +4
Q3 Q4
Q1 Q2 Q3 Q4
PC +6
PIC18F45J10 系列
3.4.1 PRI_IDLE 模式
此模式在三种低功耗空闲模式中是唯一不禁止器件主时
钟的。对于对时间精度要求很高的应用来说,由于时钟
源不需要 “热身”或从其他振荡器切换过来,选用此模
式可以使用更加精确的主时钟源,并以最快的速度恢复
器件运行。
通过置位 IDLEN 位并执行 SLEEP 指令可以从PRI_RUN
模式进入PRI_IDLE 模式。如果器件处于其他运行模式,
请先置位 IDLEN ,然后将 SCS 位置为 “10 ”并执行
SLEEP 指令。 虽然 CPU 被禁止,但外设仍继续使用由
FOSC0 控制位指定的主时钟源。 OSTS 位保持置 1(见
图 3-6 )。
当唤醒事件发生时,由主时钟源为 CPU 提供时钟。在唤
醒事件和代码执行开始之间需要一段 T
CSD 间隔的延迟。
这段时间可以使 CPU 做好执行指令的准备。在唤醒之
后,OSTS 位保持置 1。唤醒不会影响 IDLEN 和 SCS 位
(见图 3-7 )。
图 3-6 : 进入空闲模式的转换时序
3.4.2 SEC_IDLE 模式
在 SEC_IDLE 模式中, CPU 被禁止,但外设继续使用
Timer1 振荡器作为时钟源。通过置位 IDLEN 位并执行
SLEEP 指令可以从 SEC_RUN 进入此模式。如果器件
处于其他运行模式,请先置位 IDLEN ,然后 将
SCS1:SCS0 置为 “01 ”并执行 SLEEP 指令。当时钟
源切换到 Timer1 振荡器时,主振荡器关闭, OSTS 位
清零, T1RUN 位被置 1 。
当唤醒事件发生时,外设继续将 Timer1 振荡器作为时
钟源。在唤醒事件后经过一个 T
使用 Timer1 振荡器作为时钟源并开始执行代码。唤醒
不会影响 IDLEN 和 SCS 位; Timer1 振荡器继续运行
(见图 3-7 )。
注: Timer1 振荡器应该在进入 SEC_IDLE 模式
之前已经在运行了。如果执行 SLEEP 指令
时 T1OSCEN 位没有被置 1 ,那么 SLEEP
指令会被忽略并且不会进入 SEC_IDLE 模
式。如果 Timer1 振荡器已经被使能,但还
没有开始运行,外设时钟将被延迟直到振
荡器起振为止。在这种情况下,初始振荡
器运行很不稳定并且它的运行结果无法预
料。
CSD 的时间间隔, CPU
Q1
OSC1
CPU 时钟
外设
时钟
程序
计数器
Q1
Q2
Q3
PC PC + 2
Q4
图 3-7 : 从空闲模式唤醒进入运行模式的转换时序
Q1 Q3 Q4
OSC1
CPU 时钟
外设
时钟
程序
计数器
唤醒事件
TCS D
PC
Q2
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 35 页
PIC18F45J10 系列
3.4.3 RC_IDLE 模式
在 RC_IDLE 模式中,CPU 被禁止,但外设继续使用内
部振荡器作为时钟源。该模式允许在器件处于空闲模式
期间对功耗进行控制。
通过将IDLEN 位置1 并执行SLEEP 指令可以从 RC_RUN
模式进入此模式。如果器件处于其他运行模式,请先置
位 IDLEN ,然后将 SCS 位清零并执行 SLEEP 指令。当
时钟源切换到 INTRC 时,主振荡器关闭, OSTS 位被
清零。
当唤醒事件发生时,外设继续使用 INTRC 作为时钟源。
唤醒事件发生后经过一个 T
INTRC 作为时钟源并开始执行代码。唤醒不会影响
IDLEN 和 SCS 位。如果使能了 WDT 或故障保护时钟
监视器, INTRC 源将继续运行。
CSD 的时间间隔,CPU 使用
3.5 退出空闲和休眠模式
通过将中断、复位或 WDT 超时作为触发事件,从休眠
模式或任何空闲模式退出。本节将讨论引起从功耗管理
模式退出的触发事件。在每个功耗管理模式的章节中,
还讨论了时钟控制子系统的操作(见第 3.2 节“运行模
式”、第 3.3 节“休眠模式”和第 3.4 节“空闲模式”)。
3.5.1 通过中断退出
任何可用的中断源可以引起器件从空闲模式或休眠模式
退出,并进入运行模式。要使能此功能,必须通过将
INTCON 或 PIE 寄存器中的相应中断允许位置 1 来使能
该中断源。当相应的中断标志位被置 1 时,启动退出时
序。
当通过中断从空闲或休眠模式退出时,如果 GIE/GIEH
位(INTCON<7>)置 1,程序就会跳转到中断矢量处
执行。否则,代码执行就会继续或恢复,而不发生跳转
(见第 8.0 节 “中断”)。
通过中断从休眠或空闲模式退出时,一个固定的延迟时
间间隔 T
做准备。在此延迟后的第一个时钟周期恢复指令执行。
CSD 是必需的。CPU 需要此延迟来为执行代码
3.5.2 通过 WDT 超时退出
根据 WDT 超时发生时器件所处的不同功耗管理模式,
会引发不同的操作。
如果器件没有执行代码 (在所有空闲模式和休眠模式
下) ,超时将导致从功耗管理模式退出 (见第 3.2 节
“运行模式”和第 3.3 节“休眠模式”)。如果器件正在
执行代码 (在所有运行模式下),超时将导致 WDT 复
位(见第 20.2 节 “看门狗定时器 (WDT )”)。
WDT 定时器和后分频器通过以下任一事件清零:
• 执行 SLEEP 或 CLRWDT 指令
• 当前选定的时钟源失效 (使能故障保护时钟监视
器时)
3.5.3 通过复位退出
通过复位从空闲或休眠模式退出,将自动强制器件使用
INTRC 作为时钟源运行。
3.5.4 在没有振荡器起振延迟的情况下退出
某些从功耗管理模式退出的方式根本不会启动 OST 。具
体有两种情形:
• 主时钟源处于不会被停止的 PRI_IDLE 模式;
• 主时钟源处于 EC 模式。
在这两种情况下,主时钟源都不需要振荡器起振延迟,
因为要么它已经在运行了 (在 PRI_IDLE 模式下),要
么根本不需要振荡器起振延迟(在 EC 模式下)。然而,
当退出休眠和空闲模式时,在唤醒事件后的一个固定的
延迟间隔 T
行代码做准备。在此延迟后的第一个时钟周期恢复指令
执行。
CSD 仍然是必需的,CPU 利用这段时间为执
DS39682A_CN 第 36 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
4.0 复位
PIC18F45J10 系列器件有以下几种不同的复位方式:
a) 上电复位 ( Power-on Reset, POR)
b) 正常工作状态下的 MCLR
c) 功耗管理模式下的 MCLR
d) 看门狗定时器 ( WDT)复位 (执行程序期间)
e) 欠压复位 ( Brown-on Reset, BOR)
f) RESET 指令
g) 堆栈满复位
h) 堆栈下溢复位
本节将讨论由 MCLR
、POR 和 BOR 产生的各种复位以
及各种起振定时器的操作。堆栈复位事件将在
第 5.1.2.4 节“堆栈满和下溢复位”中讨论。 WDT 复位
将在第 20.2 节 “看门狗定时器 (WDT )” 中讨论。
图 4-1 给出了片上复位电路的简化框图。
图 4-1 : 片上复位电路的简化框图
RESET
指令
堆栈
指针
复位
复位
堆栈满 / 下溢复位
4.1 RCON 寄存器
可通过 RCON 寄存器 (寄存器 4-1 )跟踪器件复位事
件。该寄存器的低 5 位表示特定的复位事件是否已经发
生。在大部分情况下,只有复位事件可以将这些位置 1 ,
而且它们必须在复位事件之后由应用程序清零。将这些
标志位的状态一起读出可以得知刚发生的复位的类型。
第 4.6 节“寄存器的复位状态”对此进行了更详细地说
明。
RCON 寄存器还有一个设置中断优先级的控制位
(IPEN )。中断优先级将在 第 8.0 节“中断”中进行讨
论。
外部复位
MCLR
VDD
注 1 : PIC18LF2XJ10/4XJ10 器件不能使用欠压复位。
( )_IDLE
Sleep
WDT
V
沿检测
复位
PWRT
32 µs
INTRC
超时
DD 上升
欠压
(1)
上电复位脉冲
PWRT
11 位脉动计数器
65.5 ms
S
芯片复位
R
Q
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 37 页
PIC18F45J10 系列
寄存器 4-1 : RCON :复位控制寄存器
R/W-0 U-0 U-0 R/W-1 R-1 R-1 R/W-0 R/W-0
IPEN
bit 7 bit 0
- -
RI
TO PD POR BOR
bit 7
bit 6-5
bit 4
bit 3
bit 2
bit 1
bit 0
IPEN :中断优先级使能位
1 = 使能中断优先级
0 = 禁止中断优先级 (PIC16CXXX 兼容模式)
未用:读为 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 )
注: PIC18LF2XJ10/4XJ10 器件不能使用欠压复位。
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
注 1: 建议在检测到上电复位后,将 POR 位置 1 ,以便检测后续发生的上电复位。
2: 如果禁止了片上稳压器, BOR 则总是保持为 0 。欲知更多信息,请参见第 4.4.1 节
“检测 BOR”。
3: 欠压复位是指当 BOR
立即被软件置 1 )。
DS39682A_CN 第 38 页 高级信息 2005 Microchip Technology Inc.
为 0 且 POR 为 1 时发生的复位(假定在上电复位发生后 POR
PIC18F45J10 系列
4.2 主复位 ( MCLR)
MCLR 引脚提供了用外部硬件触发器件复位的方法。保
持该引脚为低电平就能触发此复位。PIC18 扩展的单片
机器件在 MCLR 复位信号传输路径中有一个噪声滤波
器,它可以检测并滤除小的干扰脉冲。
任何内部复位,包括 WDT 复位,都不能将 MCLR
引脚
驱动为低电平。
4.3 上电复位 (POR )
只要 VDD 上升到一定的门限以上,就会在片上产生上电
复位信号。这使得器件在 V
DD 上升到足够其工作时,以
初始化状态启动。
为了使用 POR 电路,可以将 MCLR
引脚通过一个电阻
(1kΩ 到 10 k Ω)连接到 VDD 。这样可以省去产生上电
复位延时通常所需的外部 RC 元件。 V
率已指定 (参数 D004 )。 对于延缓 V
DD 的最小上升速
DD 上升时间的情
况,请参见图 4-2 。
当器件开始正常工作 (即退出复位状态)时,必须满足
特定的工作参数要求 (电压、频率和温度等),才能确
保其正常工作。如果这些条件不满足,那么器件必须保
持在复位状态,直到工作条件满足为止。
上电复位事件由 POR
位(RCON<1>)捕捉。只要发
生上电复位,此位的状态就被置为 0 ,它不会因任何其
他复位事件发生改变。任何硬件事件都不会将 POR 位
复位为 1 。要捕捉多个事件,用户必须在上电复位之后
用软件手动将该位复位为 1 。
4.4 欠压复位 (BOR )
(仅 PIC18F2XJ10/4XJ10 器件)
一旦发生欠压复位,上电延时定时器就将芯片保持在复
位状态达 TPWRT (参数 33 )时间。如果上电延迟定时
器运行时, V
欠压复位状态并初始化上电延迟定时器。一旦 V
上升到V
DD 电压降到 V BOR 以下,芯片将重新回到
DD 电压
BOR以上,上电延迟定时器将再执行一个延时。
图 4-2 : 外部上电复位电路
(用于延缓 V
DD
VDD
注 1 : 仅当 VDD 上电很慢时,需要外部上电复位电
V
D
R
R1
C
路。当 V
放电。
2 : 建议 R < 40 k Ω ,确保电阻 R 两端的压降符合
器件的电气规范。
3 : R1
MCLR
Discharge, ESD)或电超载 (Electrical
Overstrss, EOS)导致 MCLR
DD 掉电时,二极管 D 帮助电容迅速
≥ 1kΩ 将限制任何电流从外部电容 C 流入
,以避免由于静电放电 (Electrostatic
DD 上电)
MCLR
PIC18F45J10
引脚击穿。
4.4.1 检测 BOR
BOR 位在发生欠压复位或上电复位事件时总是复位为
0 。所以仅通过读 BOR 的状态很难判断 BOR 事件是否
已经发生。更可靠的方法是同时检查 POR
态。假设在上电复位事件之后立即用软件将 POR 位复
位为 1 。如果 BOR 为 0 而 POR 为 1 ,就可以可靠地判
断出已经发生了欠压复位事件。
器件编号中带有 “LF ”的器件 (如 PIC18LF 25J10 )
禁止欠压复位功能。在这种情况下,不能使用 BOR
来确定欠压复位事件。上电复位事件仍然会清零 BOR
位。
和 BOR 的状
位
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 39 页
PIC18F45J10 系列
4.5 上电延时定时器 ( PWRT)
PIC18F45J10 系列器件加入了片上上电延时定时器
(PWRT )以帮助稳定上电复位过程。 PWRT 总是使能
的。主要功能是确保在执行代码之前,器件的电压是稳
定的。
PIC18F45J10 系列器件的上电延时定时器(PWRT )是
一个 11 位计数器,使用 INTRC 时钟源作为时钟输入。
这就产生大约 2048 x 32 µs = 65.6ms的延迟时间。当
PWRT 计数时,器件保持在复位状态。
上电延迟时间取决于 INTRC 时钟,并且由于温度和工
艺的变化,不同芯片的延迟时间各不相同。 欲知详细信
息,参见 DC 参数 33 。
4.5.1 延时序列
如果使能 PWRT ,在 POR 脉冲被清零后触发 PWRT 延
时。总延时会根据 PWRT 的状态而有所不同。 图 4-3、
图 4-4 、图 4-5 和图 4-6 都说明了在使能上电延时定时
器时的上电延时序列。
由于延时是由上电复位脉冲引起的,因此若 MCLR
保持足够长时间的低电平,延时将结束。将 MCLR 引脚
的电平拉高后程序将立即执行 (图 4-5 )。 这对于测试
或同步多个并行工作的 PIC18F 器件来说是非常有用
的。
图 4-3 : 上电延时序列 (MCLR 连接到 VDD , VDD 上升时间 < TPWRT )
VDD
MCLR
内部 POR
TPWRT
PWRT
延时
引脚
内部复位
图 4-4 : 上电延时序列 (MCLR
VDD
MCLR
内部 POR
PWRT
延时
内部复位
不连接到 VDD ): 情 形 1
TPWRT
DS39682A_CN 第 40 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
图 4-5 : 上电延时序列 (MCLR 不连接到 VDD ): 情 形 2
VDD
MCLR
内部 POR
TPWRT
PWRT
延时
内部复位
图 4-6 : VDD 缓慢上升时的上电延时序列 (MCLR
MCLR
内部 POR
PWRT
内部复位
VDD
延时
0V
PWRT
T
1V
连接到 VDD , VDD 上升时间 > TPWRT )
3.3V
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 41 页
PIC18F45J10 系列
4.6 寄存器的复位状态
大多数寄存器不受复位的影响。在上电复位时这些寄存
器的状态未知,而在其他复位时它们的状态不变。而其
他寄存器则根据不同的复位类型被强制置为相应的“复
位状态”。
大多数寄存器不受 WDT 唤醒的影响,这是因为 WDT 唤
醒被视为恢复正常工作。如表 4-1 所示,RCON 寄存器
的状态位 RI
情况下置 1 和清零的状态也各不相同。可在软件中使用
这些状态位判断复位的性质。
、TO 、 PD 、 POR 和 BOR ,在不同的复位
表 4-2 说明了所有特殊功能寄存器的复位状态。这些复
位被分为上电和欠压复位、主复位和 WDT 复位以及
WDT 唤醒复位。
表 4-1 : RCON 寄存器的状态位、它们的含义以及初始化状态
条 件 程序计数器
上电复位
RESET 指令
欠压
功耗管理运行模式期间的 MCLR
功耗管理空闲模式和休眠模式期
间时的 MCLR
全功耗或功耗管理运行模式期间
的 WDT 超时
全功耗运行期间的 MCLR
堆栈满复位 (STVREN = 1 )
堆栈下溢复位 (STVREN = 1 )
堆栈下溢错误 (不是真正的复
位, STVREN = 0 )
功耗管理空闲或休眠模式期间的
WDT 超时
中断使器件从功耗管理模式退出
图注: u = 不变
注 1 : 当芯片被中断唤醒且 GIEH 或 GIEL 位置 1 时, PC 装入中断矢量 (0008h 或 0018h )。
2 : PIC18LF2XJ10/4XJ10 器件不能使用欠压复位。
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
PC + 2 uu0uu u u
(1)
RI
RCON 寄存器 STKPTR 寄存器
TO PD POR BOR
(2)
STKFUL STKUNF
DS39682A_CN 第 42 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 4-2 : 所有寄存器的初始化状态
复位
MCLR
寄存器 适用器件
上电复位,
欠压复位
WDT 复位
RESET 指令
堆栈复位
TOSU PIC18F2XJ10 PIC18F4XJ10 ---0 0000 ---0 0000 ---0 uuuu
TOSH PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
TOSL PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
STKPTR PIC18F2XJ10 PIC18F4XJ10 00-0 0000 uu-0 0000 uu-u uuuu
PCLATU PIC18F2XJ10 PIC18F4XJ10 ---0 0000 ---0 0000 ---u uuuu
PCLATH PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PCL PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 PC + 2
TBLPTRU PIC18F2XJ10 PIC18F4XJ10 --00 0000 --00 0000 --uu uuuu
TBLPTRH PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
TBLPTRL PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
TABLAT PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PRODH PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
PRODL PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
INTCON PIC18F2XJ10 PIC18F4XJ10 0000 000x 0000 000u uuuu uuuu
INTCON2 PIC18F2XJ10 PIC18F4XJ10 1111 -1-1 1111 -1-1 uuuu -u-u
INTCON3 PIC18F2XJ10 PIC18F4XJ10 11-0 0-00 11-0 0-00 uu-u u-uu
INDF0 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
POSTINC0 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
POSTDEC0 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
PREINC0 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
PLUSW0 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
FSR0H PIC18F2XJ10 PIC18F4XJ10 ---- xxxx ---- uuuu ---- uuuu
FSR0L PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
WREG PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
INDF1 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
POSTINC1 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
POSTDEC1 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
PREINC1 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
PLUSW1 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
FSR1H PIC18F2XJ10 PIC18F4XJ10 ---- xxxx ---- uuuu ---- uuuu
FSR1L PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
BSR PIC18F2XJ10 PIC18F4XJ10 ---- 0000 ---- 0000 ---- uuuu
图注: u = 不变, x = 未知,- = 未用 (读为 0), q = 取值视具体情况而定。
阴影单元表示条件不适用于指定器件。
注 1 : 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU 、 TOSH 和 TOSL 。将
STKPTR 修改为指向硬件堆栈的下一个单元。
2: 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断矢量地址 (0008h 或 0018h )。
3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。
4: 关于特定条件下的复位值,请参见表 4-1 。
通过 WDT
或中断唤醒器件
(1)
(1)
(1)
(1)
(2)
(3)
(3)
(3)
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 43 页
PIC18F45J10 系列
表 4-2 : 所有寄存器的初始化状态
寄存器 适用器件
INDF2 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
POSTINC2 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
POSTDEC2 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
PREINC2 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
PLUSW2 PIC18F2XJ10 PIC18F4XJ10 N/A N/A N/A
FSR2H PIC18F2XJ10 PIC18F4XJ10 ---- xxxx ---- uuuu ---- uuuu
FSR2L PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
STATUS PIC18F2XJ10 PIC18F4XJ10 ---x xxxx ---u uuuu ---u uuuu
TMR0H PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
TMR0L PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
T0CON PIC18F2XJ10 PIC18F4XJ10 1111 1111 1111 1111 uuuu uuuu
OSCCON PIC18F2XJ10 PIC18F4XJ10 0--- q-00 0--- q-00 u--- q-uu
WDTCON PIC18F2XJ10 PIC18F4XJ10 ---- ---0 ---- ---0 ---- ---u
(4)
RCON
TMR1H PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
TMR1L PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
T1CON PIC18F2XJ10 PIC18F4XJ10 0000 0000 u0uu uuuu uuuu uuuu
TMR2 PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PR2 PIC18F2XJ10 PIC18F4XJ10 1111 1111 1111 1111 1111 1111
T2CON PIC18F2XJ10 PIC18F4XJ10 -000 0000 -000 0000 -uuu uuuu
SSP1BUF PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
SSP1ADD PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
SSP1STAT PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
SSP1CON1 PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
SSP1CON2 PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
ADRESH PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
ADRESL PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
ADCON0 PIC18F2XJ10 PIC18F4XJ10 0-00 0000 0-00 0000 u-uu uuuu
ADCON1 PIC18F2XJ10 PIC18F4XJ10 --00 0qqq --00 0qqq --uu uqqq
ADCON2 PIC18F2XJ10 PIC18F4XJ10 0-00 0000 0-00 0000 u-uu uuuu
图注: u = 不变, x = 未知,- = 未用 (读为 0), q = 取值视具体情况而定。
注 1 : 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU 、 TOSH 和 TOSL 。将
2: 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断矢量地址 (0008h 或 0018h )。
3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。
4: 关于特定条件下的复位值,请参见表 4-1 。
PIC18F2XJ10 PIC18F4XJ10 0--1 11q0 0--q qquu u--u qquu
阴影单元表示条件不适用于指定器件。
STKPTR 修改为指向硬件堆栈的下一个单元。
(续)
上电复位,
欠压复位
复位
MCLR
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
DS39682A_CN 第 44 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 4-2 : 所有寄存器的初始化状态
寄存器 适用器件
CCPR1H PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR1L PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
CCP1CON PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
CCPR2H PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR2L PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
CCP2CON PIC18F2XJ10 PIC18F4XJ10 --00 0000 --00 0000 --uu uuuu
BAUDCON PIC18F2XJ10 PIC18F4XJ10 01-0 0-00 01-0 0-00 uu-u u-uu
ECCP1DEL PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
ECCP1AS PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
CVRCON PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
CMCON PIC18F2XJ10 PIC18F4XJ10 0000 0111 0000 0111 uuuu uuuu
SPBRGH PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
SPBRG PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
RCREG PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
TXREG PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
TXSTA PIC18F2XJ10 PIC18F4XJ10 0000 0010 0000 0010 uuuu uuuu
RCSTA PIC18F2XJ10 PIC18F4XJ10 0000 000x 0000 000x uuuu uuuu
EECON2 PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
EECON1 PIC18F2XJ10 PIC18F4XJ10 ---0 x00- ---0 x00- ---u uuu-
IPR3 PIC18F2XJ10 PIC18F4XJ10 11-- ---- 11-- ---- uu-- ----
PIR3 PIC18F2XJ10 PIC18F4XJ10 00-- ---- 00-- ---- uu-- ----
PIE3 PIC18F2XJ10 PIC18F4XJ10 00-- ---- 00-- ---- uu-- ----
IPR2 PIC18F2XJ10 PIC18F4XJ10 11-- 1--1 11-- 1--1 uu-- u--u
PIR2 PIC18F2XJ10 PIC18F4XJ10 00-- 0--0 00-- 0--0 uu-- u--u
PIE2 PIC18F2XJ10 PIC18F4XJ10 00-- 0--0 00-- 0--0 uu-- u--u
IPR1 PIC18F2XJ10 PIC18F4XJ10 1111 1111 1111 1111 uuuu uuuu
PIR1 PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PIE1 PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
图注: u = 不变, x = 未知,- = 未用 (读为 0), q = 取值视具体情况而定。
阴影单元表示条件不适用于指定器件。
注 1 : 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU 、 TOSH 和 TOSL 。将
STKPTR 修改为指向硬件堆栈的下一个单元。
2: 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断矢量地址 (0008h 或 0018h )。
3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。
4: 关于特定条件下的复位值,请参见表 4-1 。
(续)
上电复位,
欠压复位
复位
MCLR
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
(3)
(3)
(3)
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 45 页
PIC18F45J10 系列
表 4-2 : 所有寄存器的初始化状态
寄存器 适用器件
TRISE PIC18F2XJ10 PIC18F4XJ10 0000 -111 1111 -111 uuuu -uuu
TRISD
TRISC PIC18F2XJ10 PIC18F4XJ10 1111 1111 1111 1111 uuuu uuuu
TRISB PIC18F2XJ10 PIC18F4XJ10 1111 1111 1111 1111 uuuu uuuu
TRISA PIC18F2XJ10 PIC18F4XJ10 --1- 1111 --1- 1111 --u- uuuu
SSP2BUF PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
LATE
LATD
LATC PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
LATB PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
LATA PIC18F2XJ10 PIC18F4XJ10 --x- xxxx --u- uuuu --u- uuuu
SSP2ADD
SSP2STAT
SSP2CON1
SSP2CON2 PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PORTE
PORTD
PORTC PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
PORTB PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
PORTA PIC18F2XJ10 PIC18F4XJ10 --0- 0000 --0- 0000 --u- uuuu
图注: u = 不变, x = 未知,- = 未用 (读为 0), q = 取值视具体情况而定。
注 1 : 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时,用 PC 的当前值更新 TOSU 、 TOSH 和 TOSL 。将
2: 当芯片被中断唤醒且 GIEL 或 GIEH 位被置 1 时, PC 装入中断矢量地址 (0008h 或 0018h )。
3: INTCONx 或 PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。
4: 关于特定条件下的复位值,请参见表 4-1 。
PIC18F2XJ10 PIC18F4XJ10 1111 1111 1111 1111 uuuu uuuu
PIC18F2XJ10 PIC18F4XJ10 ---- -xxx ---- -uuu ---- -uuu
PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PIC18F2XJ10 PIC18F4XJ10 0000 0000 0000 0000 uuuu uuuu
PIC18F2XJ10 PIC18F4XJ10 ---- -xxx ---- -uuu ---- -uuu
PIC18F2XJ10 PIC18F4XJ10 xxxx xxxx uuuu uuuu uuuu uuuu
阴影单元表示条件不适用于指定器件。
STKPTR 修改为指向硬件堆栈的下一个单元。
(续)
上电复位,
欠压复位
复位
MCLR
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
DS39682A_CN 第 46 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
5.0 存储器构成
在 PIC18 增强型单片机器件上有两种类型的存储器:
• 程序存储器
• 数据 RAM
在哈佛架构的器件中,数据和程序存储器使用不同的总
线,因而可同时访问这两种存储空间。
第 6.0 节“闪存程序存储器”提供了关于闪存程序存储
器操作的更多详细信息。
5.1 程序存储器构成
PIC18 单片机具有一个 21 位程序计数器,可以对 2MB
的程序存储空间进行寻址。访问物理实现的存储器的上
边界和 2MB 地址之间的单元将会返回全 0 (相当于执
行 NOP 指令)。
PIC18F24J10 和 PIC18F44J10 具有 16 KB 的闪存存储
器,能够存储多达 8,192 条单字指令。PIC18F25J10 和
PIC18F45J10 具有 32 KB 的闪存存储器,能够存储多
达 16,384 条单字指令。
PIC18 器件有两个中断矢量。复位矢量地址为
0000h,中断矢量地址为 0008h 和 0018h。
图 5-1 给出了 PIC18F45J10 系列器件的程序存储器映
射图。
图 5-1 : PIC18F45J10 系列器件的程序存储器映射图和堆栈
PC<20:0>
CALL,RCALL,RETURN
RETFIE,RETLW
堆栈级 1
•
•
•
堆栈级 31
复位矢量
高优先级中断矢量
低优先级中断矢量
0000h
0008h
0018h
21
片内
程序存储器
3FFFh
4000h
PIC18FX4J10
读为 0
片内
程序存储器
7FFFh
8000h
PIC18FX5J10
读为 0
用户存储空间
1FFFFFh
200000h
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 47 页
PIC18F45J10 系列
5.1.1 程序计数器
程序计数器(Program Counter ,PC )指定要取出执行
的指令地址。PC 为 21 位宽,被存放在 3 个独立的 8 位
寄存器中。其中的低字节称为 PCL 寄存器,该寄存器可
读写。高字节,即 PCH 寄存器,包含 PC<15:8> 位,不
可直接读写。可以通过 PCLATH 寄存器更新 PCH 寄存
器。最高字节称为 PCU 。该寄存器包含 PC<20:16> 位,
它也不能直接读写。通过 PCLATU 寄存器更新 PCU 寄
存器。
通过对 PCL 执行写操作,可以将 PCLATH 和 PCLATU
的内容传送到程序计数器。类似的,通过对 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 栈顶访问
只有栈顶 (Top-of-Stack, TOS)是可读写的。有 3 个
寄存器 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
DS39682A_CN 第 48 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
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 (堆栈上溢复位使能)
配置位的状态决定。(有关器件配置位的介绍,请参见
第 20.1 节“配置位”)。如 果 STVREN 位已经置 1(默
认) ,第 31 次进栈将把 (PC+2)值 压入 堆 栈,将
STKFUL 位置 1 ,并复位器件。 STKFUL 位将保持置 1 ,
而堆栈指针将被清零。
如果 STVREN 位被清零,第 31 次进栈时 STKFUL 位会
被置 1, 堆栈指针则加 1 变为 31 。任何其他进栈操作都
不会覆盖第31 次进栈的值,并且 STKPTR 将保持为31 。
寄存器 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)
-
当堆栈弹出次数足够卸空堆栈时,下一次出栈会向 PC
返回一个零值,并将 STKUNF 位置 1 ,而堆栈指针则保
持为 0 。 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 值。
SP4 SP3 SP2 SP1 SP0
bit 7
bit 6
bit 5
bit 4-0
STKFUL:堆栈满标志位
1 = 堆栈满或溢出
0 = 堆栈未满或未溢出
STKUNF:堆栈下溢标志位
1 = 发生堆栈下溢
0 = 未发生堆栈下溢
未用:读为 0
SP4:SP0 :堆栈指针地址位
注 1 : 通过用户软件或 POR 清零 bit 7 和 bit 6 。
图注:
R = 可读位 W = 可写位 U = 未用位 C = 只可清零位
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
(1)
(1)
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 49 页
PIC18F45J10 系列
5.1.2.4 堆栈满和下溢复位
通过将配置寄存器 4L 中的 STVREN 位置 1 ,可以在出
现堆栈溢出和堆栈下溢条件时使能器件复位。当
STVREN 位置 1 时,堆栈满或堆栈下溢条件会将相应的
STKFUL 或 STKUNF 位置 1,然后使器件复位。当
STVREN 位清零时,堆栈满或堆栈下溢条件会将相应的
STKFUL 或 STKUNF 位置 1,但不会使器件复位。通过
用户软件或上电复位使 STKFUL 或 STKUNF 位清零。
5.1.3 快速寄存器堆栈
为 STATUS 、WREG 和 BSR 寄存器提供的快速寄存器
堆栈具有从中断 “快速返回”的功能。每个寄存器堆栈
的深度仅为 1 级,并且不可读写。当处理器转入中断矢
量处执行指令时,此堆栈装入对应寄存器的当前值。所
有中断源都会将值压入堆栈寄存器。如果使用 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 个字节的查找
表数据。表指针寄存器 (Tab l e P oi nte r , TBLPTR )指
定字节地址,而表锁存器 (Table Latch , TABLAT)储
存从程序存储器读取或写入的数据。写入 / 读出程序存
储器的数据每次为一个字节。
第 6.1 节 “表读和表写”中将进一步讨论
操作。
表读和表写
DS39682A_CN 第 50 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
5.2 PIC18 指令周期
5.2.1 时钟分配
单片机时钟输入信号,无论来自内部或外部时钟源,都
会在器件内部被 4 分频用来产生 4 个不重叠的正交时钟
信号 (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 )。
在 Q1 周期,程序计数器 (PC )递增,开始取指。
指令的执行过程:在 Q1 周期,将所取指令锁存到指令
寄存器 (Instruction Register , 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 (强制 NOP)
5. 在 SUB_1 地址处的指令
除程序转移指令之外,所有指令都是单周期指令。由于程序转移指令将导致一条已取指令从流水线清除,需要重新
取指,然后执行指令,所以程序转移指令需要两个周期。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 51 页
取指 1 执行 1
取指 2 执行 2
取指 3 执行 3
取指 4 清除 (NOP )
取指 SUB_1 执行 SUB_1
PIC18F45J10 系列
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> ,由 PC 在程序存储
器中访问目标地址。图 5-4 中的指令2 说明了指令GOTO
0006h 在程序存储器中的译码过程。程序转移指令也采
取同样的方式对相对地址偏移量进行译码。在转移指令
中的偏移量代表单字指令数,PC 将以此作为偏移量跳转
到指定的地址单元。第 21.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
DS39682A_CN 第 52 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
5.3 数据存储器构成
注: 当使能 PIC18 扩展指令集时,数据存储器
某些方面的操作会改变。如需更多信息,
请参见第 5.5 节 “数据存储器和扩展指令
集”。
PIC18 器件中的数据存储器是以静态 RAM 的方式实现
的。在数据存储器中,每个寄存器有 12 位地址,数据
存储容量可达 4096 个字节。存储空间被分为 16 个存储
区,每个存储区包含 256 个字节; PIC18F45J10 系列
器件使用全部16 个存储区。图 5-5 显示了PIC18F45J10
系列器件的数据存储器构成。
数据存储器由特殊功能寄存器 (SFR)和通用寄存器
(General Purpose Register , GPR )组成。SFR 用于
单片机和外设功能模块的控制和状态显示,而 GPR 则
用于在用户应用程序中存储数据和高速暂存操作。任何
未用单元的读取值均为 0 。
此指令集和架构支持跨存储区的操作。可以通过直接、
间接或变址寻址模式访问整个数据存储器。本章后面的
部分将讨论寻址模式。
为了确保能在一个周期内存取常用寄存器(SFR 和所选
的 GPR ),PIC18 器件设置了快速操作存储区(Acess
Bank)。这是一个 256 字节的存储空间,它可实现对
SFR 和 GPR 存储区 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-6 所示是 BSR 的值与存储
区之间的关系。
由于最多有 16 个寄存器共享同一个低位地址,用户必
须非常小心以确保在执行数据读或写之前选择了正确的
存储区。例如,当 BSR 为 0Fh 时,将程序数据写入地
址为 F9h 的存储单元将中止程序的运行,并使程序计数
器复位。
当选择存储区时,只有实际可使用的存储区才可以被读
写。对不可用的存储区的写入将被忽略,而读不可用的
存储区会返回 0 。虽然是这样,STATUS 寄存器仍然会
受到影响。图 5-5 中的数据存储器映射图指出了可使用
的存储区。
在 PIC18 的内核指令集中,只有 MOVFF 指令指定源寄
存器和目标寄存器的完整 12 位地址。此指令在执行时
完全忽略 BSR 。所有其他指令仅包含作为操作数的低位
地址,而且必须使用 BSR 或快速操作存储区来寻址目
标寄存器。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 53 页
PIC18F45J10 系列
图 5-5 : PIC18F24J10/44J10 器件的数据存储器映射图
BSR<3:0>
= 0000
= 0001
= 0010
= 0011
= 0100
= 0101
= 0110
= 0111
= 1000
= 1001
= 1010
= 1011
= 1100
= 1101
= 1110
= 1111
存储区 0
存储区 1
存储区 2
存储区 3
存储区 4
存储区 5
存储区 6
存储区 7
存储区 8
存储区 9
存储区 10
存储区 11
存储区 12
存储区 13
存储区 14
存储区 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
未使用
读为 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(来自存储区 0 )。
后128 字节是特殊功能寄存器
(来自存储区 15 )。
当 a = 1 时:
BSR 指定指令使用的存储
区。
快速操作存储区
快速操作 RAM 的低地址
快速操作 RAM 的高地址
( SFR)
00h
7Fh
80h
FFh
DS39682A_CN 第 54 页 高级信息 2005 Microchip Technology Inc.
图 5-6: 使用存储区选择寄存器 (直接寻址)
数据存储器
7
0000
存储区选择
(2)
(1)
BSR
0011
000h
0
100h
200h
300h
存储区 0
存储区 1
存储区 2
存储区 3
到
存储区 13
PIC18F45J10 系列
(2)
0
00h
FFh
00h
FFh
00h
FFh
00h
7
来自操作码
11111111
E00h
F00h
FFFh
注 1: 指令的快速操作 RAM 位强制跳过选定的存储区 (由 BSR<3:0> 选择)直接寻址快速操作存储区的寄存器。
2: MOVFF 指令嵌入了完整的 12 位地址。
存储区 14
存储区 15
5.3.2 快速操作存储区
使用 BSR 和指令内嵌的 8 位地址可以使用户对整个数
据存储空间进行寻址,这同时意味着用户必须始终确保
选择了正确的存储区。否则,可能从错误的单元读取数
据或将数据写入错误的单元。如果本来是向 GPR 进行
写操作却将结果写入到了 SFR ,后果是非常严重的。但
是在每次向数据存储器进行读或写操作时,验证和 / 或
更改 BSR 可能会降低代码的执行效率。
为了连续访问大多数常用的数据存储单元,必须为数据
存储器配置快速操作存储区,这使得用户无需指定 BSR
即可访问被映射的存储区。快速操作存储区由存储区 0
的前 128 个字节 (00h-7Fh )和存储区 15 的后 128 个
字节(80h-FFh)组成。低半部分就是“快速操作
RAM ”,由 GPR 组成。地址较高的部分则被映射为器
件的 SFR 。这两个区域可以在快速操作存储区中连续映
射并且可以用 8 位地址进行线性寻址 (图 5-5 )。
快速操作存储区供包括快速操作 RAM 位 (指令中的
“a ”参数)的 PIC18 内核指令使用。当 “a ”等于 1
FFh
00h
FFh
00h
FFh
该“强制”寻址方式可使指令在一个周期内对数据地址
进行操作,而无需首先更新 BSR 。这意味着用户可以更
有效地对 8 位地址为 80h 及以上的 SFR 进行取值和操
作。地址低于 80h 的快速操作 RAM 非常适合于存储那
些用户可能需要快速存取的数据(如直接计算结果或常
用程序变量)。快速操作 RAM 还可以实现更快速、代码
效率更高的现场保护和变量切换。
当使能扩展的指令集 (XINST 配置位 = 1 )时,快速操
作存储区的映射略有不同。第 5.5.3 节“在立即数变址
寻址模式下映射快速操作存储区”更详细地讨论了此操
作。
5.3.3 通用寄存器
PIC18 器件可能在 GRP 区中划分了一部分存储区。这部
分存储区为数据 RAM ,所有指令都可以访问它。GPR 从
存储区 0 的底部 (地址 000h )开始,向上直到 SFR 区
的底部。上电复位不会将 GPR 初始化,并且其他复位也
不会改变其内容。
时,指令使用 BSR 和包含在操作码中的 8 位地址来对
数据存储器进行寻址。但是当 “a ”为 0 时,指令被强
制使用快速操作存储区地址映射; BSR 的当前值被忽
略。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 55 页
PIC18F45J10 系列
5.3.4 特殊功能寄存器
特殊功能寄存器 (Special Function Registers , SFR )
是 CPU 和外设模块用来控制器件操作的寄存器。这类
寄存器以静态 RAM 的形式实现。SFR 起始于数据存储
器的顶部(FFFh )并且向下扩展到存储区 15 的上半部
分(F80h 到 FFFh )。表 5-1 和表 5-2 列出了这些寄存
器。
可以将 SFR 归为两类:与 “内核”器件功能 (ALU 、
复位和中断)相关的寄存器和与外设功能相关的寄存
器。复位和中断寄存器在它们各自的章节中说明,而
ALU 的 STATUS 寄存器在本章稍后说明。 与外设功能相
关的寄存器将在该外设的章节中进行说明。
SFR 通常位于被其控制的外设中。未使用的 SFR 单元
不可用,它们的读取值为 0 。
表 5-1 : PIC18F45J10 系列器件的特殊功能寄存器映射图
地址 名称 地址 名称 地址 名称 地址 名称
(1)
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 —
FF2h INTCON FD2h
FF1h INTCON2 FD1h WDTCON FB1h
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 SSP2BUF
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 SSP1BUF FA9h
FE8h WREG FC8h SSP1ADD FA8h
FE7h INDF1
FE6h POSTINC1
FE5h POSTDEC1
FE4h PREINC1
FE3h PLUSW1
(1)
(1)
(1)
(1)
(1)
FC7h SSP1STAT FA7h EECON2
FC6h SSP1CON1 FA6h EECON1 F86h SSP2CON1
FC5h SSP1CON2 FA5h IPR3 F85h SSP2CON2
FC4h ADRESH FA4h PIR3 F84h PORTE
FC3h ADRESL FA3h PIE3 F83h PORTD
FE2h FSR1H FC2h ADCON0 FA2h IPR2 F82h PORTC
FE1h FSR1L FC1h ADCON1 FA1h PIR2 F81h PORTB
FE0h BSR FC0h ADCON2 FA0h PIE2 F80h PORTA
FBFh CCPR1H F9Fh IPR1
—
(1)
(1)
(1)
(1)
(2)
(2)
FBEh CCPR1L F9Eh PIR1
FBDh CCP1CON F9Dh PIE1
FBCh CCPR2H F9Ch —
FBBh CCPR2L F9Bh —
(2)
(3)
(3)
F99h —
F97h —
F96h TRISE
FB4h CMCON F94h TRISC
FB2h —
—
—
—
—
(2)
(2)
(2)
(2)
(2)
(2)
(1)
F93h TRISB
F92h TRISA
F91h —
F8Ah LATB
F89h LATA
F88h SSP2ADD
F87h SSP2STAT
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(3)
(3)
(3)
(3)
(3)
(3)
(3)
(3)
(3)
(3)
注 1: 这不是物理寄存器。
2: 不存在的寄存器,读取值为 0 。
3: 28 引脚器件上没有这些寄存器。
DS39682A_CN 第 56 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 5-2 : PIC18F24J10/25J10/44J10/45J10 寄存器汇总
寄存器名称
TOSU
TOSH
TOSL
STKPTR STKFUL STKUNF
PCLATU
PCLATH
PCL
TBLPTRU
TBLPTRH
TBLPTRL
TAB LAT
PRODH
PRODL
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 43, 81
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 : 请参见第 4.4 节 “欠压复位 (BOR ) (仅 PIC18F2XJ10/4XJ10 器件)”。
2: 这些寄存器和 / 或位在 28 引脚器件上不存在并且读为 0。此处给出了 40/44 引脚器件的复位值。未用位以 “—”表示。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
- - - 栈顶最高字节 (TOS<20:16>)
栈顶高字节 (TOS<15:8> )
栈顶低字节 (TOS<7:0> )
- 返回堆栈指针
- - - PC<20:16> 的保持寄存器
PC<15:8> 的保持寄存器
PC 低字节 ( PC<7:0>)
- -
程序存储器表指针高字节 (TBLPTR<15:8> )
程序存储器表指针低字节 (TBLPTR<7:0>)
程序存储器表锁存器
乘积寄存器高字节
乘积寄存器低字节
INTEDG0 INTEDG1 INTEDG2
使用 FSR0 的内容来寻址数据存储器- FSR0 的值不变 (不是物理寄存器)
使用 FSR0 的内容来寻址数据存储器- FSR0 的值后增 (不是物理寄存器)
使用 FSR0 的内容来寻址数据存储器- FSR0 的值后减 (不是物理寄存器)
使用 FSR0 的内容来寻址数据存储器- FSR0 的值预增 (不是物理寄存器)
使用 FSR0 的内容来寻址数据存储器- FSR0 的值预增 (不是物理寄存器), FSR0 的偏移量由 W 寄存器提供
- - - - 间接数据存储器地址指针 0 的高字节
间接数据存储器地址指针 0 的低字节
工作寄存器
使用 FSR1 的内容来寻址数据存储器- FSR1 的值不变 (不是物理寄存器)
使用 FSR1 的内容来寻址数据存储器- FSR1 的值后增 (不是物理寄存器)
使用 FSR1 的内容来寻址数据存储器- FSR1 的值后减 (不是物理寄存器)
使用 FSR1 的内容来寻址数据存储器- FSR1 的值预增 (不是物理寄存器)
使用 FSR1 的内容来寻址数据存储器- FSR1 的值预增 (不是物理寄存器), FSR1 的偏移量由 W 寄存器提供
- - - - 间接数据存储器地址指针 1 的高字节
间接数据存储器地址指针 1 的低字节
- - - - 存储区选择寄存器
使用 FSR2 的内容来寻址数据存储器 -FSR2 的值不改变 (不是物理寄存器)
使用 FSR2 的内容来寻址数据存储器 -FSR2 的值后增 (不是物理寄存器)
使用 FSR2 的内容来寻址数据存储器 -FSR2 的值后减 (不是物理寄存器)
使用 FSR2 的内容来寻址数据存储器 -FSR2 的值预增 (不是物理寄存器)
使用 FSR2 的内容来寻址数据存储器 -FSR2 的值预增 (不是物理寄存器), FSR2 的偏移量由 W 寄存器提供
- - - - 间接数据存储器地址指针 2 的高字节
间接数据存储器地址指针 2 的低字节
- - -
bit 21
-
程序存储器表指针最高字节 (TBLPTR<20:16> )
-
INT2IE INT1IE
NO VZD CC---x xxxx 44, 60
TMR0IP
-
-
INT2IF INT1IF 11-0 0-00 43, 83
RBIP 1111 -1-1 43, 82
上电复位与
欠压复位时
的值
---0 0000 43, 48
0000 0000 43, 48
0000 0000 43, 48
00-0 0000 43, 49
---0 0000 43, 48
0000 0000 43, 48
0000 0000 43, 48
--00 0000 43, 70
0000 0000 43, 70
0000 0000 43, 70
0000 0000 43, 70
xxxx xxxx 43, 77
xxxx xxxx 43, 77
---- xxxx 43, 62
xxxx xxxx 43, 62
xxxx xxxx 43
---- xxxx 43, 62
xxxx xxxx 43, 62
---- 0000 43, 53
---- xxxx 44, 62
xxxx xxxx 44, 62
详情请见:
(页)
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 43, 62
N/A 44, 62
N/A 44, 62
N/A 44, 62
N/A 44, 62
N/A 44, 62
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 57 页
PIC18F45J10 系列
表 5-2 : PIC18F24J10/25J10/44J10/45J10 寄存器汇总 (续)
寄存器名称
TMR0H
TMR0L
T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 4 4, 111
OSCCON IDLEN
WDTCON
RCON IPEN
TMR1H
TMR1L
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC
TMR2
PR2
T2CON
SSP1BUF
SSP1ADD
SSP1STAT SMP CKE D/A
SSP1CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 44, 147,
SSP1CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 44, 158
ADRESH
ADRESL
ADCON0 ADCAL
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 45, 225
CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0111 45, 219
图注: x = 未知, u = 不变,- = 未用位, q = 取值视具体情况而定
注 1 : 请参见第 4.4 节 “欠压复位 (BOR ) (仅 PIC18F2XJ10/4XJ10 器件)”。
2: 这些寄存器和 / 或位在 28 引脚器件上不存在并且读为 0。此处给出了 40/44 引脚器件的复位值。未用位以 “—”表示。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Timer0 寄存器的高字节
Timer0 寄存器的低字节
- - -
- - - - - - -
- -
Timer1 寄存器的高字节
Timer1 寄存器的低字节
Timer2 寄存器
Timer2 周期寄存器
T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 44, 121
-
MSSP1 接收缓冲器 / 发送寄存器
MSSP1 地址寄存器 ( I
A/D 结果寄存器的高字节
A/D 结果寄存器的低字节
- -
捕捉 / 比较 /PWM 寄存器 1 的高字节
捕捉 / 比较 /PWM 寄存器 1 的低字节
(2)
捕捉 / 比较 /PWM 寄存器 2 的高字节
捕捉 / 比较 /PWM 寄存器 2 的低字节
- -
2
C™ 从动模式)。 MSSP1 波特率重载寄存器 (I 2C 主控模式)
-
-
P1M0
CHS3 CHS2 CHS1 CHS0 GO/DONE
VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0qqq 44, 210
ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 0-00 0000 44, 211
(2)
DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000 45, 123,
DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 45, 123
(2)
-
PDC5
(2)
RI
PSR / WUA BF 0000 0000 44, 146,
SCKP BRG16
PDC4
OSTS
TO PD POR BOR
(2)
PDC3
(2)
-
-
PDC2
SCS1 SCS0 0--- q-00 28, 44
TMR1CS TMR1ON 0000 0000 44, 115
(2)
WUE ABDEN 01-0 0-00 45, 190
(2)
PDC1
(2)
SWDTEN --- ---0 44, 235
ADON 0-00 0000 44, 209
PDC0
PSSBD0
上电复位与
欠压复位时
0000 0000 44, 113
xxxx xxxx 44, 113
(1)
0--1 11q0 38, 42, 90
xxxx xxxx 44, 119
xxxx xxxx 44, 119
0000 0000 44, 122
1111 1111 44, 122
xxxx xxxx 44, 154
0000 0000 44, 155
xxxx xxxx 44, 218
xxxx xxxx 44, 218
xxxx xxxx 45, 124
xxxx xxxx 45, 124
xxxx xxxx 45, 124
xxxx xxxx 45, 124
(2)
0000 0000 45, 140
(2)
0000 0000 45, 141
的值
详情请见:
(页)
156
157
DS39682A_CN 第 58 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 5-2 : PIC18F24J10/25J10/44J10/45J10 寄存器汇总 (续)
寄存器名称
SPBRGH
SPBRG
RCREG
TXREG
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 45, 188
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 45, 189
EECON2
EECON1
IPR3 SSP2IP BCL2IP
PIR3 SSP2IF BCL2IF
PIE3 SSP2IE BCL2IE
IPR2 OSCFIP CMIP
PIR2 OSCFIF CMIF
PIE2 OSCFIE CMIE
IPR1 PSPIP
PIR1 PSPIF
PIE1 PSPIE
(2)
TRISE
(2)
TRISD
TRISC
TRISB
TRISA
SSP2BUF
(2)
LATE
(2)
LATD
LATC
LATB
LATA
SSP2ADD
SSP2STAT SMP CKE D/A
SSP2CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 46, 147,
SSP2CON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 46, 158
(2)
PORTE
(2)
PORTD
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx 46, 100
PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx 46, 97
PORTA
图注: x = 未知, u = 不变,- = 未用位, q = 取值视具体情况而定
注 1 : 请参见第 4.4 节 “欠压复位 (BOR ) (仅 PIC18F2XJ10/4XJ10 器件)”。
2: 这些寄存器和 / 或位在 28 引脚器件上不存在并且读为 0。此处给出了 40/44 引脚器件的复位值。未用位以 “—”表示。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EUSART 波特率发生器寄存器的高字节
EUSART 波特率发生器寄存器的低字节
EUSART 接收寄存器
EUSART 发送寄存器
EEPROM 控制寄存器 2 (不是物理寄存器)
- - -
- - - - - -
- - - - - -
- - - - - -
- -
- -
(2)
ADIP RCIP TXIP SSP1IP CCP1IP TMR2IP TMR1IP 1111 1111 45, 88
(2)
ADIF RCIF TXIF SSP1IF CCP1IF TMR2IF TMR1IF 0000 0000 45, 84
(2)
ADIE RCIE TXIE SSP1IF CCP1IE TMR2IE TMR1IE 0000 0000 45, 86
IBF OBF IBOV PSPMODE
PORTD 数据方向控制寄存器
PORTC 数据方向控制寄存器
PORTB 数据方向控制寄存器
- -
MSSP2 接收缓冲器 / 发送寄存器
- - - - - PORTE 数据锁存器
PORTD 数据锁存器 (读取和写入数据锁存器)
PORTC 数据锁存器 (读取和写入数据锁存器)
PORTB 数据锁存器 (读取和写入数据锁存器)
- - PORTA 数据锁存器 (读取和写入数据锁存器)
MSSP2 地址寄存器 ( I
- - - - -
RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 xxxx xxxx 46, 103
- -
2
- -
TRISA5
C™ 从动模式)。 MSSP2 波特率重载寄存器 (I 2C 主控模式)。
RA5
FREE WRERR WREN WR
BCL1IP
BCL1IF
BCL1IE
-
-
PSR / WUA BF 0000 0000 46, 146,
-
TRISA3 TRISA2 TRISA1 TRISA0 --1- 1111 46, 94
R A 3R A 2R A 1R A 0--0- 0000 46, 94
- -
- -
- -
TRISE2 TRISE1 TRISE0 1111 -111 46, 107
(读取和写入数据锁存器)
(2)
RE2
RE1
CCP2IP 11-- 1--1 45, 89
CCP2IF 00-- 0--0 45, 85
CCP2IE 00-- 0--0 45, 87
(2)
RE0
上电复位与
欠压复位时
0000 0000 45, 192
0000 0000 45, 192
0000 0000 45, 199
xxxx xxxx 45, 197
0000 0000 45, 68
---0 x00- 45, 69
-
11-- ---- 45, 89
00-- ---- 45, 85
00-- ---- 45, 87
1111 1111 46, 103
1111 1111 46, 100
1111 1111 46, 97
xxxx xxxx 46, 154
---- -xxx 46, 106
xxxx xxxx 46, 103
xxxx xxxx 46, 100
xxxx xxxx 46, 97
--xx xxxx 46, 94
0000 0000 46, 154
(2)
---- -xxx 46, 106
的值
详情请见:
(页)
156
157
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 59 页
PIC18F45J10 系列
5.3.5 STATUS 寄存器
如寄存器 5-2 所示,STATUS 寄存器包含ALU 的算术运
算状态。和其他 SFR 一样,它可以是任何指令的操作
数。
如果一条影响 Z 、DC、C、OV 或 N 位的指令以 STATUS
寄存器作为目标寄存器,指令执行的结果将不会被直接
写入,而是根据执行的指令来更新 STATUS 寄存器。所
以,当执行一条把 STATUS 寄存器作为目标寄存器的指
令后,STATUS 寄存器的结果可能和预想的不一样。例
如,执行 CLRF STATUS 将把 Z 位置 1 ,而其他状态位
保持不变 (000u u1uu )。
寄存器 5-2 : STATUS 寄存器
U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x
- - -
bit 7 bit 0
bit 7-5
bit 4
bit 3
bit 2
bit 1
bit 0
未用:读为 0
N :负标志位
此位用于有符号的算术运算 (二进制补码)。它表示结果是否为负 (ALU MSB = 1 )。
1 = 结果为负
0 = 结果为正
OV :溢出位
此位用于有符号的算术运算 (二进制补码)。 表明溢出了 7 位二进制数的范围,溢出将导致符
号位 (结果的 bit 7 )发生改变。
1 = 有符号的算术运算中发生溢出 (本次运算)
0 = 没有发生溢出
Z:全零标志位
1 = 算术运算或逻辑运算结果为零
0 = 算术运算或逻辑运算结果不为零
DC :辅助进位 / 借位
用于 ADDWF 、 ADDLW 、 SUBLW 和 SUBWF 指令:
1 = 结果的第 4 个低有效位发生了进位
0 = 结果的第 4 个低有效位未发生进位
注: 对于借位
于移位指令 (RRF 或 RLF ),此位的值来自源寄存器的 bit 4 或 bit 3 。
C :进位 / 借位
用于 ADDWF 、 ADDLW 、 SUBLW 和 SUBWF 指令:
1 = 结果的最高有效位发生了进位
0 = 结果的最高有效位未发生进位
注: 对于借位
于移位指令 (RRF 或 RLF ),此位的值来自源寄存器的最高位或最低位。
位
,极性是相反的。减法是通过加上第二个操作数的二进制补码实现的。对
位
,极性是相反的。减法是通过加上第二个操作数的二进制补码实现的。对
因此,建议仅使用 BCF 、BSF、SWAPF、 MOVFF和 MOVWF
指令来改变 STATUS 寄存器,因为这些指令不会影响该
寄存器中的 Z、 C、 DC、 OV 或 N 位。
欲知其他不会影响状态位的指令,请参见表 21-2 和
表 21-3 中的指令集综述。
注: 在减法运算中, C 和 DC 分别作为借位
(borrow )和辅助借位 (digit borrow )。
NO V Z D CC
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
DS39682A_CN 第 60 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
5.4 数据寻址模式
注: 当使能 PIC18 扩展指令集时, PIC18 内核
指令集中的某些指令的执行会发生改变。
更多信息,请参见第 5.5 节“数据存储器和
扩展指令集”。
虽然只能用一种方法(即通过程序计数器)对程序存储
器进行寻址,但是可以用多种方法来对数据存储空间进
行寻址。对于大多数指令,寻址模式是固定的。其他指
令最多可以使用 3 种模式,具体使用哪一种模式取决于
使用哪些操作数以及是否使能了扩展指令集。
寻址模式有:
• 固有寻址
• 立即数寻址
• 直接寻址
• 间接寻址
当使能扩展指令集 (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
(存储区 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
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 61 页
PIC18F45J10 系列
5.4.3.1 FSR 寄存器和 INDF 操作数
间接寻址的核心是三组寄存器 :FSR0、FSR1和FSR2。
每组寄存器都代表一对 8 位寄存器,FSRnH 和 FSRnL。
FSRnH 寄存器的高四位未使用,所以每对 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 寄存器还有四个额外
的间接操作数。和 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-7 : 间接寻址
使用将一个间接寻址寄存器作为操
作数的指令……
……使用与该寄存器相关的 FSR 对
中的 12 位地址……
……确定将在该操作中使用的数据
存储单元。
在本例中,FSR1 寄存器对中的值为
ECCh 。这意味着将把 ECCh 单元的
内容与 W 寄存器的内容相加,并将
结果存储回 ECCh 单元。
ADDWF INDF1,1
FSR1H:FSR1L
0 7
7
xxxx1110 11001100
000h
存储区 0
100h
200h
300h
0
E00h
F00h
FFFh
存储区 1
存储区 2
存储区 3
到
存储区 13
存储区 14
存储区 15
数据存储器
DS39682A_CN 第 62 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
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 扩展的指令集将更改使用 FSR2 寄存器对在
快速操作 RAM 内进行间接寻址的方式。在适当的条件
下,使用快速操作存储区的指令(即面向位和字节的指
令)可以利用指令中的偏移量来执行变址寻址。这种特
定的寻址模式被称为使用立即数偏移量的变址寻址或立
即数变址寻址模式。
在使用扩展的指令集时,这种寻址模式有如下要求:
• 强制使用快速操作存储区 (“a” = 0);且
• 指针地址参数要小于或等于 5Fh。
在这些条件下,指令的 f 地址不被解析为地址的低字节
(在直接寻址中与 BSR 一起使用)或快速操作存储区中
的 8 位地址。相反,该值被解析为由 FSR2 指定的地址
指针的偏移量。该偏移量与 FSR2 的内容相加以获得操
作的目标地址。
5.5.2 受立即数变址寻址模式影响的指令
任何使用直接寻址的PIC18 内核指令均会受到立即数变
址寻址模式的潜在影响,包括所有面向字节和位的指
令,或标准 PIC18 指令集中几乎一半的指令。 只能使用
固有或立即数寻址模式的指令不受影响。
此外,如果面向字节和位的指令不使用快速操作存储区
(快速操作 RAM 位为 “1 ”)或包含 60h 以上的地址,
它们也不受影响。 符合这些条件的指令会像以前一样执
行。 图 5-8 给出了当使能了扩展指令集时,各种寻址模
式之间的对比。
那些想要在立即数变址寻址模式中使用面向字节或位指
令的用户,应该注意此模式下汇编语法的改变。
第 21.2.1 节 “扩展指令的语法”中将对此进行更详细
的说明。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 63 页
PIC18F45J10 系列
图 5-8 : 面向位和字节的指令的寻址模式对比 (使能了扩展指令集)
指令示例 : ADDWF f, d, a (操作码 : 0010 01da ffff ffff)
当 a = 0 且 f ≥ 60h :
此指令以直接强制模式执行。
“f ”被解析为快速操作 RAM 中
060h 和 0FFh 之间的单元地
址。 这实际上是从 060h 到
07Fh (存储区 0 )和从 F80h
到 FFFh (存储区 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
存储区 0
存储区 1
到
存储区 14
存储区 15
SFR
数据存储器
存储区 0
存储区 1
到
存储区 14
存储区 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
F00H
F80H
FFFH
存储区 0
存储区 1
到
存储区 14
存储区 15
SFR
数据存储器
DS39682A_CN 第 64 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
5.5.3 在立即数变址寻址模式下映射快速操
作存储区
使用立即数变址寻址模式能改变快速操作 RAM 前 96 个
单元地址 (00h 到 5Fh )的映射方式。 此模式映射存储
区 0 的内容和由用户定义的可以位于数据存储器空间中
任何地方的“窗口”内容,而不是仅仅包含存储区 0 下
半部分的内容。 FSR2 的值定义映射到窗口的地址的下
边界,而上边界则由 FSR2 加 95 (5Fh )决定。 地址为
5Fh 以上的快速操作 RAM 的映射方法如前所述 (参见
快速操作存储区的重新映射
模式。使用 BSR (快速操作 RAM 位为 1 )的操作和前
面一样继续使用直接寻址模式。
5.6 PIC18 指令执行和扩展指令集
使能扩展指令集会在现有的 PIC18 指令集中添加 8 条额
外的指令。 第 21.2 节“扩展的指令集”给出了这些指令
执行的方式。
第 5.3.2 节“快速操作存储区”)。图 5-9 给出了在此寻
址模式中重新映射快速操作存储区的示例。
图 5-9 : 使用立即数变址寻址重新映射快速操作存储区
指令示例 :
ADDWF f, d, a
FSR2H:FSR2L = 120h
由 FSR2 指针 (120h )到
该指针加上 05Fh (17Fh )
指定区域内的存储单元被
映射到快速操作 RAM 的底
部(000h 到 05Fh)。
存储区 0 中从060h 到07Fh
的单元被映射到快速操作
存储区的中部。
位于 F80h 到 FFFh 的特殊
功能寄存器像往常一样被
映射到 80h 到 FFh 。
仍然使用 BSR 对地址低于
5Fh 的存储区 0 中的单元进
行寻址。
000h
05Fh
07Fh
100h
120h
17Fh
200h
F00h
F80h
FFFh
存储区 0
存储区 0
存储区 1
窗口
存储区 1
存储区 2
到
存储区 14
存储区 15
SFR
数据存储器
仅适用于
立即数变址寻址
存储区 1“窗口”
存储区 0
SFR
快速操作 存储区
00h
5Fh
7Fh
80h
FFh
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 65 页
PIC18F45J10 系列
注:
DS39682A_CN 第 66 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
6.0 闪存程序存储器
在整个 VDD 范围内,闪存程序存储器在正常工作状态下
都是可读写并可擦除的。
对程序存储器执行读操作时每次读取一个字节。对程序
存储器执行写操作时每次写入一个64 字节的数据块。对
程序存储器执行擦除操作按照每次 1024 字节的数据块
进行。不允许用户代码执行批量擦除操作。
写或擦除程序存储器将中止取指操作,直到写或擦除操
作完成为止。在写或擦除期间不能访问程序存储器,因
此无法执行代码。内部编程定时器可终止程序存储器的
写入和擦除操作。
写入程序存储器的值不必是有效指令。执行存有无效指
令的程序存储器单元会导致执行 NOP 指令。
图 6-1 : 表读操作
6.1 表读和表写
为了读取和写入程序存储器,有两种操作可以让处理器
在程序存储空间和数据 RAM 之间传送字节。
• 表读 (TBLRD )
• 表写 (TBLWT )
程序存储空间为 16 位宽,而数据 RAM 空间为 8 位宽。
表读和表写操作通过一个 8 位寄存器 (TABLAT )在这
两个存储空间之间传送数据。
表读操作从程序存储器获取数据并将其存入数据RAM 。
图 6-1 给出了在程序存储器和数据 RAM 之间进行表读
操作的过程。
表写操作将数据存储空间中的数据存入程序存储器中的
保持寄存器。第 6.5 节“写入闪存程序存储器”将详细介
绍将保持寄存器中的内容写入程序存储器的过程。
图 6-2 给出了在程序存储器和数据RAM 之间进行表写操
作的过程。
表操作以字节为单位进行。一个仅包含数据而非程序指
令的表块不必字对齐。因此,表块可在任何字节地址处
开始和结束。如果使用表写操作将可执行代码写入程序
存储器,程序指令就需要进行字对齐。
表指针
TBLPTRU
注 1:表指针寄存器指向程序存储器中的某一字节。
(1)
TBLPTRH TBLPTRL
程序存储器
(TBLPTR )
指令 :TBLRD*
程序存储器
表锁存器(8 位)
TAB LAT
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 67 页
PIC18F45J10 系列
图 6-2 : 表写操作
表指针
TBLPTRU
注 1 :表指针实际指向的是 64 个保持寄存器中的某一个,其地址由 TBLPTRL<5:0> 决定。第 6.5 节 “写入闪
存程序存储器”中将讨论将数据写入程序存储器阵列的物理过程。
(1)
TBLPTRH TBLPTRL
程序存储器
(TBLPTR )
指令 :TBLWT*
程序存储器
保持寄存器
表锁存器(8 位)
TAB LAT
6.2 控制寄存器
TBLRD 和 TBLWT 指令要用到几个控制寄存器。包括:
• EECON1 寄存器
• EECON2 寄存器
• TABLAT 寄存器
• TBLPTR 寄存器
6.2.1 EECON1 和 EECON2 寄存器
EECON1 寄存器(寄存器 6-1)是访问存储器的控制寄
存器。EECON2 寄存器不是物理寄存器,它专用于存储
器的擦写操作。读取 EECON2 得到的是全 0 。
若将FREE 位置 1 ,则允许对程序存储器进行擦除操作。
擦除操作由下一个 WR 命令触发。当 FREE 位清零时,
则只使能写操作。
若将WREN 位置1 ,则允许写操作。上电时将清零WREN
位。在 WR 位置 1 时,WRERR 位将被硬件置 1 ;当内部
编程定时器超时并且写操作完成时,清零 WRERR 位。
注: 如果在正常工作期间, WRERR 的读取值
为1 ,则表明写操作因复位而提早终止或进
行了非法的写操作。
控制位 WR 用于启动写操作。此位只能由软件置 1 而不
能清零。写操作完成后,由硬件将其清零。
DS39682A_CN 第 68 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
寄存器 6-1 : EECON1 :数据 EEPROM 控制寄存器 1
U-0 U-0 U-0 R/W-0 R/W-x R/W-0 R/S-0 U-0
- - -
bit 7 bit 0
FREE WRERR WREN WR
-
bit 7-5
bit 4
bit 3
bit 2
bit 1
bit 0
未用:读为 0
FREE :闪存行擦除使能位
1 = 在下一个 WR 命令时,擦除由 TBLPTR 指定的程序存储器行 (擦除操作完成时清零)
0 = 仅执行写操作
WRERR:闪存程序 / 数据 EEPROM 故障标志位
1 = 写操作提早终止 (由于正常工作中自定时编程期间的任何复位,或非法写入)
0 = 写操作完成
WREN:闪存程序 / 数据 EEPROM 写使能位
1 = 允许闪存程序 / 数据 EEPROM 的写周期
0 = 禁止闪存程序 / 数据 EEPROM 的写周期
WR:写控制位
1 = 启动数据 EEPROM 擦写周期或程序存储器擦写周期。
(该操作是自定时的,一旦写入完成即由硬件将该位清零。 软件只能将该位置1而不能清零。)
0 = 写入 EEPROM 的周期完成
未用:读为 0
图注:
R = 可读位 W = 可写位
S = 只能由软件置 1 而不能清零的位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 =清零 x = 未知
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 69 页
PIC18F45J10 系列
6.2.2 TABLAT ——表锁存寄存器
表锁存器(Table Latch,TABLAT)是映射到 SFR 空间
的一个 8 位寄存器。它用于在程序存储器和数据 RAM
之间传输数据时保存 8 位数据。
6.2.3 TBLPTR ——表指针寄存器
表指针 (Table Pointer, TBLPTR )在程序存储器中寻
址字节。 TBLPTR 由 3 个 SFR 寄存器组成:表指针最
高字节、表指针高字节和表指针低字节
(TBLPTRU:TBLPTRH:TBLPTRL)。 这 3 个寄存器合
起来组成一个 22 位宽的指针,其中低 21 位可使器件寻
址至多 2 MB 的程序存储空间。第 22 位则允许访问器件
ID 、用户 ID 以及配置位。
TBLRD 和 TBLWT 指令使用表指针寄存器 TBLPTR 。利
用表操作的四种方法之一,这些指令可以更新
TBLPTR。 表 6-1 列出了这些操作。这些操作只会影响
TBLPTR 的低 21 位。
6.2.4 表指针边界
TBLPTR 用于闪存程序存储器的读取、写入和擦除。
当执行 TBLRD 时,表指针的所有 22 位决定将程序存储
器哪个单元的数据读入 TABLAT。
当执行 TBLWT 时,表指针寄存器的低 6 位
(TBLPTR<5:0> )决定要写入 64 个程序存储器保持寄
存器的哪一个。当开始定时写入程序存储器时 (通过
WR 位),表指针寄存器的高 16 位( TBLPTR<21:6>)
决定要写入哪一个 64 字节的程序存储块。如需更多详
情,请参见第 6.5 节 “写入闪存程序存储器”。
当擦除程序存储器时,表指针的高 12 位
(TBLPTR<21:10> )指向将要被擦除的 1024 字节块,
其低 10 位(TBLPTR<9:0>)被忽略。
图 6-3 说明了基于闪存程序存储器操作的相关 TBLPTR
边界。
表 6-1 :使 用TBLRD 和 TBLWT 指令执行表指针操作
示例 表指针操作
TBLRD*
TBLWT*
TBLRD*+
TBLWT*+
TBLRD*TBLWT*-
TBLRD+*
TBLWT+*
不修改 TBLPTR
TBLPTR 在读 / 写后递增
TBLPTR 在读 / 写后递减
TBLPTR 在读 / 写前递增
图 6-3: 基于操作的表指针边界
21 16 15 87 0
TBLPTRU
TBLPTR<21:10>
TBLPTRH
表擦除
表写 表写
表读——TBLPTR<21:0>
TBLPTRL
TBLPTR<5:0> TBLPTR<21:6>
DS39682A_CN 第 70 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
6.3 读取闪存程序存储器
TBLRD 指令用于从程序存储器获取数据并存入数据
RAM 。表读操作每次从程序存储器读取一个字节。
图 6-4 : 读取闪存程序存储器
程序存储器
(偶字节地址)
TBLPTR 指向程序存储空间内的某个字节。执行 TBLRD
会将指向的字节存入 TABLAT。另 外,可 以自动修改
TBLPTR 以进行下次表读操作。
内部程序存储器通常是以字为单位构成的。由地址的最
低有效位选择字的高字节或者低字节。图 6-4 显示了内
部程序存储器和 TABLAT 之间的接口。
(奇字节地址)
TBLPTR = xxxxx1
TBLPTR = xxxxx0
指令寄存器
(IR )
取指
例 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
读寄存器
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 71 页
PIC18F45J10 系列
6.4 擦除闪存程序存储器
最小擦除块为 1024 个字节。只有通过使用外部编程器
或通过 ICSP 控制,才能够批量擦除更大的程序存储器
块。闪存阵列不支持字擦除。
6.4.1 闪存程序存储器擦除序列
擦除内部程序存储器块的事件顺序如下:
1. 将要擦除的行地址装入表指针。
2. 设置 EECON1 寄存器以执行擦除操作:
当从单片机本身启动擦除过程时,将擦除程序存储器的
一个 1024 字节的块。 TBLPTR<21:10> 指向将被擦除的
块。 TBLPTR<9:0> 被忽略。
擦除操作由 EECON1 寄存器控制。必须将 WREN 位置
1 以使能写操作。必须将 FREE 位置 1 以选择擦除操作。
作为保护机制,必须采用 EECON2 的写操作启动序列。
对于擦除内部闪存,长写周期是必要的。在长写周期
3. 禁止中断。
4. 向 EECON2 写入 55h。
5. 向 EECON2 写入 0AAh。
6. 将 WR 位置 1。这将启动行擦除周期。
7. 在擦除操作期间, CPU 将停止工作 (内部定时
中,指令暂停执行。内部编程定时器将终止长写周期操
作。
8. 重新允许中断。
例 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
ERASE_ROW
必须的 MOVLW 55h
序列 MOVWF EECON2 ; write 55h
MOVWF TBLPTRL
BSF EECON1, WREN ; enable write to memory
BSF EECON1, FREE ; enable Row Erase operation
BCF INTCON, GIE ; disable interrupts
MOVLW 0AAh
MOVWF EECON2 ; write 0AAh
BSF EECON1, WR ; start erase (CPU stall)
BSF INTCON, GIE ; re-enable interrupts
• 将 WREN 位置 1 以使能写操作;
• 将 FREE 位置 1 以使能擦除操作。
器计时 2ms左右)。
DS39682A_CN 第 72 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
6.5 写入闪存程序存储器
最小编程块为 32 字(即 64 字节)。不支持字或字节编
程。
表写操作用于将数据装入编程闪存存储器所需的保持寄
存器。表写操作使用 64 个保持寄存器进行编程。
因为表锁存器 (TAB LAT )仅一个单字节大小,所以每
次编程操作必须执行 64 次 TBLWT 指令。由于只写入保
持寄存器,所有表写操作实际上都是短周期写操作。在
更新完 64 个寄存器后,必须写入 EECON1 寄存器,以
便使用长写操作开始编程。
对于编程内部闪存而言,长写周期是必须的。在长写周
期中,指令暂停执行。内部编程定时器将终止长写周期
操作。
图 6-5 : 对闪存程序存储器执行表写操作
TABLAT
写寄存器
8
8 8 8
TBLPTR = xxxxx2
EEPROM 片上定时器控制写操作的时间。写/擦除电
压由可在器件电压范围内运行的片上电荷泵产生。
注: 与早期的器件不同, PIC18F45J10 系列器
件在写操作发生后并不会复位保持寄存
器。 必须在编程序列之前清零或改写保持
寄存器。
为了保证闪存的耐擦写寿命,在两次擦除
操作之间不应对某一闪存字节编程多于两
次。 在第三次尝试改写目标行的内容之
前,需要对其执行批量或行擦除。
TBLPTR = xxxx3F TBLPTR = xxxxx1 TBLPTR = xxxxx0
保持寄存器 保持寄存器 保持寄存器 保持寄存器
6.5.1 闪存程序存储器写操作序列
对内部程序存储器编程的事件顺序应该为:
1. 如果要写入的程序存储器段已被事先编程,那么
在写入之前必须首先将其擦除 (见第 6.4.1 节
“闪存程序存储器擦除序列”)。
2. 通过自动递增将 64 个字节写入保持寄存器。
3. 设置 EECON1 寄存器以执行写操作:
• 将 WREN 位置 1 以使能字节写入。
4. 禁止中断。
程序存储器
5. 向 EECON2 写入 55h。
6. 向 EECON2 写入 0AAh。
7. 将 WR 位置 1。这将启动写周期。
8. 在写操作期间 CPU 将停止工作 (内部定时器计
时 2ms左右)。
9. 重新允许中断。
10. 校验存储器 (表读)。
例 6-3 给出了所需的代码示例。
注: 在 WR 位置 1 前,表指针地址需要在保持
寄存器的 64 字节地址范围内。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 73 页
PIC18F45J10 系列
例 6-3 : 写入闪存程序存储器
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_BLOCK
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
MOVLW D'16'
MOVWF WRITE_COUNTER ; Need to write 16 blocks of 64 to write
RESTART_BUFFER
MOVLW D'64'
MOVWF COUNTER
MOVLW BUFFER_ADDR_HIGH ; point to buffer
MOVWF FSR0H
MOVLW BUFFER_ADDR_LOW
MOVWF FSR0L
FILL_BUFFER
... ; read the new data from I2C, SPI,
WRITE_BUFFER
MOVLW D'64' ; number of bytes in holding register
MOVWF COUNTER
WRITE_BYTE_TO_HREGS
MOVFF POSTINC0, WREG ; get low byte of buffer data
MOVWF TABLAT ; present data to table latch
TBLWT+* ; write data, perform a short write
DECFSZ COUNTER ; loop until buffers are full
BRA WRITE_WORD_TO_HREGS
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
; one erase block of 1024
; PSP, USART, etc.
; to internal TBLWT holding register.
DECFSZ WRITE_COUNTER ; done with one write cycle
BRA RESTART_BUFFER ; if not done replacing the erase block
DS39682A_CN 第 74 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
6.5.2 写校验
根据具体的应用,好的编程习惯一般要求使用原始值对
写入值进行校验。当连续写入过多的数据已接近规范极
限值时,就应该采用写校验。
6.5.3 写操作意外终止
如果由于意外事件 (如掉电或意外复位)终止了写操
作,就应该对刚刚编程的存储单元进行验证,如有必
要,还要重新进行编程。如果写入操作在正常操作过程
中被 MCLR
据需要检测 WRERR 位并重新写入。
复位或 WDT 超时复位中断,用户就可以根
6.5.4 避免误写操作
为了防止误写闪存程序存储器,必须遵循写操作启动顺
序。 更多详情,请参见第 20.0 节“CPU 的特殊性能”。
6.6 代码保护时的闪存程序存储器操作
如需了解有关闪存程序存储器代码保护的详情,请参见
第 20.6 节 “程序校验和代码保护”。
表 6-2 : 与闪存程序存储器相关的寄存器
名称
TBLPTRU
TBPLTRH
TBLPTRL
TAB LAT
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 43
EECON2
EECON1
IPR2
PIR2
PIE2
图注: - = 未用,读为 0 。访问闪存 /EEPROM 存储器时不使用阴影单元。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
- -
程序存储器表指针高字节 (TBLPTR<15:8> )
程序存储器表指针低字节 (TBLPTR<7:0> )
程序存储器表锁存器
EEPROM 控制寄存器 2 (非物理寄存器)
- - -
OSCFIP CMIP
OSCFIF CMIF
OSCFIE CMIE
bit 21
程序存储器表指针最高字节 (TBLPTR<20:16> )
- -
- -
- -
FREE WRERR WREN WR
BCL1IP
BCL1IF
BCL1IE
- -
- -
- -
-
CCP2IP 45
CCP2IF 45
CCP2IE 45
复位值
所在页
43
43
43
43
45
45
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 75 页
PIC18F45J10 系列
注:
DS39682A_CN 第 76 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
7.0 8 x 8 硬件乘法器
7.1 简介
所有的 PIC18 器件均包含一个 8 x 8 硬件乘法器(乘法
器是 ALU 的一部分)。该乘法器可执行无符号运算并产
生一个 16 位运算结果,该结果存储在一对乘积寄存器
PRODH:PRODL 中。该乘法器执行的运算不会影响
STATUS 寄存器中的任何标志位。
通过硬件执行乘法运算只需要 1 个指令周期。硬件乘法
器具有更高的计算吞吐量并减少了乘法算法的代码长
度,从而可在许多先前仅能使用数字信号处理器的应用
中使用 PIC18 器件。表 7-1 给出了各种硬件和软件乘法
运算的比较,包括所需的存储空间和执行时间。
7.2 工作原理
例 7-1 给出了一个 8 x 8 无符号乘法运算的指令序列。当
已在 WREG 寄存器中装入了一个乘数时,实现该运算仅
需一条指令。
例 7-2 给出了执行8 x 8 有符号乘法运算的指令序列。 要
弄清乘数的符号位,必须检查每个乘数的的最高有效位
(MSb ),并做相应的减法。
例 7-1 : 8 x 8 无符号乘法程序
MOVF ARG1, W ;
MULWF ARG2 ; ARG1 * ARG2 ->
; PRODH:PRODL
例 7-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
表 7-1 : 各种乘法运算的性能比较
程序 乘法实现方法
8 x 8 无符号
8 x 8 有符号
16 x 16 无符号
16 x 16 有符号
软件乘法
硬件乘法
软件乘法
硬件乘法
软件乘法
硬件乘法
软件乘法
硬件乘法
程序
存储空间
(字数)
13 69 6.9 µ s 27.6 µ s 69 µs
1 1 100 ns 400 ns 1 µs
33 91 9.1 µ s 36.4 µ s 91 µs
6 6 600 ns 2.4 µs6 µs
21 242 24.2 µ s 96.8 µ s2 4 2 µs
28 28 2.8 µ s1 1 . 2 µs 28 µs
52 254 25.4 µ s 102.6 µ s2 5 4 µs
35 40 4.0 µ s 16.0 µ s 40 µs
周期数
(最多)
@40 MHz @10 MHz @4 MHz
时间
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 77 页
PIC18F45J10 系列
例 7-3 给出了 16 x 16 无符号乘法运算的指令序列。公
式 7-1 为所使用的算法。32 位运算结果存储在 4 个寄存
器(RES3:RES0)中。
公式 7-1 : 16 x 16 无符号乘法算法
RES3:RES0 = ARG1H:ARG1L • ARG2H:ARG2L
= (ARG1H • ARG2H • 2
(ARG1H • ARG2L • 2
(ARG1L • ARG2H • 2
(ARG1L • ARG2L)
16
) +
8
) +
8
) +
例 7-3 : 16 x 16 无符号乘法程序
MOVF ARG1L, W
MULWF ARG2L ; ARG1 L * ARG 2L->
MOVFF PRODH, RES1 ;
MOVFF PRODL, RES0 ;
;
MOVF ARG1H, W
MULWF ARG2H ; ARG1 H * ARG 2H->
MOVFF PRODH, RES3 ;
MOVFF PRODL, RES2 ;
;
MOVF ARG1L, W
MULWF ARG2H ; ARG1 L * ARG 2H->
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 ; ARG1 H * ARG 2L->
MOVF PRODL, W ;
ADDWF RES1, F ; Add cross
MOVF PRODH, W ; products
ADDWFC RES2, F ;
CLRF WREG ;
ADDWFC RES3, F ;
例 7-4 给出了 16 x 16 有符号乘法运算的指令序列。公
式 7-2 为所使用的算法。32 位运算结果存储在 4 个寄存
器(RES3:RES0)中。 要弄清乘数的符号位,必须检
查每个乘数的最高有效位 (MSb ),并做相应的减法。
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
公式 7-2 : 16 x 16 有符号乘法算法
RES3:RES0 = ARG1H: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
例 7-4 : 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 ;
;
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
) +
)
DS39682A_CN 第 78 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
8.0 中断
PIC18F45J10 系列的器件具有多个中断源及一个中断
优先级功能,可以给大多数中断源分配高优先级或者低
优先级。高优先级中断矢量地址为 0008h ,低优先级中
断矢量地址为 0018h 。高优先级中断事件将中断所有正
在处理的低优先级中断。
有 13 个寄存器用于控制中断操作。这些寄存器是:
• RCON
• INTCON
• INTCON2
• INTCON3
• PIR1、 PIR2 和 PIR3
• PIE1、 PIE2 和 PIE3
• IPR1、 IPR2 和 IPR3
®
建议使用 MPLAB
些寄存器中的位。这使得汇编器 / 编译器能够自动识别
指定寄存器内这些位的位置。
通常,用三个位来控制中断源的操作。它们是:
• 标志位表明发生了中断事件
• 使能位当标志位置 1 时,使程序跳转到中断矢量
地址处执行
• 优先级位用于选择是高优先级还是低优先级
通过将 IPEN 位(RCON<7>)置 1 ,可使能中断优先
级功能。当使能中断优先级时,有 2 位可允许全局中断。
将 GIEH 位(INTCON<7>)置 1,可允许 所有优先级位已
置 1 (高优先级)的中断。将 GIEL 位(INTCON<6>)置
1 ,可允许所有优先级位已清零 (低优先级)的中断。
当中断标志位、使能位以及相应的全局中断允许位均被
置 1 时,程序将立即跳转到中断矢量地址 0008h 或
0018h ,跳转到哪个地址取决于优先级位的设置。通过
设置相应的使能位可以禁止单个中断。
IDE 提供的 Microchip 头文件命名这
当 IPEN 位清零 (默认状态)时 , 便会禁止中断优先级
功能,并且中断与 PICmicro
模式下,各个中断源的中断优先级位均不起作用。
INTCON<6> 是 PEIE 位,它可允许 / 禁止所有的外设中
断源。 INTCON<7> 是 GIE 位,它可允许 / 禁止所有的
中断源。在兼容模式下,所有中断均跳转到地址
0008h 。
当响应中断时,全局中断允许位被清零以禁止其他中
断。如果清零 IPEN 位,全局中断允许位就是 GIE 位。
如果使用中断优先级,这个位将是 GIEH 位或者 GIEL
位。高优先级中断源会中断低优先级中断。处理高优先
级中断时,低优先级中断将不被响应。
返回地址被压入堆栈,PC 中装入中断矢量地址(0008h
或 0018h )。进入中断服务程序之后,就可以通过查询
中断标志位来确定中断源。在重新允许中断前,必须用
软件将中断标志位清零,以避免重复响应该中断。
执行 “从中断返回”指令 RETFIE 退出中断程序并将
GIE 位 (若使用中断优先级,则为 GIEH 或 GIEL 位)
置 1 ,从而重新允许中断。
对于外部中断事件,诸如 INT 引脚中断或者 PORTB 输
入电平变化中断,中断响应延时将会是 3 到 4 个指令周
期。对于单周期或双周期指令,中断响应延时完全相
同。各中断标志位的置 1 不受对应的中断允许位和 GIE
位状态的影响。
注: 当允许任何中断时,不要使用 MOVFF 指令
来修改任何中断控制寄存器。否则可能引
起单片机执行出错。
®
中档器件相兼容。在兼容
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 79 页
PIC18F45J10 系列
图 8-1 : PIC18F24J10/25J10/44J10/45J10 中断逻辑
产生高优先级中断
产生低优先级中断
PIR1<7:0>
PIE1<7:0>
IPR1<7:0>
PIR2<7:6, 3, 0>
PIE2<7:6, 3, 0>
IPR2<7:6, 3, 0>
PIR3<7:6>
PIE3<7:6>
IPR3<7:6>
PIR1<7:0>
PIE1<7:0>
IPR1<7:0>
PIR2<7:6, 3, 0>
PIE2<7:6, 3, 0>
IPR2<7:6, 3, 0>
PIR3<7:6>
PIE3<7:6>
IPR3<7:6>
IPEN
TMR0IF
TMR0IE
TMR0IP
RBIF
RBIE
RBIP
INT1IF
INT1IE
INT1IP
INT2IF
INT2IE
INT2IP
TMR0IF
TMR0IE
TMR0IP
INT0IF
INT0IE
INT1IF
INT1IE
INT1IP
INT2IF
INT2IE
INT2IP
IPEN
PEIE/GIEL
RBIF
RBIE
RBIP
IPEN
IPEN
GIE/GIEH
PEIE/GIEL
如果处于空闲或休眠模式
则唤醒 CPU
CPU 中断矢量地址
0008h
GIE/GIEH
CPU 中断矢量地址
0018h
DS39682A_CN 第 80 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
8.1 INTCON 寄存器
INTCON 寄存器是可读写的寄存器,包含多个使能位、
优先级位和标志位。
寄存器 8-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
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
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 。而对 PORTB 进行读操作,
将结束该中断条件,并允许该位清零。
注: 当一个中断发生时,不管对应的中断允许
位或全局中断允许位的状态如何,中断标
志位都将置 1 。用户软件应在允许一个中断
之前,确保先将相应的中断标志位清零。中
断标志位可以用软件查询。
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 81 页
PIC18F45J10 系列
寄存器 8-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
INTEDG0 INTEDG1 INTEDG2
-
TMR0IP
-
RBIP
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
: PORTB 上拉使能位
RBPU
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 = 低优先级
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
注: 当一个中断发生时,不管对应的中断允许位或全局中断允许位的状态如何,中断标志
位都将置 1 。用户软件应在允许一个中断之前,确保先将相应的中断标志位清零。中
断标志位可以用软件查询。
DS39682A_CN 第 82 页 高级信息 2005 Microchip Technology Inc.
寄存器 8-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
bit 7 bit 0
-
INT2IE INT1IE
PIC18F45J10 系列
-
INT2IF INT1IF
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
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 外部中断
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
注: 当一个中断发生时,不管对应的中断允许位或全局中断允许位的状态如何,中断标志
位都将置 1 。用户软件应在允许一个中断之前,确保先将相应的中断标志位清零。中
断标志位可以用软件查询。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 83 页
PIC18F45J10 系列
8.2 PIR 寄存器
PIR 寄存器包含各外设中断的标志位。根据外设中断源
的数量,有 3 个外设中断请求(标志)寄存器(PIR1 、
PIR2 和 PIR3 )。
注 1 : 当有中断条件产生时,不管对应的中断允
寄存器 8-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
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
PSPIF :并行从动端口读 / 写中断标志位
1 = 发生了读 / 写操作 (必须由软件清零)
0 = 未发生读 / 写操作
注: 在 28 引脚器件中不存在此位,应该被读为 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 发送缓冲器已满
SSP1IF: 主控同步串行端口 1 中断标志位
1 = 完成发送 / 接收 (必须由软件清零)
0 = 等待发送 / 接收
CCP1IF : ECCP1/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寄存器未溢出
ADIF RCIF TXIF SSP1IF CCP1IF TMR2IF TMR1IF
(1)
许位或全局允许位 GIE (INTCON<7> )的
状态如何,中断标志位都将置 1 。
2 : 用户软件应在允许一个中断之前,确保先
将相应的中断标志位清零;同时在响应该
中断后,也应该将相应的中断标志位清
零。
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
DS39682A_CN 第 84 页 高级信息 2005 Microchip Technology Inc.
寄存器 8-5 : PIR2 :外设中断请求 (标志)寄存器 2
R/W-0 R/W-0 U-0 U-0 R/W-0 U-0 U-0 R/W-0
OSCFIF CMIF
bit 7 bit 0
- -
PIC18F45J10 系列
BCL1IF
- -
CCP2IF
bit 7
bit 6
bit 5-4
bit 3
bit 2-1
bit 0
OSCFIF:振荡器故障中断标志位
1 = 器件振荡器发生故障,改由 INTOSC 提供时钟 (必须由软件清零)
0 = 器件时钟正常运行
CMIF:比较器中断标志位
1 = 比较器输入已改变 (必须由软件清零)
0 = 比较器输入未改变
未用:读为 0
BCL1IF:总线冲突中断标志位 (MSSP1 模块)
1 = 发生了总线冲突 (必须由软件清零)
0 = 未发生总线冲突
未用:读为 0
CCP2IF : CCP2 中断标志位
捕捉模式:
1 = 发生了 TMR1 寄存器捕捉 (必须由软件清零)
0 = 未发生 TMR1 寄存器捕捉
比较模式:
1 = 发生了与 TMR1 寄存器比较匹配 (必须由软件清零)
0 = 未发生与 TMR1 寄存器的比较匹配
PWM
在此模式下未使用。
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
模式:
寄存器 8-6 : PIR3 :外设中断请求 (标志)寄存器 3
R/W-0 R/W-0 U-0 U-0 U-0 U-0 U-0 U-0
SSP2IF BCL2IF
bit 7 bit 0
bit 7
bit 6
bit 5-0
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 85 页
SSP2IF : 主控同步串行端口 2 中断标志位
1 = 完成发送 / 接收 (必须由软件清零)
0 = 等待发送 / 接收
BCL2IF:总线冲突中断标志位 (MSSP2 模块)
1 = 发生了总线冲突 (必须由软件清零)
0 = 未发生总线冲突
未用:读为 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
- - - - - -
PIC18F45J10 系列
8.3 PIE 寄存器
PIE 寄存器包含各外设中断的使能位。根据外设中断源
的数量,有 3 个外设中断允许寄存器 (PIE1 、 PIE2 和
PIE3)。当 IPEN = 0 时,要允许任何外设中断就必须将
PEIE 位置 1。
寄存器 8-7 : PIE1 :外设中断允许寄存器 1
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
(1)
PSPIE
bit 7 bit 0
ADIE RCIE TXIE SSP1IF CCP1IE TMR2IE TMR1IE
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
PSPIE :并行从动端口读 / 写中断允许位
1 = 允许 PSP 读 / 写中断
0 = 禁止 PSP 读 / 写中断
注: 在 28 引脚器件中不存在此位,应该被读为 0。
ADIE: A/D 转换器中断允许位
1 = 允许 A/D 中断
0 = 禁止 A/D 中断
RCIE: EUSART 接收中断允许位
1 = 允许 EUSART 接收中断
0 = 禁止 EUSART 接收中断
TXIE: EUSART 发送中断允许位
1 = 允许 EUSART 发送中断
0 = 禁止 EUSART 发送中断
SSP1IE: 主控同步串行端口 1 中断允许位
1 = 允许 MSSP1 中断
0 = 禁止 MSSP1 中断
CCP1IF: ECCP1/CCP1 中断允许位
1 = 允许 ECCP1/CCP1 中断
0 = 禁止 ECCP1/CCP1 中断
TMR2IE: TMR2 与 PR2 匹配中断允许位
1 = 允许 TMR2 与 PR2 匹配中断
0 = 禁止 TMR2 与 PR2 匹配中断
TMR1IE: TMR1 溢出中断允许位
1 = 允许 TMR1 溢出中断
0 = 禁止 TMR1 溢出中断
(1)
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
DS39682A_CN 第 86 页 高级信息 2005 Microchip Technology Inc.
寄存器 8-8 : PIE2 :外设中断允许寄存器 2
R/W-0 R/W-0 U-0 U-0 R/W-0 U-0 U-0 R/W-0
OSCFIE CMIE
bit 7 bit 0
- -
PIC18F45J10 系列
BCL1IE
- -
CCP2IE
bit 7
bit 6
bit 5-4
bit 3
bit 2-1
bit 0
OSCFIE:振荡器故障中断允许位
1 = 允许
0 = 禁止
CMIE:比较器中断允许位
1 = 允许
0 = 禁止
未用:读为 0
BCL1IF:总线冲突中断允许位 (MSSP1 模块)
1 = 允许
0 = 禁止
未用:读为 0
CCP2IE: CCP2 中断允许位
1 = 允许
0 = 禁止
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
寄存器 8-9 : PIE3 :外设中断允许寄存器 3
R/W-0 R/W-0 U-0 U-0 U-0 U-0 U-0 U-0
SSP2IE BCL2IE
bit 7 bit 0
- - - - - -
bit 7
bit 6
bit 5-0
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 87 页
SSP2IE : 主控同步串行端口 2 中断允许位
1 = 允许
0 = 禁止
BCL2IE:总线冲突中断允许位 (MSSP2 模块)
1 = 允许
0 = 禁止
未用:读为 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
PIC18F45J10 系列
8.4 IPR 寄存器
IPR 寄存器包含各外设中断的优先级位。根据外设中断
源的数量,有 3 个外设中断优先级寄存器(IPR1 、IPR2
和 IPR3 ) 。使用优先级位要求将中断优先级使能
(IPEN )位置 1 。
寄存器 8-10 : IPR1 :外设中断优先级寄存器 1
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
(1)
PSPIP
bit 7 bit 0
ADIP RCIP TXIP SSP1IP CCP1IP TMR2IP TMR1IP
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
PSPIP :并行从动端口读 / 写中断优先级位
1 = 高优先级
0 = 低优先级
注: 在 28 引脚器件中不存在此位,应该被读为 0。
ADIP: A/D 转换器中断优先级位
1 = 高优先级
0 = 低优先级
RCIP: EUSART 接收中断优先级位
1 = 高优先级
0 = 低优先级
TXIP: EUSART 发送中断优先级位
1 = 高优先级
0 = 低优先级
SSP1IP: 主控同步串行端口 1 中断优先级位
1 = 高优先级
0 = 低优先级
CCP1IP: ECCP1/CCP1 中断优先级位
1 = 高优先级
0 = 低优先级
TMR2IP: TMR2 与 PR2 匹配中断优先级位
1 = 高优先级
0 = 低优先级
TMR1IP: TMR1 溢出中断优先级位
1 = 高优先级
0 = 低优先级
(1)
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
DS39682A_CN 第 88 页 高级信息 2005 Microchip Technology Inc.
寄存器 8-11 : IPR2 :外设中断优先级寄存器 2
R/W-1 R/W1 U-0 U-0 R/W-1 U-0 U-0 R/W-1
OSCFIP CMIP
bit 7 bit 0
- -
PIC18F45J10 系列
BCL1IP
- -
CCP2IP
bit 7
bit 6
bit 5-4
bit 3
bit 2-1
bit 0
OSCFIP:振荡器故障中断优先级位
1 = 高优先级
0 = 低优先级
CMIP:比较器中断优先级位
1 = 高优先级
0 = 低优先级
未用:读为 0
BCL1IP:总线冲突中断优先级位 (MSSP1 模块)
1 = 高优先级
0 = 低优先级
未用:读为 0
CCP2IP: CCP2 中断优先级位
1 = 高优先级
0 = 低优先级
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
寄存器 8-12 : IPR3 :外设中断优先级寄存器 3
R/W-1 R/W-1 U-0 U-0 U-0 U-0 U-0 U-0
SSP2IP BCL2IP
bit 7 bit 0
- - - - - -
bit 7
bit 6
bit 5-0
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 89 页
SSP2IP : 主控同步串行端口 2 中断优先级位
1 = 高优先级
0 = 低优先级
BCL2IP:总线冲突中断优先级位 (MSSP2 模块)
1 = 高优先级
0 = 低优先级
未用:读为 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
PIC18F45J10 系列
8.5 RCON 寄存器
RCON 寄存器包含几个位,可以用来确定器件上次复位
或从空闲或休眠模式被唤醒的原因。RCON 还包含中断
优先级使能位 (IPEN )。
寄存器 8-13 : RCON :复位控制寄存器
R/W-0 U-0 U-0 R/W-1 R-1 R-1 R/W-0 R/W-0
IPEN
bit 7 bit 0
- -
RI
TO PD POR BOR
bit 7
bit 6-5
bit 4
bit 3
bit 2
bit 1
bit 0
IPEN :中断优先级使能位
1 = 使能中断优先级
0 = 禁止中断优先级 (PIC16CXXX 兼容模式)
未用:读为 0
RI
:RESET 指令标志位
关于位操作的详细信息,请参见寄存器 4-1 。
TO :看门狗定时器超时溢出标志位
关于位操作的详细信息,请参见寄存器 4-1 。
PD
:掉电检测标志位
关于位操作的详细信息,请参见寄存器 4-1 。
POR :上电复位状态位
关于位操作的详细信息,请参见寄存器 4-1 。
BOR
:欠压复位状态位
关于位操作的详细信息,请参见寄存器 4-1 。
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置 10 = 清零 x = 未知
DS39682A_CN 第 90 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
8.6 INTn 引脚中断
RB0/INT0 、RB1/INT1 和 RB2/INT2 引脚上的外部中断
都是通过边沿触发的。如果 INTCON2 寄存器中相应的
INTEDGx 位被置 1 ( = 1),则为上升沿触发;如果该
位被清零,则为下降沿触发。当 RBx/INTx 引脚上出现
一个有效边沿时,相应的标志位 INTxIF 被置 1 。通过清
零相应的允许位 INTxIE ,可禁止该中断。在重新允许该
中断前,必须在中断服务程序中先用软件将中断标志位
INTxIF 清零。
如果 INTxIE 位在进入功耗管理模式前被置 1 ,则所有的
外部中断(INT0 、 INT1 和 INT2 )均能将处理器从功耗
管理模式中唤醒。如果全局中断允许位 GIE 被置 1 ,则
处理器将在被唤醒之后跳转到中断矢量处执行程序。
INT1 和 INT2 的中断优先级由中断优先级位 INT1IP
(INTCON3<6> )和 INT2IP (INTCON3<7> )决定。没
有与 INT0 相关的优先级位。INT0 始终是一个高优先级
的中断源。
8.7 TMR0 中断
在 8 位模式 (默认模式)下, TMR0 寄存器的溢出
(FFh → 00h )会将标志位 TMR0IF 置 1 。在 16 位模式
下, TMR0H:TMR0L 寄存器对的溢出 (FFFFh → 0000h )
会将 TMR0IF 标志位置 1 。通过将允许位 TMR0IE
(INTCON<5> )置 1 或清零,可以允许或禁止该中断。
Timer0 的中断优先级由中断优先级位 TMR0IP (INTCON2<2>)
决定。 欲进一步了解 Timer0 模块的详细内容,请参见
第 10.0 节“Timer0 模块”。
8.8 PORTB 电平变化中断
PORTB<7:4> 上的一个输入电平发生变化,会将标志位
RBIF ( INTCON<0>)置 1。通过将允许位 RBIE
( INTCON<3>)置 1 或清零,可以允许或禁止该中断。
PORTB 电平变化中断的优先级由中断优先级位 RBIP
( INTCON2<0>)决定。
8.9 中断的现场保护
在中断期间,返回的 PC 地址被保存在堆栈中。另外,
将 WREG 、STATUS 以及 BSR 寄存器的值压入快速返
回堆栈。如果未使用从中断快速返回功能(见第 5.3 节
“数据存储器构成”),用户可能需要在进入中断服务程
序前,保存 WREG 、 STATUS 以及 BSR 寄存器的值。
根据用户的应用,还可能需要保存其他寄存器的值。
例 8-1 在执行中断服务程序期间,保存并恢复 WREG 、
STATUS 和 BSR 寄存器的值。
例 8-1 :将STATUS、 WREG 和 BSR 寄存器的值保存在 RAM 中
MOVWF W_TEMP ; W_TEMP is in virtual bank
MOVFF STATUS, STATUS_TEMP ; STATUS_TEMP located anywhere
MOVFF BSR, BSR_TEMP ; BSR_TMEP located anywhere
;
; USER ISR CODE
;
MOVFF BSR_TEMP, BSR ; Restore BSR
MOVF W_TEMP, W ; Restore WREG
MOVFF STATUS_TEMP, STATUS ; Restore STATUS
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 91 页
PIC18F45J10 系列
注:
DS39682A_CN 第 92 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
9.0 I/O 端口
根据选定的器件和使能的功能,最多有 5 个端口可用。
I/O 端口的一些引脚与器件上的外设功能复用。通常,当
外设使能时,其对应的引脚就不能被用作通用 I/O 引脚。
每个端口都有 3 个寄存器对其操作进行控制。它们是:
• TRIS 寄存器 (数据方向寄存器)
• Port 寄存器 (读取器件引脚的电平)
• LAT 寄存器 (输出锁存器)
在对 I/O 引脚驱动值进行读 - 修改 - 写操作时会用到数据
锁存器 (LAT 寄存器)。
图 9-1 给出了不带外设接口的通用I/O 端口的简化模型。
图 9-1 :通 用I/O 端口的工作原理
读 LAT
数据
总线
写 LAT
或 PORT
写 TRIS
读 TRIS
Q D
CK
数据锁存器
Q D
CK
TRIS 锁存器
I/O 引脚
输入
缓冲器
(1)
9.1 I/O 端口引脚能力
在应用开发设计时,必须考虑到端口引脚的能力。某些
引脚上的输出驱动能力要高于其他引脚。同样,某些引
脚可以接受高于 VDD 的输入电平。
9.1.1 引脚输出驱动能力
输出引脚的驱动能力各不相同,以满足各种应用的需
求。PORTB 和 PORTC 是为驱动较高的负载,比如 LED
而设计的。 其他端口都是为驱动较小的负载而设计的,
通常只用于指示。表 9-1 汇总了输出驱动能力。 更多详
情,请参见第 23.0 节 “电气规范”。
表 9-1 : 输出驱动电平
端口 驱动 说明
PORTA
PORTD
PORTE
PORTB
PORTC
9.1.2 输入引脚和电压注意事项
用作器件输入的引脚的电压容差取决于该引脚的输入功
能。仅用作数字输入的引脚能够接受高达 5.5 V 的直流
电压,即数字逻辑电路的典型电压值。相反,也具有模
拟输入功能的引脚只可以接受最高为 V
尽量避免在这些引脚上施加超过 VDD 的电压。表 9-2 汇
总了这些输入能力。更多详情,请参见第 23.0 节“电
气规范”。
最低 用于指示。
高
适合直接输出 LED 驱动电
平。
DD 的电压值。应
读 PORT
注 1 : I/O 引脚与 V
QD
EN
EN
DD 和 V SS 之间接有保护二极管。
表 9-2 : 输入电平
可接受的
端口或引脚
PORTA<5:0>
PORTB<5:0>
PORTC<1:0>
PORTE<2:0>
PORTB<7:6>
PORTC<7:2>
PORTD<7:0>
最高输入
电平
V
DD
5.5V
说明
只能接受小于 VDD 的
输入电压。
可接受的输入电压在
DD 以上,对于大部分
V
标准逻辑电路很有用。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 93 页
PIC18F45J10 系列
9.1.3 与 5V 系统接口
虽然 PIC18F45J10 系列器件的 VDDMAX 是 3.6V ,但是
即使目标系统的 VIH 高于3.6V ,这些器件仍然能够与 5V
系统相连。 要实现这种接口,必须为引脚外接一个上拉
电阻 (图 9-2 ),清零该引脚的 LAT 位并设置对应的
TRIS 位(图 9-1 )以允许将该引脚拉高或驱动为低电
平。 只有可接受最高为 5.5V 电压的端口引脚才能用于
这种类型的接口(见第 9.1.2 节“输入引脚和电压注意
事项”)。
图 9-2 : +5V 系统硬件接口
PIC18F45J10
RD7
+5V
+5V 器件
例 9-1 :与+5V 系统通信
BCF LATD, 7 ; set up LAT register so
; changing TRIS bit will
BCF TRISD, 7 ; send a 0 to the 5V system
BCF TRISD, 7 ; send a 1 to the 5V system
; drive line low
9.2 PORTA、 TRISA 和 LATA 寄存器
PORTA 是 5 位宽的双向端口。相应的数据方向寄存器
为 TRISA 。置位 TRISA (= 1 )可以让相应的 PORTA
引脚作为输入引脚(即将相应的输出驱动器置于高阻态
模式)。清零 TRISA 位(= 0)将使相应的 PORTA 引
脚作为输出引脚(即将输出锁存器的内容置于所选择的
引脚上)。
读 PORTA 寄存器就是读引脚状态,而写该寄存器就是
写入端口锁存器。
数据锁存器 (LATA)也是映射的存储器。对 LATA 寄存
器执行读-修改-写操作实际上是读写 PORTA 的输出
锁存值。
其他 PORTA 引脚与模拟 V
器参考电压输出引脚复用。通过清零或置位 ADCON1 寄
存器(A/D 控制寄存器 1 )中的控制位,将 RA3:RA0 和
RA5 引脚作为 A/D 转换器输入通道。
通过设置 CMCON 寄存器中的相应位,还可以将 RA0 和
RA3 引脚用作比较器的输入端,并将 RA5 用作 C2 比较
器的输出端。 要将 RA3:RA0 用作数字输入引脚,则必
须关闭比较器。
注: 在上电复位时,RA5 和 RA3:RA0 被配置为
模拟输入并读为 0 。
所有的 PORTA 引脚都具有 TTL 输入电平和 CMOS 输
出驱动器。
即使在 PORTA 引脚被用作模拟输入的时候,TRISA 寄
存器仍然控制 PORTA 引脚的方向。在这种情况下,用
户必须确保 TRISA 寄存器中的位保持为置 1 状态。
REF + 和 V REF - 输入以及比较
例 9-2 :初 始 化PORTA
CLRF PORTA ; Initialize PORTA by
; clearing output
; data latches
CLRF LATA ; Alternate method
; to clear output
; data latches
MOVLW 07h ; Configure A/D
MOVWF ADCON1 ; for digital inputs
MOVWF 07h ; Configure comparators
MOVWF CMCON ; for digital input
MOVLW 0CFh ; Value used to
MOVWF TRISA ; Set RA<3:0> as inputs
; initialize data
; direction
; RA<5:4> as outputs
DS39682A_CN 第 94 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
表 9-3 : PORTA I/O 汇总
引脚 功能
RA0/AN0 RA0 0 OD I G
AN0 1 IA N A
RA1/AN1 RA1 0 OD I G
AN1 1 IA N A
RA2/AN2/
V
REF-/CV REF
RA3/AN3/V
RA5/AN4/SS1
C2OUT
OSC2/CLKO OSC2 x OA N A
OSC1/CLKI OSC1 x IA N A
图注: DIG = 数字电平输出; TTL = TTL 输入缓冲器; ST = 施密特触发器输入缓冲器; ANA = 模拟电平输入 / 输出;
REF+R A 30 OD I G
/
x = 任意值 (TRIS 位不影响端口方向或者在此选项中被忽略)。
RA2 0 OD I G
AN2 1 IA N A
V
REF- 1 IA N A
CV
REF x OA N A
AN3 1 IA N A
V
REF+ 1 IA N A
RA5 0 OD I G
AN4 1 IA N A
SS1
C2OUT 0 OD I G
CLKO x OD I G
CLKI x IA N A
TRIS
设置
1 I TTL
1 I TTL
1 I TTL
1 I TTL
1 I TTL
1 I TTL
I/O
I/O
类型
LATA<0> 数据输出;不受模拟输入影响。
PORTA<0> 数据输入;使能模拟输入时被禁止。
A/D 输入通道 0 和比较器 C1 -输入。发生上电复位时的
默认输入配置;不影响数字输出。
LATA<1> 数据输出;不受模拟输入影响。
PORTA<1> 数据输入;使能模拟输入时被禁止。
A/D 输入通道 1 和比较器 C2 -输入。发生上电复位时的
默认输入配置;不影响数字输出。
LATA<2> 数据输出;不受模拟输入影响。当使能 CV
止。
PORTA<2> 数据输入。当使能模拟功能时被禁止;当使能 CV
时被禁止。
A/D 输入通道 2 和比较器 C2+ 输入。发生上电复位时的
默认输入配置;不受模拟输出的影响。
A/D 和比较器参考电压低电平输入。
比较器参考电压输出。使能此功能将禁止数字 I/O 。
LATA<3> 数据输出;不受模拟输入影响。
PORTA<3> 数据输入;使能模拟输入时被禁止。
A/D 输入通道 3 和比较器 C1+ 输入。发生上电复位时的默认输入配置。
A/D 和比较器参考电压高电平输入。
LATA<5> 数据输出;不受模拟输入影响。
PORTA<5> 数据输入;使能模拟输入时被禁止。
A/D 输入通道 4。发生上电复位时的默认配置。
MSSP1 的从动选择输入 ( MSSP1 模块)。
比较器 2 输出;优先级高于端口数据。
主振荡器反馈输出连接 (HS 模式)。
RC 和 EC 振荡器模式下的系统周期时钟输出 (F
主振荡器输入连接。
主时钟输入连接。
说明
REF 输出时被禁
OSC/4)。
REF 输出
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 95 页
PIC18F45J10 系列
表 9-4 :与PORTA 相关的寄存器汇总
名称
PORTA
LATA
TRISA
ADCON1
CMCON
CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 45
图注: - = 未用 (读为 0 )。 PORTA 未使用阴影单元。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
- -
- - PORTA 数据锁存器 (读取和写入数据锁存器)
- -
- -
C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 45
RA5
TRISA5
VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 44
-
-
RA3 RA2 RA1 RA0 46
TRISA3 TRISA2 TRISA1 TRISA0 46
复位值
所在页
46
DS39682A_CN 第 96 页 高级信息 2005 Microchip Technology Inc.
PIC18F45J10 系列
9.3 PORTB、 TRISB 和 LATB 寄存器
PORTB 是 8 位宽的双向端口。它对应的数据方向寄存
器是 TRISB 。置位 TRISB (= 1 )可以让相应 PORTB
引脚作为输入引脚(即将相应的输出驱动器置于高阻态
模式)。清零 TRISB 位(= 0)将使相应的 PORTB 引
脚作为输出引脚(即将输出锁存器的内容置于所选择的
引脚上)。
数据锁存器 (LATB )也是映射的存储器。对 LATB 寄
存器执行读-修改-写操作实际上是读写 PORTB 的输
出锁存值。
例 9-3 :初 始 化PORTB
CLRF PORTB ; Initialize PORTB by
; clearing output
; data latches
CLRF LATB ; Alternate method
; to clear output
; data latches
MOVLW 0Fh ; Set RB<4:0> as
MOVWF ADCON1 ; digital I/O pins
; (required if config bit
; PBADEN is set)
MOVLW 0CFh ; Value used to
; initialize data
; direction
MOVWF TRISB ; Set RB<3:0> as inputs
; RB<5:4> as outputs
; RB<7:6> as inputs
PORTB 的 4 个引脚 ( RB7:RB4 )都有电平变化中断功
能。只有配置为输入的引脚会导致中断发生 (即,当
RB7:RB4 的任何一个引脚被配置为输出时,该引脚不再
具有电平变化中断比较功能)。RB7:RB4 输入引脚上的
电平与上次读 PORTB 时锁存的旧值进行比较。
RB7:RB4 输出的 “不匹配”值一起进行逻辑 “或”运
算,产生 RB 端口电平变化中断,并将标志位 RBIF
(INTCON<0> )置 1 。
此中断可将器件从休眠模式或任何空闲模式唤醒。用户
可用以下方式在中断服务程序中清除该中断:
a) 读或写 PORTB (MOVFF (ANY), PORTB 指令
除外)。
b) 清零标志位 RBIF 。
电平不匹配的状态将会一直不断地将 RBIF 标志位置 1 。
而读 PORTB 将结束该状态,并允许将 RBIF 标志位清
零。
建议使用此电平变化触发中断来实现按键唤醒以及其他
仅使用 PORTB 该中断的应用。在使用电平变化触发中
断功能时,建议不要查询 PORTB 的状态。
通过配置位 CCP2MX 可将 RB3 配置为 CCP2 模块的备
用外设引脚 (CCP2MX = 0 )。
RB5 引脚与 Timer0 模块的时钟输入以及比较器的某个
输出复用,成为 RB5/KBI1/T0CKI/C1OUT 引脚。
PORTB 的每个引脚都有内部弱上拉电路。单个控制位
可以开启所有上拉电路。可以通过清零 RBPU 位
(INTCON2<7> )来开启上拉电路。当端口引脚配置为
输出时,其弱上拉电路会自动切断。此弱上拉功能在上
电复位时被禁止。
注: 在上电复位时,默认情况下 RB4:RB0 被配
置为模拟输入并读为 0 ; RB7:RB5 被配置
为数字输入。
通过对配置位 PBADEN 进行编程,在发生
上电复位时,也可将 RB4:RB0 配置为数字
输入引脚。
2005 Microchip Technology Inc. 高级信息 DS39682A_CN 第 97 页
PIC18F45J10 系列
表 9-5 : PORTB I/O 汇总
引脚 功能
RB0/INT0/FLT0/
AN12
TRIS
设置
RB0 0 OD I G
I/O
1 ITT L
INT0 1 IS T
FLT0 1 IS T
AN12 1 IA N A
RB1/INT1/AN10 RB1 0 OD I G
1 ITT L
INT1 1 IS T
AN10 1 IA N A
RB2/INT2/AN8 RB2 0 OD I G
1 ITT L
INT2 1 IS T
AN8 1 IA N A
RB3/AN9/CCP2 RB3 0 OD I G
1 ITT L
AN9 1 IA N A
(2)
CCP2
0 OD I G
1 IS T
RB4/KBI0/AN11 RB4 0 OD I G
1 IT T L
KBI0 1 IT T L
AN11 1 IA N A
RB5/KBI1/T0CKI/
C1OUT
RB5 0 OD I G
1 ITT L
KBI1 1 IT T L
T0CKI 1 IS T
C1OUT 0 OD I G
RB6/KBI2/PGC RB6 0 OD I G
1 ITT L
KBI2 1 IT T L
PGC x IS T
RB7/KBI3/PGD RB7 0 OD I G
1 ITT L
KBI3 1 IT T L
PGD x OD I G
x IST
图注: DIG = 数字电平输出; TTL = TTL 输入缓冲器; ST = 施密特触发器输入缓冲器; ANA = 模拟电平输入 / 输出;
x = 任意值 (TRIS 位不影响端口方向或者在此选项中被忽略)。
注 1 : 发生上电复位时的配置由 PBADEN 配置位决定。默认情况下 (PBADEN 置 1 ),这些引脚被配置为模拟输入;而当
PBADEN 清零时,这些引脚被配置为数字输入。
2: 当 CCP2MX 配置位为 0 时,对 CCP2 进行其他分配。默认配置为 RC1 。
3: 当使能 ICSP 或 ICD 时,禁止所有其他引脚功能。
I/O
类型
说明
LATB<0> 数据输出;不受模拟输入影响。
PORTB<0> 数据输入;当 RBPU
输入时被禁止。
(1)
位被清零时启用弱上拉。当使能模拟
外部中断 0 输入。
PWM 错误输入 ( ECCP1/CCP1 模块);用软件使能。
A/D 输入通道 12。
(1)
LATB<1> 数据输出;不受模拟输入影响。
PORTB<1> 数据输入;当 RBPU
输入时被禁止。
(1)
位被清零时启用弱上拉。当使能模拟
外部中断 1 输入。
A/D 输入通道 10 。
(1)
LATB<2> 数据输出;不受模拟输入影响。
PORTB<2> 数据输入;当 RBPU
输入时被禁止。
(1)
位被清零时启用弱上拉。当使能模拟
外部中断 2 输入。
A/D 输入通道 8 。
(1)
LATB<3> 数据输出;不受模拟输入影响。
PORTB<3> 数据输入;当 RBPU
输入时被禁止。
A/D 输入通道 9 。
(1)
(1)
位被清零时启用弱上拉。当使能模拟
CCP2 比较和 PWM 输出。
CCP2 捕捉输入。
LATB<4> 数据输出;不受模拟输入影响。
PORTB<4> 数据输入;当 RBPU
输入时被禁止。
(1)
位被清零时启用弱上拉。当使能模拟
电平变化中断引脚。
A/D 输入通道 11 。
(1)
LATB<5> 数据输出。
PORTB<5> 数据输入;当 RBPU
位被清零时启用弱上拉。
电平变化中断引脚。
Timer0 时钟输入。
比较器 1 输出;优先级高于端口数据。
LATB<6> 数据输出。
PORTB<6> 数据输入;当 RBPU
位被清零时启用弱上拉。
电平变化中断引脚。
ICSP 和 ICD 工作的串行时钟 ( ICSP™ )输入。
(3)
LATB<7> 数据输出。
PORTB<7> 数据输入;当 RBPU
位被清零时启用弱上拉。
电平变化中断引脚。
执行 ICSP 和 ICD 操作时串行输出数据。
执行 ICSP 和 ICD 操作时串行输入数据。
(3)
(3)
DS39682A_CN 第 98 页 高级信息 2005 Microchip Technology Inc.