1996 微芯 技术 公司 ds30412c-页 41
PIC17C4X
6.7 程序 计数器 单元
这 程序 计数器 (pc) 是 一个 16-位 寄存器. pcl, 这
低 字节 的 这 pc, 是 编排 在 这 数据 记忆. pcl
是 readable 和 writable just 作 是 任何 其它 寄存器.
pch 是 这 高 字节 的 这 pc 和 是 不 直接地
addressable. 自从 pch 是 不 编排 在 数据 或者 pro-
gram 记忆, 一个 8-位 寄存器 pclath (pc 高 获得)
是 使用 作 一个 支持 获得 为 这 高 字节 的 这 pc.
pclath 是 编排 在 数据 记忆. 这 用户 能
读 或者 写 pch 通过 pclath.
这 16-位 宽 pc 是 incremented 之后 各自 instruc-
tion fetch 在 q1 除非:
• modified 用
GOTO
,
CALL
,
LCALL
,
返回
,
RETLW
,
或者
RETFIE
操作指南
• modified 用 一个 中断 回馈
• 预定的 至 destination 写 至 pcl 用 一个 操作指南
“skips” 是 相等的 至 一个 强迫 nop 循环 在 这
skipped 地址.
图示 6-11 和 图示 6-12 显示 这 运作 的 这
程序 计数器 为 各种各样的 situations.
图示 6-11: 程序 计数器
运作
图示 6-12: 程序 计数器 使用
这 call 和 goto
说明
内部的 数据 总线 <8>
PCLATH
8
8
8
PCH PCL
8
15 0
7
5
4
0
12 8 7 0
87
last 写
至 pclath
PCLATH
Opcode
5
3
8
PCH
PCL
1315
使用 图示 6-11, 这 行动 的 这 pc 和
pclath 为 不同的 说明 是 作 跟随:
一个)
LCALL
说明:
一个 8-位 destination 地址 是 提供 在 这
操作指南 (opcode). pclath 是 不变.
PCLATH
→
PCH
opcode<7:0>
→
PCL
b) 读 instr
uctions 在 pcl:
任何 操作指南 那 读 pcl.
PCL
→
数据 总线
→
alu 或者 destination
PCH
→
PCLATH
c) Wr
ite 说明 在 pcl:
任何 操作指南 那 写 至 pcl.
8-位 数据
→
数据 总线
→
PCL
PCLATH
→
PCH
d) 读-modify-wr
ite 说明 在 pcl:
任何 操作指南 那 做 一个 读-写-modify
运作 在 pcl, 此类 作
addwf pcl
.
读: PCL
→
数据 总线
→
ALU
写: 8-位 结果
→
数据 总线
→
PCL
PCLATH
→
PCH
e)
返回
操作指南:
PCH
→
PCLATH
堆栈<mru>
→
pc<15:0>
使用 图示 6-12, 这 运作 的 这 pc 和
pclath 为
GOTO
和
CALL
说明 是 一个 跟随:
CALL
,
GOTO
说明:
一个 13-位 destination 地址 是 提供 在 这
操作指南 (opcode).
opcode<12:0>
→
pc <12:0>
pc<15:13>
→
pclath<7:5>
opcode<12:8>
→
pclath <4:0>
这 读-modify-写 仅有的 affects 这 pcl 和 这
结果. pch 是 承载 和 这 值 在 这 pclath.
为 例子,
addwf pcl
将 结果 在 一个 jump 在里面 这
电流 页. 如果 pc = 03f0h, wreg = 30h 和
pclath = 03h 在之前 操作指南, pc = 0320h 之后 这
操作指南. 至 accomplish 一个 真实 16-位 计算 jump,
这 用户 needs 至 计算 这 16-位 destination
地址, 写 这 高 字节 至 pclath 和 然后 写
这 低 值 至 pcl.
这 下列的 pc related 行动 做 不 改变
pclath:
一个)
LCALL
,
RETLW
, 和
RETFIE
说明.
b) 中断 vector 是 强迫 面向 这 pc.
c) 读-modify-写 说明 在 pcl (e.g.
BSF
PCL
).