单片机C语言ppt课件_第1页
单片机C语言ppt课件_第2页
单片机C语言ppt课件_第3页
单片机C语言ppt课件_第4页
单片机C语言ppt课件_第5页
已阅读5页,还剩167页未读 继续免费阅读

下载本文档

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

文档简介

1、 单片机单片机C言语及程序设计言语及程序设计1.1 C51概述概述1.2 C51数据类型及存储数据类型及存储1.3 C51变量的定义及数变量的定义及数据存储区域据存储区域1.4 C51位变量的定义位变量的定义1.5 C51特殊功能存放器特殊功能存放器的定义的定义1.6 C51指令的定义指令的定义1.7 C51的输入的输入/输出输出1.8 C51函数的定义函数的定义1.9 C51与汇编言语与汇编言语混合编程混合编程1.10 C51集成开发集成开发软件软件Keil C目目 录录本章主要讨论本章主要讨论C51变量的定义和函数的定变量的定义和函数的定义,以及义,以及Keil C软件的运用等。软件的运用

2、等。本章内容的安排,以为读者曾经学习过本章内容的安排,以为读者曾经学习过C言语,具有言语,具有C言语的根本知识,因此,本章言语的根本知识,因此,本章内容完全是结合单片机来讲解,也就是补充内容完全是结合单片机来讲解,也就是补充C言语在单片机方面的概念、数据定义和函言语在单片机方面的概念、数据定义和函数定义等。数定义等。经过本章学习,使读者可以比较顺利地经过本章学习,使读者可以比较顺利地编写编写C51程序。程序。 1.1 C51概述概述主要内容主要内容1.1.1 C言语编程的优势言语编程的优势1.1.2 C51与与ANSI C的的区别区别1.1.3 C51扩展的关键字扩展的关键字1.1 C51概述

3、概述学习单片机学习单片机C言语的必要性言语的必要性随着单片机性能的不断提高,随着单片机性能的不断提高,C言语编译言语编译调试工具的不断完善,以及如今对单片机产调试工具的不断完善,以及如今对单片机产品辅助功能的要求、对开发周期不断缩短的品辅助功能的要求、对开发周期不断缩短的要求,使得越来越多的单片机编程人员转向要求,使得越来越多的单片机编程人员转向运用运用C言语,因此有必要在单片机课程中讲言语,因此有必要在单片机课程中讲授授“单片机单片机C言语。言语。 “C51概念:为了与概念:为了与ANSI C区别,把区别,把“单片机单片机C言语称为言语称为“C51,也称为,也称为“Keil C。 1.1.1

4、 C言语编程的优势言语编程的优势在编程方面,运用在编程方面,运用C51较汇编言语有诸多较汇编言语有诸多优势:优势:1编程容易编程容易 2容易实现复杂的数值计算容易实现复杂的数值计算3容易阅读与交流容易阅读与交流4容易调试与维护程序容易调试与维护程序5容易实现模块化开发容易实现模块化开发 6程序可移植性好程序可移植性好 1.1.2 C言语与言语与ANSI 的区别的区别用汇编言语编写单片机程序时,必需求用汇编言语编写单片机程序时,必需求思索其存储器的构造,尤其要思索其片内数思索其存储器的构造,尤其要思索其片内数据存储器、特殊功能存放器能否正确合理的据存储器、特殊功能存放器能否正确合理的运用,以及按

5、照实践地址端口数据的处置。运用,以及按照实践地址端口数据的处置。用用C51编写程序,虽然不像汇编言语那样编写程序,虽然不像汇编言语那样需求详细地组织、分配存储器资源,但是需求详细地组织、分配存储器资源,但是C51对数据类型和变量的定义,必需求与单对数据类型和变量的定义,必需求与单片机的存储构造相关联,否那么编译器不能片机的存储构造相关联,否那么编译器不能正确地映射定位。正确地映射定位。 用用C51编写单片机程序,与用编写单片机程序,与用ANSI C编编写程序的不同之处是,需求根据单片机存储写程序的不同之处是,需求根据单片机存储器构造及内部资源,定义相应的数据类型和器构造及内部资源,定义相应的数

6、据类型和变量。变量。其它的语法规定、程序构造及程序设计其它的语法规定、程序构造及程序设计方法,都与方法,都与ANSI C一样。所以本章主要引一样。所以本章主要引见见C51各种变量的定义、指针定义、函数定各种变量的定义、指针定义、函数定义和混合编程。义和混合编程。 1.1.3 C51扩展的关键字扩展的关键字由于单片机在构造及编程上的特殊要求,由于单片机在构造及编程上的特殊要求,C51有本人的特殊关键字,称之为有本人的特殊关键字,称之为C51扩展扩展的关键字,下面给出常用的的关键字,下面给出常用的C51扩展的关键扩展的关键字。字。_at_bdatabit codedataidata interru

7、ptpdatareentrant sbitsfrsfr16usingvolatilexdata这些关键字在后面会陆续接触到,此处这些关键字在后面会陆续接触到,此处先不给出它们的含义。先不给出它们的含义。 1.2 C51数据类型及存储数据类型及存储主要内容主要内容1.2.1 C51的数据类型的数据类型1.2.2 C51数据的存储数据的存储表表4-1 C51数据类型、长度和数值范围数据类型、长度和数值范围数据类型数据类型表示方法表示方法长长 度度数数 值值 范范 围围无符号字符型无符号字符型 unsigned char 1字节字节 0255有符号字符型有符号字符型 signed char1字节字节

8、 - -128127无符号整型无符号整型unsigned int2字节字节 065535有符号整型有符号整型signed int2字节字节 - -3276832767无符号长整型无符号长整型 unsigned long 4字节字节 04294967295有符号长整型有符号长整型 signed long4字节字节 - -21474836482147483647浮点型浮点型float4字节字节 1.1755E-383.40E+38特殊功能寄特殊功能寄存器型存器型sfrsfr161字节字节2字节字节0255065535位类型位类型bit、sbit1位位0或或1数据类型转换数据类型转换1自动转换自动转

9、换转换规那么是向高精度数据类型转换、转换规那么是向高精度数据类型转换、向有符号数据类型转换。如字符型变量与整向有符号数据类型转换。如字符型变量与整型变量相加时,那么位变量先转换字符型或型变量相加时,那么位变量先转换字符型或整型数据,然后相加。整型数据,然后相加。2强迫转换强迫转换像像ANSI C一样,经过强迫类型转换的方一样,经过强迫类型转换的方式进展转换。如:式进展转换。如:unsignedintb;floatc;b=(int)c; 1.2.2 C51数据的存储数据的存储MCS-51单片机只需单片机只需bit和和unsigned char两两种数据类型支持机器指令,而其它类型的数种数据类型支

10、持机器指令,而其它类型的数据都需求转换成据都需求转换成bit或或unsigned char型进展存型进展存储。储。为了减少单片机的存储空间和提高运转为了减少单片机的存储空间和提高运转速度,要尽能够地运用速度,要尽能够地运用unsigned char型数据。型数据。 一、位变量的存储一、位变量的存储bit和和sbit型位变量,直接存于型位变量,直接存于RAM的位的位寻址空间,包括低寻址空间,包括低128位和特殊功能存放器位和特殊功能存放器位。位。 二、字符变量的存储二、字符变量的存储字符变量字符变量char:无论是:无论是unsigned char数据还是数据还是signed char数据,均为

11、数据,均为1个字个字节,可以被直接存储在节,可以被直接存储在RAM中,可以存储中,可以存储在在00 x7f区域,也可以存储在区域,也可以存储在0 x800 xff区区域,与变量的定义有关。域,与变量的定义有关。unsigned char数:可直接被数:可直接被MSC-51接受接受signed char数据:用补码表示。需求额数据:用补码表示。需求额外的操作来测试、处置符号位,运用的是两外的操作来测试、处置符号位,运用的是两种库函数,代码量大,运算速度降低。种库函数,代码量大,运算速度降低。三、整型变量的存储三、整型变量的存储整型变量整型变量int:不论是:不论是unsigned int数据还是

12、数据还是signed int数据,均为数据,均为2个字节,其存个字节,其存储方法是高位字节保管在低地储方法是高位字节保管在低地址在前面,低位字节保管址在前面,低位字节保管在高地址在后面在高地址在后面 。例如,整型变量的值为例如,整型变量的值为0 x1234,在内存,在内存中的存放如右图所示。中的存放如右图所示。signed int数据用补码表示。数据用补码表示。地址地址低低高高:1234:四、长整型变量的存储四、长整型变量的存储长整型变量长整型变量long为为4个个字节,其存储方法与整型数据字节,其存储方法与整型数据一样,是最高位字节保管的地一样,是最高位字节保管的地址最低在最前面,最低位址最

13、低在最前面,最低位字节保管的地址最高在最后字节保管的地址最高在最后面。面。如长整型变量的值为如长整型变量的值为0 x12345678,在内,在内存中的存放方法如右图所示。不论是存中的存放方法如右图所示。不论是unsigned long数据还是数据还是signed long数据。数据。地址地址低低高高:12345678:五、浮点型变量的存储五、浮点型变量的存储浮点型变量浮点型变量fload占占4个字节,用指数个字节,用指数方式表示,其详细格式与编译器有关。方式表示,其详细格式与编译器有关。对于对于Keil C,采用的是,采用的是IEEE-754规范,规范,具有具有24位精度,尾数的最高位一直为位

14、精度,尾数的最高位一直为1,因,因此不保管。详细分布为:此不保管。详细分布为:1位符号位,位符号位,8位阶位阶码位,码位,23位尾数,如以下图所示。位尾数,如以下图所示。 字节地址字节地址0123浮点数浮点数内容内容SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM符号和阶码符号和阶码 尾数高位尾数高位尾数低位尾数低位符号位符号位S:1表示负数,表示负数,0表示正数。表示正数。阶码:用移码表示。如,实践阶码阶码:用移码表示。如,实践阶码-126用用1表示,实践阶码表示,实践阶码0用用127表示,即实践阶表示,即实践阶码数加上码数加上127得到阶码的表达数。得到阶码的表达数。阶码数

15、值范围:阶码数值范围:-126+128。例如浮点数例如浮点数-12.5符号位为符号位为1,12.5的二进制数为的二进制数为1100.1=1.1001E+0011,阶码数值为阶码数值为3+127=130=10000010B,尾数为尾数为1001。因此,其十六进制数为因此,其十六进制数为0 xC1480000,那么存储构,那么存储构造如右图所示。造如右图所示。 地址地址低低高高:C1480000:阐明:教材中存储构造是错的。阐明:教材中存储构造是错的。1.3 C51变量的定义及数据存储区域变量的定义及数据存储区域主要内容主要内容1.3.1 C51变量的定义变量的定义1.3.2 C51变量的存储类变

