编辑: 雨林姑娘 2019-10-26
2.

8253的内部结构 8253的内部结构如图7.1所示,由数据总线缓冲器、控制寄存器、读/写控制逻辑和计数器等部分组成. 图7.1 8253的内部结构示意图 A1 A0 寄存器选择和操作

0 0

0 0

0 0

0 0

1 0

1 1

1 1

0 0

0 0 *

1 0

0 0

0 1

1 1

1 *

1 0

0 1

1 0

0 1

1 * *

0 1

0 1

0 1

0 1 * * 写入计数器0 写入计数器1 写入计数器2 写入控制字寄存器 读计数器0 读计数器1 读计数器2 无操作 禁止使用 无操作 CS RD WR 表7.1 8253读/写操作逻辑表 (2)读/写控制逻辑 决定三个计数器和控制字寄存器中哪一个能进行工作,并控制内部总线上数据传送的方向. ①CS片选信号,低电平有效(此时CPU才能对 8253进行读写操作),由地址总线经I/O端口译码电路产生. ②RD读信号,低电平有效,此时表示CPU正在读取所选定的计数器通道中的内容. ③WR写信号,低电平有效,此时表示CPU正在将计数初值写入所选中的计数通道中或将控制字写入控制寄存器中. ④A1A0端口选择信号,8253内部有3个计数器通道和一个控制寄存器端口.当A1A0=00,01,10时表示分别选中计数器通道0,1,2,当A1A0=11时选中控制寄存器端口. (3)控制寄存器 接收从CPU来的控制字,并由控制字的D

7、D6位的编码决定该控制字写入哪个计数器的控制寄存器,控制寄存器只能写入,不能读出. (4)计数器 当8253用作计数器时,加在CLK引脚上脉冲的间隔可以是不相等的;

当它用作定时器时,则在CLK引脚应输入精确的时钟脉冲,8253所能实现的定时时间,取决于计数脉冲的频率和计数器的初值,即:定时时间=时钟脉冲周期Tc*预置的计数初值n.对8253来讲,外部输入到CLK引脚上的时钟脉冲频率不能大于2MHZ,否则需分频后才能送到CLK端. 图7.2 计数器内部逻辑图 控制单元 初值寄存器 减1计数器 输出锁存器 内部总线CLK GATE OUT 控制单元 初值寄存器 减1计数器 输出锁存器 内部总线CLK 7.2 8253的控制字 在8253的初始化编程中,由CPU向8253的控制字寄存器写入一个控制字,它规定了8253的工作方式.其格式如图 7.2.3 8253的工作方式 8253是一种面向微机系统的专用接口芯片,它的每一个计数器都可以按照控制字的规定有6种不同的工作方式, 每种工作方式中都有以下三种情况: * 正常计数的波形图;

* 正在计数过程中改变门控信号GATE后对整个计 数工作的影响;

* 正在计数的过程中改变计数值对整个计数工作的影响. 方式0――计数结束中断方式 (低电平输出GATE上升沿继续计数)置完数立刻计数,计数期间out为低电平,计满时,out为高电平,计数结束GATE为高电平才计数,计数过程中GATE若为低电平,停止计数,若GATE恢复为高电平,从中止处继续计数计数过程中重新置数,立即按新数计数用途:产生中断信号 2. 方式1 ―― 可编程的单脉冲发生器 (低电平输出GATE上升沿重新计数)置数后,GATE有一个上升沿才开始计数计数期间OUT为低电平,计数满后OUT为高电平计数期间重新置数,本次计数结束后,下次按新数计数 方式1特点: 若设置的计数值为N,则输出的单脉冲的宽度为N个输入脉冲间隔当计数到0后,再次触发启动GATE,可以再输出一个同样宽度的单脉冲,不用送计数值在计数过程中,外部可发出GATE高电平,在GATE上升沿之后的一个CLK脉冲的下降沿,计数器将重新开始计数计数过程中,CPU可改变计数值,计数过程不受影响,计数到0后输出为高.若再次触发启动,则按新输入的计数值计数,计数值下次有效. 3. 方式2 ―― 周期性负脉冲输出(比率发生器,计满后,连续计数) 计数期间,OUT为高电平,当计数至1时,OUT输出一个负脉冲,计满后继续计数计数期间,重新计数,下一次按新数计数计数期间,若GATE为低电平,停止计数,若GATE恢复高电平,重新开始计数用途:作为脉冲速率发生器或用于产生实时时钟中断 4. 方式3 ―― 方波发生器 (周期性方波输出) 方式3的工作过程同方式2,只是输出的脉宽不同置完数,GATE为高电平时就开始计数,计数中,前一半OUT为高电平,后一半OUT为低电平置的数为奇数时,前一半〉后一半一个时钟周期计满后,连续计数GATE信号使计数过程重新开始.若OUT为低期间,GATE=0,OUT将立即变高,停止计数.当GATE=1后,计数重新开始. 5. 方式4 ―― 软件触发选通方式 (单次负脉冲输出) 用方式4工作时,GATE门控信号只是用来允许或不允许定时操作的,定时的执行过程由装入的初值决定置完数GATE为高电平,开始计数,计满后输出一个负脉冲,停止计数,写入一次计一次数计数期间GATE若为0,停止计数,若GATE恢复为高电平,重新计数计数期间,重新置数,本次计满后,不停止,连续按新数计数 6. 方式5 ―― 硬件触发选通方式 (单次负脉冲输出) 方式5为硬件触发选通方式,完全由GATE端引入的触发信号控制定时和计数置完数,GATE在上升沿才开始计数,计满后输出一个负脉冲,停止计数计数中,GATE有一个上升沿,则重新计数若计数值为N,则在写入计数值后的N+1个脉冲,才输出一个负脉冲 工作方式小结: 1.计数条件:0234置完数就可计数,15GATE有一个上升沿才开始计数2.连续性,23连续计数,0145单次计数3.GATE电平影响:GATE=0时,0234停止计数,15继续计数,不受影响,GATE恢复为1时,0继续计数,12345重新计数4.OUT波形:245计满后输出一个负脉冲,01计数过程中为低电平,计满为高电平,3前半周期为高电平,后半周期为低电平 7.2.4 8253的控制字与初始化编程 1. 8253的控制字 8253的控制字有4个主要功能: * 选择计数器;

