图6-8 读外部数据存储器时序图
图6-9写外部数据存储器时序图
(2)单片机系统总线时序
单片机三总线(即AB、DB、CB)由所谓总线形成电路获得,见图6-10。
根据单片机的引脚功能,按图6-10a的方法构建系统总线,图中地址锁存器即所谓总线形成电路。具体实施如图6-10b。锁存器一般由74LS373或74HC373充当:单片机ALE脚输出的下降沿将373的8个D端的输入锁存到8个Q端输出,ALE为其它情况时8个Q端输出不变。
图6-10 MCS-51单片机系统总线构建图
基于图6-10b,结合单片机原始时序,略去无关紧要的引脚后可以获得单片机系统总线时序:读外部程序存储器时序,见图6-11。读外部数据存储器时序,见图6-12。写外部数据存储器时序,见图6-13。图中标注的数字与图2-3和图2-4中的数字对应,意义也相同。
图6-11 读外部程序存储器时序图
图6-12 读外部数据存储器时序图
图6-13 写外部数据存储器时序图
注意:
①在一个机器周期内,读程序存储器两次,见图6-11;而读/写数据存储器只只一次,见图6-12、图6-13。
②忽略时间基准(即略去时钟信号)和无效信号,单片机读程序存储器时序与图2-3完全相同,读数据存储器时序也与图2-3完全相同;写外部数据存储器时序与图2-5完全相同。
③单片机不能像图2-4或图2-6那样插入Tw脉冲。
这说明了第2章的描述具有普遍意义。
3.单片机的工作方式
单片机的工作方式有:复位、程序执行、掉电保护和低功耗、编程、校验与加密等方式。 (1) 复位方式
通过某种方式,使单片机内各寄存器的值变为初始状态的操作称为复位。复位方式是单片机的初始化操作。单片机除了正常的初始化外,当程序运行出错或由于操作错误而使系统处于死循环时,也需要按复位键重启机器。
复位不影响片内RAM存放的内容,而ALE、PSEN在复位期间将输出高电平。复位后: ①(PC)=0000H 表示复位后程序的入口地址为0000H,即单片机复位后从0000H单元开始执行程序;
②(PSW)=00H,其中RS1(PSW.4)=0,RS0(PSW.3)=0,表示复位后单片机选择工作寄存器0组;
③P0~P3口输出全1。
④除(SP)=07H外,剩下的特殊功能寄存器均为0。
MCS-51单片机在时钟电路工作以后,在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作。例如使用晶振频率为12MHz时,则复位信号持续时间应不小于2μs。
复位方法一般有上电复位和上电/手动复位两种,见图6-14。 (2) 程序执行方式
程序执行方式是单片机的基本工作方式。由于复位后PC=0000H,因此复位后程序是从地址0000H开始执行。
(3) 待机方式
待机方式也称空闲方式,是一种节电工作方式。在待机工作方式中,振荡器保持工作,时钟脉冲继续输出到中断、串行口、定时器等功能部件,使它们继续工作,但时钟脉冲不再送到CPU,因而CPU停止工作。
图6-14 MCS-51单片机复位参考电路
(4) 掉电方式
掉电方式,也被称为停机方式。在掉电方式中,振荡器工作停止,单片机内部所有功能部件停止工作。它同样是一种为降低功耗而设计的节电工作方式。
待机方式和掉电方式都是为了进一步降低功耗而设计的节电工作方式,它们特别适合于电源功耗要求很低的应用场合。这类场合往往是直流供电或停电时依靠备用电源供电来维持系统的持续工作。CHMOS型单片机的节电方式是由特殊功能寄存器PCON控制,即置位PCON的IDL位使单片机进入待机方式;置位PCON的PD位使单片机进入掉电方式。退出待机方式的方法是复位或一次中断请求;退出掉电方式的方法是复位。
(5) 编程和校验方式
编程和校验是技术开发中必须的工作,但技术含量不大。有人将这种方式做成产品在卖,对于一般开发人员而言,没有必要在这方面花费时间和精力,建议去买产品用之。
6.5 单片机存储器组织
MCS-51系列单片机将程序存储器和数据存储器分开寻址,这样就有4个在物理上相互独立的存储器空间,即片内、外的ROM和片内、外的RAM。从使用的角度来考虑,只需将它分为三个独立逻辑空间:
●片内外统一编址的64KB的ROM空间(0000~FFFFH)。
●64KB的片外RAM空间(0000~FFFFH)。注意,单片机系统的I/O接口只能采用存储器印象编址,所以I/O接口也在此空间占据地址。
●内部RAM空间,包括128Byte的片内RAM(地址00~7FH)和22 Byte特殊功能寄存器(散布在地址80~0FFH中)。
其具体配置如图6-15所示。
图6-15 MCS-51存储器组织结构
下面以MCS-51系列单片机为例,对其存储器组织结构作一介绍 1.程序存储器
程序存储器用于存放编好的程序或表格常数,它是在单片机工作前由用户通过编程器写入的,在单片机工作过程中不可更改。
前面讲过,单片机是通过控制器中的程序指针PC来访问程序存储器的。PC有16位,所以它可以直接寻址64KB,即可访问程序存储器的0000H~0FFFFH地址。典型的MCS-51芯片片内有4KB的程序存储器(对于52子系列内部有8KB),对于小型单片机系统也许够用了,这时只需将EA脚接+5V即可。如果4KB的程序存储器不够,则需在单片机外部扩展程序存储器,最大可以扩展到64KB。
当有外接程序存储器时,程序存储器的编址规律为:先片内,后片外,片内片外连续。即单片机上电后,如EA脚接高电平,则程序开始从内部程序存储器运行。当PC中内容超过内部程序存储器的范围,则自动跳到外部程序存储器接着运行。如,在带有4KB片内Flash存储器的AT89C51中,如果EA引脚连到VCC,当地址为0000H~0FFFH时,则访问内部Flash;当地址1000H~FFFFH时,则访问外部程序存储器。在AT89C52中,当EA端保持高电平时,如果地址不超过1FFFH,则访问内部Flash;地址超过1FFFH时,将自动转向外部程序存储器。对于8031、8032,片内没有程序存储器ROM,则EA脚一定要接地,复位后即转到片外ROM运行。通过EA脚的电平切换,可以访问片内、片外的任一存储单元。
2.数据存储器
数据存储器在物理上和逻辑上都分为两个地址空间,一个为内部数据存储器空间,一个为外部存储器空间。外部数据存储器也可扩展到64KB,其地址空间为0000H~0FFFFH。
片内数据存储器空间小,为128字节,用8位地址寻址足够。片内RAM地址范围为00H~7FH。 (1)片内数据存储器
片内数据存储器可分为工作寄存器区、位寻址区、数据缓冲区RAM等三个区域,如图6-15
所示。
① 工作寄存器区。00H~1FH这32单元为工作寄存器区。工作寄存器也称为通用寄存器,供用户编程时使用,工作寄存器分成四个区,分别称为0区、1区、2区、3区。每一个区有8个通用寄存器R0~R7(每个区的8个字节从低到高被称为R0~R7)。寄存器和RAM地址对应关系如表6-2。
表6-2 工作寄存器和RAM地址映射表
通用工作寄存器共有4组,但编写软件时,每次只使用1组,其它各组不工作。用哪一组寄存器工作由程序状态字PSW中的PSW.3(RS0)和PSW.4(RS1)两位来选择,其对应关系一如表6-2所示。复位时,PSW的值等于00H,所以复位后工作寄存器自动使用0区。
RS1、RS0的值用指令可方便地实现置位或清0。例如,执行下列程序段: SETB PSW,4 ;置位RS1 CLR PSW,3 ;清RS0
MOV R1,#53H ;将立即数53H送R1
由于第一、二条指令使RS1(PSW的第4位)=1、RS0(PSW的第3位)=0,即选择了工作寄存器2区,故第3条指令将立即数53H送去工作寄存器2区的R1,即送入片内RAM的11H单元。
② 位寻址区。20H~2FH字节单元为位寻址区,可以用来定义位变量。该区的每一位都赋予一个位地址,每个字节等于8位,这16个字节(共计128位)的每1位都有一个8位的位地址,位地址范围为00H~7FH,如表6-3所示。
表6-3 内部RAM位地址映象表 字节 位 地 址 D7 D6 D5 D4 D3 地址 20H 07H 06H 05H 04H 03H 21H 0FH 0EH 0DH 0CH 0BH 22H 17H 16H 15H 14H 13H 23H 1FH 1EH 1DH 1CH 1BH 24H 27H 26H 25H 24H 23H 25H 2FH 2EH 2DH 2CH 2BH 26H 37H 36H 35H 34H 33H 27H 3FH 3EH 3DH 3CH 3BH 28H 47H 46H 45H 44H 43H 29H 4FH 4EH 4DH 4CH 4BH 2AH 57H 56H 55H 54H 53H 2BH 5FH 5EH 5DH 5CH 5BH 2CH 67H 66H 65H 64H 63H 2DH 6FH 6EH 6DH 6CH 6BH 2EH 77H 76H 75H 74H 73H 2FH 7FH 7EH 7DH 7CH 7BH D2 02H 0AH 12H 1AH 22H 2AH 32H 3AH 42H 4AH 52H 5AH 62H 6AH 72H 7AH D1 01H 09H 11H 19H 21H 29H 31H 39H 41H 49H 51H 59H 61H 69H 71H 79H D0 00H 08H 10H 18H 20H 28H 30H 38H 40H 48H 50H 58H 60H 68H 70H 78H
③ 数据缓冲区。30H~7FH(0FFH)是数据缓冲区,也即用户RAM区,共80个单元。数据缓冲区一般用于存放运算数据、结果和堆栈区。实际上,不使用的可以位寻址的字节和不使用的通用工作寄存器区都可以作为数据缓冲区使用。
由于工作寄存器区、位寻址区、数据缓冲区统一编址,使用同样的指令访问,这三个区的单元既有自己独特的功能,又可统一调度使用。因此,前两区未用的单元也可移用为一般的用户RAM单元,使容量较小的片内RAM得以充分利用。
(2) 特殊功能寄存器SFR