16、量的存储类型型1.3.3 C51变量的存储区变量的存储区域域1.3.4 C51变量定义举例变量定义举例1.3.5 C51变量的存储方变量的存储方式式1.3.6 C51变量的绝对定变量的绝对定位位1.3.1 C51变量的定义变量的定义C51变量定义的普通格式为:变量定义的普通格式为:存储类型存储类型数据类型数据类型 存储区存储区变量名变量名1=初值初值 ,变量名变量名2=初值初值 ,或或存储类型存储类型存储区存储区 数据类型数据类型 变量名变量名1=初值初值 ,变量名变量名2=初值初值 ,可见变量非位变量的定义由可见变量非位变量的定义由4部分组部分组成,即在变量定义时,指定变量成,即在变量定义时

17、,指定变量4种属性。种属性。数据类型:在前面的数据类型:在前面的4.2中曾经表达过,中曾经表达过,对于变量名也无须多说,下面主要解释对于变量名也无须多说,下面主要解释“存存储类型和储类型和“存储区等概念。存储区等概念。 1.3.2 C51变量的存储类型变量的存储类型存储类型这个属性我们仍沿用存储类型这个属性我们仍沿用ANSI C的的说法,尽量不改动原来的含义。说法,尽量不改动原来的含义。按照按照ANSI C,C言语的变量有言语的变量有4种存储类种存储类型:型:动态存储动态存储auto静态存储静态存储static全局存储全局存储extern存放器存储存放器存储register 一、动态存储一、动

18、态存储动态存储变量:用动态存储变量:用auto定义的为动定义的为动态变量,也叫自动变量。态变量,也叫自动变量。作用范围:在定义它的函数内或复合语作用范围:在定义它的函数内或复合语句内部。句内部。当定义它的函数或复合语当定义它的函数或复合语句执行时,句执行时,C51才为变量分配存储空间,终才为变量分配存储空间,终了时所占用的存储空间释放。了时所占用的存储空间释放。定义变量时,定义变量时,auto可以省略,或者说假可以省略,或者说假设省略了存储类型项,那么以为是动态变量。设省略了存储类型项,那么以为是动态变量。动态变量普通分配运用存放器或堆栈。动态变量普通分配运用存放器或堆栈。 二、静态存储二、静

19、态存储静态存储变量:用静态存储变量:用static定义的为静定义的为静态变量。分为内部静态和外部静态变量。态变量。分为内部静态和外部静态变量。内部静态变量:在函数体内定义的为内内部静态变量:在函数体内定义的为内部静态变量。部静态变量。在函数内可以恣意运用和在函数内可以恣意运用和修正,函数运转终了后会不断存在,但在函修正,函数运转终了后会不断存在,但在函数外不可见,即在函数体外得到维护。数外不可见,即在函数体外得到维护。外部静态变量:在函数体外部定义的为外部静态变量:在函数体外部定义的为外部静态变量。在定义的文件内可以恣意运外部静态变量。在定义的文件内可以恣意运用和修正,外部静态变量会不断存在,

20、但在用和修正,外部静态变量会不断存在,但在文件外不可见,即在文件外得到维护。文件外不可见,即在文件外得到维护。 三、外部存储三、外部存储外部存储变量:用外部存储变量:用extern声明的变量声明的变量为外部变量,是在其它文件定义过的全局变为外部变量,是在其它文件定义过的全局变量。量。用用extern声明后,便可以在所声明声明后,便可以在所声明的文件中运用。的文件中运用。需求留意的是:在定义变量时,即使是需求留意的是:在定义变量时,即使是全局变量,也不能运用全局变量,也不能运用extern定义。定义。 四、存放器存储四、存放器存储存放器存储变量:用存放器存储变量:用register定义的定义的变

21、量为存放器变量。变量为存放器变量。存放器变量存放在存放器变量存放在CPU的存放器中,这的存放器中,这种变量处置速度快,但数目少。种变量处置速度快,但数目少。C51中的存放器变量:中的存放器变量: C51的编译器在编的编译器在编译时,可以自动识别程序中运用频率高的变译时,可以自动识别程序中运用频率高的变量,并将其安排为存放器变量,用户不用专量,并将其安排为存放器变量,用户不用专门声明。门声明。 1.3.3 C51变量的存储区域变量的存储区域变量的存储区属性是单片机扩展的概念,变量的存储区属性是单片机扩展的概念,非常重要,它涉及到非常重要,它涉及到7个新的关键字。个新的关键字。MCS-51单片机有

22、四个存储空间,分成三单片机有四个存储空间,分成三类,它们是片内数据存储空间、片外数据存类,它们是片内数据存储空间、片外数据存储空间和程序存储空间。储空间和程序存储空间。 MCS-51单片机有更多的存储区域:由于单片机有更多的存储区域:由于片内数据存储器和片外数据存储器又分成不片内数据存储器和片外数据存储器又分成不同的区域,所以单片机的变量有更多的存储同的区域,所以单片机的变量有更多的存储区域。区域。在定义变量时,必需明确指出在定义变量时,必需明确指出是存放在哪个区域。是存放在哪个区域。表表1-2 C51存储区与存储空间的对应关系存储区与存储空间的对应关系关键字关键字对应的存储空间及范围对应的存

