目录

  • 前言
  • 【1】定时处理方法
    • 1、定时的方法:
    • 2、定时和计数器
  • 【2】8253计数/定时器
    • 1、特点:
    • 2、芯片引脚以及电路:
    • 3、连接方式:
    • 4、工作原理:
    • 5、寄存器配置
      • a、初始化操作(三个通道单独初始化)
      • b、读出命令
      • c、GATE的作用
      • d、工作方式配置
        • [1]方式0 计数结束中断
        • [2]方式1 可编程单稳脉冲
        • [3]方式2 频率发生器(分频器)
        • [4]方式3 方波输出(周期性方波输出)
        • [5]方式4 软件触发选通
        • [6]方式5 硬件触发选通
        • 特点总结
  • 【3】8253计数/定时器与系统总线的接法
    • 与最小系统相连
    • 与最大系统相连
    • 与PC机相连
  • 总结

前言

定时器可以理解为一个特殊的中断。计数器和定时器其实只是功能上的不同以及度量单位的不同,定时器里面肯定是有计数的。

【1】定时处理方法

1、定时的方法:

1、软件定时方式(不是很准确,会被其他中断打断计数过程)
■CPU干预
■指令执行时间作间隔
2、不可编程的硬件定时方式(就像保险丝熔断一样,并不是由程序控制的)
■方式固定
■硬件设定参数
3、可编程的硬件定时方式
■程序设定、程序控制
■中断.

2、定时和计数器

区别:对不同信号的计数
定时器:对时钟信号进行计数,所计数的脉冲具有周期性
计数器:对外部脉冲进行计数,所计数的脉冲周期性、非周期性都可能呈现。
计数和及时本质是相同的,他们都是对一个输入脉冲进行计数,如果输入脉冲的频率一定,那么记录脉冲的个数与所需的时间是一一对应的关系。例如输入脉冲频率为2Mhz,那么计数2x10 6

也就是1秒

【2】8253计数/定时器

1、特点:

1、可编程(工作方式/计数值)
2、三个独立的计数器通道
3、对初值进行减1计数
4、二进制/BCD计数初值
5、计数对象的最高频率为2MHz

2、芯片引脚以及电路:

由引脚可以看出,数据位是8位的,也就是说不能超过255;如果计数值超过255要分两次写。
读写控制电路以及三个计数器通道:

CLK(输入时钟)
OUT(输出时钟)
GATE(控制门):高电平有效,是计数器的开关
访问8253的信号由两组产生:
1、从十六根总线拿出两个接A0、A1 ,进行端口寻址:00:通道0、01:通道1、10:通道2、11:控制寄存器
2、CS可以拿另外14根(部分或者全部)外加一些逻辑电路构成CS片选信号

3、连接方式:


注意,控制寄存器是不可以读的。

4、工作原理:

控制寄存器:决定工作模式(定时还是计数)
状态寄存器:决定工作状态
初值寄存器:计数的初值
计数输出寄存器:CPU从中读当前的计数值
计数器:执行计数操作,CPU不能访问


工作原理:对CLK信号进行减1处理
首先,CPU把控制字写入控制寄存器,计数初始值写入初值寄存器。
计数从初值开始,每当CLK信号出现一次,计数值减1,当计数值减到0,从OUT段输出规定的信号。
CLK信号出现,计数器是否减1,由门控制信号GATE决定。
CLK是计数输入信号,计数器对CLK端出现的脉冲个数进行计数:
CLK端可以输入外部事件
CLK端可以介入固定频率的时钟信号,从而实现计时。
OUT信号在计数结束时发生变化:
可将OUT作为外部设备的控制信号
可将OUT作为向CPU申请中断的信号
CPU可以从计数寄存器独处当前计数值,读前应向控制寄存器发出锁存信号
定时/计数器初值的计算:
定时时间=时钟脉冲周期 x 预置的计数初值
定时频率=时钟脉冲频率 / 预置的计数初值

5、寄存器配置

a、初始化操作(三个通道单独初始化)

1、写入控制字
选择计数通道
设置工作方式
初值的访问方式
确定初值的数制(二进制/BCD)
计数器清零、OUT初始化
2、写入初值
例题1:设三个计数器的CR/OI端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器0,工作模式2,CR/OL仅 使用低8位,=初值为100,计数值使用二进制
分析:
1、根据要求配置控制寄存器:0001 x100,这里x我们认为是0,所以配置字为14H
2、计数值100转为16进制:64H

