




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章可编程计数器 定时器8253及其应用 2 可编程计数器 定时器 1 计数器 2 定时器 1 微机定时方法 1 软件定时 延迟子程序 占用CPU时间 2 硬件定时 用计数器 定时器8253 一 微机定时方法1 软件定时 延迟子程序2 硬件定时 用计数器 定时器8253二 可编程计数器 定时器的工作原理功能 一是为计数 一是为定时 8253的用处 1 在多任务的分时系统中用来作为中断信号实现程序的切换 2 可以往I O设备输出精确的定时信号 3 作为一个可编程的波特率发生器 4 实现时间延时 第8章可编程计数器 定时器8253及其应用 计数器 定时器8253特点三个通道 可单独使用片内寻址A1A0 00 01 10 11对应 通道0 1 2和控制口地址工作方式 6种 8 18253的工作原理 一 8253的内部结构和引脚信号 1 数据总线缓冲器往计数器设置计数初值 从计数器读取计数值 往控制寄存器设置控制字 2 读 写逻辑电路A1A0 端口选择00 通道0 0号计数器 01 通道1 1号计数器 10 通道2 2号计数器 11 控制字寄存器 3 通道0 通道1 通道2计数器0 CLK0 计数器0的时钟输入 GATE0 计数器0的门脉冲控制输入 OUT0 计数器0的输出 计数器1 CLK1 GATE1 OUT1计数器2 CLK2 GATE2 OUT2 8253编程结构 4 控制寄存器8253控制寄存器的格式 SC1SC0RW1RW0M2M1M0BCD 1 计数值为BCD码格式0 计数值为二进制格式 M2M1M0模式选择000模式0001模式1x10模式2x11模式3100模式4101模式5 00 对计数器进行锁存01 只读 写低8位字节10 只读 写高8位字节11 先读 写低8位字节 再读 写高8位字节 00 选计数器001 选计数器110 选计数器211 无意义 8253内部包含3个完全相同的计数器 定时器通道 对3个通道的操作完全是独立的 每个通道都包含一个8位的控制字寄存器 一个16位的计数初值寄存器 一个计数器执行部件 实际的计数器 和一个16位的输出锁存器 执行部件实际上是一个16位的减法计数器 不能直接对其进行读写操作 对计数器0 2的写入操作实际是写各自的计数初值寄存器 对计数器0 2的读出操作实际是读各自的计数输出锁存器 计数输出锁存器的值常跟随计数执行部件变化 计数初值寄存器和输出锁存器都是16位寄存器 它们均可被分成高8位和低8位两个部分来读写 执行部件自身能够从初值寄存器获得计数初始值 并能把当前的计数值锁存到输出锁存器中 必要时CPU可对它执行读操作 以了解某个时刻计数器的瞬时值 每个通道工作时 都是对输入到CLK引脚上的脉冲按二进制或十进制 BCD码 格式进行计数 计数采用倒计数法 先对计数器预置一个初值 再把初值装入实际的计数器 装入初始值的方法有两种 在门控信号GATE从低电平变为高电平的上升沿时刻 会把初值寄存器的内容送到执行部件 而当GATE保持不变时 在对初值寄存器进行写入操作后 在下一个CLK的下降沿把初值寄存器的内容送到执行部件 然后 开始递减计数 即每输入一个时钟脉冲 计数器的值减1 当计数器的值减为预定的数值时 便从OUT引脚输出一个脉冲信号 输出信号的波形主要由工作模式决定 同时还受到从外部加到GATE引脚上的门控信号控制 它决定是否允许计数 当用8253作外部事件计数器时 在CLK脚上所加的计数脉冲是由外部事件产生的 这些脉冲的间隔可以是不相等的 如果要用它作定时器 则CLK引脚上应输入精确的时钟脉冲 这时 8253所能实现的定时时间 决定于计数脉冲的频率和计数器的初值 即 定时时间t 时钟脉冲周期T 所计时钟脉冲个数 时钟脉冲周期T 预置的计数初值n 例如 在某系统中 8253所使用的计数脉冲频率为0 5MHz 即脉冲周期T 2 s 如果给8253的计数器预置的初值n 500 则当计数器计到数值为0时 定时时间t 2 s 500 1ms 二 初始化编程步骤和门控信号的功能 1 8253的初始化编程步骤 1 写入控制字用输出指令向控制字寄存器写入一个控制字 以选定计数器通道 规定该计数器的工作模式和计数格式 写入控制字还起到复位作用 使输出端OUT变为初始状态 并使计数器清0 三个计数通道共用同一个控制字端口地址 A1A0 11 用控制字的标志位SC1SC0区别不同通道 对3个计数器通道的编程没有先后顺序的规定 对每个计数器的编程先写入控制字 后写入计数初值 2 写入计数初值用输出指令向选中的计数器端口地址中写入一个计数初值 初值设置时要符合控制字中有关格式的规定 初值可以写入8位数据 也可以写入16位数据 若是8位数 只要用一条输出指令就可完成初值的设置 如果是16位数 则必须用两条输出指令来完成 规定先送低8位数据 后送高8位数据 由于计数器是先减1 再判断计数值是否为零 所以写入计数初值为0 实际就等于10000H 在二进制计数时 它表示65536 BCD计数时 它表示10000 例 在某微机系统中 8253的3个计数器的端口地址分别为3F0H 3F2H和3F4H 控制字寄存器的端口地址为3F6H 要求8253的通道0工作于模式3 并已知对它写入的计数初值n 1234H 则初始化程序为 MOVAL 00110111B 控制字 选择通道0 先读 写低字节 后高字节MOVDX 3F6H 指向控制口OUTDX AL 送控制字MOVAL 34H 计数值低字节MOVDX 3FDH 指向计数器0端口0UTDX AL 先写入低字节MOVAL 12H 计数值高字节OUTDX AL 后写入高字节 三 8253的工作模式 1 方式0 计数结束产生中断一次定时或计数 重写初值 启动新一轮的计数 2 方式1 可编程的单脉冲 单稳 触发器GATE边沿触发 启动新一轮计数 3 方式2 分频器 速度波发生器 具有计数初值重装能力 4 方式3 方波发生器具有计数初值重装能力 5 方式4 软件触发的选通信号发生器一次定时 重写初值 启动新一轮的计数 6 方式5 硬件触发的选通信号发生器GATE边沿触发新一轮计数 方式0 计数结束产生中断 模式0注 计数结束产生中断 在GATE 1时 执行部件获得初值之后便开始计数 在计数过程中 如果GATE 0 则暂停计数 但不影响OUT的状态 当GATE 0 1 执行部件从刚才暂停的计数值继续计数 直到计数结束 OUT 1 在计数过程中 如果写入新的计数初值 则停止计数 在下一个CLK脉冲下降沿后 新的初值送到计数执行部件 此后 计数器按新的初值重新计数 按模式0进行计数时 计数器只计一遍 当计数器计到0时 不会自动再装入初值重新开始计数 其输出将保持高电平 方式1 单稳态输出 高 在计数过程中 若GATE产生负跳变或等于低电平 不会影响计数过程的进行 但若在计数器回零前 GATE又产生从低到高的正跳变 则8253又将初值N装入计数器执行部件 重新开始计数 其结果会使输出的单脉冲宽度加宽 在计数过程中 写入新的计数初值 不影响当前计数过程 除非再来一个GATE上升沿 则就会装入新的初值 重新开始计数 可以通过GATE上升沿多次触发计数过程 模式1注 单脉冲 单稳 触发器 方式2 分频器 模式2注 分频器 在计数过程中 当GATE变为低电平时 将迫使OUT变为高电平 并禁止计数 GATE从低电平变为高电平 也就是GATE端产生上升沿时 则在下一个时钟脉冲时 把预置的计数初值装入计数器 从初值开始递减计数 门控信号GATE可用来使多个计数器同步 在操作过程中 任何时候都可由CPU重新写入新的计数值 它不会影响当前计数过程的进行 模式2具有自动重装初值功能 当计数器计数到0的同时把初值寄存器的内容重新装入计数执行部件 自动重新计数 该过程自动循环 直到GATE 0或改变计数器的模式 方式3 方波发生器 模式3注 方波发生器 在计数过程中 当GATE变为低电平时 将迫使OUT变为高电平 并禁止计数 GATE从低电平变为高电平 也就是GATE端产生上升沿时 则在下一个时钟脉冲时 把预置的计数初值装入计数器 从初值开始递减计数 门控信号GATE可用来使多个计数器同步 在操作过程中 任何时候都可由CPU重新写入新的计数值 它不会影响当前计数过程的进行 只有下一个计数周期才会按新写入的初值计数 模式3具有自动重装初值功能 当计数器计数到0的同时把初值寄存器的内容重新装入计数执行部件 自动重新计数 该过程自动循环 直到GATE 0或改变计数器的模式 方式4 软件触发的选通信号发生器 模式4注 软件触发选通模式 在计数的过程中GATE变为低电平 则停止计数 当GATE变为高电平后 又重新将初值装入计数器 从初值开始计数 直至计数器的值减为0时 从OUT端输出一个负脉冲 在操作过程中 重新写入新的计数初值 在下一个时钟脉冲时 将新的计数初值装入执行部件 并从新的计数值开始计数 模式4不具有自动重装初值功能 当计数器计数到0输出负脉冲以后 该过程结束 要重新开始计数 必须再次写入初值 由于计数过程是由软件把计数初值装入计数寄存器来触发的 所以模式4称为软件触发选通模式 方式5 硬件触发的选通信号发生器 模式5注 硬件触发选通模式 在计数过程中 GATE又产生从低到高的正跳变 经过一个CLK周期 初值送入执行部件 然后再进行减1计数直到为0 输出负脉冲 在计数过程中 写入新的计数初值 没有GATE触发信号 不影响当前计数过程 模式5不具有自动重装初值功能 当计数器计数到0输出负脉冲以后 该过程结束 要重新开始计数 必须再次给出门控信号上升沿 由于计数过程是由GATE上升沿来触发的 所以模式5称为硬件触发选通模式 例如 设定计数器为先读低字节 后读高字节方式 当前计数值为0300H 则读到的低字节为00H 在读低字节的过程中 又来一个脉冲 使得当前计数值变为02FFH 这时读取高字节便得到02H 结果便得到当前值为0200H 出现错误 为了防止这种情况发生 可以采用两种方法 暂停计数或者锁存计数器的当前值 暂停计数可以用外部硬件切断计数脉冲信号 或者使门控信号变为低电平 迫使8253停止计数 这种方法的缺点是需要硬件电路配合 此外 由于外部事件源被切断或正常的计数过程被禁止 干扰了实际的计数过程 可能出现漏计情况 因此 这不是一种好的方法 但这种方法可以实现多个计数器的同步比较 8253计数值的读取 在许多用到8253的计数功能的场合 常常需要读取计数器的当前计数值 在计数初值设为N的情况下 如果当前计数器的计数值为M 则在计数模式下 模式0 已经完成的个数等于N 1 M 在读计数器当前值时 计数过程仍在进行 而且不受CPU的控制 因此 在CPU读取计数器的输出值时 可能计数器的输出正在发生改变 可能导致错误的读数 另一方法是在读出数据之前 先锁存当前计数值 当需要读取计数器的现行值时 先向8253送一个锁存命令 即把RL1RL0 00的控制字写入8253的控制字端口 锁存命令字中的SC1SC0用来确定要锁存的是哪一个计数器 锁存命令字的低4位对锁存命令无影响 可以将它们置为0 8253立即把指定计数器的当前计数值锁存到输出锁存器中 然后就可从相应的计数器的输出所存器中读取当前计数值 读取计数值的方法由对8253进行初始化编程时所写入的控制字中的RL1RL0位来确定 当RL1RL0 01时 只读取计数器的低字节 RL1RL0 10时 只读取计数器的高字节 RL1RL0 11时 先读写计数器低字节 后读写高字节 8253初始化方法 控制字计数初值 已知 CLK的频率fc与定时的时间t 计数初值 n fc t例1 fc 1MHZ 最大计数初值 65536一个定时器最大定时时间 N fc 65536 106 0 065536s 8 28253应用举例 例2 设定时器0 定时器1工作于方式2 外部提供一个时钟 频率f 2MHZ 要求定时器1每5ms产生一个脉冲 定时器0每5s产生一个脉冲 1 一个定时器的最大定时时间 65536 2 106 0 032768s 32 768ms2 将定时器1的CLK1接2MHZ时钟 计数初值 3 将定时器1的OUT1端接到定时器0的CLK0端 定时器0的计数初值 1 用8253产生各种定时波形在某个以8086为CPU的系统中使用了一块8253芯片 通道的基地址为310H 所用的时钟脉冲频率为1MHz 要求3个计数通道分别完成以下功能 1 通道0工作于方式3 输出频率为2kHz的方波 2 通道l产生宽度为480 s的单脉冲 3 通道2用硬件方式触发 输出单脉冲 时间常数为26 通道0工作于方式3 即构成一个方波发生器 它的控制端GATE0须接 5V 为了输出2kHz的连续方波 应使时间常数N0 lMHz 2kHz 500 通道1工作于方式l 即构成一个单稳态电路 由GATE1的正跳变触发 输出一个宽度由时间常数决定的负脉冲 此功能一次有效 需要再形成一个脉冲时 不但GATE1脚上要有触发 通道也需重新初始化 需输出宽度为480 s的单脉冲时 应取时间常数N1 480 s l s 480 通道2工作于方式5 即由GATE2的正跳变触发减1计数 在计到0时形成一个宽度与时钟周期相同的负脉冲 此后 若GATE2脚上再次出现正跳变 又能产生一个负脉冲 通道0初始化程序MOVDX 316H 控制口地址MOVAL 00110111B 通道0控制宇 先读写低字节 后高字节 方式3 BCD计数OUTDX AL 写人方式字MOVDX 310H 通道0口地址MOVAL 00H 低字节OUTDX AL 先写入低字节MOVAL 05H 高字节OUTDX AL 后写入高字节 通道1初始化程序MOVDX 316HMOVAL 01110011B通道1方式字 先读写低字节 后高字节 方式1 BCD计数OUTDX ALMOVDX 312H 通道1口地址MOVAL 80H 低字节OUTDX ALMOVAL 04H 高字节OUTDX AL 通道2初始化程序MOVDX 316HMOVAL 10011011B 通道2控制字 只读写低字节 方式5 BCD计数OUTDX ALMOVDX 3l4H 通道2口地址MOVAL 26H 低字节OUTDX AL 只写入低字节 8253计数功能的应用例子 8253计数功能的应用例子 选择计数器1工作于方式0 按BCD码计数 先读 写低字节 后读 写高字节 则控制字为 如要求每500个脉冲 通过通过8259A向CPU发出一次中断请求 则选取计数韧值n 每次中断表示计满了500个数 在中断服务程序中使工件总数加上500 中断服务程序执行完后 返回主程序 这时需要由程序把计数韧值499再次装入计数器1 才能继续进行计数 8253计数功能的应用例子 设8253的4个端口地址分别为F0H F2H F4H和F6H 则初始化程序为MOVAL 01110001B 控制字OUT0F6H ALMOVAL OUT0F2H ALMOVAL 04HOUT0F2H AL 8253在PC XT机中的应用 1 计数器0 实时时钟计数器0用作定时器 为系统提供时间基准 选用方式3 方波发生器 二进制计数 计数器初值n 0 相当于65536 这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招聘师工艺创新考核试卷及答案
- 回转窑球团焙烧工设备调试考核试卷及答案
- 重介质分选工三级安全教育(班组级)考核试卷及答案
- 2025年肺活量测试仪行业研究报告及未来行业发展趋势预测
- 2025年电子蜂鸣器行业研究报告及未来行业发展趋势预测
- 2025年2,3-二氯马来酸酐行业研究报告及未来行业发展趋势预测
- 2025年钢粉行业研究报告及未来行业发展趋势预测
- 2025年超级不锈钢行业研究报告及未来行业发展趋势预测
- 烟机设备操作工操作考核试卷及答案
- 异丙醇装置操作工专业知识考核试卷及答案
- FZ/T 73001-2016袜子
- 国际脓毒症与脓毒症休克指南
- 环境管理标准化手册
- 银屑病教学讲解课件
- 新部编版道德与法治四年级上册第一单元课件全套与班级共成长
- 前厅服务员国家职业标准69080
- 项目领导班子竞聘面试评分表
- 大分子自组装课件
- 开业筹备倒计时行动计划表
- 工序质量报验单
- 湖南地方文化常识 完整版PPT
评论
0/150
提交评论