AT89C52的程序空间是8KB是确认无疑的,但指的是存放纯二进制的机器码,就是二进制数。而KeilC编译的HEX代码文件并不是纯二进制数,是以ASCII码格式存放的文件,而且其中还有一些编译信息,如地址、校验和等。所以,不能看HEX文件的大小来确定下载到单片机内的真正的程序空间大小,也就是说HEX文件的大小并不是真正下载的单片机的程序大小。而下载到单片机的代码空间大小要看Keilc编译时给出的代码数的提示,才是真正要下载到单片机内的代码空间。举个例子,下图是一个程序编译后的提示,真正的二进制代码是337个字节,而HEX文件却是1KB。这里还有一个误区,你看到的HEX文件的大小是操作系统给出的大小吧,它是取整KB的,就是说HEX文件不足1KB时,也显示是1KB。再明确一点说吧,假如编译后的代码是750418,用纯二进制数(即BIN格式,有些汇编程序的编译器输出的就是BIN格式)的代码保存就是3个字节,而用HEX格式保存就是6个字节,因为要用6个ASCII码来表示。这来算来,HEX文件大小是BIN文件的二倍,加上一些地址信息,是大于二倍的。好,回到你的问题来,你的HEX文件是19KB,你看一下编译后的代码大小提示,肯定是不会超过8KB的,否则编译时肯定会报错的。
MCS-51单片机在物理结构上有四个存储空间:
1、片内程序存储器
2、片外程序存储器
3、片内数据存储器
4、片外数据存储器
但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:
1、片内外统一编址的64K的程序存储器地址空间(MOVC)
2、256B的片内数据存储器的地址空间(MOV)
3、以及64K片外数据存储器的地址空间(MOVX)
扩展资料:MCS-51系列单片机程序存储器分为系统使用区和用户使用区。其中0000H~002AH为系统使用区,其余为用户使用区。系统使用区固定6个地址为特定程序的入口地址,如下:
ROM地址 功能分配
0000H 系统复位后的入口
0003H 外部中断0服务入口
000BH 定时器/计数器0中断服务程序入口
0013H 外部中断1服务程序入口
001BH 定时器/计数器1中断服务程序入口
0023H 串口中断服务程序入口
数据存储区也称为随机存取存储器(RAM),MCS-51单片机的数据存储器分为两个地址空间:内部数据存储器、外部数据存储器。
内部数据存储器共有256B存储空间,但只有低128B(地址为00H~7FH)是真正的数据存储空间,可供用户进行读或写操作,高128B(地址为80H~FFH)是单片机的特殊功能寄存器区(SFR)。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)