33023A.book(31006A_cn.fm)

Similar documents
第5章:汇编语言程序设计

第10章:CCP捕捉/比较/脉宽调制

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

33023A.book(31005A_cn.fm)

PIC16F F MPLAB 08 16F LED 15 LED

INCF SEC1,F ; 將 SEC1+1 作查表取回對應數字 MOVF SEC1,W banksel STRING1 banksel PORTB RETFIE run_sec2: MOVF SEC2,W SUBLW.5 GOTO run_min ; 將秒個位數歸 0 CLRF SEC1 MOVL

文件名

DPJJX1.DOC

AN579

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F F696E74202D B5A5C6ACBBFAD3EBB5E7D7D3CFB5CDB3C9E8BCC62E707074>

Microsoft Word - S153B.doc

PIC单片机16F84的内部硬件资源(一)

701PIC Introduction to PICMicro MCUs

请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意 甚至是非法破坏

M8Rxxx 指令集说明 Version 年 11 月 上海磐芯电子有限公司 SHANGHAI MASSES ELECTRONIC Co., Ltd. 本公司保留对产品在可靠性, 功能和设计方面的改进作进一步说明的权利 说明文档的更改, 恕不另行通知

33023A.book(31026A_cn.fm)

PIC8位单片机汇编语言常用指令的识读(上)

Microsoft PowerPoint - 701_PIC-CHN_Attendee.ppt

ICD ICD ICD ICD ICD

41213C.book

指令系统 可分成如下 6 类 : 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令 2015 年 3 月 26 日星期四 8 时 41 分 27 秒 2

CH559指令周期.doc

微机第02章1(指令寻址)

Microsoft Word - 論文終極板.doc

<4D F736F F D20C7B0CBC4D5C2D7F7D2B5CCE22E646F6378>

41206A.book

N79A8211系列单片机内部NVM

<A1AAA1AA475053B4AEBFDACAFDBEDDBDD3CAD5B3CCD0F2CAB5C0FD>

MSP430ϵÁе¥Æ¬»úµÄÖ¸Áîϵͳ.pps [¼æÈÝģʽ]

PIC PICC C 4K C <10% C PIC 11.3 MPLAB-IDE PICC PICC MPLAB-IDE MPLAB-IDE ICE2000 ICD2 PICC MPLAB-IDE IDE Project Set Language Tool Locations

共同构成 16 位数据存储单元的地址 当 CPL=1 时, 将堆栈指针 SP 的 16 位地址 与指令中的 7 位地址相加, 形成 16 位的数据存储器地址 (2) 当 SP=0100h, 偏移地址为 50h 时, 寻址 0150h 单元 ; 当 DP=2, 偏移地址为 50h 时, 寻址 0150

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

Microsoft PowerPoint - 微原-第3章3.ppt [兼容模式]

目录 1. 产品简介 功能特性 引脚图 引脚描述 中央处理器 (CPU) 程序存储器 (OTP ROM) 堆栈 数据存储器 (RAM) INDF 寄存器.

PICkit2 LPC

Microsoft PowerPoint sun-arm isa2.ppt [Compatibility Mode]

PowerPoint 簡報

AN546

33023A.book(31027A_cn.fm)

第十四章 STC单片机比较器原理及实现

目 录

规格书

untitled

另外,AT89S52 可降至 0Hz 静态逻辑操作, 支持 2 种软件可选择节电模式 空闲模式下,CPU 停止工作, 允许 RAM 定时器/ 计数器 串口 中断继续工作 掉电保护方式下,RAM 内容被保存, 振荡器被冻结, 单片机一切工作停止, 直到下一个中断或硬件复位为止 8 位微控制器 8K 字

Microsoft Word - 第1章 MCS-51单片机基础.docx

MDT90P01 4-Bit RISC MCU 使用及注意事项 1. MDT90P01 4-bit RISC MCU PIN MAP: SOT-26 PB0 1 6 PB3 VSS 2 5 VDD PB1 3 4 PB2/RTCC 2. IC 烧入注意事项 : A. 需制作转接座 : Writer

标题

Microsoft PowerPoint - Ch3-8086CPUæ„⁄令系ç»�(3)-æŁ°æ“®ä¼€é•†æ„⁄令

PIC18FXX2 Data Sheet

DESCRIPTION

Microsoft Word - SoftICE用户指南.doc

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

这样当变量需要改变名字或者需要更改分配地址时, 直接更改变量表即可, 而不用更改具体的程序 这点对于较大的程序非常有利, 不但可以增加程序的可读性, 更重要的是提高程序的编写便利性和维护性 以上几点对于编写较高质量的代码都非常重要, 应在具体实践中仔细体会 2 程序跨页跳转和跨页调用技巧首先需要介绍

Microsoft PowerPoint - 第一章(07版).PPT

PowerPoint 演示文稿

数据库系统概论

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

untitled

39733a_cn.book

Andes Technology PPT Temp

Microsoft Word - AN3259C

学习MSP430单片机推荐参考书

需 求 拉 动 显 著 利 润 分 配 或 向 上 游 倾 斜 二 季 度 伊 始, 从 小 盘 题 材 向 大 盘 蓝 筹 的 风 格 转 换, 似 乎 刚 刚 开 始 就 又 戛 然 而 止 我 们 认 为, 虽 然 没 有 充 分 证 据 表 明 整 体 经 济 持 续 过 热, 但 局 部

四位微控制器ML64168_ _.doc

CM ZT1


41239D.book

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

51556A.book

Microsoft Word - 目录.doc

Microsoft PowerPoint - 05-第五讲-寻址方式.pptx

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC

数据库系统概论

Microsoft PowerPoint - 微原-第3章2.ppt [兼容模式]

Microsoft PowerPoint - BECKHOFF技术_ADS通讯 [Compatibility Mode]

Static Enforcement of Security with Types

上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 理 财 资 金, 则 客 户 面 临 产 品 期 限 延 期 调 整 等 风 险 8. 信 息 传 递 风 险 : 上 海 农 商 银 行 将 按 照 本 说 明 书 有 关 信 息 公 告 的 约 定, 进 行 产 品 信 息 披 露 客

(譯本)

规格书

LSTA126中文操作说明

378高雄市都市計畫說明書

1. 介绍 义隆 8 位单片机指令介绍 Application Notes 义隆 8 位单片机指令介绍 EM78/EM88 系列是基于 RISC 的精简指令微控制器, 每条指令是 13 位 15 位, 除 LCALL LJMP MOV R2,A ADD R2,A 改变 PC 指针的指令是 2 个指令

PowerPoint Presentation

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

上市公司股东大会投票信息公告( )

上市公司股东大会投票信息公告( )

W77E58中文手册


AT89C2051中文资料.doc

Microsoft PowerPoint - 第01章 基础知识.pptx


一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页


帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

Microsoft Word - 專題封面.doc

Microsoft Word - 新1-3.doc

Microsoft Word - LMB402CBC-AppNote-V0.1.doc

AN510

Transcription:

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.