* 确定计数器数据的读写格式;

* 确定计数器的工作方式;

* 确定计数器计数的数制. 控制字的格式如图7.10所示 D7 D6 D5 D4 D3 D2 D1 D0 计数器 读/写格式 工作方式 数制

0 ―二进制

1 ―二D 十进制(BCD)

000 方式0

001 方式1 ?10 方式2 ?11 方式3

100 方式4

101 方式5

00 计数器锁存命令

10 只读/写高8位01 只读/写低8位11 首先写低8位 然后写高8位00 选择计数器0

01 选择计数器1

10 选择计数器2

11 非法选择 图7.10 8253控制字格式 注:图中*可以是0,也可以是1,一般取0 2. 8253的初始化编程 刚接通电源时,8253芯片通道都处于未定义状态,在使用之前,必须用程序把它们初始化为所需的特定模式,这个过程称为初始化编程. (1) 写入控制字 用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定该计数器的工作方式和计数格式. (2) 写入计数初值 用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式的规定.若是8位数,只要用一条输出指令就可完成初值的设置.如果是16位数,则必须用两条输出指令来完成,而且规定先送低8位数据,后送高8位数据.注意,计数初值为0时,也要分成两次写入,因为在二进制计数时它表示65536,在BCD计数时它表示10000. 8253工作过程中,CPU可用输入指令读取任一通道的计数值.CPU读到的是执行输入指令瞬间计数器的当前值.但8253的计数器是16位,所以要分2次读至CPU.因此,若不锁存的话,在前后两次执行输入指令的过程中,计数值可能已经变化了.锁存当前计数值有下面两种方法: ①利用GATE信号使计数过程暂停. ②向8253写入一个方式控制字, 令8253通道的锁存器锁存. 例7.1 7.2.4 应用举例 1. 8253定时功能的应用 在计算机应用中,经常会遇到隔一定时间重复某一个动作的应用. 设某应用系统中,系统提供一个频率为10kHz的时钟信号,要求每隔100ms采集一次数据. 在系统中,采用8253定时器的通道0来实现这一要求.将8253芯片的CLK0接到系统的10kHz时钟上,OUT0输出接到CPU的中断请求线上,8253的端口地址为10H~13H,如图7.11所示. 中断请求信号 CPU总线 OUT0 图7.11 8253用于定时中断 (1) 选择工作方式 由于系统每隔100ms定时中断一次,则采样频率为10Hz,可选用方式2来实现.当8253定时器工作在方式2时,在写入控制字与计数初值后,定时器就启动工作,每到100ms时间,即计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,CPU在中断服务程序中完成数据采集,同时按原设定值重新开始计数,实现了计数值的自动重装. (2) 确定计数初值 已知 fCLK0=10kHz,则TCLK0=0.1ms,所以,计数初值 N=TOUT0/TCLK0=100ms/0.1ms=1000=03E8H (3) 初始化编程 根据以上要求,可确定8253通道0的方式控制字为00110100B,即34H. 初始化程序段如下: MOV AL,34H ;

通道0,16位计数,方式2,二进制计数 OUT 13H,AL ;

写入方式控制字到控制字寄存器 MOV AL, 0E8H ;

计数初值低8位OUT 10H,AL ;

写入计数初值低8位到通道0 MOV AL, 03H ;

计数初值高8位OUT 10H,AL ;

写入计数初值高8位到通道0 例7.2 2. 8253计数功能的应用 通过PC机系统总线在外部扩展一个8253,利用其通道0记录外部事件的发生次数,每输入一个高脉冲表示事件发生1次.当事件发生100次后就向CPU提出中断请求(边沿触发),假设8253片选信号的I/O地址范围为200H~203H,如图. 外部事件产生 A0 A1 A3~A9 译码 电路 图7.12 8253用于外部事件的计数 根据要求,可以选择方式0来实现,计数初值N=100.8253初始化程序段如下: MOV DX,203H ;

设置方式控制字地址 MOV AL,10H ;

设定通道0为工作方式0,二进制计数,只写入;

低字节计数值 OUT DX,AL ? MOV DX,200H ;

设置计数器通道0的地址 MOV AL,64H ;

计数初值为100 OUT DX,AL ? ........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题