2.MCS-51单片机C语言程序设计.pptVIP

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

MCS-51单片机

C语言程序设计 在编程方面,使用C51较汇编语言有诸多优势: 1)编程容易 2)容易实现复杂的数值计算 3)容易阅读与交流 4)容易调试与维护程序 5)容易实现模块化开发 6)程序可移植性好C语言与ANSI的区别 用汇编语言编写单片机程序时,必须要考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用。 用C51编写程序,虽然不像汇编语言那样需要具体地组织、分配存储器资源,但是C51对数据类型和变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。C语言与ANSI的区别 用C51编写单片机程序,与用ANSIC编写程序的不同之处是,需要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。 其它的语法规定、程序结构及程序设计方法,都与ANSIC相同。注意:通常情况下,应尽可能采用无符号格式unsigned。使用有符号格式signed时,编译器要进行符号位检测并需要调用库函数,生成程序代码长,程序运行速度慢。默认值为有符号格式。C编译器在编译时自动进行类型转换。位变量必须定位在MCS-51单片机片内RAM的位寻址空间中,但应注意区别bit与sbit的不同用法:bit用于定义位变量的名字,编译器会对其分配地址。位变量分配在内部RAM的位寻址区,位地址范围为00H~7FH。sbit用于定义位变量的名字和地址,地址是确定的且不用编译器分配。定义范围为整个位寻址空间。2.2C51数据的存储器类型注意:访问片内RAM比访问片外RAM的速度快的多,所以经常使用的变量应置于片内RAM中。2.3MCS-51硬件结构的C51定义16位特殊功能寄存器的定义 定义的一般格式为: sfr16 特殊功能寄存器名=地址常数 地址常数范围:0x80~0xff。 例如(见reg51.h、reg52.h等文件): sfr16DPTR=0x82; sfr16T2=0xcc; //含TL2和TH2 几点说明: 1)定义特殊功能寄存器中的地址必须在0x80~0xff范围内。 2)定义特殊功能寄存器,必须放在函数外面作为全局变量。 3)用sfr或sfr16每次只能定义一个特殊功能寄存器。 4)像sbit一样,用sfr或sfr16定义的是绝对定位的变量(因为名字是与确定地址对应的),具有特定的意义,在应用时不能像一般变量那样随便使用。 几点说明: 1)用sbit定义的位变量,必须能够按位操作,而不能够对无位操作功能的位定义位变量。 2)用sbit定义位变量,必须放在函数外面作为全局位变量,而不能在函数内部定义。 3)用sbit每次只能定义一个位变量。 4)对其它模块定义的位变量(bit型或sbit型)的引用声明,都使用bit。 5)用sbit定义的是一种绝对定位的位变量(因为名字是与确定位地址对应的),具有特定的意义,在应用时不能像bit型位变量那样随便使用。2.4C51的运算符和表达式3.1C51选择语句 注意:(1)要区分指针变量指向的空间区域和指针变量本身所存储的区域;(2)定义时,前者不能缺省,而后者可以缺省;(3)指针变量的长度:指向不同的区域,占用的字节数不同。 说明:指针变量本身所存储的区域,在定义指针时一般都省略了,指针变量本身保存在缺省存储的区域中。 例:编写程序,将单片机片外数据存储器中地址从0x1000开始20个字节数据,传送到片内数据存储器地址从0x30开始的区域。 程序段如下: unsignedchardata i,*dcpt; unsignedcharxdata *xcpt; dcpt=0x30; //给指针赋地址 xcpt=0x1000; for(i=0;i20;i++) *(dcpt+i)=*(xcpt+i); 各属性含义如下: 函数模式:也就是编译模式、存储模式,可以为small、compact和large。缺省时则使用文件的编译模式。 reentrant:表示重入函数。所谓可重入函数,就是允许被递归调用的函数。是C51定义的关键字。 interruptm:中断关键字和中断号。interrupt是C51定义的。C51支持32个中断源 usingn:选择工作寄存器组和组号, n可以为0~3,对应第0组到第3组。关键字using是C51定义的。 如果函数有返回值,不能使用该属性,因为返回值是存于寄存器中,函数返回时要恢复原来的寄存器组,导致返回值错误。C51

文档评论(0)

130****2013 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档