找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3129|回复: 7
收起左侧

51单片机扩展片外ram后的C语言编程问题

[复制链接]
ID:407680 发表于 2020-3-30 22:04 | 显示全部楼层 |阅读模式
10黑币
如图,扩展了一片6116,C语言编程创建一个数组,储存在片外ram,再次调用数组时要考虑硬件电路(地址)吗?
CDX%7J4TOH3@K_O9{}7R252.png

最佳答案

查看完整内容

电路里的6116的地址范围是0x0000~0x07ff。存储在外部ram的数组或变量,使用xdata进行定义,注意不要超过6116地址范围。使用时,可以像正常的内部变量进行读写即可,不用考虑硬件的地址。 例如: xdata char buf[10];//定义外部数组buf[] char a; //定义内部变量a buf[0]=1;//外部数组buf[]写 a=buf[0];//外部数组buf[]读
回复

使用道具 举报

ID:114631 发表于 2020-3-30 22:04 | 显示全部楼层
电路里的6116的地址范围是0x0000~0x07ff。存储在外部ram的数组或变量,使用xdata进行定义,注意不要超过6116地址范围。使用时,可以像正常的内部变量进行读写即可,不用考虑硬件的地址。
例如:
xdata char buf[10];//定义外部数组buf[]
char a; //定义内部变量a
buf[0]=1;//外部数组buf[]写
a=buf[0];//外部数组buf[]读
回复

使用道具 举报

ID:235200 发表于 2020-3-31 01:05 | 显示全部楼层
数组用xdata定义,不需要
回复

使用道具 举报

ID:708783 发表于 2020-3-31 09:48 | 显示全部楼层
不用考虑,只要不超过范围即可
回复

使用道具 举报

ID:383215 发表于 2020-3-31 14:04 | 显示全部楼层
都什么年代了?还研究6116?6116是总线型单片机的产物,以后设计电路,用到6116的可能性几乎为零,没有特殊要求,就不要研究6116了,上个世纪80年代左右,单片机基本只有一种,就是51单片机,51单片机就是典型的总线型单片机,为了扩展使用,就用总线扩RAM、IO口等,优点是是在当时的技术下,可以设计出比较复杂的电路,缺点还是电路复杂、成本太高、抗干扰差。6116好像是2K×8的RAM,很早以前研究过6264、2764之类的东西,好像还需要一片74LS373,汇编语言和C语言都有专门读外部RAM的指令和语句。现在的单片机都是以非总线型单片机为主,像AVR或者STM32,片内达到2K×8的RAM或者EEPROM多得是。
回复

使用道具 举报

ID:282850 发表于 2020-3-31 16:40 | 显示全部楼层
kmsj 发表于 2020-3-31 14:04
都什么年代了?还研究6116?6116是总线型单片机的产物,以后设计电路,用到6116的可能性几乎为零,没有特殊 ...

非常精辟,精单的事情不要复杂化。当用了6116后,发现IO不够了,是否再加一片IO扩展!另外csmyldl的回答也有道理,我一般大的数组放在DATA 或者const。
回复

使用道具 举报

ID:383215 发表于 2020-3-31 22:39 | 显示全部楼层
f556 发表于 2020-3-31 16:40
非常精辟,精单的事情不要复杂化。当用了6116后,发现IO不够了,是否再加一片IO扩展!另外csmyldl的回答 ...

你说的也非常精辟,51单片机通过6116外扩2K×8位的RAM,要用掉十几个IO口,按现在主流的非总线单片机而言,绝对是一件大亏本的事情,现在的主流单片机,内部资源已经非常丰富了,IO口反而显得比较珍贵。
回复

使用道具 举报

ID:785907 发表于 2020-6-30 02:00 | 显示全部楼层
kmsj 发表于 2020-3-31 14:04
都什么年代了?还研究6116?6116是总线型单片机的产物,以后设计电路,用到6116的可能性几乎为零,没有特殊 ...

不是实用不实用的问题, 是因为现在高校设计都是要用这些旧芯片,我就是设计被要求扩展6116并使用的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表