1. 单片机程序运行要不要把程序从ROM中读入到RAM中
不要。但是ram中肯定会保留与当前程序运行状态有关的寄存器(SFR,对于ST89C52应该就是0x80~0xFF的单元)。
对于51系列或者类51的单片机,程序空间和数据空间是分开的,并不存在由rom加载到ram的问题。
这么说吧,ST89C52可以支持到64K的程序存储,如果都加载到外部RAM里,那RAM肯定是放不下了。
data是内部直接寻址的RAM,idata是内部间接寻址的RAM
2. 单片机 ram 中执行代码的 如何链接
单片机的程序一般默认从Fash启动。要想在RAM执行程序,首先得单片机支持,一般只要Flash和RAM是统一编址的都可以在RAM运行程序。
程序的启动一般都是从一个固定地址(厂家规定)启动的,而这个地址一般都不在RAM地址范围内。因此常用的做法是在单片机厂家规定的启动的地址开始处预先烧录一段启动代码,这就是我们常说的BootLoader,然后再在BootLoader中按照单片机的运行规则跳转到RAM中代码(我们一般称为App程序)的起始地址。
链接的不同之处就是ROM模型,一般,按照单片机对应的开发工具,默认都是将ROM的起始地址设置到了厂家规定的启动地址处,要将程序编译到其他地址,只需要找到这个ROM的配置修改其起始地址和空间大小即可。例如Keil里面的Target页面或者sct文件,还有DSP中的link文件……
根据上述说明可知想要在非厂家规定的地址跑程序,需要有一个BootLoader引导程序(如果是使用在线仿真器仿真跑可以不要):
App程序:链接到实际需要的地址(可能是Flash也可能是RAM),如果为RAM要注意掉电后程序丢失;
BootLoader程序:链接到厂家规定的启动地址,在BootLoader中再通过软件跳转到App的地址。
3. 单片机 51的一个项目的参数是放在ram里面的,下次在上电应该数据会丢失啊但是,下面,一定采纳
这是一条 伪指令 设置 setno 变量为 23h,
至于在程序中 怎么使用 这个 setno 变量 是另外回事,
如果在 变量中 存放 一个什么 数据 (这个数据是存放在 23h RAM 中)
你们关闭电源后 过 一段时间 再打开电源 这个变量 中的数据 就不一定 了。
这要看你 单片机 的电 是否 完全 放尽。如果 放尽电后肯定 保存不住的。