单片微型计算机原理及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 半导体存储器及I/O接口基础

微型计算机是由CPU、存储器、输入/输出(I/O)接口电路组成的,计算机的工作依赖于存储器中的程序和数据;各种外设通过I/O接口(Interface)与系统相连,各种方式下的数据传送都是在接口的支持下实现的。存储器和I/O接口电路是微型计算机的重要组成部分。

本章主要让学生了解半导体存储器的工作原理、分类、主要性能指标及各类存储器的特点;了解I/O接口电路的基本概念、基本功能、数据传输方式、串行通信的基本概念、中断的基本概念、定时器/计数器的基本概念。本章是微型计算机存储器及I/O接口的基础部分。

2.1 存储器概述

存储器(Memory)是计算机的重要组成部分,是用来存储程序和数据的部件。正是因为有了存储器,计算机才有信息记忆功能,并把计算机要执行的程序、所要处理的数据以及处理的结果存储在计算机中,使计算机能自动工作。存储器系统是微机系统中重要的子系统。随着CPU速度的不断提高和软件规模的不断扩大,人们当然希望存储器能同时满足速度快、容量大、价格低的要求。实际上这一点很难办到,解决这一问题的较好办法是:设计一个快慢搭配、具有层次结构的存储系统。图2-1显示了新型计算机系统中的存储器组织,它呈金字塔形结构。越往上,存储器的速度越快,CPU的访问频率越高,每位的造价越高,系统的容量越小;越往下,容量越大,每位的造价越低,速度也较低。

图2-1 存储器系统的多层次结构

从图2-1中可以看出,CPU中的寄存器位于顶端,它的存取速度最快,但数量有限。向下依次为CPU内部的Cache(高速缓冲存储器)、主板上的Cache(也称外部Cache,由高速SRAM组成)、主存储器(由半导体存储器组成)、辅助存储器(半导体盘、软盘、硬盘)和大容量辅助存储器(光盘、磁带)。

本章主要介绍构成微型机主存的半导体存储器的有关问题。

2.1.1 存储器的基本组成与操作

1.存储器的基本组成

存储器由一些能够表示二进制数0和1状态的物理器件组成,这些器件本身具有记忆的功能,如电容、双稳态电路等。这些具有记忆功能的物理器件或者电路就构成了一个基本存储单元。每个基本存储单元可以保存1位二进制信息,若干基本存储器单元构成一个存储单元,通常一个存储单元由8个基本存储单元构成,即一个存储单元可以存储8位二进制信息,许多存储单元组织在一起便构成了存储器。形象地说,如果把学校的一栋宿舍楼比做存储器的话,那么宿舍楼中的各个宿舍就是存储单元,各个宿舍中的每张床就是基本存储单元。存储器组成之间的关系如图2-2所示。

图2-2 存储器组成关系图

2.存储器的基本操作

存储器的操作有两种:读操作和写操作。

读操作是指从存储器中读出信息,不破坏原有存储器单元中的信息,属于非破坏性操作。写操作是把信息写入(存入)存储器,写入的信息将会覆盖存储单元中的原有信息,属于破坏性操作。CPU实现对存储器的读/写,其步骤是首先通过地址选中存储器单元,然后再对选中的存储单元进行读/写操作。

2.1.2 存储器的分类及主要指标

1.存储器的分类

存储器可以按不同的方法进行分类。

(1)按用途分

按存储器用途分,可以分成内部存储器和外部存储器。

① 内部存储器:内部存储器也称为内存,是主存储器,位于计算机主机的内部。它用来存放当前正在使用的或经常使用的程序和数据,它由半导体集成电路芯片组成。内存工作速度快,可以直接与CPU交换数据、参与运算。但内存的容量有限,通常为几十到几百KB(1K=1024)。

② 外部存储器:外部存储器也称为外存,是辅助存储器。外存的特点是大容量,所存储的信息既可以修改,也可以保存,存取速度较慢,要由专用的设备来管理。如磁带、磁盘、光盘等,一盘磁带可存储150KB的信息,一片硬磁盘可存储数十兆字节的信息。磁带、磁盘的数量可随意增加。从这个意义上说,外存储器的容量无限,但外存的工作速度低,它们不能直接参与计算机的运算,一般情况下外存只与内存成批交换信息。也就是说,外存储器仅起到扩大计算机存储容量的作用。在计算机中,外存储器是外设的组成部分。

本书涉及的存储器系统设计主要是内存储器系统设计。

(2)按存储器性质分

内部存储器按存储器性质分类通常分为随机存取存储器(RAM,Random Access Memory)和只读存储器(ROM,Read Only Memory)两类。

