机械必威体育网址

标题: 一个“单片机”的简单问题 [打印本页]

作者: 盗墓笔记-推理    时间: 2013-8-16 02:13
标题: 一个“单片机”的简单问题
程序如下:  J; I0 {% t  ]0 }+ E3 t; y
#include <reg51.h>
; l* n+ i0 S7 C3 S1 b; H  sbit led=P0^0;
" t) ?* }# _% J0 Y$ y( u+ e  sbit led1=P0^1;
0 g' Z- |) k2 r/ ^1 n$ C* }  sbit led2=P0^2;
8 ~* c2 g8 i% }' N. I' t  sbit led3=P0^3; 1 O$ p2 ]5 t/ _$ ?
  sbit led4=P0^4;
% \3 F( B, O& @$ L* [7 o0 W  sbit led5=P0^5;
( ]7 Q: b* h4 Q/ C8 E/ ^4 k; f  sbit led6=P0^6;
! l9 z8 V* q$ j" B; ~# C7 L  sbit led7=P0^7;
9 ~) N+ {8 U) @5 a  sbit ADDR0=P1^0;
: J( B* ^; b$ Q  sbit ADDR1=P1^1;
8 b7 O6 A) v0 G$ @0 i# b  sbit ADDR2=P1^2;
2 o) X3 D. s) j- J  sbit ADDR3=P1^3;8 D8 G6 Z$ f* T
  sbit ENLED=P1^4;
6 ?$ L" j7 Q1 @  main()7 e+ Z! V7 V4 {& W5 Y8 z8 R
  { ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;ENLED=0;8 K9 g* ?0 p. J$ n9 k2 ]+ i$ n
    while(1)
; n. m$ i: q1 z  T/ l8 I* ]$ h    {  led=0;led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;
+ o/ ~- Y9 Q% l* Y5 h }
+ K, }9 }1 ^$ M$ Y  }
: T- l4 \6 ^9 U/ C2 `7 D我想问while(1)是一个函数吗,他后面有{  }符号
1 e" ~/ V, W4 I- |
作者: 盗墓笔记-推理    时间: 2013-8-16 02:20
半年前就有打算自学单片机,今晚突然有所参透,兴致大起,写了上面一段程序while(1),调试没问题,可是就是没法达到预期的效果,于是把“while(1);”后的“;”去了就可以了。      keil软件还是不够智能啊
作者: 天天他爸    时间: 2013-8-16 08:14
唉!20年前学的单板机一直没怎么用现在都忘了
作者: 奇_点    时间: 2013-8-16 08:17
本帖最后由 奇_点 于 2013-8-16 08:31 编辑 / t( l, g" J9 k6 B
# D3 P( f& u# ~# Y- f
while循环语句循环体假如是代码块则不带;这是基本语法...先看会书再写
作者: 中等公差belee    时间: 2013-8-16 08:40
这是死循环吗
作者: 中等公差belee    时间: 2013-8-16 08:43
如果不去‘;’是空循环,一直在while那里。如果去掉‘;’就一直循环花括号内的代码,所以keill没报错。是吗?
作者: kerrwang    时间: 2013-8-16 08:52
while(1) 虽说是个死循环,但是单片机的程序循环控制的意义所在,如若不然,程序只去年一次便结束了。" C- B* ~! r5 R' ?3 Z: f3 \

4 U* z0 O4 B; c. x! Z9 v顶楼上,若去掉的话,只显示警告,不会报错。仍可编译。
作者: bbtfcjy    时间: 2013-8-16 10:03
循环体
作者: liuzhongkai123    时间: 2013-8-16 11:23
while(1)  xxxxx;    while(1)  {}   都是while的用法,前面是一句程序才可以那么写,如果 while循环体要实现很多内容就需要后一种用法了,你在while后面直接加;,那表示程序就运行到while+空  就完事了 并没有向后循环。
作者: liuzhongkai123    时间: 2013-8-16 11:24
keil是会提示你“;”后面的语句不能执行到,但是不是错误,仍然可以运行,并不是keil的问题
作者: michelfei    时间: 2013-8-16 15:30
while(1)是一个死循环语句,程序走到这步后就会不停的执行后面{}内的语句,除非你后面在写个中断入口,或者等待外部中断。
作者: 逍遥处士    时间: 2013-8-18 15:22
给楼主一道题:
) I) z$ o5 T" u  L" {
2 t) h' w* ?/ `6 Tint func_a(int a)
! r1 A9 @6 s: z{
6 W! U6 ?7 |1 v! a% T5 T        a++;
% @5 l' v8 I4 Z$ `* _5 }        return a;
5 G! T8 ^9 O" Z+ i}0 v) W9 d2 M  S( \9 J: h8 _3 B
: t/ q! m0 D7 {( q) j
int func_b(int& a)- _6 T2 f& b6 \1 F4 a  R0 p
{* B% v2 @+ _8 z3 A0 y
        a++;
3 _' Z' x! z+ G' v7 N2 L2 b5 w        return a;( k* n/ d$ M; q7 j$ M, I- S7 |3 }1 f  L
}3 ~7 Q3 x/ J  q' z; ~
  k  G% e6 J" l* q* J. f
int main()
7 z2 T& `( J! M8 ?{
9 |9 _" m+ t$ g: ]  \4 ~- `& ^        a = 1;
: |- a/ b: V, W: ?* G        int b, c, d;
% j- R" H8 k0 L/ N        b = func_a(a);- n( u, s% {# @; f( j
        c = func_b(a);
/ ?! ^5 d& |( H$ H' x" Z3 u        d = a;
0 x; L0 Z& a+ v0 d0 p}
+ m0 _- _7 k) X, P" k7 G# G0 x, ~; H0 c2 m! l8 |- F& n# y2 R
请问:4 S; s' ~- ?; H7 k8 N( n* G4 o  [; @
b=?
& f$ Q6 V8 P* Z* Rc=?
! U9 W- a1 Y! Hd=?
作者: 昨日明月    时间: 2013-8-18 15:52
逍遥处士 发表于 2013-8-18 15:22
  K( g( k) v, f2 x* P给楼主一道题:0 M/ ?' H7 N# L/ X0 c. O. y' r! W
6 g; Z  B5 X. k2 \  d# S1 Z
int func_a(int a)
0 @& z# ?( ^, v
1,2,2  ?
作者: kerrwang    时间: 2013-8-19 13:07
逍遥处士 发表于 2013-8-18 15:22
& w7 z$ r7 G; ^5 |) l; A6 l7 D) `3 O给楼主一道题:
3 C7 u5 Q: [1 ]3 s( r- W
" K: x: A8 F" z& Cint func_a(int a)
0 a: z. w, S* l, a6 p+ t" X
b=2,c=0,d=2
& ~8 {9 P& z1 D2 i' l9 r( v) b
作者: bbtfcjy    时间: 2013-8-19 23:39
六楼说的对
作者: fmdd    时间: 2013-8-20 00:14
while(1);  是空的死循环$ e$ A( P" m6 x9 F; S! P
while(1) {} 是执行{}内的指令的死循环




欢迎光临 机械必威体育网址 (//www.szfco.com/) Powered by Discuz! X3.4