0%

8255A&&8253

对Intel的可编程并行I/O接口芯片8255和可编程计数器/定时器8253的笔记。

8255A(8255的改进型)

8255芯片是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。

内部结构

8255A由数据总线缓冲器数据端口A数据端口B数据端口CA组控制电路B组控制电路读/写控制电路组成。

引脚功能

  • 可存取数据的端口A、端口B、端口C,分别对应PAPBPC
  • RESET:复位引脚,低电平有效;当该引脚检测到低电平信号时,8255A内部寄存器清零PAPBPC端口被设置为输入状态
  • CS':片选引脚,低电平有效;地址总线的高位译码后连接该引脚,用于选中8255A。引脚上的信号有效时,才可以对8255A进行读、写等操作;
  • RD'控制,低电平有效;用于CPU从8255A读取数据或状态;
  • WR'控制,低电平有效;用于CPU向8255A写入数据或控制字;
  • D0~D7:与数据总线相连,CPU通过这8个引脚与8255A进行数据通信;
  • A0、A1:用于ABC端口与控制寄存器的选择。

读写&控制逻辑

工作方式

  • 端口A可工作于方式0、方式1、方式2;
  • 端口B可工作于方式0、方式1;
  • 端口C只能工作于方式0。

方式0——基本输入输出

每一个端口都作为基本的I/O口,端口C的高4位、端口C的低4位、端口A和端口B均可独立设置为I/O口。

CPU可采用无条件传输方式与8255A进行数据交换。

方式0输出锁存能力,输入锁存能力。

方式1——单向选通输入输出

三个数据端口分为A、B两组,当端口A工作于方式1时,PC3PC4PC5用于端口A的选通控制信号;当端口B工作于方式1时,PC0PC1PC2用于端口B的选通控制信号;PC6PC7可工作于方式0。

PC6PC7由方式选择控制字中的D3位来定义其传送方向,当D31时,用于输入;当D30时,用于输出

方式1适合用于中断方式下的输入输出。

方式1输入和输出时均锁存能力。

方式1:输入

方式1:输出

方式2——双向选通输入输出

在用作输入的同时,又能用作输出,只有端口A可工作于方式2,占用端口C5位用作选通控制

方式2可采用查询方式中断方式进行数据传输。

当端口A工作于方式2、端口B工作于方式1时,PC7~PC3作为端口A的联络信号,PC2~PC0作为端口B的联络信号;

当端口A工作于方式2、端口B工作于方式0时,PC7~PC3作为端口A的联络信号,PC2~PC0可工作于方式0。

控制字

方式选择控制字

端口C置位/复位控制字

举个栗子

设某8255的控制端口地址为63H,若要其端口A工作于方式1输出,允许中断,则必须使INTE(PC6)为1,为此,可向控制字寄存器写入按位置位/复位操作命令:

MOV	AL,00001101B
OUT 63H,AL

若要端口B工作于方式1输入,允许中断,则必须使INTE(PC2)为1,为此,可向控制字寄存器写入以下的按位置位/复位操作命令:

MOV	AL,00000101B
OUT 63H,AL

若将8255A的端口A作为输出,端口B作为输入,端口A和端口B均工作于方式0。已知8255A端口地址为60H~63H,则对8255A进行初始化,并将PC1置位,PC2复位的操作命令如下:

MOV	AL,82H		;方式选择控制字10000010B=82H
OUT 63H,AL ;将控制字写入8255A控制端口,设置各端口工作方式
MOV AL,03H ;端口C置位控制字00000011B=03H,设置PC1=1
OUT 63H,AL ;将控制字写入8255A控制端口
MOV AL,04H ;端口C置位控制字00000100B=04H,设置PC2=0
OUT 63H,AL ;将控制字写入8255A控制端口

8253

8253芯片是可编程计数器/定时器。8253的读/写操作对系统时钟没有特殊的要求,可应用于由任何一种微处理器组成的系统中,可作为可编程的方波频率发生器、分频器、实时时钟和单脉冲发生器等。

内部结构

每片8253有3个独立的16位计数通道,每个计数通道最高计数速率可达2.6MHZ。每个计数器可编程设定6种工作方式,使用时可以根据需要选择其中的一种工作方式。每个计数通道可按二进制十进制来计数。

引脚功能

  • D7~D0:8位三态双向缓冲器,与系统的数据总线连接,接收CPU送来的计数值和控制字,高阻态时隔离8253与系统总线;
  • WR'信号输入引脚,低电平有效;
  • RD'信号输入引脚,低电平有效;
  • CS':片选信号输入引脚,低电平有效;
  • A1、A0:端口选择信号输入引脚。

工作方式

方式0

8253完成计数功能,且只作一遍计数。控制字写入后,输出端OUT变为低电平;计数初值写入后,下一个CLK脉冲的下降沿,开始计数,输出端OUT维持低电平。

当计数值减到0时,输出端OUT变为高电平,可作为中断请求信号,并可保持到重新写入新的控制字或新的计数初值为止。

在计数过程中,若GATE信号变为低电平,则暂停计数;当GATE信号重新变为高电平时,则从暂停时的计数值开始继续计数;若写入新的计数初值,则在下一个CLK脉冲的下降沿,以新的计数初值重新开始计数。

方式1

方式1是硬件触发单稳态方式,输出单个负脉冲信号,脉冲宽度为可编程。

写入控制字后,输出端OUT变为高电平并保持此状态。写入计数初值后,在GATE信号的上升沿之后的下一个CLK脉冲的下降沿,输出端OUT变为低电平,开始计数。

当计数值减到0时,输出端OUT变为高电平

计数过程中,若CPU送来新的计数初值不影响当前的计数过程;直到计数值减到0时,输出端OUT输出高电平且出现新的一次GATE信号的触发时,才会开始新的计数

如果在输出端OUT输出低电平期间,接收到一个GATE信号上升沿触发,则在下一个CLK脉冲的下降沿重新开始计数

方式2

方式2可产生连续的负脉冲信号,可用作频率发生器。负脉冲宽度为一个时钟周期

写入控制字后,输出端OUT变为高电平。若GATE为高电平,则在写入计数初值后,在下一个CLK脉冲的下降沿开始计数。当计数值减为1时,输出端OUT输出低电平,经过一个CLK时钟周期,输出端OUT输出高电平,并自动开始一个新的计数过程

在计数过程中,若计数值未减到1时,GATE信号由高电平变为低电平,则停止计数;但当GATE信号由低电平变为高电平时,则从计数初值开始重新计数

GATE信号保持高电平在计数过程中重新写入计数初值,则要在该轮计数结束并输出一个CLK周期的负脉冲后,才以新的计数初值进行计数。

方式3

方式3可产生连续的方波信号,可用作方波发生器。计数初值为偶数时,输出对称方波;计数初值为奇数时,输出不对称方波

控制字写入后,输出端OUT输出高电平。当写入计数初值后,在下一个CLK脉冲的下降沿开始计数。计数值减为计数初值的1/2时,输出端OUT变为低电平。此时继续计数,当计数值减为0时,输出端OUT变为高电平。之后,自动开始一个新的计数过程。

在计数过程中,若GATE信号变为低电平,则停止计数;当GATE信号由低电平变为高电平时,则从计数初值开始计数。若在输出端OUT为低电平时,GATE信号变为低电平,则停止计数,同时输出端OUT立即变为高电平GATE信号又变为高电平后的下一个时钟脉冲的下降沿,重新开始计数

在计数过程中,若写入新的计数初值,不影响当前输出周期。但若在写入新的计数初值后,又受到GATE信号上升沿的触发,则结束当前输出周期,而在下一个时钟脉冲的下降沿,以新的计数初值开始计数。

方式4

方式4可产生软件触发单个负脉冲信号,负脉冲宽度为一个时钟周期

写入控制字后,输出端OUT变为高电平,若GATE信号为高电平,则在写入计数初值后的下一个CLK下降沿开始计数。当计数值减为0时,输出端OUT变为低电平,在一个CLK时钟周期后,输出端OUT变为高电平。

若在计数过程中,写入新的计数初值,则在下一个CLK脉冲的下降沿以新的计数初值开始计数。

方式5

方式5可产生硬件触发单个负脉冲信号,负脉冲宽度为一个时钟周期

方式5的计数过程由GATE信号的上升沿触发。当控制字写入后,输出端OUT输出高电平并保持此状态。写入计数初值后,只有在GATE信号的上升沿之后的下一个CLK脉冲下降沿开始计数。当计数值减为0时,输出端OUT变为低电平并持续一个CLK周期,随后自动变为高电平

在计数过程中,若GATE引脚接收到一个上升沿触发,则在下一个CLK脉冲下降沿重新开始计数。

在计数过程中,若写入新的计数初值,但没有触发脉冲,则当前输出周期不受影响;当前周期结束后,在再次触发的情况下,才以新的计数初值开始计数;若写入新的计数初值,并在当前周期结束前受到触发,则在下一个CLK脉冲下降沿以新的计数初值开始计数。

方式控制字

举个栗子

在8086系统中,设8253的计数器0工作在方式2,二进制计数,计数初值为2000;8253的计数器1工作在方式3,BCD码计数,计数初值为10,8253端口地址为40H~43H,则初始化如下:

;8253计数器0的初始化如下:
MOV AL,34H ;方式控制字00110100B=34H
OUT 43H,AL ;将控制字送入8253控制端口43H
MOV AX,2000 ;初值送入AX寄存器
OUT 40H,AL ;将初值的低8位输出计数通道0端口40H
MOV AL,AH ;初值的高8位送入AL寄存器
OUT 40H,AL ;将初值的高8位输出计数通道0端口40H

;8253计数器1的初始化如下:
MOV AL,57H ;方式控制字01010111B=57H
OUT 43H,AL ;将控制字送入8253控制端口43H
MOV AL,10H ;将初值10送入AL寄存器,因为BCD码计数,所以为10H
OUT 41H,AL ;将初值的低8位输出计数通道1端口41H

参考资料

8255芯片_百度百科

微机原理笔记(2)——8255A芯片

8253芯片_百度百科

微机原理笔记(3)——8253芯片