MOV AL, 14H
OUT 73H, AL
MOV AL, 64H
OUT 70H, AL

例题2:例:设三个计数器的CR/OL端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器1,工作模式1, CR/OL使用16位,
初值为1234,计数值使用BCD

分析:
1、根据要求配置控制寄存器:0111 0011,所以配置字为73H
2、计数值1234H,为16位,而输出一次只能是8位,所以,分高低位分批次输出

MOV AL, 73H
OUT 73H, AL
MOV AX, 1234H   ;此时是BCD码的形式,所以是1234
OUT 71H, AL
MOV AL, AH
OUT 71H, AL

b、读出命令

步骤:
1、发出锁存命令,使当前计数值锁存在OL中,而CE会继续计数
2、用IN语句读OL,获得当前计数值
例题:设三个计数器的CR/OL端口地址为70H、71H、72H,控制寄存器端口地址73H。读出计数器0的当前计数值,放在BX中
分析:
1、根据要求配置控制寄存器:0000 0000,0H
2、读出的值分为两次传出,先低位后高位

MOV AL, 0H
OUT 73H, AL
IN AL, 70H  ;从OL读取低位字节
MOV BL, AL
IN AL, 70H  ;从OL读取高位字节
MOV BH, AL  ;此时BX的内容就是计数器当前的计数值

c、GATE的作用

d、工作方式配置

在具体学习6种工作方式之前(第一次看是有点晕的),我先找了几篇博客,了解一下大致特点以及6种方式的区别。
8253的六种工作方式
8253与8255的工作方式
硬件触发什么意思?:触发与否与gate门的状态有关。

[1]方式0 计数结束中断

计数器写完计数值时,开始计数(软件触发),相应的输出信号OUT就开始变成低电平。当计数器减到零时,OUT立即输出高电平。
门控信号高电平时,计数器工作;为低电平时,计数器停止工作,计数值保持不变。
在计数器工作期间,如果重新写入新的计数值,计数器将按新写入的计数值重新工作。

例题:向8253的A1A0= 11B的地址写入0011 0000B,则表示计数器0设置成方式0,并且采用16位时常数,假设时常数为1500,则计数器0的初始化程序段如下:

MOV DX,COUNTD;   写入8253的方式控制字
MOV AL,0011 0000B
OUT DX,AL;
MOV DX,COUNTA;  计数器0置入时常数
MOV AX,1500
OUT DX,AL
XCHG AL,AH
OUT DX,AL
[2]方式1 可编程单稳脉冲

写入计数初值后,计数器开始工作。门控信号GATE上升沿有效,才开始工作(硬件触发),使输出OUT变成低电平,直到计数器减到0后,输出才变高电平。
在计数器工作期间,当GATE又出现一个上升沿时,计数器重新装入原计数初值并重新开始计数。
如果工作期间对计数器写入新的计数初值,则要等到当前的计数值记满回零且门控信号再次出现上升沿后,才按新写入的计数初值开始工作。

例题:向8253的A1A0= 11B的地址写入0101 0010B,则表示计数器1设置成方式1,并且采用低8位时常数,假设时常数为15,则计数器1的初始化程序段如下:

MOV DX,COUNTD;   写入8253的方式控制字
MOV AL,0101 0010B
OUT DX,AL;
MOV DX,COUNTA;  计数器1置入时常数
MOV AX,15
OUT DX,AL
[3]方式2 频率发生器(分频器)

方式2是一种具有自动装入时间常数(计数初值N)的N分频器。
特点:一次设置计数初值,计数器可自动重复进行减“1”操作,减“1”计数回“0”,可以输出端输出一负脉冲信号。
写入计数初值后,GATE为高开始工作,计数器为0时,OUT输出一个时钟脉宽的负脉冲后自动回复高电平;同时自动重新装入原计数初值,反复计数。
如果工作期间对计数器写入新的计数初值,则要等到当前的计数值记满回零后,才按新写入的计数初值开始工作。
在计数器工作期间,当GATE为低则停止计数,待GATE恢复后计数器重新装入原计数初值并重新开始计数。

例题:向8253的A1A0= 11B的地址写入1001 0100B,则表示计数器2设置成方式2,并且采用低8位时常数,假设时常数为13,则计数器1的初始化程序段如下:

