1. 首页
  2. 文档大全

南京邮电大学微型计算机原理与接口技术 chap8 孙力娟

上传者:58****6 2022-05-26 02:37:04上传 PPT文件 943.50KB
南京邮电大学微型计算机原理与接口技术 chap8 孙力娟_第1页 南京邮电大学微型计算机原理与接口技术 chap8 孙力娟_第2页 南京邮电大学微型计算机原理与接口技术 chap8 孙力娟_第3页

《南京邮电大学微型计算机原理与接口技术 chap8 孙力娟》由会员分享,可在线阅读,更多相关《南京邮电大学微型计算机原理与接口技术 chap8 孙力娟(94页珍藏版)》请在文档大全上搜索。

1、第第8 8章章 输入输入/ /输出系统输出系统 一一. 概概 述述 1. 接口电路的作用接口电路的作用 CPU数据数据 输出接口电路输出接口电路 输出设备输出设备 CPU 输入接口电路输入接口电路 输入设备数据输入设备数据接口接口: 是是CPU与外部设备交换信息的中转站与外部设备交换信息的中转站 I/O设备与总线之间的连接设备与总线之间的连接输出接口电路输出接口电路输出设备输出设备输入接口电路输入接口电路输入设备输入设备系系统统总总线线I/O接口电路接口电路2. 接口电路的功能接口电路的功能 应具有数据暂存功能应具有数据暂存功能 应有端口地址译码器应有端口地址译码器 (便于使用便于使用IN,

2、OUT指令读写数据指令读写数据) 与外设之间有联络功能与外设之间有联络功能 有中断管理能力有中断管理能力 有数据转换功能有数据转换功能(并并 串串,串串 并并)3. 关于端口的概念关于端口的概念 “端口端口”是是接口电路接口电路中中, 能与能与CPU交换信息交换信息(使用使用IN, OUT) 的的寄存器寄存器。 端口分类端口分类:数据口数据口: 存放存放CPU向外设输出或外设输入的数据。向外设输出或外设输入的数据。控制口控制口: 存放控制信息存放控制信息-控制接口电路、外设的控制接口电路、外设的 工作。工作。状态口状态口: 存放状态信息存放状态信息 反映外设的状态。反映外设的状态。 注意:接口

3、电路必须具有数据口。注意:接口电路必须具有数据口。注:注:每个端口,系统都为它编了一个地址,系统只要给出每个端口,系统都为它编了一个地址,系统只要给出某个地址,通过译码电路,就能找到相应的某个地址,通过译码电路,就能找到相应的I/O接口电路中接口电路中的端口寄存器。的端口寄存器。问问 题:题:系统给出的地址是内存单元地址还是系统给出的地址是内存单元地址还是I/O端口寄存端口寄存器的地址?器的地址?解决方案:解决方案:合理安排合理安排I/O端口寄存器的编址方式。端口寄存器的编址方式。 4. 端口的编址方式端口的编址方式 存储器映像方式存储器映像方式 把端口和存储单元等同看待把端口和存储单元等同看

4、待, 统一编址统一编址。 特点特点: 凡访问存储单元的指令都可访问凡访问存储单元的指令都可访问 I/O端口端口,端口地址占用存储空间。端口地址占用存储空间。 I/O端口端口独立编址独立编址 特点特点: I/O 端口不占用存储空间,端口不占用存储空间, CPU要有专用的要有专用的 I/O 指令。指令。5. PC系列机的端口编址系列机的端口编址 PC系列机采用端口独立编址;系列机采用端口独立编址;从从8088 奔腾微处理器奔腾微处理器, 设计时用设计时用A15 A0 低低16位地址寻址位地址寻址 I/O 端口;端口; 所以所以, CPU的端口寻址能力为的端口寻址能力为216=65536个;个;基于

5、微处理器的基于微处理器的PC系列系列, 实际使用实际使用A9 A0 做做I/O地址;地址; 所以所以, PC系列机系列机 I/O 端口地址最多为端口地址最多为 210=1024个。个。这这1024个口地址个口地址, 系统本身系统本身(主板上主板上, 以及常以及常 规规 I/O接口接口)已经占用了一部分。已经占用了一部分。 端口地址端口地址( I/O 空间空间)没有分段的概念。没有分段的概念。 二二. 最常用的最常用的 I/O 指令指令1.直接寻址直接寻址 I/O 指令指令设设n为为8位端口地址位端口地址IN AL , n ; 口地址为口地址为n的端口中取数的端口中取数 AL OUT n , A

6、L ; AL内容内容 口地址为口地址为n的端口寄存器的端口寄存器IN AX , n ; (n) AL, (n+1) AH OUT n , AX ; AL n口口, AH n+1口口如如: IN AL , 61H OUT 61H, AL2. DX间址的间址的I/O指令指令 当口地址当口地址 n 8位二进制数时位二进制数时, 用用DX间址间址 注意注意: I/O 指令只能在端口和指令只能在端口和AL, AX, EAX之间之间 交换信息交换信息, 用用DX间址间址, 但不能使用方括号但不能使用方括号, 即不能写成即不能写成: IN AL, DX。IN AL , DX ; DX的端口内容的端口内容 A

7、LOUT DX , AL ; AL DX的端口寄存器的端口寄存器IN AX , DX ; DX AL, DX+1 AHOUT DX , AX ; AL DX, AH DX+1 的端口寄存器的端口寄存器 如如: MOV DX, 3F8H IN AL , DX ;从从3F8H端口取数端口取数 AL微机系统与微机系统与 I/O 端口的信息交换有四种方式端口的信息交换有四种方式: 无条件传送无条件传送 查询方式查询方式 中断方式中断方式 DMA方式方式采用何种方式与接口的硬件电路有直接关系采用何种方式与接口的硬件电路有直接关系1.无条件传送无条件传送 输入接口输入接口:八八个个三三态态门门地址译码器地

