打印

KEIL中关于DBYTE

[复制链接]
5299|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ycz9999|  楼主 | 2010-10-28 01:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是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 ++;     
  }
}
想请教下,这个程序的大概意思是什么?以及帮我解答下程序中的两个问题(已经注释出来了)

相关帖子

沙发
ayb_ice| | 2010-10-28 08:37 | 只看该作者
1: 绝对定位
2: 就是个简单的计算,编译器帮助你自动完成了,主要是直观,明了,自己可以不用做的事情没有必要必须去做
...

使用特权

评论回复
板凳
entepino| | 2010-10-28 21:54 | 只看该作者
帮顶一下,我也想知道,谁能再说的详细一些。

使用特权

评论回复
地板
ycz9999|  楼主 | 2010-10-29 05:27 | 只看该作者
恩  同意楼上的

使用特权

评论回复
5
john_light| | 2010-10-29 09:44 | 只看该作者
本帖最后由 john_light 于 2010-10-29 10:12 编辑

在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四种存储区访问方式。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

857

帖子

1

粉丝