pic单片机教程之数据存储器的直接间接寻址方式

编程语言及工具

106人已加入

描述

  数据存储器构成

  数据存储器由特殊功能寄存器(SFR)和通用寄存器(GPR)组成。SFR控制器件的操作,而GPR则是数据存储和改写的通用区域。

  SFR和GPR数据存储区分成不同的存储区。GPR区分成不同的存储区,以实现对超过96字节的通用RAM的寻址。SFR是用来控制外设和内核功能的寄存器。STATUS寄存器的存储区选择控制位(STATUS<7:5>)用于选择存储区。图6-5是数据存储器的构成映射,这个映射与器件型号有关。

  从一个寄存器向另一个寄存器传送数据时,必须通过W寄存器。这意味着所有寄存器之间的数据传送,都需要两个指令周期。

  整个数据存储器可以采用直接寻址或间接寻址来存取。直接寻址可能需要使用RP1、RP0位,间接寻址需要用到指针寄存器(FSR)。间接寻址数据存储器的存储区0/存储区1或存储区2/存储区3时,要使用状态寄存器的间接寄存器指针(IRP)位。

  通用寄存器(GPR)

  某些中档单片机的GPR区分成不同的存储区,上电复位并不能初始化GPR,其它的复位也不能改变GPR的值。

  寄存器既可以直接寻址,也可以使用指针寄存器FSR间接寻址。某些器件具有各数据存储区共享的公用数据存储区,对公用数据存储区的读写不必考虑当前所在存储区,可使用同一个地址单元(值),我们称这个区域为公用RAM。

  特殊功能寄存器(SFR)

  特殊功能寄存器由CPU和外设使用,用于控制器件的操作,这类寄存器实现为静态RAM形式。特殊功能寄存器可分为两类,一类与内核功能有关,另一类与外设功能有关。本章将讲述与内核功能有关的特殊功能寄存器,另一类与外设功能操作有关的特殊功能寄存器将在相应的外设功能模块章节中讲述。

  所有中档单片机的SFR寄存器区也分成不同的存储区。在这些存储区间切换时,需要设置状态(STATUS )寄存器的RP0、RP1位来选择所需存储区。某些SFR寄存器会被上电复位和其它复位初始化,而有些一些SFR寄存器在复位时不会被初始化。

  *注: 可能有通用寄存器映射到特殊功能寄存器区。

  寄存器既可以直接寻址,也可以通过指针寄存器间接寻址。

  存储区划分

  数据存储器分为4个存储区,每个存储区包括特殊功能寄存器和通用寄存器。使用直接寻址时,为在这些存储区之间切换,需要设置状态寄存器的RP0、RP1位以选择需要的存储区。状态寄存器的IRP位用于间接寻址。

PIC单片机

  每个存储区最多可有128字节(7FH)。特殊功能寄存器安排在存储区的低地址单元;通用寄存器安排在高地址单元。所有数据存储器都是用静态RAM。所有存储区都包括特殊功能寄存器。为了减少程序代码和提高存取速度,存储区0中某些使用率高的特殊功能寄存器映射在其它存储区中。

  随着产品的发展,其数据存储器的设计布局有一些变化。对于所有新器件来说,标准的数据存储器构成如图6-5所示。在这个存储器映射中,所有存储区的最后16字节都映射到存储区0中,这可以降低用于现场切换的软件开销。用粗体表示的寄存器存在于每种单片机中,其它寄存器的有无与外设模块有关。图中没有示出所有的外设寄存器,因为针对不同的器件,在某些文件地址处的寄存器定义与这里所显示的不同。除了使用本手册所提供的所有图、表和说明外,也应参阅特定器件的数据手册来核实细节。

PIC单片机
PIC单片机


图6-6所示为某些18引脚器件的寄存器存储区映射。未实现的寄存器读为‘0’。

PIC单片机

  间接寻址、 INDF和 FSR寄存器

  间接寻址是寻址数据存储器的一种方式,间接寻址时指令中的数据存储器地址不是固定的,而是 使用一个SFR(指针寄存器)作为指向要读写的数据存储器地址的指针。由于该指针位于RAM中,其内容可以通过程序修改。这对于操作数据存储器中的数据表格很有用。图6-7所示为间接寻址的工作原理,实现了将数据传送到FSR寄存器的值指定的数据存储单元。

PIC单片机

  使用INDF寄存器可以实现间接寻址。任何使用INDF寄存器的指令实际上访问的是由指针寄存器(FSR)所指向的寄存器。若使用间接寻址方式对INDF寄存器进行读操作(FSR= '0'),读的结果将为00h;而使用间接寻址对INDF寄存器进行写操作,实际执行的是空操作,但可能会影响状态位。8位FSR寄存器与状态寄存器的IRP位(STATUS<7>)相组合,可以得到一个9位有效地址。如图6-8所示:

PIC单片机

  图6-2用最少的指令,采用间接寻址方法实现了对20h-2Fh RAM单元的清零。采用与此相同的方法,可以将已定义字节数的数据(数据块)传送到USART的发送寄存器(TXREG)。要发送数据块的起始地址很容易通过程序来修改。

PIC单片机

  初始化

  例6-3举例说明了直接寻址时如何进行存储区切换。例6-4为初始化(清零)通用RAM的部分代码。

PIC单片机

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分