初始化(内部RAM,堆栈初始化,由编译器自动生成相应代码) --------> 跳转到用户的主程序--------> 主程序执行完毕----> 再次跳转到初始化处,重新执行。
上面这个流程是我们不想要的。因为初始化是只需要在开机的时候(系统上电)时候初始化一次的时候。想想看如果你的手机每次开机完成之后如果没有按键按下去或者收到短信电话什么的,就会重新初始化一次,是什么后果:) 估计你肯定会扔了那手机,骂道这是谁写的程序呀。
我们希望初始化完成之后,程序就会跳入到主程序(main函数)中去,并且始终循环执行里面的代码(哪怕没有任务,只在那里空跳转循环) 因为只有那里面的代码(中断函数同样属于)才是属于我们用户编写的有用代码,是希望按照我们的意图去执行的。所以我们希望的正确流程是如下的:
初始化(内部RAM,堆栈初始化,由编译器自动生成相应代码) --------> 跳转到用户的主程序--------> 主程序执行完毕---->
继续执行主循环里面的用户代码。
理解了上面的那个流程,我们正确的函数应该是如下的。
void main(void)
{
while(1) //循环条件,永远为真,下面复合语句里面的内容会一直循环执行
{
P0 = 0xff ;
sleep(1000) ;
P0 = 0x00 ;
sleep(1000) ;
}
}
当然循环语句的写法不止这一种,我在第十三课 C51循环语句里有详细的介绍 :
小结一下:基于单片机的程序是一个死循环。所有的代码和函数调用都应该在这个循环里面,(中断函数例外,在进入循环之前可以调用其它的一些初始化的函数或者是其它只需要在系统上电调用一次的函数或者代码)。
基本框架如下
void main(void)
{
// 初始化函数,根据实际系统情况编写
while(1) //死循环 也可以用for(;;;)形式或其它形式
{
//任务函数1
//任务函数2
..........
}
}
欲知更多请访问中华矽智网SIPMall: