打印

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

[复制链接]
22677|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是错的。

使用特权

评论回复
5
holle| | 2012-6-29 10:36 | 只看该作者
看门狗复位了吧

使用特权

评论回复
6
hall| | 2012-6-29 10:47 | 只看该作者
应该是每次main执行完一次之后 aa就清零了。

使用特权

评论回复
7
hall| | 2012-6-29 10:48 | 只看该作者
把aa定义成静态局部变量就好了

使用特权

评论回复
8
yzjgod| | 2012-6-29 10:56 | 只看该作者
程序都跑飞了,出现各种诡异情况有什么好奇怪的,而且你后加的那个while程序根本没进去

使用特权

评论回复
9
jack821119| | 2012-6-29 11:13 | 只看该作者
没有用while结束的话,程序的会不断的软复位运行的,所以就会看到LED灯在猛闪.

使用特权

评论回复
10
291355171|  楼主 | 2012-6-29 11:17 | 只看该作者
3# kongjw

我特意的注意了下,编译,下载,运行。闪。。。。。。。

使用特权

评论回复
11
boss123| | 2012-6-29 11:17 | 只看该作者
哥,你的aa没在主程序里面,根本就没加进去嘛~~

使用特权

评论回复
12
291355171|  楼主 | 2012-6-29 11:18 | 只看该作者
把最简化的工程文件传上来,大家会验证的。
估计99.9999999%LZ是错的。
xxlin1984 发表于 2012-6-29 09:37


就这么一个简单的程序,就这么多。。。:L ,MS,就是一个延时,DELAY也是只是一个延时。

使用特权

评论回复
13
291355171|  楼主 | 2012-6-29 11:19 | 只看该作者
1. 没有while程序会自然下跑. 没有任何C编译器会停在ms...
2. a赋值了没??
qinxg 发表于 2012-6-29 10:12

我给A定义了一个unsigned int 的一个变量。没有赋值。不是说默认为0么》?

使用特权

评论回复
14
291355171|  楼主 | 2012-6-29 11:20 | 只看该作者
看门狗复位了吧
holle 发表于 2012-6-29 10:36


俺没启动看门狗!!!

使用特权

评论回复
15
291355171|  楼主 | 2012-6-29 11:20 | 只看该作者
9# yzjgod

和见跑飞?

使用特权

评论回复
16
291355171|  楼主 | 2012-6-29 11:22 | 只看该作者
没有用while结束的话,程序的会不断的软复位运行的,所以就会看到LED灯在猛闪.
jack821119 发表于 2012-6-29 11:13

如果我没记错的话,不是说没有while大循环的话,程序就会运行一遍,然后停止的吗?他会自动软复位?而且在没有人操作的情况下?

使用特权

评论回复
17
zizzfish| | 2012-6-29 11:32 | 只看该作者
软件一直在复位啊!

使用特权

评论回复
18
amwrdfe| | 2012-6-29 11:41 | 只看该作者
这种问题貌似在论坛上已经讨论N多次了。
关键字,pc指针,
就算你下面没代码,
pc指针也会一直跑,直到溢出-->>重新从0x0000开始

使用特权

评论回复
19
vrgood| | 2012-6-29 11:46 | 只看该作者
本帖最后由 vrgood 于 2012-6-29 11:49 编辑

基础啊基础,哪本书如此误导楼主?
建议LZ用KEIL的DEBUG,观察汇编的结果,也许可以明白人家的答复。

使用特权

评论回复
20
291355171|  楼主 | 2012-6-29 11:59 | 只看该作者
这种问题貌似在论坛上已经讨论N多次了。
关键字,pc指针,
就算你下面没代码,
pc指针也会一直跑,直到溢出-->>重新从0x0000开始
amwrdfe 发表于 2012-6-29 11:41


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

不知道我理解的有没有错?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

0

主题

1148

帖子

1

粉丝