4 第四章 C51流程控制语句

合集下载

第四章 C51流程控制语句

第四章 C51流程控制语句

第四章
C51流程控制语句
6
4.1.3 循环结构及其流程图
循环结构两大要素: 无限循环 循环条件 p 死循环 结束循环的条件表达式 循环体 A 循环执行的语句或语句组
名词解释 名词解释
空循环 设置循环条件要特别注意确定: 循环变量的初值 循环变量的终值 循环变量的变化规律
第四章 C51流程控制语句
第四章 C51流程控制语句
5
4.1.3 循环结构及其流程图
在C51语言中可用以下语句构成循环:




if … goto while do … while for
其中if … goto是通过编程技巧(if语句和goto语句组 合)构成循环功能。而且goto语句将影响程序流程的 模块化,使程序可读性变差,所以结构化程序设计主 张限制goto语句的使用。 其他三种语句是C51语言提供的循环结构专用语句。
第四章
【例】 求∑i =1+2+3+4…+99+100 (i=1~100)
C51流程控制语句
21
main( ) 4.3.4 其他循环控制结构 {

break 结束循环
在switch中退出switch结构;
第四章
C51流程控制语句
20
4.3.3 for语句循环结构

一般形式 for (表达式1;条件表达式;表达式3) 循环语句(组);




用于构成计数型当型循环:先 判断后执行/条件为真继续循环, main() 直到条件为假时结束循环。 表达式1: 整个循环中只执行1次, { 常用来对循环变量设置初值 int i , s=0; 条件表达式(表达式2): 其值 为真(非0)时继续执行循环语 for (i=1;i<=100;i++) 句(组),否则结束循环 s=s+i; 表达式3: 常用于循环变量值的 更新(循环体的一部分每次循环 } 语句组执行完后执行一次) s=?

51单片机资料-C51常用语句讲解

51单片机资料-C51常用语句讲解

详细介绍。下面仅举一个例子加以说明:
• #include <stdio.h>
//头文件
• void myprint()
//定义函数
•{

printf("hello world.\n");
//输出字符串
•}
• int Add(int a)
//定义函数
•{

return a+1;
//返回值
•}

• void main()
行if语句后面的语句;当表达式为假时,就执行语 句2,执行完后,继续执行if语句后面的语句。
14
13.5.3 阶梯式if-else-if结构
• 阶梯式if-else-if结构是一种多分支结构,其可以 包含多个分支语句,其一般形式为:
• if (表达式1) 语句1; • else if (表达式2) 语句2; • else if (表达式3) 语句3; • else if (表达式n) 语句n; • else 语句n+1; • 这是由if-else语句组成的嵌套,可以实现多方向
条件分支。该语句从上到下逐个对条件进行判断, 一旦条件为真,就执行与其相关的分支语句,并跳 过剩余的阶梯;如果没有一个条件为真,则执行最 后一个else分支语句n+1。
1实现多个语句分支处理。在C51
程序中,开关语句以关键字switch和case来标识。开关语句
序示例如下:
• #include <stdio.h>
//头文件

• void main()
//主函数
•{
• char ch[]={'s','S','r','R','t'};

C51流程控制语句

C51流程控制语句
4.4 C51流程控制语句

C语句分类

表达式语句:表达式加分号;构成。 空语句: ;
程序控制语句(9种):
if( )~else~ switch for( )~ 循环 while( )~ do~while( ) continue break 辅助控制 goto return
分支
1
4.4.1 C程序的三种基本结构
24
一般形式: do { 循环体语句; } while(表达式); 执行流程:
循环体 真(非0)
while 表达式 假(0)
特点:先执行循环体,后判断表达式 说明: 至少执行一次循环体 17

3.for语句
for(循环变量赋初值;循环条件;修改循环变量) { 循环体语句; }
说明: for语句中表达式1,表达 式2 ,表达式3 都可省略, 但分号;不可省 无限循环: for(;;)
实现if ~ else 正确配对方法:加{ }
10
4. switch语句(开关分支语句)
一般形式:
switch 表达式 case E1 语句组1 E2 语句组2 En
…...
语句组n
执行过程:
switch( 表达式) { case E1: 语句组 1; break; case E2: 语句组 2; break; default ……. 语句组n+1 case En: 语句组 n; break; [default: 语句组n+1 ; break;] } 11
格式:if (表达式)
{
真(非0)
语句组; }
例:if (x>y) printf(“%d”,x);
5
4.4.2 选择语句

05 C51程序设计4

05 C51程序设计4

C51中的外部中断初始化: 中的外部中断初始化: 中的外部中断初始化
IT0=1; EX0=1; EA=1; PX0=1; ; //设置外部中断 为负跳变触发方式 设置外部中断0为负跳变触发方式 设置外部中断 //设置外部中断 允许 设置外部中断0允许 设置外部中断 //开中断 开中断 //设置外部中断 为高优先级 设置外部中断0为高优先级 设置外部中断
改用电平触发 改用外中断1
void int_0( ) interrupt 0 int_1( 2 { delay10ms( ); if(INT0==0) INT1 { flag++; if(flag>3)flag=1; } }
定时/ 定时/计数器编程 ---简易频率计 ---简易频率计
目标
用单片机实现简易频率计。 用单片机实现简易频率计。 具体目标: 具体目标: • 学会编写单片机中断服务程序; 学会编写单片机中断服务程序; • 学会定时中断的应用。 学会定时中断的应用。 定时中断的应用
中断允许控制
IE (A8H)
EA ES ET1 EX1 ET0 EX0
EX0:外中断0允许位; :外中断 允许位 允许位; ET0:T0中断允许位; 中断允许位; : 中断允许位 EX1:外中断 允许位; 允许位; :外中断1允许位 ET1:T1中断允许位; 中断允许位; : 中断允许位 ES :串口中断允许位; 串口中断允许位; EA : CPU中断允许(总允许)位。 中断允许( 中断允许 总允许)
中断程序结构
2、中断服务程序部分 、 1)在相应的中断入口地址单元设置一条跳转指令,使程 在相应的中断入口地址单元设置一条跳转指令, 在相应的中断入口地址单元设置一条跳转指令 序转移到中断服务程序的实际入口。 序转移到中断服务程序的实际入口。 2)根据需要保护现场。 根据需要保护现场。 根据需要保护现场 3)若为电平触发的外部中断,应有中断信号撤除操作。 若为电平触发的外部中断, 若为电平触发的外部中断 应有中断信号撤除操作。 4)安排中断服务所做的操作。 安排中断服务所做的操作。 安排中断服务所做的操作 5)恢复现场。 恢复现场。 恢复现场 6)中断返回。 中断返回。 中断返回

