打印

闪烁灯程序疑问

[复制链接]
2010|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wyg0216|  楼主 | 2011-12-24 12:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
sbit D1=P1^7;
void delay(void)
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
D1=0;
delay();
D1=1;
delay();
}
源程序有一个while(1){
D1=0;
delay();
D1=1;
delay();}
我现在烧到单片机里得到的结果是一样的,灯一直在闪。
我的疑问是
void main(void)
{
D1=0;
delay();
D1=1;
delay();
} 灯先亮,延时,灭,延时。应该就结束了。可是为什么还在闪呢?
请有经验的大侠指教一下。
先谢谢了

相关帖子

沙发
dengm| | 2011-12-24 13:03 | 只看该作者
加:
L_STOP:    goto L_STOP;
在 main() 的最后。

使用特权

评论回复
板凳
wyg0216|  楼主 | 2011-12-24 14:15 | 只看该作者
谢谢2L。但是我的问题是为什么会闪?程序的流程是?

使用特权

评论回复
地板
wyg0216|  楼主 | 2011-12-24 14:50 | 只看该作者
再就是为什么加一个WHILE(1)???不加不是一样吗??

使用特权

评论回复
5
ychw1986| | 2011-12-24 17:13 | 只看该作者
有的单片机不是运行到结尾又返回去的

使用特权

评论回复
6
q1074926748| | 2011-12-24 23:05 | 只看该作者
一般来说规范的程序是 要加上那个while(1)的。你要让他不闪,最后可以给P口赋值

使用特权

评论回复
7
zxcscm| | 2011-12-25 13:28 | 只看该作者
这是跟keil编译有关 若不加while(1)编译后的汇编最后一句肯定是LJMP 00xx,跳到程序起始位置使程序反复执行
这就说说若程序中没有类似while(1)的死循环,编译器keil会自动给加上

使用特权

评论回复
8
wyg0216|  楼主 | 2011-12-25 18:50 | 只看该作者
:)
谢谢七楼,我已了解。

使用特权

评论回复
9
huangqi412| | 2011-12-25 20:15 | 只看该作者
:L

使用特权

评论回复
10
huangqi412| | 2011-12-25 20:15 | 只看该作者
:L

使用特权

评论回复
11
wukunshan| | 2011-12-26 14:11 | 只看该作者
:L

使用特权

评论回复
12
dooaoo| | 2012-2-16 11:59 | 只看该作者
这个我没看太明白,有哪位能再解释一下么?

使用特权

评论回复
13
ghpzhu| | 2012-2-16 12:19 | 只看该作者
看看编译后的汇编代码是什么样子的应该就清楚了。

使用特权

评论回复
14
akymdklsa| | 2012-2-16 12:29 | 只看该作者
这个好像是程序运行结束后,若没有死循环使程序停留,程序会自动转到主程序起始处重新执行,就产生了循环的效果

使用特权

评论回复
15
xieshenkui| | 2012-2-16 14:18 | 只看该作者
不要乱想,什么编译器呀,单片机呀的问题,有很多东西说不清楚,你只要有办法解决掉,以后按个这思路来编程就OK了。

使用特权

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

本版积分规则

8

主题

58

帖子

0

粉丝