可编程接口芯片_第1页
可编程接口芯片_第2页
可编程接口芯片_第3页
可编程接口芯片_第4页
可编程接口芯片_第5页
已阅读5页,还剩335页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

可编程接口芯片第1页/共340页

微机的接口一般可分为并行接口和串行接口,从微机的I/O接口可以得知,并行接口的外设通常需要通过并行接口与微机系统相连,在实际应用中如Intel公司的8155、8156、8255A等。而串行接口的外设通常需要通过串行接口与微机系统相连,常用的串行接口芯片如Intel公司的8250、8251、美国国家半导体公司的16550等。

第2页/共340页

在微机系统中,除了I/O接口外,往往还需要一些专业功能的接口芯片,以增强系统的综合处理能力。例如,用于定时、对脉冲信号(或开关信号)进行计数及作为串行通信波特率发生器的定时器/计数器,如Intel8253/8254;用于中断源管理和控制的中断控制器8259;在不需要处理器干预的情况下,用于存储器和接口之间直接进行数据传输管理的DMA控制器8237等。

第3页/共340页

本章将重点介绍可编程接口电路,主要有并行I/O接口8255A、定时器/计数器8253与8254、DMA控制器8237A、串行通信接口8251A。要应用这些电路的功能,必须通过程序设计者具体编程才能实现,通过这些专用电路,计算机能完成各种复杂的控制,如工业、国防、航天航空、各种大型控制系统等。通过对上述可编程接口的讨论,读者能够对微机接口芯片及接口技术有一个较清晰的认识,为将来应用于实际打下良好的基础。第4页/共340页9.1并行I/O接口8255A

在计算机进行数据信息传输过程中,并行传输是指通过多根数据线同时传输多位数据的传输,并行接口是指传输并行数据的接口。如常见的并行打印机接口、开关量接口、并行A/D、D/A转换器接口等。在并行接口中,8位或16位数据是一起传输的,即使在接口电路与外设交换数据时,只需要用到其中的一位,也就是一次传输8位或16位。并行通信相对于串行通信而言,传输速度较快,一般适用于近距离传输的。

第5页/共340页9.1并行I/O接口8255A

从并行接口的结构来分,有可编程和不可编程两种形式。不可编程并行接口的工作方式及功能由硬件的固定连线来确定,不能通过软件编程来设定;而可编程并行接口的工作方式及功能则可以在不改变硬件连接的情况下,通过程序员编程即可实现。第6页/共340页

通常所说的可编程,是用编写程序的方法进行选择的。例如,选择芯片中的哪一位或哪几位数据端口与外设连接;选择端口中的哪一位或哪几位作输入、哪几位作输出;选择端口与CPU之间采用什么方式传输数据等,均可以由程序员在程序中写入相应的方式字或控制字来设定。由此看来,可编程接口具有广泛的适应性以及可靠的灵活性,在微机系统中得到了广泛的应用。8255A就是一种典型的并行I/O接口电路芯片。

第7页/共340页

8255A是一个可编程的I/O并行接口芯片,在诸多的电子产品控制板上均可发现它,主要用来控制外设的I/O。由于8255A可以方便地工作在各种类型的微处理器上,如6501、Z80、8088、8048、8051等,因此有时称之为通用型多功能的可编程I/O接口控制芯片。9.1.18255A的内部结构和引脚第8页/共340页9.1并行I/O接口8255A

1.内部逻辑结构

图9.1所示为8255A内部结构原理图。8255A有3个可编程控制的8位并行I/O接口,共提供24条I/O控制引脚。一般情况下端口A或B作为I/O的数据端口,而端口C则作为控制或状态信息的端口,C口在“方式”字的控制下,可分成两个4位端口,每个端口包含一个4位锁存器,分别与端口A和B配合使用,可用作控制信号的输出,或作为状态信号的输入。

A组控制电路控制端口A和端口C的上半部(PC4~PC5)。

B组控制电路控制端口B和端口C的下半部(PC3~PC0)。

第9页/共340页9.1并行I/O接口8255A

双向三态的8位数据缓冲器实现8255A与CPU之间的数据传输接口。CPU执行输出指令时,可将控制字或数据通过该缓冲器送给8255A的控制口或数据口;CPU执行输入指令时,8255A可将数据端口的状态信息或数据通过它传送给CPU。因此,数据缓冲器是CPU与8255A交换信息的必经之路。第10页/共340页9.1并行I/O接口8255A

8255A的读/写控制电路接收来自CPU的控制命令,并根据命令向片内个功能部件发出操作命令。例如片选信号为低电平时,表示8255A芯片被选中,该片选信号是由CPU的地址线通过译码器译码产生的。读/写信号和控制8255A与CPU之间的数据或信息传输方向。端口选择控制则由A1,A0的组合状态提供,由这两个控制信号可提供4个端口地址,即A、B、C3个端口地址及一个控制口地址。第11页/共340页2.8255A外部引脚

8255A为40引脚,双列直插式封装结构,其引脚如图9.2所示,各引脚功能如下。8255A可用控制信号复位,当该控制信号有效时,清除8255A中的所有控制寄存器内容,并将各端口置成输入方式。第12页/共340页9.1并行I/O接口8255A图9.18255A结构原理图

第13页/共340页9.1并行I/O接口8255A(1):8位双向数据总线。(2):端口A的I/O引线。(3):端口B的I/O引线。(4):端口C的低4位I/O引线。(5):端口C的高4位I/O引线。(6):A0、A1地址引线。图9.28255A的引脚图

第14页/共340页9.1并行I/O接口8255A

(7)RESET:复位输入信号。高电平有效,复位时清除内部控制寄存器,同时将3个I/O端口全部设为输入。

(8):片选信号。=0时将内部数据总线与系统总线连接在一起,该芯片被选中,允许工作。

(9):读输入控制信号。=0时,配合信号读取8255A内部寄存器的值。

(10):写输出控制信号。=0时,配合信号将CPU处理器数据写入8255A内。

(11):电源,+5V电源输入。

(12)GND:电源地。第15页/共340页9.1并行I/O接口8255A

8255A的3个数据端口与外设相连接的引脚共有24位。其中C口的8个I/O引脚(PC0~PC7)有若干位用于“联络”信号或状态信号,其具体定义与端口的工作方式有关,可将工作方式控制字写入控制端口进行定义。

8255A与CPU连接的引脚有数据总线D0~D7,读/写控制线和,复位线RESET,片选信号线,端口地址控制线A1,A0。

第16页/共340页

一般情况下,CPU的数据总线及其读/写控制线直接和8255A的D0~D7及和相连接。RESET线为高电平有效,因8086CPU也是高电平复位,所以可以直接和8086CPU的复位线相连。当然,有时为了便于调试,8255A复位电路与8086CPU的复位电路是分开的。第17页/共340页9.1并行I/O接口8255A3.端口地址

8255A中有3个I/O端口,另外,其内部还有一个控制字寄存器,用地址总线A1,A0寻址4个端口,A1,A0和、及组合可实现的各种功能如表9-1所示。为“1”或、同时为1,所有数据口为高阻状态。第18页/共340页9.1并行I/O接口8255A表9-18255A控制器地址A1A0所选端口地

址功

能0001AX0H读端口A0101BX1H读端口B1001CX2H读端口C1101非法0010AX0H写端口A0110BX1H写端口B1010CX2H写端口C1110控制寄存器X3H写控制字第19页/共340页9.1并行I/O接口8255A9.1.28255A的工作方式

8255A有3种工作方式:

(1)方式0,又称基本I/O方式。在这种工作方式下,A、B、C三个端口都可用作I/O,但不能既作输入又作输出。端口C分为两部分,即高4位和低4位,用来设置传输方向。

(2)方式1,又称选通I/O方式。只有端口A、端口B可工作于此方式,端口C用于提供联络信号。

第20页/共340页(3)方式2,又称双向传输方式。只有端口A可编程为双向传输方式。通过C口的高5位进行控制,此时A口既可作输入也可作输出,而PC0~PC2及B口可工作于方式0。具体可由适当的工作命令字来进行设定。第21页/共340页9.1并行I/O接口8255A此外,8255A对端口C具有置位/复位功能,只要使用一个输出控制指令便可完成位控的目的,可以设置对象的状态。控制字组的D7为0时端口C具有位处理功能,具体设置如图9.4所示。图9.3为8255A控制字示意图。第22页/共340页9.1并行I/O接口8255A图9.38255A控制字示意图

第23页/共340页9.1并行I/O接口8255A图9.4C口置1/置0控制字格式

第24页/共340页9.1并行I/O接口8255A9.1.38255A的编程控制字

1.方式0

方式0主要工作在无条件的I/O方式下,在这种工作方式下,不需要“联络”信号。A口、B口、C口均可工作在此方式下。C口的输出位可由用户直接独立设置“0”或“1”。此时,各个端口的功能是固定不变的,不能用程序来设定,控制字格式参见图9.3及图9.4。例如,当8255A的各个端口都处于方式0,若将端口A作为输入端口B作为输出,端口C的高4位作为输入,端口C的低4位作为输出,则其方式控制字为l0011000(98H)。第25页/共340页9.1并行I/O接口8255A2.方式1

方式1主要工作在异步或条件传输方式(需要先检查状态,然后才能传输数据)下。在这种工作方式下,仅有A口、B口可工作在此方式。由于条件传输需要联络线,所以在方式1下C口的某些位分别为A口和B口提供3根联络线。此时8255A输入组态如图9.5。

第26页/共340页方式1输入时,8255A各控制信号的意义如下。:选通输入,低电平有效,这是由外设提供的输入信号,当其有效时,由输入设备来的数据将送入端口的输入锁存器。

IBF(InputBufferFull):输入缓冲器满信号,高电平有效。这是由8255A输出的状态信号。当其有效时,表明数据己输入至锁存器。第27页/共340页9.1并行I/O接口8255A图9.58255A方式1下输入组态第28页/共340页9.1并行I/O接口8255A

(InterruptRequest):中断请求信号,高电平有效。当某输入设备请求服务时,8255A就由输出端输出高电平,向CPU提供中断请求信号,用来请求CPU为其服务。当、和都为高电平时,输出才为高电平。

(InterruptEnableA):端口A中断允许信号。由PC4的置位/复位来控制,PC4=1时,允许端口A中断。

(InterruptEnableB):端口B中断允许信号。由PC2的置位/复位来控制,PC2=1时,允许端口B中断。在方式1输入时,端口C的PC6和PC7两位是空闲的,如果要利用它们,可用方式控制字中的D3来设定。第29页/共340页9.1并行I/O接口8255A

方式1输出时,8255A输出组态如图9.6所示,其各控制信号的意义如下:

(OutputBufferFull):输出缓冲器满信号,低电平有效。这是由8255A输出给外设的一个控制信号。当其有效时,表明CPU已经将数据输出到指定的端口,外设可以把数据取走。:响应信号,低电平有效。这是来自外设的响应信号,告诉CPU输出给8255A的数据已经被外设接受。第30页/共340页9.1并行I/O接口8255A

(InterruptRequest):中断请求信号,高电平有效。当某输出设备已经接受了CPU输出的数据后,8255A就用输出端向CPU发出中断请求信号,要求CPU继续输出数据。当、和都为高电平时,才被置为高电平。由的置位/复位来控制。由PC2的置位/复位来控制。在输出方式中,端口C的和是空闲的,如果要利用它们,可用方式控制字中的来设定。第31页/共340页9.1并行I/O接口8255A3.方式2

双向传输方式是指在同一端口内分别进行I/O操作。8255A中只有A口可工作在此种方式下,当A口工作在方式2时,需要5个控制信号进行“联络”,这5个信号由C口提供。所以此时B口只能工作在方式0或方式1下。当B口工作在方式1时,又需要3根联络线。故当A口工作在方式2、B口工作在方式1时,8255A的C口8根线将全部作为联络线使用。8255A方式2的逻辑功能结构,如图9.7所示。第32页/共340页9.1并行I/O接口8255A图9.78255A方式2的逻辑功能结构

第33页/共340页9.1并行I/O接口8255A

选通双向操作时,8255A各控制信号的意义如下。:中断请求信号,高电平有效。在输入和输出时,都可以用来作为对CPU的中断请求信号。

:输出缓冲器满信号,低电平有效。它可以作为对外设的选通信号。当其有效时,表明CPU已经将数据输出到端口A,外设可以把数据取走。第34页/共340页9.1并行I/O接口8255A

:响应信号,低电平有效。当有效时,启动端口A的三态输出缓冲器送出数据,否则输出缓冲器处于高阻状态。:与有关的中断触发器,它由PC6置位/复位控制。:选通输入,低电平有效,这是由外没提供给8255A的选通信号,当其有效时将输入数据选通输入锁存器。

第35页/共340页

:输入缓冲器满,高电平有效.这是一种状态信息,当其有效时,表示数据己进入输入锁行器。:与有关的中断触发器,它由置位/复位控制。第36页/共340页9.1并行I/O接口8255A

方式2的I/O操作相当于方式1的输入和输出的组合。其输出过程为:CPU响应中断信号后,用输出指令向8255A的A口写一个新的数据,并利用写脉冲同时清除中断请求信号同时使A口输出缓冲器满信号变为有效低电平通知外设取走数据。外设取走数据后返回响应信号以清除有效信号,并置位以向CPU再次申请中断,从向开始下一个数据传输过程。第37页/共340页9.1并行I/O接口8255A

方式2的输入过程与输出过程类似,当外设向8255A的A口传送来数据时,选通信号同时有效,使数据锁存在8255A的A口的输入缓冲器中,并置输入缓冲器满信号为有效高电平,以通知外没暂停传送数据和撤消有效信号。一旦信号消逝后即向CPU申请中断。CPU响应中断进行读操作时,将8255A的A口输入数据读入到CPU中,并利用信号使输入缓冲器满信号IBF变为无效低电平,同时复位中断请求信号,完成一次输入过程,然后等待新的中断请求。第38页/共340页9.1并行I/O接口8255A9.1.48255A的应用实例

【例9.1】8255A的A口和B口工作方式0下,PB口为输入端,连接有4个开关,PA口为输出端,接有七段发光二极管,硬件电路如图9.8所示。试编写一个程序,要求七段发光二极管显示开关所拨通的数字。第39页/共340页9.1并行I/O接口8255A图9.8方式0举例第40页/共340页9.1并行I/O接口8255A

分析:在本例中,8255A的端口地址由两部分电路构成。CPU的高位地址线通过74LS138译码器产生片选信号,CPU的低位地址线和分别组合成4个端口地址,CPU的与译码器的输出端通过逻辑组合,证8255A的4个端口地址为偶地址。这样连接后,8位的8255A与16位的8086CPU可以通过数据总线传送8位数据信息。具体端口地址分配为

PA口地址8030HPB口地址8032HPC口地址8034H

控制口地址8036H第41页/共340页9.1并行I/O接口8255A

由图9.8可知,七段发光二极管为共阳极LED器件。若要点亮a段,要求从PA0输出高电平“1”;若要熄灭b段,要求从PA1输出低电平“0”;其余各段方法相同。8255A的PB口接有4位开关,其组合分别为0~FH。根据上述分析,可将LED上显示0~FH各字符的段码列于表9-2。显示字符0123456789abcdef段码(H)3F065B4F666D7D077F6F777C395E7971表9-2段码表第42页/共340页9.1并行I/O接口8255A

参考程序如下

A-PORT EQU 8030H;定义端口地址

B-PORT EQU 8032HC-PORT EQU 8034HCTRL-PORT EQU 8026H

DATA SEGMENT;定义段码表

TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H, 7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDS第43页/共340页9.1并行I/O接口8255ACODE SEGMENT ;定义代码段

ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV AL,82H ;设置8255A方式字

(方式0,PA口输出,PB口输入) MOV DX,CTRL-PORT OUT DX,AL ;方式字送控制口第44页/共340页9.1并行I/O接口8255ADISP: MOV DX,B-PORTINAL,DX;取开关状态信息

ANDAL,0FH ;屏蔽高4位

MOV BX,OFFSETTABLE ;取段码首地址

XLAT ;查表得到段码

MOV DX,A-PORT ;输出显示

OUT DX,AL MOV CX,0700HDISP1:LOOP DISP2 ;循环延时

JMPDISPCODE ENDSEND START第45页/共340页9.1并行I/O接口8255A

DISP1:LOOP DISP2 ;循环延时

JMP DISPCODE ENDSEND START第46页/共340页9.1并行I/O接口8255A

【例9.2】图9.9为一个并行打印机接口,要求采用查询方式通过8255A接口把数据缓冲区中的ASCII码字符打印出来。图9.98255A并行打印接口电路原理图第47页/共340页9.1并行I/O接口8255A

分析:按照打印机接口标准定义,其最基本的信号线包括8根数据线、1根控制线,1根状态线/BUSY和1根公共地线,采用8255A作为打印接口的电路原理图如图9.9所示。图中选用8255A的PC口作为数据口,输出8位打印数据,工作方式设置为方式0。作为控制信号,产生并输出1个负脉冲作为数据选通信号,由此可以将数据线上的数据传输到打印机的数据缓冲器中;作为状态信号,可以用来接收打印机的“忙”信号。第48页/共340页

值得强调的是,在本例中根据被控对象(打印机接口)的要求,在设计中使用了两根联络线,即和/BUSY,并选定8255A的和两个引脚分别与上述两个联络信号相连。但是并不是非选和不可,也可以选择口的其他引脚作联络信号使用。第49页/共340页9.1并行I/O接口8255A

按照题意,使用查询方式时,打印机与之间传送数据的过程如下:

(1)首先查询/BUSY信号,如果/BUSY=1,则表示打印机处于“忙”状态;如果/BUSY=0,则表示打印机不“忙”,可以传送数据。

(2)通过8255A接口,把待打印的数据传输到打印机端。

(3)通过程序设置=0(送低电平),使上述数据锁存在打印机的缓冲器中。

第50页/共340页

(4)打印机接收到数据后,回送“忙”信号(/BUSY=1),表示打印机正在处理刚送入的数据,正处于工作状态。

(5)打印机处理完数据后,设置/BUSY=0,表示打印机不“忙”,同时完成一个字符的打印操作。第51页/共340页9.1并行I/O接口8255A

参考程序如下

A-PORT EQU 8030H ;定义端口地址B-PORT EQU 8032HC-PORT EQU 8034HCTRL-PORTEQU 8026HMOV DX,CTRL-PORT ;8255A控制端口

MOV AL,10000001B;方式控制字

OUTDX,AL ;方式0输出;输出,输入第52页/共340页9.1并行I/O接口8255A

MOVAL,00001101B ;置高(=1)OUTDX,ALMOVSI,OFFSETBUF;数据缓冲区首地址

MOVCX,NUMBER ;待打印的字符个数LOOP:MOV DX,C-PORT ;端口地址

IN AL,DX ;=0?(/=0?) AND AL,02H JNZ LOOP第53页/共340页9.1并行I/O接口8255A

MOV DX,A-PORT ;口地址

MOV AL,[SI] ;取数据

OUT DX,AL ;数据送口

MOV DX,CTRL-PORT ;8255A控制端口

MOV AL,00001100B ;置低(=0) OUT DX,AL

NOPNOP ;延时产生负脉冲

NOPMOV AL,0001101B;置高(=1)

第54页/共340页9.1并行I/O接口8255A

OUT DX,LINC SI;地址加1DEC CX;字符个数减1JNZ LOOP;未传送完,继续第55页/共340页9.1并行I/O接口8255A

【例9.3】利用8255A设计一个键盘/数码管显示接口电路,要求键盘为的矩阵(共16个按键),显示部分为8个八段数码管。试根据按键所处的位置对键盘进行编码,当有按键按下时,将数码管原来显示的内容依次左移,并将相应的按键编码显示在最右边的数码管上。

分析:在键盘设计电路中,其按键的连接有线性连接和矩阵连接两种方式,线性连接中,每个按键需要占用一根I/O端口,根据端口的状态(“0”或“1”)可以判断按键是否按下,如按此种方式连接,16个按键就需要16个I/O端口。而矩阵连接方式中,I/O引脚数就是矩阵的行数和列数之和,由此可见矩阵键盘只需要占用8个I/O引脚。第56页/共340页9.1并行I/O接口8255A

在数码管设计电路中,其连接方式有静态连接和动态连接两种,在静态连接方式中8个数码管需要占用64个I/O引脚。而动态连接方式中,因采用矩阵扫描电路,8个数码管共占用I/O引脚数为16个。考虑到8255A共有3个8位I/O引脚,因此本例键盘连接采用矩阵扫描方式,数码管采用动态连接方式。电路连接如图9.10所示,A口作为数码管的位码控制,B口作为数码管的段码控制,C口作为键盘接口。第57页/共340页9.1并行I/O接口8255A

解:矩阵键盘采用常见的扫描法,其识别闭合键的原理是:首先使得第0行为低电平,其余行为高电平,然后查询列线的电平状态,如果有某一列线变为低电平,则表示第0行和此列线相交位置上的按键被按下;如果此时所有的列线都为高电平,则就说明第0行上没有按键按下。接着,再将第1行输出为低电平而其他行输出为高电平,并检查列线中是否有电平产生。

按照此法逐行向下扫描,直到最后一行。在扫描过程中,当发现某一行有按键闭合时,也就是说列线中有一位为“0”时,程序才退出扫描,并将按键的输入值进行处理,从而确定闭合键所在的位置。第58页/共340页9.1并行I/O接口8255A

在图9.10电路结构中,PA口、PB口和PC口的上半部分需要设置为输出,而PC口的下半部分需要设置为输入,所以端口的工作方式可设置为方式0,因此8255A的初始化程序设计如下:第59页/共340页9.1并行I/O接口8255A图9.10键盘/数码管显示接口电路第60页/共340页9.1并行I/O接口8255AA-PORTEQU 8030H ;定义端口地址B-PORTEQU8032HC-PORTEQU 8034HCTRL-PORTEQU 8036H MOV DX,CTRL-PORT ;8255A控制端口

