第9章 计数器、定时器和多功能接口芯片_第1页
第9章 计数器、定时器和多功能接口芯片_第2页
第9章 计数器、定时器和多功能接口芯片_第3页
第9章 计数器、定时器和多功能接口芯片_第4页
第9章 计数器、定时器和多功能接口芯片_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章计数器 定时器和多功能接口芯片 基本要求 8253 8254的编程结构 8253 8254的两类控制字 8253 8254必须遵守的编程原则 8253 8254的两类编程命令 8253 8254的6种工作模式的特点 82380的功能结构 82380的中断模块 定时信号可用软件和硬件两种方法来获得软件定时 根据所需要的时间常数来设计一个延迟子程序 延迟子程序中包含一定的指令 设计者要对这些指令的执行时间要进行严密的计算或精确测试 以确定延迟时间是否符合要求 硬件定时 用计数器 定时器 在简单的软件控制下产生准确的时间延迟 9 1可编程计数器 定时器的工作原理 可编程计数器 定时器的功能 计数器定时器计数器 定时器的用处 作为中断信号输出精确的定时信号作为波特率发生器实现延迟 计数器 定时器的基本原理图 图9 1计数器 定时器的基本原理图 8253 8254的工作过程 由CPU向控制寄存器写入控制字 以确定工作方式 由CPU向计数器寄存器写入计数初值或定时常数 计数单元从计数器寄存器中获得初值 在CLK端输入的计数脉冲控制下进行减1计数 CLK决定计数速率 减到0时 该状态由OUT输出或由状态寄存器的某一位表示 以作为中断请求信号或供查询方式使用 也可将OUT连到一个I O设备上 去启动一个I O操作 任何时候都可以将计数单元的当前值送到输出锁存器被CPU读取而不干扰计数器继续计数 门脉冲GATE是由设备送来的 作为对时钟脉冲的控制信号 门脉冲对时钟的控制方法有多种 以形成多种工作方式 9 28253 8254的编程结构和外部引脚信号 9 2 18253 8254的编程结构 图9 2计数器 定时器的编程结构 组成 有三个计数器 每个计数器内部有 8位的控制寄存器16位的计数初值寄存器 计数执行部件 减法计数器 CE和输出锁存器OL 共用1个控制寄存器和1个状态寄存器 只有8254有状态寄存器 每个计数器通过3个引脚CLK GATE和OUT和外部联系 执行部件实际上是1个16位的减法计数器 其起始值就是初值寄存器的值 而初值寄存器的值是通过程序设置的 计数初始值 时钟频率 T 输出锁存器用来锁存计数执行部件的内容 从而使CPU可对此进行读操作 9 2 28253 8254的外部信号 CLK2 CLK0GATE2 GATE0OUT2 OUT0A1 A0 错位连接 RDWRCSD7 D0 8253输入信号与各功能的对应关系 9 38253 8254的控制字和状态字 9 3 18253 8254控制字寄存器和控制字1 模式设置控制字 2 读出控制字 锁存命令 9 3 28254的状态寄存器和状态字 状态寄存器的格式如下 9 48253 8254的编程命令 编程有3条原则必须遵守 对计数器设置初始值前必须先写控制字 初始值设置时 要符合控制字中的格式规定 即只写低位字节还是只写高位字节 或高低位字节都写 控制字中一旦规定 具体初始值设定时就要一致 要读取计数器的当前值和状态字 必须用控制字先锁定 才能读取 编程命令包括两类写入命令 包括设置控制字命令设置初值命令锁存命令读出命令读取计数器当前的值 对8254 还可读取状态字 读取计数器2的当前计数值 设置计数器的4个端口地址为70H 72H 74H 76H MOVAL 11011000B 对计数器2发锁存命令 锁存当前计数值OUT76H AL 76H为控制口地址INAL 74H 读取计数器2的读取值 74H为计数器2的地址 对8254读取状态字和计数值MOVAL 11000000B 计数器0的锁存命令OUT76H AL 76H为控制口地址 对锁存计数器0的状态和计数值INAL 76H 从状态口读取计数器0的状态MOVCL AL 将计数器0的状态送到CLINAL 70H 读取计数器0的低8位MOVBL AL 将低8位送到BLINAL 70H 读取计数器0的高8位MOVBH AL BX中为计数器0的当前计数值 9 58253 8254的工作模式 6种工作模式计数结束产生中断可重复触发的单稳态触发器分频器方波发生器软件触发的选通信号发生器硬件触发的选通信号发生器 8253的基本规则 控制字写入时 进入初始状态初值写入后 要经过上升沿和一个下降沿 才开始计数 在CLK的上升沿被采样在CLK下降沿 计数器作减1计数 8253定时器 计数器的每个计数器都有六种可编程选择的工作方式 对于每一种工作方式 由时钟输入信号CLK确定计数器递减的速率 门控信号GATE用于允许或禁止CLK信号进入计数器 或者根据工作方式用作计数器的启动信号 计数结束时 在输出线OUT上产生一个标志信号 该信号可编程定义为脉冲 恒定电位或周期信号 区分六种工作方式的主要标志有三点 输出波形不同 启动的触发方式不同 计数过程中门控信号CATE对计数操作的影响不同 1 方式0 计数结束产生中断 在该方式下 门控信号决定计数的停止或继续 装入初值决定计数过程重新开始 计数过程控制字写入控制寄存器后 经一个时钟周期 在下一个时钟上升沿 输出端OUT变为低电平 并且计数过程中一直维持低电平 计数初值写入初值寄存器后 经过一个时钟周期 在下一时钟的下降沿 初值寄存器CR的值被送到计数执行单元CE中 随后每个时钟的下降沿都使计数执行单元的内容减1 减到0时 输出端OUT变成高电平 并一直维持高电平 直到写入新的计数值 开始下一轮的计数 计数初值一次有效 经过一次计数过程后 必须重新写入计数初值 当输出端OUT变成高电平时 可利用OUT的上升沿作为中断请求信号 门控信号的影响在计数过程中 门控信号GATE 0 计数执行单元停止计数 保持当前值 直到GATE信号恢复到高电平 经一个时钟周期 计数执行单元从当前值开始继续执行减1操作 门控信号只影响计数执行单元是否暂停减1操作 对输出信号OUT无影响 OUT信号从计数开始变为低电平 一直保持到计数结束 才变为高电平 如果在门控信号GATE处于低电平时写入计数初值 则在下一个时钟周期也将初值从初值寄存器移入计数执行单元 但不进行计数操作 当GATE变为高电平时才开始计数 利用GATE信号可作为启动定时的同步信号 写入新的初值对计数过程的影响如果在计数过程中写入新的初值 那么在写入新值后的下一个时钟下降沿计数器将按新的初值重新计数 如果新的计数值是8位 则在计数值写入到初值寄存器的写入过程中 计数器执行单元不停止减1计数 写入过程结束后 下一个时钟下降沿才按新的初值重新计数 如果新的计数值是16位 则在写入高8位数据后 计数器停止计数 写入低8位数据后 计数器按新初值开始计数 从计数开始 输出OUT变为低电平 一直保持到计数结束 并不因写了新的初值 影响输出信号 2 方式1 可编程单稳态触发器 该方式是在门控信号的作用下才开始计数 计数过程当把方式1的控制字写入控制寄存器 输出端OUT变成高电平时 将计数初值写入初值寄存器 经过一个时钟周期 初值送入计数执行单元 此时计数执行单元并不计数 直到门控信号到来 经一个时钟周期后 在下一个时钟周期的下降沿才开始计数 输出OUT变为低电平 计数过程中OUT端一直维持低电平 当计数减到0时 输出端OUT变为高电平 并一直维持高电平到下一次触发之前 计数初值的设置也是一次有效 每输入一次计数值 只产生一次计数触发过程 门控信号的影响方式1中 门控信号的影响从两个方面讨论 一方面是计数结束后 若再来一个门控信号上升沿 则在下一个时钟周期的下降沿又从初值开始计数 而且不需要重新写入计数初值 即门控脉冲可重新触发计数 同时OUT端输出从高电平降为低电平 直到计数结束 再恢复到高电平 可以看出 调整门控信号的触发时刻 可调整OUT端输出的高电平持续时间 即输出单次脉冲的宽度由计数初值N决定 另一方面是在计数进行中 若来一个门控信号的上升沿 也要在下一个时钟下降沿终止原来的计数过程 从初值起重新计数 在这个过程中 OUT输出保持低电平不变 直到计数执行单元内容减为0时 OUT输出才恢复为高电平 这样 使OUT输出低电平持续时间加长 即输出单次脉冲的宽度加宽 新的初值对计数过程的影响在计数过程中如果写入新的初值 不会影响计数过程 只有在下一个门控信号到来后的第一个时钟下降沿 才终止原来的计数过程 而按新值开始计数 OUT输出的变化是高电平持续到开始计数前 低电平持续到计数过程结束 3 方式2 分频器该方式下 用门控信号达到同步计数的目的 计数过程写入控制字后 时钟上升沿 输出端OUT变为高电平 当计数初值被写入初值寄存器后 下一个时钟脉冲下降沿 计数初值被移入计数执行单元 开始减1计数 减到1时 输出端OUT变为低电平 减到0时 输出端OUT又变成高电平 同时按计数初值重新开始计数过程 由图可看出 采用方式2时 输出端不断输出负脉冲 其宽度等于一个时钟周期 两负脉冲间的宽度等于N 1个时钟周期 整个计数过程不用重新写入计数值 OUT输出一固定频率的脉冲 因此又称此方式下的计数器为分频器或频率发生器 门控信号的影响门控信号为低电平时终止计数 而由低电平恢复为高电平后的第一个时钟下降沿从初始值重新开始计数 由此可见 GATE一直维持高电平时 计数器为一个N分频器 GATE端每加一次从低电平到高电平的门控触发信号 都将引起一次重新从计数初值寄存器向计数执行单元写入计数值的操作 输出端OUT重新又得到一个不断输出负脉冲的脉冲信号 其宽度等于一个时钟周期 两负脉冲间的宽度等于N 1个时钟周期 用门控信号实现对输出端OUT信号的同步作用 新的初值对计数过程的影响如果在计数过程中改变初值 有两种情况 一种是当GATE门控信号一直维持高电平时 新的初值不影响当前的计数过程 但在计数结束后 下一个计数周期按新的初值计数 另一种是若写入新的初值后 遇到门控信号的上升沿 则结束现行计数过程 从下一个时钟下降沿开始按新的初始值进行计数 第二种情况是计数值未减到0 又重新按新的初值进行计数 在此期间输出端OUT一直维持高电平 这样就可以随时通过重新送计数值来改变输出脉冲的频率 4 方式3 方波发生器方式3的工作过程同方式2 只是输出的脉宽不同 计数过程方式3计数过程分奇 偶两种情况 初始值为偶数时 写入控制字后 在时钟上升沿 输出端OUT变为高电平 当计数初值写入初值寄存器后 经过一个时钟周期 计数初值被移入计数执行单元 下一个时钟下降沿开始减1计数 减到N 2时 输出端OUT变为低电平 计数器执行单元继续执行减1计数 当减到0时 输出端OUT又变成高电平 计数器执行单元重新从初值开始计数 只要门控信号GATE为1 此工作过程一直重复下去 输出端得一方波信号 故称为方波发生器 在初始值为奇数时 在门控信号一直为高电平情况下 OUT输出波形为连续的近似方波 高电平持续时间为 N 1 2个脉冲 低电平持续时间为 N 1 2个脉冲 门控信号的影响GATE 1允许计数 GATE 0禁止计数 在计数执行过程中 当GATE变为低电平时 若此时输出端OUT为低电平 则从低电平变为高电平 若已是高电平则保持不变 且计数器停止计数 当GATE恢复高电平 计数器从初值开始重新计数 新的初值对计数过程的影响新的初值写入也分两种情况讨论 一种是GATE 1 在计数执行过程中 新值写入并不影响现行计数过程 只是在下一个计数过程中 按新值进行计数 另一种是在计数执行过程中 加入一个GATE脉冲信号 停止现行计数过程 在门控信号上升后的第一个时钟周期的下降沿 按新初值开始计数 5 方式4 软件触发选通方式 用方式4工作时 GATE门控信号只是用来允许或不允许定时操作 定时的执行过程由装入的初值决定 计数过程写入控制字后 在时钟上升沿 输出端OUT变成高电平 将计数初值写入初值寄存器中 经过一个时钟周期 计数初值被移入计数执行单元 下一个时钟下降沿开始减1计数 减到0时 输出端变低一个时钟周期 然后自动恢复成高电平 下一次启动计数时 必须重新写入计数值 由于每进行一次计数过程必须重装初值一次 不能自动循环 所以称方式4为软件触发 又由于输出端OUT低电平持续时间为一个脉冲周期 常用此负脉冲作为选通信号 所以又称为软件触发选通方式 门控信号的影响GATE 1时 允许计数 GATE 0时 禁止计数 需要注意的是当GATE 0时停止计数 GATE 1时并不是恢复计数 而是重新从初值开始计数 还应注意GATE的电平不会影响输出端OUT的电平 只有计数器减为0时 才使输出端OUT产生电平的变化 新的初值对计数过程的影响在计数过程中 如果写入新的计数初值 则立刻终止现行的计数过程 并在下一个时钟下降沿按新的初值开始计数 方式0和方式4都可用于定时和计数 定时的时间为 定时的时间 N T只是方式0在OUT端输出正脉冲信号为定时时间到 方式4在OUT端输出负脉冲信号为定时时间到 6 方式5 硬件触发选通方式 方式5为硬件触发选通方式 完全由GATE端引入的触发信号控制定时和计数 计数过程写入控制字后 在时钟上升沿 输出端OUT变成高电平 写入计数初值后 计数器并不开始计数 当门控信号GATE的上升沿到来后 在下一个时钟下降沿时 将计数初值移入计数执行单元 才开始减1计数 计数器减到0 输出端OUT变为低电平 持续一个时钟周期又变为高电平 并一直保持高电平 直至下一个门控信号GATE的上升沿的到来 因此 采用方式5循环计数时 计数初值可自动重装 但不计数 计数过程的进行是靠门控信号触发的 称方式5为硬触发 OUT输出低电平持续时间仅一个时钟周期 可作为选通信号 门控信号作用如果在计数的过程中 又来一个门控信号的上升沿 则立即终止现行的计数过程 在下一个时钟周期的下降沿 又从初值开始计数 如果在计数过程结束后 来一个门控信号的上升沿 计数器也会在下一个时钟周期下降沿 从初值开始减1计数 不用重新写入初值 只要门控信号的上升沿到来 就会马上触发下一个计数过程 写入新的初值对计数过程的影响无论在计数的过程中 还是在计数结束之后 写入新的初值都不会发生计数过程 必须在门控信号的上升沿到来后 才会发生下一个新的计数过程 计数的初值是按写入新的初值进行 通过对上面的6种工作方式的分析 可以看出门控信号和写入新的初值会影响计数过程的进行 不同的工作方式 会得到不同的输出波形 在8253 8254的应用中 必须正确使用门控信号和写入新的初值这种触发方式 才能保证各计数器的正常操作 必须了解输出波形的形态 才能正确应用到各种控制场合 4 8253 8254应用举例 9 68253 8254应用举例 用8253 8254为A D子系统提供采样信号的例子 8253 8254的初始化程序 MOVAL 14HOUT76H AL 将计数器0设置为模式2MOVAL LCNTOUT70H AL 对计数器0设置计数初始值L 二进制 MOVAL 73HOUT76H AL 将计数器1设置为模式1MOVAX MCNTOUT72H ALMOVAL AHOUT72H AL 对计数器1设置初始值M BCD码 MOVAL 96HOUT76H AL 将计数器2设置为模式3MOVAL NCNTOUT74H AL 对计数器2设置初始值N 二进制 例 使用8253计数器2产生频率为40kHz的方波 设8253的端口地址为0040H 0043H 已知时钟端CLK2输入信号的频率为2MHz 试设计8253与8088总线的接口电路 并编写产生方波的程序 8253与8088总线的接口电路如下图所示 74LS138 A B C 8253 D 0 A 0 CLK 0 GATE 0 OUT 0 CLK 1 GATE 1 OUT 1 CLK 2 GATE 2 OUT 2 D 7 D 7 D 0 A 1 0 Y 1 A 0 A 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9 A 15 WR RD IO M 2MHz 20kHz 1 工作方式控制字2 计数初值计数初值 输入频率 输出频率 2000000Hz 40000Hz 50 0032H D7D6D5D4D3D2D1D0 SC1 RL1 M1 M0 M2 BCD SC0 RL0 1 1 1 1 0 1 1 0 根据上述要求2 计数器应设置成方式3工作状态 按双字节传送的50分频计数值应为0032H 此时 2 计数器的初始化程序如下 MOVAL 11110110B 对2 计数器送控制字 OUT43H ALMOVAL 32H 送低8位计数值32H OUT42H ALXORAL AL 送高8位计数值00H OUT42H AL 例如 假设8253 8254的计数器0工作在方式5 按二进制计数 计数初值为46H 计数器1工作在方式1 按BCD码计数 计数初值为4000H 计数器2工作在方式2 按二进制计数 计数初值为0304H 请将以上三种情况的初始化程序写出 8253 8254芯片占用地址04C0H 04C2H 04C4H 04C6H MOVAL 00011010B 二进制 方式5 写低字节 计数器0MOVDX 04C6H 设置8253控制口地址OUTDX AL 写入工作方式控制字 MOVAL 46H 计数值的低字节MOVDX 04C0H 设置8253计数器0地址OUTDX AL 写入计数值的低字节MOVAL 01110011B BCD数 方式1 写16位数 计数器1MOVDX 04C6H 设置8253控制器地址OUTDX AL 写入工作方式控制字MOVAL 00H 计数值低字节MOVDX 04C2H 设置8253计数器1地址OUTDX AL 写入计数值低字节 MOVAL 40H 计数器高字节OUTDX AL 写入计数值高字节MOVAL 10110100B 二进制 方式2 写入16位数 计数器2MOVDX 04C6H 控制口地址OUTDX ALMOVAL 04H 计数值低字节MOVDX 04C4H 设置计数器2地址csOUTDX AL 写入计数值低字节MOVAL 03H 计数值高字节OUTDX AL 写入计数值高字节 例如 利用8086学习机 使用8253 8254计数器0 采用工作方式3 产生1kHz的方波脉冲信号 通过计数器1 采用工作方式4 用OUT1作计数脉冲 计满100次向CPU发一次中断申请 CPU响应这一中断后继续写入计数值100 重新开始计数 通过计数器2 采用工作方式0 每隔1秒钟向CPU发一次中断请求 使8个指示灯闪动 试编写程序 并画出硬件连接图 设8253芯片地址为04C0H 04C2H 04C4H 04C6H 8259芯片地址为04B0H 04B2H 74LS373芯片地址04A0H 分析 1 由于CLK0 2 5MHz T 0 4 s 由计数器0产生的1kHz的单拍负脉冲信号 T 1ms 所以初值为2500 即09C4H 2 因为计数器1和计数器2分别工作在方式4和方式0 当GATE 1时 依靠计数初值启动定时或计数 因而初始化时要先对中断控制器8259A初始化 再对计数器1和计数器2初始化 装入时间常数后立即执行 3 CLK2与OUT0连接在一起 输入时钟为1kHz T 1ms 计数器2每隔1秒钟向CPU发一次中断请求 计时工作时间常数等于1000 程序 START MOVDX 04C6H 设置8253 8254控制口地址MOVAL 00110110B 二进制 方式3 写16位 计数器0OUTDX AL 控制字写入计数器0的控制寄存器MOVDX 04C0H 设置8253 8254计数器0地址MOVAX 09C4H 计数初值OUTDX ALMOVAL AHOUTDX AL 写入初值高8位 MOVBL 00H 灯亮或灭的标志MOVDX 04B0H 8259A的偶地址MOVAL 00010011B 设置ICW18259初始化控制字ICW1OUTDX AL 写入ICW1MOVDX 04B2H 8259A的奇地址MOVAL 50H 设置8259A初始化控制字ICW2OUTDX AL 写入ICW2MOVAL 0000001B 设置8259A初始化控制字ICW4OUTDX AL 写入ICW4MOVAL 0FEH 设置IR0 IR1不可屏蔽 8259A操作控制字OCW1OUTDX AL 写入OCW1 MOVAX OFFSETINTR1 设置中断服务程序INTR1的偏移地址MOVWORDPTR 140H AX 中断矢量表地址为50H 4MOVAX SEGINTR1 设置中断服务程序INTR1所在段地址MOVWORDPTR 142H AXMOVAX OFFSETINTR2 设置中断服务程序INTR2偏移地址MOVWORDPTR 144H AX 中断矢量表地址为51H 4MOVAX SEGINTR2 设置中断服务程序INTR2所在段地址MOVWORDPTR 146H AX MOVDX 04C6H 设置8253控制口地址MOVAL 01011000B 二进制数 方式4 写低字节 计数器1计数OUTDX AL 将控制字写入计数器1的控制寄存器MOVDX 04C6H 设置8253控制口地址MOVAL 10110000 BCD数 方式0 写16位数 计数器2定时OUTDX AL 控制字写入计数器2的控制寄存器MOVDX 04C2H 设置8253计数器1地址MOVAL 64H 设置计数初值OUTDX AL 计数初值写入8253计数器1 MOVDX 04C4H 设置8253计数器2地址MOVAL 00H 写低字节OUTDX AL 计数值低字节写入计数器2MOVAL 10H 写高字节OUTDX AL 计数值高字节写入计数器2STI 开中断AA HLT 等待中断JMPAAINTR1PROCFARCLI 禁止中断 MOVDX 04C2H 设置8253计数器1地址MOVAL 00H 高字节 置新初值 启动工作OUTDX AX 计数值高字节写入计数器1MOVAL 10H 低字节OUTDX AL 计数值低字节写入计数器1STI 开中断IRETINTR1ENDPINTR2PROCFARCLI 禁止中断 MOVDX 04A0H 74LS373的地址CMPBL 00H 灯闪烁判断JZAA2 BL 00灯亮MOVAL 00H BL 01灯灭OUTDX AXMOVBL 00H 重新设标志JMPAA3AA2 MOVAL 0FFH 灯亮OUTDX ALMOVBL 01

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论