预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共35页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

8.1可编程定时器/计数器芯片8253/82548253/8254是Intel公司生产的一种通用的计数/定时器CTC,也称为可编程序间隔定时器PIT,它是采用NMOS工艺由单一+5V电源供电的双列直插式封装24引脚芯片。8253/8254芯片两者的外形引脚及功能都是兼容的,仅是工作的最高频率有所不同,以满足不同的接口要求。例如: 8253(2MHz)、8253-5(5MHz), 8254(8MHz)、8254-5(5MHz)、 8254-2(10MHz)。8.1.18253的结构及功能 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.28253的编程 8253在工作之前,用户首先要为某一计数器(计数器02)写入控制字以确定其工作方式;写入定时/计数初值;在定时/计数工作过程中,有时还需要读取某计数器当前的计数值。 1.8253的控制字格式 8253的控制字格式如下图所示。0—二进制计数2.8253的读/写操作 对8253的读/写操作不仅要用到RD和WR控制信号,还要根据计数/定时工作的要求利用门控信号GATE和锁存功能来控制8253的读/写操作。 ⑴读操作。所谓读操作是指读出计数器的计数值至CPU中。有两种读数方法: ①直接读出(停读)。直接用输入指令读取所选择的端口计数器值。 ②锁存读出(飞读)。锁存计数值以供读取,是专为在计数过程中读数据而设计的。 ⑵写操作 所谓写操作是指CPU对8253写入控制字或计数初值。 3.初始化编程 8253投入工作之前,CPU要对它进行初始化编程。初始化编程的步骤为: ①写入计数器的控制字,规定其工作方式及相应功能; ②写入计数初值。例如,若选择0#计数器,工作在方式3,计数初值为2354H,十进制计数方式;或选择l#计数器,工作在方式2,计数初值为18H,二进制计数方式。并设8253端口地址为4043H。 则根据上述各计数器的功能,其初始化编程如下: 0#计数器的控制字为:37H 1#计数器的控制字为:54H对0#计数器初始化编程 MOVAL,37H;对0#计数器送控制字。 OUT43H,AL MOVAL,54H;送初值的低8位。 OUT40H,AL MOVAL,23H;送初值的高8位。 OUT40H,AL 对1#计数器初始化编程。 MOVAL,01010100B;对1#计数器送控制字。 OUT43H,AL MOVAL,18H;计数初值送低8位。 OUT41H,AL当采用“飞读”的方法读取1#计数器的计数值时,可采用如下程序片段: MOVAL,01000100B;对1#计数器送锁存控制字。 OUT43H,AL INAL,41H;读低8位。 MOVCL,AL;读取的计数值存于CL中。 当计数值为16位时,则“飞读”时还应读取高8