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