MOV AL,10000001B ;PA口、PB口和PC

MOV DX,AL ;为输出,PC口的下半的上半部分部分第61页/共340页9.1并行I/O接口8255A

对于键盘扫描,实际应用中,一般先快速确定是否有键按下,然后再具体分析判断是哪个键。键盘扫描参考程序如下:KEY—IN:MOVAL,00H ;行线输出为“0”() MOVDX,C-PORT;8255APC口地址

OUTDX,AL INAL,DX ;读列线的电平状态() ANDAL,0FH CMPAL,0FH ;判断是否有列线处于低电平

JZKEY—IN;没有键闭合继续判断LOOP:CALLDELAY;有键闭合,延时20消除按键抖动第62页/共340页9.1并行I/O接口8255A

键盘扫描开始时,设置键号寄存器清零,计数器DL为键盘行的数目。CL中的扫描初始值设为11111110B,此时,=0使得第0行为低电平,而其他行为高电平。输出初始值后,读取列线的值,若无低电平产生,则表示无键按下。扫描值循环左移一位变为11111101B,使得第一行为低电平,同时键号为4,从第一行第一个键开始。依次循环下去,直到计数器为0。

在扫描过程中,如果查询到某一列处于低电平,则将列数保留并向右移一位,通过进位依次检查第0列、第一列等的状态,即可查询交叉点的键值。第63页/共340页9.1并行I/O接口8255A确定键值的参考程序如下:

MOV BL,0 ;键号初始值为0 MOV CL,0EFH;扫描初始值为11101111B MOVDL,4 ;计数值,扫描行数KEY:MOV AL,CL ;开始扫描一行

MOV DX,C-PORT ;8255A口地址

OUT DX,AL ;输出扫描码

ROL AL,1 ;修改扫描行第64页/共340页9.1并行I/O接口8255A

MOV CL,AL IN AL,DX ;读列线

AND AL,0FH CMP AL,0FH ;判断列线状态

JNZ KEYCL ;若有列线为“0”,则转第65页/共340页9.1并行I/O接口8255A

ADDBL,4 ;若没有,;则(键号值+列数)键号寄存器

DECDL JNZKEY ;行未扫描完,则继续扫描

JMP KEYCL1 ;扫描全部结束,转键处理KEYCL:OR AL,0F0H ;高位置“1” RCRAL,1 JNCKEYCL1 ;此列为“0”,确定键值,转键处理

INC BL ;无列线为“0”,键号+1 JMPKEYCL ;继续查找下一列KEYCL1:第66页/共340页9.1并行I/O接口8255A

在本例中8255A的端口PA用来控制LED的显示位,即位控端口。端口PB用来输出显示字符,即为段控端口。软件通过扫描法逐个接通八段数码管,将PB口的数据送到相应的显示位显示。虽然8255A的PB口送出的代码所有的数码管都收到了,但由于端口PA只有一位输出高电平,所以只有一个数码管的相应段导通,其他数码管都不发亮。这样以来,端口PB依次输出代码,端口PA依次选通其中一位数码管,就可以在各位数码管上显示不同的数字和符号。利用视觉暂留想象,当采用一定的频率不断地扫描输出时,就可以得到稳定的数码显示。第67页/共340页9.1并行I/O接口8255A显示参考程序如下:

MOV

DI,OFFSETBUFER;显示缓冲区首地址

MOV

CL,80H ;左边第一位数码管亮DISP: MOV

AL,[DI] ;读取待显示的数据

MOV

BX,OFFSETTABLE ;段码表首地址

XLAT

;段码转换

MOV

DX,B-PORT ;8255A端口(段控) OUT

DX,AL

;送段码

MOV

AL,CL

;移位扫描码

MOV

DX,A-PORT ;8255A端口(位控) OUT

DX,AL

;传送位码第68页/共340页9.1并行I/O接口8255ACALL DELAY ;延时

CMP CL,01 ;扫描到最右边吗?

JZ QQLOOP ;若是,则结束

INC DI ;修改缓冲区地址指针

SHR CL,1 ;修改位码

JMP DISP ;循环 QQLOOP:RETTABLE

DB0C0H,0F9H,0A4H,0B0H,99H,,0FFH

;扫描码BUFFER

DB,,,,

;待显示的数据第69页/共340页9.2定时器/计数器8253/8254

8255A并行接口主要用于并行数据的传输,例如打印机的并行接口、A/D转换器、D/A转换器等外设,传输的信息通常是二进制代码或开关量。在实际应用中,当然还存在其他类型的传输信息及其相应的处理方式。如在工业控制现场,常常要求有实时时钟用于实现定时或延时控制,比如定时中断、定时检测、定时扫描等定时处理事件。如有时要求对脉冲信号或电平信号进行处理,即利用计数器对外部事件进行计数、统计事件发生频率等。

第70页/共340页

1.软件定时

在用计算机应用技术中,实现定时或延时有两种基本办法:利用软件定时或使用可编程硬件芯片。前者常用于延时精度要求不高的场合,后者则用于延时精度要求较高的场合。第71页/共340页9.2定时器/计数器8253/8254

软件定时的原理比较简单,即让机器执行一段程序,这段程序本身没有具体的执行目的,只是由于计算机执行每条指令CPU都要花费时间,因而执行一个程序段就有一个固定的时间。调整程序执行次数多少就可以用来实现定时的长短,这种方法容易实现,定时时间调整也方便,但不能做到很精确的定时。时间调整以一条指令执行时间为基准,而且占用CPU资源,降低了CPU的利用率。利用软件延时的例子如:LED、LCD扫描显示延时;按键“去抖”延时;A/D转换等待转换结束时的延时;某些芯片初始化时的延时等。

