C语言基础与C51程序设计

上传人:re****.1 文档编号:567629895 上传时间:2024-07-21 格式:PPT 页数:68 大小:857KB
返回 下载 相关 举报
C语言基础与C51程序设计_第1页
第1页 / 共68页
C语言基础与C51程序设计_第2页
第2页 / 共68页
C语言基础与C51程序设计_第3页
第3页 / 共68页
C语言基础与C51程序设计_第4页
第4页 / 共68页
C语言基础与C51程序设计_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《C语言基础与C51程序设计》由会员分享,可在线阅读,更多相关《C语言基础与C51程序设计(68页珍藏版)》请在金锄头文库上搜索。

1、【学习目标【学习目标】 熟记熟记C51C51的的关键字关键字和和数据类型数据类型,熟练应用,熟练应用C51C51的的运算运算符符和和表达式表达式; 掌握掌握C C语言的语言的程序结构程序结构,中断服务程序中断服务程序编写方法,编写方法,绝对地址访问方法绝对地址访问方法; 理解变量的理解变量的存储种类存储种类和和存储类型存储类型,理解中断服务程,理解中断服务程序与调用子程序的区别;序与调用子程序的区别; 熟悉熟悉C51C51程序设计程序设计及应用技巧,了解及应用技巧,了解C C语言与汇编语语言与汇编语言混合编程的方法。言混合编程的方法。第第4 4章章 C C语言基础与语言基础与C51C51程序设

2、计程序设计1实用精品课件PPT1 1C51C51程序结构程序结构 汇编语言虽然有执行效率高的优点,但其可读性和可移汇编语言虽然有执行效率高的优点,但其可读性和可移植性差,编程效率低。这些都使它的编程和维护极不方便,植性差,编程效率低。这些都使它的编程和维护极不方便,从而导致了整个系统的可靠性也较差。而使用从而导致了整个系统的可靠性也较差。而使用C C语言进行单语言进行单片机应用系统的开发,有着汇编语言编程不可比拟的优势。片机应用系统的开发,有着汇编语言编程不可比拟的优势。 C C语言的特点语言的特点:l语言简洁、紧凑,使用方便、灵活。语言简洁、紧凑,使用方便、灵活。l运算符丰富。运算符丰富。l

3、数据结构丰富。具有现代化语言的各种数据结构。数据结构丰富。具有现代化语言的各种数据结构。l可进行结构化程序设计。可进行结构化程序设计。l可以直接对计算机硬件进行操作。可以直接对计算机硬件进行操作。l生成的目标代码质量高,程序执行效率高。生成的目标代码质量高,程序执行效率高。l可移植性好。可移植性好。4.1 C514.1 C51语言概述语言概述2实用精品课件PPT C C语言程序采用语言程序采用函数结构函数结构,每个,每个C C语言程序由一个或多语言程序由一个或多个函数组成,在这些函数中至少应包含个函数组成,在这些函数中至少应包含一个主函数一个主函数main()main(),也可以包含一个,也可

4、以包含一个main()main()函数和若干个其它的功能函数。函数和若干个其它的功能函数。不管不管main()main()函数放于何处,程序总是从函数放于何处,程序总是从main()main()函数开始执函数开始执行,执行到行,执行到main()main()函数结束则结束。在函数结束则结束。在main()main()函数中调用函数中调用其它函数,其它函数也可以相互调用,但其它函数,其它函数也可以相互调用,但main()main()函数只能函数只能调用其它的功能函数,而不能被其它的函数所调用。调用其它的功能函数,而不能被其它的函数所调用。 功能函数可以是功能函数可以是C C语言编译器提供的语言编

5、译器提供的库函数库函数,也可以是,也可以是由用户定义的由用户定义的自定义函数自定义函数。在编制。在编制C C程序时,程序的开始部程序时,程序的开始部分一般是预处理命令、函数说明和变量定义等。分一般是预处理命令、函数说明和变量定义等。3实用精品课件PPTC51C51的语法规定、程序结构及程序设计方法都与标准的的语法规定、程序结构及程序设计方法都与标准的C C语言程序设计相同,但语言程序设计相同,但C51C51程序与标准的程序与标准的C C程序在以下几个方程序在以下几个方面不一样:面不一样:(1 1)C51C51中定义的库函数和标准中定义的库函数和标准C C语言定义的库函数不同。语言定义的库函数不

6、同。标准的标准的C C语言定义的库函数是按通用微型计算机来定义的,而语言定义的库函数是按通用微型计算机来定义的,而C51C51中的库函数是按中的库函数是按MCS-51MCS-51单片机相应情况来定义的;单片机相应情况来定义的;(2 2)C51C51中的数据类型与标准中的数据类型与标准C C的数据类型也有一定的区别,的数据类型也有一定的区别,在在C51C51中还中还增加了几种增加了几种针对针对MCS-51MCS-51单片机特有的数据类型;单片机特有的数据类型;4实用精品课件PPT(3 3)C51C51变量的存储模式与标准变量的存储模式与标准C C中变量的存储模式不一中变量的存储模式不一样,样,C

7、51C51中变量的中变量的存储模式存储模式是与是与MCS-51MCS-51单片机的存储器紧单片机的存储器紧密相关;密相关;(4 4)C51C51与标准与标准C C的输入输出处理不一样,的输入输出处理不一样,C51C51中的输入输中的输入输出是通过出是通过MCS-51MCS-51串行口来完成的,输入输出指令执行前必串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;须要对串行口进行初始化;(5 5)C51C51与标准与标准C C在函数使用方面也有一定的区别,在函数使用方面也有一定的区别,C51C51中中有专门的中断函数有专门的中断函数。5实用精品课件PPT用用C C语言编写语言编写MCS

8、-51MCS-51单片机程序与用汇编语言编写单片机程序与用汇编语言编写MCSMCS5151单片机程序单片机程序不一样不一样。 用汇编语言用汇编语言编写编写MCSMCS5151单片机程序必须要考虑其存储器单片机程序必须要考虑其存储器结构,尤其必须考虑其片内数据存储器与特殊功能寄存器的结构,尤其必须考虑其片内数据存储器与特殊功能寄存器的使用以及按实际地址处理端口数据。使用以及按实际地址处理端口数据。 用用C C语言编写语言编写的的MCSMCS5151单片机应用程序,则不用像汇编单片机应用程序,则不用像汇编语言那样须具体组织、分配存储器资源和处理端口数据,但语言那样须具体组织、分配存储器资源和处理端

9、口数据,但在在C C语言编程中,语言编程中,对数据类型与变量的定义,必须要与单片机对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。的存储结构相关联,否则编译器不能正确地映射定位。 2.C2.C语言与语言与MCS-51MCS-51单片机单片机6实用精品课件PPT 现在支持现在支持MCS-51MCS-51单片机的单片机的C C语言编译器有很多种,如语言编译器有很多种,如American AutomationAmerican Automation、AvocetAvocet、BSO/TASKINGBSO/TASKING、DUNFIELD SHAREWAREDUNF

10、IELD SHAREWARE、KEIL/FranklinKEIL/Franklin等。各种编译器的等。各种编译器的基本情况相同,但具体处理时有一定的区别,其中基本情况相同,但具体处理时有一定的区别,其中KEILKEIL/Franklin/Franklin以它的代码紧凑和使用方便等特点优于其以它的代码紧凑和使用方便等特点优于其他编译器,使用特别广泛。他编译器,使用特别广泛。7实用精品课件PPT4.2 C514.2 C51语言的基本语法语言的基本语法 我们要通过我们要通过C51C51语言进行单片机应用程序的开发,语言进行单片机应用程序的开发,首先就要掌握首先就要掌握C51C51语言的语法。语言的语

11、法。C51C51语言的语法主要包括:语言的语法主要包括:lC51C51标识符和关键字;标识符和关键字;lC51C51数据类型数据类型; ;l变量的存储种类及存储类型变量的存储种类及存储类型; ;l绝对地址访问绝对地址访问; ;lC51C51运算符和表达式运算符和表达式。与标准的与标准的C C语言相比,语言相比,C51C51针对于单片机的关键字、数据针对于单片机的关键字、数据类型及绝对地址访问方式增加的部分,在本节中都将进行类型及绝对地址访问方式增加的部分,在本节中都将进行详细的介绍。详细的介绍。8实用精品课件PPTl标识符标识符用来标识源程序中某个对象的名字,这些对象可用来标识源程序中某个对象

12、的名字,这些对象可以是语句、数据类型、函数、变量、数组等。以是语句、数据类型、函数、变量、数组等。lC C语言是区分大小写语言是区分大小写的一种高级语言,如果要定义一个变的一种高级语言,如果要定义一个变量,可以写作量,可以写作“a a”,如果程序中有,如果程序中有“A A”,那么这两个是完,那么这两个是完全不同定义的标识符。全不同定义的标识符。l标识符标识符是由字母、数字和下划线等组成的字符串,应该是由字母、数字和下划线等组成的字符串,应该注意的是第一个字符必须是字母或下划线。注意的是第一个字符必须是字母或下划线。 l关键字关键字则是编程语言保留的特殊标识符,它们则是编程语言保留的特殊标识符,

13、它们具有固定具有固定名称和含义名称和含义,在程序编写中不允许将关键字另作他用。,在程序编写中不允许将关键字另作他用。C51C51中的关键字除了有中的关键字除了有ANSI CANSI C标准的标准的3232个关键字外,还根据个关键字外,还根据C51C51单片机的特点扩展了相关的关键字。单片机的特点扩展了相关的关键字。 4.2.1 C514.2.1 C51的标识符和关键字的标识符和关键字9实用精品课件PPT表表4.1C51编译器的扩展关键字编译器的扩展关键字关关 键键 字字用用 途途说说 明明bit位标量声明位标量声明声明一个位标量或位类型的函数声明一个位标量或位类型的函数sbit位标量声明位标量

14、声明声明一个可位寻址变量声明一个可位寻址变量sfr特殊功能寄存器声明特殊功能寄存器声明声明一个特殊功能寄存器声明一个特殊功能寄存器sfr16特殊功能寄存器声明特殊功能寄存器声明声明一个声明一个1616位的特殊功能寄存器位的特殊功能寄存器data存储器类型说明存储器类型说明直接寻址的内部数据存储器直接寻址的内部数据存储器bdata存储器类型说明存储器类型说明可位寻址的内部数据存储器可位寻址的内部数据存储器idata存储器类型说明存储器类型说明间接寻址的内部数据存储器间接寻址的内部数据存储器pdata存储器类型说明存储器类型说明分页寻址的外部数据存储器分页寻址的外部数据存储器xdata存储器类型说

15、明存储器类型说明外部数据存储器外部数据存储器code存储器类型说明存储器类型说明程序存储器程序存储器interrupt中断函数说明中断函数说明定义一个中断函数定义一个中断函数reentrant再入函数说明再入函数说明定义一个再入函数定义一个再入函数using寄存器组定义寄存器组定义定义芯片的工作寄存器定义芯片的工作寄存器_at_地址定位地址定位为变量进行存储器绝对空间地址定位为变量进行存储器绝对空间地址定位alien函数特性说明函数特性说明用于声明与用于声明与PL/M51PL/M51兼容的函数兼容的函数compact存储器模式存储器模式制定使用外部分页寻址数据存储器空间制定使用外部分页寻址数据

16、存储器空间large存储器模式存储器模式制定使用制定使用MCS-51MCS-51外部数据存储器空间外部数据存储器空间small存储器模式存储器模式制定使用制定使用MCS-51MCS-51内部数据存储器空间内部数据存储器空间_priority_多任务优先声明多任务优先声明规定规定RTX51RTX51或或RTX51 TinyRTX51 Tiny的任务优先级的任务优先级_task_任务声明任务声明定义实时多任务函数定义实时多任务函数10实用精品课件PPT C51 C51 的数据类型分为基本数据类型和组合数据类的数据类型分为基本数据类型和组合数据类型,情况与标准型,情况与标准C C中的数据类型基本相同

17、,但其中中的数据类型基本相同,但其中charchar型与型与shortshort型相同,型相同,floatfloat型与型与doubledouble型相同,另型相同,另外,外,C51C51中还有专门针对于中还有专门针对于MCS-51MCS-51单片机的特殊功能单片机的特殊功能寄存器型和位类型。寄存器型和位类型。4.2.2 C514.2.2 C51的数据类型的数据类型11实用精品课件PPT数数 据据 类类 型型长长 度度大大 小小unsigned charunsigned char1 1字节字节0 0255255charchar1 1字节字节-128-128+127+127unsigned in

18、tunsigned int2 2字节字节0 06553565535intint2 2字节字节-32768-32768+32767+32767unsigned longunsigned long4 4字节字节0 042949672954294967295longlong4 4字节字节-2147483648-2147483648+2147483647+2147483647floatfloat4 4字节字节1.75494E-381.75494E-383.402823E+383.402823E+38* *1 13 3字节字节对象的地址对象的地址bitbit位位0 0或或1 1sfrsfr1 1字节字节

19、0 0255255sfr16sfr162 2字节字节0 06553565535sbitsbit位位0 0或或1 112实用精品课件PPT1 1字符型字符型charchar 有有signed charsigned char和和unsigned charunsigned char之分,默认为之分,默认为signed signed charchar。它们的长度均为一个字节,用于存放一个单字节的。它们的长度均为一个字节,用于存放一个单字节的数据。数据。 对于对于signed charsigned char,它用于定义带符号字节数据,其字,它用于定义带符号字节数据,其字节的最高位为符号位,节的最高位为符

20、号位,“0 0”表示正数,表示正数,“1 1”表示负数,表示负数,补码表示,所能表示的数值范围是补码表示,所能表示的数值范围是-128+127-128+127; 对于对于unsigned charunsigned char,它用于定义无符号字节数据或字,它用于定义无符号字节数据或字符,可以存放一个字节的无符号数,其取值范围为符,可以存放一个字节的无符号数,其取值范围为02550255。unsigned charunsigned char可以用来存放无符号数,也可以存放西文字可以用来存放无符号数,也可以存放西文字符,一个西文字符占一个字节,在计算机内部用符,一个西文字符占一个字节,在计算机内部用

21、ASCIIASCII码存码存放。放。 13实用精品课件PPT2 2intint整型整型 分分singed intsinged int和和unsigned intunsigned int。默认为。默认为signed intsigned int。它们的长度均为它们的长度均为2 2个字节个字节,用于存放一个双字节数据。对于,用于存放一个双字节数据。对于signed intsigned int,用于存放两字节带符号数,补码表示,数的,用于存放两字节带符号数,补码表示,数的范畴为范畴为-32768+32767-32768+32767。对于。对于unsigned intunsigned int,用于存放两

22、字,用于存放两字节无符号数,数的范围为节无符号数,数的范围为065535065535。3 3longlong长整型长整型 分分singed longsinged long和和unsigned longunsigned long。默认为。默认为signed longsigned long。它们的长度均为它们的长度均为四个字节四个字节,用于存放一个四字节数据。对于,用于存放一个四字节数据。对于signed longsigned long,用于存放四字节带符号数,补码表示,数的,用于存放四字节带符号数,补码表示,数的范畴为范畴为-2147483648+2147483647-2147483648+21

23、47483647。对于。对于unsigned longunsigned long,用,用于存放四字节无符号数,数的范围为于存放四字节无符号数,数的范围为0429496729504294967295。14实用精品课件PPT4 4floatfloat浮点型浮点型 floatfloat型数据的长度为型数据的长度为四个字节四个字节,格式符合,格式符合IEEE-754IEEE-754标标准的单精度浮点型数据,包含指数和尾数两部分,最高位为准的单精度浮点型数据,包含指数和尾数两部分,最高位为符号位,符号位,“1 1”表示负数,表示负数,“0 0”表示正数,其次的表示正数,其次的8 8位为阶位为阶码,最后的

24、码,最后的2323位为尾数的有效数位,由于尾数的整数部分隐位为尾数的有效数位,由于尾数的整数部分隐含为含为“1 1”,所以尾数的精度为,所以尾数的精度为2424位。位。 5 5* * 指针型指针型 指针型本身就是一个变量,在这个变量中存放的指向另指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占用一定的内存单元,对一个数据的地址。这个指针变量要占用一定的内存单元,对不同的处理器其长度不一样,在不同的处理器其长度不一样,在C51C51中它的中它的长度一般为长度一般为1313个个字节字节。15实用精品课件PPT6 6特殊功能寄存器型特殊功能寄存器型 这是这是C51C5

25、1扩充的数据类型,用于访问扩充的数据类型,用于访问MCS-51MCS-51单片机中的特单片机中的特殊功能寄存器数据,它分殊功能寄存器数据,它分sfrsfr和和sfr16sfr16两种类型。其中:两种类型。其中: sfrsfr为为字节型字节型特殊功能寄存器类型,占一个内存单元,利特殊功能寄存器类型,占一个内存单元,利用它可以访问用它可以访问MCS-51MCS-51内部的所有特殊功能寄存器;内部的所有特殊功能寄存器; sfr16sfr16为为双字节型双字节型特殊功能寄存器类型,占用两个字节单特殊功能寄存器类型,占用两个字节单元,利用它可以访问元,利用它可以访问MCS-51MCS-51内部的所有两个

26、字节的特殊功能内部的所有两个字节的特殊功能寄存器。寄存器。 在在C51C51中对特殊功能寄存器的访问必须先用中对特殊功能寄存器的访问必须先用sfrsfr或或sfr16sfr16进进行声明。行声明。16实用精品课件PPT7 7位类型位类型 这也是这也是C51C51中扩充的数据类型,用于访问中扩充的数据类型,用于访问MCS-51MCS-51单片机单片机中的可寻址的位单元。在中的可寻址的位单元。在C51C51中,支持两种位类型:中,支持两种位类型:bitbit型和型和sbitsbit型。它们在内存中都只占一个二进制位,其值可以是型。它们在内存中都只占一个二进制位,其值可以是“1 1”或或“0 0”。

27、 区别:区别:用用bitbit定义定义的位变量在的位变量在C51C51编译器编译时,在不同编译器编译时,在不同的时候位地址是的时候位地址是可以变化的可以变化的,而用而用sbitsbit定义定义的位变量必须与的位变量必须与MCS-51MCS-51单片机的一个可以寻址位单元或可位寻址的字节单元单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在中的某一位联系在一起,在C51C51编译器编译时,其对应的位编译器编译时,其对应的位地址是地址是不可变化的不可变化的。sfrsfr P0= 0x80; P0= 0x80; /*/*因因P0P0口的寄存器是可位寻址的口的寄存器是可位寻址的*

28、*/ /sbitsbit P0_0=P00; P0_0=P00; /*/*所以所以P0_0P0_0为为P0P0中的中的P0.0P0.0引脚引脚* */ /除了以上定义方式外,还可以用除了以上定义方式外,还可以用P0.0P0.0的地址去写,如:的地址去写,如:sbitsbit P0_0=0x80; P0_0=0x80;17实用精品课件PPT 在在C51C51语言程序中,有可能会出现在运算中数据类型语言程序中,有可能会出现在运算中数据类型不一致的情况。不一致的情况。C51C51允许任何标准数据类型的隐式转换,允许任何标准数据类型的隐式转换,隐式转换的优先级顺序如下:隐式转换的优先级顺序如下: bi

29、tbitcharcharintintlonglongfloatfloat signed signedunsignedunsigned 也就是说,当也就是说,当charchar型与型与intint型进行运算时,先自动对型进行运算时,先自动对charchar型扩展为型扩展为intint型,然后与型,然后与intint型进行运算,运算结果为型进行运算,运算结果为intint型。型。C51C51除了支持隐式类型转换外,还可以通过除了支持隐式类型转换外,还可以通过强制类强制类型转换符型转换符“()()”对数据类型进行人为的强制转换。对数据类型进行人为的强制转换。 C5lC5l编译器除了能支持以上这些基本

30、数据类型之外,编译器除了能支持以上这些基本数据类型之外,还能支持一些复杂的组合型数据类型还能支持一些复杂的组合型数据类型,如数组类型、指针,如数组类型、指针类型、结构类型、联合类型等这些复杂的数据类型,在后类型、结构类型、联合类型等这些复杂的数据类型,在后面将相继介绍。面将相继介绍。18实用精品课件PPT4.3.1 4.3.1 常量常量 常量是指在程序执行过程中其值不能改变的量。常量是指在程序执行过程中其值不能改变的量。在在C51C51中支持整型常量、浮点型常量、字符型常量和字符中支持整型常量、浮点型常量、字符型常量和字符串型常量。串型常量。一整型常量一整型常量 整型常量也就是整型常数,根据其

31、值范围在计算机中整型常量也就是整型常数,根据其值范围在计算机中分配不同的字节数来存放。在分配不同的字节数来存放。在C51C51中它可以表示成以下几种中它可以表示成以下几种形式:形式: 十进制整数。十进制整数。如如234234、-56-56、0 0等。等。 十六进制整数。十六进制整数。以以0x0x开头表示,如开头表示,如0x120x12表示十六进表示十六进制数制数12H12H。 长整数。长整数。在在C51C51中当一个整数的值达到长整型的范中当一个整数的值达到长整型的范围,则该数按长整型存放,在存储器中占四个字节,另外,围,则该数按长整型存放,在存储器中占四个字节,另外,如一个整数后面加一个字母

32、如一个整数后面加一个字母L L,这个数在存储器中也按长整,这个数在存储器中也按长整型存放。如型存放。如123L123L在存储器中占四个字节。在存储器中占四个字节。补充:补充:C51C51的运算量的运算量19实用精品课件PPT二浮点型常量二浮点型常量 浮点型常量也就是实型常数。有十进制表示形式浮点型常量也就是实型常数。有十进制表示形式和指数表示形式。和指数表示形式。 十进制表示形式十进制表示形式又称定点表示形式,由数字和小数又称定点表示形式,由数字和小数点组成。如点组成。如 0.1230.123、34.64534.645等都是十进制数表示形式等都是十进制数表示形式的浮点型常量。的浮点型常量。 指

33、数表示形式指数表示形式为:为: 数字数字 .数字数字 e e 数数字字 例如:例如:123.456e-3123.456e-3、-3.123e2-3.123e2等都是指数形式的浮等都是指数形式的浮点型常量。点型常量。20实用精品课件PPT三字符型常量三字符型常量 字符型常量是用单引号引起的字符,如字符型常量是用单引号引起的字符,如a a、1 1、F F等。可以是可显示的等。可以是可显示的ASCIIASCII字符,也可以字符,也可以是不可显示的控制字符。对不可显示的控制字符须在是不可显示的控制字符。对不可显示的控制字符须在前面加上反斜杠前面加上反斜杠“ ”组成转义字符。利用它可以完成组成转义字符。

34、利用它可以完成一些特殊功能和输出时的格式控制。常用的转义字符一些特殊功能和输出时的格式控制。常用的转义字符如下表所示。如下表所示。 21实用精品课件PPT转义字符转义字符 含含义义ASCII码(十六进制数)码(十六进制数)o空字符(空字符(null)00Hn换行符(换行符(LF)0AHr回车符(回车符(CR)0DHt水平制表符(水平制表符(HT)09Hb退格符(退格符(BS)08Hf换页符(换页符(FF)0CH单引号单引号27H”双引号双引号22H反斜杠反斜杠5CH22实用精品课件PPT四字符串型常量四字符串型常量 字符串型常量由字符串型常量由双引号双引号“”“”括起的字符组括起的字符组成。成

35、。如如“D D”、“12341234”、“ABCDABCD”等。注意字符串常量等。注意字符串常量与字符常量是不一样,一个字符常量在计算机内只用与字符常量是不一样,一个字符常量在计算机内只用一个字节存放,而一个字符串常量在内存中存放时不一个字节存放,而一个字符串常量在内存中存放时不仅双引号内的字符一个占一个字节,而且系统会自动仅双引号内的字符一个占一个字节,而且系统会自动的在后面加一个转义字符的在后面加一个转义字符“00”作为字符串结束符作为字符串结束符。因此不要将字符常量和字符串常量混淆,如字符常量因此不要将字符常量和字符串常量混淆,如字符常量A A和字符串常量和字符串常量“A A”是不一样的

36、。是不一样的。23实用精品课件PPT4.3.2 4.3.2 变量变量 变量是在程序运行过程中其值可以改变的量。一变量是在程序运行过程中其值可以改变的量。一个变量由两部分组成:变量名和变量值。个变量由两部分组成:变量名和变量值。 在在C51C51中,中,变量在使用前必须对变量进行定义,指变量在使用前必须对变量进行定义,指出变量的数据类型和存储模式出变量的数据类型和存储模式。以便编译系统为它分。以便编译系统为它分配相应的存储单元。定义的格式如下:配相应的存储单元。定义的格式如下: 存储种类存储种类 数据类型说明符数据类型说明符 存储器类型存储器类型 变量名变量名1=1=初值初值 ,变量名,变量名2

37、2初值初值 ;24实用精品课件PPT一数据类型说明符一数据类型说明符 在定义变量时,必须通过数据类型说明符指明变量在定义变量时,必须通过数据类型说明符指明变量的数据类型,指明变量在存储器中占用的字节数。可的数据类型,指明变量在存储器中占用的字节数。可以是基本数据类型说明符,也可以是组合数据类型说以是基本数据类型说明符,也可以是组合数据类型说明符,还可以是用明符,还可以是用typedeftypedef定义的类型别名。定义的类型别名。 在在C51C51中,为了增加程序的可读性,允许用户为系中,为了增加程序的可读性,允许用户为系统固有的数据类型说明符用统固有的数据类型说明符用typedeftyped

38、ef起别名,格式如下:起别名,格式如下: typedeftypedef c51 c51固有的数据类型说明符固有的数据类型说明符 别名;别名; 定义别名后,就可以用别名代替数据类型说明符对定义别名后,就可以用别名代替数据类型说明符对变量进行定义。别名可以用大写,也可以用小写,为变量进行定义。别名可以用大写,也可以用小写,为了区别一般用大写字母表示了区别一般用大写字母表示。【例【例】typedef的使用。的使用。typedefunsignedintWORD;typedefunsignedcharBYTE;BYTEa1=0x12;WORDa2=0x1234;25实用精品课件PPT二变量名二变量名 变

39、量名是变量名是C51C51区分不同变量,为不同变量取的名称。区分不同变量,为不同变量取的名称。在在C51C51中规定变量名可以由字母、数字和下划线三种字中规定变量名可以由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。变量名符组成,且第一个字母必须为字母或下划线。变量名有两种:普通变量名和指针变量名。它们的区别是指有两种:普通变量名和指针变量名。它们的区别是指针变量名前面要带针变量名前面要带“* *”号。号。26实用精品课件PPT4.2.3 4.2.3 变量的存储种类和存储类型变量的存储种类和存储类型 变量是一种在程序执行过程中,其数值不断变量是一种在程序执行过程中,其数值不断

40、变化的量。变化的量。C51C51规定变量必须先定义后使用。规定变量必须先定义后使用。C51C51对变量定义的格式如下:对变量定义的格式如下: 存储种类存储种类 数据类型数据类型 存储器类型存储器类型 变量名表变量名表27实用精品课件PPT1存储种类存储种类存储种类是指变量在程序执行过程中的作用范围。存储种类是指变量在程序执行过程中的作用范围。C51变量的存储种类有四种,分别是自动变量的存储种类有四种,分别是自动(auto)、外部、外部(extern)、静态静态(static)和寄存器和寄存器(register)。1)auto:使用使用auto定义的变量称为定义的变量称为自动变量自动变量,其作用

41、范围在定义,其作用范围在定义它的函数体或复合语句内部,当定义它的函数体或复合语它的函数体或复合语句内部,当定义它的函数体或复合语句执行时,句执行时,C51才为该变量分配内存空间,结束时占用的才为该变量分配内存空间,结束时占用的内存空间释放。自动变量一般分配在内存的堆栈空间中。内存空间释放。自动变量一般分配在内存的堆栈空间中。定义变量时,如果省略存储种类,则该变量默认为自动定义变量时,如果省略存储种类,则该变量默认为自动(auto)变量。变量。28实用精品课件PPT2)extern:使用使用extern定义的变量称为定义的变量称为外部变量外部变量。在一个函数体内,。在一个函数体内,要使用一个已在

42、该函数体外或别的程序中定义过的外部变量要使用一个已在该函数体外或别的程序中定义过的外部变量时,该变量在该函数体内要用时,该变量在该函数体内要用extern说明。说明。外部变量是全局外部变量是全局变量,变量,外部变量被定义后分配固定的内存空间,在程序整个外部变量被定义后分配固定的内存空间,在程序整个执行时间内都有效,直到程序结束才释放。执行时间内都有效,直到程序结束才释放。3)static:使用使用static定义的变量称为定义的变量称为静态变量静态变量。它又分为内部静态。它又分为内部静态变量和外部静态变量。变量和外部静态变量。在函数体内部定义的静态变量为在函数体内部定义的静态变量为内部静态变量

43、内部静态变量,它在对,它在对应的函数体内有效,一直存在,但在函数体外不可见,这样应的函数体内有效,一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被保护,还可以实现当离开不仅使变量在定义它的函数体外被保护,还可以实现当离开函数时值不被改变。函数时值不被改变。外部静态变量外部静态变量上在函数外部定义的静态上在函数外部定义的静态变量。它在程序中一直存在,但在定义的范围之外是不可见变量。它在程序中一直存在,但在定义的范围之外是不可见的。如在多文件或多模块处理中,外部静态变量只在文件内的。如在多文件或多模块处理中,外部静态变量只在文件内部或模块内部有效。部或模块内部有效。29实用精品课件

44、PPT4)register:使用使用register定义的变量称为定义的变量称为寄存器变量寄存器变量。它定义的变量。它定义的变量存放在存放在CPU内部的寄存器中,处理速度快,但数目少。内部的寄存器中,处理速度快,但数目少。C51编译器编译时能自动识别程序中使用频率最高的变量,并自编译器编译时能自动识别程序中使用频率最高的变量,并自动将其作为寄存器变量,用户可以无需专门声明。动将其作为寄存器变量,用户可以无需专门声明。30实用精品课件PPT2 2存储器类型存储器类型存储器类型是用于指明变量所处的单片机的存储器区域存储器类型是用于指明变量所处的单片机的存储器区域情况。存储器类型与存储种类完全不同。

45、情况。存储器类型与存储种类完全不同。C51C51编译器能识别编译器能识别的存储器类型有以下几种,见表所示。的存储器类型有以下几种,见表所示。存储器类型存储器类型描描 述述data直接寻址的片内直接寻址的片内RAMRAM低低128B128B,访问速度快,访问速度快bdata片内片内RAMRAM的可位寻址区(的可位寻址区(20H2FH20H2FH),允许字节和),允许字节和位混合访问位混合访问idata间接寻址访问的片内间接寻址访问的片内RAMRAM,允许访问全部片内,允许访问全部片内RAMRAMpdata用用RiRi间接访问的片外间接访问的片外RAMRAM的低的低256B256Bxdata用用D

46、PTRDPTR间接访问的片外间接访问的片外RAMRAM,允许访问全部,允许访问全部64k64k片片外外RAMRAMcode程序存储器程序存储器ROM 64kROM 64k空间空间 定义变量时也可以省定义变量时也可以省“存储器类型存储器类型”,省时,省时C51C51编译器将编译器将按编译模式默认存储器类型,具体编译模式的情况在后面介按编译模式默认存储器类型,具体编译模式的情况在后面介绍。绍。31实用精品课件PPT下面对下面对MCS-51单片机各存储区类型的特点加以说明。单片机各存储区类型的特点加以说明。(1)data区区data区的寻址是最快的,所以应该把使用频率高的区的寻址是最快的,所以应该把

47、使用频率高的变量放在变量放在data区。但由于空间有限,必须注意使用区。但由于空间有限,必须注意使用data区,区,data区除了包含程序变量外,还包含了堆栈区除了包含程序变量外,还包含了堆栈和寄存器组和寄存器组data区。区。unsignedchardatasystem_status=0;unsignedintdataunit_id2;chardatainp_string16;floatdataoutp_value;mytypedatanew_var;32实用精品课件PPT(2)bdata区区当在当在bdata区的位寻址区定义变量,这个变量就可进行区的位寻址区定义变量,这个变量就可进行位寻址

48、,并且声明位变量。这对状态寄存器来说十分有位寻址,并且声明位变量。这对状态寄存器来说十分有用,因为它可以单独使用变量的每一位,而不一定要用用,因为它可以单独使用变量的每一位,而不一定要用位变量名引用位变量。下面是一些在位变量名引用位变量。下面是一些在bdata区中声明变量区中声明变量和使用位变量的例子。和使用位变量的例子。unsignedcharbdatastatus_byte;unsignedintbdatastatus_word;unsignedlongbdatastatus_dword;sbitstat_flag=status_byte4;if(status_word15)stat_fl

49、ag=1;33实用精品课件PPT(3)idata区区idata区也可以存放使用比较频繁的变量,使用寄存器区也可以存放使用比较频繁的变量,使用寄存器作为指针进行寻址。在寄存器中设置作为指针进行寻址。在寄存器中设置8位地址进行间接寻位地址进行间接寻址,与外部存储器寻址比较,它的指令执行周期和代码址,与外部存储器寻址比较,它的指令执行周期和代码长度都比较短。长度都比较短。unsignedcharidatasystem_status=0;unsignedintidataunit_id2;charidatainp_string16;floatidataoutp_value;(4)pdata和和xdata

50、区区在这两个区声明变量和在其他区的语法是一样的,但在这两个区声明变量和在其他区的语法是一样的,但pdata区只有区只有256B,而,而xdata区可达区可达65536B,举例如下:,举例如下:unsignedcharxdatasystem_status=0;unsignedintpdataunit_id2;charxdatainp_string16;floatpdataoutp_value;34实用精品课件PPT(5)code区区code区即区即MCS-51的程序代码区,代码区的数据是不可改的程序代码区,代码区的数据是不可改变的,所以变的,所以MCS-51的代码区不可重写。一般代码区中可存的代

51、码区不可重写。一般代码区中可存放数据表、跳转向量和状态表,对放数据表、跳转向量和状态表,对code区的访问和对区的访问和对xdata区的访问的时间是一样的,代码区中的对象在编译时初始化,区的访问的时间是一样的,代码区中的对象在编译时初始化,否则就得不到想要的值。下面是代码区声明的例子。否则就得不到想要的值。下面是代码区声明的例子。unsignedintcodeunit_id2=0x1234,0x89ab;unsignedcharcodeuchar_data16=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x

52、13,0x14,0x15;35实用精品课件PPT【例】变量定义存储种类和存储器类型相关情况。【例】变量定义存储种类和存储器类型相关情况。chardatavarl;/*在片内在片内RAM低低128B定义用直接寻址方定义用直接寻址方式访问的字符型变量式访问的字符型变量var1*/intidatavar2;/*在片内在片内RAM256B定义用间接寻址方式定义用间接寻址方式访问的整型变量访问的整型变量var2*/autounsignedlongdatavar3;/*在片内在片内RAM128B定义定义用直接寻址方式访问的自动无符号长整型变量用直接寻址方式访问的自动无符号长整型变量var3*/extern

53、floatxdatavar4;/*在片外在片外RAM64KB空间定义空间定义用间接寻址方式访问的外部实型变量用间接寻址方式访问的外部实型变量var4*/intcodevar5;/*在在ROM空间定义整型变量空间定义整型变量var5*/unsigncharbdatavar6;/*在片内在片内RAM位寻址区位寻址区20H2FH单元定义可字节处理和位处理的无符号字符型变量单元定义可字节处理和位处理的无符号字符型变量var6*/36实用精品课件PPT3. 3. 存储模式存储模式C51C51编译器支持三种存储模式:编译器支持三种存储模式:SMALLSMALL模式、模式、COMPACTCOMPACT模模式

54、和式和LARGELARGE模式。不同的存储模式对变量默认的存储器类型不模式。不同的存储模式对变量默认的存储器类型不一样。一样。(1 1)SMALLSMALL模式。模式。SMALLSMALL模式称为小编译模式,在模式称为小编译模式,在SMALLSMALL模模式下,编译时,函数参数和变量被默认在式下,编译时,函数参数和变量被默认在片内片内RAMRAM中,存储器中,存储器类型为类型为datadata。(2 2)COMPACTCOMPACT模式。模式。COMPACTCOMPACT模式称为紧凑编译模式,在模式称为紧凑编译模式,在COMPACTCOMPACT模式下,编译时,函数参数和变量被默认在模式下,编

55、译时,函数参数和变量被默认在片外片外RAMRAM的低的低256256字节空间,存储器类型为字节空间,存储器类型为pdatapdata。(3 3)LARGELARGE模式。模式。LARGELARGE模式称为大编译模式,在模式称为大编译模式,在LARGELARGE模模式下,编译时函数参数和变量被默认在式下,编译时函数参数和变量被默认在片外片外RAMRAM的的64K64K字节空字节空间,存储器类型为间,存储器类型为xdataxdata。37实用精品课件PPT【例【例4.1】变量和函数的存储模式定义程序如下:变量和函数的存储模式定义程序如下:#pragmasmall/*默认存储器类型为默认存储器类型为

56、MCS-51片内直接寻址片内直接寻址RAM*/chardatai,j,k;/*在在MCS-51片内直接寻址片内直接寻址RAM中定义了中定义了3个变量个变量*/chari,j,k;/*未指明存储模式,由未指明存储模式,由#pragmasmall决定,与前一句完全决定,与前一句完全等价等价*/intxdatam,n; /*在在MCS-51片外片外RAM中定义了中定义了2个自动变量个自动变量*/staticcharm,n;/*在在MCS-51片内直接寻址片内直接寻址RAM中定义了中定义了2个静态变量个静态变量*/unsignedcharxdataram128;intfunc1(inti,intj)l

57、arge/*指定指定LARGE模式模式*/return(i+j);intfunc2(inti,intj)/*未指明存储模式未指明存储模式,按默认的按默认的SMALL模式模式*/return(i-j);不同的存储器类型访问速度是不一样的,如:不同的存储器类型访问速度是不一样的,如:unsignedchardatavar1;/*SMALL模式,模式,var1被定位在被定位在data区区*/*即即MCS-51片内直接寻址片内直接寻址RAM*/unsignedcharpdatavar1;/*COMPACT模式,模式,var1被定位在被定位在pdata区区*/*即即MCS-51片外按页面间接寻址片外按页

58、面间接寻址RAM*/unsignedcharxdatavar1;/*LARGE模式,模式,var1被定位在被定位在xdata区区*/*即即MCS-51片外间接寻址片外间接寻址RAM*/38实用精品课件PPT4.2.4 4.2.4 绝对地址的访问绝对地址的访问1.使用指针使用指针采用指针的方法,可实现在采用指针的方法,可实现在C51程序中对任意指定的存储器地址进程序中对任意指定的存储器地址进行操作。例如:行操作。例如:#defineucharunsignedchar#defineuintunsignedintvoidtest_memory(void)ucharidataivar1;ucharxd

59、ata*xdp;/*定义一个指向定义一个指向xdata存储器空间的指针存储器空间的指针*/chardata*dp;/*定义一个指向定义一个指向data存储器空间的指针存储器空间的指针*/ucharidata*idp;/*定义一个指向定义一个指向Idata存储器空间的指针存储器空间的指针*/xdp=0x1000;/*xdata指针赋值,指向指针赋值,指向xdata存储器地址存储器地址1000H处处*/*xdp=0x5A;/*将数据将数据5AH送到送到xdata的的1000H单元单元*/dp=0x61;/*data指针赋值,指向指针赋值,指向data存储器地址存储器地址61H处处*/*dp=0x2

60、3;/*将数据将数据23H送到送到data的的61H单元单元*/idp=&ivar1;/*idp指向指向idata区变量区变量ivar1*/*idp=0x16;/*等价于等价于ivar1=0x16*/39实用精品课件PPT2 2、使用、使用C51C51运行库中预定义宏运行库中预定义宏 C51C51编译器提供了一组宏定义来对编译器提供了一组宏定义来对5151系列单片机系列单片机的的codecode、datadata、pdatapdata和和xdataxdata空间进行绝对寻址。规空间进行绝对寻址。规定只能以无符号数方式访问,定义了定只能以无符号数方式访问,定义了8 8个宏定义,其函个宏定义,其函

61、数原型如下:数原型如下:40实用精品课件PPT#defineCBYTE(unsignedcharvolatile*)0x50000L)#defineDBYTE(unsignedcharvolatile*)0x40000L)#definePBYTE(unsignedcharvolatile*)0x30000L)#defineXBYTE(unsignedcharvolatile*)0x20000L)#defineCWORD(unsignedintvolatile*)0x50000L)#defineDWORD(unsignedintvolatile*)0x40000L)#definePWORD(un

62、signedintvolatile*)0x30000L)#defineXWORD(unsignedintvolatile*)0x20000L)这些函数原型放在这些函数原型放在absacc.h文件中。使用时须用预处理命文件中。使用时须用预处理命令把该头文件包含到文件中,形式为:令把该头文件包含到文件中,形式为:#include。其中:其中:CBYTE以字节形式对以字节形式对code区寻址,区寻址,DBYTE以字节以字节形式对形式对data区寻址,区寻址,PBYTE以字节形式对以字节形式对pdata区寻址,区寻址,XBYTE以字节形式对以字节形式对xdata区寻址,区寻址,CWORD以字形式对以字

63、形式对code区寻址,区寻址,DWORD以字形式对以字形式对data区寻址,区寻址,PWORD以字形式对以字形式对pdata区寻址,区寻址,XWORD以字形式对以字形式对xdata区寻址。区寻址。41实用精品课件PPT【例】绝对地址对存储单元的访问【例】绝对地址对存储单元的访问#include/*将绝对地址头文件包含在文件中将绝对地址头文件包含在文件中*/#include/*将寄存器头文件包含在文件中将寄存器头文件包含在文件中*/#defineucharunsignedchar/*定义符号定义符号uchar为数据类为数据类型符型符unsignedchar*/#defineuintunsigne

64、dint/*定义符号定义符号uint为数据类型为数据类型符符unsignedint*/voidmain(void)ucharvar1;uintvar2;var1=XBYTE0x0002;/*访问片外访问片外RAM的的0002字节单元字节单元*/var2=XWORD0x0004;/*访问片外访问片外RAM的的00040005单元单元*/.while(1); 42实用精品课件PPT3 3、使用、使用C51C51扩展关键字扩展关键字_at_at_ 使用使用_at_at_对指定的存储器空间的绝对地址进行访问,对指定的存储器空间的绝对地址进行访问,一般格式如下:一般格式如下: 数据类型数据类型 存储器类

65、型存储器类型 标识符标识符 _at_ _at_ 地址常数;地址常数; 其中,存储器类型为其中,存储器类型为datadata、bdatabdata、idataidata、pdatapdata等等C51C51能识别的数据类型,如省略则按存储模式规定的默认能识别的数据类型,如省略则按存储模式规定的默认存储器类型确定变量的存储器区域;数据类型为存储器类型确定变量的存储器区域;数据类型为C51C51支持支持的数据类型。地址常数用于指定变量的绝对地址,必须位的数据类型。地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;于有效的存储器空间之内;使用使用_at_at_定义的变量必须为全定义的变量必

66、须为全局变量。局变量。43实用精品课件PPT【例】通过【例】通过_at_实现绝对地址的访问。实现绝对地址的访问。#defineucharunsignedchar/*定义符号定义符号uchar为数据类为数据类型符型符unsignedchar*/#defineuintunsignedint/*定义符号定义符号uint为数据类型为数据类型符符unsignedint*/voidmain(void)dataucharx1_at_0x40;/*在在data区中定义字节变量区中定义字节变量x1,它的地址为它的地址为40H*/xdatauintx2_at_0x2000;/*在在xdata区中定义字变量区中定义

67、字变量x2,它的地址为它的地址为2000H*/x1=0xff;x2=0x1234;.while(1);44实用精品课件PPT补充:补充:C51的运算符及表达式的运算符及表达式1.赋值运算符赋值运算符赋值运算符赋值运算符“=”,在,在C51中,它的功能是将一个数中,它的功能是将一个数据的值赋给一个变量,如据的值赋给一个变量,如x=10。利用赋值运算符将一个。利用赋值运算符将一个变量与一个表达式连接起来的式子称为赋值表达式,在变量与一个表达式连接起来的式子称为赋值表达式,在赋值表达式的后面加一个分号赋值表达式的后面加一个分号“;”就构成了赋值语句,就构成了赋值语句,一个赋值语句的格式如下:一个赋值

68、语句的格式如下:变量变量=表达式;表达式;执行时先计算出右边表达式的值,然后赋给左边的执行时先计算出右边表达式的值,然后赋给左边的变量。例如:变量。例如:x=8+9;/*将将8+9的值赋绐变量的值赋绐变量x*/x=y=5;/*将常数将常数5同时赋给变量同时赋给变量x和和y*/在在C51中,允许在一个语句中同时给多个变量赋值,中,允许在一个语句中同时给多个变量赋值,赋值顺序自右向左。赋值顺序自右向左。45实用精品课件PPT2.算术运算符算术运算符C51中支持的算术运算符有:中支持的算术运算符有:+加或取正值运算符加或取正值运算符-减或取负值运算符减或取负值运算符*乘运算符乘运算符/除运算符除运算

69、符%取余运算符取余运算符加、减、乘运算相对比较简单,而对于除运算,加、减、乘运算相对比较简单,而对于除运算,如相除的两个数为浮点数,则运算的结果也为浮点数,如相除的两个数为浮点数,则运算的结果也为浮点数,如相除的两个数为整数,则运算的结果也为整数,即如相除的两个数为整数,则运算的结果也为整数,即为整除。如为整除。如25.0/20.0结果为结果为1.25,而,而25/20结果为结果为1。对于取余运算,则要求参加运算的两个数必须为对于取余运算,则要求参加运算的两个数必须为整数,运算结果为它们的余数。例如:整数,运算结果为它们的余数。例如:x=5%3,结果,结果x的值为的值为2。46实用精品课件PP

70、T3.关系运算符关系运算符C51中有中有6种关系运算符:种关系运算符:大于大于=大于等于大于等于3,结果为真(,结果为真(1),而),而10=100,结果为假(,结果为假(0)。)。注意:关系运算符等于注意:关系运算符等于“=”是由两个是由两个“=”组成。组成。47实用精品课件PPT4.逻辑运算符逻辑运算符C51有有3种逻辑运算符:种逻辑运算符:|逻辑或逻辑或&逻辑与逻辑与!逻辑非逻辑非关系运算符用于反关系运算符用于反映两个表达式之间的大映两个表达式之间的大小关系,逻辑运算符则小关系,逻辑运算符则用于求条件式的逻辑值,用于求条件式的逻辑值,用逻辑运算符将关系表用逻辑运算符将关系表达式或逻辑量连

71、接起来达式或逻辑量连接起来的式子就是逻辑表达式。的式子就是逻辑表达式。 逻辑与逻辑与,格式:,格式:条件式条件式1&条件式条件式2当条件式当条件式1与条件式与条件式2都为真时都为真时结果为真(非结果为真(非0值),否则为假(值),否则为假(0值)。值)。逻辑或逻辑或,格式:,格式:条件式条件式1|条件式条件式2当条件式当条件式1与条件式与条件式2都为假时都为假时结果为假(结果为假(0值),否则为真(非值),否则为真(非0值)。值)。逻辑非逻辑非,格式:,格式:!条件式!条件式当条件式原来为真(非当条件式原来为真(非0值),值),逻辑非后结果为假(逻辑非后结果为假(0值)。当条值)。当条件式原来

72、为假(件式原来为假(0值),逻辑非后值),逻辑非后结果为真(非结果为真(非0值)。值)。例如:若例如:若a=8,b=3,c=0,则!,则!a为假,为假,a&b为真,为真,b&c为假。为假。48实用精品课件PPT5.位运算符位运算符【例】设【例】设a=0x45=01010100B,b=0x3b=00111011B,则,则a&b、a|b、ab、a、a2分别为多少?分别为多少?a&b=00010000b=0x10。a|b=01111111B=0x7f。ab=01101111B=0x6f。a=10101011B=0xab。a2=00001110B=0x0e。C51语言能对运算对象按位语言能对运算对象按

73、位进行操作,它与汇编语言使用一进行操作,它与汇编语言使用一样方便。位运算是按位对变量进样方便。位运算是按位对变量进行运算,但并不改变参与运算的行运算,但并不改变参与运算的变量的值。如果要求按位改变变变量的值。如果要求按位改变变量的值,则要利用相应的赋值运量的值,则要利用相应的赋值运算。算。C51中位运算符只能对整数中位运算符只能对整数进行操作,不能对浮点数进行操进行操作,不能对浮点数进行操作。作。C51中的位运算符有:中的位运算符有:&按位与按位与|按位或按位或按位异或按位异或按位取反按位取反右移右移49实用精品课件PPT6.复合赋值运算符复合赋值运算符C51语言中支持在赋值运算符语言中支持在

74、赋值运算符“=”的前面加上其它运算的前面加上其它运算符,组成复合赋值运算符。下面是符,组成复合赋值运算符。下面是C51中支持的复合赋值运算中支持的复合赋值运算符符+=加法赋值加法赋值 +减法赋值减法赋值*=乘法赋值乘法赋值/=除法赋值除法赋值%=取模赋值取模赋值&=逻辑与赋值逻辑与赋值|=逻辑或赋值逻辑或赋值=逻辑异或赋值逻辑异或赋值=逻辑非赋值逻辑非赋值=右移位赋值右移位赋值=2相当于相当于x=x2。50实用精品课件PPT指针是指针是C51语言中的一个十分重要的概念,在语言中的一个十分重要的概念,在C51中的数据类型中专门有一种指针类型。指针为变量的访中的数据类型中专门有一种指针类型。指针为

75、变量的访问提供了另一种方式,变量的指针就是该变量的地址,问提供了另一种方式,变量的指针就是该变量的地址,还可以定义一个专门指向某个变量的地址的指针变量。还可以定义一个专门指向某个变量的地址的指针变量。7. 7. 指针与地址运算符指针与地址运算符51实用精品课件PPT为了表示指针变量和它所指向的变量地址之间的关系,为了表示指针变量和它所指向的变量地址之间的关系,C51中提供了两个专门的运算符:中提供了两个专门的运算符:*指针运算符指针运算符&取地址运算符取地址运算符指针运算符指针运算符“*”放在指针变量前面,通过它实现访问放在指针变量前面,通过它实现访问以指针变量的内容为地址所指向的存储单元。例

76、如:指针以指针变量的内容为地址所指向的存储单元。例如:指针变量变量p中的地址为中的地址为2000H,则,则*p所访问的是地址为所访问的是地址为2000H的的存储单元,存储单元,x=*p,实现把地址为,实现把地址为2000H的存储单元的内容的存储单元的内容送给变量送给变量x。取地址运算符取地址运算符“&”放在变量的前面,通过它取得变量放在变量的前面,通过它取得变量的地址,变量的地址通常送给指针变量。例如:设变量的地址,变量的地址通常送给指针变量。例如:设变量x的的内容为内容为12H,地址为,地址为2000H,则,则&x的值为的值为2000H,如有一,如有一指针变量指针变量p,则通常用,则通常用p

77、=&x,实现将,实现将x变量的地址送给指针变量的地址送给指针变量变量p,指针变量,指针变量p指向变量指向变量x,以后可以通过,以后可以通过*p访问变量访问变量x。52实用精品课件PPT4.3 4.3 中断服务程序中断服务程序中断服务程序通过使用中断服务程序通过使用interrupt关键字来实现。定义中断关键字来实现。定义中断服务程序的一般格式如下:服务程序的一般格式如下:void函数名函数名()interruptnusingm关键字关键字interrupt后面的后面的n是中断号,是中断号,n的取值范围:的取值范围:031。编译程序从编译程序从8n+3处产生中断向量,即在程序存储器处产生中断向量

78、,即在程序存储器8n+3地地址处形成一条长跳转指令,转向中断号址处形成一条长跳转指令,转向中断号n的中断服务程序。的中断服务程序。中断号对应着中断号对应着IE寄存器中的使能位,即寄存器中的使能位,即IE寄存器中的寄存器中的0位对位对应着外部中断应着外部中断0,相应的外部中断,相应的外部中断0的中断号是的中断号是0。中断号。中断号04与中断源的对应关系见表与中断源的对应关系见表4.4。53实用精品课件PPT表表4.4 4.4 中断号中断号0 04 4和中断源的对应关系和中断源的对应关系中断号中断号n n中中 断断 源源中中 断断 向向 量量0 0外部中断外部中断0 00003H0003H1 1定

79、时定时/ /计数器计数器0 0000BH000BH2 2外部中断外部中断1 10013H0013H3 3定时定时/ /计数器计数器1 1001BH001BH4 4串行口串行口0023H0023H54实用精品课件PPT#includesbitp=P00;voidmain()IT0=1;/*对外部中断对外部中断0采用下降沿出发方式采用下降沿出发方式*/EA=1;/*开启中断允许总控制位开启中断允许总控制位*/EX0=1;/*开启外部中断开启外部中断0允许控制位允许控制位*/for(;);voidint0()interrupt0/*外部中断外部中断0的中断服务程序的中断服务程序*/p=!p; /*产

80、生中断后对产生中断后对P0.0进行取反进行取反*/usingm指明该中断服务程序所对应的工作寄存器组,取值范指明该中断服务程序所对应的工作寄存器组,取值范围为围为03。指定工作寄存器组的缺点是所有被中断调用的过程。指定工作寄存器组的缺点是所有被中断调用的过程都必须使用同一个寄存器组,否则参数传递会发生错误。通常都必须使用同一个寄存器组,否则参数传递会发生错误。通常不设定不设定usingm,除非保证中断程序中未调用其他子程序。设,除非保证中断程序中未调用其他子程序。设置一个外部中断置一个外部中断0的中断服务程序的例子如下:的中断服务程序的例子如下:55实用精品课件PPT单片机C语言编程与设计56

81、实用精品课件PPT基本程度范例:基本程度范例:例例1、LED的控制的控制使用使用89C5l的的Port1连接连接8个个LED,以产生跑马,以产生跑马灯的效果。连接好电路并且完成程序之后,您将灯的效果。连接好电路并且完成程序之后,您将可以看到可以看到8个个LED依次轮流闪烁。依次轮流闪烁。在这次练习中,您将学会如何使用在这次练习中,您将学会如何使用I/OPort输输出数据,以及如何使用循环实现时间延迟。出数据,以及如何使用循环实现时间延迟。 57实用精品课件PPT电电路路图图58实用精品课件PPT#includevoiddelay(void)/*delay函数函数*/unsignedchari,

82、j;/*这个函数执行时间的延迟这个函数执行时间的延迟*/for(i=0;i255;i+)for(j=0;j255;j+);voidmain(void)unsignedcharj=0XFE;/*声明变量声明变量j,11111110*/while(1)/*无穷循环无穷循环*/*依次让依次让LED0,1,2,3,4,5,6,7闪烁闪烁*/j=(j1)|0x01;if(j=0XFF)j=0XFE;P1=j;/*将数值输出到将数值输出到Port1,控制,控制LED亮或灭亮或灭*/delay();/*调用调用delay函数函数*/59实用精品课件PPT例例2、指、指拨开关的输入拨开关的输入目的是使用目的是

83、使用89C51的的Portl连接到连接到8个个LED,Port2则连接到则连接到1个指拨开关,当用户拨动指拨开关时,个指拨开关,当用户拨动指拨开关时,相对应的相对应的LED就会亮或灭。就会亮或灭。在这次练习中,您将学会如何使用在这次练习中,您将学会如何使用89C51输入数输入数据。据。 例如,您要从例如,您要从Port 2Port 2输入数据给变量输入数据给变量temptemp时,可时,可以执行以执行temp=P2temp=P2; 60实用精品课件PPT电电路路图图61实用精品课件PPT#includevoiddelay(void)/*delay函数函数*/unsignedchari,j;/*

84、这个函数执行时间的延迟这个函数执行时间的延迟*/for(i=0;i255;i+)for(j=0;j255;j+);voidmain(void)unsignedchartemp;/*声明变量声明变量temp*/while(1)/*无穷循环无穷循环*/temp=P2;/*将将P2输入的数据直接放入变量输入的数据直接放入变量temp当中当中*/P1=temp;/*将变量将变量temp中的数据直接输出到中的数据直接输出到Port1*/delay();62实用精品课件PPT例例3、七段显示器的控制七段显示器的控制 目的是使用目的是使用89C51的的Port1连接到一个共阳的连接到一个共阳的七段显示器,然

85、后让七段显示器,然后让89C51轮流显示轮流显示09。当您连。当您连接好电路,并且完成程序之后,您将看到七段显接好电路,并且完成程序之后,您将看到七段显示器依次显示示器依次显示09。在这次练习中,您将学会如何使用在这次练习中,您将学会如何使用89C5l控制控制共阳七段显示器的显示。共阳七段显示器的显示。63实用精品课件PPT一个共阳七段显示器的外观和引脚如图所示。一个共阳七段显示器的外观和引脚如图所示。这个共阳七段显示器的引脚分别连接到这个共阳七段显示器的引脚分别连接到89C5l的的Portl引脚。引脚。64实用精品课件PPT电电路路图图65实用精品课件PPT#includecodeseven

86、_seg10=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90;voiddelay(void)/*时间延迟的函数时间延迟的函数*/unsignedchari,j;for(i=0;i255;i+)for(j=0;j255;j+);voidmain(void)unsignedchari;/*变量变量i用来储存用来储存09*/while(1)/*无穷循环无穷循环*/for(i=0;i10;i+)P1=seven_segi;/*输出输出09到共阳七段显示器到共阳七段显示器*/delay();/*调用时间延迟函数调用时间延迟函数delay*/66实用精品课件PPTOVEROVER!67实用精品课件PPTThank You更多精品更多精品 敬请关注!敬请关注!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

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