概述
计数器/定时器
- 引言
- 工作原理
- 8253内部结构和引脚信号
- 初始化编程及门控信号
- 8253工作方式
- 8253应用
- 产生定时波形
- LED灯的点亮和熄灭
- 计数功能
- 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拓展功能——读回命令
-
控制字:最高位设置为11
D3-D1决定锁存哪些通道
只锁存一个:3种情况
锁存两个:三种情况
全部锁存:1种情况
状态字:
-
读回命令可以同时锁存多个通道,8253中的控制字锁存只能锁存一个通道
最后
以上就是漂亮爆米花为你收集整理的可编程计数器/定时器8253、8254引言工作原理8253应用8254拓展功能——读回命令的全部内容,希望文章能够帮你解决可编程计数器/定时器8253、8254引言工作原理8253应用8254拓展功能——读回命令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复