所以你可能从名字本身就猜到了一些东西——”特殊功能寄存器的缩写SFR.Well, your guess is right Okay! Lets come to the point. There是21个特殊函数寄存器(SFR)其中包括寄存器A、寄存器B、处理器状态字(PSW)、PCON等。这21个特殊函数寄存器有21个独特的位置,每个寄存器的大小为1字节。一些特殊的函数寄存器是位可寻址(这意味着您可以访问单个字节内的8个独立位),而其他一些位是仅字节可寻址.让我们详细地看看它们。
注册/蓄电池
所有特殊函数寄存器中最重要的,这是第一个注释蓄电池也被称为ACC或一个。累加器(有时也称为寄存器A)保存大多数算术和逻辑运算的结果。ACC通常通过直接寻址访问,其物理地址为E0H。蓄电池是字节和位均可寻址。你可以从下图中理解这一点。要访问第一个位(即0位)或作为单个字节访问累加器(一次所有8位),您可以使用相同的物理地址E0H。现在,如果你想访问第二个位(即位1),你可以使用E1H和第三位E2H等等。
寄存器B
该寄存器的主要用途是执行乘法和除法。8051微控制器有一条乘法指令(MUL)和司(DIV). 如果您熟悉8085,您现在可能知道乘法是重复加法,而as除法是重复减法。在编程8085时,您可能编写了一个循环来执行重复的加法/减法以执行乘法和除法。现在在8051中,你可以用一条指令来完成这项工作。
例:MUL A,B—执行此指令时,A内的数据与B内的数据相乘,答案存储在A中。
注意:对于MUL和DIV指令,两个操作数必须位于A和B中。
注意:如果你有兴趣了解,请点击这个链接微处理器和微控制器的区别.
寄存器B也是字节可寻址和位可寻址的。要访问位o或访问所有8位(作为单个字节),使用物理地址F0。要访问位1,可以使用F1等。请看下面的图片。
注意:寄存器B也可用于其他通用操作。
端口寄存器
您可能已经知道,8051有4个端口。如果您不熟悉8051的架构,请阅读以下文章:-8051的体系结构
因此,4个名为P0, P1, P2, P3的输入/输出端口有四个对应的端口寄存器,它们的名称相同:P0, P1, P2, P3。数据必须首先写入端口寄存器,然后通过端口发送到任何其他外部设备。类似地,任何通过端口接收的数据都必须从端口寄存器中读取,以便执行任何操作。所有4端口寄存器都是位以及字节可寻址的。为了更好地理解端口寄存器,请看下图。
从图:-
- 端口0的物理地址为80
- 端口1的物理地址是90
- 端口2的压强是A0
- 端口3的值为B0
堆栈指针
stack pointer(堆栈指针)以缩写SP而广为人知,它表示指向系统堆栈的指针。堆栈指针是一个8位寄存器,SP的直接地址是81H,并且它只有字节可寻址,这意味着您无法访问堆栈指针的各个位。堆栈指针的内容指向系统堆栈的最后存储位置。要在系统堆栈中存储新内容,必须先将SP增加1,然后执行“store”命令。通常在系统复位后,SP初始化为07H,数据可从08H起存储到堆栈中。这通常是默认情况,程序员可以根据自己的需要更改SP的值。
电源管理寄存器(PCON)
使用微控制器进行电源管理是你每天在手机上看到的事情。难道你没有注意到,当手机在几秒钟或几分钟内不使用时,会自动进入待机模式,并对此感到惊讶吗?这是通过手机内部控制器的电源管理功能实现的。
顾名思义,该寄存器用于8051微控制器的高效电源管理。通常被称为PCON寄存器,这是单独用于电源管理的专用SFR。从下图中你可以看到这个寄存器有两种模式:-空闲模式和断电模式。
设置位0将微控制器移动到空闲模式,设置位1将微控制器移动到断电模式。
处理器状态字(PSW)
通常称为PSW寄存器,这是微控制器功能中至关重要的SFR。此寄存器反映处理器中正在执行的操作的状态。下图显示了PSW寄存器以及使用PSW寄存器位RS1和RS0选择寄存器组的方式。PSW寄存器可位和字节寻址。PSW的物理地址从D0H开始。然后使用D1、D2…D7访问各个位。下面解释各种独立位。
位号 |
一些符号 |
直接地址 |
的名字 |
函数 |
0 | P | D0 | 奇偶校验 | 如果在一个操作后ACC有奇数个1,这个位将被设置。如果没有,比特将保持清除。 |
1 | - - - - - - | D1 | 用户可定义的位 | |
2 | 机汇 | D2 | 溢流 | 如果一个算术运算从第6位进位而不是从第7位进位,则设置OV标志。如果Acc从第7位进位(而不是从第6位进位),它也会被设置 |
3. | RS0 | D3 | 寄存器银行选择位0 | 寄存器银行选择位的LSB。请看表下的解释。 |
4 | 卢比 | D4 | 寄存器银行选择位1 | 寄存器银行的MSB选择位。 |
5 | F0 | D5 | 标志0 | 用户定义的标记 |
6 | 交流 | D6 | 辅助进位 | 如果在算术运算期间数据从Acc的第3位到第4位输出,则设置该位。 |
7 | CY | D7 | 携带 | 如果数据在算术运算期间从Acc的第7位输出,则设置。 |
有时寄存器的值可以从R0,R1…到R7。您可能已经知道有32个这样的寄存器。那么如何用8个变量来访问32个寄存器呢?现在开始使用注册银行了。有4个寄存器库,分别为0、1、2和3。每家银行有8个从R0到R7的寄存器。一次只能选择一个登记银行。通过PSW寄存器位PSW.3和PSW.4,即RS0和RS1,可以选择寄存器组。这两个位被称为登记银行选择位,因为它们被用来选择登记银行。图片将更多地讨论选择注册银行。
到目前为止,我们已经讨论了8051中的所有主要SFR。还有很多其他人还在等着呢!请记住有21个SFR,我们只讨论了9个。下表列出了所有其他12个SFR。
SFR |
地址 |
函数 |
DPH | 83 | 数据指针寄存器(高)。只能进行字节寻址。 |
DPL | 82 | 数据指针寄存器(低)。只能进行字节寻址。 |
知识产权 | B8 | 中断优先级。位寻址和字节寻址都是可能的。 |
即 | A8 | 中断使。位寻址和字节寻址都可能。 |
SBUF | 99 | 串行输入/输出缓冲区。只有字节寻址是可能的。 |
SCON | 98 | 串行通信控制。位寻址和字节寻址都是可能的。 |
TCON | 88 | 定时器控制。位寻址和字节寻址都可能。 |
TH0 | 8C | 计时器0计数器(高)。只有字节寻址是可能的。 |
TL0 | 8A | 计时器0计数器(低)。只有字节寻址是可能的。 |
TH1 | 8D | 定时器1计数器(高)。只有字节寻址是可能的。 |
TL1 | 8B | 定时器1计数器(低)。只有字节寻址是可能的。 |
TMOD | 89 | 定时器模式选择。只有字节寻址是可能的。 |
4评论
我真的很感谢你的解释。请给我更多关于计时器、计数器和代码的解释。
很好的解释
关于8051微控制器特殊功能寄存器的奇妙解释。这对使用微控制器的初学者来说非常有用。他们会有一个好主意。
长官,堆栈内存在哪里?