8.1 可编程定时器/计数器芯片8253/8254

定时信号的产生

1.软件定时

方法:根据所需时间常数设计一个延迟子程序。

优点:节省硬件

缺点:执行延时程序期间CPU一直被占用,降低了CPU效率,不易提供多作业环境。

适用:延时时间较短、重复次数有限的情况。

2.硬件定时

方法:利用专门的定时/计数器作为主要硬件,在简单软件控制下,产生准确时间延迟。

优点:定时/计数器与CPU并行工作,不占CPU时间,利用定时/计数器产生中断信号,可以建立多作业环境,大大提高了CPU利用率。

适用:广泛应用。

8253/8254是Intel公司生产的一种通用的计数/定时器CTC,也称为可编程序间隔定时器PIT,它是采用NMOS工艺由单一+5V电源供电的双列直插式封装24引脚芯片。8253/8254芯片两者的外形引脚及功能都是兼容的,仅是工作的最高频率有所不同,以满足不同的接口要求。例如:

8253(2MHz)、8253-5(5MHz ),

8254(8MHz)、8254-5(5MHz )、

8254-2(10MHz)。

8.1.1  8253的结构及功能

1.8253的引脚

图8.1 8253引脚及功能结构

2.8253内部结构

(1)数据总线缓冲器

是8253用于和CPU数据总线连接的8位、双向、三态缓冲器,CPU读写8253的所有数据都经过该缓冲器。

◎CPU用输出指令向8253写入方式控制字至控制寄存器、写入计数值至某个计数器,都是经数据总线缓冲器和8253内部总线传送的。

◎CPU用输入指令读某个计数器值时,该计数器的现行计数值经8253内部总线和数据总线缓冲器传送到系统数据总线上,读入CPU。

(2) 读/写逻辑

是8253内部操作的控制部件

◎ 接收系统总线输入信号,转换成8253内部操作的各种控制信号

◎ 选择读写操作的对象(某计数器或控制寄存器-由A0、A1决定)

◎ 决定内部总线上数据的传送方向(输入还是输出—由WR、RD决定)

8253端口地址及内部操作

(3)控制寄存器

◎8253初始化时接收CPU写入的控制字

◎控制字指定计数器的工作方式,选择以二进制或二—十进制计数等

◎该寄存器为只写寄存器

(4) 计数器0、计数器1、计数器2

◎ 三个计数器结构完全相同、操作完全独立

◎ 每个计数器内部包含:一个16位计数初值寄存器(CR)、计数执行部件(CE)、一个16位输出锁存器(OL)和一个控制寄存器

◎ 每个计数器外部有两个输入端(CLK、GATE)和一个输出端(OUT)

3.  计数器的内部结构

4. 8253的工作过程

(1)由CPU向控制寄存器写入控制字,以确定工作方式;

(2)由CPU向计数器寄存器写入计数初值或定时常数;

(3)计数单元从计数器寄存器中获得初值,在CLK端输入的计数脉冲控制下进行减1计数(CLK决定计数速率);

(4) 减到0时,该状态由OUT输出或由状态寄存器的某一位表示,以作为中断请求信号或供查询方式使用,也可将OUT连到一个I/O设备上,去启动一个I/O操作;

(5)任何时候都可以将计数单元的当前值送到输出锁存器被CPU读取而不干扰计数器继续计数;

(6)门脉冲GATE是由设备送来的,作为对时钟脉冲的控制信号,门脉冲对时钟的控制方法有多种,以形成多种工作方式。

8.1.2  8253的编程

8253在工作之前,用户首先要为某一计数器(计数器0~2)写入控制字以确定其工作方式;写入定时/计数初值;在定时/计数工作过程中,有时还需要读取某计数器当前的计数值。

1.8253的控制字格式

8253的控制字格式如下图所示。

2. 8253的读/写操作

对8253的读/写操作不仅要用到RD和WR控制信号,还要根据计数/定时工作的要求利用门控信号GATE和锁存功能来控制8253的读/写操作。

⑴ 读操作。所谓读操作是指读出计数器的计数值至CPU中。有两种读数方法:

① 直接读出(停读)。直接用输入指令读取所选择的端口计数器值。

② 锁存读出(飞读)。锁存计数值以供读取,是专为在计数过程中读数据而设计的。

⑵ 写操作

所谓写操作是指CPU对8253写入控制字或计数初值。

3.初始化编程

8253投入工作之前,CPU要对它进行初始化编程。初始化编程的步骤为:

① 写入计数器的控制字,规定其工作方式及相应功能;

② 写入计数初值。

例如,0#计数器,工作在方式3,计数初值为2354,十进制计数方式;l#计数器,工作在方式2,计数初值为18H,二进制计数方式。并设8253端口地址为40~43H。

则根据上述各计数器的功能,其初始化编程如下:

0#计数器的控制字为:37H

1#计数器的控制字为:54H

对0#计数器初始化编程

MOV  AL,37H    ;对0#计数器送控制字。

OUT  43H,AL

MOV AL,54H   ;送初值的低8位。

OUT  40H,AL

MOV AL,23H   ;送初值的高8位。

OUT  40H,AL

对1#计数器初始化编程。

MOVAL,01010100B  ;对1#计数器送控制字。

OUT  43H,AL

MOV AL,18H          ;计数初值送低8位。

OUT  41H,AL

当采用“飞读”的方法读取1#计数器的计数值时,可采用如下程序片段:

MOV  AL,01000100B   ;对1#计数器送锁存控制字。

OUT  43H,AL

IN   AL,41H                  ;读低8位。

MOV  CL,AL                 ;读取的计数值存于CL中。

当计数值为16位时,则“飞读”时还应读取高8位锁存器中的计数值。即:

IN    AL,41H                  ;读低8位。

MOV  CL,AL

IN   AL,41H                  ;读高8位。

MOV  CH,AL

8.1.3 8253的工作方式及时序图

8253定时器/计数器的每个计数器都有六种可编程选择的工作方式。对于每一种工作方式,由时钟输入信号CLK确定计数器递减的速率。门控信号GATE用于允许或禁止CLK信号进入计数器,或者根据工作方式用作计数器的启动信号。计数结束时,在输出线OUT上产生一个标志信号,该信号可编程定义为脉冲、恒定电位或周期信号。

区分六种工作方式的主要标志有三点:

一是输出波形不同;

二是启动的触发方式不同;

三是计数过程中门控信号CATE对计数操作的影响不同。

现在分别讨论不同工作方式的特点。

1.方式0—计数结束产生中断方式

2.方式1——可编程单次脉冲

3.方式2——分频工作方式

4.方式3——方波发生器

5.方式4——软件触发选通

6.方式5——硬件触发选通

8.1.4 8254与8253的区别

8254是8253的改进型,它们的引脚定义与排列、硬件组成等基本上是相同的。因此8254的编程方式与8253是兼容的,凡是使用8253的地方均可用8254代替。

① 允许最高计数脉冲(CLK)的频率不同。8253的最高频率为2MHz,而8254允许的最高计数脉冲频率可达10MHz(8254为8MHz,8254−2为10MHz)。

② 8254每个计数器内部都有一个状态寄存器和状态锁存器,而8253没有。

③ 8254有一个读回命令字,用于读出当前减1计数器CE的内容和状态寄存器的内容,而8253没有此读回命令字。

8.1.5 8253应用举例

例8.2  使用8253计数器2产生频率为40kHz的方波,设8253的端口地址为0040H~0043H,已知时钟端CLK2输入信号的频率为2MHz。试设计8253与8088总线的接口电路,并编写产生方波的程序。

8253与8088总线的接口电路如下图所示。

1.工作方式控制字

2.计数初值

计数初值=输入频率/输出频率

=2000000Hz/40000Hz

=50

=0032H

根据上述要求2#计数器应设置成方式3工作状态,按双字节传送的50分频计数值应为0032H。此时,2#计数器的初始化程序如下:

MOV  AL,10010111B   ;对2#计数器送控制字。

OUT  43H,AL

MOV  AL,32H               ;送低8位计数值32H。

OUT  42H,AL

XOR  AL,AL                  ;送高8位计数值00H。

OUT  42H,AL

8.2  可编程并行接口芯片8255A

8.2.1  8255A的引脚与结构

1.8255A的引脚

8255A是可编程的并行输入输出接口芯片,它具有三个8位并行端口(A口、B口和C口),具有40个引脚,双列直插式封装,由+5V供电,其引脚与功能示意图如图8.14所示。

A口、 B口、 C口:8位数据输入锁存器和8位数据输出锁存器/缓冲器。

D0~D7:数据线,三态双向8位缓冲器。

RESET:复位信号,高电平有效。8255A复位后,所有I/O均处于输入状态。

CS:片选端,低电平有效。

A0~A1:地址线,用于选择端口。

RD:读控制线,低电平有效。

WR:写控制线,低电平有效。

2.8255A的内部结构

8255A的内部结构框图如图8.15所示,其内部由以下四部分组成。

1) 端口A、端口B和端口C

端口A、端口B和端口C都是8位端口,可以选择作为输入或输出。还可以将端口C的高4位和低4位分开使用,分别作为输入或输出。当端口A和端口B作为选通输入或输出的数据端口时,端口C的指定位与端口A和端口B配合使用,用做控制信号或状态信号。

