Keil果然如神一般的编译器!

[复制链接]
24847|105
 楼主| 291355171 发表于 2012-6-29 09:16 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#include"delay.h" //延时
#include"ms.h" //延时
sbit D1=P1^0;
uint aa;
void main()
{
D1=0;
delay(100);
D1=1;
ms(100);
}
按照道理来说,程序会停在MS语句上(注意没有while)。但是下载到板子以后观察才知道程序他没有停,D1继续在闪。注意这不是亮点。

我本以为是我记错了木有while他也是会循环的,于是我变在MS后面又加了这句
aa++;
if(aa>=10)
{
  D1=0;
  while(1);

这时我便想这下你总该停了把,于是我便往板子上一下,才知道,尼玛他在那闪,他在那闪,他就是不停。我顿时凌乱。。。。。
求解,求科学普及,此事严重的颠覆了我的认知。是我被书误导,还是我理解错误。还是这个软件的编译器太疯狂???
求解。求科学普及。。。。。。。
 楼主| 291355171 发表于 2012-6-29 09:17 | 显示全部楼层
本帖最后由 291355171 于 2012-7-4 12:56 编辑

问题已经解决。



详情请看23楼和100楼。。。。。
kongjw 发表于 2012-6-29 09:22 | 显示全部楼层
不要轻易怀疑编译器,可能程序修改以后,忘记编译,或者下载不成功,运行的还是老程序。
xxlin1984 发表于 2012-6-29 09:37 | 显示全部楼层
把最简化的工程文件传上来,大家会验证的。
估计99.9999999%LZ是错的。
holle 发表于 2012-6-29 10:36 | 显示全部楼层
看门狗复位了吧
hall 发表于 2012-6-29 10:47 | 显示全部楼层
应该是每次main执行完一次之后 aa就清零了。
hall 发表于 2012-6-29 10:48 | 显示全部楼层
把aa定义成静态局部变量就好了
yzjgod 发表于 2012-6-29 10:56 | 显示全部楼层
程序都跑飞了,出现各种诡异情况有什么好奇怪的,而且你后加的那个while程序根本没进去
jack821119 发表于 2012-6-29 11:13 | 显示全部楼层
没有用while结束的话,程序的会不断的软复位运行的,所以就会看到LED灯在猛闪.
 楼主| 291355171 发表于 2012-6-29 11:17 | 显示全部楼层
3# kongjw

我特意的注意了下,编译,下载,运行。闪。。。。。。。
boss123 发表于 2012-6-29 11:17 | 显示全部楼层
哥,你的aa没在主程序里面,根本就没加进去嘛~~
 楼主| 291355171 发表于 2012-6-29 11:18 | 显示全部楼层
把最简化的工程文件传上来,大家会验证的。
估计99.9999999%LZ是错的。
xxlin1984 发表于 2012-6-29 09:37


就这么一个简单的程序,就这么多。。。:L ,MS,就是一个延时,DELAY也是只是一个延时。
 楼主| 291355171 发表于 2012-6-29 11:19 | 显示全部楼层
1. 没有while程序会自然下跑. 没有任何C编译器会停在ms...
2. a赋值了没??
qinxg 发表于 2012-6-29 10:12

我给A定义了一个unsigned int 的一个变量。没有赋值。不是说默认为0么》?
 楼主| 291355171 发表于 2012-6-29 11:20 | 显示全部楼层
看门狗复位了吧
holle 发表于 2012-6-29 10:36


俺没启动看门狗!!!
 楼主| 291355171 发表于 2012-6-29 11:20 | 显示全部楼层
9# yzjgod

和见跑飞?
 楼主| 291355171 发表于 2012-6-29 11:22 | 显示全部楼层
没有用while结束的话,程序的会不断的软复位运行的,所以就会看到LED灯在猛闪.
jack821119 发表于 2012-6-29 11:13

如果我没记错的话,不是说没有while大循环的话,程序就会运行一遍,然后停止的吗?他会自动软复位?而且在没有人操作的情况下?
zizzfish 发表于 2012-6-29 11:32 | 显示全部楼层
软件一直在复位啊!
amwrdfe 发表于 2012-6-29 11:41 | 显示全部楼层
这种问题貌似在论坛上已经讨论N多次了。
关键字,pc指针,
就算你下面没代码,
pc指针也会一直跑,直到溢出-->>重新从0x0000开始
vrgood 发表于 2012-6-29 11:46 | 显示全部楼层
本帖最后由 vrgood 于 2012-6-29 11:49 编辑

基础啊基础,哪本书如此误导楼主?
建议LZ用KEIL的DEBUG,观察汇编的结果,也许可以明白人家的答复。
 楼主| 291355171 发表于 2012-6-29 11:59 | 显示全部楼层
这种问题貌似在论坛上已经讨论N多次了。
关键字,pc指针,
就算你下面没代码,
pc指针也会一直跑,直到溢出-->>重新从0x0000开始
amwrdfe 发表于 2012-6-29 11:41


这位仁兄的意思是不是说。虽然我程序里没有循环结构。
但是我的指针,确是在加,指针每加一,我的程序就运行一条指令,不管我有没有循环,我的指针是一直在加的,如此循环,溢出以后就从头开始运行整个程序,等于复位了。

不知道我理解的有没有错?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:本ID已不用,以后只用:<Yang_Jia>这个号。

0

主题

1148

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部