标题: 关于51单片机变量的声明顺序会影响结果,一个费解的错误 [打印本页]

作者: guigulang    时间: 2018-4-14 16:40
标题: 关于51单片机变量的声明顺序会影响结果,一个费解的错误
本人初学51单片机,跟着网上教程自学,学到码表程序编写。在写的过程中发一个问题无法解释,故发出来求问高手。总的来说就是发现变量的声明顺序会影响结果。下面代码的仿真结果,一个是对的,一个是错的,而两段代码不同的仅仅是变量声明顺序不同。换下顺序就能很稳定的重现

u8 num_h,num_l; 这个正常
u8 num_l,num_h; 这个异常

很打击学习积极性啊~ 肯求高手说下。多谢

结果正常 代码如下:
  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. }
复制代码
结果如图:







异常代码如下:
  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. }
复制代码
结果:



作者: wangjing2380    时间: 2018-4-14 17:47
能不能上传完整程序?
作者: jielness    时间: 2018-4-14 17:48
我也是刚刚学习51单片机,我觉得就函数内部变量声明顺序应该没有关系,针对你的问题我可能没有满意的答案。其他方面可以提一些建议。可以买一个单片机,还是用实际单片机进行测试比较好。51单片机有正版的编程环境,可以上keil官网下载,现在单片机都是EEPROM,写程序都很方便,还是用实际单片机调试靠谱。我用我的实际单片机调试就没有问题。而且用仿真软件是很有弊端的,第一非正版会有很多bug,而且有的时候实际电路和仿真电路会有差别。
作者: oohoh    时间: 2018-4-14 18:11
在定义函数时指定参数类型试试!参数是通过堆栈传递的,类型不对有可能引起参数误读




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1