单片机原理与应用第7章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《单片机原理与应用第7章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 课件
- 资源描述:
-
1、第第7 7章章 单片机单片机C C语言设计语言设计7.1 C51语言简介语言简介7.2 C51的函数的函数7.3 C51的指针类型的指针类型7.4 MCS-51单片机单片机C51语言程序设计语言程序设计7.5 汇编语言与汇编语言与C51的混合编程的混合编程本章重点本章重点u了解了解C51C51的特点;的特点;u掌握单片机的掌握单片机的C51C51编程编程 ;u了解汇编语言与了解汇编语言与C51C51语言的混合编程。语言的混合编程。7.1 C51 7.1 C51 语言简介语言简介 C C语言是一种源于语言是一种源于UNIXUNIX操作系统的语言,它是一种结构化语言,操作系统的语言,它是一种结构化
2、语言,可产生紧凑代码。可产生紧凑代码。C C语言可以进行许多机器级函数控制,与汇编语言语言可以进行许多机器级函数控制,与汇编语言相比,有如下优点:相比,有如下优点:(1 1)不需要了解单片机指令集,也不需要了解其存储结构。)不需要了解单片机指令集,也不需要了解其存储结构。(2 2)寄存器分配和寻址方式由编译器进行管理,程序员可以忽略)寄存器分配和寻址方式由编译器进行管理,程序员可以忽略这些问题。这些问题。(3 3)编程时可使用与其他程序设计时相同的关键字和操作函数。)编程时可使用与其他程序设计时相同的关键字和操作函数。(4 4)程序的开发和调试时间大大缩短。)程序的开发和调试时间大大缩短。(5
3、 5)C C语言中的库文件提供许多标准的函数,如数学运算。开发语言中的库文件提供许多标准的函数,如数学运算。开发者可以直接调用,而不必使用烦琐的汇编语言来实现。者可以直接调用,而不必使用烦琐的汇编语言来实现。(6 6)C C语言可移植性好且非常普及,语言可移植性好且非常普及,C C语言编译器几乎适用于所有语言编译器几乎适用于所有的目标系统。的目标系统。(7 7)C C语言在模块化开发、可移植性、代码管理上有它明显的优语言在模块化开发、可移植性、代码管理上有它明显的优势。势。7.1.1 C7.1.1 C语言与汇编语言的比较语言与汇编语言的比较1)C51继承了标准继承了标准C语言的绝大部语言的绝大
4、部分的特性,基本语法相同,但分的特性,基本语法相同,但C51其本身又在特定的硬件结构上有所其本身又在特定的硬件结构上有所扩展,如定义了关键字扩展,如定义了关键字sbit、xdata、idata、code等。等。C51与标准与标准ANSI-C从从库函数的方向来说有很库函数的方向来说有很大的不同。大的不同。编译生成的编译生成的.m51文件,包含文件,包含了硬件资源使用的情况。应了硬件资源使用的情况。应用用C51编程可以通过该文件编程可以通过该文件了解系统资源。了解系统资源。C51头文件集体现了各种头文件集体现了各种系列系列MCS51芯片的不芯片的不同功能。同功能。12347.1.2 C517.1.
5、2 C51与与ANSI-CANSI-C的主要区别的主要区别 7.1.3 C517.1.3 C51的程序结构的程序结构 C C语言程序是由若干个函数单元组成的,每个函数都是完成某语言程序是由若干个函数单元组成的,每个函数都是完成某个特殊任务的子程序段。组成一个程序的若干个函数可以保存在一个特殊任务的子程序段。组成一个程序的若干个函数可以保存在一个源程序文件中,也可以保存在几个源程序文件中,最后再将它们个源程序文件中,也可以保存在几个源程序文件中,最后再将它们连接在连接在起。起。C C语言源程序文件的扩展名为语言源程序文件的扩展名为“.c”.c”,如,如hello.chello.c,ihao.c等
6、。等。一个一个C C语言程序必须有而且只能有一个名为语言程序必须有而且只能有一个名为main()main()的函数、它的函数、它是一个特殊的函数,也称为该程序的主函数,程序的执行都是从是一个特殊的函数,也称为该程序的主函数,程序的执行都是从main()main()函数开始的。函数开始的。7.1.4 C517.1.4 C51的数据类型和存储类型的数据类型和存储类型数据类型数据类型基本类型基本类型位型(位型(bitbit)字符型(字符型(charchar)整型(整型(intint)长整型(长整型(longlong)浮点型(浮点型(floatfloat)双精度浮点型(双精度浮点型(doubledou
7、ble)构造类型构造类型数组类型(数组类型(arrayarray)结构体类型(结构体类型(structstruct)共用体(共用体(unionunion)枚举(枚举(enumenum)指针类型指针类型空类型空类型 C51 C51定义的任何变量必须以一定的存储类型的方式定位在定义的任何变量必须以一定的存储类型的方式定位在8xx518xx51的某一存储区中,否则没有意义。因此,在定义变量类型时,还必的某一存储区中,否则没有意义。因此,在定义变量类型时,还必须定义它的存储类型,须定义它的存储类型,C51C51的变量的存储类型如表所示。的变量的存储类型如表所示。乘法运算符乘法运算符“*”:双目运:双目
8、运算符,具有左结合性。算符,具有左结合性。加法运算符加法运算符“+”:加法运:加法运算符为双目运算符,即应算符为双目运算符,即应有两个量参与加法运算,有两个量参与加法运算,如如a+b,4+8等。等。减法运算符减法运算符“-”-”:减法运算符:减法运算符为双目运算符,但为双目运算符,但“-”-”也可作也可作为负值运算符,此时为单目运为负值运算符,此时为单目运算,如算,如-x,-5-x,-5等具有左结合性。等具有左结合性。除法运算符除法运算符“/”:双目运算:双目运算符,具有左结合性。参与运符,具有左结合性。参与运算量均为整型时,结果也为算量均为整型时,结果也为整型,舍去小数。如果运算整型,舍去小
9、数。如果运算量中有一个是实型,则结果量中有一个是实型,则结果为双精度实型。为双精度实型。12345求余运算符(模运算符)求余运算符(模运算符)“%”:双:双目运算,具有左结合性。要求参与目运算,具有左结合性。要求参与运算的量均为整型。运算的量均为整型。求余运算的结求余运算的结果等于两数相除后的余数。果等于两数相除后的余数。7.1.5 C517.1.5 C51的算术运算符和表达式的算术运算符和表达式1.1.基本的算术运算符基本的算术运算符2.2.算术表达式和运算符的优先级算术表达式和运算符的优先级 表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一表达式是由常量、变量、函数和运算符
10、组合起来的式子。一个表达式有一个值及其类型,个值及其类型,它们等于计算表达式所得结果的值和类型。表达式求值按运它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看做是算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看做是表达式的特例。表达式的特例。1 1)算术表达式)算术表达式算术表达式是由算术运算符和括号连接起来的式子。以下是算术表达式的例子:算术表达式是由算术运算符和括号连接起来的式子。以下是算术表达式的例子:a+ba+b(a(a*2)2)c c(x+r)(x+r)*8-(a+b)8-(a+b)7 7+i+isi
11、n(x)+sin(y)sin(x)+sin(y)(+i)-(j+)+(k-)(+i)-(j+)+(k-)2 2)运算符的优先级)运算符的优先级 C51C51语言中,运算符的运算优先级共分为语言中,运算符的运算优先级共分为1515级,级,1 1级最高,级最高,1515级最低。在表级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。算符优先级相同时,则按运算符的结合性所规定的结合方向处理。3.3.强制类型转换强制类型转换强制类型转换的一般形式为:
12、强制类型转换的一般形式为:(类型说明符类型说明符)()(表达式表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:例如:(float)a/(float)a/*把把a a转换为实型转换为实型*/(int)(x+y)/(int)(x+y)/*把把x+yx+y的结果转换为整型的结果转换为整型*/4.4.自增、自减运算符自增、自减运算符 自增自增1 1运算符记为运算符记为“+”+”,其功能是使变量的值自增,其功能是使变量的值自增1 1。自减。自减1 1运算符记运算符记为为“-”-”,其功能是使变量值自减,其功能是使变量值
13、自减1 1。自增自增1 1、自减、自减1 1运算符均为单目运算,都具有右结合性。可有以下几种形式:运算符均为单目运算,都具有右结合性。可有以下几种形式:+i+i:i i自增自增1 1后再参与其他运算。后再参与其他运算。-i-i:i i自减自减1 1后再参与其他运算。后再参与其他运算。i+i+:i i参与运算后,参与运算后,i i的值再自增的值再自增1 1。i-i-:i i参与运算后,参与运算后,i i的值再自减的值再自减1 1。注意:在理解和使用上容易出错的是注意:在理解和使用上容易出错的是i+i+和和i-i-。特别是当它们出在较复杂特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此
14、应仔细分析。的表达式或语句中时,常常难于弄清,因此应仔细分析。7.1.6 7.1.6 预处理指令预处理指令 根据根据ANSIANSI的标准规定,预处理指令主要包括的标准规定,预处理指令主要包括#define#define、#error#error、#include#include、#if#if、#else#else、#endif#endif和和#undef#undef等。每个预处理指令均带有符等。每个预处理指令均带有符号号“#”#”。1.#define1.#define指令指令#define#define指令是一个宏定义指令,定义的一般形式为:指令是一个宏定义指令,定义的一般形式为:#defi
15、ne#define宏替换名字符串(或数值)宏替换名字符串(或数值)由由#define#define指令定义后,在程序中每次遇到该宏替换名时就用所定义指令定义后,在程序中每次遇到该宏替换名时就用所定义的内容代替它。例如,可用下面语句定义的内容代替它。例如,可用下面语句定义TRUETRUE表示数值表示数值1 1,FALSEFALSE表示表示0 0。#define TRUE 1#define TRUE 1#define FALSE 0#define FALSE 0 定义之后,一旦在源程序中使用了定义之后,一旦在源程序中使用了TRUETRUE和和FALSEFALSE,编译时会自动用,编译时会自动用1
16、1和和0 0代替。代替。需要说明的是,在宏定义语句后没有分号,程序中习惯用大写字符需要说明的是,在宏定义语句后没有分号,程序中习惯用大写字符作为宏替换名,而且常放在程序开头。作为宏替换名,而且常放在程序开头。2.#error2.#error指令指令 该指令用于程序的调试,当编译中遇到该指令用于程序的调试,当编译中遇到#error#error指令就停止编译。其指令就停止编译。其一般形式为:一般形式为:#error#error出错信息出错信息 出错信息不加引号,当编译器遇到这个指令时,显示下列信息并停出错信息不加引号,当编译器遇到这个指令时,显示下列信息并停止编译:止编译:FatalFatal:f
17、ilename linename error directivefilename linename error directive3.#include3.#include指令指令#include#include指令的作用是指示编译器将该指令所指出的另一个源文件指令的作用是指示编译器将该指令所指出的另一个源文件嵌入自身文件。嵌入自身文件。#include#include指令所在的程序中,文件应使用双引号或尖括号括起来。指令所在的程序中,文件应使用双引号或尖括号括起来。C C库函数的头文件一般用库函数的头文件一般用#include#include指令在程序开始处说明。例如:指令在程序开始处说明。例
18、如:#include#includestdio.hstdio.h4.#if4.#if、#else#else、#endif#endif指令指令#if#if、#else#else和和#endif#endif指令为条件编译指令,它的一般形式为:指令为条件编译指令,它的一般形式为:#if#if 常数表达式常数表达式语句段;语句段;#else#else语句段;语句段;#endif#endif上述结构的含义是:若上述结构的含义是:若#if#if指令后的常数表达式为真,则编译指令后的常数表达式为真,则编译#if#if到到#else#else之间的之间的程序段;否则编译程序段;否则编译#else#else到到
19、#endif#endif之间的程序段。例如:之间的程序段。例如:#define NUM 200#define NUM 200 main()main()#if MAX999#if MAX999printf(printf(Num999!nNum999!n););#else#elseprintf(printf(Num999!nNum999!n););#endif#endif 5.#undef5.#undef指令指令#undef#undef指令用来删除事先定义的宏定义,其一般形式为指令用来删除事先定义的宏定义,其一般形式为:#undef#undef 宏替换名宏替换名 例如:例如:#define FAL
20、SE 0#define FALSE 0#undef FALSE#undef FALSE7.2 C517.2 C51的函数的函数 函数是函数是C51C51语言的重要组成部分,是从标准语言的重要组成部分,是从标准C C语言中继承语言中继承而来的。而来的。C51C51语言不限制程序中的函数个数。任何一个完整的语言不限制程序中的函数个数。任何一个完整的C51C51程序都必须有且仅有一个主函数(程序都必须有且仅有一个主函数(mainmain函数),主函数是函数),主函数是C51C51程序的入口,所有的程序的入口,所有的C51C51程序都是从主函数开始执行的。程序都是从主函数开始执行的。为了有利于程序的模
21、块化,促进资源的共享,为了有利于程序的模块化,促进资源的共享,C51C51语言允许用语言允许用户使用自定义函数。同时,户使用自定义函数。同时,C51C51提供了大量的功能强大的库函提供了大量的功能强大的库函数。这些库函数都是编译系统自带的已定义好的函数,用户数。这些库函数都是编译系统自带的已定义好的函数,用户可以在程序中直接调用,而无须再自定义。合理使用库函数可以在程序中直接调用,而无须再自定义。合理使用库函数可以简化程序设计、加快程序执行速度。可以简化程序设计、加快程序执行速度。C51C51函数的定义通常包含以下内容:函数的定义通常包含以下内容:函数返回值类型函数返回值类型 函数名(形参表说
22、明)函数名(形参表说明)/*函数首部函数首部*/说明语句说明语句*函数体函数体 *执行语句执行语句 7.2.1 C517.2.1 C51函数的定义函数的定义 7.2.2 C517.2.2 C51函数的调用和参数传递函数的调用和参数传递 主调函数使用被调函数的功能,称为对被调函数的调用。函数调用主调函数使用被调函数的功能,称为对被调函数的调用。函数调用的基本形式是通过函数名和函数的参数。的基本形式是通过函数名和函数的参数。根据函数在主调函数中的作用,函数的调用方式,可以有以下两种根据函数在主调函数中的作用,函数的调用方式,可以有以下两种形式:形式:1.1.函数语句函数语句 被调函数在主调函数中,
23、以程序语句的方式出现。通常只完成一种被调函数在主调函数中,以程序语句的方式出现。通常只完成一种操作,不带函数会返回值。操作,不带函数会返回值。该函数调用非常简单,即在该函数调用非常简单,即在mainmain函数内调用函数函数内调用函数funcfunc,用于输出一串字用于输出一串字符。符。2.2.函数表达式函数表达式 调用函数后,取得函数的返回值,用于其他操作。调用函数后,取得函数的返回值,用于其他操作。7.2.3 C517.2.3 C51的库函数的库函数 C51C51可以使用大量标准可以使用大量标准C C语言的库函数,在用预处理器命令语言的库函数,在用预处理器命令#include#includ
24、e包含相应的头文件后,程序员就可以在程序中使用这些函数。包含相应的头文件后,程序员就可以在程序中使用这些函数。1 1)位移函数)位移函数 位移函数可以实现无符号字符型、无符号整型、无符号长整型变量的左位移函数可以实现无符号字符型、无符号整型、无符号长整型变量的左移或右移,其中左移函数包含:移或右移,其中左移函数包含:unsigned char _crol_(unsigned char val,unsigned char n);unsigned char _crol_(unsigned char val,unsigned char n);/*左移无符号字符型左移无符号字符型*/unsigned
25、int _irol_(unsigned int val,unsigned char n);unsigned int _irol_(unsigned int val,unsigned char n);/*左移无符号整型左移无符号整型*/unsigned int _lrol_(unsigned int val,unsigned char n);unsigned int _lrol_(unsigned int val,unsigned char n);/*左移无符号长整型左移无符号长整型*/这些函数的第一个参数表示要进行位移的变量,第二个参数表示要移这些函数的第一个参数表示要进行位移的变量,第二个参
展开阅读全文