第五章:语句的组成_第1页
第五章:语句的组成_第2页
第五章:语句的组成_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、【单片机 C 语言基础入门】第五章:语句的组成(分支、循环结构 )首先祝大家国庆快乐,在这举国欢庆的时刻我来帮大家介绍一下单片机 C 语言中的编程语言中语句的组成。前面介绍了单片机 C 语言编程中表达式和运算符的规范以及规则,但是仅仅有表达式和运算符是远不能满足编程的要求。通常程序在单片机中执行是逐步按照地址的顺序进行的,这样会产生一个问题就是当用户希望程序是按照某种条件来运行的时候就会变得复杂,接下来要向大家介绍一下单片机C 语言中的语句的表达,在编程中经常用的语句表达式主要是条件语句以及循环语句。有了这几种控制语句使得在编程过程中用户可以按照自己的逻辑或者条件或者时序条件来设计程序执行的顺

2、序。单片机 C 语言的条件语句主要包括 if 语句和 switch 语句。 If 语句在单片机 c 语言中是极为常用的语句,用来判断某些变量(信号)达到预期的值后,再执行满足条件的指令,或者执行不满足条件的指令。If 语句的基本形式有三种:直接的 if 语句; ifelse 语句; ifelse if 语句;下面对这三种语句逐一进行介绍。1.直接 if 语句,其表达式为if (表达式)语句直接的 if 语句的执行过程如下图所示:从图中可以看到,如果表达式为真的时候才执行if 的语句,否则直接跳过执行if以外的语句。在单片机的中断延时程序中可以看到:void INT0_ISR() interru

3、pt 0 /外部中断服务程序Delayms(100);/延时程序100ms一般用于去除抖动,自己编写的延时程序If(INT0) /判断INT0的电平信号,如果是1 运行线下面的程序,如果为0则跳出服务程序,也就是判断是不是误动作导致的INT0发生变化。/用户的程序2.if else 语句,一般表示为: if (表达式)语句 1 else 语句 2ifelse 语句是当表达式为真或者假的时候,都会执行相应的程序语句,这样的好处是当判断表达式(或者信号)的真假的时候都会有相应的动作与之对应,其执行的流程图如下:在单片机程序的设计中这样的例子也很多,比如下面的一段程序来自STC15 系列单片机库函数

4、的timer 初始化程序u8Timer_Inilize(u8TIM, TIM_InitTypeDef*TIMx)if(TIM = Timer0) TR0=0; if(TIMx->TIM_Interrupt= ENABLE)/停止计数ET0 = 1;/允许中断elseET0= 0;/禁止中断if(TIMx->TIM_Polity= PolityHigh)PT0 = 1;/高优先级中断elsePT0= 0;/低优先级中断if(TIMx->TIM_Mode> return 2; / 错误 TIMx->TIM_Mode;TIM_16BitAutoReloadNoMask)

5、TMOD =(TMOD & 0x03) |/工作模式 ,0: 16 位自动重装 , 1: 16位定时 /计数 , 2: 8 位自动重装 , 3: 16 位自动重装 , 不可屏蔽中断if(TIMx->TIM_ClkSource=TIM_CLOCK_12T)AUXR &= 0x80;/12Tif(TIMx->TIM_ClkSource= TIM_CLOCK_1T)AUXR |=0x80; /1Tif(TIMx->TIM_ClkSource= TIM_CLOCK_Ext)TMOD |=0x04;/对外计数或分频elseTMOD&= 0x04;/定时if(TI

6、Mx->TIM_ClkOut= ENABLE)INT_CLKO |=0x01;/输出时钟elseINT_CLKO&= 0x01;/不输出时钟TH0=(u8)(TIMx->TIM_Value >> 8);TL0=(u8)TIMx->TIM_Value;if(TIMx->TIM_Run= ENABLE)TR0 = 1;/ 开始运行return0;/ 成功/省略下面的部分可以看到 ifelse 在单片机中的应用。3.if else if 。这样的判断语句的基本格式为: if (表达式 1)语句 1 else if(表达式 2) 语句 2 else if(表

7、达式 3)语句 3 ,其执行的流程如下:这种结构的好处在于,多个判断表达式和多个执行语句,在数学中这可以表示分段函数的取值,在但片中也通常用于判断电压信号灯具有连续变化的数值信号分段取值的对应不同执行程序的场合。并且这种结构的一个好处是当满足其中的某一个条件的时候,就会执行相应的程序,而不再执行后面的程序,这样可以提高程序运行的效率。4.有了前面三种if 语句的基本组成然后就是if 语句的嵌套组成的 if 复合语句。也就是在 if 语句中的执行语句中继续嵌入if 语句来实现多重if 语句的嵌套结构。在这里就不详细介绍了,其用法和基本的 if 语句相同。switch 语句实现多分支的选择语句,其

