新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Keil C51中变量的使用

Keil C51中变量的使用

作者:时间:2011-06-23来源:网络收藏

引言
8051内核单片机是一种通用单片机,在国内占有较大的市场份额。在将C语言用于51内核单片机的研究方面,公司做得最为成功。由于51内核单片机的存储结构的特殊性, 与标准C有所不同。正确地,有利于获得高效的目标代码。下面详细介绍 方法。

1 CPU存储结构与变量的关系
变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同。
标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CPU内部有寄存器,外部有存储器,寄存器的访问速度大大高于存储器的访问速度。在标准C中,不加特别定义的变量是放在存储器中的,使用register可以强制变量存储在寄存器中,对于使用特别频繁且数量不多的变量可以选用这种存储模式,以获得更高的工作效率。
相比之下,51内核单片机的存储结构则显得有些怪异,它的存储空间有3个:程序存储器空间(64 KB含片内、片外)、片外数据存储器空间(64KB)、片内数据存储器及特殊功能寄存器空间。它没有真正意义上的寄存器,它的寄存器其实是片内数据存储器(如R0~R7)和特殊功能寄存器(如A、B等)中的一部分。因此,在Keil 中使用变量就和标准C有很大不同。

2 Keil C51变量分析
Keil C51支持标准C原有的大多数变量类型,但为这些变量新增了多种存储类型,也新增了一些标准C没有的变量。
2.1 Keil C51新增的变量存储类型
Keil C51中定义变量的格式如下:
[存储种类]数据类型[存储类型]变量名表;
其中,[存储类型]是标准C中没有的,[存储类型]共有6种,分别介绍如下:
①data。将变量存储在片内可直接寻址的数据存储器中。使用这种存储模式,目标代码中对变量的访问速度最快。
②bdata。将变量存储在片内可位寻址的数据存储器中。在目标代码中变量可以方便地进行位处理,在不进行位处理时与data相同。
③idata。将变量存储在片内间接寻址的数据存储器中。在52内核中,当片内直接寻址数据存储器不够用时,可以使用128字节间接寻址数据存储器,访问速度一般较data要慢一些,但具有最大的片内数据存储器空间;在51内核中因无单独的间接寻址数据存储器区,idata与data无区别。
④xdata。将变量存储在片外数据存储器中。目标代码中只能使用“MOVX A,@DPTR”和“MOVX@DPTR,A”指令访问变量,访问速度最慢,但存储空间最大(64KB)。
⑤pdata。将变量存储在片外数据存储器中的第一页(00H~FFH)中。目标代码中可以使用“MOVX A,@Ri”和“MOVX@Ri,A”指令访问变量,访问速度与xdata相同,存储空间为256字节。
⑥code。将变量存储在程序存储器中。目标代码中只能使用MOVC指令访问变量,因变量存储在程序存储器中,具有非易失性且为只读。
2.2 Keil C51新增的指针变量存储类型
Keil C51中的指针变量形式如下:
数据类型[数据存储类型]*[指针存储类型]标识符;
其中,[数据存储类型]和[指针存储类型]都是标准C中没有的。[数据存储类型]定义数据(即寻址对象)存储的空间,[指针存储类型]定义指针自身存储的空间。若不使用[数据存储类型],则指针为一般指针,占用3个字节;若使用[数据存储类型]则指针为基于存储器的指针,占用1~2个字节。
2.3 Keil C51新增的变量类型
bit:位变量。存储在片内数据存储器的可位寻址字节(20H~2FH)的某个位上,这个变量在实时控制中具有很高的实用价值。
sfr:特殊功能寄存器变量。存储在片内特殊功能寄存器中,用来对特殊功能寄存器进行读写操作。
sbit:特殊功能寄存器位变量。存储在片内特殊功能寄存器的可位寻址字节(地址可以被8整除者)的某个位上,用来对特殊功能寄存器的可位寻址位进行读写操作。
sbitl6:16位特殊功能寄存器变量。存储在片内特殊功能寄存器的连续2个字节的低地址上,这个变量类型很少使用。
以上这些Keil C51中新增的变量类型,不支持数组和指针操作。

本文引用地址:http://www.eepw.com.cn/article/172665.htm

存储器相关文章:存储器原理



上一页 1 2 3 下一页

关键词: 使用 变量 C51 Keil

评论


相关推荐

技术专区

关闭