历史上的今天
今天是:2025年01月26日(星期日)
2019年01月26日 | 51单片机-存储
2019-01-26 来源:eefocus
8051是传统的8位单片机,一般为256B 数据存储器RAM,4k程序存储器ROM (8052有384bytes的RAM,8K的ROM)
在51系列中可定义的数据类型有data,idata,xdata,pdata,bdata:
data:指芯片内核中地址0x00-0x7F的128个字节RAM区域和4个分组的R1-R7寄存器区域,所占用的区域,汇编ACC访问,可以直接读写,速度最快,生成代码小。
idata:固定指前面0x00-0xFF的256个RAM,其中前128字节和data的128字节完全相同,但访问的方式不同。idata是用类似指针方式访问的。
xdata:外部扩展存储,一般指外部0x0000-0xFFFF地址空间,用DPTR访问。一般指单片机的Flash,虽然Flash的结构封装在单片机中,但相对单片机RAM仍属于外部存取器。
pdata:外部扩展RAM的低256个字节,地址A0-A7上的读写。
bdata:
若程序需要8个或者更多的bit变量,如果你想一次性给8个变量赋值的话就不方便,又不可以定义bit数组,可使用bdata定义变量
char bdata MODE;
sbit MODE_7 = MODE^7;
sbit MODE_6 = MODE^6;
sbit MODE_5 = MODE^5;
sbit MODE_4 = MODE^4;
sbit MODE_3 = MODE^3;
sbit MODE_2 = MODE^2;
sbit MODE_1 = MODE^1;
sbit MODE_0 = MODE^0;
8个bit变量分别为MODE_n,注意一定是sbit而不是 bit MODE_0 = MODE^0;赋值语句要是这么写C语言就视为异或运算。
数据使用不同的存储器,程序执行效率不同,编写C51程序指定变量的存储类型有利于提高程序执行效率。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。
下一篇:51DIY音乐频谱显示
史海拾趣
|
想做一个cab安装包,安装今日插件,按照网上的说明写了个安装程序setupdll.dll, 但是在模拟器上(pocket pc se 2003 Emulator)安装发现setupdll没有被调用(在函数Install_Exit中加了MessageBox,没有弹出,注册表也没写) cab安装包使用vs2005做的 ...… 查看全部问答> |
|
如何用WinDbg或Waston Dump Viewer分析WinCE机台上抓取的Dump File问题 基于ARM+WinCE 5.0的机台上有概率性的发生Data Abort,直接采用加入Debug信息逐步缩小范围的方法太费时间,所以在Image中加入了ErrorReporting的功能。 机器发生了Data Abort后,将dump file拷贝出来,就是那个后缀名 ...… 查看全部问答> |
|
dshow CreateMediaType FreeMediaType 无法解析的外部符号 我在wince6.0上做dshow开发,已经包含的头文件和库 #include #include #include #include #include &n ...… 查看全部问答> |
|
我的机器上有两个硬盘 我的boot.ini: [boot loader] timeout=6 default=multi(0)disk(0)rdisk(0)partition(1)\\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\\WINDOWS=\"Microsoft Windows XP Professional\" /noexecut ...… 查看全部问答> |
|
MCS-51单片机中,采用12Mhz时钟,定时器T0采用模式1(16位计数器),请问在下面程序中,p1.0的输出频率 ? MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP… 查看全部问答> |
|
ADS1.2 调用strtoul(str,NULL,0,NULL),地址0的内容会被更改 strtoul的定义: unsigned long strtoul(const char *str, char **endptr, int requestedbase, int *ret) 可见ADS1.2会把NULL指针指向地址0,但是地址0放着复位向量,怎么样才能不改变0地址的内容呢?(当然在调用的时候可以不用NULL,而定义一个 ...… 查看全部问答> |




