1.8253
Intel 8253是IBM PC/XT机采用的定时控制接口.它既作为时间间隔定时器,也可以作为定时器.
8253有三个独立通道的计数器,每个计数器可拥有6种工作方式.
首先来看一看8253的内部原理图:
那么,8253是如何工作的?
8253有6种工作方式.至于它具体采用哪一种工作方式,是由方式控制字来确定!
对8253进行编程大概有这样的步骤:
1设定工作方式 2设定计数初始值 3 (硬件启动) 4计数初值进入减1计数器 5每输入一个时钟计数器减1的计数过程 6 计数过程结束
在掌握8253的工作方式时,我们重点掌握方式2和方式3:
方式2是作为频率发生器(分频器) 方式3是方波发生器(用于产生方波信号)
对8253的编程首先必须进行初始化操作,因为8253在加电后其状态是不确定的!即第一步是向8253写入控制字,确定工作方式.控制字格式:
例如: mov al,30H out 43H,al ;43H为IBM PC/XT机中8253的控制口地址
它表示计数器0,写入计数值时先写入低字节在写入高字节,采用方式0(单稳脉冲),以二进制方式计数.
写入的计数初值如何确定? 技术初值 = 输入频率 / 输出频率
这是一个写入计数初值的案例:
下面我们来看一看8253的相关例题:
1.设8253的输入CLK1=1000Hz,CS=10~13H,要求OUT1输出为高电平和低电平均为20ms方波。设计8253的控制程序。
答:分析,输出方波,则采用方式3工作(记住),输入频率为1000Hz,输出频率为1000/(20+20)=25Hz.
得到计数初值为1000/25 = 40.
编程:
mov al,56h ;01010110b
out 13h,al ;写入控制字
mov al,40 ;写入计数初值
out 11h,al
2.设某应用系统中,系统提供一个1MHz的时钟信号接入8253的CLK,CS=320~323H,要求用8253产生10秒的定时信号。请设计该系统的软、硬件。
答:输出频率为1秒0.1次,即1/10.而输入为1M,所以得计数初值为10M,因为10M>65535,只能采用级连方式.如下图:
当两通道以上方式连接后,若两通道都工作于2方式下,且对通道1的初值为N1,通道2的初值为N2,则对于级连后的8253而言,其初值为N=N1*N2;即OUT端输出的频率为Fo=Fi/(N1*N2);
一般而言,为了减少二进制的计数误差,N1的值应尽可能的小。
2.8255
8255是一种可编程并行接口电路,其功能丰富,共有3个8位端口,并且有三种输入输出方式.
8255主要用于与外设进行数据交换,并将数据通过控制口发给CPU.
这是8255的结构:
对8255的编程,首先应该进行初始化,写入方式控制字.其中需要注意的是,PC口既可以作为数据接口也可以作为控制、状态字.对C口的位操作命令是通过控制口来实现的,也就是直接写入D0-D7.
数据读写主要是PA PB PC 与外设数据的读写操作.
下面理解方式控制字和端口C的位控制字:
8255A总共有3种工作方式:
基本输入输出方式 选通输入输出 双向选通输入输出
3.8259
8086系列机器采用中断向量机制.能够处理256个中断.用0~255区别.
中断根据其中断源是产生于CPU内部还是外部可分为两类:内部中断和外部中断!
如图:
在实地址下,中断服务程序入口地址保存在中断向量表中,
物理地址00000H,对应向量号从0开始
依次每4个字节存放一个中断向量
•含有16位段地址和16位偏移地址的逻辑地址
•低字部分是偏移地址、高字部分是段地址
256个中断占用1KB区域,形成中断向量表
8259中断控制器芯片中,有8个中断请求引脚,可管理8级中断,8259A可级联为64级中断.对用户而言,8259A提供了3个寄存器:
IRR 中断请求寄存器 ISR 中断服务寄存器 IMR 中断屏蔽寄存器
首先看看8259A的芯片图:
IR0~IR7:从外设来的中断请求由这些引脚输入到8259A。
A0:地址线,用于寻址8259A的两个端口
INT:当8259A接到外设的中断请求,对CPU提出中断请求线,该引脚连接到CPU的INTR上。
INTA*:CPU接到中断请求后送回的中断应答信号。
CAS0~CAS2:主8259A与从8259A的级连线,对于主8259A该引脚为输出,从8259A为输入。
这个图至少告诉了你为什么只能最大64级中断:
对于8259A的编程工作,需要分初始化编程(ICW)和操作命令编程(OCW)
ICW和OCW命令格式有点复杂....应该不会考那么复杂吧?
反正有4个ICW,3个OCW.
对应写入方式:
初始化命令字规定:
ICW格式略
OCW可改变8259A的工作状态,写入顺序没有要求!
OCW命令字格式:略......
4.另外,74LS138的3-8译码原理也需要搞清楚:
如8259的芯片地址?
A9 A8是 0 0,A7 A6 A5输出为1,即 0 0 1即可选中Y1.
所以8259的起始地址是 00 0010 0000 终结地址是 00 0011 1111,即 020H ~ 03FH