8、址译码器IOR数据线数据线外设外设8入入出出控控控控=0,出,出=入入控控=1,出为高,出为高阻阻入入出出控控入入出出控控控控=1,出,出=入入控控=0,出为高阻,出为高阻执行执行IN指令之前指令之前, 外设数据已经准备好。外设数据已经准备好。 输出接口输出接口锁锁存存器器地址译码器地址译码器IOW数据线数据线外设外设8 QCP D.D7D0执行执行OUT指令时指令时: AL内容内容 数据线,数据线, 口地址口地址 地址线上地址线上, IOW=低低, 把数据锁存到把数据锁存到 锁存器中。锁存器中。 2.查询方式查询方式 用查询方式交换信息用查询方式交换信息, 必先了解外设的状态。必先了解外设的

9、状态。 查询方式输入流程查询方式输入流程从状态口读取从状态口读取 状态信息状态信息数据准备好?数据准备好?执行执行IN指令指令,取出数据取出数据YN从状态口读取从状态口读取 状态信息状态信息外设空闲否外设空闲否?执行执行OUT指令指令,输出一个数据输出一个数据YN 查询方式输出流程查询方式输出流程查询方式输入接口示意图查询方式输入接口示意图地址译码器地址译码器地址总线地址总线IOR锁锁存存器器(8)三态三态缓冲缓冲 器器 (8)CPU数据线数据线数据数据 输输 入入 设设 备备输入选输入选通信号通信号 RD Q +5V状态标志状态标志寄存器寄存器IOR地址译码器地址译码器数据口选中数据口选中接

10、接数数据据线线D7位位 查询式输入核心程序查询式输入核心程序 设状态口地址设状态口地址=200H 数据口地址数据口地址=201HRSCAN : MOV DX , 200H(状态端口地址状态端口地址) IN AL , DX TEST AL , 80H JZ RSCAN MOV DX , 201H IN AL , DX 查询式输出接口示意图查询式输出接口示意图“0”为空闲为空闲锁锁存存器器(8)数据数据IOW地址译码器地址译码器地址总线地址总线IOR数据总线数据总线数据口选中数据口选中ACK 输输 出出 设设 备备Q D +5V状态标志状态标志状态口选中状态口选中接数据线接数据线D0位位 R 查询

11、式数据输出核心程序查询式数据输出核心程序 设状态口地址设状态口地址=200H=数据口地址数据口地址 TSCAN: MOV DX, 200H IN AL, DX TEST AL, 1 JNZ TSCAN MOV DX, 200H MOV AL, 某数某数 OUT DX, AL3.3. 中断控制方式中断控制方式 在有多个外设的系统中,多个外设要求在有多个外设的系统中,多个外设要求CPUCPU为它服务为它服务是随机的是随机的 若采用查询方式工作,就不能保证系统实时地对外若采用查询方式工作,就不能保证系统实时地对外设的请求作出响应设的请求作出响应 为了提高为了提高CPUCPU的效率,使系统有实时性能,