① RAM:RAM又称读写存储器,它的数据读取、存入时间都很短,因此计算机运行时,既可以从RAM中读数据,又可以将数据写入RAM。但掉电后RAM中存放的信息将丢失。RAM适宜存放输入数据、中间结果及最后的运算结果,因此又被称为数据存储器。

随机存储器有静态RAM和动态RAM两种。静态RAM用触发器存储信息,只要不断电,信息就不会丢失。动态RAM依靠电容存储信息,充电后为“1”,放电后为“0”。由于集成电路中电容的容量很小,且存在泄漏电流的放电作用,高电平的保持时间只有几毫秒。为了保存信息,每隔1~2ms必须对高电平的电容重新充电,这称为动态RAM的定时刷新。动态RAM的集成度高;静态RAM的集成度低、功耗大,优点是省去了刷新电路。在设计专用的微型计算机系统时,一般只用静态RAM就可以满足要求。

② ROM:ROM读出一个数据的时间为数百纳秒,有时也可改写,但写入一个数据的时间长达数十毫秒。因此在计算机运行时只能执行读操作。掉电后ROM中存放的数据不会丢失。ROM适宜存放程序、常数、表格等,因此又称为程序存储器。只读存储器有以下五类:

掩模ROM:在半导体工厂生产时,已经用掩模技术将程序做入芯片,用户只能读出内容而不能改写。掩模ROM只能应用于有固定程序且批量很大的产品中。

一次可编程只读存储器(PROM,Programmable ROM):用户可将程序写入PROM,但程序一经写入就不能改写。

紫外线擦除可编程只读存储器(EPROM,Erasable PROM):用户可将程序写入EPROM芯片。如果要改写程序,先用EPROM擦除器,擦去原先的程序,然后写入新程序。与PROM芯片一样,写入的速度很慢,且要用到高压,所以必须用特定的EPROM编程器写入信息。在计算机运行时只能执行读操作。

电擦除可编程只读存储器(EEPROM,Electrically Erasable PROM):由于采用电擦除方式,而且擦除、写入、读出的电源都用+5V,故能在应用系统中在线改写。但目前写入时间较长,约需10ms,读出时间约为几百纳秒。

闪烁存储器(Flash Memory):快速擦写存储器(Flash Memory,简称Flash)是20世纪80年代中期推出的新型器件。它可以在联机条件下,在计算机内进行擦除、改写,因而称为快擦写型存储器或闪烁存储器。它具有芯片整体或分区电擦除和可再编程功能,从而使它成为性价比和可靠性最高的可读写、非易失性存储器。主要性能特点如下:

● 高速芯片整体电擦除:芯片整体擦除时间约1s,而一般的EPROM需要15min以上。

● 高速编程:采用快速脉冲编程方法,编程时间短。

● 最少1万次擦除/编程周期,通常可达到10万次擦除/编程周期。

● 早期的Flash采用12V编程电压,改进后在Flash内部集成了1个DC/DC变换器,可以采用单一的5V电压供电。

● 高速度的存储器访问:最大读出时间不超过200μs。高速Flash的读出时间达到60μs。

● 低功耗:最大工作电流为30mA,备用状态下的最大电流为100μA。

● 密度大,价格低,性价比高。

由于Flash的突出性能,因而其发展迅速。Intel公司已决定由Flash来替代EEPROM,不再生产EEPROM。由于它的非易失性和可以长期地反复使用,目前已经广泛应用于IC卡、单片机系统和其他电子设备中。大容量的Flash也可以“固态盘”的形式代替软盘或硬盘作为海量存储器使用。

图2-3归纳了存储器的分类情况。

图2-3 存储器分类图

2.存储器的主要性能指标

衡量半导体存储器性能的主要指标有存储容量、存取速度、存储器周期、功耗、可靠性、价格、电源种类等,其中主要的技术指标是存储容量和存取速度。

(1)存储容量

存储容量是存储器的一个重要指标。存储器芯片的存储容量用“存储单元个数×每个单元的存储位数”来表示。如存储器有256个单元,每个单元存放8位二进制数,那么该存储器的容量为256×8位。存储器容量1K=1024=210。对于以字节编址的微型计算机,可以以字节表示容量,如某微型计算机的容量为64KB。

在表示存储器的容量时,一般是以某一空间范围来表示的,而空间范围是由地址线来决定的,即存储器的容量和存储器的地址线的宽度(数量)有关。地址的二进制位数N与容量的关系是Q=2N

如某存储器芯片有13 条地址线A12~A0,则存储器容量为8KB,空间表示范围为0000H~1FFFH。

(2)存取速度

该项指标一般用以下两个参数中的一个来描述。

① 存取时间(Access Time,TA):是指从CPU给出有效的存储地址启动一次存储器读/写操作,到操作完成所经历的时间。

