历史上的今天
今天是:2025年04月23日(星期三)
2021年04月23日 | 8051单片机特殊功能寄存器SFR基础详解
2021-04-23 来源:eefocus
8051单片机共有21个专用寄存器,现把其中部分寄存器简单介绍如下:
程序计数器(PC—Program Counter)。在实训中,我们已经知道PC是一个16位的计数器,它的作用是控制程序的执行顺序。其内容为将要执行指令的地址,寻址范围达64KB。PC有自动加1功能,从而实现程序的顺序执行。PC没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。因地址不在SFR(专用寄存器)之内,一般不计作专用寄存器。
累加器(ACC—Accumulator)。累加器为8位寄存器,是最常用的专用寄存器,功能较多,地位重要。它既可用于存放操作数,也可用来存放运算的中间结果。MCS-51单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累加器。
B寄存器。B寄存器是一个8位寄存器,主要用于乘除运算。乘法运算时,B存乘数。乘法操作后,乘积的高8位存于B中,除法运算时,B存除数。除法操作后,余数存于B中。此外,B寄存器也可作为一般数据寄存器使用。
程序状态字(PSW—Program Status Word)。程序状态字是一个8位寄存器,用于存放程序运行中的各种状态信息。其中有些位的状态是根据程序执行结果,由硬件自动设置的,而有些位的状态则使用软件方法设定。PSW的位状态可以用专门指令进行测试,也可以用指令读出。一些条件转移指令将根据PSW有些位的状态,进行程序转移。PSW的各位定义如下:

除PSW.1位保留未用外,其余各位的定义及使用如下:
CY(PSW.7)——进位标志位。CY是PSW中最常用的标志位。其功能有二:一是存放算术运算的进位标志,在进行加或减运算时,如果操作结果的最高位有进位或借位时,CY由硬件置“1”,否则清“0”;二是在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一固定是进位标志位。
AC(PSW.6)——辅助进位标志位。在进行加减运算中,当低4位向高4位进位或借位时,AC由硬件置“1”,否则AC位被清“0”。在BCD码调整中也要用到AC位状态。
F0(PSW.5)——用户标志位。这是一个供用户定义的标志位,需要利用软件方法置位或复位,用以控制程序的转向。
RS1和RS0(PSW.4,PSW.3)——寄存器组选择位。它们被用于选择CPU当前使用的通用寄存器组。通用寄存器共有4组,其对应关系如下:
00:0组 01:1组 10:2组 11:3组
这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。但当单片机上电或复位后,RS1 RS0=00。
OV(PSW.2)——溢出标志位。在带符号数加减运算中,OV=1表示加减运算超出了累加器A所能表示的符号数有效范围(-128 ~ +127),即产生了溢出,因此运算结果是错误的,否则,OV=0表示运算正确,即无溢出产生。
P(PSW.0)——奇偶标志位。表明累加器A中内容的奇偶性。如果A中有奇数个“1”,则P置“1”,否则置“0”。凡是改变累加器A中内容的指令均会影响P标志位。此标志位对串行通信中的数据传输有重要的意义。在串行通信中常采用奇偶校验的办法来校验数据传输的可靠性。
数据指针(DPTR)。数据指针为16位寄存器。编程时,DPTR既可以按16位寄存器使用,也可以按两个8位寄存器分开使用,即:DPH DPTR高位字节,DPL DPTR低位字节。DPTR通常在访问外部数据存储器时作地址指针使用。由于外部数据存储器的寻址范围为64 KB,故把DPTR设计为16位。
堆栈指针(SP—StackPointer)。堆栈是一个特殊的存储区,用来暂存数据和地址,它是按“先进后出”的原则存取数据的。堆栈共有两种操作:进栈和出栈。由于MCS-51单片机的堆栈设在内部RAM中,因此SP是一个8位寄存器。系统复位后,SP的内容为07H,从而复位后堆栈实际上是从08H单元开始的。但08H~1FH单元分别属于工作寄存器1~3区,如程序要用到这些区,最好把SP值改为1FH或更大的值。
对专用寄存器的字节寻址问题作如下几点说明:
(1)21个可字节寻址的专用寄存器是不连续地分散在内部RAM高128单元之中,尽管还余有许多空闲地址,但用户并不能使用。
(2) 程序计数器PC不占据RAM单元,它在物理上是独立的,因此是不可寻址的寄存器。
(3) 对专用寄存器只能使用直接寻址方式,书写时既可使用寄存器符号,也可使用寄存器。
史海拾趣
|
用verilog写可综合代码,综合后发现功能不对了。想请教一下: 1 可综合的verilog代码中,可以有不同的敏感信号吗?比如可以有多个always语句,有的敏感列表里是时钟上升沿有的是时钟下降沿吗?可以这样吗: always @(posedge clk) & ...… 查看全部问答> |
|
vxworks下socket connect时出现ENOTSUP 是何缘故? 本机是客户端通过socket周期发送数据包,一包也就1K左右 ,一个周期内发的少的话都正常,发多了就会导致连接断开,再重连的时候就出现ENOTSUP 错误,错误号35。然后就再也无法连上server了。 也做过一些setsockopt操作,但之前都没有问题。 网上 ...… 查看全部问答> |
|
同样的数据包! PC和LED屏通讯正常! mini2440串口和LED屏通讯没反应! 然后把mini2440和PC对接,看串口数据,没有问题是这个数据包。 难道mini2440的串口输出的信号和PC的不一样??????… 查看全部问答> |
|
WINCE中编写了一个基于SIP的输入法该如何调整软键盘界面的大小 WINCE中编写了一个基于SIP的输入法,SIP默认的输入法面板太小,该如何调整软键盘界面的大小?谢谢啊,第一次写书法呵呵。… 查看全部问答> |
|
电子信息工程专业就业形势分析近几年来,IT、信息与电子类的毕业生在市场供求关系上普遍还是保持稳定的状况,社会需求量相对乐观。按照2005年毕业生就业情况统计,信息产业、IT、电子类的毕业生在各理工类中就业率比较靠前。在今后的一段时间内,对 ...… 查看全部问答> |




