第4章单片机C语言2.ppt





《第4章单片机C语言2.ppt》由会员分享,可在线阅读,更多相关《第4章单片机C语言2.ppt(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4.7 4.7 函数函数 4.6.14.6.1函数的分类及定义函数的分类及定义 C C 语言程序由函数组成,从用户使用角度划分,函数分为库函数和语言程序由函数组成,从用户使用角度划分,函数分为库函数和用户定义函数:用户定义函数:库函数是编译系统已经为用户设计好的一系列标准函数库函数是编译系统已经为用户设计好的一系列标准函数 (见本书附录见本书附录二二),用户只需正确调用,如前面所用到的头文件,用户只需正确调用,如前面所用到的头文件reg51.hreg51.h等,有的头等,有的头文件中包括了一系列函数,要使用其中的函数必须先使用文件中包括了一系列函数,要使用其中的函数必须先使用#Include#
2、Include 来申明,然后才能调用。来申明,然后才能调用。用户自定义函数是用户根据任务自己编写编写的函数。用户自定义函数是用户根据任务自己编写编写的函数。从参数形式上函数分为无参函数和有参函数。从参数形式上函数分为无参函数和有参函数。无参函数无参函数:函数中无参数定义。函数中无参数定义。有参函数:函数中定义了形式参数,在调用时,调用函数用实际参数有参函数:函数中定义了形式参数,在调用时,调用函数用实际参数代替形式参数,调用完将运算结果给调用函数。代替形式参数,调用完将运算结果给调用函数。4.6.24.6.2函数的定义函数的定义 无参函数的定义:无参函数的定义:返回值类型返回值类型 函数名函数
3、名()()函数体语句函数体语句 如果函数没有返回值,可以将返回值类型设为如果函数没有返回值,可以将返回值类型设为void void;函数以函数以“”开始,以开始,以“”结束。结束。有参函数的定义:有参函数的定义:返回值类型返回值类型 函数名函数名 (形式参数表形式参数表)形式参数类型说明形式参数类型说明/*/*单独说明单独说明*/函数体语句函数体语句 return(return(返回形参名返回形参名)也可以这样定义:也可以这样定义:返回值类型返回值类型 函数名函数名 (类型说明形式参数表类型说明形式参数表)/)/*说明放在参数表内说明放在参数表内*/函数体语句函数体语句 return(retu
4、rn(返回形参名返回形参名)其中形式参数表中的各项要用其中形式参数表中的各项要用 ,隔开,通过隔开,通过returnreturn语句将语句将需返回的值返回给调用函数需返回的值返回给调用函数。4.6.3.4.6.3.函数的调用函数的调用 函数调用的形式为:函数调用的形式为:函数名函数名 (实际参数表实际参数表);对于无参函数当然不存在实际参数表。实参和形参的数目要相对于无参函数当然不存在实际参数表。实参和形参的数目要相等类型要一致。等类型要一致。函数的调用方式有三种函数的调用方式有三种 函数调用语句函数调用语句 :即把被调函数名作为调用函数的一个语句,如:即把被调函数名作为调用函数的一个语句,如
5、 fun1fun1()();被调函数作为表达式的运算对象:被调函数作为表达式的运算对象:如如 rett=2*get(a,b)rett=2*get(a,b);此时此时getget函数中的函数中的 a a,b b 应为实参,用它的返回值参予式中的运算。应为实参,用它的返回值参予式中的运算。被调函数作为另一个数的实际参数:被调函数作为另一个数的实际参数:如如 m=max(a,get(a,b)m=max(a,get(a,b);函数函数 get(a,b)get(a,b)作为作为max()max()的一个实际参数被调用。的一个实际参数被调用。4.7.4 4.7.4 对被调函数的说明对被调函数的说明 如果被
6、调函数出现在主函数之后,在主函数前应对被调函数加以说如果被调函数出现在主函数之后,在主函数前应对被调函数加以说明,形式为:明,形式为:返回值类型返回值类型 被调函数名被调函数名 (形参表形参表);如:如: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)int fun1(a,b)int a,b;/*int a,b;/*形参类型的说明形参类型的说明*/int c;int c;c=
7、a+b;c=a+b;return(c);/*return(c);/*函数返回值函数返回值*/此例被调函数放在主函数之后、所以在主函数前要先对被调函数进此例被调函数放在主函数之后、所以在主函数前要先对被调函数进行说明。行说明。被调函数出现在主函数之前,可以不对被调函数说明。下面给出一个被调函数出现在主函数之前,可以不对被调函数说明。下面给出一个简单例子:简单例子: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,
8、u=3,v=2;d=2*fun1(u,v);d=2*fun1(u,v);此例中被调函数出现在主函数前,所以不需事先说明。此例中被调函数出现在主函数前,所以不需事先说明。4.8 4.8 单片机的单片机的 C C 语言编程实例语言编程实例 由于由于 C51 C51 编译器是针对单片机的,因此编译器是针对单片机的,因此 ANSI C ANSI C 中的中的 scanf scanf 和和 printf printf 等用于等用于 PC PC 机的输入输出语句无效。运算的数据可以通过设置机的输入输出语句无效。运算的数据可以通过设置变量的方法来置入或取出,也可以由用户自行通过具体的内存地址置入数变量的方法
9、来置入或取出,也可以由用户自行通过具体的内存地址置入数据或从特定地址取出数据。据或从特定地址取出数据。C C 语言的上机调试和汇编程序使用同一仿真调试软件。语言的上机调试和汇编程序使用同一仿真调试软件。下面是一个下面是一个C C语言程序编译后生成的机器代码及对应的反汇编程序。语言程序编译后生成的机器代码及对应的反汇编程序。4.8.14.8.1、C C语言程序的反汇编程序语言程序的反汇编程序(源代码源代码)在在2.42.4节曾用汇编语言完成了外部节曾用汇编语言完成了外部RAMRAM的的000EH000EH单元和单元和000FH000FH单元的内单元的内容交换,现改用容交换,现改用C C语言编程。
10、语言编程。C C语言对地址的指示方法可以采用指针变量,语言对地址的指示方法可以采用指针变量,也可以引用也可以引用absacc.habsacc.h头文件作绝对地址访问,下面采用绝对地址访问的头文件作绝对地址访问,下面采用绝对地址访问的方法。方法。#include main()char c;for(;)c=XBYTE14;XBYTE14=XBYTE15;XBYTE15=c;程序中为方便反复观察,使用程序中为方便反复观察,使用了死循环语句了死循环语句for(;),for(;),用用Ctrl+C Ctrl+C 可退出死循环。可退出死循环。左面程序通过编译后的机器代左面程序通过编译后的机器代码和反汇编程
11、序如下:码和反汇编程序如下:0000 LJMP 0014H 0003 MOV DPTR,#000EH 0006 MOVX A,DPTR 0007 MOV R7,A 0008 INC DPTR 0009 MOVX A,DPTR 000A MOV DPTR,#000EH 000D MOVX DPTR,A 000E INC DPTR 000F MOV A,R7 0010 MOVX DPTR,A 0011 SJMP 0003H 0013 RET 0014 MOV R0,#7FH 0016 CLR A 0017 MOV R0,A 0018 DJNZ R0,0017H 001A MOV SP,#07H 0
12、01D LJMP 0003例中可见:例中可见:一进入一进入C C语言程序,首先执行将内部语言程序,首先执行将内部RAMRAM的的0 07FH 1287FH 128个单元清零,个单元清零,然后置然后置SPSP为为07H(07H(视变量多少不同,视变量多少不同,SPSP置不同值,依程序而定置不同值,依程序而定),因此如,因此如果要对内部果要对内部RAMRAM置初值,一定要在执行了一条置初值,一定要在执行了一条C C语言语句后进行。语言语句后进行。C C语言编译程序会按照定义设定变量,自行安排寄存器或存贮器作语言编译程序会按照定义设定变量,自行安排寄存器或存贮器作参数传递区,通常使用参数传递区,通常
13、使用R0R0R7(R7(一组或两组,视参数多少定一组或两组,视参数多少定),因此,在,因此,在设置数据时,要设法避开设置数据时,要设法避开R0R0R7R7的地址区域。的地址区域。如果不特别指定变量的存贮类型,通常被安排在内部如果不特别指定变量的存贮类型,通常被安排在内部RAMRAM中。中。4.8.24.8.2、顺序程序的设计、顺序程序的设计例例1.1.完成完成19805198052450324503的编程的编程 分析:两个乘数比较大,其积更大,采用分析:两个乘数比较大,其积更大,采用unsigned longunsigned long类型,类型,设乘积存放在外部数据存贮器设乘积存放在外部数据存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言

限制150内