大家好,今天小编来为大家解答51单片机启动代码详解(一)这个问题,很多人还不知道,现在让我们一起来看看吧!
keil新建工程时提示是否添加启动文件
通常情况下,您需要选择“是”。当然,你也可以选择不添加。那么,这个启动文件的作用是什么呢?什么情况下需要添加,什么情况下不可以添加?
今天我们就来仔细看看这个启动文件的内容。理解了这个内容后,我们会恍然大悟:“哦,原来是这样啊!”
以下时启动代码原文第一段
$NOMOD51;——————————————————– —— ———————————-;该文件是C51 编译器包的一部分;版权所有(c) 1988 -2005 Keil Elektronik GmbH 和Keil Software, Inc.版本8.01; *** 使用上下文菜单中的配置向导***;——————————— —————- ———————————- ———-; STARTUP.A51: 该代码在处理器复位后执行。要翻译此文件,请使用A51 和以下调用: A51 启动.A51;要将修改后的STARTUP.OBJ 文件链接到您的应用程序,请使用以下命令: Lx51 调用: lx51你的目标文件列表,STARTUP.OBJ控件;———————————————— —– ———————————————————-;用户定义的h 内存上电初始化;用下面的EQU语句初始化内存;处理器复位时可以定义: o IDATALEN: IDATA 内存大小0x0-0x100; i Note: IDATA 存储器的绝对起始地址始终为0; i IDATA 空间在物理上与DATA 和BIT 区域重叠。 IDATALEN EQU 80H; o XDATASTART: XDATA 存储器起始地址0x0-0xFFFF; i XDATA 存储器的绝对起始地址; i XDATA 内存的长度(以字节为单位)。 PDATA 内存以字节为单位。PDATALEN EQU 0H;/h
以下是启动代码第一段的翻译
———————————- – ————————————————-
该文件是C51 编译器包的一部分
版权所有(c) 1988-2005 Keil Elektronik GmbH 和Keil Software, Inc.
8.01版
*** 使用上下文菜单中的配置向导***
————————————————– —————————-
STARTUP.A51 中的代码在处理器复位后执行。
使用如下命令行语句调用A51编译生成目标文件。
A51 启动.A51
使用以下命令行语句调用BL51连接器将STARTUP.OBJ目标文件连接到程序代码。
Lx51 调用:
LX51 呼叫
————————————————– —————————-
LX51调用目标文件列表,由STARTUP.OBJ目标文件控制
用户自定义上电后需要初始化的存储区域(初始化RAM区域中的数据)
当处理器复位时,使用以下EQU 指令来初始化存储器(RAM 单元)。
IDATALEN:IDATA存储区域的大小为0-256,可以根据自己的选择进行修改。
IDATA的绝对起始地址始终为0
IDATA区涵盖DATA区和BIT区(DATA区(直接寻址区)和BIT区(位寻址区));至少与C51编译器运行库相关的内存空间必须保证为0初始化
注:51系列中data、idata、xdata、pdata的区别:
data: 固定引用0x00-0x7f 之前的128 个RAM。
idata:固定指的是从0x00到0xff的前256个RAM,其中前128个和data的128完全相同,只是因为访问方式不同。
xdata:外部扩展RAM,一般指外部0x0000-0xffff空间。
pdata: 外部扩展RAM 的低256 字节。
需要初始化为0的IDATA内存空间的字节数。IDATALEN只是一个标号(与IDATA不同)。 EQU只是一个类似宏的替换,类似于C语言中的#define uint(unsigned int)。上面的代码导致程序以后遇到IDATALEN时将其替换为80H。 IDATALEN可以定义为自己喜欢的名字如MyDataLen等,之所以使用IDATALEN,一是方便记忆,二是为了表明它与IDATA相关。
XDATA存储区起始地址0x0-0xFFFF
XDATA 存储器的绝对起始地址。
XDATA内存空间的绝对起始地址为0,
XDATA 空间的大小
XDATA 空间的长度(以字节为单位)
请注意,xdata 中的字节数被清除为0。该值默认为0。
PDATA空间大小
PDATA内存空间的绝对起始地址
需要初始化为0的PDATA内存字节数
51系列中data、idata、xdata、pdata的区别
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/195842.html
用户评论
暮光薄凉
终于找到一篇讲清楚51单片机的启动代码了!以前总看不懂论坛那些一大块代码,现在明白了怎么去分析每个步骤,感觉受益匪浅.
有20位网友表示赞同!
孤败
太棒了!这篇文章讲解很详细,从基本概念到具体的代码都解释得很透彻。我马上就要用51单片机做项目,有了这篇教程真是太安心了!
有17位网友表示赞同!
迁心
对学习嵌入式编程的小白来说,这个教程简直就是宝典!语言很平易近人,关键是每个步骤都有清晰的图解,看着就懂了.
有8位网友表示赞同!
陌上花
虽然是 (1) ,但我已经从第一部分就能感受到作者的专业程度。期待后续讲解,希望涵盖一些更实用的应用案例!
有9位网友表示赞同!
又落空
写的确实不错,特别是把启动代码分成不同的模块分析,让我更容易理解整个流程。不过,希望可以再多讲讲汇编指令的含义,感觉有些过于简略了.
有15位网友表示赞同!
把孤独喂饱
看完这篇文字,我真的觉得自己跨进了51单片机的门槛!终于解开启动代码的神秘面纱,接下来就可以开始学习实际编程了!
有18位网友表示赞同!
不离我
这篇文章对新手来说确实很有帮助,但对于熟悉51芯片的开发者来说可能有点过于基础,可以考虑加入一些更深入的内容.
有19位网友表示赞同!
歆久
我感觉文章里缺少了实例讲解,如果能结合一些具体的应用场景演示代码运行的效果,会更加生动有趣.
有20位网友表示赞同!
闷骚闷出味道了
启动代码?我只想直接看项目示例!这篇教程太理论化了,有点枯燥乏味…
有8位网友表示赞同!
龙卷风卷走爱情
作者写得真好,让我对51单片机的学习有了明确方向和目标。我已经迫不及待想要实践一下了!
有9位网友表示赞同!
凉凉凉”凉但是人心
文章里提到的中断函数,我以前都没听过,看来还是缺乏一些电路知识的了解,需要重新学习一遍。
有20位网友表示赞同!
迷路的男人
希望作者能在后续讲解中结合实际项目,更好地展示51单片机的应用能力,这样才能更吸引人!
有6位网友表示赞同!
厌归人
启动代码分析太细致了,看得我头晕脑胀!能不能简化一下,突出重点内容?
有20位网友表示赞同!
?亡梦爱人
虽然文章写的很不错,但我觉得一些关键概念还是不够解释清楚,比如为什么要设置这些中断位寄存器?有什么作用?
有8位网友表示赞同!
有些人,只适合好奇~
51单片机真是太难学了,每次看到那些复杂的汇编指令就头疼,希望能有更直观的学习方式.
有11位网友表示赞同!
掉眼泪
我一直在用STM32,这次尝试学习51单片机感觉差距很大,代码风格和生态也截然不同,希望可以慢慢适应
有11位网友表示赞同!
仰望幸福
文章讲得明白,但感觉篇幅有点短,希望能再详细一点,比如对某些指令的实现原理做个分析
有17位网友表示赞同!
冷风谷离殇
感谢作者分享这种优质的教程,让我更容易理解51单片机的启动过程!这篇文章真的帮到了我!
有13位网友表示赞同!