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

发布者:zdf1966最新更新时间:2020-02-25 来源: elecfans关键字:pic单片机  13位程序计数器  存储器 手机看文章 扫描二维码
随时随地手机看文章

  单片机的两种存储器模块:程序存储器与数据存储器。每个存储模块都有自己的数据总线,能在同一时间戳内对模块同时进行数据存储与指令操作。


  程序存储器构成


  中档系列单片机有一个13位的程序计数器,可以寻址8K&TImes;14位的程序存储空间。程序存储器总线宽度(指令字)为14位。由于所有的指令均为单字指令,所以一个具有8K&TImes;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<12:8>)来自PCH寄存器(不可直接读写)。PCH寄存器的值只能通过PCLATH寄存器来更新。


  图6-2所示为装载PC值的四种情况。情况1为写PCL时,如何装载PC(PCLATH<4:0>→PCH);情况2为执行GOTO指令时,如何装载PC(PCLATH<4:3> → PCH);情况3为执行CALL指令时,如何装载PC(PCLATH<4:3> → 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<4:3>位作为页面选择位(图6-2)。在执行CALL或GOTO指令前,用户必须确保正确设置页面选择位PCLATH<4:3>,以便指向需要的程序存储页面(图6-2)。当执行一条返回指令时,整个13位PC地址值都从堆栈弹出,不需要再对PCLATH<4:3>位进行设置。


  *注:当器件的程序存储器空间小于或等于2K字时,可忽略用来存取有多个页面的程序存 储器的页面选择位(PCLATH<4:3>)。但不推荐将PCLATH<4:3>位作为一般读写位使用,因为这样做可能影响与将来产品的向上兼容性。 对于程序存储器空间在2K到4K字之间的器件,可忽略页面选择位PCLATH<4>,因为它是用来寻址2、3页(1000h~1FFFh)的。通常也不推荐将PCLATH<4>作为一般读写位使用,因为这样做可能影响与将来产品的向上兼容性。


  例6-1是调用在程序存储器第1页上子程序的例子。本例假使PCLATH寄存器由中断服务程序保存和恢复(如果使用了中断)。

例6-1:从第0页调用第1页的子程序

关键字:pic单片机  13位程序计数器  存储器 引用地址:pic单片机教程之13位程序计数器存储器的组成

上一篇:PIC单片机晶体选择
下一篇:PIC单片机之PWM原理分析

推荐阅读最新更新时间:2024-11-04 00:53

PIC单片机生成lib文件
PIC C编译后会生成.P1的文件; 在windows 下运行cmd 命令后出现DOS窗口- 将路径设置到.P1文件所以目录(即PIC 工程文件所以目录)- 输入:libr r XX.lib XX1.p1 XX2.P1... 或 libr r XX.lpp XX1.p1 XX2.P1... 后即可把名称为XX1.P1 XX2.P1 的文件生成XX.lib(XX.lpp)的库文件。 生成库文件的好处是当最终用户只要知道如何使用,而不需要知道如何实现时。可以把重要的函数算法等保护起来。调用时只需通过头文件调用即可。
[单片机]
ATmega 16单片机的EEPROM存储器的相关寄存器(三)
EEPROM存储器的相关寄存器 1.EEARH、EEARL EEPROM地址寄存器 2.EEDR EEPROM数据寄存器 3.EECR EEPROM控制寄存器 EERIE EEMWE EEWE EERE 位 7..4 Res:保留 保留位,读操作返回值为零。 位 3 EERIE:EEPROM中断准备好使能 若SREG的I为 1 ,则置位EERIE将使能EEPROM准备好中断。清零EERIE则禁止此中断。当I=EERIE=1且EEWE清零时,则单片机产生一个中断表示写操作完成。 位2 EEMWE:EEPROM主机写使能 EEMWE决定了EEWE置位是否可以启动EEPROM写操作。当
[单片机]
基于FPGA的外部存储器设计
随着雷达技术的进一步发展,对雷达信号处理的要求越来越高,在实时信号处理过程中有大量数据需要存储,由于 FPGA 本身的存储器容量非常小,根本满足不了雷达信号处理过程中的需求,为解决这一问题,通过查询资料,引入SDRAM和FLASH作为FPGA的 外部存储器 。SDRAM存储器以其快速、方便和价格相对便宜,因而,常被用在雷达信号实时处理上。选择SDRAM而没有SRAM是因为SRAM价格太贵,SDRAM相对便宜。没有选择DDR SDRAM的原因是因为在实际的雷达信号处理中并不需要那么高burst率,SDRAM足以满足实际需求。SDRAM主要作用:在MTI处理时作为周期延迟器件、动态杂波图的存储和数据暂存等功能。虽然SDRAM有存储容
[嵌入式]
基于FPGA的外部<font color='red'>存储器</font>设计
基于PIC单片机的护理机自动控制系统设计
引言 随着我国老龄化进程的加剧,当今社会中存在着一种因失去生活自理能力而“长期卧床的弱势群体”,特别是那些几乎无意识的弱势群体,他们需要被人长期照顾,特别是他们的大小便的清洁处理。然而由于该弱势群体数量大、护理人员紧缺和护理费用高等问题,导致这些弱势群体的家庭护理矛盾日益凸显。目前市场上的长期卧床病人大小便清洁护理机在“智能护理”方面己比较完善,已经具有大小便自动识别与回收、温水清洗与自动烘干等功能,达到了“人性化”护理的要求,但在使用过程中仍然需要专门的“陪护人员”,对于绝大多数现代家庭而言,无论从人力还是财力,这都将是一个沉重的负担,同时也限制了大小便清洁护理机在家庭中的推广使用,因此,社会迫切需要一种在现有护理功能的基础上能
[单片机]
基于<font color='red'>PIC单片机</font>的护理机自动控制系统设计
0802LCD 4显示程序 PIC单片机C语言程序
#include xc.h #include pic.h //#include head.h #define uchar unsigned char #define uint unsigned int #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT ena
[单片机]
LED全彩屏数字视频信号处理电路的设计
1 引 言   LED视频显示屏由于亮度高、视角广、寿命长、性价比高,而且具有可与计算机同步显示各种文字、图形、图像,可实时播放电视、录像、影碟等视频信号,可即时输入、编辑各种多媒体数据等优点,使其在街头、广场、商业中心、运动场所、娱乐场所、控制中心许多公共场合得到了广泛的应用。但是由于技术的问题,特大视频显示屏还面临着严峻的挑战,主要表现在灰度级低,亮度损失严重,刷新速度低。另外,本文的视频信号源来自DVI(Digital Video InteRFace)接口,DVI接口输出的为数字视频信号,信息量大,一般是先经过外部RAM(Random Array Memory)缓存,然后由处理器对视频信号进行处理。可用于数字图像存储的外部
[家用电子]
LED全彩屏数字视频信号处理电路的设计
PIC单片机CCS之C语言(#IFDEF,#ENDIF的用法)
#IFDEF #IFNDEF #ELSE #ELIF #ENDIF 语法: #ifdef id cide #elif code #else code #endif 和 #ifndef id code #elif code #else code #endif id是一个预处理器标识符,code是一段有效的C源程序. 目的:这个指示的执行同#IF相似.在#IF里,如果指定的ID(用#DEFINE 创建的ID)对预处理器来说是已知的, 预处理器完全可以检查到它;而在#IFDEF里,如果ID被定义了,则预处理器可以检查到它,若没有定义ID,则#IFNDEF可以检查到它. 例子: #define d
[单片机]
亿铸科技CEO熊大鹏:以AI芯片架构创新,迎接算力增长新拐点
2024年10月16日—— 在湾芯展SEMiBAY2024《HBM与存储器技术与应用论坛》上,亿铸科技创始人、董事长兼CEO熊大鹏发表了题为《超越极限:大算力芯片面临的技术挑战和解决策略》的演讲。 熊大鹏博士提出,在AI大模型技术的推动下,算力迎来需求拐点,硬件架构将成为满足算力需求的关键路径之一,未来算力增长将以存储单元为中心。 大模型时代的机遇与挑战 在AI大模型时代,随着数据、算力、参数量的不断提升,模型能力显著增强。熊大鹏博士指出,大模型已经从量变逐渐演变为质变,当模型体量足够大时,会出现类似人类“开悟”的涌现能力,大模型的推理能力将显著提升。这一变化预示着AI应用的最后一公里即将打通,业务落地将推动对A
[网络通信]
亿铸科技CEO熊大鹏:以AI芯片架构创新,迎接算力增长新拐点
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved