单片机数据存储型和申明方法.docVIP

  • 9
  • 0
  • 约 6页
  • 2017-03-09 发布于贵州
  • 举报
单片机数据存储型和申明方法

?一.51的存储器结构 笼统来说单片机片内存储器分为CODE区和data区,cpu从code区读取指令,对data区的数据进行运算处理。前者在程序运行中为只读,一般为FLASH,用来放置程序代码和一些只读的数据(如字模表之类),后者可以随机读写,用来存放程序运行中的临时数据,如局部变量或全局变量,全局变量一直占用着RAM内存,而局部变量在使用完后会自动清除RAM空间。当然在片外,可以外扩FLASH和RAM(此时称为XRAM,因为寻址方式不一样),外扩的大小与单片机寻址能力有关。有的单片机将外扩RAM封装在片内,如AT89C51,所以有了所谓的片内XRAM。 二.变量的存储模式 变量是一种在程序执行过程中能不断变化的量。它有数据类型、存储类型、存储器模式和有效范围四种属性。C语言规定每个变量必须有一个标识符作为变量名,在使用一个变量前,必须先对变量进行定义,指出其数据类型和存储模式。以便编译系统为其分配存储单元。在C51中对变量进行定义的格式如下: [存储类型] 数据类型 [存储器类型] 变量名表,如auto char data i;存储类型指明变量的存储区域,而变量的存储类型和变量在程序中说明的位置决定了它的作用范围。存储类型含义与C语言相同。存储类型有四种:auto型、extern型、static型、register型,缺省为auto型(看来我一直都是凹凸型啊)。其区别如下: auto:自动变量。存储在内存的堆栈区,属于临时性存储变量,并不长期占用内存,可以被多次覆盖。 register:寄存器变量。register与auto一样属于自动类别。区别在于register的值保存在CPU的寄存器中。计算机中只有寄存器中的数据才能直接参与运算,而一般变量是放在内存中的,变量参加运算是,需要先把变量从内存中取到寄存器中,然后计算。所以一般把使用最频繁的变量定义成register变量。register变量只能在函数中定义,并只能是int和char型。 static:静态变量。声明静态变量的,也就是C语言中的私有成员.如果在一个函数中声明一个静态变量,静态变量的空间不在栈里面,而是存储在静态空间里,这个函数结束后,静态变量的值依旧存在,内存不会收会此变量占用的内存空间,而是等整个程序都结果后才收回静态变量空间。 extern:外部类型。extern用来声明外部变量,可以用于此程序外的程序中(可在两个C文件间交叉使用),类型要一致。变量在数据运行时被分配了一定的内存空间,该空间在整个运行程序中,只要程序存在,自始自终都被该变量使用,即其值始终不变。 数据类型就不用多说了,bit,byte,char什么的。 存储器类型与单片机的寻址方式有关,影响程序的执行效率。下表是传统C51的存储器类型,不同单片机类型有所差别。?? 空间名称 地址范围 说明 DATA D:00H~7FH 片内RAM直接寻址区 BDATA D:20H~2FH 片内RAM位寻址区 IDATA I:00H~FFH 片内RAM间接寻址区 XDATA X:0000H~FFFFH 64K片外RAM数据区 CODE C:0000H~FFFFH 64K片内外ROM代码区 BANK0~BANK31 B0:0000H~FFFFH : : B31:0000H~FFFFH 分组代码区,最大可扩展32X64KB ROM,应该只能以BANK为单位读写。 简单解释一下:uchar bdata LED _at_ 0x20; sbit led_7 led^7;//用关键字sbit定义位变量来独立访问可寻址位对象 int bdata ab[2];//在可位寻址区定义数组ab[2] sbit ab12 as[1]^12; 操作符“^”后面的位位置的最大值取决于指定的基址类型char 0-7,int 0-15,long 0-31。 定义变量时如果省略了“存储器类型”,则按编译模式SAMLL, COMPACT,LARGE所规定的默认存储器类型确定变量的存储区域, #pragma 预编译命令,可以指定函数的默认存储器模式。 C51编译器的三种存储器模式 默认的存储器类型 对变量的影响如下: ?? 1. SMALL:变量被定义在8051单片机的内部数据存储器中,因此对这种变量的访问速度最快。另外,所有的对象,包括堆栈,都必须嵌入内部数据存储器,而堆栈的长度是很重要的,实际栈长取决于不同函数的嵌套深度。 ?? 2. COMPACT:变量被定义在分页外部数据存储器中,外部数据段的长度可达256字节。这时对变量的访问是通过寄存器间接寻址 MOVX@Ri 进行的,堆栈位于8051单片机内部数据存储器中。采用这种编译模式时,变量的高8位地址由P2口确定。 ?? 3. LARGE:变量被定义在外部数据存储器中 最大

文档评论(0)

1亿VIP精品文档

相关文档