23、储空间及范围codeROM空间,空间,64KB全空间全空间data片内片内RAM,直接寻址,低,直接寻址,低128字节字节bdata片内片内RAM,位寻址区,位寻址区0 x200 x2f,可字节访问,可字节访问idata 片内片内RAM,间接寻址,间接寻址,256字节,与字节,与 Ri 对应对应pdata片外片外RAM,分页寻址的,分页寻址的256字节字节(P2不变不变), P2改变可寻址改变可寻址64KB全空间,与全空间,与MOVX Ri 对应对应xdata片外片外RAM,64KB全空间全空间bit片内片内RAM位寻找区位寻找区,位地址位地址0 x000 x7f,128位位1.3.4 C51

24、变量定义举例变量定义举例1定义存储在定义存储在data区域的动态区域的动态unsigned char变量:变量:unsigned char data sec=0, min=0, hou=0;2定义存储在定义存储在data区域的静态区域的静态unsigned char变量:变量:static unsigned char data scan_code=0 xfe;3定义存储在定义存储在data区域的静态区域的静态unsigned int变量:变量:static unsigned int data dd;4定义存储在定义存储在bdata区域的动态区域的动态unsigned char变量:变量:uns

25、igned char bdata operate, operate1;/定义指示操作的可位寻址的变量定义指示操作的可位寻址的变量5定义存储在定义存储在idata区域的动态区域的动态unsigned char数组:数组:unsigned char idata temp20; 6定义在定义在pdata区域的动态有符号区域的动态有符号int数数组:组:int pdata send_data30;/定义存放发送数据的数组定义存放发送数据的数组 7定义存储在定义存储在xdata区域的动态区域的动态unsigned int数组:数组:unsigned int xdata receiv_buf50;/定义存

26、放接受数据的数组定义存放接受数据的数组8定义存储在定义存储在code区域的区域的unsigned char数组:数组:unsigned char code dis_code10=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /定义共阴极数码管段码数组定义共阴极数码管段码数组1.3.5 C51变量的存储方式变量的存储方式存储方式:假设在定义变量时缺省了存存储方式:假设在定义变量时缺省了存储区属性,那么编译器会自动选择默许的存储区属性,那么编译器会自动选择默许的存储区域,也就是存储方式。储区域,也就是存储方式。变量

27、的存储方式也就是程序或函数变量的存储方式也就是程序或函数的编译方式。的编译方式。编译方式分为三种:小方式编译方式分为三种:小方式small、紧凑方式紧凑方式compact和大方式和大方式large。编译方式由编译控制命令决议。编译方式由编译控制命令决议。存储方式编译方式决议了变量的默存储方式编译方式决议了变量的默许存储区域和参数的传送方法。许存储区域和参数的传送方法。 一、一、small方式方式在在small方式下,变量的默许存储区方式下,变量的默许存储区域是域是“data、“idata,即未指出存储,即未指出存储区域的变量保管到片内数据存储器中,区域的变量保管到片内数据存储器中,并且堆栈也安

28、排在该区域中。并且堆栈也安排在该区域中。small方式的特点:存储容量小,但方式的特点:存储容量小,但速度快。速度快。在在small方式下参数的传送:经过存方式下参数的传送:经过存放器、堆栈或片内数据存储区完成的。放器、堆栈或片内数据存储区完成的。 二、二、compact方式方式在在compact方式下,变量的默许存储区域方式下,变量的默许存储区域是是“pdata,即未指出存储区域的变量保管,即未指出存储区域的变量保管到片外数据存储器的一页中,最大变量数为到片外数据存储器的一页中,最大变量数为256字节,并且堆栈也安排在该区域中。字节,并且堆栈也安排在该区域中。compact方式的其特点:是存

29、储容量较方式的其特点:是存储容量较small方式大,速度较方式大,速度较small方式稍慢,但比方式稍慢,但比large方式要快。方式要快。在在compact方式下参数的传送:经过片外方式下参数的传送:经过片外数据区的一个固定页完成的。数据区的一个固定页完成的。 三、三、large方式方式在在large方式下,变量的默许存储区域是方式下,变量的默许存储区域是“xdata,即未指出存储区域的变量保管到,即未指出存储区域的变量保管到片外数据存储器,最大变量数可达片外数据存储器,最大变量数可达64KB,并且堆栈也安排在该区域中。并且堆栈也安排在该区域中。large方式的特点:存储容量大,速度慢方式的

30、特点:存储容量大,速度慢large方式下参数的传送方式:参数的传方式下参数的传送方式:参数的传送也是经过片外数据存储器完成的。送也是经过片外数据存储器完成的。 C51支持混合方式:即可以对函数设置编支持混合方式:即可以对函数设置编译方式,所以在译方式,所以在large方式下,可以对某些函方式下,可以对某些函数设置为数设置为compact方式或方式或small方式,从而提方式,从而提高运转速度。高运转速度。默许编译方式:假设文件或函数未指明默许编译方式:假设文件或函数未指明编译方式,那么编译器按编译方式,那么编译器按small方式处置。方式处置。编译方式控制命令:编译方式控制命令: “#prag

