可编程计数器/定时器的工作原理

计数器:设置好技术初值后,便开始减1计数,减为0时,输出一个信号
定时器:设置好定时常数后,便进行减1计数,按定时常数不断地输出为时钟周期整数倍的定时间隔
差别:计数器减到0后,输出一个信号便结束;定时器减为0后,自动恢复初值重新计数

输入信号中断的CLK决定了计数速率,门控脉冲GATE是对时钟的控制信号。计数器/定时器的输出可连到系统的中断请求上,用来产生中断;也可以连到I/O设备上,启动一个I/O操作。
计数器的值送到技术输出寄存器中可被读出。计数值到达0时,一方面会在输出引脚OUT上输出一个信号,另一方面还会在状态寄存器的对应位上反映出来。
控制寄存器可用来控制计数器/定时器的工作模式。工作模式就是时钟脉冲和门控脉冲怎样配合来产生怎样的输出。

8253/8254的编程结构


1.三个计数器共用一个控制寄存器和一个状态寄存器(只有8254有状态寄存器)
2.执行部件CE实际上是一个16位的减法计数器;输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可对此进行读操作

8253/8254控制寄存器和控制字

三个计数器共用一个控制寄存器,通过对控制寄存器写入控制字,可以使3个计数器工作于不同的模式。
(1)模式设置控制字

BCD位:计数初值的格式,此位如为1,则后面设置的计数初值为BCD码格式,范围为0 ~ 9999;如为0,则后面设置的计数初值为0 ~FFFFH
M2、M1、M0:决定工作模式,共6种
RW1、RW2:读/写指示位
00:锁存操作,使当前计数值在输出锁存器中锁定
01:只读/写低8位
10:只读/写高8位
11:先读/写低8位,再读/写高8位
SC1、SC2:选择计数器

(2)读出控制字
每个计数器的当前计数值和当前状态(8254)可以被读取,因为不管是计数值还是状态都是不断变化的,所以在读取前要先进行锁存

D7、D6、D0:读出控制字的标识码
D5:为0时将所选计数器的当前计数值进行锁存
D4:将所选计数器的状态进行锁存
D3、D2、D1:分别对应计数器2、1、0。读出控制字可用一个锁存命令同时锁存多个计数器的计数值,也可用一个锁存命令锁存某个计数器的计数值和状态,但不能一次锁存多个计数器的状态,因为状态寄存器只有一个,一个时刻只能对应于一个计数器。

8254的状态寄存器和状态字

和控制寄存器共用一个端口地址

D7:表示OUT端的状态,为1表示高电平,为0表示低电平
D6:表示初值是否已经装入计数器,为0表示装入
D5 ~ D0:同模式设置寄存器的对应位含义相同

8253/8254的编程命令

编程的三条原则:
1.对计数器设置初始值前必须先写控制字。
2.初始值设置时,要符合控制字中的格式规定,即只写低位字节还是只写高位字节,或高低位字节都写,控制字一旦规定,具体初始值设定时就要一致。
3.要读取计数器的当前值和状态字,必须用控制字先锁定,才能读取。

写入命令:设置控制字命令、设置初值命令和锁存命令
读出命令:读取当前计数值和当前状态字

8253/8254的工作模式

模式0——计数结束产生中断(电平触发)

注:
1.门控GATE=1时,计数进行,否则计数停止;
2.计数到0时,不会自动装入初值重复计数,除非重新写入初值;

模式1——可编程的单稳态触发器(上升沿触发)

注:
1.用上升沿触发,每触发一次,输出一个宽度为N个时钟周期的负脉冲
2.触发可重复进行,计数结束后,如又来一个触发上升沿,那么,会重复计数过程,不必重新写入计数初值
3.在计数期间,如又写入新的计数值,当前输出不受影响,即仍然输出宽度为N的负脉冲。但如果又来一个触发信号,则按新的计数值做减1计数。
4.单稳态输出脉冲的宽度主要决定于计数值,但也受门控信号的应县,在提前触发(即单稳态受触发后未回到稳态而又受触发)时,会使单稳态输出变宽。

模式2——分频器

注:
1.既可用电平触发,也可用上升沿触发,重复输出宽度为1个时钟周期的负脉冲。
2.减到1(不是0)时,输出端OUT变为低电平,输出一个负脉冲,脉冲宽度为一个时钟周期。
3.计数期间,如写入新的计数初值,输出端OUT不受影响,计数器到0后,将按新的计数值进行计数。
4.软件同步:计数器写入控制字后,若GATE一直处于高电平,那么写入初值后便开始计数。硬件同步:GATE来了一个上升沿,计数器从初值重新开始计数。
5.GATE为持续高电平时,工作如同一个N分频的计数器,正脉冲为N-1个时钟脉冲宽度,负脉冲为一个时钟脉冲宽度。

