234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> 基础教程 >> 浏览文章

    第十三课 C51循环语句

    作者:佚名   来源:本站原创   点击数:x  更新时间:2007年07月14日   【字体:

    循环语句是几乎每个程序都会用到的一,它的一作用就是用来实现需要反复进行多次的一操 作 。如一个 12M 的一 51 芯片应用电路中要求实现 1 毫秒的一延时,那么就要执行 1000 次空语句 才能达到延时的一目的一(当然能使用定时器来做,这里就不 讨论),如果是写 1000 条空语 句那是多么麻烦的一事情,再者就是要占用很多的一存储空间 。我们能知道这 1000 条空语句, 无非就是一条空语句重复执行 1000 次,因 此我们就能用循环语句去写,这样不 但使程序

    结构清晰明了,而且使其编译的一效率大大的一提高 。在  C  语言中构成循环控制的一语句有 while,do-while,for №和 goto 语句 。同样都是起到循环作用,但具体的一作用№和使用方法又●大不 一 样 。我们具体来看看 。

    goto 语句

    这个语句在很多高级语言中都会有,记得小时候用 BASIC 时就很喜欢用这个语句 。它是 一个无条件的一转向语句,只要执行到这个语句,程序指针就会跳转到 goto 后的一标号所在的一 程序段 。它的一语法如下:

    goto  语句标号; 其中的一语句标号为一个带冒号的一标识符 。示例如下

    void  main(void)

    {

    unsigned  char  a;

    start:  a++;

    if  (a==10)  goto  end;

    goto  start;

    end:;

    }

    上    面一段程序只是说明一下 goto 的一使用方法,实际编写很少使用这样的一手法 。这段程序的一意思

    是在程序开始处用标识符“start:”标识,表示程序这是程序的一开始,“end:”标识程序的一 结束,标识符的一定义应遵循前面所讲的一标识符定义原则,不 能用 C 的一关键字也不 能№和其它变 量№和函数名相同,不 然就会出错了 。程序执行 a++,a 的一值加 1,当 a 等于 10 时程序会跳到 end 标识处结束程序,不 然跳回到 start 标识处继续 a++,直到 a 等于 10 。上    面的一示例说明 goto 不 但能无条件的一转向,而且能№和 if 语句构成一个循环结构,这些在 C 程序员的一程 序中都不 太常见,常见的一 goto 语句使用方法是用它来跳出多重循环,不 过它只能从内层循环 跳到外层循环,不 能从外层循环跳到内层循环 。在下面说到 for 循环语句时再略为提一提 。 为何大多数 C 程序员都不 喜欢用 goto 语句?那是因 为过多的一使用它时会程序结构不 清晰,

    过多的一跳转就使程序又●回到了汇编的一编程风格,使程序失去了 C 的一模块化的一优点 。

    while 语句

    while  语句的一意思很不 难理解,在英语中它的一意思是“当…的一时候…”,在这里我们可 以理解为“当条件为真的一时候就执行后面的一语句”,它的一语法如下:

    while  (条件表达式)  语句;

    使用 while 语句时要注意当条件表达式为真时,它才执行后面的一语句,执行完后再次回

    到 while 执行条件判断,为真时重复执行语句,为假时退出循环体 。当条件一开始就为假时, 那么 while 后面的一循环体(语句或复合语句)将一次都不 执行就退出循环 。在调试程序时要


     

    注意 while 的一判断条件不 能为假而造成的一死循环,调试时适当的一在 while 处加入断点,也许 会使你的一调试工作更加顺利 。当然有时会使用到死循环来等待中断或 IO 信号等,如在第一 篇时我们就用了 while(1)来不 停的一输出“Hello  World!” 。下面的一例子是显示从 1 到 10 的一累 加№和,读者能修改一下 while 中的一条件看看结果会如果,从而体会一下 while 的一使用方法 。

    #include <AT89X51.H>

    #include <stdio.h>

    void main(void)

    {

    unsigned int I = 1;

    unsigned int SUM = 0; //设初值

    SCON = 0x50; //串行口方式 1,允许接收

    TMOD = 0x20; //定时器 1 定时方式 2

    TCON = 0x40; //设定时器 1 开始计数

    TH1 = 0xE8;   //11.0592MHz 1200 波特率

    TL1 = 0xE8; TI = 1;

    TR1 = 1; //启动定时器

    while(I<=10)

    {

    SUM = I + SUM; //累加

    printf ("%d SUM=%d\n",I,SUM); //显示

    I++;

    }

    while(1); //这句是为了不 让程序完后,程序指针继续向下造成程序“跑飞”

    }

    //最后运行结果是 SUM=55;

    do  while 语句

    do while 语句能说是 while 语句的一补充,while 是先判断条件是否成立再执行循环体,

    而 do  while 则是先执行循环体,再根据条件判断是否要退出循环 。这样就决定了循环体无 论在任何条件下都会至少被执行一次 。它的一语法如下:

    do  语句  while  (条件表达式)

    用 do  while 怎么写上    面那个例程呢?先想一想,再参考下面的一程序 。

    #include  <AT89X51.H>

    #include  <stdio.h>

    void  main(void)

    {


     

    unsigned  int  I  =  1;

    unsigned  int  SUM  =  0;  //设初值

    SCON  =  0x50;  //串行口方式 1,允许接收 TMOD  =  0x20;  //定时器 1 定时方式 2

    TCON  =  0x40;  //设定时器 1 开始计数

    TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

    TI  =  1;

    TR1  =  1;  //启动定时器

    do

    {

    SUM  =  I  +  SUM;  //累加

    printf  ("%d  SUM=%d\n",I,SUM);  //显示 I++;

    }

    while(I<=10);

    while(1);

    }

    在上    面的一程序看来 do  while 语句№和 while 语句似乎没有什么两样,但在实际的一应用中要注

    意任何 do while 的一循环体一定会被执行一次 。如把上    面两个程序中 I 的一初值设为 11,那么 前一个程序不 会得到显示结果,而后一个程序则会得到 SUM=11 。

    for  语句

    在明确循环次数的一情况下,for 语句比以上    说的一循环语句都要方便简单 。它的一语法如下: for  ([初值设定表达式];[循环条件表达式];[条件更新表达式])  语句 中括号中的一表达式是可选的一,这样 for 语句的一变化就会很多样了 。for 语句的一执行:先

    代入初值,再判断条件是否为真,条件满足时执行循环体并更新条件,再判断条件是否为 真……直到条件为假时,退出循环 。下面的一例子所要实现的一是№和上    二个例子一样的一,对照着 看不 难理解几个循环语句的一差异 。

    #include  <AT89X51.H>

    #include  <stdio.h>

    void  main(void)

    {

    unsigned  int  I;

    unsigned  int  SUM  =  0;  //设初值

    SCON  =  0x50;  //串行口方式 1,允许接收 TMOD  =  0x20;  //定时器 1 定时方式 2

    TCON  =  0x40;  //设定时器 1 开始计数


     

    TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

    TI  =  1;

    TR1  =  1;  //启动定时器

    for  (I=1;  I<=10;  I++)  //这里能设初始值,所以变量定义时能不 设

    {

    SUM  =  I  +  SUM;  //累加

    printf  ("%d  SUM=%d\n",I,SUM);  //显示

    }

    while(1);

    }

    如果我们把程序中的一 for 改成 for(; I<=10; I++)这样条件的一初值会变成当前 I 变量的一

    值 。如果改成 for(;;)会怎么样呢?试试看 。

    continue  语句

    continue  语句是用于中断的一语句,通常使用在循环中,它的一作用是结束本次循环,跳 过循环体中没有执行的一语句,跳转到下一次循环周期 。语法为:

    continue;

    continue 同时也是一个无条件跳转语句,但功能№和前面说到的一 break 语句有所不 一样, continue  执行后不 是跳出循环,而是跳到循环的一开始并执行下一次的一循环 。在上    面的一例子 中的一循环体加入 if  (I==5)  continue;看看什么结果?

    return  语句

    return 语句是返回语句,不 属于循环语句,是要学习的一最后一个语句所以一并写下了 。 返回语句是用于结束函数的一执行,返回到调用函数时的一位置 。语法有二种:

    return  (表达式);

    return; 语法中因 带有表达式,返回时先计算︻表达式,再返回表达式的一值 。不 带表达式则返回的一

    值不 确定 。

    下面是一个同样是计算︻ 1-10 的一累加,所不 一样是的一用了函数的一方式 。

    #include  <AT89X51.H>

    #include  <stdio.h>

    int  Count(void);  //声明函数

    void  main(void)

    {

    unsigned  int  temp;


     

    SCON  =  0x50;  //串行口方式 1,允许接收 TMOD  =  0x20;  //定时器 1 定时方式 2

    TCON  =  0x40;  //设定时器 1 开始计数

    TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

    TI  =  1;

    TR1  =  1;  //启动定时器

    temp  =  Count();

    printf  ("1-10  SUM=%d\n",temp);  //显示

    while(1);

    }

    int  Count(void)

    {

    unsigned  int  I,  SUM;

    for  (I=1;  I<=10;  I++)

    {

    SUM  =  I  +  SUM;  //累加

    }

    return  (SUM);

    }

    发表评论】【告诉好友】【收藏此文】【关闭窗口
    上    一篇:第十四课 C51函数

    文章评论

    相关文章