1、第七章 可编程接口芯片,可编程接口概述 可编程并行输入输出接口芯片8255A 可编程定时计数器接口芯片8253,可编程接口概述一个简单的具有输入功能和输出功能的可编程接口电路如下图,它包括一个输入接口,其组成主要是八位的三态门;一个输出接口,其组成主要是八位的锁存器;另外还有八位的多路转换开关及控制这个开关的寄存器FF。,控制信息,方式控制字,命令寄存器,数据端口,控制端口,用户对寄存器FF写入的内容称为命令字或方式控制字,而寄存器FF称为命令寄存器,相应的端口称为命令端口或控制端口,对可编程芯片初始化过程实际上就是对芯片的控制端口写入各种命令字的操作过程。,目前常用的可编程芯片有如下几种:
2、8255A 并行I/O接口 8253 计数器/定时器 8251 串行I/O 8259A 中断控制器,7.1 可编程并行输入输出接口芯片8255A,一、功能8255A是一种通用的可编程并行IO接口芯片,广泛用于几乎所有系列的微型机系统中,如8086、MCS51、Z80CPU系统等。8255A具有3个带锁存或缓冲的数据端口,可与外设并行进行数据交换。用户可用程序来选择多种操作方式,通用性强。使用灵活,可为CPU与外设之间提供并行输入输出通道。,二、 8255A的内部结构,A口B口C口,并行输入输出端口,A组和B组控制,数据总线缓冲器,读写控制电路,三、 8255A的管脚分配,1、与外设连接的管脚
3、8255A有三个数据端口,每个端口是8位的,由此可推算与外设相连接的管脚共有24位。其中A口有PA7PA0八个I/O引脚,B口有PB7PB0八个I/O引脚,C口有PC7PC0八个I/O引脚。特别地对于PC7PC0,其中可有若干根复用线可用于“联络”信号或状态信号,其具体定义与端口的工作方式有关。,PA0PA7PB0PB7PC0PC7,2、与CPU连接的管脚 包括数据线D7D0,读写控制线和,复位线RESET,以及和CPU地址线相连接的片选信号、端口地址控制线A0和A1。,D0D7 A0 A1 /CS /WR /RD RESET,3、电源线和地线 8255A的电源引脚为VCC和GND。VCC为电
4、源线,一般取5V 。GND为电源地线。,五、 8255A的工作方式及编程,1、8255A的工作方式 8255A有三种工作方式,它们是: 方式0基本输入输出方式; 方式1选通输入输出方式; 方式2双向传送方式。,2、8255A编程 所谓8255A编程,就是用户在使用8255前,用户可用软件来定义端口的工作方式,选择所需要的功能。8255A复位时,A、B、C三端口工作在方式0的输入状态。,1方式控制字 这是一个8位的控制字,代表的信息非常丰富。上面提到8255A内部的3个端口分为A、B两组,因此方式控制字也就相应地分成两个部分,分别控制A组和B组,其格式如下:,2C口置“1”清“0”控制字 置“1
5、”又称为置位操作,而清“0”称为复位操作。,3读入状态字 当8255A由程序设定在方式1或方式2工作时,C口就根据不同的情况,产生或接收“联络”信号。如果这时我们对C口进行读操作,则读出的内容就包含两部分内容,一部分是那些作为I/O线上的内容,另一部分是与“联络”状态有关的内容。,方式1的输入状态字,六、8255A的三种工作方式,1、8255A工作在方式0 方式0也叫基本输入输出方式。 在这种方式下,端口A和端口B可以通过方式选择控制字规定为输入口或者输出口。 端口C分为高4位(PC7PC4) 和低4位(PC3PC0) 两个4位端口,这两个4位端口也可由方式选择控制字分别规定为输入口或输出口。
6、 这四个并行口共可构成16种不同的使用组态。 利用8255A的方式0进行数据传输时,由于没有规定专门的应答信号,所以这种方式常用于与简单外设之间的数据传送,如向LED显示器的输出,从二进制开关装置的输入等。,8255工作过程 1、8255编程(初始化) 2、程序对端口的访问,例:8255A的A口和B口工作在方式0,A口为输入端口,接有四个开关。B口为输出端,接有一个七段发光二极管,连接电路如图所示。试编一程序要求七段发光二极管显示开关所拨通的数字。,电路,LED数码管,段码表,地址 A口:8020H, B口:8022H, C口:8024H, 控制口:8026H. 方式控制字10011000B=
7、90H,A_PORT EQU 8020HB_PORT EQU 8022HC_PORT EQU 8024HCTRL_PORT EQU 8026hMOV AL,90H ;设置8255方式字MOV DX,CTRL_PORTOUT DX,AL ADD1: MOV DX,A_PORTIN AL,DX ;取键盘信息AND AL,0FH ;屏蔽高4位MOV BX,OFFSET TAB1;取段码表首地址XLAT ;查表得段码MOV DX,B_PORT ;输出显示OUT DX,AL,A口的选通信号,当其有效时,外设把数据打入A口的输入缓冲器,A口的输入缓冲器“满”信号,当其有效时表示A口的输入缓冲器已暂存一个有
8、效数据。,A口的中断请求信号。当其有效时,8255A的A口向CPU申请中断,要求CPU从A口取数,中断允许信号。,2、8255A工作在方式1输入 (以A口为例),C口特点 1、C35作为A口的联络线, C4 /STB;C5 IBF;C3INTR 2、C67可工作在基本的I/O 3、C02由B组决定,8255A工作在方式1(输入)时序图,1,2,3,4,1、/STB有效,外设数据A口锁存器,2、IBF有效,告诉外设数据未被CPU取走,3、INTA有效,申请中断(告诉CPU A口有新数据),4、CPU从A口取数,清除IBF和INTA,使之无效,8255A工作在方式1(输入)当A口已接受外设数据后,
9、有两种方式通知CPU取数:其一用条件查询方式,通过查询缓冲器是否“满”,即IBFA是否为高电平来取数。其二用中断方式。,在条件传送中,一般要有所谓的“握手”信号来协调数据的传送。“握手”信号至少要有两位信号线,其中一位是由接口电路发给外设,功能是向外设提供接口电路的信息。另一位是由外设发给接口,功能是向接口提供外设的信息。显然在8255A的选通输入方式中STBA和IBFA是一对“握手”信号。,例:8255A的A口和B口分别工作在方式1和方式0,A口为输入端口,接有8个开关。B口为输出端,接有8个发光二极管,连接电路如图所示。现要求用方式1把改变后的键信息输入到CPU并通过B口显示。,例题电路图
10、,这个系统的工作过程如下: 1、用户通过改变K0K7,产生新的键信息; 2、按下开关K,产生选通信号,数据进入A口的缓冲器, 此步骤实际上告诉CPU,8255的A口来了一个新数据;,例题电路图,3、IBFA有效使LED点亮。这里含有两个信息,一个是 8255A 通知CPU其A口来了一个新数据,另一个是告 诉用户CPU尚未取走这个这个数据,用户不得再送其 他数据; 4、CPU取走这个数据,LED熄灭; 5、转步骤1。,这个系统的工作过程如下: 1、用户通过改变K0K7,产生新的键信息; 2、按下开关K,产生选通信号,数据进入A口的缓冲器, 此步骤实际上告诉CPU,8255的A口来了一个新数据;
11、3、IBFA有效使LED点亮。这里含有两个信息,一个是 8255A 通知CPU其A口来了一个新数据,另一个是告 诉用户CPU尚未取走这个这个数据,用户不得再送其 他数据; 4、CPU取走这个数据,LED熄灭; 5、转步骤1。,设8255的I/O地址分布为88H8EH,相应的程序段如下:mov al,10111001b ;设置A口为方式1的输入,out 8eh,al loop1: in al,8ch ;取C口的状态线test al,00100000b ;测试IBFA信息jz loop1 ;等待用户设定新的键值mov cx,0ffffh Loop2: loop loop2in al,88h ;取数
12、。LED灯灭(相对于步骤4)out 8ah,al ;更新B口的显示jmp loop1 ;重复,3、8255A工作在方式1输出 (以A口为例),外设回答信号。由外设发出。当其有效时,表示外设已接收数据。,A口的输出缓冲器“满”信号,当其有效时表示A口的输出缓冲器已暂存一个有效数据。,A口的中断请求信号。当其有效时,8255A的A口向CPU申请中断,要求CPU送数给A口,中断允许信号。,C口特点 1、C3 ,C6 ,C7作为A口的联络线, C3 /INTR;C6 /ACK;C7/OBF 2、C45可工作在基本的I/O 3、C02由B组决定,8255A工作在方式1(输出)时序图,1,2,3,4,1、
13、CPU对A口写数据,/OBF有效,表示A口锁存器中有新数据;,2、外设取走新数据,向8255发/ACK信号,告诉8255A口数据取走;,3、A口的/OBF无效,表示A口数据锁存器为空,4、INTA有效,发中断信号给CPU,请求新数据,1,在这种方式下,OBFA和ACKA是一对“握手”信号。 OBFA是8255A产生,当其有效时,告诉外设A口已有一个新数据。 ACKA是外设产生,当其有效时,通知A口外设已把数据取走。,例:8255A的A口工作在方式1的输出,接有8个发光二极管,现要求把内存中的10个数,通过A口发送给发光二极管以二进制的形式供用户抄录。,例题电路图,这个系统的工作过程如下: CP
14、U把内存中的一个数据写入A口; LED灯亮,告诉用户 LED显示的是新数据;用户抄录数据; 用户按下开关K,发ACK信号,告诉CPU数据已取走; 转第一步。,这个系统的工作过程如下: 1、 CPU把内存中的一个数据写入A口; 2、 LED灯亮,告诉用户LED显示的是新数据; 3、 用户抄录数据; 4、 用户按下开关K,发ACK信号,告诉CPU数 据已取走; 5、 转第一步。,mov cx,10 ;送10个数mov bx,offset xx ;数组指针送bxmov al,10101001b;设置A 口为方式1的输出out 8eh,alloop1: mov al,bx ;取数out 88h,al
15、;送数到A口loop2: in al,8ch ;取C口状态线anl al,80h ;测试OBFAjnz loop2 ;用户尚未抄录数据,检测;等待, ;此时; LED灯亮(对应步骤2)call delay ;用户已抄录数据,LED灯灭(对 ;应步 骤4)inc bx ;准备送下一个数loop loop1 ;循环10次,4、8255A工作在方式2双向,外设回答信号。由外设发出。当其有效时,表示外设已接收数据。,A口的输出缓冲器“满”信号,当其有效时表示A口的输出缓冲器已暂存一个有效数据。,A口的中断请求信号。当其有效时,8255A的A口向CPU申请中断,要求CPU访问A口,中断允许信号。,中断允
16、许信号。,A口的输入缓冲器“满”信号,当其有效时表示A口的输入缓冲器已暂存一个有效数据,A口的选通信号,当其有效时,外设把数据打入A口的输入缓冲器,如果设定某个8255A的A口和B口分别工作在方式2和方式1下,则这个8255A的C口的I/O功能将不在存在。当然如果B口是工作在方式0下,则C口还有3根线可作I/O线用。,七、8255应用举例,1、与打印机接口 例:在某一8086系统中接有一个打印机,8255A作为输出接口,工作在方式0,试编一程序将缓冲区BUFF内的400H个字节的ASCII码送打印机打印。 总线式接口的缺点 8255接口的优点,打印机具体工作过程如下: 1、数据线D7D0出现有
17、效数据; 2、STB有效,通知打印机,接口给打印机一个数据,数据从数据线进入打印机; 3、BUSY有效,告诉接口,打印机正在打印数据。打印完毕,BUSY变为无效,表示打印结束。,1,2,3, ;打印主程序mov al,10001010B ;方式控制字out ctrl_port,almov al,00000001B ;置位/复位控制字out ctrl_port,almov bx,offset buff ;打印400个ASCII码mov cx,400again: mov dl,bxcall print_data inc bxloop again,print_data proc ;打印子程序,入口在
18、dl中 print1: in al,c_port ;无条件读C口数据test al, 00010000b ;测试busy线 jnz print1 ;busy有效,循环测试mov al,dl out a_port,al ;打印数据进入A口mov al,00000000b ;发选通信号out ctrl_port,almov al,00000001bout ctrl_port,alret ;返回主程序 print_datA endp,2、人机交互接口动态显示例:常用的显示称为动态显示,它采用扫描显示技术,可以使硬件开销降低很多。对于一个8位数据显示,它就需要两个输出端口就可以了。其电路如图所示。在两
19、个输出端口中,一个称为段信号通道,它用来输出要显示数据的段码;另一个称为位信号通道,用来决定当前要显示数据的位置。,动态显示电路图,显示系统的具体工作步骤如下: a、 设要显示的初始位码i0; b、 送第i位的段信号; c、 送第i位的位信号; d、 延时; e、 i1i f、 如果i小于8,转b g、 8位数据显示结束。,程序如下:a_port equ 80h ;定义8255A的四个端口b_port equ 82hc_port equ 84hctrl_port equ 86hdata segment ;定义数据段tab1 db 3FH,06H,5BH,4FH, ;定义段码表dispbuff
20、db 2,0,0,7,1,0,1,5 ;定义显示缓冲区data ends,;显示子程序,数据在dispbuff中 display proc ;保护现场mov bx,offset tab1mov si,offset dispbuff ;步骤amov cx,8 mov ah,01h disp1: mov al,si ;步骤bxlatout a_port,al mov al,ah ;步骤cout b_port,al call delay5ms ;步骤d,延时5msshl ah,1 ;步骤edec siloop disp1 ;恢复现场ret display endp,3、人机交互接口键盘扫描例:方案一
21、。矩阵式键盘电路,其特点是由按键组成一个矩阵,矩阵的行线和列线分别作为两个传输方向相反的I/O接口信号线,比如行线作为输入接口信号线,列线作为输出接口信号线。,程序流程如下: a、 设定行为输出,列为输入; b、 行输出为0,输入列信号; c、 检查列信号是否全为1,若是,无键按下,转b; 如果不全为1,表明有键按下,执行下步; d、 延时10ms,消除抖动。 e、 取i0(用寄存器dh) f、 置i行为0,其他行为1(用寄存器ah); g、 输入列信号; h、 逐列检测,找出为0的列信号(用寄存器dl);未找到:ii1;转f;若找到:执行下步; i、 计算键号key_num,例:方案二翻转法
22、。图所示为矩阵式键盘电路,其特点是由按键组成一个矩阵,矩阵的行线和列线在不同时刻分别作为两个传输方向相反的I/O接口信号线,比如行线作为输入接口信号线,列线作为输出接口信号线,或反之。,键盘扫描电路图,在翻转法中,行列线交换输入、输出,两步就可获取键位置信息。可见这种方法要比扫描法效率高。,翻转法程序流程如下: a、 设定行为输出,列为输入; b、 行输出为0,输入列信号; c、 检查列信号是否全为1,若是,无键按下,转b; 如果不全为1,表明有键按下,执行下步; d、 延时10ms,消除抖动。 e、 逐列检测,找出为0的列信号j; f、 设定列为输出,行为输入; g、 列输出为0,输入行信号
23、; h、 逐行检测,找出为0的行信号i; i、 计算键号key_num,7. 2 可编程定时计数器接口芯片8253,定时和脉冲信号的处理与接口是完全有别于并行信号的,其特点是信号形式简单但需要连续检测。,并行接口,计数器,脉冲控制,计数器溢出,7. 2 可编程定时计数器接口芯片8253,一、功能 INTEL8253可编程定时计数器就是可以实现所要求这方面功能。8253内部有3个独立的16位定时计数器通道。计数器可按照二进制或十进制计数,计数和定时范围可在165535之间改变,每个通道有6种工作方式,计数频率可高达2MHz以上。,二、8253的内部结构,计数通道,数据总线缓冲器,读写控制电路,通
24、道控制寄存器,1、四个端口,计数器0,计数器1,计数器2,控制 端口,2、每个计数端口有三根线与外界联系,CLK:计数器脉冲输入 GATE:门控信号 OUT:计数器输出,计数器,三、 8253的管脚分配与8086接口,通道管脚,数据线,通道选择,控制线,1、管脚定义,2、接口,四、 8253的编程,8253只有一个控制字,8253的一个方式控制字只决定一个计数通道的工作模式。8253的控制字格式如图所示。共分为4部分,通道选择、计数器读/写方式、工作方式和计数码的选择。,、计数器选择(SC1、SC0),、计数器读/写方式(RLl、RL0),STB,计数器L,计数器H,、工作方式选择(M2、M1
25、、M0),、计数码选择(BCD),五、 8253的工作方式,1、方式0计数结束产生中断方式,工作方式0有如下特点:,a、门控信号GATE必须为1,计数器才能计数;,b、计数时通道输出端OUT一直为0;,c、通道计数器计数到0后,OUT由0到1,同时计数器停止工作。,a,b,c,时间常数(秒)3840H(秒) 相应的程序段如下: mov al,10011010B ;置8255A方式控制字 out 8255控制口,al mov al,00h ;8255A置位/复位控制字,使PC00 out 8255控制口,al mov al,30h ;置8253通道0方式控制字 out 8253控制口,al mo
26、v al,40H ;置8253通道0时间常数 out 通道0端口,al mov al,38H out 通道0端口,al 中断程序中有关程序段如下: mov al,00000001B ;8255置位/复位控制字,使PC01 out 8255控制口,al ,2、方式1可编程序的单稳负脉冲,方式1工作过程如下:,b、 触发后,通道计数器开始计数,输出端OUT由高变低;,c、 计数器计数到0,OUT再由低变高。,a,b,c,a、门控信号GATE是触发信号,上升沿有效。即开始计数是由GATE的上升沿触发的;,d、 计数器过程中,如果又被触发,则计数器重新工作,d,3 、方式2速率发生器 方式2的特点如下
27、: a、 GATE门为1,计数器才能工作,对CLK端上的脉冲进行计数; b、 当计数器“减”计数到1时,输出端由高变低,再经过一个CLK周期,即计数器计数到0时,输出端OUT又跳变为高。所以方式2输出周期性负脉冲信号,其宽度固定为一个CLK周期; c、 当计数器的值减为0时,自动重新装入计数初值,实现循环计数。,a,b,c,4、方式3方波发生器 方式2虽然可以作分频电路,但其输出是窄脉冲,如果是方波,就只有选方式3, 8253的通道0,实时中断。用于产生固定频率的时钟节拍,故设定工作在方式3,初值为0,所以从OUT0管脚的输出方波频率为1.19MHz/216 =18.2Hz,通道0的控制字为3
28、6H;, 8253的通道l,动态RAM刷新。用于固定频率的刷新信号,故设定工作在方式2,计数值为12H18,速率输出频率为1.19M/1866.1kHz,即定时时间为15.13s,通道1的控制字为54H;, 8253的通道2,用于产生频率信号。故取工作在方式3,计数值为6A4H1190,方波输出频率为1.19MHz/11901kHz。此信号频率决定扬声器的音调,通道2的控制字为0B6H。, 8253的通道0,实时中断。用于产生固定频率的时钟节拍,故设定工作在方式3,初值为0,所以从OUT0管脚的输出方波频率为1.19MHz/216 =18.2Hz,通道0的控制字为36H; 8253的通道l,动
29、态RAM刷新。用于固定频率的刷新信号,故设定工作在方式2,计数值为12H18,速率输出频率为1.19M/1866.1kHz,即定时时间为15.13s,通道1的控制字为54H; 8253的通道2,用于产生频率信号。故取工作在方式3,计数值为6A4H1190,方波输出频率为1.19MHz/11901kHz。此信号频率决定扬声器的音调,通道2的控制宇为0B6H。,方式4软件触发方式软件触发方式实际上就是CPU通过指令触发一个选通信号给外部设备,选通信号在触发后设定时间点上发出。 方式4在工作过程中有以下特点:,1、门控信号GATE为高电平,计数器开始减1计数,OUT维持高电平;,a,b,2、当计数器
30、减到0,输出端OUT变低,再经过一个CLK输入时钟周期,OUT输出又变高。,6、方式5硬件触发方式这种工作方式同方式4很相似,当控制字写入控制寄存器后,输出端OUT变高。同方式4不同的一点是当计数值写入通道计数器后,通道并未被触发,也就是计数器并不立即开始计数。只有当GATE信号的上升沿触发通道后,通道计数器才开始计数。,方式5硬件触发方式,8253的工作方式小结,8253的六种工作方式可归为两类,一个是充当频率发生器,另一类主要是作计数器来使用。下面我们就从这个角度来讨论总结OUT和GATE门的作用。,与频率发生器有关的工作方式 8253有两种方式与频率发生器有关,即方式2和方式3。 对OU
31、T端,方式2提供给用户的是负脉冲,方式3提供给用户的是方波。 在这个两种方式下,GATE信号要始终保持为高。,与计数器有关的工作方式 对于计数器类,有方式0、1和方式4、5。启动计数器的方式有两种。 一种是CPU把时间常数写入相应通道后,计数器就开始工作,我们可以称之为软件启动方式,在这种启动方式下,GATE要始终保持为高电平,所以方式0和方式4可以称为软件启动方式。 另一种是硬件启动计数器,即CPU把时间常数写入计数器后,即使GATE为高电平,计数器并不工作。只有GATE发生跳变,其上升沿启动计数器工作,所以方式1和方式5就可以称为硬件启动方式,计数器溢出时,OUT有两种输出形式,要么是电平
32、,要么是负脉冲。前者有方式0方式1,后者有方式4和方式5。,六、 8253应用举例,例1:现有一个高精密晶体振荡电路,输出信号是脉冲波,频率为1MHz。要求利用8253做一个秒信号发生器,其输出接一发光二极管,以0.5秒点亮,0.5秒熄灭的方式闪烁指示。设8253的通道地址为80H86H(偶地址),解:1、时间常数计算这个例子要求用8253作一个分频电路,而且其输出应该是方波,否则发光二极管不可能等间隔闪烁指示。频率为1MHz信号的周期为1微秒,而1Hz信号的周期为1秒,所以分频系数N可按下式进行计算:,由于8253一个通道最大的计数值是65536,所以对于N1000000这样的大数,一个通道
33、是不可能完成上述分频要求的。由于 即取两个计数器,采用级联方式。2、电路,3、工作方式选择由于通道1要输出方波信号推动发光二极管,所以通道1应选工作方式3。对于通道0,只要能起分频作用就行,对输出波形不做要求,所以方式2和方式3都可以选用。 这样对于通道0,我们取工作方式2,BCD计数;对于通道1,我们取工作方式3,二进制计数(当然也可选BCD计数),4、程序mov al,00110101b ;通道0控制字out 86h,almov al,00 ;通道0初始计数值out 80h,almov al,10hout 80h,almov al,01110110b ;通道1控制字out 86h,almo
34、v al,0e8h ;通道1初始计数值,03E8H=1000BCDout 82h,almov al,03hout 82h,al,例2:延时程序,设8253的通道地址为80H86H,8255的地址为88H 8EH (偶地址)解:1、电路这个例子要求用8253,8255作一个延时系统。,GATE0,CLK0,OUT0,+5V,1KHz,PC0,8253,8255,2、时间常数计算如果8253的CLK输入1KHz信号,延时时间为1S,则时间常数为N1/0.001=1000D=03E8H 3、工作方式选择 4、程序,MOV AL,10011011B ;A、B、C为输入OUT 8255_CTRL,ALD
35、ELAY1S PROC MOV AL,00110001B ;通道0工作在方式0,;16位读写,BCD计数OUT 8253_CTRL,ALMOV AL,0OUT COUNTER0,ALMOV AL,10HOUT COUNTER0,AL AGAIN: IN AL,8255_CTEST AL,01JZ AGAINRET DELAY1S ENDP,例3:计件系统。计件系统的功能就是记录脉冲的个数。一个脉冲代表一个事件,比如交通道路检测系统中通过检测点的车辆,工业控制系统中流水线上已加工好的工件。要求在计件过程中,PC机可以显示当前计数器的内容,当完成10000个工件记录后,系统发出1KHz信号推动喇叭
36、发音通知用户。,解:1、电路。需要两个通道,一个作为计数,选用通道0。另一个产生1KHz信号,选用通道1。工作原理如下,传感器电路把物理事件转换为脉冲信号输入到通道0计数,当记录10000个事件后,通道0计数器溢出,GATE端输出高电平,这时通道1开始工作,产生1KHz信号推动喇叭发音。,2、工作方式选择对于通道1,由于要产生1KHz信号,故选用工作方式3。对于通道0,要求初始计数值写入计数通道后,计数器就可以工作,则通道0的启动方式应是软件启动。另外由于要求计数溢出后产生一个信号来启动一个事件,即喇叭发音,故可选的工作方式为方式0和方式4,对于图所示方案,通道1的GATE信号由通道0的OUT信号产生,这个OUT信号应该是电平型的,所以通道0应选用方式0。,3、时间常数N010000=2710H4、程序,