31、ma small(或或compact、large)应放在文件的开场。应放在文件的开场。 1.3.6 C51变量的绝对定位变量的绝对定位C51有三种方式可以对变量有三种方式可以对变量I/O端口端口绝对定位:绝对定位关键字绝对定位:绝对定位关键字_at_ 、指针、库、指针、库函数的绝对定位宏。函数的绝对定位宏。对于后两种方式,对于后两种方式,在后面指针一节引见。在后面指针一节引见。C51扩展的关键字扩展的关键字_at_专门用于对变量作专门用于对变量作绝对定位,绝对定位,_at_运用在变量的定义中,其格运用在变量的定义中,其格式为:式为:存储类型存储类型 数据类型数据类型 存储区存储区 变量名变量名

32、1 _at_ 地址常数地址常数,变量名,变量名2 举例阐明举例阐明_at_的运用方法的运用方法1对对data区域中的区域中的 unsigned char变量变量aa作绝对定位:作绝对定位:unsigned char data aa _at_ 0 x30;2对对pdata区域中的区域中的 unsigned int数组数组cc作绝对定位:作绝对定位:unsigned int pdata cc10 _at_ 0 x34;3对对xdata区域中的区域中的 unsigned char变量变量printer_port作绝对定位:作绝对定位:unsigned char xdata printer_port

33、_at_ 0 x7fff; 对变量绝对定位的几点阐明:对变量绝对定位的几点阐明:1绝对地址变量在定义时不能初始化,绝对地址变量在定义时不能初始化,因此不能对因此不能对code型变量绝对定位;型变量绝对定位;2绝对地址变量只可以是全局变量,不绝对地址变量只可以是全局变量,不能在函数中对变量绝对定位;能在函数中对变量绝对定位;3绝对地址变量多用于绝对地址变量多用于I/O端口,普通情端口,普通情况下不对变量作绝对定位;况下不对变量作绝对定位;3位变量不能运用位变量不能运用_at_绝对定位。绝对定位。1.4 C51位变量的定义位变量的定义主要内容主要内容1.4.1 bit型位变量的定义型位变量的定义1

34、.4.2 sbit型位变量的定义型位变量的定义1.4.1 bit型位变量的定义型位变量的定义常说的位变量指的就是常说的位变量指的就是bit型位变量。型位变量。C51的的bit型位变量定义的普通格式为:型位变量定义的普通格式为:存储类型存储类型 bit 位变量名位变量名1=初值初值 ,位变量名,位变量名2=初值初值 ,bit位变量被保管在位变量被保管在RAM中的位寻址区中的位寻址区域字节地址为域字节地址为0 x200 x2f,16字节。字节。例如:例如:bitflag_run,receiv_bit=0;static bit send_bit; 两点阐明:两点阐明:1bit型位变量与其它变量一样,

35、可以型位变量与其它变量一样,可以作为函数的形参,也可以作为函数的前往作为函数的形参,也可以作为函数的前往值,即函数的类型可以是位型的;值,即函数的类型可以是位型的;2位变量不能定义指针,不能定义数位变量不能定义指针,不能定义数组。组。 1.4.2 sbit型位变量的定义型位变量的定义对于可以按位寻址的特殊功能存放器、对于可以按位寻址的特殊功能存放器、定义在位寻址区域的变量字节型、整型、定义在位寻址区域的变量字节型、整型、长整型,可以对其各位用长整型,可以对其各位用sbit定义位变量。定义位变量。为了方便起见,分开讨论按位寻址的特为了方便起见,分开讨论按位寻址的特殊功能存放器中位变量的定义、按位

36、寻址殊功能存放器中位变量的定义、按位寻址的变量中位变量的定义。的变量中位变量的定义。一、特殊功能存放器中位变量定义一、特殊功能存放器中位变量定义可以按位寻址的特殊功能存放器中位变可以按位寻址的特殊功能存放器中位变量定义的普通格式为:量定义的普通格式为:sbit 位变量名位变量名 位地址表达式位地址表达式这里的位地址表达式有三种方式:这里的位地址表达式有三种方式:直接位地址直接位地址特殊功能存放器名带位号特殊功能存放器名带位号字节地址带位号字节地址带位号1、用直接位地址定义位变量、用直接位地址定义位变量这种情况下位变量的定义格式为:这种情况下位变量的定义格式为:sbit 位变量名位变量名 位地址

37、常数位地址常数这里的位地址常数范围为这里的位地址常数范围为0 x800 xff,实践是定义特殊功能存放器的位。例如:实践是定义特殊功能存放器的位。例如:sbitP0_0=0 x80; sbitP1_1=0 x91;sbitRS0=0 xd3; /定义定义PSW的第的第3位位sbitET0=0 xa9; /定义定义IE的第的第1位位 2、特殊功能存放器名带位号定义、特殊功能存放器名带位号定义这时位变量的定义格式为:这时位变量的定义格式为:sbit 位变量名位变量名 特殊功能存放器名特殊功能存放器名位号常数位号常数这里的位号常数为这里的位号常数为07。例如:。例如:sbitP0_3=P03; sb

38、itP1_4=P14;sbitOV=PSW2; /定义定义PSW的第的第2位位sbitES=IE4; /定义定义IE的第的第4位位 3、存放器地址带位号定义位变量、存放器地址带位号定义位变量在这种情况下位变量的定义格式为:在这种情况下位变量的定义格式为:sbit 位变量名位变量名 特殊功能存放器地特殊功能存放器地址址位号常数位号常数这里的位号常数同上,为这里的位号常数同上,为07。例如:。例如:sbitP0_6=0 x806; sbitP1_7=0 x907;sbitAC=0 xd06; /定义定义PSW的第的第6位位sbitEA=0 xa87; /定义定义IE的第的第7位位 4、几点阐明、几

39、点阐明1用用sbit定义的位变量,必需可以按位操作,定义的位变量,必需可以按位操作,而不可以对无位操作功能的位定义位变量。而不可以对无位操作功能的位定义位变量。2用用sbit定义位变量,必需放在函数外面作为定义位变量,必需放在函数外面作为全局位变量,而不能在函数内部定义。全局位变量,而不能在函数内部定义。3用用sbit每次只能定义一个位变量。每次只能定义一个位变量。4对其它模块定义的位变量对其它模块定义的位变量bit型或型或 sbit型型的援用声明,都运用的援用声明,都运用bit。5用用sbit定义的是一种绝对定位的位变量由定义的是一种绝对定位的位变量由于名字是与确定位地址对应的,具有特定的意

40、于名字是与确定位地址对应的,具有特定的意义,在运用时不能像义,在运用时不能像bit型位变量那样随意运用。型位变量那样随意运用。二、位寻址区变量的位定义二、位寻址区变量的位定义对对bdata型变量字节型、整型、长整型变量字节型、整型、长整型型 ,被保管在,被保管在RAM中的位寻址区,因此中的位寻址区,因此可以对可以对bdata型变量各位作位变量定义。型变量各位作位变量定义。这样,既可以对这样,既可以对bdata型变量作字节型变量作字节或整型、长整型操作,也可以作位操或整型、长整型操作,也可以作位操作。作。bdata型变量的位定义格式:型变量的位定义格式:sbit 位变量名位变量名 bdata型变

41、量名型变量名位号常数位号常数 bdata型变量为在此之前应该是定义过的,型变量为在此之前应该是定义过的,位号常数可以是位号常数可以是078位字节变量,或位字节变量,或01516位整型变量,或位整型变量,或03132位字位字长整型变量。例如:长整型变量。例如:unsigned char bdataoperate;对对operate的低的低4位作位变量定义:位作位变量定义:sbit flag_key=operate0; /键盘标志位键盘标志位sbit flag_dis=operate1; /显示标志位显示标志位sbit flag_mus=operate2; /音乐标志位音乐标志位sbit flag

42、_run=operate3; /运转标志位运转标志位 1.5 C51特殊功能存放器的定义特殊功能存放器的定义主要内容主要内容1.5.1 8位特殊功能存放器的定位特殊功能存放器的定义义1.5.2 16位特殊功能存放器的位特殊功能存放器的定义定义1.5.1 8位特殊功能存放器的定义位特殊功能存放器的定义定义的普通格式为:定义的普通格式为:sfr特殊功能存放器名特殊功能存放器名 地址常数地址常数地址常数范围:地址常数范围:0 x800 xff。特殊功能存放器定义例子见特殊功能存放器定义例子见reg51.h、reg52.h等文件:等文件:sfrP0=0 x80;/定义定义P0存放器存放器sfrP1=0

43、 x90;/定义定义P1口存放器口存放器sfrPSW=0 xd0;/定义定义PSWsfrIE=0 xa8;/定义定义IE 1.5.2 16位特殊功能存放器的定义位特殊功能存放器的定义定义的普通格式为:定义的普通格式为:sfr16 特殊功能存放器名特殊功能存放器名 地址常数地址常数地址常数范围:地址常数范围:0 x800 xff。例如见例如见reg51.h、reg52.h等文件:等文件:sfr16 DPTR=0 x82;sfr16 T2=0 xcc; /含含TL2和和TH2sfr16 RCAP2=0 xca; /含含RCAP2L/和和RCAP2H, 0 xca为为RCAP2L的地址的地址几点阐明

44、:几点阐明:1定义特殊功能存放器中的地址必需定义特殊功能存放器中的地址必需在在0 x800 xff范围内。范围内。2定义特殊功能存放器,必需放在函定义特殊功能存放器,必需放在函数外面作为全局变量。数外面作为全局变量。3用用sfr或或sfr16每次只能定义一个特殊每次只能定义一个特殊功能存放器。功能存放器。4像像sbit一样,用一样,用sfr或或sfr16定义的是绝定义的是绝对定位的变量由于名字是与确定地址对对定位的变量由于名字是与确定地址对应的,具有特定的意义,在运用时不能应的,具有特定的意义,在运用时不能像普通变量那样随意运用。像普通变量那样随意运用。 1.6 C51指针的定义指针的定义主要

45、内容主要内容1.6.1 通用指针通用指针1.6.2 存储器公用指存储器公用指针针1.6.3 指针变换指针变换1.6.4 C51指针运用指针运用1.6 C51指针的定义指针的定义由于由于MCS-51单片机有三种不同类型的存单片机有三种不同类型的存储空间,并且还有不同的存储区域,因此储空间,并且还有不同的存储区域,因此C51指针的内容更丰富。指针的内容更丰富。指针除了具有像变量的四种属性存储指针除了具有像变量的四种属性存储类型、数据类型、存储区、变量名外,按类型、数据类型、存储区、变量名外,按存储区,将指针分为通用指针和不同存储区存储区,将指针分为通用指针和不同存储区域的公用指针。域的公用指针。

