找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1892|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

關(guān)于51單片機(jī)變量的聲明順序會(huì)影響結(jié)果,一個(gè)費(fèi)解的錯(cuò)誤

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本人初學(xué)51單片機(jī),跟著網(wǎng)上教程自學(xué),學(xué)到碼表程序編寫(xiě)。在寫(xiě)的過(guò)程中發(fā)一個(gè)問(wèn)題無(wú)法解釋?zhuān)拾l(fā)出來(lái)求問(wèn)高手?偟膩(lái)說(shuō)就是發(fā)現(xiàn)變量的聲明順序會(huì)影響結(jié)果。下面代碼的仿真結(jié)果,一個(gè)是對(duì)的,一個(gè)是錯(cuò)的,而兩段代碼不同的僅僅是變量聲明順序不同。換下順序就能很穩(wěn)定的重現(xiàn)

u8 num_h,num_l; 這個(gè)正常
u8 num_l,num_h; 這個(gè)異常

很打擊學(xué)習(xí)積極性啊~ 肯求高手說(shuō)下。多謝

結(jié)果正常 代碼如下:
  1. void showNum(u8 bit_b,u8 seg_s)
  2. {
  3.         u8 num_h,num_l;
  4.         
  5.         num_l=seg_s%10;
  6.         num_h=seg_s/10;
  7.         if(bit_b==1)
  8.         {        
  9.                 display_led(1,num_h);
  10.                 delay(2);
  11.                 display_led(0,num_l);
  12.                 delay(2);
  13.         }
  14.         if(bit_b==2)
  15.         {        
  16.                 display_led(4,num_h);
  17.                 delay(2);
  18.                 display_led(3,num_l);
  19.                 delay(2);
  20.         }
  21.         if(bit_b==3)
  22.         {         
  23.                 display_led(7,num_h);
  24.                 delay(2);
  25.                 display_led(6,num_l);
  26.                 delay(2);
  27.         }        
  28.         
  29. }
復(fù)制代碼
結(jié)果如圖:







異常代碼如下:
  1. void showNum(u8 bit_b,u8 seg_s)
  2. {
  3.         u8 num_l,num_h;
  4.         
  5.         num_l=seg_s%10;
  6.         num_h=seg_s/10;
  7.         if(bit_b==1)
  8.         {        
  9.                 display_led(1,num_h);
  10.                 delay(2);
  11.                 display_led(0,num_l);
  12.                 delay(2);
  13.         }
  14.         if(bit_b==2)
  15.         {        
  16.                 display_led(4,num_h);
  17.                 delay(2);
  18.                 display_led(3,num_l);
  19.                 delay(2);
  20.         }
  21.         if(bit_b==3)
  22.         {         
  23.                 display_led(7,num_h);
  24.                 delay(2);
  25.                 display_led(6,num_l);
  26.                 delay(2);
  27.         }        
  28.         
  29. }
復(fù)制代碼
結(jié)果:


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:308107 發(fā)表于 2018-4-14 17:47 | 只看該作者
能不能上傳完整程序?
回復(fù)

使用道具 舉報(bào)

板凳
ID:285031 發(fā)表于 2018-4-14 17:48 | 只看該作者
我也是剛剛學(xué)習(xí)51單片機(jī),我覺(jué)得就函數(shù)內(nèi)部變量聲明順序應(yīng)該沒(méi)有關(guān)系,針對(duì)你的問(wèn)題我可能沒(méi)有滿意的答案。其他方面可以提一些建議。可以買(mǎi)一個(gè)單片機(jī),還是用實(shí)際單片機(jī)進(jìn)行測(cè)試比較好。51單片機(jī)有正版的編程環(huán)境,可以上keil官網(wǎng)下載,現(xiàn)在單片機(jī)都是EEPROM,寫(xiě)程序都很方便,還是用實(shí)際單片機(jī)調(diào)試靠譜。我用我的實(shí)際單片機(jī)調(diào)試就沒(méi)有問(wèn)題。而且用仿真軟件是很有弊端的,第一非正版會(huì)有很多bug,而且有的時(shí)候?qū)嶋H電路和仿真電路會(huì)有差別。

評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:237354 發(fā)表于 2018-4-14 18:11 | 只看該作者
在定義函數(shù)時(shí)指定參數(shù)類(lèi)型試試!參數(shù)是通過(guò)堆棧傳遞的,類(lèi)型不對(duì)有可能引起參數(shù)誤讀

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表