第72页/共340页

2.外部事件计数

外部事件计数就是对外部脉冲信号计数。根据脉冲信号的是否变化来判断外部事件是否发生,由此进行计数。在用计算机应用技术中,实现外部事件计数同样也有两种基本办法:一是利用软件进行计数;二是使用可编程计数器。第73页/共340页9.2定时器/计数器8253/8254

利用软件进行计数的方法就是外部脉冲通过某一并口I/O线送入计算机,软件不断地检测这根线的状态。当检测到其逻辑电平发生变化时,就认为有一次外部事件发生。这种方法的特点是要求CPU始终查询输入线的状态,否则就有可能“少计”几次外部事件。由此可见,这种方案占用了CPU的大量资源。使用可编程计数器芯片,其脉冲记录方式和计数“溢出”方式都可以通过编程设定。外部脉冲输入到计数器进行计数时,CPU可以在任何时刻通过并行口访问这个计数器,读取已经记录的数据。其特点是编程灵活,完全可以代替软件计数,减轻了CPU的负担。

第74页/共340页

综上所述,采用软件计数形式虽然简单,但占用了CPU的大量资源,用并行口通过CPU进行检测计数的方法也许是可行的,但不是最好的办法。理想的方案还是采用可编程的定时器/计数器。常用的定时器/计数器芯片有Intel

8253、Intel

8254、Zilog公司的CTC等。第75页/共340页9.2定时器/计数器8253/8254

9.2.18253的内部结构和引脚

Intel8253就是一种常用的可编程定时器/计数器芯片,工作频率最高为2.6MHz,改良的兼容计数芯片8254则可工作至10MHz。其本身具有3组完全独立操作的16位计数器,每一组计数器可以使用软件加以设定内部6种特定的工作方式。一旦8253设定某种工作方式并设定计数器值后,便能够独立工作。计数完后自动产生输出信号,完全不必要CPU作附加控制。第76页/共340页9.2定时器/计数器8253/8254

8253具有3个功能相同的16位减法计数器0号、1号和2号,可进行二进制或二—十进制(BCD)计数或定时操作。采用二进制时,最大计数值为0FFFFH;采用BCD码计数时,最大计数值为9999。工作方式和计数常数可由软件编程来选择,可以方便地与PC总线连接,其内部结构和外部引脚如图9.11所示。每个计数器有3个引脚:CLK为时钟输入线,在计数方式时是计数脉冲输入端;OUT为计数器输出端,当计数器减为零时,根据所置的工作方式输出相应信号;GATE为门控信号,用于启动或禁止计数器操作;控制字寄存器用来寄存工作方式控制字,只能写不能读。和信号与计数器8253的逻辑关系如图9.12所示。第77页/共340页9.1并行I/O接口8255A1.面向CPU的引脚信号

可编程定时器/计数器接口芯片8253与PC总线的接口线共有13根,其计数通道及操作地址分配见表9-3。第78页/共340页9.2定时器/计数器8253/8254

图9.118253的内部结构和引脚第79页/共340页9.2定时器/计数器8253/8254

图9.12CLKGATEOUT信号与计数器8253的逻辑关系

表9-3计数通道及操作地址分配表第80页/共340页9.2定时器/计数器8253/8254

A1A0操

作00100读计数器000101读计数器100110读计数器200111无操作(禁止读)01000计数常数写入计数器001001计数常数写入计数器101010计数常数写入计数器201011写入方式控制字1XXXX禁止(数据口高阻状态)011XX不操作表9-3计数通道及操作地址分配表第81页/共340页9.2定时器/计数器8253/8254

(1):8位双向三态数据总线,是PC总线与8253之间的数据传输线。

(2):读控制信号。=0时,配合信号读取8253内部计数器的值。

(3):写控制信号。=0时,配合信号将计数常数写入8253计数器内。

(4):片选信号。通常接地址译码器输出。=0时将8253内部数据总线与系统总线连接在一起,该芯片被选中,允许工作。

(5):地址选择线,4种组合分别选择3个计数器和控制字寄存器。第82页/共340页9.2定时器/计数器8253/82542.面向I/O的信号

(1):计数器时钟输入信号。该引脚每接收一个脉冲信号,计数器的计数值就减1。输入的脉冲信号可以是连续、断续、均匀和不均匀的,在用作定时器时,其周期可以是精确的或不精确的。

(2):门控选通输入信号。该信号的作用是用来禁止、允许或开始计数。如果该信号设置为“禁止”状态,即使计数器的输入端有时钟信号输入,计数器也不能计数器。

第83页/共340页(3):输出定时器/计数器“已到”的指示信号。在允许计数的情况下,每输入一个脉冲信号,计数器就减1,等逐步减到0时,该引脚就会输出电平或脉冲信号。引脚的输出可设置为方波、电平信号、单个脉冲或连续脉冲几种工作方式。第84页/共340页9.2定时器/计数器8253/8254

9.2.28253的工作方式

8253的工作方式是由其控制字所决定的。将设定的工作方式控制字写入控制寄存器,就可以使8253按照给定的方式工作。控制字的定义如图9.13所示。

8253控制字寄存器是8位的。最高两位和用于选择哪个计数器。因为3个计数器是完全独立的,所以需要有3个控制字寄存器来存放。但是控制字寄存器地址是唯一的,即=11对应的地址。因此和一方面选择了当前计数器,同时也指明了该控制字将写入所选择的计数器的控制寄存器中。第85页/共340页9.2定时器/计数器8253/8254

图9.138253控制字定义第86页/共340页9.2定时器/计数器8253/8254