12、导致了的效率,使系统有实时性能,导致了中中断处理技术断处理技术的产生的产生特点:特点: 在外设没有作好数据传送准备时,在外设没有作好数据传送准备时,CPUCPU可执行与传送数据无可执行与传送数据无关的其它指令关的其它指令 当外设作好传送准备后,主动向当外设作好传送准备后,主动向CPUCPU请求中断请求中断 若若CPUCPU响应这一请求,则暂停正在运行的程序,转入中断服响应这一请求,则暂停正在运行的程序,转入中断服务程序,完成数据传送务程序,完成数据传送 待服务完毕后,自动返回原来运行的程序待服务完毕后,自动返回原来运行的程序4.4.直接存储器存取(直接存储器存取(DMADMA)方式方式为什么要

13、有为什么要有DMA?什么是什么是DMA?特点:特点: 用硬件实现在外设与内存间直接进行数据交换,而不通用硬件实现在外设与内存间直接进行数据交换,而不通过过CPUCPU 数据传送速度的上限就取决于存储器的工作速度数据传送速度的上限就取决于存储器的工作速度 速度快速度快计算机中的定时和延时控制、对外部事件或信号的计数计算机中的定时和延时控制、对外部事件或信号的计数 软件方法软件方法 固定时间的硬件定时固定时间的硬件定时 可编程的硬件定时可编程的硬件定时计算机系统中采用可编程定时计算机系统中采用可编程定时/计数器计数器I8253和和I8254 8254内部集成了内部集成了3个个16位的计数器位的计数

14、器, 每个计数器有每个计数器有6种工作方式,种工作方式,计数初值可设定为二进制或计数初值可设定为二进制或BCD码。最高工作频率码。最高工作频率10兆。兆。一一.8254内部结构内部结构 (24脚脚)数据总线数据总线 缓冲器缓冲器读写读写控制控制控制字控制字寄存器寄存器 0号号计数器计数器 1号号计数器计数器 2号号计数器计数器RDWRA0CSA1D70GATE0GATE0OUT0OUT0CLK0CLK0GATE1GATE1OUT1OUT1CLK1CLK1GATE2GATE2OUT2OUT2CLK2CLK2数据总线数据总线 缓冲器缓冲器读写读写控制控制控制字控制字寄存器寄存器 0号号计数器计数器

15、 1号号计数器计数器 2号号计数器计数器RDWRA0CSA1D70GATE0GATE0OUT0OUT0CLK0CLK0GATE1GATE1OUT1OUT1CLK1CLK1GATE2GATE2OUT2OUT2CLK2CLK2 数据总线缓冲器数据总线缓冲器: 完成和系统数据线的配接。完成和系统数据线的配接。 对外有对外有8条数据线条数据线D70 8254 8254的内部结构的内部结构数据总线数据总线 缓冲器缓冲器读写读写控制控制控制字控制字寄存器寄存器 0号号计数器计数器 1号号计数器计数器 2号号计数器计数器RDWRA0CSA1D70GATE0GATE0OUT0OUT0CLK0CLK0GATE1

16、GATE1OUT1OUT1CLK1CLK1GATE2GATE2OUT2OUT2CLK2CLK2 读写控制模块读写控制模块: 选择芯片内部的控制寄存器和计数器选择芯片内部的控制寄存器和计数器, 在读写在读写命令的控制下对选中的端口进行读写操作。对外有命令的控制下对选中的端口进行读写操作。对外有5条引线。条引线。 8254 8254的内部结构的内部结构CS 计数初值写入计数器#000001 操 作 计数初值写入计数器#100011 计数初值写入计数器#200101 向控制字寄存器写控制字00111 读计数器#0当前计数值01000 读计数器#1当前计数值01010 读计数器#2当前计数值01100

17、011101XXXX01XX1无操作无操作禁止 表7.1 8254内部寄存器读/写操作RDWRA1A0 8254 8254的内部结构的内部结构数据总线数据总线 缓冲器缓冲器读写读写控制控制控制字控制字寄存器寄存器 0号号计数器计数器 1号号计数器计数器 2号号计数器计数器RDWRA0CSA1D70GATE0GATE0OUT0OUT0CLK0CLK0GATE1GATE1OUT1OUT1CLK1CLK1GATE2GATE2OUT2OUT2CLK2CLK2 控制寄存器控制寄存器: 寄存寄存CPU对其初始化编程时写入的控制字,对其初始化编程时写入的控制字,以决定计数器的工作方式和并设置读出命令。以决定

18、计数器的工作方式和并设置读出命令。 8254 8254的内部结构的内部结构数据总线数据总线 缓冲器缓冲器读写读写控制控制控制字控制字寄存器寄存器 0号号计数器计数器 1号号计数器计数器 2号号计数器计数器RDWRA0CSA1D70GATE0GATE0OUT0OUT0CLK0CLK0GATE1GATE1OUT1OUT1CLK1CLK1GATE2GATE2OUT2OUT2CLK2CLK2计数器计数器: 每个计数器对外有每个计数器对外有3条线条线 GATE 控制信号控制信号 CLK 计数脉冲输入计数脉冲输入 OUT 计数器输出计数器输出 8254 8254的内部结构的内部结构口地址口地址译码器译码器

19、A9A2AEND7D0IORIOWA1A0D7D0RDWRA1A0CS8254 二二. 8254与系统总线的连接与系统总线的连接I/O口地址分口地址分2段段A9A2参加译码,译码参加译码,译码 输出负脉冲。使输出负脉冲。使CS=0, 选中选中8254A1,A0直接与芯片直接与芯片A1,A0 相连,选择片内寄存器相连,选择片内寄存器执行执行IN时从选中的内部时从选中的内部 寄存器读寄存器读执行执行OUT时向选中的内时向选中的内 部寄存器写部寄存器写三三.8254内部寄存器内部寄存器/计数器口地址计数器口地址 在在CS=0前提下前提下 A1 A0 选中选中0 0 0#0 0 0#计数器计数器0 1

20、 1#0 1 1#计数器计数器1 1 0 2#0 2#计数器计数器1 1 1 1 控制寄存器控制寄存器设设8254与系统总线如上图联接与系统总线如上图联接: 口地址口地址=40H43H,“选中选中”8254,则,则0#2#计计 数器口地址数器口地址=40H42H,控制口地址,控制口地址=43H。口地址口地址=2FCH2FFH,“选中选中”8254,则,则 0#2#计数器口地址计数器口地址=2FCH2FEH,控制口,控制口 地址地址=2FFH。四四.计数器内部结构示意图计数器内部结构示意图 内部数据线内部数据线计数初值寄存器计数初值寄存器(16位位)减减1计数器计数器(16位位)计数值锁存器计数

21、值锁存器(16位位)锁存命令锁存命令GATECLKOUT内部数据线内部数据线 初始化编程时初始化编程时: : 计数初值计数初值 计数初值寄存器计数初值寄存器 减减1 1计数器计数器内部数据线内部数据线计数初值寄存器计数初值寄存器(16位位)减减1计数器计数器(16位位)计数值锁存器计数值锁存器(16位位)锁存命令锁存命令GATECLKOUT内部数据线内部数据线 计数器的内部结构计数器的内部结构 当当GATA=1时时, CLK的下降沿使计数器减的下降沿使计数器减1,当计数值减到当计数值减到0 (或某个值或某个值由工作方式确定由工作方式确定)时时, OUT有输出。有输出。内部数据线内部数据线计数初

22、值寄存器计数初值寄存器(16位位)减减1计数器计数器(16位位)计数值锁存器计数值锁存器(16位位)锁存命令锁存命令GATECLKOUT内部数据线内部数据线 计数器的内部结构计数器的内部结构 计数初值计数初值 = f c l k / f o u t 收到锁存命令后收到锁存命令后, 当前计数值当前计数值 计数值锁存器计数值锁存器(以便读出以便读出检查检查), 而计数器仍然做减而计数器仍然做减1计数计数内部数据线内部数据线计数初值寄存器计数初值寄存器(16位位)减减1计数器计数器(16位位)计数值锁存器计数值锁存器(16位位)锁存命令锁存命令GATECLKOUT内部数据线内部数据线 计数器的内部结

23、构计数器的内部结构作用作用: 选择一个计数器选择一个计数器, 确定工作方式确定工作方式, 并规定初并规定初 值的写入顺序和计数初值值的写入顺序和计数初值 (一串一串0, 1代码代码) 的数制。的数制。 五五. 8254命令字命令字 / 状态字状态字 D7 D6 D5 D4 D3 D2 D1 D0 计数器选择计数器选择 读写方式选择读写方式选择 工作方式选择工作方式选择 数制选择数制选择 D7 D6=00 选择选择0#计数器计数器, =01 选择选择1#计数器计数器 =10 选择选择2#计数器计数器, =11 标志该命令字标志该命令字 是是 “读出命令读出命令” 1.方式选择命令字方式选择命令字

24、 D5 D4=00 标志该命令为标志该命令为 “锁存命令锁存命令” =01 初值写入时初值写入时, 只写低只写低8位位, 高高8位自动位自动 补补0;计数值读出时;计数值读出时, 只能读低只能读低8位位 =10 初值写入时初值写入时, 只写高只写高8位位, 低低8位自动位自动 补补0;计数值读出时;计数值读出时, 只能读高只能读高8位。位。 =11 初值写入初值写入 / 计数值读出的顺序为先计数值读出的顺序为先 低低8位位,后高后高8位。位。D7 D6 D5 D4 D3 D2 D1 D0 计数器选择计数器选择 读写方式选择读写方式选择 工作方式选择工作方式选择 数制选择数制选择 8254 82

25、54的命令字和状态字的命令字和状态字 D3 D2 D1 选中的计数器工作在选中的计数器工作在 0 0 0 方式方式 00 0 1 1 1 0 2 1 1 31 0 0 41 0 1 5 D0=0, 计数初值为计数初值为二进制数二进制数, D0=1, 初值为初值为BCD码数码数。D7 D6 D5 D4 D3 D2 D1 D0 计数器选择计数器选择 读写方式选择读写方式选择 工作方式选择工作方式选择 数制选择数制选择 8254 8254的命令字和状态字的命令字和状态字 2. 锁存命令锁存命令( D5 D4=00 标志该命令为标志该命令为 “锁存命令锁存命令”)D7 D6 为锁存对象。为锁存对象。

26、= 0 0,锁存,锁存0#当前计数值当前计数值 = 0 1,锁存,锁存1#当前计数值当前计数值 = 1 0,锁存,锁存2#当前计数值当前计数值计数器选择计数器选择 0 0 D7 D6 D5 D4 D3 D0D7 D611D5 D4 = 00 8254 8254的命令字和状态字的命令字和状态字 3.读出命令读出命令读出命令是多通道的锁存命令读出命令是多通道的锁存命令, 一条命令可以锁存一条命令可以锁存3个计个计数器的计数值、计数器状态。数器的计数值、计数器状态。 1 1 0D7 D6 D00: 锁存当前计数值锁存当前计数值0: 锁存计数器状态锁存计数器状态1: 选择选择0#计数器计数器D7D6D

27、0=110是读命令是读命令1: 选择选择1#计数器计数器1: 选择选择2#计数器计数器 8254 8254的命令字和状态字的命令字和状态字 4. 4. 状态字状态字 与方式选择命令字相同与方式选择命令字相同D7 D6 D5 D00: 计数初值已装入计数器计数初值已装入计数器1: 计数初值未装入计数器计数初值未装入计数器0: OUT脚为低电平脚为低电平1: OUT脚为高电平脚为高电平 8254 8254的命令字和状态字的命令字和状态字 CPU对对8254的初始化编程的初始化编程 例例: 设设8254的口地址为的口地址为40H 43H, 要求要求2#计数器工作在方式计数器工作在方式3, 计数初值计

28、数初值=4000, 写出写出2#的初始化程序段。的初始化程序段。1. 对对8254一个计数器的初始化编程步骤一个计数器的初始化编程步骤: 向控制寄存器写入方式选择命令字向控制寄存器写入方式选择命令字 目的目的: 选择一个计数器选择一个计数器, 并确定其工作方式并确定其工作方式 和计数值(计数初值)的读和计数值(计数初值)的读 / 写顺序。写顺序。 向选择的计数器写入计数初值。向选择的计数器写入计数初值。 注意注意: 如果方式选择命令字如果方式选择命令字D0=0, 则初值则初值 应是二进制应是二进制, 否则初值应是否则初值应是BCD码数。码数。解解1: 设初值为二进制设初值为二进制, 初值写入顺

29、序为先低初值写入顺序为先低8位后高位后高8位。位。 MOV AL, 10110110B OUT 43H, AL MOV AX, 4000 OUT 42H, AL MOV AL, AH OUT 42H, AL解解2: 设初值为二进制设初值为二进制, 写入顺序为仅写高写入顺序为仅写高8位。位。 MOV AL, 10100110B OUT 43H, AL MOV AL, 40 OUT 42H, AL注意注意: 解解2是错误的是错误的, 因为因为:4000=0FA0H, 其低其低8位不等于位不等于0。 8254 8254的初始化编程的初始化编程 解解3: 设初值为设初值为BCD码码, 写入顺序为先低后

30、高写入顺序为先低后高。 MOV AL, 10110111B OUT 43H, AL MOV AL, 0 OUT 42H, AL MOV AL, 40H OUT 42H, AL解解4: 设初值为设初值为BCD码码, 仅写高仅写高8位。位。 MOV AL, 10100111B OUT 43H, AL MOV AL, 40H OUT 42H, AL 注意注意: 4000的的BCD码数应写成码数应写成4000H, 解解3、解、解4是正确的。是正确的。 8254 8254的初始化编程的初始化编程 2. 当计数初值当计数初值 9999时时, “初值初值”选为二进制或选为二进制或 BCD码都可以;码都可以;

31、 当计数初值当计数初值 9999时时, “初值初值”只能选二进制。只能选二进制。3. 程序中如何表示程序中如何表示BCD码数码数? 设初值设初值=(1234)10 则则 MOV AX, 1234H 是正确的是正确的 写成写成 MOV AX, 1234 是错误是错误的4. 方式选择命令方式选择命令, 锁存命令锁存命令, 读出命令必须写入读出命令必须写入 控制口。控制口。 8254 8254的初始化编程的初始化编程 6. 关于读出命令关于读出命令 读出命令也是锁存命令读出命令也是锁存命令, 如果在锁存计数值如果在锁存计数值 的同时的同时, 也锁存状态也锁存状态, 那么在随后对计数器读那么在随后对计

32、数器读 出时出时, 先读出的是状态字先读出的是状态字, 后读的是计数值。后读的是计数值。5. 关于锁存命令关于锁存命令 当程序员要了解计数器的当前计数值时当程序员要了解计数器的当前计数值时, 先先 向控制口写入锁存命令向控制口写入锁存命令, 然后从选择的计数然后从选择的计数 器端口读取当前计数值。器端口读取当前计数值。 8254 8254的初始化编程的初始化编程 六六. 8254工作方式工作方式 有有6种工作方式种工作方式, 均在均在CLK下降沿计数一次。下降沿计数一次。 有有2种启动方式种启动方式: 软件启动软件启动, 硬件启动。硬件启动。 软件启动软件启动: GATA=1, 初值写入后初值

33、写入后, 开始计数。开始计数。 硬件启动硬件启动: 初值写入后初值写入后, 不计数。当不计数。当GATE从从 0 1后开始计数。后开始计数。 方式方式0: 计数结束计数结束OUT引脚输出正跃变信号引脚输出正跃变信号软件启动软件启动, 计数值减到计数值减到0, OUT从从0 1。WR结束后,第一个CLK完成初值装入 3 2 1 0 1CLKWRN=3GATE=1OUT 8254 8254的工作方式的工作方式 方式方式1: (可重触发的可重触发的) 硬件启动的单脉冲发生器硬件启动的单脉冲发生器GATE由由0 1, 下一个下一个CLK下降沿下降沿, 使使OUT由由1 0, 且装入计数值且装入计数值G

34、ATE再次从再次从0 1之后之后, 下一个下一个CLK完成初值自动重装完成初值自动重装 3 2 3 2 1 0 3 2 1 0 N TCLKCLKWRN=3GATE=1OUTGATEOUTTOUT 8254 8254的工作方式的工作方式 硬件启动(由外部门控信号启动计数)硬件启动(由外部门控信号启动计数) 初值写入后不计数初值写入后不计数, 当当GATE从从0 1时时, OUT 从从1 0。之后每个。之后每个CLK下降沿计数值减下降沿计数值减1, 计计 数值减到数值减到0时时, OUT从从0 1。 所以所以: 输出负脉冲的宽度输出负脉冲的宽度=NTCLK 计数过程中计数过程中, GATE再次从

35、再次从0 1, 初值自动重初值自动重 装装,从而使从而使OUT输出的负脉冲加宽输出的负脉冲加宽 ( 即有可重即有可重 触发的性能触发的性能)。 8254 8254的工作方式的工作方式 方式方式2: 分频器分频器(脉冲发生器脉冲发生器) 软件启动软件启动 减减1计数计数, 减到减到1时时OUT从从1 0,下一下一CLK初值初值 自动重装。自动重装。所以所以: OUT为周期性波形为周期性波形, 输出负脉输出负脉 冲的宽度为一个冲的宽度为一个TCLK, 周期周期=N TCLK 3 2 1 3 2 1CLKWRN=3GATE=1OUT 周期=N TCLK 8254 8254的工作方式的工作方式 方式方

36、式3: 方波发生器方波发生器CLKWRN=4GATE=1OUT 4 2 4 2 4 2软件启动软件启动, 减减2计数计数, 有初值自动重装功能。有初值自动重装功能。 N=偶数时偶数时, 计数值减到计数值减到0时初值重装时初值重装, 输出输出1:1连续波形。连续波形。 8254 8254的工作方式的工作方式 GATE=1WRN=5CLK 4 2 0 4 2 4 2 0OUT N=奇数时:奇数时: 装入的及重新装入的初值均为写入的初值装入的及重新装入的初值均为写入的初值-1。 输出正脉冲期间输出正脉冲期间, 减到减到-2时重新装初值时重新装初值 输出负脉冲期间输出负脉冲期间, 减到减到0时重新装初

37、值时重新装初值 输出正脉冲宽度输出正脉冲宽度=TCLK (N+1) / 2 输出负脉冲宽度输出负脉冲宽度=TCLK (N1) / 2 8254 8254的工作方式的工作方式 方式方式4: 软件启动软件启动, 单脉冲发生器单脉冲发生器软件启动软件启动, 减减1计数计数,减到减到0 有输出有输出, 无无初值自动重装功能。初值自动重装功能。 3 2 1 0 -1CLKN=3WRGATE=1OUT 8254 8254的工作方式的工作方式 方式方式5: 硬件启动硬件启动, 单脉冲发生器单脉冲发生器 硬件启动硬件启动, 减减1计数计数, 减到减到0有输出。有输出。CLKN=3WR 3 2 1 0 -1OU

38、TGATEGATE从从0 1, 下一个下一个CLK下降沿下降沿装入计数初值开始计数装入计数初值开始计数 8254 8254的工作方式的工作方式 6种工作方式的比较种工作方式的比较:方式方式1方式方式4方式方式5功能功能都是单脉冲发生器都是单脉冲发生器启动方式启动方式硬件启动硬件启动软件启动软件启动硬件启动硬件启动输出输出负脉宽负脉宽=N TCLK负脉宽负脉宽=TCLK初值重装初值重装在计数过程中在计数过程中(OUT=0期间)期间) GATE从从01时初值时初值重装重装 计数过程中计数过程中(OUT=1期间)期间) GATE从从0 1时初值重装时初值重装 8254 8254的工作方式的工作方式

