《单片机实践应与技术》第10章.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文档。上传文档
查看更多
《单片机实践应与技术》第10章

第10章 Cx51语言扩展 为了利用8051的许多特性,Cx51编译器在C语言的范围内加了许多新的关键字,对ANSI标准C的进行了扩展,以支持8051结构。可以用编译控制命令NOEXTEND取消这些扩展。新增关键字如表10-1所示: 10.1 存储区类型 10.2 基本数据类型 基本数据类型 10.3 变量的定义方式 在C51中,定义变量时,除需声明数据类型外,还需声明变量的存储类型;数据类型说明数据需要多大空间,(1B,2B,3B)存储类型说明数据保存在什么位置,用什么方式进行存取,其格式如下: [数据类型][存储类型]变量名; 例如:char data var1; char code text[] = ENTER PARAMETER:; unsigned long xdata array[100]; float idata x,y,z; unsigned int pdata dimension; unsigned char xdata vector[10][4][4]; char bdata flags; 10.3.2.暗含的变量声明 SMALL模式:在本模式中,所有变量缺省的情况下位于8051系统的内部数据区,这和用data存储类型标识符明确声明的一样,在本模式中变量访问非常有效,然而其长度只有128个字节。 COMPACT模式:本模式所有变量缺省的都放在外部数据区的一页中,这就象用pdata声明的一样,可提供最多256字节的变量,它通过寄存器R0和R1间接寻址,不如SMALL模式有效,比LARGE模式快。 LARGE模式:本模式所有变量缺省的放在外部数据存储区,可到64K字节,这和用xdata存储类型标识符明确声明的一样,比SMALL或COMPACT模式产生更多的代码,且访问速度慢。 10.4 BIT数据类型、可位寻址变量 为了方便控制、提高效率,Cx51编译器提供一个bit数据类型,用一个bit变量和别的C 数据类型的声明相似。 例如:static bit done_flag = 0; /* bit 变量 */ bit testfunc (bit bb){ /* bit 函数 */ bit flag1=0, bit flag2=1 return (flag1); } 10.5 特殊功能寄存器(sfr) 8051系列微处理器提供一个特别的存储区,作为特殊功能寄存器(sfr),可控制定时器、计数器、串口、并口和外围设备,SFR的地址从0x80到0xFF,可以以位字节和字访问。 10.5.1 sfr sfr和别的C变量一样声明,唯一的不同点是数据类型是sfr而不是char或int。 例如:sfr P0 = 0x80; /* P0口,地址80h */ sfr P1 = 0x90; /* P1口,地址90h */ sfr P2 = 0xA0; /* P2口,地址0A0h */ sfr P3 = 0xB0; /* P3口,地址0B0h */ 在等号‘=’后指定的地址必须是一个常数值,不允许是带操作数的表达式 10.5.2 sfr16 许多新的8051派生系列用两个连续地址的sfr来指定16位值,例如8052用地址0xCC和0xCD表示计时器/计数器2的低和高字节,Cx51编译器提供sfr16数据类型访问2个sfr作为一个16字节SFR。 访问一个16位SFR只能低字节跟着高字节,低字节用做sfr16声明的地址。 例如:sfr16 T2 = 0xCC; /* Timer 2:T2L--0cch,T2H--0CDh */ sfr16 RCAP2 = 0xCA; /* RCAP2L--0Cah,RCAP2H--0CBh */ 在这个例子中T2 和RCAP2 被声明为16 位sfr。 10.6 绝对变量定位 10.6.1 _at_方式 下面的例子示范如何用_at_定位几个不同的变量类型: char data buf1 _at_ 0x70; char xdata text[256] _at_ 0xE000; int xdata i1 _at_ 0x8000; 10.6.2 宏方式 1.CBYTE宏允许访问8051程序存储区的每个字节。 例如:rval = CBYTE[0x0002]; 读程序存储区地址0002h 字节的内容 2.CWORD宏允许访问8051程序存储区的每个字(2个字节)。 例如:rval = CWORD[0x0002]; 读程序存储区地址0

文档评论(0)

word.ppt文档 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档