单片机应用技术 教学课件 作者 廖世海 吴政江 第9章 C语言程序设计.PPTVIP

单片机应用技术 教学课件 作者 廖世海 吴政江 第9章 C语言程序设计.PPT

  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文档。上传文档
查看更多
第9章 C语言程序设计 第9章 C语言程序设计 9.1 C51程序的结构特点 9.2 C51的数据类型及存储类型  9.3 C51的基本运算  9.4 C51的构造数据类型 9.5 C51的流程控制语句 9.6 C51的函数 9.7 C51的中断服务函数与寄存器组选择 9.8 C51程序设计举例 9.9 基本技能训练——计数器的C51程序设计与制作 9.1 C51程序的结构特点 1. C语言与汇编语言的比较 单片机的C51编程与汇编语言编程相比,具有以下优点: 1)对单片机的指令系统不要求有任何的了解,就可以用C语言直接编程操作单片机。 2)寄存器分配、不同存储器的寻址及数据类型等细节完全由编译器自动管理。 3)程序有规范的结构,可分成不同的函数,可使程序结构化。 4)库中包含许多标准子程序,具有较强的数据处理能力,使用方便。 5)具有方便的模块化编程技术,使已编好的程序很容易移植。 2. C51程序的结构 先看一个简单的例子。设单片机AT89C51的P1.0口接有一个发光二极管,如图9-1所示。试用C51编程使该发光二极管发光。 #includereg51.h //51系列单片机头文件 sbit led1=P1^0; //声明单片机P1口的第一位 void main() //主函数 { led1=0; /*点亮接在P1.0引脚上的发光二极管LED*/ while(1); /*动态停机,相当于汇编语言中的指令SJMP $ */ } 通过这个例子,可看出C51程序结构具有以下特点。 1)C语言程序是由函数构成的。 2)一个函数由两部份组成。 ①函数首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型等。一个函数名后面必须跟一对圆括号,即便没有任何参数也是如此。 ②函数体,即函数首部下面的大括号“{}”内的部分。如果一个函数内有多个大括号,则最外层的一对大括号“{}”为函数体的范围。函数体一般包括: a. 声明部分:在这部分中定义所用到的变量,如“sbit led1=P1^0;”。 b. 执行部分:由若干个语句组成。 9.2.3 C51对单片机主要资源的定义 下面举个头文件引用实例。 #includereg51.h //使用的单片机为AT89C51 main() { TL0=0xb0; //访问定时器0,设置时间常数 TH0=0x3c; TR0=1; //启动定时器0 ┅ } 3.扩展I/O端口或片外RAM的直接访问 扩展的片外RAM或I/O端口需要用户自己先定义后才能在语句或函数中使用。现举例如下。 #includeabsacc.h //包含头文件absacc.h,其内部将XBYTE定义为一个指针,指向外部数据存储//器RAM的零地址单元 #define PA XBYTE[0xffec] //将PA定义为外部I/O口,地址为0xffec main() { PA=0x3a; //将数据3AH写入地址为0xffec的存储单元或I/O端口 } 4.定义和使用位变量 C51使用关键字“bit”来定义位变量。这类变量的值是一个二进制位,其定义和使用方法如下。 格式:bit 变量名称; 功能:将变量名称定义为位型变量。 例:bit lock; //将lock定义为位变量 bit dirention; //将dirention定义为位变量 函数既可以有bit类型的参数,也可以有bit类型的返回值。例如: bit func(bit b0,bit b1) { bit a; ┅ return(a); } 在使用位变量时要注意以下几点。 1)使用禁止中断宏命令#progma disable或指定明确的寄存器切换(using n)的函数不能返回位变量值。 2)定义和使用位变量有以下限制: ①不能定义位变量的指针,如:bit *bitno; ②不能定义位数组,如:bit bitarray[10]; ③位变量的存储类型只能是bdata。 3)在程序设计时,对于可位寻址的对象,即既可以字节寻址又可以位寻址的变量,其存储类型只能是bdata。 使用时,要先说明字节变量的数据类型和存储类型。例如: int bdata a; //整型变量a定位在片内数据存储区中的可位寻址区 char bdata b[4]; //字符型数组b定位在片内数据存储区中的可位寻址区 然后,再使用sbit关键字定义其中可独立寻址的位变量。例如: sbit a0=a^0; //定义a0为a的第0位 sbit a12=a^1; //定义a12为a的第1位 sbit

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档