单片机(八、51-C语言编程).ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《单片机(八、51-C语言编程).ppt》由会员分享,可在线阅读,更多相关《单片机(八、51-C语言编程).ppt(137页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机与嵌入式系统第五章 单片机:C编程王浩 副教授中南大学信息科学与工程学院2第章单片机编程语言第章单片机编程语言v3.1 单片机编程语言概述单片机编程语言概述v3.2 C51语言语言33.1 3.1 单片机编程语言概述单片机编程语言概述 v5151单片机的片机的编程程语言可以是言可以是汇编语言言,也可以是,也可以是高高级语言言,如,如由由C C语言演言演变而成的而成的C51C51语言言等。等。v汇编语言言产生的目生的目标代代码短,占用的存短,占用的存储空空间小,小,执行速度快,行速度快,能充分能充分发挥单片机的硬件功能。但片机的硬件功能。但对于复于复杂的的应用来用来讲使用使用汇编语言言编程
2、复程复杂,程序的可,程序的可读性和可移植性不性和可移植性不强。v高高级语言言产生的目生的目标代代码长,占用的存,占用的存储空空间大,大,执行速度慢。行速度慢。但但这是相是相对于于汇编语言来言来讲的,其的,其实C C语言在大多数情况下的机言在大多数情况下的机器代器代码生成效率和生成效率和汇编语言相当,但言相当,但可可读性性和和可移植性可移植性却却远远超超过汇编语言,言,编程效率程效率也大大高于也大大高于汇编语言。言。43.1 3.1 单片机编程语言概述单片机编程语言概述v如果如果应用系用系统的存的存储空空间比比较小,且小,且对实时性的要求很高,性的要求很高,则应选用用汇编语言言编程程。如果系。如
3、果系统的存的存储空空间比比较大,且大,且对实时性性的要求不是很高,的要求不是很高,则C51C51语言言是理想的是理想的编程程语言。如果系言。如果系统中有中有部分模部分模块对实时性的要求很高,而其它模性的要求很高,而其它模块对实时性的要求不是性的要求不是很高,很高,则可以将两种可以将两种语言言结合,程序的主体部分使用合,程序的主体部分使用C51C51编程,程,对实时性的要求高的模性的要求高的模块用用汇编语言言编程,然后将程,然后将汇编语言程序言程序模模块嵌入到嵌入到C51C51语言程序当中言程序当中。v无无论是是高高级语言言还是是汇编语言言写写的的源源程程序序都都必必须转换成成目目标程程序序(机
4、机器器语言言),单片片机机才才能能执行行。目目前前很很多多公公司司都都将将编辑器器、汇编器器、编译器器、连接接/定定位位器器、符符号号转换程程序序做做成成了了软件件包包,称称为集集成成开开发环境境,如如Keil Keil uVisionuVision、Silicon Silicon Laboratories Laboratories IDEIDE等。等。53.2 C51语言语言v早期的嵌入式系早期的嵌入式系统的硬件的功能相的硬件的功能相对较弱,弱,软件的件的规模相模相对较小,一般不超小,一般不超过8K。硬件工程。硬件工程师通常要同通常要同时进行行软、硬件、硬件设计,所以一般采用,所以一般采用汇
5、编语言来言来进行程序行程序设计。v汇编程序的主要缺点是可程序的主要缺点是可读性和可性和可维护性性较差(特差(特别当程序没有很好的当程序没有很好的进行注行注释时),代),代码的可重用性也比的可重用性也比较低。低。v目前的嵌入式系目前的嵌入式系统硬件性能和硬件性能和软件的件的规模都有了很大模都有了很大的提高,一般采用的提高,一般采用C 语言言进行嵌入式系行嵌入式系统程序程序设计。6v使用使用C语言有以下的言有以下的优点:点:C 语言具有言具有结构化构化和和模模块化化特点,便于特点,便于阅读和和维护。C 语言言可移植性好可移植性好,很多微控制器都支持,很多微控制器都支持C 编译器。功能化器。功能化的
6、代的代码能能够很方便的从一个工程移植到另一个工程,从而减很方便的从一个工程移植到另一个工程,从而减少了开少了开发时间。C 语言言编写的程序比写的程序比汇编语言言编写的程序更符合人写的程序更符合人们的思考的思考习惯,开,开发者可以更者可以更专心的考心的考虑算法,而不是考算法,而不是考虑一些一些细节问题。这样可以减少可以减少编程程错误出出现的机率,从而的机率,从而提高开提高开发效效率率,减少,减少调试的的时间。C 语言和微控制器是言和微控制器是相相对独立的独立的,开,开发者不必知道者不必知道处理器的理器的具体内部具体内部结构和构和处理理过程。当基于新型的微控制器开程。当基于新型的微控制器开发程序程
7、序时,可以很快上手,减少学,可以很快上手,减少学习时间和程序开和程序开发时间。7v尽管尽管C语言有以上的言有以上的优点,但点,但这并不是并不是说汇编语言言过时了。很多系了。很多系统特特别是是实时嵌入式系嵌入式系统都是采用都是采用C 和和汇编语言言进行混合行混合编程。程。对实时响响应时间有很有很严格要求的格要求的应用系用系统,使用,使用汇编语言成了开言成了开发者的唯一者的唯一选择。vC51语言言是一种是一种专门为8051单片机片机设计的高的高级语言言C编译器,支持符合器,支持符合ANSI标准的准的C语言程序言程序设计,同,同时针对8051单片机的自身特点做了一些特殊片机的自身特点做了一些特殊扩展
8、。展。如果有如果有C/C+语言的基言的基础,C51语言能言能够很快掌握!很快掌握!83.3.1标识符、关键字标识符、关键字v标识符符与与关关键字字是是C语言的基本言的基本组成部分。成部分。v 标识符符C语言中的言中的标识符(符(identifier)是由一个或多个字符)是由一个或多个字符组成的序列,成的序列,标识符可以作符可以作为变量名、函数名、数量名、函数名、数组名、名、类型名或文件名。型名或文件名。标识符的第一个字符必符的第一个字符必须是字母或下划是字母或下划线,随后的字符必,随后的字符必须是字母、数是字母、数字或下划字或下划线。不同的不同的编译器定器定义的的标识符的有效符的有效长度不完全
9、相同,但不会少于度不完全相同,但不会少于8个字符。个字符。为了程序移植方便,了程序移植方便,标识符的符的长度最好不超度最好不超过8个字符。个字符。v注意注意1:C语言区分字母的大小写,言区分字母的大小写,这和和汇编语言是不同的。例如:言是不同的。例如:var 和和Var 是两个不同的是两个不同的标识符。符。v注意注意2:C51编译器器6.0以上版本支持以上版本支持标识符的有效符的有效长度度为256,超,超过部分部分 忽略。忽略。9v 关关键字字关关键字(字(key word)是一种具有固定名称和特定含)是一种具有固定名称和特定含义的的标识符,又称符,又称为保留字保留字(reserved wor
10、d)。这些些标识符系符系统已已经做做了定了定义,有特定的功能。用,有特定的功能。用户自定自定义的的标识符不能和关符不能和关键字字同名。同名。ANSI C语言定言定义了了32个关个关键字字。10ANSI C关键字关键字autodogotosignedunsignedbreakdoubleifsizeofvoidcaseelseintstaticvolatilecharenumlongstructwhileconstexternregisterswitchcontinuefloatreturntypedefdefaultforshortunion11ANSI C关键字关键字v程序控制语句:程序控制
11、语句:break case continue default do else for goto if return switch volatile whilev存储种类说明:存储种类说明:auto const extern register staticv数据类型说明:数据类型说明:char double enum float int long short signed struct typedef union unsigned voidv运算符:运算符:sizeof12扩展关键字扩展关键字命令命令作用作用include读外部文件,用读外部文件,用指向包含文件目录中的文件,用指向包含文件目录中
12、的文件,用“”指向当前目录中的文件指向当前目录中的文件define定义预处理宏或常数定义预处理宏或常数undef撤销撤销预处理宏或常数定义预处理宏或常数定义if条件编译判断,若表达式为真,则开始条件编译分支条件编译判断,若表达式为真,则开始条件编译分支ifdef条件编译判断,若命名已经定义,则开始条件编译分支条件编译判断,若命名已经定义,则开始条件编译分支ifndef条件编译判断,若命名未定义,则开始条件编译分支条件编译判断,若命名未定义,则开始条件编译分支elif如果此前的如果此前的if、ifdef、ifndef或或elif未发生,并且表达式为真,则开始条件编译未发生,并且表达式为真,则开始
13、条件编译else如果此前的如果此前的if、ifdef、ifndef或或elif未发生,则开始条件编译未发生,则开始条件编译endif结束此前的结束此前的if、ifdef、ifndef、elif或或else开始的条件编译分支。开始的条件编译分支。error输出用户定义的出错消息分支输出用户定义的出错消息分支line说明行号和可选的文件名,常用于出错消息中说明出错位置说明行号和可选的文件名,常用于出错消息中说明出错位置pragma说明编译命令,可以是命令行形式中的编译参数说明编译命令,可以是命令行形式中的编译参数13C51关键字关键字关键字关键字用途用途说明说明_at_地址定位地址定位为变量进行存
14、储器绝对空间地址定位为变量进行存储器绝对空间地址定位alien函数特性声明函数特性声明用以声明与用以声明与PL/M51兼容的函数兼容的函数bdata存储器类型声明存储器类型声明可位寻址的可位寻址的8051内部数据存储器内部数据存储器bit位变量声明位变量声明声明位变量或位类型函数声明位变量或位类型函数code存储器类型声明存储器类型声明8051程序存储器空间程序存储器空间compact存储器模式存储器模式指定使用指定使用8051外部分页寻址数据存储空间外部分页寻址数据存储空间data存储器类型声明存储器类型声明直接寻址的直接寻址的8051内部数据存储器内部数据存储器far存储器类型声明存储器类
15、型声明8051外部数据存储器外部数据存储器idata存储器类型声明存储器类型声明间接寻址的间接寻址的8051内部数据存储器内部数据存储器interrupt中断函数声明中断函数声明定义中断服务函数定义中断服务函数(未完,见下页)(未完,见下页)14C51关键字关键字large存储器模式指定使用8051外部数据存储空间pdata存储器类型声明分页寻址的8051外部数据存储器_priority_多任务优先声明规定RTX51或RTX51 Tiny的任务优先级reentrant可重入函数声明定义可重入函数sbit位变量声明声明可位寻址的特殊功能位sfr特殊功能寄存器声明声明8位的特殊功能寄存器sfr16
16、特殊功能寄存器声明声明16位的特殊功能寄存器small存储器模式指定使用8051内部数据存储空间_task_任务声明定义实时多任务函数using寄存器组定义定义8051的工作寄存器组xdata存储器类型声明8051外部数据存储器16v在在C51中中,还使用了使用了/*/和和/符号符号进行注行注释。在在/*/符号中的所有字符均表示注符号中的所有字符均表示注释说明。明。在在/符号后的符号后的该行所有剩余文字均表示注行所有剩余文字均表示注释说明。明。v注注释的的语句主要用来句主要用来说明程序的功能,增加程序的可明程序的功能,增加程序的可阅读性和可性和可维护性,注性,注释不影响程序的功能,也不会在不影
17、响程序的功能,也不会在编译后的程序中出后的程序中出现,即不影响运行文件的大小。,即不影响运行文件的大小。173.3.2C语言的运算符语言的运算符符号符号意义意义说明说明+加法运算或表示正数加法运算或表示正数-减法运算或表示负数减法运算或表示负数*乘法运算乘法运算/除法运算除法运算当当2个整数相除时,结果为整数,小数部分舍去。个整数相除时,结果为整数,小数部分舍去。%模运算(求余)模运算(求余)参加运算的均应为整数。参加运算的均应为整数。+自增操作自增操作数据值加数据值加1-自减操作自减操作数据值减数据值减118v例:例:设x的初的初值为41.y=x+;结果:果:x=5,y=4解解释:x+先使用
18、先使用x的的值,然后,然后x的的值再自增。再自增。2.y=+x;结果:果:y=5,x=5解解释:+xx的的值先自增,然后再使用先自增,然后再使用x的的值。3.y=x-;结果:果:y=4,x=3解解释:x-先使用先使用x的的值,然后,然后x的的值再自减。再自减。4.y=-x;结果:果:y=3,x=3解解释:-xx的的值先自减,然后再使用先自减,然后再使用x的的值。19逻辑运算符逻辑运算符符号符号含义含义大于大于=大于等于大于等于=等于等于小于小于=小于等于小于等于!=不等于不等于&逻辑与,二个操作数均为真时,其值为真,否则为假逻辑与,二个操作数均为真时,其值为真,否则为假|逻辑或,二个操作数均为
19、假时,其值为假,否则为真逻辑或,二个操作数均为假时,其值为假,否则为真!逻辑非,一元运算符,操作数为真,其值为假,操作数为假,其值为真逻辑非,一元运算符,操作数为真,其值为假,操作数为假,其值为真注意注意:等于运算符用两个等号表示。一个等号表示赋值操作。:等于运算符用两个等号表示。一个等号表示赋值操作。20位运算符位运算符符号符号含义含义&按位与按位与|按位或按位或按位异或按位异或按位取反。一元运算符按位取反。一元运算符右移操作。右边移出的位舍去,左边移入的位对无符号数补右移操作。右边移出的位舍去,左边移入的位对无符号数补0;对有符号数补符号位;对有符号数补符号位21v例:例:unsigned
20、 char x=0 x55;unsigned char y=0 x37;unsigned char z;z=x&y;则则 z=0 x15z=x|y;则则 z=0 x77z=xy;则则 z=0 x62z=x;则则 z=0 xAAz=x1;则则 z=0 x2A22v例:例:unsigned char x=0 x95;signed char y=0 x95;unsigned char z;z=x1;则则 z=0 x4Az=y1;则则 z=0 xCA23赋值运算符赋值运算符v通常把通常把=称称为赋值运算符。运算符。它是二元运算符,它是二元运算符,左左边必必须是个是个变量或数量或数组元素(称元素(称为左
21、左值)右右边是表达式(称是表达式(称为右右值)。)。当左当左值和右和右值的数据的数据类型不一致型不一致时,数据会自,数据会自动进行数据行数据类型型转换。v除了除了=之外,之外,C语言言还提供了提供了10种复合种复合赋值运算符,它运算符,它们的的功能是功能是对左左值和右和右值进行相关运算后,将运算行相关运算后,将运算结果果赋给左左值。复。复合合赋值运算符如下所示:运算符如下所示:+=-=*=/=%=&=!=v其中前其中前5种是算种是算术运算,后运算,后5种是位操作位算。种是位操作位算。24逗号运算符逗号运算符v逗号运算符的作用是把几个表达式串在一起,成逗号运算符的作用是把几个表达式串在一起,成为
22、逗号表达式。逗号表达式。格式如下:格式如下:表达式表达式1,表达式,表达式2,表达式,表达式nv注意:逗号运算符的运算注意:逗号运算符的运算顺序是从左至右,最右序是从左至右,最右边表达式的表达式的值是整个逗号表达式的是整个逗号表达式的值。v例如:例如:x=(y=5,z=y+3);v则该语句句执行完成后行完成后y=5,z=8,x=8。25条件运算符条件运算符v条件运算符用条件运算符用?与与:来替代来替代简单的的if-else条件条件语句。句。该运算符是三元运算符。运算符是三元运算符。格式如下:格式如下:表达式表达式1?表达式?表达式2:表达式:表达式3v该运算符的功能是若表达式运算符的功能是若表
23、达式1为真,真,则执行表达式行表达式2,否,否则执行行表达式表达式3。v例如:例如:z=ab?3:5;v由于由于ab的的值为假,所以假,所以z=5。26强制类型转换运算符强制类型转换运算符v在在C语言程序的表达式或言程序的表达式或变量量赋值运算中,有运算中,有时会出会出现运算运算对象的数据象的数据类型不一致的情况,型不一致的情况,C语言允言允许对参与操作的参与操作的标准数据准数据类型型进行行隐式式转换和和显示示转换。v隐式式转换由系由系统自自动按以下按以下优先先级进行:行:bit char int long floatsigned unsignedv其中,箭其中,箭头方向方向仅表示数据表示数据
24、类型型级别的高低,的高低,转换时由低向高由低向高进行,而不是数据行,而不是数据转换时的的顺序。序。v例如:例如:char变量和量和long变量量进行运算,行运算,char变量无需先量无需先转换为int然后再然后再转换成成long,而是直接由,而是直接由char转换成成long。27v某些某些时候需要按用候需要按用户的需要的需要进行某些数据行某些数据类型型转换,可使用可使用强制制类型型转换符符进行行显式式转换。v强制制转换符的功能是将表达式符的功能是将表达式结果果转换成指定的数据成指定的数据类型,型,强制制类型型转换符的运算符号符的运算符号为()。()。格式格式为:(类型名)(表达式)型名)(表
25、达式)v例如:例如:(int)(7.2/2)将将7.2/2的的结果果转换为整型,即整型,即3。28sizeof运算符vC语言中可以用言中可以用sizeof运算符运算符计算数据算数据类型型变量以及表量以及表达式的字达式的字节数。数。它的一般使用形式它的一般使用形式为:sizeof(表达式)或(表达式)或sizeof(数据(数据类型)型)v注意:注意:sizeof是一种特殊的运算符,不是函数。是一种特殊的运算符,不是函数。实际上字上字节数的数的计算是在程序算是在程序编译时完成的,而不是在程序完成的,而不是在程序执行的行的过程中才程中才计算出来的。算出来的。29其它运算符v*:指指针运算符。作用是通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 51 语言 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内