MOV DX,COUNTD;   写入8253的方式控制字
MOV AL,1001 0100B
OUT DX,AL;
MOV DX,COUNTC;  计数器2置入时常数
MOV AX,13
OUT DX,AL

这样在OUT2端就产生了CLK2的13分频信号,若是通过逻辑电路实现起来比较麻烦

[4]方式3 方波输出(周期性方波输出)

方式3工作方式与方式2基本相同,也具有自动装入时间常数(计数初值)的功能。
不同之处在于:工作在3方式,引脚OUT输出的不是一个时钟周期的负脉冲,而是占空比为1:1或近似1:1的方波。当计数值为偶数时,输出在前一半的计数过程中为高电平,在后一半的计数过程中为低电平;为奇数时高电平比低电平宽一个时钟脉冲。

例题:向8253的A1A0= 11B的地址写入0011 0110B,则表示计数器0设置成方式3,并且采用16位时常数,假设时常数为2000,则计数器0的初始化程序段如下:

MOV DX,COUNTD;   写入方式控制字
MOV AL.0011 0110B
OUT DX,AL
MOV DX,COUNTA;  计数器置入时常数
MOV AX,2000
OUT DX,AL
XCHG AL,AH
OUT DX,AL

这样在OUT0端就产生了CLK0的2000分频的方波信号。

[5]方式4 软件触发选通

此方式设定后,输出OUT就开始变为高电平,GATE为高时,当写完计数值后开始计数。当计数器减到零后,OUT输出一个宽度为一个时钟脉冲的负脉冲,然后恢复高电平,并一直保持高电平。
门控信号GATE为高电平时,计数器工作,为低电平时,计数器停止工作,恢复为高电平后计数器又从原装入的计数初值开始减1工作。
在计数器工作期间,如果重新写入新的计数初值,不影响当前计数状态,仅当当前计数值记完后,计数值才按写入的计数值工作。

例题:向8253的A1A0= 11B的地址写入0101 1000B,则表示计数器1设置成方式4,并且采用低8位时常数,假设时常数为75,则计数器1的初始化程序段如下:

MOV DX,COUNTD;   写入方式控制字
MOV AL.0101 1000B
OUT DX,AL
MOV DX,COUNTA;  计数器置入时常数
MOV AL,75
OUT DX,AL
[6]方式5 硬件触发选通

方式5的工作特点是由GATE上升沿触发计数器开始工作。
在方式5工作方式下,当写入计数初值后,计数器并不立即开始计数,而要由门控信号的上升沿启动计数。
在计数过程中(或者计数结束后),如果门控信号再次出现上升沿,计数器将从原装入的计数初值重新计数。

需要注意的地方:
1、处理器写入8253的计数初值只是写入了预置寄存器,之后到来的第一个CLK输入脉冲(需先由低电平变高,再由高电平变低)才将预置寄存器的初值送到减1计数器。
2、方式0: 一般用作请求中断源.
方式1:一般用作输出固定时长的方波,比如定时器.
方式2差不多,只不过他n计数为零的时候,他只产生一次负脉冲,可作为一次信号,作为分频器使用.

特点总结



比较8254方式0与方式4、方式1与方式5的区别?

方式0与方式4
方式0 OUT 端计数过程中为低,计数值减为0时,输出变高
方式4 OUT端计数过程中为高,计数值减为0时输出宽度为1个CLK的负脉冲.
方式1与方式5
方式1 OUT端输出宽度为n个CLK的低电平,计数值减为0时,输出为高
方式5 OUT 端计数过程中为高,计数值减为0时输出宽度为1个CLK的负脉冲

【3】8253计数/定时器与系统总线的接法

在已经设计好的8086系统总线的情况下,可以直接利用系统总线的信号与8253连接。

与最小系统相连

使用偶地址:

使用奇地址:
1、A0换成BHE’
2、D7~ D0换成D15~D8

与最大系统相连

使用偶地址:

使用奇地址:
1、A0换成BHE’
2、D7~ D0换成D15~D8

与PC机相连

此时实际上和最大系统是相似的,不过由于系统中存在DMA机构,所以必须使AEN=0,此时为非DMA操作。由于数据位只有8位,不分奇偶。

总结

关于这方面的应用其实就是书后习题,明天专门写一章关于应用的笔记。
8253译码电路设计以及初始化编程讲解


Reference:

