单片机第4章_单片机的C51编程语言.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.位运算符 C51语言能进行按位操作,从而使C51语言也具有一定的对硬件直接进行操作的能力。位运算符的作用是按位对变量进行运算,但并不改变参与运算的变量的值。如果要求按位改变变量的值,则要利用相应的赋值运算。位运算符不能用来对浮点型数据进行操作。位运算一般的表达形式如下: 变量1 位运算符 变量2 C51中共有6种位运算符: 按位与 | 按位或 ^ 按位异或 ~ 按位取反 左移 右移 * * 变量的存储器类型 [存储种类] 数据类型 [存储器类型] 变量名表 定义变量时,根据51单片机存储器的特点,必须指明该变量所处的单片机的内存空间。 C5l编译器支持MCS-51单片机的硬件结构,可完全访问MCS-51硬件系统的所有部分。编译器通过将变量或者常量定义成不同的存储类型(data,bdata,idata,pdata,xdata,code)的方法,将它们定位在不同的存储区中。 * * 表4-5 存储类型与存储空间的对应关系 存储类型 与存储空间的对应关系 DATA 直接寻址片内数据存储区,访问速度快(128字节) BDATA 可位寻址片内数据存储区,允许位与字节混合访问(16字节) IDATA 间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节) PDATA 分页寻址片外数据存储区(256字节),由MOVX @R0访问 XDATA 片外数据存储区(64KB),由MOVX @DPTR访问 CODE 代码存储区(64KB),由MOVC @DPTR访问 * * 1.DATA区 当使用存储类型data,bdata定义变量时,C5l编译器会将它们定位在片内数据存储区中(片内RAM)。这个存储区的长度为128字节。能快速存取各种数据。片内数据存储区是存放临时性传递变量或使用频率较高的变量的理想场所,所以应该把使用频率高的变量放在DATA区,由于空间有限,必须注意使用DATA区,DATA区除了包含程序变量外,还包含了堆栈和寄存器组DATA区。下面是在DATA区中声明变量的例子。 unsigned char data system_status=0; unsigned int data unit_id[2]; char data inp_string[16]; float data outp_value; mytype data new_var; 在SMALL存储模式下,未说明存储器类型时,变量默认被定位在DATA区。 * * 2.BDATA区 当在DATA区的位寻址BDATA区定义变量,这个变量就可进行位寻址,并且声明位变量。例如: char bdata var8bit; //在位寻址区,定义字符型的变量 声明的变量var8bit可以进行位操作运算,可以用sbit在bdata定义变量的基础上声明新的变量,例如: sbit my_bit2 = var8bit^2; // 位变量my_bit2位于变量var8bit的第2位; 下面是一些在BDATA区中声明变量和使用位变量的例子。 unsigned char bdata status_byte; 编译器不允许在BDATA区中定义float和double类型的变量。 * * 3.IDATA区 IDATA区也可以存放使用比较频繁的变量,使用寄存器作为指针进行寻址。在寄存器中设置8位地址进行间接寻址,与外部存储器寻址比较,它的指令执行周期和代码长度都比较短。对于AT89C52单片机中定义的IDATA变量,如果低128B的RAM容量不够时,C51编译器会自动安排到高128B的区域。下面是一些在IDATA区中声明变量的例子。 unsigned char idata system_status=0; unsigned int idata unit_id[2]; char idata inp_string[16]; float idata outp_value; * * 4.PDATA和XDATA区 PDATA和XDATA用于单片机的片外RAM区,在这两个区声明变量和在其他区的语法是一样的,PDATA区只有256B,而XDATA区可达65536B,举例如下。 unsigned char xdata system_status=0; unsigned int pdata unit_id[2]; char xdata inp_string[16]; float pdata outp_value; 对PDATA和XDATA的操作是相似的,对PDATA和XDATA的寻址要使用MOVX指令,需要2个处理周期。对PDATA区寻址需要装入8位地址,使用Ri的间接寻址方式;而对XDATA区寻址则需要装入16位地址,使用DPTR的间接寻址方式; * * 5.COD

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档