39、方式方式0方式方式2方式方式3功能功能计数结束计数结束, 输出正跃变输出正跃变脉冲发生器脉冲发生器方波发生器方波发生器启动方式启动方式都是软件启动都是软件启动输出输出启动后延时启动后延时(N+1)TCLK输出正跃变输出正跃变负脉宽负脉宽=TCLK周期周期=N CLK N=偶数偶数,输输出出1:1方波方波初值重装初值重装计数结束计数结束, 初值自动重装初值自动重装 8254 8254的工作方式的工作方式 七七. 8254在在PC机中的应用机中的应用1. 电路电路:主主8259ACLK0 OUT0CLK1CLK2GATE0 OUT1GATE1GATE2 OUT2fclk=1.193182 MHZ+

40、5V8254 PB0 PB18255 B口口IR0 Q D动态存储器动态存储器刷新电路刷新电路清清“0”+5V与与门门滤波滤波口地址口地址61H 3个计数器的时钟端都为个计数器的时钟端都为1.193182 MHZ GATE0, GATE1固定接固定接+5v GATE2, OUT2输出受输出受8255的的PB0、PB1控制控制2. 系统系统8254口地址为口地址为40H 43H。 3. 系统加电后系统加电后,由由BIOS完成对完成对3个计数器初始化。个计数器初始化。 4. 各计数器的使用现状如下:各计数器的使用现状如下: 8254 8254的应用的应用 工作在方式工作在方式3, 计数初值计数初值

