51单片机(七):RAM分布&数据类型

一、数据存储单位
        b(bit):位,是计算机中最小的数据单位,只能表示两种状态,即 0 和 1。在单片机中,通常用于表示二进制数,并可用于表示计算机中的开关、状态等信息。

        B(byte):字节,是计算机中用于表示数据大小的单位,通常用于表示字符、整数、浮点数等数据。1 字节等于 8 位,可以表示 256 种不同的状态。在单片机中,字节是存储和处理数据的基本单位。

        此外还有千字节KB、兆字节MB、吉字节GB、太字节TB等,之间存在以下关系:1024B=1KB、1024KB=1MB、1024MB=1GB、1024GB=1TB。

        Kb(kiloBit):千比特,是计算机中用于表示数据传输速率的单位。1 Kb 等于 1024 比特/秒(bit/s)。在单片机中,Kb 用于表示数据传输速率,如串口通信等。

        Mb(megaBit):兆比特,是计算机中用于表示数据传输速率的单位。1 Mb 等于 1024 Kb,即 1024*1024 比特/秒(bit/s)。在单片机中,Mb 用于表示较高的数据传输速率,如以太网通信等。

        在此要讲一下,KB、MB与Kb、Mb之间的区别:在 51 单片机中,KB 和 MB 是用于表示数据存储容量的单位,而 Kb 和 Mb 表示数据传输速度单位。

二、RAM分布

        在C51单片机中,RAM空间使用了8根地址线,每根地址线有0和1两种状态,因此最多可以组合出2^8=256中可能,也就是说可以寻址256个空间。在存储器中每一个空间对应一个字节,可以将这256个字节分为128个“特殊功能寄存器”和另外128个“用户数据区”。

        左侧标记的数据表示该字节空间的地址,前缀“0x”是十六进制的标志,后面两位数据就是“地址”。(熟悉“二进制”与“十六进制”之间的转换的同学应该知道,在二进制转换为十六进制过程中最常用的方法便是:将二进制数4个为一组进行分组,每一组二进制数用一个相应的十六进制数进行 对应即可。例如:0xB8=>1011 1000)

1. 用户数据区:

        ① 工作寄存器区:在128字节的“用户数据区”的下方为“工作寄存器区”,这4个工作寄存器组是用来存储临时数据和中间结果的。每个工作寄存器组都包含8个8位寄存器,这些寄存器可以用于存储算术运算的操作数、函数调用的参数和局部变量等。它们提供了高速的数据存储和访问,可以在程序执行过程中频繁地读写数据。通过使用不同的寄存器组,可以方便地切换不同的数据集合,以提高程序的效率和灵活性。

        ② 位寻址区:在“工作寄存器区”上方是16个字节(128位)的“位寻址区”,位寻址区在C51单片机的RAM中占据了一部分地址空间,通常是从0x20到0x2F的地址范围。每个位寻址区地址都对应一个特定的位,可以通过读写该地址来读取或修改对应位的值。位寻址区的作用是提供对特定位的直接访问,而不需要读取或写入整个字节。

        ③ 堆栈区:此外还有80个字节的“堆栈区”,堆栈区是用来存储程序执行过程中的临时数据和函数调用的返回地址的。堆栈是一种后进先出(LIFO)的数据结构,它可以在程序执行过程中动态地分配和释放内存空间。当一个函数被调用时,函数的参数和局部变量会被存储在堆栈区中。这样可以确保每个函数调用都有独立的内存空间,避免了数据的混乱和冲突。同时,函数的返回地址也会被保存在堆栈中,以便在函数执行完毕后能够正确返回到调用函数的位置。

        堆栈区的大小可以根据需要进行配置,通常由编译器或开发者指定。在C51RAM中,堆栈区的大小可以通过设置堆栈指针(SP)来控制。堆栈指针指向当前堆栈顶部的位置,当数据被压入堆栈时,堆栈指针会递减;当数据被弹出堆栈时,堆栈指针会递增。通过堆栈指针的调整,可以有效地管理堆栈区的使用,避免堆栈溢出和数据丢失的问题。

2. 特殊寄存器区:

        C51中的特殊功能寄存器(Special Function Registers,SFRs)是一组用于控制和配置微控制器功能的寄存器。这些寄存器具有特殊的功能和用途,用于控制输入输出、中断、定时器、串口通信等微控制器的核心功能。以下是一些常见的C51特殊功能寄存器及其功能介绍:

① P0-P3:这些寄存器是端口寄存器,用于控制微控制器的输入输出。每个端口有8个引脚,可以配置为输入或输出,并通过读写这些寄存器来控制引脚的状态。

② TCON:这是定时器/计数器控制寄存器,用于控制定时器和计数器的工作模式、中断标志和计数器溢出标志等。

③ TMOD:这是定时器/计数器模式寄存器,用于配置定时器和计数器的工作模式,例如定时器模式、计数器模式、自动重装载模式等。

④ PCON:这是电源控制寄存器,用于控制微控制器的电源模式和复位。

⑤ TH0/TL0、TH1/TL1:这些是定时器/计数器的高位和低位寄存器,用于存储定时器和计数器的计数值。

⑥ SCON:这是串口控制寄存器,用于配置串口通信的工作模式、波特率、发送和接收中断等。

⑦ IE/IP:这些是中断使能和中断优先级寄存器,用于控制中断的使能和优先级设置。

⑧ PSW:这是程序状态字寄存器,用于存储和控制程序执行的状态信息,例如标志位、堆栈指针等。

        这些特殊功能寄存器在C51微控制器中起着关键的作用,通过对这些寄存器的配置和操作,可以实现对微控制器各种功能的控制和配置。具体的使用方法和功能细节可以参考C51的相关文档和手册。

三、数据类型

1. 基本数据类型

浮点型数据存储方式详解:

① 偏移表示法

        IEEE 754标准中的偏移表示法是一种用于浮点数的表示方法。在这种表示法中,浮点数被分为三个部分:符号位、指数位和尾数位。

        符号位用于表示浮点数的正负,通常使用1位来表示,0表示正数,1表示负数。

        指数位用于表示浮点数的指数部分,它决定了浮点数的大小范围。在偏移表示法中,指数位的值被偏移了一个固定的偏移量,以便能够表示负指数。偏移量是一个固定的值,通常是2的指数幂减1。例如,对于单精度浮点数(32位),偏移值为127,对于双精度浮点数(64位),偏移值为1023。

        尾数位用于表示浮点数的小数部分,它决定了浮点数的精度。尾数位的值可以是任意的,但是在规范化表示中,尾数位的最高位总是1,因此可以被省略。尾数位的长度取决于浮点数的精度,对于单精度浮点数,尾数位长度为23位,对于双精度浮点数,尾数位长度为52位。

使用偏移表示法,浮点数的值可以通过以下公式计算:

值 = (-1)^符号位 * (1 + 尾数位) * 2^(指数位 - 偏移量)

这种表示方法可以有效地表示很大或很小的浮点数,并且可以处理正负零、无穷大和非数值(NaN)等特殊情况。

② 浮点数格式

        C51是一种经典的8位微控制器,它不直接支持浮点数运算。然而,C51可以通过软件实现浮点数运算,其中典型的浮点数格式是IEEE 754标准。IEEE 754标准定义了浮点数的表示方法,包括单精度(32位)和双精度(64位)两种格式。

        单精度浮点数采用32位二进制表示,其中包括1个符号位、8位指数位和23位尾数位。具体的表示方法如下:

        双精度浮点数采用64位二进制表示,其中包括1个符号位、11位指数位和52位尾数位。具体的表示方法如下:

2. 扩展数据类型

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值