首页 理论教育 单片机C51语句与结构化程序设计

单片机C51语句与结构化程序设计

时间:2023-10-23 理论教育 版权反馈
【摘要】:例如实现两个变量值交换的复合语句为:3.选择语句和选择结构程序关系运算符和关系表达式。在第2和第3种if语句中,应注意if和else的配对,else总是和最近的if配对。设SIO_IN、CMD_N为已定义的无符号字符型变量,则程序如下:4.循环语句和循环结构程序while语句。

单片机C51语句与结构化程序设计

1.C51语句和程序结构

C51语句是计算机执行的操作命令,一条语句以分号结尾(注意:程序中的变量、函数声明部分尽管不是语句,但也以分号结尾)。从程序流程分析,程序主要有顺序结构、选择结构和循环结构这样三种最基本的结构。而C语句有表达式语句、复合语句、控制语句、空语句和函数调用语句等。

2.表达式语句、复合语句和顺序结构程序

表达式语句的一般形式为如下:

例如:x=y+z; /*赋值语句*/

i++; /*自增1语句*/

顺序结构程序由按先后顺序执行的多个语句组成,在C语言中,常常将按顺序执行的多条语句用花括号{}括起来构成复合语句,复合语句中每个语句以分号结尾,复合语句花括号后不再加分号。而没有内容,只有分号,不执行任何操作的语句称为空语句。像赋值语句那种不包含其他语句的语句,称为简单语句。通常用复合语句描述顺序结构程序。例如实现两个变量值交换的复合语句为:

3.选择语句和选择结构程序

(1)关系运算符和关系表达式。比较两个量的大小关系的运算符称为关系运算符,关系运算符有6种:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。

关系运算符都是双目运算符,都具有左结合特性。

关系表达式的一般形式为:

表达式1关系运算符 表达式2

例如:a>b,(a+b)<(c-d)等都是关系表达式。

关系表达式的结果取值为1(真)或0(假)。

(2)逻辑运算符和逻辑表达式。逻辑运算符有&&(逻辑与)、‖(逻辑或)、!(逻辑非)这样3种。

1)逻辑与表达式:表达式1 && 表达式2

当表达式1和表达式2的值都是非零时,表达式的值为1,否则为0。

2)逻辑或表达式:表达式1 ‖ 表达式2

当表达式1和表达式2的值中,只要有一个为非零,则表达式的值为l,否则为0。

3)逻辑非表达式:!表达式

当表达式值为0时,逻辑非表达式为1;表达式值为1时,逻辑非表达式值为0。

(3)if语句。if语句用来判定所给的条件是否满足来决定执行的两种可能操作之一。if语句有3种形式。

1)if(表达式)语句;

括号中的表达式一般为关系表达式或逻辑表达式。当表达式的值为非零时,则执行语句;否则,不执行语句。语句可以是简单语句或复合语句。

例如:

2)if(表达式)语句1;

else 语句2;

当括号中的表达式值为非零时执行语句1;否则,执行语句2。其中的语句1和语句2可以是简单语句或复合语句。

例如:

这种形式的if语句可以实现多种条件的选择。

在第2和第3种if语句中,应注意if和else的配对,else总是和最近的if配对。在ifelse语句中可以再包含ifelse语句,构成if-else语句的嵌套

(4)条件表达式。在if(表达式)语句1;else语句2;这种形式中,若语句1、语句2都是给同一个变量赋值,则可以用更加简洁的条件表达式来实现。条件表达式的一般形式为:(www.xing528.com)

表达式1?表达式2:表达式3

条件表达式求解时,先求表达式1的值,若非零(即表达式1为真),则求解表达式2的值,并作为整个条件表达式的值;如果表达式1的值为零(即表达式1为假),则求解表达式3的值,并作为整个条件表达式的值。例如:

可以改写为条件表达式:

(5)switch语句。switch语句是直接处理多分支的选择语句,其功能类似于51的散转指令JMP@A+DPTR。一般形式为:

switch语句中的表达式一般为整型字符型表达式,当表达式的值和某一个case后的常量表达式i相同时,就执行对应的语句i,语句i+1,…,语句n+1。若要使各种情况互相排斥,只执行语句i,应在每个语句后加上退出循环的语句break;若表达式和所有的常量表达式不匹配,则执行语句n+l。同时要求在switch语句中所有的常量表达式必须不同。

【例4-2】 若在一个应用系统中设置5个单字符命令:A、F、G、W、Z。变量SIO_IN为串行口输入的字符。要求设计一个程序,若SIO_IN为合法的命令字符求出其命令号(0~4),非法字符则置为0FFH。设SIO_IN、CMD_N为已定义的无符号字符型变量,则程序如下:

4.循环语句和循环结构程序

(1)while语句。while语句的一般形式为:

while(表达式)语句;

其中,()内的表达式为循环条件,一般为关系表达式或逻辑表达式,语句为循环体,可以是简单语句、复合语句或空语句。while语句执行过程如图4-12(a)所示。

【例4-3】 求S=1+2+3+…+100和的程序,请用while循环来实现:

图4-12 while不同结构的执行过程图

do-while语句先执行循环体语句,再求解表达式值,判断是否退出循环。do-while语句执行过程如图4-12(b)所示。

【例4-4】 求S=1+2+3+…+100和的程序,请用do-while循环来实现:

【例4-5】 P1.1输出16次跳变,产生8个脉冲,P1.1初态为0,则程序如下:

(3)for语句。for语句的一般形式为:

for(表达式1;表达式2;表达式3)语句;

for语句的执行过程如图4-13所示。循环程序由循环变量初始化、循环体、修改循环变量、判断循环终止条件等部分组成,上面的while、do-while语句循环变量初始化放在语句的前面,而循环变量的修改放在循环体中。而for语句具有循环程序的所有部分,可以理解为:

for(循环变量赋初值;循环条件;循环控制变量修改)

{语句}/*循环体,可以是简单语句、复合语句或空语句*/

图4-13 for语句循环结构图

for语句中的表达式1可以有几个表达式,表达式之间用逗号分开(,号表达式)。表达式1也可以省略,但分号(;)不可省略。如果表达式2省略(;号不可以省)则不判断条件,无限循环,表达式3也可省略,此时应在循环体中增加修改循环控制变量的语句。

【例4-6】 用for语句实现S=1+2+3+…+100的程序。

另外,for(;;),其功能相当于SJMP S|,即无限次循环。

(4)goto语句、break语句和continue语句。

1)goto语句为无条件跳转语句,一般形式为:

goto语句标号;/*goto语句尽量少用*/

2)break语句用来从循环体中跳出循环体,终止整个循环。一般形式为:

Break;

3)continue语句用于循环体中,其功能为跳过本次循环中尚未执行的语句,继续下次循环,而不终止整个循环,一般形式为:

Continue;

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