当前位置:首页 > 单片机 > 单片机
[导读]Data Types数据类型数据类型位数字节数值域bit10-1Signed char81-128-+127Unsigned char810-255enum8/161or 2-128-+127 or -32768-+32767Signed short162-32768-+32767Unsigned short1620-65535Signed int162-32768-

Data Types数据类型

数据类型

位数

字节数

值域

bit

1

0-1

Signed char

8

1

-128-+127

Unsigned char

8

1

0-255

enum

8/16

1or 2

-128-+127 or -32768-+32767

Signed short

16

2

-32768-+32767

Unsigned short

16

2

0-65535

Signed int

16

2

-32768-+32767

Signed long

32

4

-2147483648 to 2147483647

unsigned long

32

4

0 to 4294967295

float

32

4

±1.175494E-38 to ±3.402823E+38

Sbit

1

0 to 1

sfr

8

1

0 to 255

sfr16

16

2

0 to 65535

Bit Types位类型

描述(略)

位变量和位声时存在以下限缺制:

l 禁止中断的函数(用#pragma disable),和使用usigng声明寄存器组(usigng n)的函数不能返回一个位变量。如果这样使用时,Cx51编译器就会报错。

l 位变量不能声明为指针:bit *ptr /*错误的声明*/

l 不能使位变量数组:bit ware [5]; /*错误的声明*/

Bit-addressable Objects可位寻址的对象

可位寻址的对象就是可以位寻址也可以字节寻址的对象。只有占有位寻址空间的数据可以归为这一类。Cx51把用idata声明的变量放在可位寻址区域。

int bdata ibase; /* Bit-addressable int */

char bdata bary [4]; /* Bit-addressable array */

上面两个变量都是可位寻址的变量。所以这单独地访问这两个变量的每一位。使用关键字sbit可以定义新的位变量来访问用badata定义的变量,如:

sbit mybit0 = ibase ^ 0; /* bit 0 of ibase */

sbit mybit15 = ibase ^ 15; /* bit 15 of ibase */

sbit Ary07 = bary[0] ^ 7; /* bit 7 of bary[0] */

sbit Ary37 = bary[3] ^ 7; /* bit 7 of bary[3] */

注意:不可以声明float变量的某一位为位变量。但是可以通过共同体来访问一个float变量的某一位。

位变量的地址是物理地址。位地址0指第一个可位寻址的字节的最低位。整型在内存中的存放是高位字节在前的,所以,整型的第最低位是就是第二个可位寻址字节的最低位,也就是位址的第8位。

Special Function Registers特殊功能寄存器

8051系列微处理器为特殊功能寄存器的存取提供了一个独立的内存区域。它位于地址0x80—0xFF,可以按位,字节,字的方式存取。

在8051系列微处理器中,,SFR的个数和类型是不同的,所以Cx51编译器并没有预定义这些SFR的名字。预定义这些特殊功能寄存器名字的声时文件在包含文件中。每个含文件包括可用的特殊功能寄存器的声明。

Cx51为存取SFR提供了sfr, sfr16,和sbit数据类型。下面解释这几种数据类型。

sfr

SFR的声明方法与其他C语言变量的声明方法相同。如:

sfr P0 = 0x80; /* Port-0, address 80h */

sfr P1 = 0x90; /* Port-1, address 90h */

sfr P2 = 0xA0; /* Port-2, address 0A0h */

sfr P3 = 0xB0; /* Port-3, address 0B0h */

sfr16

许多新型的8051变种使用两个连续的SFR字节来声明一个16bit的值。例如,8052使用地址0XCC和0XCD来做为定时器2的低字节和高字节。Cx51使用sfr16把2个字节的SFR做为一个16bit的SFR来访问。

一个SFR16的两个字节必须连在一起,并且低字节在前,在使用的时候把低字节的地址做为整个SFR16的地址使用。

sbit

在8051的经典应用中,经常会用到特殊功能寄存器的某一个单独的位。Cx51编译器使用不着sbit来声明这种变量。

注意:并不是所有的SFR都是可以位寻址的,只有那些地址可以被8整除的地址是可以位寻址的,也就是说它的地址的最低位必须是0或者是8。计算SFR位地址的方法是把位在特殊功能寄存器字节中的位置加上这一字节的地址。也就是说,访问在SFR地址0XC8第6位的时候,这一位的地址应该是0XCE(0XC8+6)

声时位变量的方法有以下三种:

1:sfr_name ^ int_constant

sfr PSW = 0xD0;

sbit OV = PSW ^ 2;

2。:int_constant ^ int_constant

sbit OV = 0xD0 ^ 2;

3:int_constant

sbit OV = 0xD2;

注意:特殊功能位是一个独立的类声明,不能和其他的位声时相互交换。

用sbit声明的变量不能访问用bdata数据类型定义的变量。

Absolute Variable Location变量的绝对地址

使用并键词_at_可以使变量定位于内存中的一个绝对地址。使用方法:

[memory_space]type variable_name_at_constant;

这里:

memory_space变量的内存的空间。如果不声明这一项,使用缺省的内存空间。参见:内存模式。

Type变量类型

variable_name变量名

constant变量所要存储的地址

在关键词_at_后的地址必须在内存的特理边界以内。Cx51会检测变量地址声明的正确性

绝对地址变量声时须遵守以下规则:

1. 绝对地址变量不能初始化(在声明时)

2. Bit类型的变量和函数不能放在绝对地址中

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

在C语言编程中,结构体内存对齐是一个容易被忽视却影响深远的关键问题。它不仅关乎程序性能,更直接影响到内存占用效率,尤其在嵌入式系统等资源受限环境中显得尤为重要。本文将深入探讨结构体内存对齐的原理,并分享手动调整与编译器优...

关键字: C语言 内存对齐 编译器

编译器不仅是连接硬件与软件的桥梁,还直接影响MCU的性能优化与功能安全。面对汽车行业对高可靠性、低功耗和高算力的需求,编译器需在确保ASIL-D等严格标准的同时,最大化发挥RISC-V芯片的潜力。

关键字: 车规MCU RISC-V 编译器 HighTec

国内电子信息产业内的厂商正在全球嵌入式系统的发展浪潮中扮演着越来越重要的角色,但随之而来的是国内嵌入式系统和相关芯片企业在出海时也面临越来越多的合规要求,尤其是在保障用户、设备和周边人与物安全的功能安全领域内的合规要求。...

关键字: 嵌入式系统 智能网联 编译器

【2025年4月11日, 德国慕尼黑讯】全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)推出用于AURIX™、TRAVEO™和PSOC™的可扩展软件包产品组合...

