第9節(jié):程序從哪里開(kāi)始,要到哪里去?
程序從哪里開(kāi)始,要到哪里去?為了讓初學(xué)者了解C語(yǔ)言程序的執(zhí)行順序,我把程序分成三個(gè)區(qū)域:進(jìn)入主程序前的區(qū)域,主程序的初始化區(qū)域,主程序的循環(huán)區(qū)域。
本文引用地址:http://www.biyoush.com/article/201611/319819.htm進(jìn)入主程序前的區(qū)域。這是上電后,在單片機(jī)執(zhí)行主程序代碼之前就已經(jīng)完成了的工作。包括頭文件的包含,宏定義,內(nèi)存分配這些工作。這部分的內(nèi)容可以暫時(shí)不用去了解,我會(huì)在后面的一些章節(jié)中陸續(xù)深入講解。
主程序的初始化區(qū)域。這是上電后,單片機(jī)進(jìn)入主程序后馬上就要執(zhí)行的程序代碼,這部分區(qū)域的代碼有一個(gè)特點(diǎn),大家也必須記住的,就是單片機(jī)只執(zhí)行一次。只要單片機(jī)不重啟,不復(fù)位,那么上電后這部分的代碼只被執(zhí)行一次。
主程序的循環(huán)區(qū)域。單片機(jī)在主程序中執(zhí)行完了初始化區(qū)域的代碼,緊接著就進(jìn)入這片循環(huán)區(qū)域的代碼。單片機(jī)一直在循環(huán)執(zhí)行這段代碼,這就是上電后單片機(jī)的最終歸宿,一直處在循環(huán)的狀態(tài)。
下面我跟大家分析一個(gè)程序源代碼的三個(gè)區(qū)域和執(zhí)行順序,大家先看中文解釋部分的內(nèi)容,暫時(shí)不用理解每行指令的語(yǔ)法。該源代碼實(shí)現(xiàn)的功能是:上電后,蜂鳴器鳴叫一聲就停止,然后看到一個(gè)LED燈一直在閃爍。本程序是基于堅(jiān)鴻51單片機(jī)學(xué)習(xí)板。
#include "REG52.H" //進(jìn)入主程序前的區(qū)域:頭文件包含
sbit beep_dr=P2^7; //進(jìn)入主程序前的區(qū)域:宏定義
sbit led_dr=P3^5; //進(jìn)入主程序前的區(qū)域:宏定義
unsigned long i; //進(jìn)入主程序前的區(qū)域:內(nèi)存分配
void main() //主程序入口,即將進(jìn)入初始化區(qū)域
{
beep_dr=0; //第一步:初始化區(qū)域:蜂鳴器開(kāi)始鳴叫。
for(i=0;i<6250;i++); //第二步:初始化區(qū)域:延時(shí)0.5秒左右。也就是蜂鳴器鳴叫的持續(xù)時(shí)間。
beep_dr=1; //第三步:初始化區(qū)域:蜂鳴器停止鳴叫。
while(1) //執(zhí)行完上面的初始化區(qū)域,即將進(jìn)入循環(huán)區(qū)域
{
led_dr=1; //第四步:循環(huán)區(qū)域:LED開(kāi)始點(diǎn)亮。
for(i=0;i<6250;i++); //第五步:循環(huán)區(qū)域:延時(shí)0.5秒左右。也就是LED點(diǎn)亮的持續(xù)時(shí)間。
led_dr=0; //LED滅 //第六步:循環(huán)區(qū)域:LED開(kāi)始熄滅。
for(i=0;i<6250;i++); //第七步:循環(huán)區(qū)域:延時(shí)0.5秒左右。也就是LED熄滅的持續(xù)時(shí)間。馬上返回上面第四步繼續(xù)循環(huán)往下執(zhí)行。
}
}
//解釋?zhuān)?/p>
//單片機(jī)進(jìn)入主程序后,第一步到第三步是屬于初始化區(qū)域,只被執(zhí)行一次。然后進(jìn)入循環(huán)區(qū)域,從第四步執(zhí)行到第七步,
//執(zhí)行完第七步之后,馬上返回上面第四步繼續(xù)循環(huán)往下執(zhí)行,單片機(jī)一直處于第四步到第七步的循環(huán)區(qū)域中。
復(fù)制代碼
經(jīng)過(guò)以上的分析,可以看出這三個(gè)區(qū)域的大概分布如下:
//...進(jìn)入主程序前的區(qū)域
void main()
{
//...初始化區(qū)域
while(1)
{
//...循環(huán)區(qū)域
}
}
下節(jié)預(yù)告:一個(gè)用來(lái)學(xué)習(xí)C語(yǔ)言的模板程序。
評(píng)論