我们已经讲过,R7,R6 是工作寄存器,P0,P1,P2,P3 是并行口,那么单片机中还有些什么东西?它们的结构又是怎么样的呢?这就是本课要讨论的问题。一.单片机的特殊功能寄存器,在单片机中,除了前面介绍的RAM,ROM,P0-P3 和CPU 外,方框内的还有许多其他的东西它们被称为特殊功能寄存器,英文简写SFR ,下表例出的就是MCS-51 单片机中几个常用的特殊功能寄存器。这一课我们先来介绍几个:
二.几个常用的特殊功能寄存器
1.累加器ACC
通常用A 表示,它是一个什么东西呢?我们知道单片机在做运算时它的中间结果需要放在某个地方,这个地方就是累加器,它的名字很特殊,功能也很特殊,几乎所有的运算类指令都离不开它。
2.寄存器B
B 寄存器在做乘法时用来存放一个乘数,在做除法时用来存放一个除数,不做乘除法时随你怎么用。
3.程序状态字PSW
它是一个很重要的东西,里面放了CPU 工作时的很多状态,知道它就可以了解CPU 当前的工作状态,它有点象平时看书用的目录,我们浏览它就可以了解一本书的内容。它是一个8 位的寄存器,用到了其中的7 位。其格式如下:
下面来逐位介绍它的功能:
(1)CY:进位标志位
MCS-51 是一种8 位的单片机,它的运算结果只能表示到28(即0-255),但我们有时候的运算结果要超过255 ,怎么办呢?就要用CY 位。例如:79H+87H(01111001+01010111)=1 00000000 ,这里的“1”就进到了CY 中去了。
(2)AC:半进位标志位
当D3 位向D4 位进位/借位时,AC=1,通常用于十进制调整运算中。
(3)F0:用户自定义标志位
由编程人员自行决定,什么时候用,什么时候不用。
(4) RS1、RS0:工作寄存器组选择位。
前面讲到单片机共有四个工作寄存器组(0 组-3 组),它们就是由RS1,RS0 来控制,这两位就在这里,它共有四种组合状态,看上面的表格:每个工作寄存器组有8 个字节,分别记为R0-R7 ,当然在某一时刻,CPU 只使用其中的一组。
假设PSW 为“10”(即00010001),那么RS1=1,RS0=0,则用到了第2 组寄存器组(地址10H-17H),RO-R7 即为10H-17H ,用DUBG8051 软件输入数值,看看内部RAM 中地址为10H-17H 中的值是不是为输入值。
(5) 0V:溢出标志位
什么时候溢出,我们讲到定时器时再研究。
(6) P:奇偶检验位
每次运算结束后若A 中二进制数“1”的个数为奇数,则P=1 ,否则P=0 。例:某运算结果是58H (01011000),显然“1”的个数为奇数,所以P=1。
4.DPTR(DPH,DPL):数据指针
数据指针是一个16 位的寄存器,我们可以用它来访问外部RAM ,也可以访问外部ROM 中的表格,具体应用以后再讲。
5.SP:堆栈指针:
让我们先来理解一下堆栈是什么意思?你在家洗碗吗?我们洗好碗之后,是怎么放的呢?一般总是先洗的放在下面,晚洗的放在上面,然后用的时候呢,总是晚放上去的先用,先放上去的后用;如果你不洗碗不要紧,知道码头上仓库里堆的货物吗?一般也是先进去的后出来,而后进去的先出来,这种符合“先进后出,后进先出”存放规则的现象我们就把它叫做“堆栈”。(其实栈在中文中的意思就是码头)。
在单片机中,我们可以在内部RAM 中构造出(注意☺:是可以构造)这样一个区域,这个区域存放数据的规则就符合堆栈中“先进后出,后进先出”的原则。为什么要有这样一个区域呢?存储器本身不也同样可以存放数据吗?是的,知道了存储器地址确实可以读出它里面的内容,但如果我们要读出的是一批数据,每一个数据都要给出一个地址就会很麻烦,为了简化操作就可以利用堆栈的存放方法来读取数据,具体的应用我们将在十五课中结合具体实验来讲,这里只是让大家先了解一下。那么堆栈在单片机的什么地方?也就是说把RAM 空间的哪一块区域作为堆栈呢?这就不好定了,因为51 系列单片机是一种通用的单片机,每个人的实际需要各不相同,有人需要多一些堆栈,而有人则不需要那么多堆栈,所以INTEL 公司就干脆不分了,把分的权利让给用户(编程者),也就是说我们可以根据自已的需要来决定,所以单片机中堆栈的位置是可以变化的,而这种变化就体现在SP 中值的变化,看下面的图,SP 中的值等于27H 不就相当于是一个指针指向27H 单元吗?这就是堆栈指针的由来。
当然在MCS-51 单片机中,指针开始所指的位置并非就是数据存放的位置,而是数据存放的前一个位置。例如一开始堆栈指针是指向27H 单元的,那么第一个数据的存放位置就在28H 单元中,而不是27H 单元中,这一点请大家注意。
6.电源控制寄存器PCON
单片机在以电池供电的系统中,有时为了节电,我们需要让它尽量降低电源的消耗,所以单片机就有多种的工作方式,其中一种就是低功耗方式,PCON 寄存器就是用来控制单片机进入低功耗方式的。
|
|
|