找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 7035|回复: 15

一个“单片机”的简单问题

[复制链接]
发表于 2013-8-16 02:13:11 | 显示全部楼层 |阅读模式
程序如下:
7 P* R  T& J/ _( U% b  r #include <reg51.h>1 T7 ]6 ]. B# Z$ u3 `  T3 K
  sbit led=P0^0;
! {% X( `( T) b( C" W( ^' ^; h4 G3 d  sbit led1=P0^1;
+ ]6 ^6 C* B; `, R  Y8 l. |  sbit led2=P0^2;
8 c( T! F+ l) o; K3 h5 ^+ s  sbit led3=P0^3; : L5 n& i' V3 @! @, _) D& n- r
  sbit led4=P0^4;, ^7 L4 r/ O5 D
  sbit led5=P0^5;
+ c7 P  X+ f6 p9 o  B% [  sbit led6=P0^6;
4 n6 Z0 A4 F' N3 ~9 @; N3 Q  sbit led7=P0^7;0 D4 L& D% T2 u  w/ D4 V
  sbit ADDR0=P1^0;
- _+ T) H6 g' X; r  sbit ADDR1=P1^1;8 N9 \' c9 }9 J( D+ {
  sbit ADDR2=P1^2;& O2 ^% C5 e) z; `( @
  sbit ADDR3=P1^3;
; |- `' F, J; c4 J, T  sbit ENLED=P1^4;; [+ {* T1 G+ y* ]" p! o
  main()8 W4 I( M' e/ }. N, z$ }
  { ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;ENLED=0;- t% i% |4 Q( H) F  ^' x
    while(1)' y- ~- {9 ?$ o
    {  led=0;led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;, P0 Z' Z8 M4 I! D$ I) T
}
: D3 Y' g; F5 o) y2 d  }
: E( s. A, Z' t$ c, g; a$ @" ]我想问while(1)是一个函数吗,他后面有{  }符号0 b& b1 S# V  v# m; P: y+ h% G
回复

使用道具 举报

 楼主| 发表于 2013-8-16 02:20:43 | 显示全部楼层
半年前就有打算自学单片机,今晚突然有所参透,兴致大起,写了上面一段程序while(1),调试没问题,可是就是没法达到预期的效果,于是把“while(1);”后的“;”去了就可以了。      keil软件还是不够智能啊
发表于 2013-8-16 08:14:45 | 显示全部楼层
唉!20年前学的单板机一直没怎么用现在都忘了
发表于 2013-8-16 08:17:18 | 显示全部楼层
本帖最后由 奇_点 于 2013-8-16 08:31 编辑 3 j$ a$ P, l7 I& e6 T5 f, A/ v
2 ]/ J0 X: T$ `- I3 U
while循环语句循环体假如是代码块则不带;这是基本语法...先看会书再写
发表于 2013-8-16 08:40:50 | 显示全部楼层
这是死循环吗
发表于 2013-8-16 08:43:26 | 显示全部楼层
如果不去‘;’是空循环,一直在while那里。如果去掉‘;’就一直循环花括号内的代码,所以keill没报错。是吗?

点评

应该是  发表于 2013-8-16 11:46
发表于 2013-8-16 08:52:03 | 显示全部楼层
while(1) 虽说是个死循环,但是单片机的程序循环控制的意义所在,如若不然,程序只去年一次便结束了。7 A: I% h& M3 c% e8 R" C2 D- H
1 c) O: C0 e# @* h, o: Z
顶楼上,若去掉的话,只显示警告,不会报错。仍可编译。

点评

你所说的故障死循环,与人为设置的死循环不一样。 不知道你从哪儿得到的“程序就会一直在0~255件循环”,从未听说过,也不理解。  发表于 2013-8-19 12:55
unsigned char型的变量是8字节的。当你的程序里的unsigned char变量的值超过255时,程序就会一直在0~255件循环,文件就会无穷大。while(1)语句同样是死循环,文件却不大,有人能解释一下吗。  发表于 2013-8-16 11:56
发表于 2013-8-16 10:03:29 | 显示全部楼层
循环体
发表于 2013-8-16 11:23:24 | 显示全部楼层
while(1)  xxxxx;    while(1)  {}   都是while的用法,前面是一句程序才可以那么写,如果 while循环体要实现很多内容就需要后一种用法了,你在while后面直接加;,那表示程序就运行到while+空  就完事了 并没有向后循环。
发表于 2013-8-16 11:24:54 | 显示全部楼层
keil是会提示你“;”后面的语句不能执行到,但是不是错误,仍然可以运行,并不是keil的问题
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-8-27 16:03 , Processed in 0.076645 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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