- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机原理及应用教学课件徐敏第4章语言基础与51程序设计
【例4.1】 变量和函数的存储模式定义程序如下: #pragma small? /*默认存储器类型为MCS-51片内直接寻址RAM*/ char data i, j, k; /*在MCS-51片内直接寻址RAM中定义了3个变量*/ char i, j, k; /*未指明存储模式,由#pragma small决定,与前一句完全等价*/ int xdata m, n;? /*在MCS-51片外RAM中定义了2个自动变量*/ static char m, n; /*在MCS-51片内直接寻址RAM中定义了2个静态变量*/ unsigned char xdata ram[128]; int func1(int i, int j) large /*指定LARGE模式*/ {?? return(i+j); } int func2(int i, int j) /*未指明存储模式, 按默认的SMALL模式*/ {?? return(i-j); } 不同的存储器类型访问速度是不一样的,如: unsigned char data var1; /*SMALL模式,var1被定位在data区*/ ??????????????? /*即MCS-51片内直接寻址RAM*/ unsigned char pdata var1; /*COMPACT模式,var1被定位在pdata区*/ ???????????????? /*即MCS-51片外按页面间接寻址RAM*/ unsigned char xdata var1; /*LARGE模式,var1被定位在xdata区*/ ??????????????? /*即MCS-51片外间接寻址RAM*/ * 4.2.4 绝对地址的访问 1. 使用指针 采用指针的方法,可实现在C51程序中对任意指定的存储器地址进行操作。例如: #define uchar unsigned char #define uint unsigned int void test_memory(void) {uchar idata ivar1; uchar xdata *xdp; ???/*定义一个指向xdata存储器空间的指针*/ char data *dp;?? ??? /*定义一个指向data存储器空间的指针*/ uchar idata *idp;?? ?/*定义一个指向Idata存储器空间的指针*/ xdp=0x1000;????/*xdata指针赋值,指向xdata存储器地址1000H处*/ *xdp=0x5A;??????/*将数据5AH送到xdata的1000H单元*/ dp=0x61;????? ???/*data指针赋值,指向data存储器地址61H处*/ *dp=0x23;??? ????? /*将数据23H送到data的61H单元*/ idp=ivar1;?????? ? /*idp指向idata区变量ivar1*/ *idp=0x16;???? ??? /*等价于ivar1=0x16*/ * 2、使用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区寻址
文档评论(0)