找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1568|回复: 3
收起左侧

关于51单片机变量的声明顺序会影响结果,一个费解的错误

[复制链接]
ID:308052 发表于 2018-4-14 16:40 | 显示全部楼层 |阅读模式
本人初学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. }
复制代码
结果如图:




微信截图_20180414163255.png


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

222.png
回复

使用道具 举报

ID:308107 发表于 2018-4-14 17:47 | 显示全部楼层
能不能上传完整程序?
回复

使用道具 举报

ID:285031 发表于 2018-4-14 17:48 | 显示全部楼层
我也是刚刚学习51单片机,我觉得就函数内部变量声明顺序应该没有关系,针对你的问题我可能没有满意的答案。其他方面可以提一些建议。可以买一个单片机,还是用实际单片机进行测试比较好。51单片机有正版的编程环境,可以上keil官网下载,现在单片机都是EEPROM,写程序都很方便,还是用实际单片机调试靠谱。我用我的实际单片机调试就没有问题。而且用仿真软件是很有弊端的,第一非正版会有很多bug,而且有的时候实际电路和仿真电路会有差别。

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:237354 发表于 2018-4-14 18:11 | 显示全部楼层
在定义函数时指定参数类型试试!参数是通过堆栈传递的,类型不对有可能引起参数误读

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表