7.2 C51的存储类型
存储类型是指程序中数据(变量、常量和代码等)在8051硬件系统中的存放方式。单片机C51语言中支持code、data、bdata、idata、pdata和xdata 6种不同的存储类型。不同的存储类型对应于不同的存储区域和寻址方式。8051系列单片机的硬件系统中数据的存储类型与对应存储区的关系如表7.1所示。
KeilµVision3编译器完全支持8051系列单片机的硬件结构,可以访问8051单片机硬件系统的所有存储区域,并将数据定位存放在相应的硬件存储区域中。下面分别对这几种存储类型进行介绍。
7.2.1 code存储类型
使用code存储类型定义数据时,编译器会将其定义在程序代码储存器(ROM或者EPPROM)中。该code存储区使用16位寻址,寻址空间可达64KB。一般用来存放可执行的代码段,也可以存放数据。将变量设置为code存储类型的一般形式如下。
标识符code变量名
其中,标识符为变量的类型,code为关键字,表示存储类型为code,示例如下。
char code string[]=“Good Morning”;//在code区定义存储字符串数组
在单片机的code存储区,还可以存放代码的储存查询表,通过数据指针DPTR和程序计数器加上累加器的偏移量进行寻址指令。首先,将查询表首地址装入指针DPTR中,将表中的寻址偏移量装入累加器中。然后,在执行程序的过程中,将这两者相加,便查询到指定的数据。这样可以大大缩短指令周期,提高程序运行速度。
注意由于code存储区为ROM或EPPROM,将数据保存在code存储区后,这部分数据在程序运行期间是不能修改的。因此,一般可将程序运行时不修改的查询表之类的数据保存在该存储区。