- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十章函数及C51程序设计 10.1 函数的定义 C51函数定义格式: [return_type] function_name([args])[small|compact|large][reentrant] [using m] { 说明部分; 语句1; … 语句n; } return_type:返回数据类型,默认情况为整型类型,如果函数没有返回最好设置为void; small|compact|large:指定该函数采用的编译模式; reentrant:指定该函数为重入函数。当为重入函数时,该函数可被多个进程同时调用执行,并且函数自身也可以递归调用。如果缺省该说明,则函数为不可重入函数。 using m:指明该函数采用哪组工作寄存器组,m=0---3; args:形参列表,函数可以没有形参,可以有多个形参。当函数调用时,主调函数要把实参传递给形参。 函数体:花括号里的说明部分和语句称为函数体,函数的功能由函数体实现。有返回的函数必须有一个或多个return语句,但函数不能有多个出口。花括号里的说明部分和语句也可以没有,此时称为空函数。 例如:求两个整数中的大数 #progrm large int max(int x, int y) small using 1 { int z; z=xy? x :y; return(z); } 10.2 函数的调用 实参的个数、顺序、数据类型必须要和函数定义中的形参一一对应,参数之间用逗号隔开。若没用参数可省略,单括号不能省。函数调用有三种语句: 1.直接用函数调用语句(适用于无返回的函数) 例如: Sys_init(); 2.表达式形式调用 例如: C= max(a, b)+3; 3.作为函数参数调用 例如: d=max(c, max(a, b); 如果调用自定义的函数,应在主调函数的前面(如源文件开头)对被调函数作函数原型声明。否则,C51默认函数返回类型为整型。如果主调函数和被调函数不在同一文件中,应声明为外部引用。声明形式如下: [extern] 类型说明 函数名(形参列表) ; 例如: int max(int x, int y); //在同一文件中声明 extern int max(int x, int y);//不在同一文件中声明为外部引用 C= max(a, b)+3; 1.局部变量和全局变量 在一个函数(即使是主函数)内定义的变量在本函数内有效,在函数外无效,在复合语句内定义的变量在本复合语句内有效,在复合语句外无效,这类变量称为局部变量。因此,不同的函数可以使用相同的局部变量名。 在函数外定义的变量,可为本文件中所有函数共用;它的有效范围从定义变量的位置开始,到本源文件结束。这类变量成为全局变量。 2.动态存储方式和静态存储方式 动态存储方式是指程序运行期间根据需要动态的分配存储空间的方式。 函数中的局部变量在不专门声明为static存储类别时都是动态分配存储空间的,放在动态存储区。此类局部变量为自动变量,用关键字auto作存储类别声明 静态存储方式是指程序运行期间分配固定的存储空间的方式。若希望函数中的局部变量在函数调用后不消失,而保留原值,可用static将其指定成“静态局部变量”。注意: (1) 静态局部变量为静态存储类别,放在静态存储区,在程序的整个运行过程中都不释放;自动变量则属动态存储类别,放在动态存储区,函数调用后即释放 (2) 静态局部变量在编译时,赋且只赋一次值;自动变量则在函数调用时赋初值,每调用一次赋一次值 (3) 若不对静态局部变量赋初值,自动被赋以0或空字符;而动态局部变量则为不定值 (4) 静态局部变量在函数调用后仍然存在,但是其它函数不能引用它 3.用extern声明外部变量 在多个文件的程序中声明外部变量,可以使多个文件共用一个外部变量。方法是在任意一个文件中定义此外部变量,在其他文件中用extern对此变量作“外部变量声明”。 10.4 中断函数 C51中提供了一类用以处理中断的特殊函数,称为中断处理函数。它的格式如下: void function_name( )[{small|compact|large}] interrupt n [using m] 其中: m:为使用的工作寄存器组,m=0-3 n为中断号:当n为0时,表示外部中断0 当n为1时,表示定时器0中断 当n为2时,表示外部中断1 当n为3时,表示定时器1中断 当n为4时,表示串行中断 void Int0_Isr(void) interrupt 0 using 1 { . . . //外部中断函数,使用第一组工作寄存器
您可能关注的文档
最近下载
- 吉林省中药软片炮制规范.pptx VIP
- 名著阅读《湘行散记》七年级语文上册部编版(共9页).docx VIP
- 《白洋淀纪事》阅读测试题含答案(推荐).docx VIP
- 必考名著《白洋淀纪事》导读+知识点汇总.pdf VIP
- CQJZDE-2008 重庆市建筑工程计价定额.docx VIP
- 人教部编版七年级语文上册名著选读《湘行散记》导读.doc VIP
- 重庆市建筑工程计价定额CQJZDE-2008.doc
- 部编版七上语文名著导读《朝花夕拾》、《白洋淀纪事》、《湘行散记》知识点练习(含答案).docx VIP
- 超星尔雅学习通《大学生劳动教育》章节测试含答案.docx VIP
- 七年级上册名著《湘行散记》知识点+习题(共12页).docx VIP
文档评论(0)