第六章 中断控制器,DMA控制器和计数器 /定时器
§ 6.1 中断控制器 8259A
一,8259A的引脚信号,编程结构和工作原理
1,8259A的外部引脚信号
和 CPU相连
D0~ D7:数据线
INT:中断请求( 8259A→ CPU)
A0:片内端口选择
INTA:中断响应信号
RD:读信号
WR:写信号
CS:片选信号
和外设相连
IR7~ IR0:中断请求(外设 → 8259A)
和同类芯片相连
CAS0~CAS2:指出具体从片
SP/EN:主 /从片选择(输入)或启动总线驱动器
(输出)
2,8259A的编程结构和工作原理
编程结构
7个寄存器 初始化命令字 ICW1~ICW4操作命令字 OCW1~OCW3 控制部件
IRR:中断请求寄存器
PR:中断优先级裁决器
ISR:中断服务寄存器处理部件
8259A对外部中断的处理过程:
① IRR接收中断请求并锁存;
② IMR决定是否此请求通过;
③ 中断优先级裁决器把新请求和正在处理的中断进行比较,如新中断优先级高,则向 CPU发中断请求;
④ 若 IF=1,则 CPU执行完当前指令后响应此中断,即从 INTA引脚回送两个负脉冲;
二,8259A的工作方式
1、设置优先级的方式:
① 全嵌套方式:优先级固定,次序由高到低依次为
0~7;
② 特殊全嵌套方式:可响应同级中断;
8259A
8259A
INT
主片:
从片:
0 1 2 3 4 5 6 7
8 10 12 14
9 11 13 15
优先级次序:
主片,0,1
从片,8~15
主片,3~7
③ 优先级自动循环方式:某中断被响应后,优先级自动降为最低,初始状态 IR0为最高优先级;
④ 优先级特殊循环方式:初始状态优先级由编程设定;
2、屏蔽中断源的方式
① 普通屏蔽方式,8259A的每个中断请求输入端都可以通过对应屏蔽位的设置被屏蔽;
② 特殊屏蔽方式:应用于中断服务程序中,可在某一段区域内响应低级中断;
3、结束中断处理的方式问题:为什么要进行结束中断处理?
具体动作:对应 ISn位清 0
① 中断自动结束方式:只有一片 8259A,且不允许嵌套,对应的 ISn位在第二个 INTA脉冲结束时被请除;
② 一般的中断结束方式:用于全嵌套方式,中断结束时自动清除优先级最高的 ISn位;
③ 特殊的中断结束方式:用于非全嵌套方式;中断结束时清除指定的 ISn位;
4、连接系统总线的方式
① 缓冲方式:通过总线驱动器和数据总线相连;
② 非缓冲方式:直接和数据总线相连;
B0~7
8286
T OE
A0~7
SP/EN D0~7
8259A
+5V
数据总线缓冲方式:
SP/EN D0~7
8259A
(从片)
数据总线非缓冲方式:
SP/EN D0~7
8259A
(主片或单片)
数据总线
+5V
5、引入中断请求的方式:
① 边沿触发方式:上升沿触发;
② 电平触发方式:高电平触发;
③ 中断查询方式,CPU靠查询确定为哪个设备服务;
工作过程:
关中断输出 OCW3
输入查询字查询字格式:
I — — — — W2 W1 W0
当前中断请求的最高优先级
1:有请求
0:无请求三,8259A的初始化命令字和操作命令字
1,8259A的初始化命令字
① ICW1:芯片控制初始化命令字( A0=0)
1 LTIM ADI SNGL IC4
是否需要 ICW4
=1 需要是否处于级联状态
=1 单片 =0 级联
8086/8088系统中无效中断请求信号形式
=1 电平触发 =0 脉冲触发特征位
8086/8088
系统中不用
② ICW2:中断类型码初始化命令字( A0=1)
T7 T6 T5 T4 T3 0 0 0
8086/8088
系统中无效中断类型码高 5位
③ ICW3:标志主片 /从片的初始化命令字( A0=1)
级联方式设置
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0主片:
=1,说明对应引脚上连接有片连接主片哪一引脚
0 0 0 0 0 ID2 ID1 ID0从片:
不用
D0~D7 INTA INT
CAS0
8259A (3) CAS1
CAS2
SP/EN IR7 IR0
GND
D0~D7 INTA INT
CAS0
8259A (2) CAS1
CAS2
SP/EN IR7 IR0
GND
D0~D7 INTA INT
CAS0
CAS1 8259A(1)
CAS2
SP/EN IR7 IR0
Vcc
控制总线数据总线
OCW3的值:
8259A( 1),01001000 48H
8259A( 2),00000110 06H
8259A( 3),00000011 03H
④ ICW4:方式控制初始化命令字 ( A0=1)
0 0 0 SFNM BUF M/S AEOI μPM
=1 为 8086/
8088系统中断结束方式
=0 非自动结束方式
=1 自动结束方式主片 /从片选择
(缓冲方式有效)
=0 从片 =1 主片缓冲方式设定
=1 缓冲方式 =0 非缓冲方式特殊全嵌套方式设定
=1 特殊全嵌套方式不用
2,8259A的初始化流程:
送 ICW1
送 ICW2
送 ICW3
送 ICW4
准备接收中断级联方式?
需要 ICW4?
N
N
Y
Y
举例:设某系统只有一片 8259A,端口地址为 80H和
81H,边沿触发,需设 ICW4,中断类型码为
18H~1FH,一般全嵌套方式,非自动中断结束,
缓冲方式。
程序:
MOV AL,13H
OUT 80H,AL
MOV AL,18H
OUT 81H,AL
MOV AL,0DH
OUT 81H,AL
00010011 需 ICW4
单片方式边沿触发
00001101 8086/8088系统非自动中断结束主片缓冲方式一般全嵌套方式
00011000
中断类型码高五位
3,8259A操作命令字
① OCW1:中断屏蔽命令字 ( A0=1)
M7 M6 M5 M4 M3 M2 M1 M0
若 Mi位为 1,则对应 IRi的中断请求就被屏蔽,若为
0,则对应 IRi的中断请求就被允许。
举例:设 8259A端口地址为 20H和 21H,开放 IR2和
IR7中断,其它均被屏蔽
MOV AL,7BH ; 01111011
OUT 21H,AL
要想读出中断屏蔽寄存器 IMR的值,IN AL,21H
② OCW2:设置优先级循环方式和中断结束方式命令字 ( A0=0)
R SL EOI 0 0 L2 L1 L0
中断等级代码特征位中断结束方式,
=1 发中断结束命令说明 L2L1L0是否有效:
=0 无效,=1 有效中断优先级循环方式:
=0 固定优先级,=1 循环优先级
R,SL,EOI的各种组合的意义:
R SL EOI 意 义
0 0 0 结束优先级自动循环方式
0 0 1 一般中断结束命令
0 1 0 无意义
0 1 1 特殊中断结束命令,ISn由 L2L1L0指定
1 0 0 设定优先级自动循环方式
1 0 1 一般中断结束命令,且当前优先级次序左移一位
1 1 0 设定优先级特殊循环方式,由 L2L1L0指定最低优先级
1 1 1 特殊中断结束命令,并设定为最低优先级
3,OCW3,( A0=0)
功能设置和撤消特殊屏蔽命令设置中断查询命令设置对 8259A内部寄存器的读出命令
0 ESMM SMM 0 1 P RR RIS
=0 读 IRR
=1 读 ISR
=1 读 IRR和 ISR内容
=1 中断查询工作方式
=1 设置特殊屏蔽方式 =0 撤消特殊屏蔽方式
SMM允许位,=1 SMM有效,=0 SMM无效特征位不用
P,RR,RIS的各组合的意义:
P RR RIS 意义
1 × × 读查询字
0 0 × 不读寄存器
0 1 0 读 IRR
0 1 1 读 ISR
举例:设某系统只有一片 8259A,端口地址为 20H、
21H,编程序将 8259A的 IRR,ISR和 IMR三个寄存器的内容读出,存入数据段 BUF开始的单元。
程序:
MOV AL,0AH
OUT 20H,AL
IN AL,20H
MOV BUF,AL
MOV AL,0BH
OUT 20H,AL
IN AL,20H
MOV BUF+1,AL
IN AL,21H
MOV BUF+2,AL
读 IRR内容读 ISR内容读 IMR内容初始化命令字和操作命令字小结:
① 占用端口地址:
A0=0,ICW1,OCW2,OCW3
A0=1,ICW2,ICW3,ICW4,OCW1
② 区分方法:
A0=0,按特定位区分,ICW1— D4=1,
OCW2— D4D3=00,
OCW3— D4D3=01
A0=1,按写入顺序区分,ICW2,ICW3,ICW4在
ICW1之后顺序写入,OCW1在初始化后任一时刻写入。
③ 写入时间,ICW— 初始化时,OCW— 工作过程中四,8259A使用中的一个问题
电平触发方式下中断请求信号应何时撤消?
INTA
IR
正确:
INTA
IR
过晚:可能引起多次中断
INTA
IR
过早:无法识别,自动设为 IR7
五,8259A使用举例
1、关于中断全嵌套的例子特点:只响应高级中断,优先级固定,中断服务程序最后应执行中断结束指令。
条件:
① 主程序必须开中断;
② 中断服务程序也必须开中断;
③ 中断服务程序结束时应执行中断结束命令;
2、关于如何使用中断结束命令的例子初始化开中断开中断开中断关中断中断结束命令开中断中断返回关中断中断结束命令开中断中断返回
IR3请求中断
IR3中断处理程序
IR2请求中断主程序
IS4被清除
IS3置 1
IR3有中断请求
IR4中断处理程序
IS4置 1
IS2被清除
IS1被清除
IR1中断处理程序
IS1置 1
IS2置 1
IR2中断处理程序初始化
STI
STI
中断结束命令
STI
IRET
中断结束命令
STI
中断结束命令
STI
IRET
中断结束命令
IRET
IRET
IR2和 IR4有中断请求
IR1有中断请求
IR3中断处理程序
IS3被清除
ISR=00000000
ISR=00000100
ISR=00000110
ISR=00000100
ISR=00010000
ISR=00011000
ISR=00010000
ISR=00000000
ISR=00000000
3、关于特殊屏蔽方式的例子特殊屏蔽方式的使用方法:
通过 OCW3使 8259A工作于特殊屏蔽方式,再用 OCW1对屏蔽寄存器中本级中断的对应位置位,
即可使系统除了本级中断外,响应其他任何未被屏蔽的中断请求。
举例:设 8259A的偶地址端口为 80H,奇地址端口为 81H,且系统当前正在为 IR4进行中断服务。
……
CLI
MOV AL,68H
OUT 80H,AL
IN AL,81H
OR AL,10H
OUT 81H,AL
STI
……
CLI
IN AL,81H
AND AL,0EFH
OUT 81H,AL
MOV AL,48H
OUT 80H,AL
STI
……
MOV AL,20H
OUT 80H,AL
IRET; 01001000
撤消特殊屏蔽方式; IR4对应屏蔽位置 1; IR4对应屏蔽位清 0; 01101000
设置特殊屏蔽方式; 00100000
中断结束命令六、多片 8259A组成的主从式中断系统说明:
① 每片 8259A都要分配两个端口地址;
② 主片初始化时,ICW1中的 SNGL位必须为 0,
ICW3指明哪个引脚连有从片,一般通过 ICW4的
SFNM位设为特殊全嵌套方式;
③ 从片初始化时,ICW1中的 SNGL位也必须为 0,
ICW3指明该从片接主片的哪个引脚;
主从式中断系统的响应过程:
① 从片的 INT引脚往主片的 IRn引脚上发送一个中断请求信号;
② 该中断请求信号通过主片的 INT引脚送到 CPU;
③ CPU回送两个 INTA信号,同时送到主片和各从片;
⑤ 被选通的从片收到第一个 INTA信号后,将相应
ISn位置 1,同时清除相应 IRn位;
⑥ 第二个 INTA信号到来后,主片没有动作,从片将中断类型码送到数据总线上;
④ 主片收到第一个 INTA信号后,将相应 ISn位置 1,
同时清除相应 IRn位;并将从片标号值送到
CAS0~CAS2上;
主从式中断系统中的优先级排列:
设系统中有一个主片,两个从片,且从片 1接主片
IR1引脚,从片 2接主片 IR2引脚,则优先级排列如下:
主片,IR0
从片 1,IR0~IR7
从片 2,IR0~IR7
主片,IR3~IR7
习题与思考题
1、中断控制器的功能;
2,8259A的编程结构和工作原理;
3,8259A各工作方式特点和区别;
4,8259A的初始化流程;
5、读 IRR,ISR和 IMR的方法;
6、电平触发方式下中断请求信号应何时撤消?
7、看懂 8259A的应用实例;
8、主从式中断系统中优先级的排列次序;
§ 6.2 DMA控制器 8237A
一,DMA控制器的一般结构和概要通道,DMA控制器中和某个接口的联系的部分。
组成控制寄存器状态寄存器地址寄存器字节计数器
DMA初始化数据传输缓冲区的起始地址或结束地址送到地址寄存器中;
传输字节数或字数送到计数器中二,DMA控制器 8237A的原理
1,8237A的编程结构和外部连接
① 编程结构地址寄存器字节计数器模式寄存器请求触发器屏蔽触发器
4个独立通道公用 控制寄存器状态寄存器
② 对外连接信号
CLK:时钟输入端
RESET:复位
READY,准备就绪信号
ADSTB,地址选通信号
AEN:地址允许信号(高 8位)
CS:片选
MEMR:存储器读信号
MEMW:存储器写信号
IOR:接口读信号,双向
IOW:接口写信号,双向存储器 → 接口:
MEMR,IOW有效接口 → 存储器:
MEMW,IOR有效
DREQ0~3,DMA请求输入
DACK0~3,DMA应答
8237A和外设之间极性编程选择
HRQ:总线请求
HLDA:总线应答 CPU和 8237A之间
A3~A0:地址线,双向
A4~A7:地址线,输出
DB0~DB7:高 8位地址 /数据分时复用
EOP,DMA传输过程结束,双向
③ 8237A工作时各信号的配合
※ 作为从模块工作时:
A3~A0:输入,选择端口地址
CS,HRQ,AEN:低电平
IOR,IOW:输入,端口读 /写控制
DB0~DB7:传送数据
※ 作为主模块工作时:
A7~A0:输出,低 8位地址
DB0~DB7:输出,高 8位地址
AEN:高电平
IOR,IOW,MEMR,MEMW:输出,端口,存储器读 /写控制高 4位地址:页面地址寄存器提供
2,8237A的工作模式和模式寄存器格式
① 工作模式
单字节传输模式:
每次请求只传送一个字节就释放总线
块传输模式当所有字节传送结束时才释放总线
请求传输模式只有 DREQ有效时才传输,所有字节传送结束才释放总线
级联模式几个 8237A构成主从式级联系统
② 模式寄存器格式
D7 D6 D5 D4 D3 D2 D1 D0
通道选择:
00:通道 0
01:通道 1
10:通道 2
11:通道 3
传输类型选择:
00:校验传输
01:写传输
10:读传输
11:无意义自动预置功能选择:
0:禁止 1:允许地址增减选择:
0:地址加 1,1:地址减 1
模式选择:
00:请求传输
01:单字节传输
10:块传输
11:级联传输
0BH
3,控制寄存器格式
D7 D6 D5 D4 D3 D2 D1 D0
1,M-M传输
1,M-M传输时,
源地址保持不变
0:启动 8237A工作
1:停止 8237A工作
0:固定优先级,1:循环优先级
0:正常写,1:扩展写
0:普通时序,1:压缩时序
DREQ极性
0:高电平有效,1:低电平有效
DACK极性
0:低电平有效,1:高电平有效
08H
状态及时序:
SI:空转状态
S0:总线请求状态
S1:锁存高 8位地址
S2:修改地址
S3:读
S4:写
Sw:等待
扩展写:加宽 IOW和 MEMW宽度,使之在 S3即有效
压缩时序:不用 S3,只用 S2和 S4就完成传输
SI SI S0 S0
Sw Sw
S1 S2 S3 S4
单字节传输块传输
HRQ
DREQ HLDA
就绪未就绪就绪空闲状态 请求应答状态 数据传输状态状态转换图:
通道 3~0是否有 DMA请求:
1:有,0:没有通道 3~0是否计数结束:
1:结束,0:没结束
4,状态寄存器格式
5,请求标志和屏蔽标志的设置
D7 D6 D5 D4 D3 D2 D1 D0
通道选择
00:通道 0
01:通道 1
10:通道 2
11:通道 3
设置 DMA请求标志:
1:有请求,0:无请求不用请求寄存器格式:
08H
09H
3 2 1 0 3 2 1 0
屏蔽寄存器格式:
D7 D6 D5 D4 D3 D2 D1 D0
通道选择
00:通道 0
01:通道 1
10:通道 2
11:通道 3
屏蔽设置:
1:设屏蔽位,
0:去除屏蔽位不用综合屏蔽命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
对通道 3~0设置屏蔽:
1:设置,0:取消不用
0AH
0FH
6、复位命令、清除先 /后触发器命令和清除屏蔽标志命令
复位命令:屏蔽寄存器置 1,其它寄存器清 0
清除先 /后触发器命令:保证从低字节开始写入
清除屏蔽标志命令:使 4个通道的屏蔽位全为 0,
开放所有通道软命令:只要对指定地址进行写操作就能实现相应功能,而和写入内容无关。
7,8237A各寄存器对应的端口地址端口地址通道寄 存 器读( IOR) 写( IOW)
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
0
0
1
1
2
2
3
3
公用读通道 0当前地址寄存器读通道 0当前字节计数器读通道 1当前地址寄存器读通道 1当前字节计数器读通道 2当前地址寄存器读通道 2当前字节计数器读通道 3当前地址寄存器读通道 3当前字节计数器读状态寄存器
—
—
—
—
读暂存寄存器
—
—
写通道 0基地址和当前地址寄存器写通道 0基字节和当前字节计数器写通道 1基地址和当前地址寄存器写通道 1基字节和当前字节计数器写通道 2基地址和当前地址寄存器写通道 2基字节和当前字节计数器写通道 3基地址和当前地址寄存器写通道 3基字节和当前字节计数器写命令寄存器写请求寄存器写单个通道屏蔽寄存器写工作方式寄存器写清除先 /后触发器命令写复位命令写清除屏蔽标志命令写四个通道屏蔽寄存器三,8237A的编程和使用
1,IBM-PC机中 DMA控制器 8237A的初始化和测试程序段。
分析:
① 初始化:停止 8237A工作,发总清命令,设置各通道模式,设置控制字;
② 测试:依次给各地址寄存器写入全 1,再读出比较;
③ 端口地址,DMA+0~DMA+0FH,其中 DMA=0;
程序:
MOV AL,04
MOV DX,DMA+8
OUT DX,AL
MOV DX,DMA+0DH
OUT DX,AL
MOV DX,DMA
MOV CX,0004
WRITE,MOV AL,0FFH
OUT DX,AL
OUT DX,AL
INC DX
INC DX
LOOP WRITE; 00000100
停止 8237A工作;总清命令;给 4个地址寄存器写入全 1
MOV DX,DMA+0BH
MOV AL,58H
OUT DX,AL
MOV AL,41H
OUT DX,AL
MOV AL,42H
OUT DX,AL
MOV AL,43H
OUT DX,AL;模式寄存器端口地址; 01 0 1 10 00
通道 0
读操作自动预置地址加 1
单字节; 01 0 0 00 01
10
11
通道号校验操作非自动预置地址加 1
单字节
MOV DX,DMA+8
MOV AL,0
OUT DX,AL
MOV DX,DMA+0AH
OUT DX,AL
MOV AL,01
OUT DX,AL
MOV AL,02
OUT DX,AL
MOV AL,03
OUT DX,AL; 8237A控制寄存器端口地址; 0 0 0 0 0 0 00 不允许 M-M操作启动 8237A
普通时序固定优先级不扩展写
DREQ高电平有效
DACK低电平有效;使 4个通道去除屏蔽
MOV DX,DMA+2
MOV CX,0003
READ,IN AL,DX
MOV AH,AL
IN AL,DX
CMP AX,0FFFFH
JNZ HHH
INC DX
INC DX
LOOP READ
……
HHH,HLT;读出通道 1~3的地址寄存器的值并和全 1比较
2、利用通道 1进行网络通信的传输程序分析:
① 入口参数:
ES,BX—— 缓冲区首地址
DI—— 传送字节数
SI—— 数据传输方向
48H( 01001000,读):主机 → 网络
44H( 01000100,写):网络 → 主机
② 20位存储器地址的生成
A0~A7,8237A的 A0~A7输出
A8~A15,8237A的 DB0~DB7输出
A16~A19:页面地址寄存器输出(端口地址 83H)
程序:
NETTRA,MOV DX,DMA+0CH
MOV AL,00
OUT DX,AL
MOV DX,DMA+09H
OUT DX,AL
MOV AX,01
OR AX,SI
MOV DX,DMA+0BH
OUT DX,AL;清先 /后触发器;清除请求标志;设置通道 1的模式字
SI值的最低位置 1
MOV AX,ES
MOV CL,04
ROL AX,CL
MOV CH,AL
AND AL,0F0H
ADD AX,BX
JNC ABC
INC CH
ABC,MOV DX,DMA+2
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,CH
AND AL,0FH
MOV DX,DMA+0083H
OUT DX,AL
设( ES) =X1X2X3X4,则
X1 X2 X3 X4AX:
X1X2 X3 X4AX:
X1X4CH,0X2 X3 X4AX:
MOV AX,DI
DEC AX
MOV DX,DMA+3
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,DMA+0AH
MOV AL,01
OUT DX,AL
MOV DX,DMA+8
MOV AL,60H
OUT DX,AL
MOV DX,DMA+8
WAIT,IN AL,DX
AND AL,02H
JZ WAIT
……;字节计数器初值为计数值减 1;去除通道 1的屏蔽,开放通道 1;设置控制寄存器;判断传送是否结束习题和思考题
1,8237A的基本特性和编程结构;
2、了解 8237A分别作为主模块和从模块时各信号的配合;
3、单字节传送方式的特点;
4,8237A工作过程中七种状态的意义和状态转换图;
5、软命令的特点;
6,DMA传送时 20位存储器地址的生成方法;
7、看懂 8237A的两个应用程序;
§ 6.3 计数器 /定时器 8253
一、概述定时信号的应用动态 RAM刷新定时系统时钟扬声器定时的实现方法 软件:延时程序硬件:定时器 /计数器二、可编程计数器 /定时器的工作原理
几种工作模式:
门脉冲控制时钟输入用门脉冲重新启动计数用门脉冲停止计数单一计数循环计数
计数初值的计算:
设输入脉冲频率为 CLK,定时时间为 T,则输出脉冲频率 OUT=1/T
计数初值 =CLK/OUT=CLK× T
三、可编程计数器 /定时器 8253
1,8253的内部结构和工作原理
编程结构:
三个 16位减 1计数器组成计数初值寄存器 CR
计数执行部件 CE
输出锁存器 OL
引脚
CLKi
GATEi
OUTi
工作原理,※ 计数器 0,1,2
引脚 CLK,GATE,OUT
※ 数据总线缓冲器引脚 D7~D0
※ 读写控制电路引脚 A1,A0
RD,WR,CS
※ 控制寄存器
A1A0 寄存器
0 0 计数器 0
0 1 计数器 1
1 0 计数器 2
1 1 控制寄存器
2,8253控制寄存器的格式
SC1 SC0 RW1 RW0 M2 M1 M0 BCD
设置计数值格式二进制格式
BCD码格式模式选择
000 模式 0
001 模式 1
× 10 模式 2
× 11 模式 3
100 模式 4
101 模式 5
读 /写指示位
00 锁存命令
01 只读 /写低字节
10 只读 /写高字节
11 先低后高选择计数器
00 计数器 0
01 计数器 1
10 计数器 2
11 无意义
3,8253的编程命令
读出命令读输出锁存器的值(计数当前值)
写入命令设置控制字 —— 控制口设置计数初值 —— 对应计数器端口锁存命令 —— 控制口问题:为什么读出前一定要先锁存?
4,8253的工作模式各模式的基本规则:
写入控制字时,所有控制电路立即复位,OUT进入初始状态
计数初值写入后,要经过一个时钟上升沿和下降沿,才开始计数
CLK的上升沿,GATE位被采样
CLK的下降沿,计数器作减 1计数
① 8253的模式 0的时序:
CLK
WR
GATE
OUT
N=5
5 4 3 2 1 0
WR
GATE
OUT
N=5
5 4 4 4 3 2 1 0
WR
GATE
OUT
N=5
5 4 3 4 3 0
N=4
2 1
CLK
② 8253的模式 1的时序:
WR
GATE
OUT 0 2 1 03 2 1
N=3 N=2
WR
GATE
OUT
N=4
4 3 2 1 04 3 2
WR
GATE
OUT 4 3 2 1 05
N=5
③ 8253的模式 2的时序:
CLK
WR
GATE
OUT
N=4
4 3 2
N=3
2 11 0(3) 0(3)
WR
GATE
OUT 4 3 3 3 3 2 1 0(4)4
N=3
WR
GATE
OUT
N=3
3 2 1 0(3) 2 1 0(3)
④ 8253的模式 3的时序:
CLK
WR
GATE
OUT
N=5
5 4 3 2 1 0(5) 4 3 2
WR
GATE
OUT
N=4
3 2 14 3 2 10(4) 0(4)
⑤ 8253的模式 4的时序:
WR
GATE
OUT
N=5
5 4 3 2 1 0
CLK
WR
GATE
OUT
N=3
3 2 2 2 2 1 03
WR
GATE
OUT
N=3
3 2
N=2
2 11 0 0
⑥ 8253的模式 5的时序:
CLK
WR
GATE
OUT
N=4
4 3 2 1 0
WR
GATE
OUT
N=3
3 2 1 2 1 03
8253六种工作模式的比较:
工作模式启动计数方式
GATE信号状态在计数过程中所起的作用 写入新初值的影响初始电平
OUT输出波形低电平 下降沿 上升沿 高电平
0 WR 禁止计数 暂停计数 继续计数 允许计数 重新计数 低 低电平
1 GATE 不影响 计数 不影响 计数 重新开始计数 不影响 计数 不影响 计数 高 低电平
2 WR 禁止计数 停止计数 重新开始计数 允许计数 下一次计数开始重新计数高 周期性负 脉冲
3 WR 禁止计数 停止计数 重新开始计数 允许计数 高 方波
4 WR 禁止计数 停止计数 重新开始计数 允许计数 重新计数 高 计数结束输 出负脉冲
5 GATE 不影响 计数 不影响 计数 重新开始计数 不影响 计数 不影响 计数 高 计数结束输 出负脉冲四,8253应用举例例:用 8253为 A/D子系统提供可编程的采样信号。
1、硬件电路
2、分析:
T0:模式 2,计数初值为 L( 8位二进制,小于 256)
CLK0— F(时钟输出)
GATE0— OUT1
OUT0— 送 A/D转换器 CONVERT
T1:模式 1,计数初值为 M( 4位 BCD码,小于 10000)
CLK1— OUT2
GATE1— 接开关
OUT1— 接 GATE0反相
T2:模式 3,计数初值为 N( 8位二进制,小于 256)
CLK2— F
GATE2— 接开关
OUT2— 接 CLK1反相波形图:
A/D转换器采样率,F/L
每次采样持续时间,MN/F
端口地址,0070H~0076H
采样周期采样持续时间开关闭合一次的时间
CLK0/CLK2
( F)
GATE1/GATE2
OUT2
CLK1
OUT1
GATE0
OUT0
CONVERT
波形图:
频率
F
F/N
F/N
F/MN
F/MN
F/L
F/L
程序:
MOV AL,14H
OUT 76H,AL
MOV AL,LCNT
OUT 70H,AL
MOV AL,73H
OUT 76H,AL
MOV AX,MCNT
OUT 72H,AL
MOV AL,AH
OUT 72H,AL
MOV AL,96H
OUT 76H,AL
MOV AL,NCNT
OUT 74H,AL; 00010100,T0设为模式 2,二进制计数; 01110011,T1设为模式 1,BCD码计数; 10010110,T2设为模式 3,二进制计数;给 T0设初值;给 T1设初值;给 T2设初值习题与思考题
1、实现定时的两种方法;
2、定时器 /计数器的基本原理;
3、计数初值的计算;
4,8253的结构和工作原理;
5,8253的编程方法;
6、为什么读计数值前一定要锁存?
7、六种工作模式的特点和区别;
作业:
用 8253的计数器 0产生一个 20ms的定时信号,
要求定时结束产生一个负脉冲,设端口地址为
2F0H~2F3H,CLK0=500KHz,写出初始化程序段。
§ 6.1 中断控制器 8259A
一,8259A的引脚信号,编程结构和工作原理
1,8259A的外部引脚信号
和 CPU相连
D0~ D7:数据线
INT:中断请求( 8259A→ CPU)
A0:片内端口选择
INTA:中断响应信号
RD:读信号
WR:写信号
CS:片选信号
和外设相连
IR7~ IR0:中断请求(外设 → 8259A)
和同类芯片相连
CAS0~CAS2:指出具体从片
SP/EN:主 /从片选择(输入)或启动总线驱动器
(输出)
2,8259A的编程结构和工作原理
编程结构
7个寄存器 初始化命令字 ICW1~ICW4操作命令字 OCW1~OCW3 控制部件
IRR:中断请求寄存器
PR:中断优先级裁决器
ISR:中断服务寄存器处理部件
8259A对外部中断的处理过程:
① IRR接收中断请求并锁存;
② IMR决定是否此请求通过;
③ 中断优先级裁决器把新请求和正在处理的中断进行比较,如新中断优先级高,则向 CPU发中断请求;
④ 若 IF=1,则 CPU执行完当前指令后响应此中断,即从 INTA引脚回送两个负脉冲;
二,8259A的工作方式
1、设置优先级的方式:
① 全嵌套方式:优先级固定,次序由高到低依次为
0~7;
② 特殊全嵌套方式:可响应同级中断;
8259A
8259A
INT
主片:
从片:
0 1 2 3 4 5 6 7
8 10 12 14
9 11 13 15
优先级次序:
主片,0,1
从片,8~15
主片,3~7
③ 优先级自动循环方式:某中断被响应后,优先级自动降为最低,初始状态 IR0为最高优先级;
④ 优先级特殊循环方式:初始状态优先级由编程设定;
2、屏蔽中断源的方式
① 普通屏蔽方式,8259A的每个中断请求输入端都可以通过对应屏蔽位的设置被屏蔽;
② 特殊屏蔽方式:应用于中断服务程序中,可在某一段区域内响应低级中断;
3、结束中断处理的方式问题:为什么要进行结束中断处理?
具体动作:对应 ISn位清 0
① 中断自动结束方式:只有一片 8259A,且不允许嵌套,对应的 ISn位在第二个 INTA脉冲结束时被请除;
② 一般的中断结束方式:用于全嵌套方式,中断结束时自动清除优先级最高的 ISn位;
③ 特殊的中断结束方式:用于非全嵌套方式;中断结束时清除指定的 ISn位;
4、连接系统总线的方式
① 缓冲方式:通过总线驱动器和数据总线相连;
② 非缓冲方式:直接和数据总线相连;
B0~7
8286
T OE
A0~7
SP/EN D0~7
8259A
+5V
数据总线缓冲方式:
SP/EN D0~7
8259A
(从片)
数据总线非缓冲方式:
SP/EN D0~7
8259A
(主片或单片)
数据总线
+5V
5、引入中断请求的方式:
① 边沿触发方式:上升沿触发;
② 电平触发方式:高电平触发;
③ 中断查询方式,CPU靠查询确定为哪个设备服务;
工作过程:
关中断输出 OCW3
输入查询字查询字格式:
I — — — — W2 W1 W0
当前中断请求的最高优先级
1:有请求
0:无请求三,8259A的初始化命令字和操作命令字
1,8259A的初始化命令字
① ICW1:芯片控制初始化命令字( A0=0)
1 LTIM ADI SNGL IC4
是否需要 ICW4
=1 需要是否处于级联状态
=1 单片 =0 级联
8086/8088系统中无效中断请求信号形式
=1 电平触发 =0 脉冲触发特征位
8086/8088
系统中不用
② ICW2:中断类型码初始化命令字( A0=1)
T7 T6 T5 T4 T3 0 0 0
8086/8088
系统中无效中断类型码高 5位
③ ICW3:标志主片 /从片的初始化命令字( A0=1)
级联方式设置
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0主片:
=1,说明对应引脚上连接有片连接主片哪一引脚
0 0 0 0 0 ID2 ID1 ID0从片:
不用
D0~D7 INTA INT
CAS0
8259A (3) CAS1
CAS2
SP/EN IR7 IR0
GND
D0~D7 INTA INT
CAS0
8259A (2) CAS1
CAS2
SP/EN IR7 IR0
GND
D0~D7 INTA INT
CAS0
CAS1 8259A(1)
CAS2
SP/EN IR7 IR0
Vcc
控制总线数据总线
OCW3的值:
8259A( 1),01001000 48H
8259A( 2),00000110 06H
8259A( 3),00000011 03H
④ ICW4:方式控制初始化命令字 ( A0=1)
0 0 0 SFNM BUF M/S AEOI μPM
=1 为 8086/
8088系统中断结束方式
=0 非自动结束方式
=1 自动结束方式主片 /从片选择
(缓冲方式有效)
=0 从片 =1 主片缓冲方式设定
=1 缓冲方式 =0 非缓冲方式特殊全嵌套方式设定
=1 特殊全嵌套方式不用
2,8259A的初始化流程:
送 ICW1
送 ICW2
送 ICW3
送 ICW4
准备接收中断级联方式?
需要 ICW4?
N
N
Y
Y
举例:设某系统只有一片 8259A,端口地址为 80H和
81H,边沿触发,需设 ICW4,中断类型码为
18H~1FH,一般全嵌套方式,非自动中断结束,
缓冲方式。
程序:
MOV AL,13H
OUT 80H,AL
MOV AL,18H
OUT 81H,AL
MOV AL,0DH
OUT 81H,AL
00010011 需 ICW4
单片方式边沿触发
00001101 8086/8088系统非自动中断结束主片缓冲方式一般全嵌套方式
00011000
中断类型码高五位
3,8259A操作命令字
① OCW1:中断屏蔽命令字 ( A0=1)
M7 M6 M5 M4 M3 M2 M1 M0
若 Mi位为 1,则对应 IRi的中断请求就被屏蔽,若为
0,则对应 IRi的中断请求就被允许。
举例:设 8259A端口地址为 20H和 21H,开放 IR2和
IR7中断,其它均被屏蔽
MOV AL,7BH ; 01111011
OUT 21H,AL
要想读出中断屏蔽寄存器 IMR的值,IN AL,21H
② OCW2:设置优先级循环方式和中断结束方式命令字 ( A0=0)
R SL EOI 0 0 L2 L1 L0
中断等级代码特征位中断结束方式,
=1 发中断结束命令说明 L2L1L0是否有效:
=0 无效,=1 有效中断优先级循环方式:
=0 固定优先级,=1 循环优先级
R,SL,EOI的各种组合的意义:
R SL EOI 意 义
0 0 0 结束优先级自动循环方式
0 0 1 一般中断结束命令
0 1 0 无意义
0 1 1 特殊中断结束命令,ISn由 L2L1L0指定
1 0 0 设定优先级自动循环方式
1 0 1 一般中断结束命令,且当前优先级次序左移一位
1 1 0 设定优先级特殊循环方式,由 L2L1L0指定最低优先级
1 1 1 特殊中断结束命令,并设定为最低优先级
3,OCW3,( A0=0)
功能设置和撤消特殊屏蔽命令设置中断查询命令设置对 8259A内部寄存器的读出命令
0 ESMM SMM 0 1 P RR RIS
=0 读 IRR
=1 读 ISR
=1 读 IRR和 ISR内容
=1 中断查询工作方式
=1 设置特殊屏蔽方式 =0 撤消特殊屏蔽方式
SMM允许位,=1 SMM有效,=0 SMM无效特征位不用
P,RR,RIS的各组合的意义:
P RR RIS 意义
1 × × 读查询字
0 0 × 不读寄存器
0 1 0 读 IRR
0 1 1 读 ISR
举例:设某系统只有一片 8259A,端口地址为 20H、
21H,编程序将 8259A的 IRR,ISR和 IMR三个寄存器的内容读出,存入数据段 BUF开始的单元。
程序:
MOV AL,0AH
OUT 20H,AL
IN AL,20H
MOV BUF,AL
MOV AL,0BH
OUT 20H,AL
IN AL,20H
MOV BUF+1,AL
IN AL,21H
MOV BUF+2,AL
读 IRR内容读 ISR内容读 IMR内容初始化命令字和操作命令字小结:
① 占用端口地址:
A0=0,ICW1,OCW2,OCW3
A0=1,ICW2,ICW3,ICW4,OCW1
② 区分方法:
A0=0,按特定位区分,ICW1— D4=1,
OCW2— D4D3=00,
OCW3— D4D3=01
A0=1,按写入顺序区分,ICW2,ICW3,ICW4在
ICW1之后顺序写入,OCW1在初始化后任一时刻写入。
③ 写入时间,ICW— 初始化时,OCW— 工作过程中四,8259A使用中的一个问题
电平触发方式下中断请求信号应何时撤消?
INTA
IR
正确:
INTA
IR
过晚:可能引起多次中断
INTA
IR
过早:无法识别,自动设为 IR7
五,8259A使用举例
1、关于中断全嵌套的例子特点:只响应高级中断,优先级固定,中断服务程序最后应执行中断结束指令。
条件:
① 主程序必须开中断;
② 中断服务程序也必须开中断;
③ 中断服务程序结束时应执行中断结束命令;
2、关于如何使用中断结束命令的例子初始化开中断开中断开中断关中断中断结束命令开中断中断返回关中断中断结束命令开中断中断返回
IR3请求中断
IR3中断处理程序
IR2请求中断主程序
IS4被清除
IS3置 1
IR3有中断请求
IR4中断处理程序
IS4置 1
IS2被清除
IS1被清除
IR1中断处理程序
IS1置 1
IS2置 1
IR2中断处理程序初始化
STI
STI
中断结束命令
STI
IRET
中断结束命令
STI
中断结束命令
STI
IRET
中断结束命令
IRET
IRET
IR2和 IR4有中断请求
IR1有中断请求
IR3中断处理程序
IS3被清除
ISR=00000000
ISR=00000100
ISR=00000110
ISR=00000100
ISR=00010000
ISR=00011000
ISR=00010000
ISR=00000000
ISR=00000000
3、关于特殊屏蔽方式的例子特殊屏蔽方式的使用方法:
通过 OCW3使 8259A工作于特殊屏蔽方式,再用 OCW1对屏蔽寄存器中本级中断的对应位置位,
即可使系统除了本级中断外,响应其他任何未被屏蔽的中断请求。
举例:设 8259A的偶地址端口为 80H,奇地址端口为 81H,且系统当前正在为 IR4进行中断服务。
……
CLI
MOV AL,68H
OUT 80H,AL
IN AL,81H
OR AL,10H
OUT 81H,AL
STI
……
CLI
IN AL,81H
AND AL,0EFH
OUT 81H,AL
MOV AL,48H
OUT 80H,AL
STI
……
MOV AL,20H
OUT 80H,AL
IRET; 01001000
撤消特殊屏蔽方式; IR4对应屏蔽位置 1; IR4对应屏蔽位清 0; 01101000
设置特殊屏蔽方式; 00100000
中断结束命令六、多片 8259A组成的主从式中断系统说明:
① 每片 8259A都要分配两个端口地址;
② 主片初始化时,ICW1中的 SNGL位必须为 0,
ICW3指明哪个引脚连有从片,一般通过 ICW4的
SFNM位设为特殊全嵌套方式;
③ 从片初始化时,ICW1中的 SNGL位也必须为 0,
ICW3指明该从片接主片的哪个引脚;
主从式中断系统的响应过程:
① 从片的 INT引脚往主片的 IRn引脚上发送一个中断请求信号;
② 该中断请求信号通过主片的 INT引脚送到 CPU;
③ CPU回送两个 INTA信号,同时送到主片和各从片;
⑤ 被选通的从片收到第一个 INTA信号后,将相应
ISn位置 1,同时清除相应 IRn位;
⑥ 第二个 INTA信号到来后,主片没有动作,从片将中断类型码送到数据总线上;
④ 主片收到第一个 INTA信号后,将相应 ISn位置 1,
同时清除相应 IRn位;并将从片标号值送到
CAS0~CAS2上;
主从式中断系统中的优先级排列:
设系统中有一个主片,两个从片,且从片 1接主片
IR1引脚,从片 2接主片 IR2引脚,则优先级排列如下:
主片,IR0
从片 1,IR0~IR7
从片 2,IR0~IR7
主片,IR3~IR7
习题与思考题
1、中断控制器的功能;
2,8259A的编程结构和工作原理;
3,8259A各工作方式特点和区别;
4,8259A的初始化流程;
5、读 IRR,ISR和 IMR的方法;
6、电平触发方式下中断请求信号应何时撤消?
7、看懂 8259A的应用实例;
8、主从式中断系统中优先级的排列次序;
§ 6.2 DMA控制器 8237A
一,DMA控制器的一般结构和概要通道,DMA控制器中和某个接口的联系的部分。
组成控制寄存器状态寄存器地址寄存器字节计数器
DMA初始化数据传输缓冲区的起始地址或结束地址送到地址寄存器中;
传输字节数或字数送到计数器中二,DMA控制器 8237A的原理
1,8237A的编程结构和外部连接
① 编程结构地址寄存器字节计数器模式寄存器请求触发器屏蔽触发器
4个独立通道公用 控制寄存器状态寄存器
② 对外连接信号
CLK:时钟输入端
RESET:复位
READY,准备就绪信号
ADSTB,地址选通信号
AEN:地址允许信号(高 8位)
CS:片选
MEMR:存储器读信号
MEMW:存储器写信号
IOR:接口读信号,双向
IOW:接口写信号,双向存储器 → 接口:
MEMR,IOW有效接口 → 存储器:
MEMW,IOR有效
DREQ0~3,DMA请求输入
DACK0~3,DMA应答
8237A和外设之间极性编程选择
HRQ:总线请求
HLDA:总线应答 CPU和 8237A之间
A3~A0:地址线,双向
A4~A7:地址线,输出
DB0~DB7:高 8位地址 /数据分时复用
EOP,DMA传输过程结束,双向
③ 8237A工作时各信号的配合
※ 作为从模块工作时:
A3~A0:输入,选择端口地址
CS,HRQ,AEN:低电平
IOR,IOW:输入,端口读 /写控制
DB0~DB7:传送数据
※ 作为主模块工作时:
A7~A0:输出,低 8位地址
DB0~DB7:输出,高 8位地址
AEN:高电平
IOR,IOW,MEMR,MEMW:输出,端口,存储器读 /写控制高 4位地址:页面地址寄存器提供
2,8237A的工作模式和模式寄存器格式
① 工作模式
单字节传输模式:
每次请求只传送一个字节就释放总线
块传输模式当所有字节传送结束时才释放总线
请求传输模式只有 DREQ有效时才传输,所有字节传送结束才释放总线
级联模式几个 8237A构成主从式级联系统
② 模式寄存器格式
D7 D6 D5 D4 D3 D2 D1 D0
通道选择:
00:通道 0
01:通道 1
10:通道 2
11:通道 3
传输类型选择:
00:校验传输
01:写传输
10:读传输
11:无意义自动预置功能选择:
0:禁止 1:允许地址增减选择:
0:地址加 1,1:地址减 1
模式选择:
00:请求传输
01:单字节传输
10:块传输
11:级联传输
0BH
3,控制寄存器格式
D7 D6 D5 D4 D3 D2 D1 D0
1,M-M传输
1,M-M传输时,
源地址保持不变
0:启动 8237A工作
1:停止 8237A工作
0:固定优先级,1:循环优先级
0:正常写,1:扩展写
0:普通时序,1:压缩时序
DREQ极性
0:高电平有效,1:低电平有效
DACK极性
0:低电平有效,1:高电平有效
08H
状态及时序:
SI:空转状态
S0:总线请求状态
S1:锁存高 8位地址
S2:修改地址
S3:读
S4:写
Sw:等待
扩展写:加宽 IOW和 MEMW宽度,使之在 S3即有效
压缩时序:不用 S3,只用 S2和 S4就完成传输
SI SI S0 S0
Sw Sw
S1 S2 S3 S4
单字节传输块传输
HRQ
DREQ HLDA
就绪未就绪就绪空闲状态 请求应答状态 数据传输状态状态转换图:
通道 3~0是否有 DMA请求:
1:有,0:没有通道 3~0是否计数结束:
1:结束,0:没结束
4,状态寄存器格式
5,请求标志和屏蔽标志的设置
D7 D6 D5 D4 D3 D2 D1 D0
通道选择
00:通道 0
01:通道 1
10:通道 2
11:通道 3
设置 DMA请求标志:
1:有请求,0:无请求不用请求寄存器格式:
08H
09H
3 2 1 0 3 2 1 0
屏蔽寄存器格式:
D7 D6 D5 D4 D3 D2 D1 D0
通道选择
00:通道 0
01:通道 1
10:通道 2
11:通道 3
屏蔽设置:
1:设屏蔽位,
0:去除屏蔽位不用综合屏蔽命令格式:
D7 D6 D5 D4 D3 D2 D1 D0
对通道 3~0设置屏蔽:
1:设置,0:取消不用
0AH
0FH
6、复位命令、清除先 /后触发器命令和清除屏蔽标志命令
复位命令:屏蔽寄存器置 1,其它寄存器清 0
清除先 /后触发器命令:保证从低字节开始写入
清除屏蔽标志命令:使 4个通道的屏蔽位全为 0,
开放所有通道软命令:只要对指定地址进行写操作就能实现相应功能,而和写入内容无关。
7,8237A各寄存器对应的端口地址端口地址通道寄 存 器读( IOR) 写( IOW)
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
0
0
1
1
2
2
3
3
公用读通道 0当前地址寄存器读通道 0当前字节计数器读通道 1当前地址寄存器读通道 1当前字节计数器读通道 2当前地址寄存器读通道 2当前字节计数器读通道 3当前地址寄存器读通道 3当前字节计数器读状态寄存器
—
—
—
—
读暂存寄存器
—
—
写通道 0基地址和当前地址寄存器写通道 0基字节和当前字节计数器写通道 1基地址和当前地址寄存器写通道 1基字节和当前字节计数器写通道 2基地址和当前地址寄存器写通道 2基字节和当前字节计数器写通道 3基地址和当前地址寄存器写通道 3基字节和当前字节计数器写命令寄存器写请求寄存器写单个通道屏蔽寄存器写工作方式寄存器写清除先 /后触发器命令写复位命令写清除屏蔽标志命令写四个通道屏蔽寄存器三,8237A的编程和使用
1,IBM-PC机中 DMA控制器 8237A的初始化和测试程序段。
分析:
① 初始化:停止 8237A工作,发总清命令,设置各通道模式,设置控制字;
② 测试:依次给各地址寄存器写入全 1,再读出比较;
③ 端口地址,DMA+0~DMA+0FH,其中 DMA=0;
程序:
MOV AL,04
MOV DX,DMA+8
OUT DX,AL
MOV DX,DMA+0DH
OUT DX,AL
MOV DX,DMA
MOV CX,0004
WRITE,MOV AL,0FFH
OUT DX,AL
OUT DX,AL
INC DX
INC DX
LOOP WRITE; 00000100
停止 8237A工作;总清命令;给 4个地址寄存器写入全 1
MOV DX,DMA+0BH
MOV AL,58H
OUT DX,AL
MOV AL,41H
OUT DX,AL
MOV AL,42H
OUT DX,AL
MOV AL,43H
OUT DX,AL;模式寄存器端口地址; 01 0 1 10 00
通道 0
读操作自动预置地址加 1
单字节; 01 0 0 00 01
10
11
通道号校验操作非自动预置地址加 1
单字节
MOV DX,DMA+8
MOV AL,0
OUT DX,AL
MOV DX,DMA+0AH
OUT DX,AL
MOV AL,01
OUT DX,AL
MOV AL,02
OUT DX,AL
MOV AL,03
OUT DX,AL; 8237A控制寄存器端口地址; 0 0 0 0 0 0 00 不允许 M-M操作启动 8237A
普通时序固定优先级不扩展写
DREQ高电平有效
DACK低电平有效;使 4个通道去除屏蔽
MOV DX,DMA+2
MOV CX,0003
READ,IN AL,DX
MOV AH,AL
IN AL,DX
CMP AX,0FFFFH
JNZ HHH
INC DX
INC DX
LOOP READ
……
HHH,HLT;读出通道 1~3的地址寄存器的值并和全 1比较
2、利用通道 1进行网络通信的传输程序分析:
① 入口参数:
ES,BX—— 缓冲区首地址
DI—— 传送字节数
SI—— 数据传输方向
48H( 01001000,读):主机 → 网络
44H( 01000100,写):网络 → 主机
② 20位存储器地址的生成
A0~A7,8237A的 A0~A7输出
A8~A15,8237A的 DB0~DB7输出
A16~A19:页面地址寄存器输出(端口地址 83H)
程序:
NETTRA,MOV DX,DMA+0CH
MOV AL,00
OUT DX,AL
MOV DX,DMA+09H
OUT DX,AL
MOV AX,01
OR AX,SI
MOV DX,DMA+0BH
OUT DX,AL;清先 /后触发器;清除请求标志;设置通道 1的模式字
SI值的最低位置 1
MOV AX,ES
MOV CL,04
ROL AX,CL
MOV CH,AL
AND AL,0F0H
ADD AX,BX
JNC ABC
INC CH
ABC,MOV DX,DMA+2
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,CH
AND AL,0FH
MOV DX,DMA+0083H
OUT DX,AL
设( ES) =X1X2X3X4,则
X1 X2 X3 X4AX:
X1X2 X3 X4AX:
X1X4CH,0X2 X3 X4AX:
MOV AX,DI
DEC AX
MOV DX,DMA+3
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,DMA+0AH
MOV AL,01
OUT DX,AL
MOV DX,DMA+8
MOV AL,60H
OUT DX,AL
MOV DX,DMA+8
WAIT,IN AL,DX
AND AL,02H
JZ WAIT
……;字节计数器初值为计数值减 1;去除通道 1的屏蔽,开放通道 1;设置控制寄存器;判断传送是否结束习题和思考题
1,8237A的基本特性和编程结构;
2、了解 8237A分别作为主模块和从模块时各信号的配合;
3、单字节传送方式的特点;
4,8237A工作过程中七种状态的意义和状态转换图;
5、软命令的特点;
6,DMA传送时 20位存储器地址的生成方法;
7、看懂 8237A的两个应用程序;
§ 6.3 计数器 /定时器 8253
一、概述定时信号的应用动态 RAM刷新定时系统时钟扬声器定时的实现方法 软件:延时程序硬件:定时器 /计数器二、可编程计数器 /定时器的工作原理
几种工作模式:
门脉冲控制时钟输入用门脉冲重新启动计数用门脉冲停止计数单一计数循环计数
计数初值的计算:
设输入脉冲频率为 CLK,定时时间为 T,则输出脉冲频率 OUT=1/T
计数初值 =CLK/OUT=CLK× T
三、可编程计数器 /定时器 8253
1,8253的内部结构和工作原理
编程结构:
三个 16位减 1计数器组成计数初值寄存器 CR
计数执行部件 CE
输出锁存器 OL
引脚
CLKi
GATEi
OUTi
工作原理,※ 计数器 0,1,2
引脚 CLK,GATE,OUT
※ 数据总线缓冲器引脚 D7~D0
※ 读写控制电路引脚 A1,A0
RD,WR,CS
※ 控制寄存器
A1A0 寄存器
0 0 计数器 0
0 1 计数器 1
1 0 计数器 2
1 1 控制寄存器
2,8253控制寄存器的格式
SC1 SC0 RW1 RW0 M2 M1 M0 BCD
设置计数值格式二进制格式
BCD码格式模式选择
000 模式 0
001 模式 1
× 10 模式 2
× 11 模式 3
100 模式 4
101 模式 5
读 /写指示位
00 锁存命令
01 只读 /写低字节
10 只读 /写高字节
11 先低后高选择计数器
00 计数器 0
01 计数器 1
10 计数器 2
11 无意义
3,8253的编程命令
读出命令读输出锁存器的值(计数当前值)
写入命令设置控制字 —— 控制口设置计数初值 —— 对应计数器端口锁存命令 —— 控制口问题:为什么读出前一定要先锁存?
4,8253的工作模式各模式的基本规则:
写入控制字时,所有控制电路立即复位,OUT进入初始状态
计数初值写入后,要经过一个时钟上升沿和下降沿,才开始计数
CLK的上升沿,GATE位被采样
CLK的下降沿,计数器作减 1计数
① 8253的模式 0的时序:
CLK
WR
GATE
OUT
N=5
5 4 3 2 1 0
WR
GATE
OUT
N=5
5 4 4 4 3 2 1 0
WR
GATE
OUT
N=5
5 4 3 4 3 0
N=4
2 1
CLK
② 8253的模式 1的时序:
WR
GATE
OUT 0 2 1 03 2 1
N=3 N=2
WR
GATE
OUT
N=4
4 3 2 1 04 3 2
WR
GATE
OUT 4 3 2 1 05
N=5
③ 8253的模式 2的时序:
CLK
WR
GATE
OUT
N=4
4 3 2
N=3
2 11 0(3) 0(3)
WR
GATE
OUT 4 3 3 3 3 2 1 0(4)4
N=3
WR
GATE
OUT
N=3
3 2 1 0(3) 2 1 0(3)
④ 8253的模式 3的时序:
CLK
WR
GATE
OUT
N=5
5 4 3 2 1 0(5) 4 3 2
WR
GATE
OUT
N=4
3 2 14 3 2 10(4) 0(4)
⑤ 8253的模式 4的时序:
WR
GATE
OUT
N=5
5 4 3 2 1 0
CLK
WR
GATE
OUT
N=3
3 2 2 2 2 1 03
WR
GATE
OUT
N=3
3 2
N=2
2 11 0 0
⑥ 8253的模式 5的时序:
CLK
WR
GATE
OUT
N=4
4 3 2 1 0
WR
GATE
OUT
N=3
3 2 1 2 1 03
8253六种工作模式的比较:
工作模式启动计数方式
GATE信号状态在计数过程中所起的作用 写入新初值的影响初始电平
OUT输出波形低电平 下降沿 上升沿 高电平
0 WR 禁止计数 暂停计数 继续计数 允许计数 重新计数 低 低电平
1 GATE 不影响 计数 不影响 计数 重新开始计数 不影响 计数 不影响 计数 高 低电平
2 WR 禁止计数 停止计数 重新开始计数 允许计数 下一次计数开始重新计数高 周期性负 脉冲
3 WR 禁止计数 停止计数 重新开始计数 允许计数 高 方波
4 WR 禁止计数 停止计数 重新开始计数 允许计数 重新计数 高 计数结束输 出负脉冲
5 GATE 不影响 计数 不影响 计数 重新开始计数 不影响 计数 不影响 计数 高 计数结束输 出负脉冲四,8253应用举例例:用 8253为 A/D子系统提供可编程的采样信号。
1、硬件电路
2、分析:
T0:模式 2,计数初值为 L( 8位二进制,小于 256)
CLK0— F(时钟输出)
GATE0— OUT1
OUT0— 送 A/D转换器 CONVERT
T1:模式 1,计数初值为 M( 4位 BCD码,小于 10000)
CLK1— OUT2
GATE1— 接开关
OUT1— 接 GATE0反相
T2:模式 3,计数初值为 N( 8位二进制,小于 256)
CLK2— F
GATE2— 接开关
OUT2— 接 CLK1反相波形图:
A/D转换器采样率,F/L
每次采样持续时间,MN/F
端口地址,0070H~0076H
采样周期采样持续时间开关闭合一次的时间
CLK0/CLK2
( F)
GATE1/GATE2
OUT2
CLK1
OUT1
GATE0
OUT0
CONVERT
波形图:
频率
F
F/N
F/N
F/MN
F/MN
F/L
F/L
程序:
MOV AL,14H
OUT 76H,AL
MOV AL,LCNT
OUT 70H,AL
MOV AL,73H
OUT 76H,AL
MOV AX,MCNT
OUT 72H,AL
MOV AL,AH
OUT 72H,AL
MOV AL,96H
OUT 76H,AL
MOV AL,NCNT
OUT 74H,AL; 00010100,T0设为模式 2,二进制计数; 01110011,T1设为模式 1,BCD码计数; 10010110,T2设为模式 3,二进制计数;给 T0设初值;给 T1设初值;给 T2设初值习题与思考题
1、实现定时的两种方法;
2、定时器 /计数器的基本原理;
3、计数初值的计算;
4,8253的结构和工作原理;
5,8253的编程方法;
6、为什么读计数值前一定要锁存?
7、六种工作模式的特点和区别;
作业:
用 8253的计数器 0产生一个 20ms的定时信号,
要求定时结束产生一个负脉冲,设端口地址为
2F0H~2F3H,CLK0=500KHz,写出初始化程序段。