KeilC51编译器及其应用课件_第1页
KeilC51编译器及其应用课件_第2页
KeilC51编译器及其应用课件_第3页
KeilC51编译器及其应用课件_第4页
KeilC51编译器及其应用课件_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

KeilC51编译器及其应用C51概述

MCS-51单片机的映射

KeilC51编译器的使用

C51概述

用C语言的优势:1、寄存器的分配以及各种变量和数据的寻址都由编译器完成。2、程序拥有了正式的结构,并且能被分成多个单独的函数。这使整个应用系统的结构变得清晰,同时让源代码变得可重复使用。3、选择特定的操作符来操作变量的能力提高了源代码的可读性。4、可以运用和人的思维很接近的词汇和算法表达式。5、编写程序和调试程序的时间得到很大程度的缩短。6、C运行连接库包含一些标准的子程序。7、由于程序的模块结构技术,使得现有的程序段可以很容易的包含到新的程序中去。

MCS-51单片机的映射

KeilC51的数据类型MCS-51单片机的映射KeilC51存储类型Code:程序空间(64Kbytes),通过MOVC@A+DPTR访问。Data:直接访问的内部数据存储器,访问速度最快(128bytes)。Idata:间接访问的内部数据存储器,可以访问所有的内部存储器空间。Bdata:可位寻址的内部数据存储器,可以字节方式也可以位方式访问。Xdata: 外部数据存储器(64Kbytes),通过MOVX@DPTR访问。Pdata:分页的外部数据存储器(256bytes),通过MOVX@Ri访问。 MCS-51单片机的映射存储模式1)小(SMALL)模式:所有变量都默认在8051的内部数据存储器中。这和用data显式定义变量起到相同的作用。2)紧凑(COMPACT)模式: 此模式中,所有变量都默认在8051的外部数据存储器的一页中。地址的高字节往往通过Port2输出。这和用pdata显式定义变量起到相同的作用。这种限制来自于间接寻址所使用的R0,R1(MOVX@Ri)。3)大(LARGE)模式: 在大模式下,所有的变量都默认在外部存储器中(xdata)。这和用xdata显式定义变量起到相同的作用。数据指针(DPTR)用来寻址。MCS-51单片机的映射KeilC51中的变量定义1、在变量的声明中,可以包括存储器类型和signed或unsigned属性。如:1)chardatavar1;2)charcodetext[]="ENTERPARAMETER";3)unsignedlongxdataarray[100];4)floatidatax,y,z;MCS-51单片机的映射KeilC51中的变量定义5)unsignedintpdatadimension;6)unsignedcharxdatavector[10][4][4];7)charbdataflags;MCS-51单片机的映射2、位变量(bit):与MCS-51硬件特性操作有关的可以定义成位变量。位变量定位在MCS-51单片机的片内RAM的位寻址空间。3、整型变量(int):整型变量的长度为16位,占2个字节,在存储器中的存放格式为高位在低地址字节,低位在高地址字节。4、浮点变量(float):浮点变量的长度为32位,占4个字节,MCS-51单片机的映射5、特殊功能寄存器(sfr、sfr16、sbit)sfr:字节寻址。比如sfrP0=0x80;表示PO口地址为80H,“=”后为80H~FFH之间的常数。sfr16:字寻址。如sfr16T2=0xCC;指定Timer2口地址T2L=CCHT2H=CDH。sbit:位寻址。如sbitEA=0xAF;指定第0xAF位为EA,即中断允许。还可以有如下定义方法:sbit0V=PSW^2;(定义0V为PSW的第2位,当然需要先有PSW定义。)sbit0V=0XDO^2;(同上)MCS-51单片机的映射C51中的指针1)通用指针通用或未定型的指针的声明和标准C语言中一样。如:char*s;字符指针int*numptr;整型指针long*state;长整型指针通用指针总是需要三个字节来存储。第一个字节是用来表示存储器类型,第二个字节是指针的高字节,第三字节是指针的低字节。通用指针可以用来访问所有类型的变量,而不管变量存储在哪个存储空间中。因而许多库函数都使用通用指针。通过使用通用指针,一个函数可以访问数据,而不用考虑它存储在什么存储器中。通用指针很方便,但是也很慢。在所指向目标的存储空间不明确的情况下,它们用的最多。MCS-51单片机的映射C51中的指针2)存储器指针存储器指针或类型确定的指针在定义时包括一个存储器类型说明,并且总是指向此说明的特定存储器空间。例如:chardata*str;指向内RAM低128字节的字符指针intxdata*numtab;指向外RAM的整型指针longcode*powtab;指向程序存储区的长整型指针正是由于存储器类型在编译时已经确定,通用指针中用来表示存储器类型的字节就不再需要了。指向idata,data,bdata和pdata的存储器指针用一个字节保存,指向code和xdata的存储器指针用两个字节保存。使用存储器指针比通用指针效率要高,速度要快。当然,存储器指针的使用不是很方便。在所指向目标的存储空间明确并不会变化的情况下,它们用的最多。MCS-51单片机的映射C51中的函数C51中函数的定义和使用与标准C基本相同,但对递归调用有所不同,C51编译器采用一个扩展关键字reentrant作为定义函数的选项,需要将一个函数定义为再入函数时,只要在函数名的后面加上关键字reentrant即可:函数类型函数名(形式参数)[reentrant]再入函数可被递归调用,无论何时,包括中断服务函数在内的任何函数个都可调用再入函数。与非再入函数的参数传递和局部变量的存储分配方法不同,C51编译器为再入函数生成一个模拟栈,通过这个模拟栈来完成参数传递和存放局部变量。模拟栈所在的存储器空间根据再入函数存储器模式的不同,可以是DATA、PDADA或XDATA存储空间。当程序中包含有多种存储器模式的再入函数时,C51编译器为每种模式单独建立一个模拟栈并独立管理各自的栈指针。MCS-51单片机的映射对于再入函数的规定:(1)再入函数不能传送bit类型的参数,也不能定义一个局部位变量,再入函数不能包括位操作以及8051系列单片机的可位寻址区。(2)在编译时,在存储器模式的基础上为再入函数在内部或外部存储器中建立一个模拟栈区,称为再入栈。在small模式下,再入栈位于idata区;在compact模式下,再入栈位于pdata区;在large模式下,再入栈位于xdata区。再入函数的局部变量及参数都被放在再入栈中,从而使再入函数可以进行递归调用。而非再入函数的局部变量被放在再入栈之外的暂存区域,如果对非再入函数引行递归调用,则上次调用时使用的局部变量数据将被覆盖。(3)在同一个程序中可以定义和使用不同存储器模式的再入函数,任意模式的再入函数不能调用不同模式的再入函数,但可以调用非再入函数。(4)在参数的传递上,实际参数可以传递给间接调用的再入函数。无再入属性的间接调用函数不能包含调用参数,但是可以使用定义的全局变量来进行参数传递。(5)采用函数的递归调用可使程序的结构紧凑,但是递归调用要求采用再入函数,以便利用再入栈来保存有关的局部变量数据,从而要占据较大的内存空间。另外,递归调用时对函数的处理速度比较慢,因此一般情况下应尽量避免采用函数的递归调用,定义函数时应尽量避免使用再入属性。KeilC51编译器的使用

KeilC51的组成及各部分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论