首页- 新闻中心- 正文

芯片解密基础知识:单片机的特殊功能寄存器

来源:芯片解密-龙芯世纪   时间:2010-03-18   阅读:2099

我们知道,单片机内部ROM,1内存,并行I / O端口,那么,除了这些外,微控制器也正是屋子里,如何解决这些东西分散一起,让我们在功能分析的微控制器寄存器要完全吧!
 
在MCS - 51已计算的内部控制的CPU,有4个并行I / O端口,分别为P0,的P1,P2,P3号,一个ROM,用于存储程序,有内存,用来存储中间结果,除了有定时器/计数器,串行I / O端口,中断系统,以及内部时钟电路。 51单片机的房子有这么多东西

 在进一步分析上面的地图,我们知道,并行I / O端口读,写,只要数据发送到相应的I / O端口锁存将能够,那么计时器/计数器,串行I / O端口,例如如何使用?在微控制器有一个独立的存储单元的数量来控制这些设备,所谓的特殊功能寄存器(SFR)实现。事实上,我们已经接触到这个小特殊功能寄存器,还有哪些呢?看下表1

符号
 地址
 功能介绍
 B
 F0H
 B寄存器
 ACC
 E0H
 累加器
 PSW
 D0H
 程序状态字
 IP
 B8H
 中断优先级控制寄存器
 P3
 B0H
 P3口锁存器
 IE
 A8H
 中断允许控制寄存器
 P2
 A0H
 P2口锁存器
 SBUF
 99H
 串行口锁存器
 SCON
 98H
 串行口控制寄存器
 P1
 90H
 P1口锁存器
 TH1
 8DH
 定时器/计数器1(高8位)
 TH0
 8CH
 定时器/计数器1(低8位)
 TL1
 8BH
 定时器/计数器0(高8位)
 TL0
 8AH
 定时器/计数器0(低8位)
 TMOD
 89A
 定时器/计数器方式控制寄存器
 TCON
 88H
 定时器/计数器控制寄存器
 DPH
 83H
 数据地址指针(高8位)
 DPL
 82H
 数据地址指针(低8位)
 SP
 81H
 堆栈指针
 P0
 80H
 P0口锁存器
 PCON
 87H
 电源控制寄存器
 
下面,我们介绍一下几个常用的SFR,

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

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

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

D7
 D6
 D5
 D4
 D3
 D2
 D1
 D0
 
CY
 AC
 F0
 RS1
 RS0
 OV

PSW也称为标志寄存器,了解这个对于了解单片机原理非常的重要,存放各有关标志。其结构和定义如下:
下面我们逐一介绍sfr各位的用途

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

例:78H+97H(01111000+10010111)

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

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

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

(4)RS1、RS0:工作寄存器组选择位。这个我们已知了。
             RS1、RS0 = 00 —— 0区(00H~07H)

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

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

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

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

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

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

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

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

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

 在单片机中,我们还可以创建一个这样的RAM区用于存储数据,在这个地区存储数据是规则,“先进后出,后进先出”,我们称之为“堆栈”。为什么我们需要存储这些数据?内存本身无法单击添加来存储数据?是的,知道地址真的知道的内容里面,但如果我们需要存储的数据组,每一个需要知道的数据地址,不麻烦吗?如果我们让数据放在一个接一个,那么我们只知道第一个数据单元格的地址可以了,如果在27款的第一个数据,然后在第二,关于28H 3,29H的。因此,使用这种方法把数据栈简化操作

   然后,51堆栈区?微控制器可以存储数据面积有限,我们不能明确指定一个地方做堆栈,所以在内存(RAM)开设了堆栈,但其中一个与内存的一个地方?或者不应该,因为51是一种通用型与每个不同的实际需要,而微控制器,有些人需要更多的堆栈,但有些人并不需要这么多,又怎样分配不当,以及如何解决这个问题?只是在大点好,并能正确的点,给用户(程序员),根据自己的需要设置它,所以堆栈的51单片机的位置可以改变。而这一变化反映在了在SP的变化值,参见图2,SP是等于27H款值不是一个指针相当于27H款单位怎么办?当然,在真正的51机开始提到的指针的位置不是数据的位置存储,但数据存储在以前的位置,如开始指针27H款细胞,然后在位置的第一个数据28H单元,而不是27H款单位,为什么会这样,我们学习的命令时再次堆栈指示。其他的SFR,我们使用时再次介绍