- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.2 C51对C语言的扩展 4.2.1 特殊功能寄存器的定义4.2.2 数据类型4.2.3 数据存储空间的定义4.2.4 绝对地址访问 4.2.5 函数的使用4.2.6 C51指针4.2.7 库函数4.2.8 关键字 4.2.1 特殊功能寄存器的定义 在51系列单片机中,除了程序计数器(PC)和4组工作寄存器组外,一般在片内RAM区的高128字节中还有一些特殊功能寄存器(SFR),地址范围为0x80H~0xFFH。有些特殊的51系列单片机如PHILIPS 80C51MX,还提供一个附加扩展的SFR空间,地址范围是0x180~0x1FF。 4.2.2 数据类型 1)不能声明一个bit类型的数组。2)不能声明一个位指针。3)禁止中断的函数(#pragma disable)和用明确的寄存器组(using n)声明的函数不能返回一个位型值。 4.2.3 数据存储空间的定义 1.变量的存储类型2.编译器的存储模式选择 1.变量的存储类型 表4-1 数据存储类型与存储空间对应关系 表4-1 数据存储类型与存储空间对应关系 2.编译器的存储模式选择 如果在变量声明中省略了存储类型,编译器会自动选择默认或暗含的存储类型,默认存储类型与编译器的存储模式设置有关。C51编译器中有SMALL、COMPACT和LARGE 3种存储模式可供选择,可以在C51编译器命令行中用SMALL、COMPACT和LARGE控制命令选项来选择,或在uVision环境的编译选项中选定编译模式。 4.2.4 绝对地址访问 1.绝对宏2. at关键字3.连接定位控制 1.绝对宏 所谓绝对宏是利用C51提供的头文件absacc.h中定义的宏来访问绝对地址。absacc.h中定义的宏包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD,绝对宏的使用可以通过以下几个例子来理解。 2. at关键字 使用“at”关键字可以实现绝对地址访问,具体的格式如下所示: [变量类型][存储类型]变量名at地址常数; 若要指定text数组从片外数据存储器0xE000单元开始存放,可以这样来定义 char xdata text[25]at0xE000; 3.连接定位控制 这种绝对地址方法是利用连接控制指令中code xdata pdata data bdata,对“段”地址进行控制,如要指定某具体变量地址,则有很大的局限性,因此不作详细讨论。 4.2.5 函数的使用 1.函数声明2.中断函数3.重入函数 1.函数声明 C51中对标准C语言的函数声明作了如下扩展: 1)可以指定一个函数为中断处理函数。 2)可以选择函数中所使用的寄存器组。 3)可以选择函数中变量的默认存储模式。 4)可以指定函数为重入函数。 2.中断函数 表4-2 51系列单片机的标准中断和入口地址 表4-3 C51支持的中断函数号和中断入口地址 3.重入函数 C51与标准C语言的区别还体现在对重入函数的处理上。所谓重入函数是指一个可以被多个任务调用的函数,在调用该函数的过程中又可以间接或直接地调用其本身。函数的重入又被称为递归调用。 4.2.6 C51指针 1.通用指针2.指定存储器指针3.指定存储器指针与通用指针比较 1.通用指针 C51中的通用指针占用3个字节的存储空间,分别存储指针变量的存储类型、高位偏移量、低位偏移量。通用指针的声明和使用均与标准C语言相同,另外还可以说明指针变量的存储类型。 2.指定存储器指针 由于通用型指针变量本身要占用固定3个字节的存储空间,这对资源有限的单片机来说是一种负担。因此,C51还支持占用空间更小的指针变量,即指定存储器指针。 指定存储器指针实际上是在指针变量声明时,同时指明指针指向数据的存储类型。 3.指定存储器指针与通用指针比较 表4-4 指定存储器指针与通用指针对照表 4.2.7 库函数 表4-5 C51编译库列表 4.2.7 库函数 表4-6 C51库函数包含的ANSI标准库函数 4.2.7 库函数 表4-7 C51库函数中不包含的 4.2.7 库函数 表4-8 C51库函数中包括在ANSI标准库 4.2.8 关键字 表4-9 C51的扩展关键字及其作用 4.3 C51使用技巧 4.3.1 C51与汇编程序接口4.3.2 C51程序的优化 4.3.1 C51与汇编程序接口 1.模块内接口2.模块间接口 1.模块内接口 这种方法的实质是通过asm与endasm告诉C51编译器中间行不用编译为汇编,并将这些汇编语句行直接存入编译后的汇编文件中。例如在“星星闪烁”程序中,为了得到精确的延时,可以用汇编程序来实现 2.模块间接口 表4-10 C51中函数名的转换规则 表4-11 各种存储模式下函数相关段名
文档评论(0)