具体地说,对一次读操作的存取时间就是读出时间,即从地址有效到数据输出有效之间的时间;对于一次写操作,存取时间就是写入时间。

② 存取周期(Access Cycle,TAC):是指连续两次存储器读/写操作之间所需要的最小时间间隔。对于读操作,就是读周期时间;对于写操作,就是写周期时间。因为在一次数据访问后,芯片不可能无间歇地进入下一次访问,所以存取周期TAC要略大于存取时间TA。表示上,该参数常表示为读周期TRC或写周期TWC,存取时间TAC是其统称。

(3)功耗

功耗反映了存储器耗电的多少,同时也相应地反映了它的发热程度(温度会限制集成度的提高)。通常要求是功耗小,这对存储器件的工作稳定性有利。双极型半导体存储器功耗高于MOS型存储器,相应的MOS型存储器芯片的集成度高于双极型的。

(4)可靠性

可靠性通常以平均无故障时间(MTBF)来衡量。平均无故障时间可以理解为两次故障之间的平均时间间隔,即平均无故障时间越长,则可靠性越高。集成存储芯片一般在出厂时需经过测试,以保证它有很高的可靠性。

(5)性价比

性价比用于衡量存储器的经济性能,它是存储容量、存取速度、可靠性、价格等的一个综合指标,其中的价格还应包括系统中使用存储器时而附加的线路的价格。用户选用存储器时,应针对具体的用途,侧重考虑要满足某种性能,以利于降低整个系统的价格。例如选用外存储器要求它有大的存储容量,但对于存取是否高速则不做要求;Cache要求高的存取速度,但对于其存储容量则不做过高要求。

2.1.3 存储器芯片的一般结构及地址结构形式

1.存储器芯片的一般结构

常用的存储器由存储体、地址译码器、控制逻辑电路、数据缓冲器4部分组成,如图2-4所示。

图2-4 存储器芯片组成示意图

(1)存储体

存储体是存储芯片的主体,它由若干存储单元组成,每个存储单元又由若干基本存储电路组成,每个存储电路可存放一位二进制信息。通常,一个存储单元是一个字节,存放8位二进制信息,即以字节来组织。为了区分不同的存储单元以便于读/写操作,每个存储单元都有一个地址(称为存储单元地址),CPU访问时按地址访问。为了减少存储器芯片的封装引脚和简化译码器的结构,存储体总是按照二维矩阵的形式来排列存储单元电路。存储体内基本存储单元的排列结构通常有两种形式:一种是位结构,即每个存储单元可存放一位二进制信息,其容量表示成N×1位,如1K×1位、4K×1位。另一种排列是字排列,即每个存储单元可存放多位二进制信息,其容量表示成N×4位或N×8位,如静态存储器6116为2×8位,6264为8K×8位。

(2)地址译码器

地址译码器接收来自CPU的N位地址,经译码后产生2N个地址选择信号,实现对片内存储单元的选址,即地址译码器完成存储单元的选择。

(3)控制逻辑电路

控制逻辑电路接收片选信号CS和来自CPU的读/写控制信号,形成芯片内部的控制信号,控制数据的读出和写入。

(4)数据缓冲器

数据缓冲器用于暂时存放来自CPU的写入数据或从存储体内读出的数据。暂存的目的是为了协调CPU和存储器之间在速度上的差异。

2.存储器地址空间的结构形式

存储器用于存放程序与数据。半导体存储器由一个个单元组成,每个单元有一个编号(称为地址),一个单元存放一个8位二进制数(1个字节)。

计算机的存储器地址空间有两种结构形式:普林斯顿结构和哈佛结构。图2-5所示为具有64KB地址的两种结构图。

图2-5 计算机存储器地址的两种结构形式

普林斯顿结构的特点是计算机只有一个地址空间,ROM和RAM被安排在这一地址空间的不同区域,一个地址对应唯一的一个存储器单元,CPU访问ROM和访问RAM使用的是相同的指令。8086、奔腾等计算机采用的是普林斯顿结构。

哈佛结构的特点是计算机的ROM和RAM被安排在两个不同的地址空间,ROM和RAM可以有相同的地址,CPU访问ROM和访问RAM使用的是不同的访问指令。MCS-51系列单片机采用的是哈佛结构。

2.1.4 堆栈的概念

众所周知,堆栈是堆放货物的仓库。从地面起自下而上堆放的货物总是“先进后出”的。微型计算机中的堆栈是在随机存储器(RAM)中建立的一个特殊区域,是一组按照“先进后出”的方式工作的、用于暂存信息的存储单元。也就是说,所谓堆栈,是指在存储器中开辟的一个区域,用来存放需要暂时保存的数据。

1.堆栈的作用

