• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

51单片机内存过大proteus如何仿真

我们先看keil软件编译后的data xdata 和code的说明

看到没有编译成功

那么首先data  xdata  code分别代表什么意思呢?

data表示使用的内部RAM,xdata表示使用的是外部RAM,code表示的是程序的大小。

从51单片机的手册可以知道,以AT89C51为例,其中RAM资源的256字节,其中内部128字节,外部扩展128字节。那么这个内部128字节,对应的就是data定义的变量,外部的128字节对应的就是xdata定义的变量。

很明显单片机内部的额内存空间不够,要选择外部xdata

再重新编译一下

这样就编译ok了

存储器模式一共有三种,分别为small、large、compact模式。

上面已经提到内存这块,标准的51内核是0x00~0x7F一共128B,而现在的大多数半导体厂商开发的51系列单片机都带了扩展片内RAM,即片内RAM区域一般是从0x00到0xFF一共256B。随着功能需求越来越多,程序量越来越大,那片内这256B也不够用了,因此又扩展了片外RAM,片外RAM的预留比较大,最大可以从0x0000到0xFFFF一共64KB,当然了,每个具体型号有多大不一定,具体看通过芯片的手册来了解。

1.在small模式中,所有默认变量均装入单片机内部的RAM中,内部RAM的低128B

2.在compact模式中,所有默认变量均位于单片机的片外低256B RAM中,和在small模式中使用关键字 pdata来定义数据变量的效果一样,如 uchar pdata a[100];在该模式下程序总变量空间不能超过256B。 对于只有128B的单片机来说,使用此模式定义超过128B变量数据时,将发生错误。其优点是较small模式宽裕,速度较small慢,但是比large块,是一种中间状态;

3.在large模式中,所有默认变量优先放在外部64KB的RAM中,这和使用关键子xdata 来定义变量的效果一样。该模式的优点是空间大,可存变量多。

有个问题,项目中遇到把单片机内存模式从small模式改到large模式后,程序编译下载后,工作不正常的情况,也就是把刚才编译的hex文件在proteus中程序是不能运行的。

看看如何设置一下

直接双击单片机

勾选红框,看到xram才0字节

我们改为0000-7FFF就是32768字节

程序就可以正常运行了

全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法