8051单片机的寄存器组和栈内存分配

通用寄存器(R0-R7)的集合称为寄存器组,它接受一个字节的数据。银行登记簿是嵌入式系统中的RAM存储器单片机,它是用来存储程序指令的。每个微控制器由不同的内存组组成,每个内存组寄存器由一个唯一的地址组成,用于识别存储位置。

在8051注册银行

在8051注册银行
在8051注册银行

8051微控制器由四个寄存器组组成,如Bank0、Bank1、Bank2、Bank3,它们由PSW(程序状态字)寄存器选择。这些寄存器组存在于8051微控制器的内部RAM存储器中,用于在微控制器编程时处理数据。


注册银行的转换

默认情况下,8051微控制器通电时寄存器组为0;而且,通过使用程序状态字(PSW),我们可以切换到其他银行。PSW的两个位用于在寄存器组之间进行切换。这两个位由位寻址指令SETB和CLR访问。

基于PSW的RS1和RS0的可能组合,相应地改变寄存器组,即,如果RS1和RS0为0,则选择组0。同样地,根据RS1和RS0的值选择Bank1、2和3。

8051单片机的堆栈内存分配

堆栈是随机存取存储器(RAM)的一个区域,被分配用来暂时保存变量的所有参数。堆栈还负责提醒调用函数的顺序,以便能够正确返回。每当调用函数时,与之相关的参数和局部变量都会添加到堆栈中(PUSH)。当函数返回时,参数和变量将从堆栈中移除(“POP”)。这就是程序运行时堆栈大小不断变化的原因。

用于访问堆栈的寄存器称为堆栈指针寄存器。堆栈指针是一个用来指向堆栈的小寄存器。当我们将某个内容推入堆栈内存时,堆栈指针会增加。

8051单片机的堆栈内存分配
8051单片机的堆栈内存分配

例子

当8051微控制器通电时,堆栈指针包含的值默认为07,如上图所示。如果我们执行“推”操作,那么堆栈指针地址将增加并移到另一个寄存器。为了避免这个问题,在启动程序之前,我们必须为堆栈指针分配一个不同的地址位置。

推送操作

“PUSH”用于从任何寄存器获取值,并通过使用“PUSH”操作存储在堆栈指针的起始地址,即00h。并且,对于下一个“PUSH”,它递增+1,并将值存储在堆栈指针的下一个地址中,即01h。

堆栈的推送操作
堆栈的推送操作

推送操作方式(先进先出)

示例:用于推送操作的汇编语言WAP

000小时
移动08h,#21h
移动09小时,#56小时
按00h
按01h
结束

POP操作

它用于将值从堆栈指针的最大地址放置到任何其他寄存器的地址。如果我们再次使用这个'POP',那么它将递减1,并且存储在任何寄存器中的值将被给定为'POP'。

堆栈中的POP操作
堆栈中的POP操作

弹出操作意味着“后进先出”。

000小时
MOV 00小时,#12小时
MOV 01小时,#32小时
弹出1FH
弹出0EH
结束

8051单片机的寄存器

如果我们执行任何操作,无论是加法还是减法,那么这些操作都不能直接在内存中执行,因此,是通过使用寄存器来执行的。有不同类型的8051单片机中的寄存器.

这些寄存器根据其操作分为两类:

•通用寄存器

•特殊功能寄存器

通用暂存器

正如我们在本文前面讨论的,有四个不同的银行寄存器,每个银行有8个可寻址的8位寄存器,一次只能访问一个银行寄存器。但是,通过更改标志寄存器中银行寄存器的编号,我们可以访问其他银行寄存器,这在本文前面已经讨论过8051中的中断概念.

特殊功能寄存器

特殊功能寄存器包括累加器、寄存器B、数据指针、PCON、PSW等,在地址为80H到FFH的制造过程中被设计用于预定目的,并且该区域不能用于数据或程序存储目的。这些寄存器可以通过位地址和字节地址寄存器来实现。

特殊功能寄存器的类型

8051由四个输入/输出相关的特殊功能寄存器组成,其中共有32条I/O线。特殊功能寄存器控制从I/O线读取的值和控制8051操作的特殊功能寄存器。辅助特殊功能寄存器不直接连接到8051,但事实上,没有这些寄存器,8051无法正常工作。下面说明8051的寄存器组。

8051单片机的寄存器组

在寄存器中设置固定的常量值称为寄存器集。使用指令集在寄存器中设置值。8051遵循CISC指令,采用“哈佛”架构。这个CISC代表复杂指令集计算. 8051微控制器中不同类型的指令包括:

  1. 算术指令
  2. 条件指令
  3. 呼叫和跳转指令
  4. 循环指令
  5. 逻辑指令
  6. 金条说明

1.算术指令

算术指令执行几个基本操作,例如:

  • 加法
  • 减法
  • 乘法
  • 分部
8051单片机中的算术指令
8051单片机中的算术指令

示例:

A.附加:

组织0000h
MOV R0,#03H//移动值3是寄存器R0//
MOV A,#05H//移动累加器A中的值5//
将一个,00H//累加器值“5”与0相加,并存储在累加器上//
结束

B减法:

组织0000h
MOV R0,#03H//移动值3是寄存器R0//
MOV A,#05H//移动累加器A中的值5//
SUBB A,03H//A=5-3最终值为2存储在累加器A中//
结束

C乘法:

组织0000h
MOV R0,#03H//移动值3是寄存器R0//
MOV A,#05H//移动累加器A中的值5//
MUL A,03H//A=5*3最终值为15,存储在累加器A中//
结束

D部门:

组织0000h
MOV R0,#03H//移动值3是寄存器R0//
MOV A,#15H//移动累加器A中的值5//
DIV A,03H//A=15/3最终值为5存储在累加器A中//
结束

2.条件指令

CPU可以通过检查单位状态或字节状态来根据条件执行指令,称为条件指令,例如:

检查位可寻址寄存器中的单位状态

JB-低于时跳转

JNB-不在上面时跳转

检查进位状态

JC-进位标志跳转

如果没有携带JNC跳转

要检查收集器状态,请选择0或1

JZ-零跳标志

JNZ-非零跳转

这是所有关于8051微控制器的寄存器设置和它们的堆栈内存分配。我们希望这篇文章能给你一些关于这个主题的基本见解,以及一些与每个主题相关的非常有趣的程序。你也可以写信给我们寻求任何帮助微控制器编码还有关于微控制器最新进展.

一个评论

  1. 伊塞托因加 说:

    你好,Elprocus团队,
    我非常喜欢你在微控制器上的出色工作和解释。我有一个项目,我寻求你的帮助。我的项目包括在寄存器控制器中注册时间。
    你有什么办法可以帮助这个项目吗?
    非常感谢。
    伊塞托因加

添加注释