在keil c51工程中 #include <absacc.h> ,可以直接使用cbytetons, 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 da复根ta *) 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做强制类型转换
code data pdata xdata均为存储器类型
code:用于存储常数和函数,使用16位地址访问,可位于片内或片外romdata:用于存储变量,使用8位地址,位于片内rampdata:用于存储变量,使用8位地址,位于片外ramxdata:用于存储变量,使用16位地址,位于片外ram3.cbyte、dbyte、pbyte和xbyte的区别
注意:以下存储地址范围均指理论上可访问的最大范围,具体操作时需根据存储器大小调整
从存储器类型的区别中可以得出本节四者的区别:
cbyte
cbyte 是用于访问代码存储器的,即r高一物理必修二复习om部分。
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字节。
上节所述四者为单字节访问,对应双字节访问使用cword、dword、xword和pword。
/d/file/titlepic/p
本文发布于:2023-04-04 15:30:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/44457d26f59399dfed805b5c54405578.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:使用C语言访问51单片机中存储器的核心代码.doc
本文 PDF 下载地址:使用C语言访问51单片机中存储器的核心代码.pdf
留言与评论(共有 0 条评论) |