模式3——方波发生器

注:
1.写入控制字后以高电平为初始电平,写入初值并触发后,当计数到一半时,输出变为低电平,到终值时又变为高电平。
2.GATE=1,计数进行,否则停止。
3.计数过程中,如写入新的初值,不影响当前输出周期,此后再按新的值开始计数。
4.软件同步(类似);硬件同步(类似);

模式4——软件触发的选通信号发生器

注:
1.用电平触发,输出单一的负脉冲。
2.减为0时,输出宽度为1个时钟周期的负脉冲,一般将此作为选通信号。
3.GATE=1时进行计数。
4.若写入新的计数值,那么按新的初值作减1计数

模式5——硬件触发的选通信号发生器

注:
1.上升沿触发
其他参照模式4与模式1

第九章——计数器/定时器和多功能接口芯片相关推荐

  1. CoreJava 笔记总结-第九章 集合

    第九章 集合 文章目录 第九章 集合 `Java`集合框架 集合接口与实现分离 `Collection`接口 迭代器 泛型实用方法 集合框架中的接口 具体集合 链表 数组列表 散列集 树集 优先队列 ...

  2. 数据结构思维 第九章 `Map`接口

    第九章 Map接口 原文:Chapter 9 The Map interface 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在接下来的几个练习中,我介绍了Map接口的几个实 ...

  3. Java编程思想读书笔记——第九章:接口

    第九章 接口 接口和实现类 抽象类是介于普通的类和接口之间的中庸之道,抽象类也是一种重要的工具,你不可能总是使用纯接口 9.1 抽象类和抽象方法 抽象方法声明的语法: abstract void f( ...

  4. 【JAVA SE】第九章 接口

    第九章 接口 文章目录 第九章 接口 一.概念 二.接口与类 1.相似点 2.区别 三.接口特性 四.接口的声明 五.接口的实现 六.接口的继承 七.接口的多继承 八.标记接口 一.概念 接口(Int ...

  5. Java编程思想第四版读书笔记——第九章 接口

    这章介绍了适配器设计模式和策略设计模式. 第九章  接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 1.抽象类和抽象方法 public abstract void f(); 创 ...

  6. 操作系统--第九章 操作系统接口--习题答案

    操作系统第四版课后的全部习题答案,学习通作业答案. 说明:操作系统其他章节的习题答案也在此"操作系统"专栏. 第九章 1.系统安全的复杂性表现在哪几个方面? 答:(1)多面性:大规 ...

  7. 【正点原子MP157连载】第十七章 通用定时器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  8. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  9. 第九章 魔法方法、特性和迭代器

    第九章 魔法方法.特性和迭代器 构造函数 构造函数(constructor),它其实就是初始化方法,只是命名为__init__. 构造函数不同于普通方法的地方在于,将在对象创建后自动调用它们. 在Py ...

最新文章

  1. 约束,索引,rownumrownum
  2. Android开发之GridView的使用(解读谷歌官方API)
  3. tf.broadcast_to
  4. 计算机英语 动态,计算机英语高级词汇精选
  5. Spring源代码研究之how is Bean object created
  6. 编译编译时,用不到的库,一定不要链接
  7. 安卓应用出海指南--发布到Google Play
  8. tomcat8下载安装教程
  9. matlab中正弦信号的功率计算,范数norm
  10. UNITY自动化测试简单方法
  11. uc游览器 android系统,手机UC浏览器2019最新版
  12. platform_device 与 platform_driver 是如何匹配的?
  13. google FireBase产品接入 —— FCM
  14. 如何屏蔽掉某网址不能访问
  15. 如何做好网站优化推广
  16. 独立IP和共享IP选谁更划算?
  17. 软件开发成本估算方法【转】
  18. php 抽象对象,PHP5.0对象模型探索之抽象方法和抽象类
  19. 7个免费的Windows数据恢复工具
  20. 视频存储服务器怎么配置文件,服务器搭建存储配置文件

热门文章

  1. php把服务器文件curl提交,php中使用curl进行文件上传的巨坑
  2. linux eth_p_ip,linux数据链路访问之ETH_P_ALL等等
  3. 纯CSS导航栏下划线跟随效果
  4. 代码的抽象三原则【转载】
  5. 内存管理2(主讲MRR)
  6. Java NIO与IO的差别和比較
  7. Cordic的学习之硬件实现
  8. 标志寄存器操作(待续)
  9. ibatis Dynamic总结(ibatis使用安全的拼接语句,动态查询)
  10. MySQL列类型之——数值类型