第4章_C51流程与控制

第4章_C51流程与控制

switch语句(开关分支语句)
一般形式:
switch
表达式
case
E1 语句组1 E2 语句组2 …... En 语句组n
执行过程:
switch( 表达式) { case E1: 语句组 1; break; case E2: 语句组 2; break; default ……. 语句组 case En: 语句组 n; break; [default: 语句组 ; break;] }
if (表达式) 语句
可为算术、关系、逻辑、赋值 等表达式
内嵌语句,可为: 赋值语句 函数调用语句 控制语句 复合语句 空语句
功能:

计算表达式的值,如果是一个非0值(即 逻辑真),就执行内嵌语句,否则(即逻 辑假)跳过内嵌语句,顺序执行后续语句。
例题

例如:
⑴ if (x>0) m++; ⑵ if ( a>b ) { c=a; a=b; b=c; }
循环结构程序
while语句实现的循环结构 do-while语句实现的循环结构 for语句实现的循环结构
循环结构中的跳转语句
循环结构程序设计举例
(1) while语句的循环结构

语句一般格式

while (表达式) 语句
一般为关系表达式 或逻辑表达式,也 可以是C语言其他 类型的合法表达式 是循环体否被执行 的条件
说明: : E1,E2,…En是常量表达式,且值必须互不相同 语句标号作用,必须用break跳出 case后可包含多个可执行语句,且不必加{ } switch可嵌套 多个case可共用一组执行语句
如: …… case „A‟: case „B‟: case „C‟: printf(“score>60\n”); break; ……..

第四章_C51语法简介

第四章_C51语法简介

