C语法简介学习教案_第1页
C语法简介学习教案_第2页
C语法简介学习教案_第3页
C语法简介学习教案_第4页
C语法简介学习教案_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、会计学1C语法语法(yf)简介简介第一页,共29页。第十一节 C51的运算符和表达式第十节 中断服务(fw)函数与寄存器组定义第九节 函数(hnsh)的递归调用与再入函数(hnsh)第八节 51单片机外扩I/O的访问(fngwn)第七节 关键字bit和sbit区别第十二节 C51流程控制语句第十三节 C51的指针类型第1页/共29页第二页,共29页。第一节 关键字表4-1 ANSI C标准(biozhn)的关键字关键字关键字用途用途说明说明auto存储种类声明存储种类声明用于声明局部变量,默认值为此用于声明局部变量,默认值为此break程序语句程序语句退出最内层循环体退出最内层循环体case程

2、序语句程序语句switch语句中的选择项语句中的选择项char数据类型声明数据类型声明单字节整型数或字符型数据单字节整型数或字符型数据const存储类型声明存储类型声明在程序执行过程中不可修改的变量值在程序执行过程中不可修改的变量值continue程序语句程序语句转向下一次循环转向下一次循环defaut程序语句程序语句switch语句中的失败选择项语句中的失败选择项do程序语句程序语句构成构成do.while循环结构循环结构double数据类型声明数据类型声明双精度浮点数双精度浮点数else程序语句程序语句构成构成ifelse选择结构选择结构enum数据类型声明数据类型声明枚举枚举extern

3、存储种类声明存储种类声明在其他程序模块中声明了的全局变量在其他程序模块中声明了的全局变量float数据类型声明数据类型声明单精度浮点数单精度浮点数for程序语句程序语句构成构成for循环结构循环结构goto程序语句程序语句构成构成goto转移结构转移结构if程序语句程序语句构成构成ifelse选择结构选择结构第2页/共29页第三页,共29页。表4-1 ANSI C标准(biozhn)的关键字 续表int数据类型声明数据类型声明基本整型数基本整型数long数据类型声明数据类型声明长整型数长整型数register存储种类声明存储种类声明使用使用CPU内部寄存器的变量内部寄存器的变量return程序

4、语句程序语句函数返回函数返回short数据类型声明数据类型声明短整型数短整型数signed数据类型声明数据类型声明有符号数,二进制数据的最高位为符号位有符号数,二进制数据的最高位为符号位sizeof运算符运算符计算表达式或数据类型的字节数计算表达式或数据类型的字节数static存储种类声明存储种类声明静态变量静态变量struct数据类型声明数据类型声明结构类型数据结构类型数据switch程序语句程序语句构成构成switch选择结构选择结构typedef数据类型声明数据类型声明重新进行数据类型定义重新进行数据类型定义union数据类型声明数据类型声明联合类型数据联合类型数据unsigned数据类

5、型声明数据类型声明无符号数据无符号数据void数据类型声明数据类型声明无符号数据无符号数据volatile数据类型声明数据类型声明声明该变量在程序执行中可被隐含地改变声明该变量在程序执行中可被隐含地改变while程序语句程序语句构成构成while和和dowhile循环结构循环结构第3页/共29页第四页,共29页。表4-2 C51编译器的扩展(kuzhn)关键字关键字关键字用途用途说明说明_at_地址定位地址定位为变量进行存储器绝对空间地址定位为变量进行存储器绝对空间地址定位alien函数特性声明函数特性声明用以声明与用以声明与PL/M51兼容的函数兼容的函数bdata存储器类型声明存储器类型声

6、明可位寻址的可位寻址的8051内部数据存储器内部数据存储器bit位变量声明位变量声明声明一个位变量或位类型的函数声明一个位变量或位类型的函数code存储器类型声明存储器类型声明8051程序存储器空间程序存储器空间compact存储器模式存储器模式指定使用指定使用8051外部分页寻址数据存储器空间外部分页寻址数据存储器空间data存储器类型声明存储器类型声明直接寻址的直接寻址的8051内部数据存储器内部数据存储器idata存储器类型声明存储器类型声明间接寻址的间接寻址的8051内部数据存储器内部数据存储器interrupt中断函数声明中断函数声明定义一个中断服务函数定义一个中断服务函数large

7、存储器模式存储器模式指定使用指定使用8051外部数据存储器空间外部数据存储器空间pdata存储器类型声明存储器类型声明分页寻址的分页寻址的8051外部数据存储器外部数据存储器_priority_多任务优先级声明多任务优先级声明规定规定RTX51或或RTX51 Tiny的任务优先级的任务优先级reentrant再入函数声明再入函数声明定义一个再入函数定义一个再入函数sbit位变量声明位变量声明声明一个可位寻址变量声明一个可位寻址变量sfr特殊功能寄存器声明特殊功能寄存器声明声明一个声明一个8位的特殊功能寄存器位的特殊功能寄存器sfr16特殊功能寄存器声明特殊功能寄存器声明声明一个声明一个16位的

8、特殊功能寄存器位的特殊功能寄存器small存储器模式存储器模式指定使用指定使用8051内部数据存储器空间内部数据存储器空间_task_任务声明任务声明定义实时多任务函数定义实时多任务函数using寄存器组定义寄存器组定义定义定义8051的工作寄存器组的工作寄存器组xdata存储器类型声明存储器类型声明8051外部数据存储器外部数据存储器第4页/共29页第五页,共29页。第二节 数据(shj)与数据(shj)类型数据具有一定(ydng)格式的数字或数值叫做数据。数据类型数据的不同格式叫做数据类型。数据结构数据按一定(ydng)的数据类型进行的排列、组合构架称为数据结构。表4-3 Keil Vis

9、ion2 C51编译器能够(nnggu)识别的数据类型数据类型数据类型长度(长度(bit)长度(长度(byte)值域范围值域范围unsigned char810255signed char81-128+ 127unsigned int162065536signed int162-3276832767unsigned long32404294967295signed long324-21474836482147483647float3241.175494E-383.402823E+38*13对象的地址对象的地址bit110或或1sfr2810255sfr163162065536sbit410或或

10、1第5页/共29页第六页,共29页。第三节 C51中变量定义(dngy)的格式C51中对变量(binling)进行定义的格式 第6页/共29页第七页,共29页。表4-4 Keil C51编译器所能识别(shbi)的存储器类型存贮类存贮类型型长度长度(byte)值域范围值域范围与存贮空间的对应关系与存贮空间的对应关系data10255直接寻址的片内数据存储器(直接寻址的片内数据存储器(128字节),字节),访问速度最快访问速度最快bdata可位寻址的片内可位寻址的片内RAM(20H2FH,共,共16字字节节),允许位与字节混合访问允许位与字节混合访问idata10255间接访问的片内间接访问的片

11、内RAM(256字节),字节),允许访问全部片内地址允许访问全部片内地址pdata10255分页寻址的片外分页寻址的片外RAM(256字节字节),用用MOVX Ri指令访问指令访问xdata2065535片外片外RAM(64K字节字节),用用MOVX DPTR指令访问指令访问code2065535ROM(64K字节),字节),用用MOVC A+DPTR指令访问指令访问存储器模式SMALL、COMPACT或LARGE来规定(gudng)默认存储器类型,确定变量的存储器空间 第7页/共29页第八页,共29页。第四节 C51中直接(zhji)对51单片机的SFR的定义sfr 特殊(tsh)功能寄存器

12、名 地址常数;例如: sfr P0 = 0 x80 ;/定义I/O口P0,其地址为0 x80注意(zh y): (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第8页/共29页第九页,共29页。第五节 C51中

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

14、须是已定义的SFR的名字。“位位置”是一个07之间的常数。例如:sfr PSW=0 xd0; /定义特殊功能寄存器名字sbit OV = PSW2; /定义特殊功能寄存器中的位sbit CY=PSW7; /定义特殊功能寄存器中的位第9页/共29页第十页,共29页。第六节第六节 C51对对51单片机中可位寻址区单片机中可位寻址区(0 x200 x2f)的访问)的访问(fngwn) C51编译器提供了一个bdata存储器类型,允许将具有bdata类型的对象放入51片内可位寻址区。 例如: int bdata ibase; /在位(ziwi)寻址区定义一个整型变量ibase char bdata b

15、ary4;/在位(ziwi)寻址区定义一个数组bary4 使用关键字sbit 可独立访问可位寻址对象中的某一位。例如: sbit mybit0=ibase0;第10页/共29页第十一页,共29页。第七节 关键字bit 与sbit区别(qbi)sbit是一个独立的关键字。bit是C51编译器的一种扩充数据类型,用来定义一个普通位变量,它的值是二进制数的0或1。一个函数(hnsh)中可包含bit类型的参数,函数(hnsh)的返回值也可以为bit类型。例如:static bit direction_bit; /定义一个静态(jngti)位变量direction_bitextern bit lock_

16、prt_port; /定义一个外部位变量lock_prt_portbit func(bit b0,bit b1) /*语句*/ return (b1); 不能定义位指针,如不能定义: bit *bit_pointer;也不能定义位数组,如不能定义:bit b_array;第11页/共29页第十二页,共29页。第八节 51单片机外扩I/O口的访问(fngwn)访问外部I/O口的方法有三种。1绝对宏在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括(boku):CBYTE,XBYTE,PWORD,DBYTE,CWORD,XWORD,PBYTE,DWORD 具体使用可看一看Ke

17、il C51中的absacc.h头文件便知。例如: rval=CBYTE0 x0002; / rval指向程序存储器的0002H地址 rval=XWORD0 x0002; / rval指向外RAM的2 sizeof (unsigned int) = 0004H地址2_at_关键字直接在数据定义后加上_at_ const 即可,但是注意:(1)绝对变量不能被初始化;(2)bit型函数及变量不能用_at_指定。例如:idata struct link list _at_ 0 x40 ;/指定list结构变量从40H开始,其中link 是结构,list是结构变量名xdata char text256

18、 _at_ 0 xE000;/指定text数组从0E000H开始特别提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述。3宏定义例:#include #define rval CBYTE0 x0002 / rval 指向程序存储器的0002H地址#define rval XBYTE0 x0002 / rval 指向外RAM的2 sizeof (unsigned int) = 0004H地址.第12页/共29页第十三页,共29页。第九节第九节 函数函数(hnsh)的递归的递归调用与再入函数调用与再入函数(hnsh)在调用一个函数的过程(guchng)中又间

19、接或直接地调用该函数本身称为函数的递归调用。 再入函数是一种可以在函数体内不直接或间接(jin ji)调用其自身的一种函数,显然再入函数是可以进行递归调用的。函数类型 函数名(形式参数表) reentrant再入函数可被递归调用,无论何时,包括中断服务函数在内的任何函数都可调用再入函数。 第13页/共29页第十四页,共29页。中断服务函数(hnsh)的一般形式为: 函数(hnsh)类型 函数(hnsh)名(形式参数表)interrupt n using n第十节 中断(zhngdun)服务函数与寄存器组定义表4-5 常用(chn yn)中断号与中断向量中断号中断号中断源中断源中断向量中断向量8

20、n+30外部中断外部中断00003H1定时器定时器0000BH2外部中断外部中断10013H3定时器定时器1001BH4串行口串行口0023H5定时器定时器2002BH(8052系列特有系列特有)第14页/共29页第十五页,共29页。编写51单片机中断函数时应遵循以下原则:(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明,都将导致编译出错。(2)中断函数没有返回值,如果企图定义一个返回值,将得不到正确的结果。因此建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。(3)在任何情况下,都不能直接调用中断函数,否则会产生(chnshng)编译错误。因为中断函数的退出是由

21、51单片机指令RETI完成的,RETI指令影响51单片机的硬件中断系统。如果在没有实际中断请求的情况下直接调用中断函数,则RETI指令的操作结果会产生(chnshng)一个致命的错误。(4)如果在中断函数中调用其他函数,则被调用函数所使用的寄存器组必须与中断中断函数相同。用户必须保证按要求使用相同的寄存器组,否则会产生(chnshng)不正确的结果,这一点必须引起足够的注意。如果定义中断函数时没有使用using选项,则由编译器自动选择一个寄存器组作绝对寄存器组访问。另外,由于中断的产生(chnshng)不可预测,中断函数对其他函数的调用可能形成递规调用,需要时可将被中断函数所调用的其他函数定义

22、成再入函数。(5)C51编译器从绝对地址8n+3处产生(chnshng)一个中断向量,其中n为中断号。该向量包含一个到中断函数入口地址的绝对跳转。在对源程序编译时,可用编译控制命令NOINTVECTOR抑制中断向量的产生(chnshng),从而使用户有能力从独立的汇编程序模块中提供中断向量。第15页/共29页第十六页,共29页。一、算术(sunsh)运算符和算术(sunsh)表达式1基本算术运算符+ 加法运算符; - 减法(取负)运算符; * 乘法运算符; / 除法运算符;% 取余(模)运算符。 在这些运算符中,加、减和乘法符合一般的算术运算规则。除法运算时,如果是两个整数相除,其结果为整数,

23、舍去小数(xiosh)部分;如果是两个浮点数相除,其结果为浮点数。 而对于取余运算,则要求两个运算对象均为整型数据。 求一个算术运算表达式的值时,要依运算符的优先级进行。算术运算符中取负运算优先级最高,其次为乘法、除法和取余,加法和减法优先级最低。也可以根据需要,在算术表达式中采用括号来改变运算符的优先级。 第十一节 C51的运算符和表达式 第16页/共29页第十七页,共29页。2自增、自减运算符+ 自增运算符;- 自减运算符+和-运算符只能用于变量,不能用于常量(chngling)和表达式。如,+j表示j先加1,再取表达式的值;j+表示先取表达式的值,j再加1。自减运算类同。3类型转换 运算

24、符两侧的数据类型不同时,要转换成同种类型。转换方式有两种情况:一是自动转换,是指编译(biny)器在编译(biny)时自动进行的类型转换。顺序为:bitcharintlongfloat,signedunsigned。二是强制类型转换,如:(double)a ,将a 强制转换为double类型。第17页/共29页第十八页,共29页。二、关系(gun x)运算符和关系(gun x)表达式1关系运算符 小于; 大于;= 大于等于(dngy);= = 等于(dngy);!= 不等于(dngy)关系运算即比较运算。其优先级低于算术运算,高于赋值运算。在以上6种关系运算中,前4种优先级相同,处于高优先级;

25、后2种优先级相同,处于低优先级。2关系表达式关系表达式的值为逻辑值:真和假。C51中用(zhngyng)0表示假,用1表示真。三、逻辑运算符和逻辑表达式1逻辑运算符 & 逻辑与; | | 逻辑或; ! 逻辑非 在三种逻辑运算中,逻辑非的优先级最高,且高于算术运算符;逻辑或的优先级最低,低于关系运算符,但高于赋值运算符。2逻辑表达式 逻辑表达式的值也为逻辑值:真和假。第18页/共29页第十九页,共29页。C51提供6种位运算(yn sun)符:& 位与;| 位或; 位异或; 位取反; 右移位运算(yn sun)的优先级顺序为:位取反、左移和右移、位与、位异或、位或。四、位运算符五、赋值和复合(f

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

27、果为假(0值),则不执行后面的语句(yj)。例如: if(P1!= 0) w=20;(2)if(条件表达式)语句(yj)1 else 语句(yj)2若条件表达式的结果为真(非0值),则执行语句(yj)1;反之若条件表达式的结果为假(0值),则执行语句(yj)2。例如:if(P1!= 0) W=20; / 真 执行语句(yj)1 else W=0; / 假 执行语句(yj)2(3)if (条件表达式1)语句(yj)1 else if (条件表达式2)语句(yj)2 else if (条件表达式3)语句(yj)3 else if (条件表达式n)语句(yj)n else 语句(yj)n+1功能和开

28、关语句(yj)switch相似,此种形式的条件语句(yj)常用于实现多方向条件分支。第20页/共29页第二十一页,共29页。2开关语句开关语句主要用于多分支的场合。一般形式为:switch (表达式) case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; case 常量表达式n:语句n; break; default : 语句n+1;开关语句执行时,将switch后面表达式的值与case后面各个常量表达式的值逐个(zhg)进行比较,若匹配则执行相应case后面的语句,然后执行break语句。 break语句的功能是中止当前语句的执行,使程序跳出swit

29、ch语句。若没有匹配的情况,则执行语句n+1。第21页/共29页第二十二页,共29页。二 、 C 5 1 循 环(xnhun)语句 1while语句一般形式为: while(条件表达式)语句;/先检查条件,后执行若条件表达式的结果为真(非0值),程序(chngx)就重复执行后面的语句,一直执行到条件表达式的结果变为假(0值)时为止。这种循环结构是先检查条件表达式给出的条件,再根据检查的结果决定是否执行后面的语句。如果条件表达式的结果一开始就为假,则后面的语句一次也不能执行。2do-while语句一般形式为:do语句while(条件表达式);/先执行,后检查条件该结构的特点是先执行给定的循环(x

30、nhun)语句,然后再检查条件表达式的结果。当条件表达式的值为真(非0值),则重复执行循环(xnhun)体语句,直到条件表达式的值变为假(0值)时为止。对于此种结构,在任何条件下,循环(xnhun)体语句至少会被执行一次。3for语句一般形式为: for(初值表达式;条件表达式;更新表达式) 语句该语句执行时,先计算初值表达式,作为循环控制变量的初值,再检查条件表达式的结果,当满足条件时就执行循环体语句并计算更新表达式,然后再根据更新表达式的计算结果来判断循环条件是否满足,一直进行到循环条件表达式的结果为假(0值)时退出循环体。第22页/共29页第二十三页,共29页。l4if语句与goto语句

31、结合(jih)l利用if语句与goto语句的结合(jih),可以构成循环结构。可以有两种形式: l(1)当型循环lloop: if(表达式)l 语句l goto loop;l l(2)直到型循环lloop: 语句l if(表达式) goto loop;l 5break和continue语句(yj)(1)break语句前面已介绍过用break语句可以跳出(tio ch)switch结构,使程序继续执行switch结构后面的一个语句。使用break语句还可以从循环体中跳出(tio ch)循环,提前结束循环而接着执行循环结构下面的语句。它不能用在除了循环语句和switch语句之外的任何其它语句中。(2)continue语句continue语句用在循环结构中,用于结束本次循环,跳过循环体中continue下面尚未执行的语句,直接进行下一次是否执行循环的判定。continue语句和break语句的区别在于:continue语句只是结束本次循环而不是终止整个循环;break语句则是结束循环,不再进行条件判断。第23页/共29页第二十四页,共29页。6return语句return语句一般放在函数的最后位置(wi zhi),用于终止函数的执行,并控制程序返回调用该函数时所处的位置(wi zhi)。返回时还可以通过return语句带回返回值。return语句格式有两种:(1)

温馨提示

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

评论

0/150

提交评论