首页 理论教育单片机多语言编程|函数数据传送方式详解

单片机多语言编程|函数数据传送方式详解

【摘要】:实参的个数、顺序和数据类型必须与形参一致。主调函数被执行后,实参值即被传送到被调函数中执行,完成后返回主调函数的程序中继续向下执行。程序点评本例通过程序执行,验证了函数的传值调用功能。add(5,6)中的数值就是实参。由于c是全局变量,因而可以执行add(),并显示结果。在主函数main中只执行add(),不要加赋值c。

1.利用参数传值调用

使用参数在函数间传送数据时,主调函数的参数必须是实参,也就是必须是实际值。被调函数的参数是形参,可以是一个或几个变量。实参的个数、顺序和数据类型必须与形参一致。

主调函数被执行后,实参值即被传送到被调函数中执行,完成后返回主调函数的程序中继续向下执行。这种调用称为传值调用。

【例4-24】 D0灯闪烁,间隔时间0.5s

(1)编辑C语言源程序

(2)编译

(3)执行

进行软仿真,单击“单步”,P1.0=0,延时,P1.0=1,延时……这就相当于表示D0取反,灯闪烁运行,间隔时间为0.5s。

(4)程序点评

本例中,主调函数是delay(5),其中(5)是实参。由于一个空执行{ }时间为6μs,总延时时间为6×167×100×5μs=500ms=0.5s。

由于传值调用的引入,通过改变实参,可以使延时时间在很大范围内变化,而程序本身无需改变。如果设实参为1,则延时时间为100ms。如果设实参为255,则延时时间为100ms×255=25.5s。利用传值调用,可以灵活设置延时时间。

若形参的数据类型为uchar型,实参范围只能为1~255。若为uint型,实参最大可以到65535。但为了让程序快速运行,一般应尽量用uchar型。

2.利用函数返回值传送

【例4-25】 调用函数a+b的和

(1)编辑C语言源程序(www.chuimin.cn)

(2)编译

(3)执行

进行软仿真,单步执行,P1=0000 1011=0x0B。因为c=5+6=11=0x0B。证明程序执行结果正确。执行到大括号程序停止。

(4)程序点评

本例通过程序执行,验证了函数的传值调用功能。add(5,6)中的数值就是实参。由于传值调用,将实参送到add(),执行后,利用返回值c送回主函数。必须注意,主程序中的变量c必须设置变量类型为uchar,否则会出错。传值调用为程序提供了很大的灵活性。若将add( )形参类型改为uint,变量c的范围可以到65536。

3.利用全局变量传送

【例4-26】

(1)编辑C语言源程序

(2)编译

(3)执行

进行软仿真,连续单击“单步”执行,P1=00110111=0x37,c=25+30=55=0x37,程序执行正确。注意,单步执行到大括号即停止,不能再向下执行。

单击“RST”,系统复位,程序从头开始。

(4)程序点评

本例验证了函数用全局变量执行传值调用。由于c是全局变量,因而可以执行add(),并显示结果。在add()中不用加返回值。在主函数main中只执行add(),不要加赋值c。因为执行了add()就得到了c值。