C51的特殊数据形式.ppt_第1页
C51的特殊数据形式.ppt_第2页
C51的特殊数据形式.ppt_第3页
C51的特殊数据形式.ppt_第4页
C51的特殊数据形式.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C51的特殊数据形式 3 3 4C51中的特殊数据类型 C51中有几种ANSIC所没有的特殊数据类型 这些数据类型是和存储区域和存储器类型的概念密切相关的 位变量可位寻址的对象特殊功能寄存器 位变量 位变量 BitTypes 是指用一个二进制位表示的变量 位数据类型可以用来说明变量 参数表 函数返回值等 位数据变量声明和基本的数据类型声明一样 所有的位变量都存储在内部数据区的位寻址段中 因为该段只有16个字节长 所以在一个作用域内最多只能声明128个位变量 注意 由于位变量只能存储在内部数据存储区的位变量区内 因此只能使用data和idata两种存储器类型修饰符 其它存储器类型是非法的 例位变量的使用staticbitdone flag 0 位变量 bittestfunc 位函数返回类型 bitflag1 位类型参数 bitflag2 return 0 位类型返回值 位变量定义或声明时必须遵循以下规则 禁止中断的函数 pragmadisable 和显式定义寄存器组 usingn 的函数不能返回位变量 函数在这种情况下返回位变量时 编译器将产生一个错误信息 不能将指针声明为指向一个位类型 bit ptr 非法语句 不能声明位类型的数组bitware 5 非法语句 可位寻址的对象 可位寻址的对象 Bit addressableObjects 是指可以同时用字节 字 寻址和位寻址方式进行访问的对象 只有当数据对象占据8051内部数据区的可位寻址区时 才是一个可位寻址对象 C51使用bdata存储器类型来声明可位寻址对象 例如 intbdataibase 可位寻址的整形变量 charbdatabary 4 可位寻址的字符形数组 注意 声明为bdata存储器类型的变量必须为全局变量 不能是局部变量 由于bdata区为16个字节 因此可寻址对象所占存储空间不能大于16个字节 上例中的ibase和bary是可位寻址对象 因此 这些变量的位可以单独的访问和更改 可使用sbit关键字声明位变量来访问用bdata声明变量的指定位 sbitmybit0 ibase 0 sbitmybit15 ibase 15 sbitary07 bary 0 7 bit7ofbary 0 sbitary37 bary 3 7 bit7ofbary 3 表达式中在 符号后的表达式定义了位的位置 该表达式必须是一个常量 表达式的取值范围由变量声明中的基变量的数据类型来决定 对char和unsignedchar类型 范围为0 7 对int unsignedint short unsignedshort 为0 15 对long和unsignedlong为0 31 下面的例子 采用了位寻址 字节寻址 字寻址来改变可位寻址对象的值 ary37 1 setbit7inbary 3 bary 3 a Byteaddressing ibase 1 Wordaddressing mybit15 0 可位寻址对象不仅可以是基本变量类型 还可以是结构或联合这样的复杂数据类型 例3 16以复杂数据类型为基变量的可位寻址对象unionlft floatmf longml bdatastructbad charm1 unionlftu tcp sbittcpf31 tcp u ml 31 sbittcpm10 tcp m1 0 sbittcpm17 tcp m1 7 说明 位变量用基地址加位偏移来获取实际的物理地址 物理地址位地址0指向第一个字节的0位 8指向第2个字节的0位 8051中整型变量存储时是高字节在低地址 第1个字节 低字节在高地址 第2个字节 即整型的0位在第2个字节的0位上 这个地址用sbit来标识时是位置8 例3 17位变量与整型变量的对应关系 bdataintiData 位寻址变量必须为全局变量sbitbTest1 iData 8 sbitbTest2 iData 0 main iData 0 bTest1 1 iData 1 iData 0 bTest2 1 iData 256 特殊功能寄存器 8051系列的微控制器提供了一个独立的内存区 用来存放特殊功能寄存器 specialfunctionregister SFR SFR用来在程序中控制定时器 计数器 串行I O 端口I O操作 以及外设的操作 SFR驻留在地址0X80到0XFF空间 可按字节寻址或按字寻址 某些寄存器还可以按位寻址 8051系列微控制器中SFR的个数和类型是变化的 C51没有预先定义SFR的名字 而是提供了许多8051兼容芯片的包含文件 这些文件对芯片的SFR进行了定义 CX51编译器用sfr sfr16 sbit来进行SFR定义 sfr 定义8位特殊功能寄存器sfr可以用来定义8051单片机的8位特殊功能寄存器 sfr占用一个字节内存单元 取值范围是0 255 SFR的声明和C变量的声明格式是一样的 只不过使用的修饰符不是char或int而是sfr 例如 sfrP0 0 x80 Port 0 address80h sfrP1 0 x90 Port 1 address90h sfrP2 0 xA0 Port 2 address0A0h sfrP3 0 xB0 Port 3 address0B0h P0 P1 P2 P3是sfr声明的特殊功能寄存器的名称 特殊功能寄存器名称是一个合法的C标识符 等号后的地址必须是数值常量 不允许使用带运算符的表达式 sfr16 定义16位特殊功能寄存器8051芯片可以将两个8位SFR作为一个16位寄存器来访问 条件是这两个SFR必须处在相邻地址上 并且是低字节在高字节地址的前面 C51提供了sfr16数据类型来进行16位特殊功能寄存器的声明 声明时低字节地址被用来作为sfr16的地址 例如 sfr16T2 0 xCC Timer2 T2L0CCh T2H0CDh sfr16RCAP2 0 xCA RCAP2L0CAh RCAP2H0CBh 在这个例子中 T2和RCAP2被声明为16位的特殊功能寄存器 sfr16声明和sfr声明的规则相同 sbit 定义特殊功能位sbit用来访问SFR中的可寻址位和其它可位寻址对象的可寻址位 在8051应用中 经常需要对SFR中的可寻址位 特殊功能位 进行独立访问 可以用sbit数据类型来将SFR中的可寻址位声明为特殊功能位 sbitEA 0 xAF 上例中将EA定义为地址0XAF 对8051而言这是中断使能寄存器 IE 的中断许可位 有三种方法来声明位地址 方法一 sfr name int constant 即SFR寄存器名 整形常量 这种方法使用已经定义的sfr作为sbit的基地址 该SFR的地址必须能被8整除 符号后的表达式定义了可寻址位的位地址 位地址必须是0 7之间的数 sfrPSW 0 xD0 声明寄存器名sfrIE 0 xA8 sbitOV PSW 2 声明特殊功能位sbitCY PSW 7 sbitEA IE 7 方法二 int constant int constant 即整形常量 整形常量 这种方法使用整形常数作为基地址 该地址必须可以被8整除 符号后的表达式定义了可寻址位的位地址 位地址必须是0 7之间的数 sbitOV 0 xD0 2 sbitCY 0 xD0 7 sbitEA 0 xA8 7 方法三 int constant用绝对位地址来声明sbit sbitOV 0 xD2 sbitCY 0 xD7 sbitEA 0 xAF 注意 sbit bit和位域是三种不同的数据类型 使用sbit声明时 基对象必须可位寻址变量或者是可以位寻址的特殊功能寄存器 绝对变量地址 开发者有时候希望把变量存储在指定的地址单元中 可用 at 关键词来将变量定位在一个绝对的内存地址单元 使用方法如下 数据类型存储器类型变量名 at 变量所在绝对地址 在 at 后面的绝对地址必须符合存储器类型的物理边界限制 即不超过存储区域的最大可寻址范围 该地址必须为常数 绝对变量定位遵循以下约束 绝对变量不能初始化 类型为bit的函数和变量不能用绝对地址定位 绝对变量必须是全局变量 不能是局部变量 例3 18structlink structlinkidata next charcode test structlinklistidata at 0 x40 listatidata0 x40 charxdatatext 256 at 0 xE000 arrayatxdata0 xE000 intxdatai1 at 0 x8000 i1atxdata0 x8000 voidmain void list next void 0 i1 0 x1234 text 0 a 有时需要在不同的模块之间调用变量 可使用下列的语句来在另一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论