第十节 中断服务函数与寄存器组定义
中断服务函数的一般形式为: 函数类型 函数名(形式参数表)[interrupt n] [using n]
表4-5
中断号 0 1 2 3 4 5
常用中断号与中断向量
中断向量8n+3 0003H 000BH 0013H 001BH 0023H 002BH(8052系列特有)
bdata
idata pdata xdata code
存储器模式SMALL、COMPACT或LARGE来规定默认存储器类型, 确定变量的存储器空间
第四节 C51中直接对51单片机的SFR 的定义
sfr 特殊功能寄存器名 = 地址常数; 例如: sfr P0 = 0x80 ;//定义I/O口P0,其地址为0x80
第八节 51单片机外扩I/O口的访问
访问外部I/O口的方法有三种。 1.绝对宏 在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE,XBYTE PWORD,DBYTE,CWORD,XWORD,PBYTE,DWORD 具体使用可看一看Keil C51 的absacc.h头文件便知。例如: rval=CBYTE[0x0002]; // rval指向程序存储器的0002H地址 rval=XWORD[0x0002]; // rval指向外RAM的2 × sizeof (unsigned int) = 0004H地址 2._at_关键字 直接在数据定义后加上_at_ const 即可,但是注意: (1)绝对变量不能被初始化; (2)bit型函数及变量不能用_at_指定。例如: idata struct link list _at_ 0x40 ; //指定list结构变量从40H开始,其中link 是结构,list是结构变量名 xdata char text[256] _at_ 0xE000;//指定text数组从0E000H开始 特别提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描 3.宏定义 例:#include <absacc.h> #define rval CBYTE[0x0002] // rval 指向程序存储器的0002H地址 #define rval XBYTE[0x0002] // rval 指向外RAM的2 × sizeof (unsigned int) = 0004H 址.

c51汇编语言循环指令汇编语言循环指令loop

c51汇编语言循环指令汇编语言循环指令loop

c51汇编语言循环指令汇编语言循环指令loop在C51汇编语言中,循环指令(loop)是一种非常重要的控制流程语句,它允许程序反复执行一段指定的代码块,直到满足特定条件后才跳出循环。

本文将介绍C51汇编语言中的循环指令loop的使用方法和注意事项。

一、循环指令loop的基本语法及功能在C51汇编语言中,循环指令loop的基本语法如下:```loop: ;循环标签;循环体代码;循环控制代码sjmp loop ;无条件跳转到循环标签loop处```循环指令loop的功能主要分为两个部分,即执行循环体代码和控制循环的循环控制代码。

循环指令的循环标签用于标识循环的起点,在指令执行过程中,循环体代码将会被反复执行,直到循环控制代码指定的条件满足后才跳出循环。

二、循环指令loop的应用场景循环指令loop在C51汇编语言中具有广泛的应用场景,下面将列举其中的几种常见情况。

1. 循环计数当需要重复执行一段代码,且重复次数已知或可确定时,循环指令loop可以用于循环计数。

通过在循环控制代码中对计数器进行递减或递增操作,并在特定的计数值达到时跳出循环,从而实现循环计数的功能。

```MOV R1, #10 ;设置循环计数器初值为10loop:;循环体代码...DJNZ R1, loop ;循环计数器递减,若不为0则跳转至循环标签loop```上述代码示例中,循环计数器R1的初值被设置为10,当循环体代码执行完毕后,通过DJNZ指令递减循环计数器R1的值,若其不为0,则跳转至循环标签loop处,继续执行循环体代码,直到循环计数器的值递减至0。

2. 条件判断循环指令loop还可以用于条件判断,当满足特定条件时继续循环执行,不满足条件时跳出循环。

条件判断可以通过寄存器或内存中的值进行,根据不同的条件设置控制循环的条件语句。

```loop:;循环体代码...JNZ loop ;若条件满足,则跳转至循环标签loop处```上述代码示例中,JNZ指令用于判断特定条件是否满足,若满足则跳转至循环标签loop处,继续执行循环体代码,否则跳出循环。

C51 流程控制语句

