一、单片机的结构原理
1.1 主要性能和特点
1.内部程序存储器ROM :4K的flash程序存储器;
2.寄存器区:4个寄存器区,每个区有R0-R7八个工作寄存器;
3.8位并行输入输出端口:P0、P1、P2和P3;
4.定时/计数器:2个16位的定时/计数器 T0、T1;
5.串型口:全双工串行端口(RXD:接收端、TXD发送端);
6.中断系统:设有5个中断源(T0、T1、Int0、Int1、ES);
7.系统扩展能力:可外接64K的 ROM 和64K的 RAM;
8.堆栈:设在RAM单元、位置可以浮动(通过指针SP来确定堆栈在RAM中的位置)系统复位时SP=07H;
9.布尔处理机:配合布尔运算的指令进行各种逻辑运算;
10.指令系统:111条指令。按功能可分为数据传送、算术运算、逻辑运算、控制转移和布尔操作5大类。
1.2 内部框图
1.3 CPU
CPU由运算器和控制器两部分组成,主要完成取指令、指令译玛、发出各种操作所需的控制信号,使单片机各个部分协调工作。
1.3.1 运算器
运算器是以算术逻辑单元ALU为核心,加上累加器A、寄存器B、程序状态字PSW及专门用于位操作的布尔处理机等组成的,它可以实现数据的算术运算、逻辑运算、位变量处理和数据传送等操作。
1.3.2 控制器
控制器是单片机的控制中心,它包括定时和控制电路、指令寄存器、指令译码器、程序计数器PC、堆栈指针SP、数据指针DPTR以及信息传送控制部件等。
它先以振荡信号为基准产生CPU的时序,从ROM中取出指令到指令寄存器,然后在指令译码器中对指令进行译码,产生指令执行所需的各种控制信号,送到单片机内部的各功能部件,指挥各功能部件产生相应的操作,完成指令对应的功能。
1.4 几个主要的特殊功能寄存器SFR说明
1.4.1 程序指针PC
1.为CPU指明将要执行的指令地址,(存放下一条指令的地址)。长度为16位,所以寻址范围为0-65535(64K)。
2.单片机在复位时PC=0000H,这就意味着一旦将单片机复位,CPU就从ROM的0000H单元执行程序。
3.在物理上是独立于SFR。
1.4.2 累加器A
最常用的寄存器。所有的算术运算指令所要使用的寄存器且运算结果都存放在A中。
1.4.3 寄存器B
乘、除法指令专用的寄存器,当然也可作为一般的工作寄存器使用。
1.4.4 数据指针DPTR
1.由两个8位寄存器构成。高八位寄存器DPH和低八位寄存器DPL构成16位的寄存器DPTR。
2.DPTR主要用来存放外部数据存储器RAM的地址,作为CPU访问外部RAM的数据指针;
3.CPU的查表指令使用DPTR提供ROM中表格的首地址;
4.在MCS-51单片机中,CPU访问外部RAM中的数据或ROM中的表格、常数必须借助DPTR做指针来实现数据的读取访问。
1.4.5 程序状态字PSW
8位寄存器,表征程序执行的状态信息。
介绍
1.CY(PSW.7)进位标志:
在加减法运算中,累加器A的最高位D7有进位,则CY=1,否则CY=0。同理,在减法运算中,如果A7有借位,则CY=1.因此CY往往作为无符号数运算是否有溢出的标志。
2.AC(PSW.6)辅助进位位:
用来判断加减法运算时,低四位是否向高四位进位或借位(既A3的进位或借位)。往往用来处理压缩的BCD码的运算处理。
3.F0(PSW.5) 用户标志位:
完全由用户来定义和使用。
4.RS1,RS0工作寄存器区选择位:
补充:寄存器区:4个寄存器区,每个区有R0-R7八个工作寄存器;
确定工作寄存器R0-R7在4个区中的位置(单片机在复位后RS1、RS0=00 — 选择0区)。可以通过修改RS1,RS0的值来改变工作寄存器区的选择。
5.OV(PSW.2)溢出标志位
判断有符号数运算时是否有溢出。
OV的结果可以用一个算法来表示: OV=CP异或CS
其中:CP为A7的进位,CS为A6的进位OV=1表明有溢出。
百度解释:溢出标志位:对于单字节的有符号数,若用最高位(b7)表示正、负号,则只有7位有效数位(b6~b0),能表示-128~+127之间的数。运算结果超出了这个数值范围,就会发生溢出,此时OV=1,否则OV=0。
6.P(PSW.0)奇偶标志位:
用来标志累加器A中运算后“1”的个数。
当P=1时,表明A中1的个数为奇数个,反之为偶数个。
例子
1.4.6 堆栈指针SP
SP 堆栈指针:8位寄存器,用来指示堆栈的位置,可由软件修改。
堆栈的介绍
堆栈是一种按“先进后出”规律操作的存储结构。不同类型的处理器其堆栈的设计各不相同:
SP寄存器作为堆栈指针。这种结构的特点是充分的利用RAM的空间,使堆栈的空间得以扩大。但它也有一种“致命”的弱点:数据很容易与堆栈发生冲突,特别是初学编程者。
为了避免上述问题的出现,编程者往往在程序的开始加上一条指令: MOV SP,60H 试分析为什么?
百度解释:
单片机复位后SP的值一般要用一条指令赋值为60H,这只是个别人写程序的爱好与习惯罢了,没有任何规定必须是赋值60H,更没有任何原因必须选60H。
就单片机复位后,SP=07H,不用重新赋值也是可以的,否则,为什么当初设计者会这么设计呢。由于51单片机的堆栈是向上增长的,所以,为了避免堆栈区与用户数据区互相影响,才将SP设置在60H以后,比较合理的是赋值为6FH,这样堆栈区可用70H~7FH,预留有16个单元足够,也不浪费。
堆栈的作用
①保护程序的断点地址(既返回地址);
②保护数据(也称保护现场)。
堆栈操作的两种方式
①断点地址的保护是靠执行子程序调用指令或发生中断调用时,由硬件自动实现断点地址的进栈保护;在子程序或中断服务程序返回时有RET或RETI指令实现恢复断点;
②而对于其它需要保护的数据都要由专用的指令PUSH或POP来实现进栈保护或恢复。
二、单片机的存储器结构
1.程序存储器ROM要掌握的要点是:6个特定的入口单元;
2.数据存储器RAM要掌握的要点是:内部结构(包括寄存器区、堆栈区、位寻址区和特殊功能寄存器SFR区)。
① 内部集成了4K的程序存储器ROM;
② 内部具有256B的数据存储器RAM;
③ 可以外接64K的程序存储器ROM和数据存储器RAM。
从物理结构的角度讲,51单片机的存储系统可以分为四个存储空间:既片内ROM,RAM和片外ROM、RAM。
从逻辑上讲(既编程的角度),51单片机的存储系统实际上分为三个存储空间。
1. 片内数据存储器RAM;
2. 片外数据存储器RAM;
3. 片内或外的程序存储器ROM(由EA电平决定)。
结构图:
2.1 程序存储器ROM(片内、片外)
1.程序存储器ROM用于存放程序、常数或表格。
2.在51单片机中,由引脚 /EA 上的电平选择内、外ROM;
EA=1时,CPU执行片内的4KROM中的程序;
EA=0时,CPU选择片外ROM中的程序。
3.无论是使用片内还是使用片外ROM,程序的起始地址都是从ROM的0000H单元开始。
4.尽管系统可以同时具备片内ROM和外部ROM,但是在一般正常使用情况下,通过/EA的设定来选择其一(或者使用内部ROM,或者使用外部ROM)。
5.如果EA=1(执行片内程序存储器中程序时):
如果程序计数器的指针PC值超过0FFFH(4K)时,单片机就要自动的转向片外的ROM存储器且从1000H单元开始执行程序(无法使用片外ROM的低4K空间)。
2.1.1 程序存储器六个特殊的单元
0000H单元:复位时程序计数器PC所指向的单元,因此用来 存放程序中的第一条指令;
0003H单元:外部中断/INT0的矢量入口地址;
000BH单元:定时器T0溢出中断的矢量入口地址;
0013H单元:外部中断/INT1的矢量入口地址;
001BH单元:定时器T1的溢出中断矢量入口地址;
0023H单元:串行口接收、传送的中断矢量入口地址。
矢量入口单元:在编写中断程序时,写入对应的“跳板指令”。
因为在复位时,程序指针PC指向0000H
2.1.2 外部程序存储器
当单片机使用外ROM存储器时(扩展系统),必须设定/EA=0,此时单片机的端口功能就要发生相应的改变:
① P0、P2作为外部ROM的地址和数据总线;
② 使用引脚/psen信号来选通外部ROM的数据三态输出。
2.2 数据存储器RAM
无论在物理上还是逻辑上,系统中RAM 都可分为两个独立空间:内部和外部RAM。由不同的指令来访问。
1.访问内部数据存储单元时,使用 MOV 指令;
2.访问外部数据存储器时,使用 MOVX 指令。
内部RAM从功能上将256B空间分为二个不同的块:
1.低128B的RAM块;
2.高128B的SFR(Special Function Register )块。
在低128B的RAM存储单元中又可划分为:
1.工作寄存器区;
2.位寻址区;
3.通用存储数据的“便签区”。
高128B的专用寄存器区SFR中仅仅使用了21寄存器(51系列),其它107个单元不能使用。
2.2.1 AT89 片内、片外数据存储器示意图
2.2.2 片内RAM低128B 字节功能分配图
工作寄存区区结构图(0区)
片内RAM中具有双重功能的存储结构图
RAM的20H~2FH的存储特点(位寻址区)
20H~2FH本身是字节地址,因此这些单元可以按照常规存储16个字节的数据。如:
1.MOV 20H,A ;将累加器A中的数据送RAM的 20H单元(字节传送操作)
2.将20H~2FH中的16*8既128个bit分别定义其位地址00H~7FH(如图),这样CPU可以按位来访问这些bit:
MOV 20H,C ;将Cy中的布尔变量送20H位地 址中(位传送)
2.2.3 特殊功能寄存器SFR
特殊功能寄存器 SFR (Special Function Register) 离散分布在256B字节中的高128B中。
1.设定单片机内部各模块的工作方式,存放相关模块的状态与标志。如定时器、串行口,并行端口和中断设置等。
2.尽管特殊功能寄存器与RAM在同一个单元中,但不能作为普通的RAM存储单元来使用。
3.在编程中根据需要,进行一些特定功能的设定,或者是从中查寻相关部件的状态时,才能对其进行读、写操作。如中断方式的设定、定时器工作模式的设定,查询串行口发送或接收是否结束等等。
具有位地址和位名称的SFR才可以位寻址。
位地址有以下4种表示形式:
直接使用位地址表示
例如:0D7H —— PSW最高位的位地址
使用位名称表示、
例如:CY —— PSW最高位的位名称
使用SFR字节地址.位形式表示
例如:0D7H.7 —— PSW字节地址.最高位
使用SFR名称. 位形式表示
例如:PSW.7 —— PSW名称.最高位
位寻址:20H-2FH和能被8整除的SFR