


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51MCU 内部有 RAM , ROM ,不同于 8031 。尽管如今的增强行 51MCU 的内部 RAM ,ROM 可能已经很大的空间。但就技术而言,扩展RAM ,ROM 还是需要学会的扩展 RAM*内部 RAM :0x000xFF编译器设置*这种扩展是基于总线扩展的,所以, 还可以做普通 IO 口用,有两种可能:P0P2 口就已经不可以再做它用了(有网友提供信息,总线扩展P21, P2 口复用,如同 P1 利用 373 锁存器。 2,在总线扩展时,只用对于不同的设计方案需求,扩展可能基于以下任何一种设计:A, 只扩展RAMB, 只扩展ROMC, 扩展 ROM , RAM*总线扩展时,P2
2、口是否可用做普通IO 口*到了低地址总线, P2 口未用到。就作为普通 IO 口应用。由于技术还不到位,不做评论。 )*程序*扩展 RAM ,在程序中定义的 xdata 类型 XBYTE 类型等地址范围在外部 RAM 的变量,对其读写的过 程。用 C51 语言编写程序,且使用总线扩展的RAM ,则时序电路不用考虑, WR RD 等信号由编译器 / 硬件自动完成。外部 RAM :0x00000xFFFFRAM 的地址虽重复,但是两个 RAM 是没有关系的,所以不会造成干扰使用了外部 RAM ,就在工程选项 -off-chip xdata memory 中设置 start :0x0000 size
3、 :0xFFFF (根 据具体的 RAM 大小设置 size )。*扩展 RAM 时的变量定位及连续读取问题*ROM , RAM 的扩展时,需要用到变量的绝对地址定位,函数定位等。 变量的绝对地址定位, 是由于在程序中可能需要即时读取某个变量, 但变量的类型可能是 XDATA ,存 储在外部 RAM 中。这里有两个方法:1 ,用 _at_ 定位关键字定位 unsigned char xdata xxx _at_ 0x1100/ 定义变量 XXX 数据类型 xdata ,位置 0x1100memory_spacetepevariable_name _at_ constant;* 绝对地址的变量不
4、可以被初始化;函数或BIT 类型的变量是不可以被定义为绝对地址;2,用 XBYTE 定位宏定义绝对地址访问#define CBYTE(unsigned char volatile code*)0) #define DBYTE(unsigned char volatile idata*)0) #define PBYTE(unsigned char volatile pdata*)0) #define XBYTE(unsigned char volatile xdata*)0) / #define CWORD(unsigned int volatile code*)0)#define DWORD(
5、unsigned int volatile idata*)0)#define PWORD(unsigned int volatile pdata*)0)#define XWORD(unsigned int volatile xdata*)0) 以上是宏定义的原型函数,定义在 #include <absacc.h> 头文件中#defme xxx XBYTE0x8000/变量类型为 unsigned char 类型的数据 xxx ,位置 xdata 0x8000yyy=XBYTE0x8000;/变量类型为 unsigned char 类型的数据 yyy ,位置 xdata 0x8000
6、在这里,有网友提到,当编译器优化时,用绝对地址定位的变量,可能导致变量在连续读取时出 错,采用解决方法:a ,将编译器优化调整为 0 ,即不优化,程序不用修改,做以下操作>>选择project窗口的Target,然后打开"OptionsforTarget设置对话框,选择“C5选项卡,将 “Code Optimiztaion 中的 “Leve选择为 “0 Costant folding 。'再次编译 <<b,修改变量定义,增加“volatile关键字说明其特征:就是说明该变量具有,挥发?生,每次的读取都有意义的,这样编译器即使在优化时,编译后的代码也不会
7、省略掉重复读取的过程。如:unsigned char volatile xdata xxx_at_0x8000;由上文 XBYTE 等的宏定义函数原型可以看出,该宏定义已经说明了变量具有 volatile 特性,因 此,也可以直接用 XBYTE 定义所需要的变量c,硬件解决办法以上解决方法为参考网络文章)* 扩展 ROM 时的函数定位 * 函数一部分在内部 ROM ,一部分在外部 ROM 中*函数定位,个人理解:当一个完整功能的程序存储在外部内部 ROM 中时,即利用了内部 ROM ,可 能由于内部 ROM 空间不够,部分函数在外部中,这时,如果要执行整个功能,就需要告诉编译器,其他 功能函数
8、的地址(函数在外部 ROM 中的地址),此时就要用到 函数定位功能。解决方法如下: 待续 51 内部 ROM 地址范围 0x00000x0FFF ,所以外部 ROM 的地址为 0x1000 最大 0xFFFF 。 c51bbs 有详细介绍编写完整的程序(如果建立两个工程,堆栈等可能分配位置不同,导致地址重复或多个地址出错),编译后查看 .M51 文件,找到需要定位的函数名称信息(如 ?PR?_BCD2HEX?TOOLS ),在 KEIL51 工程选 项-BL51 lacate 中 code 项中加入: ?PR?_BCD2HEX?TOOLS ( 0x1000 )再次编译工程,打开 .M51 文
9、件会发现 ?PR?_BCD2HEX?TOOLS 已经定位在了 0x1000 位置了。如果有多个程序需要定位,方法同上,找出函数的名称信息,添加到 BL51 locate 的 CODE 项中,每 个函数之间用逗号隔开。而且要注意,所要定位的多个函数根据定位设置之前的地址高低安排,仍旧是低 地址函数在前,高地址函数在后。程序分为两部分存储,需要做的设置等如下: 待续 完成函数定位设置后,由于函数是要烧录在两个 ROM 中,需要将 HEX 文件分割成两个,内部 ROM 空间范围与外部 ROM 空间范围是不一样的,自然就应该将内部 ROM 的地址范围的 HEX 代码存储为一个 文件,将剩余部分的代码存
10、储为另一个文件,就完成了分割。例如 HEX 文件的 0x00000x0FFF 地址划分为一个文件, 0x10000xFFFF 划分为另一个文件。 这一点,如果所用的 MCU 的内部 ROM 大小不一致,就需要根据具体的大小划分分割 HEX 文件*编译器设置*由于是内部 ROM 和外部扩展 ROM 同时使用, 在工程选项 off-chip memory 中需要设置外部 ROM 地 址范围,女口 eprom start : 0x1000 size : OxFFFF (根据具体 ROM 大小设置 size,同时 use on-chip memory 选项不选,电路中 EA 接高电平)*扩展 ROM
11、,所有程序都在外部 ROM 中 *51 内部 ROM 不够用,但外部扩展的 ROM 应该足够了,所以,在扩展了 ROM 之后,尽量避免编程麻烦,所有功能均放在外部ROM 中,此时需要的设置操作等如下:待续 由于程序代码只用到了外部 ROM ,程序编译等不需要特殊的设置,按正常编译。然后将整个代码烧 录到外部 ROM 就可以了。也就不存在 HEX 文件分割的问题了。*编译器设置*由于只用到了外部 ROM ,在工程选项 off-chip memory 中需要设置外部 ROM 地址范围, 如 eprom start : 0x0000 size : 0xFFFF (根据具体 ROM 大小设置 size
12、 ,同时 use on-chip memory 选项不选,电路中 EA 接低电平),这里的设置不同与内外部 ROM 都用的情况, 没有使用内部 ROM 的情况下需要地址从 0x0000 开始,程序的开始地址中断向量等都在这里(具体参考内部ROM 地址的使用)。 EA 接低电平表示程序是*从外部 ROM 开始读起的,即不用内部 ROM 。* 扩展 ROM , RAM 时,总线地址如何安排 在扩展了 ROM , RAM 时,总线地址要如何安排,具体怎样设置呢?操作如下:待续 在程序设计时,要考虑硬件连接。例如,在外部ROM ,RAM 的地址设置时 (keil 工程选项中 ),假设P15 初始化置 1 了或在程序中, P15 为 1 时 WR RD 信号才时序正常(使用了 74 门电路),则 keil 工程选 项中的地址设置就要考虑工作状态 P15 是 0 或 1 的情况了。 页选信号就是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 窝工补偿协议书
- 用水纠纷协议书
- 道路修护协议书
- 母亲出车祸调解协议书
- 委托加工面膜厂协议书
- 股权咨询协议书
- 红酒赞助协议书
- 苗木嫁接协议书
- 用电负荷协议书
- 船员委培协议书
- 2025年企业合规管理工作计划范文
- 施工安全常识试题及答案
- 2025届湖北省T8联盟压轴卷1英语试题
- 泳池负责人试题及答案
- 2025新版工程咨询合同
- 2025年江西九江市赣鄱砂业集团有限公司招聘笔试参考题库含答案解析
- 企业破产重组法律顾问协议
- 2025年高考政治三轮复习:统编版必修二《经济与社会》主观题专题练习题(含答案)
- DB11∕T1478-2024生产经营单位安全生产风险评估与管控
- 土方外运的施工方案
- 制度规章修订说明及执行情况反馈报告
评论
0/150
提交评论