8、原理和ifelseif 相似,利用多个条件实现多个分支语句的控制,其实也可以从名字看出来switch 就是多路开关的意思,即根据变量的取值那然后选择相对应的语句来执行。其表达式如下:switch(表达式) case 常量表达式1: 语句 1case 常量表达式 2: 语句 2case 常量表达式3: 语句 3case 常量表达式 n: 语句 ndefault :语句 n+1这样会根据表达式的不同常量结果来选择相对应的语句来执行,注意:在这里没有break 的时候,执行的顺序会从上往下一直进行,会得到我们并不希望得到的结果,因此在switch 语句的 case分支语句中增加break 来实现真正

9、的分支选择形式,如下:switch (表达式) case 常量表达式1: 语句 1;break;case 常量表达式2: 语句 2;break;case 常量表达式 3: 语句 3; break; case 常量表达式 n: 语句 n;break; default :语句 n+1; break;这样增加 break 以后会得到相应的分支语句,执行完后就会跳出 switch 语句,其 break 的用法将在后面介绍。循环语句1.goto 语句,其表达式为goto lable ;lable 为程序的标号。goto 语句和汇编的Jmp 语句类似就是根据程序的标号来进行不会的跳动,结合if 语句就构成

10、了循环结构,但是这种语句在单片机 C 语言中的出现率并不是很高,除非不得已的时候才使用这用语句。2.while 语句,其表达式为while (表达式)语句,执行的流程如下:在单片机中百分之百用到的语句,因为在单片机中不管是在带系统的小的任务还是不带系统的应用中,单片机的每个小程序都是在一个死循环中进行的,也就是在固定的程序空间进行执行,因为单片机的程序是在一个while 的死循环中进行,一般常用的是while (1),因此经常看到单片机的程序如下所示:初始化程序;while(1)/ 死循环用户程序;While 语句中还有 dowhile 语句语句也在单片机编程中经常用到,其表达式分别为:do循

11、环体语句while (表达式)执行的流程为:dowhile 循环常用到模拟一些总线的输出过程中比如SPI,I2C 等。3. for 循环语句, for(表达式 1;表达式 2;表达式 3)语句一般在常用的是 for(循环变量赋初值; 循环条件; 循环变量增值)语句,在单片机中的死循环中有的时候 while ( 1)会用 for(;)循环来代替,这样也是一个死循环,主要在语句中填写用户的程序即可。其执行的流程如下:For 循环也经常用于模拟SPI、 I2C、 UART 等串口通信的程序中,比如:void Write_Byte(unsigned char value) unsigned char

12、i;for (i=0;iif(value>>(7-i)&0x01)=0x01); SPI_DI=1; elseSPI_DI=0;SPI_SCL=0; delay(5); / 必须要加延时, 否则会因为操作太快而不响应。SPI_SCL=1;delay(5);/ 必须要加延时, 否则会因为操作太快而不响应。4. break、 continue 和 return 语句break、continue 和 return 都可以使得程序在跳出当前的流程。其中 break 前面已经在 switch 语句中涉及,他可以跳出 switch 语句,进入并执行 switch 后面的语句。值得注意的

13、是 break语句不能用于循环语句和switch 之外的任何其他语句,也就是 break 跳出程序是限制在循环语句和switch 语句之中的。然而 continue 是结束本次循环,也就是跳出循环体下面尚未执行的语句,然后接着进行下一次是否执行循环的判定,不跳出循环体,两者的执行流程如下,以while 作为例子。而return 是表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return 后面的参数指定。return 后函数就结束了,后面的语句不再执行(这将在以后的函数中介绍)。两个while循环中的执行流线个流程如下:while (表达式1)while (表达式 1)If(表达式2)break;if(表达式2)continue; 分支结构的语句和循环语句在单片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论