2) A组控制和B组控制部件

这两组控制部件有两个功能:一是接收来自芯片内部数据总线上的控制字;二是接收来自读写控制逻辑电路的读/写命令,以此来决定两组端口的工作方式和读/写操作。

3)数据总线缓冲器

它是一个双向三态的8位数据缓冲器,8255A正是通过它与系统数据总线相连。输入数据、输出数据、CPU发给8255A的控制字都是通过该部件传递的。

4) 读/写控制逻辑电路

读/写控制逻辑电路的功能是负责管理8255A的数据传输过程。它接收CS及来自地址总线的信号A1、A0(在8086总线中为A2、A1)和控制总线的信号RESET、WR、RD,将它们组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令送给这两个部件,再由它们完成对数据信息,状态信息和控制信息的传输。

3、8255A寻址方式

8255A内部有3个I/O端口和一个控制字端口,通过地址线A0、A1,读写控制线RD、WR与片选端CS进行寻址并实现相应的操作。表8.1是8255A的寻址与相应操作。

表8.1  8255A各端口读/写操作时的信号关系

8.2.2  8255A的工作方式与控制字

1.8255A的工作方式

8255A在使用前要先写入一个工作方式控制字,以指定A、B、C三个端口各自的工作方式。

8255A共有三种工作方式:

方式0——基本输入输出方式,即无须联络就可以直接进行8255A与外设之间的数据输入或输出操作。A口、B口、C口的高4位和低4位均可设置为方式0。

方式O适用于无条件数据传送,也可以把C口的某一位作为状态位,实现查询方式的数据传送。

方式1——选通输入输出方式,此时8255A的A口和B口与外设之间进行输入或输出操作时,需要C口的部分I/O线提供联络信号。只有A口和B口可工作于方式1。

方式2——选通双向输入输出方式,即同一端口的I/O线既可以输入也可以输出,只有A口可工作于方式2。此种方式下需要C口的部分I/O线提供联络信号。

2.8255A的控制字

1) 工作方式选择控制字

它可以使8255A的三个端口工作于不同的工作方式。

2) C口按位置位/复位控制字

8255A的C口具有位控功能,即端口C的8位中的任一位都可通过CPU向8255A的控制寄存器写入一个按位置位/复位控制字来置1或清0,而C口中其他位的状态不变。

其格式如图8.17所示,注意8255A的C口按位置位/复位控制字的最高位D7(特征位)应为0。

8.2.3  8255A的应用举例

[例]利用8255A作为输出设备打印机的接口。其连接方法如图8.4(a)所示。

为此,8255A端口A的8条并行数据线PA0~PA7作为数据传送通路,A口应工作于方式0,输出,B口不用。C口也工作于方式0,PC2作为Busy信号输入端,所以C口PC3~PC0应设定为输入方式;PC6作为STB选通信号输出端,故PC7~PC4应设定为输出方式。

现根据图8.4中8255A的寻址信号,8255A的端口地址为:

端口A:0380H;端口B:0381H;端口C:0382H;控制寄存器端口:0383H。8255A接口的初始化及控制程序编制如下:

8255A 端口地址

8255A工作方式控制字

8255AC口按位置位/复位控制字

 8255初始化程序BEGIN:MOV  AL,1000000lB ;或81HMOV  DX,0383HOUT  DX,ALMOV  AL,00001101B ;或0DHOUT  DX,AL        ;送C口置1/置0;控制字,置PC6=1下面为控制程序,设欲打印的字符已存于CL中,经8255A的A口输出至打印机。CONP:  MOV  DX,0382H       ;选择C口。从C口检测Busy=0否,;若等于1,则等待,   ;等于0则可送打印字符。LPST:  IN    AL,DXH              ;读入C口值。AND  AL,04H            ;保留PC2(Busy)状态。JNZ  LPST                      ;检测Busy,若为1,等待;为0则向下执行。MOV  AL,CL              ;将(CL)字符送A口。MOV  DX,0380H ;选择A口。OUT  DX,ALMOV  AL,0CH            ;送C口置1/置0控制字,置PC6=0,;即使STB为低电平。(00001100B)MOV DX,0383H     ;选择控制口。OUT  DX,ALMOV  CX,XXH           ;为保证STB宽度≥1us,执行延时程序。EDLAY:DEC  CXJNZ    DELAYMOV  AL,0DH           ;再使STB为高电平。(00001101B)OUT  DX,AL

