C51的数据结构.ppt

上传人:夺命阿水 文档编号:225226 上传时间:2023-02-27 格式:PPT 页数:46 大小:643.50KB
返回 下载 相关 举报
C51的数据结构.ppt_第1页
第1页 / 共46页
C51的数据结构.ppt_第2页
第2页 / 共46页
C51的数据结构.ppt_第3页
第3页 / 共46页
C51的数据结构.ppt_第4页
第4页 / 共46页
C51的数据结构.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《C51的数据结构.ppt》由会员分享,可在线阅读,更多相关《C51的数据结构.ppt(46页珍藏版)》请在课桌文档上搜索。

1、C51的数据结构,C51变量定义的四个要素,存储种类,一、自动变量(auto)在函数内部定义的变量,退出函数后,分配给该变量的存储单元即自行消失(局部变量)。二、外部变量(extern)在函数外部定义的变量,可始终保持变量的数值(全局变量)。,【强调】一个外部变量只能被定义一次,在定义文件之外的地方使用时需用extern进行声明。,三、静态变量(static)静态局部变量/静态全局变量四、寄存器变量(register)以寄存器为存储空间的变量*若省略存储种类选项,则变量默认为自动变量,基本数据类型,10,10,10,10,C51扩充数据类型,C51扩充数据类型:bit、sfr或sfr16、sb

2、it,sfr或sfr16型,sfr定义特殊功能寄存器SFR的地址,语法规则如下:sfr 或 sfr16 sfr_name=字节地址常数;例如,sfr P0=0 x80;/定义P0口地址80Hsfr PCON=0 x87;/定义PCON地址87H sfr16 DPTR=0 x82;/定义DPTR的低端地址82H,有些新型的单片机,有些新增的寄存器在Keil C的包含文件夹“inc”里可能没有,这是就需要在程序的最前面用此方法定义。,如宏晶公司的单片机STC12C5A60S中为一个称作AUXR的寄存器,在内部RAM中的地址为0 x8E,可定义如下:sfr AUXR=0 x8E;这种定义以后,在程序

3、中就可对AUXR进行操作。,sbit型,sbt型是能够按位寻址的特殊功能寄存器中位变量。其定义的一般格式为:sbit位变量名 位地址表达式,位地址表达式有三种形式,直接位地址;特殊功能寄存器名带位号;字节地址带位号。,1、sbit bit_name=位地址常数;,将位于SFR字节地址内的绝对位地址定义为位变量名。例如,sbit CY=0 xD7;,2、sbit bit_name=sfr_name 位位置;,将已有定义的SFR的07位定义为位变量名。例如:sfr PSW=0 xD0;sbit CY=PSW7;,3、sbit bit_name=sfr字节地址 位位置;,将SFR字节地址的相对位地址

4、定义为位变量名。例如:sbit CY=0 xD07;以上三种定义对于CY来讲是一样的,即等效.,举例:点亮一个发光二极管,图6.1 复位时的仿真情况,解答,#includesbit D1=P10;main()D1=;while(1);,对位变量的定义也可以是:“sbit D=0 x900”,因为P1口的地址为0 x90.,C51编译器在头文件“reg51.h”中定义了全部sfr/sfr16和sbit变量。用一条预处理命令#include 把这个头文件包含到C51程序中,无需重定义即可直接使用它们的名称。reg51.h中的内容如下:,#ifndef _REG51_H_#define _REG51

5、_H_/*BYTE Register*/sfr P0=0 x80;sfr P1=0 x90;/*BIT Register*/*PSW*/sbit CY=0 xD7;sbit AC=0 xD6;sbit RI=0 x98;#endif,4、几点说明,1)用sbit定义的位变量,必须能够按位操作,而不能够对无位操作功能的位定义位变量。2)用sbit定义位变量,必须放在函数外面作为全局位变量,而不能在函数内部定义。3)用sbit每次只能定义一个位变量。,4)对其它模块定义的位变量(bit型或 sbit型)的引用声明,都使用bit。5)用sbit定义的是一种绝对定位的位变量(因为名字是与确定位地址对应

