微机接口笔记

第一章 绪论

1.1微机与接口

(1) 接口是CPU与外设之间的中转站(√)

​ 接口是主线与外设之间的中转站(√)

​ 接口是处理器与外设之间的中转站(√)

(2) 8086/8088的两种工作模式及其引脚

最小模式:一个微处理器产生系统中所有的总线控制信号。

最大模式:系统中有两个以上的微处理器,以8086/8088为主处理器。控制信号由主处理器通过控制总线对各协处理器发出的控制信号进行变换和组合 后产生的

公共引脚(**/为低电平有效**): AD15~AD0 分时复用地址/数据线

​ A 19 /S 6 ~ A 16 /S 3 :传送时构成20位地址线

​ MN/MX 最小最大模式信号,1为L,0为H

​ /RD 读信号 低电平有效

​ NMI 不可屏蔽的中断请求。 ↑有效,不可软件屏蔽。

​ INTR:可屏蔽的中断请求线。H有效,可软件屏蔽。

​ RESET:复位信号。持续4个CLK的H有效。

​ CLK:时钟信号。8086为5MHz,8088为4.77MHz。

​ READY: 表示内存或外设对CPU的响应信号,高电平准备好;低电平未准备好,CPU进入等待状态

​ /TEST:测试信号,输入。CPU执行WAIT 指令时,每隔5个CLK检测此信号。若为H则CPU空转;否则CPU结束等待状态,执行下一条指令。(WAIT指令的终止信号 指令的终止信号)

​ /BHE/S 7 :高字节使能/状态信号。8086传送数据期间,若为L,表示高8位数据线正在使用(和AD 0 配合使用)。不传数据时,S 7 状态。

​ /SSO: 系统状态输出信号,仅8088使用,与IO//M、DT//R 配合使用表示系统总线对应的操作

​ 最小模式引脚:/INTA :中断响应信号

​ ALE: 地址锁存允许信号,连接 地址锁存器。CPU送地址时,该信号为H将地址锁存。

​ /DEN: 数据允许信号,连 数据总线收发器。CPU传送数据时,该信号为L可控制数据总线收发器,使其接收或发送数据。DMA方式下,该引脚浮空。

​ DT//R: 数据发送/ 接收信号。H表示CPU向内存或外设发送数据;L表明CPU从内存或外设接收数据。当DMA方式下,此引脚浮空。

​ M//IO:存储器访问或I/O访问,输出。H表示CPU正在访问存储器;L表示CPU正在访问I/O接口。

​ /WR:写信号。L表明CPU正在 写内存或外设。DMA方式下,此引脚为高阻态。

​ HOLD: 总线保持请求信号。当其它总线主设备(如DMA控制器)要求占用总线时,通过该引脚向CPU发送请求。

​ HLDA:总线保持 响应信号。当CPU收到HOLD信号后,通过该引脚发出H信号,表示 让出总线控制权

​ 最大模式引脚: QS 1 、QS 0 : 指令队列状态输出。不同组合表明了CPU内部指令队列的状态。

​ S 0 、S 1 、S 2 : 总线周期状态信号。 外接总线控制器 ,可产生多个不同的控制信号。

​ /LOCK: 总线锁存信号。低电平时, 不允许系统中其它总线主设备使用总线。

​ RQ/GT 0 和 RQ/GT 1 : 总线请求信号输入/ 总线请求允许信号输出。这两个信号可提供给微处理器以外的2个总线主设备用来发出使用总线的请求,和接收微处理器对总线请求信号的应答。

1.2微机接口概述

(1)CPU与外设之间的交互为数据和程序等各种信息输入与各类信息及运行结果的输出

(2)接口即为弥补CPU与外设之间差异的中转站

(3)微机接口的功能:I/O地址译码与设备选择:同一时刻只允许1外设与CPU进行交互,且只有通过地址译码被选中的IO接口才可以与主线进行数据交互

信息的输入/输出、缓冲与锁存: 输入时需要缓冲,输出时需要锁存

信号格式转换

联络功能:发送“数据到”信号通知CPU取走数据、发送“传输完”信号通知外设发送新数据

中断管理

其它功能: 复位、设定工作方式和工作参数等

(4)南北桥的定义与功能

​ 北桥:控制CPU与内存之间的数据交换,并控制AGP、PCI数据在其内部的传输,是主板性能的主要决定因素。北桥速度快,离CPU近。

​ 南桥:负责I/0接口等一些外设接口的控制、IDE设备的控制及附加功能等等。南桥速度慢,离CPU远。

1.3微机接口的组成

​ 74LS244:3态8位缓冲器,无锁存功能,一般作为总线驱动器。

​ 74LS245:三态总线转换器,一般用于总线的电平匹配问题,为双向传送。

​ 74LS373:三态输出的8D锁存器

​ 74LS** 低功耗肖特基 74HC**高速低功耗CMOSS 74AS** 高功耗肖特基 74HCT** 高速低消耗CMOSS 输入为TTL电平

