510 likes | 710 Views
第九章 MCS-51 扩展 I/O 接口的设计. 本章学习目标. 掌握 MCS-51 单片机基本 I/O 口的应用与扩展串 行通信控制寄存器 掌握键盘与显示器的扩展原理及方法 掌握常用外围电路接口芯片 8255 、 8155 、 8279 的性能特点及使用方法。 掌握存储器的扩展原理与方法. 主要内容. 9.1 I/O 接口扩展概述 9.2 MCS-51 与可编程并行 I/O 芯片 8255A 的接口设计 9.3 MCS-51 与可编程 RAM I/O 芯片 8155H 的接口 9.4 用 74LS TTL 电路扩展并行 I/O 口
E N D
第九章 MCS-51扩展I/O接口的设计 本章学习目标 • 掌握MCS-51单片机基本I/O口的应用与扩展串 行通信控制寄存器 • 掌握键盘与显示器的扩展原理及方法 • 掌握常用外围电路接口芯片8255、8155、8279 的性能特点及使用方法。 • 掌握存储器的扩展原理与方法
主要内容 • 9.1 I/O接口扩展概述 • 9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 • 9.3 MCS-51与可编程RAM I/O芯片8155H的接口 • 9.4 用74LS TTL电路扩展并行I/O口 • 9.5 用MCS-51的串行口扩展并行口
9.1 I/O接口扩展概述 MCS-51的I/O接口是MCS-51单片机与外部设备交换信息的桥梁。I/O的扩展也属于系统扩展的一部分。 MCS-51本身有4个I/O口,但是P0口和P2口用作16位地址总线和8位数据线,真正用作I/O口线的只有P1口的8位I/O线和P3口的某些位线。因此,在多数应用系统中,MCS-51单片机都需要外扩I/O接口电路。
9.1.1 I/O接口的功能 • 实现和不同外设的速度匹配 不同外设的工作速度差别很大,大多数外设的速度很慢,无法和us量级的单片机速度相比。 无论采用哪种数据传送方式来设计I/O接口电路,单片机只能在确认外设已为数据传送做好准备的前提下才能进行I/O操作。而要知道外设是否准备就绪,就需要I/O接口电路与外设之间传送状态信息,以实现单片机与外设之间的速度匹配。
输出数据锁存 由于单片机的工作速度快,数据在数据线上保留的时间很短暂,无法满足慢速外设的数据接收。所以在扩展的I/O接口电路中应具有数据锁存器。 • 输入数据三态缓冲 输入设备向单片机输入数据时,要经过数据总线,但数据总线上面可能“挂”有多个数据源,为了传送数据时不发生冲突,只允许当前时刻正在进行数据传送的数据源使用数据总线,其余的数据源应处于隔离状态,因此要求接口电路能为数据输入提供三态缓冲功能。
9.1.2 I/O端口的编址 • I/O接口和I/O端口 I/O端口简称I/O口,常指I/O接口电路中具有端口地址的寄存器或缓冲器。 I/O接口是指单片机与外设间的I/O接口芯片。 一个I/O接口芯片可以有多个I/O端口,传送数据的称为数据口,传送命令的称为命令口,传送状态的称为状态口。 I/O端口的编址实际上是给所有I/O接口中的端口编址,以便CPU通过端口地址和外设交换信息。常用的I/O端口编址有两种方式:独立编址方式,统一编址方式。
9.1.2 I/O端口的编址 • 独立编址方式 独立编址方式就是I/O地址空间和存储器地址空间分开编址。独立编址的优点是I/O地址空间和存储器地址空间相互独立,界限分明。但需设置一套专门的读写I/O的指令和控制信号。 • 统一编址方式 统一编址方式是把I/O端口的寄存器与数据存储单元同等对待,统一进行编址。统一编址方式的优点是不需要专门I/O指令,直接使用访问数据存储器的指令进行I/O操作,简单、方便且功能强。
9.1.3 I/O数据的几种传送方式 为了实现和不同外设的速度匹配,I/O接口必须根据不同外设选择恰当的I/O数据传送方式。 I/O数据传送的几种方式是: 同步传送、异步传送和中断传送。 • 同步传送方式 同步传送又称为无条件传送。当外设速度可与单片机速度相比拟时,常常采用同步传送方式,最典型的同步传送就是单片机和外部数据存储器之间的数据传送。
查询传送方式 查询传送又称为有条件传送,也称异步传送。单片机通过查询得知外设准备好后,再进行数据传送。它的优点是通用性好,硬件连线和查询程序十分简单,但效率不高。为了提高单片机的工作效率,常采用中断传送方式。 • 中断传送方式 中断传送方式是利用MCS-51本身的中断功能和I/O接口的中断功能来实现I/O数据的传送。单片机只有在外设准备好后,发出数据传送请求,才中断主程序,而进入与外设进行数据传送的中断服务程序,进行数据的传送。中断服务完成后又返回主程序继续执行,因此效率较高。
9.1.4 I/O接口电路 MCS-51单片机是Intel公司的产品,而Intel公司的配套可编程I/O接口芯片的种类齐全,这就为MCS-51单片机扩展I/O接口提供了很大的方便。 Intel公司常用的外围I/O接口芯片有: • 8255A:可编程的通用并行接口电路(3个8位I/O 口)。 • 8155H:可编程的RAM/IO扩展接口电路(2个8位I/O 口,1个6位I/O口,256个RAM字节单元,1个14位的 减法定时器/计数器)。 它们都可以和MCS-51单片机直接连接,且接口逻辑简单。此外,74LS系列的TTL电路也可以作为MCS-51的扩展I/O口,如74LS244、74LS273等。
9.2 MCS-51与可编程并行I/O芯片8255A的 接口设计 • 9.2.1 8255A芯片介绍 8255A是Intel公司生产的可编程并行I/O接口芯片,它具有3个8位的并行I/O口,3种工作方式,可通过编程改变其功能,因而使用灵活方便,通用性强,可作为单片机与多种外设连接时的中间接口电路。
8255A芯片引脚说明 8255A共40只引脚,采用双列直插式封装,各引脚功能如下: D0~D7:三态双向数据线,与单 片机数据总线连接,用 来传送数据信息。 /CS: 片选信号,低电平有效。 /RD: 读出信号线,低电平有效。 /WR: 写入信号线,低电平有效。 A1~A0: 地址线,选择4个端口。
9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 • 9.2.2 工作方式选择控制字及C口置位/复位控制字 8255A有三种基本工作方式: (1) 方式0:基本输入输出; (2) 方式1:选通输入输出; (3) 方式2:双向传送(仅A口有此工作方式)。 1、工作方式选择控制字 3种工作方式由写入控制字寄存器的方式控制字来决定。
9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 • 9.2.3 8255A的3种工作方式 1、方式0 方式0是一种基本的输入/输出方式,适合于无条件数据传送,外设的I/O数据可在8255A的各端口得到锁存和缓冲。该方式下,3个端口都可以由程序设置为输入或输出。功能如下: (1) 可供使用的是两个8位口(A口和B口)及两个4位口(C口 高位部分和低位部分)。 (2) 任一端口都可以设定为输入或输出,各端口的输入、输出可构成16种组合。 (3) 数据输出时锁存,输入时不锁存。
9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 2、方式1 方式0是一种选通输入/输出方式,方式1下,A口和B口分别用于数据的输入/输出。而C口则作为数据传送的联络信号,以实现中断方式传送I/O数据。C口的PC7~PC0联络线是在设计8255A时规定的,其各位分配的具体定义见表9-1。 (1) 方式1输入 当任一端口工作于方式1输入时,/STB与/IBF构成了一对应答联络信号。 (1) 方式1输出 当任一端口工作于方式1输出时,/OBF与/ACK构成了一对应答联络信号。
9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 3、方式2 只有A口才能设定为方式2。这时A口既能输入数据又能输出数据。在这种方式下需使用C口的五位口线作控制线。方式2适用于查询或中断方式的双向数据传送。如果把A口置于方式2下,则B口只能工作于方式0。 方式2特别适用于像键盘、显示终端一类外部设备。
9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 • 9.2.4 MCS-51单片机和8255A的接口 1、硬件接口电路
9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 • 9.2.4 MCS-51单片机和8255A的接口 2、8255A端口地址的确定 首先CS为低电平,即单片机P0.7为低电平,则选中该8255A。 其次,P0.1和P0.0(对应8255A的A1和A0,其它地址线悬空)为: 00——选中A口;地址0000H。 01——选中B口;地址0001H。 10——选中C口;地址0002H。 11——选中控制口,地址0003H 。
9.2 MCS-51与可编程并行I/O芯片8255A的接口设计 3、8255A软件编程 实际应用时,必须根据外部设备的类型选择8255A的操作方式,并在初始化程序中把相应控制字写入控制口。例:要求8255A工作在方式0,A口输入,B口、C口输出。 MOV A, #90H; MOV DPTR, #0FF7FH; MOVX @DPTR, A; MOV DPTR, #0FF7CH; MOVX A, @DPTR; MOV DPTR, #0FF7DH; MOV A, #DATA1; MOVX @DPTR, A; MOV DPTR, #0FF7EH; MOV A, #DATA2; MOVX @DPTR, A;
9.3 MCS-51与可编程RAM /IO芯片8155H的接口 • 简介 8155H内包含有256B的RAM存储器(静态),RAM的存取时间是400ns。2个可编程的8位并行I/O口PA和PB,1个可编程的6位并行口PC,以及1个14位减法定时器/计数器。PA口和PB口可工作于基本输入/输出方式(同8255A的方式1)。8155H可直接与MCS-51单片机相连,不需要增加任何硬件逻辑。由于8155H既有I/O口又具有RAM和定时器/计数器,因而是MCS-51单片机系统中常选用的外围接口芯片之一。
9.3.1 8155H芯片介绍 三个通用输入输出口: A口:8位;B口:8位 C口:6位 可作状态口,此时AB口能在应答式的I/O方式下工作 256B静态RAM,最快存取时间400ns 1、8155H的内部结构 IO/ M 256B 静态 RAM A 接外设 口A PA0~PA7 AD0~AD7 接单片机 接外设 CE ALE RD WR RESET B 口B PB0~PB7 接外设 C 口C 定时器 定时器输入 PC0~PC5 定时器输出 内有地址锁存器,多路 转换的地址和数据总线 14位可编程定时/计数器 单一+5V电源,40条引脚
PC0-PC5 PB0-PB7 AD0-AD7 PA0-PA7 C口端口线 B口端口线 A口端口线 三态地址/数据线 IO/ M 端口/存储器选择 RD TIMER IN CE WR TIMER OUT 读 ALE 选片 定时器输出 定时器输入 地址锁存允许 写 8155 9.3.1 8155H芯片介绍 2、8155H的引脚功能 PC3 PC4 PC5 IO/ M CE RD WR ALE AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 Vss Vcc PC2 PC1 PC0 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 TIMER IN RESET TIMER OUT 8155H引脚
PA0-PA7 端口A的I/O线(8位,接外设) PB0-PB7 端口B的I/O线(8位,接外设) PC0-PC5 端口C的I/O线(6位,接外设) AD0-AD7 三态地址/数据复用线(8位,一般接单片机P0口,CPU与8155之间的地址、数据、命令、状态等信号都通过它来传送) 端口/存储器 选择控制 “0”选择片内RAM “1”选择片内I/O口 TIMER IN 8155片内定时器/计数器的计数脉冲输入引脚 TIMER OUT 8155片内定时器/计数器的计满回零输出引脚 分别是对8155片内的RAM或I/O口的的读、写控制信号 ALE CE 地址锁存允许引脚 选片 RESET 复位引脚 9.3.1 8155H芯片介绍 IO/ M RD、WR
9.3.1 8155H芯片介绍 3. 8155H的RAM和I/O口地址 RAM地址----当IO/ M 加低电平时 此时AD0-AD7上得到的地址值是指8155H的某一RAM单元的地址,地址范围是 0000 0000--1111 1111 分别指向8155H RAM 的256个存储单元。 I/O口地址----当IO/ M 加高电平时 此时AD0-AD7 (仅用到低三位AD2、AD1、AD0)上得到的地址值是指8155H的某一I/O口的地址,具体端口地址分配是:
AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 I/O端口 ╳ ╳ ╳ ╳ ╳ 0 0 0 命令/状态口 ╳ ╳ ╳ ╳ ╳ 0 0 1 A口 ╳ ╳ ╳ ╳ ╳ 0 1 0 B口 ╳ ╳ ╳ ╳ ╳ 0 1 1 C口 ╳ ╳ ╳ ╳ ╳ 1 0 0 计数器低8位 ╳ ╳ ╳ ╳ ╳ 1 0 1 计数器高6位 8155H的RAM和I/O口地址分配
0—输入 PB、PA—A口、B口数据传送方向 1—输出 0—禁止 IEA、IEB — A、B口中断允许控制 1—允许 8155H命令字含义 TM2 TM1 IEB IEA PC2 PC1 PB PA PC2、PC1—C口数据传送方向及AB口工作方式 00—ALT1: C口输入,A、B口基本I/O方式 11—ALT2: C口输出,A、B口基本I/O方式 01—ALT3: PC3-PC5输出,A口选通方式,B口基本I/O方式 10—ALT4: A、B口选通方式 TM1、TM2—定时器/计数器控制 10 记满回零停止计数 11 启动 00 空操作 01 停止定时器
INTRA A口中断请求 X D6 D5 D4 D3 D2 D1 D0 ABF A口缓冲器满/空 INTEA A口中断允许 INTRB B口中断请求 BBF B口缓冲器满/空 INTEB B口中断允许 定时器中断(计满时为高电平,读出状态字或硬件复位为低电平) TIMER 8155H状态字含义 保存定时器和I/O通道的状态 用指令查询 MOVX @DPTR,A:写命令寄存器 口地址和命令寄存器相同:0EF00H MOVX A,@DPTR:读状态寄存器
4. 8155H的使用(分二种情况:片内RAM的使用 各端口的使用) 8155H内RAM的使用: 与一般外部数据存储器的使用基本一样,唯一区别是事先要使IO/ M 为低电平。 8155H各端口(包括定时器)的使用: A、B、C各端口可工作于不同的工作方式,使用前要进行初始化(写命令字到命令口)。
A口、B口、C口的用法 由写入命令寄存器的控制字确定其工作方式 工作于ALT1和ALT2:三个口是独立的基本I/O口 工作于ALT3:A口为选通输入方式 C口低3位作为A口的联络线 C口其余位作I/O线 工作于ALT4:A、B口均为选通输入/输出方式 C口低3位作为A口的联络线 C口高3位作为B口的联络线 1、I/O口由程序设定为输出口时,仍可通过对应的口地址执 行读操作读取输出口的内容 2、I/O口由程序设定为输入口时,锁存器将被清除 3、8155复位时,所有输出锁存器都被清除,三个口都处于输 入方式
方式 ALT1 ALT2 ALT3 ALT4 位 PC0 AINTR(A口中断) AINTR(A口中断) ABF(A口缓冲器满) PC1 ABF(A口缓冲器满) PC2 ASTB(A口选通) ASTB(A口选通) 输入方式 输出方式 PC3 BINTR(B口中断) 输出方式 PC4 BBF(B口缓冲器满) PC5 BSTB(B口选通) A口、B口为基本I/O口 A口为选通输入 B口为基本I/O口 A口、B口为选通输入/输出方式 A口、B口为基本I/O口 备注 C口工作方式及控制信号分布
定时器的用法 8155是一个14位减法计数器 TIMER IN输入计数脉冲 计数满时,由TIMER OUT输出脉冲或方波 TIMER IN 接外部脉冲时:计数方式 接系统时钟时:定时方式 低8位计数值 定时器方式 高6位计数值 • 00 单方波 • 01 连续方波 • 单脉冲 • 连续脉冲 操作: 1、由写入命令寄存器的控制字确定定时器的启动 M2 M1 2、由写入到定时器的两个寄存器的内容确定计数 长度和输出方式
计数长度低8位 M2 T7 M1 T6 T5 T13 T12 T4 T3 T11 T2 T10 T1 T9 T8 T0 计数长度高6位 定时器方式 M1M2 00 单个方波 01 连续方波 10 单个脉冲 11 连续脉冲 计数器长度:0002H~3FFFH 计数器长度为偶数 方波输出对称 计数器长度为奇数 方波输出不对称 方波输出不对称时,高电平多一个计数 注意: 1、计数器正在计数时,可以将新的计数长度和输出方式装入计数寄存器。但在此之前,必须向定时器发出一个启动命令。 2、硬件复位只能使计数停止
扩展电路的连接举例----见图7-12,接口电路非常简单,基本上是相同信号对接。 8031 8155 RESET RD WR ALE IO/M 口A RESET RD WR ALE P2.0 P2.7 PA0~PA7 CE 口B P0.0 P0.1 P0.2 P.03 P0.4 P0.5 P0.6 P0.7 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 PB0~PB7 口C PC0~PC5 图7-12
★请思考:对比2764的扩展,为什么图7-12中扩展8155时,单片机P0口输出的地址信号没有经过373锁存而是直接接到8155的地址/数据复用线上了?★请思考:对比2764的扩展,为什么图7-12中扩展8155时,单片机P0口输出的地址信号没有经过373锁存而是直接接到8155的地址/数据复用线上了? 四. 应用举例----(见教材p219例) 设8155与单片机连接电路如图7-12,现要求其A口为基本输入方式,B口为基本输出方式,定时器为方波发生器,对8031输入脉冲进行24分频,编制初始化程序段。
解:首先分析各端口地址----见教材P138表7-9。 命令状态口地址为7F00H A口地址为7F01H B口地址为7F02H C口地址为7F03H 定时器低8位地址7F04H 定时器高6位地址7F05H 8155的控制字为0C2H: TM2 TM1 IEB IEA PC2 PC1 PB PA 1 1 0 0 0 0 1 0
24分频即计数初值为24(000000 0011000B=18H)加上定时计数控制01(连续方波),则送往定时计数器的时间常数及定时控制字应为 01000000 00011000B=4018H MOV A,,#40H MOVX @DPTR,A MOV DPTR,#7F04H MOV A,#18H MOV DPTR,A MOV DPTR,#7F00H MOV A,,#0C2H MOVX @DPTR,A MOV DPTR,#7F05H 补充题1: 根据图7-12的电路,把8155的PB口设置成输入方式,PA口设置成输出方式,并把PB口输入的数据与8031 P1口输入的数据相“异或”,结果从PA口输出。试写出满足此要求的程序。
P2.7……………P2.0 P0.7……………… P0.0 地址 I/O端口 7F00H 0 X X X X X X 1 X X X X X 0 0 0 命令/状态口 7F01H 0 X X X X X X 1 X X X X X 0 0 1 A口 7F02H 0 X X X X X X 1 X X X X X 0 1 0 B口 7F03H 0 X X X X X X 1 X X X X X 0 1 1 C口 7F04H 0 X X X X X X 1 X X X X X 1 0 0 计数器低8位 7F05H 0 X X X X X X 1 X X X X X 1 0 1 计数器高6位 解:根据题目要求,要先初始化8155(设置其端口的输入输 出方式---这里PB口输入,PA口输出),其控制字如下: TM2 TM1 IEB IEA PC2 PC1 PB PA 0 0 0 0 0 0 0 1 即控制字为01H,(注:此处PC2 PC1取1 1也可以) 依图7-12电路,8155的六个端口地址分配如下
所以程序如下: MOV DPTR,#7F00H ;选中8155命令口 MOV A,#01H ;控制字01H MOVX @DPTR,A ;控制字01H送8155命令口 MOV DPTR,#7F02H ;选中8155 PB口 MOVX A,@ DPTR ;从PB口输入数据 XRL A,P1 ;与8031 P1口内容“异或” MOV DPTR,#7F01H ;选中8155 PA口 MOVX @DPTR,A ;从PA口输出数据 SJMP $
P2.7……………P2.0 P0.7……………… P0.0 地址 RAM单元 0000H 0 X X X X X X 0 0 0 0 0 0 0 0 0 0号 00FFH 0 X X X X X X 0 1 1 1 1 1 1 1 1 255号 补充题2:根据图7-12电路,设计一段程序把8155片内RAM全部填满FFH。 解:根据图7-12的电路,8155片内RAM地址是000H~00FFH,又由于是对8155片内RAM操作,不需要初始化芯片,
程序如下: MOV R7, #00H ;R7作计数器,从0开始共减256次再到0 MOV A,#0FFH ;准备送FFH MOV DPTR,#0000H ;DPTR指向第一个单元 LOOP: MOVX @DPTR,A ;送数 INC DPTR ;调整指针,指向下一个单元 DJNZ R7,LOOP ;循环控制 SJMP $
9.4 用74LS TTL电路扩展并行I/O口 • 简介 在MCS-51单片机应用系统中,采用TTL电路、CMOS电路锁存器或三态门电路也可构成各种类型的简单输入/输出口,在有些场合能降低成本、缩小体积。 通常这种I/O都是通过P0口扩展。由于P0口只能分时复用,故构成输出口时,接口芯片应具有锁存功能;构成输入口时,要求接口芯片应能三态缓冲或锁存选通,数据的输入输出由单片机的读/写控制信号控制。
采用74LS244做扩展输入、74LS273做扩展输出的简单I/O扩展电路。采用74LS244做扩展输入、74LS273做扩展输出的简单I/O扩展电路。 74LS244是缓冲驱动器,扩展输入口。74LS273是8D锁存器,扩展输出口,输出端接8个LED,以显示8个按钮开关状态。它们都受P2.0、/RD、/WR3条控制线控制。
程序如下: • ORG 0000H • AJMP MAIN • ORG 0030H • MAIN:MOV DPTR,#0FEFFH;数据指针指向I/O口地址 • MOVX A,@DPTR ;从244读入数据,检测按键 • MOVX @DPTR,A ;向273输出数据,驱动LED • AJMP MAIN • END
9.5 用MCS-51的串行口扩展并行口 • 1、使用移位寄存器作为锁存或输入信号的接口,可以 方便地扩展并行输入、输出口。这种方法不占用片 外RAM地址 • 2、串行口扩展并行输入口