音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

goto語句

作者:衷政偉 欄目:單片機(jī)
goto語句

見圖
goto沒有轉(zhuǎn)為相應(yīng)的匯編代碼

2樓: >>參與討論
computer00
是嗎?我想0x000E就是D2。
如果P34等于1,就跳轉(zhuǎn)到D2,

那編譯之后剛好不就是 JB P34,C:000E 嗎?

3樓: >>參與討論
平常人
goto語句——多說一句
沒看到你下面的程序,似乎你的 goto 應(yīng)該可以改為 break 。

4樓: >>參與討論
衷政偉
剛發(fā)錯了圖片
剛發(fā)錯了圖片
goto沒有相應(yīng)的匯編代碼
源代碼如下:
#include <reg51.h>
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P34 = P3^4;
sbit P35 = P3^5;

void  delay10ms(void)
{
       unsigned CHAR i, j;
       
       for (i=50; i>0; i--)
       {
             for (j=200; j>0; j--)   
             {
                  ;
             }
       }
}

void main(void)
{
     while (1)
     {
D1:         if (P34==1)
            {
                goto  D2;
            }
            
            else
            {
                 delay10ms();
                 
                 if (P34==0)
                 {
                     P10 = !P10;
                     
                     if (P34==0)
                     {
                         ;
                     }
                     
                     else
                     {
                         goto D2;
                     }
                 }
                 
                  else
                  {
                      goto D1;
                  }
             }
            
            
D2:         if (P35==1)
            {
                 goto  D1;
            }
            
            else
            {
                 delay10ms();
                 
                 if (P35==0)
                 {
                     P11 = !P11;
                     
                     if (P35==0)
                     {
                         ;
                     }
                     
                     else
                     {
                         goto D1;
                     }  
                 }
                 
                 else
                 {
                     goto D2;
                 }
            }
        }
}

5樓: >>參與討論
computer00
編譯器比你"聰明",是你自己沒看清楚而已
    22:      while (1)
    23:      {
    24: D1:         if (P34==1)
C:0x0003    20B408   JB       P34(0xB0.4),C:000E  這里我們可以看到,如果P34等于1,就跳轉(zhuǎn)到000E,而000E剛好是標(biāo)號D2的地址
    25:             {
    26:                 goto  D2;   所以這個if(P34==1)就goto到D2是有的
    27:             }
    28:              
    29:             else
    30:             {
    31:                  delay10ms();
    32:                   
C:0x0006    12002A   LCALL    delay10ms(C:002A)
    33:                  if (P34==0)
C:0x0009    20B4F7   JB       P34(0xB0.4),main(C:0003) 這條語句的意思就是,如果P34等于1,則跳轉(zhuǎn)到0003,而0003則是D1的標(biāo)號.即,當(dāng)P34等于1時跳轉(zhuǎn)到D1,等于0時,不跳轉(zhuǎn),即順序執(zhí)行,所以,如果P34等于0,則執(zhí)行下面的P10=!P10.而如果不等于0,即等于1,那么就跳轉(zhuǎn)到0003,即跳轉(zhuǎn)到D1,而這個剛好就是下面的那條else goto D1
    34:                  {
    35:                      P10 = !P10;
    36:                       
C:0x000C    B290     CPL      P10(0x90.0)
    37:                      if (P34==0)
    38:                      {
    39:                          ;
    40:                      }
    41:                       
    42:                      else
    43:                      {
    44:                          goto D2; 這里無論條件P34==0是否成立,都會執(zhí)行到D2去的,并且接下來馬上就是D2,所以干脆就不跳了,跳了也是白跳.
    45:                      }
    46:                  }
    47:                   
    48:                   else
    49:                   {
    50:                       goto D1; 這個在上面已經(jīng)說明了,會跳轉(zhuǎn)到0003
    51:                   }
    52:              }
    53:              
    54:              
    55: D2:         if (P35==1)
C:0x000E    20B5F2   JB       P35(0xB0.5),main(C:0003) 這個同上
    56:             {
    57:                  goto  D1;
    58:             }
    59:              

6樓: >>參與討論
衷政偉
謝謝
 
7樓: >>參與討論
平常人
很多GOTO都可以省掉
首先,在D1處,將條件反一下就可以把你的第一個GOTO省掉:

D1: if (P34 != 1)
    {
      delay10ms();
      ......
    }

D2:

另一個辦法是把第一個GOTO換成一個分號:
D1: if (P34 == 1)
        ;
    else
    {
      delay10ms();
      ......
    }

盡量不要把if語句的then部分做得比else部分短很多,這樣程序看起來很別扭,只需簡單地把條件反一下即可。這樣還有很大可能得到更優(yōu)化的編譯結(jié)果,你可以照我說的試一試。

其他的GOTO還有其他的方法省掉。



參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求教:貼片式AT89C2051如何寫片。
AT89C51與AT89C52有什么不同
請教PT2262軟解碼問題
一個簡單的遙控器接收程序
尋個插座
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號