6、的),具有特定的意义,在应用时不能像bit型位变量那样随便使用。,三、bit 型位变量的C51定义,除了通常的C数据类型外,C51编译器还支持“bit”数据类型,称之为位变量,只有一位,其值只能是0或1,这对于记录系统状态是十分有用的,因为它往往需要使用某一位而不是整个数据字节。,例如:bit door=0;/定义一个叫door的变量且初值为0与标准C的变量定义及初始化用法是一致的。,在C51中定义位变量的一般语法形式如下:,位类型标识符(bit)位变量名;bit my_bit;/*把my_bit 定义为位变量*/bit direction_bit;/*把direction_bit定义为位变量

7、*/,函数参数列表中可以包含类型为“bit”的参数,也可使用bit 类型的返回值。例如:,bit done_flag=0;/*把done_flag定义为位变量*/bit testfunc(bit flag1,bit flag2)/*flag1和flag2为bit 类型的参数*/return(flag);/*flag是 bit 类型的返回值*/,对位变量定义的限制,(1)位变量不能定义成一个指针,原因是不能通过指针访问“bit”类型的数据,如定义“bit*ptr;”是非法的。(2)不存在位数组,如不能定义bit SHOW_BUF6。(3)值得注意的是,使用中断禁止(#pragma disable

8、)或包含明确的寄存器组切换(using n)的函数不能返回位值,否则编译器会给出一个错误信息。,在位定义中,允许定义存储类型,位变量都被放入一个位段,此位段总位于51单片机片内的RAM中,因此存储器类型限制为data、bdata和idata。如果把位变量的存储类型定义为其他存储类型,将导致编译出错。,数据的存储类型,51系列单片机有三个逻辑存储空间:片内数据存储器(内部区),片外数据存储器(外部)和程序存储器(CODE区)。数据可任意存储到其中某一存储器中。,一、code 区,用来存放可执行代码的存储区,用16 位寻址空间可达64K 代码段,是只读的。,比较大型的数据一般存放在此区域,如用单片

9、机控制电子屏显示汉字时,汉字字库要占据很大的存储空间,这是就应把它存储在这一区域。如存储“武汉”两个字的数组定义如下:,unsigned char code tab32=0 xFF,0 xFD,0 xFF,0 xF5,0 x03,0 xED,0 xFF,0 xFD,0 x00,0 x80,0 xFF,0 xFD,0 xDF,0 xFD,0 xDF,0 xFB,0 x1B,0 xFA,0 xDB,0 xFB,0 xDB,0 xFB,0 xDB,0 xF7,0 x1B,0 xB7,0 xE3,0 xAF,0 xF8,0 x9F,0 xFF,0 xBF,/*武*/0 xFB,0 xFF,0 xF7,

10、0 xFF,0 x17,0 xC0,0 xBF,0 xEF,0 xBE,0 xEF,0 x6D,0 xF7,0 x6D,0 xF7,0 x77,0 xF7,0 xF7,0 xFA,0 xFB,0 xFA,0 xF8,0 xFD,0 xFB,0 xFA,0 x7B,0 xE7,0 x9B,0 x8F,0 xEB,0 xDF,0 xFF,0 xFF,/*汉*/,将表格,数组等定义成code型常数,在Keil C编译后,会大大减少程序占用的存储空间,这一情况以后会碰到。,二、data 区,是8051 内128 字节的内部RAM 或8052 的前128 字节内部RAM存储区。这部分主要是作为数据段,称

11、为data 区。,访问data 区比访问xdata 区要快。通常我们把使用比较频繁的变量或局部变量存储在data 段中,但是必须节省使用data 段,因为它的空间毕竟有限。,如例子中的变量“a”还可定为“unsigned char data a=0 xfe;”其实,如果没有说明数据存储类型,默认数据存储在data区。,三、bdata,位寻址段bdata,包括16 个字节,共128 位,每一位都可单独寻址。位寻址段的这16 个字节也可像数据段中其它字节一样进行字节寻址。,unsignedchar bdataoperate;对operate的低4位作位变量定义:sbit flag_key=oper

12、ate0;/键盘标志位sbit flag_dis=operate1;/显示标志位sbit flag_mus=operate2;/音乐标志位sbit flag_run=operate3;/运行标志位,四、idata 区,8051 系列的一些单片机,如8052 有附加的128 字节的内部RAM,位于从80H 开始的地址空间中,被称为idata。因为idata 区的地址和SFRs 的地址是重叠的,通过区分所访问的存储区,来解决地址重叠问题,因为idata 区只能通过间接寻址来访问。,五、xdata 区,存储空间为64K,和code 区一样采用16 位地址寻址称作外部数据区,简称xdata 区。这个区

13、通常包括一些RAM,如SRAM 或一些需要通过总线接口的外围器件。,如果要将变量“a”置于这一区域,则表示是:“unsigned char xdata a=0 xfe;”,六、pdata区,这一区域只是对xdata区进行了要页处理,每一页称作一个pdata区.,数据结构定义举例,unsigned char bdata status_byte;/定义status_byte为无符号字符型自动变量,该变量位于bdata区unsigned int code unit_id2=0 x1234,0 x89ab;/定义unit_id2为无符号整型自动量,该量位于code区中,是长度为2的数组,且初值为0 x1234和0 x89ab。,static char m,n;/定义m和n为2个位于data区中的有符号字符型静态变量。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号