单片机C语言变量定义.pdf

上传人:wj151****6093 文档编号:72041933 上传时间:2023-02-08 格式:PDF 页数:4 大小:271.94KB
返回 下载 相关 举报
单片机C语言变量定义.pdf_第1页
第1页 / 共4页
单片机C语言变量定义.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《单片机C语言变量定义.pdf》由会员分享,可在线阅读,更多相关《单片机C语言变量定义.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机 C 语言变量定义 Document number【980KGB-6898YT-769T8CB-246UT-18GG08】单片机教程单片机教程,51,51 单片机单片机 C C 语言学习语言学习第六课变量上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:存储种类数据类型存储器类型变量名表在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(regis

2、ter),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课变量的存储中进一步进行学习。而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在 C51 硬件系统中所使用的存储区域,并在编译时准确的定位。表 61 中是 KEILuVision2 所能认别的存储器类型。注意的是在 AT89C51 芯片中 RAM 只有低 128 位,位于 80H 到 FFH 的高 128 位则在 52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二AT89C51

3、 特殊功能寄存器列表存储器类型说明data直接访问内部数据存储器(128 字节),访问速度最快bdata可位寻址内部数据存储器(16 字节),允许位与字节混合访问idata间接访问内部数据存储器(256 字节),允许访问全部内部地址pdata分页访问外部数据存储器(256 字节),用 MOVXRi 指令访问xdata外部数据存储器(64KB),用 MOVXDPTR 指令访问code程序存储器(64KB),用 MOVCA+DPTR 指令访问表 61存储器类型如果省略存储器类型,系统则会按编译模式 SMALL,COMPACT 或 LARGE 所规定的默认存储器类型去指定变量的存储区域。无论什么存储

4、模式都可以声明变量在任何的 8051 存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显着的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。SMALL 存储模式把所有函数变量和局部数据段放在 8051 系统的内部数据存储区这使访问数据非常快,但 SMALL 存储模式的地址空间受限。在写小型的应用程序时,变量和数据放在 data 内部数据存储器中是很好的因为访问速度快,但在较大的应用程序中 data 区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。COMPACT 存储模式中所有的函数和程序变量和局部数据段

5、定位在 8051 系统的外部数据存储区。外部数据存储区可有最多 256 字节(一页),在本模式中外部数据存储区的短地址用R0/R1。LARGE 存储模式所有函数和过程的变量和局部数据段都定位在 8051 系统的外部数据区外部数据区最多可有 64KB,这要求用 DPTR 数据指针访问数据。之前提到简单提到 sfr,sfr16,sbit 定义变量的方法,下面我们再来仔细看看。sfr 和 sfr16 可以直接对 51 单片机的特殊寄存器进行定义,定义方法如下:sfr 特殊功能寄存器名=特殊功能寄存器地址常数;sfr16 特殊功能寄存器名=特殊功能寄存器地址常数;我们可以这样定义 AT89C51 的

6、P1 口sfrP1=0 x90;/定义 P1I/O 口,其地址 90Hsfr 关键定后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如 P1 口可以用 P1 为名,这样程序会变的好读好多。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80HFFH),具体可查看附录中的相关表。sfr 是定义 8 位的特殊功能寄存器而 sfr16 则是用来定义 16 位特殊功能寄存器,如 8052 的 T2 定时器,可以定义为:sfr16T2=0 xCC;/这里定义 8052 定时器 2,地址为 T2L=CCH,T2H=CDH用 sf

7、r16 定义 16 位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。注意的是不能用于定时器 0 和 1 的定义。sbit 可定义可位寻址对象。如访问特殊功能寄存器中的某位。其实这样应用是经常要用的如要访问 P1 口中的第 2 个引脚 P1.1。我们可以照以下的方法去定义:(1)sbit 位变量名位地址sbitP1_1=Ox91;这样是把位的绝对地址赋给位变量。同 sfr 一样 sbit 的位地址必须位于 80H-FFH 之间。(2)Sbit 位变量名特殊功能寄存器名位位置sftP1=0 x90;sbitP1_1=P11;/先定义一个特殊功能寄存器名再指定位变量名

8、所在的位置当可寻址位位于特殊功能寄存器中时可采用这种方法(3)sbit 位变量名字节地址位位置sbitP1_1=0 x901;这种方法其实和 2 是一样的,只是把特殊功能寄存器的位址直接用常数表示。在 C51 存储器类型中提供有一个 bdata 的存储器类型,这个是指可位寻址的数据存储器,位于单片机的可位寻址区中,可以将要求可位录址的数据定义为 bdata,如:unsignedcharbdataib;/在可位录址区定义 ucsignedchar 类型的变量 ibintbdataab2;/在可位寻址区定义数组 ab2,这些也称为可寻址位对象sbitib7=ib7/用关键字 sbit 定义位变量来

9、独立访问可寻址位对象的其中一位sbitab12=ab112;操作符后面的位位置的最大值取决于指定的基址类型,char0-7,int0-15,long0-31。下面我们用上一课的电路来实践一下这一课的知识。同样是做一下简单的跑马灯实验,项目名为 RunLED2。程序如下:sfrP1=0 x90;/这里没有使用预定义文件,sbitP1_0=P10;/而是自己定义特殊寄存器sbitP1_7=0 x907;/之前我们使用的预定义文件其实就是这个作用sbitP1_1=0 x91;/这里分别定义 P1 端口和 P10,P11,P17 引脚voidmain(void)unsignedinta;unsignedcharb;dofor(a=0;a50000;a+)P1_0=0;/点亮 P1_0for(a=0;a50000;a+)P1_7=0;/点亮 P1_7for(b=0;b255;b+)for(a=0;a10000;a+)P1=b;/用 b 的值来做跑马灯的花样P1=255;/熄灭 P1 上的 LEDfor(b=0;b255;b+)for(a=0;a10000;a+)/P1_1 闪烁P1_1=0;for(a=0;a10000;a+)P1_1=1;while(1);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