41、=0,OUT0=周期为周期为 55ms的方波信号。的方波信号。 作用作用: 每隔每隔55ms通过中断系统提出通过中断系统提出 一次日时钟中断请求。一次日时钟中断请求。主主8259ACLK0 OUT0CLK1CLK2GATE0 OUT1GATE1GATE2 OUT2fclk=1.193182 MHZ+5V PB0 PB18255 B口口IR0 Q D动态存储器动态存储器刷新电路刷新电路清清“0”+5V与与门门滤波滤波口地址口地址61H8254 0#计数器计数器 8254 8254的应用的应用 主主8259ACLK0 OUT0CLK1CLK2GATE0 OUT1GATE1GATE2 OUT2fcl

42、k=1.193182 MHZ+5V PB0 PB18255 B口口IR0 Q D动态存储器动态存储器刷新电路刷新电路清清“0”+5V与与门门滤波滤波口地址口地址61H8254 工作在方式工作在方式2, 计数初值计数初值=18, OUT1=周期周期为为15.1s的连续脉冲。的连续脉冲。 作用作用: 每隔每隔15.1s(向向DMAC)提出一次提出一次“动态存储器刷新请求动态存储器刷新请求”。1#计数器计数器 8254 8254的应用的应用 主主8259ACLK0 OUT0CLK1CLK2GATE0 OUT1GATE1GATE2 OUT2fclk=1.193182 MHZ+5V PB0 PB1825