实用程序中,常有主程序与子程序两大部分。如果在一个程序中需要多次使用某段程序,就把这段程序独立出来编成子程序,其他部分称为主程序。在主程序执行过程中需要使用该子程序时,可用调用子程序指令来调用它,待子程序执行完后再返回继续执行主程序。过程如图2-6所示。显然,这样做可以减少编制程序时的重复工作量,也缩短了程序的长度。

图2-6 子程序执行过程图

在调用子程序的过程中,要保留断点地址,有时还要保护现场。所谓断点地址,就是调用子程序指令的按顺序排列的下一条指令的地址,也就是执行调用子程序指令时的程序计数器(PC)的内容。只有保留了断点地址,才能在子程序执行后保证返回到主程序的断点处,继续执行主程序。所谓现场,就是调用子程序前保存在累加器A、工作寄存器及标志寄存器中的信息,这些信息是主程序执行的中间结果。如果在执行子程序的过程中要使用这些寄存器,将会破坏原来的内容。为此,进入子程序后,首先要转存这些寄存器的内容,这就是保护现场。断点地址与现场信息是送入堆栈保存的。

在返回主程序前,要把保存在堆栈中的现场信息送回对应的寄存器,这称为恢复现场。

有时在执行一段子程序的过程中还要调用其他子程序,如图2-7所示,这称为子程序嵌套。这种情况下,堆栈不仅需要存放多个断点地址和多批现场信息,而且为了保证逐次正确返回,要求先存入堆栈中的断点地址、现场信息后取出来,所以堆栈按照“先进后出”的方式工作。

图2-7 子程序嵌套图

2.堆栈操作

堆栈有两种操作方式。将数据送入堆栈称为推入操作,又称为压入操作,如压入指令

            PUSH    A

执行把累加器A的内容压入堆栈的操作。把堆栈中内容取出来的操作称为弹出操作,如弹出指令

            POP     A

执行把栈顶内容送回A的操作。

保护现场和恢复现场是由压入指令和弹出指令实现的。断点地址压入堆栈是执行调用子程序指令时由硬件自动实现的,断点地址自堆栈中弹出是执行返回主程序指令RET时由硬件自动实现的。

3.堆栈指针

堆栈是由堆栈指针来管理的。堆栈指针(SP,Stack Pointer)是一个专用的地址指针寄存器,它指明栈顶的位置,起着管理堆栈工作的作用。

下面以MCS-51单片机为例,说明堆栈工作过程和SP的作用。

MCS-51单片机的堆栈是建立在片内RAM中。MCS-51片内RAM的容量为128B,其地址为8位二进制数,所以SP是一个8位地址寄存器。在使用堆栈前,首先要确定堆栈在RAM中的位置,这称为建立堆栈。建立堆栈可用一条传送指令来实现。例如,执行指令:“MOV SP,#60H”后,(SP)=60H,在图2-8(a)中,用SP指在60H单元来表示。

图2-8 堆栈操作示意图

由于机器规定SP指在堆栈的顶部,也就是指在最后压入堆栈的信息的所在单元,所以刚建立堆栈时,尽管60H单元中实际上没有信息,但认为该单元已有信息存放,堆栈将从60H单元开始向上增长(地址依次增大)。此后,如果执行指令PUSH A,A的内容将存放在61H单元中,同时SP的内容自动加1,即(SP)=61H,如图2-8(b)所示。继续执行指令PUSH B后,堆栈的情况如图2-8(c)所示。弹出指令POP则把堆栈顶的内容送回寄存器或累加器,而且每弹出一个数据,SP的内容自动减1,故SP始终指在堆栈的顶部。

4.注意

堆栈可用于中断及子程序调用,也可用于数据的暂时保存。在进入中断服务子程序和子程序调用前,原来CPU中的现行信息(指令指针IP及寄存器中的有关内容)都必须保存,在中断服务子程序和子程序调用结束返回主程序时,又必须恢复原来保存的信息,这些均由堆栈操作来完成,其中指令指针的入栈和出栈由CPU自动管理,而一些寄存器中内容的保存及返回,需要用户自己利用指令PUSH、POP来完成。由于堆栈操作的“先进后出”的特点,一定要注意两点:

① 先进入的内容要后弹出,保证返回寄存器的内容不发生错误。如:

            PUSH    A
            PUSH    B
            POP     A
            POP     B

可引起寄存器A、B内容的改变,即A和B的内容发生了交换。

② PUSH和POP的指令要成对,若不匹配的话,会造成返回主程序的地址出错。如:

            PUSH    A
            PUSH    B
            …
            POP     B
            RET

由于少弹出一组数据,会使CPU返回主程序时,返回地址取出的是原来A中的内容,使整个程序执行出错。