当前位置:首页 >> 工学 >>

第五章数字量输入输出


第五章 数字量输入输出
5.1概述 5.2系统总线及接口 (接口与系统的连接) 5.3中断控制系统 5.4计数定时接口 5.5并行输入输出接口 5.6串行输入输出接口 5.7直接存储器存取DMA 5.8高档微机中的I/O接口电路

5.1概述
一个微机系统由CPU、存储器、外设和系统总线几部 分组成.外设通过输入/输出接口和CPU交换信息.例如 键盘、显示器、打印机、磁盘驱动器、调制解调器、 鼠标等都是通过I/O接口和CPU相连的.

5.1概述
5.1.1接口的必要性和接口的功能 5.1.2CPU与外设之间交换信息的种类 5.1.3接口的构成 5.1.4I/O端口的编址方式 5.1.5CPU与外设之间的信息交换的控制方式

5.1.1接口的必要性和接口的功能
外设是用来实现人机交互的一些机电设备.外设 处理信息的类型、速度、通信方式与CPU不匹配, 不能直接挂在总线上,必须通过接口和系统相连.

接口的功能
(1)信号的形式变换 (2)电平转换和放大 (3)锁存及缓冲 (4)I/O定向(地址译码) (5)并行及串行数据的转换

三态缓冲和锁存
(1)输入设备的I/O 接口要起到三态门的作用 在总线结构的微机系统中,任一时刻只能有一个设备利用 总线进行数据传送,输入设备的数据线应通过三态门与系 统相连.

(2)输出设备的I/O 接口要起到锁存的作用 在总线结构的微机系统中,CPU送出的数据以广播的形 式在数据线上传出.CPU要利用总线不停的传送数据,总 线上的数据变化快,如何使慢速设备有足够的时间处理 数据?
总线

输出设备1
输出设备2

CPU
输出设备3 输出设备4

输出设备利用锁存器接受CPU输出的数据: (1)使某输出设备锁存器的控制端处于触发状态,数据通 过该锁存器;(2)当触发信号消失,数据锁存在锁存器中, 外设侧数据不随总线侧数据的变化而变化,使 慢速的外 设有足够的时间处理数据.

总线 锁存器1
CP1 输出设备1

CPU
CP2

锁存器2

输出设备2
输出设备3

锁存器3

CP3

5.1.2CPU与外设之间交换信息的种类
1、数据信息:外设和CPU之间交换信息的主体.按其 信号类型可分以下三类: (1)数字量:以八位或十六位二进制形式传送的数据或 是以ASCII码表示的数据及字符.如键盘、鼠标的输 入信息,或者主机送给打印机或显示器的输出信息. (2)模拟量:连续变化的电压、电流、频率等电信号. (3)开关量(脉冲量):用一位二进别形式数或一串脉冲 信号表示的外设数据.如开关的闭合和断开、电机的 运行和停止、阀门的打开和关闭. 2、状态信息:反映外设当前所处工作状态的信息,例 如常用的忙或闲信号、准备好信号等. 3、控制信息:CPU发送给外设用于控制外设的状态, 工作方式等用途的信息.

5.1.3接口的构成
AB

C
DB

地址 译码 数据 缓冲 控制 电路

数据端口


状态端口 控制端口

P U
CB



(1)从编程角度看,接口内部主要包括一个或多个CPU可 以进行读/写操作的有地址的寄存器,又称为I/O端口. (2)数据端口:双向的数据端口具有锁存和三态缓冲功能. 状态端口:只读端口,包含三态缓冲器. 控制端口:只写端口,包含锁存器.

简单输入接口举例(P247)

MOV IN

DX,218H AL,DX

简单输出接口举例(P247)

MOV OUT

DX,219H DX,AL

5.1.4 I/O端口的编址方式
I/O端口的地址可以有两种方式产生:存储器映象 方式和I/O单独编址. I/O的存储器映象编址:从存储器地址中分出一部 分给I/O端口使用,每个I/O端口被看成一个存储器 单元,于是可以用访问存储器方法来访问I/O端口. I/O单独编址:CPU使用专门的I/O指令及控制信 号进行I/O操作.

应用

特点

优点 缺点

存储器映象编址 Motorola的M6800系列,日立 H8S单片机系列 (1)I/O端口相当于内存的一部分, 使内存容量减小. (2)对I/O端口的读/写与对存储 器的读/写相同,所有可对内存操 作的指令对I/O端口均可使用, 指令系统中不专设I/O指令. 优点:不需要专门的I/O指令;I/O 数据存取与存储器数据存取一 样灵活. 缺点:I/O端口要占去部分存储 器地址空间;程序不易阅读(不易 分清访存和访问外设).

I/O单独编址 80X86,MCS96系列,Z80系 列 (1)端口与存储器分别独立 编址,端口不占用内存空间. (2)设有专门的I/O指令对 端口进行读写.

优点:I/O端口和存储器都 有完整的地址空间;专门的 I/O指令使程序清晰易读. 缺点:I/O指令没有存储器 指令丰富

5.1.5CPU与外设之间的信息交换的控制方式

1、直接传送方式 2、查询传送方式 3、中断传送方式 4、DMA传送方式

1、直接传送方式 指CPU在需要和数据端口进行传送时,直接对其 执行I/O指令(先要确保外设准备好否则传送失败). 2、查询传送方式 传送前,先查询外设状态,准备好才传送,否则CPU 处于等待状态. 3、中断传送方式 外设与CPU处于并行工作,一旦外设准备好,外设 向CPU发中断申请,条件具备,CPU暂停原程序执 行,响应中断,外设与CPU串行工作. 4、DMA传送方式 CPU不干予,由硬件实现存储器与外设之间交 换数据,称直接存取存储器.

1、直接传送方式 例如用输出接口驱动发光二极管LED:输出 “0”LED熄灭;输出“1”LED发光.以上传送过 程没有不协调的可能,所以也称为同步传送或无 条件传送.

简单输入接口举例

MOV IN

DX,218H AL,DX

简单输出接口举例

MOV OUT

DX,219H DX,AL

2、查询传送方式
实现方法:在CPU要与外设交换数据时,先查询外设(I/O 端口)的状态.对于输入设备,当外设准备好,或者对于输 出设备,当外设空闲时,CPU才从外设输入数据或者向外 设输出数据.如果外设未准备好或正忙,CPU要继续查询 等待或者隔一段时间后再来查询.如此反复进行,直至能 够传送数据. 特点: (1)CPU通过不断查询外设状态,实现与外设的速度匹配 (2)CPU的工作效率低.

例子

查询方式输入

外设的状态端口为21C H,其中D4=1时,表示外设数据准备好; 外设的数据端口为218H.实现从外设读入50H个字节到内存缓冲 区buffer中. MOV DX, 218H IN AL, DX MOV DX, 21CH IN AL, DX

地址线

C
数据线

地址 译码 数据 缓冲 控制 电路

21CH端口 状态端口 218H端口 数据端口

P
控制线

输 入 外 备

U

编程从外设读入50H个字节到内存缓冲区buffer中

从21CH状态端口 读入外设状态信息 D4=1, 外设准备好否?

N

Y
从218H数据端口 读入一个字节数据 50H个 数 据 传 送结 束 ?

N

Y

查询方式输入程序段:
…… MOV AX, SEG buffer MOV DS, AX LEA DI, buffer MOV CX, 50H next: MOV DX, 21CH ask: IN AL, DX TEST AL, 0001 0000B JZ ask MOV DX, 218H IN AL, DX MOV [DI], AL INC DI LOOP next ……… ;取缓冲区首地址

;传送个数

;从状态端口读入状态信息 ;检测D4位 ;D4=0,继续查询
;从数据端口读入数据 ;送缓冲区 ;修改缓冲区指针 ;传送下一个

3、中断传送方式
实现方法:当某个外设需与CPU交换数据并已做好了准 备时,就通过硬件电路向CPU发出可屏蔽中断申请,在 CPU允许中断的情况下(IF=1),CPU在执行完当前指令 后,可立即响应外设的中断请求,进行一次数据交换.然后, 又返回原来的程序,去执行断点处的下一条指令. 特点: (1)中断方式传送是由I/O设备主动请求发起的,免除了 CPU重复的查询工作,提高了效率,CPU对I/O设备的请求 也响应较快,因此中断方式得到广泛的应用. (2)响应过程将花费CPU时间,影响程序运行速度.响应后 数据的传送还是依靠CPU执行中断服务程序来完成,其 速度仍受到软件的限制.

4、DMA传送方式
现代的输入、输出设备有些速度很快,有很高的数据传 输率,例如10倍速光驱的数据传输率就达1.5MB/S,1G以 上硬盘,数据传输率超过16MB/S.CPU无论用查询方式或 是中断方式都不能充分发挥这些外设速度特点,因为 CPU执行指令花费的时间太长.于是就提出了在内存和 外设间直接传送数据的方式—DMA方式. DMA方式是在DMA控制器的控制下,外设利用专门的硬 件电路和存储器间直接进行数据传输的,传输过程不经 过CPU,不需执行指令,也不必进行现场保护和恢复等操 作,传输的速度主要取决于外设和存储器的速度.

实现方法:某个I/O设备需要传送时,经过DMA控制器(DMAC) 发出总线请求信号,CPU响应后暂停正在执行的当前指令,交 出总线控制权,DMAC接管总线,发出要访问的存储器的地址 及读(写)控制信号,同时也对该I/O设备的数据端口发出读(写) 控制信号,使存储器和I/O设备直接通过数据总线完成传 送.DMAC还可以进行地址修改和字节计数,在一次请求得到 响应后完成一批数据的传送,然后撤销总线请求信号,CPU收 回总线控制权,继续完成被打断的指令.

DMA传送方式的特点:
(1)外设和内存之间,直接进行数据传送,不通过CPU,传送效率 高.适用于在内存与高速外设、或两个高速外设之间进行大批 量数据传送. (2)电路结构复杂,硬件开销较大.

四种传送方式的比较
?直接传送方式:简单不实用,效率较低 ?查询传送:简单实用,效率较低 ?中断传送:外设主动,可与CPU并行工作,但响应后 数据的传送依靠CPU执行中断服务程序来完成, 其速度仍受到软件的限制. ?DMA传送:DMAC控制外设直接和存储器进行数 据传送,适合大量、快速数据传送.但是,DMAC电 路比前两种方式的接口电路复杂的多.

5.2系统总线及接口(接口与系统的连接)

8086/8088最大模式结构

5.2.1 总线概述
总线的特性: (1)多信号源;(2)被分时使用;(3)由主设备控制.

总线的分级: (1)片内总线;(2)系统级总线; (3)设备级总线:各种I/O设备和计算机之间的连接 也有某些总线标准.串行接口总线标准RS-232.

5.2.2 系统总线标准
为了使不同厂家制造的I/O接口卡都能方便地与微 机系统配合使用.人们规定了用于各种微机系统的 系统总线标准.其中,在PC机上常使用的系统总线 标准有PC/XT总线、ISA总线、EISA总线、PCI 总线等.
ISA PCI 插 槽

插 槽

1、IBM PC/XT总线信号 (1)数据线8根 (2)地址线20根 (3)控制线21根 (4)状态线2根 (5)辅助线和电源线11根
GND RESET +5V IRQ2 -5V DRQ2 -12V +12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND I/O CH CK D7 D6 D5 D4 D3 D2 D1 D0 I/O CH RDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

IBM PC/XT总线插槽引脚信号

(3)控制线21根
?总线控制器8288发出(5根) ALE 地址锁存允许信号 MEMR* 存储器读控制信号 MEMW* 存储器写控制信号 IOR* I/O端口读控制信号 IOW* I/O端口写控制信号 ?与DMAC有关的信号(9根) AEN 地址允许信号, 由DMAC发出,切除 CPU对总线的控制,为1时DMAC控制总线; 为0时CPU 控制总线 DRQ1~DRQ3 通道1~3 DMA请求信号 DACK0*~DACK3* 通道0~3 DMA响应 T/C 计数结束信号。当DMA传输完要求的 字节数后,T/C输出正脉冲。表示DMA过程 结束。 ?外设发向8259A(6根) IRQ2~IRQ7 中断请求信号 ?RESET DRV 系统总清信号 此信号使系统各部件复位
GND RESET +5V IRQ2 -5V DRQ2 -12V +12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND

I/O CH CK D7 D6 D5 D4 D3 D2 D1 D0 I/O CH RDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

IBM PC/XT总线插槽引脚信号

2、总线周期
时钟周期:计算机中,CPU是在时钟信号的控制下,一 步一步地完成各种操作的.CPU使用的时钟信号的周 期称为时钟周期,也称为一个T状态. 指令周期:把从取一条指令开始,经过指令译码、执 行、到保存结果这一过程称为一个指令周期. 总线周期:CPU读取指令或读、写数据,都是通过总 线进行的.人们把总线主模块通过总线对存储器或 I/O端口进行的一次读或写操作称为一个总线周期. 一个基本的总线周期由四个时钟周期构成,分别称为 T1、T2、T3和T4状态.分析清楚基本操作中系统总 线上的地址信号、数据信号和控制信号间的配合关 系,可以加深对指令执行过程的理解.

最大模式下存储器读总线周期
T1
CLK A19~A0 ALE D7~D0 MEMR

T2

T3

T4

GND RESET +5V IRQ2 -5V DRQ2 -12V +12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND

I/O CH CK D7 D6 D5 D4 D3 D2 D1 D0 I/O CH RDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

IBM PC/XT总线插槽引脚信号

最大模式下存储器写总线周期
T1
CLK A19~A0 ALE D7~D0 MEMW

T2

T3

T4

GND RESET +5V IRQ2 -5V DRQ2 -12V +12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND

I/O CH CK D7 D6 D5 D4 D3 D2 D1 D0 I/O CH RDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

IBM PC/XT总线插槽引脚信号

IBM PC/XT 总线上I/O端口的读、写周期 与读、写存储器的过程相似,不同之处: (1)IOR*、IOW*变低,CPU操作I/O端口. (2)端口的地址信号出现在A15~A0上,不用 A19~A16. (3)增加了一个TW等待周期.

最大模式下I/O端口读总线周期
T1
CLK A15~A0 ALE D7 ~ D0 IOR

T2

T3 Tw

T4

GND RESET +5V IRQ2 -5V DRQ2 -12V +12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND

I/O CH CK D7 D6 D5 D4 D3 D2 D1 D0 I/O CH RDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

IBM PC/XT总线插槽引脚信号

最大模式下I/O端口写总线周期
T1
CLK A15~A0 ALE D7 ~ D0 IOW

T2

T3

Tw T4

GND RESET +5V IRQ2 -5V DRQ2 -12V +12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND

I/O CH CK D7 D6 D5 D4 D3 D2 D1 D0 I/O CH RDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

IBM PC/XT总线插槽引脚信号

5.3中断控制系统

5.3.1中断的基本概念 5.3.2可编程的中断控制电路 5.3.3Intel 8259A的应用 5.3.4高档微机的中断系统

5.3.1中断的基本概念
中断:是使CPU中止正在执行的程序,转去执行处 理特定事件程序的操作. 中断源:引起CPU进行中断操作的事件.8086/8088 可以由硬件或软件引起中断(软件中断).

1、中断源的分类
中断分为内部中断和外部中断

内部中断和外部中断
?内部中断(软件中断) ?除零中断(n=0) ?单步中断(n=1)条件:TF=1且IF=1 ?断点中断(n=3) ?溢出中断(n=4)条件:OF=1 ?中断指令INT n ?外部中断(硬件中断) ?非屏蔽中断(n=2) ?可屏蔽中断 条件:IF=1

2、中断的优先级
中断优先级:当系统中有多个中断源,而且在系统 工作时,有可能出现一个以上的中断源同时申请 中断的情况,或者一个中断处理过程尚未结束,又 有其它中断申请出现的情况,此时,就需要予先规 定CPU响应中断的次序,这个次序就是中断优先 级.在PC系列微机中,各中断源中断优先级为: 中断源 优先级 0号中断,INT n,INTO 1(最高) NMI 2 INTR 3 单步中断 4

多个中断源同时申请时:当发生多个中断源 同时申请中断的情况时,CPU按各中断源的 优先级顺序,先处理优先级高的中断源的中 断服务程序,后处理优先级低的中断源的中 断申请. 中断嵌套:微机系统允许中断级别高的中断 源打断正在执行的中断优先级低的中断的 服务程序,先执行中断级别高的中断源的服 务程序.这种现象称为中断嵌套.同时,还会禁 止同级的中断源相互打断及低级中断源打 断正在执行的高级中断源的服务程序.

3、中断的处理流程

中断的处理流程

(1)获取中断类型号; (2)保护断点; (3)转入中断服务程序; (4)返回断点.

硬件中断与软件中断的区别
(1)软件中断是由程序员在程序中予先安排 的,在计划的程序位置出现的.而硬件中断是 由外设引起的,它是随机的. (2)CPU响应软件中断不发出INTA*负脉冲, 也不需从数据总线读中断类型码,而是由指 令直接给出中断类型码或内部予定了中断类 型号. (3)除单步中断可由TF=0禁止外,软件中断不 能用软件禁止,而硬件中断可用IF=0禁止(非 屏蔽中断除外).

5.3.2可编程的中断控制电路

1、Intel8259A的引脚及功能 2、Intel8259A的编程结构和工作过程 3、Intel8259A的工作方式 4、Intel8259A的编程

1、Intel8259A的功能及引脚
中断申请 8088 CPU
接口1 接口2

网络
硬盘 软盘
打印机

中断申请 管理接口

接口3
接口4

IF

INTR

INT

中断申请管理接口的主要功能
中断控制器的功能:中断控制器在有多个中 断源的系统中,规定各中断源的优先级别,接 收外部中断申请,只让发出中断申请的几个 中断源中优先级最高的一个把申请信号送到 CPU,并提供中断类型号.在中断处理过程中, 进行中断嵌套管理等.

8259A的主要特点
(1)1片8259A能管理8级中断,并且,在不增加其它电 路的情况下,可以用9片8259A来构成64级的主从 式中断系统. (2)8259A设计有多种工作方式,可以通过编程来选 择,以适应不同的应用场合. (3)8259A采用NMOS制造工艺,只需要单一的+5V 电源 .

8259A的引脚
双列直插式芯片,28个引脚 8259A
总线 D0 ~ D7 IOR IOW A0 A5 ~ A9 INTA INTR 数据线 D0 ~ D7 RD WR A0 Vcc + 5V 18.2Hz 方波 键盘 保留 串 口2 串 口1 硬盘 软盘 打印机

片 选 20~3FH 译 码

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 SP/EN CA0 CA1 CA2
GND

CS

INTA INT

用于多片 8259A 级连情况

IBM PC/XT系统板I/O端口地址译码

地址总线
A9A8A7A6A5A4A3A2A1A0

译码 输出
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7

对应的端口 地址
000~01FH 020~03FH 040~05FH 060~07FH 080~09FH

实际使用的 地址
000~00FH 020~021H 040~043H 060~063H 080~083H

对应的接口芯片
DMA控制器8237 中断控制器8259A 计数器/定时器8253-5 并行接口8255A-5 DMA页面寄存器 NMI屏蔽寄存器 保留

00000XXXXX 00001XXXXX 00010XXXXX 00011XXXXX 00100XXXXX 00101XXXXX 00110XXXXX 00111XXXXX

0A0~0BFH 0A0~0BFH 0C0~0DFH 0E0~0FFH 00~0FH 00~0FH

A5~A9地址作为I/O接口电路的片选信号,而A4~A0作为对接口电 路内部寄存器的选择信号.

CAS2~CAS0:多片级联控制信号.多片级联时,各片的 CAS2~CAS0接在一起,主片的CAS2~CAS0是输出信号, 输出从片的标识码(ICW3).从片的CAS2~CAS0是输入信 号,单片使用时CAS2~CAS0浮空不用. SP*/EN*:它有两个用途,一是作为级联控制信号输入SP*, 决定本片是用作主片或是从片. SP*=1为主片, SP*=0为 从片.二是当8259A用于缓冲连接方式时,用作8259A与系 统数据总线间缓冲器的控制信号EN*,输出,低电平有效. 当设置为缓冲方式时SP*/EN*就是输出信号EN*,否则为 输入信号SP*.当系统中仅有单片8259A作非缓冲方式使 用时SP*/EN*应接+5V.

Intel 8259A的级连
地址总线 控制总线 数据总线

INT CAS0 8259A 从控 B CAS1 CAS2 SP/EN IRQ7 ┅ IRQ0

CS A0 DB INTA

INT CAS0 8259A 从控 A CAS1 CAS2 SP/EN IRQ7 ┅ IRQ0

CS A0 DB INTA

CS A0 DB INTA INT CAS0 CAS1 8259A主控 CAS2 IRQ7 ┅ IRQ0 SP/EN 7 6 5 4 3 2 1 0 VCC 7 6 5 4 3 2 1 0

GND 7 6 5 4 3 2 1 0

GND 7 6 5 4 3 2 1 0

Intel 8259A的级连(缓冲方式)
系统数据总线

B7~B0 T 74LS245 OE A7~A0

B7~B0 T 74LS245 OE A7~A0

B7~B0 OE 74LS245 T A7~A0

DT/R

局部数据总线 +5V 1kΩ +5V 1kΩ +5V 1kΩ DEN SP/EN D7~D0 从控 B CAS2-0 INTA INT SP/EN D7~D0 从控 A CAS2-0 INTA INT SP/EN D7~D0 主控制器 INT IR5 IR6 INTA CAS2-0 INTR

INTA

2、Intel8259A的编程结构和工作过程
总线

处理部分
数据线

D0 ~ D7
A0

D0 ~ D7

A0

ISR 当前 中断 服务 寄存器

A5 ~ A9

片 选 CS 译 码
RD WR

0 0 0 0 0 0 0 0

0 IRR 0 中断 0 申请 0 PR 寄存器 0 0 优先级 0 0 裁决器 A0 1 0 0 1 0 1 0 0 1
OCW1 中断屏蔽寄存器 IMR

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

ICW1 芯片控制 A0 1 × I3 I4 0 ICW2 中断类型号

IOR IOW INTA

1
ICW3 主从片连接关系

0 0

0 0

SP/EN

OCW2 优先级设置、发EOI

INTA INT
ICW4 方式控制

CA0 CA1 CA2 VCC GND

1 1

0 1

INTR

OCW3特殊屏蔽,查询方式设置

控制部分

8259A中断控制器

8259A内部有9个可读写 的寄存器 4个初始化命令寄存器 ICW1、ICW2 ICW3、ICW4

处理部分

0 ISR 0 当前 0 中断 0 服务 0 寄存器 0 0 0

IRR 0 中断申请 0 寄存器 0 PR

优先级 裁决器
OCW1

0 0 0 0 0

3个工作命令寄存器
OCW1(IMR)

ICW1 芯片控制 1 × I3 I4 ICW2 中断类型号

1 0 0 1 0 1 0 0
中断屏蔽寄存器 IMR 0 0

OCW2、OCW3
当前中断服务寄存器 ISR

ICW3 主从片关系 ICW4 方式控制

OCW2 0 1 OCW3

中断申请寄存器 IRR

控制部分

(1) 初始化命令字(ICW1-ICW4) 决定8259A的工作方式通常是在计算机系统启动时在初 始程序设置.一旦设定,一般在系统工作过程不再改变. 例 在IBM PC/XT中,开机后,BIOS将8259A初始化为 ① IR0~IR7中断申请信号为上升沿触发方式; ② IR0~IR7对应的中断类型号分别为08H~0FH; ③优先级IR0最高,IR7最低; (2) 工作命令字(OCW1,OCW2,OCW3)

在应用程序中设定,动态地控制CPU处理中断的过 程
(3) ISR和IRR存放当前8259A的状态

通过读取 ISR 和 IRR 的内容,可了解当前8259A 工作情况

8259A的工作过程
分两步: (1)处理外设中断申请,决定是否向CPU发中 断申请信号. (2)若发中断申请信号,且CPU响应,则在CPU 中断响应周期送出中断类型号.

(1)处理外设中断申请,决定是否向CPU发中 断申请信号. (IRR,IMR,PR,ISR的作用)
①中断申请寄存器IRR 锁存外部的中断申请.若 IR0~IR7 引脚上有 中断申请,则将 IRR 相应位置1. ②中断屏蔽寄存器 IMR 决定 IRR 中的中断申请是否进入优先级裁 决器 PR。 IMR对应位为 0,允许中断申请进入优先级裁决器;为 1,不允许进入, 中断申请被IMR屏蔽. ③当前中断服务寄存器 ISR 记录CPU正在响应的中断.ISR中的某 位为1,表示CPU正在响应此级中断;ISR中的某位为0,表示CPU没有 或已响应完此级中断. ④优先级裁决器PR 据新进入的中断申请和 ISR的内容,决定是否发 中断申请信号. 如果进入的中断申请比 ISR 中记录的中断优先级高,则通过 8259A 的 INT 引脚向 CPU发出中断请求信号; 如果进入的中断申请不比 ISR 中记录的中断优先级高,同级或低级, 则不向 CPU 发中断请求信号.

①中断申请寄存器IRR 锁存外部的中断申请.若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置1.

总线
D0 ~ D7 A0 A5 ~ A9 IOR IOW INTA INTR

数据线
A0

D0 ~ D7

ISR 当前 中断 服务 寄存器

片 选 CS 译 码 RD
WR INTA INT

0 0 0 0 0 0 0 0

PR

IRR 中断 申请 寄存器

优先级 裁决器
1 0 0 1 0 1 0 0

0 1 0 0 0 0 0 0 0 1

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

ICW1 芯片控制 ICW2 中断类型号

OCW1 中断屏蔽寄存器 IMR

ICW3 主从片关系
ICW4 方式控制

0 0
OCW2 优先级、发EOI OCW3 特殊屏蔽设置

②中断屏蔽寄存器 IMR:决定IRR中的中断申请 是否进入优先级裁决器PR.IMR对应位为0,允许中 断申请进入优先级裁决器,为 1,不允许进入,中断 申请被IMR屏蔽.
总线
D0 ~ D7 A0 A5 ~ A9 IOR IOW INTA INTR

数据线
A0

D0 ~ D7

ISR 当前 中断 服务 寄存器

片 选 CS 译 码 RD
WR INTA INT

0 0 0 0 0 0 0 0

PR

IRR 中断 申请 寄存器

优先级 裁决器
1 0 0 1 0 1 0 0

1 0 0 0 0 0 0 1

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

ICW1 芯片控制 ICW2 中断类型号

OCW1 中断屏蔽寄存器 IMR

ICW3 主从片关系
ICW4 方式控制

0 0
OCW2 优先级、发EOI OCW3 特殊屏蔽设置

③当前中断服务寄存器 ISR:记录CPU正在响应的中断. ISR中的某位为1,表示CPU正在响应此级中断,即正在执行此中断 源的中断服务程序; ISR中的某位为0,表示CPU没有或已响应完此级中断,即不在执行 此中断源的中断服务程序.
总线 D0 ~ D7 A0 A5 ~ A9 片 选 CS 译 码 RD WR INTA 数据线 A0 D0 ~ D7

ISR 当前 中断 服务 寄存器

0 0 1 0 0 0 0 0

PR

IRR 中断 申请 寄存器

优先级 裁决器
1 0 0 1 0 1 0 0

1 0 0 0 0 0 0 1

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制

IOR
IOW INTA INTR

OCW1 中断屏蔽寄存器 IMR

0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置

INT

④优先级裁决器PR据新进入的中断申请和 ISR的内容,决定是否发中 断申请信号. 如果进入的中断申请比 ISR 中记录的中断优先级高,则通过 8259A 的 INT 引脚向 CPU发出中断请求信号; 如果进入的中断申请不比 ISR 中记录的中断优先级高,同级或低级,则 不向 CPU 发中断请求信号.
总线 D0 ~ D7 A0 A5 ~ A9 片 选 CS 译 码 RD WR INTA 数据线 A0 D0 ~ D7

ISR 当前 中断 服务 寄存器

0 0 1 0 0 0 0 0

PR

IRR 中断 申请 寄存器

优先级 裁决器
1 0 0 1 0 1 0 0

1 0 0 0 0 0 0 1

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制

IOR
IOW INTA INTR

OCW1 中断屏蔽寄存器 IMR

0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置

INT

(2)若发中断申请信号,且CPU响应,则在CPU 中断响应周期送出中断类型号
CPU接收到 INTR上的中断申请信号后:
?如果IF标志为0,则CPU不响应此中断申请信号,

即中断申请被IF屏蔽.
?如果 IF 标志为1,则处理完当前的指令后,进入 中断响应周期,通过 INTA 引脚发出两个负脉冲 信号,从数据总线上获取中断类型号,进入中断 响应的过程.

8088CPU中断响应周期时序
第 一 个 中断响应周期 第 二 个 中断响应周期 T1 T2 T3 T4

T1
CLK

T2

T3

T4

INTA AD7~AD0
向量类型

8259A在接收到第一个INTA中断响应信号后: ① 将 ISR 中相应位置1, 表示 CPU 响应此级中断,执行此中断源的中断子程. ② 把 IRR中对应的位清0,清除IRR中锁存的中断申请信号.
总线 D0 ~ D7 A0 A5 ~ A9 片 选 CS 译 码 RD WR INTA 数据线 A0 D0 ~ D7

ISR 当前 中断 服务 寄存器

0 1 0 1 0 0 0 0 0

PR

IRR 中断 申请 寄存器

优先级 裁决器
1 0 0 1 0 1 0 0

1 0 0 0 0 0 0 0 1

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制

IOR
IOW INTA INTR

OCW1 中断屏蔽寄存器 IMR

0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置

INT

8259A在接收到第二个INTA中断响应信号后:
①通过数据线,将被响应申请的中断类型号送给CPU.类型号由ICW2提供,在初始化 8259A时已设定好. ② CPU获得中断类型号后,进入CPU响应中断的过程,执行中断子程,处理中断源申请的 功能. ③若8259A工作在自动结束AEOI方式,在第二个INTA*脉冲结束时,发生中断的ISR相 应位复位;否则直到服务程序结束发出EOI命令,ISR才复位.

总线
D0 ~ D7 A0 A5 ~ A9 IOR IOW INTA INTR

数据线
A0

D0 ~ D7

ISR 当前 中断 服务 寄存器

片 选 CS 译 码 RD
WR INTA

0 1 0 1 0 0 0 0 0

PR

IRR 中断 申请 寄存器

优先级 裁决器
1 0 0 1 0 1 0 0

1 0 0 0 0 0 0 0 1

IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

ICW1 芯片控制 ICW2 中断类型号

OCW1 中断屏蔽寄存器 IMR

ICW3 主从片关系
ICW4 方式控制

0 0
OCW2 优先级、发EOI OCW3 特殊屏蔽设置

INT

8259A的中断过程

Intel 8259A的级连

主从式系统中的中断响应过程
(1)假设从片的中断申请信号通过主片的INT输出端送到CPU.如果 这时中断允许标志IF为1,则CPU回送两个INTA*信号. (2)主片收到第一个INTA*信号后,将当前中断服务寄存器中的相应 位ISn置1,同时清除中断请求寄存器中的相应位Irn,接着对ICW3进 行检查,以决定中断请求是否来自从片.如果来自从片,主片便根据 ISn位来确定从片的标号,并把从片的标号值送到CAS2~CAS0线上. 如果中断请求信号并非来自从片,则CAS2~CAS0线上没有信号,而 在第二个INTA*信号到来时,主片将ICW2的内容即中断类型码送 到数据总线上. (3)INTA*信号除了送给主片外,也送给从片,但是,只有标号和主片 在CAS2~CAS0引线上发送的数值相同的从片,INTA*信号才起作 用,因此, CAS2~CAS0可以看成为主片往从片发送的片选信号. (4)被选通的从片收到第一个INTA*信号后,将本片的当前中断服务 寄存器中的相应位ISn置1,同时,清除中断寄存器中的相应位.当第 二个INTA*信号来后,主片没有动作,从片则将ICW2即中断类型码 送到数据总线上.

3、Intel8259A的工作方式 8259A有多种工作方式,这些工作方式,可以通过编 程设置或改变,所以使用起来很灵活. (1)优先权的管理方式

(2)结束中断处理的方式
(3)中断源的屏蔽方式

(4)系统总线的连接方式
(5)引入中断请求的方式

(1)优先权的管理方式

?全嵌套方式 特点:8259A的中断优先权顺序固定不变,禁止同级和低 级优先权的中断,但允许高级优先权中断的嵌套. 使用环境:这是8259A最常用的方式,也是8259A默认的工 作方式. 实现方法:ICW4的D4位(SFNM)置0(P302图5.26)

?特殊全嵌套方式 特点:优先权顺序固定不变,不但响应比该级级别高的中 断申请,而且响应同级别的中断申请. 使用环境:特殊全嵌套方式一般用于8259A的级连方式中. 实现方法:ICW4的D4位(SFNM)置1(P302图5.26)

?自动循环方式(课本上名字是优先权自动旋转) 特点:初始优先级顺序为IR0,IR1,IR2,IR3,IR4,IR5,IR6, IR7,当某一个中断源受到服务后,它的优先级别改为最低 级,而将最高优先级赋给比它低一级的中断源,其他级别 依次类推. 使用环境:当IR0~IR7端引入的中断源有相同的优先级, 使用自动循环方式,每个中断源会有同等的机会得到CPU 的服务. 实现方法:通过将操作控制命令子OCW2的D7,D6位置为 1、0实现(P304图5.28)

?特殊循环方式(课本上名字是按编码旋转优先权) 特点:该循环方式和优先级自动循环方式基本相同.不同 点仅在于可以根据用户要求(通过编程命令字)将最低优 先级赋予某一中断源. 使用环境:当IR0~IR7端引入的中断源有相同的优先级, 但是最低的优先级需要通过编程设定. 实现方法:通过将操作控制命令字OCW2的D7,D6位置为 1、1,同时用OCW2的D2~D0位指出哪个中断源的级别 最低(P304图5.28)

(2)结束中断处理的方式
当一个中断请求响应时,8259A都会在当前中断服务寄存 器中设置相应位ISRn,这样,为此后中断优先级裁决器的 工作提供了依据.当中断处理程序结束时,必须使ISRn位 清0,否则,8259A的中断控制功能就会不正常.这个使ISRn 位清0的动作就是中断结束处理.

?自动中断结束方式 特点:中断服务寄存器的相应位清零是由硬件自动完成的,当某一 级中断被CPU响应后,CPU送回第一个INTA*中断回答信号,该信 号使中断服务寄存器ISR的相应位置1,当第二个INTA*负脉冲结束 时,自动将ISR的相应位置0. 使用环境:中断自动结束方式只能适用于有一块8259A,并且各级中 断不会发生嵌套的情况.因为CPU响应中断的第二个INTA*信号就 使中断服务寄存器ISR的相应位置0,但该中断源的中断服务程序并 没有结束.在此时可能发生同级或低级的中断源申请,只要CPU的 中断是开放的,就可能响应同级或低级的中断响应. 实现方法:通过将初始化控制字ICW4的D1位设置为1实现.

?一般的中断结束方式 特点:该方式是通过用软件方法发一中断结束命令,使当 前中断服务寄存器中最高的置1位清0. 使用环境:使用一般的中断结束方式只能应用于优先权固 定方式下, 因为在优先权固定方式中,最高的ISRn位对应 了最后一次被响应和被处理的中断,也就是当前正在处理 的中断,所以,最高的ISRn位的复位相当于结束了当前正 在处理的中断. 使用方法:首先将初始化控制字ICW4的D1位清0,将它定 为正常中断结束方式,然后通过将工作命令字OCW2的 D7,D6,D5位设置为0,0,1,从而实现一般中断结束方式.

一般的中断结束方式能不能用于循环方式下呢?不能用 于优先级自动循环方式和优先级特殊循环方式.因为一 般中断结束方式的中断是尚未处理完的级别最高的中断. 若中断级别改变,会使整个中断过程混乱. 假设优先级顺序为: IR5>IR6>IR7>IR0>IR1>IR2>IR3 >IR4 中断嵌套顺序: IR4 IR1 IR7

?特殊的中断结束方式 特点:该方式也是通过软件方法发一中断结束命令,但同时用 软件方法给出结束中断的中断源是哪一级,使该中断源的中断 服务寄存器的相应位置0. 使用环境:用在优先权循环方式下,因为在方式下当前中断服 务寄存器无法自动确定当前正在处理的是哪一级中断,这时,就 要采用特殊的中断结束方式. 使用方法:首先将初始化控制命令字ICW4的D1位置0,定为正 常中断结束方式,然后通过将工作控制命令字OCW2的 D7,D6,D5位设置为0,1,1.D2,D1,D0位给出结束中断处理的中断 源号,使该中断源在中断服务寄存器中的相应位清0.

在级联方式下,不用中断自动结束方式,而要用非 自动结束方式.当CPU是在处理一个从片上的中 断时,结束中断前要执行两次结束中断命令.一次 是清从片的ISRn,另一次是清主片的ISRn.

(3)中断源的屏蔽方式

?普通屏蔽方式 特点:8259A的每个中断请求输入,都要受到屏蔽寄存器 中相应位的控制.若相应位为“1”,则中断请求不能送 CPU. 使用环境:当CPU执行主程序时,可以将不希望响应的中 断源屏蔽; 实现方法:工作控制字OCW1的响应位置1或置0,置1表示 该位对应的中断源被屏蔽,置0表示该位对应的中断源不 被屏蔽,用输出指令可把OCW1命令字写入中断屏蔽寄

?特殊屏蔽方式 特点:特殊屏蔽方式与普通屏蔽方式相似,也是利用中断屏蔽字对 各个中断请求进行屏蔽.但设置了特殊屏蔽方式后,再用OCW1对屏 蔽寄存器中的某一位进行置位时,就会同时使中断服务寄存器中的 对应位自动清零.这样,就不只屏蔽了当前正在处理的这级中断,而 且正在开放了其他级别较低的中断. 使用环境:有些场合下,希望一个中断服务程序的运行过程中,能动 态地改变系统中的中断优先级结构,即在中断处理的一部分,禁止低 级中断,而在中断处理的另一部分,又能够允许低级中断. 实现方法:在某级中断服务程序中首先将工作控制字OCW3的 D6,D5位置1,1,进入特殊屏蔽方式,然后通过设置控制字OCW1使该 级的中断申请被屏蔽.若想退出特殊屏蔽方式,通过将工作控制字 OCW3的D6,D5位分别设置为1,0,再执行输出指令即可.

(4)系统总线的连接方式
?非缓冲方式 特点:在单片8259A或片数不多的8259A组成的系统中, 8259A直接和数据总线相连. 实现方法:将8259A的初始化控制字ICW4的D3位置0,设置 为非缓冲方式.在非缓冲方式下,对于单片8259A的SP*/EN* 端为输入,接高电平,对于多片8259A的级连系统,主8259A的 SP*/EN*端接高电平,从8259A的SP*/EN*端接低电平. ?缓冲方式 特点:在多片8259A级连的大系统中,8259A通过总线驱动器 和数据总线相连. 实现方法:将8259A的初始化控制字ICW4的D3位置1,设置 为缓冲方式,并把8259A的SP*/EN*端输出一个低电平信号 作为总线驱动器的启动信号.

Intel 8259A的级连(缓冲方式)
系统数据总线

B7~B0 T 74LS245 OE A7~A0

B7~B0 T 74LS245 OE A7~A0

B7~B0 OE 74LS245 T A7~A0

DT/R

局部数据总线 +5V 1kΩ +5V 1kΩ +5V 1kΩ DEN SP/EN D7~D0 从控 B CAS2-0 INTA INT SP/EN D7~D0 从控 A CAS2-0 INTA INT SP/EN D7~D0 主控制器 INT IR5 IR6 INTA CAS2-0 INTR

INTA

(5)引入中断请求的方式

?边沿触发方式 特点:8259A将中断请求输入端出现的上升沿作 为中断请求信号 实现方法:使初始化控制字ICW1的D3位置0 ?电平触发方式 特点:中断请求端出现的高电平是有效的中断 请求信号 实现方法:使初始化控制字ICW1的D3位置1

使用环境:当系统中的中断源很多,超过64个时,则 可以使8259A工作在查询方式下.

实现方法:CPU先执行一条输出指令,对8259A发 出查询命令.查询命令是通过对OCW3的D2位置1 来实现的.查询命令发出后,执行一条输入指令,可 得到查询字.用查询字的D7位判断当前有无中断 请求,用W2,W1,W0位指出当前发出中断请求级 别最高的中断信号.

中断查询方式特点: ①中断源仍往8259A发中断请求,但8259A却不使 用INT信号向CPU发中断请信号. ②CPU内部的中断允许标志复位,所以CPU对INT 引脚上出现的中断请求呈禁止状态. ③CPU用软件查询的方法来确定中断源,从而实现 对设备的中断服务. 可见,中断查询方式,既有中断的特点,又有查询的 特点,从外设的角度来看,是靠中断的方式来请求 服务,但从CPU的角度来看,是用查询方式来确定 发中断请求的中断源.

4、Intel8259A的编程

(1)8259A寄存器的读写
(2)8259A的初始化编程 (3)8259A的工作编程

(1)8259A寄存器的读写

8259A内读写寄存器地址的区别
(1)利用读写信号区别写入的控制寄存器和读出 的状态寄存器 (2)由控制字中的标志位说明是哪个寄存器 (3)由芯片内顺序控制逻辑按一定顺序识别不同 的寄存器 (4)由前面的控制字决定后续操作的寄存器

8259A的编程
?初始化编程 ?8259A开始工作前,必须进行初始化编程 ?给8259A写入初始化命令字ICW ?工作编程 ?工作编程在8259A工作期间 ?可以写入操作命令字OCW将选定的操作传送给 8259A,使之按新的要求工作 ?还可以读取8259A的信息,以便了解它的工作状态

(2)8259A的初始化编程

? 初始化命令字ICW最多有4个,8259A在开始工作前必须写入. ? 必须按照ICW1~ICW4顺序写入 ? ICW1和ICW2是必须送的,ICW3和ICW4由工作方式决定

(1)ICW1:写入8259A偶地址端口,芯片控制初始化命令字. ICW1确 定8259A工作的环境:是否需要ICW4、中断控制器是单片还是多 片、请求信号的电特性. A0 D7 D6 D5 D4 D3 D2 D1 D0

0

×

×

×

1 LTIM × SNGL IC4
1要写ICW4

例:某8086/8088微机系统 中,使用单片8259A,中断申 请信号为上升沿触发,端口 地址为20H,21H,则其初始 化命令字ICW1应为 :00010011=13H,设置 ICW1的指令为: MOV AL,13H OUT 20H,AL

0不写ICW4 1单片 0多片级联

1高电平触发
0上升沿触发

特征位

(2)ICW2:写入8259A奇地址端口, ICW2用来指定8个中断请求的 类型码 A0 D7 D6 D5 D4 D3 D2 D1 D0

1

T7

T6

T5 T4

T3

×

×

×
不需编程 在响应时 由内部电路 自动填入 8086/8088系统中 中断矢量的高5位

进入中断 的引脚 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

D7 T7 T7 T7 T7 T7 T7 T7 T7

D6 T6 T6 T6 T6 T6 T6 T6 T6

D5 T5 T5 T5 T5 T5 T5 T5 T5

中断类型码 D4 D3 T4 T3 T4 T3 T4 T3 T4 T3 T4 T3 T4 T3 T4 T3 T4 T3

D2 0 0 0 0 1 1 1 1

D1 0 0 1 1 0 0 1 1

D0 0 1 0 1 0 1 0 1

例如,ICW2为20H,则8259A的8个中断对应的8个中断类型码为 20H,2lH,22H,23H,24H,25H,26H,27H. ICW2设为40H,则8个类型码为:40H,4lH,…47H, ICW2设为45H,则8个中断类型码仍为40H,41H…47H,因为40H和 45H的高5位均为01000 例:设PC机中8个可屏蔽中断(IR0~IR7)的类型号为08H~0FH,A0= 1,端口地址为2lH,则ICW2为:08H,即为IR0的类型号,设置ICW2的 指令为: MOV AL,08H OUT 21H,AL

(3)ICW3:写入8259A奇地址端口,级联控制命令字 ICW3用于8259A的级连,8259A最多允许有一片主片和8片从片级 连,使之能够管理的中断源可以扩充至64个.若系统中只有一片 8259A,则不用ICW3,若由多片8259A级连,则主、从8259A芯片,都 必须使用ICW3,主、从8259A芯片中的ICW3的使用方式不同. 对于主8259A芯片,ICW3的格式如下: A0 D7 D6 D5 D4 D3 D2 D1 D0

1

IR7 IR6 IR5 IR4 IR3 IR2

IR1 IR0
1有从片

对于从8259A芯片,ICW3的格式如下: A0 D7 D6 D5 D4 D3 D2

0没有从片

D1

D0

1

0

0

0

0

0

ID2

ID1 ID0
从片标识码

例:某8086/8088微机系统中,主片8259A的IR2/IR6引脚上分别接有 从片8259A,则主从片的ICW3初始化命令字设置如下: 主片初始化命令字:(端口地址设为20H,2lH) MOV AL,44H;44H(01000100)为主片的ICW3,表示其IR2/IR6上接 有从片 OUT 21H,AL;将ICW3写入奇地址端口 从片1的初始化命令:(设端口地址为35H) MOV AL,02H ;00000010 OUT 35H,AL 从片2的初始化命令:(设端口地址为37H) MOV AL, 06H ;00000110 OUT 37H,AL

(4)ICW4:写入8259A奇地址端口, ICW4用来确定中断处理的控制 方法:中断结束方式、嵌套方式、数据线缓冲等.

只有当ICW1中的D0=1时才需要设置
A0 D7 D6 D5 D4 D3 D2 D1 D0

1

0 0

0 SFNM BUF M/S AEOI uPM
0 8080/85系统

1特殊全嵌套

0一般全嵌套

非缓冲方式 0 × 缓冲/从片 1 0
缓冲/主片 1 1

1 8086/88系统 1自动EOI 0正常EOI

若在某种应用场合,正好需要ICW4各位都为0,则可以不写ICW4. 因为8259A在进入初始化时,已自动将ICW4全部复位.

① IR0~IR7 中断申请信号为上升沿触发方式; ② IR0~IR7 对应的中断类型号分别为08H~0FH; ③ 优先级一般嵌套方式;

④ 采用非自动结束方式,需向OCW2发EOI中断结束命令,
清除ISR中的记录。
A0 0 D7 × D6 × D5 × D4 1 D3 LTIM D2 × D1 SNGL D0 IC4

0
A0 1 A0 1 D7 T7

0
D6 T6

0
D5 T5

1
D4
T4

0
D3 T3

0
D2 ×

1
D1 ×

1
D0 ×

0
D7 0 0

0
D6 D5 0

0
D4

0

1
D3 BUF

0
D2 M/S

0
D1 AEOI

0
D0 uPM

SFNM

0

0

0

0

1

0

0

1

有关部分初始化程序如下: …… MOV AL,13H ;ICW1 OUT 20H,AL MOV AL,8 ;ICW2 OUT 21H,AL MOV AL,9 ;ICW4 OUT 21H,AL ……

试按照如下要求对8259A设定初始化命令字:8086 系统中只有一片8259A,中断请求信号使用电平触 发方式,全嵌套中断优先级,数据总线无缓冲,采用 中断自动结束方式.中断类型码为20H~27H,8259A 的端口地址为B0H和B1H. 答:ICW1=1BH (送B0H端口) ICW2=20H (送B1H端口) ICW4=03H (送B1H端口)

(3)8259A的工作编程
?在8259A的工作期间,CPU也可以通过工作命令字,实现 对8259A的操作控制或者改变工作方式,使之按新的要 求工作,或者实时读取8259A中某些寄存器的内容. ?8259A工作期间,可以随时接受工作命令字OCW ?OCW共有3个:OCW1~OCW3 ?写入时没有顺序要求,需要哪个OCW就写入那个OCW

(1)OCW1:屏蔽控制字,写入8259A奇地址端口(即A0=1) A0 D7 D6 D5 D4 D3 D2 D1 D0

1

M7

M6

M5

M4 M3

M2

M1

M0
1 屏蔽 0 不屏蔽

例:设OCWl=06H(00000110B),则表示IR1/IR2两个引脚上的中断申请被屏蔽,其 它的中断申请(IR0/IR3~IR7)则得到允许8259A编程指令为: MOV AL,00000110B ;OCWl屏蔽字 OUT 2lH,AL ;屏蔽字写入奇地址口的OCW1寄存器

(2)OCW2:中断结束和优先级循环控制命令字,写入8259A偶地址端口 主要功能:对8259A发中断结束命令,包括一般结束EOI和特殊结束 EOI;其次还可以控制中断优先权的循环.
优先级是否采 针对L2~L0 1-有效 用循环方式 0—无效 1—循环 0—非循环 用于指示OCW2是否 作为中断结束命令 1—非自动结束命令 0—自动结束命令 当SL=1时,三位的编码有 效

A0

D7

D6

D5 D4

D3

D2

D1

D0

0

R

SL EOI

0

0
IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

L2
0 0 0 0 1 1 1 1

L1
0 0 1 1 0 0 1 1

L0
0 1 0 1 0 1 0 1

特征位

(2)OCW2:R/SL/EOI位置的说明

A0

D7

D6

D5 D4

D3

D2

D1

D0

0

R

SL

EOI

0

0

L2

L1

L0

特征位

0 0 1 1 0 1 1 0

0 1 0 0 0 1 1 1

1 1 1 0 0 1 0 0

一般中断结束命令 特殊中断结束命令 一般中断结束命令,优先级自动循环方式 设置优先级自动循环方式 取消优先级自动循环,按全嵌套方式工作 设置特殊中断结束命令,按优先级自动循环方式工作 设置优先级特殊循环 无操作

R SL EOI 1 0 1 普通EOI循环命令.当中断处理结束,8259A接收到普通EOI循环命 令后,一方面将ISR寄存器中当前优先级最高的置1位清0,另一方面 将最低优先级赋给这个刚结束的中断请求Iri,将最高优先级赋给中 断请求Iri+1,其它中断请求的优先级按循环方式依次改变. 1 1 1 特殊EOI循环命令. 当中断处理结束,8259A按收到特殊EOI循环命 令后,将ISR寄存器中的L2,L1,L0字段指定级别的相应位清0,并将 最低优先级赋给这一中断请求,将最高优先级赋给中断请求Iri+1, 其它中断请求的优先级按循环方式依次改变. 0 1 1 特殊EOI命令.当中断处理结束时,8259A接收到特殊命令后,将使 ISR寄存器中的L2,L1,L0字段指定级别的相应位清0. 0 0 1 普通EOI命令.普通EOI命令是在中断服务结束时由CPU向8259A 发出的,8259A接收到此操作命令后,将使ISR寄存器中当前优先级 最高的置1位清0. 0 0 0 1 0 0

例:若使8086系统中8259A的优先级顺序为IR3/ IR4/ IR5/ IR6/ IR7/ IR0/ IR1/ IR2,试编写一段程序实现该优先顺序,设8259A的偶地址 为20H. 根据题意要求,为实现上述优先级顺序,应先确定OCW2,然后将它写 入8259A的偶地址端口: MOV AL,C2H ;OCW2(11000010) OUT 20H,AL ;把OCW2写入8259A的偶地址端口

(3)OCW3:屏蔽和读状态控制命令字,写入8259A偶地址端口 它的功能(1)设置和清除特殊屏蔽方式 (2)设置中断查询方式 (3)读8259A的状态(IRR和ISR) A0 D7 D6
MSMM

D5 D4
SMM

D3

D2

D1

D0

0

×

0

1

P

RR RIS
0
0 1 1

特征位

0
无用
清除特殊屏蔽 设置特殊屏蔽

0
1 0 1

0
1 0 1 无用
随后读IRR
随后读ISR

0 1 1

1 查询命令

0 非查询

怎样来实现中断查询方式? 例:假如8259A的IR2输入引脚上有中断申请,但此时 8088CPU内部的中断允许标志IF=0,8088CPU应如何知 道其8259A的IR2输入引脚上有中断请求? 为使8088CPU知道其IR2引脚上有中断申请,可用中断查 询方式来解决(即CPU先发一个查询命令OCW3,然后读 8259A的查询字),其程序如下:

什么是中断查询字?
A0 D7 D6 D5 D4 D3 D2 D1 D0

0

I

×

×

× ×

W2

W1

W0

1 本片8259A有中断请求 0本片8259A没有中断请求

W2~W0的编码 表明当前中断请求的 最高优先级

举例:优先级的次序为IR3、IR4 、 IR5 、 IR6 、 IR7 、 IR0 、 IR1 、 IR2,而当前在IR4和IR1引脚上有中断请求,那么,CPU执行如下指令后的 结果: MOV AL,0CH OUT 20H,AL IN AL,20H

A0

D7

D6

D5 D4

D3

D2

D1

D0

0

I

×

×

× ×

1

0

0

读8259A相关寄存器的内容.设8259A的端口地址为20H、21H,请读入 IRR、ISR、IMR寄存器的内容,并相继保存在数据段2000H开始的内 存单元中;若该8259A为主片,请用查询方式,查询哪个从片有中断请求.
解: MOV AL,00001010B OUT 20H,AL IN AL,20H MOV [2000H],AL MOV AL,00001011B OUT 20H,AL IN AL,20H MOV [2001H],AL IN AL,21H MOV [2002H],AL DONE:MOV AL,00001100B OUT 20H,AL IN AL,20H TEST AL,80H JZ DONE AND AL,07H ………… ;发OCW3,欲读取IRR的内容
;读入并保存IRR的内容 ;发OCW3,欲读取ISR的内容 ;读入并保存ISR的内容 ;读入并保存IMR的内容 ;发OCW3,欲查询是否有中断请求 ;读入相应状态,并判断最高位是否为1

;判断中断源的编码

5.3.3 Intel 8259A的应用 1、8259A在微机系统(PC/XT)中的使用

(1)8259A的初始化程序
①IR0~IR7 中断申请信号为上升沿触发方式 ②IR0~IR7 对应的中断类型号分别为08H~0FH ③优先级IR0最高,IR7最低 ④采用非自动结束方式,需向OCW2发EOI中断结束命令, 清除ISR中的记录
有关部分初始化程序如下: …… MOV AL,13H ;ICW1 OUT 20H,AL MOV AL,8 ;ICW2 OUT 21H,AL MOV AL,9 ;ICW4 OUT 21H,AL MOV AL,0FFH;OCW1 OUT 21H,AL ……

A0 0

D7 ×

D6 ×

D5 ×

D4 1

D3 LTIM

D2 ×

D1 SNGL

D0 IC4

0
A0 1 A0 1 D7 T7

0
D6 T6

0
D5 T5

1
D4
T4

0
D3 T3

0
D2 ×

1
D1 ×

1
D0 ×

0
D7 0 0

0
D6 D5 0

0
D4

0

1
D3 BUF

0
D2 M/S

0
D1 AEOI

0
D0 uPM

SFNM

0

0

0

0

1

0

0

1

(2)中断矢量表的修改和保存

[例]修改中断类型号为60H的中断,设中断服务子程 序的名为INTR. 分析: 方法1:利用AH=25H的DOS系统功能调用 方法2:利用串传送指令STOSW
入口参数
功能号 类型号 出口参数 实现功能

AL = 要设置向量的中断类型号N DS:DX = 中断子程的入口地址(中断向量) AH = 25H 21H 无 将类型N的中断向量设置在向量表中, 即 (0:N×4)=类型N中断子程入口地址的偏移值 (0:N×4+2)=类型N中断子程入口地址的段值

方法1的程序
PUSH MOV MOV MOV MOV MOV INT POP DS DX,OFFSET INTR AX,SEG INTR DS,AX AH,25H AL,60H 21H DS

方法2的程序
CLI SUB MOV MOV MOV CLD STOSW MOV STOSW STI AX,AX ES,AX DI,4*60H AX,OFFSET INTR

AX,SEG INTR

若被修改的矢量是DOS系统中已经定义的中断类型, 则在用户程序结束前,应该恢复原来的中断矢量,否则 后续其他程序调用该类型时可能出错.因此在装入用 户中断矢量前,要先将系统原来的矢量取出保护起来.

入口参数 功能号 类型号 出口参数 实现功能

AL = 要保存向量的中断类型号N AH = 35H 21H BX = (0:N×4) ES = (0:N×4 +2) 将类型号N的中断向量保存在ES、BX中

例如用户要修改定时中断INT 1CH的矢量,在程序开 始保护DOS原来INT 1CH的中断矢量,最后在程序结 束前又恢复之.

DATA SEGMENT KEEP_CS DW 0 KEEP_IP DW 0 …… DATA ENDS CODE SEGMENT …… ;程序开始时 MOV AH,35H MOV AL,1CH INT 21H MOV KEEP_IP,BX MOV KEEP_CS,ES ;用户程序修改矢量 PUSH DS MOV DX,OFFSET INTR MOV AX,SEG INTR MOV DS,AX MOV AH,25H MOV AL,60H INT 21H POP DS

;用户调用INT 1CH自己的 中断服务程序 INT 1CH ;程序结束前 PUSH DS MOV DX,KEEP_IP MOV AX,KEEP_CS MOV DS,AX MOV AH,25H MOV AL,60H INT 21H POP DS

中断控制系统的总结
(1)中断的概念 (2)8086中断系统的分类 (3)中断的响应过程 (4)中断向量,中断向量表 (5)8259A中断控制器 编程结构 工作过程 工作方式 编程(初始化编程和工作编程)

作业
1、5-1,5-10

5.4计数定时接口
5.4.1基本概念 5.3.2可编程计数/定时器Intel8253
1、8253的编程结构、引脚和工作原理 2、8253的工作方式 3、8253的编程

5.3.3Intel 8253的应用

5.4.1基本概念

系统中具有两个时钟:一个是保存在CMOS中的实时钟, 它由后备电池供电,里面保存有时、分、秒、年、月、 日信息;另一个是保存在内存BIOS数据区的日时钟,它保 存在内存里的0046CH和0046EH单元.它在系统每次启 动时由系统根据CMOS实时钟进行初始化,然后,每隔 55ms,由8253引发执行INT 08H中断时,使日时钟的计数 值增加1,系统的一些操作,例如获取当前系统时间、文件 存盘时存盘时间的确定等,都是依靠读取日时钟来确定 的.读写时钟的方式主要有以下几种: (1)使用DOS的TIME命令 (2)使用BIOS中断INT 1AH (3)对内存046CH和046FH单元的读写 (4)使用DOS功能调用21H的2CH和2DH (5)使用gettime()和settime()函数

定时与计数的基本概念
(1)定时 在计算机里经常要用到定时信号.例如日期时钟、 动态存储器的刷新定时、在实时控制系统中的定 时采样、定时显示刷新等都需要定时器. (2)计数 在生产线上对零件和产品的计数; 对大桥和高速公路上的车流量的统计等等. (3)定时与计数的关系 定时的本质就是计数,当计数信号是周期信号时, 计数就可以用于定时.例如以秒为单位计数,则计 数60次就是1分,计满60分就是1小时,计满24小时 就是1天.

实现定时的三种方法
(1)软件方法:采用软件定时,让计算机执行一个专门的指 令序列,由执行指令序列中每条指令所花费的时间构成 一个固定的时间间隔,从而达到定时或延时的目的.但由 于延时实际是通过浪费CPU执行时间来实现的,所以降 低了CPU的利用率.在实际应用中用的较少. (2)不可编程的硬件定时:采用时基电路555,通过外接定 时部件(电阻和电容)来实现定时.这样的定时电路简单,通 过对电阻、电容值的改变,可以在一定范围内调整定时 的时间值.但这种定时器一旦将电路连好后,定时值就不 能由程序来进行修改,即不可编程. (3)可编程的硬件定时:这种定时器可以通过软件来对定 时时间进行修改,但定时是通过硬件来完成,以中断的方 式通知CPU,因此功能强、使用灵活.如:Intel 8253/8254,Zilog CTC,MC6840等.

5.3.2可编程计数/定时器Intel8253
1、8253的编程结构、引脚和工作原理
?数据总线缓冲器 控制字、写入的通道 计数值和读出的通道 计数值 ?读、写控制逻辑 用A0和A1两根地址 线来寻址4个端口 ?控制字寄存器 ?计数器0、计数器1 和计数器2 16位的可预制值的减 法计数器

(1)OUT引脚:输出信号,根据8253 计数器的不同工作方式,在计数过 程中其OUT端的电位发生变化, 产生需要的波形. (2)GATE门控信号,用于控制计数 的进行.多数情况下,GATE=1时允 许计数,GATE=0时中止计数.但有 时仅用GATE信号的上升沿启动 计数过程,以后即使GATE信号变 为零也不中止计数. (3)CLK外部时钟计数脉冲,计数 器用其下降沿作减1计数,其上升 沿也会对其他信号进行选通或采 样.

计数启动
软件启动:直接由程序指令来启动
软件启动的过程: (1)处理器写入8253的计数初值只是写入了计数初值寄存器,之后到 来的第一个CLK输入脉冲(需先由低电平变高,再由高变低)才将计数 初值寄存器的初值送到减1计数器. (2)从第二个CLK信号的下降沿,计数器才真正开始减1计数. 因此从输出指令写完计数初值算起到计数结束实际的CLK信号个数比 编程的计数初值N要多一个,即(N+1)个,凡是用软件启动时都有这种 误差.

硬件启动:外部电路信号启动
硬件启动的过程: 写入计数初值后,并未启动计数,需要门控信号GATE变成高电平,再经 CLK信号的上升沿采样,随后的CLK下降沿才开始使计数器减1.由于 GATE和CLK信号不一定同步,所以在极端的情况下,从GATE变高到 CLK采样之间的延时也可能经历了一个CLK信号的宽度,因此也会产生 计数初值和实际计数之间的误差.

软件启动

硬件启动

2、8253的工作方式

方式0-计数结束发中断请求 方式1-可编程单脉冲 方式2-速率发生器 方式3-方波发生器 方式4-软件触发选通 方式5-硬件触发选通

方式0-计数结束发中断请求

?启动计数方式:软件 ?中止计数:GATE=0 ?自动重复:无 ?更新初值:立即有效 ?OUT波形:

方式1-可编程单脉冲

?启动计数方式:硬件 ?中止计数:无 ?自动重复:无 ?更新初值:下一轮有效 ?OUT波形:

方式2-速率发生器

?启动计数方式:软/硬件 ?中止计数:GATE=0 ?自动重复:有 ?更新初值:下一轮有效 ?OUT波形:

方式3-方波发生器

?启动计数方式:软/硬件 ?中止计数:GATE=0 ?自动重复:有 ?更新初值:下半轮有效 ?OUT波形:

方式4-软件触发选通

?启动计数方式:软件 ?中止计数:GATE=0 ?自动重复:无 ?更新初值:立即有效 ?OUT波形:与方式2?

方式5-硬件触发选通

?启动计数方式:硬件 ?中止计数:无 ?自动重复:无 ?更新初值:下一轮有效 ?OUT波形:与方式2、4?

8253工作方式总结

总结: (1)方式2、4、5的输出波形是相同的,都是宽度 为一个CLK周期的负脉冲. ? 但方式2是连续工作 ? 方式4由软件启动 ? 方式5由硬件启动 (2)写入计数值后才能开始计数 ? 方式0、2、3、4在写入计数值后,计数过程就开 始了. ? 方式1、5需要外部触发启动,才开始计数 (3)6种方式中只有方式2、3是连续计数,其他4 种方式都是一次计数,要继续工作需要重新启动, 方式0、4由写入计数值(软件)启动,方式1、5要由 外部信号(硬件)启动.

各种工作方式的用途
①当用做计数器时(测量输入CLK的脉冲个数或 频率),工作于模式0或4.通常将门控信号GATE接 高电平,用软件启动计数器计数. ②当用做定时器或信号发生器时,工作于模式2或3. 通常将门控信号GATE接高电平,用软件启动计数 器工作.定时到输出信号OUT用做中断申请信号 或信号发生器输出.

3、8253的编程

(1)写控制字 (2)写计数初值 (3)读取计数值

(1)写控制字
D7 D6 D5 D4 D3 D2 D1 D0
数制 0二进制
00计数器0 01计数器1 10计数器2 11非法 00计数值锁存 10只读/写高字节 01只读/写低字节 11读/写两个字节 先是低字节 后是高字节 1十进制

计数器

操作

工作方式

000方式0 001方式1 ×10方式2 ×11方式3 100方式4 101方式5

计数的范围
?选择二进制时
?计数值范围:0000H~FFFFH ?最大次数为65536

?选择十进制(BCD码)
?计数值范围:0000~9999 ?最大次数为10000

(2)写计数初值

初始化编程顺序:对于每个计数通道进行初 始化时,必须先写入控制字,然后写入计数初 值.这是因为计数初值的写入格式是由控制 字的D5和D4两位编码决定的.写入计数初值 时,必须按控制字规定的格式写入.

例1:若用8253的计数通道1,工作在方式0,按8位二 进制计数,初值为128,试编写初始化程序,设口地址 为40H~43H. 解:控制字为01010000=50H,8位计数初值为80H MOV AL,50H;设置通道1控制字 OUT 43H,AL MOV AL,80H ;写通道1计数初值,只写低8位 OUT 41H,AL

例2:若用8253通道1,工作在方式1,按十进制计数, 计数初值为2010,端口地址同上,试编写初始化程 序.

解:通道控制字为01110011=73H,计数初值高8位为 20,低8位为10. MOV AL,73H;写通道1控制字 OUT 43H,AL MOV AL,10H;写通道1计数初值低8位 OUT 41H,AL MOV AL,20H;写通道1计数初值高8位 OUT 41H,AL
当执行完上述程序后,8253通道1工作于方式1.经 GATE上升沿触发后,输出产生一宽度为2010个 CLK周期的负脉冲.

(3)读取计数值 ①CPU读取当前计数值时,是读出的输出锁存器 OL中的值; ②如果是8位计数,则只需读一次;如果是16位计数 ,则需读两次,先读低8位,后读高8位. ③读计数器当前值时,计数器并未停止计数.有可 能在先后读高低字节时,计数器的值发生变化,因 此有必要先锁存当前值,再分字节读出.可以通过 对计数器写入一个D5D4=00的控制字发出锁存命 令字(SC1SC000XXXX),计数器的当前值就被锁存 到一个16位的输出锁存器中.此时计数器照常计 数,但锁存器中的值不变化.待CPU将锁存器中的 两字节值都读走后,锁存器的内容又随计数器变 化.

读取计数值的方法:读之前先送计数值锁存命令 例如,要求读出并检查2#计数器(设2#计数器的地址为 42H)的计数值是否为“55AAH”若非“55AAH”则等待 再读,当为“55AAH”后程序可继续执行,则程序片断如下:
LPCN:MOV AL,10000100B;对2#计数器送锁存命令 OUT 43H,AL IN AL,42H ;读2#计数器当前计数 MOV AH,AL ;低8位暂存AH中 IN AL,42H ;读高8位 XCHG AH,AL ;16位计数值存AX CMP AX,55AAH ;计数值写55AAH相比较 JNZ LPCN ;若不相等则继续等待

5.3.3Intel 8253的应用

(1)8253在IBM PC/XT系统中的应用 (2)8253用于脉冲发生器 (3)8253用于计数

(1)8253在IBM PC/XT系统中的应用

(1)计数器0 工作方式3,定时55ms,计数初值为65536 (2)计数器1 工作方式2,定时15.6?s,计数初值为18 (3)计数器2 工作方式3,频率发生器,输出频率894HZ,计数初 值为1331(0533H)

①定时中断(计数器0)用8253实现日时钟
8253工作在方式3下,其输出是一个周期准确的方波,可以作为定时 单位.如CLK0=1. 1931816MHz,初值为最大值65536,则计数器0输 出的方波频率为f0= 1. 1931816MHz/65536=18.2Hz,周期为 T0=54.945ms 1天=24×60 ×60 ×1000ms/54.945ms=1572482=17FE82H =0017FE82H;即计满1572482个计时单位,就是1天.同理计满65520 是1个小时,计满1092就是1分钟,计满18.2就是1秒钟. 具体做法是8253的OUT0输出连到8259的IR0上.8253输出的方波 每隔54.945ms申请一次中断,在中断服务程序中做双字变量的加1 操作.当低字计到65536时,向高字进位,直至高字计到0017H,低字 计到FE82H,就计到24小时.然后清零开始第二天的计时.其硬件连 接如图7.19所示.图中在内存开辟了两个字单元,低字TIMERLO(40H:6CH)和高字TIMER-HI(40H:6EH).

系统中具有两个时钟:一个是保存在CMOS中的实时钟, 它由后备电池供电,里面保存有时、分、秒、年、月、 日信息;另一个是保存在内存BIOS数据区的日时钟,它保 存在内存里的0046CH和0046EH单元.它在系统每次启 动时由系统根据CMOS实时钟进行初始化,然后,每隔 55ms,由8253引发执行INT 08H中断时,使日时钟的计数 值增加1,系统的一些操作,例如获取当前系统时间、文件 存盘时存盘时间的确定等,都是依靠读取日时钟来确定 的.读写时钟的方式主要有以下几种: (1)使用DOS的TIME命令 (2)使用BIOS中断INT 1AH (3)对内存046CH和046FH单元的读写 (4)使用DOS功能调用21H的2CH和2DH (5)使用gettime()和settime()函数

计数器0的特点
?计数器0:方式3,计数值:65536,输出频率为 1.19318MHz÷65536=18.206Hz的方波 ?门控为常启状态,这个方波信号不断产生 ?OUT0端接8259A的IRQ0,用作中断请求信号 ?每秒产生18.206次中断请求,或说每55ms(54.925493ms) 申请一次中断 ?DOS系统利用计数器0的这个特点,通过08号中断服务 程序实现了日时钟计时功能.

对CNT0初始化:计数器0的初始化 MOV AL,36h ;计数器0为方式3,采用二进制计数, ;先低后高写入计数值 OUT 43H,AL ;写入方式控制字 MOV AL,0 ;计数值为0 OUT 40H,AL ;写入低字节计数值 OUT 40H,AL ;写入高字节计数值

②定时刷新(计数器1)

?需要重复不断提出刷新请求:门控总为高,选择 方式2 ?2ms内刷新128次,即15.6?s刷新一次:
计数初值为18=15.6×1.1931816

对CNT1初始化:计数器1的初始化 MOV AL,54H ;计数器1为方式2,采用二进制计数,只写低8 位计数值 OUT 43H,AL;写入方式控制字 MOV AL,18 ;计数初值为18 OUT 41H,AL;写入计数值

③扬声器的控制(计数器2)

?计数器2的输出控制扬声器的发声音调; ?计数器2只能工作在方式3,才能输出一定频率的方波, 经滤波后得到近似的正弦波,进而推动扬声器发声; ?扬声器还受控于并行接口(8255芯片) ?必须使PB0和PB1同时为高电平,扬声器才能发出预先 设定频率的声音.

对CNT2初始化:计数器2的初始化 MOVAL,0B6H OUT 43H,AL MOV AX,1331 OUT 42H,AL MOV AL,AH OUT 42H,AL

例5.1:下面的程序利用CNT2 控制扬声器发出500Hz的声 音,直至键盘上有任意键按下 为止.
DATA SEGMENT TABLE DW 2380 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX

MOV AL,0B6H OUT 43H,AL MOV AX,TABLE OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H PUSH AX OR AL,3 OUT 61H,AL MOV AH,1 INT 21H POP AX OUT 61H,AL RET MAIN ENDP CODE ENDS END START

(2)8253用于脉冲发生器
如图所示,产生重复周期为5? s,脉冲宽度为1? s的输出脉冲. 设时钟CLK的频率为2MHz.

解:设想用计数器1作速率发生器(工作于方式2),以决定 脉冲信号的周期.计数器0作可编程单脉冲(工作于方式1), 用于决定脉冲的宽度.计数器1的输出接至计数器0的 GATE0,用作单稳的触发信号.由于CLK的周期T=0.5? s, 所以计数器1的初值设为10,即10分频,输出OUT1是周期 为5 ? s的,脉冲宽度为0.5? s信号.计数器0的计数初值设定 为2,使其输出信号负脉冲的宽度为1 ? s,再经反相后即为 所要求的脉冲信号.设8253的端口地址为40H~43H,具体 编程如下: MOV AL, 00010011B;设置控制字,计数器0为方式1 OUT 43H,AL ;只写低8位,BCD计数 MOV AL, 2H ;设置计数器0的计数初值为2 OUT 40H,AL MOV AL,01010101B;计数器1为方式2,只写低8位 OUT 43H,AL ;BCD计数 MOV AL, 10H ;设置计数器1的计数初值为10 OUT 41H,AL

(3)8253用于计数
下图是用8253监视的一个生产流水线示意图,每通过50 个工件扬声器响5秒钟,频率为2000Hz.

分析: ①计数器0工作于方式2分频方式,每隔50个CLK0产生一 个中断INT;方式控制字为:00010101B(15H),即方式2,只 装低8位,BCD数制,初值为50(H). ②计数器1工作于方式3方波方式,产生2000Hz喇叭音调, 方式控制字为:01110111B(77H),即方式3,先低后高,BCD 数制; 初值(分频比)=(1.4×106)/2000=700(H)。

主程序段:MOVAL,15H;置计数器0方式 OUT 43H,AL MOV AL,50H;装初值 OUT 40H,AL IN AL,63H;关8255的PC0 AND AL,FEH OUT 63H,AL MOV AL,77H;置计数器1方式 OUT 43H,AL MOV AL,00H;装初值 OUT 41H,AL MOV AL,07H OUT 41H,AL STI LOP:HLT JMP LOP

中断服务程序: INTP:IN AL,63H ;开8255的PC0 OR AL,01H OUT 63H,AL CALL DLY5S;调5S延迟子程序 IN AL,63H;关8255的PC0 AND AL,FEH OUT 63H,AL IRET

5.5并行输入输出接口
5.5.1可编程并行接口Intel 8255A
1、Intel 8255的引脚和结构 2、Intel 8255的工作方式 3、Intel 8255的编程

5.5.2Intel 8255A的应用

并行通信与串行通信
?通信:指计算机与外设、计算机与计算机间的 信息交换 ?通信的基本方法:并行通信和串行通信 ?并行通信:将数据的各位同时在多根并行传输 线上进行传输.数据的各位同时由源到达目的地. 适合近距离、高速通信.

?串行通信:将数据的各位按时间顺序依次在一 根传输线上传输.数据的各位依次由源到达目的 地.串行通信适于长距离、中低速通信.

并行接口
实现并行通信的接口称为并行接口.一个并行接 口可设计为输入接口,负责输入信息;也可以设计 为输出接口,负责输出信息,此外,还可以设计成输 入/输出接口,既可以负责输入又可以负责输出的 接口,这也就是所谓的双向通信接口,例如,在计算 机系统中连接打印机的接口是输出接口;连接磁 盘驱动器的接口是双向通信接口.

并行接口的实现方法
(1)不可编程的接口芯片构成简单的并行接口:8位 双向三态缓冲驱动器74LS245,8位三态数据锁存 器74LS373等.用于CPU与外设之间不需要联络信 号的并行数据传输,如开关量信号的读取、LED 发光管的控制等. (2)可编程的接口芯片构成并行接口: Intel 8255A. 在实际应用中,大多数输入/输出外设与CPU之间 交换的数据是一系列连续的数据,在前一个数据 发送或接收以后才能传送下一个数据.因此,并行 接口中必须带有自己的应答信号,为可编程接口.

典型的可编程并行接口和外设的连接

5.5.1可编程并行接口Intel 8255A
1、Intel 8255的引脚和结构

?40引脚双列直插,+5V,24条 可编程I/O引脚 ?主要引脚: (1)PA0~PA7、 PB0~PB7、 PC0~PC7:A、B和C口I/O数 据(2)D7~D0:系统数据线 (3)CS:片选信号 (4)RD和WR:读、写信号 (5)RESET:复位线,复位造成 的结果是把所有内部寄存器 清0,且三个数据端口被自动 设置为输入端口. (6)A1、A0:地址信号线

端口A,B,C的介绍
?端口A有 3 种工作方式( 方式 0、方式 1、方式 2);端口

B有2种工作方式( 方式 0、方式 1);端口C有1种工作方式 (方式 0). ?当端口A在方式1或方式 2、端口B在方式1时,端口C的 某些位用于传送联络信号,以适应CPU与外设间的各种 数据传送方式的要求,如查询传送的应答信号、中断传 送的中断申请信号等; ?控制端口的内容决定A口、B口、C口的工作状态(输入 或输出)和工作方式(方式 0、1、2),起控制作用.

Intel 8255A的读写信号

2、Intel 8255的工作方式
?方式0:基本输入或输出方式,即无须专用的联络信

号就可直接进行的I/O.在此方式下,A口、B口、C口 的高4位和低4位可以分别设置成输入或输出. ?方式1:选通输入输出方式,此时接口和外设之间须 经过专用联络信号的协调才能传送.只有A口和B口可 工作于方式1.此时C口的某些线被规定为A口或B口 与外设间的专用联络信号线,余下的C口线只具有基 本I/O功能. ?方式2:双向传送方式,只有A口可工作与此方式,即A 口可以接双向I/O设备,既可以输入也可以输出.此时 C口有5条I/O线被规定为A口和外设之间的专用双向 传送联络线.C口剩下的3条线可以作为B口方式1的联 络线,也可以作为和B口一起成为方式0的I/O线.

Intel 8255A的方式控制字
D7 1 D6 D5 D4 D3 D2 D1 D0 0 输出 PC3~PC0 1 输入 B口 0 输出 1 输入 B口工作方式 PC7~PC4 A口 0 输出 1 输入 00 方式0 A口工作方式 01 方式1 1x 方式2 特征位,D7=1表示是方式控制字 0 输出 1 输入 0 方式0 1 方式1

端口A

方式0

输入

端口B

方式1

输出

端口C(上半部) PC7~PC4 输出

端口C(下半部) PC3~PC0 输入 方式选择控制字:10010101
方式选择控制字送控制口的程序:

MOV AL,95H
OUT 0FBH,AL

Intel 8255A的C口位控制字
8255A的C口具有位控功能,即允许CPU用输出指 令单独对C口的某一位写“1”或“0”.这是通 过向8255A的控制寄存器写(注意不是直接对C口 写).A口及B口的中断允许位就是通过C口位控制 字来设置的.

D7 0

D6

D5

D4

D3

D2

D1

D0 0 复位 设置内容 1 置位

无意义

选择设置位

特征位,D7=0 表示是C口按位 置位/复位控制字

D3 0 0 0 0 1 1 1 1

D2 0 0 1 1 0 0 1 1

D1 0 1 0 1 0 1 0 1

设置位 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7

若要使C口的D3置位,控 制字为:00000111

送该控制字的程序:
MOV AL,07H

OUT 0FBH,AL

工作方式0—基本的输入/输出方式
在这种工作方式下,A、B和C口都可以由程序规 定为输入或输出.方式0的特点如下: ①任何一个端口可作为输入、输出口,各端口之 间没有规定的联系. ②在0方式下,有两个8位和两个4位并行口,共有16 种不同的使用组态.

方式0的使用场合:直接程序控制(同步传送)和查 询式传送
①在同步传送时,发送方和接收方是在同一个时钟信号 管理下完成的,所以,双方都知道对方完成的动作,不需其 它应答信号.这样,三个端口:A端口、B端口、C端口都可 独立地作为8位的并行输入或输出端口使用. ②对于查询方式输入/输出,需要有应答信号.在方式0中, 没有任何端口有规定的应答信号.这就需要用C端口的高 四位和低四位分别作为输入和输出口使用,传输CPU和 外设的某些状态信息,供对方查询,配合A端口或B端口工 作.这些状态信息要由程序员在程序中用指令改变C口某 些位的值来形成.

工作方式1—选通输入输出方式
在这种方式下,端口A和端口B进行输入/输出传输 时,必须利用端口C提供的选通信号和应答信号, 而且这些信号与端口C中的位之间有着固定的对 应关系,这种关系不是软件可以改变的.方式1的特 点如下: ①端口A或端口B可分别为两个8位的输入或输出 口工作于方式1. ②端口C中有三位用于端口A的输入/输出控制,三 位用于端口B的输入/输出控制,并且提供中断逻辑. ③若只有一个数据端口工作在方式1,那么另一个 数据端口及端口C余下的五位可工作于方式0;若 两个数据端口都工作于方式1,那么端口C余下的 两位仍由程序指定作为输入或输出位,也可进行 置位/复位操作.

工作方式1输入的控制字及信号

STB*:选通信号,输入,低电平有效,8255A接 收外设送来的一个8位数据. IBF:输入缓冲器满信号,输出,高电平有效,它 是一个8255A送给外设的联络信号.当其为 高电平时,表示外设的数据已送进输入缓冲 器中.但尚未被CPU取走,通知外设不能送新 数据;只有它变为低电平时,即CPU已读取数 据,输入缓冲器空时,才允许外设送新数 据.IBF信号由STB*的前沿使其置位,而由读 信号RD*的上升沿使其复位. IBF的意义有两个,其一是通知外设暂不要 送数,其二是供CPU查询.

INTR:中断请求信号,输出,高电平有效.它是 8255A的一个输出信号.用于向CPU发出中断 请求.在中断允许INTE=1且IBF=1的条件下, 由STB*信号的后沿产生,可接至中断管理电 路8259A作为中断请求.CPU响应中断后在服 务程序中读走数据时,由读信号RD*的下降 沿将INTR置为低电平. INTE:中断允许位.INTE=1允许中断请 求,INTE=0禁止中断请求,可事先用位控方式 写.

以端口A为例,在方式1输入时的具体工作过 程可归结如下:
(1)CPU通过执行OUT指令送“方式选择控制字” 到8255A,设定端口A的工作方式为“方式1输入”, 接着送“端口C按位置1/置0控制字”,使PC4=1, 于是INTEA1,允许端口A的请求中断. (2)当外设的选通信号STBA*有效时,来自外设的 数据被装入8255A输入缓冲器,然后使IBFA=1. (3)在INTEA=1,IBFA=1,STBA*=1,使INTRA由0 变为1,端口A向CPU发中断请求信号. (4)CPU响应中断,进入中断服务程序,通过执行IN 指令对端口A进行读操作,将端口A中的数据读入 CPU.

工作方式1的输入时序

工作方式1输出的控制字及信号

OBF*:输出缓冲器满信号,低电平有效,它是 8255A输出给外设的一个控制信号.当其有 效时,表示CPU已经把数据输出给指定的端 口,通知外设把数据取走.它是由写信号 WR*的上升沿置成有效,而由ACK*信号的 有效电平使其恢复为高电平. ACK*:外设响应信号,低电平有效.当其有效 时,表明CPU通过8255A输出的数据已经由 外设接受.它是对OBF*的回答信号.

INTR:中断请求信号,高电平有效.它是 8255A的一个输出信号.用于向CPU发出中 断请求.是ACK*信号的后沿在INTE=1且 OBF*=1的条件下产生中断.写信号WR*的 上升沿使其变为低电平. INTE:中断允许位. INTE=1允许中断请 求,INTE=0禁止中断请求,可事先用位控方 式写.

以端口A为例,在方式1输出时的具体工作过程可归结如下: 1、CPU通过执行输出指令送“方式选择控制字”到8255A,设定端 口A的工作方式为“方式1输出”.接着送“端口C按位置1/置0控制 字”,使PC6=1,于是INTEA=1,端口A处于中断允许状态.由于此时 CPU还未向端口A写入数据,因此OBFA*=1且外设的响应信号 ACKA*也为1.在这种条件下 (INTEA=1,OBFA*=1,ACKA*=1),INTRA输出端由低变高,端口A向 CPU发出中断请求信号. 2、CPU响应端口A的中断请求,通过执行输出指令(WR*有效)将数 据写入端口A.在写信号WR*的后沿的作用下,使OBFA*=0,通知外 设把数据取走,同时清除端口A的中断请求,使INTRA=0. 3、外设取走数据,发出回答信号ACKA*=0,在ACKA*信号有效电 平的作用下,使OBFA*=1. 4、在ACKA*有效信号结束之后(即ACKA*=1),又具备了产生中断 请求信号的条件(INTEA=1,OBFA*=1,ACKA*=1),于是使INTRA输 出端由低变高,端口A再次向CPU发出中断请求,要求输出新的数据, 从而开始一次新的数据输出过程.

工作方式1的输出时序

工作方式2—双向输入输出方式
这种方式只适用于端口A.在此方式下,在PA7~PA0 的8位数据线上,外设既可从8255A获取数据,又可 向8255A发送数据.此外,与工作方式1类似,端口C 在端口A工作于方式2时自动提供相应的控制信号, 一个双向8位总线端口A需要端口C提供5位控制 位.方式2的输入和输出均是锁存的.

工作方式2的使用场合

并行外部设备既可以作为输入设备,又可以作为 输出设备,并且输入输出动作不会同时进行.比如 ,磁盘就是这样一个外设,主机既可以往磁盘输出 数据,也可以从磁盘输入数据,但数据输出过程和 数据输入过程总是不重合的,所以,可以将磁盘的 数据线与8255的PA7~PA0相连,再使PC7~PC3和 磁盘的控制线和状态线相连即可.

工作方式2的控制字及信号

INTR:中断请求信号,高电平有效.不论是输入操作还 是输出操作,当一个操作完成,且要进入下一个操作 时,8255A都通过这一引脚向CPU发出中断请求信号. STB*:外设提供给8255A的选通信号,低电平有效.此 信号把外设送到8255A的数据送入到输入锁存器中. IBF:8255A送给CPU的状态信息,表示当前输入锁存 器中已有一个数据,不能接收新数. OBF*: 输出缓冲器满信号,低电平有效.它是一个由 8255A发给外设的选通信号,当OBF*有效时,说明CPU 已经将一个数据写入8255A端口A,通知外设取走数据. ACK*:外设对OBF*信号的响应信号,低电平有效.它 使8255A端口A的输出缓冲器开启,送出数据到外设. INTE1:中断允许位 INTE2:中断允许位

工作方式2的时序(假设先输出后输入)

C口的功能 C口的功能: (1)作为数据口. (2)其部分信号线可用来作为与CPU和外设 之间的联络应答信号. (3)具有按位置位/复位功能. (4)在CPU取8255A状态时,C口又可作为状态 口.

8255A的端口C的状态字

8255A的状态字为查询传送方式提供了状态 标志位.如“输入缓冲器满”信号IBF,”输出 缓冲器满”信号OBF*.另外,当端口A工作于 方式2申请中断时,CPU还要通过查询状态字 来确定中断源,即若IBFA为1表示端口A有输 入中断请求.OBFA*为1表示端口A输出中断 请求.

方式1下的端口C的状态字
A组 B组

D7

D6

D5

D4

D3

D2

D1

D0

方式1输入
I/O I/O IBFA INTEA INTRA INTEB IBFB INTRB

方式1输出
OBFA INTEA I/O I/O INTRA INTEB OBFB INTRB

方式2下的端口C的状态字

D7

D6

D5
A组状态
PC5

D4

D3

D2

D1
B组状态

D0

2方式
PC7 PC6

PC4

PC3

0方式

PC2 PC1

PC0

OBF INTE1 IBF INTE2 INTR

I/O I/O I/O
1方式

PC2

PC1

PC0

PC2

PC1

PC0

INTEB OBFB INTRB

INTEB IBFB INTRB

3、Intel 8255的编程

(1)写入方式控制字
(2)写C口的位控字

(1)写入方式控制字

例子:某系统要求使用8255A的A口方式0输入,B口方式0输 出,C口高4位方式0输出,C口低4位方式0输入,假设控制寄 存器地址为63H. 则控制字为:10010001 即91H 初始化程序为: MOV AL,91H OUT 63H,AL

(2)写C口的位控字

例如:A口方式2,要求A口与CPU以中断方式传输数据,则 PC4和PC6均需置位.B口方式1,输出,也要求B口与CPU以 中断方式传输数据,则使PC2置位来开放中断.初始化程序 如下: MOV AL,0C4H OUT 63H,AL;设置工作方式 MOV AL,09H OUT 63H,AL;PC4置位,A口输入允许中断 MOV AL,ODH OUT 63H,AL;PC6置位,A口输出允许中断 MOV AL,05H OUT 63H,AL;PC2置位,B口输出允许中断

5.5.2Intel 8255A的应用
例1:将外设开关的二进制状态从A口输入,并由B 口输出到LED显示器,如图所示.

图中LED是8段发光二极管,当某段中流过电流,则该段发光.从图中 可看出,8个发光二极管采用共阳极接法,当B口的某位输出高 时,连接该位的那一段亮.所以输出数字的二进制编码如下: 数字 发光的相应段 编码 0 a、b、c、d、e、f 00111111=3FH 1 b、c 00000110=06H 2 a、b、d、e、g 01011011=5BH 3 a、b、c、d、g 01001111=4FH 4 b、c、f、g 01100110=66H 5 a、c、d、f、g 01101101=6DH … A a、b、c、e、f、g 01110111=77H b c、d、e、f、g 01111100=7CH … F a、e、f、g 01110001=71H

8255A端口地址为D0-D3H,A口工作于方式0输入,B口工作于方式0 输出,程序如下:
DATA SEGMENT LEDTAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,67H,77H,7CH,39H,5EH,79H,71H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,90H OUT 0D3H,AL AA:IN AL,0D0H AND AL,0FH MOV AH,0 LEA SI,LEDTAL ADD SI,AX MOV AL,[SI] OUT 0D1H,AL MOV CX,1000 BB:DEC CX JNZ BB JMP AA MOV AH,4CH INT 21H CODE ENDS END START

例2:8255A与打印机连接应用.利用8255A的A口方 式0与微型打印机相连,将内存缓冲区BUFF中的 字符打印输出.

打印机数据传输时序

它的工作流程是:主机将要打印的数据送上数据线, 然后发选通信号.打印机将数据读入,同时使BUSY 线为高,通知主机停止送数.这时,打印机内部对读 入的数据进行处理.处理完以后使ACK有效,同时 使BUSY失效,通知主机可以发下一个数据.

说明:由PC0充当打印机的选通信号,通过对PC0的置位/复位来产 生选通.同时,由PC7来接收打印机发出的“BUSY”信号作为能否 输出的查询. 8255A的控制字为:10001000 即88H A口方式0,输出:C口高位方式0输入,低位方式0输出 PC0置位:00000001 即 01H PC0复位:00000000 即 00H 8255A的4个口地址分别为:00H,01H,02H,03H.

DADA SEGMENT BUFF DB 'This is a print program!','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX MOV SI,OFFSET BUFF MOV AL, 88H ;8255A初始化,A口方式0,输出 OUT 03H, AL ;C口高位方式0输入,低位方式0输出 MOV AL, 01H ; OUT 03H,AL ;使PC0置位,即使选通无效 WAIT: IN AL, 02H TEST AL, 80H ;检测PC7是否为1即是否忙 JNZ WAIT ;为忙则等待 MOV AL,[SI] CMP AL,'$' ;是否结束符 JZ DONE ; 是则输出回车 OUT 00H,AL ;不是结束符,则从A口输出 MOV AL,00H OUT 03H, AL MOV AL, 01H OUT 03H,AL ;产生选通信号 INC SI ;修改指针,指向下一个字符 JMP WAIT

DONE: MOV AL,0DH OUT 00H,AL ;输出回车符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL ;产生选通 WAIT1: IN AL, 02H TEST AL, 80H ;检测PC7是否为1即是否忙 JNZ WAIT 1 ;为忙则等待 MOV AL,0AH OUT 00H,AL ;输出换行符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL ;产生选通 MOV AH,4CH INT 21H CODE ENDS END START

例3:将上例中8255A的工作方式改为方式1,采用 中断方式将BUFF开始的缓冲区中的100个字符从 打印机输出.(假设打印机接口仍采用Centronics标 准).

分析:仍用PC0作为打印机的选通,打印机的ACK* 作为8255A的A口的ACK*,8255A的中断请求信号 (PC3)接至系统中断控制器8259A的IR3,其它硬件 连线同上例,如图所示.

8255A的控制字为:1010XXX0 PC0置位:00000001 即 01H PC0复位:00000000 即 00H PC6置位:00001101 即 0DH,允许8255A的A口输出中断 硬件连线可以分析出,8255A的4个口地址分别为:00H,01H,02H,03H。 假设8259A初始化时送ICW2为08H,则8255A A口的中断类型码是 0BH,此中断类型码对应的中断向量应放到中断向量表从2CH开始 的4个单元中.

主程序: MAIN: MOV AL,0A0H OUT 03H,AL ;设置8255A的控制字 MOV AL,01H ;使选通无效 OUT 03H,AL XOR AX,AX MOV DS,AX MOV AX,OFFSET ROUTINTR MOV WORD PTR [002CH],AX MOV AX,SEG ROUTINTR MOV WORD PTR [002EH],AX ;送中断向量 MOV AL,0DH OUT 03H,AL ;使8255A A口输出允许中断 MOV DI,OFFSET BUFF;设置地址指针 MOV CX,99 ;设置计数器初值 MOV AL,[DI] OUT 00H,AL ;输出一个字符 INC DI MOV AL,00H OUT 03H,AL ;产生选通 INC AL OUT 03H,AL;撤消选通 STI ;开中断 NEXT:HLT ;等待中断 LOOP NEXT HLT

中断服务子程序如下: ROUTINTR:MOV AL,[DI] OUT 00H,AL ;从A口输出一个字符 MOV AL,00H OUT 03H,AL ;产生选通 INC AL MOV 03H,AL ;撤消选通 INC DI ;修改地址指针 IRET ;中断返回

思考:是否可以采用A 口的OBF*作为打印机 的选通信号?如可以 的话,软件该如何修改? 是否可用打印机的 BUSY作为8255的A口 ACK*?

5.7直接存储器存取DMA
5.7.1 DMA控制器基本功能 5.7.2 可编程DMA控制器
1、 Intel8237的引脚和结构 2、 Intel8237的工作时序 3、 Intel8237的编程

5.7.3 Intel8237的应用

5.7.1 DMA控制器基本功能 DMA(Direct Memory Access)是指外部设备 直接和计算机存储器进行传送的I/O方式. 这种方式下数据的I/O不需要CPU执行指令, 也不经过CPU内部寄存器,而是利用系统的 数据总线,由DMA控制器直接在外设和存 储器之间进行读出、写入操作,可以达到极 高的传送速率,因而越来越广泛地用于高速 I/O设备的接口.

典型的可编程DMA控制器和外设的连线

一个DMA控制器通常可以连接一个或几个输入/输出 接口,每个接口通过一组连线和DMA控制器相连.习惯上, 将DMA控制器中和某个接口有联系的部分称为一个通道. 一个DMA控制器一般由几个通道组成. DMA控制器内部包含一个控制寄存器和一个状态寄 存器,一个地址寄存器和一个字节计数器.当DMA控制器 包含多个通道时,那么,控制寄存器和状态寄存器为多个 通道所公用,但地址寄存器和计数器则为每个通道所独立 配备. 为了使DMA控制器正常工作,系统应该用软件对DMA 控制器进行初始化.初始化过程分为两方面,即: (1)将数据传输缓冲区的起始地址或者结束地址送到地址 寄存器中. (2)将传输的字节数或字数送到计数器中.

DMA传送数据的过程

DMA控制器在系统中的两种工作状态
(1)主动态 在DMAC获得总线控制权之后,DMAC取代CPU而 成为系统的主控者,接管和控制系统总线(数据总线 、地址总线和控制总线).通过总线向存储器或I/O 设备发出地址、读/写信号,以控制两个实体之间的 传送. (2)被动态 在DMAC获得总线控制权之前,DMAC受CPU控制 .此时,CPU可对DMAC进行初始化编程,也可从 DMAC中读出状态.当DMAC上电或复位时 ,DMAC自动处于被动态.

5.7.2 可编程DMA控制器
1、 Intel8237的引脚和结构

Intel8237 DMA控制器的主要性能: (1)8237A内部具有4个独立的通道,通道的优先级 可设定为固定方式或循环方式. (2)每个通道的DMA请求都可以分为允许和禁止. (3)每个通道支持16位地址和64K字节计数,可分别 编程,工作在单字节传输、块传输、请求传输和 级连传输模式. (4)每个通道允许DMA传输速度高达1.6M字节/秒.

8237的内部寄存器

8237A的内部结构
8237A内部包含4个独立的通道,每个通道包含16位的地址寄 存器和16位的字节计数器,还包含一个8位的模式寄存器.4个 通道公用控制寄存器和状态寄存器. 基地址寄存器用来存放本通道DMA传输时的地址初值,这个 初值是在CPU编程写入的.编程时,初值也同时被写入当前地 址寄存器.当前地址寄存器的值在每次DMA传输后自动加1或 减1.CPU可以用输入指令分两次读出当前地址寄存器中的值, 每次读一个字节.但基地址寄存器中的值不能被读出. 基本字节计数器用来存放DMA传输时字节数的初值,初值比 实际传输的字节数少1.初值也是在编程时由CPU写入的,而且 初值也被同时写入当前字节计数器.在DMA传输时,每传输1 个字节,当前字节计数器的值自动减1,当由0减到0FFFFH时, 产生计数结束信号EOP*.当前字节计数器的值也可以由CPU 通过两条输入指令读出,每次读一个字节.

8237的主要引脚功能
双向IO读写 信号 三态输出地址线

DMA存储 器读写信号
8237对CPU提 出的总线请求 信号和CPU的 回应信号 8237对外设提 出的响应信号 外设对8237提 出的DMA申请 信号

双向地址线

双向数据线
地址复用线

2、 Intel8237的工作时序

(1)空闲周期SI 在进入DMA传输之前8237一直处在连续的SI状态.这时8237作 为从属器件,可以接受CPU的编程读或写.在空闲周期中的每一 个时钟周期,8237只做两项工作:采样各通道的DREQ请求输入 线,只要无DMA请求,则其始终停留在SI状态;CPU可读写8237. (2)S0状态 8237等待CPU的总线响应信号HLDA,在HLDA信号有效之 前,8237一直重复S0状态.S0状态中的8237还是从属器件,可以 接受CPU的读写.在某个S0的上升沿检测到HLDA信号有效以 后,则下一个状态开始S1.真正的DMA传送是从S1状态开始的. (3)S1状态 首先产生AEN信号,使CPU等其他总线器件的地址线和系统总 线的地址线断开,而使8237的地址线接通.AEN信号一旦产生 后在整个DMA过程中一直有效. 另外一个作用是产生DMA地址选通信号ADSTB,将DB7~DB0 上送出的地址信号A15~A0用ADSTB的下降沿锁存到外部锁 存器中.

(4) S2状态 8237产生DMA响应信号DACK*给外部设备.得到响应的 外部设备,可用DACK*信号实现CPU控制总线时的片选 信号的作用,使自己在整个DMA期间都处于选中状态,同 时地址总线上出现所要访问的存储器地址A15~A0. (5)S3状态 产生MEMR*和IOR*读信号,于是数据线上出现被传送的 字节.正常的读信号从S3状态一直持续到S4状态,以便使数 据线上的数据稳定至S4状态写入目的电路.另有一种压缩 读方式取消S3状态,读信号和写信号同时在S4状态时产生, 适用于高速电路.相反若DMA传送数据的源或目的电路速 度较慢,不能在S3/S4两个状态完成数据的读写,则可以将 8237的准备好READY端变低,使S3/S4之间插入等待状态 SW直到准备好后,READY变高才结束SW进入S4状态.

(6)S4状态 产生MEMW*或IOW*写信号,将DB7~DB0上的数据写入 目的电路,写信号也可以提前到S3状态,这就是所谓的扩展 写.若是块传输,则在S4结束后又进入S1(或S2),继续传输下 一个字节.若是单字节传输或是块传输的最后一个字节传 输完成以后,则产生传输结束信号EOP*,并撤消总线请求 信号HRQ,释放总线.外部输入的EOP*信号强制8237在完 成传输当前字节的S4后结束DMA过程.

(1)SI空闲状态:DMA检查是否有外部设备的申请 信号(DREQ);DMA此时作为从属器件,CPU可以 读写DMA. (2)S0准备状态:等待CPU的响应;DMA还是从属器 件,CPU可以读写DMA. (3)S1状态:产生AEN信号并锁存存储器地址 A15~A8. (4)S2状态:产生DACK*信号并输出16位存储器的 地址. (5)S3状态:读数据. (6)S4状态:写数据.

正常时序
SI CLK SI S0 S0 S1 S2 S3 S4 S2 S3 S4 SI SI

DREQ

S1HRQ 状态——产生AEN信号并锁存存储器地址A15~A8
S2状态——产生DACK*信号并输出16位存储器的地址 HLDA S3和Sw状态——读数据 AEN
ADSTB S 状态——写数据
4

DB0~DB7 A0~A7 DACK MEMR(IOR) IOW(MEMW)

时序总结
(1)当系统的各部分的速度比较高,可以用压缩时序工作.这样 可以提高DMA传输时的数据吞吐量,去掉了S3状态. (2)当外部设备的速度比较慢,那么,必须用普通时序工作. (3)如果用普通时序仍不能满足要求,以至于仍然不能在指定 的时 间中完成存取,那么就要在硬件上通过READY信号使 8237插入SW状态. 外部设备是用8237送出的IOW* 或MEMW*信号的下降沿 产生READY响应的,而这两个信号都是在传输过程的最后才 送出的.为了能够使READY信号早一些到来,所以,将IOW* 和MEMW*信号的负脉冲加宽,并使它们提前到来,这就是扩 展写信号方法.通过扩展写信号的方法,可提高传输速度,提高 系统吞吐能力. (4)而在内存的不同区域之间进行DMA传送时,由于需要依次 完成从存储器读和向存储器写的操作,所以完成每一次传送 需要8个时钟周期,在前四个周期S11、S12、S13、S14完成从存 储器源区域的读操作,后四个时钟周期S21、S22、S23、S24完 成向存储器目的区域的写操作.