43、5 B口口IR0 Q D动态存储器动态存储器刷新电路刷新电路清清“0”+5V与与门门滤波滤波口地址口地址61H8254 工作在方式工作在方式3, 初值初值=533H,为音响,为音响 系统提供系统提供900HZ方波。方波。2#计数器计数器 8254 8254的应用的应用 主主8259ACLK0 OUT0CLK1CLK2GATE0 OUT1GATE1GATE2 OUT2fclk=1.193182 MHZ+5V8254 PB0 PB18255 B口口IR0 Q D动态存储器动态存储器刷新电路刷新电路清清“0”+5V与与门门滤波滤波口地址口地址61H 用户程序禁止使用用户程序禁止使用1#计数器。计数器

44、。 用户程序可以使用用户程序可以使用0#, 2#计数器。计数器。注意注意: 8254 8254的应用的应用 八八. 系统系统8254 应用举例应用举例: 编写音乐程序编写音乐程序, 演唱演唱 “友谊地久天长友谊地久天长”。歌谱歌谱: 友谊地久天长友谊地久天长 1=F 2/4 苏格兰民歌苏格兰民歌 5 1 . 1 1 3 2 . 1 2 3 1 . 1 3 5 6 . 6 6 5 . 3 1. 怎怎 能能 忘记忘记 旧旧 日日 朋友朋友,心心 中中 能能 不不 怀怀 想想, 旧旧 日日 朋朋2. 我我 们们 曾经曾经 终终 日日 游荡游荡,在在故乡的故乡的 青青 山山 上上, 我我 们们 也也3

45、. 我我 们们 也曾也曾 经经 日日 逍遥逍遥,荡荡 漾漾 在在 绿绿 波波 上上, 但但 如如 今今4. 我我 们们 往日往日 情情 意意 相投相投,让让 我我 们们 紧紧 握握 手手, 让让 我我 们们. 8254 8254的应用的应用 3 1 2 . 1 2 3 1 . 6 6 5 1 . 6 5 . 3 3 1 2 . 1 2 6友友 岂岂 能能 相忘相忘, 友谊友谊 地地 久久 天天 长长;曾曾 历历 尽尽 苦辛苦辛, 到处到处 奔奔 波波 流流 浪浪;却却 劳劳 燕燕 分飞分飞, 远隔远隔 大大 海海 重重 洋洋;来来 举举 杯杯 畅饮畅饮, 友谊友谊 地地 久久 天天 长长;5

