欢迎来到天天文库
浏览记录
ID:38106199
大小:33.00 KB
页数:4页
时间:2019-06-06
《C51的存储种类和存储器类型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C51的存储种类和存储器类型1.自动变量(auto)charchr=‘a’;等价于autocharchr=‘a’;注意自动变量的作用域在main函数和符合语句中分别定义了一个同名的字符型自动变量并输出,结果证明符合语句中自动变量的作用域仅限于符合语句中。#include"stdio.h"voidmain(){charchr='a';{charchr='b';printf("%c",chr);}printf("%c",chr);}程序运行结果为ba2.外部变量(extern)C51语言允许将大型程序分解为若干个独立放入程序模块文件,各个模块可以分别进行编译然后再连接在一起,在这
2、种情况下,如果某个变量要在其他程序模块文件中使用,只要在一个程序文件中将该变量定义为全局变量,而在其他程序模块文件中使用“extern”说明该变量时已经被定义过的变量就可以了。在整个程序中都具有相同名字的外部变量只能在一处进行定义和初始化。#include"stdio.h"charchr_1='a';voidmain(){externcharchr_2;printf("%c",chr_1);printf("%c",chr_2);}charchr_2='b';程序运行结果abchr-1是一个全局变量,不需要使用extern进行声明,而chr-2在定义前被使用,因此使用前必须使用
3、extern进行声明。1.静态变量(static)分为内部静态变量(又称局部静态变量)和外部静态变量(又称全局静态变量)内部静态变量是在函数内部定义的,与自动变量相比,其作用域同样限于定义内部静态变量的函数内部,但内部静态变量始终是存在的,其初值只是在进入时赋值一次,退出函数后变量的值仍然保存但不能访问。内部静态变量放入用法以及与自动变量的区别#include"stdio.h"voidmain(){chari;for(i=0;i<3;i++){staticints_int=1;inta_int=1;printf("s_int=%d",s_int);printf("a_int=%d",
4、a_int);printf("");s_int=s_int+1;a_int=a_int+1;}}程序运行结果s_int=1a_int=1s_int=2a_int=1s_int=3a_int=1在复合语句中分别定义一个内部静态变量和自动变量,进入复合语句中3次,结果显示由于退出复合语句时内部静态变量仍然存在并保存其值,自动变量则不复存在,因此内部静态变量能够累加,而自动变量则不能。2.寄存器变量在变量名前加上存储器种类符号“register”。不推荐存储器类型存储器类型与物理存储空间的对应关系DATA直接寻址片内数据存储器的低128字节,访问速度快BDATADATA区中可位寻址区域
5、20H~2FH(16字节),允许位与字节混合访问IDATA间接寻址片内数据存储区(256字节),可访问片内全部RAM空间PDATA外部数据存储区的开头256字节,通过P0端口的地址对其访问XDATA片外数据存储区(64KB),通过DPTR访问CODE程序存储区(64KB),通过DPTR访问1..DATA区是存放临时性传递变量或使用频率较高的变量的理想场所2.SDATA区其实就是DATA区中的位寻址区Unsignedintbdatastatus;//在BDATA区定义一个变量Sbitstatus_1=status^1;不允许在BDATA区声明float和double型的变量3.IDAT
6、A区8051系列的一些单片机如8052附有128字节的内部RAM(80H~FFH),被称为IDATA,因为IDATA区的地址和SFR的地址重合,所以通过寻址方式来区分二者,IDATA区只能通过间接寻址来访问。IDATA区也可存放使用比较频繁的变量,使用寄存器作为指针进行寻址。4.PADTA区和XDATA区5.CODE区用来存放可执行代码,还有其他非易失性信息,如查询表。存储模式1.(SMALLA)小模式在该模式下所有变量都默认位于片内数据存储器,这和使用data指定存储器类型的作用一样。此模式对变量访问的效率很高,但所有的数据对象和堆栈的总大小不能超过内部RAM的大小。2.(COMP
7、ACT)紧凑模式所有变量都默认位于片外数据存储器的一页(256字节),但堆栈位于片内数据存储器内,这和使用PDATA指定存储器类型的作用一样,该模式适用于变量不超过256字节的情况。地址的高字节往往通过端口2输出,其值必须在启动代码中设置。这种模式不如SMALL模式高效,对变量访问的速度要慢一些。3.(LARGE)模式所有变量都默认位于片外数据存储器内,这和使用XDATA指定存储器类型的作用一样,使用数据指针DPTR进行寻址,效率较低,会产生更多代码。
此文档下载收益归作者所有