46、1.6.1 通用指针通用指针所谓通用指针,就是经过该类指针可以所谓通用指针,就是经过该类指针可以访问一切的存储空间。访问一切的存储空间。在在C51库函数中通常运用这种指针来访库函数中通常运用这种指针来访问。问。通用指针用通用指针用3个字节来表示:个字节来表示:第一个字节:表示指针所指向的存储空间第一个字节:表示指针所指向的存储空间第二个字节:为指针地址的高字节第二个字节:为指针地址的高字节第三个字节:为指针地址的低字节第三个字节:为指针地址的低字节通用指针的定义与普通通用指针的定义与普通C言语指针的定言语指针的定义一样,其格式为:义一样,其格式为:存储类型存储类型 数据类型数据类型 *指针名指

47、针名1,*指针名指针名2 ,例如:例如:unsigned char *cpt;int *dpt;long *lpt;static char *ccpt; 通用指针的特点:通用指针的特点:定义简单定义简单访问一切空间访问一切空间访问速度慢访问速度慢 1.6.2 存储器公用指针存储器公用指针所谓存储器公用指针,就是经过该类指所谓存储器公用指针,就是经过该类指针,只可以访问规定的存储空间区域。针,只可以访问规定的存储空间区域。指针本身占用指针本身占用1个字节个字节data *,idata *,bdata *,pdata *或或2个字节个字节xdata *,code *。存储器公用指针的普通定义格式为

48、:存储器公用指针的普通定义格式为:存储类型存储类型 数据类型数据类型 指向存储区指向存储区 *指针存储区指针存储区 指针名指针名1 ,*指针存储区指针存储区 指针名指针名2, 指向存储区:指向存储区:是指针变量所指向的数据存储空间区域。是指针变量所指向的数据存储空间区域。不可以缺省。不可以缺省。指针存储区:指针存储区:是指针变量本身所存储的空间区域。是指针变量本身所存储的空间区域。缺省时以为指针存储区在默许的存储区缺省时以为指针存储区在默许的存储区域,其默许存储区域决议于所设定的编译域,其默许存储区域决议于所设定的编译方式。方式。指向和指针存储区,两者可以是同一个指向和指针存储区,两者可以是同

49、一个区域,但多数情况下不会是同一个区域。区域,但多数情况下不会是同一个区域。 存储器公用指针例子:存储器公用指针例子:unsigned char data *cpt1, *cpt2; signed int idata *dpt1, *dpt2;unsigned char pdata *ppt; signed long xdata *lpt1, *lpt2;unsigned char code *ccpt;上面所定义的指针虽然所指向的空间上面所定义的指针虽然所指向的空间不同,但指针变量本身都存储在默许的存不同,但指针变量本身都存储在默许的存储区域。储区域。 又如:又如:1)unsigned ch

50、ar data *idata cpt1,*idata cpt2; 2)signed int idata *data dpt1, *data dpt2; 3)unsigned char pdata *xdata ppt; 4)signed long xdata *lpt1, *xdata lpt2; 5)unsigned char code *data ccpt; 绿色关键字为指针所指向的存储区绿色关键字为指针所指向的存储区蓝色关键字为指针本身所存储的区域蓝色关键字为指针本身所存储的区域留意:留意:1要区分指针变量指向的空间要区分指针变量指向的空间区域和指针变量本身所存储的区域;区域和指针变量本

51、身所存储的区域;2定义时,前者不能缺省,而后者可以缺省;定义时,前者不能缺省,而后者可以缺省;3指针变量的长度:指向不同的区域,指针变量的长度:指向不同的区域,占用的字节数不同。占用的字节数不同。阐明:指针变量本身所存储的区域,在阐明:指针变量本身所存储的区域,在定义指针时普通都省略了,指针变量本身保定义指针时普通都省略了,指针变量本身保管在缺省存储的区域中。管在缺省存储的区域中。定义时,缺省指针存储的区域,显得简定义时,缺省指针存储的区域,显得简单,并且对初学者更容易了解。单,并且对初学者更容易了解。 1.6.3 指针变换指针变换一、通用指针格式一、通用指针格式 由前面的讨论知,通用指针由由

52、前面的讨论知,通用指针由3个字节个字节组成,第一个字节为数据的存储区域,后组成,第一个字节为数据的存储区域,后两个字节为指针地址,第一个字节的存储两个字节为指针地址,第一个字节的存储区域编码如表区域编码如表4-6所示。所示。 表表1-6 通用指针存储区域编码通用指针存储区域编码存储区存储区idataxdata pdatadatacode编编 码码12345一、指针转换一、指针转换指针转换有两种途径,一种是显式指针转换有两种途径,一种是显式的编程转换,另一种是隐式的自动转的编程转换,另一种是隐式的自动转换。换。指针的编程转换:指针的编程转换:1通用指针通用指针的第一字节,与公用指针的指向数据的第