46、. 3 3 5 6 . 1 5 . 3 3 1 2 . 1 2 3 1 . 6 6 5 1 . :谊谊 万万 岁岁! 举举 杯杯 痛饮痛饮, 同声同声 歌颂歌颂 友谊友谊 地地 久久 天天 长。长。友友 谊谊 万万 岁岁, 友友. . . . . 8254 8254的应用的应用 设计思路设计思路: 1.开开 / 关扬声器的子程序关扬声器的子程序OPEN PROC IN AL, 61H OR AL, 03H OUT 61H, AL RET OPEN ENDPCLOSE PROC IN AL, 61H AND AL, 0FCH OUT 61H, AL RETCLOSE ENDP 8254 8254

47、的应用的应用 2. 使使2#计数器产生单音频的程序段计数器产生单音频的程序段 2#应工作在方式应工作在方式3, 计数初值计数初值=1.193182兆兆 / 频频 率值,而(率值,而(1.193182 106)10=1234DEH。 所以:所以: 在在2#写入方式选择命令字之后写入方式选择命令字之后, 执行下执行下 列程序段即可。列程序段即可。 方式选择命令字方式选择命令字 控制口控制口(BIOS已经做了已经做了)。 MOV DX, 12H MOV AX, 34DEH MOV CX, 频率值频率值 DIV CX ;初值初值AX OUT 42H, AL MOV AL, AH OUT 42H, AL

