当前位置:首页 > 单片机 > 单片机
[导读]1.1Franklin C-51数据类型 Franklin C-51编译器支持下列数据类型:数据类型长度值域bit 1 字节0 或 1signed char1 字节-128~+127unsigned char1 字节0~255signed int2 字节-32768~+32867unsigned int2 字节0~65

1.1Franklin C-51数据类型

Franklin C-51编译器支持下列数据类型:

数据类型长度值域

bit 1 字节0 或 1

signed char1 字节-128~+127

unsigned char1 字节0~255

signed int2 字节-32768~+32867

unsigned int2 字节0~65535

signed long4 字节-2147483648~+2147483647

unsigned long4 字节0~4294967295

float 4 字节±1.176E-38~±3.40E+38

指针 1~3 字节对象地址

sbit 1 位0 或 1

sfr 1 字节0~255

sfr16 2 字节0~65535

编译的数据类型(如结构)包含上表所列的数据类型。由于8051系列是8位机,因而不存在字节校准问题。这意味着数据结构成员是顺序放

置的。

数据类型的转换:当计算结果隐含着另外一种数据类型时,数据类型可以自动进行转换,例如,将一个位变量赋给一个整型变量时,位型

值自动转换为整型值,有符号变量的符号也能自动进行处理。这些转换也可以用C语言的标准指令进行人工转换。

1.2 数据类型的物理结构

1.2.1 bit

“bit”类型只有1位,不允许有位指针和位数组。位对象始终位于8051 CPU的可寻址RAM空间。如果程序控制流允许,L51将位对象交迭。

1.2.2signed/unsigned char;data/idata/pdata 指针

“char”类型标量和基于存贮器的“data/idata/pdata”指针具有1个字节长度(8 bits)。

1.2.3signed/unsigned int/short;xdata/code 指针

“int”和“short”类型标量及指向xdata/code区域的指针具有2字节长度(16

bits)。

整型值(或偏移)0x1234以下面方式保存在内存中:

地址: +0 +1

内容: 0x120x34

1.2.4signed/unsigned long

“long”类型标量长为4个字节(32 bits),值0x12345678以下面方式放置:

地址: +0 +1 +2 +3

内容: 0x12 0x34 0x56 0x78

1.2.5“一般”指针

“一般”指针包括3个字节:2字节偏移和1字节存贮器类型:

地址:+0 +1 +2

内容: 存贮器类型偏移高位 偏移低位

第一个字节代表了指针的存贮器类型,存贮器类型编码如下:

存贮器类型 IDATA XDATA PDATADATACODE

值 12 3 4 5

使用其它类型值可能导致不可预测的程序动作。

XDATA类型的0x1234地址作为指针表示如下:

地址:+0+1 +2

内容: 0x02 0x12 0x34

当用常数作指针时,必须注意正确定义存贮器类型和偏移。下例将值0x41写入绝对地址为0x8000的外部数据存贮器:

#defineXBYTE ((char *)0x20000L)

XBYTE[0x8000]=0x41;

上例中用其它常数索引或索引变量也起作用。这样,各种存贮器类型的绝对地址可以一种非常有效的方式访问。但有一个例外,即

SFR。

注意:绝对地址定义为“long”型常量,低16位包含偏移,高8位表明了xdata类型。为了表示这种指针,必须用长整数来定义存贮器

类型。

C51编译器不检查指针常数,用户必须选择有实际意义的值。

1.2.6float

“float”类型为4个字节(32位),使用的格式与IEEE-754标准(32位)具有24位精度,尾数的高位始终为“1”,因而不保存,位的分布如

下:

l 1位符号

l 8位指数位

l 23位尾数

符号位是最高位,尾数为最低的位,内存中按字节存贮如下:

地址:+0 +1 +2+3

内容:MMMM MMMM MMMM MMMME MMM MMMMS EEE EEEE

其中:S:符号位,1=负,0=正

E:指数(在两个字节中),偏移为127

M:23位尾数,最高位“1”

浮点值——12.5的十六进制为0xC1480000,它按下面方式存贮:

地址:+0+1+2+3

内容: 0x00 0x00 0x48 0xc1

8051不包括捕获浮点错误(例外)的中断向量。用户软件因此必须对错误条件作出适当反应。下面推荐一种方法(也可以用其它可靠

办法):“union”用来保存浮点值,这个“union”必须包括一个“float”和一个“unsigned long”,以根据IEEE对错误作出响应。除了通

