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

目录

    • 前言
    • 【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的作用

1

d、工作方式配置

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

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

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

例题:向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又出现一个上升沿时,计数器重新装入原计数初值并重新开始计数。
如果工作期间对计数器写入新的计数初值,则要等到当前的计数值记满回零且门控信号再次出现上升沿后,才按新写入的计数初值开始工作。
方式1

例题:向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恢复后计数器重新装入原计数初值并重新开始计数。
方式2

例题:向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的方波。当计数值为偶数时,输出在前一半的计数过程中为高电平,在后一半的计数过程中为低电平;为奇数时高电平比低电平宽一个时钟脉冲。
方式3

例题:向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工作。
在计数器工作期间,如果重新写入新的计数初值,不影响当前计数状态,仅当当前计数值记完后,计数值才按写入的计数值工作。
方式4

例题:向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工作方式下,当写入计数初值后,计数器并不立即开始计数,而要由门控信号的上升沿启动计数。
在计数过程中(或者计数结束后),如果门控信号再次出现上升沿,计数器将从原装入的计数初值重新计数。
方式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位,不分奇偶。
1

总结

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


Reference:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php静态分析工具window,window_SpeedPHP框架核心调试工具,在日常的编程开发当中,开发 - phpStudy...

SpeedPHP框架核心调试工具在日常的编程开发当中,开发者经常会使用到对变量的调试,而sp框架提供的变量调试输出函数——dump正好满足了变量调试的需求。下面来介绍一下dump函数的使用方法。dump —— 变量格式化输出函数用法:dump($vars, $out…

python 温度转换程序_Python程序将米转换为码

python 温度转换程序There are many problems where we have to calculate the distance in yards at the end but initially, the measurements are given in meters. So for such type of problems, the solution is converting the initial parameters into yards and then …

Oracle转Sqlserver 记录

使用了微软的SSMA帮忙,但是目前只有表能帮忙转,其他的还是要手动改,- - oracle 可以这样查询AppServiceInfoaspdb ,调用其他库的表。SQL是: aspdb.dob.AppServiceInfo si数据库需要和 aspdb ASPDB_Capacity 在siinf…

形参与实参在函数中的传递

#include <iostream> #include <cstring> using namespace std; void myFun(int a[]); int main() {int a[10];cout<<"aaa"<<sizeof(a)<<endl;//40 int为4&#xff0c;a为10个int&#xff0c;故为40cout<<"yy"<<…

带你走进缓存世界

我们搞程序的多多少少都了解点算法。总体来讲&#xff0c;算法是什么&#xff1f;算法就是“时间”和“空间”的互换策略。我们常常考究一个算法的时间复杂度或空间复杂度&#xff0c;如果我们有绝对足够的时间或空间&#xff0c;那么算法就不需要了&#xff0c;可惜这种条件是…

霍夫码编码(一种不等长,非前缀编码方式)

霍夫曼编码是一种不等长非前缀编码方式&#xff0c;于1951年由MIT的霍夫曼提出。 用于对一串数字/符号编码获取最短的结果&#xff0c;获取最大的压缩效率。 特点&#xff1a;不等长、非前缀 等长式编码 等长编码&#xff0c;意思是对出现的元素采用相同位数的序号进行标定&a…

php调用shell脚本安全,从PHP调用的shell脚本问题

TLDR;我有一个shell脚本,从命令行运行时工作正常,但如果从PHP脚本中调用(通过Web访问)则不行.在这两种情况下,主叫用户都是www-data.线路失败是这样的&#xff1a;openssl genrsa -des3 -out certs/$PCODE.key -passout env:PASSPHRASE 2048为什么会这样&#xff1f;我该怎么调…

linux 运维基础问题_Linux基础能力问题和解答

linux 运维基础问题This section contains Aptitude Questions and Answers on Linux Basics. 本节包含有关Linux基础知识的 Aptitude问答。 1) There are the following statements that are given below, which of them are correct about Linux? Linux is system software…

JS 获取浏览器信息,给出友情提示,避免部分兼容性问题

最近在做webform,浏览器兼容是个问题,这里我收集了一些获取浏览器信息的资料,可以给一些用户使用时,提示浏览器版本过低,让升级版本用. 这样会给开发的我们,省下很多用来调试兼容性的时间和精力. 本人就是这样想的 ~  检测浏览器及版本使用 JavaScript 检测关于访问者的浏览器…

两栏 三栏的css

三栏格局 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh" lang"zh"><head pro…

06-机器学习(Haar+Adaboost实现人脸、人眼检测)

机器学习是什么? 机器学习训练样本特征分类器&#xff0c;通过让机器学习的方式&#xff0c;来达到某种功能的过程 深度学习是什么&#xff1f; 深度学习海量的学习样本人工神经网络 机器学习需要&#xff1a;样本、特征、分类器、对训练后的数据进行预测或检验 人脸样本haar…

php xml表格形式输出,PHP XML如何输出nice格式

这里是代码&#xff1a;$doc new DomDocument(1.0);// create root node$root $doc->createElement(root);$root $doc->appendChild($root);$signed_values array(a > eee, b > sd, c > df);// process one row at a timeforeach ($signed_values as $key &…

Opencv实战【3】——图像修复与图像锐化(darling in the franxx)

目录前言图像修复图像锐化darling in the franxx图片总结前言 前天&#xff0c;在群里看见有人发了这张表情包&#xff1a; 感觉女主有点好看&#xff0c;然后问室友是啥番剧&#xff08;darling in the franxx&#xff09;&#xff0c;然后就去补番了&#xff0c;然后从晚上…

python 示例_Python date isoweekday()方法与示例

python 示例Python date.isoweekday()方法 (Python date.isoweekday() Method) date.isoweekday() method is used to manipulate objects of date class of module datetime. date.isoweekday()方法用于处理模块日期时间的日期类的对象。 It uses a date class object and r…

07-机器学习(Hog+SVM实现小狮子识别)

一、SVM支持向量机 什么是SVM支持向量机&#xff1f; SVM支持向量机本质仍是一个分类器&#xff0c;其核心为寻求一个最优超平面最终实现分类&#xff0c;实现分类问题 在寻求超平面的时候有多种方式&#xff0c;可以使用若干条直线或曲线进行分类&#xff0c;这里使用的是直线…

Net Remoting基础篇

一、Remoting基础 什么是Remoting&#xff0c;简而言之&#xff0c;我们可以将其看作是一种分布式处理方式。从微软的产品角度来看&#xff0c;可以说Remoting就是DCOM的一种升 级&#xff0c;它改善了很多功能&#xff0c;并极好的融合到.Net平台下。Microsoft .NET Remoting …

Maven3.0.5代理nexus

Nexus简介 Nexus是Sonatype推出的强大Maven仓库管理器产品&#xff0c;要比以前TSS上介绍的Artifactory要好使用的多&#xff0c;也是一个拆箱即用的Java App&#xff0c;内嵌Jetty容器和Java Wrapper做Windows服务&#xff0c;安装简单到解压然后双击install即可。更详细的帮助…

8253译码电路设计以及初始化编程讲解

先验知识回顾&#xff1a;知识点不清晰的时候可以查询相关知识点。 https://blog.csdn.net/qq_42604176/article/details/105810973 需掌握的主要知识点 1、译码电路设计 2、初始化编程 例题1 在以 8086构成的最大方式系统中&#xff0c;有一片8254的端口地址分别为301H、3…

java安卓写文件路径,如何使用gradle作为构建系统,平台Android配置Protobuf(Java)文件的输出路径?...

我正在努力解决以下问题&#xff1a;我有2个基于maven的java项目和1个基于gradle的Android项目 . 布局如下&#xff1a;Workspace/├── MavenProj1/├── MavenProj2/├── AndroidGradleProject1/├── Protos/所有这些的包结构很常见&#xff0c;比方说 com.example.* 所…

Java System类exit()方法及示例

系统类exit()方法 (System class exit() method) exit() method is available in java.lang package. exit()方法在java.lang包中可用。 exit() method is used to exit the currently running JVM (Java Virtual Machine). exit()方法用于退出当前正在运行的JVM(Java虚拟机)。…