48、 8254 8254的应用的应用 3.音符频率表音符频率表 一首歌曲由若干音符组成一首歌曲由若干音符组成, 每一音符对应一个每一音符对应一个 频率。下表频率。下表 给出了各种音符的频率对照表。给出了各种音符的频率对照表。音符频率表音符频率表 (单位(单位: HZ)音频音频 音符音符 1 2 3 4 5 6 7 A 221 248 278 294 330 371 416B 248 278 312 330 371 416 467C 131 147 165 175 196 221 248D 147 165 185 196 221 248 278E 165 185 208 221 248 278 31

49、2F 175 196 221 234 262 294 330G 196 221 248 262 294 330 371. . . . . . . 8254 8254的应用的应用 音符频率表音符频率表 (单位(单位: HZ)音频音频 音符音符 1 2 3 4 5 6 7A 441 495 556 589 661 742 833B 495 556 624 661 742 833 935C 262 294 330 350 393 441 495D 294 330 371 393 441 495 556E 330 371 416 441 495 556 624F 350 393 441 467 525

50、 589 661G 393 441 495 525 589 661 742 8254 8254的应用的应用 音符频率表音符频率表 (单位(单位: HZ)音频音频 音符音符 1 2 3 4 5 6 7A 882 990 1112 1178 1322 1484 1665B 990 1112 1248 1322 1484 1665 1869C 525 589 661 700 786 882 990D 589 661 742 786 882 990 1112E 661 742 833 882 990 1112 1248F 700 786 882 935 1049 1178 1322G 786 882

51、990 1049 1178 1322 1484. . . . . . . 8254 8254的应用的应用 4. 音符的演唱时间音符的演唱时间 这是编程的关键这是编程的关键,有两种处理方法有两种处理方法: 直接给出每一音符演唱的绝对时间直接给出每一音符演唱的绝对时间 这种方法这种方法, 程序调试很困难程序调试很困难, 特别是对于缺少特别是对于缺少 音乐细胞的人音乐细胞的人, 对于不太熟悉的歌曲对于不太熟悉的歌曲, 很难把很难把 握演唱的节奏。握演唱的节奏。 给出每一音符演唱的给出每一音符演唱的 “单位时间单位时间” 单位时间单位时间 N=演唱时间演唱时间 N为调试参数,预先给一个值,试听后再为调

52、试参数,预先给一个值,试听后再 修改。这种方法修改。这种方法, 大大加快了调试时间。大大加快了调试时间。 8254 8254的应用的应用 5.怎样确定怎样确定 “单位时间单位时间” 3/4拍拍 1/4拍拍 一拍一拍.1=F2/45 1 . 1 1 3 因为因为: 一首歌曲中一首歌曲中,每个音符的演唱时间有一拍、半拍、每个音符的演唱时间有一拍、半拍、1/4拍拍如果最短的音符为如果最短的音符为1/8拍拍, 则定义则定义: 一拍音符的单位时间为一拍音符的单位时间为8 半拍音符的单位时间为半拍音符的单位时间为4 1/4拍音符的单位时间为拍音符的单位时间为2 1/8拍音符的单位时间为拍音符的单位时间为1

53、 如如: 8254 8254的应用的应用 根据选定的歌曲,将各音符对应的频率值列成一张频根据选定的歌曲,将各音符对应的频率值列成一张频率表,将各音符演唱的单位时间列成一张时间表。率表,将各音符演唱的单位时间列成一张时间表。频率表的表项和时间表的表项要一一对应,不能错位。频率表的表项和时间表的表项要一一对应,不能错位。 8254 8254的应用的应用 6. 音乐程序框图音乐程序框图 取频率值转换成取频率值转换成计数初值计数初值 2#计数器计数器取单位时间取单位时间 转换成转换成演唱时间演唱时间 延时延时调整频率表、时间表指针调整频率表、时间表指针 接通扬声器接通扬声器有键入?有键入?关闭扬声器,

54、返回关闭扬声器,返回DOSYN数据段数据段, 设置频率表设置频率表, 时间表时间表 8254 8254的应用的应用 . 486DATA SEGMENT USE16 TABF DW -1, 262, 350, 352, 350, 441, 393, 350, 393, 441 DW 350, 352, 441, 525, 589, 588, 589, 525, 441 DW 440, 350, 393, 350, 393, 441, 350, 293, 294, 262 DW 350, 589, 525, 441, 440, 350, 393, 350, 393, 589 DW 525, 441

55、, 440, 525, 589, 700, 525, 441, 440, 350 DW 393, 350, 393, 441, 350, 294, 292, 262, 350, 0 TABT DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 1, 3, 6, 2 DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 6, 2, 4, 4, 12 N EQU 150000 ;

56、微秒微秒 DATA ENDS 7. 程程 序序 8254 8254的应用的应用 CODE SEGMENT USE16 ASSUME CS:CODE, DS:DATA BEG: MOV AX, DATA MOV DS, AX OPEN: IN AL, 61H OR AL, 00000011B OUT 61H, AL ;接通扬声器接通扬声器 AGA: MOV SI, OFFSET TABF ;SI是频率表指针是频率表指针 MOV DI, OFFSET TABT ;DI是时间表指针是时间表指针 LAST: CMP WORD PTR SI, 0 ;唱完一遍唱完一遍? JE AGA ;是是,转转 MOV

57、 DX, 12H MOV AX, 34DEH DIV WORD PTR SI ;频率转换成计数初值频率转换成计数初值 OUT 42H, AL ;低低8位送位送2号计数器号计数器 MOV AL, AH OUT 42H, AL ;高高8位送位送2号计数器号计数器 8254 8254的应用的应用 CALL DELAY ;延时延时 ADD SI, 2 ;频率表指针加频率表指针加2 INC DI ;时间表指针加时间表指针加1 MOV AH, 1 INT 16H ;有键入有键入? JZ LAST ; 否否 CLOSE: IN AL, 61H AND AL, 11111100B OUT 61H, AL ;关

58、闭扬声器关闭扬声器 MOV AH, 4CH INT 21H 8254 8254的应用的应用 DELAY PROC ;延时子程序延时子程序 MOV EAX, 0 MOV AL, DI IMUL EAX, EAX, N ;EAX=演唱时间演唱时间 (微秒微秒) MOV DX, AX ROL EAX, 16 MOV CX, AX MOV AH, 86H INT 15H RETDELAY ENDPCODE ENDS END BEG代码段程序具有通用性代码段程序具有通用性, 只需更换频率表只需更换频率表, 时时间表,更换调试参数即可演唱另一首歌。间表,更换调试参数即可演唱另一首歌。停止演唱演唱 8254

59、 8254的应用的应用 九九. 外扩外扩8254应用举例应用举例 例例: 给定给定2兆信号发生器兆信号发生器, 在在ISA总线上外扩一片总线上外扩一片 8254。口地址为。口地址为218 21BH, 要求要求: 设计硬件电路设计硬件电路 编程产生编程产生8 KHZ方波和方波和1.6 KHZ的连续脉冲的连续脉冲解解: 思路思路: 使用外扩使用外扩8254的的 0#选择方式选择方式3, 产生产生8 KHZ方波方波 1#选择方式选择方式2, 产生产生1.6 KHZ连续脉冲连续脉冲 方式方式2、 方式方式3均为软件启动均为软件启动, 故故GATE0、 GATE1接接+5 V 8254 8254的应用的

60、应用 硬件电路硬件电路: D7D0 RD WR GATE0 A1 GATE1 A0 CLK0 CLK1 OUT0 CS OUT1 8254 D7 D6 IOR IOW A1 A0 A9 A4 A3 A8 7 6 5 2AEN+52兆兆8 KHZ方波方波1.6 KHZ连续脉冲连续脉冲 8254 8254的应用的应用 0#计数初值计数初值 N0=2兆兆 / 8K=250 (NTCLK0。NNYY 8254 8254的应用的应用 因为因为: 初值初值N 0#后后, 经过经过NTOUT, OUT才有负脉冲输出。才有负脉冲输出。 所以所以: N应小些。应小些。 初值初值N写入写入0#之后之后, 必须延时

61、一段时间必须延时一段时间, 再把锁存命令再把锁存命令 控口。控口。注意注意: 8254 8254的应用的应用 程序程序 .486CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATAMESG DB Strike Enter, 0DH, 0AH, $BEG: MOV AX, CODE MOV DS, AX MOV DX, 21BH MOV AL, 01110110B ;1#方式方式3选择命令字选择命令字 OUT DX, AL ; 控制口控制口 MOV DX, 219H MOV AL, 5 ;初值初值5 OUT DX, AL ; 1# 8254 8254的应用的应

62、用 MOV DX, 21BH MOV AL, 00011000B ;0#方式方式4选择命令字选择命令字 OUT DX, AL ; 控制口,控制口, 初值只写低初值只写低8位位LAST: MOV AH, 9 MOV DX, OFFSET MESG INT 21H ;显示提示信息显示提示信息 MOV AH, 1 INT 21H CMP AL, 1BH ;是否是否ESC JE EXIT CMP AL, 0DH ;是否回车是否回车? JNE LAST 8254 8254的应用的应用 1#当前计数值当前计数值 BX MOV DX, 218H MOV AL, 3 OUT DX, AL ;初值初值0#,启动计数启动计数 延时延时50ms MOV DX, 21BH MOV AL, 01000000B OUT DX, AL ;1#锁存命令锁存命令 控口控口 MOV DX, 219H IN AL, DX MOV BL, AL IN AL, DX MOV BH, AL 显示显示BX中的二进制中的二进制 JMP LAST 8254 8254的应用的应用 EXIT: MOV AH, 4CH INT 21HCODE ENDS END BEG 8254 8254的应用的应用


文档来源:https://www.renrendoc.com/paper/212404635.html

文档标签:

下载地址