53、一字节,与公用指针的指向数据区属性,二者相互转换;区属性,二者相互转换;2通用指通用指针后两个字节的地址,与公用指针值针后两个字节的地址,与公用指针值的转换。的转换。指针的隐式自动转换:由编译器在指针的隐式自动转换:由编译器在进展编译时自动完成。进展编译时自动完成。 1.6.4 C51指针运用指针运用指针在指针在PC机上的机上的C言语中运用很广泛。言语中运用很广泛。在单片机中,由于不运用操作系统,指在单片机中,由于不运用操作系统,指针的运用可以独立于变量,独立地指向所针的运用可以独立于变量,独立地指向所需求访问的存储空间位置。需求访问的存储空间位置。本节经过例子来学习和认识本节经过例子来学习和

54、认识C51指针的指针的这种独立运用性。这种独立运用性。下面引见两种利用指针访问存储区的方下面引见两种利用指针访问存储区的方法。也可以访问函数。法。也可以访问函数。二、经过指针定义的宏访问存储器二、经过指针定义的宏访问存储器1、访问存储器宏的定义、访问存储器宏的定义用指针定义的、访问存储器宏的格式:用指针定义的、访问存储器宏的格式: #define 宏名宏名 (数据类型数据类型 volatile 存储区存储区*)0)格式中的数据类型主要为无符号的字符格式中的数据类型主要为无符号的字符型数、整型;格式中的存储区域主要运用型数、整型;格式中的存储区域主要运用data、idata、pdata、xdat

55、a和和code类型,不类型,不运用运用bdata存储区类型。存储区类型。 格式中的关键字格式中的关键字“volatile: “volatile是单片机中定义的,其含义是单片机中定义的,其含义为:这种变量在程序执行中可被隐含地改为:这种变量在程序执行中可被隐含地改动而编译器无法检测到,告知编译器不要动而编译器无法检测到,告知编译器不要做优化处置,使运用者可以得到正确的变做优化处置,使运用者可以得到正确的变量值。量值。volatile的运用:的运用:volatile常用于定义存放常用于定义存放器,特别是形状存放器,由于形状存放器器,特别是形状存放器,由于形状存放器的值不是程序员设置,而是单片机在运

56、转的值不是程序员设置,而是单片机在运转中中CPU设置的。设置的。特别阐明:特别阐明:“volatile的含义与教材上的含义与教材上表述不太一致,此处表述直观更容易了解。表述不太一致,此处表述直观更容易了解。2、库函数中访问存储器宏的原型、库函数中访问存储器宏的原型C51编译器提供了两组用指针定义的绝对存编译器提供了两组用指针定义的绝对存储器访问的宏,其原型如下。储器访问的宏,其原型如下。 1按字节访问存储器的宏:按字节访问存储器的宏:#define CBYTE (unsigned char volatile code*)0)#define DBYTE (unsigned char volati

57、le data*)0)#define PBYTE(unsigned char volatile pdata*)0)#define XBYTE (unsigned char volatile xdata*)0) 2按整型双字节访问存储器的宏:按整型双字节访问存储器的宏:#define CWORD (unsigned int volatile code*)0) #define DWORD (unsigned int volatile data*)0)#define PWORD (unsigned int volatile pdata*)0)#define XWORD (unsigned int v

58、olatile xdata*)0)无无idata型,不能访问片内型,不能访问片内RAM高高128字节字节区域区域0 x800 xff,需求时可以本人定义。,需求时可以本人定义。这些宏定义原型放在这些宏定义原型放在absacc.h文件中,运文件中,运用时需求用预处置命令把该头文件包含到文用时需求用预处置命令把该头文件包含到文件中,方式为:件中,方式为:#include 。 3、绝对访问存储器宏的运用、绝对访问存储器宏的运用运用宏定义访问存储器的方式类似于数组。运用宏定义访问存储器的方式类似于数组。1按字节访问存储器宏的方式按字节访问存储器宏的方式宏名宏名地址地址即数组中的下标就是存储器的地址,因

59、此即数组中的下标就是存储器的地址,因此运用起来非常方便。例如:运用起来非常方便。例如:DBYTE0 x30=48;/给片内给片内RAM送数据送数据XBYTE0 x0002=0 x36; /给片外给片外RAM送数据送数据dis_buf0=CBYTETABLE+5; /从从CODE区读取数据区读取数据2按整型数访问存储器宏的方式按整型数访问存储器宏的方式宏名宏名下标下标由于整型数占两个字节,所以下标与地址由于整型数占两个字节,所以下标与地址的关系为:地址的关系为:地址=下标下标2。由于数组中的下标与存储器的地址是倍数由于数组中的下标与存储器的地址是倍数关系,运用时要留意。例如:关系,运用时要留意。

60、例如:DWORD0 x20=0 x1234; /给给0 x40、0 x41送数送数XWORD0 x0002=0 x5678;/给给4、5单元送数单元送数经过指针定义的宏访问存储器这种方法,经过指针定义的宏访问存储器这种方法,特别适用于访问特别适用于访问I/O口。口。 一、经过公用指针直接访问存储器一、经过公用指针直接访问存储器运用指针直接访问存储器对运用指针直接访问存储器对PC机是机是制止的,但对于单片机来说运用时留意制止的,但对于单片机来说运用时留意是可以的。是可以的。运用指针直接访问存储器方法是先运用指针直接访问存储器方法是先定义所需求的指针,给指针赋地址值,定义所需求的指针,给指针赋地址

温馨提示

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

评论

0/150

提交评论