pic单片机教程之13位程序计数器存储器的组成

单片机的两种存储器模块:程序存储器与数据存储器。每个存储模块都有自己的数据总线,能在同一时间戳内对模块同时进行数据存储与指令操作。
程序存储器构成
中档系列单片机有一个13位的程序计数器,可以寻址8k×14位的程序存储空间。程序存储器总线宽度(指令字)为14位。由于所有的指令均为单字指令,所以一个具有8k×14位程序存储器的器件可以存储8k条指令。很易于确定是否有充足的程序存储空间来实现应用程序。
中档系列单片机把程序存储器分成4页,每页2k字(0h - 7ffh,、800h - fffh、1000h - 17ffh和1800h - 1fffh)。图6-1所示为程序存储器映射和一个8级深度硬件堆栈。实际上单片机可能只实现了图中所示存储器的一部分,这与器件型号有关。关于单片机所提供的存储器,请查阅单片机的数据手册。
为了能在程序存储器页之间跳转,必须修改程序计数器(pc)的高位。这是通过在pclath(程序计数器高位锁存器)中写入需要的值来完成的。如果指令连续运行,无需任何用户的干预,程序计数器即可以跨越程序页面跨页。对于那些程序存储器不足8k字的器件,访问超过物理地址空间的存储单元时,会回到有效的程序存储空间。也就是说,在一个有4k字存储空间的单片机中,寻址17ffh实际就是寻址7ffh。2k字或更少程序存储空间的器件不需要分页。
复位向量
对于任何单片机,复位都将使程序计数器指向地址0h,我们称这个地址为“复位向量地址”,也就是单片机发生复位时,程序执行的入口地址。
任何复位操作都会将pclath寄存器的内容清零。这表明,复位向量地址(0h)处的任何转移指令都将跳转到程序存储器的第0页(page0)。
中断向量
当响应中断时,pc指向地址0004h,我们称这个地址为“中断向量地址”。当pc指向中断向量时,pclath寄存器的值并不会被修改。这意味着,在中断服务程序中,在改写pc实现程序跳转前,应按目的地址所处的实际程序页面先设定pclath寄存器。在中断服务程序修改pclath寄存器前,应将原pclath的内容保存起来,以便从中断服务程序返回时恢复pclath。
标定信息
某些器件在程序存储器中存储标定信息。在器件最终测试时,microchip将标定信息写入程序存储器。应用程序利用这些值可以获得更好的运行结果。标定信息通常放在程序存储器的末尾,并以retlw指令形式实现,该指令所带的立即数就是标定信息。
*注:对于窗口型器件,在擦除器件内容前(同时会擦除标定信息),务必先记下所有的标定值。这样在重新烧写器件时能恢复标定值。建议将标定值写在封装上。
程序计数器(pc)
程序计数器指定要取出执行的指令的地址,其宽度为13位,其中低8位来自pcl寄存器,该寄存器可读写的,而高5位(pc)来自pch寄存器(不可直接读写)。pch寄存器的值只能通过pclath寄存器来更新。
图6-2所示为装载pc值的四种情况。情况1为写pcl时,如何装载pc(pclath→pch);情况2为执行goto指令时,如何装载pc(pclath → pch);情况3为执行call指令时,如何装载pc(pclath → pch)以及pc值如何压入栈顶;情况4为执行返回指令时,如何装载pc,此时pc值从栈顶装载(弹出)。
相对跳转指令
程序的相对跳转指令是通过向程序计数器加一个偏移量来实现的(addwf pcl),当使用相对跳转指令方法对表进行读操作时,要注意表地址是否超过了pcl寄存器的寻址范围(每块256个字节)。
*注:对程序计数器(pcl)的任何写操作,都会使pclath的低五位装载到pch中。
堆栈
堆栈允许8级深度的子程序嵌套调用和中断。堆栈包含了程序执行分支的返回地址。
中档系列单片机有一个8级深度、13位宽的硬件堆栈。堆栈既不占用程序存储空间也不占用数据存储空间,栈指针不能读写。当执行call指令或响应中断发生跳转时,pc值被压入堆栈(push)。而执行return、retlw或retfie指令时,pc值从堆栈弹出(pop)。执行压栈或出栈操作时,不会修改pclath寄存器。 压栈(push)8次之后,进行第9次压栈时,进栈的数据将覆盖第1次压栈存储的数据,而第10次压栈时进栈的数据将覆盖第2次压栈存储的数据,依此类推。一个堆栈被覆盖的例子如图6-3所示。
*注1:没有用于表示堆栈溢出或堆栈下溢条件的状态位。
*注2:没有称为push或pop的指令或助记符。而实现类似效果的操作是执行call、return、retlw和retfie指令,或转到中断向量地址。
程序存储器分页
某些器件的程序存储器空间大于2k字,但是call和goto指令只有11位地址范围,这11位地址只允许在2k存储空间范围内跳转。为了使call和goto指令可以访问整个8k的程序存储地址范围,必须有另外两位来指定程序存储器页。将pclath位作为页面选择位(图6-2)。在执行call或goto指令前,用户必须确保正确设置页面选择位pclath,以便指向需要的程序存储页面(图6-2)。当执行一条返回指令时,整个13位pc地址值都从堆栈弹出,不需要再对pclath位进行设置。
*注:当器件的程序存储器空间小于或等于2k字时,可忽略用来存取有多个页面的程序存 储器的页面选择位(pclath)。但不推荐将pclath位作为一般读写位使用,因为这样做可能影响与将来产品的向上兼容性。 对于程序存储器空间在2k到4k字之间的器件,可忽略页面选择位pclath,因为它是用来寻址2、3页(1000h~1fffh)的。通常也不推荐将pclath作为一般读写位使用,因为这样做可能影响与将来产品的向上兼容性。
例6-1是调用在程序存储器第1页上子程序的例子。本例假使pclath寄存器由中断服务程序保存和恢复(如果使用了中断)。
例6-1:从第0页调用第1页的子程序

苹果iPhone在今年第四季度将超越华为成为全球排名第一
TD新秀 三星3G时尚触屏S5630C评测
MOSFET开通时间和关断时间定义
工业无人机企业纵横股份发布2021年报
激光雷达,价格打到一千块/台?
pic单片机教程之13位程序计数器存储器的组成
什么是投影机有效扫描频段
科创板铂力特监事李萍介绍、履历信息
智能照明或将成为智能家居领域第一波全面启动的细分市场
德州仪器PMBus电源管理保护IC为伺服器平台实现高精准电源监控
AI如何改变以往低效率安全保护的方式?
三星LGD计划明年1月批量生产OLEDiPad
EMC设计重要点关注时钟
Microsemi推出用于移动多媒体和封包数据应用的高集成度SyncE器件
中国第三代半导体真正要火起来并不容易,面临四大问题
IPO上市之路遇阻,东芝工厂停电导致部分产线停产
效仿诺基亚科技以换壳为准 苹果发布iPhone7颜色新增亮黑色
机器人造价师上线,工程造价师的饭碗也快保不住了
彩电常用电源管、开关管参数
pnp型的三极管使用方法