8253的六种工作方式
8253与8255的工作方式
关于6种工作方式更加详细的过程请参考《微机原理与接口技术.楼顺天版》P253——P263。

微机原理—可编程计数器/定时器8253概念详解相关推荐

  1. 可编程计数器/定时器8253和8254

    计数器/定时器8253和8254 什么是计数和定时 8253/8254的编程结构 8253/8254的编程方法 8253/8254的工作模式 模式0--计数结束产生中断 模式1--单负脉冲发生器(可编 ...

  2. 【沧海拾昧】微机原理:可编程计数器/定时器8253芯片

    #C0303 沧海茫茫千钟粟,且拾吾昧一微尘 --<沧海拾昧集>@CuPhoenix [阅前敬告] 沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系 如有问题定为本集记录有谬, ...

  3. 计数器/定时器8253/8254

    计数器/定时器8253/8254 计数器/定时器的原理图 8253/8254的编程结构 CLK时钟输入信号:在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1 GATE门控输入信号 ...

  4. [crypto]-02-非对称加解密RSA原理概念详解

    说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...

  5. [crypto]-01-对称加解密AES原理概念详解

    1.对称加解密 术语:P是明文,C是密文,K是密钥,E是加密算法,D是解密算 (1).常用的对称加解密有哪些? (2).加解密的模式 [ecb]这种模式是将整个明文分成若干段相同的小段,然后对每一小段 ...

  6. 零基础学习PHP编程——基本概念详解之域名解析与DNS缓存

    基本概念详解之一--域名解析与DNS缓存 注意: 本文主要介绍了域名解析流程即DNS缓存相关知识 [转载请注明] 欢迎交流QQ群: 640765823 一. DNS是什么? DNS(Domain Na ...

  7. AUTOSAR从入门到精通100讲(三十九)-AUTOSAR 通信服务-Com模块两部曲-概念详解

    Com模块概念详解 1. Com模块功能介绍 COM模块位于RTE和PDU Router模块之间. COM模块提供信号网关功能,主要的功能如下: . 为RTE提供信号导向的数据接口 . 将AUTOSA ...

  8. InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)...

    上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 publi ...

  9. python黑帽编程视频_Python黑帽编程 3.4 跨越VLAN详解

    VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLA ...

最新文章

  1. SLAM | 视觉SLAM中特征点法与直接法结合:SVO
  2. KNN 最近邻算法(K近邻)
  3. 耕牛传媒关于诈骗,拖延工期等负面信息特别申明
  4. winform datagridview 设置标题
  5. python客户端修改session_Python接口自动化之cookie、session应用
  6. dubbo 学习笔记 -- provider端
  7. 如何用70行Java代码实现神经网络算法
  8. Idea中,Terminal 无法联接window终端解决
  9. ELK详解(十七)——filebeat输出到Redis和Elasticsearch实战
  10. 3、NDK下载、安装
  11. Ubuntu系统上的ImageJ安装和卸载方法
  12. 如何采用类比法和类推法估算软件项目工作量
  13. hexo博客中如何插入图片
  14. js数组拆分成几个数组
  15. 储罐液位开关c语言编程,危化品企业罐区液位计和紧急切断阀的设置及联锁要求规范合集(1)...
  16. 【笔记】reko 0.10.2 反编译工具安装和使用记录|(2) 翻译 user‘s guide
  17. ACM技术栈(知识栈)
  18. 查看程序集(*.dll)的PublicKeyToken
  19. 鼠标滑过图片抖动晃动效果(css/Shake)
  20. HighNewTech:展望未来之十大颠覆技术

热门文章

  1. 通信系统原理[郭宇春]——二元数字频带传输——课后习题答案
  2. 电子证据是计算机系统,电子证据计算机证据数字证据的概念辨析
  3. JAVA两年5009_【JAVA】PAT 乙级 1059 C语言竞赛(测试点1、2超时) 内含1-10000的素数表和0-10000是否素数的boolean值...
  4. 【嵌入式Linux驱动开发】二十一、Linux内核自带的KEY驱动探索
  5. 【B端·BI系统实战分析】BI系统概述
  6. 关于推荐系统中的DOA
  7. rtos系统c语言,让我们来学习RTOS,自己写RTOS
  8. Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWo
  9. 电视剧《天道》观后感
  10. 9.10 安卓常用工具类之一 对话 ---- DialogUtil