搜索
查看: 1037|回复: 0

第九节:程序从哪里开始,要到哪里去?

[复制链接]

52

主题

146

帖子

380

积分

中级会员

Rank: 3Rank: 3

积分
380
发表于 2015-7-13 15:56:08 | 显示全部楼层 |阅读模式
程序从哪里开始,要到哪里去?为了让初学者了解C语言程序的执行顺序,我把程序分成三个区域:进入主程序前的区域,主程序的初始化区域,主程序的循环区域。
进入主程序前的区域。这是上电后,在单片机执行主程序代码之前就已经完成了的工作。包括头文件的包含,宏定义,内存分配这些工作。这部分的内容可以暂时不用去了解,我会在后面的一些章节中陆续深入讲解。
主程序的初始化区域。这是上电后,单片机进入主程序后马上就要执行的程序代码,这部分区域的代码有一个特点,大家也必须记住的,就是单片机只执行一次。只要单片机不重启,不复位,那么上电后这部分的代码只被执行一次。
主程序的循环区域。单片机在主程序中执行完了初始化区域的代码,紧接着就进入这片循环区域的代码。单片机一直在循环执行这段代码,这就是上电后单片机的最终归宿,一直处在循环的状态。
下面我跟大家分析一个程序源代码的三个区域和执行顺序,大家先看中文解释部分的内容,暂时不用理解每行指令的语法。该源代码实现的功能是:上电后,蜂鸣器鸣叫一声就停止,然后看到一个LED灯一直在闪烁。本程序是基于51单片机学习板。

  • #include "REG52.H"  //进入主程序前的区域:头文件包含
  • sbit beep_dr=P2^7;  //进入主程序前的区域:宏定义
  • sbit led_dr=P3^5;   //进入主程序前的区域:宏定义
  • unsigned long i;    //进入主程序前的区域:内存分配
  • void main()                    //主程序入口,即将进入初始化区域
  • {
  •          beep_dr=0;                  //第一步:初始化区域:蜂鸣器开始鸣叫。
  •    for(i=0;i<6250;i++);       //第二步:初始化区域:延时0.5秒左右。也就是蜂鸣器鸣叫的持续时间。
  •          beep_dr=1;                  //第三步:初始化区域:蜂鸣器停止鸣叫。
  •    while(1)                    //执行完上面的初始化区域,即将进入循环区域
  •    {
  •        led_dr=1;               //第四步:循环区域:LED开始点亮。
  •        for(i=0;i<6250;i++);   //第五步:循环区域:延时0.5秒左右。也就是LED点亮的持续时间。
  •        led_dr=0;  //LED灭      //第六步:循环区域:LED开始熄灭。
  •        for(i=0;i<6250;i++);   //第七步:循环区域:延时0.5秒左右。也就是LED熄灭的持续时间。马上返回上面第四步继续循环往下执行。
  •    }
  • }
  • //解释:
  • //单片机进入主程序后,第一步到第三步是属于初始化区域,只被执行一次。然后进入循环区域,从第四步执行到第七步,
  • //执行完第七步之后,马上返回上面第四步继续循环往下执行,单片机一直处于第四步到第七步的循环区域中。


复制代码


经过以上的分析,可以看出这三个区域的大概分布如下:


//...进入主程序前的区域
void main()               
    {
   //...初始化区域
   while(1)                     
   {
       //...循环区域
   }
}


下节预告:一个用来学习C语言的模板程序。

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|RF技术社区

GMT+8, 2024-4-25 06:27 , Processed in 0.077583 second(s), 8 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表