《第三章 picc程序流程设计》由会员分享,可在线阅读,更多相关《第三章 picc程序流程设计(29页珍藏版)》请在金锄头文库上搜索。
1、第三章 PICC程序流程设计,4.1 PICC语句概述 PICC语句:以“;”作分隔符,编译后产生机器指令. PICC语句分类 表达式语句:表达式加分号构成。,空语句: ;,程序控制语句(9种):,如 PORTC=0X00;PORTC_0=1;delay( );,复合语句:用 括起来的一组语句 一般形式: 数据说明部分;执行语句部分; 说明: “”后不加分号 语法上和单一语句相同 复合语句可嵌套,补充,函数调用规则低档PIC通过汇编跳转指令、查表及转移表等方式实现函数的调用。注意:必须在保存转移表地址后才直接跳至函数所在的地址,其代价是消耗大量的存储空间 和程序执行速度。限定词fastcall
2、的使用可以禁止查表操作 函数返回值8 bit : 低档PIC,通过内存临时程序块返回;中档PIC,通过W寄存器返回;16 bit、32 bit 返回值以及4B和更小的返回值(结构和联合)都以最少的有效字保存在最低的存储单元;大于4B的结构或联合返回值会被复制到结构块(struct psect)中;,4.2 程序的三种基本结构 结构化程序设计 基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto) 结构化程序:由三种基本结构反复嵌套构成的程序叫 优点:结构清晰,易读,提高程序设计质量和效率 三种基本结构 顺序结构,选择结构,二分支选择结构,多分支选择结构,循环结构,当型循
3、环结构,直到型循环结构,注:A,B,A1.An可以是一个简单语句,也可以是一个基本结构,例:if (RA4=0)PORTC=0X00;,形式二: 格式:if (expression) statement1elsestatement2 执行过程:,例:if (RA4=0) PORTC=0x00;else PORTC=0XFF;,形式三: 格式:,if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 . else statementn ,执行过程:,如:if(RD0=0,说明: if后面的表达
4、式类型任意,语句可以是复合语句if(x) if(x!=0)if(!x) if(x=0),#include #define PORTAIT(adr,bit) (unsigned)( ,例 判断RA4按键是否按下,是则RB0RB3指示灯亮,否则指示灯暗,此例已在PIC16F877实验板上调试成功,if语句嵌套: 一般形式:,if else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对,例: if (a=b)if(b=c) goto loop1;elsegoto loop2;,修改: if (a=b) if(b=c) goto loop1;else goto loop2;,实现
5、if else 正确配对方法:加 ,4.4 循环型程序设计 概述 C语言可实现循环的语句: 用goto 和 if 构成循环 while 语句 do while 语句 for 语句 goto语句及用goto构成循环 goto语句一般格式:,goto 语句标号;. 标号:语句;,功能:无条件转移语句 goto语句只能在下列情况下使用: 从某个程序块外层的一条goto雨季转到同一个程序块外层的一条语句标号. 从一个程序块中的一条goto语句转到包围它的程序块的外层的一条有标号语句. 限制使用goto语句,因为语句会破坏程序的模块化结构,会使程序的可读性变差.,#include void main(v
6、oid) int i,sum=0;i=1; loop: if(i=100) sum+=i;i+;goto loop;,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,例 用if 和goto语句构成循环,while语句 一般形式:,while(表达式) 循环体语句;,执行流程:,特点:先判断表达式,后执行循环体 说明: 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break,return,goto 无限循环: while(1)循环体;,#include void m
7、ain(void) int i,sum=0;i=1;while(i=100) sum=sum+i;i+; ,例 用while循环,dowhile语句 一般形式:,do 循环体语句;while(表达式);,执行流程:,特点:先执行循环体,后判断表达式 说明: 至少执行一次循环体 dowhile可转化成while结构,for语句 一般形式:,for(expr1 ; expr2 ; expr3)循环体语句;,执行流程:,for语句一般应用形式:,for(循环变量赋初值;循环条件;循环变量增值) 循环体语句; ,说明: for语句中expr1, expr2 ,expr3 类型任意,都可省略,但分号;不
8、可省 无限循环: for(;) for语句可以转换成while结构,expr1; while(expr2) 循环体语句;expr3; ,循环的嵌套 三种循环可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程,(1) while() while() .,(2) do do while( );.while( );,(3) while() do while( );.,(4) for( ; ;) do while();while() . ,嵌套循环的跳转 禁止: 从外层跳入内层 跳入同层的另一循环 向上跳转,4.5 辅助控制语句 break语句 功能:在循环语句和switch语句中,终止并跳出循环体或开关体 说明: break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中,例 循环输出数字09,#include #include “HD44780.h“ #define PORTBIT(adr,bit) (unsigned)(,例 循环输出数字09.试与前例作比较,#include #include “HD44780.h“ #define PORTBIT(adr,bit) (unsigned)(,