常浮点值外,IEEE标准可能出错的条件以下面二进制值表示,为检查可能出现的计算错误,可在计算后进行检查。因为当执行一个运算时考虑

了每个运算符的错误状态并且该状态被送到结果中。

NaN0xFFFFFFF不是一个数

+INF0x7F80000正无穷(正溢出)

-INF0XFF80000负无穷(负溢出)

1.3C-51 的扩充定义

1.3.1特殊功能寄存器的声明

MSC-51 系列包括多种寄存器,其中一些具有特殊功能,如定时器,端口的控制寄存器等,为了能够直接访问这些寄存器,C51编译器提供

了一种定义的自主形式,这是必要的,因为这些定义与标准C语言是不兼容的。

为了支持这些特殊功能寄存器(SFR)的声明,引入了关键词“sfr”,语法如下:

sfr-dcl:sfr sfr_name=int_constant

例:

sfr p0=0x80;

sfr p1=0x90;

必须注意的是“sfr”后不是一个地址而是一个名字。因此上例中名字P0和P1(port0和port1)定义为特殊功能寄存器并被赋予相应

的绝对地址,名字可按意愿自由选取,源文件中不应有先定义的sfr名字。

“=”号后的地址必须是常数,不允许带有运算符的表达式,这个常数表达式必须在特殊功能寄存器的地址范围内,位于0X80到0XFF

之间。

8051系列寄存器数量和类型是极其不同的,因此建议将所有特别的“sfr”声明放入一个头文件,头文件包括8051一些系列成员中的

SFR定义。进一步的定义可由用户用一文件编辑器产生。

1.3.2对SFR的16位数据访问

在新的8051系列产品中,SFR在功能上经常组合为16位的,为了有效的访问这类SFR,使用定义“sfr16”,当“SFR”的高端直接位于低端

后时,对SFR16位的访问是可能的。例如8052的定时器2就是这种情况,16位声明的语法与“sfr”相同,SFR低地址部分必须作为sfr16的地址

例:sfr16 T2=0xCC /*Timer2:T2L=0CCH,T2H=0CDH */

sfr16 RCAP2=0xCA/*RCAP2L=0CAH,PCAP2H=0CBH */

本例中,T2(由T2L和T2H组成)和RCAP2(由RCAP2L和RCAP2H组成)被定义为16位SFR,即使在这种情况下,声明中的名字后仍不是赋值语句,

而是一个SFR地址,高字节必须直接位于低字节之后,这种声明适用于所有新的SFR,但不能用于Timer0和Timer1。

1.3.3SBIT:特殊功能位声明

在典型的8051应用问题中,经常需要单独访问SFR中的位,C51扩充功能使之成为可能,特殊位,象SFR一样,不与标准C语言兼容,使用保留字

“sbit”可访问位寻址对象。与SFR声明一样,用保留字“sbit”声明某些特殊位接受符号名,“=”后语句将绝对值地址赋给变量名,这种地

址分配有三种方法:

方法1:sfr_name^int_constant

当字节是特殊功能寄存器的地址可用这个方法。sfr_name必须是已定义的SFR的名字,“^”后的语句定义了基地址上的特殊位的位置,该位置

必须是一个0~7的数。

例: sfr PSW=0xD0;

sfr LE=0xA8;

sbit OV=PSW^2;

sbit CY=PSW^7;

方法2:int_constant^int_constant

这种方法以一整常数作基地址,该值必须在0x80~0xFF之间,并能被8整除,确定位的位置方法同上。

例: sbit OV=0xD0^2;

sbit CV=0xD0^7;

sbit EA=0xA8^7;

方法3: int_constant

这种方法是将位的绝对地址赋给变量,地址必须位于0x80~0xFF之间。

例: sbit OV=0xD2;

sbit CY=0xD7;

sbit EA=0xAF;

特殊功能位代表了一个独立的声明类,它不能与其它声明和位域互换。

1.3.4BIT:位标量声明

除了通常的C数据类型外,C51编译器支持“bit”数据类型,对此有下列扩充与限制:

(1)函数可包含类型为“bit”的参数,也可将其作为返回值。

bit bfunc(bit b0,bit b1){

/*……*/

return(b1);

}

注:使用禁止中断(#pragma disable)或包含明确的寄存器组切换(using n)的函数不能返回位值,在这种情况下,编译器会识别出来并产

生一个错误信息。

(2)位标量声明的语法及C声明的语义

sta

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