查看: 11356|回复: 8

[提问] KEIL中关于DBYTE

[复制链接]
发表于 2010-10-28 01:32:16 | 显示全部楼层 |阅读模式
关键词: DBYTE , Keil
10积分
这是KEIL C中一个绝对地址宏指令DBYTE的讲解:
DBYTE[address]
说明:在8051内部数据存储器里,读取一个字节的内容
自变量:内部数据存储器的地址(0~0xff)
定义:#define DBYTE((unsigned char volatile data *)0)
例子代码:
#include "absacc.h"
void IRamSet (unsigned char value);
void Main(void)
{
   char val = 0
   IRamSet (0xaa);
   val = DBYTE [0x0032];
   DBYTE [0x0032]—0x1b;
}
unsigned char idata address _at_ 0x20;   // 这句定义是什么意思呢?
void IRamSet (unsigned char value)
{
   unsigned char idata *index = &address;
   unsigned char i;
   for (i = 0;i < (0x7f —0x20+0x01);i++)  // 这个循环的限制条件是什么意思呢?
  {
      *index = value;
      index ++;     
  }
}
想请教下,这个程序的大概意思是什么?以及帮我解答下程序中的两个问题(已经注释出来了)

最佳答案

查看完整内容

没看明白。。 看看你包含的头文件和处理器的说明吧。
发表于 2010-10-28 01:32:17 | 显示全部楼层
没看明白。。
看看你包含的头文件和处理器的说明吧。

评分

参与人数 1积分 +4 收起 理由
左左 + 4

查看全部评分

发表于 2010-11-1 22:50:53 | 显示全部楼层
解决了吗?
 楼主| 发表于 2010-11-2 10:02:22 | 显示全部楼层
没有   没人回答呀  正纠结着呢……
发表于 2010-11-2 19:25:07 | 显示全部楼层
长定义地址吧,怎么for里面会有那样的语句啊

评分

参与人数 1积分 +4 收起 理由
左左 + 4

查看全部评分

 楼主| 发表于 2010-11-2 21:28:57 | 显示全部楼层
恩  是呀  我看的时候也不懂  …… 回复5楼suecollege
 楼主| 发表于 2010-11-2 21:30:56 | 显示全部楼层
在Keil C51标准库ABSACC.H中定义了一些宏,利用这些宏我们以绝对地址方式访问51的存储器。这几个宏分别是:
#define CBYTE ((unsigned char volatile code  *) 0)
#define DBYTE ((unsigned char volatile data  *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)

#define CWORD ((unsigned int volatile code  *) 0)
#define DWORD ((unsigned int volatile data  *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)

以DBYTE为例,((unsigned char volatile data  *) 0)定义了一个值为零的指针,该指针指向data内部RAM存储区的一个易变无符号单字节变量。
当我们以DBYTE[0x20]这样类似于数组的方式使用它时,根据C语言中对指针索引的解释方式,它访问的是*(((unsigned char volatile data  *) 0) + 0x20),简化为*(0 + 0x20),即*(0x20),就是data内部RAM存储区0x20地址处的单字节变量。

?WORD宏和?BYTE的区别在于起始地址。以DWORD为例,如果我们访问DWORD[0x20],由于unsigned int在C51中为两字节长,因此DWORD[0x20]其实访问的是data存储区0x40地址开始的两字节无符号整形变量。

code/data/pdata/xdata在C51中分别代表代码区/内部RAM/按页访问的外部RAM/外部RAM四种存储区访问方式。


这是另一个论坛中对我的解答
发表于 2010-12-23 18:06:57 | 显示全部楼层
谢谢分享
发表于 2011-3-26 16:10:50 | 显示全部楼层
没看明白!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表