机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 5214|回复: 15
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2013-8-16 02:13:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
6 w) s) Y& Y" L7 D #include <reg51.h>1 d0 G+ E2 \, i) S6 \0 l9 B
  sbit led=P0^0;
! `& z3 \" ]0 V" t; V5 t  sbit led1=P0^1;
) g* o  T6 N7 w8 B, m% V. T, x6 i5 z  sbit led2=P0^2;
, [# h3 @( I, R4 E( U  sbit led3=P0^3; + N1 w: x3 B$ p; Q' l1 l
  sbit led4=P0^4;
  g1 ~! E* c9 k; [9 ?  sbit led5=P0^5; 2 r# U9 ?% @& w% x: N
  sbit led6=P0^6;
, z  [* T# L; m1 A  sbit led7=P0^7;
5 Z, P1 [+ i1 Z2 Y  c  sbit ADDR0=P1^0;2 l" `4 D2 r) ~" q
  sbit ADDR1=P1^1;4 ~3 r/ P) f- A* z7 y
  sbit ADDR2=P1^2;
' Q3 U7 D! C* D  l2 _6 K0 J  sbit ADDR3=P1^3;
9 E6 @% n# N, S( u* R7 j; a! ?- a& n; M  sbit ENLED=P1^4;
3 Z9 W* ?( ~: H) y3 D; C0 T8 |  main()
' P  k3 q8 i% g* n, r- h1 Z$ {  { ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;ENLED=0;
2 ~# \: d9 ~7 H( S2 V/ {    while(1)
9 h: ]1 {7 [/ o: J( C6 m    {  led=0;led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;
" M- o3 F$ ^* ?+ f$ Y& i6 P; M }
  ~  M" O4 F& a4 u8 C  }
0 j* T( s0 x, d% O$ l2 r+ C/ g我想问while(1)是一个函数吗,他后面有{  }符号
0 ~9 [  M# B* r/ U2 X; s
回复

使用道具 举报

2#
 楼主| 发表于 2013-8-16 02:20:43 | 只看该作者
半年前就有打算自学单片机,今晚突然有所参透,兴致大起,写了上面一段程序while(1),调试没问题,可是就是没法达到预期的效果,于是把“while(1);”后的“;”去了就可以了。      keil软件还是不够智能啊
回复 支持 反对

使用道具 举报

3#
发表于 2013-8-16 08:14:45 | 只看该作者
唉!20年前学的单板机一直没怎么用现在都忘了
回复 支持 反对

使用道具 举报

4#
发表于 2013-8-16 08:17:18 | 只看该作者
本帖最后由 奇_点 于 2013-8-16 08:31 编辑
/ Y( N1 r- c, a1 {0 i
  P# e& l. O# l4 ewhile循环语句循环体假如是代码块则不带;这是基本语法...先看会书再写
回复 支持 反对

使用道具 举报

5#
发表于 2013-8-16 08:40:50 | 只看该作者
这是死循环吗
回复 支持 反对

使用道具 举报

6#
发表于 2013-8-16 08:43:26 | 只看该作者
如果不去‘;’是空循环,一直在while那里。如果去掉‘;’就一直循环花括号内的代码,所以keill没报错。是吗?

点评

应该是  发表于 2013-8-16 11:46
回复 支持 反对

使用道具 举报

7#
发表于 2013-8-16 08:52:03 | 只看该作者
while(1) 虽说是个死循环,但是单片机的程序循环控制的意义所在,如若不然,程序只去年一次便结束了。
* D7 u, l& H. h" G) C
% z- f) \5 f1 k6 x  T顶楼上,若去掉的话,只显示警告,不会报错。仍可编译。

点评

你所说的故障死循环,与人为设置的死循环不一样。 不知道你从哪儿得到的“程序就会一直在0~255件循环”,从未听说过,也不理解。  发表于 2013-8-19 12:55
unsigned char型的变量是8字节的。当你的程序里的unsigned char变量的值超过255时,程序就会一直在0~255件循环,文件就会无穷大。while(1)语句同样是死循环,文件却不大,有人能解释一下吗。  发表于 2013-8-16 11:56
回复 支持 反对

使用道具 举报

8#
发表于 2013-8-16 10:03:29 | 只看该作者
循环体
回复 支持 反对

使用道具 举报

9#
发表于 2013-8-16 11:23:24 | 只看该作者
while(1)  xxxxx;    while(1)  {}   都是while的用法,前面是一句程序才可以那么写,如果 while循环体要实现很多内容就需要后一种用法了,你在while后面直接加;,那表示程序就运行到while+空  就完事了 并没有向后循环。
回复 支持 反对

使用道具 举报

10#
发表于 2013-8-16 11:24:54 | 只看该作者
keil是会提示你“;”后面的语句不能执行到,但是不是错误,仍然可以运行,并不是keil的问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-12-19 12:01 , Processed in 0.053735 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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