从单片机基础到程序框架(全集 2019pdf版).pdf - 第227页
语句 4; 【53.4 例程练习和分析。 】 现在编写一 个练习程序来 体验一下函数 的使用 。 程序代码如 下: /*---C 语言 学习区域的开 始。----- ----------- ---------- ----------- ---------- */ void H anShu(void); //子函 数声明 的第一区域 unsigned c har a; //全局变量定 义的第 二区域 void H anShu(void) …

}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
分析:上述例子中,从书写代码区域的角度来寻找函数的大概规律,从上往下:
第一区域:写子函数 HanShu 声明。
第二区域:全局变量的定义。
第三区域:子函数 HanShu 的定义。
第四区域:在 main 函数里对子函数 HanShu 的调用。
【53.3 子函数被其它函数调用时候的执行顺序。】
子函数被其它函数调用时,子函数的名字就相当于一个跳转地址,而子函数的定义部分就是要跳转的实
际地址,单片机在主函数里遇到子函数名字,就直接跳转到子函数定义那里执行子函数内部的代码,执行完
子函数后再返回到主函数,此时返回到主函数哪里呢?答:因为子函数已经被执行了一次,所以返回到主函
数中的子函数名字后面,然后继续往下执行 main 函数其它剩余的代码。请看下面这个代码的执行顺序,一
目了然:
/*---C 语言学习区域的开始。-----------------------------------------------*/
void HanShu(void); //子函数的声明
void HanShu(void) //子函数的定义
{
语句 1;
语句 2;
}
void main() //主函数
{
语句 3;
HanShu() ; //子函数的被调用
语句 4;
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
执行顺序分析:单片机从主函数 main 那里进来往下执行,先执行“语句 3”,接着遇到 HanShu 名字的跳
转地址,然后马上跳转到 HanShu 的定义部分,执行“语句 1”,“语句 2”,执行完子函数 HanShu 的定义部
分,就马上返回到主函数,继续执行 HanShu 名字后面的“语句 4”。整个执行语句的先后顺序如下:
语句 3;
语句 1;
语句 2;

语句 4;
【53.4 例程练习和分析。】
现在编写一个练习程序来体验一下函数的使用。
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
void HanShu(void); //子函数声明的第一区域
unsigned char a; //全局变量定义的第二区域
void HanShu(void) //子函数定义的第三区域
{
a++; //子函数的代码语句
}
void main() //主函数
{
a=0;
a++;
HanShu() ; //子函数被调用的第四区域
a++;
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:3
十六进制:3
二进制:11
分析:
变量 a 为 3。单片机从 main 主函数进来,主函数里有 2 条“a++”,再加上子函数里也有 1 条“a++”,因
此累加了 3 次,从 0 变成了 3.
【53.5 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。