操作类型位(RL1RL0),规定8253的数据读/写格式。当RL1RL0=00时,是将计数器的计数值锁存操作,在计数过程中读计数值时,先送出锁存命令锁存计数值,再读取计数值。其他3种组合规定了读/写格式。工作方式位(M2M1M0)用来指定所选择计数器的工作方式。定时器/计数器8253共有6种工作方式,分别介绍如下:

第87页/共340页8253采用方式0时,当计数器逐渐减为0后,使输出端OUT变为高电平,向CPU发出中断请求。在这种方式下,计数初始值为一次性使用有效。当再次向8253写入控制字和新的计数初始值后,可重新开始定时或计数。在计数过程中,可以通过GATE信号,允许或禁止计数。GATE信号为低电平时,计数器停止计数,当GATE变高时,则继续计数。

1.方式0(计数结束中断方式)第88页/共340页9.2定时器/计数器8253/82541)8253方式0的特点

(1)门控信号为“1”时,计数器才能计数;

(2)计数器计数时,输出端OUT始终保持为“0”;

(3)计数器计数到“0”后,OUT由“0”变“1”,同时计数器停止工作。如图9.14为8253方式0的时序图。图中的第一个负脉冲代表向控制器寄存器写入控制字CW=10H,第二个负脉冲代表写入低8位计数初始值4。如果在上述计数过程中,GATE信号为低电平时,则计数器停止计数,如果GATE信号再次为高电平时,则计数器继续计数,如图9.15所示。

第89页/共340页9.2定时器/计数器8253/8254

图9.14方式0的时序图第90页/共340页9.2定时器/计数器8253/8254

图9.15方式0的时序图(信号变化)

第91页/共340页9.2定时器/计数器8253/82542)8253方式0的应用

【例9.4】假设定时器/计数器8253计数器0工作于方式0,8位二进制计数,计数初始值为10。设8253的端口地址为50H~53H。试写出初始化程序。参考程序如下

MOV AL,10H ;计数器0工作于方式0

OUT 53H,AL ;写入控制寄存器

MOV AL,10 ;设置计数器计数初始值

OUT 50H,AL ;写入计数初始值第92页/共340页9.2定时器/计数器8253/82542.方式1(可编程的单脉冲发生器)

方式1不同于方式0的软件触发(写入初始值就启动计数器开始计数),该方式由硬件触发,即由门控信号GATE的正脉冲启动定时或计数过程。

(1)当定时器/计数器8253写入控制字后,OUT为高电平。计数器写入计数初始值后,计数器并不立即开始计数,而是等到门控信号GATE有效(变为高电平)之后的一个时钟周期的下降沿才开始计数,OUT输出为低电平。计数器在计数过程中,OUT输出一直为低电平。第93页/共340页等到计数初始值减到0值时OUT才输出高电平,单脉冲结束。再次门控信号GATE的正脉冲触发后,OUT输出才重新变为低电平,下一个单脉冲开始。方式1的波形变化如图9.16所示。

第94页/共340页9.2定时器/计数器8253/8254

图9.16方式1的时序图第95页/共340页9.2定时器/计数器8253/8254

(2)定时器/计数器8253在计数期间,当GATE又出现上升沿时,若计数器重新装入原计数值,即可重新出发定时器/计数器,在此期间OUT的输出状态一直保持低电平,其变化波形如图9.17所示。第96页/共340页9.2定时器/计数器8253/8254

图9.17方式1的时序图(信号变化)第97页/共340页9.2定时器/计数器8253/8254

(3)定时器/计数器8253在计数过程中,如果重新装入新的计数初始值,并不影响当前的计数状态。其响应过程是等本次计数结束、下一个正脉冲触发信号到来时,才会将新的计数初始值装入计数器中,使得计数器准备从新的计数初始值开始计数,其波形如图9.18所示。第98页/共340页9.2定时器/计数器8253/8254

图9.18在方式1计数过程中改变计数值第99页/共340页9.2定时器/计数器8253/8254

【例9.5】假设定时器/计数器8253计数器1工作于方式1,按BCD码计数,计数值为3000。设8253的端口地址为50H~53H。试写出初始化程序。分析:定时器/计数器8253计数器1工作于方式1并按BCD码计数,那么其控制字为01100011B,初始值为3000H,它虽然是16位的计数初始值,但由于计数值低8位为0,所以设定读/写操作只写高8位。参考程序如下

MOVAL,63H ;计数器1工作于方式1OUT 53H,AL ;写入控制寄存器

MOVAL,30H ;设置计数器计数初始值3000H(高8位)OUT 51H,AL ;写入计数初始值第100页/共340页9.2定时器/计数器8253/8254

3.方式2(分频器)

方式2下,OUT输出是输入时钟被计数值N分频后的连续脉冲,由此可见方式2可用作脉冲速率发生器或用于产生实时时钟中断(应用于“万年历”)。

(1)当定时器/计数器8253写入控制字后,为高电平。计数器写入计数初始值后,GATE若为高电平,则开始减1计数,计数期间,输出保持高电平。计数器减到1时,输出低电平。值得注意的是该低电平仅维持一个脉冲宽度。之后,计数器又自动重新装入原来的计数初始值,重新开始计数。方式2的波形如图9.19所示。第101页/共340页9.2定时器/计数器8253/8254

图9.19方式2的操作时序第102页/共340页9.2定时器/计数器8253/8254

(2)定时器/计数器8253在写入初始值或计数期间,当变成低电平时,则不进行计数,计数器保持当前值不变。当再次变成高电平时,计数器会重新装入原计数值,并重新开始计数。在方式2下,信号的作用如上所述,其变化波形如图9.20所示。第103页/共340页9.2定时器/计数器8253/8254

图9.20方式2的时序图(信号变化)第104页/共340页9.2定时器/计数器8253/8254

(3)定时器/计数器8253在计数过程中,如果重新装入新的计数初始值,并不影响当前的计数状态。其响应过程是等本次计数结束时,才会将新的计数初始值装入计数器中,使得计数器从新的计数初始值开始计数,其波形如图9.21所示。第105页/共340页9.2定时器/计数器8253/8254

图9.21在方式2计数过程中改变计数值第106页/共340页9.2定时器/计数器8253/8254

【例9.6】假设定时器/计数器8253计数器2工作于方式2,按二进制计数,计数值为0508H。设8253的端口地址为50H~53H。试写出初始化程序。分析:定时器/计数器8253计数器2工作于方式2并按二进制计数,那么其控制字为10110100B,初始值为0508H,因为是16位的计数初始值,且高低字节都不为0,所以必须写两次,先写低8位字节,后写高8位字节。参考程序如下

MOV AL,0B4H ;计数器2工作于方式2OUT 53H,AL ;写入控制寄存器

MOV AL,08H ;计数器计数初始值08H(低8位)OUT 52H,AL ;写入计数初始值

MOV AL,05H ;计数器计数初始值05H(高8位)OUT 52H,AL ;写入计数初始值第107页/共340页9.2定时器/计数器8253/82544.方式3(方波发生器)

方式3与方式2类似,采用方式3时,输出是方波,当计数值N为偶数,则输出的方波是对称的,前N/2计数期间OUT输出是高电平,后N/2计数期间输出是低电平;当N为奇数,则前(N+1)/2计数期间输出是高电平;后(N-1)/2计数期间OUT输出是低电平。下面详细介绍:

(1)当定时器/计数器8253写入控制字后,为高电平。计数器写入计数初始值后,则计数器立即开始对脉冲计数,计数期间,输出保持高电平。当计数器计数到一半时,第108页/共340页计数器改变输出状态,输出低电平,直到计数任务全部完成为止,输出恢复为高电平,然后重复上述过程。方式3的波形如图9.22所示。第109页/共340页9.2定时器/计数器8253/8254图9.22方式3下计数值为偶数时的操作时序图9.22方式3下计数值为偶数时的操作时序第110页/共340页9.2定时器/计数器8253/8254

(2)方式3在对奇偶初始值的处理上有所不同,计数初始值为偶数时,写入控制字后输出立即变为高电平。写入初始值后的第一个下降沿到来时,初始值装入计数器。此后每一个下降沿到来时,计数值都减2,一直到减到0时,输出变为低电平,同时重新装入初始值。之后,计数器又从初始值开始,每来一次下降沿计数都减2,直到减到0时,输出变为高电平,如此循环反复。由此可见,当初始值N为偶数时,输出占空比为1∶1的方波,高、低电平的宽度都是N/2个脉冲宽度。其变化波形如图9.22所示。第111页/共340页9.2定时器/计数器8253/8254(3)定时器/计数器8253在方式3下,当计数初始值为奇数时,计数值写入后的第一个脉冲使得计数值减1,其后每个下降沿到来时,计数均减2,直到0。以后的过程与初始值为偶数时相同。即当N为奇数,方式3的输出波形在一个周期内有(N+1)/2个脉冲宽度的高电平;(N-1)/2个脉冲宽度的低电平。其波形如图9.23所示。

第112页/共340页(4)定时器/计数器8253在计数过程中,如果信号变为低电平时,计数器则停止计数。若在输出为低电平期间=0,则输出立即变为低电平。当信号恢复高电平后的第一个下降沿到来时,计数器初始值被重新装入,并从初始值重新开始计数。其波形如图9.24所示。第113页/共340页9.2定时器/计数器8253/8254

图9.23在方式3下计数值为奇数时的操作时序第114页/共340页9.2定时器/计数器8253/8254

图9.24方式3的时序图(信号变化)

第115页/共340页9.2定时器/计数器8253/8254

【例9.7】假设定时器/计数器8253计数器0工作于方式3,按二进制计数,计数值为8。设8253的端口地址为50H~53H。试写出初始化程序。分析:定时器/计数器8253计数器0工作于方式3并按二进制计数,那么其控制字为00010110B,初始值为8,应读/写计数器低8位字节。参考程序如下

MOV AL,16H ;计数器0工作于方式3OUT 53H,AL ;写入控制寄存器

MOV AL,08 ;计数器计数初始值08OUT 50H,AL ;写入计数初始值第116页/共340页9.2定时器/计数器8253/82545.方式4(软件触发的选通信号发生器)

当方式4控制字写入8253后,输出l立即变为高电平,写入计数值后开始计数(相当于软件触发),当计数器计数至0时,输出一个时钟周期的负脉冲,计数器停止计数。这种方式计数是一次性的。只有输入新的计数值时才开始新的计数。下面详细介绍:

第117页/共340页(1)当定时器/计数器8253写入控制字后,为高电平。计数器写入计数初始值后,则计数器立即开始对脉冲计数,计数期间,输出保持高电平。当计数器计数到0时,计数器改变输出状态,输出低电平,持续一个脉冲宽度的时间后变为高电平。方式4的波形如图9.25所示。第118页/共340页9.2定时器/计数器8253/8254

(2)定时器/计数器8253在采用方式4计数过程中,如果信号变为低电平时,对计数器有直接影响,但并不改变的输出。信号为高电平时,计数器正常工作,信号为低电平时,计数器停止工作并维持原计数值。当信号恢复高电平后的第一个下降沿到来时,计数器才恢复工作。其波形如图9.26所示。第119页/共340页图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论