可编程计数器/定时器8253、8254

引言

  • 计算机中的定时功能
    DRAM的定时刷新
    扬声器发声
    对外部事件计数
  • 基本原理
    给计数器设置一个初始值(通过软件实现),初始值按照时钟的频率进行减一,为0时产生中断,转入中断服务程序实现对应功能

工作原理

8253内部结构和引脚信号

在这里插入图片描述
在这里插入图片描述

  • 数据总线缓冲器
    CPU用IN、OUT指令对8253进行读写的信息,都经D7~D0传送,包括:
    ①对8253初始化编程时,CPU向它写入的控制字;
    ②CPU向某一计数器写入的计数初值;
    ③CPU从计数器读出的计数值。
  • 读写控制逻辑
    1)片选信号,由I/O 端口译码电路产生,低电平有效
    2)读信号,CPU读取选定计数器中的内容
    3)写信号,CPU写入计数初值,或控制字
    4)A1A0 ,端口选择信号,选择三个计数通道及控制字寄存器
  • 计数器0-2
    三个独立的计数器,各有6种工作模式
    8位控制字+16位计数初值(最大计数初值为65536)+执行部件(16位减法寄存器)+输出锁存器(计数器瞬时值)
    1)计数初值写入CR,如果只有8位,则一次写入,如果计数初值是16位,则分两次写入。
    2)计数初值写入SR,进行减1计数,并且每减1就写入锁存器,便于读出当前计数值。
    在这里插入图片描述
    定时时间
    定时时间=时钟脉冲周期*计数初值
  • 控制字寄存器(只写寄存器)
    在这里插入图片描述

初始化编程及门控信号

  • 初始化编程步骤
    ①写入控制字
    ②写入计数初值
    如果是16位计数,需要分两次写入,先写低字节,再写高字节
    如果计数初值为0,也要分两次写入,其代表计数的最大值(65536和10000)
    只需要把握两个信息:地址+数据
    选中地址,传入数据
  • 门控信号(结合具体的工作方式观察)

8253工作方式

  • 方式0,计数结束中断方式
    ①触发方式,写信号上升沿
    ②门控信号:1允许,0禁止,下降沿暂停,上升沿继续
    ③计数过程写入新初值:按新初值计数
    在这里插入图片描述
    (CLK为下降沿触发,GATE=1)写入计数初值及工作方式后,WR变为低电平,当WR在上升沿时,计数初值被写入CR,OUT变为低电平,一个时钟周期后,开始计数,计数结束后,OUT上升沿触发中断.
    在这里插入图片描述
    GATE=0时代表暂停
    在这里插入图片描述
    计数结束不会循环,停止计数

  • 方式1:可编程单稳态输出方式
    ①触发方式:GATE上升沿触发
    在这里插入图片描述
    ②GATE=0上升沿:重新计数
    在这里插入图片描述

  • 方式2:比率发生器
    特点:周期性输出
    周期:计数值*时钟周期
    自动重新装载计数初值的功能
    ①触发方式:WR上升沿触发
    在这里插入图片描述
    ②GATE上升沿停止,下降沿重新开始
    在这里插入图片描述
    ③写入计数初值,前一次计数值为0,使用新的计数初值
    在这里插入图片描述

  • 方式3:方波发生器
    与方式2一样具有自动重新装载计数初值的功能,与方式2的区别仅在于输出波形不同
    在这里插入图片描述

  • 方式4:软件触发选通
    在这里插入图片描述
    和方式2相比:不能循环计数,低电平出现时机不同

  • 方式5:硬件触发选通
    触发方式:GATE上升沿触发,波形同方式4在这里插入图片描述
    在这里插入图片描述

8253应用

基本工作思路
①设计硬件电路
②设置控制字和计数初值

产生定时波形

某8086系统中,8253基地址为310H,时钟频率1MHz, 要让3个计数通道实现如下功能:
1)通道0,方式3,输出2kHz方波;
2)通道1,产生宽度为480μs的单脉冲;
3)通道2,硬件触发,输出单脉冲,时间常数26。
试设计电路,并编写各通道初始化程序。

电路设计:
在这里插入图片描述
控制字和初值设置:
控制寄存器地址为316H

  • 通道0:
    计数初值
    1/2kHz=1/1MHz*N
    N=500
    计数初值为500H(BCD码)
    通道0地址为310H
    控制字
    00110111b

  • 通道1:
    单脉冲,特定宽度:方式1
    计数初值
    N=480
    控制字
    01110011b

  • 通道2:
    硬件触发单脉冲:方式5
    初始值
    N=26
    控制字
    10011011b

LED灯的点亮和熄灭

用8253控制LED发光管,要求点亮10s,熄灭10s,再重复。画出硬件图并编写初始化程序。
8253各端口地址为81H、83H、85H和87H;
OUT1连到LED,高电平点亮LED,低电平熄灭LED。

在这里插入图片描述
使用方式5:
计数初值
20s=1/2MHz*N
N=4×107
超出了最大计数值,采用分频技术,如上图所示,选择使用通道0的OUT端作为通道1的CLK输入端
只需满足N1×N2=4×107即可

计数功能

自动化工厂流水线上产品数量的统计,用到一种自动计数系统,可用8086和8253或 8254芯片来实现。

在这里插入图片描述

A1A0与地址总线A2A1相连保证偶地址;GATE1接+5V始终允许计数器工作;OUT1输出到8259A请求中断。
无工件通过时,LED光照到光电管上使其导通,集电极变低电平,经施密特触发器整形后使CLK1=0。
有工件通过时,LED光被挡住,光电管截止,集电极为高电平,使CLK1=1。工件通过后,CLK1又回0。
每通过1个工件,CLK1就输入1个正脉冲,用8253对此脉冲计数,就可统计出工件个数。

初始化编程
计数器1设为方式0,BCD计数,先读/写低字节,控制字为01110001B。
若选计数初值n=499,则经500个脉冲,OUT1将输出1个正跳变。它作用于8259A的IR0端后,将向CPU发中断请求,由中断服务程序让工件总数+500。
中断服务程序执行完后返回主程序,程序应把初值499再次装入计数器1,才能继续计数。
读取计数器的值
对计数器1发锁存命令,然后读出计数值存进AX
锁存命令发出后,锁存的计数值将保持到读出为止。读出后,锁存状态即自动解除,输出锁存器的值又将随计数器的值而变。

8254拓展功能——读回命令

  1. 控制字:最高位设置为11
    在这里插入图片描述
    D3-D1决定锁存哪些通道
    只锁存一个:3种情况
    锁存两个:三种情况
    全部锁存:1种情况
    状态字:
    在这里插入图片描述

  2. 读回命令可以同时锁存多个通道,8253中的控制字锁存只能锁存一个通道

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值