基于proteus的51單片機(jī)仿真實(shí)例三十三、C語(yǔ)言的goto無條件轉(zhuǎn)移語(yǔ)句演示實(shí)例
它是將程序運(yùn)行的流向轉(zhuǎn)到它所指定的標(biāo)號(hào)處去執(zhí)行
2、結(jié)構(gòu)化程序設(shè)計(jì)方法主張限制使用goto語(yǔ)句,因?yàn)闉E用goto語(yǔ)句將使程序流程無規(guī)律,可讀性差。但也不是絕對(duì)禁止使用goto語(yǔ)句,一般來說,可以有兩種用途
1)與if語(yǔ)句一起構(gòu)成循環(huán)結(jié)構(gòu)
2)從循環(huán)體內(nèi)跳轉(zhuǎn)到循環(huán)體外,但在c語(yǔ)言中可以使用break語(yǔ)句和continue語(yǔ)句跳出本層循環(huán)和結(jié)束本次循環(huán),goto語(yǔ)句的使用機(jī) 會(huì)已大大減少,只是需要從多層循環(huán)的內(nèi)層循環(huán)跳到外層循環(huán)時(shí)才用到goto語(yǔ)句。但是這種用法不符合結(jié)構(gòu)化原則,一般不宜采用,只有在不得已時(shí)(例如能夠 大大提高效率)才使用。
3、在keil c51中新建工程ex22,編寫如下程序代碼,并編譯生成ex22.hex文件。
#include reg51.h> //包含頭文件
//延時(shí)函數(shù)
void delay(void)
{
unsigned int i,j;
for(i=0;i5000;i++)
for(j=0;j50;j++);
}
void delay(void)
{
unsigned int i,j;
for(i=0;i5000;i++)
for(j=0;j50;j++);
}
void main(void)
{
P0 = 0xff; //程序開始,,p0口的8個(gè)led全部熄滅
delay();
{
P0 = 0xff; //程序開始,,p0口的8個(gè)led全部熄滅
delay();
//在此添加一個(gè)標(biāo)號(hào)
loop:P0 = 0x0f; //
delay();
loop:P0 = 0x0f; //
delay();
P0 = 0xf0; //
delay();
delay();
goto loop; //無條件跳轉(zhuǎn)到標(biāo)號(hào)處
P0 = 0x55; //由于上一步程序發(fā)生了無條件跳轉(zhuǎn),所以下面這些語(yǔ)句不會(huì)被執(zhí)行
delay();
P0 = 0x55; //由于上一步程序發(fā)生了無條件跳轉(zhuǎn),所以下面這些語(yǔ)句不會(huì)被執(zhí)行
delay();
while(1) //程序在此無限循環(huán)
{
}
}
{
}
}
4、在proteus中新建仿真文件ex22.dsn。電路圖如下圖所示
5、將ex22.hex文件載入到at89c51中,啟動(dòng)仿真,可以看到運(yùn)行結(jié)果在如下兩個(gè)圖中變換,始終不會(huì)執(zhí)行p0=0x55這個(gè)語(yǔ)句。
51單片機(jī)相關(guān)文章:51單片機(jī)教程
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
評(píng)論