找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6766|回复: 15

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

[复制链接]
发表于 2013-8-16 02:13:11 | 显示全部楼层 |阅读模式
程序如下:
2 b: u5 z2 W" b* X #include <reg51.h>
% v% _& m0 T# N5 e( ?  sbit led=P0^0;$ S& `# e- J7 ~# w9 k2 ?& i
  sbit led1=P0^1;. g/ ^: S) z4 k) ?4 |
  sbit led2=P0^2;
, E, F8 k( ~+ [; t. \3 D  sbit led3=P0^3;
/ b: a& ~' X0 d  R/ ^" ?  sbit led4=P0^4;
0 C: t8 r; m& x2 X1 O2 T: _4 o1 {2 k  sbit led5=P0^5;
( V4 C' f  |; P4 [. R  sbit led6=P0^6;
: A7 n, J9 N0 D$ ^  sbit led7=P0^7;
7 v; L2 C+ H3 ?7 o& `  sbit ADDR0=P1^0;) N: @- y( Z1 Q8 G: a' b& Q
  sbit ADDR1=P1^1;
; c; s. f3 O4 ~( K3 G; R- Q  sbit ADDR2=P1^2;
6 Y4 `" I1 G9 ^# C+ y  sbit ADDR3=P1^3;
" F% c/ @0 G0 y  sbit ENLED=P1^4;( v; Q* r1 c0 L, h
  main()
3 a2 V) _8 y" i% Q  { ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;ENLED=0;- L# Y+ Y  H' x5 I$ Q3 e; T
    while(1)
# K1 m5 w: ?1 O+ x. w7 F1 B5 b' K3 J! H    {  led=0;led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;  G4 B' J" P" [
}
+ D  t9 e' }6 @; U# ^  } 5 v, L/ M  D7 q$ h- ^, Q3 ~( X  m7 l
我想问while(1)是一个函数吗,他后面有{  }符号
" p5 W; M1 ?9 S' p
回复

使用道具 举报

 楼主| 发表于 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 编辑
# t. X5 v8 W3 m& k1 T1 h
! g0 Q3 E' _, h0 m! t0 ~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) 虽说是个死循环,但是单片机的程序循环控制的意义所在,如若不然,程序只去年一次便结束了。' B9 q/ w. n  N4 w7 M- W

/ U& D" Y% I" n6 J% L顶楼上,若去掉的话,只显示警告,不会报错。仍可编译。

点评

你所说的故障死循环,与人为设置的死循环不一样。 不知道你从哪儿得到的“程序就会一直在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-7-12 11:30 , Processed in 0.096028 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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