Intel 8237的工作方式

单字节传输方式 块传输方式 请求传输方式 级连方式

单字节传输方式
在这种模式下,8237A每完成1个字节传输后,内部 字节计数器便减1,地址寄存器的值加1或减1,接 着,8237A释放系统总线,这样CPU至少可得到一个 总线周期.一个总线周期后再次响应DMA请求,接 着再传输下一个字节.在获得总线控制权后,又成 为总线主模块而进行DMA传输. 特点: (1)一次传送一个字节,效率略低 (2)DMA传送之间CPU有机会重新获取总线控制 权,8237有机会对各DREQ信号重新作优先级排队, 及时响应更高级的DMA请求.

块传输方式
在这种模式下,可以连续进行多个字节的传输,只 有当预定数据块的字节数传输完后,从而在EOP* 端输出一个负脉冲.若需要提前结束其传输过程, 可由外面输入一个有效的EOP*信号来强制8237 退出.请求信号DREQ保持到响应信号DACK有效 之后即可撤消,连续的DMA过程仍会进行下去. 特点: (1)一次请求传送一个数据块,效率高 (2)整个DMA传送期间CPU长时间无法控制总线 (无法响应其它DMA请求、无法处理中断等).

单字节传输和块传输的图

请求传输方式
这种模式与块传输模式类似,只是在每传输1个字 节后,8237A都对DREQ端进行测试,如果检测到 DREQ端变为无效电平,则马上暂停传输,但测试过 程仍然进行.当DREQ又变为有效电平时,就在原来 的基础上继续进行传输.在块传输方式下,请求信 号DREQ保持到响应信号DACK有效之后即可撤 消,连续的DMA过程仍会进行下去. 特点: (1)DMA操作可由外设利用DREQ信号控制传送 的过程.

级连方式
几个8237A可以进行级连,构成主从式DMA系统, 连接的方式是把从片的HRQ端和主片的DREQ端 相连,将从片的HLDA端和主片的DACK端相连,而 主片的HRQ和HLDA连接系统总线.这样,最多可 以由5个8237A构成二级DMA系统,得到16个DMA 通道,级连时,主片通过软件在模式寄存器中设置 为级连传输模式.从片不用设置级连方式,但要设 置所需的其它三种模式之一.

DMA传送类型
(1)DMA读——把数据由存储器传送到外设 由MEMR*有效从存储器读出数据,由IOW*有效 把这一数据写入外设. (2)DMA写——把外设输入的数据写入存储器 由IOR*有效从外设输入数据,由MEMW*有效把 这一数据写入存储器. (3)DMA校验——空操作 若8237被编程取这种传送类型,则在DMA启动后, 对外部仍产生时序和地址信号,但所有读写控制 信号无效,实际没有数据传输,不发生任何读写操 作,仅仅用来校验电路工作是否正常. (4)存储器到存储器的传送

存储器到存储器的传送
(1)固定使用通道0和通道1,通道0的地址寄存器存 源区地址,通道1的地址寄存器存目的区地址,通道 1的字节数寄存器存传送的字节数. (2)传送由设置通道0的软件请求启动. (3)每传送一字节需用8个时钟周期:前4个时钟周 期用通道0地址寄存器的地址从源区读数据送入 8237A的临时寄存器;后4个时钟周期用通道1地址 寄存器的地址把临时寄存器中的数据写入目的区.

DMA通道的优先权
(1)固定优先权方式——优先权固定.通道0优先权 最高,通道1其次,通道2再次,通道3最低. (2)循环优先权方式——优先权循环变化.最近一次 服务的通道在下次循环中变成最低优先权,其他通 道依次轮流相应的优先权.

3、 Intel8237的编程

高/低触发器
注意:(P351页上面) 由于基地址寄存器、当前地址寄存器、基字节数 寄存器和当前字节数寄存器是16位,而8237的数据 线仅8位,所以对它们的读写要分高低字节连续操 作两次.8237内部有一个高/低触发器,每次复位后 它处于“0”状态.这时对芯片作一次读写实际上 是读写其低字节,同时高/低触发器翻转一次变成 “1”状态.下次再作读写就针对高字节,而且高/低 触发器又翻转成“0”状态,如此自动重复.用户还 可以用后面将要讲到的软件命令使高/低触发器强 制清零,重新从低字节开始对16位寄存器读写.

软件命令
8237A的“软件命令”:不需要通过数据总线写入 控制字,直接由地址和控制信号译码实现. 清除高/低触发器 主清除(软件复位) 清屏蔽寄存器命令

3个软件命令
(1)清除高/低触发器 ?A3A2A1A0=1100,使高/低触发器清零 ?MOV AL,0XXH;0XXH为任意值 OUT 0CH,AL;高/低触发器被清0 (2)主清除(复位) ?A3A2A1A0=1101,使高/低触发器清零,还使命令、 状态、请求、临时寄存器清零,使屏蔽寄存器置为全 1(禁止DMA请求).主清除命令与硬件的RESET信号具 有相同的功能. ?MOV AL,0XXH;0XXH为任意值 OUT 0DH,AL;写入总清除端口,执行总清除命令 (3)清除屏蔽寄存器 ?A3A2A1A0=1110,清除屏蔽寄存器中的所有位(允许 DMA请求) ?MOV AL,0XXH;0XXH为任意值 OUT 0EH,AL;写入清除屏蔽寄存器端口

寄存器功能及编程
(1)初始化编程:8237各寄存器对其工作起不同的 控制作用,在进行DMA传输之前,必须对各寄存器 写一定的内容,以得到所要求的功能.初始化的内 容可分为数值型和功能型两类. (2)在DMA传送过程中,每传送一个字节,当前字节 数寄存器要减1.当前字节数寄存器从初始值减到0, 还要再传输一个字节,又从0减到FFFFH时,才发出 EOP信号结束DMA过程.因此初始化编程时把真 正传输的字节数减1后再写到字节数寄存器中.

命令寄存器

设置8237A芯片的操作方式,影响每个DMA通道

模式寄存器

存放相应通道的方式控制字,选择某个DMA通道的工作 方式

自动重置
每当DMA过程结束信号EOP*产生时(不论是内部 终止计数还是外部输入该信号),用基地址寄存器 和基字节寄存器中的内容,使相应的当前地址寄存 器和当前字节寄存器恢复为初始值.

请求寄存器

存放软件DMA请求状态,软件请求等效于一个有效的 DREQ信号

(1)软件请求等效于一个有效的DREQ信号,软件 请求不受屏蔽寄存器控制 (2)软件请求使用地方:用于块传送方式;若是存储 器到存储器的传送就只能用通道0的软件请求启 动. (3)一个通道的DMA结束时,其请求位被复位.整个 芯片的复位操作清除全部请求寄存器.

屏蔽寄存器

控制外设硬件DMA请求是否被响应

(1)8237内部有一个公共的屏蔽寄存器,当某位设 置为“1”时,其外部对应的DREQ信号被屏蔽,不 予响应. (2)可用三个不同的地址操作屏蔽寄存器: ?对某一通道设置或清除屏蔽位(写屏蔽寄存器某 一位). ?同时写4个通道的屏蔽状态(写屏蔽寄存器所有 位). ?清屏蔽寄存器命令使4个屏蔽位都清零(清除屏 蔽寄存器) (2)对系统复位操作将使4个通道全置于屏蔽状态 (3)当一个通道的DMA过程结束,如果不是工作在 自动初始化方式,则这一通道的屏蔽位置位,必须 再次编程为允许,才能进行下次DMA传送.

状态寄存器

状态寄存器记录各通道的状态,在CPU控制总线的情况 下,可以对这些位进行查询,以判断传输是否完成.

8237的编程
(1)清除高/低触发器 (2)写基地址与当前地址寄存器 (3)写基字节数与当前字节数寄存器 (4)写模式寄存器 (5)写命令寄存器 (6)写屏蔽寄存器 (7)写请求寄存器:若有软件请求,就写入指定通 道,可以开始DMA传送的过程.若无软件请求,则 在完成了(1)~(6)的请求后,由通道的DREQ启动 DMA传送过程.

8237A在PC/XT系统中的应用
IBM PC/XT机使用一片8237A
通道0:动态存储器DRAM刷新,DREQ信号由计数定时 电路8253的OUT1端产生,大约每隔15.13us发出一次 DMA请求,用于对动态存储器的刷新. 通道1:用户保留,其页面寄存器地址为83H,DREQ1和 DACK1信号都引至扩展槽上可为用户使用. 通道2:内存与软盘的高速数据交换,其页面寄存器地址 为81H. 通道3:内存与硬盘的高速数据交换,其页面寄存器地址 为82H. 通道0的优先级最高,通道3最低.

8237A的应用举例1
现假设用系统板上的8237通道1,将内存起始地址 为80000H的300H字节内容直接输出给外部设备. 其编程可如下所示:

OUT 0CH,AL ;清除高/低触发器 MOV AL,0 OUT 02,AL ;写通道1低位地址00 OUT 02,AL ;写通道1高位地址00 MOV AL,8 ;页面地址为8 OUT 83H,AL ;写入通道1页面寄存器 MOV AX,300H;传输字节数 DEC AX OUT 03,AL ;写通道1字节数低位 MOV AL,AH OUT 03,AL ;写通道1字节数高位 MOV AL,49H;通道1模式字:单字节读,地址加1 OUT 0BH,AL;写模式寄存器 MOV AL,40H;通道1命令字:DACK和DREQ低有效,正 常时序,固定优先权 OUT 08H,AL ;写命令寄存器 MOV AL,01 ;屏蔽字,清除对通道1的屏蔽 OUT 0AH,AL;写屏蔽寄存器 WAITF:IN AL,08 ;读状态寄存器 AND AL,02;通道1传输完成否 JZ WAITF ;没完成则等待 MOV AL,05;完成后恢复对通道1的屏蔽 OUT 0AH,AL

8237A的应用举例2
若要利用通道0,由外设(磁盘)输入64K字节的一个 数据块,传送至内存8000H开始的区域(增量传送), 采用块连续传送的方式,传送完不自动初始化,外 设的DREQ和DACK都为高电平有效.要编程首先 需要确定端口地址,地址的低4位用以区分8237的 内部寄存器,假设高4位地址A7~A4和A8~A15全 部为0.

初始化程序如下:

OUT 0CH,AL;清除高/低触发器 MOV AL,00H OUT 00H,AL;输出基和当前地址的低8位 MOV AL,80H OUT 00H,AL;输出基和当前地址的高8位 MOV AL,FFH OUT 01H,AL MOV AL,FFH OUT 01H,AL;给基和当前字节数赋值 MOV AL,84H OUT 0BH,AL;输出模式字 MOV AL,0A0H OUT 08H,AL;输出命令字
MOV AL,00H OUT 0AH,AL;输出屏蔽字

综合实验
模拟交通灯控制: 初始状态,东西方向的绿灯亮,同时,南北方向及人 行道上的红灯全亮;30秒后南北方向的绿灯亮,同 时,东西方向及人行道上的红灯亮;30秒后,人行道 上的绿灯亮,同时,东西方向及南北方向的红灯全 亮;30秒后回到初始状态.此后循环往复. 实验器材: (1)8088 (2)8253 (3)8255 (4)8259 (5)SW_LED

5.6串行输入输出接口
5.6.1 基本概念 5.6.2 可编程串行接口电路Ins8250
1、 Ins8250的引脚和结构 2、 Ins8250的编程

5.6.3 Ins8250的应用举例

5.6.1 基本概念
所谓串行通信就是使数据一位一位地进行传输而 实现的通信.当然,在实际传输中,如外部设备与 CPU或计算机与计算机之间交换信息,是通过一对 导线传送信息的.在传输中每一位数据都占据一个 固定的时间长度.与并行通信相比,串行通信具有传 输线少,成本低等优点,特别适合远距离传送,其缺 点是速度慢,若并行传送N位数据需时间T,则串行 传送的时间最少为NT.

例如:传送一个字节,并行通信只需要1T的时间,而 串行通信至少需要8T的时间.

1、 串行I/O中的同步和异步 (1)异步通信方式

一个字符一个字符地传输,每个字符一位一 位地传输,传输一个字符时,以起始位开始,然 后传输字符本身的各位,接着传输校验位,最 后以停止位结束该字符的传输.一次传输的 起始位、字符各位、校验位、停止位构成 一组完整的信息,称为帧(Frame).帧与帧之 间可有任意个空闲位.

异步串行通信格式

起始位 数据位 校验位 停止位 空闲位

逻辑0 逻辑0或1 逻辑0或1 逻辑1 逻辑1

1位 5位、6位、7位、8位 1位或无 1位、1.5位或2位 任意数量

典型的串行异步接口的基本结构

发送时钟和接收时钟
发送时钟:发送数据时,先将要发送的数据送入移 位寄存器,然后在发送时钟的控制下,将该并行数 据逐位移位输出.通常是在发送时钟的下降沿将 移位寄存器中的数据串行输出,每个数据位的时 间间隔由发送时钟的周期来划分.

接收时钟:在接收串行数据时,接收时钟的上升沿 对接收数据采样,进行数据位检测,并将其移入接 收器的移位寄存器中,最后组成并行数据输出.

当一个字符要传送到某接收器时,是以其最低有效 位(LSB)先送出的(即D0),但为使接收器能事先知 道开始传送,所以先使串行通信数据线在无数据传 送时都固定保持在一个状态上.假设无数据在串行 数据线上时,其状态固定保持在“1”,称此数据线 在空闲状态,而为使接收器知道数据开始传送,所 以在传送第一位(D0)时,先传送一个与空闲状态相 反的状态,即状态“0”,当作起始位,如此当串行数 据线由空闲状态“1”转变到所传送的起始位 “0”,接收器就能通过检测状态的变化而知道数 据的开始传送.

所以假设有如下的位串:00010011,则若传送该位 串的字符时,其顺序即为先传送起始位“0”,再接 着传送“11001000”,而当传送完D7后,可以再接 着传送1个奇偶检验位,用来做错误检测.最后发送 至少一个停止位“1”,以区分下一个字符的起始 位“0”.这样构成的一串数据我们称之为一帧.一 帧数据的各位代码间的时间间隔是固定的,而相 邻两帧的数据其时间间隔是不固定的.可见,异步 通信时字符是一帧一帧传送的,每帧字符的传送 靠起始位来同步的.在异步通信的数据传送中,传 输线上允许空字符.

检验位
在一个有8位的字节中,其中必有奇数个或偶数个 的状态“1”位.假设接收器的硬件设计要接收偶 数个“1”,无论起始位和停止位,当字符内有偶数 个“1”时,则检验位就设为“0”,反之,字符内有 奇数个“1”,则其设为“1”.换言之,对于偶检验 就是要使字符加上检验位有偶数个“1”;奇检验 就是要使字符加上检验位有奇数个“1”. 一般检验位的产生和检查是由串行通信控制 器内部自动产生的,除了加上检验位以外,通信控 制器还自动加上停止位,用来指明若传送字符的 结束.对接收器而言,若未能检测到停止位则意味 着传送过程发生了错误.

错误检测
接收方按约定的格式接收数据,并进行检查,可以 查出以下3种错误: (1)奇偶错:在约定奇偶检验规则的情况下,接收到 的字符奇偶状态和约定的不符. (2)帧格式错:一个字符从起始位到停止位的总位 数不对. (3)溢出错:若先接收的字符尚未被计算机读取,后 面的字符又接收完成,则产生溢出错.

(2)同步通信方式 在前述的异步通信方式中,可以看到在发送的数 据中含有起始位和停止位这两个与实际若传送的 数据毫无相关的位,换句话说,若在传送1个8位的 字符时,其检验位、起始位和停止位都为1个位,则 相当于要传送11个位信号,所以实际上的使用率就 约只有80%而已.显然当需要高速率的通信速度 时,异步式的传输不能满足我们的需求.因此,为了 提高通信效率就提出了同步通信方式.

多个字符成组传送,在每组信息的开始,加上同步 字符,字符组和同步字符以及需要的其他字符构 成一个信息帧.靠同步字符完成收发双方同步.

同步字符 字符1

字符2

……

字符n 校验字符

数据块

2、串行通信的速率 波特率:每秒传送的二进制位数称为波特率. 波特率因子:在串行通信中,发送方在时钟的作用 下,将数据一位接一位发送出去,接收方也要在时 钟作用下,将数据一位接一位接收下来.发送一位 或接收一位信息所用的时钟个数可以选择.常用 的时钟个数为1、16、64等,人们将其称为波特率 因子.

时钟频率=波特率因子×波特率 当波特率因子为16时,接收时钟与数据位的关系如 下图:

常用的波特率为:50,75,110,150,300,600,1200,2400, 4800,9600等.