1
肖特基:SBD二极管。肖特基二极管是贵金属(金、银、铝、铂等)A为正极,以[N型半导体](https://baike.baidu.com/item/N型半导体/899425?fromModule=lemma_inlink)B为负极,利用二者接触面上形成的势垒具有整流特性而制成的金属-半导体器件

1.4CPU与接口的数据交换

image-20220907174736925

CS: choice select 选择信号,选择测试端口号

WR:读写信号

LE: let enable 锁存信息

OE : output enable 输出信号 低电平有效

  • CPU 与外设的几种数据交换方式

  • (1) 无条件传送(同步传送):程序简单,外设已准备好,无需查询外设状态,直接使用传送数据

    (2)条件传送: 传送前查询外设状态 仅准备好才交换数据,效率低下

    (3)中断方式: 由外设向CPU发送信息,当且仅当外设主动发送中断请求,且符合中断优先级时,CPU才中断当前程序来对外设进行服务。提高了实时性,但硬件复杂,是CPU通过程序来控制传送数据,适用于较少次数请求中断的外设,不适用于高速批量传送数据的场合。

    (4)DMA(Direct Memory Access)方式:数据传输不通过CPU,而设置DMA控制器在外设与内存之间。当DMA需要进行数据传输时,DMA向CPU提出总线请求,CPU将总线传输控制权给DMA。DMA方式下,除CPU外,DMAC也是主控设备。减轻了CPU负担,开销大,适用于批量数据的高速传输。

第一章结构提纲

image-20220907180559629

第一章思考题

  1. 微机系统的硬件结构组成是什么样的?

    解:硬件系统由5部分组成:1、运算器,主要功能是对数据和信息进行运算和加工;2、控制器,是计算机的神经中枢,指挥全机中各个部件自动协调工作;3、存储器,是计算机的记忆系统,不仅可以保存信息,还能接受计算机系统内不同的信息并对保存的信息进行读取;4、输入设备,用于把原始数据和处理这些数的程序输入到计算机中;5、输出设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备操作等。

  2. 微机接口的软硬件组成是怎么样的?

    解:硬件接口也称为硬设备接口,主要指与外设备连接时的电缆接口、蓝牙接口、红外接口等;软件接口,是通过计算机语言实现两个设备之间的数据通讯连接,实现信息交换。

  3. 请分析CPU与接口之间最常用的三种方式的工作原理,并比较它们的工作效率

解:查询方式、中断方式和DMA方式 ,比较看上述笔记。

第二章 I/O端口地址译码技术

2.1I/O端口地址

存在两种I/O端口编址方式:统一编址、独立编址

统一编址:I/O端口被当成普通内存单元看待,I/O端口与内存单元 统一进行地址分配,使用 统一的指令进行访问。

独立编址:I/O端口与内存单元有 各自独立的地址空间,访问I/O端口使用专门的I/O指令 指令。

  • 独立编址下的I/O指令 (传输 一个字节时使用AL;传输 一个字时使用AX)

    • 直接寻址 端口地址 ≤ 0FFH

      输入:IN AL/AX,port

      输出:OUT port,AL/AX

    • 间接寻址 端口地址 > 0FFH

      输入: MOV DX,port

      ​ IN AL/AX,DX

      输出: MOV DX,port

      ​ OUT DX,AL/AX

2.2I/O端口地址分配

  • 系统配置占用了的端口地址不能使用。
  • 计算机厂家声明保留的地址不能使用。
  • 用户可使用300~31FH的地址。但为了避免与其它用户开发的接口卡发 生冲突,最好采用DIP开关 开关进行地址设置。

2.3I/O端口地址译码

image-20220914161610478

/CS:由地址线和控制线进行逻辑组合

/IOR:控制信号,读信号

/IOW:控制信号,写信号

/AEN:地址使能信号,高电位表示DMAC传输,低电位表示CPU传输

  • 片选逻辑(地址线分为高低两部分,分别用于片间和片内寻址)
    • 片间寻址:高位地址线与控制信号结合,产生片选信号/CS,以选中接口芯片。
      Ø 通常都由接口芯片 外部的译码电路来完成。
    • 片内寻址:位地址线与控制信号连到I/O接口芯片,用以选择内部端口。
      Ø 通常由接口芯片 内部的译码电路来完成。
      Ø 用于片内寻址的 低位地址线条数取决于接口内的端口数目。低位地址线数 = image-20220914162028635

常用的两种译码方式:

  • 门电路译码:与或非门,门电路集成芯片( 74LS04:反相器(6门集成), 74LS08:与门(4门集成), 74LS20:4输入与非门(2门集成), 74LS30:8输入与非门(1门集成),74LS32:2输入或门(4门集成))

  • 译码器译码:多端口时常用专用译码器译码,常用译码器( 74LS138:3-8译码器,74LS139:双2-4译码器,74LS154:4-16译码器)

    【例2-4】已知并口芯片8255A内有4个端口,片选信号CS低有效。试用74LS138设计一个译码电路,使该芯片的4个端口地址为 2F0H ~ 2F3H。

    image-20220914162519271

    【例2-5】设计一个译码电路,要求产生2A8H~2AFH共8个端口的选通信号。

    提示:题目并没有说是一个芯片,所以只需要做一个译码器用来选择端口

    image-20220914162613496

image-20220914162647690

image-20220914162708686

作业题:分析并阐述74LS04/08/20/30/32的功能,并画出各芯片的内部逻辑结构图及真值表。

74LS04: 内部逻辑结构及真值表 image-20220914173350293image-20220914173733962

74LS08

image-20220914173917496image-20220914173925513

74LS20image-20220914174032667image-20220914174039533

74LS30image-20220914174100123image-20220914174109939

74LS32

image-20220914174125239image-20220914174129898

I/O端口地址的可选式译码

为了使端口具有一定的可变性,可以根据要求改变端口的地址

  • 比较器

image-20220919193400626

当D70=A93时,才进行写入

所以可以对指定的端口进行预配置

  • 地址开关

    image-20220919193757806

    利用开关来与比较器的结合来完成自定义的地址选择与预配置

  • 跳线开关image-20220919193916443

    每个输入可以接或者不接,有两种选择。10位地址有2^10次个选择

第二章结构提纲

image-20220919194702396

第三章 定时/ 计数技术

3.1定时/技术基本概念

定时和计数:实质上都是 计数 。定时是通过 记录高精度晶振的脉冲个数 ,输出准确的时间间隔。

微机系统中的定时分为以下两种:

内部定时:是计算机本身运行的 时间基准或 时序关系。计算机的每个操作都严格按照固定的时间节拍来进行

外部定时:外设与CPU,或外设与外设之间的时间基准和时序关系。

微机中的定时方法:

▲ 软件定时:通过软件编程, 循环执行一段程序来实现。

▲不可编程的硬件定时:采用 分频器、 单稳电路或简易定时电路来实现。

▲可编程的硬件定时:用 可编程定时器芯片实现,

3.2 8253/8254计时器及工作方式

COUNTER#0 :16位计数初值寄存器

COUNTER#1 :16位-1计数器

COUNTER#2 :16位当前值锁存寄存器

8253/8254 的每个计数器有6种工作方式:

  • 方式0——计数期间低电平输出(GATE高电平时计数)

    • 计数过程

      ▲ 写入 方式字0后,WR的上升沿 ↑使OUT信号变低。
      ▲ 写入 计数初值后,WR的 将初值写入初值寄存器,在下一个CLK ,将计数初值写入减1计数器。
      ▲ 之后每个CLK ↓ , 计数减1。减为0时,OUT变高。

      image-20220921203046438
    • 门控信号

      ▲ GATE为高时允许计数;为低时 暂停计数,其计数值保持。当GATE再次变高时,计数器从暂停处 继续计数。
      ▲ GATE信号的变化不影响OUT信号的状态。

      image-20220921203119791

    • 重新计数

      计数期间,若再次写入计数初值,则计数器 立即按 新的初值重新计数。

      image-20220921203140891

      总结:写入时输出端为低电平,第二次写入时遇到CLK下降沿时开始计数,计数到0时输出端为高电平;门控信号对输出端为低电平时暂停计数,高电平时继续计数;当计数过程中再次写入时,以第二次写入的值开始重新计数。

  • 方式1——计数期间低电平输出(GATE上升沿重新计数)

    • 计数过程

      ▲ 写入方式字1后,WR的 ↑ 使OUT信号变高。
      ▲ 写入初值后,若无GATE ↑,则OUT持续为高;若有GATE↑,则在GATE ↑ 后的下一个CLK ↓ ,OUT变低。
      ▲ 之后每个CLK ↓,计数减1。减为0时,OUT变高。

      image-20220921204015170

    • 门控信号

      ▲ 计数期间,若GATE信号又出现 ↑,则计数器 重新装入初值,开始新的计数

      image-20220921204344183

    • 重新计数

      ▲ 计数期间,若重新写入初值, 须等当前计数值 计满到0,且GATE 再次出现 ↑时 ,才按新的初值重新计数。

      image-20220921204422052

      总结:输出端只有在写入方式1与正在计数时(除0外)为低电平,计数的启动需要Gate门的上升沿驱动;方式1门驱动与方式0相同;

      重新计数必须得上一次计数结束且Gate门再次出现上升沿时才会重新计数。

  • 方式2——周期性输出负脉冲

    • 计数过程

      ▲ 写入方式字2后,WR的 ↑ 使OUT信号变高。
      ▲ 写入初值后,在CLK ↓进行减1计数。 减为1 时,OUT变低 变低并维持一个周期,然后又变高,并 自动装入初值重新计数。

      image-20220921205013786

    • 门控信号

      ▲ GATE为高,允许计数;为低, 终止计数。待GATE恢复为高后,计数器将 从初值重新计数。

      image-20220921205032474

    • 重新计数

      ▲ 计数期间,若重新写入初值,则不影响正在进行的计数过程,必须等到计数器减到 等到计数器减到1之后,才 之后,才 自动 装入新的初值,并按照新的初值进行计数。

      image-20220921205048788

      总结:写入方式2时,输出端变为高电平,直到计数结束(变成0)时,输出端变为低电平,并且**自动开始下个周期**;当Gate为低电平时,停止计时,下次计数以初始值重新开始计时;在一次计数过程中写入新的初值时,必须得等待上一次的计数结束。该方式能连续工作,且输出固定频率的脉冲,因此称之为 频率发生器 或 分频器

  • 方式3——周期性输出方波

    • 计数过程

      • 当初值n为偶数时

        ▲ 写入方式字后,OUT信号变高。
        ▲ 写入初值后开始减1计数;减到 n/2 时,OUT变低继续计数;减到0时,OUT变高,并自动装入初值重新计数。

        image-20220921210037220

        ·OUT 端连续输出 占空比为1/2的方波。
        ·占空比( Ducty Cycle ):脉冲序列中,正脉冲的持续时间与脉冲总周期的比值。

      • 当初值n为奇数时

        ▲ 写入方式字后,OUT信号变高。
        ▲ 写入初值后开始减1计数;减到 (n-1)/2 时,OUT变低继续计数;减到0时,OUT变高并自动装入初值,重新计数。

        image-20220921210127471

    • 门控信号

      与方式2相同,同样要区分初值的奇偶性

    • 重新计数

      与方式2相同,同样要区分初值的奇偶性

      总结:大体上与方式2相同但是方式3不等到减为1,而是减到约初值的一半,保持低电平;减到0时再变高,如此反复。因此,可输出连续方波,故称为 方波发生器

      方式3的实际运行与上述的电平图线不同

      偶数情况下

      image-20220921211512348

      奇数情况下

      image-20220921211857829

  • 方式4—— 软件触发输出单脉冲

    • 计数过程

      ▲ 写入方式字4后,OUT信号变高。
      ▲ 写入初值后,进行减1计数。减为0时,OUT端输出一个CLK周期的负脉冲,然后恢复为高电平。
      ▲ 不能自动装入初值。要想启动下一次计数,需重新写入初值,由 软件触发计数器开始工作。

      11

    • 门控信号

      ▲ GATE高电平时,允许计数;为低则 终止计数。待GATE恢复为高后,计数器将从 初值重新进行计数。

      image-20220921212059461

    • 重新计数

      ▲ 计数期间,若重新写入初值,则不会影响正在进行的计数过程,必须等到计数器减到 必须等到计数器减到0之后,才装入新的初 之后,才装入新的初
      值,并按照新的初值进行计数。
      ▲ 计数完毕后 若无软件再次触发,计数器将停止工作。

      image-20220921212118809

  • 方式5—— 硬件触发输出单脉冲

  • 计数过程

    ▲ 写入方式字5后,OUT信号变高。
    ▲ 写入初值后并不立即计数,而是等GATE有 ↑才开始计数。减为0时,OUT端输出一个周期的负脉冲,然后变高。

    image-20220921212140679

  • 门控信号

    ▲ 计数过程中或计数结束后,若GATE再次出现上升沿,则计数器装入初值重新进行计数。

    image-20220921212204662

  • 重新计数

    与方式5相同

image-20220921212322518

image-20220921212331563

image-20220921212342918

image-20220921212352319

3.3 8253/8254编程与应用

(1)方式字

  • 指定使用哪个计数器。
  • 指定某个计数器的工作方式。
  • 指定计数初值的长度、装入顺序以及计数值的码制。
  • 指定是向计数器 写入初值,还是 锁存其当前计数值。

image-20220926194147624

方式字的格式

image-20220926194215445

  • 计数器的选择

​ D7D6:00-计数器0;01-计数器1;10-计数器2;11-8253并未用到

  • 读写格式

​ D5D4:00-锁存当前值;01-写入低8位,高8位默认为0;10-写入高8位,低8位默认为0;11-高8位与低8位都写,先写低8位,再写高8位

  • 工作方式

​ D3D2D1:000-方式0计数;001方式1计数;X10-方式2计数;X11-方式3计数;100-方式4计数;101-方式5计数

  • 数制

​ D0:0-以二进制写入;1-以8421BCD码写入

计数初值:8253/8254是减1计数器, 计数初值决定了定时的长短。l定时时间 T out =计数初值n × 计数时钟周期 T CLK ,故

image-20220926195302677

8253/8254 初始化编程与应用

写方式字的端口号A1A0编号为11

写计数器0的端口号A1A0编号为00

写计数器1的端口号A1A0编号为01

写计数器2的端口号A1A0编号为10

具体的操作对应的字段编码

image-20220926195741700

第五章 中断技术

5.1 中断技术概述

▲中断方式下,CPU无需完全服务于某个外设,效率高。

▲当出现某些异常或某外设有请求时,CPU暂停正在执行的程序,转去执行某一特定的程序,执行完后再返回原来的程序处继续执行。

image-20221011192551688

5.1.1 中断的常用术语

1、中断

▲指CPU正在执行某程序时,由于出现了某些异常或外设提出了某种请求,CPU暂停当前程序,转去处理异常或外设请求的程序,执行完后再返回原来被终止的程序处继续执行。该过程称为中断。

2、主程序

▲未发生中断时,CPU正在执行的程序称为主程序。

3、中断服务程序 ISR

▲处理中断事件的程序,又称中断子程序。

▲不同的中断对应不同的ISR。

4、断点

▲中断时,主程序中被终止指令的下一条指令的地址

▲CPU转去执行ISR时,断点被压入栈中进行保护;ISR执行完毕后,CPU通过出栈操作从栈顶获得中断断点,确保能返回到主程序处继续执行。

5、中断源

▲引起中断的事件或设备。

内部中断:在CPU的内部产生。例:CPU执行程序时遇到的特殊情况,如:除法错。

外部中断:在CPU的外部产生。例:外设提出的中断,如电源故障。

6、中断类型号

▲微机系统中有多个中断源。为便于区分,为每个中断源分配一个编号,即中断类型号。

7、中断接口

▲当中断源向CPU发中断请求时,需由一个电路来进行管理,如:接收中断请求、屏蔽/打开中断请求、中断优先级排队、中断嵌套和中断结束等。实现中断管理的逻辑电路称为中断接口。

▲本章使用8259A可编程中断控制器对系统的中断进行管理。

​ 可以分为:软件辨别接口与硬件辨别接口。

8、中断识别

▲指CPU确定哪一个中断源发出中断请求的过程。

目的:找到该中断源所对应的中断服务程序的入口地址,转去进行处理。

▲中断识别的2种方法:

​ ★查询法:采用软件查询技术来确定发出中断请求的中断源。

​ ★硬件法:由可编程中断控制器来提供中断类型号。

9、中断向量和中断向量表

▲中断向量:指中断服务程序的入口地址

​ ★每个ISR都有一个确定的入口地址。

​ ★入口地址 = 段基址CS : 偏移地址IP,共4个字节。

▲中断向量表:将系统中所有的中断向量集中起来按中断类型号从小到大的顺序存放在内存某区域。该存储区域称为中断向量表。

​ ★PC机中共有256个中断(0~255),每个中断向量占4个字节,共占1KB的存储区域。

​ ★用 0~3FFH 的内存单元存储中断向量表。

中断向量表

image-20221011193848658

5.1.2 中断过程

1、中断源请求中断

▲外设发出中断请求时,中断接口电路需设置中断请求触发器保持外设的中断请求信号,直到CPU响应该中断后才清除它。

▲中断接口电路应设置中断屏蔽寄存器,CPU可通过对其进行设置,使得某些中断源的中断请求不能提交到CPU。

中断屏蔽寄存器与接口中的中断请求位相结合来判断该外设是否能发生中断

高电位表示接收屏蔽,该外设中断失效,低电位表示可以接收中断。

2、中断判优

▲由于同一时刻可能会有多个中断源同时请求中断服务,因此接口电路需对这些中断源进行优先级判别优先级排队。这个过程称为中断判优。

▲CPU按照优先级的高低顺序来响应中断。

3、中断响应

▲收到中断请求后,若CPU满足响应条件,则进入中断响应周期。

▲CPU响应中断的条件

  • CPU当前指令执行结束。(在执行指令过程中不能执行中断)
  • 没有更高级的中断请求在执行。(优先级的判断)
  • CPU处于开中断状态 (IF=1)。可用指令改变IF的状态:STI开中断;CLI关中断。

▲中断响应周期需完成的操作(CPU硬件自动完成)

  • 清IF和TF标志,以免在响应过程中被新的中断源中断,破坏了当前中断处理的现场。(表示不可以发生中断)

  • 将FLGAS寄存器和中断断点 (CS:IP) 压栈保存。

  • 查找中断向量表,获得ISR的入口地址,转去执行ISR。

中断响应及处理过程示意图

image-20221011195120282

4、中断服务

CPU转入ISR后,需做以下几件事情:

保护现场:ISR将要用到的寄存器压栈,以免其数据破坏。

开中断:以便在执行ISR时,能响应更高级的中断请求。(服务与③)

中断处理:处理中断请求所要求的操作。

关中断:保证在恢复现场时不被新的中断打断。(服务与⑤)

恢复现场:在ISR结束前,执行出栈操作,恢复各寄存器的内容,以便主程序正确执行。

开中断:保证返回主程序后仍能响应中断。

中断返回:ISR的最后一条指令为IRET,它将IP、CS和FLAGS的内容依次弹出,以便恢复到主程序的断点处。

5.1.3 中断管理

1、中断源识别

▲PC机内有多个中断源,CPU收到中断请求后,需识别是哪一个中断源发出了中断请求信号,以便执行相应的中断服务程序。

▲中断源识别的两种方法:

  • 软件查询:CPU逐个查询各中断源的状态,从而确定是哪个设备发出了中断请求。

  • 硬件处理:中断接口电路将要响应的中断类型号送给CPU。

2、 中断的优先级排队

▲当有多个中断源同时请求中断时,由于CPU在同一时刻只能响应并处理一个中断请求,因此,需根据中断的性质及轻重缓急对中断源进行优先级排队。

▲CPU先响应优先级高的中断请求。高优先级的中断请求可中断低优先级的中断服务。

▲优先级排队的方法:

  • 软件查询法

image-20221011195826886

​ - 优点:实现简单,节省硬件。

​ - 缺点:

中断源较多时,查询程序较长,由查询转入相应的中断服务程序入口需要的时间较长。

查询的先后顺序决定了中断的优先级顺序:先被查询的中断,优先级最高。

  • 硬件菊花链排队法

在每个外设的接口上接一个逻辑电路,这些电路构成一个链来实现中断应答信号的控制,称为菊花链。

image-20221011195947052

中断请求:设备A、B、C通过接口发出中断请求:1有请求,0无请求。只要有一个设备发出请求,则 INTR = 1。

中断响应:若CPU允许中断,则发INTA中断响应信号。该信号先送给外设A的菊花链电路。

​ 若A没有请求,则它输出的INTA仍为0,继续往下传。

​ 若A有中断请求,则经过或门时,由于其中断请求为1,故输出的INTA为1,使得后继的中断得不到响应。

特点:越靠近CPU****的外设,优先级越高。

  • 可编程中断控制器排队法

​ 早期的PC多采用软件查询或菊花链法。

​ 目前的PC一般采用专用的可编程控制器芯片来完成中断优先级的排队管理,如8259A。

3、 中断嵌套

▲CPU正在处理某个中断的过程中,若出现了更高级的中断请求,则CPU停止执行级别低的ISR,而转去处理级别更高的中断。等高级别的中断处理完后,再返回原来的低级中断继续执行,依次类推,直到返回主程序。这种方式称为多重中断中断嵌套

image-20221011200107658

5.2 8086/8088 微机中的系统

5.2.1 中断的类型

​ 8086/8088用8****位二进制数表示一个中断类型号,可区分256个中断源。

​ 8086/8088中断系统的结构

image-20221011200226767

  • 外部中断:由CPU外的硬件产生,又称硬件中断**。有以下2种:

    NMI(不可屏蔽中断)

▲↑触发,不受IF标志位控制。只要有NMI ↑,CPU在当前指令结束后,立刻响应该中断。

▲中断类型号为2,CPU无需发中断应答即可立即执行2号中断的ISR。

▲外部中断中,NMI的优先级最高,用于电源掉电、时钟错误等紧急情况,一般用户不能使用。

INTR(可屏蔽中断、来源于外设)

▲高电平触发,必须保持到当前指令结束。

IF标志位控制。STI:允许中断;CLI:禁止中断。

中断类型号为 08~0FH 070H~077H。当中断允许时,CPU发出中断应答信号/INTA,并从8259A获得中断源的中断类型码。

  • 内部中断: 由CPU执行指令产生的中断,又称软件中断

除法错

▲当除数为0,或对带符号数进行除法运算时所得结果超出规定的范围,则CPU自动产生该中断。

▲中断类型号为0。

单步中断

调试程序时用。CPU每执行一条指令,就进入一次中断。功能:显示出CPU内部各寄存器的内容。

▲受TF标志位控制。TF=1时,CPU自动产生单步中断。

▲中断类型号为1。

断点中断 INT 3

▲单字节中断指令,类型号为3。

▲调试时可在程序关键处设置断点。当程序执行到该指令处,转去执行一个断点中断。功能:显示CPU内部各寄存器的内容,并给出一些提示信息。

溢出中断 INTO

▲单字节中断指令。类型号为4。

▲该指令常跟在带符号数运算指令之后。若标志寄存器的OF=1,则执行溢出中断,其中断服务程序给出出错信息

用户定义的软件中断

▲双字节中断指令INT n,由用户定义,类型号为n。

不可被屏蔽。CPU不发响应信号,中断控制器不提供中断类型号

  • 内、外中断的优先级次序

    ▲8086/8088系统中,除单步中断外,所有内部中断的优先级均高于外部中断

    ▲除单步中断外,所有内部中断都不能被屏蔽。

    image-20221011201133052

5.2.2 中断向量表

8086/8088系统支持256个中断源,各个中断源用不同的中断类型号标识,即:0~255。

每个中断源都有相应的ISR,每个ISR都有不同的入口地址(又称中断向量)

每个入口地址由4个字节标识:

▲低2个字节:存放中断入口的偏移地址(IP)

▲高2个字节:存放中断入口的段基址(CS)

系统各个中断入口地址的集合形成中断向量表。共占1KB空间,地址范围 0~3FFH(DS=0)。

image-20221011201233164
  • 由于0~255号中断的入口地址依次连续排列,故:已知某中断的类型号为n,则其对应的 ISR入口地址在中断向量表中的存储位置为4n。

  • 依次从4n处取出4个字节的内容,低2个字节送入偏移地址IP,高2个字节送入段地址CS,即:

​ ▲(IP) ← [4n+1, 4n]。

​ ▲(CS) ← [4n+3, 4n+2] 。

  • 获得了中断的入口地址,即可转入相应的 ISR 执行中断处理过程。

【例5-1】已知类型号为15H的中断,其 ISR 存放在内存的5678H: 0100H ~ 5678H: 0123H单元。画出该中断的中断向量在中断向量表中的位置和内容。

image-20221011201309336

5.2.3中断向量的设置与修改

​ 在使用中断前,我们需要将中断向量地址位写入中断向量表。在写之前,要关闭中断,避免在设置或修改过程中被中断。

设置中断向量的2种方法:

​ ▲直接写入法

​ ▲利用DOS功能调用

① 直接写入法

直接使用MOV****指令把中断向量写入向量表对应的单元。

方法:

  • 设中断类型号为n,对应的中断服务程序名为P1,则:

    将P1程序的偏移地址(OFFSET P1)放到内存0数据段的[4n+1] 和 [4n]单元中;

​ 将其段地址(SEG P1)放到 [4n+3] 和 [4n+2]单元中。

1
2
3
4
5
6
7
8
9
CLI						 ;关中断
MOV AX,0
MOV DS,AX ;中断向量表段基址为0
MOV AX,OFFSET P1 ;中断类型号为n,P1程序
MOV BX,n*4
MOV DS:[BX],AX ;偏移地址放入4n,4n+1单元
MOV AX,SEG P1
MOV DS:[BX+2],AX ;段地址写入4n+2,4n+3单元
STI ;开中断

【例5-2】某外设的中断服务程序名为IRQ3_ISR,中断类型号为5。请使用直接写入法设置其中断向量。

1
2
3
4
5
6
7
8
CLI			     	 ;关中断
MOV AX,0
MOV DS,AX ;中断向量表段基址为0
MOV AX,OFFSET IRQ3_ISR
MOV DS:[0014H],AX ;MOV WORD PTR[BX], AX
MOV AX,SEG IRQ3_ISR
MOV DS: [0016H], AX
STI ;开中断

DOS 功能调用写入法

使用INT 21H中断的25H号功能调用,设置中断向量。

功能号:AH = 25H

入口参数:

​ DS = 中断服务程序入口地址的段基址

​ DX = 中断服务程序入口地址的偏移量

​ AL = 中断类型号

【例5-3】某外设的中断服务程序名为P1,中断类型号为5。请使用DOS功能调用法设置其中断向量。

1
2
3
4
5
6
7
8
9
PUSH  DS		          ;原 DS 入栈
MOV AX,SEG P1 ;段基址存入DS中
MOV DS,AX
MOV AX,OFFSET P1
MOV DX,AX ;偏移地址存入DX中
MOV AL,5 ;中断类型号在AL中
MOV AH,25H ;DOS调用功能号
INT 21H
POP DS ;DS出栈

中断向量的修改

中断类型号不变,但是其指向的中断服务程序(入口地址)改变,即中断向量改变。

修改中断向量的步骤:

1.利用35H号功能,获取原中断向量,并保存。

2.利用25H号功能,设置新的中断向量

3.新的中断服务程序服务完毕,利用25H号功能恢复原中断向量

35H号功能——读取中断向量

入口参数:AH = 35H,AL = 中断号

出口参数:ES = 中断服务程序入口地址的段基址

      BX = 中断服务程序入口地址的偏移地址

25H号功能——设置新的中断向量

入口参数:AH = 25H,AL = 中断号

DS = 中断服务程序入口地址的段基址

   DX = 中断服务程序入口地址的偏移地址

出口参数:无

【例5-4】修改类型号为n的中断向量,使得新中断服务程序入口地址的段基址为SEG_INTR,偏移地址为OFFSET_INTR。对应的程序段为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
MOV	AH,35H             ;获取原中断向量
MOV AL, n
INT 21H ;保存在 ES: BX中
MOV OLD_OFF,BX ;保存原中断向量的偏移量
MOV BX,ES
MOV OLD_SEG,BX ;保存原中断向量的段基址
--------------------------------------------------------------------------------------------------------------------------------
MOV AH,25H ;设置新的中断向量
MOV AL, n
MOV DX,SEG_INTR
MOV DS,DX ;DS = 段基址
MOV DX,OFFSET_INTR ;DX = 偏移地址
INT 21H
--------------------------------------------------------------------------------------------------------------------------------
MOV AH,25H ;恢复原中断向量
MOV AL, n
MOV DX,OLD_SEG
MOV DS,DX ;DS = 段基址
MOV DX,OLD_OFF ;DX = 偏移地址
INT 21H

5.3 8259A可编程中断控制器

lIntel 8259A是一种可编程中断控制器,可协助CPU进行中断管理。其功能:

▲接收和扩充外设的中断请求

▲屏蔽或打开中断

▲中断优先级排队

▲提供中断类型号

▲接受CPU命令或返回当前工作状态

一片8259A可直接管理8级中断,通过级联可扩展至64级中断。

通过对8259A进行编程,可设置多种工作方式,以满足不同中断系统的需要。

image-20221013232408194

  • 数据总线缓冲器:

​ ▲8位的双向三态缓冲器,连接8259A与系统数据总线。

​ ▲用于在CPU与8259A间传送数据、命令和状态信息。

  • 读/写信号线

​ ▲接收CPU命令,完成对8259A内部端口的读写操作。

​ ▲思考:A0为什么可以一个接口来分辨3个寄存器

  • 级联/缓冲器

​ ▲CAS0 ~ CAS2 用于多块8259A的级联。

​ ▲思考:如何区分主从片?

用SP输入来判断主从片,主片输入高电平,从片输入低电平

  • 中断屏蔽寄存器IMR (interrupt mask register)

​ ▲8位寄存器,第 i 位为1,表示屏蔽 IRi 的请求。

​ ▲其值可通过软件设置或改变

​ ▲思考:IRR可软件改变吗?可以

  • 中断请求寄存器 IR7~IR0 IRR(interrupt request register)

​ ▲8位寄存器,通过引脚 IR0 ~ IR7 与8个中断源相连。

​ ▲若IRi = 1,表明对应的中断源有中断请求,则 IRR寄存器相应的第 i 位置1 。

​ ▲思考:谁来置位?何时标志位清除?

  • 服务状态寄存器ISR(interrupt service register)

​ ▲8位,用来记录CPU当前正在为哪些中断源服务。

​ ▲当CPU响应IRi 请求时,ISR中相应的位置1。是否可能有多个1?为什么?

​ ▲当某个中断已被处理,ISR相应的位复位由谁来复位?

  • 优先权分辨器 PR (priority register)

​ ▲对已进入IRR且未被IMR屏蔽的中断请求判定优先级,确定优先级最高的中断,向CPU发送中断请求信号INT。

​ ▲若8259A正在为某中断服务时,又出现了新的中断请求,则PR判断新的中断请求优先级是否更高。若是,则进入中断嵌套

▲ICW:初始化命令字(Initialization Command Word)

▲OCW:操作命令字(Operation Command Word)

引脚介绍

image-20221013233229037

D7~D0:双向三态数据线,在8259A与CPU间传送数据、命令和状态信息。

/WR/RD/CS:写、读、片选信号。

A0:选择8259A内部寄存器。A0=0选偶端口,A0=1选奇端口

INT:向CPU发的中断请求信号,高有效。

/INTA:CPU返回的中断响应信号,为2个负脉冲。

IR7~IR0:中断请求信号,高电平或上升沿有效。

/SP//EN:主从片设定/允许缓冲信号,双向双功能。

​ ▲缓冲方式下:输出,EN****信号控制缓冲器

​ ▲非缓冲方式下:输入,表示8259A是主片(SP = 1)还是从片(SP = 0) 。

CAS0/CAS1/CAS2:级联信号线,双向。

​ ▲主片的CAS2~0为输出。

​ ▲从片的 CAS2~0为输入

1. 8259A 的工作过程

单片8259A工作时,每次中断处理过程如下:

①当 IR7 ~ IR0 上有中断请求,则 IRR 相应的位置1。

②对于已进入IRR且未被IMR屏蔽的中断请求,PR电路进行优先级判定,得到最高级的中断请求。

③控制逻辑接收中断请求,向CPU发 INT 信号。

④若CPU允许中断,则在当前指令结束后连续发出2个INTA,进行中断响应。每个INTA持续2个时钟周期。

⑤CPU发第一个 INTA 时,有效总线锁定信号 LOCK,防止其它处理器或DMA控制器占用总线。

8259A收到第一个INTA后,将优先级最高的中断对应的ISR位置1,同时使IRR相应的位清0。

image-20221014094817167

⑥CPU发第二个 INTA 时,撤销 LOCK,使地址允许信号 ALE无效,允许数据线工作。

8259A收到第二个负脉冲后,将相应中断的类型号送到数据线上。CPU读取中断类型号,查找中断向量表得到中断向量,转而进入中断服务程序。

⑦若系统为自动结束中断方式 (AEOI),则8259A在第2个脉冲结束时,自动将ISR的相应位复位;

若为非自动结束中断方式 (EOI),则ISR相应位的“1”一直保持,直到CPU发EOI (中断结束) 命令时才将其复位。

2. 8259A 的级联方式

▲单片8259A最多可管理8级中断。当中断源多于8个时,需将多个8259A芯片级联构成主从模式

▲系统最多支持8个8259A芯片级联,即:最多可支持64个中断源。

▲每个从片的IR7 ~ IR0可直接与8个中断源相连,经过优先级判优后主片发送INT信号。主片对所有从片发来的INT进行判优后,最终向CPU发INT信号。

image-20221014095208738

▲SP/EN用于区分主从片。

高为主片,低为从片。

▲主、从片通过CAS2CAS0 互连。主片的CAS2CAS0为输出,从片的CAS2~CAS0 为输入。

​ ØCPU发出第一个****INTA时,主片使ISR相应的位置1,使IRR的相应位清0;并通过CAS2CAS0 输出一组从片的编码 ID2ID0。

​ Ø从片收到该编码后,与自身的编码(存放在ICW3的D2~D0 中)进行比较。若相同,则在第二个****INTA信号将从片的中断类型号送到数据总线。

4. 中断屏蔽方式

普通屏蔽方式:屏蔽同级和低级中断

▲IMRi=1,则禁止相应的中断请求;为0,则允许。

▲这种方式下,由于优先权判别器PR的作用(ISR的状态),只有级别高的中断源才允许中断。

▲若CPU不希望某些中断源申请中断,或在处理某中断时不希望比该中断级别低的中断源申请中断,可采用该方法。

特殊屏蔽方式

▲在处理某中断时,若想开放级别较低的中断请求,则:(1) 将IMR中本级中断的相应位置1,屏蔽本级中断,为开放级别较低的中断提供可能。(2) 将本级中断 ISR 的相应位复位,才能真正开放级别较低的中断。

与普通屏蔽的区别:特殊屏蔽方式除了在IMR中屏蔽本级中断源外,还需使当前ISR的相应位复位。

5. 中断优先权管理方式

① 固定优先级**–**IR0 优先级最高,IR7 最低。

② 循环优先级**–**某中断被服务后,其优先权自动降为最低,而相邻中断源的优先级升为最高。

n优先权自动循环方式

​ Ø初始时,IR0 优先级最高,IR7 优先级最低。

n优先权特殊循环方式

​ Ø用户编程来指定初始时哪个中断源的优先级最低。

​ Ø例:初始时规定 IR5 最低,则优先级顺序为:IR6 > IR7 > IR0 > … > IR4 > IR5。

6. 中断嵌套方式

普通全嵌套方式

​ Ø简称全嵌套方式,是最基本、最常用的方式。

​ Ø某中断被响应时,只有更高级的中断请求才会响应。

特殊全嵌套方式

​ Ø用于级联场合。可响应高级别同级别中断。

​ Ø级联时从片的 INT端连接主片 IRi 端。从片上不同级别的中断请求,主片视之为同一级别。普通全嵌套无法响应第二次高级别中断。而特殊全嵌套方式可正常响应。

  • 单片8259A时,通常采用普通全嵌套方式。

  • 多片级联时,从片采用普通全嵌套方式,而主片必须采用特殊全嵌套

7. 中断结束方式

▲当某个中断请求得到响应时,其ISRi置1。当其中断服务结束时,其ISRi必须清0。

▲中断结束方式是指使ISR相应位复位的方式

▲8259A有2种中断结束方式

①自动结束方式(AEOI)

​ ØISRi的复位由8259A硬件自动完成。

​ Ø当CPU响应某中断时,第二个INTA信号自动将ISRi复位。(第二个INTA信号的上升沿或者下降沿时,复位)

​ Ø该方式只适用于单片8259A、无中断嵌套的场合。

②非自动结束方式(EOI)

该方式下,由CPU发EOI命令来使ISR的相应位复位。

  • 普通中断结束方式

​ ØCPU向8259A发送EOI命令,使当前 ISR 中级别最高的位复位。(仅级别最高复位)

  • 特殊中断结束方式

​ ØCPU向8259A发送EOI命令,该命令字指定了要结束哪一级中断源,从而使ISR相应的位复位。(指定复位,最为准确)

8. 连接系统总线的方式

缓冲方式

多片8259A级联时,8259A 通过总线驱动器与数据总线相连。

▲此时8259A的 SP/EN 端输出一个低电平 ( EN = 0) 作为总线驱动器的启动信号。即:SP/EN 信号与总线驱动器的使能端相连。

image-20221018151056006

从片与主片的区分在ICW4中描述

非缓冲方式

​ Ø当系统中只有单片或少数几片 8259A 时,8259A 可直接与数据总线相连。此时,8259A的SP/EN端作为输入信号

​ Ø单片8259A时,SP = 1。多片8259A 级联时,主片的 SP = 1,从片的 SP = 0。

8259A编程

CPU向8259A发送的命令字分为以下2种:

  • 初始化命令字 ICW

​ ▲共有ICW1 ~ ICW4 4个,在系统初始化时设置。

​ ▲一旦设定后,在系统工作过程中一般不再改变

  • 操作命令字 OCW

​ ▲共有OCW1~OCW3 3个,用来对中断处理过程进行动态控制,如:中断屏蔽、中断结束、优先权设定等。

​ ▲可多次设置和改变

image-20221018151542648

8259A通过一根地址线A0就可以通过顺序法特征位法判断7个寄存器,解决端口冲突。

1
2
3
4
5
6
7
8
9
ICW1: 20H	  D4 = 1
ICW2: 21H
ICW3: 21H
ICW4: 21H

OCW1:21H
OCW2:20H D3D4 = 00
OCW3:20H D3D4 = 10

ICW1、ICW2、ICW3、ICW4是通过顺序法来解决端口冲突的。

因为ICW是初始化后就不可以再修改,因此设定在写ICW1的时候默认接下来写的就是ICW2、ICW3、ICW4

作为主片 ICW1的端口为20H ICW2、ICW3、ICW4的端口为21H

作为从片 ICW1的端口为0A0H ICW2、ICW3、ICW4的端口为0A1H

OCW1的端口设定为21H OCW2、OCW3与ICW1通过特征位来判断各自的端口、ICW1的D4端口为1 OCW2的特征位D3D4 = 00 OCW3的特征位D3D4 = 10

(一)初始化命令字 ICW

1. ICW1:设置触发方式、是否级联和需ICW4等。

image-20221018152538833

ICW1默认初始化为11H(0001 0001)即 D3=0,D2=0,D=0,D=1

2. ICW2:设置类型码,紧随ICW1 之后。

image-20221018153205772

  • 中断类型号 = ICW2高5位 + 低3位 (IRi 的编码) 。

  • CPU发第2个INTA响应时,8259A 将ICW2的内容(中断类型号)送到数据总线。

​ 主片的默认端口地址为080FH 从片的默认地址为7077H

​ 主片高5位默认 00001 从片高5位默认为01110

​ 主片与从片低3位为第i位的二进制

3. ICW3:设置级联方式。

  • 仅当级联模式下(即 ICW1 的 SNGL = 0 时)才需设置ICW3。这时需分别对主片从片进行设置。

  • 主片ICW3:说明主片IR7 ~ IR0 的哪些引脚上连有从片。

image-20221018153905747

  • 从片ICW3: ID2~ID0编码值说明该从片的INT****信号连接至主片 IR7 ~ IR0 的哪个引脚。

image-20221018154332352

4. ICW4:设置缓冲方式、中断结束方式等。

当 ICW1 的 D0 =1时,需设置ICW4。

image-20221018154721722

主片默认D4=1 D3=1

5.4 8259A的应用举例

5.5 PC机中的中断应用

第六章 并行接口

6.1 并行接口概念

传送方式分为串行传送与并行传送,并行传送以字长为单位进行传送,一次传送多位 ,需要多根数据线;串行传送以一根数据线一位一位传送,速度慢。

并行传送方式又分为:基本的并行接口与可编程并行接口

6.2 8255A可编程并行接口

image-20221107172458656

8255A芯片分为3个端口,端口A输入/输出都有锁存功能,而端口B与端口C只有输出有锁存功能,而输入没有。

C口较为特殊,既可以作为一个独立的8位端口,也可以将高4位作为端口A的拓展位,将低4位作为端口B的拓展位。不仅可以作为数据的输入输出端口,也可以通过控制字的方式,配合端口A与端口B的工作。通过指定位置位/复位

8255A的左侧与CPU相连:

  • lD7 ~ D0:双向数据线,用于CPU与8255A间传送数据、状态和控制信息。

  • A1A0:用于选择端口地址。

​ A1A0 = 00:选择端口A

​ A1A0 = 01:选择端口B

​ A1A0 = 10:选择端口C

​ A1A0 = 11:选择控制端口

  • CS、RD、WR:片选、读、写信号,均为低有效。

  • lRESET:复位信号,高有效。RESET=1时:

​ ▲清除所有内部寄存器的内容。

​ ▲将A、B、C三个端口均设置为方式****0输入。三个端口对外的信号线均为高阻态。

右侧与外设向连:

  • PA7 ~ PA0、PB7 ~ PB0、 PB7 ~ PB0:三态双向数据线,直接与外设相连,输入输出由工作方式决定。

​ 端口地址分配

CS RD WR A1 A0 端口操作 地址
0 1 0 0 0 数据总线 → 端口A 60H
0 1 0 0 1 数据总线 → 端口B 61H
0 1 0 1 0 数据总线 → 端口C 62H
0 1 0 1 1 数据总线 → 控制寄存器 63H
0 0 1 0 0 端口A → 数据总线 60H
0 0 1 0 1 端口B → 数据总线 61H
0 0 1 1 0 端口C → 数据总线 62H
0 0 1 1 1 非法状态
0 1 1 × × 数据总线为高阻态
1 × × × × 数据总线为高阻态

6.2.2 8255A的编程

  • 8255A有2个控制字:方式选择控制字C**口置位/*复位控制字,它们均写入*同一个**控制端口。用特征位D7区分:

​ ▲方式字 (D**7=1**):用于设置各端口的工作方式。

​ ▲C口置位/复位 (D**7=0**):对C口的任意一位进行置位或复位,而不影响其它位的状态。

对ABC口的方式字控制初始化

image-20221107174214344

对C口置位/复位控制字设置

image-20221107174309599

TIP:设置控制字的端口永远为控制口,无论是对ABC口设置还是对C口的置位/复位操作

有两种对C口进行修改的操作:

①.lC口置位/复位控制字法:对控制口(A1A0=11)操作。特点:仅改变PCi 端的输出状态,PC口其它位不受影响

②.l向端口C写数据法:对C数据口(A1A0=10)操作。将影响C口所有位的状态。

6.3 8255A的工作方式

方式0——基本输入/输出

  • A口、B口、C口的高4位和低4位均可独立地被设置为输入或输出。

  • 8255A与CPU(8255A与外设之间???)之间没有固定的应答联络信号,可用于无条件传送查询方式传送。

  • 单向I/O:一次初始化只能指定端口作为输入或作为输出,不能指定其同时既作为输入又作为输出

方式1——选通输入/输出(应答型)

  • A、B口为数据口,C口的一些引脚作为A、B口的联络控制信号,有固定的搭配时序关系

  • 可采用中断方式或程序查询方式传送数据。

  • 单向I/O:一次初始化只能设定在一个方向上传送。

​ ①方式1输入

image-20221107175748892
  • STB:输入选通信号。有效时,可将数据从外设输入到A口或B口的锁存器中。

  • IBF:输入缓冲器满信号,是对STB的响应。有效时, 对****CPU表示8255端口有数据,通知CPU进行读取。 对外设表示CPU还未取走数据,阻止外设发新数据。

  • INTE:中断允许信号。INTE=1时允许8255向CPU发中断请求。PC****4 =1允许A口中断;PC****2 =1允许B口中断。该信号通过C口置位/复位来实现。

  • INTR:中断请求信号。INTR=1时,CPU可从端口读取数据。读取后INTR自动清除。

QQ图片20221107181308

对于端口A来说,外设发送信息给8255A,将信息写入INBFF中,若INBUFF满了,则发送IBF(input buffer full)至PC5,同时,PC5端连接外设,当外设收到IBF信号时,就了解了INBFF已经满了,停止再发送信息;同时,IBF也被传送到了CPU中,对于CPU来说,意味着INBFF满了,要及时去接收信息。

同时,/STB信号将激活中断使能,当中断使能为低电平,IBF为高电平时,即生成中断信号交付给CPU,让CPU通过中断的方式接收8255A中INBFF的信号

image-20221107182705301

【例6-9】按下开关时,从A口输入开关状态在B口上显示,重复100次。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
主程序设计:
Start: CLI ; 关中断
MOV AL, 10110000B ; 设置8255A的工作方式控制字
OUT 63H, AL
MOV AL, 00001001B ; PC4置1, 允许A端口中断
OUT 63H, AL
MOV AL, 00011011B ; 设置ICW1: 单片, 电平触发, ICW4
OUT 20H, AL
MOV AL, 08H ; 设置ICW2: 中断类型号
OUT 21H, AL
MOV AL, 00000001B ; 设置ICW4: EOI, 普通全嵌套
OUT 21H, AL
MOV AX,0 ;中断向量表段地址
MOV DS,AX
MOV AX,OFFSET IS8255 ;设置中断向量
MOV [0020H],AX
MOV AX,SEG IS8255
MOV [0022H],AX
IN AL,21H ;读8259A屏蔽字
AND AL,0FEH ;允许IR0中断
OUT 21H,AL
MOV BX,100 ;设置计数初值
STI
ROTT:CMP BX,0 ;监测是否达到100次
JNZ ROTT ;未达到,则等待中断
IN AL,21H ;恢复屏蔽字,禁止IR0中断
OR AL,01H
OUT 21H,AL
MOV AH,4CH ;返回DOS系统
INT 21H
中断服务程序:
IS8255:IN AL,60H ;读取端口A的开关量
OUT 61H,AL ;输出给端口B显示
DEC BX ;计数值减1
MOV AL,20H ;发中断结束命令
OUT 20H,AL
IRET ;中断返回

方式1输出

image-20221107182809977
  • OBF:输出缓冲器满。有效时,表CPU已把数据输出到8255。 对外设通知外设取走数据 对****CPU:阻止CPU发新数据。

  • ACK:外设的应答信号。外设取走数据后,向8255发应答信号,并使OBF无效,此时CPU可发新数据。

  • INTE:中断允许信号。为1时允许8255向CPU发中断请求。PC****6 =1允许A口中断;PC****2 =1允许B口中断。该信号通过C口置位/复位来实现。

  • INTR:中断请求信号。为1时请求CPU向8255发数据。

1667817784035

CPU对外设输出时,将date写到OutBff,当OutBff满时,发送/OBF信号。对于外设来说,/OBF信号告知外设尽快取数据;对于CPU外设来说,/OBF信号告知CPU停止向外输出数据。外设接收OutBFF中的数据后,发送/ACK告知8255A OutBff中的数据已被取完。CPU时时监控/ACK信号,收到/ACK信号时,CPU开始向8255A中的OutBff写数据。

ACK信号又是INTE的使能信号,意味着8255A收到ACK信号的同时,就有中断信号发送往CPU产生中断。

第七章 串行通信接口

7.1 串口通信基本概念

  • 并行传送方式
    ▲ 以字长为单位进行传送,用多根线一次传送多位数据。
    ▲ 特点:传送速度快。但使用信号线多, 成本高;且信号线间电容会引起 串扰,不适合远距离传送。
    ▲ 一般用于外设与微机间 近距离、大量和快速的传输。

  • 串行传送方式
    ▲ 通过 一根线一位一位顺序传输数据。
    ▲ 缺点:速度慢。但传输线少,成本低。
    ▲ 适合于 远距离、低速率的数据传输。

串行通信的数据传送方式分为以下三种:单工方式、半双工方式、全双工方式。

  • 单工方式
    只允许在一个方向上传送数据。

  • image-20221115232716315
  • 半双工方式
    双方均具备发送、接收能力,但同一时刻只能进行一个方向的传送。

image-20221115232727220
  • 全双工方式
    收发双方可同时进行双向的数据传送。
image-20221115232736414

通信速率的单位有两种①.比特率,②.波特率

  • 比特率:每秒传送的 二进制位数,单位:bit/s。
  • 波特率:每秒传送的 N进制位数,单位:bout/s。
  • 两者的关系: 比特率=波特率× ×log 2 N。

收/ 发时钟TxClk/RxCLK 与波特率因子factor的关系

  • 串行通信时,收发双方用CLK来 同步。收/发时钟决定了通信线路上的数据传输速率。
  • 发送端在TxClk↓ ↓使数据送入 移位寄存器串行输出。接收端在RxClk↑ ↑将传输线上的数据逐位打入移位寄存器。
  • 为提高抗干扰能力,可用多个时钟来调制一位二进制数。调制一位二进制数的时钟个数称为波特因子(Factor)。
  • 收/发时钟频率与波特率的关系:TxClk/RxClk = Factor×Baud.
  • Factor一般取1, 16, 32 或 64。异步通信时常取16;同步通信则必须1。

信息的调制与解调

  • 原因:数字信号包含很多直流和低频成分,直接传输时会严重 衰减,从而在接收端产生 严重畸变和 失真。
  • 解决办法:发送方使用 调制器 (Modulator),把要传送的数字信号转换为适合在线路上传输的模拟信号。接收方则使用 解调器(Demodulator)将模拟信号还原为数字信号。
  • 双工和半双工通信设备,既要发送数据又要接收数据,故可将调制器和解调器做在一起,形成 调制解调器(Modem)。

一般来说使用频移键控(FSK)来作为调制解调器。

工作原理:Ø 当信号为 1 时,开关1 闭合,开关 2 断开,经放大器输出频率1的信号;
Ø 当信号为 0 时,开关 1 断开,开关 2 闭合,经放大器输出频率 2 的信号。

image-20221115233253880

电子开关控制方法——继电器

用途:能够以 较小电流控制大电流的导通和切断,相当于一种“自动开关”,在电路中起自动调节、安全保护、转换电路等作用。分类:普通、干簧管式继电器

image-20221115233517025image-20221115233526780image-20221115233558526

​ 普通继电器 干簧继电器 触点种类

7.2 串口通信协议

  • 通信协议:为使通信能顺利进行,数据收发双方必须共同遵守的 通信规程,称为通信协议。
  • 通信协议的基本内容:
    ▲ 波特率:双方约定的数据收/发速率。
    ▲ 数据格式:双方约定的帧格式及控制信息的定义等。
    ▲ 帧同步:接收方获知一批数据开始和结束的方法。
    ▲ 位同步:接收方从数据流中正确采样到每位数据的方法。
    ▲ 差错校验方式:接收方判断收到数据正确性的方法。
  • 串行通信协议的分类:
    ▲ 异步串行通信协议
    ▲ 同步串行通信协议

7.2.1 异步串行通信协议

  • 特点 特点 字符间异步,字符内各位之间同步
    ▲ 以字符为单位进行信息传送。
    ▲ 字符与字符之间没有严格的定时要求,其间隙任意。
    ▲ 一旦开始传输一个字符,收发双方必须按照约定的速率,在时钟的作用下,一位一位地进行同步传输。
  • 帧格式
    ▲ 数据格式包括: 同步信息(数据的开始与结束)、 数据信息和 校验信息。

image-20221115233927419

▲ 采用 极性相反的起始位和停止位提供准确的时间基准。
▲ 一次传送1个字符 个字符。
▲ 具有信息校验, 可靠性高。
▲ 传输速率较慢, 效率低(max = ?)。 一般用于数据量较小、传输率较低的场合。

奇偶校验位指的是数据位+奇偶校验位中高电位的个数,若为奇数则为1,若为偶数则为0

image-20221115234047977

image-20221115234100360

7.2.2 同步串行通信协议

  • 特点 字符与字符间同步,字符内各位之间也同步
    ▲ 不使用起始位和停止位来标识字符的开始和结束,而是用一串特定的 二进制序列( 同步字符),来通知接收方串行数据的第一位何时到达。
    ▲ 传输效率高,速度快,但其技术复杂, 硬件开销大。一般用于高速数据传输场合。
  • 分类
    ▲ 面向字符的同步通信:一帧数据由若干个字符组成。
    ▲ 面向比特的同步通信:一帧数据由任意位 bit 组成,主要用于二进制的传输。

image-20221115234154788

image-20221115234203614

image-20221115234217705

典型的 面向字符的同步通信协议 的同步通信协议——IBM BSC
▲ BSC:Binary Synchronous Communication。
▲ 一帧由 若干字符组成,比异步起止式传输效率高。
▲ 规定了10个通信控制字符 个通信控制字符,作为数据块的开始和结束标志以及整个传输过程的控制信息,增强了通信控制能力和校验功能。
▲ 帧格式

image-20221115234240073

② 面向 面向 比特 比特 的同步通信

  • 一帧数据可由任意位组成。
  • 靠约定的 位组合模式来标志

SDLC/HDLC协议的帧格式

image-20221115234345246

▲ 标志域:开始和结束标志,提供每帧信息的边界。
▲ 地址域 (A: Address):通信的目标地址。
▲ 控制域 (C: Control):规定了若干命令。
▲ 信息域 (I: Information):包含要传送的数据。数据域为0时表示该帧为控制命令。
▲ 帧校验域 帧校验域 (FC: Frame Check):采用16位CRC校验。

SDLC/HDLC 实际应用时的2个技术问题:

▲ “ “0” ”位插入 位插入/删除技术 删除技术:信息域中可能存在和标志字节01111110相同的字符,为了区别,发送端在发送除标志字节外的信息时,当遇到连续5个“1”时,就自动插入一个“0”。接收端若连续接收到5个“1”时,就自动删除其后的一个“0”,恢复信息。
▲ SDLC/HDLC异常结束 异常结束:发送过程若出现错误,用异常结束字符使本帧作废。在HDLC规程中,失效字符为7个连续的“ “1 ”,在SDLC中为8个连续的 个连续的“ “1” ”。异常结束字符中不使用“0”位插入/删除技术。

7.3 串口通信接口标准

  • 数据终端设备DTE(Data Terminal Equipment):通常指计算机或I/O设备。代表 数据源和 目的地。
image-20221115234500938
  • 数据通信设备DCE(Data Communication Equipment):又称数据装置(Data Set),通常为Modem。 作用: 使数据符合线路要求

RS-232C标准规定了22 根控制信号线,实际常常只用到3~9根,多采用9 针或25 针的D型头来连接。

image-20221115234529790

第八章 D/A与A/D转换器

概念:

A/D:模拟量→数字量 (Analog → Digital)。

​ 实现A/D转换的电路称为A/D 转换器,简称ADC。

D/A:数字量→模拟量 (Digital → Analog)。
实现D/A转换的电路称为D/A 转换器,简称DAC。

image-20221128180837725

8.1 D/A转换

8.1.1 D/A转换工作原理

​ R-2R T 型电阻网络D/A转换电路

image-20221128181253415

image-20221128181300127

从左侧的接地开启看起,每个分支都是1/(1/2R+1/2R)=R 且左侧电阻与上侧电阻相同=2R 所以电流相同

∴共有n条分支,各分支的电流大小为:

image-20221128181445486

输入的数字量 输入的数字量 D i 控制模拟开关 控制模拟开关 S i

当Di=0时,开关 S i 接地,支电流 I i 流向地;当D i = 1时,开关 S i 接运放,支电流 I i 流向运放。

输出电流的大小为各支路流入的电流之和

image-20221128181556766

D/A的原理:

▲ 输出电压 V 0 = -I×R f = -D× ×R f, 故模拟电压输出V 0 与数字量输入D之间成正比关系。
▲ 常将 - 设为△,它表示最低位数字量变化时对应的模拟输出增量( 分辨力)。
▲ 通过调整 R f 和V REF ,可调整D/A的输出范围和满刻度。

image-20221128181652185

D/A转换器的技术参数

(1)分辨率

▲ 表示最低位数字量变化时对应的模拟输出增量。它代表 分辨力。
▲ 分辨率:常用相对百分值表示,指△与最大满量程输出电压的比值。即:
image-20221128181759303
▲ 分辨率只与数字量位数 数字量位数n有关,n越大,分辨率越高。分辨率越高,转换时对输入量的 微小变化反应越灵敏。
▲ 分辨率常用数字量位数表示,有8位、12位等。

(2)转换精度

▲ 指 实际输出值与 理论计算值之差。用于衡量D/A转换的精确程度。
▲ 转换精度取决于D/A转换器 各部件制作的 误差。

image-20221128181830589

(3)建立时间

▲ 指从数字信号输入转换器开始,到输出端达到稳定值所需的时间。它决定了 转换速度。
▲ 目前10~12位单片集成D/A转换器的建立时间多在1μs之内 之内。按其建立时间可分为:

​ 低速:>100 μs 中速:1~100 μs 高速:50ns ~ 1μs 超高速:< 50ns

(4)温度灵敏度
▲ 指数字输入量值不变的情况下,模拟输出信号 随温度的变化的情况。它表明D/A转换器 受温度变化影响的特性。
▲ 一般D/A转换器的温度灵敏度为±50ppm/C。ppm为百万分之一。

8.1.2 D/A转换器接口电路

(1)D/A转换器的分类

​ ▲ 按 分辨率分:8位、10位、12位、14位、16位、18位、20位等。
​ ▲ 按 建立时间分:低速、中速、高速和超高速型(>100μs 、1100μs、50ns1μs、<50 ns)。
​ ▲ 内部是否有数据输入寄存器分:带数据输入寄存器、不带数据输入寄存器。
​ ▲ 按与微机系统的连接关系分:位数 小于或等于微机系统数据总线、位数 大于微机系统数据总线。

(2)D/A 转换器与CPU的数据缓冲 的数据缓冲

▲ DAC与CPU相连时,可看做一个外设,需连地址、数据和控制总线。
▲ 数据锁存问题:CPU向DAC输出数据时,数据在总线上停留的时间很短,而DAC要求在转换期间数据输入保持稳定。因此,需要 数据锁存器来 保持CPU输出给 DAC的数据,直至转换结束。
▲ 对于内部自带数据锁存器的DAC ,CPU可直接与其相连;对于无数据锁存器的DAC ,须在DAC 外部另加数据锁存器。

8.1.3 D/AC0832及其应用

内部结构:

image-20221128183150245

外部引脚:

image-20221128183224554

  • DI 0 ~ DI 7 :8位数字输入端。
  • /ILE: 输入锁存允许信号,高有效。
  • /WR 1 :写信号1, 输入寄存器 写选通信号。
    • 输入寄存器的锁存信号 LE 1 = CS & WR 1 & ILE。
    • 当三者同时有效时,LE 1 也有效,输入寄存器的输出随输入变化。 ↓锁存
  • /XFER: 数据传送控制信号,低有效。
  • /WR 2 :写信号2,DAC寄存器 写选通信号。
    • DAC寄存器的锁存信号 /LE 2 = /XFER & /WR 2 。
    • 当两者同时有效时,LE 2 也有效,DAC寄存器的输出随其输入而变化。 ↓锁存
  • I OUT1 :电流输出端1。DAC寄存器的值为全1时,I OUT1最大;全0时,I OUT1 最小。
  • I OUT2 :电流输出端2。I OUT1 + I OUT2 = 满量程电流。
  • R FB :反馈电阻。制作在芯片内部,供运放使用。
  • V REF :基准电源输入端。一般在-10~10V范围内。
  • Vcc:逻辑电源输入端,范围为+5 ~ +15V。
  • AGND:模拟地,芯片模拟电路接地点。
  • DGND:数字地,芯片数字电路接地点。

image-20221128183454012

DAC0832的工作方式

  • 直通工作方式——2个寄存器均直通放行

    • CS、WR 1 、WR 2 、XFER接地,ILE接电源,故LE 1 和 LE 2 恒有效,两级寄存器均处于直通放行状态, 数据直接送入D/A转换器进行D/A转换。
    • 这种方式不使用缓冲寄存器, 不能直接与CPU总线相连,可外接8255等接口芯片作为缓冲。
  • 单缓冲方式——1 个直通,1个受控

    image-20221128183654799

    • WR 2 和 XFER接地,使DAC 寄存器直通;ILE接高电平,WR 1 接CPU的IOW,CS接地址译码输出,输入寄存器处于受控状态。
    • 输入数据只需一级缓冲即可送入D/A转换电路,故 仅需执行一次写操作,即可完成D/A转换。
1
2
MOV AL,Data ;取数字量
OUT PORT,AL ;启动D/A转换
  • 双缓冲方式——2个寄存器均受控

    image-20221128183611476

    • 双缓冲方式下, 需执行两条指令才能实现D/A转换。设2个寄存器的端口地址分别为port1和port2,则:
    1
    2
    3
    4
    MOV DX,port1
    OUT DX,AL ;打开输入寄存器
    MOV DX,port2 ;打开DAC寄存器
    OUT DX,AL ;AL内容可任意
    • 该方式可用于 同时需要输出多个模拟量的场合。

利用D/A转换器实现波形

方波程序:

1
2
3
4
5
6
7
8
9
10
11
		MOV DX,203H ;8255A控制口地址
MOV AL,80H ;8255A控制字
OUT DX,AL ;8255A的A口方式0输出
MOV DX,200H ;8255A的A口地址
AGAIN: MOV AL,00H
OUT DX,AL ;输出方波“0”
CALL DELAY ;方波“0”宽度
MOV AL,0FFH
OUT DX,AL ;输出方波“1”
CALL DELAY ;方波“1”宽度
JMP AGAIN

锯齿波程序:

1
2
3
4
5
6
7
8
		MOV DX,203H ;8255A控制口地址
MOV AL,80H ;8255A控制字
OUT DX,AL ;设置8255A 的A 口为方式0输出 输出
MOV DX,200H ;8255A的A口地址
MOV AL ,00H ;输出数据初值 ;输出数据初值
J: OUT DX,AL ;锯齿波输出
INC AL
JMP J

三角波程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
		MOV DX,203H ;8255A控制口地址, 控制字
MOV AL,80H
OUT DX,AL ;设置8255A 的A口为方式0输出
S: MOV DX,200H ;8255A的A口地址
MOV AL,00H ; 正向锯齿波
Z: OUT DX,AL
INC AL
JNZ Z
MOV AL,0FFH ; 负向锯齿波
F: OUT DX,AL
DEC AL
JNZ F
JMP S

8.2 A/D转换

8.2.1 A/D转换工作原理

  • 逐次逼近型A/D转换器

原理:从最高位开始通过 逐次试探进行测试,直到试探值经D/A转换后的输出 V o 与 与V i 相等或达到允许的误差范围。该试探值就是A/D转换对应的数字量。

image-20221128185048424

转换过程:

▲ 在启动脉冲 时,逐次逼近寄存器清0。
▲ 第1个 CLK:逐次逼近寄存器 = 1000 0000,被D/A转换后得到V o 。
若V o > V i ,则说明1000 0000大了,应将D7 改为0(去码),同时设次高位D6为1。
若V o <V i ,则说明寄存器中的值不够大,故需将D 7 位的1保留( 加码),同时也设次高位为1 。
再次对输出结果 V o 和 V i 进行比较,确定次高位的1是去掉还是保留。
▲ 依此类推,逐位比较,直至最低位,比较完毕后,缓冲寄存器中的数值就是转换结果。

举例: 举例:4.8V (D/A 满量程为10V) )
▲ 在启动脉冲 时,逐次逼近寄存器清0。
▲ 第1个CLK 到来时,逐次逼近寄存器=1000 0000,该值经D/A转换后输出V o = 128/255×10V = 5V。
5V > 4.8V,说明1000 0000 大了,应将D 7 改为0。
▲ 第2个CLK到来时,将逐次逼近寄存器的次高位D6 置1,即 0100 0000 ,该值经D/A转换后输出模拟电压V o = 64/255 ×10V = 2.5V。
2.5V < 4.8V,说明0100 0000 这个值小了,应该将次高位的1保留。 ▲ 第3个 CLK 到来时,将逐次逼近寄存器的D 5 置1,即0110 0000, 该值经D/A转换后输出的模拟电压为V o =96/255 ×满量程10V = 3.75V。
3.75V < 4.8V,说明0110 0000这个值仍然小了,应该将D 5 位的1保留。
▲ 第4个CLK到来时,将D4 置1,……
▲ 重复以上过程,经过8次后,逐次逼近寄存器中的数字量就是转换结果。

image-20221128185707343

image-20221128185725312

A/D转换主要技术指标

  • 量化误差:数字量的最低位 1 LSB 的输出变化所对应的 模拟量范围。

image-20221130191852827

  • 分辨率:指A/D转换器 所能分辨的最小模拟输入量。或指A/D转换器 满量程模拟输入量被分离的级数。

    • n位A/D转换器应能区分2^n 个不同量级的模拟输入,能区分的输入模拟电压的最小差异为:满量程/2^n 。

    • 例:12 位的A/D转换器,最大输入模拟信号为 10V,则其分辨率为:

      image-20221130192026628

    • 可用A/D转换器能转换的 数字量位数来表示,例:10位A/D转换器的分辨率为10位。

  • 相对精度:指实际转换值偏离理想值的误差,一般用最低有效位来表示。

  • 转换时间:指完成一次转换所需的时间,即:从接到转换启动信号开始,到输出端 获得稳定的数字信号所经过的时间。

  • 转换速率:指实际每秒转换的次数。 注意:转换速率与转换时间不一定是倒数关系(实际大于)。

8.2.2 A/D转换器接口电路

image-20221130192153009

Vi:模拟信号输入线,连被转换对象

缓冲寄存器D7~D0:数字信号输出线,连CPU数据总线

转换信号EOC:转换结束 输出线,供中断或CPU查询使用 查询使用

启动信号START:转换启动线

A/D 转换器与CPU的接口

①.A/D转换启动控制 转换启动控制

▲ D/A转换无需启动信号,只要数字量到达转换电路,即可开始转换。而A/D转换器每转换一次,都需要CPU发一个启动信号 启动信号Start。
▲ 启动分 脉冲启动和 电平启动两种方式。
☆ 脉冲启动:可由CPU执行写指令时产生的CS 和WR组合 组合得到。启动转换后即可 撤销。例:ADC0804、ADC0809和ADC1210。
☆ 电平启动:启动信号在整个转换过程中要 保持不变, 中途不能撤销,否则转换停止。CPU可通过 并口产生电平启动信号。例:AD570、AD571和AD572。

②.A/D转换结束控制

▲ 转换结束后,A/D转换器向外发EOC信号 信号,通知CPU已转换结束。

QES:CPU 读取A/D转换结果的 转换结果的 时机问题: :A/D转换时间相对 转换时间相对较长,CPU何时读取才能保证得到正确的结果?

分为以下3种方法来实现

  • 固定延迟法
    ▲ 启动转换后,CPU 执行一段延迟程序,确保延迟时间大于A/D转换时间,然后再读取转换结果。
    ▲ 特点:不需要应答信号,接口简单,但CPU效率低。
  • 查询等待法
    ▲ 启动转换后,CPU 不断查询EOC 信号状态。一旦发现EOC有效,就读取转换结果。
    ▲ 特点:接口简单,但CPU效率低,延迟时间长。
  • 中断法
    ▲ 转换结束后,由 由EOC 信号触发中断,CPU响应中断,在中断服务程序中读取转换结果。
    ▲ 特点:CPU和A/D转换器可并行工作,CPU效率高。

③.A/D 转换输出控制——缓冲问题

输出允许信号 输出允许信号OE ,它控制数据是否能从A/D转换器输出。 转换器输出。一般该信号由 由CPU提供 提供。

▲ 由于A/D转换结果与CPU数据总线相连,因此CPU应能 应能控制 何时 转换结果送到总线上, 何时转换结果 被隔离。
▲ 若A/D转换器内具有三态输出缓冲器,则可 直接通过数据总线与CPU相连。
▲ 若A/D转换器内无三态输出缓冲器,必须 外接三态缓冲器,以控制输出。

④.A/D 转换器输出控制——位数匹配问题

若A/D的位数 小于或等于CPU总线宽度,则它可直接与CPU相连,数据 可一次性读入。否则,不能直接相连,数据要 分两次读入。

▲ 情况1:A/D的 数据位数大于8位 位,但 数据输出线只有8 根,数据输出分2次完成,芯片有两个数据输出使能信号:高字节使能 高字节使能 (High Byte Enable) 和低字节使能(Low Byte Enable)。
设计接口时,高、低字节输出数据占2个 个不同的端口地址,分2次完成高、低字节的数据读入。

image-20221130192933083

▲情况2:ADC数据位数大于8位,数据全部一次性输出。若与8 位CPU相连时,必须外加三态缓冲器 外加三态缓冲器。

  • 转换结束后对 CS 1 1 口执行读操作,则12位转换结果全部输出: 低8 8 位直接进入CPU,高8 8 位进入三态锁存器。
  • 然后对 CS 2 口执行读操作,可将高4位数据送入CPU。

image-20221130193042110

8.2.3 ADC0809及其应用

接口功能部分分析:

image-20221130193213745

  1. 输入地址并使得ALE有效,将地址存入锁存寄存器。
  2. 地址经译码器选通一路输入到比较器,进行地址的写或者读
  3. 从CPU处得到启动信号START
  4. 进行A/D转换
  5. 读取EOC信号查看转换是否完成
  6. 当EOC为高时,触发OE(输出使能信号)打开输出锁存器。

ADC0809的应用 的应用
▲ 内部带三态输出锁存器,与CPU可 直接相连,也可通过8255与CPU相连。
▲ 与CPU间的数据传输可采用 查询方式,也可用 中断方式。(EOC)

ADC0809的应用例题

【例9-5】在8088系统中采用ADC0809设计一个数据采集系统,将第1路模拟量转换为数字量后存储在DATA 1 单元。要求采用 查询方式读取转换结果。

​ 硬件电路设计。其中CS 1 对应的端口地址为8087H,CS 2 对应的端口地址为888FH。

image-20221130193616631

①.选中通道1,并启动转换:读or 写? 地址 ?

​ 因为选中第1路信号,且ALE与START由/IOW和/CS1相与得到,所以在CS1的8个地址中选择1路即A2=0,A1=0,A0=1,81H 为写状态。

②.获取EOC状态。读or 写?地址 ?

​ 获取EOC状态,EOC与/IOR相连 所以为读信号,还与/CS2相连,为了触发/CS2,则随便选择88H~8FH中的一个地址 8?H

③.使能OE 读 or 写操作?地址?

​ OE信号与/CS1和/IOR相连 所以为读操作,读/CS1地址中任意一个8?H

1
2
3
4
5
6
	OUT 81H,AL ;启动ADC,通道1地址
LL: IN AL,8?H ;读入EOC状态
AND AL,80H ;测试EOC状态
JZ LL
IN AL ,8?H ;OE输出使能,读取结果
MOV DATA 1 ,AL ;存入指定单元

【例9-6】将例9-5改成 中断方式,要求从通道1读取100个转换后的数据存储在BUFFER数据区。IR 0 的中断类型号为8。8259A中断请求为边沿触发、非自动中断结束方式、普通全嵌套方式。

image-20221130194229632

①.全嵌套方式 选中通道1,并启动转换:读or 写? 地址 ?

​ 读操作,读81H地址

②.读数据:读or 写? 地址 ?

​ 读操作,地址为8?H∈{80H~87H}

③.8259 操作地址?

​ 为/CS2中的某一对奇偶地址

▲ 转换结束后,EOC信号触发中断。 在中断服务程序中CPU 读取转换结果,将之存入Buffer区 区。
▲ 主程序的功能:初始化8259、设置中断向量表、开中断、启动A/D转换,然后等待中断过程。
▲ 中断服务程序功能:读取A/D转换结果并将其存入BUFFER、结束中断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
DATA SEGMENT
BUFFER DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,0
MOV DS,AX
MOV BX,20H ;中断号 ;中断号8*4=32=20H
MOV DS:[BX],OFFSET READ_INT ;偏移地址
MOV AX,SEG READ_INT
MOV DS:[BX+2],AX ;段地址
CLI
MOV AL,13H ;写 写ICW 1 (边沿触发,单片,需要ICW 4 )
OUT 88H ,AL
MOV AL,08H ;写 写ICW 2 (中断号高5位)
OUT 89H,AL
MOV AL,01H ;写 写ICW 4 (非缓冲,非EOI,16位机)
OUT 89H,AL
IN AL,89H
AND AL,0FEH
OUT 89H,AL ;开放 开放IR 0 中断请求
MOV AX,DATA
MOV DS,AX
MOV DI,OFFSET BUFFER ;设置数据区首址
MOV CX,100 ;采样次数
AGAIN:MOV AL,01H
OUT 81H ,AL ; 启动转换通道1(CS、WR有效)
STI ;开中断
HLT ; 等待中断请求
CLI ;关中断
INC DI
DEC CX ;次数减1
JNZ AGAIN ;次数未到,继续启动转换
IN AL,89H ;次数已到,屏蔽 次数已到,屏蔽IR 0
OR AL,01H
OUT 89H,AL
MOV AH,4CH ; 程序结束,返回
INT 21H
---------------------------------------------以下为中断服务子程序-------------------------------------------------------------------
READ_INT PROC
PUSH AX ;保护现场
IN AL,8?H ;从 从ADC0809 通道1读入数据 读入数据
MOV [DI],AL ; 将数据存入内存
MOV AL,20H ;EOI
OUT 88H,AL
POP AX
IRET
READ_INT ENDP
CODE ENDS
END START