標(biāo)題: 關(guān)于51單片機變量的聲明順序會影響結(jié)果,一個費解的錯誤 [打印本頁]

作者: guigulang    時間: 2018-4-14 16:40
標(biāo)題: 關(guān)于51單片機變量的聲明順序會影響結(jié)果,一個費解的錯誤
本人初學(xué)51單片機,跟著網(wǎng)上教程自學(xué),學(xué)到碼表程序編寫。在寫的過程中發(fā)一個問題無法解釋,故發(fā)出來求問高手?偟膩碚f就是發(fā)現(xiàn)變量的聲明順序會影響結(jié)果。下面代碼的仿真結(jié)果,一個是對的,一個是錯的,而兩段代碼不同的僅僅是變量聲明順序不同。換下順序就能很穩(wěn)定的重現(xiàn)

u8 num_h,num_l; 這個正常
u8 num_l,num_h; 這個異常

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

結(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é)果:



作者: wangjing2380    時間: 2018-4-14 17:47
能不能上傳完整程序?
作者: jielness    時間: 2018-4-14 17:48
我也是剛剛學(xué)習(xí)51單片機,我覺得就函數(shù)內(nèi)部變量聲明順序應(yīng)該沒有關(guān)系,針對你的問題我可能沒有滿意的答案。其他方面可以提一些建議?梢再I一個單片機,還是用實際單片機進行測試比較好。51單片機有正版的編程環(huán)境,可以上keil官網(wǎng)下載,現(xiàn)在單片機都是EEPROM,寫程序都很方便,還是用實際單片機調(diào)試靠譜。我用我的實際單片機調(diào)試就沒有問題。而且用仿真軟件是很有弊端的,第一非正版會有很多bug,而且有的時候?qū)嶋H電路和仿真電路會有差別。
作者: oohoh    時間: 2018-4-14 18:11
在定義函數(shù)時指定參數(shù)類型試試!參數(shù)是通過堆棧傳遞的,類型不對有可能引起參數(shù)誤讀




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1