关键字: PSOC 物联网 编译器

瑞典乌普萨拉,2025年3月11日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR在德国纽伦堡举办的embedded world 2025展会上重磅发布全新云端平台。该平台为嵌入式软件开发人员提供前所未有的自由度与...

关键字: 编译器 嵌入式 RISC-V

该统一解决方案为Microchip编译器产品线提供灵活且经济高效的许可选项

关键字: 编译器 嵌入式

当安全标准相互契合:意法半导体 (ST) Stellar MCU取得了风险管理安全标准等级最高的ISO 26262 ASIL D 级认证,现在更有达到同等安全级别的 HighTec Rust 编译器的加持

关键字: 微控制器 编译器

在STM32的开发过程中,开发者可能会遇到各种编译错误,其中“Program file does not exist”是一个较为常见且可能由多种原因引起的错误。这个错误通常意味着编译器在预期的路径下没有找到可执行文件(如...

关键字: STM32 编译器

基于ARM内核的芯片在我们的世界中无处不在,从简单的MCU到高端的应用处理器,各行各业中都有它们的身影。 如今ARM生态系统非常繁荣,在这繁荣的背后编译器的作用功不可没。

关键字: ARM 编译器

台湾新竹-2024 年 11 月 5 日-新唐科技正式推出免费版 Arm® Keil® MDK Nuvoton Edition,成为全球首家提供 Keil MDK 完整版的公司。此专业工具适用于开发基于Arm Corte...

关键字: 编译器 微控制器 嵌入式
关闭