请问51单片机外扩的ROM如何烧写?

[复制链接]
7499|14
 楼主| zhizuzhe 发表于 2009-2-25 21:58 | 显示全部楼层 |阅读模式
虽然还没碰到这个问题,但是很想知道。
一部分程序写在内部ROM中,一部分写在外部ROM中,怎么搞啊 ?
lyjian 发表于 2009-2-26 08:08 | 显示全部楼层

用编程器

救火车 发表于 2009-2-26 08:47 | 显示全部楼层

第31脚置高。烧ROM用编程器。

 楼主| zhizuzhe 发表于 2009-2-26 14:08 | 显示全部楼层

一部分CODE在内部,一部分在外部啊~

51单片机一般都带ISP了,没看到有选择烧写范围的啊,
如果单片机内部flash不够,ISP能够自动把剩下的代码烧写到外扩的ROM中么?

用烧写器完整地烧写ROM我是知道的,但是不知道如何做到将单片机内部放不下的代码烧写到外部ROM,不知道我这样说清楚了没,呵呵。
ayb_ice 发表于 2009-2-26 20:25 | 显示全部楼层

现在很少一半在片内,一半在片外。。。

maxking 发表于 2009-2-26 21:31 | 显示全部楼层

现在很少用到外部rom了

我也很想了解下,估计老一辈知道怎样回事?
McuPlayer 发表于 2009-2-26 22:15 | 显示全部楼层

烧录器就可以了

比如你的代码64K,而单片机内置Flash只有24K

那么就就要把目标代码切割成24K和48K的两个文件,前者烧录到单片机(用ISP或者烧录器),后者烧录到外置存储器(EPROM或者FLash等)
Conanyang 发表于 2009-2-27 11:32 | 显示全部楼层

内部ROM可以ISP,外部ROM必须烧录

    从51的datasheet上可以看出,两种编程方式(并行、串行)的编程地址最大都是给到内部程序存储器的最大值,大于的地址都舍弃了。所以无法使用在线编程方式去编程外部存储器。
    而,如果一部分程序在片内,一部分程序在片外,如果你编译好的程序是bin文件,那么可以分割相应的大小去烧录,但是如果你的程序是.hex或其它,就不行了。具体原因见bin和hex的区别。
jack.king 发表于 2009-2-27 11:37 | 显示全部楼层

这个问题我也想知道!

LS
请问是不是首先HEX-BIN然后大小分割这个分别烧写就可以了啊?
quakegod 发表于 2009-2-28 05:20 | 显示全部楼层

偶觉得好像不是那么说的

这个跟ROM和MCU的接口地址译码范围有关系
假如说,MCU内部带8K,而外扩芯片是从0地址开始扩展32K的,
那么外扩芯片的0-8K地址的ROM都会被舍去,MCU只从8K以后的地址开始寻址。
这样会造成8K的ROM浪费。
除非把ROM接成以8K地址为基址的形式,但是这样,地址译码又会很麻烦。
所以偶觉得,如果想简单的话,就是,外扩芯片从0地址开始
外扩芯片烧录整个程序,或者把程序的前8K都添0,而不需要进行分割。

当然,如果外扩芯片也为8K,或4K,那么地址译码就简单的多了,可以8K地址作为基址进行扩展,这样节省芯片,但这时候程序就要分割了。
Conanyang 发表于 2009-3-2 09:58 | 显示全部楼层

呵呵,寻址译码你搞不明白吗?

楼上的,片外寻址译码不是你说的那样浪费,假如片内是8K,而你的单片机设定先从片内寻址再从片外寻址,则你片外的存储器地址就是8k~64k,当然你也可以只从片外寻址,这时你的片外存储器地址就是0~64k了,详情可以见51单片机的datasheet。
 楼主| zhizuzhe 发表于 2009-3-2 15:25 | 显示全部楼层

谢谢楼上的各位,呵呵

在实际使用中,现在确实很难碰到这种情况了,因为片内FLASH到64K的都有而且不贵,但是还是想知道怎么搞的~
我一般都是生成intel HEX格式的烧写文件,今天又了解了Bin格式,哈哈~

谢谢楼上的大侠们:)知道怎么搞了~
jesseaz 发表于 2009-3-17 15:44 | 显示全部楼层

111

程序可以写芯片。也可以下载到存储器上三。单独对存储器件烧写。
dxpol432 发表于 2009-3-17 19:54 | 显示全部楼层

重新定向

使用 ORG 设置起始地址,让出内部范围。
quakegod 发表于 2009-4-2 01:07 | 显示全部楼层

本来很累了,懒得和11楼磨嘴皮子

但是又担心误人子弟,

大家也帮帮说说吧,到底怎样才算对。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

215

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部