使用C语言访问51单片机中存储器的核心代码
使用c语言访问51单片机中存储器
1.头文件
在keil c51工程中 #include <absacc.h> ,可以直接使用cbyte, xbyte, dbyte, pbyte
absacc.h 的部分内容如下:
#ifndef __absacc_h__ #define __absacc_h__ #define cbyte ((unsigned char volatile code *) 0) #define dbyte ((unsigned char volatile data *) 0) #if !defined (__cx2__) #define pbyte ((unsigned char volatile pdata *) 0) #endif #define xbyte ((unsigned char volatile xdata *) 0) #define cword ((unsigned int volatile code *) 0) #define dword ((unsigned int volatile data *) 0) #if !defined (__cx2__) #define pword ((unsigned int volatile pdata *) 0) #endif #define xword ((unsigned int volatile xdata *) 0)
code data pdata xdata 均为存储器类型,下节将详叙,此处用t替代:
unsigned char volatile t * 为指向存储器t中无符号整型数的指针类型
((unsigned char volatile t * ) 0) 对0做强制类型转换
2.code data pdata xdata
code data pdata xdata均为存储器类型
- code:用于存储常数和函数,使用16位地址访问,可位于片内或片外
- romdata:用于存储变量,使用8位地址,位于片内ramp
- data:用于存储变量,使用8位地址,位于片外ramx
- data:用于存储变量,使用16位地址,位于片外ram
3.cbyte、dbyte、pbyte和xbyte的区别
注意:以下存储地址范围均指理论上可访问的最大范围,具体操作时需根据存储器大小调整
从存储器类型的区别中可以得出本节四者的区别:
cbyte
cbyte 是用于访问代码存储器的,即rom部分。
rval = cbyte[adress]; //访问到代码存储器中的内容
其中代码存储器地址(adress)范围是 0x0000--0xffff ,大小为16k。
dbyte
dbyte 是用于访问片内数据存储器的,即片内ram部分,
dbyte[adress] = 0xfb; //写数据 rval = dbyte[adress]; //读数据
其中片内存储器地址(adress)范围是 0x00--0xff ,大小为256byte。
xbyte
xbyte 是用于访问片外数据存储器的,即片外ram部分,但是xbyte只能读数据不能写数据到片外ram。
rval =xbyte[adress]; //读数据
片外数据存储器的写可以使用下面这条语句:
char xdata x1 _at_ 0x30 ; //x1为char型全局变量,地址位于xdata区地址0x30 x1 = 0x01; //给片外存储器地址赋值
地址范围为 0x0000--0xffff,大小为16k。
pbyte
pbyte也用来访问扩展ram,但只能访问开始的256字节。
4.cword、xword、dword和pword
上节所述四者为单字节访问,对应双字节访问使用cword、dword、xword和pword。
5.参考
https://wenku.baidu.com/view/fe5a4b09f61fb7360a4c659c.html
到此这篇关于使用c语言访问51单片机中存储器的文章就介绍到这了,更多相关c语言51单片机存储器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: Android实现小米相机底部滑动指示器
下一篇: 宋太祖赵匡胤一生最宠爱的妃子是谁?