《单片机原理及应用》课件02-C51函数.ppt
《《单片机原理及应用》课件02-C51函数.ppt》由会员分享,可在线阅读,更多相关《《单片机原理及应用》课件02-C51函数.ppt(30页珍藏版)》请在文库网上搜索。
1、4.2 C51函数函数 C C 语言程序由函数组成,下面介绍函数的要点语言程序由函数组成,下面介绍函数的要点语言程序由函数组成,下面介绍函数的要点语言程序由函数组成,下面介绍函数的要点一、一、一、一、函数的分类及定义函数的分类及定义函数的分类及定义函数的分类及定义 从用户使用角度划分,函数分为从用户使用角度划分,函数分为从用户使用角度划分,函数分为从用户使用角度划分,函数分为库函数库函数库函数库函数和和和和用户定义函数用户定义函数用户定义函数用户定义函数 库函数库函数库函数库函数是编译系统为用户设计的一系列标准函数是编译系统为用户设计的一系列标准函数是编译系统为用户设计的一系列标准函数是编译系
2、统为用户设计的一系列标准函数 (见见见见本书附录本书附录本书附录本书附录B)B),用户只需调用,而无需自己去编写这些,用户只需调用,而无需自己去编写这些,用户只需调用,而无需自己去编写这些,用户只需调用,而无需自己去编写这些复杂的函数,如前面所用到的头文件复杂的函数,如前面所用到的头文件复杂的函数,如前面所用到的头文件复杂的函数,如前面所用到的头文件reg51.hreg51.h等,有的头等,有的头等,有的头等,有的头文件中包括一系列函数,要使用其中的函数必须先使用文件中包括一系列函数,要使用其中的函数必须先使用文件中包括一系列函数,要使用其中的函数必须先使用文件中包括一系列函数,要使用其中的函
3、数必须先使用#包含语句,然后才能调用。包含语句,然后才能调用。包含语句,然后才能调用。包含语句,然后才能调用。用户自定义函数用户自定义函数用户自定义函数用户自定义函数是用户根据任务编写的函数。是用户根据任务编写的函数。是用户根据任务编写的函数。是用户根据任务编写的函数。.从参从参从参从参数形式上函数分为无参函数和有参函数。数形式上函数分为无参函数和有参函数。数形式上函数分为无参函数和有参函数。数形式上函数分为无参函数和有参函数。l l无参函数无参函数无参函数无参函数:函数中无参数定义。函数中无参数定义。函数中无参数定义。函数中无参数定义。l l有参函数:函数中定义形式参数,在调用时,调用函数用
4、实际参有参函数:函数中定义形式参数,在调用时,调用函数用实际参有参函数:函数中定义形式参数,在调用时,调用函数用实际参有参函数:函数中定义形式参数,在调用时,调用函数用实际参数代替形式参数,调用完返回结果给调用函数。数代替形式参数,调用完返回结果给调用函数。数代替形式参数,调用完返回结果给调用函数。数代替形式参数,调用完返回结果给调用函数。二、函数二、函数二、函数二、函数的定义的定义的定义的定义 l l 无参函数的定义:无参函数的定义:无参函数的定义:无参函数的定义:返回值类型返回值类型返回值类型返回值类型 函数名函数名函数名函数名 ()()函数体语句函数体语句函数体语句函数体语句 如果函数没
5、有返回值,可以将返回值类型设为如果函数没有返回值,可以将返回值类型设为如果函数没有返回值,可以将返回值类型设为如果函数没有返回值,可以将返回值类型设为void void 函数以函数以函数以函数以“”开始,以开始,以开始,以开始,以“”结束,结束,结束,结束,l l 有参函数的定义:有参函数的定义:有参函数的定义:有参函数的定义:返回值类型返回值类型返回值类型返回值类型 函数名函数名函数名函数名 (形式参数表列形式参数表列形式参数表列形式参数表列)形式参数类型说明形式参数类型说明形式参数类型说明形式参数类型说明 函数体语句函数体语句函数体语句函数体语句 return(return(返回形参名返回
6、形参名返回形参名返回形参名)也可以这样定义也可以这样定义也可以这样定义也可以这样定义:返回值类型返回值类型返回值类型返回值类型 函数名函数名函数名函数名 (类型说明形式参数表列类型说明形式参数表列类型说明形式参数表列类型说明形式参数表列)函数体语句函数体语句函数体语句函数体语句 return(return(返回形参名返回形参名返回形参名返回形参名)其中形式参数表列的各项要用其中形式参数表列的各项要用其中形式参数表列的各项要用其中形式参数表列的各项要用 ,隔开,通过隔开,通过隔开,通过隔开,通过returnreturn语句将需返语句将需返语句将需返语句将需返回的值返回给调用函数回的值返回给调用函
7、数回的值返回给调用函数回的值返回给调用函数 。三、三、三、三、函数的调用函数的调用函数的调用函数的调用 l l 函数调用的形式为:函数调用的形式为:函数调用的形式为:函数调用的形式为:函数名函数名函数名函数名 (实际参数表列实际参数表列实际参数表列实际参数表列);对于无参函数当然不存在实际参数表列对于无参函数当然不存在实际参数表列对于无参函数当然不存在实际参数表列对于无参函数当然不存在实际参数表列 实参和形参的数目相等类型一致。实参和形参的数目相等类型一致。实参和形参的数目相等类型一致。实参和形参的数目相等类型一致。函数的调用方式有三种函数的调用方式有三种函数的调用方式有三种函数的调用方式有三
8、种函数调用语句:即把被调函数名作为调用函数的一个语句,如函数调用语句:即把被调函数名作为调用函数的一个语句,如函数调用语句:即把被调函数名作为调用函数的一个语句,如函数调用语句:即把被调函数名作为调用函数的一个语句,如 fun1()fun1();被调函数作为表达式的运算对象被调函数作为表达式的运算对象被调函数作为表达式的运算对象被调函数作为表达式的运算对象 如如如如 rett=2*get(a,b)rett=2*get(a,b);此时拿函数中的此时拿函数中的此时拿函数中的此时拿函数中的 a a,b b 应为实参,其以返回值参予式中的运算。应为实参,其以返回值参予式中的运算。应为实参,其以返回值参
9、予式中的运算。应为实参,其以返回值参予式中的运算。被调函数作为另一个数的实际参数被调函数作为另一个数的实际参数被调函数作为另一个数的实际参数被调函数作为另一个数的实际参数 如如如如 m=max(a,get(a,b)m=max(a,get(a,b);函数函数函数函数 get(a,b)get(a,b)作为作为作为作为max()max()的一个实际参数被调用。的一个实际参数被调用。的一个实际参数被调用。的一个实际参数被调用。四、四、对被调函数的说明对被调函数的说明l l 如果被调函数出现在主调函数之后,在主调函数前应对被调函如果被调函数出现在主调函数之后,在主调函数前应对被调函如果被调函数出现在主调
10、函数之后,在主调函数前应对被调函如果被调函数出现在主调函数之后,在主调函数前应对被调函数作以说明,形式为数作以说明,形式为数作以说明,形式为数作以说明,形式为 返回值类型返回值类型返回值类型返回值类型 被调函数名被调函数名被调函数名被调函数名 (形参表列形参表列形参表列形参表列);如:如:如:如:int fun1(a,b);/*int fun1(a,b);/*函数说明函数说明函数说明函数说明*/main()/*main()/*主函数主函数主函数主函数*/int d,u=3,v=2;int d,u=3,v=2;d=2*fun1(u,v);d=2*fun1(u,v);int fun1(a,b)in
11、t fun1(a,b)int a,b;int a,b;int c;int c;c=a+b;c=a+b;return(c);return(c);上例中被调函数在后、在主调函数前对被调函数进行明上例中被调函数在后、在主调函数前对被调函数进行明上例中被调函数在后、在主调函数前对被调函数进行明上例中被调函数在后、在主调函数前对被调函数进行明l l被调函数出现在主调函数之前,可以不对被调函数说明下面以一被调函数出现在主调函数之前,可以不对被调函数说明下面以一被调函数出现在主调函数之前,可以不对被调函数说明下面以一被调函数出现在主调函数之前,可以不对被调函数说明下面以一个简单例子来说明个简单例子来说明个简
12、单例子来说明个简单例子来说明 int fun1(a,b)int fun1(a,b)int a,b;int a,b;int c;int c;c=a+b;c=a+b;return(c);return(c);main()main()int d,u=3,v=2;int d,u=3,v=2;d=2*fun1(u,v);d=2*fun1(u,v);此例中被调函数在主调函数前,不用说明此例中被调函数在主调函数前,不用说明此例中被调函数在主调函数前,不用说明此例中被调函数在主调函数前,不用说明 五、单片机五、单片机五、单片机五、单片机的的的的 C C 语言编程实例语言编程实例语言编程实例语言编程实例 由于由于
13、由于由于 C51 C51 编译器是针对单片机的,因此编译器是针对单片机的,因此编译器是针对单片机的,因此编译器是针对单片机的,因此 ANSI C ANSI C 中中中中的的的的 scanf scanf 和和和和 printf printf 等对等对等对等对PCPC机的输入输出语句无效机的输入输出语句无效机的输入输出语句无效机的输入输出语句无效,运算运算运算运算的数据可以通过变量置入或取出,的数据可以通过变量置入或取出,的数据可以通过变量置入或取出,的数据可以通过变量置入或取出,C51 C51 会自动安排使用的存贮单元。也可以用户自行通过具体的内会自动安排使用的存贮单元。也可以用户自行通过具体的
14、内会自动安排使用的存贮单元。也可以用户自行通过具体的内会自动安排使用的存贮单元。也可以用户自行通过具体的内存地址置入数据或从特定地址取出数据。存地址置入数据或从特定地址取出数据。存地址置入数据或从特定地址取出数据。存地址置入数据或从特定地址取出数据。C C 语言的上机调试和汇编程序使用同一仿真调试软件。语言的上机调试和汇编程序使用同一仿真调试软件。语言的上机调试和汇编程序使用同一仿真调试软件。语言的上机调试和汇编程序使用同一仿真调试软件。下面是一个下面是一个下面是一个下面是一个C C语言程序编译后生成的机器代码及对应的反汇编语言程序编译后生成的机器代码及对应的反汇编语言程序编译后生成的机器代码
15、及对应的反汇编语言程序编译后生成的机器代码及对应的反汇编程序。程序。程序。程序。C C语言程序的反汇编程序语言程序的反汇编程序语言程序的反汇编程序语言程序的反汇编程序(源代码源代码源代码源代码)例:例:例:例:在在在在2.42.4节曾用汇编语言完成了外部节曾用汇编语言完成了外部节曾用汇编语言完成了外部节曾用汇编语言完成了外部RAMRAM的的的的000EH000EH单元和单元和单元和单元和000FH000FH单元的内容交换,现改用单元的内容交换,现改用单元的内容交换,现改用单元的内容交换,现改用C C语言编语言编语言编语言编 程。程。程。程。C C语言对地址的指语言对地址的指语言对地址的指语言对
16、地址的指示方法可以采用指针变量,也可以引用示方法可以采用指针变量,也可以引用示方法可以采用指针变量,也可以引用示方法可以采用指针变量,也可以引用absacc.habsacc.h头文件作绝对地头文件作绝对地头文件作绝对地头文件作绝对地址访址访址访址访 问,下面采用绝对地址访问方法。问,下面采用绝对地址访问方法。问,下面采用绝对地址访问方法。问,下面采用绝对地址访问方法。#include#include main()main()char c;char c;for(;)for(;)c=XBYTE c=XBYTE1414;XBYTE XBYTE1414=XBYTE=XBYTE1515;XBYTE XB
17、YTE1515=c;=c;程序中为方便反复观察,使用了死循环语句程序中为方便反复观察,使用了死循环语句程序中为方便反复观察,使用了死循环语句程序中为方便反复观察,使用了死循环语句for(;)for(;)只要用只要用只要用只要用Ctrl+CCtrl+C即可退出死即可退出死即可退出死即可退出死循环。循环。循环。循环。上面程序通过编译后机器代码和反汇编程序如下:上面程序通过编译后机器代码和反汇编程序如下:上面程序通过编译后机器代码和反汇编程序如下:上面程序通过编译后机器代码和反汇编程序如下:0000 020014 L JMP 0014H 0000 020014 L JMP 0014H 0003 90
18、000E MOV DPTR 0003 90000E MOV DPTR,#000EH#000EH c=XBYTEc=XBYTE1414;0006 E0 MOVX A 0006 E0 MOVX A,DPTR DPTR 0007 FF MOV R7 0007 FF MOV R7,A A 0008 A3 INC DPTR 0008 A3 INC DPTR 0009 E0 MOVX A 0009 E0 MOVX A,DPTR DPTR 000A 90000E MOV DPTR000A 90000E MOV DPTR,#000EH#000EH XBYTEXBYTE1414=XBYTE=XBYTE 1515
19、;000D F0 MOVX DPTR000D F0 MOVX DPTR,A A 000E A3 INC DPTR 000E A3 INC DPTR XBYTEXBYTE1515=c;=c;000F EF MOV A 000F EF MOV A,R7 R7 0010 F0 MOVX DPTR 0010 F0 MOVX DPTR,A A 0011 80F0 SJMP 0003H 0011 80F0 SJMP 0003H 0013 22 RET 0013 22 RET 0014 787F MOV R0 0014 787F MOV R0,#7FH#7FH 0016 E4 CLR A 0016 E4 C
20、LR A 0017 F6 MOV R00017 F6 MOV R0,A A 0018 D8FD DJNZ R0 0018 D8FD DJNZ R0,0017H0017H001A 758107 MOV SP001A 758107 MOV SP,#07H#07H 001D 020003 LJMP 0003H001D 020003 LJMP 0003H 思路:思路:一进入一进入C C语言程序,首先执行将内部语言程序,首先执行将内部RAMRAM的的0 07FH 1287FH 128个单个单元清零,然后置元清零,然后置SPSP为为07H(07H(视变量视变量 多少不同,多少不同,SPSP置不同值,依程置
21、不同值,依程序而定序而定),因此如果要对内部,因此如果要对内部RAMRAM置初值,一定要在执行了一条置初值,一定要在执行了一条 C C语言语句后进行。语言语句后进行。C C语言程序设定的变量,语言程序设定的变量,C51C51自行安排寄存器或存贮器作参数自行安排寄存器或存贮器作参数传递区,通常在传递区,通常在R0R0R7(R7(一组一组 或两组,视参数多少定或两组,视参数多少定),因此,因此,如果对具体地址置数据,应避开这些如果对具体地址置数据,应避开这些R0R0R7R7的地址。的地址。如果不特别指定变量的存贮类型,通常被安排在内部如果不特别指定变量的存贮类型,通常被安排在内部RAMRAM中。中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机原理及应用 单片机 原理 应用 课件 02 C51 函数