单片机原理及应用C语言版4.ppt
《单片机原理及应用C语言版4.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用C语言版4.ppt(174页珍藏版)》请在三一办公上搜索。
1、单片机原理及应用(C语言版)第4章 单片机C语言及程序设计,主 编:周国运本章制作:周国运中国水利水电出版社,第4章 单片机C语言及程序设计,4.1 C51概述4.2 C51数据类型及存储4.3 C51变量的定义及数据存储区域4.4 C51位变量的定义4.5 C51特殊功能寄存器的定义,4.6 C51指令的定义4.7 C51的输入/输出4.8 C51函数的定义4.9 C51与汇编语言混合编程4.10 C51集成开发软件Keil C,目 录,第4章 单片机C语言及程序设计,本章主要讨论C51变量的定义和函数的定义,以及Keil C软件的使用等。本章内容的安排,认为读者已经学习过C语言,具有C语言
2、的基本知识,因此,本章内容完全是结合单片机来讲解,也就是补充C语言在单片机方面的概念、数据定义和函数定义等。通过本章学习,使读者能够比较顺利地编写C51程序。,4.1 C51概述,主要内容4.1.1 C语言编程的优势4.1.2 C51与ANSI C的区别4.1.3 C51扩展的关键字,4.1 C51概述,学习单片机C语言的必要性随着单片机性能的不断提高,C语言编译调试工具的不断完善,以及现在对单片机产品辅助功能的要求、对开发周期不断缩短的要求,使得越来越多的单片机编程人员转向使用C语言,因此有必要在单片机课程中讲授“单片机C语言”。“C51”概念:为了与ANSI C区别,把“单片机C语言”称为
3、“C51”,也称为“Keil C”。,4.1.1 C语言编程的优势,在编程方面,使用C51较汇编语言有诸多优势:1)编程容易 2)容易实现复杂的数值计算3)容易阅读与交流4)容易调试与维护程序5)容易实现模块化开发 6)程序可移植性好,4.1.2 C语言与ANSI 的区别,用汇编语言编写单片机程序时,必须要考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,以及按照实际地址端口数据的处理。用C51编写程序,虽然不像汇编语言那样需要具体地组织、分配存储器资源,但是C51对数据类型和变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。,4.1.2
4、 C语言与ANSI 的区别,用C51编写单片机程序,与用ANSI C编写程序的不同之处是,需要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。其它的语法规定、程序结构及程序设计方法,都与ANSI C相同。所以本章主要介绍C51各种变量的定义、指针定义、函数定义和混合编程。,4.1.3 C51扩展的关键字,由于单片机在结构及编程上的特殊要求,C51有自己的特殊关键字,称之为C51扩展的关键字,下面给出常用的C51扩展的关键字。_at_bdatabit codedataidata interruptpdatareentrant sbitsfrsfr16usingvolatilexdata
5、这些关键字在后面会陆续接触到,此处先不给出它们的含义。,4.2 C51数据类型及存储,主要内容4.2.1 C51的数据类型4.2.2 C51数据的存储,4.2.1 C51的数据类型,4.2.1 C51的数据类型,数据类型转换1)自动转换转换规则是向高精度数据类型转换、向有符号数据类型转换。如字符型变量与整型变量相加时,则位变量先转换字符型或整型数据,然后相加。2)强制转换像ANSI C一样,通过强制类型转换的方式进行转换。如:unsignedintb;floatc;b=(int)c;,4.2.2 C51数据的存储,MCS-51单片机只有bit和unsigned char两种数据类型支持机器指令
6、,而其它类型的数据都需要转换成bit或unsigned char型进行存储。为了减少单片机的存储空间和提高运行速度,要尽可能地使用unsigned char型数据。一、位变量的存储bit和sbit型位变量,直接存于RAM的位寻址空间,包括低128位和特殊功能寄存器位。,4.2.2 C51数据的存储,二、字符变量的存储字符变量(char):无论是unsigned char数据还是signed char数据,均为1个字节,能够被直接存储在RAM中,可以存储在00 x7f区域,也可以存储在0 x800 xff区域,与变量的定义有关。unsigned char数:可直接被MSC-51接受signed
7、char数据:用补码表示。需要额外的操作来测试、处理符号位,使用的是两种库函数,代码量大,运算速度降低。,4.2.2 C51数据的存储,三、整型变量的存储整型变量(int):不管是unsigned int数据还是signed int数据,均为2个字节,其存储方法是高位字节保存在低地址(在前面),低位字节保存在高地址(在后面)。,例如,整型变量的值为0 x1234,在内存中的存放如右图所示。signed int数据用补码表示。,地址低高,4.2.2 C51数据的存储,四、长整型变量的存储长整型变量(long)为4个字节,其存储方法与整型数据一样,是最高位字节保存的地址最低(在最前面),最低位字节
8、保存的地址最高(在最后面)。,如长整型变量的值为0 x12345678,在内存中的存放方法如右图所示。不管是unsigned long数据还是signed long数据。,地址低高,4.2.2 C51数据的存储,五、浮点型变量的存储浮点型变量(fload)占4个字节,用指数方式表示,其具体格式与编译器有关。对于Keil C,采用的是IEEE-754标准,具有24位精度,尾数的最高位始终为1,因而不保存。具体分布为:1位符号位,8位阶码位,23位尾数,如下图所示。,4.2.2 C51数据的存储,符号位S:1表示负数,0表示正数。阶码:用移码表示。如,实际阶码-126用1表示,实际阶码0用127表
9、示,即实际阶码数加上127得到阶码的表达数。阶码数值范围:-126+128。,4.2.2 C51数据的存储,例如浮点数-12.5符号位为1,12.5的二进制数为1100.1=1.1001E+0011,阶码数值为3+127=130=10000010B,尾数为1001。因此,其十六进制数为0 xC1480000,则存储结构如右图所示。,地址低高,说明:教材中存储结构是错的。,4.3 C51变量的定义及数据存储区域,主要内容4.3.1 C51变量的定义4.3.2 C51变量的存储类型4.3.3 C51变量的存储区域4.3.4 C51变量定义举例4.3.5 C51变量的存储模式4.3.6 C51变量的
10、绝对定位,4.3.1 C51变量的定义,C51变量定义的一般格式为:存储类型数据类型 存储区变量名1=初值,变量名2=初值,或存储类型存储区 数据类型 变量名1=初值,变量名2=初值,可见变量(非位变量)的定义由4部分组成,即在变量定义时,指定变量4种属性。数据类型:在前面的4.2中已经叙述过,对于变量名也无须多说,下面主要解释“存储类型”和“存储区”等概念。,4.3.2 C51变量的存储类型,存储类型这个属性我们仍沿用ANSI C的说法,尽量不改变原来的含义。按照ANSI C,C语言的变量有4种存储类型:动态存储(auto)静态存储(static)全局存储(extern)寄存器存储(regi
11、ster),4.3.2 C51变量的存储类型,一、动态存储动态(存储)变量:用auto定义的为动态变量,也叫自动变量。作用范围:在定义它的函数内或复合语句内部。当定义它的函数或复合语句执行时,C51才为变量分配存储空间,结束时所占用的存储空间释放。定义变量时,auto可以省略,或者说如果省略了存储类型项,则认为是动态变量。动态变量一般分配使用寄存器或堆栈。,4.3.2 C51变量的存储类型,二、静态存储静态(存储)变量:用static定义的为静态变量。分为内部静态和外部静态变量。内部静态变量:在函数体内定义的为内部静态变量。在函数内可以任意使用和修改,函数运行结束后会一直存在,但在函数外不可见
12、,即在函数体外得到保护。外部静态变量:在函数体外部定义的为外部静态变量。在定义的文件内可以任意使用和修改,外部静态变量会一直存在,但在文件外不可见,即在文件外得到保护。,4.3.2 C51变量的存储类型,三、外部存储外部(存储)变量:用extern声明的变量为外部变量,是在其它文件定义过的全局变量。用extern声明后,便可以在所声明的文件中使用。需要注意的是:在定义变量时,即便是全局变量,也不能使用extern定义。,4.3.2 C51变量的存储类型,四、寄存器存储寄存器(存储)变量:用register定义的变量为寄存器变量。寄存器变量存放在CPU的寄存器中,这种变量处理速度快,但数目少。C
13、51中的寄存器变量:C51的编译器在编译时,能够自动识别程序中使用频率高的变量,并将其安排为寄存器变量,用户不用专门声明。,4.3.3 C51变量的存储区域,变量的存储区属性是单片机扩展的概念,非常重要,它涉及到7个新的关键字。MCS-51单片机有四个存储空间,分成三类,它们是片内数据存储空间、片外数据存储空间和程序存储空间。MCS-51单片机有更多的存储区域:由于片内数据存储器和片外数据存储器又分成不同的区域,所以单片机的变量有更多的存储区域。在定义变量时,必须明确指出是存放在哪个区域。,4.3.3 C51变量的存储区域,4.3.4 C51变量定义举例,1)定义存储在data区域的动态uns
14、igned 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.3.4 C51变量定义举例,4)定义存储在bdata区域的动态unsigned char变量:unsigned char bdata operate,operate1;/定义指示操作的可位寻址的变量5)定义存储在idata区域的
15、动态unsigned char数组:unsigned char idata temp20;6)定义在pdata区域的动态有符号int数组:int pdata send_data30;/定义存放发送数据的数组,4.3.4 C51变量定义举例,7)定义存储在xdata区域的动态unsigned int数组:unsigned int xdata receiv_buf50;/定义存放接受数据的数组8)定义存储在code区域的unsigned char数组:unsigned char code dis_code10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0
16、x07,0 x7f,0 x6f;/定义共阴极数码管段码数组,4.3.5 C51变量的存储模式,存储模式:如果在定义变量时缺省了存储区属性,则编译器会自动选择默认的存储区域,也就是存储模式。变量的存储模式也就是程序(或函数)的编译模式。编译模式分为三种:小模式(small)、紧凑模式(compact)和大模式(large)。编译模式由编译控制命令决定。存储模式(编译模式)决定了变量的默认存储区域和参数的传递方法。,4.3.5 C51变量的存储模式,一、small模式在small模式下,变量的默认存储区域是“data”、“idata”,即未指出存储区域的变量保存到片内数据存储器中,并且堆栈也安排在
17、该区域中。small模式的特点:存储容量小,但速度快。在small模式下参数的传递:通过寄存器、堆栈或片内数据存储区完成的。,4.3.5 C51变量的存储模式,二、compact模式在compact模式下,变量的默认存储区域是“pdata”,即未指出存储区域的变量保存到片外数据存储器的一页中,最大变量数为256字节,并且堆栈也安排在该区域中。compact模式的其特点:是存储容量较small模式大,速度较small模式稍慢,但比large模式要快。在compact模式下参数的传递:通过片外数据区的一个固定页完成的。,4.3.5 C51变量的存储模式,三、large模式在large模式下,变量的
18、默认存储区域是“xdata”,即未指出存储区域的变量保存到片外数据存储器,最大变量数可达64KB,并且堆栈也安排在该区域中。large模式的特点:存储容量大,速度慢large模式下参数的传递方式:参数的传递也是通过片外数据存储器完成的。,4.3.5 C51变量的存储模式,C51支持混合模式:即可以对函数设置编译模式,所以在large模式下,可以对某些函数设置为compact模式或small模式,从而提高运行速度。默认编译模式:如果文件或函数未指明编译模式,则编译器按small模式处理。编译模式控制命令:“#pragma small(或compact、large)”应放在文件的开始。,4.3.6
19、 C51变量的绝对定位,C51有三种方式可以对变量(I/O端口)绝对定位:绝对定位关键字_at_、指针、库函数的绝对定位宏。对于后两种方式,在后面指针一节介绍。C51扩展的关键字_at_专门用于对变量作绝对定位,_at_使用在变量的定义中,其格式为:存储类型 数据类型 存储区 变量名1 _at_ 地址常数,变量名2,4.3.6 C51变量的绝对定位,举例说明_at_的使用方法1)对data区域中的 unsigned char变量aa作绝对定位:unsignedchardata aa _at_ 0 x30;2)对pdata区域中的 unsigned int数组cc作绝对定位:unsignedin
20、t pdata cc10 _at_ 0 x34;3)对xdata区域中的 unsigned char变量printer_port作绝对定位:unsignedcharxdata printer_port _at_ 0 x7fff;,4.3.6 C51变量的绝对定位,对变量绝对定位的几点说明:1)绝对地址变量在定义时不能初始化,因此不能对code型变量绝对定位;2)绝对地址变量只能够是全局变量,不能在函数中对变量绝对定位;3)绝对地址变量多用于I/O端口,一般情况下不对变量作绝对定位;3)位变量不能使用_at_绝对定位。,4.4 C51位变量的定义,主要内容4.4.1 bit型位变量的定义4.4.
21、2 sbit型位变量的定义,4.4.1 bit型位变量的定义,常说的位变量指的就是bit型位变量。C51的bit型位变量定义的一般格式为:存储类型 bit 位变量名1=初值,位变量名2=初值,bit位变量被保存在RAM中的位寻址区域(字节地址为0 x200 x2f,16字节)。例如:bitflag_run,receiv_bit=0;static bitsend_bit;,4.4.1 bit型位变量的定义,两点说明:1)bit型位变量与其它变量一样,可以作为函数的形参,也可以作为函数的返回值,即函数的类型可以是位型的;2)位变量不能定义指针,不能定义数组。,4.4.2 sbit型位变量的定义,对
22、于能够按位寻址的特殊功能寄存器、定义在位寻址区域的变量(字节型、整型、长整型),可以对其各位用sbit定义位变量。为了方便起见,分开讨论按位寻址的特殊功能寄存器中位变量的定义、按位寻址的变量中位变量的定义。,4.4.2 sbit型位变量的定义,一、特殊功能寄存器中位变量定义能够按位寻址的特殊功能寄存器中位变量定义的一般格式为:sbit位变量名 位地址表达式这里的位地址表达式有三种形式:直接位地址特殊功能寄存器名带位号字节地址带位号,4.4.2 sbit型位变量的定义,1、用直接位地址定义位变量这种情况下位变量的定义格式为:sbit位变量名 位地址常数这里的位地址常数范围为0 x800 xff,
23、实际是定义特殊功能寄存器的位。例如:sbitP0_0=0 x80;sbitP1_1=0 x91;sbitRS0=0 xd3;/定义PSW的第3位sbitET0=0 xa9;/定义IE的第1位,4.4.2 sbit型位变量的定义,2、特殊功能寄存器名带位号定义这时位变量的定义格式为:sbit位变量名 特殊功能寄存器名位号常数这里的位号常数为07。例如:sbitP0_3=P03;sbitP1_4=P14;sbitOV=PSW2;/定义PSW的第2位sbitES=IE4;/定义IE的第4位,4.4.2 sbit型位变量的定义,3、寄存器地址带位号定义位变量在这种情况下位变量的定义格式为:sbit位变
24、量名 特殊功能寄存器地址位号常数这里的位号常数同上,为07。例如:sbitP0_6=0 x806;sbitP1_7=0 x907;sbitAC=0 xd06;/定义PSW的第6位sbitEA=0 xa87;/定义IE的第7位,4.4.2 sbit型位变量的定义,4、几点说明1)用sbit定义的位变量,必须能够按位操作,而不能够对无位操作功能的位定义位变量。2)用sbit定义位变量,必须放在函数外面作为全局位变量,而不能在函数内部定义。3)用sbit每次只能定义一个位变量。4)对其它模块定义的位变量(bit型或 sbit型)的引用声明,都使用bit。5)用sbit定义的是一种绝对定位的位变量(因
25、为名字是与确定位地址对应的),具有特定的意义,在应用时不能像bit型位变量那样随便使用。,4.4.2 sbit型位变量的定义,二、位寻址区变量的位定义对bdata型变量(字节型、整型、长整型),被保存在RAM中的位寻址区,因此可以对bdata型变量各位作位变量定义。这样,既可以对bdata型变量作字节(或整型、长整型)操作,也可以作位操作。bdata型变量的位定义格式:sbit 位变量名 bdata型变量名位号常数,4.4.2 sbit型位变量的定义,bdata型变量为在此之前应该是定义过的,位号常数可以是07(8位字节变量),或015(16位整型变量),或031(32位字长整型变量)。例如:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 语言版
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5812052.html