就数据存储类型而言,8051系列有片上、输出程序存储装置、片上、输出数据存储器,片上程序存储器还分为直接地址区域和间接地址类型,分别为code 支持根据idata和51系列特色设定的pdata类型,通过使用不同的内存,程序的执行效率不同,与生成C51程序的ANSI-C略有不同,为SAMLL、COMPACT、lll 数组
51系列中的data、idata、xdata、pdata差异:
data:固定是指前面0x00-0x7f的128个RAM,能够直接在acc上读写,速度最快,生成的代码也最小。
idata:固定是指前一个0x00-0xff的256个RAM。 其中,前面的128和data的128完全相同,但访问方法不同。 idata以类似于c的指针方式访问。 程序集语句为mox ACC,@Rx . (不重要的补充:在c中,idata作为指针式访问非常有效。 )
xdata:外部扩展RAM通常是指外部0x0000-0xffff空间,通过DPTR访问。
当地址在当前A0-A7之上时,pdata:外部扩展RAM的最低256个字节被读写,并且由movx ACC和@Rx读写。 这很特殊,C51上好像有这个bug,所以建议不要太用。 但是,也有他的优势,具体的使用方法是中级的问题,所以在这里不提及。
单片机c语言unsigned char代码表[ ]代码是什么?
代码的作用是,我定义的数据放入程序存储器区域(ROM ),告诉单片机写入后不能更改,实际上就像程序集中的寻址MOVX ()。 因为c语言无法详细说明ROM仍然是RAM,所以可以在软件中添加此语句以代替汇编指令。 还有对应的data
程序可以简单地分为代码(程序)区域和数据(数据)区域。 代码区域在运行中无法更改。 在data区域中放置全局变量和临时变量需要不断变更。 cpu从代码区域读取指令,并对data区域的数据进行运算处理,因此代码区域存储在哪个介质上并不重要。 就像以前的计算机程序。代码区域可以在rom中、ram中、flash中,所以通常先将程序放入flash中,然后加载到ram中执行; DATA区域没有选择。 已经决定放入RAM。 放入rom也无法变更。 互联网
bdata怎么用那个?
程序需要8个以上的bit变量时,想要一次给8个变量赋值时很不方便。 (请举例说明其便利性,想更深入地了解时请在APP应用中考虑。 )此外,不能定义bit数组。 有唯一的方法
char bdata模式;
sbit MODE_7=MODE^7;
sbit mode _6=模式^ 6;
sbit MODE_5=MODE^5;
sbit MODE_4=MODE^4;
sbit MODE_3=MODE^3;
sbit mode _2=模式^ 2;
sbit mode _1=模式^ 1;
sbit MODE_0=MODE^0;
定义了8个bit变量MODE_n
这是定义语句,Keilc的特殊数据类型。 如果是sbit,请记住
比特模式_0=模式^ 0;
赋值语句如果是这样的c语言,就被视为异或运算
-----------------------------请参阅
空间名称地址范围的说明
DATAD:00H~7FH片内RAM直接地址区域
BDATAD:20H~2FH片内的RAM地址区域
IDATAI:00H~FFH片内的RAM间接地址区域
XDATAX:0000H~FFFFH64KB普通片外RAM数据区
HDATAX:0000H~FFFFFFH16MB扩展片外RAM数据区
CODEC:0000H~FFFFH64K通常片内外ROM代码区域
hconst(ecode ) c :0000 h至fffff fh16 MB扩展片外ROM常量区域(对于Dallas390可用作代码区域) ) ) ) ) ) ) ) )。
银行0~银行31b0:0000h~FFFFFH
:
:
B31:0000H~FFFFH组码区,最时尚人生拓展32X64KB ROM
-----------------------------请参阅
keil生成的文件:
. plg:编译器的编译结果
. hex和. bin:可执行文件
. map和. lst:连接文件
. o :目标文件
. crf、 lnp、 d、 axf :调试文件
. opt :保存项目配置信息
. bak :工程备份文件
M51文件,startup文件。 spa
注:本文从网络指针收集