C语法简介PPT演示文稿

上传人:W**** 文档编号:151012576 上传时间:2020-11-11 格式:PPT 页数:30 大小:522KB
返回 下载 相关 举报
C语法简介PPT演示文稿_第1页
第1页 / 共30页
C语法简介PPT演示文稿_第2页
第2页 / 共30页
C语法简介PPT演示文稿_第3页
第3页 / 共30页
C语法简介PPT演示文稿_第4页
第4页 / 共30页
C语法简介PPT演示文稿_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C语法简介PPT演示文稿》由会员分享,可在线阅读,更多相关《C语法简介PPT演示文稿(30页珍藏版)》请在金锄头文库上搜索。

1、第四章 C51语法简介,河工科技 瓮嘉民制作,第四章 C51语法简介,第五节 51单片机SFR中可位寻址的单元的位的定义,第四节 直接对51单片机的SFR的定义,第三节 变量定义的格式,第二节 数据与数据类型,第一节 关键字,第六节 51单片机中可位寻址区(0 x200 x2f)的访问,第十一节 C51的运算符和表达式,第十节 中断服务函数与寄存器组定义,第九节 函数的递归调用与再入函数,第八节 51单片机外扩I/O的访问,第七节 关键字bit和sbit区别,第十二节 C51流程控制语句,第十三节 C51的指针类型,第一节 关键字,表4-1 ANSI C标准的关键字,表4-1 ANSI C标准

2、的关键字 续表,表4-2 C51编译器的扩展关键字,第二节 数据与数据类型,数据具有一定格式的数字或数值叫做数据。 数据类型数据的不同格式叫做数据类型。 数据结构数据按一定的数据类型进行的排列、组合构架称为数据结构。,表4-3 Keil Vision2 C51编译器能够识别的数据类型,第三节 C51中变量定义的格式,C51中对变量进行定义的格式,表4-4 Keil C51编译器所能识别的存储器类型,存储器模式SMALL、COMPACT或LARGE来规定默认存储器类型, 确定变量的存储器空间,第四节 C51中直接对51单片机的SFR的定义,sfr 特殊功能寄存器名 地址常数; 例如: sfr P

3、0 = 0 x80 ;/定义I/O口P0,其地址为0 x80,注意: (1)sfr后面必须跟一个标识符作为寄存器名,名字可任意选取, 但应符合一般习惯。,(2)等号后面必须是常数,不允许有带运算符的表达式, 而该常数必须在SFR的地址范围之内(0 x800 xff)。,(3)新一带8051单片机,SFR经常组合成16位来使用。 采用关键字sfr16 来定义。例如对8052的定时器T2, 可采用如下方法定义: sfr16 T2 = 0 xcc; /定义TIMER2,其地址为T2L=0 xcc,T2H=0 xcd,第五节 C51中对51单片机的SFR中可位寻址的单元的位的定义,方法3:sbit 位

4、变量名字节地址位位置; 这种方法以一个整常数作为基地址,该值必须在0 x800 xff之间。“位位置”是一个0 7之间的常数。 例如:sbit OV=0XD02; sbit CY=0XD07;,定义方法有如下三种:,方法1: sbit 位变量名 位地址 ; 该方法将位的绝对地址赋给位变量, 位地址必须位于0 x800 xff之间。 例如: sbit OV=0 xd2; sbit CY=0 xd7;,方法2:sbit 位变量名特殊功能寄存器名位位置; 当可寻址位位于SFR时,可采用这种方法。特殊功能寄存器名必须是已定义的SFR的名字。“位位置”是一个07之间的常数。 例如: sfr PSW=0

