求教,keilC里RAM的设置

[复制链接]
8712|20
 楼主| 中航_夏工 发表于 2009-8-25 08:40 | 显示全部楼层 |阅读模式
我用的芯片是STC12系列,RAM为1028,可是KEIL库里没这款芯片,所以用AT89S53代替,但是AT得RAM为256,所有BULID的时候老是说溢出,创建不了,请问有什么办法可以改芯片的RAM特性啊

Program Size: data=126.1 xdata=0 code=2721 这是代码大小,各位大侠帮帮忙,小弟在此谢过了!
etz2009 发表于 2009-8-25 08:51 | 显示全部楼层
你去看看那个KEIL提供的说明书
好像那上面有很多的预编译等东西
我想可能会对你有用
LYXQ 发表于 2009-8-25 09:13 | 显示全部楼层
0-128字节直接寻址,属内部RAM;128-256间接寻址,属内部RAM;256-1280间接寻址,属外部RAM;要想用外部RAM必须定义成xdata
 楼主| 中航_夏工 发表于 2009-8-25 09:17 | 显示全部楼层
谢谢楼上,怎么定义成XDATA呢? 把Memory model改变一下就可以了吗?
 楼主| 中航_夏工 发表于 2009-8-25 09:21 | 显示全部楼层
顺便说下,我用的DB的KEIL。。
LYXQ 发表于 2009-8-25 09:58 | 显示全部楼层
#define uchar unsigned char
xdata uchar t1; 此变量定义在xdata区,256 --- 1280之间
idata  uchar t2; 此变量定义在idata区, 128 --- 256 之间
uchar t3;          此变量定义在data区,     0 --- 128 之间
LYXQ 发表于 2009-8-25 09:59 | 显示全部楼层
#define uchar unsigned char
xdata uchar t1; 此变量定义在xdata区,256 --- 1280之间
idata  uchar t2; 此变量定义在idata区, 128 --- 255 之间
uchar t3;          此变量定义在data区,     0 --- 127 之间
冷漠 发表于 2009-8-25 12:46 | 显示全部楼层
楼上还是没说清楚。我也有此问题。
按照楼上:xdata uchar t1; 此变量定义在xdata区,256 --- 1280之间
是片外xdata  了,编译出来的机器码是MOVX  @DPTR, ...

芯片产生外部读写信号RD/WR,还是没有用到片内xdata。

中航夏工解决问题后,教教咱们大家。芯片内有一个设置位,设置0/1 指向片内xdata 还是片外xdata。
LYXQ 发表于 2009-8-25 14:13 | 显示全部楼层
STC单片机上电后的情况下是使用内部扩展RAM的。这时的指令MOVX  @DPTR,a在1K范围内是不会影响P0,P2,RD的。数据手册68页已经说得很清楚了。是不是如楼上说的那样试验过后再说了,不要猜测。
 楼主| 中航_夏工 发表于 2009-8-25 14:43 | 显示全部楼层
还在试验中,不过我把一个原有的一个数组定义到idata 中后,就没有提示内存不够了,能够直接编译和创建,具体到哪个地址我还没看。
mohanwei 发表于 2009-8-25 15:05 | 显示全部楼层
MCU选择为8031,8051都可以;
编译模式建议使用大模式,即变量默认放到xdata;局部对速度要求很苛刻的地方手工指定变量到data或者idata……
至于xdata如何用,PWM如何用……建议多看看手册,那个姚工估计是资深单片机开发人士,手册里写的小笔记和小例程都说到点上了,一点即明。其它的基础部分,参考8051相关书籍即可,毕竟走得是兼容路线。
冷漠 发表于 2009-8-25 17:06 | 显示全部楼层
本帖最后由 冷漠 于 2009-8-25 17:16 编辑

选8031、8051不行吧,它们没有内部xdata呀。即使可以设置DME0位,...我选的是89C51RD2代用,附加1K内部 XRAM。

还是FDLock 说的是正解:DMEO位“使能/禁能”设置的问题:实验一下:改写PMR寄存器的DME0位看看现象:

“这个1KB的SRAM是XDATA存储区 。
如果内部1KB的SRAM使能(由PMR寄存器的DME0位控制),则用MOVX访问0000H--03FFH地址就是访问内部SRAM,大于03FFH地址就是访问P0、P2口外扩的SRAM。
如果内部1KB的SRAM禁能,则用MOVX访问0000H--FFFFH地址都是访问P0、P2口外扩的SRAM。”
wkatt1002 发表于 2009-8-25 17:38 | 显示全部楼层
能说下PMR能不能位寻址呢??
mohanwei 发表于 2009-8-26 08:36 | 显示全部楼层
内部的xdata和外部总线扩展的64K xdata有什么区别呢?通过AUXR的EXTRAM位来切换而已。
我的项目里不管设8031 8051 8958……都没问题。手册上推荐的华邦型号只是为了使Flash大小一样而已,防止你程序写大了而不自知到烧写才发现。
xwj 发表于 2009-8-26 08:50 | 显示全部楼层
内部的xdata和外扩的xdata软件上没什么区别的,记得设置下寄存器就可以了

当然,外面的信号肯定是有区别的,访问内部的xdata时总线上思没有信号的,P0和P2口、WR、WD电平不受影响;
而访问外部的xdata时,这些端口的电平都会有瞬间变化,所以就不能用坐IO使用了。
 楼主| 中航_夏工 发表于 2009-8-26 09:41 | 显示全部楼层
看了各位的论述,好像明白了点,可是为什么要用DEMO位来屏蔽内部XDATA呢?
XWJ说软件上没区别,那我认为硬件就该有区别哦,比如2款MUC,第一款的RAM256,第2款的RAM512,2款RAM都不够用,都外接同一款RAM,那硬件电路的接法是不是不一样?
我还想问下,只要RAM达到64K,不管外接还是内接,那XDATA的范围是不是256-64K?
huchengxtu 发表于 2009-8-26 11:13 | 显示全部楼层
测试完毕
AUXR=0x00;
Program Size: data=41.1 xdata=1024 code=1380
LYXQ 发表于 2009-8-26 11:15 | 显示全部楼层
STC的单片机干嘛要扯上华邦的东西?它们根本就是2个东西,难怪调不出来。建议在wave环境下,CPU选STC8958。
a305566 发表于 2011-3-31 13:28 | 显示全部楼层
cxdy_lee 发表于 2011-3-31 14:23 | 显示全部楼层
可以去STC的官网去下载它的库。然后用这个文件替换KEIL里面的单片机库就可以啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

23

帖子

0

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