C51 流程控制语句
• (3) 在if 语句的三种形式中,所有的语句应为单个语句,如果要想 在满足条件时执行一组(多个)语句,则必须把这一组语句用“{}” 括起来组成一个复合语句。但要注意的是在“}”之后不能再加分号。
上一页 下一页 返回
4.2 选 择 结 构
• (4) if 语句的嵌套。 • 当if 语句中的执行语句又是if 语句时,则构成了if 语句嵌套的情形。
• 数组是一组具有固定数目和相同类型成分分量的有序集合。 • 1. 一维数组 • 定义:类型说明符 数组名[整型表达式] • 2. 二维数组 • 定义:类型说明符 数组名[常量表达式][常量表达式] • 3. 字符数组 • 定义方法同上。 • 字符数组中'' '' 括起来的一串字符,称为字符串常量。C 语言编译器
上一页 下一页 返回
4.3 循 环 结 构
• while(表达式); • 其中语句是循环体,表达式是循环条件。 • do-while 语句的语义是:先执行循环体语句一次,再判别表达式的
值,若为真(非0)则 • 继续循环,否则终止循环。 • do-while 语句和while 语句的区别在于do-while 是先执行后判断,
• 4.2.2 switch-case 语句
• C51 语言还提供了另一种用于多分支选择的switch 语句,其一般形 式为:
• switch(表达式) •{ • case 常量表达式1: 语句1;
上一页 下一页 返回
4.2 选 择 结 构
• case 常量表达式2: 语句2; •… • case 常量表达式n: 语句n; • default : 语句n + 1; •} • 其语义是:计算表达式的值,并逐个与其后的常量表达式值相比较,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ s=s+i; i++;
} printf(“1+2+3……+100=%d\n”,s); while(1); } 程序执行的结果:
1+2+3……+100=5050
4.2.5 do while语句
do while语句在C51中用于实现直到型循环结构,它的格式如下:
do { 语句;} /*循环体*/
while(表达式);
【例4-4】 下面程序是通过while语句实现计算并输出1~100的累加和。
#include <reg51.h> //包含特殊功能寄存器库 #include <stdio.h> //包含I/O函数库 void main(void) //主函数 {
int i,s=0; //定义整型变量x和y i=1; SCON=0x52; //串口初始化 TMOD=0x20; TH1=0xF3; TR1=1; while (i<=100) //累加1~100之和在s中
{
int i,s=0; //定义整型变量x和y
i=1;
SCON=0x52; //串口初始化
TMOD=0x20;
TH1=0xF3;
TR1=1;
do
//累加1~100之和在s中
{
s=s+i;
i++;
}
while (i<=100);
printf(“1+2+3……+100=%d\n”,s);
while(1);
{ 局部变量定义; 语句1; 语句2;
} 复合语句在执行时,其中的各条单语句按顺序依次执行,整个复 合语句在语法上等价于一条单语句,因此在C51中可以将复合语句视为 一条单语句。通常复合语句出现在函数中,实际上,函数的执行部分 (即函数体)就是一个复合语句;复合语句中的单语句一般是可执行 语句,此外还可以是变量的定义语句(说明变量的数据类型)。在复 合语句内部语句所定义的变量,称为该复合语句中的局部变量,它仅 在当前这个复合语句中有效。利用复合语句将多条单语句组合在—起, 以及在复合语句中进行局部变量定义是C51语言的一个重要特征。
4.2 C51程序基本结构与相关语句
4.2.1 C51的基本结构
一.顺序结构
顺序结构是最基本、最简
单的结构,在这种结构中,
程序由低地址到高地址依
A
次执行,图4-1给出顺序结
构流程图,程序先执行A操
作,然后再执行B操作。
B
图4-1顺序结构流程图
二.选择结构
选择结构可使程序根据不同的情况,选择执行不同的分支,在选 择结构中,程序先都对一个条件进行判断。当条件成立,即条件语句为 “真”时,执行一个分支,当条件不成立时,即条件语句为“假”时, 执行另一个分支。如图4-2,当条件S成立时,执行分支A,当条件P不 成立时,执行分支B。
(3)if (score>=90) printf(“Your result is an A\n”); else if (score>=80) printf(“Your result is an B\n”); else if (score>=70) printf(“Your result is an C\n”); else if (score>=60) printf(“Your result is an D\n”); else printf(“Your result is an E\n”);
它的特点是:先执行循环体中的语句,后判断表达式。如表达 式成立(真),则再执行循环体,然后又判断,直到有表达式不成 立(假)时,退出循环,执行do while结构的下一条语句。do while语句在执行时,循环体内的语句至少会被执行一次。
【例4-5】 通过do while语句实现计算并输出1~100的累加和。 #include <reg52.h> //包含特殊功能寄存器库 #include <stdio.h> //包含I/O函数库 void main(void) //主函数
空语句在程序设计中通常用于两种情况: (1)在程序中为有关语句提供标号,用以标记程序执行的位置。 例如采用下面的语句可以构成一个循环。
repeat:; ; goto repeat;
(2)在用while语句构成的循环语句后面加一个分号,形成一个不 执行其它操作的空循环体。这种结构通常用于对某位进行判断,当不 满足条件则等待,满足条件则执行。
{ int i,s=0; //定义整型变量x和y SCON=0x52; //串口初始化
TMOD=0x20;
TH1=0xF3;
TR1=1; for (i=1;i<=100;i++) s=s+i; //累加1~100之和在s中 printf(“1+2+3……+100=%d\n”,s);
在for循环中,一般表达式1为初值表达式,用于给循环变量赋初值; 表达式2为条件表达式,对循环变量进行判断;表达式3为循环变量更新 表达式,用于对循环变量的值进行更新,使循环变量能不满足条件而退 出循环。
【例4-6】 用for语句实现计算并输出1~100的累加和。 #include <reg52.h> //包含特殊功能寄存器库 #include <stdio.h> //包含I/O函数库 void main(void) //主函数
执行上面语句后,能够根据分数score分别打出A、B、C、D、E五 个等级。
4.2.3 switch/case语句
if语句通过嵌套可以实现多分支结构,但结构复杂。switch是C51 中提供的专门处理多分支结构的多分支选择语句。它的格式如下:
switch (表达式) { case 常量表达式1:{语句1;} break;
第四章 C51流程控制语句
4.1 表达式语句及复合语句
4.1.1 表达式语句
在表达式的后边加一个分号“;”就构成了表达式语句 ,如:
a=b++; x=8; y=7; ++k; 可以一行放一个表达式形成表达式语句,也可以一行放多个表达 式形成表达式语句,这时每个表达式后面都必须带“;”号,另外, 还可以仅由—个分号“;”占一行形成一个表达式语句,这种语句称 为空语句。
(7)多个case可以共用一组执行语句。 【例4-3】 switch/case语句的用法。 对学生成绩划分为A~D,对应不同的百分制分数,要求根据不同的等级 打印出它的对应百分数。可以通过下面的switch/case语句实现。
…… switch(grade)
{ case ‘A’: printf(“90~100\n”);break; case ‘B’: printf(“80~90\n”);break; case ‘C’: printf(“70~80\n”);break; case ‘D’: printf(“60~70\n”);break; case ‘E’: printf(“<60\n”);break; default: printf(“error”\n)
图4-3 当型循环结构
(2)直到型循环结构 直到型循环结构如图4-4,先执 行语句A,再判断条件P,当条件 成立(为“真”)时,再重复执 行语句A,直到条件不成立(为 “假”)时才停止重复,执行后 面的程序。
语句A 条件P
成立
不成 立
图4-4 直到型循环结构
构成循环结构的语句主要有:while、do while、for、goto等。
为1则结束等待 c=SBUF; RI=0; return(c); }
4.1.2 复合语句
复合语句是由若干条语句组合而成的一种语句,在C51中,用一个 大括号“{ }”将若干条语句括在一起就形成了一个复合语句,复合语 句最后不需要以分号“;”结束,但它内部的各条语句仍需以分号 “;”结束。复合语句的一般形式为:
}
4.2.4 while语句
while语句在C51中用于实现当型循环结构,它的格式如下:
while(表达式) { 语句;} /*循环体*/
while语句后面的表达式是能否循环的条件,后面的语句是循环 体。当表达式为非0(真)时,就重复执行循环体内的语句;当表达式 为0(假),则中止while循环,程序将执行循环结构之外的下一条语句。 它的特点是:先判断条件,后执行循环体。在循环体中对条件进行改变, 然后再判断条件,如条件成立,则再执行循环体,如条件不成立,则退 出循环。如条件第一次就不成立,则循环体一次也不执行。
}
程序执行的结果:
1+2+3……+100=5050
4.2.6 for语句
在C51语言中,for语句是使用最灵活、用得最多的循环控制语句, 同时也最为复杂。它可以用于循环次数已经确定的情况,也可以用于循 环次数不确定的情况。它完全可以代替while语句,功能最强大。它的格 式如下:
for(表达式1;表达式2;表达式3) {语句)先求解表达式1的值。 (2)求解表达式2的值,如表达式2的值为真,则执行循环休中的语句, 然后执行下一步(3)的操作,如表达式2的值为假,则结束for循环,转 到最后一步。 (3)若表达式2的值为真,则执行完循环体中的语句后,求解表达式3, 然后转到第四步。 (4)转到(2)继续执行。 (5)退出for循环,执行下面的一条语句。
成立 语句A
条件P
不成 立 语句B
在C51中,实现选择结构的语句为if/else,if/else if语句。另外在 C51中还支持多分支结构,多分支结构既可以通过if和else if语句嵌套 实现,可用swith/case语句实现。
三.循环结构
在程序处理过程中,有时需要 某一段程序重复执行多次,这时就 需要循环结构来实现,循环结构就 是能够使程序段重复执行的结构。 循环结构又分为两种:当(while) 型循环结构和直到(do...while)型 循环结构。 (1)当型循环结构 当型循环结构如图4-3,当条件P成 立(为“真”)时,重复执行语句A, 当条件不成立(为“假”)时才停 止重复,执行后面的程序。
相关文档
最新文档