二、控制器
任务识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动协调地工作。 控制器包括:程序计数器、指令寄存器、指令译码器、定时及控制逻辑电路等。功能是控制指令的读入、译码和执行,从而对各功能部件进行定时和逻辑控制。
程序计数器PC是一个独立的16位计数器,不可访问。单片机复位时,PC中内容为0000H,从程序存储器0000H单元取指令,开始执行程序。
PC工作过程是:CPU读指令时,PC的内容作为所取指令的地址,程序存储器按此地址输出指令字节,同时PC自动加1。
PC中内容变化轨迹决定程序流程。当顺序执行程序时自动加1;执行转移程序或子程序、中断子程序调用时,自动将其内容更改成所要转移的目的地址。
PC的计数宽度决定了程序存储器的地址范围。PC为16位,故可对64KB(=216B)寻址。 基本工作方式:
1)程序计数器自动加1
2)执行有条件或无条件转移指令时,程序计数器将被置入新的数值,从而使程序的流向发生变化。 3)执行子程序调用或中断调用时完成下列操作: ① PC的当前值保护
② 将子程序入口地址或中断向量的地址送入PC。 PC变化的轨迹决定程序的流程。
AT89S51存储器的结构
存储器的结构特点之一是将程序存储器和数据存储器分开(哈佛结构),并有各自的访问指令。 存储器空间可分为4类。 1.程序存储器空间 片内和片外两部分。
片内4KB Flash ,编程和擦除完全是电气实现。可用通用编程器对其编程,也可在线编程。 当片内4KB Flash 存储器不够用时,可片外扩展,最多可扩展至64KB程序存储器。 2.数据存储器空间 片内与片外两部分。
片内有128 B RAM(52子系列为256B)。
片内RAM 不够用时,在片外可扩展至64KB RAM 。 3.特殊功能寄存器SFR (Special Function Register)
片内各功能部件的控制寄存器及状态寄存器。SFR综合反映了整个单片机基本系统内部实际的工作状态及工作方式。 4.位地址空间
共有211个可寻址位,构成了位地址空间。它们位于内部 RAM(共128位)和特殊功能寄存器区(共83位)中。
程序存储器空间
存放程序和表格之类的固定常数。片内为4KB的 Flash ,地址为0000H~0FFFH。16位地址线,可外扩的程序存储器空间最大为64KB,地址为0000H~FFFFH。使用时应注意以下问题: 1)分为片内和片外两部分,访问片内的还是片外的程序存储器,由引脚电平确定。
=1时,CPU从片内0000H开始取指令,当PC值没有超出0FFFH时,只访问片内Flash 存储器,当PC值超出0FFFH自动转向读片外程序存储器空间1000H~FFFFH 内的程序。
=0时,只能执行片外程序存储器(0000H~FFFFH)中的程序。不理会片内4KB Flash 存储器。 2)程序存储器某些固定单元用于各中断源中断服务程序入口。
64KB程序存储器空间中有5个特殊单元分别对应于5个中断源的中断入口地址,见表2-3。
通常这5个中断入口地址处都放一条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。
表2-3五个中断源的中断入口地址
中断源 外部中断0 入口地址 0003H
定时器T0 外部中断1 定时器T1 串行口 000BH 0013H 001BH 0023H 数据存储器空间 片内与片外两部分。 1.片内数据存储器
片内数据存储器(RAM)共128个单元,字节地址为00H~7FH。图2-4为片内数据存储器的结构。
00H~1FH 的32个单元是4组通用工作寄存器区,每区包含8B,为R7~R0。可通过指令改变RS1、RS0两位来选择。
20H~2FH的16个单元的128位可位寻址,也可字节寻址。 30H~7FH的单元只能字节寻址,用作存数据以及作为堆栈区。 2.片外数据存储器
当片内128B的RAM不够用时,需外扩,最多可外扩64KB的RAM。注意,片内RAM与片外RAM两个空间是相互独立的,片内RAM与片外RAM的低128B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。 特殊功能寄存器(SFR)
采用特殊功能寄存器集中控制各功能部件。特殊功能寄存器映射在片内RAM的 80H~FFH 区域中,共26个。表2-4 SFR的名称及其分布。有些还可位寻址,位地址见表2-4。
与AT89C51相比,新增5个SFR:DP1L、DP1H、AUXR、AUXR1和WDTRST,已在表2-4中标出。 凡是可位寻址的SFR,字节地址末位只能是0H或8H。另外,若读/写未定义单元,将得到一个不确定的随机数。
下面介绍某些SFR,余下的SFR将在后面介绍。
1.堆栈指针SP
指示堆栈顶部在内部RAM块中的位置。
堆栈结构—向上生长型。单片机复位后,SP为07H,使得堆栈实际上从08H单元开始,由于08H~1FH单元分别是属于1~3组的工作寄存器区,最好在复位后把SP值改置为60H或更大的值,避免堆栈与工作寄存器冲突。
堆栈是为子程序调用和中断操作而设,主要用来保护断点和现场。
1)保护断点。无论是子程序调用操作还是中断服务子程序调用,最终都要返回主程序。应预先把主程序的断点在堆栈中保护起来,为程序正确返回做准备。
2)现场保护。执行子程序或中断服务子程序时,要用到一些寄存器单元,会破坏原有内容。要把有关寄存器单元的内容保存起来,送入堆栈,这就是所谓的“现场保护”。
两种操作:数据压入(PUSH)堆栈,数据弹出(POP)堆栈。数据压入堆栈,SP自动加1;数据弹出堆栈,SP自动减1。 2.寄存器B
为执行乘法和除法而设。在不执行乘、除法操作的情况下,可把它当作一个普通寄存器来使用。 乘法,两乘数分别在A、B中,执行乘法指令后,乘积在BA中 除法,被除数取自A,除数取自B,商存放在A中,余数存B中。 3.AUXR寄存器
AUXR是辅助寄存器,其格式如图2-5所示:
图2-5 AUXR寄存器的格式
其中: DISALE:ALE的禁止/允许位。 0:ALE有效,发出脉冲; 1:ALE仅在执行MOVC和MOVX类指令时有效,不访问外部存储器时,ALE不输出脉冲信号。 DISRTO:禁止/允许WDT溢出时的复位输出。 0:WDT溢出时,在RST引脚输出一个高电平脉冲; 1:RST引脚仅为输入脚。 WDIDLE:WDT在空闲模式下的禁止/允许位。 0: WDT在空闲模式下继续计数; 1: WDT在空闲模式下暂停计数。 4. 数据指针DPTR0和DPTR1
双数据指针寄存器,便于访问数据存储器。 DPTR0:AT89C51单片机原有的数据指针; DPTR1:新增加的数据指针。
AUXR1的DPS位用于选择两个数据指针。当DPS=0时,选用DPTR0;当DPS=1时,选用DPTR1。 数据指针可作为一个16位寄存器来用,也可作为两个独立的8位寄存器DP0H(或DP1H)和DP0L(或DP1L)来用。 5. AUXR1寄存器
AUXR1是辅助寄存器,格式如图2-6所示: DPS:数据指针寄存器选择位。 0:选择数据指针寄存器DPTR0; 1:选择数据指针寄存器DPTR1。
6. 看门狗定时器WDT
WDT包含一个14位计数器和看门狗定时器复位寄存器——(WDTRST)。
当CPU由于干扰,程序陷入死循环或跑飞状态时,WDT提供了一种使程序恢复正常运行的有效手段。 有关WDT在抗干扰设计中的应用以及低功耗模式下运行的状态,将在相应的章节中具体介绍。
上面介绍的特殊功能寄存器,除了前两个SP和B以外,其余的均为AT89S51在AT89C51基础上新增加的SFR。
位地址空间
211个寻址位的位地址,位地址范围为 00H~FFH,其中 00H~7FH 这128位处于片内RAM 字节地址 20H~2FH 单元中,如表2-5所示。其余的83个可寻址位分布在特殊功能寄存器SFR中,见表2-6。 可被位寻址的特殊寄存器有11个,共有位地址88个,5个位未用,其余83个位的位地址离散地分布于片内数据存储器区字节地址为80H~FFH的范围内,其最低的位地址等于其字节地址,且其字节地址的末位都为0H或8H。
特殊功能 位 地 址 寄存器 D7 D6 B Acc PSW IP P3 IE P2 SCON P1 TCON P0 D5 D4 D3 D2 D1 D0 字 节地 址 F7H F6H F5H F4H F3H F2H F1H F0H F0H E7H E6H E5H E4H E3H E2H E1H E0H E0H D7H D6H D5H D4H D3H D2H D1H D0H D0H — — — BCH BBH BAH B9H B8H B8H B7H B6H B5H B4H B3H B2H B1H B0H B0H AFH — — ACH ABH AAH A9H A8H A8H A7H A6H A5H A4H A3H A2H A1H A0H A0H 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 98H 97H 96H 95H 94H 93H 92H 91H 90H 90H 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 88H 87H 86H 85H 84H 83H 82H 81H 80H 80H 作为对AT89S51存储器结构的总结,图2-7为各类存储器的结构图。从图中可清楚看出各类存储器在存储器空间的位置。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库AT89S51单片机 - 图文(2)在线全文阅读。
相关推荐: