第1页:项目7 单片机的系统扩展封面
项目7「单片机的系统扩展」讲解以单片机为核心的系统扩展结构、程序存储器与数据存储器的扩展方法,以及简单并行I/O口与8155可编程并行I/O口的扩展。
第2页:51单片机的系统扩展结构
7.1 51单片机的系统扩展结构:单片机的系统扩展是以单片机为核心,通过芯片外部总线把一些相应功能的外围器件(ROM、RAM、I/O等)与单片机连接起来,其情形就像各扩展部件「挂」在总线上一样,并且在单片机CPU的控制下通过总线进行数据、地址和信号的传送。
第3页:单片机的系统总线:AB、DB与CB
7.1.1 单片机的系统总线:总线是计算机中传送信息的公共通道,根据传送信息的类型和功能可以分为3组。
- 地址总线AB
- CPU用来传送地址信息的总线,信息传送是单向的;存储容量越大,寻找某个存储单元所需的地址线条数就越多。
- 数据总线DB
- 用来传送数据或指令代码,实现CPU与外部设备之间的数据交换,传送是双向的;数据总线的条数与计算机字长相同,MCS-51字长为8位,故数据总线也是8位。
- 控制总线CB
- 用于传送各类控制信号,协调单片机与其他外围芯片之间的工作,实现单片机与外部设备之间的信息交换。
第4页:7.1.2 单片机的总线构成
7.1.2 单片机的总线构成:MCS-51单片机以P0口、P2口和若干控制信号构成外部总线,为系统扩展提供地址、数据和控制三类通道。
第5页:P0口、P2口与控制信号的连接
- P0口作为数据总线和低8位地址总线:P0口具有双重功能,既可作为数据线,又可作为低8位地址线
- P2口作为高8位地址总线:P2口的8位地址线加上P0口的低8位地址线,形成完整的16位地址总线,最大寻址范围可达64KB
- 控制信号:ALE为地址锁存信号,用来锁存P0口输出的低8位地址;PSEN为外部程序存储器读选通信号,低电平有效;EA为片内/片外程序存储器的选择端;WR为外部数据存储器写选通信号;RD为外部数据存储器读选通信号
单片机与外部器件数据交换要遵循两个重要原则:一是地址唯一性,一个单元一个地址;二是同一时刻CPU只能访问一个地址,与哪个器件交换数据由地址线控制各器件的片选线来选择,不交换时外部器件处于锁闭状态,对总线呈浮空状态。
第6页:7.2.1 常用程序存储器芯片2764
7.2 存储器的扩展 7.2.1 程序存储器的扩展:(1)常用程序存储器芯片有ROM、EPROM(紫外线擦除型存储器)、E²PROM(电擦除可改写型存储器)以及近年来广泛使用的Flash ROM(快擦写型存储器)等多种类型,下面以2764为例介绍ROM的扩展方法。图7-4为2764的管脚配置图。
- A0~A12:地址信号输入线,说明芯片容量为2^13=8K
- D0~D7:8位数据线
- CE:片选信号线,低电平有效,为低电平时选中该芯片
- OE:读选通信号线,为低电平时芯片中的数据可以由O0~O7输出
- PGM:编程脉冲输入端,对EPROM编程时由此加入编程脉冲
- Vpp:编程电源;Vcc:主电源
第7页:程序存储器的片选方法:线选法与译码法
(2)程序存储器连接方法 1)地址线的连接:实际应用中扩展的存储器容量都大于256字节,所以除了P0口的8位地址线外,还需要P2口提供若干地址线。芯片的选择决定了存储的地址。
- 扩展一片芯片:芯片的片选端直接接地即可
- 扩展两片以上存储器:片选端应采用专门的片选信号来控制,有 ①线选法:将P2口多余的地址线中的某位与存储器或其他芯片的片选信号端相连;②译码法:使用地址译码器将P2口多余地址线译码输出,作为各芯片的片选信号
第8页:程序存储器数据线与控制线的连接
- 2)数据线的连接:将单片机的P0口直接与程序存储器的8位数据线连接
- 3)控制线的连接:PSEN与程序存储器的读选通信号端直接相连;ALE与地址锁存器的控制端相连;EA在单片机为无程序存储器的8031或只使用外部扩展的程序存储器时直接接地
第9页:例7.1 扩展27128程序存储器
【例7.1】在8031上扩展16KB芯片27128的程序存储器。1)硬件电路:图中给出8031通过地址锁存器74LS373与27128相连、扩展16KB程序存储器的电路连接。
第10页:例7.1 连线说明与地址范围
2)连线说明:
- ①地址线:27128容量为16KB=2^14,共14条地址线(A0~A13),低8位A0~A7通过锁存器74LS373与P0口相连,高6位A8~A13直接与P2口的P2.0~P2.5连接
- ②数据线:27128的数据线(O0~O7)直接与P0口的8位数据线连接
- ③控制线:单片机的ALE与74LS373的使能端G端连接,EA直接接地;27128的OE与单片机的外部程序存储器读选通信号端直接相连;由于只扩展了一片程序存储器芯片,CE直接接地
3)扩展ROM地址范围:芯片地址编码中A15、A14为无关位(可取0或1,通常取0),A13~A00从全0到全1,即整个存储器的地址范围是0000H~3FFFH。
第11页:例7.2 两片2764扩展程序存储器
【例7.2】在8031上采用两片2764扩展16KB的程序存储器。1)硬件电路:图中给出两片2764与8031的连接,片选采用线选法,P2.5为低电平时选中2764(1),P2.5为高电平时经反相器选中2764(2)。
第12页:例7.2 连线说明与两片地址范围
2)连线说明:
- ①地址线:2764容量为8KB=2^13,共13条地址线(A0~A12),两片芯片的低8位经74LS373与P0口相连,高5位与P2口的P2.0~P2.4连接
- ②数据线:两片2764的数据线直接与P0口的8位数据线连接
- ③控制线:两片2764的读选通信号端与单片机的外部程序存储器读选通信号端相连;采用线选法,P2.5为低电平时选中2764(1),为高电平时经反相器选中2764(2)
3)扩展ROM地址范围:2764(1)地址编码中A15、A14取0、A13为0,范围为0000H~1FFFH;2764(2)地址编码中A15、A14取0、A13为1,范围为2000H~3FFFH。
第13页:数据存储器的扩展与6116芯片
7.2.1 数据存储器的扩展:在单片机应用系统中,作为数据存储器使用的有静态读/写存储器RAM、动态读/写存储器RAM和EEPROM等,静态RAM扩展电路简单、使用方便,因而应用广泛,典型芯片有6116(2K×8)、6264(8K×8)、62256(32K×8)等。
- A0~A10:12根地址信号线,说明芯片容量为2^11=2K
- O0~O7:8位数据线
- CE:片选信号线,低电平有效,为低电平时选中该芯片
- OE:读选通信号线,为低电平时芯片中的数据可以由O0~O7输出
- WE:写选通信号端,为低电平时可以由O0~O7输入数据到芯片中
(2)数据存储器连接方法:数据存储器的扩展地址与程序存储器一样都是0000H~FFFFH,系统扩展时两者的地址总线和数据总线可并联使用;地址线和数据线的连接方法与程序存储器相同,控制线OE和WE则分别与单片机的RD和WR连接。
第14页:例7.4 两片6116扩展数据存储器
【例7.4】在8031上采用两片6116扩展4KB的数据存储器。1)硬件电路:图中给出两片6116与8031的连接,两片的读、写选通端分别并接,片选由P2.3和P2.4分别控制。
第15页:例7.4 连线说明与地址范围
2)连线说明:
- ①地址线:6116容量为2KB=2^11,两片芯片的低8位A0~A7通过锁存器74LS373与P0口相连,高3位A8~A10直接与P2口的P2.0~P2.2连接
- ②数据线:两片6116的数据线直接与P0口的8位数据线连接
- ③控制线:两片6116的读选通信号端与单片机的外部RAM读选通端相连,写选通信号端与单片机的外部RAM写选通端相连;采用线选法分别由P2.3和P2.4控制
3)扩展RAM地址范围:芯片6116(a)的地址编码为×××1 0……0 到 ×××1 0……1,无关位取0时地址范围是1000H~17FFH;芯片6116(b)的地址编码为×××0 1……0 到 ×××0 1……1,无关位取0时地址范围是0800H~0FFFH。
第16页:7.3.1 简单并行I/O口的扩展
7.3 I/O口的扩展:通常I/O口的扩展有三种方式——并行I/O口扩展、可编程的并行I/O芯片扩展、串行口的I/O口扩展,本节主要介绍前两种。
7.3.1 简单并行I/O口扩展:简单的并行I/O口扩展通常采用普通的TTL电路和CMOS门电路实现,如八线缓冲驱动器74LS244(三态输出)、八总线发送/接收器74LS245、74LS373等。这些芯片一般通过数据总线P0口扩展,具有电路简单、成本低、配置灵活等优点。
74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发、低电平清除,常用作数据锁存器、地址锁存器,与74LS373功能相似。
第17页:例7.5 用244与273扩展I/O口
【例7.5】采用74LS244扩展输入、74LS273作为扩展输出的简单并行I/O口扩展。1)硬件电路:图中给出74LS244接8个开关作输入、74LS273接8个LED作输出,二者数据端均与P0口相连的电路。
第18页:例7.5 连线说明、地址确定与程序
2)连线说明:
- 74LS244作为扩展输入接口,输入8个开关的信息;74LS273作为扩展输出接口,输出控制8个LED;74LS244的数据输出端和74LS273的数据输入端均与单片机的P0口连接
- 输入控制信号由P2.7与RD相「或」后形成,二者同时为0时选通74LS244,外部信息输入到数据总线P0上;无按键闭合时输入全为1,按下某按键则对应口线输入为0
- 输出控制信号由P2.7与WR相「或」后形成,二者同时为0时选通74LS273,P0上的数据锁存到其输出端,某位为低电平时对应的LED发光
3)I/O地址的确定:输入/输出都是在P2.7为0时有效,所以二者的口地址都是7FFFH(此地址不是唯一,只要保证P2.7为0即可)。
4)程序实现(每当接通任一开关时对应的LED发光):
- LOOP:MOV DPTR,#7FFFH ;数据指针指向扩展I/O口地址
- MOVX A,@DPTR ;从74LS244输入开关状态
- MOVX @DPTR,A ;向74LS273输出数据,驱动LED
- SJMP LOOP ;循环检测
第19页:8155可编程并行I/O口与内部结构
7.3.2 可编程并行I/O口的扩展:除简单扩展方式外,还可以用并行I/O口的可编程芯片进行扩展,这种方式通常采用软件编程的方式来改变和确定I/O口的工作方式及功能,常用的有Intel公司的8155、8255等,它们可以与单片机直接连接,使用十分方便。下面以8155为例介绍。
1)8155内部结构:
- A、B、C三个端口:A、B是8位I/O口,数据传送方向由命令寄存器决定;C口为6位I/O口,通过命令寄存器编程选择
- 控制逻辑部件中有一个控制命令寄存器和一个状态寄存器,8155的工作方式由CPU写入控制命令寄存器中的控制字确定
- 内部有一个14位的定时/计数器,可用作定时或对外部脉冲计数
- RAM容量为256×8位,由一个静态随机存取存储器和一个地址锁存器组成
第20页:8155的引脚及其功能
2)引脚及其功能特点:
- AD0~AD7
- 地址/数据线,低8位地址和数据复用线;8155内部具有地址锁存器,在ALE下降沿可锁存单片机的地址数据,不需外加373之类的锁存器,可直接接P0口
- PA0~PA7、PB0~PB7
- A口、B口输入/输出线
- PC0~PC5
- C口输入/输出线,是6位I/O口,既可作通用数据I/O口,又可作控制口
- ALE
- 地址锁存信号,锁存P0口的地址编码
- IO/M
- I/O口或RAM选择信号:0选择RAM,1选择I/O及命令状态寄存器和定时/计数器
- CE
- 片选信号,低电平有效
- RD、WR
- 读、写信号选通线,低电平有效,可直接与单片机的RD、WR连接
- TIMER IN
- 内部定时/计数器时钟脉冲输入,一个脉冲使14位定时器当前值减1
- TIMER OUT
- 内部定时/计数器输出,可向外界输出脉冲或者方波信号
- RESET
- 芯片复位信号线
第21页:表 8155的RAM和I/O口地址编码
8155内部共有256个RAM单元,I/O口除A口、B口、C口外还有命令/状态寄存器、定时器高8位和低8位等,要对RAM单元和I/O端口进行访问必须有相应的编码地址,为此8155芯片采用8位地址AD0~AD7对片内RAM和I/O端口分别编址。
8155的RAM和I/O口地址编码| 选中的寄存器 | AD7~AD0编码 | IO/M选择 |
|---|
| 命令/状态寄存器 | ×××××000 | 1(I/O) |
|---|
| PA口 | ×××××001 | 1(I/O) |
|---|
| PB口 | ×××××010 | 1(I/O) |
|---|
| PC口 | ×××××011 | 1(I/O) |
|---|
| 定时计数器的低8位 | ×××××100 | 1(I/O) |
|---|
| 定时计数器的高8位 | ×××××101 | 1(I/O) |
|---|
| 片内RAM单元(00H~FFH) | ×××××××× | 0(RAM) |
|---|
说明:源文本中地址位与IO/M选择位粘连在一起,此处按8155标准的低3位端口编码(000~101)与IO/M位对齐还原,建议对照原课件图片核对。
第22页:表 8155的PC口工作方式
8155的PA口和PB口有基本输入/输出和选通输入/输出两种工作方式:前者以无条件的方式进行数据的输入和输出,后者数据的输入和输出受到某些联络信号的控制。PC口有ALT1~ALT4四种工作方式,如下表所示。
8155的PC口工作方式(ALT1~ALT4)| 命令口位 | ALT1(方式1) | ALT2(方式2) | ALT3(方式3) | ALT4(方式4) |
|---|
| PC0 | 输入线 | 输出线 | A-INTR | A-INTR |
|---|
| PC1 | 输入线 | 输出线 | A-BF | A-BF |
|---|
| PC2 | 输入线 | 输出线 | A-STB | A-STB |
|---|
| PC3 | 输入线 | 输出线 | 输出线 | B-INTR |
|---|
| PC4 | 输入线 | 输出线 | 输出线 | B-BF |
|---|
| PC5 | 输入线 | 输出线 | 输出线 | B-STB |
|---|
| A口工作方式 | 基本I/O口 | 基本I/O口 | 选通I/O口 | 选通I/O口 |
|---|
| B口工作方式 | 基本I/O口 | 基本I/O口 | 基本I/O口 | 选通I/O口 |
|---|
第23页:8155命令字的格式及定义
8155的工作方式由CPU写入控制命令寄存器中的命令字来确定。①命令字的格式及定义:命令字用于设定A口、B口、C口的工作方式(基本I/O或选通I/O)、中断允许以及定时/计数器的启动与停止。
第24页:8155状态字的格式及定义
②状态字的格式及定义:状态寄存器各位为D0~D7,定义如下:
- INTR-A(D0)
- A口中断请求标志位,1表示请求,0表示未请求。
- BF-A(D1)
- A口缓冲器满标志位(输入时)、缓冲器空标志位(输出时),1为满,0为空。
- INTE-A(D2)
- A口中断允许标志位,1为允许,0为禁止。
- INTR-B(D3)
- B口中断请求标志位,1表示请求,0表示未请求。
- BF-B(D4)
- B口的缓冲器满/空标志位(输入/输出),1为满,0为空。
- INTE-B(D5)
- B口中断允许标志位,1为允许,0为禁止。
- TIMER(D6)
- 定时/计数器中断标志位;当达到最终计数值时该位锁定于高电平,并由读命令/状态寄存器操作或开始新的计数过程操作复位至低电平。
第25页:8155定时/计数器与输出方式
6)定时/计数器:8155片内的定时/计数器是一个14位的减法计数器,它对TIN端的时钟脉冲进行计数,并在达到最后计数值(TC)时给出一个方波或脉冲,如图7-17所示。编址为XXXXX100B和XXXXX101B的两个寄存器为计数长度寄存器,计数初值由程序预置,每次预置一个字节。
- 该寄存器的0—13位规定下一次计数的长度,14、15位规定定时/计数器的输出方式
- TIMER IN输入外接脉冲时实现计数功能,输入系统时钟实现定时功能;每输入一个脉冲计数器减1,减到0时TIMER OUT引脚根据M1、M0的设置输出波形
8155定时/计数器输出方式(M2、M1)| M2 | M1 | 输出方式 |
|---|
| 0 | 0 | 单个方波 |
|---|
| 0 | 1 | 连续方波(计数满后自动加载计数初值并计数) |
|---|
| 1 | 0 | 单个脉冲 |
|---|
| 1 | 1 | 连续脉冲(计数满后自动加载计数初值并计数) |
|---|
第26页:MCS-51单片机与8155的连接
7)MCS-51单片机和8155的连接:
- AD0~AD7:直接与单片机的P0口连接,作为地址/数据线使用
- ALE:与单片机的ALE连接
- CE:片选信号,用线选法与单片机高8位地址线(P2口)任一位连接
- IO/M:与单片机另外一根未用的高8位地址线连接
- RD、WR:直接与单片机的RD、WR连接
连接的关键接线是CE和IO/M:CE决定本芯片是否被选中,IO/M则决定是对I/O端口操作还是对内部RAM操作。
第27页:例7.6 把立即数写入8155片内RAM
【例7.6】电路如图所示,编程将立即数66H写入到8155片内RAM的20H单元中。
解:分析题意得
- 1)对8155进行操作需选通芯片,所以CE=0,即P2.7=0
- 2)对8155片内RAM操作,IO/M=0,即P2.0=0;访问8155片内RAM的地址范围是7E00H~7EFFH(设无用位为1)
3)汇编语言程序如下:
- MOV A,#66H ;立即数送A
- MOV DPTR,#7F20H ;指向8155片内RAM的20H单元
- MOVX @DPTR,A ;写入数据到8155片内RAM的20H单元
第28页:例7.7 8155应用要求
【例7.7】电路如图所示,要求:
- 1)读入PB口按键状态,通过PA口的LED显示出来
- 2)设从8155的TIMER IN端输入一计数脉冲,经24分频后由TIMER OUT输出连续方波信号
第29页:例7.7 定时器初值与命令字设置
解:分析题意得
- 1)CE=0选通8155,IO/M=1选择I/O口,命令/状态寄存器的地址为7FF8H(设无用位为高电平)
- 2)设定定时器初值和输出方式:输出连续方波,定时器输出方式M2M1=01;输出脉冲频率为输入脉冲频率的24分频,所以计数长度为24,即初始值为24(18H)。8155定时器两个寄存器的数值分别为——输出方式及计数值高6位:01000000B(40H);计数值低8位:00011000B(18H)
- 3)PA口为输出,PB口为输入,同时在装入数值后需启动定时器计数,设无用位为0,则命令字为11000001B,即C1H
第30页:例7.7 汇编语言程序
4)汇编语言程序如下:
- ORG 0000H LJMP MAIN ORG 0100H
- MAIN: MOV DPTR,#7FFCH ;指向定时器低8位
- MOV A,#18H ;装入计数值低8位
- MOVX @DPTR,A
- MOV DPTR,#7FFDH ;指向定时器高8位
- MOV A,#40H ;装入计数值高6位及输出方式字
- MOVX @DPTR,A
- MOV DPTR,#7FF8H ;DPTR指向命令寄存器
- MOV A,#0C1H ;命令字送A,设定PA输出、PB输入,并启动定时器
- MOVX @DPTR,A ;写入命令字到命令寄存器
- LOOP: MOV DPTR,#7FFAH ;指向PB口
- MOVX A,@DPTR ;读入PB口状态到A中
- MOV DPTR,#7FF9H ;指向PA口
- MOVX @DPTR,A ;A中数据写入PA口中
- SJMP LOOP END