英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4001|回复: 0
打印 上一主题 下一主题

关于中档PIC系列单片机的页和PCLATH

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-18 18:22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先想从CALLGOTO指令的机器码讲起。PIC1614位的长字指令,操作码和操作数放到同一个指令字里,也就是所谓单字指令。
CALL
指令(14位的指令字长)
-------------------------------------------
| 1| 0| 0| k| k| k| k| k| k| k| k| k| k| k|
-------------------------------------------
100
CALL指令的操作码,GOTO指令类似上面,只是操作码为101
后面11位的k,就是所要CALL或者GOTO的地址。
显然,11位的地址只能访问2K的地址范围,为了实现在8K范围内调用和跳转,于是引入了Page的概念
Page
其实就是实际要调用或跳转到的地址的高两位。
PC
的高两位在发生GOTOCALL指令时从PCLATH寄存器的4:3位装入(如下图)

PCLATH 5bits
----------------
|4|3|
|
----------------

|

V
---------------- ---------------------
|x|x|
| |
|
(实际PC
---------------- ---------------------

PCH 5bits
PCL 8bits

所以,在CALL或者GOTO指令执行前,要设定好PCLATH4:3位,也就是设置好Page PC的高位字节PCH是不可由程序直接写入的,它必须是在PC改变时通过它的锁存器PCLATH装入。
PCLATH
始终是作为装载PCH用的一个锁存器,它自己的值不会随着PCH的改变而改变。一个很简单的例子,程序假如顺序执行从00一直到8K末尾,这样PCH的最高两位也就从00一直变成11,但PCLATH的高两位,如果你没有人为改变,原来是什么,它还是什么 CALL子程序时,CALL指令当前PC+113PC地址压入堆栈(因为硬件堆栈是和PC等宽的)。所以RETURN时能从堆栈弹出整个13PC的返回地址,就不再需要CLATH了。但是,要记住,不设定并不代表它自己会改变。假设你CALL之前设定到Page1了,Return之后回到Page0了,但此时,PCLATH里的4:3位还是0:1。当发生直接修改PC时,也就是直接改写PCL,如addwf PCL,F

此时,在改写PCL的同时,作为PCH锁存器的PCLATH会把整个5位的值瞬间传递给PCH如下图

PCLATH 5bits
----------------
| 4| 3| 2| 1| 0|
----------------
程序修改PC低位字节

|
|

V
V
---------------- ---------------------
| x| x| x| x| x| |
|
(实际PC
---------------- ---------------------

PCH 5bits
PCL 8bits

PCLATH
是个很重要的寄存器,你对它稍不注意,它就会让你跑飞





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-11-24 03:51 , Processed in 0.047993 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表