资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
第11页 / 共41页
第12页 / 共41页
第13页 / 共41页
第14页 / 共41页
第15页 / 共41页
第16页 / 共41页
第17页 / 共41页
第18页 / 共41页
第19页 / 共41页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单片机应用系统设计,教学课件,*,第,5,章,MCS-51 C,语言程序设计,第5章 MCS-51 C语言程序设计,5.1 C,语言与,MCS-51,单片机,C,语言是一种通用的计算机程序设计语言,代码效率高,数据类型和运算符丰富,有良好的程序结构,适用于各种应用系统的程序设计,是目前使用较广的单片机编程语言。,本章重点介绍在单片机上使用,MCS-51 C,语言的特殊数据类型、存储模式、程序的结构、混合编程。,5.1 C语言与MCS-51单片机 C语言是一种通用的计,5.1.1 C,语言程序开发过程,一般的,C,语言开发套件中,包括编译器、连接器和符号转换程序。,编译器将源程序翻译为可重定位的,目标代码文件,(,也可产生等价的汇编语言程序,),;连接器将目标代码文件连接为,绝对目标文件,;符号转换程序可将绝对目标文件转换为,Intel,HEX,格式文件,,编程到程序存储器中运行。,若使用提供了集成开发环境,(Integrated Development Environment,,,IDE),的套件,则编辑、编译、连接、符号转换、甚至调试可在一个窗口中完成。如,American Automation,、,Auocet,、,BSO/TASKING,、,DUNFIELD SHAREWARE,、,KEIL/Franklin,等。,5.1.1 C语言程序开发过程 一般的C语言开发套件中,,3,5.1.2 C,语言的特点,C,语言是一种模块化、结构化程序设计语言,符合,ANSI C,标准,可以产生紧凑的目标码,具体优点:,(1),不必详细了解单片机的指令系统,(2),仅要求对,MCS-51,存储器结构有初步了解,(3),寄存器分配、不同存储器区域的寻址及数据类型等细节由编译程序管理,(4),程序具有规范的结构和固有的模块化思想,(5),运算符和关键字用接近于自然语言的方式表示,(6),提供包含大量标准子程序的函数库,具有较强的数据处理能力,(7),在对执行效率要求较高的场合,可以嵌入汇编,也可以与汇编语言协同开发,5.1.2 C语言的特点 C语言是一种模块化、结构化程序,4,5.1.3,单片机,C,语言的移植,C,语言在单片机中的应用移植面临的具体问题:,(1)MCS-51,存储器的哈佛结构,加上内部有位寻址空间,对存储器变量的使用提出了挑战。,(2),内部的数据存储器和程序存储器空间相对太小,而外部还可扩展存储容量,编译程序如何根据实际情况合理使用这些空间,(3),内部各功能单元采用特殊功能寄存器集中管理,在,C,语言中如何实现寄存器访问,(4)MCS-51,单片机派生种类繁多,硬件配置不统一,但是要求必须能够使用,C,语言操控所有硬件资源,(5)MCS-51,内部只有一个堆栈,且存储空间有限,传统的利用堆栈传递参数的方法难以奏效,5.1.3 单片机C语言的移植 C语言在单片机中的应用移,5,5.2,单片机,C,语言的扩充,MCS-51,单片机有着与通用,CPU,截然不同的体系结构、硬件资源和运算特性,针对单片机独有的一些功能特点,绝大多数的,MCS-51,的,C,语言编译程序对标准,C,语言进行了一些扩充,5.2 单片机C语言的扩充 MCS-51单片机有着与通用,6,5.2.1,C,语言运算符,算术运算符:,+,-,*,/,%,关系运算符:,=,=,=,!=,逻辑运算符:,!,&,|,赋值运算符:,*,=,、,/=,、,%=,、,+=,、,-=,、,=,、,&=,、,=,、,=,、,+,、,-,(,位移动、异或、位或,),强制运算符,强制转换,表达式中的类型转换,算术表达式中的运算转换,赋值转换,输出转换,函数调用转换,5.2.1 C语言运算符算术运算符:+,-,*,/,7,5.2.1,C,语言运算符,int,unsigned int,long int,double,float,char,short,存储长度较短,存储长度较长,总趋势:,算术表达式中的类型转换,转换规则,5.2.1 C语言运算符intunsigned intlon,8,5.2.2,数据类型,数据类型,位数,字节数,范围,bit,1,0,1,signed char,8,1,-128,+127,unsigned char,8,1,0,255,enum,枚举变量,8/16,1/2,-128,+127,或,-32768,+32767,signed short,16,2,-32768,+32767,unsigned short,16,2,0,65535,signed,int,16,2,-32768,+32767,unsigned,int,16,2,0,65535,signed,long,32,4,-2147483648,+21473647,unsigned long,32,4,0,4294967295,float/double,32/64,4/8,1.175494E-38,3.402823E+38,sbit,1,0,1,sfr,8,1,0,255,sfr16,16,2,0,65535,5.2.2 数据类型数据类型位数字节数范围bit101,9,5.2.2,数据类型,例:,unsignedchar,in_data,;8,位,unsigned long,log_time,;32,位,bit,ok_flag,;1,位,5.2.2 数据类型例:,10,5.2.3,存储器类型,存储器类型,与硬件存储器空间的对应关系,code,程序存储器;使用,MOVC A+DPTR,指令访问,data,直接寻址的内部数据存储器;访问速度最快,(128,字节,),idata,间接访问的内部数据存储器;可以访问所有的内部存储器空间,(256,字节,),bdata,可位寻址的内部数据存储器;可以字节方式也可以位方式访问,(16,字节,),xdata,外部数据存储器,(64KB),,通过,MOVX DPTR,指令访问,pdata,外部数据存储器的一页,(256,字节,),,使用,MOVX Ri,指令访问,5.2.3 存储器类型存储器类型与硬件存储器空间的对应关系,11,5.2.3,存储器类型,例 指出以下变量的存储位置,char data,var1,;,char code,text,=ENTER PARAMETER;,unsigned long xdata,array100;,float idata,x,y,z,;,unsigned int pdata,dimension,;,unsigned char xdata,vector1044;,char bdata,flags,;,5.2.3 存储器类型例 指出以下变量的存储位置,12,5.2.4,存储模式,1.SMALL,模式:,所有的变量默认存放于内部,RAM,中,相当于定义时使用了,data,类型,所有对象,(,包括堆栈,),必须能够存入内部,RAM,的,128,字节,5.2.4 存储模式1.SMALL模式:,13,5.2.4,存储模式,2.COMPACT,模式:,所有变量默认存放于外部,RAM,的一页中,相当于定义时使用了,pdata,类型,这种存储模式可以满足最多,256,字节的变量,对变量的访问必须使用间接寻址方式,编译程序产生的机器码使用,R0,和,R1,作为变量的指令操作数,5.2.4 存储模式2.COMPACT模式:,14,5.2.4,存储模式,3.LARGE,模式:,所有变量默认存放于外部,RAM,中,最多可以有,64KB,,相当于定义时使用了,xdata,类型,数据指针,DPTR,用来寻址变量,这种访问方式效率不高,特别是当变量长度超过一个字节时,5.2.4 存储模式3.LARGE模式:,15,5.2.4,存储模式,现在常用的,C,编译程序通常允许使用混合模式,不管存储模式如何,把经常使用的变量强制存放于内部,RAM,。大块数据则存放于外部,RAM,,而将其指针存放于内部,RAM,中,可以使用存储器类型说明符指定,5.2.4 存储模式 现在常用的C编译程序通常允许使用混,16,5.2.5,硬件资源访问,1.,特殊功能寄存器:,使用,sfr,、,sfr16,和,sbit,数据类型访问特殊功能寄存器,特殊功能寄存器中的位,使用,sbit,类型可以定义可位寻址,SFR,中的位,sfr,P0,=0 x80;,地址,sfr,ACC,=0 xE0;,实际地址,sbit,CY,=0 xD7;,位地址,5.2.5 硬件资源访问1.特殊功能寄存器:,17,5.2.5,硬件资源访问,2.,内部,RAM,中的位寻址资源,定义一个变量时若指定了,bdata,存储器类型,,C,编译程序会在内部,RAM,的位寻址区为其分配存储空间,这个变量中的位也可以单独访问,但必须先行定义,unsigned char bdata,data8,;,位寻址区变量,sbit,lsb,=data80;data8,的最低位,5.2.5 硬件资源访问2.内部RAM中的位寻址资源,18,5.2.5,硬件资源访问,3.,指定绝对地址的变量,使用,_at_,满足这一要求,其格式如下。,存储器类型,变量类型 变量名,_at_,地址常数,;,xdataunsigned char,buff,_at_ 0 x2000;,5.2.5 硬件资源访问3.指定绝对地址的变量,19,5.2.5,硬件资源访问,4.,存储器绝对地址的访问,absacc.h,中包含了一些宏定义,使用这些宏可以显示使用存储器绝对地址,如,#defineCBYTE(unsigned char,volatile code,*)0),CBYTE,代表程序存储器地址,0000H,的字节单元,把每个存储区定义成一个字节或字数组,对指定地址的访问使用数组元素引用的形式,5.2.5 硬件资源访问4.存储器绝对地址的访问,20,5.2.6,指针,1.,基于存储器的指针,与源程序中存储器类型有关,编译时即可确定其长度。这种指针的长度可以为,1,个字节,(data*,、,idata*,、,pdata*),或,2,个字节,(code*,、,xdata*),chardata*,str,;,指向,data,字符的指针,intxdata*,num,;指向整形数据,longcode*,pow,;,指向长整形代码,5.2.6 指针1.基于存储器的指针,21,5.2.6,指针,chardata*,str,;,指向,data,字符的指针,intxdata*,num,;指向整形数据,longcode*,pow,;,指向长整形代码,上述三个指针变量长度分别为,1,、,2,、,2,字节。指针变量自身所占用的存储位置还能定义,chardata*xdata,str,;,intxdata*data,num,;,longcode*idata,pow,;,5.2.6 指针 chardata*str;指向,22,5.2.6,指针,2.,通用指针,与标准,C,语言指针的定义相同,使用,3,个字节存储指针内容,(,地址值,),。第一个字节存放存储器类型,第二和第三节分别存放该指针所指对象地址的高字节和低字节,5.2.6 指针2.通用指针,23,5.2.6,指针,2.,通用指针,一般指针包括,3,个字节:,1,个字节存储类型和,2,个字节偏移地址,即,地址,+0,+1,+2,内容,存储器类型,偏移地址高位字节,偏移地址低位字节,其中,第一字节代表了指针的存储器类型,存储器类型编码如下:,存储器类型,idata,xdata,pdata,data,code,值,1,2,3,4,5,5.2.6 指针2.通用指针地址+0+1+2内容存储器类型,24,5.2.6,指针,char*,str,;,指向字符的指针,int*,num,;,指向整形数据的指针,第,1,字节放存储器类型,,2,、,3,字节放该指针所指对象地址的高、低字节。
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6