5、xd0; /定义特殊功能寄存器名字 sbit OV = PSW2; /定义特殊功能寄存器中的位 sbit CY=PSW7; /定义特殊功能寄存器中的位,第六节 C51对51单片机中可位寻址区(0 x200 x2f)的访问,C51编译器提供了一个bdata存储器类型,允许将具有bdata类型的对象放入51片内可位寻址区。 例如: int bdata ibase; /在位寻址区定义一个整型变量ibase char bdata bary4;/在位寻址区定义一个数组bary4 使用关键字sbit 可独立访问可位寻址对象中的某一位。 例如: sbit mybit0=ibase0;,第七节 关键字bit

6、与sbit区别,sbit是一个独立的关键字。 bit是C51编译器的一种扩充数据类型,用来定义一个普通位变量,它的值是二进制数的0或1。 一个函数中可包含bit类型的参数,函数的返回值也可以为bit类型。,例如:static bit direction_bit; /定义一个静态位变量direction_bit extern bit lock_prt_port; /定义一个外部位变量lock_prt_port bit func(bit b0,bit b1) /*语句*/ return (b1); ,不能定义位指针,如不能定义: bit *bit_pointer; 也不能定义位数组,如不能定义:b

7、it b_array;,第八节 51单片机外扩I/O口的访问,访问外部I/O口的方法有三种。 1绝对宏 在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE,XBYTE,PWORD,DBYTE,CWORD,XWORD,PBYTE,DWORD 具体使用可看一看Keil C51中的absacc.h头文件便知。例如: rval=CBYTE0 x0002; / rval指向程序存储器的0002H地址 rval=XWORD0 x0002; / rval指向外RAM的2sizeof(unsigned int) = 0004H地址 2_at_关键字 直接在数据定义后加上_at

8、_ const 即可,但是注意: (1)绝对变量不能被初始化; (2)bit型函数及变量不能用_at_指定。例如: idata struct link list _at_ 0 x40 ; /指定list结构变量从40H开始,其中link 是结构,list是结构变量名 xdata char text256 _at_ 0 xE000;/指定text数组从0E000H开始 特别提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述。 3宏定义 例:#include #define rval CBYTE0 x0002 / rval 指向程序存储器的0002H地址 #

9、define rval XBYTE0 x0002 / rval 指向外RAM的2sizeof(unsigned int) = 0004H地址.,第九节 函数的递归调用与再入函数,在调用一个函数的过程中又间接或直接地调用该函数本身称为函数的递归调用。,再入函数是一种可以在函数体内不直接或间接调用其自身的一种函数,显然再入函数是可以进行递归调用的。,函数类型 函数名(形式参数表) reentrant 再入函数可被递归调用,无论何时,包括中断服务函数在内的任何函数都可调用再入函数。,中断服务函数的一般形式为: 函数类型 函数名(形式参数表)interrupt n using n,第十节 中断服务函数