第8章 可编程接口芯片及应用相关推荐

  1. 第八章 可编程接口芯片及应用【微机原理】

    第八章 可编程接口芯片及应用[微机原理] 前言 第8章可编程接口芯片及应用 8.1 可编程定时器/计数器芯片 8253/8254 8.1.1 8253的结构与功能 8.1.2 8253的编程 8.1. ...

  2. 典型可编程接口芯片及应用

    可编程中断控制器芯片8259 https://blog.csdn.net/longintchar/article/details/79439466?utm_medium=distribute.pc_r ...

  3. 可编程接口芯片之-----8255A

    仿真环境: proteus 编译环境:Masm 8255A有A.B.C三个8位输入/输出端口 A口:PA7~PA0 B口:PB7~PB0 C口:PC7~PC0 接口编程第一步:确定A.B.C三个口的地 ...

  4. 请问如何正确使用计算机的接口芯片,[计算机软件及应用]第05章接口芯片1.ppt

    [计算机软件及应用]第05章接口芯片1 第5章 可编程接口芯片 5.2 可编程定时器/计数器8254 计算机系统中经常要用到定时信号,如定时检测.定时扫描和时钟定时等,定时方法通常有以下三种: (1) ...

  5. 微机接口芯片(2)—— 可编程定时/计数接口芯片 8253/8254

    总结微机原理课学习的若干芯片 教材--<微机原理与接口技术> 文章目录 〇.思维导图 一.定时/计数 概述 二.8253/8254 内部结构及引脚信号 1. 主要功能 2. 内部结构和外部 ...

  6. 计算机语言里的接口,使用VHDL语言开发计算机中的接口芯片

    摘  要:讨论了 VHDL语言在 EDA中的诸多优点,结合定时/计数接口芯片的开发实例,讨论了ISP技术在电子设计自动化中的应用.同时给出了实例的具体例程和时序仿真波形. 关键词:在系统可编程:电子设 ...

  7. 第二章 Spark RDD以及编程接口

    第二章 Spark RDD以及编程接口 目录 Spark程序"Hello World" Spark RDD 创建操作 转换操作 控制操作 行动操作 注:学习<Spark大数据 ...

  8. 计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf

    下载 第3章 编程接口介绍 • DB2 UDB应用程序概述 • 嵌入S Q L编程 • CLI/ODBC应用程序 • JAVA应用程序 • DAO .R D O .A D O应用程序 本章将介绍对DB ...

  9. 【微机原理 实验】可编程外围接口芯片8255(4)(硬件-含汇编代码)

    实验十  可编程外围接口芯片8255(4) 更多微机实验: Github: https://github.com/Amoiensis/Assembly-language CSDN: https://b ...

最新文章

  1. 《C++语义和性能分析》读书笔记
  2. jenkins+gitlab构建自动化集成
  3. java编程笔记18 文件压缩与解压缩
  4. 数据结构之平衡树:红黑树的介绍与Python代码实现——17
  5. 【Elasticsearch】Elasticsearch-Hadoop打通Elasticsearch和Hadoop
  6. android.os.networkonmainthredexception,android.os.NetworkOnMainThreadException 解决办法:
  7. Python数据结构与算法(1.2)——Python基础之变量与内置数据类型
  8. Spark SQL入门基础
  9. 计算机电源触,笔记本电源接触不良会怎样【图文教程】
  10. 人均劳动生产率的单位_生产率的单位是什么?
  11. n维空间的欧氏距离公式_n维欧氏空间中球的体积公式与表面积公式之间的微分关系(论文资料).pdf...
  12. 微信使用技巧 - 收集整理
  13. 一定要讲给孩子们的20个小故事
  14. hrnet转onnx
  15. iOS动手做一个直播app开发(代码篇)
  16. EV2200 使用教程
  17. Prege(图计算框架)l: A System for Large-Scale Graph Processing(译)
  18. vb中自动调整控件的大小
  19. 运维平台权限表结构设计
  20. 华为OD机试 - 硬件产品销售方案(Java JS Python)

热门文章

  1. 行情走势波动在各个时间段会有什么规律或变化?
  2. IIS无法启动计算机'.'上的服务w3svc与NT kernel system占用80端口问题--之详细描述
  3. 老人们已经看到了生活的尽头,而你还要在这个操蛋的世界里活很久
  4. Bug之ValueError: tf.function-decorated function tried to create variables on non-first call.
  5. Android SurfaceView总结及代码示例
  6. linux内核 电池管理,Linux电源管理(9)_wakelocks
  7. 充电桩采用光耦隔离,更安全可靠
  8. 识别led灯和驱动器的关联关系
  9. Linux下几种RTP协议实现的比较和JRTPLIB编程讲解
  10. 常见面试题整理(操作系统)