下图中我们能看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。
<单片机内部结构图>
javascript:resizepic(this) border=0>
 
对上面的图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到对应I/O口的锁存器就能了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表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  | 电源控制寄存器  | 
表1 
 
<特殊功能寄存器地址映象表(一)>
 
javascript:resizepic(this) border=0>
<特殊功能寄存器地址映象表(二)>
javascript:resizepic(this) border=0> 
<特殊功能寄存器地址映象表(三)>
javascript:resizepic(this) border=0>
下面,我们介绍一下几个常用的SFR,看图2。
ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后我们将学到指令,能发现,所有的运算类指令都离不开它。
2、B:一个寄存器。在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3、PSW:程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们能了解CPU的当前状态,并作出对应的处理。它的各位功能请看表2
D7  | D6  | D5  | D4  | D3  | D2  | D1  | D0  | 
CY  | AC  | F0  | RS1  | RS0  | OV  | 
  | P  |