1、第十一章可编程定时 计数器8253 本章重点 本章重点介绍可编程定时器 计数器8253的内部结构 6种工作方式及初始化编程应用 本章难点 本章难点是可编程定时 计数器8253的引脚结构 6种工作方式的区别及使用场合 灵活掌握初始化编程应用 11 18253芯片内部结构可编程定时器8253的外部引线如图11 1所示 相应的内部结构框图如图11 2所示 图11 28253的内部结构 8253与总线相连接的引线主要是 Do D7 双向数据线 用以传送数据和控制字 计数器的计数值亦通过此数据总线进行读写 CS 输入信号 低电平有效 当它有效时 才能选中该定时器芯片 实现对它的读或写 读控制信号 低电平
2、有效 写控制信号 低电平有效 以上两信号输入到8253上 与其他信号一起 共同完成对8253的读写操作 A Al为8253的内部计数器和一个控制寄存器的编码选择信号 其功能如下 AlA 00可选择计数器001可选择计数器110可选择计数器211可选择控制寄存器 CLK0 2 是每个计数器的时钟输入端 计数器对此时钟信号进行计数 CLK最高频率可达2MHz GATE0 2 叫门控信号 即计数器的控制输入信号 用来控制计数器的工作 OUT0 2 计数器输出信号 用来产生不同方式工作时的输出波形 11 28253工作方式1 方式0 计数结束产生中断 在这种方式下 计数器对CLK输入信号进行减法计数
3、每一个时钟周期计数器减1 当设定该方式后 计数器的输出OUT变低 设置装入计数值时也使输出OUT变低 当计数减到零 计数结束时 输出OUT变高 该输出信号即可以作为中断请求信号来使用 如果在计数过程中修改计数值 则写入第一个字节使原先的计数停止 写入第二个字节后 开始以新写入的计数值重新计数 上面所说的计数过程受到计数器的门控信号GATE的控制 当GATE为高电平时 允许计数 若GATE为低电平时 则禁止计数 2 方式1 可编程单稳 当计数值装入计数器后 要由门控信号GATE上升沿开始启动计数 同时 记数器的OUT输出低电平 当记数结束时 OUT输出高电平 这样就可以从计数器的OUT端得到一个
4、由GATE的上升沿开始 直到计数结束时的负脉冲 若想再次获得一个所希望宽度的负脉冲 可用GATE上升沿重新触发一次计数器 或重新装入计数值并用GATE上升沿触发计数器 如果在形成单个负脉冲的计数过程中改变计数值 则不会影响正在进行的计数 新的计数值只有在前面的负脉冲形成后 又出现GATE上升沿才起作用 但是 若在形成单个负脉冲的计数过程中又出现新的GATE上升沿 则当前计数停止 而后面的计数以新装入的计数值开始工作 这时的负脉冲宽度将包括前面未计完的部分 使负脉冲加宽 3 方式2 频率发生器 在该方式下 计数器装入初值 开始工作后 计数器的输出OUT将连续输出一个时钟周期宽的负脉冲 两负脉冲之
5、间的时钟周期数就是计数器装入的计数初值 这样一来 就可以利用不同的计数值达到对时钟脉冲的分频 而分频输出就是OUT输出 在这种方式下 门控信号GATE用作控制信号 当GATE为低电平时 强迫OUT输出高电平 当GATE为高时 分频继续进行 在此方式下 计数周期数应包括负脉冲所占的那一个时钟周期 也就是说 计数减到1时开始送出负脉冲 在计数过程中 若改变计数值 则不影响当前的计数过程 而在下一次计数分频时 采用新的计数值 4 方式3 方波发生器 在这种方式下 可以从OUT得到对称的方波输出 当装入的计数值N为偶数时 则前N 2计数过程中 OUT为高 后N 2计数过程中 OUT为低 如此这般一直进
6、行下去 若N为奇数 则 N 1 2计数过程中 OUT保持高电平 而 N 1 2计数期间 OUT为低电平 在此方式下 GATE信号为低电平时 强迫OUT输出高电平 当GATE为高电平时 OUT输出对称方波 在产生方波过程中 若装入新的计数值 则方波的下一个电平将反映新计数值所规定的方波宽度 5 方式4 软件触发选通 设置此方式后 输出OUT立即变为高电平 一旦装入计数值 计数立即开始 当计数结束时 由OUT输出一个宽度为一个时钟周期的负脉冲 注意 计数开始时刻并不受GATE控制 此方式同样受GATE信号控制 只有当GATE为高电平时 计数才进行 当GATE为低电平时禁止计数 若在计数过程中装入新
7、的计数值 计数器从下一时钟周期开始以新的计数值进行计数 6 方式5 硬件触发选通 设置此方式后 OUT输出为高电平 GATE的上升沿使计数开始 当计数结束时由输出端OUT送出一宽度为一个时钟周期的负脉冲 在此方式下 GATE电平的高低不影响计数 计数由GATE的上升沿启动 若在计数结束前 又出现GATE上升沿 则计数从头开始 11 38253的控制字8253在使用前要写入控制字 用来规定其工作方式 3个通道中各有一个控制字寄存器 它们使用同一个口地址 靠控制字中的D7 D62位的编码加以区别 控制字格式如下 D7D6D5D4D3D2DlD0 SC1 SC0为计数器选择 SCl SC0 00 选
8、择计数器0 SCl SC0 01 选择计数器1 SCl SC0 10 选择计数器2 SCl SC0 11 非法选择 RW1 RW0为读写格式控制位 RW1 RW0 00 对计数器锁存 以便读取计数值 RW1 RW0 01 只读或只写低8位字节 RW1 RW0 10 只读或只写高8位字节 RW1 RW0 11 先读写低8位 再读写高8位 M2M1M0为工作方式选择位 M2M1M0 000 选择方式0 M2M1M0 001 选择方式1 M2M1M0 X10 选择方式2 M2M1M0 X11 选择方式3 M2M1M0 100 选择方式4 M2M1M0 101 选择方式5 BCD为计数数制选择位 BC
9、D 0 选择二进制计数 最大计数值为65535 BCD 1 选择十进制计数 最大计数值为9999 例11 1 8253计数器0的地址为40H 工作方式5 十进制计数 初值为2850H 计数器1工作于方式3 二进制计数 初值为64H 写出其初始化程序 计数器0控制字为00111011B 3BH 计数器1控制字为01010110B 56H 程序如下 11 48253的寻址及连接 图11 38253与8088总线的连接 11 5初始化应用举例由于8253每个计数器都有自己的地址 控制字中又有专门两位来指定计数器 这就使得8253的编程初始化十分灵活简便 在实际应用中 对计数器的编程实际上常采用两种初
10、始化顺序 逐个计数器分别初始化 对某一个计数器 先写入方式控制字 接着写入记数值 一个字节或两个字节 如图11 4所示 图中表示的是写入两个字节计数值的情况 按照11 4所示的顺序对计数器逐个初始化 计数器初始化的顺序随意选定 先写所有计数器的方式字 再装入各计数器的记数值 其过程如图11 5所示 图11 4一个计数器初始化程序 图11 5另一种编程顺序 例11 2 设8253的CLK0 CLK1均输入100KHZ的时钟脉冲 要求计数器0输出周期为1MS的负脉冲序列 计数器1输出周期为50ms的方波 试写出初始化程序段 设通道0地址为F8H 解 根据题意 计数器0工作在方式2 初始值LSB 10 3 10 5 100 控制字为14H 二进制计数 计数器1工作在方式3 初始值LSB 50 10 3 10 5 5000 用十进制计数 控制字CW 67H 初始化程序如下 本章到此结束