第七课C51语言的结构和特点课件.ppt

上传人:飞****2 文档编号:69541706 上传时间:2023-01-06 格式:PPT 页数:78 大小:393KB
返回 下载 相关 举报
第七课C51语言的结构和特点课件.ppt_第1页
第1页 / 共78页
第七课C51语言的结构和特点课件.ppt_第2页
第2页 / 共78页
点击查看更多>>
资源描述

《第七课C51语言的结构和特点课件.ppt》由会员分享,可在线阅读,更多相关《第七课C51语言的结构和特点课件.ppt(78页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机单片机C51语言语言C51特点nC语言作为一种非常方便的结构化语言而得到广泛语言作为一种非常方便的结构化语言而得到广泛的支持,国内最通用的是的支持,国内最通用的是Keil C51。nC语言程序本身不依赖于机器硬件系统,基本上不语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。作修改就可将程序从不同的单片机中移植过来。nC提供了丰富的数据类型、很多数学函数并支持浮提供了丰富的数据类型、很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。程序可读性和可维护性。n与与汇编语言相比,汇编语

2、言相比,C语言的优点如下:语言的优点如下:对单片机的指令系统不要求了解,仅要求对对单片机的指令系统不要求了解,仅要求对8051 的的存贮器结构有初步了解存贮器结构有初步了解;寄存器分配、不同存贮器的寻址及数据类型等细节可寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;由编译器管理;程序有规范的结构,可分成不同的函数,这种方式可程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;使程序结构化;具有将可变的选择与特殊操作组合在一起的能力,改具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;善了程序的可读性;提供的库包含许多标准子程序,具有较强的数据处理能力;提供的

3、库包含许多标准子程序,具有较强的数据处理能力;由于具有方便的模块化编程技术,使已编好程序可容由于具有方便的模块化编程技术,使已编好程序可容易地移植。易地移植。C51-1:C51基本结构基本结构n怎样学习C51?n/功能:控制八个信号灯闪烁程序功能:控制八个信号灯闪烁程序n#include/定义了定义了MCS-52单片机的特殊功能寄存器单片机的特殊功能寄存器nvoid delay(unsigned char i);/延时函数声明延时函数声明nvoid main()/主函数主函数nn while(1)n P1=0 x00;/点亮八个点亮八个LEDn delay(200);/延时延时n P1=0 x

4、ff;/熄灭八个熄灭八个LEDn delay(200);/延时延时n nn/函数名:函数名:delayn/函数功能:实现软件延时函数功能:实现软件延时n/形式参数:形式参数:unsigned char i;nvoid delay(unsigned char i)/延时函延时函数,无符号字符型变量数,无符号字符型变量i为形式参数为形式参数nn unsigned char j,k;/定义无符号字符型变量定义无符号字符型变量j和和kn for(k=0;ki;k+)/双重双重for循环语句实现软件延时循环语句实现软件延时n for(j=0;j255;j+);nn C51的程序结构#include#in

5、clude void delay()void delay();void main()void main()delay();delay();P0=0 x33 P0=0 x33;头文件(一个或若干个)头文件(一个或若干个)主函数主函数n 程序的入口程序的入口 函数名固定,且与书写的位置无关函数名固定,且与书写的位置无关n 有且仅有一个有且仅有一个函数声明或定义函数声明或定义n 库函数或用户自定义的函数库函数或用户自定义的函数n 可以有若干个可以有若干个C51程序大体上是程序大体上是若干函数的集合若干函数的集合C程序基本结构程序基本结构n一个一个C语言源程序是由一个或若干个函数语言源程序是由一个或若

6、干个函数组成,每一个函数完成相对独立的功能。组成,每一个函数完成相对独立的功能。n每个每个C程序都必须有(且仅有)一个主函程序都必须有(且仅有)一个主函数数main(),程序的执行总是从主函数开始,程序的执行总是从主函数开始,调用其他函数后返回主函数调用其他函数后返回主函数main(),不管,不管函数的排列顺序如何,最后在主函数中结函数的排列顺序如何,最后在主函数中结束整个程序。束整个程序。C51编程要点编程要点nC语言程序中可以有预处理命令,语言程序中可以有预处理命令,预处理命令通常放在源程序的最前预处理命令通常放在源程序的最前面。面。nC语言程序使用语言程序使用“;”作为语句的作为语句的结

7、束符,一条语句可以多行书写,结束符,一条语句可以多行书写,也可以一行书写多条语句。也可以一行书写多条语句。nC语言区分大小写。语言区分大小写。n用用/*/或或/注释。注释。Main主函数名;主函数名;void函数类型,空类型函数类型,空类型无返回值;()内为形参,无返回值;()内为形参,内为函内为函数体数体 C语言编程的三大要素语言编程的三大要素n 数据数据数据类型、数据结构、存储类型数据类型、数据结构、存储类型n运算运算算术运算、关系运算、逻辑运算、位操作算术运算、关系运算、逻辑运算、位操作n 控制控制顺序结构、选择结构、循环结构、函数顺序结构、选择结构、循环结构、函数C语言标识符 nC语言

8、中语言中由由字母字母、数字数字和和下划线下划线组成的字符序列组成的字符序列称为称为-标识符标识符。n用于在程序中给变量、符号常量、数组、函数、用于在程序中给变量、符号常量、数组、函数、数据类型等操作对象数据类型等操作对象“起名起名”。1 1编译系统定义标识符编译系统定义标识符由编译系统定义由编译系统定义,具有固定名字和特定含义具有固定名字和特定含义分为分为关键字关键字和和预定义标识符预定义标识符 2 2用户自定义标识符用户自定义标识符 用于对用户使用的变量、数组、函数等操用于对用户使用的变量、数组、函数等操作对象进行命名。作对象进行命名。C语言对标识符的规定 n用户自定义标识符:用户自定义标识

9、符:由由字母字母、数字数字和和下划线下划线构成,但必须以构成,但必须以字母字母或或下划线下划线“_”_”开头开头,不能以数字开头,不能以数字开头不能含有除字母、数字和下划线不能含有除字母、数字和下划线“_”_”外的其他外的其他字符如:字符如:!、&、*等。等。标识符中大小写字母含义不同标识符中大小写字母含义不同 如:如:abcabc和和AbcAbc为不同的标识符为不同的标识符n关键字关键字:必须用小写字母。不允许使用关键必须用小写字母。不允许使用关键字为变量、数组、函数等操作对象命名。字为变量、数组、函数等操作对象命名。n预定义标识符预定义标识符:允许用户对它们重新定义,允许用户对它们重新定义

10、,当重新定义后将改变它们原来的含义。当重新定义后将改变它们原来的含义。正确区分标识符n正正确确区区分分哪哪些些是是合合法法标标识识符符,哪哪些些是是不不合合法标识符法标识符。n合合法法标标识识符符中中哪哪些些是是关关键键字字,哪哪些些是是预预定定义标识符义标识符,哪些是,哪些是用户自定义标识符用户自定义标识符。Abc P1_0 2x P1.0 studentm+y a#b-4 _1 Whileint let x%y LED do w tm Ctrl switch include C51-2 数据类型数据类型1.关键字关键字 关键字关键字是是C51语言规定的一批标识符,在语言规定的一批标识符,在

11、源程序中代表固定的含义,不能另作它用。源程序中代表固定的含义,不能另作它用。C51语言除了支持语言除了支持ANSI标准标准C语言中的关语言中的关键字键字(见见表表4-1)外,还根据外,还根据51系列单片机的结系列单片机的结构特点扩展部分关键字,见构特点扩展部分关键字,见表表4-2。2.预定义标识符预定义标识符 预定义标识符预定义标识符是指是指C51语言提供的系统语言提供的系统函数的名字函数的名字(如如printf、scanf)和预编译处理命和预编译处理命令令(如如define、include)等。等。C51语言语法允许用户把这类标识符另语言语法允许用户把这类标识符另作它用,但将使这些标识符失去

12、系统规定的作它用,但将使这些标识符失去系统规定的原意。因此,为了避免误解,建议用户不要原意。因此,为了避免误解,建议用户不要把预定义标识符另作它用。把预定义标识符另作它用。3、C51的数据数据类型数据类型长度长度值域值域 bit1 bit0,1 unsigned char8 bit0 255 (signed)char8 bit-128 127 unsigned int16 bit0 65535 (signed)int16 bit-32768 32767 unsigned long32 bit0 4294967295 (signed)long32 bit-21474836482147483647

13、 float32 bit1.7e-38 3.40e+38 (6位)double64 bit1.7e-38 3.40e+38 (10位)*(一般指针)13字节存储空间地址3-1、C51的数据类型的数据类型C51语言的数据类型 C51数据类型数组类型数组类型结构体类型结构体类型(struct)共用体类型共用体类型(union)整型整型整型整型(int(int、shortshort、long)long)字符型字符型字符型字符型(char(char、unsignedchar)unsignedchar)浮点型浮点型浮点型浮点型(float(float、double)double)枚举类型枚举类型(enu

14、m)特殊功能寄存器类型特殊功能寄存器类型特殊功能寄存器类型特殊功能寄存器类型(sfr(sfr和和和和sfr16)sfr16)位类型位类型位类型位类型(bit(bit和和和和sbit)sbit)基本类型基本类型基本类型基本类型指针类型指针类型(*)空类型空类型空类型空类型(void)(void)构造类型构造类型n1char 字符类型字符类型char类型的长度是一个字节,通常类型的长度是一个字节,通常用于定义处理字符数据的变量或常用于定义处理字符数据的变量或常量。量。分无符号字符类型分无符号字符类型unsigned char和有符号字符类型和有符号字符类型signed char,默认值为默认值为s

15、igned char类型。类型。n字符型变量分为:字符型变量分为:signedchar和和 unsigned charn编译系统为其分配编译系统为其分配 1 Byte 1 Byte(字节)的存储空间(字节)的存储空间(Turbo CTurbo C、VC+6.0VC+6.0和和KeilKeil中均分配中均分配1B1B的存储空间)的存储空间)n表示的数值范围:表示的数值范围:signedchar:-128127 unsigned char:0255n字符型变量字符型变量定义形式:定义形式:char 字符变量名字符变量名=初值初值;例如:例如:char ch1,c1;unsigned char c2

16、=a,c3=A,c4=307;例如例如:int a,b;(指定变量、为(指定变量、为整型整型)char x,y;(指定变量指定变量x x、y y为为字符型字符型)unsigned w,u;(指定变量指定变量w w、u u为为无符号整型无符号整型)unsigned char c,d;(指定变量、为(指定变量、为无符号无符号字符型字符型)n2int 整型整型int整型长度为两个字节,用于存放一个双整型长度为两个字节,用于存放一个双字节数据。字节数据。分有符号分有符号int整型数整型数signed int和无符号整型和无符号整型数数unsigned int,默认值为,默认值为signed int类型

17、类型n根据值大小默认类型。根据值大小默认类型。n 整型常量后面加整型常量后面加l或或L,则认为是,则认为是 long int型型 如:如:123L、0L、432l、0 x100ln 整型常量后面加整型常量后面加u或或U,则认为是,则认为是 unsigned int型型如:如:0 xF8A5U、0745u、-244u、-98U等等n3long 长整型长整型long长整型长度为四个字节,用于存放一个四字节长整型长度为四个字节,用于存放一个四字节数据。分有符号数据。分有符号long长整型长整型signed long和无符号和无符号长整型长整型unsigned long,默认值为,默认值为signed

18、 long类型。类型。n 4float 浮点型浮点型float浮点型在十进制中具有浮点型在十进制中具有7位有效数字,是符合位有效数字,是符合IEEE754标准的单精度浮点型数据,占用四个字标准的单精度浮点型数据,占用四个字节节。n5指针型指针型指针型本身就是一个变量,在这个变量中存放的是指针型本身就是一个变量,在这个变量中存放的是另一个数据的地址。这个指针变量要占据一定的内另一个数据的地址。这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同。存单元,对不同的处理器长度也不尽相同。n6bit 位变量位变量 bit类型-定义1个位变量,值为0或1.其存储器类型只能是bdata、data

19、、idata,严格讲只能是:bdata 所有的所有的bit变量都放在变量都放在80C51内部存储内部存储区的可位寻址区,而该区域只有区的可位寻址区,而该区域只有16字节长,字节长,所以在某个范围内只能声明最多所以在某个范围内只能声明最多128个位变个位变量。量。nbit flag;/定义一个位变量定义一个位变量flagnbit flag=1;/定义一个位变量定义一个位变量flag并赋初值并赋初值1对位变量定义的限制n 不能定义成一个指针,如不能定义:bit*pointer;n 不存在位数组如不能定义:bit b_array n 位变量定义时,存储类型只允许为data、bdata或者idata,

20、如果将位变量的存贮类型定义成其它类型都将导致编译出错。7 sfr类型类型-用于定义用于定义1个个8位的特殊功能寄位的特殊功能寄存器存器定义形式:定义形式:sfr 标识符标识符=8位特殊功能寄存器在内部位特殊功能寄存器在内部RAM中的中的实际实际地址;地址;标识符可为汇编语言中的特殊功能寄存器标识符可为汇编语言中的特殊功能寄存器名或自己任意命名名或自己任意命名 如:如:sfr P0=0 x80;sfr PSW=0 xd0;sfr TMOD=0X89;8 sfr16类型类型-用于定义用于定义1个个16位的特殊功能寄存器位的特殊功能寄存器定义形式:定义形式:sfr16 标识符标识符=16位特殊功能寄

21、存器的位特殊功能寄存器的低字节地址低字节地址;51子系列中只有子系列中只有DPTR为为16位的特殊功能寄存器:位的特殊功能寄存器:由由DPH和和DPL组成,其地址分别为组成,其地址分别为0 x82和和0 x83,地地址连续址连续。sfr16 DPTR=0 x82;/*地址为低字节单元的地址地址为低字节单元的地址*/52子系列中子系列中T2可定义如下:可定义如下:sfr16 T2=0 xCC;T0和和T1不能用不能用sfr16进行定义:进行定义:sfr16 T0=0 x8A;/*错误,错误,TL0和和TH0地址不连续地址不连续*/sfr16 T1=0 x8B;/*错误,错误,TL1和和TH1地址

22、不连续地址不连续*/n9sbit 可寻址位可寻址位 sbit是是C51中的一种扩充数据类型,利用它可以中的一种扩充数据类型,利用它可以访问芯片内部的访问芯片内部的RAM中的可寻址位或特殊功能寄存中的可寻址位或特殊功能寄存器中的可寻址位。器中的可寻址位。sbit类型类型-定义定义bdata区或可位寻址特殊功能寄存器(字节地区或可位寻址特殊功能寄存器(字节地址的末位为址的末位为0或或8)中的位,值也为)中的位,值也为0或或1.如:如:sfr P1=0 x90;sbit P1_0=P10;或或sbit P1_0=0 x900;或或sbit P1_0=0 x90;sbit EA=0 xAF;sbit

23、IT0=0 x88;sbit P=0 xD0;注:安装注:安装Keil软件后,在文件夹软件后,在文件夹“C:keilc51inc”中有一些中有一些头文件包含了有关特殊功能寄存器和相应位的定义。头文件包含了有关特殊功能寄存器和相应位的定义。reg51.h头文件内容:/*BYTE Register */sfr P0 =0 x80;sfr P1 =0 x90;sfr P2 =0 xA0;sfr P3 =0 xB0;sfr PSW =0 xD0;sfr ACC =0 xE0;sfr B =0 xF0;sfr SP =0 x81;sfr DPL =0 x82;sfr DPH =0 x83;sfr PCO

24、N=0 x87;sfr TCON=0 x88;sfr TMOD=0 x89;sfr TL0 =0 x8A;sfr TL1 =0 x8B;sfr TH0 =0 x8C;sfr TH1 =0 x8D;sfrIE=0 xA8;sfrIE=0 xA8;sfrIP=0 xB8;sfrIP=0 xB8;sfrSCON=0 x98;sfrSCON=0 x98;sfrSBUF=0 x99;sfrSBUF=0 x99;/*BITRegister*/*BITRegister*/*PSW*/*PSW*/sbitCY=0 xD7;sbitCY=0 xD7;sbitAC=0 xD6;sbitAC=0 xD6;sbitF

25、0=0 xD5;sbitF0=0 xD5;sbitRS1=0 xD4;sbitRS1=0 xD4;sbitRS0=0 xD3;sbitRS0=0 xD3;sbitOV=0 xD2;sbitOV=0 xD2;sbitP=0 xD0;sbitP=0 xD0;/*TCON*/*TCON*/sbitTF1=0 x8F;sbitTF1=0 x8F;sbitTR1=0 x8E;sbitTR1=0 x8E;sbitTF0=0 x8D;sbitTF0=0 x8D;sbitTR0=0 x8C;sbitTR0=0 x8C;sbitIE1=0 x8B;sbitIE1=0 x8B;sbitIT1=0 x8A;sbit

26、IT1=0 x8A;sbitIE0=0 x89;sbitIE0=0 x89;sbitIT0=0 x88;sbitIT0=0 x88;/*IE*/*IE*/sbitEA=0 xAF;sbitEA=0 xAF;sbitES=0 xAC;sbitES=0 xAC;sbitET1=0 xAB;sbitET1=0 xAB;sbitEX1=0 xAA;sbitEX1=0 xAA;sbitET0=0 xA9;sbitET0=0 xA9;sbitEX0=0 xA8;sbitEX0=0 xA8;Reg51.h头文件内容(续)/*IP */sbit PS =0 xBC;sbit PT1 =0 xBB;sbit P

27、X1 =0 xBA;sbit PT0 =0 xB9;sbit PX0 =0 xB8;/*P3 */sbit RD =0 xB7;sbit WR =0 xB6;sbit T1 =0 xB5;sbit T0 =0 xB4;sbit INT1=0 xB3;sbit INT0=0 xB2;sbit TXD =0 xB1;sbit RXD =0 xB0;/*SCON*/*SCON*/sbitSM0=0 x9F;sbitSM0=0 x9F;sbitSM1=0 x9E;sbitSM1=0 x9E;sbitSM2=0 x9D;sbitSM2=0 x9D;sbitREN=0 x9C;sbitREN=0 x9C;

28、sbitTB8=0 x9B;sbitTB8=0 x9B;sbitRB8=0 x9A;sbitRB8=0 x9A;sbitTI=0 x99;sbitTI=0 x99;sbitRI=0 x98;sbitRI=0 x98;总结:总结:n在编程时,如果只强调程序的运算速度而在编程时,如果只强调程序的运算速度而又不进行负数运算,最好采用无符号格式。又不进行负数运算,最好采用无符号格式。n无论何时,应尽可能地使用无论何时,应尽可能地使用unsgned char、Bit类型,它们能被类型,它们能被8051直接接受。直接接受。C51-3 常量和变量常量和变量符号常量用大写,变量用小写符号常量用大写,变量用小写

29、n1 1、常量、常量 又称为标量,常量的值在程序又称为标量,常量的值在程序执行过程中不能改变,一般用一个标识符执行过程中不能改变,一般用一个标识符号代表一个常量,称为符号常量。号代表一个常量,称为符号常量。1 1、使用、使用、使用、使用#define#define语句定义符号常量语句定义符号常量语句定义符号常量语句定义符号常量 例例例例:#define CONST 60:#define CONST 60#define PI 3.1415#define PI 3.14152 2、使用、使用、使用、使用”code”code”关键字关键字关键字关键字 指定数据的存储位置为程序存储器指定数据的存储位置

30、为程序存储器指定数据的存储位置为程序存储器指定数据的存储位置为程序存储器C51C51中常量的定义:中常量的定义:中常量的定义:中常量的定义:符号常量的符号常量的作用域:作用域:定义这个符定义这个符号常量的整号常量的整个个C C文件文件(1)整型常量又称为整数(可直接使用不用整型常量又称为整数(可直接使用不用定义)。定义)。在在C51语言中,整数可以用十进制、八进制语言中,整数可以用十进制、八进制和十六进制形式来表示。但和十六进制形式来表示。但C51中数据的输出形中数据的输出形式只有十进制和十六进制两种。式只有十进制和十六进制两种。(2)在在C51语言中,还可以用一个语言中,还可以用一个“特别指

31、特别指定定”的标识符来代替一个常量,称为符号常量。的标识符来代替一个常量,称为符号常量。必须必须define先定义再使用先定义再使用例:例:#definePI3.14159/定义符号常量定义符号常量PI=3.14159用一个用一个标识符标识符来代表的常量称为来代表的常量称为符号常量符号常量符号常量符号常量事先必须用编译预处理命令事先必须用编译预处理命令define定义,定义,define必须以必须以“#”开头,且行尾没有开头,且行尾没有“;”号号.编译程序时首先由编译系统将编译程序时首先由编译系统将符号常量符号常量替换为它替换为它所代表的常量,然后再进行编译所代表的常量,然后再进行编译符号常量

32、符号常量一般用一般用大写字母大写字母表示,以区别于变量表示,以区别于变量例例例例#include#include#define#defineDISPDISP 0 x7f0 x7fvoidmain()voidmain()P1=P1=DISPDISP;while(1);while(1);使用符号常量的好处:使用符号常量的好处:n含义清楚、含义清楚、顾名知意顾名知意。n程序中需要改变常量的值时能做到程序中需要改变常量的值时能做到“一改全改一改全改”。例例例例#include#include#include#include#defineLEN10.5#defineLEN10.5voidmain()vo

33、idmain()floatl,s;floatl,s;SCON=0 x50;TMOD|=0X20;PCON|=0X80;SCON=0 x50;TMOD|=0X20;PCON|=0X80;TH1=TL1=0XFD;TI=1;TR1=1;TH1=TL1=0XFD;TI=1;TR1=1;l=2*3.14*l=2*3.14*LENLEN;s=3.14*s=3.14*LENLEN*LENLEN;printf(a=%f,b=%fn,l,s);printf(a=%f,b=%fn,l,s);n2 2、变量、变量有关概念有关概念n在程序运行过程中,其值可以改变的量,称在程序运行过程中,其值可以改变的量,称为为变量

34、变量,变量名变量名用标识符表示。用标识符表示。n变量一般有变量一般有变量名变量名和和变量值变量值组成。组成。变量名为变量名为RAM单元地址号,变量值为该单元中存放单元地址号,变量值为该单元中存放的内容。的内容。nC规定程序中用到的变量必须规定程序中用到的变量必须“先定义后使先定义后使用用”n系统为变量在系统为变量在内存内存(内部(内部RAM和外部和外部RAM)中分配中分配存储单元存储单元,存储变量的,存储变量的值值。n编写程序时可以通过编写程序时可以通过变量名变量名来存、取变量值。来存、取变量值。例如:例如:unsignedintxdatai,j;unsignedchardatach1,ch2

35、=A;l必须使用合法的必须使用合法的标识符标识符作变量名作变量名l不能使用不能使用关键字关键字为变量命名为变量命名l变量名一般用变量名一般用小写,小写,长度一般不超过长度一般不超过个个字符,最长不得大于字符,最长不得大于个字符。个字符。l变量名最好也能做到变量名最好也能做到“顾名知意顾名知意”变量定义的一般格式:变量定义的一般格式:数据类型数据类型数据类型数据类型 存储器类型存储器类型存储器类型存储器类型 变量名表变量名表变量名表变量名表=初值初值初值初值 ;存储器类型存储器类型-指明变量所在存储器的区域情况指明变量所在存储器的区域情况C51根据单片机存储器的结构特点分为以下六种存储类型:根据

36、单片机存储器的结构特点分为以下六种存储类型:1、data-变量定义在片内变量定义在片内RAM可可直接寻址直接寻址的低的低128B空间中。空间中。如:如:unsigned char data ch5;2、idata-变量定义在片内变量定义在片内RAM可可间接寻址间接寻址的的256B空间中。空间中。如:如:int idata x=10;3、bdata-变量定义在片内变量定义在片内RAM可可位寻址位寻址的的16B空间中(地空间中(地址范围:址范围:0 x20-0 x2F)。如:如:int bdata flag;sbit flag0=flag0;4、xdata-变量定义在片外变量定义在片外RAM64K

37、B空间中。空间中。如:如:float xdata f100;5、pdata-变量定义在片外变量定义在片外RAM低低256B空间中。空间中。如:如:float pdata y;6、code-变量定义在程序存储器变量定义在程序存储器64KB的空间中。的空间中。如:如:#define uchar unsigned char uchar code display=0 x7F,0 xBF,0 xDF,0 xFE,0 xF7;数据类型说明符数据类型说明符数据类型说明符数据类型说明符 存储器类型存储器类型存储器类型存储器类型 变量名列表变量名列表变量名列表变量名列表=初值初值初值初值 ;例例-各种存储类型演

38、示各种存储类型演示#include#define uchar unsigned char#define uint unsigned intvoid main()uchar code a=0 xfd;/*在在程序存储器程序存储器定义变量定义变量a*/uchar data b=0 x78;/*在在内部内部RAM低低128B中定义变量中定义变量b*/uchar idata c=0 xE9;/*在在内部内部RAM256B中定义变量中定义变量c*/uchar bdata d=0 x56;/*在在内部内部RAM20h2fh空间定义变量空间定义变量d*/uint xdata e=0 xFE98;/*在在外部

39、外部RAM空间定义变量空间定义变量e*/uint pdata f=0 xE2;/*在在外部外部RAM低低256B空间定义变量空间定义变量f*/for(;);变量的默认存储类型变量的默认存储类型如果变量定义时没有明确指明其存储类型(如果变量定义时没有明确指明其存储类型(data、idata、bdata、xdata、pdata、code),则编译器编,则编译器编译时根据工程项目的存储模式自动选择存储类型。译时根据工程项目的存储模式自动选择存储类型。三种存储模式:三种存储模式:1、small-小存储模式:变量默认分配在小存储模式:变量默认分配在data区。区。2、compact-紧凑存储模式:变量默

40、认分配在紧凑存储模式:变量默认分配在 pdata区。区。3、large-大存储模式:变量默认分配在大存储模式:变量默认分配在xdata区。区。如:如:unsignedinti,j=1000;unsignedcharch1,ch2=A;程序中可以通过预处理命令程序中可以通过预处理命令程序中可以通过预处理命令程序中可以通过预处理命令#pragma#pragma声明存储模式,没有明声明存储模式,没有明声明存储模式,没有明声明存储模式,没有明确声明时,系统隐含为确声明时,系统隐含为确声明时,系统隐含为确声明时,系统隐含为smallsmall模式。模式。模式。模式。存储模式举例:存储模式举例:#prag

41、ma smallchar k1;/*k1存储类型为存储类型为data*/int xdata m1;/*m1存储类型为存储类型为xdata*/#pragma compactchar k2;/*k2存储类型为存储类型为pdata*/int xdata m2;/*m2存储类型为存储类型为xdata*/int func1(int x1,int y1)large return(x1+y1);/*x1、y1存储类型为存储类型为xdata*/int func2(int x2,int y2)return(x2-y2);/*x2、y2存储类型为存储类型为data*/变量的初始化 变量的初始化指在声明变量的同时对

42、变量赋初值变量的初始化指在声明变量的同时对变量赋初值。例如:例如:inta=5,b=10+2;doublex=23.568,y;charch1=a,ch2=66,ch3=142;表示声明变量并对变量存储单元赋值。表示声明变量并对变量存储单元赋值。第一条语句相当于:第一条语句相当于:int a,b;a=5;b=12;错误的初始化:错误的初始化:int a=3+b,b=5;改为:改为:int b=5,a=3+b;float m=n=23.16;改为:改为:float m=23.16,n=23.16;C51 运算符运算符1C语言运算符和表达式简介语言运算符和表达式简介算术运算符和算术表达式算术运算符

43、和算术表达式赋值运算符赋值运算符和赋值表达式和赋值表达式逗号运算符和逗号表达式逗号运算符和逗号表达式逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式位运算符和位运算表达式位运算符和位运算表达式条件运算符和条件表达式条件运算符和条件表达式关系运算符和关系表达式关系运算符和关系表达式其他运算符及其运算其他运算符及其运算(指针、下标等)指针、下标等)2 2 运算符的有关概念运算符的有关概念n作用:作用:对运算对象完成规定的操作运算对运算对象完成规定的操作运算n类型:类型:按运算对象分:按运算对象分:n单目:单目:只有一个操作对象,如只有一个操作对象,如:自增运算符(自增运算符(+)n双目:双目:有两个操

44、作对象,如:有两个操作对象,如:乘(乘(*),除(),除(/)n三目:三目:有三个操作对象有三个操作对象 只有一个:只有一个:条件运算符(?:)条件运算符(?:)按功能分:按功能分:n算术、赋值、关系、逻辑算术、赋值、关系、逻辑n条件、逗号、位、其他条件、逗号、位、其他3 运算符的优先级和结合性n优先级优先级指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序例如:例如:算术运算中先算术运算中先*/后后 +-+-a-b*c+da-b*c+dl l结合性结合性结合性结合性 指运算符和运算对象的结合方向指运算符和运算对象的结合方向指运算符和运算对象的结合方向指运算符和运算对象的结合方向 分为:

45、从左向右分为:从左向右分为:从左向右分为:从左向右(左结合左结合左结合左结合)和从右向左和从右向左和从右向左和从右向左(右结合右结合右结合右结合)例如:例如:例如:例如:算术运算符为算术运算符为算术运算符为算术运算符为左结合左结合左结合左结合 a-ba-b+4 4 赋值运算符为赋值运算符为赋值运算符为赋值运算符为右结合右结合右结合右结合 a=b=5a=b=5注:如果一个操作数两边的运算符优先级不同时,注:如果一个操作数两边的运算符优先级不同时,按优先级从高到低结合;如果一个操作数两边的按优先级从高到低结合;如果一个操作数两边的运算符优先级相同时,按结合性处理。运算符优先级相同时,按结合性处理。

46、4 4 各种运算符的表示各种运算符的表示+-*/%+-+-=+=-=*=/=%=&=|=!=&|!&|?:,&sizeof (数据类型标识符)类型类型种类种类算术运算符算术运算符赋值运算符赋值运算符关系运算符关系运算符逻辑运算符逻辑运算符位运算符位运算符条件运算符条件运算符逗号运算符逗号运算符其他运算符其他运算符5 表达式的有关概念n什么是表达式什么是表达式由由运算符运算符将运算对象连接成的式子,它描述了将运算对象连接成的式子,它描述了一个具体的求值运算过程。一个具体的求值运算过程。n计算表达式的值计算表达式的值按照运算符的运算规则求值按照运算符的运算规则求值求值时注意求值时注意运算符的优先级

47、和结合性运算符的优先级和结合性例如:n表达式:150+b*2-12.456 b=(+a)-2a/=a*=(a=2)f=abc-a|+b&c+max=ab?a:b a=3,a+=3,a*a 1/(float)a+6 6 6 算术运算符和算术表达式算术运算符和算术表达式n算术运算符的优先级算术运算符的优先级()+-+-+-+-+-*/%*/%+-同级同级同级同级同级同级同级同级同级同级同级同级单目单目单目单目双目双目双目双目高高高高 低低低低l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*aa*a*a的连乘

48、,的连乘,的连乘,的连乘,或用标准库函数或用标准库函数或用标准库函数或用标准库函数 pow(a,3)pow(a,3)l l“/”的运算对象可为各种类型数据,但是的运算对象可为各种类型数据,但是的运算对象可为各种类型数据,但是的运算对象可为各种类型数据,但是当进行两当进行两当进行两当进行两个整数相除时,运算结果也是整数个整数相除时,运算结果也是整数个整数相除时,运算结果也是整数个整数相除时,运算结果也是整数 l l“%”要求运算对象必须是要求运算对象必须是要求运算对象必须是要求运算对象必须是整数整数整数整数,功能是求两个整,功能是求两个整,功能是求两个整,功能是求两个整数相除的余数,余数的符号与

49、被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。例 5/2 =2 -5/2.0=-2.5例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()7 7 自增、自减运算符自增、自减运算符n自增自增(+)、自减、自减(-)都是都是单目单目运算符运算符n有前缀和后缀有前缀和后缀两种形式两种形式 前缀形式前缀形式:先自增先自增(自减自减)再引用;再引用;后缀形式后缀形式:先引用再自增先引用再自增(自减自减);n功能:功能:前缀形式前缀形式 +a a 等价于等价于 a=a+1a

50、=a+1 -a a 等价于等价于 a=a a=a 1 1 后缀形式后缀形式 a+a+等价于等价于 a=a+1a=a+1 a a-等价于等价于 a=a 1a=a 1例如:例如:当当a5时时+a表达式的值为表达式的值为6,且且a6a+表达式的值为表达式的值为5,且且a6b=+a等价于等价于a=a+1;b=a表达式的值为表达式的值为6,且,且a=6,b=6b=a+等价于等价于b=a;a=a+1表达式的值为表达式的值为5,且,且a=6,b=5说明:n+和和-的运算对象只能是变量的运算对象只能是变量,不能是常量不能是常量或表达式。或表达式。例如:例如:5+、(a+2)+不合法。不合法。n右结合性右结合性

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