1、以以MCS-51MCS-51单片机为例讲解单片机为例讲解通信工程学院自动化系通信工程学院自动化系主讲人:张志成主讲人:张志成2022-6-6吉林大学通信工程学院Page 2课程安排!第一章第一章 MCS-51 MCS-51单片机概述单片机概述!第二章第二章 MCS-51 MCS-51单片机的硬件结构单片机的硬件结构!第三章第三章 单片机单片机C C语言程序设计语言程序设计!第四章第四章 MCS-51 MCS-51单片机的中断系统单片机的中断系统!第五章第五章 MCS-51 MCS-51单片机的定时器单片机的定时器/ /计数器计数器!第六章第六章 MCS-51 MCS-51单片机的串行通信单片机
2、的串行通信!第七章第七章 MCS-51 MCS-51单片机的外围器件及扩展单片机的外围器件及扩展2022-6-6吉林大学通信工程学院Page 3第三章 单片机C语言程序设计!3.1 C3.1 C语言与语言与MCS-51MCS-51单片机单片机!3.2 C513.2 C51的数据类型与运算的数据类型与运算!3.3 C513.3 C51流程控制语句流程控制语句!3.4 C513.4 C51构造数据类型构造数据类型!3.5 C513.5 C51函数函数!3.6 3.6 模块化程序设计模块化程序设计2022-6-6吉林大学通信工程学院Page 43.1 C语言与MCS-51单片机一、一、MCS-51M
3、CS-51的编程语言的编程语言!四种语言支持四种语言支持MCS-51MCS-51单片机:单片机:BASICBASIC、PL/MPL/M、汇编语言、汇编语言和和C C语言。语言。!汇编语言:汇编语言: 用汇编程序设计用汇编程序设计MCS51MCS51系列单片机应用程序时,必系列单片机应用程序时,必须要考虑其存储器结构,尤其必须考虑其片内数据存储须要考虑其存储器结构,尤其必须考虑其片内数据存储器与特殊功能寄存器正确、合理的使用以及按实际地址器与特殊功能寄存器正确、合理的使用以及按实际地址处理端口数据。处理端口数据。!C C语言:语言: C C语言是一种源于编写语言是一种源于编写UNIXUNIX操作
4、系统的语言,是一种操作系统的语言,是一种结构化语言,可产生紧凑代码。结构化语言,可产生紧凑代码。2022-6-6吉林大学通信工程学院Page 5与汇编语言相比,与汇编语言相比,C C语言有如下优点:语言有如下优点:!对单片机指令系统不要求了解,仅要求对对单片机指令系统不要求了解,仅要求对80518051存储器结存储器结构有初步了解;构有初步了解;!寄存器的分配,不同存储器的寻址及数据类型等细节可寄存器的分配,不同存储器的寻址及数据类型等细节可由编译器管理;由编译器管理;!程序有规范的结构,分为不同的函数,使程序结构化;程序有规范的结构,分为不同的函数,使程序结构化;!更符合人们的思考习惯;改善
5、了程序的可读性;更符合人们的思考习惯;改善了程序的可读性;!编程及程序调试时间显著缩短,从而提高效率;编程及程序调试时间显著缩短,从而提高效率;!提供的库包含许多标准子程序,具有较强数据处理能力提供的库包含许多标准子程序,具有较强数据处理能力;!很好的结构性和模块化更容易阅读和维护,而且由于有很好的结构性和模块化更容易阅读和维护,而且由于有更好的可移植性很多处理器支持更好的可移植性很多处理器支持C C编译器。编译器。2022-6-6吉林大学通信工程学院Page 6二、二、C51C51编译器编译器 用用C C语言编写的应用程序必须经单片机的语言编写的应用程序必须经单片机的C C语言语言编译器编译
6、器( (简称简称C51)C51),转换生成单片机可执行的代码程,转换生成单片机可执行的代码程序。支持序。支持MCS51MCS51系列单片机的系列单片机的C C语言编译器有很多语言编译器有很多种。如:种。如: American Automation American Automation IAR IAR Avocet Avocet Dunfield Shareware Dunfield Shareware Bso/Tasking Bso/Tasking KEIL/Franklin KEIL/Franklin2022-6-6吉林大学通信工程学院Page 7三、三、C51C51程序结构程序结构!C5
7、1C51源程序大体上是一个函数定义的集合,集合中源程序大体上是一个函数定义的集合,集合中仅有一个名为仅有一个名为mainmain的主函数。主函数是程序的入口的主函数。主函数是程序的入口,主函数中所有语句执行完毕,则程序执行完成。,主函数中所有语句执行完毕,则程序执行完成。2022-6-6吉林大学通信工程学院Page 8!函数定义由类型,函数名,参数表和函数体组成。函数定义由类型,函数名,参数表和函数体组成。 格式如下:格式如下: 类型类型 函数名(参数表)函数名(参数表) 参数说明;参数说明; 数据说明部分;数据说明部分; 执行语句部分;执行语句部分; 2022-6-6吉林大学通信工程学院Pa
8、ge 9! C51C51程序结构说明:程序结构说明: 1 1)C C语言是由函数构成的。语言是由函数构成的。 一个一个C C源程序至少包含一个函数,也可以包含一个源程序至少包含一个函数,也可以包含一个mainmain函数和若干其他函数。函数是函数和若干其他函数。函数是C C程序的基本单位。程序的基本单位。 2) 2)函数分为函数分为2 2大类:大类: 一类是库函数,一类是用户自定义函数。库函数是一类是库函数,一类是用户自定义函数。库函数是C51C51在库文件中已定义的函数,其函数说明在其头文件中在库文件中已定义的函数,其函数说明在其头文件中。用户函数是用户自己定义,自己调用的一类函数。用户函数
9、是用户自己定义,自己调用的一类函数。2022-6-6吉林大学通信工程学院Page 10 3)3)函数由函数由2 2部分组成:部分组成: 函数说明部分:它包括函数名,函数类型,函数属函数说明部分:它包括函数名,函数类型,函数属性,函数参数名和形式参数类型。一个函数名后面必须性,函数参数名和形式参数类型。一个函数名后面必须跟一个(),函数参数可以没有。跟一个(),函数参数可以没有。 函数体部分函数体部分: : 函数说明部分下面的大括号内的内容函数说明部分下面的大括号内的内容。函数体一般包括:变量定义和执行部分(由若干语句。函数体一般包括:变量定义和执行部分(由若干语句组成)组成)2022-6-6吉
10、林大学通信工程学院Page 11 4) 4) 一个一个C51C51程序总是从程序总是从main main 函数开始执行的,而不函数开始执行的,而不论论mainmain函数在整个程序中的位置如何。函数在整个程序中的位置如何。 5) 5)每个语句和数据定义的最后必须有一个分号。每个语句和数据定义的最后必须有一个分号。 6)C 6)C语言本身没有输入语言本身没有输入/ /输出语句,输入和输出操作输出语句,输入和输出操作是有库函数是有库函数scanfscanf和和printfprintf等函数来完成的。等函数来完成的。 7) 7)可以用可以用/ /* * */ /对对C C程序中的任何部分作注释。程序
11、中的任何部分作注释。2022-6-6吉林大学通信工程学院Page 12!C51C51程序开发过程程序开发过程 C51 C51源程序是一个源程序是一个ASCIIASCII文件,可以用任何标准的文件,可以用任何标准的ASCIIASCII文件编辑器来编写,如:写字板,记事本等。文件编辑器来编写,如:写字板,记事本等。 C51 C51程序机构与一般程序机构与一般C C语言没有什么差别,程序的书语言没有什么差别,程序的书写格式自由度高,灵活性强,有较大的任意性。写格式自由度高,灵活性强,有较大的任意性。2022-6-6吉林大学通信工程学院Page 13 要点如下:要点如下: 1 1)一般情况下,每个语句
12、占用一行。)一般情况下,每个语句占用一行。 2 2)不同结构层次的语句,从不同的起始位置开始,)不同结构层次的语句,从不同的起始位置开始,即在同一结构层次中的语句,缩进同样的字数。即在同一结构层次中的语句,缩进同样的字数。 3 3)表示结构层次的大括号通常写在该结构语句第一)表示结构层次的大括号通常写在该结构语句第一字母的下方,与机构化语句对齐,并占用一行。字母的下方,与机构化语句对齐,并占用一行。2022-6-6吉林大学通信工程学院Page 14系统库系统库C51源程序源程序C51编译器编译器EPROM编程器编程器链接链接列表文件列表文件浮动目标码模块浮动目标码模块绝对定位目标码文件绝对定位
13、目标码文件用户库用户库硬件仿真器硬件仿真器映像文件映像文件2022-6-6吉林大学通信工程学院Page 15!C51C51与标准与标准C C语言的区别语言的区别 C51 C51的语法规定、程序结构及程序设计方法都与标准的语法规定、程序结构及程序设计方法都与标准的的C C语言程序设计相同,但语言程序设计相同,但C51C51程序与标准的程序与标准的C C程序在以程序在以下几个方面不一样:下几个方面不一样: (1 1)C51C51中定义的库函数和标准中定义的库函数和标准C C语言定义的库函数语言定义的库函数不同。标准的不同。标准的C C语言定义的库函数是按通用微型计算机语言定义的库函数是按通用微型计
14、算机来定义的,而来定义的,而C51C51中的库函数是按中的库函数是按MCS-51MCS-51单片机相应情单片机相应情况来定义的;况来定义的; (2 2)C51C51中的数据类型与标准中的数据类型与标准C C的数据类型也有一定的数据类型也有一定的区别,在的区别,在C51C51中还增加了几种针对中还增加了几种针对MCS-51MCS-51单片机特有单片机特有的数据类型;的数据类型;2022-6-6吉林大学通信工程学院Page 16 (3 3)C51C51变量的存储模式与标准变量的存储模式与标准C C中变量的存储模式中变量的存储模式不一样,不一样,C51C51中变量的存储模式是与中变量的存储模式是与M
15、CS-51MCS-51单片机的存储单片机的存储器紧密相关;器紧密相关; (4 4)C51C51与标准与标准C C的输入输出处理不一样,的输入输出处理不一样,C51C51中的中的输入输出是通过输入输出是通过MCS-51MCS-51串行口来完成的,输入输出指令串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;执行前必须要对串行口进行初始化; (5 5)C51C51与标准与标准C C在函数使用方面也有一定的区别,在函数使用方面也有一定的区别,C51C51中有专门的中断函数。中有专门的中断函数。2022-6-6吉林大学通信工程学院Page 173.2 C51的数据类型与运算一、数据与数据类型
16、一、数据与数据类型!数据:具有一定各式的数字或数值叫做数据。数据时数据:具有一定各式的数字或数值叫做数据。数据时计算机操作的对象。计算机操作的对象。!数据类型:数据的不同各式叫做数据类型。数据类型:数据的不同各式叫做数据类型。!数据结构:数据按一定的数据类型进行的排列、组合数据结构:数据按一定的数据类型进行的排列、组合及架构称为数据结构。及架构称为数据结构。2022-6-6吉林大学通信工程学院Page 18!C51C51数据类型分类数据类型分类数据类型数据类型 基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型位型位型(bit)字符型字符型(char)整型整型(int)长整型长整型(
17、long)浮点型浮点型(float)双精度浮点型双精度浮点型(double)数组类型数组类型(array)结构体类型结构体类型(struct)共用体共用体(union)枚举枚举(enum)2022-6-6吉林大学通信工程学院Page 19!KEIL C51KEIL C51的数据类型的数据类型数据类型长度(bit)长度(byte)值域bit110,1unsigned char810255signed char81128127unsigned int 162065535signed int 1623276832767unsigned long32404294967295signed long 32
18、421474836482147483647float 3241.176E383.40E+38(6位数字位数字)double6481.176E383.40E+38(10位数字位数字)一般指针一般指针243存储空间存储空间0655352022-6-6吉林大学通信工程学院Page 20二、常量与变量二、常量与变量!常量:在程序运行的过程中,其值不能改变的量常量:在程序运行的过程中,其值不能改变的量称为常量。称为常量。!变量:在程序运行的过程中,其值可以改变的量变量:在程序运行的过程中,其值可以改变的量称为变量。一个变量主要由两部分构成称为变量。一个变量主要由两部分构成一个是一个是变量名,一个是变量值
19、。每个变量都有一个变量名变量名,一个是变量值。每个变量都有一个变量名,在内存中占据一定的存储单元(地址),并在该,在内存中占据一定的存储单元(地址),并在该内存单元中存放该变量的值。内存单元中存放该变量的值。2022-6-6吉林大学通信工程学院Page 21!C51C51数据在数据在MCS-51MCS-51中的存储方式中的存储方式(1 1)位变量()位变量(bitbit):变量的类型是位,位变量的值可):变量的类型是位,位变量的值可以是以是1 1(truetrue)或)或0 0(falsefalse)。与)。与MCS-51MCS-51硬件特性操作硬件特性操作有关的可以定义成位变量必须定位在有关
20、的可以定义成位变量必须定位在MCS-51MCS-51单片机片单片机片内内RAMRAM的位寻址空间中。的位寻址空间中。(2 2)字符变量()字符变量(charchar):): 字符变量的长度为字符变量的长度为1 byte1 byte即即8 8位。这很合适位。这很合适MCS-51MCS-51单单片机,因为片机,因为MCS-51MCS-51单片机每次可处理单片机每次可处理8 8位数据。对于无位数据。对于无符号变量符号变量(unsigned char)(unsigned char)的值域范围是的值域范围是0 0255255。 对于有符号字符变量对于有符号字符变量(signed char)(signed
21、 char),最具有重要意,最具有重要意义的位是最高位上的符号标志位义的位是最高位上的符号标志位(msb)(msb)。此位为。此位为1 1代表代表“负负”,为,为0 0代表代表“正正”。有符号字符变量和无符号字。有符号字符变量和无符号字符变量在表示符变量在表示01270127的数值时,其含义是一样的,都是的数值时,其含义是一样的,都是0 00 x7F0 x7F。负数一般用补码表示。负数一般用补码表示。2022-6-6吉林大学通信工程学院Page 22(3 3)整型变量)整型变量(int)(int):整型变量的长度为:整型变量的长度为1616位。位。 MCS- MCS-5151系列单片机将系列单
22、片机将intint型变量的高位字节数存放在低地址型变量的高位字节数存放在低地址字节中,低位字节数存放在高地址字节中。可直接使用字节中,低位字节数存放在高地址字节中。可直接使用几种专用的机器指令来完成多字节的加、减、乘、除运几种专用的机器指令来完成多字节的加、减、乘、除运算。整型变量值算。整型变量值0 x12340 x1234以下图所示的方式存放在内存中以下图所示的方式存放在内存中。地址地址 +0 +1 2022-6-6吉林大学通信工程学院Page 23(4 4)长整型变量()长整型变量(longlong):长整型变量的长度是):长整型变量的长度是3232位,位,占用占用4 4字节(字节(Byt
23、eByte),其它方面与整型变量(),其它方面与整型变量(intint)相似)相似。长整型变量值。长整型变量值0 x123456780 x12345678以下图所示的方式存放在内以下图所示的方式存放在内存中。存中。+0+1+2+3地址 2022-6-6吉林大学通信工程学院Page 24(5 5)浮点型变量)浮点型变量(float): (float): 浮点型变量为浮点型变量为3232位,占位,占4 4个字个字节,许多复杂的数学表达式都采用浮点变量数据类型。节,许多复杂的数学表达式都采用浮点变量数据类型。应用符号位表示数的符号,用阶码和尾数表示数的大小应用符号位表示数的符号,用阶码和尾数表示数的
24、大小。!在编程时,如果只强调运算速度而不进行负数运算时在编程时,如果只强调运算速度而不进行负数运算时,最好采用无符号,最好采用无符号(unsigned)(unsigned)格式。格式。!无符号字符类型的使用:无论何时,应尽可能使用无无符号字符类型的使用:无论何时,应尽可能使用无符号字符变量,因为它能直接被符号字符变量,因为它能直接被MCS-51MCS-51所接受。基于同所接受。基于同样的原因,也应尽量使用位变量。有符号字符变量虽然样的原因,也应尽量使用位变量。有符号字符变量虽然也只占用一个字节,但需要进行额外的操作来进行测试也只占用一个字节,但需要进行额外的操作来进行测试代码的符号位。这无疑会
25、降低代码效率。代码的符号位。这无疑会降低代码效率。2022-6-6吉林大学通信工程学院Page 25!在编程时,为了书写方便,经常用简化的缩写形式来在编程时,为了书写方便,经常用简化的缩写形式来定义数据类型。其方法是在源程序开头使用定义数据类型。其方法是在源程序开头使用#define#define语语句自定义简化的类型标识符。句自定义简化的类型标识符。 例如:例如: #define uchar unsigned char #define uchar unsigned char #define uint unsigned int #define uint unsigned int 这样,在编程中
26、,就可以用这样,在编程中,就可以用ucharuchar代替代替unsigned unsigned charchar,用,用uintuint代替代替unsigned intunsigned int来定义变量。来定义变量。2022-6-6吉林大学通信工程学院Page 26三、三、C51C51数据的存储类型与数据的存储类型与MCS-51MCS-51存储器结构存储器结构 KEIL C51 KEIL C51完全支持完全支持MCS-51MCS-51单片机的硬件结构,可以完全单片机的硬件结构,可以完全访问访问MCS-51MCS-51硬件系统的所有部分。该编译器通过将变量、常硬件系统的所有部分。该编译器通过将
27、变量、常量定义成不同的存储类型(量定义成不同的存储类型(datadata,bdatabdata,idataidata,pdatapdata,xdataxdata,codecode)的方法,将他们定义在不同的存储区中。)的方法,将他们定义在不同的存储区中。 2022-6-6吉林大学通信工程学院Page 272022-6-6吉林大学通信工程学院Page 28!C51C51存储类型与存储类型与MCS-51MCS-51存储空间的对应关系存储空间的对应关系存储类型存储类型 与存储空间的对应关系与存储空间的对应关系 data 直接寻址片内数据存储区,访问速度快直接寻址片内数据存储区,访问速度快(128字节
28、字节) bdata 可位寻址片内数据存储区,允许位与字节混合访问可位寻址片内数据存储区,允许位与字节混合访问(16字节字节) idata 间接寻址片内数据存储区,可访问片内全部间接寻址片内数据存储区,可访问片内全部RAM地址空间地址空间(256字节字节) pdata 分页寻址片外数据存储区分页寻址片外数据存储区(256字节字节)由由MOV Ri访问访问(i=0,1) xdata 片外数据存储区片外数据存储区(64 KB)由由MOVX DPTR访问访问 code 程序存储器程序存储器64 KB空间,由空间,由MOVC DPTR访问访问2022-6-6吉林大学通信工程学院Page 29!C51C5
29、1存储类型及其数据长度和值域存储类型及其数据长度和值域存储类型长度(bit)长度(byte)值域范围data810255idata810255pdata810255xdata162065 535code162065 5352022-6-6吉林大学通信工程学院Page 30!带存储类型的变量的定义的一般格式为带存储类型的变量的定义的一般格式为 数据类型数据类型 存储类型存储类型 变量名变量名!带存储类型的变量定义举例:带存储类型的变量定义举例: char data var1 char data var1; bit bdata flags bit bdata flags; float idata
30、x,y,z float idata x,y,z; unsigned int pdata var2 unsigned int pdata var2; unsigned char vector34 unsigned char vector34;2022-6-6吉林大学通信工程学院Page 31!存储模式存储模式 存储模式决定了变量的默认存储类型、参数传递区存储模式决定了变量的默认存储类型、参数传递区和无明确存储类型说明变量的存储类型。和无明确存储类型说明变量的存储类型。 如果在变量定义时略去存储类型标识符,则编译器如果在变量定义时略去存储类型标识符,则编译器会自动选择默认的存储类型。默认的存储类型
31、进一步会自动选择默认的存储类型。默认的存储类型进一步由由SMALLSMALL、COMPACTCOMPACT和和LARGELARGE存储模式指令限制。存储模式指令限制。2022-6-6吉林大学通信工程学院Page 32!存储模式及说明存储模式及说明存储模式存储模式说说 明明SMALL默认的存储类型是默认的存储类型是data,参数及局部变量放入可直接寻,参数及局部变量放入可直接寻址片内址片内RAM的用户区中的用户区中(最大最大128字节字节)。另外所有对象。另外所有对象(包括堆栈包括堆栈),都必须嵌入片内,都必须嵌入片内RAM。栈长很关键,因为。栈长很关键,因为实际栈长依赖于函数嵌套调用层数实际栈
32、长依赖于函数嵌套调用层数COMPACT默认的存储类型是默认的存储类型是pdata,参数及局部变量放入分页的外,参数及局部变量放入分页的外部数据存储区,通过部数据存储区,通过R0或或R1间接访问,栈空间位于间接访问,栈空间位于片内数据存储区中片内数据存储区中LARGE默认的存储类型是默认的存储类型是xdata,参数及局部变量直接放入片外,参数及局部变量直接放入片外数据存储区,使用数据指针数据存储区,使用数据指针DPTR来进行寻址。用此数来进行寻址。用此数据指针进行访问效率较低,尤其对两个或多个字节的变据指针进行访问效率较低,尤其对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度量,
33、这种数据类型的访问机制直接影响代码的长度2022-6-6吉林大学通信工程学院Page 33四、四、MCS-51MCS-51特殊功能寄存器特殊功能寄存器(SFR)(SFR)的的C51C51定义定义 MCS-51单片机中,除了程序计数器PC和4组工作寄存器组外,其它所有的寄存器均为特殊功能寄存器(SFR),分散在片内RAM区的高128字节中,地址范围为80H0FFH。SFR中有11个寄存器具有位寻址能力,它们的字节地址都能被8整除,即字节地址是以8或0为尾数的。 为了能直接访问这些SFR,KEIL C51提供了一种自主形式的定义方法,这种定义方法与标准C语言不兼容,只适用于对MCS-51系列单片机
34、进行C语言编程。特殊功能寄存器C51定义的一般语法格式如下: sfr sfr-name = int constant;2022-6-6吉林大学通信工程学院Page 34!sfr是定义语句的关键字,其后必须跟一个MSC-51单片机真实存在的特殊功能寄存器名,=后面必须是一个整型常数,不允许带有运算符的表达式,是特殊功能寄存器sfr-name的字节地址,这个常数值的范围必须在SFR地址范围内,位于0 x800 xFF。!例如: sfr SCON=0 x98; /* 串口控制寄存器地址98H */ sfr TMOD=0 x89; /* 定时器/计数器方式控制寄存器地址89H */2022-6-6吉林
35、大学通信工程学院Page 35!在新的MCS-51系列产品中,SFR在功能上经常组合为16位值,当SFR的高字节地址直接位于低字节之后时,对16位SFR的值可以直接进行访问。例如52子系列的定时器/计数器2就是这种情况。为了有效地访问这类SFR,可使用关键字sfr16来定义,其定义语句的语法格式与8位SFR相同,只是=后面的地址必须用16位SFR的低字节地址,即低字节地址作为sfr16的定义地址。!例如: sfr16 T2 = 0 xCC /*定时器/计数器2:T2低8位地址为0CCH,T2高8位地址为0CDH*/!这种定义适用于所有新的16位SFR,但不能用于定时器/计数器0和12022-6
36、-6吉林大学通信工程学院Page 36!对于位寻址的SFR中的位,C51支持特殊位的定义。!第一种格式:sbit bit-name = sfr-nameint constant sbit是定义语句的关键字,后跟一个寻址位符号名(该位符号名必须是MCS-51单片机中规定的位名称),=后的sfr-name必须是已定义过的SFR的名字,后的整常数是寻址位在特殊功能寄存器sfr-name中的位号,必须是07范围中的数。例如: sfr PSW=0 xD0 ; /* 定义PSW寄存器地址为D0H */ sbit OV=PSW2 ; /* 定义OV位为PSW.2,地址为D2H */ sbit CY=PSW7
37、 ; /* 定义CY位为PSW.7,地址为D7H */2022-6-6吉林大学通信工程学院Page 37!第二种格式:sbit bit-name = constantint constant =后的char constant为寻址地址位所在的特殊功能寄存器的字节地址,符号后的int constant为寻址位在特殊功能寄存器中的位号。例如: sbit OV=0 xD02 ; /* 定义OV位地址是D0H字节 中的第2位 */ sbit CY=0 xD07 ; /* 定义CY位地址是D0H字节中 的第7位 */2022-6-6吉林大学通信工程学院Page 38!第三种格式:sbit bit-nam
38、e = char constant; =后的char constant为寻址位的绝对位地址。例如: sbit OV=0 xD2 ;/* 定义OV位地址为D2H */ sbit CY=0 xD7 ;/* 定义CY位地址为D7H */ 特殊功能位代表了一个独立的定义类,不能与其它位定义和位域互换。2022-6-6吉林大学通信工程学院Page 39五、位变量(五、位变量(BITBIT)的)的C51C51定义定义1、位变量C51定义。使用C51编程时,定义了位变量后,就可以用定义了的变量来表示MCS-51的位寻址单元。 位变量的C51定义的一般语法格式如下: 位类型标识符(bit) 位变量名 例如:
39、bit direction_bit ;/* 把direction_bit定 义为位变量 */ bit look_pointer ;/* 把look_pointer定义 为位变量 */2022-6-6吉林大学通信工程学院Page 402、关于为变量的说明: (1)函数可包含类型为bit的参数,也可以将其作为返回值。 (2)对位变量定义的限制。位变量不能定义成一个指针,如不能定义:bit * bit_pointer。不存在位数组,如不能定义:bit b_array 。 (3)在位定义中,允许定义存储类型,位变量都被放入一个位段,此段总位于MCS-51片内的RAM区中。因此,存储类型限制为data和
40、idata,如果将位变量的存储类型定义成其它存储类型都将编译出错。2022-6-6吉林大学通信工程学院Page 41六、六、C51C51运算符、表达式及其规则运算符、表达式及其规则 1 1、算术运算符及其表达式、算术运算符及其表达式 基本的5种算术运算符: + 加法运算符或正值运算符 - 减法运算符或负值运算符 * 乘法运算符 / 除法运算符 % 模运算符或称求余运算符2022-6-6吉林大学通信工程学院Page 422 2、关系运算符及其表达式、关系运算符及其表达式 1)六种关系运算符 小于 = 大于或等于 = 测试等于 != 测试不等于 2)优先级 , = 优先级相同(高) =, != 优
41、先级相同(低)2022-6-6吉林大学通信工程学院Page 433 3、逻辑运算符及其表达式、逻辑运算符及其表达式 1)逻辑运算符 & 逻辑“与”(AND) | 逻辑“或”(OR) ! 逻辑“非”(NOT) 2)优先级 !优先级最高算术运算关系运算再次之&和 |赋值运算优先级最低2022-6-6吉林大学通信工程学院Page 444 4、位运算及其表达式、位运算及其表达式 1)位运算符 & 按位与 | 按位或 按位异或 按位取反 右移 2)位运算符只能是整型或字符型数,不能为实型数据。2022-6-6吉林大学通信工程学院Page 45【例】设a=0 x45=01010100B,b=0 x3B=0
42、0111011B,则a&b、a|b、ab、a、a2分别为多少?a&b=00010000b=0 x10a|b=01111111B=0 x7Fab=01101111B=0 x6Fa=10101011B=0 xABa2=00001110B=0 x0E2022-6-6吉林大学通信工程学院Page 465 5、复合运算符及其表达式、复合运算符及其表达式 1)复合赋值运算符 += 加法赋值 + 减法赋值 *= 乘法赋值 /= 除法赋值 %= 取模赋值 &= 逻辑与赋值 |= 逻辑或赋值 = 逻辑异或赋值 = 逻辑非赋值 = 右移位赋值=2相当于x=x2。2022-6-6吉林大学通信工程学院Page 476
43、 6、逗号运算符、逗号运算符 在C51语言中,逗号“,”是一个特殊的运算符,可以用它将两个或两个以上的表达式连接起来,称为逗号表达式。逗号表达式的一般格式为: 表达式1,表达式2,表达式n 程序执行时对逗号表达式的处理:按从左至右的顺序依次计算出各个表达式的值,而整个逗号表达式的值是最右边的表达式(表达式n)的值。 例如:x=(a=3,6*3)结果x的值为18。2022-6-6吉林大学通信工程学院Page 487 7、条件运算符、条件运算符 条件运算符“?:”是C51语言中唯一的一个三目运算符,它要求有三个运算对象,用它可以将三个表达式连接在一起构成一个条件表达式。条件表达式的一般格式为: 逻辑表达式?表达式1:表达式2 其功能是先计算逻辑表达式的值,当逻辑表达式的值为真(非0值)时,将计算的表达式1的值作为整个条件表达式的值;当逻辑表达式的值为假(0值)时,将计算的表达式2的值作为整个条件表达式的值。 例如:条件表达式max=(ab)?a:b的执行结果是将a和b中较大的数赋值给变量max。