3、串行通信的方向(单工通信和双工通信)
单工通信:只允许数据按照一个固定的方向传送 半双工通信:只有1根数据线传送数据信号,要求通讯双 方的发送和接收由电子开关切换. 全双工通信:通讯双方能同时进行发送和接收操作.

4、信号的调制和解调
原因:数字信号的频带宽,而普通通信线路频带较窄,如电 话线频带范围仅300~3400Hz.如果数字信号直接在传输 线上传送,高次谐波的衰减会很厉害,从而使信号到了接 收端后将发生严重畸变和失真,不能实现长距离传输. 解决:发送方使用调制器(Modulator),把要传送的数字信 号调制转换为适合在线路上传输的音频模拟信号;接收 方则使用解调器(Demodulator)从线路上测出这个模拟 信号,并还原成数字信号.

调制方法:按照调制技术的不同分为调幅(AM)、调频 (FM)和调相(PM)三种.

6、异步串行I/O接口的标准 串行通信接口有多种标准,其中,常用的是RS232C和RS-422A、RS-485接口标准.在这里介绍 RS-232C接口标准. RS-232C接口标准:1969年美国电子工业协会(EIA) 用于串行数据通信的推荐标准EIA-RS-232C.这个 标准不仅被广大通信设备生产商所接受,也被广泛 应用于计算机上.

6、异步串行I/O接口的标准 (1)信号连线

数据终端设备DTE——数据源和目的地 数据通信设备DCE——使数据符合线路要求的设备. DTE-Data Terminal Equipment DCE-Data Communication Equipment

2号线 发送数据(TxD):通过TxD线终端将串行数据发送 到MODEM. 3号线 接收数据(RxD):通过RxD线终端接收从MODEM 发来的串行 数据. 4号线 请求发送(RTS):用来表示DTE请求DCE发送数据, 即当终端要发送数据时,使该信号有效(ON状态),向 MODEM请求发送.它用来控制MODEM是否要进入发送 状态. 5号线 清除发送(CTS):用来表示DCE准备好接收DTE发 来的数据,是对请求发送信号RTS的响应信号.当MODEM 已准备好接收终端传来的数据,并向前发送时,使该信号 有效,通知终端开始沿发送数据线TxD发送数据. 这对RTS/CTS请求应答联络信号是用于半双工采用 MODEM的系统中作发送方式和接收方式之间的切换.在 全双工系统中,因配置双向通道,故不需RTS/CTS联络信 号,使其变高.

6号线 数据通信装置准备好信号(DSR):有效时(ON状态), 表明MODEM处于可以使用的状态. 7号线 信号地(SG):信号地线,无方向. 8号线 数据载波检测信号(DCD):用来表示DCE已接通通 信线路,告知DTE准备接收数据.当本地的MODEM收到 由通信线路另一端的MODEM送来的载波信号时,使DCD 信号有效,通知终端准备接收,并且由MODEM将接收下 来的载波信号解调成数字量数据后,沿接收数据线RxD送 到终端. 20号线 数据终端设备准备好信号(DTR):有效时(ON状 态),表明数据终端可以使用. DTR和DSR这两个状态信号有效,只表示设备本身可用, 并不说明通信线路可以开始通信了. 22号线 振铃指示信号(RI):当数据通信设备接收到电话 交换设备的振铃信号(Ring Signal)时,则输出RI信号给数 据终端设备.通知终端设备,已被呼叫.

上述控制信号何时有效,何时无效的顺序表示了接 口信号的传送过程.例如,只有当DSR和DTR都处 于有效(ON)状态时,才能在DTE和DCE之间进行 传送操作.若DTE要发送数据,则预先将RTS线置 成有效状态,等CTS线上收到有效状态的回答后, 才能在TxD线上发送串行数据.这种顺序的规定对 半双工的通信线路特别有用,因为半双工的通信线 路进行双向传送时,有一个换向问题,只有当收到 DCE的CTS线为有效状态后,才能确定DCE已接收 方向改为发送方向了,这时线路才能开始发送.

信号线的连接和使用

(1)近距离传送 当通信距离小于15m时,可不需要Modem,通信双 方可以直接连接,这种情况下,只需使用少数几根 信号线.它可分为:三线式和七线式连接
(2)远距离传送 用于传输距离大于15m的通信,故一般要加调制解 调器MODEM,因此使用的信号线较多.

无MODEM的三线式(用于近距离传送)

(1)RTS与CTS互联:只要请求发送,立即得到允许 (2)DTR与DSR互联:只要本端准备好,认为本端立即可以 接收(DSR数据通信装置准备好).

无MODEM的七线式(用于近距离传送)

(1)甲方的数据终端准备好(DTR)和乙方的数据通信设备 准备好(DSR)及振铃信号(RI)两个信号互连.这时,一旦甲 方的DTR有效,乙方的RI就立即有效,产生呼叫,并应答响 应,同时又使乙方的DSR有效.这意味着,只要一方的DTE 准备好,便同时为对方的DCE准备好,尽管实际上对方的 DCE并不存在. (2)甲方的请求发送(RTS)及清除发送(CTS)自连,并与乙 方的数据载波检测信号(DCD)互连,这时,一旦甲方请求发 送(RTS)有效,便立即得到发送允许(CTS有效),同时使乙 方的DCD有效,即检测到载波信号,表明数据通信线路已 接通.这意味着只在一方的DTE请求发送,同时也为对方 的DCE准备好接收(即允许发送),尽管实际上对方DCE并 不存在. (3)双方的发送数据(TxD)和接收数据(RxD)互连,这意味 着双方都是数据终端设备(DTE),只要上述的握手关系一 旦成立,双方即可进行全双工传输或半双工传输.

使用MODEM和电话网通信时的信号连接(远距离传送)

首先,通过电话机拔号呼叫对方,电话交换台向对方发出拔 号呼叫信号,当对方DCE收到该信号后,使RI(振铃信号)有效, 通知DTE,已被呼叫.当对方“摘机”后,两方建立了通信链路. 若计算机要发送数据至对方,首先通过接口电路(DTE)发出 RTS(请求发送)信号.此时,若DCE(Modem)允许传送,则向 DTE回答CTS(允许发送)信号.一般可直接将RTS/CTS接高电 平,即只要通信链路已建立,就可传送信号.(RTS/CTS可只用于 半双工系统中作发送方式和接收方式的切换).当DTE获得 CTS信号后,通过TXD线向DCE发出串行信号,DCE(Modem) 将这些数字信号调制成模拟信号(又称载波信号),传向对方. 当对方的DCE收到载波信号后,向对方的DTE发出DCD信 号(数据载波检出),通知其DTE准备接收,同时,将载波信号解 调为数据信号,从RXD线上送给DTE,DTE通过串行接收移位 寄存器对接收到的位流进行移位,当收到1个字符的全部位流 后,把该字符的数据位送到数据输入寄存器,CPU可以从数据 输入寄存器读取字符.

(2)信号电平规定 (1)信号电平规定为EIA电平,负逻辑定义: -3V到-25V之间的电平表示逻辑“1” +3V到+25V之间的电平表示逻辑“0” (2)而标准TTL电平为: +2.4V~+5V的电平表示逻辑“1” 0V~0.4V的电平表示逻辑“0” (3)发送:TTL电平?EIA电平 接收:EIA电平?TTL电平

SN75150(MC1488):TTL电平→RS232电平(用于发送方) SN75154 (MC1489):TTL电平←RS232电平(用于接收方)

还可以使用新型电平转换芯片MAX232

5.6.2 可编程串行接口电路Ins8250
1、 Ins8250的引脚和结构

Ins8250是全双工异步通信接口电路.
串行通信接口的基本任务: (1)进行串并转换 (2)实现数据格式化:起始位/停止位/奇偶校验位 (3)进行错误检测:奇偶错/帧格式错/溢出错 (4)控制数据传输速率 (5)提供符合EIA-RS-232C接口标准所要求的信 号线 (6)能实现TTL和EIA电平的转换.

对系统引脚 ?D7~D0:三态数据线 ?CS0、CS1和CS2:片选输入 ?Csout:片选输出 ?A2~A0:地址信号输入 ?ADS:地址选通信号输入 ?DISTR和DISTR:数据输入选通 ?DOSTR和DOSTR:数据输出选通 ?DDIS:驱动器禁止信号输出 ?MR:主复位信号 输入 ?INTRPT:中断请求输出

对外部通信设备引脚 ?Sout:串行数据输出 ?Sin:串行数据输入 ?RTS和CTS:请求发送和清除发送 ?DTR和DSR数据终端准备好和数据装 置准备好. ?RLSD:接收线路信号检测输入 ?RI:振铃信号输入 ?OUT1和OUT2:内部调制控制器的 D2D3位的输出信号 ?XTAL1和XTAL2时钟输入和输出信号 ?BAUDOUT:波特率输出信号 ?RCLK:接收时钟输入.

2、 Ins8250的编程 Ins 8250内部寄存器地址

上表为异步通信接口COM1所有Ins8250的寄存器地址, 如果是COM2的,地址为2F8H~2FFH.

线路控制及状态
通信线路控制寄存器

通信线路状态寄存器

线路控制寄存器:指定串行异步通信的字符格式 线路状态寄存器:提供串行异步通信的当前状态供CPU读取和处理

波特率控制
?除数寄存器:控制分频系数 ?当通信线路寄存器的D7位,即DLAB=1时,则 下面对相应地址的写入将是对除数寄存器的高 低字节的操作. ?波特率控制:PC/XT机的XLAT的频率是 1.8432MHz
发送波特率= 1.8432MHz ÷除数寄存器的值÷ 16

?外部输入时钟XTAL1的频率(PC/XT系列中为 1.8432MHz)除以除数寄存器中的双字节后,得 到数据发送器的工作频率,再除以16,才是真正 的发送波特率.

波特率与除数的关系

发送波特率= 1.8432MHz ÷除数寄存器的值÷ 16

MODEM控制与状态
MODEM控制寄存器

MODEM状态寄存器

MODEM控制寄存器:设置8250与数据通信设备之间联络应答的 输出信号 MODEM状态寄存器:反映4个控制输入信号的当前状态及其变化

自检工作方式
8250

发送数据SOUT 接收数据SIN 请求发送RTS* 允许发送CTS* 数据终端准备好DTR* 数据装置准备好DSR* 输出OUT2 载波检测RLSD*
输出OUT1 振铃指示RI*

? ? ?

4个控制输入信号和系统分离,并在芯片内部与4个控制输出信号相连 发送的串行数据立即在内部被接收 可用来检测8250发送和接收功能正确与否,而不必外连线

(1)其高4位即4个外部输入信号的状态,而低4位记 录高4位的变化. (2)每次读MODEM状态寄存器时,低4位被清零. 以后若高4位中有某位状态发生改变(由0变为1或 由1变为0),则低4位中的相应位就置1. (3)这些状态位的变化,除了可以让CPU用输入指 令查询外,也可以引起中断.

中断允许及识别
中断允许寄存器

中断识别寄存器

4级中断源

?接收数据错中断
– 奇偶错、溢出错、帧错和中止字符

优先权高

?接收数据就绪中断 ?发送寄存器空中断 ?MODEM状态变化中断
?清除发送状态(CTS)改变 ?数据通信端准备好状态(DSR)改变 ?振铃(RI)接通变成断开 ?接收线路信号检测状态(RLSD)改变

优先权低

Ins 8250编程
Ins8250的编程分为初始化编程和工作编程两部分.初始 化主要是约定数据通信规范,工作编程则是实现数据的 发送和接收.初始化步骤如下: 1、设置波特率 置DLAB=1,写线路控制寄存器;设置波特率,写除数寄存 器. 2、设置通信数据格式:置DLAB=0,写线路控制寄存器. 3、设置工作方式:写MODEM控制寄存器. 4、设置中断允许控制字:写中断允许寄存器

下面假设两台计算机通过各自的1号异步串行通信口 COM1,按无MODEM的接线直接通信,通信的波特率为 2400,下面写出初始化和工作程序.

Ins 8250初始化程序
MOV MOV OUT MOV MOV OUT MOV MOV OUT DX,3FBH AL,80H DX,AL ;DLAB=1,设置写除数寄存器 DX,3F9H;写高位除数寄存器 AL,0 DX,AL DX,3F8H ;写低位除数寄存器 AL,30H DX,AL

Ins 8250初始化程序
MOV MOV OUT MOV MOV OUT MOV MOV OUT DX,3FBH ;通信线路控制寄存器 AL,1AH ;0001 1010 DX,AL ;数据长7位,1位停止位,偶校验 DX,3FCH ;MODEM寄存器 AL,3 ;设置RTS和DTR有效 DX,AL DX,3F9H ;中断允许寄存器 AL,0 ;屏蔽全部中断 DX,AL

无MODEM的查询方式

Ins 8250通信工作程序
;查询方式通信 ;发送字符在CL中.若收到字符,暂存于AL中 KEEP_TRY: MOV DX,3FDH IN AL,DX TEST AL,1EH JNE ERROR_ROUTINE TEST AL, 1 JNZ RECEIVE TEST AL,20H JZ KEEP_TRY

Ins 8250通信工作程序
MOV DX,3F8H ;发送字节 MOV AL,CL OUT DX,AL JMP KEEP_TRY RECEIVE: MOV DX,3F8H ;接收字节 IN AL,DX …………….

有MODEM的查询方式

中断方式的通信程序设计 中断通信方式初始化:修改中断向量/确定通 信协议/确定INS8250操作方式/开放通信中 断 通信中断服务程序:首先读中断识别寄存器, 然后判断中断源,接着转向对应的处理子过 程(程序).判断中断源应该按照中断优先级 别次序进行.

Ins 8250的应用举例 下面给出一段完整的程序,说明Ins8250用于 串行通信的编程.程序将PC/XT系列COM1 中的Ins8250设置自检方式,由键盘读入的字 符,经Ins8250发送,又自行接收回来,再到 CRT上显示出来,直到键入^C 返回DOS.


相关文章:
第五章 数字量输入输出_图文.ppt
第五章 数字量输入输出_信息与通信_工程科技_专业资料。计算机的结构简图地址总线
第五章 数字量输入输出_图文.ppt
第五章 数字量输入输出 - 第五章 数字量输入输出 第一节 概述 一、I/O接口
第五章数字量输入输出5of7_图文.ppt
第五章数字量输入输出5of7 - 并行接口和串行接口的结构示意图 №1 §5.6
第五章数字量输入输出6of7_图文.ppt
第五章数字量输入输出6of7 - 三、可编程串行接口Ins 8250 ?串行传输
第五章数字量输入输出3of7_图文.ppt
第五章数字量输入输出3of7 - § 5.4 计数/定时接口 计算机系统中,实现
第五章 数字量输入输出接口_图文.pdf
第五章 数字量输入输出接口 - 第五章 主 数字量输入输出接口 要内容 * 接口
第五章数字量输入输出7of7_图文.ppt
第五章数字量输入输出7of7 - §5.7 直接存储器存取DMA DMA控方式的
数字量输入输出通道_图文.ppt
数字量输入输出通道 - 计算机控制技术 吴国辉 第五章 数字量输入输出通道 ?
第五章 数字量输入输出_图文.ppt
第五章 数字量输入输出 - 第5章 数字量输入输出 ? ? ? ? ? 5.1
微机原理技术与应用 第五章 数字量输入输出_图文.ppt
微机原理技术与应用 第五章 数字量输入输出 - 第五章 数字量输入输出 第一节
清华大学计算机原理课件第五章数字量输入输出5of7_4410....ppt
清华大学计算机原理课件第五章数字量输入输出5of7_44103081 - 三、可
微机原理课件_第五章_数字量输入输出_图文.ppt
微机原理课件_第五章_数字量输入输出 - 第五章 数字量输入输出 第一节 概述
he第五章数字量输入输出3of7定时器_图文.pdf
he第五章数字量输入输出3of7定时器 - § 5.4 计数/定时接口 计算机系
数字量输入输出 (1)_图文.pdf
数字量输入输出 (1) - 第五章 概述 数字量输入输出 系统总线及接口 中断控
第五讲(1)数字量输入输出-基本输入输出_图文.ppt
第五讲(1)数字量输入输出-基本输入输出 - 第五章 数字量输入输出 本章内容
清华大学计算机原理课件第五章数字量输入输出7of7_7696....ppt
清华大学计算机原理课件第五章数字量输入输出7of7_769607822 - §5
清华大学计算机原理课件第五章数字量输入输出6of7_5492....ppt
清华大学计算机原理课件第五章数字量输入输出6of7_549206781 - §5
5章6数字量输入输出110822_图文.ppt
第一章 第二章 第三章 第四章 第五章 第六章 微型计算机基础 微型计算机指令系统 汇编语言程序设计 半导体存储器 数字量输入输出 模拟量输入输出 第1章、微型...
he第五章数字量输入输出1of7 (1)_图文.pdf
he第五章数字量输入输出1of7 (1) - 第五章 数字量输入输出 主要内容:
数字量输入输出-基本输入输出.ppt
第五章 数字量输入输出 本章内容 ?简单I/O接口 ?并行输入输出接口 ?中断控
更多相关标签: