2025年uchar unsigned char是什么意思(define uchar unsigned char 是什么意思)

uchar unsigned char是什么意思(define uchar unsigned char 是什么意思)一 使用 C51 运行库中预定义宏 C51 编译器提供了一组宏定义来对 51 系列单片机的 code data pdata 和 xdata 空间进行绝对寻址 规定只能以无符号数方式访问 定义了 8 个宏定义 其函数原型如下 nbsp nbsp nbsp define nbsp CBYTE unsigned char volatile 0x50000L amp

大家好,我是讯享网,很高兴认识大家。



一.使用C51运行库中预定义宏

C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下:

   #define  CBYTE((unsigned char volatile)0x50000L)

   #define  DBYTE((unsigned char volatile)0x40000L)

   #define  PBYTE((unsigned char volatile)0x30000L)

   #define  XBYTE((unsigned char volatile)0x20000L)

   #define  CWORD((unsigned int volatile)0x50000L)

   #define  DWORD((unsigned int volatile)0x40000L)

   #define  PWORD((unsigned int volatile)0x30000L)

   #define  XWORD((unsigned int volatile)0x20000L)

这些函数原型放在absacc.h文件中。使用时须用预处理命令把该头文件包含到文件中,形式为:#include  <absacc.h>。

其中:CBYTE以字节形式对code区寻址,DBYTE以字节形式对data区寻址,PBYTE以字节形式对pdata区寻址,XBYTE以字节形式对xdata区寻址,CWORD以字形式对code区寻址,DWORD以字形式对data区寻址,PWORD以字形式对pdata区寻址,XWORD以字形式对xdata区寻址。

【例】绝对地址对存储单元的访问

#include  <absacc.h>    /将绝对地址头文件包含在文件中/

#include  <reg52.h>       /将寄存器头文件包含在文件中/

#define  uchar  unsigned  char     /定义符号uchar为数据类型符unsigned char/

#define  uint  unsigned  int       /定义符号uint为数据类型符unsigned int/

void  main(void)

{   uchar  var1;

   uint  var2;

var1=XBYTE[0x0005];       /XBYTE[0x0005]访问片外RAM的0005字节单元/

var2=XWORD[0x0002];     /XWORD[0x0002]访问片外RAM的0002字单元/

……

while(1);

}    

在上面程序中,其中XBYTE[0x0005]就是以绝对地址方式访问的片外RAM 0005字节单元;XWORD[0x0002]就是以绝对地址方式访问的片外RAM 0002字单元。

二.通过指针访问

采用指针的方法,可以实现在C51程序中对任意指定的存储器单元进行访问。

【例】  通过指针实现绝对地址的访问。

#define  uchar  unsigned char       /定义符号uchar为数据类型符unsigned char/


讯享网

#define  uint  unsigned int             /定义符号uint为数据类型符unsigned int/

void  func(void)

{

uchar  data  var1;

uchar  pdata  *dp1;       /定义一个指向pdata区的指针dp1/

uint     xdata  *dp2;       /定义一个指向xdata区的指针dp2/

uchar  data    *dp3;       /定义一个指向data区的指针dp3/

dp1=0x30;           /dp1指针赋值,指向pdata区的30H单元/

dp2=0x1000;       /dp2指针赋值,指向xdata区的1000H单元/

*dp1=0xff;           /将数据0xff送到片外RAM30H单元/

*dp2=0x1234;     /将数据0x1234送到片外RAM1000H单元/

dp3=&var1;        /dp3指针指向data区的var1变量/

*dp3=0x20;         /给变量var1赋值0x20/

}

三.使用C51扩展关键字at

使用_at_对指定的存储器空间的绝对地址进行访问,一般格式如下:

[存储器类型]  数据类型说明符  变量名  at  地址常数;

其中,存储器类型为data、bdata、idata、pdata等C51能识别的数据类型,如省略则按存储模式规定的默认存储器类型确定变量的存储器区域;数据类型为C51支持的数据类型。地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;使用_at_定义的变量必须为全局变量。

【例】通过_at_实现绝对地址的访问。

#define  uchar  unsigned char       /定义符号uchar为数据类型符unsigned char/

#define  uint  unsigned int            /定义符号uint为数据类型符unsigned int/

void  main(void)

{

data  uchar  x1  at  0x40;         /在data区中定义字节变量x1,它的地址为40H/

xdata  uint  x2  at  0x2000;        /在xdata区中定义字变量x2,它的地址为2000H/

x1=0xff;

x2=0x1234;

……

while(1);

}

小讯
上一篇 2025-04-23 09:51
下一篇 2025-04-26 08:23

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/207514.html