6 第 6 章存储器构成 存储器构成 目录 本章包括下面一些主要内容 : 6.1 简介...6-2 6.2 程序存储器构成... 6-2 6.3 数据存储器构成... 6-8 6.4 初始化... 6-14 6.5 设计技巧... 6-16 6.6 相关应用笔记... 6-17 6.7 版本历史... 6-18 2004 Microchip Technology Inc. DS31006A_CN 第 6-1 页
PICmicro 中档单片机系列 6.1 简介 本章主要包括两种存储器模块 : 程序存储器和数据存储器 每一个模块都有自己的总线, 所以在同一个振荡周期内可对两种存储器模块同时进行访问 数据存储器可以更进一步地分成通用寄存器和特殊功能寄存器 (SFR) 控制内核的特殊功能寄存器的操作将在本章介绍 ; 而控制外设模块的特殊功能寄存器将在论述每个外设模块的相应章节中介绍 6.2 程序存储器构成 中档系列单片机有一个 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 字或更少程序存储空间的器件不需要分页 DS31006A_CN 第 6-2 页 2004 Microchip Technology Inc.
图 6-1: 中档系列单片机的程序存储器映射和堆栈 第 6 章存储器构成 6 PC<12:0> PCLATH PC<12:8> CALL, RETURN RETFIE, RETLW PCL 13 存储器构成 堆栈深度 1 堆栈深度 8 复位向量 0000h 8K 6K 4K 2K 中断向量 片内程序存储器 ( 第 0 页 ) 片内程序存储器 ( 第 1 页 ) 片内程序存储器 ( 第 2 页 ) 片内程序存储器 ( 第 3 页 ) 0004h 0005h 07FFh 0800h 0FFFh 1000h 17FFh 1800h 1FFFh 注 1: 不是所有的器件都实现了上述全部程序存储空间 2: 标定数据可写到程序存储器 2004 Microchip Technology Inc. DS31006A_CN 第 6-3 页
PICmicro 中档单片机系列 6.2.1 复位向量 6.2.2 中断向量 6.2.3 标定信息 对于任何单片机, 复位都将使程序计数器指向地址 0h, 我们称这个地址为 复位向量地址, 也就是单片机发生复位时, 程序执行的入口地址 任何复位操作都会将 PCLATH 寄存器的内容清零 这表明, 复位向量地址 (0h) 处的任何转移指令都将跳转到程序存储器的第 0 页 (PAGE0) 当响应中断时, PC 指向地址 0004h, 我们称这个地址为 中断向量地址 当 PC 指向中断向量时, PCLATH 寄存器的值并不会被修改 这意味着, 在中断服务程序中, 在改写 PC 实现程序跳转前, 应按目的地址所处的实际程序页面先设定 PCLATH 寄存器 在中断服务程序修改 PCLATH 寄存器前, 应将原 PCLATH 的内容保存起来, 以便从中断服务程序返回时恢复 PCLATH 某些器件在程序存储器中存储标定信息 在器件最终测试时, Microchip 将标定信息写入程序存储器 应用程序利用这些值可以获得更好的运行结果 标定信息通常放在程序存储器的末尾, 并以 RETLW 指令形式实现, 该指令所带的立即数就是标定信息 注 : 对于窗口型器件, 在擦除器件内容前 ( 同时会擦除标定信息 ), 务必先记下所有的标定值 这样在重新烧写器件时能恢复标定值 建议将标定值写在封装上 DS31006A_CN 第 6-4 页 2004 Microchip Technology Inc.
6.2.4 程序计数器 (PC) 第 6 章存储器构成 6 程序计数器指定要取出执行的指令的地址, 其宽度为 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 值从栈顶装载 ( 弹出 ) 存储器构成 图 6-2: 不同情况下如何装载 PC 情况 1 - 以 PCL 为目的寄存器的指令 PCH PCL 12 8 7 0 PC PCLATH<4:0> 8 5 堆栈 (13 位 x 8) 栈顶 PCLATH ALU 结果 情况 2 - GOTO 指令 PCH PCL 12 11 10 8 7 0 PC 堆栈 (13 位 x 8) 栈顶 2 PCLATH<4:3> 11 操作码 <10:0> PCLATH 情况 3 - CALL 指令 13 PCH PCL 12 11 10 8 7 0 PC 堆栈 (13 位 x 8) 栈顶 2 PCLATH<4:3> 11 操作码 <10:0> PCLATH 情况 4 - RETURN RETFIE 或 RETLW 指令 13 PCH PCL 12 11 10 8 7 0 PC 堆栈 (13 位 x 8) 栈顶 11 操作码 <10:0> PCLATH 注 :PCLATH 不会被 PCH 的内容更新 2004 Microchip Technology Inc. DS31006A_CN 第 6-5 页
PICmicro 中档单片机系列 6.2.4.1 相对跳转指令 6.2.5 堆栈 程序的相对跳转指令是通过向程序计数器加一个偏移量来实现的 (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 所示 图 6-3: 修改堆栈 堆栈 Push1 Push9 Push2 Push10 Push3 Push4 Push5 Push6 Push7 Push8 栈顶 注 1: 没有用于表示堆栈溢出或堆栈下溢条件的状态位 注 2: 没有称为 PUSH 或 POP 的指令或助记符 而实现类似效果的操作是执行 CALL RETURN RETLW 和 RETFIE 指令, 或转到中断向量地址 DS31006A_CN 第 6-6 页 2004 Microchip Technology Inc.
6.2.6 程序存储器分页 第 6 章存储器构成 6 某些器件的程序存储器空间大于 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 页的子程序 ORG 0x500 BSF PCLATH,3 ; Select Page1 (800h-FFFh) CALL SUB1_P1 ; Call subroutine in Page1 (800h-FFFh) : ; : ; ORG 0x900 ; SUB1_P1: ; called subroutine Page1 (800h-FFFh) : ; RETURN ; return to Call subroutine in Page0 (000h-7FFh) ; 2004 Microchip Technology Inc. DS31006A_CN 第 6-7 页
PICmicro 中档单片机系列 6.3 数据存储器构成 6.3.1 通用寄存器 (GPR) 6.3.2 特殊功能寄存器 (SFR) 数据存储器由特殊功能寄存器 (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 的值 寄存器既可以直接寻址, 也可以使用指针寄存器 FSR 间接寻址 某些器件具有各数据存储区共享的公用数据存储区, 对公用数据存储区的读写不必考虑当前所在存储区, 可使用同一个地址单元 ( 值 ), 我们称这个区域为公用 RAM 特殊功能寄存器由 CPU 和外设使用, 用于控制器件的操作, 这类寄存器实现为静态 RAM 形式 特殊功能寄存器可分为两类, 一类与内核功能有关, 另一类与外设功能有关 本章将讲述与内核功能有关的特殊功能寄存器, 另一类与外设功能操作有关的特殊功能寄存器将在相应的外设功能模块章节中讲述 所有中档单片机的 SFR 寄存器区也分成不同的存储区 在这些存储区间切换时, 需要设置状态 (STATUS ) 寄存器的 RP0 RP1 位来选择所需存储区 某些 SFR 寄存器会被上电复位和其它复位初始化, 而有些一些 SFR 寄存器在复位时不会被初始化 注 : 可能有通用寄存器映射到特殊功能寄存器区 寄存器既可以直接寻址, 也可以通过指针寄存器间接寻址 DS31006A_CN 第 6-8 页 2004 Microchip Technology Inc.
6.3.3 存储区划分 第 6 章存储器构成 6 数据存储器分为 4 个存储区, 每个存储区包括特殊功能寄存器和通用寄存器 使用直接寻址时, 为在这些存储区之间切换, 需要设置状态寄存器的 RP0 RP1 位以选择需要的存储区 状态寄存器的 IRP 位用于间接寻址 表 6-1: 直接和间接寻址时的存储区控制 直接寻址存储区 (RP1:RP) 0 0 0 1 0 1 2 1 0 3 1 1 间接寻址 (IRP) 0 1 存储器构成 每个存储区最多可有 128 字节 (7FH) 特殊功能寄存器安排在存储区的低地址单元; 通用寄存器安排在高地址单元 所有数据存储器都是用静态 RAM 所有存储区都包括特殊功能寄存器 为了减少程序代码和提高存取速度, 存储区 0 中某些使用率高的特殊功能寄存器映射在其它存储区中 随着产品的发展, 其数据存储器的设计布局有一些变化 对于所有新器件来说, 标准的数据存储器构成如图 6-5 所示 在这个存储器映射中, 所有存储区的最后 16 字节都映射到存储区 0 中, 这可以降低用于现场切换的软件开销 用粗体表示的寄存器存在于每种单片机中, 其它寄存器的有无与外设模块有关 图中没有示出所有的外设寄存器, 因为针对不同的器件, 在某些文件地址处的寄存器定义与这里所显示的不同 除了使用本手册所提供的所有图 表和说明外, 也应参阅特定器件的数据手册来核实细节 图 6-4: 直接寻址 直接寻址 RP1 RP0 6 来自操作码 0 存储区选择 地址选择 00h 00 01 10 11 数据存储器 7Fh 7Fh 存储区 0 存储区 1 存储区 2 存储区 3 2004 Microchip Technology Inc. DS31006A_CN 第 6-9 页
PICmicro 中档单片机系列 图 6-5: 寄存器映射 寄存器地址 寄存器地址 寄存器地址 寄存器地址 INDF 00h INDF 80h INDF 100h INDF 180h TMR0 01h OPTION_REG 81h TMR0 101h OPTION_REG 181h PCL 02h PCL 82h PCL 102h PCL 182h STATUS 03h STATUS 83h STATUS 103h STATUS 183h FSR 04h FSR 84h FSR 104h FSR 184h PORTA 05h TRISA 85h 105h 185h PORTB 06h TRISB 86h PORTB 106h TRISB 186h PORTC 07h TRISC 87h PORTF 107h TRISF 187h PORTD 08h TRISD 88h PORTG 108h TRISG 188h PORTE 09h TRISE 89h 109h 189h PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh PIR1 0Ch PIE1 8Ch 10Ch 18Ch PIR2 0Dh PIE2 8Dh 10Dh 18Dh TMR1L 0Eh PCON 8Eh 10Eh 18Eh TMR1H 0Fh OSCCAL 8Fh 10Fh 18Fh T1CON 10h 90h 110h 190h TMR2 11h 91h 111h 191h T2CON 12h PR2 92h 112h 192h SSPBUF 13h SSPADD 93h 113h 193h SSPCON 14h SSPATAT 94h 114h 194h CCPR1L 15h 95h 115h 195h CCPR1H 16h 96h 116h 196h CCP1CON 17h 97h 117h 197h RCSTA 18h TXSTA 98h 118h 198h TXREG 19h SPBRG 99h 119h 199h RCREG 1Ah 9Ah 11Ah 19Ah CCPR2L 1Bh 9Bh 11Bh 19Bh CCPR2H 1Ch 9Ch 11Ch 19Ch CCP2CON 1Dh 9Dh 11Dh 19Dh ADRES 1Eh 9Eh 11Eh 19Eh ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh 20h A0h 120h 1A0h 注 通用寄存器 (2) 通用寄存器 (3) 通用寄存器 (3) EFh 映射到存储区 0 F0h 映射到存储区 0 70h - 7Fh (4) 70h - 7Fh (4) 7Fh FFh 存储区 0 存储区 1 存储区 2 (5) 16Fh 170h 17Fh 通用寄存器 (3) 映射到存储区 0 70h - 7Fh (4) 存储区 3 (5) 1EFh 1F0h 1: 黑体标注的寄存器在各种单片机中都存在 2: 有些地址单元可能没有实现, 读为 0 3: 这些地址单元可能没有实现 根据所使用器件的不同, 对这些未实现地址单元的访问会有不同, 详细信息请参考具体的器件数据手册 4: 有些器件没有将这些寄存器映射到存储区 0, 此时这些寄存器就作为通用 RAM 5: 有些器件可能没有这些存储区, 未实现存储区中的地址单元读为 0 6: 通用寄存器也可以位于特殊功能寄存器区中 1FFh DS31006A_CN 第 6-10 页 2004 Microchip Technology Inc.
第 6 章存储器构成 图 6-6 所示为某些 18 引脚器件的寄存器存储区映射 未实现的寄存器读为 0 6 图 6-6: 寄存器映射 寄存器地址 寄存器地址 INDF 00h INDF 80h TMR0 01h OPTION_REG 81h PCL 02h PCL 82h STATUS 03h STATUS 83h FSR 04h FSR 84h PORTA 05h TRISA 85h PORTB 06h TRISB 86h 07h PCON 87h ADCON0 / 08h ADCON1 / 88h EEDATA (2) EECON1 (2) ADRES / 09h ADRES / 89h EEADR (2) EECON2 (2) PCLATH 0Ah PCLATH 8Ah INTCON 0Bh INTCON 8Bh 0Ch 8Ch 通用 (3) 寄存器 通用寄存器 (4) 存储器构成 7Fh 存储区 0 存储区 1 FFh 注 1: 黑体标注的寄存器在每种单片机中都存在 2: 这些寄存器可能没有实现, 或在一些器件中实现为其它的寄存器 3: 有些地址单元可能没有实现, 读为 0 4: 这些地址单元在存储区 1 中没有实现 访问这些没有实现的地址单元时, 将访问存储区 0 中相应的寄存器 2004 Microchip Technology Inc. DS31006A_CN 第 6-11 页
PICmicro 中档单片机系列 6.3.4 间接寻址 INDF 和 FSR 寄存器 间接寻址是寻址数据存储器的一种方式, 间接寻址时指令中的数据存储器地址不是固定的, 而是使用一个 SFR ( 指针寄存器 ) 作为指向要读写的数据存储器地址的指针 由于该指针位于 RAM 中, 其内容可以通过程序修改 这对于操作数据存储器中的数据表格很有用 图 6-7 所示为间接寻址的工作原理, 实现了将数据传送到 FSR 寄存器的值指定的数据存储单元 使用 INDF 寄存器可以实现间接寻址 任何使用 INDF 寄存器的指令实际上访问的是由指针寄存器 (FSR) 所指向的寄存器 若使用间接寻址方式对 INDF 寄存器进行读操作 (FSR= '0'), 读的结果将为 00h ; 而使用间接寻址对 INDF 寄存器进行写操作, 实际执行的是空操作, 但可能会影响状态位 8 位 FSR 寄存器与状态寄存器的 IRP 位 (STATUS<7>) 相组合, 可以得到一个 9 位有效地址 如图 6-8 所示 : 图 6-7: 间接寻址 RAM 执行的指令 操作码 地址 9 文件地址 = INDF 地址!= 0 地址 = 0h 取出的指令 RP1:RP0 9 9 2 操作码文件 IRP 7 FSR DS31006A_CN 第 6-12 页 2004 Microchip Technology Inc.
第 6 章存储器构成 图 6-8: 间接寻址 6 00h 00 01 10 11 IRP 存储区选择位 00h 间接寻址 7 FSR 寄存器 0 地址选择位 存储器构成 数据存储器 7Fh 7Fh 存储区 0 存储区 1 存储区 2 存储区 3 图 6-2 用最少的指令, 采用间接寻址方法实现了对 20h-2Fh RAM 单元的清零 采用与此相同的方法, 可以将已定义字节数的数据 ( 数据块 ) 传送到 USART 的发送寄存器 (TXREG) 要发送数据块的起始地址很容易通过程序来修改 例 6-2: 间接寻址 BCF STATUS, IRP ; Indirect addressing Bank0/1 MOVLW 0x20 ; Initialize pointer to RAM MOVWF FSR ; NEXT CLRF INDF ; Clear INDF register INCF FSR,F ; Inc pointer BTFSS FSR,4 ; All done? GOTO NEXT ; NO, clear next CONTINUE ; : ; YES, continue 2004 Microchip Technology Inc. DS31006A_CN 第 6-13 页
PICmicro 中档单片机系列 6.4 初始化 例 6-3 举例说明了直接寻址时如何进行存储区切换 例 6-4 为初始化 ( 清零 ) 通用 RAM 的部分代码 例 6-3: 存储区选择 CLRF STATUS ; Clear STATUS register (Bank0) : ; BSF STATUS, RP0 ; Bank1 : ; BCF STATUS, RP0 ; Bank0 : ; MOVLW 0x60 ; Set RP0 and RP1 in STATUS register, other XORWF STATUS, F ; bits unchanged (Bank3) : ; BCF STATUS, RP0 ; Bank2 : ; BCF STATUS, RP1 ; Bank0 DS31006A_CN 第 6-14 页 2004 Microchip Technology Inc.
例 6-4: RAM 初始化 第 6 章存储器构成 6 CLRF STATUS ; Clear STATUS register (Bank0) MOVLW 0x20 ; 1st address (in bank) of GPR area MOVWF FSR ; Move it to Indirect address register Bank0_LP CLRF INDF0 ; Clear GPR at address pointed to by FSR INCF FSR ; Next GPR (RAM) address BTFSS FSR, 7 ; End of current bank? (FSR = 80h, C = 0) GOTO Bank0_LP ; NO, clear next location ; ; Next Bank (Bank1) ; (** ONLY REQUIRED IF DEVICE HAS A BANK1 **) ; MOVLW 0xA0 ; 1st address (in bank) of GPR area MOVWF FSR ; Move it to Indirect address register Bank1_LP CLRF INDF0 ; Clear GPR at address pointed to by FSR INCF FSR ; Next GPR (RAM) address BTFSS STATUS, C ; End of current bank? (FSR = 00h, C = 1) GOTO Bank1_LP ; NO, clear next location ; ; Next Bank (Bank2) ; (** ONLY REQUIRED IF DEVICE HAS A BANK2 **) ; BSF STATUS, IRP ; Select Bank2 and Bank3 ; for Indirect addressing MOVLW 0x20 ; 1st address (in bank) of GPR area MOVWF FSR ; Move it to Indirect address register Bank2_LP CLRF INDF0 ; Clear GPR at address pointed to by FSR INCF FSR ; Next GPR (RAM) address BTFSS FSR, 7 ; End of current bank? (FSR = 80h, C = 0) GOTO Bank2_LP ; NO, clear next location ; ; Next Bank (Bank3) ; (** ONLY REQUIRED IF DEVICE HAS A BANK3 **) ; MOVLW 0xA0 ; 1st address (in bank) of GPR area MOVWF FSR ; Move it to Indirect address register Bank3_LP CLRF INDF0 ; Clear GPR at address pointed to by FSR INCF FSR ; Next GPR (RAM) address BTFSS STATUS, C ; End of current bank? (FSR = 00h, C = 1) GOTO Bank3_LP ; NO, clear next location : ; YES, All GPRs (RAM) is cleared 存储器构成 2004 Microchip Technology Inc. DS31006A_CN 第 6-15 页
PICmicro 中档单片机系列 6.5 设计技巧 问 1: 程序执行时似乎跑飞了 答 1 : 当所使用器件的程序存储器超过 2K 字时, 子程序调用可能需要在执行 CALL( 或 GOTO) 指令前, 装载 PCLATH 寄存器, 以正确指定子程序所在的程序存储器页面 无论标号 SUB_1 在程序存储器中的哪个地址, 下列程序都将正确地装载 PCLATH 寄存器, MOVLW HIGH (SUB_1) ; Select Program Memory Page of MOVWF PCLATH ; Routine. CALL SUB_1 ; Call the desired routine : : SUB_1 : ; Start of routine : RETURN ; Return from routine 问 2: 我需要将 RAM 初始化成 0, 有什么简便的方法吗? 答 2: 参见例 6-4 如果你所使用的器件没有 4 个数据存储区, 可以删去一些代码 DS31006A_CN 第 6-16 页 2004 Microchip Technology Inc.
6.6 相关应用笔记 第 6 章存储器构成 本部分列出了与本章内容相关的应用笔记 这些应用笔记并非都是专门针对中档单片机系列而写的 ( 即有些针对低档系列, 有些针对高档系列 ), 但其概念是相近的, 通过适当修改并受到一定限制即可使用 目前与存储器构成相关的应用笔记有 : 标题 应用笔记 # Implementing a Table Read AN556 6 存储器构成 2004 Microchip Technology Inc. DS31006A_CN 第 6-17 页
PICmicro 中档单片机系列 6.7 版本历史版本 A 这是描述存储器构成的初始发行版 DS31006A_CN 第 6-18 页 2004 Microchip Technology Inc.