单片机原理与接口技术(C语言•第2版)4.ppt
《单片机原理与接口技术(C语言•第2版)4.ppt》由会员分享,可在线阅读,更多相关《单片机原理与接口技术(C语言•第2版)4.ppt(142页珍藏版)》请在文库网上搜索。
1、第第4 4章章 单片机单片机C C语言语言及程序设计及程序设计4.1 单片机单片机C语言概述语言概述4.2 C51数据类型及存储数据类型及存储4.3 C51一般变量的定义一般变量的定义4.4 C51特殊功能寄存器特殊功能寄存器的定义的定义4.5 C51位变量的定义位变量的定义4.6 C51指针与结构指针与结构体的定义体的定义4.7 C51函数的定义函数的定义4.8 C51与汇编语言与汇编语言混合编程混合编程主要内容主要内容第第4 4章章 单片机单片机C C语言及程序设计语言及程序设计本章主要讨论本章主要讨论C51变量的定义和函数的定义。变量的定义和函数的定义。本章内容的安排,认为读者已经学习过
2、本章内容的安排,认为读者已经学习过C语言,语言,具有具有C语言的基本知识,因此,本章内容完全是结合语言的基本知识,因此,本章内容完全是结合单片机来讲解,也就是补充单片机来讲解,也就是补充C语言在单片机方面的概语言在单片机方面的概念、数据定义和函数定义等。念、数据定义和函数定义等。通过本章学习,使读者能够比较顺利地编写通过本章学习,使读者能够比较顺利地编写C51程序。程序。4.1 C514.1 C51概述概述主要内容主要内容4.1.1 C语言编程的优势语言编程的优势4.1.2 C51与与ANSI C的区别的区别4.1.3 C51扩展的关键字扩展的关键字4.1 C4.1 C5151概述概述学习单片
3、机学习单片机C语言的必要性语言的必要性随着单片机性能的不断提高,随着单片机性能的不断提高,C语言编译调试工语言编译调试工具的不断完善,以及现在对单片机产品辅助功能的要具的不断完善,以及现在对单片机产品辅助功能的要求、对开发周期不断缩短的要求,使得求、对开发周期不断缩短的要求,使得越来越多的单越来越多的单片机编程人员转向使用片机编程人员转向使用C语言语言,因此有必要在单片机,因此有必要在单片机课程中讲授课程中讲授“单片机单片机C语言语言”。“C51”概念:概念:为了与为了与ANSI C区别,区别,把把“单片机单片机C语言语言”称为称为“C51”,也称为,也称为“Keil C”。4.1.1 C4.
4、1.1 C语言编程的优势语言编程的优势在编程方面,使用在编程方面,使用C51较汇编语言有诸多优势:较汇编语言有诸多优势:1)编程容易)编程容易 2)容易实现复杂的数值计算)容易实现复杂的数值计算3)容易阅读与交流)容易阅读与交流4)容易调试与维护)容易调试与维护5)容易实现模块化开发)容易实现模块化开发 6)程序可移植性好)程序可移植性好 4.1.2 C4.1.2 C5151与与ANSI CANSI C的区别的区别C51与与ANSI C的区别是因为的区别是因为CPU、存储器和外部、存储器和外部设备的不同,以及不使用操作系统等引起的。设备的不同,以及不使用操作系统等引起的。C51是是MCS-51
5、单片机的单片机的ANSI C,单片机与,单片机与PC机的机的差异,主要由差异,主要由C51编译器(如编译器(如Keil C)处理,一些库函)处理,一些库函数的差异,也由编译器的开发着做了修改数的差异,也由编译器的开发着做了修改.因此,我们使用因此,我们使用C51编程,如基本语法、数据结编程,如基本语法、数据结构、程序结构、程序组织等各个方面,与使用构、程序结构、程序组织等各个方面,与使用ANSI C的感觉基本上是一样的。的感觉基本上是一样的。但是,但是,C51与与ANSI C之间是有差异的,从单片机之间是有差异的,从单片机应用编程的角度来看,主要有以下几个方面应用编程的角度来看,主要有以下几个
6、方面。4.1.2 C4.1.2 C语言与语言与ANSI ANSI 的区别的区别1)变量)变量(一般变量)(一般变量)的定义问题的定义问题如字符型、整型、浮点型、各种数组、各种结构如字符型、整型、浮点型、各种数组、各种结构体等。体等。因单片机有因单片机有4个存储空间、个存储空间、7个存储区,个存储区,在定义在定义时,必须要指明变量存放的存储器空间、具体的区域时,必须要指明变量存放的存储器空间、具体的区域。2)特殊功能寄存器的使用问题)特殊功能寄存器的使用问题这是这是ANSI C中所没有的。中所没有的。在在C51中增加了两种中增加了两种“特殊功能寄存器数据类型特殊功能寄存器数据类型”,使用之前,像
7、一般变量,使用之前,像一般变量一样,需要先定义再使用一样,需要先定义再使用。4.1.2 C4.1.2 C语言与语言与ANSI ANSI 的区别的区别3)位变量的定义问题)位变量的定义问题这也是这也是ANSI C中所没有的,中所没有的,在在C51增加了两种增加了两种“位数据类型位数据类型”。见见4.5节。节。4)指针的定义问题)指针的定义问题指针的定义和变量一样,与指针的定义和变量一样,与ANSI C的差异是由复的差异是由复杂的存储器引发,杂的存储器引发,主要是指针指向的是哪个存储器空主要是指针指向的是哪个存储器空间、哪个存储区域间、哪个存储区域。见。见4.6节。节。5)函数、中断服务函数的定义
8、问题)函数、中断服务函数的定义问题在在C51的函数定义中,的函数定义中,增加了多个函数属性以解增加了多个函数属性以解决单片机的要求。如中断函数、函数重入、决单片机的要求。如中断函数、函数重入、切换工作切换工作寄存器组等。寄存器组等。见见4.8节。节。4.1.2 C4.1.2 C语言与语言与ANSI ANSI 的区别的区别6混合编程问题混合编程问题一般一般PC机程序很少混合编程,但在单片机中常机程序很少混合编程,但在单片机中常混合编程。见混合编程。见4.8节。节。7库函数的差异问题库函数的差异问题由于由于PC机与单片机的差异,相对于机与单片机的差异,相对于ANSI C的库函的库函数来说,数来说,
9、C51的库函数减少了一部分的库函数减少了一部分(如显示、键盘、(如显示、键盘、磁盘,文件系统等),磁盘,文件系统等),增加了一部分增加了一部分(如循环移位、(如循环移位、绝对地址访问等),绝对地址访问等),修改了一部分修改了一部分(如(如I/O函数等)。函数等)。4.1.3 C4.1.3 C5151扩充的关键字扩充的关键字由于单片机在结构及编程上的特殊要求,由于单片机在结构及编程上的特殊要求,C51扩扩充了关键字,如表充了关键字,如表4-1所示,在后面会陆续介绍所示,在后面会陆续介绍。分分类关关键字字含含 义数数据据类类型型sfr(8位)特殊功能寄存器类型位)特殊功能寄存器类型sfr1616位
10、特殊功能寄存器类型位特殊功能寄存器类型bit(一般)位类型(位变量存储于(一般)位类型(位变量存储于bdata区域)区域)sbit(特殊)位类型(位变量存储于指定的地址)(特殊)位类型(位变量存储于指定的地址)存存储储区区域域data声明变量存储于声明变量存储于data存储区存储区bdata声明变量存储于声明变量存储于bdata存储区存储区idata声明变量存储于声明变量存储于idata存储区存储区pdata声明变量存储于声明变量存储于pdata存储区存储区xdata声明变量存储于声明变量存储于xdata存储区存储区code声明变量存储于声明变量存储于code存储区存储区 分分类关关键字字含含
11、 义数据类型数据类型sfr(8位)特殊功能寄存器类型位)特殊功能寄存器类型sfr1616位特殊功能寄存器类型位特殊功能寄存器类型bit(一般)位类型(位变量存储于(一般)位类型(位变量存储于bdata区域)区域)sbit(特殊)位类型(位变量存储于指定的位地址)(特殊)位类型(位变量存储于指定的位地址)存储区域存储区域(数据修饰符数据修饰符)data声明变量存储于声明变量存储于data存储区存储区bdata声明变量存储于声明变量存储于bdata存储区存储区idata声明变量存储于声明变量存储于idata存储区存储区pdata声明变量存储于声明变量存储于pdata存储区存储区xdata声明变量存
12、储于声明变量存储于xdata存储区存储区code声明变量存储于声明变量存储于code存储区存储区数据修饰符数据修饰符_at_声明变量存储的具体地址声明变量存储的具体地址*volatile声明变量会被意外改变,不作优化声明变量会被意外改变,不作优化函数修饰符函数修饰符interrupt声明函数为中断服务函数声明函数为中断服务函数reentrant声明函数为可重入函数声明函数为可重入函数using声明函数使用的工作寄存器组声明函数使用的工作寄存器组4.2 C514.2 C51数据类型及存储数据类型及存储主要内容主要内容4.2.1 C51的数据类型的数据类型4.2.2 C51数据的存储数据的存储4.
13、2.1 C514.2.1 C51的数据类型的数据类型表表4-1 C51数据数据类型、型、长度和数度和数值范范围数据数据类型型表示方法表示方法长 度度数数 值 范范 围基基本本类型型无符号字符型无符号字符型 unsigned char 1字字节 0255有符号字符型有符号字符型 signed char1字字节-128127无符号整型无符号整型unsigned int2字字节 065535有符号整型有符号整型signed int2字字节-3276832767无符号无符号长整型整型 unsigned long 4字字节 04294967295有符号有符号长整型整型 signed long4字字节-2
14、1474836482147483647浮点型浮点型float4字字节 1.1755E-383.40E+38扩充充类型型特殊功能特殊功能寄存器寄存器sfrsfr161字字节2字字节0255065535位位类型型bit、sbit1位位0或或14.2.1 C514.2.1 C51的数据类型的数据类型bit、sbit数据类型转换与运算数据类型转换与运算1)bit、sbit到到char类型转换类型转换可以做强制类型转换。可以做强制类型转换。如:如:unsigned char d=5,d0=4,d1,d2,d3;bitbb=1;d=d+(char)bb)*8;/d=132)bit、sbit类型与类型与ch
15、ar类型可直接作逻辑运算类型可直接作逻辑运算如:如:d1=d0&bb;/d1=4d2=d0|bb;/d2=5d3=d0bb;/d3=5.异或操作异或操作注意:注意:bit、sbit类型与类型与char类型不能直接作算数运算类型不能直接作算数运算4.2.2 C514.2.2 C51数据的存储数据的存储MCS-51单片机只有单片机只有bit和和unsigned char两种数据两种数据类型支持机器指令类型支持机器指令,而其它类型的数据都需要转换成,而其它类型的数据都需要转换成bit或或unsigned char型进行存储。型进行存储。为了减少单片机的存储空间和提高运行速度,要为了减少单片机的存储空
16、间和提高运行速度,要尽可能地使用尽可能地使用unsigned char型数据。型数据。一、位变量的存储一、位变量的存储bit和和sbit型位变量,直接存于型位变量,直接存于RAM的位寻址空间,的位寻址空间,包括低包括低128位和特殊功能寄存器位。位和特殊功能寄存器位。4.2.2 C514.2.2 C51数据的存储数据的存储二、字符变量的存储二、字符变量的存储字符变量字符变量(char):无论是无论是unsigned char数据还数据还是是signed char数据,均为数据,均为1个字节,能够被直接存储在个字节,能够被直接存储在RAM中,可以存储在中,可以存储在00 x7f区域,也可以存储在
17、区域,也可以存储在0 x800 xff区域,与变量的定义有关。区域,与变量的定义有关。unsigned char数:数:可直接被可直接被MSC-51接受接受signed char数据:数据:用补码表示。用补码表示。需要需要额外的操作额外的操作来来测试、处理符号位测试、处理符号位,使用的是两种库函数,代码量,使用的是两种库函数,代码量大,运算速度降低。大,运算速度降低。4.2.2 C514.2.2 C51数据的存储数据的存储三、整型变量的存储三、整型变量的存储整型变量整型变量(int):不管是不管是unsigned int数据还是数据还是signed int数据,数据,均为均为2个字节,其个字节
18、,其存储方法是高位字存储方法是高位字节保存在低地址节保存在低地址(在前面),(在前面),低位字低位字节保存在高地址节保存在高地址(在后面)(在后面)。例如,例如,整型变量的值为整型变量的值为0 x1234,在内存中的存,在内存中的存放如右图所示。放如右图所示。signed int数据用补码表示。数据用补码表示。地址地址低低高高:1234:4.2.2 C514.2.2 C51数据的存储数据的存储四、长四、长整型变量的存储整型变量的存储长整型变量(长整型变量(long)为)为4个字节,个字节,其存储方法与整型数据一样,是其存储方法与整型数据一样,是最高最高位字节保存的地址最低位字节保存的地址最低(
19、在最前面),(在最前面),最低位字节保存的地址最高最低位字节保存的地址最高(在最后(在最后面)。面)。如长整型变量的值为如长整型变量的值为0 x12345678,在内存中的,在内存中的存放方法如右图所示。不管是存放方法如右图所示。不管是unsigned long数据数据还是还是signed long数据。数据。地址地址低低高高:12345678:4.2.2 C514.2.2 C51数据的存储数据的存储五、浮点五、浮点型变量的存储型变量的存储浮点型变量浮点型变量(fload)占)占4个字节,个字节,用指数方式用指数方式表示表示,其具体格式与编译器有关。,其具体格式与编译器有关。对于对于Keil
20、C,采用的是,采用的是IEEE-754标准标准,具有,具有24位位精度,尾数的最高位始终为精度,尾数的最高位始终为1,因而不保存。,因而不保存。具体分布为:具体分布为:1位符号位,位符号位,8位阶码位,位阶码位,23位尾位尾数,如下表所示。数,如下表所示。字字节地址地址偏移量偏移量0123浮点数浮点数内容内容SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM符号和符号和阶码 尾数高位尾数高位尾数低位尾数低位4.2.2 C514.2.2 C51数据的存储数据的存储符号位符号位S:1表示负数,表示负数,0表示正数。表示正数。阶码:阶码:用移码表示。如,实际阶码用移码表示。如,实际阶码
21、-126用用1表示,实际阶码表示,实际阶码0用用127表示,表示,即实际阶码数加上即实际阶码数加上127得到阶码的表达数得到阶码的表达数。阶码数值范围:阶码数值范围:-126+128阶码表达为:阶码表达为:12554.2.2 C514.2.2 C51数据的存储数据的存储例如浮点数例如浮点数-12.5符号位为符号位为1,12.5的二进制数为的二进制数为1100.1=1.1001E+0011,阶码数值为阶码数值为3+127=130=10000010B,尾数为尾数为1001。因此得:。因此得:地址地址低低高高:C1480000:11000001010010000000000000000000=0 x
22、C1480000尾数部分尾数部分23位位符符号号位位阶码部分阶码部分8位位4.3 C514.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变量的绝对定位变量的绝对定位4.3.7 C51设备变量的定义设备变量的定义4.3.1 C514.3.1 C51变量的定义格式变量的定义格式C51变量定义的一般格式为:变量定义的一般格式为:存储类型存储类型 数据类型数据类型
23、 存储区存储区变量名变量名1=初值初值,变量名变量名2=初值初值,或或存储类型存储类型 存储区存储区 数据类型数据类型 变量名变量名1=初值初值,变量名变量名2=初值初值,可见变量可见变量(非位变量)(非位变量)的定义由的定义由4部分组成部分组成,即,即在变量定义时,指定变量的在变量定义时,指定变量的4种属性。种属性。数据类型:数据类型:在前面的在前面的4.2中已经叙述过,对于变中已经叙述过,对于变量名也无须多说,量名也无须多说,下面主要解释下面主要解释“存储类型存储类型”和和“存存储区储区”等概念等概念。4.3.2 C514.3.2 C51变量的存储类型变量的存储类型存储类型这个属性我们仍沿
24、用存储类型这个属性我们仍沿用ANSI C的说法的说法,尽,尽量不改变原来的含义。量不改变原来的含义。按照按照ANSI C,C语言的变量有语言的变量有4种存储类型种存储类型:动态存储(动态存储(auto):缺省即为动态存储:缺省即为动态存储静态存储(静态存储(static):如:如:static char a,b;全局存储(全局存储(extern):寄存器存储(寄存器存储(register)4.3.2 C514.3.2 C51变量的存储类型变量的存储类型一、动态存储一、动态存储动态(存储)变量:动态(存储)变量:用用auto定义的为动态变量,定义的为动态变量,也叫自动变量也叫自动变量。作用范围:
25、作用范围:在定义它的函数内或复合语句内部在定义它的函数内或复合语句内部当定义它的函数或复合语句执行时,当定义它的函数或复合语句执行时,C51才为变才为变量分配存储空间,结束时所占用的存储空间释放。量分配存储空间,结束时所占用的存储空间释放。定义变量时,定义变量时,auto可以省略可以省略,或者说如果省略了,或者说如果省略了存储类型项,则认为是动态变量。存储类型项,则认为是动态变量。动态变量一般分配动态变量一般分配使用寄存器或堆栈使用寄存器或堆栈。4.3.2 C514.3.2 C51变量的存储类型变量的存储类型二、静态存储二、静态存储静态(存储)变量:静态(存储)变量:用用static定义的为静
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 技术 语言