10、与寄存器组定义,表4-5 常用中断号与中断向量,编写51单片机中断函数时应遵循以下原则: (1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明,都将导致编译出错。 (2)中断函数没有返回值,如果企图定义一个返回值,将得不到正确的结果。因此建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。 (3)在任何情况下,都不能直接调用中断函数,否则会产生编译错误。因为中断函数的退出是由51单片机指令RETI完成的,RETI指令影响51单片机的硬件中断系统。如果在没有实际中断请求的情况下直接调用中断函数,则RETI指令的操作结果会产生一个致命的错误。 (4)如果在中断函数中调用其他

11、函数,则被调用函数所使用的寄存器组必须与中断中断函数相同。用户必须保证按要求使用相同的寄存器组,否则会产生不正确的结果,这一点必须引起足够的注意。如果定义中断函数时没有使用using选项,则由编译器自动选择一个寄存器组作绝对寄存器组访问。另外,由于中断的产生不可预测,中断函数对其他函数的调用可能形成递规调用,需要时可将被中断函数所调用的其他函数定义成再入函数。 (5)C51编译器从绝对地址8n+3处产生一个中断向量,其中n为中断号。该向量包含一个到中断函数入口地址的绝对跳转。在对源程序编译时,可用编译控制命令NOINTVECTOR抑制中断向量的产生,从而使用户有能力从独立的汇编程序模块中提供中

12、断向量。,一、算术运算符和算术表达式,1基本算术运算符 + 加法运算符; - 减法(取负)运算符; * 乘法运算符; / 除法运算符; % 取余(模)运算符。 在这些运算符中,加、减和乘法符合一般的算术运算规则。除法运算时,如果是两个整数相除,其结果为整数,舍去小数部分;如果是两个浮点数相除,其结果为浮点数。 而对于取余运算,则要求两个运算对象均为整型数据。 求一个算术运算表达式的值时,要依运算符的优先级进行。算术运算符中取负运算优先级最高,其次为乘法、除法和取余,加法和减法优先级最低。也可以根据需要,在算术表达式中采用括号来改变运算符的优先级。,第十一节 C51的运算符和表达式,2自增、自减

13、运算符,+ 自增运算符;- 自减运算符 +和-运算符只能用于变量,不能用于常量和表达式。如,+j表示j先加1,再取表达式的值;j+表示先取表达式的值,j再加1。自减运算类同。,3类型转换 运算符两侧的数据类型不同时,要转换成同种类型。转换方式有两种情况: 一是自动转换,是指编译器在编译时自动进行的类型转换。顺序为:bitcharintlongfloat,signedunsigned。 二是强制类型转换,如:(double)a ,将a 强制转换为double类型。,二、关系运算符和关系表达式,1关系运算符 大于;= 大于等于;= = 等于; != 不等于 关系运算即比较运算。其优先级低于算术运算

14、,高于赋值运算。 在以上6种关系运算中,前4种优先级相同,处于高优先级;后2种优先级相同, 处于低优先级。,2关系表达式 关系表达式的值为逻辑值:真和假。C51中用0表示假,用1表示真。,三、逻辑运算符和逻辑表达式,1逻辑运算符 & 逻辑与; | | 逻辑或; ! 逻辑非 在三种逻辑运算中,逻辑非的优先级最高,且高于算术运算符; 逻辑或的优先级最低,低于关系运算符,但高于赋值运算符。,2逻辑表达式 逻辑表达式的值也为逻辑值:真和假。,C51提供6种位运算符: & 位与;| 位或; 位异或; 位取反; 右移 位运算的优先级顺序为:位取反、左移和右移、位与、位异或、位或。,四、位运算符,五、赋值和

15、复合赋值运算符,在C51中共有10种复合运算符: += 加法赋值; - = 减法赋值;*= 乘法赋值; /= 除法赋值; %= 取模赋值; = 右移位赋值;&= 逻辑与赋值;|= 逻辑或赋值; = 逻辑异或赋值;= 逻辑非赋值。,复合赋值运算的一般格式如下: 变量 复合运算赋值符 表达式,第十二节 C51流程控制语句,一、C51选择语句,1条件语句 条件语句由关键字if构成。有3种条件语句: (1)if(条件表达式)语句 若条件表达式的结果为真(非0值),则执行后面的语句;反之若条件表达式的结果为 假(0值),则不执行后面的语句。 例如: if(P1!= 0) w=20; (2)if(条件表达

16、式)语句1 else 语句2 若条件表达式的结果为真(非0值),则执行语句1;反之若条件表达式的结果为假 (0值),则执行语句2。 例如:if(P1!= 0) W=20; / 真 执行语句1 else W=0; / 假 执行语句2 (3)if (条件表达式1)语句1 else if (条件表达式2)语句2 else if (条件表达式3)语句3 else if (条件表达式n)语句n else 语句n+1 功能和开关语句switch相似,此种形式的条件语句常用于实现多方向条件分支。,2开关语句开关语句主要用于多分支的场合。一般形式为:switch (表达式) case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; case 常量表达式n:语句n; break; default : 语句n+1;开关语句执行时,将switch后面表达式的值与case后面各个常量表达式的值逐个进行比较,若匹配则执行相应ca

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号