- 1、本文档共57页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机 第四章研讨
第4章 C51单片机程序设计基础 (3) 函数参数。被调用函数的返回值作为另一个函数的实际参数。 2. 自定义函数的声明:调用函数前要对被调用的函数进行说明。标准库函数只要用#include?引入已写好的头文件,程序中就能直接调用函数。如果调用自定义的函数则要编写函数。 在C51中,函数原型一般形式如下: [extern] 函数类型 函数名(形式参数表); 函数的声明是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便调用函数时系统进行对照检查。函数的声明后面要加分号。 第4章 C51单片机程序设计基础 4.6.3中断函数 中断函数指中断服务函数,只有在中断源请求响应中断时才会被执行,它在处理突发事件和实时控制十分有效。为了捕获中断事件,通常有三种方法:一是用循环语句不断的对中断源进行查询,二是用定时中断在间隔时间内扫描中断源,三是用外部中断服务函数对中断进行捕获。在程序编写中一般采用第三种方式捕获中断,调用中断服务程序。 中断服务函数的形式: 函数类型?? ?函数名 ?(形式参数) ?interrupt ?n 使用中断服务函数时应注意:中断函数不能直接调用中断函数,不能通过形参传递参数;在中断函数中调用其它函数,两者所使用的寄存器组应相同;中断函数没有返回值,且最好写在文件的尾部,并且禁止使用extern存储类型说明。 第4章 C51单片机程序设计基础 4.6.4 函数的嵌套与递归 函数的嵌套指在一个函数中调用另一个函数。C51编译器通常依靠堆栈来进行参数传递,堆栈设在片内RAM中,而片内RAM的空间有限,因而嵌套的深度比较有限,一般在几层以内。如果层数过多,就会导致堆栈空间不够而出错。 递归调用是嵌套调用的一个特殊情况。如果在调用一个函数过程中又直接或间接调用该函数本身,则称为函数的递归调用。在函数的递归调用中要避免出现无终止的自身调用,应通过条件控制结束递归调用,使得递归的次数有限。 4.6.5 C51结构、联合和枚举 1.C51结构 (1) 结构 第4章 C51单片机程序设计基础 结构是一种数据的集合体,它能按需要将不一同类型的变量组合在一起,整个集合体用一个结构变量名表示,组成这个集合体的各个变量称为结构成员。 一般定义结构格式:struct ?结构名 ?{结构元素表}; (2) 结构变量 定义结构类型后能按结构类型的格式定义结构变量,只有结构变量才能参与程序执行,结构类型只是用于说明结构变量属于那种结构。 一般定义结构变量的格式: struct ?结构名 ?结构变量名 1,结构变量名2……结构变量N; 第4章 C51单片机程序设计基础 (3) 结构元素 使用结构变量是通过对它的结构元素的引用来实现。结构中数据元素引用的方法是使用存取结构元素成员运算符“.” 来连接结构名和元素名. 其格式如下:结构变量名.结构元素 (4) 结构类型 struct {结构元素表} ?结构变量名1,结构变量2……结构变量名N; struct ?结构名 {结构元素表} ?结构变量名1,结构变量名2……结构变量名N; 第4章 C51单片机程序设计基础 2.枚举 枚举数据类型是把某些整型常量的集合用一个名字表示,其中整型常量只是这个枚举类型变量可取的合法值。枚举类型有两种定义格式: enum ?枚举名 ?{枚举值列表} ?变量列表; enum ?枚举名 ?{枚举值列表}; emum ?枚举名 ?变量列表; 3.联合 联合也是C51语言构造类型的数据结构。它和结构类型一样能包含不同类型的数据元素,不同之处在于联合的数据元素都是从同一个数据地址开始存放。结构变量占用的内存大小是该结构中数据元素所占内存数的总和,而联合变量所占用内存大小只是该联合中最长的元素所占用的内存大小。使用联合变量时要注意它的数据元素只能是分时使用,而不能同时使用。 第4章 C51单片机程序设计基础 格式为:sbit 位变量名=位地址常数 把位的绝对地址赋给位变量,sbit的位地址必须位于80H-FFH之间 sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; /* 实际定义的是特殊功能寄存器PSW的第3位*/ sbit ET0=0xa9; /* 实际定义的是特殊功能寄存器IE的第1位*/ ②用特殊功能寄存器名带位号定义位变量 格式为:sbit 位变量名= 特殊功能寄存器^位号常数 第4章 C51单片机程序设计基础 例如:sfr P1 = 0x90; sbit P1_1 = P1 ^ 1; /*先定义一个特殊功能寄存器
文档评论(0)