C51编程入门(一):初识main()函数

-回复 -浏览
楼主 2018-06-26 13:02:57
举报 只看此人 收藏本贴 楼主

什么是main()函数?在讲解main函数之前,让我们先了解单片机程序的组成。单片机程序由一条条指令按照顺序组合实现特定的功能。8051单片机的指令集有100多条指令,实现不同的功能,如算术运算、逻辑运算、条件控制等。

单片机工作的过程是:单片机上电先进行复位操作,完成寄存器初始化等工作,然后才去执行用户的代码。用户的代码存放在程序存储器上,第一条指令的地址称为进入点(Entry point)。由于复位后PC=0000H,单片机将执行程序存储器0000H地址的指令。 通常,在0000H处放置一条跳转到进入点的指令。

Keil编译器编译程序时,自动将C51代码转换为二进制指令。哪么编译器怎么知道哪个是第一条指令呢? 中国有句老话,没有规矩不成方圆。Keil强制规定(也是这么做的)main()函数的第一条语句对应的第一条指令就是入口地址。

单片机源程序(.c)通常都是下面这样子(红色部分),如果不是很理解,记住就可以,都是固化的。


#include "reg52.h" //头文件,定义了特殊寄存器和位寻址位,也可以不引入,但是要自己用sfr关键字定义特殊功能寄存器

void main()           //主函数

{

  while(1)           //主循环

                   //单片机程序基本都是循环执行一段指令,

                   //根据输入或运行状态改变输出达到控制目的

  {

        P1 = 0x00;       //写0x00到特殊功能寄存器P1,即通过P1输出低电平。

  }

}

在keil调试(CTRL+F5)以上代码,通过反汇编可以看到C51代码转换后的汇编代码如图1所示。代码说明见图中标注。


通过上面讲解,希望大家对C51的main()函数有一点了解。

小结:main()函数是程序的进入点,是单片机完成初始化后执行的第一条用户程序的指令。一个程序里,有且只能有一个进入点。

参考文献:

[1] WikePedia. https://en.wikipedia.org/wiki/Entry_point[Z].


我要推荐
转发到