单片机课件 单片机的C语言编程.ppt
《单片机课件 单片机的C语言编程.ppt》由会员分享,可在线阅读,更多相关《单片机课件 单片机的C语言编程.ppt(92页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第10章章单片机的单片机的C语言编程语言编程 单片机原理、接口及应用单片机原理、接口及应用单片机原理、接口及应用单片机原理、接口及应用第第10章章单片机的单片机的C语言编程语言编程 内内 容容 提提 要要 C51程序结构程序结构C51的数据类型的数据类型数据的存贮类型和存贮模式数据的存贮类型和存贮模式C51对对SFR、可寻址位、存储器和、可寻址位、存储器和I/O口的定义口的定义C51的运算符的运算符函函数数 C语言编程实例语言编程实例 单片机资源的单片机资源的C语言编程实例语言编程实例汇编语言和汇编语言和C语言的混合编程语言的混合编程C语言函数库的管理与使用语言函数库的管理与使用小结小结 第
2、第10章章单片机的单片机的C语言编程语言编程 5151系列单片机支持三种高级语言,即系列单片机支持三种高级语言,即PL/MPL/M,C C和和BASICBASIC。80528052单片机内固化有解释单片机内固化有解释BASICBASIC语言语言 ,BASICBASIC语言适用于简单编程而对编程效率运行速度要求不高语言适用于简单编程而对编程效率运行速度要求不高的场合;的场合;PL/MPL/M是一种结构化的语言,很象是一种结构化的语言,很象PASCALPASCAL,PL/M PL/M 编译器好象汇编器一样产生紧凑的机器代码,可编译器好象汇编器一样产生紧凑的机器代码,可以说是高级汇编语言,但它不支持
3、复杂的算术运算,以说是高级汇编语言,但它不支持复杂的算术运算,无丰富库函数支持,学习无丰富库函数支持,学习PL/MPL/M无异于学习一种新的语无异于学习一种新的语言。言。C C语言是一种通用的程序设计语言,其代码率高,语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程序结构,适数据类型及运算符丰富,并具有良好的程序结构,适用于各种应用的程序设计,是目前使用较广的单片机用于各种应用的程序设计,是目前使用较广的单片机编程语言。编程语言。第第10章章单片机的单片机的C语言编程语言编程 单片机的单片机的C C语言采用语言采用C51C51编译器编译器(简称简称C51)C51)
4、。由。由C51C51产生的目标代码短、运行速度高、所需存储空间小、产生的目标代码短、运行速度高、所需存储空间小、符合符合C C语言的语言的ANSIANSI标准,生成的代码遵循标准,生成的代码遵循IntelIntel目标文目标文件格式,而且可与件格式,而且可与A51A51汇编语言或汇编语言或PL/M51PL/M51语言目标代码语言目标代码混和使用。混和使用。第第10章章单片机的单片机的C语言编程语言编程 应用应用C51C51编程具有以下优点编程具有以下优点:(1 1)C51C51管管理理内内部部寄寄存存器器和和存存贮贮器器的的分分配配,编编程程时时,无无需考虑不同存储器的寻址和数据类型等细节问题
5、;需考虑不同存储器的寻址和数据类型等细节问题;()程程序序由由若若干干函函数数组组成成,具具有有良良好好的的模模块块化化结结构构;()有有丰丰富富的的子子程程序序库库可可直直接接引引用用,从从而而大大大大减减少少用用户户编程的工作量。编程的工作量。()()C C语言和汇编语言可以交叉使用语言和汇编语言可以交叉使用.汇编语言程序代码汇编语言程序代码短、运行速度快、但复杂运算编程耗时。如果用汇编语言短、运行速度快、但复杂运算编程耗时。如果用汇编语言编写与硬件有关的部分程序,用编写与硬件有关的部分程序,用C C语言编写与硬件无关的运语言编写与硬件无关的运算部分程序,充分发挥两种语言的长处,可以提高开
6、发效算部分程序,充分发挥两种语言的长处,可以提高开发效率。率。第第10章章单片机的单片机的C语言编程语言编程 10.1C51程序结构程序结构 同标准同标准C C一样,一样,C51C51的程序由一个个函数组成,这里的的程序由一个个函数组成,这里的函数和其他语言的函数和其他语言的“子程序子程序”或或“过程过程”具有相同的意义。具有相同的意义。其中必须有一个主函数其中必须有一个主函数main()main(),程序的执行从程序的执行从main()main()函数函数开始,调用其开始,调用其 他函数后返回主函数他函数后返回主函数main()main(),最后在主函数最后在主函数中结束整个程序而不管函数的
7、排列顺序如何。中结束整个程序而不管函数的排列顺序如何。第第10章章单片机的单片机的C语言编程语言编程 C语言程序的组成结构如下所示语言程序的组成结构如下所示:全全局局变变量量说说明明/*可可被被各各函函数数引引用用*/main()/*主函数主函数*/局局部部变变量量说说明明/*只只在在本本函函数数引引用用*/执行语句执行语句(包括函数调用语句包括函数调用语句)fun1(形式参数表形式参数表)/*函数函数1*/形式参数说明形式参数说明局部变量说明局部变量说明执执行行语语句句(包包括括调调用用其其他他函函数数语句语句)funn(形形式式参参数数表表)/*函函数数n*/形式参数说明形式参数说明局部变
8、量说明局部变量说明执行语句执行语句第第10章章单片机的单片机的C语言编程语言编程 C语言的语句规则语言的语句规则:1.每每个个变变量量必必须须先先说说明明后后引引用用,变变量量名名英英文文大大小小写写是是有有差差别别的。的。2.C语语言言程程序序一一行行可可以以书书写写多多条条语语句句,但但每每个个语语句句必必须须以以“;”结尾,一个语句也可以多行书写为好。结尾,一个语句也可以多行书写为好。3.C语言的注释用语言的注释用/*/表示。表示。4.“”花括号必须成对,位置随意,可在紧挨函数名后,也花括号必须成对,位置随意,可在紧挨函数名后,也可另起一行,多个花括号可以同行书写,也可逐行书写,为可另起
9、一行,多个花括号可以同行书写,也可逐行书写,为层次分明,增加可读性,同一层的层次分明,增加可读性,同一层的“”花括号对齐,采用花括号对齐,采用逐层缩进方式书写。逐层缩进方式书写。第第10章章单片机的单片机的C语言编程语言编程 10.2C51的数据类型的数据类型C51的数据有常量和变量之分。的数据有常量和变量之分。常常量量在在程程序序运运行行中中其其值值不不变变的的量量,可可以以为为字字符符,十十进进制制数数或或十十六进制数六进制数(用用0 x表示表示)。常常量量分分为为数数值值型型常常量量和和符符号号型型常常量量,如如果果是是符符号号型型常常量量,需需用用宏宏定定义义指指令令(#define)
10、对对其其进进行行定定义义(相相当当于于汇汇编编的的“EQU”伪指令伪指令)如:如:#definePI3.1415那么程序中只要出现那么程序中只要出现PI的地方,编译程序都译为的地方,编译程序都译为3.1415。变量变量在程序运行中其值可以改变的量。在程序运行中其值可以改变的量。一个变量由变量名和变量值构成,变量名即是存贮单元地址一个变量由变量名和变量值构成,变量名即是存贮单元地址的符号表示,而变量的值就是该单元存放的内容。定义一个变的符号表示,而变量的值就是该单元存放的内容。定义一个变量,编译系统就会自动为它安排一个存贮单元,具体的地址值量,编译系统就会自动为它安排一个存贮单元,具体的地址值用
11、户不必在意。用户不必在意。第第10章章单片机的单片机的C语言编程语言编程 10.2.1C51变量的数据类型变量的数据类型无论哪种数据都是存放在存贮单元中的,每一个数无论哪种数据都是存放在存贮单元中的,每一个数据究竟要占用几个单元据究竟要占用几个单元(即数据的长度即数据的长度)都要提供给编译都要提供给编译系统,正如汇编语言中存放数据的单元要用系统,正如汇编语言中存放数据的单元要用DB或或DW伪伪指令进行定义一样,编译系统以此为根据预留存贮单元,指令进行定义一样,编译系统以此为根据预留存贮单元,这就是定义数据类型的意义这就是定义数据类型的意义.C51编译器支持数据类型见编译器支持数据类型见表表10
12、.1。第第10章章单片机的单片机的C语言编程语言编程 表表10-1C51的数据类型的数据类型第第10章章单片机的单片机的C语言编程语言编程 对表对表10.1作如下说明:作如下说明:1.字字符符型型(char)、整整型型(int)和和长长整整型型(long)均均有有符符号号型型(signed)和和无无符符号号型型(unsigned)两两种种,如如果果不不是是必必须须,尽尽可可能能选选择择unsigned型型,这这将将会会使使编编译译器器省省却却符符号号位的检测,使生成的程序代码比位的检测,使生成的程序代码比signed类型短得多。类型短得多。2.程程序序编编译译时时,C51编编译译器器会会自自动
13、动进进行行类类型型转转换换,例例如如将将一一个个位位变变量量赋赋值值给给一一个个整整型型变变量量时时,位位型型值值自自动动转转换换为为整整型型值值;当当运运算算符符两两边边为为不不同同类类型型的的数数据据时时,编编译译器器先先将将低低级级的的数数据据类类型型转转换换为为较较高高级级的的数数据据类类型型,运运算后,运算结果为高级数据类型。算后,运算结果为高级数据类型。3.51单片机内部数据存贮器的可寻址位单片机内部数据存贮器的可寻址位(20H2FH)定定义为义为bit型,而特殊功能寄存器的可寻址位型,而特殊功能寄存器的可寻址位(即地址为即地址为X0H和和X8H的的SFR的各位的各位)只能定义为只
14、能定义为sbit类型。类型。第第10章章单片机的单片机的C语言编程语言编程 10.2.2关于指针型数据关于指针型数据(1)关于指针型变量关于指针型变量在汇编语言程序中,要取存贮单元在汇编语言程序中,要取存贮单元m的内容可用直接寻址方式,也可用寄存的内容可用直接寻址方式,也可用寄存器间接寻址方式器间接寻址方式,如果用,如果用R1寄存器指示寄存器指示m的地址,用的地址,用R1取取m单元的内容。单元的内容。相对应的在相对应的在C语言中用变量名表示取变量的值语言中用变量名表示取变量的值(相当于直接寻址相当于直接寻址),也可用,也可用另一个变量另一个变量(如如P)存放存放m的地址,的地址,P就相当于就相
15、当于R1寄存器寄存器。用。用*P取得取得m单元单元的内容的内容(相当于汇编的间接寻址方式相当于汇编的间接寻址方式)这里这里P即为指针型变量。下面表格表即为指针型变量。下面表格表示两种语言将示两种语言将m单元的内容送单元的内容送n单元的对照语句。单元的对照语句。注:注:上表省略了汇编语言程序中对符号地址上表省略了汇编语言程序中对符号地址n和和m用用EQU伪指令进行具体地伪指令进行具体地址定义的址定义的语句以及语句以及C语言对变量语言对变量n、m和指针变量和指针变量P进行类型定义的语句,实进行类型定义的语句,实际程序设计中,此步是不可际程序设计中,此步是不可缺少的。表中缺少的。表中&为取地址运算符
16、,为取地址运算符,*为取内容运算为取内容运算符。符。表表1O-2 1O-2 汇编语言和汇编语言和C语言的对照语言的对照第第10章章单片机的单片机的C语言编程语言编程 (2)指针型数据的类型指针型数据的类型由由于于C51是是结结合合51单单片片机机硬硬件件的的,51单单片片机机的的不不同同存存贮贮空空间间,有有不不同同的的地地址址范范围围,即即使使对对于于同同一一外外部部数数据据存存贮贮器器,又又有有用用Ri分分页页寻寻址址(Ri为为八八位位)和和用用DPTR寻寻址址(DPTR为为十十六六位位)两两种种寻寻址址方方式式,而而指指针针本本身身也也是是一一个个变变量量,有有它它存存放放的的存存贮贮区
17、区和和数数据据长长度度。因因此此,在在指指针针类类型型的的定定义义中中要要说说明明:被被指指的的变变量量的的数数据据类类型型和和存存贮贮类类型型;指指针针变变量量本本身身的的数数据据类类型型(占占几几个个字字节节)和和存贮类型存贮类型(即指针本身存放在什么存贮区即指针本身存放在什么存贮区)。例如类型定义为例如类型定义为data或或idata,表示指针指示内部数据存贮器;而表示指针指示内部数据存贮器;而pdata表示指针指向外部数据存贮器,用表示指针指向外部数据存贮器,用Ri间址。以上均为八位地址;而类型间址。以上均为八位地址;而类型code/xdata表示指针指向外部程序存贮器或外部数据存贮器
18、指针,本身表示指针指向外部程序存贮器或外部数据存贮器指针,本身(即即被指被指示地址示地址)应为十六位长度。如果想使指针能适用于指向任何存贮空间,应为十六位长度。如果想使指针能适用于指向任何存贮空间,则可以定义指针为通用型,此时指针长度为则可以定义指针为通用型,此时指针长度为3字节,第一字节表示存贮器字节,第一字节表示存贮器类型编码,第二、三字节分别表示所指类型编码,第二、三字节分别表示所指地址的高位和低位。第一字节表地址的高位和低位。第一字节表示的存贮器类型编码见表示的存贮器类型编码见表10-3:表表10-3通用型指针的存贮类型编码通用型指针的存贮类型编码第第10章章单片机的单片机的C语言编程
19、语言编程 10.3数据的存贮类型和存贮模式数据的存贮类型和存贮模式10.3.1数据的存贮类型数据的存贮类型 C51是面向是面向8XX51系列单片机及硬件控制系统的开发语系列单片机及硬件控制系统的开发语言,它定义的任何变量必须以一定的存贮类型的方式定位言,它定义的任何变量必须以一定的存贮类型的方式定位在在8XX51的某一存贮区中,否则便没有意义。因此在定义的某一存贮区中,否则便没有意义。因此在定义变量类型时,还必须定义它的存贮类型,变量类型时,还必须定义它的存贮类型,C51的变量的存贮的变量的存贮类型如表类型如表10-4所示:所示:第第10章章单片机的单片机的C语言编程语言编程 表表10-4C5
20、1的变量的存贮类型的变量的存贮类型 访问内部数据存贮器访问内部数据存贮器(idata)比访问外部数据存贮器比访问外部数据存贮器(xdata)相对要快一些,因此,可将经常使用的变量置于内部相对要快一些,因此,可将经常使用的变量置于内部数据存贮器中,而将较大及很少使用的数据变量置于外部数数据存贮器中,而将较大及很少使用的数据变量置于外部数据存贮器中。例如定义变量据存贮器中。例如定义变量x语句:语句:datacharx(等价于等价于chardatax)。如果用户不对变量的存贮类型定义,则编译器承认如果用户不对变量的存贮类型定义,则编译器承认默认存贮类型,默认的存贮类型由编译控制命令的存贮的模默认存贮
21、类型,默认的存贮类型由编译控制命令的存贮的模式部分决定。式部分决定。第第10章章单片机的单片机的C语言编程语言编程 10.3.2存贮器模式存贮器模式存贮器模式决定了变量的默认存贮器类型、参数传递区和无明确存贮区类存贮器模式决定了变量的默认存贮器类型、参数传递区和无明确存贮区类型的说明。型的说明。C51的存贮器模式有的存贮器模式有SMALL、LARGE和和COMPACT(见表见表10-5)。)。在固定的存贮器地址进行变量参数传递是在固定的存贮器地址进行变量参数传递是C51的一个标准特征,在的一个标准特征,在SMALL模式下参数传递是在内部数据存贮区中完成的。模式下参数传递是在内部数据存贮区中完成
22、的。LARGE和和COMPACT模式允许参数在外部存贮器中传递。模式允许参数在外部存贮器中传递。C51同时也支持混同时也支持混合模式,合模式,例如在例如在LARGE模式下生成的程序可将一些函数分页放入模式下生成的程序可将一些函数分页放入SMALL模式中从模式中从而加快执行速度。而加快执行速度。例如设例如设C语言源程序为语言源程序为PROR.C,若使程序中的变量类型和参数传递区限定若使程序中的变量类型和参数传递区限定在在外部数据存贮区外部数据存贮区,有两种方法:,有两种方法:方法方法1:用:用C51对对PROR.C进行编译时,使用命令进行编译时,使用命令C51PROR.CCOMPACT。方法方法
23、2:在程序的第一句加预处理命令:在程序的第一句加预处理命令#pragmacompact 表表10-5存贮器模式存贮器模式第第10章章单片机的单片机的C语言编程语言编程 10.3.3变量说明举例变量说明举例datacharvar;/*字符变量字符变量var定位在片内数据存贮区定位在片内数据存贮区*/charcodeMSG=PARAMETER:;/*字字符符数数组组MSG定定位位在在程程序序存存贮区贮区*/unsignedlongxdataarray100;/*无无符符号号长长型型数数组组定定位位在在片片外外RAM区,区,每元素占每元素占4bytes*/floatidatax,y,z;/*实实型型
24、变变量量x,y,z,定定位位在在片片内内用用间间址址访访问问的的内内部部RAM区区*/bitlock;/*位变量位变量Lock定位在片内定位在片内RAM可位寻址区可位寻址区*/unsignedintpdatasion;/*无无符符号号整整型型变变量量sion定定位位在在分分页页的的外外部部RAM*/unsignedcharxdatavector1044/*无无符符号号字字符符型型三三维维数数组组,定定位在片外位在片外RAM区区*/sfrP0=0 x80;/*定义定义P0口,地址为口,地址为80H*/charbdataflags;/*字字符符变变量量flags定定位位在在可可位位寻寻址址内内部部
25、RAM区区*/sbitflag0=flags0;/*定义定义flag0为为flags.0*/第第10章章单片机的单片机的C语言编程语言编程 如果在变量说明时略去存贮器类型标志符,编译器会自动选择默认的如果在变量说明时略去存贮器类型标志符,编译器会自动选择默认的存贮器类型。默认的存贮器类型由控制指令存贮器类型。默认的存贮器类型由控制指令SMALL、COMPACT和和LARGE限制。例如如果声明限制。例如如果声明charvar,则默认的存贮器模式为则默认的存贮器模式为SMALL,var放在放在data存贮区;如果使用存贮区;如果使用COMPACT模式,模式,var放入放入idata存贮区存贮区;在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机课件 单片机的C语言编程 单片机 课件 语言 编程
限制150内