返回首页
当前位置: 主页 > 编程基础知识 >

51单片机常用SFR(特殊功能寄存器)的功能及作用介绍

时间:2009-03-02 18:22来源:未知 作者:牛牛 点击:
1、ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后我们将学到指令,能

1、ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后我们将学到指令,能发现,所有的运算类指令都离不开它。

单片机

2、B:一个寄存器。在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。

单片机

3、PSW:程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们能了解CPU的当前状态,并作出对应的处理。它的各位功能请看表2 单片机

D7 单片机

D6

单片机

D5

单片机

D4

单片机

D3 内容来自单片机之家www.dpj100.com

D2 内容来自单片机之家www.dpj100.com

D1 单片机

D0 单片机

CY

内容来自单片机之家www.dpj100.com

AC 单片机

F0 单片机

RS1 单片机

RS0

单片机

OV

单片机

  单片机

P 内容来自单片机之家www.dpj100.com

表2

单片机

PSW也称为标志寄存器,了解这个对于了解单片机原理非常的重要,存放各有关标志。其结构和定义如下:

单片机

点此在新窗口浏览图片 单片机

下面我们逐一介绍sfr各位的用途 内容来自单片机之家www.dpj100.com

(1)CY:进位标志。用于表示Acc.7有否向更高位进位。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。

单片机

例:78H+97H(01111000+10010111) 单片机

(2)AC:辅助进位标志也叫半进位标志。 用于表示Acc.3有否向Acc.4进位

单片机

例:57H+3AH(01010111+00111010)

内容来自单片机之家www.dpj100.com

(3)F0:用户标志位,由我们(编程人员)决定什么时候用,什么时候不用。 单片机

(4)RS1、RS0:工作寄存器组选择位。这个我们已知了。
RS1、RS0 = 00 —— 0区(00H~07H) 内容来自单片机之家www.dpj100.com

RS1、RS0 = 01 —— 1区(08H~0FH)

单片机

RS1、RS0 = 10 —— 2区(10H~17H)

单片机

RS1、RS0 = 11 —— 3区(18H~1FH)

内容来自单片机之家www.dpj100.com

(5)0V:溢出标志位。 表示Acc在有符号数算术运算中的溢出,什么是溢出我们稍后再谈吧。 单片机

(6)P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,不然为0。 单片机

例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。

内容来自单片机之家www.dpj100.com

4、DPTR(DPH、DPL):数据指针,能用它来访问外部数据存储器中的任一单元,如果不用,也能作为通用寄存器来用,由我们自已决定如何使用。16位,由两个8位寄存器DPH、DPL组成。主要用于存放一个16位地址,作为访问外部存储器(外RAM和ROM)的地址指针。 内容来自单片机之家www.dpj100.com

5、P0、P1、P2、P3:这个我们已经知道,是四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。

单片机

6、SP:堆栈指针。(专用于指出堆栈顶部数据的地址。)

单片机

堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:“先进后出,后进先出”。请大家想想,还有什么地方有这种现象?其实比比皆是,建筑工地上堆放的砖头、材料,仓库里放的货物,都是“先进后出,后进先出”,这实际是一种存取物品的规则,我们称之为“堆栈”。 内容来自单片机之家www.dpj100.com

在单片机中,我们也能在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规则就是“先进后出,后进先出”,我们称之为“堆栈”。为什么需要这样来存放数据呢?存储器本身不是能按地址来存放数据吗?对,知道了地址的确就能知道里面的内容,但如果我们需要存放的是一批数据,每一个数据都需要知道地址那不是麻烦吗?如果我们让数据一个接一个地放置,那么我们只要知道第一个数据所在地址单元就能了(看图2)如果第一个数据在27H,那么第二、三个就在28H、29H了。所以利用堆栈这种办法来放数据能简化操作 单片机

那么51中堆栈什么地方呢?单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM)中开辟一块地方,用于堆栈,但是用内存的哪一块呢?还是不好定,因为51是一种通用的单片机,各人的实际需求各不相同,有人需要多一些堆栈,而有人则不需要那么多,所以怎么分配都不合适,怎样来解决这个问题?分不好干脆就不分了,把分的权利给用户(编程者),根据自已的需要去定吧,所以51单片机中堆栈的位置是能变化的。而这种变化就体现在SP中值的变化,看图2,SP中的值等于27H不就相当于是一个指针指向27H单元吗?当然在真正的51机中,开始指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置,比如一开始指针是指向27H单元的,那么第一个数据的位置是28H单元,而不是27H单元,为什么会这样,我们在学堆栈命令时再说明。其它的SFR,我们在用到时再介绍。
点此在新窗口浏览图片 内容来自单片机之家www.dpj100.com

顶一下
(11)
52.4%
踩一下
(10)
47.6%
------分隔线----------------------------
推荐内容