8253的工作方式.docx
《8253的工作方式.docx》由会员分享,可在线阅读,更多相关《8253的工作方式.docx(11页珍藏版)》请在冰豆网上搜索。
8253的工作方式
8253的工作方式
1.方式O计数结束产生中断
8253用作计数器时一般工作在方式O。
所谓计数结束产生中
断,是指在计数值减到O时,输出端(OUT产生的输出信号可作为中断申请信号,要求CPU进行相应的处理。
方式0有如下特点:
1当控制字写进控制字寄存器确定了方式0时,计数器的
输出(OUT端口)保持低电平,一直保持到计数值减到Oo
2计数初值装入计数器之后,在门控GATEf言号为高电平时
计数器开始减1计数。
当计数器减到0时输出端OUT才由低变高,此高电平输出一直保持到该计数器装入新的计数值或再次写入方式0控制字为止。
若要使用中断,可以计数到0
的输出信号向CPU发出中断请求,申请中断。
3GATE⅛计数控制门,方式0的计数过程可由GATE控制暂停,即GATE=I时,允许计数;GATE=C时,停止计数。
GATE信号的变化不影响输出OUT端口的状态。
4计数过程中,可重新装入计数初值。
如果在计数过程中,重新写入某一计数初值,则在写完新计数值后,计数器将从该值重新开始作减1计数。
2.方式1可编程的单拍负脉冲可编程的单拍负脉冲又称为单稳态输出方式,简称单稳定时。
方式1的特点是:
1CPU写入控制字后,计数器输出OUT端为高电平作为起始
电平,在写入计数值后计数器并不开始计数(不管此时GATE是高电平还是低电平),而要由外部门控GATE脉冲上升沿
启动,并在上升沿之后的下一个CLK输入脉冲的下降沿开始计数。
2GATE上升沿启动计数的同时,使输出OUT变低,每来一
个计数脉冲,计数器作减一计数,直到计数减为0时,OUT
输出端再变为高电平。
OUT端输出的单拍负脉冲的宽度为计数初值乘以CLK端脉冲周期。
设计数初值为N则单拍脉冲宽度为N个CLK时钟脉冲周期。
3如果在计数器未减到0时,GATE又来一触发脉冲,则由下一个时钟脉冲开始,计数器将从初始值重新作减1计数。
当减至0时,输出端又变为高电平。
这样,使输出脉冲宽度延长。
3.方式2分频脉冲发生器
方式2是一种具有自动予置计数初值N的脉冲发生器。
从OUT端可以输出连续脉冲信号,脉冲宽度等于时钟脉冲周期,而
计数初值N决定了输出端两个负脉冲之间的宽度即输出脉冲周期。
方式2也叫N分频器,因为输出脉冲为输入脉冲的N分频,即出现N个输入脉冲才输出一个脉冲。
方式2有如下
特点:
1N分频计数器,这种方式是输出对输入脉冲按计数器计数初值N分频后的连续脉冲。
2当CPU写入控制字后OUT端输出为高电平作为起始电平,
在写入计数值N后将立即自动开始对输入脉冲CLK计数,输出端仍一直为高;当计数器减到1时,输出变低,计数器减到0时又变为高,计数器重新按已写入的计数值N继续计
数,周而复始,在OUT端输出一个N分频脉冲,其正脉搏冲宽度为(N-1)个输入脉冲时钟周期(是N个CLK时钟脉冲周期之和),而负脉冲输出宽度(持续时间)是一个CLK脉
冲周期。
3GATE用于控制计数,GATE=I允许计数;GATE=O停止计数。
因此,可以用GATE来使计数器同步。
4在方式2下,不但高电平的门控信号有效,上升跳变的门信号也是有效的。
4.方式3分频方波发生器方式3的特点是:
1方式3常用于波特率发生器。
方式3和方式2类似。
但输出为方波或近似方波的矩形波。
2写入方式3控制字后输出为高电平。
写入计数值后计数
器自动开始对输入CLK脉冲计数,输出OUT仍保持为高;在
计数完成一半时,输出OUT变为低电平,直到计数器全部完
成,输出OUT又变为高电平,并重复上述计数过程。
3若计数值N为偶数时,OUT方波的占空比为1:
1;若N为奇数,其占空比为:
(N+1)/2:
(N-1)/2[即输出分频波高电平宽度为(N+1)/2CLK周期,低电平周期为(N-1)/2CLK周期]。
5.方式4软件触发选通脉冲发生器
方式4是类似于方式0的工作方式,计数器是靠置入新的计数初值这个软件操作来触发计数器工作的,故称为软件触发。
方式4有如下特点:
1方式4是靠写入计数值来进行软件触发的“一次性有
效”的选通脉冲发生器。
写入控制字后输出端OUT变为高,
并一直保持。
在写入计数初值之后开始计数,当计数到0时输出端OUT变为低,维持一个CLK周期后又恢复为高,并一直保持为高,直到再次写入计数来进行“软件触发”才能再次开始。
2若GATE=I允许计数;GATE=O停止计数。
3方式4的负脉冲输出常作为选通脉冲。
6.方式5硬件触发选通脉冲发生器
方式5有如下特点:
1方式5类似于方式4,所不同的是GATE端输入信号的作用不同。
方式5是硬件触发,是在外部硬件发出门控信号后才发生的。
2方式5是靠门控脉冲GATE的上升沿来进行触发的选通脉
冲发生器。
写入控制字后输出端OUT为高,这是初始电平;
写入计数值后计数器并不开始计数,而要由门控脉冲GATE
上升沿触发后才开始计数,计数到0输出由高变低,一个CLK时钟周期后又恢复为高,并一直保持,直到下次门控脉冲触
发再次开始计数。
3在此方式中,计数器可重新触发,在任何时候,当GATE
信号的上升沿到来,将把计数初值重新送入计数器,然后开始计数过程。
8253的控制字
1:
BCD计数
0:
2进制计敢「OoOL方式0001:
方式1
」X10:
方式2IXII:
方式J100:
方式4计数器锁存,ftCPU读101:
方式3只读/写计数器低字节只读/写计数器高寧节
先读/写计数辭低字节,后读f写高字节
SCi,SCo――计数通道选择位。
由于8253内部3个计数通道各有一个8位的控制字寄存器,而这三个控制字寄存器共用同一个控制端口地址,所以控制字中设置SCi,SCo这两
位来确定CPU当前发出的控制字是写入哪个计数通道的控制字寄存器中。
具体选择如图.
RLi,RLo――读/写操作方式位。
这两位用来确定对选中的
计数通道进行读/写操作方式。
当CPU对8253进行16位读/写操作时,可以只读/写高8位或只读/写低8位,也可以读/写16位。
读/写16位时,先读/写低8位,后读/写高8位,具体是哪种操作方式由RLi,RLo这两位的编码确定。
由于
8253的数据线只有(D7〜Do),一次只能传送8位数据,故传送16位数据时,要分两次进行。
M2,M1,Mo――工作方式择位。
8253的每个计数通道有6
种不同的工作方式,即方式O到方式5,M2M1M0这三类就
是用来选择具体的工作方式,具体选择如图。
BCD――计数方式选择位。
8253的每个计数通道有两种计数方式按二进制计数或按十进制(BCD码)计数。
BCD位
用来具体确定采用哪种计数方式。
例:
若选择计数器1,工作在方式3,计数初值为588H(2个字节)采用二进制计数,则其控制字为:
01110110=76H,
设控制口地址为043H,则将该控制字写入控制字寄存器的指令如下:
MoVAL,076H
OUT043H,AL
•8253的初始化编程内容:
一是首先向控制寄存器写入控制字,以选定计数通道(三个中之一),规定该计数的工作方式和计数方式以及计数初值的长度和装入顺序(初值写入
方式);二是向已选定的计数器按控制字的要求写入计数
初值。
8253初始化的要求:
(1)对每个计数器,控制字必须写在计数值之前。
这是因为计数器的读/写格式由它的控制字决定。
(2)计数值必须按控制字所规定的格式写入。
若控制字规定只写8位,只需写入一次(8位)计数值即可(规定写低
8位则高8位自动置0,规定写高8位则低8位自动置0);规定写16位时必须写两次,先写低8位,后写高8位。
当初值为0时,也要分两写入,因在二进制计数时,“0”表示
65336,在BCD码计数时“0”表示10000=104。
(3)对所有方式计数器都可以在计数过程中或计数结束后改变计数值,重写计数值也必须遵守控制字所规定的格式,并且不会改变当前计数器的工作方式。
(4)计数值不能直接写到减1计数器中,而只能写入计数
值寄存器中,并由写操作之后的下一个CLK脉冲将计数
值寄存器的内容装入减1计数器开始计数。
(5)初始化编程必须明确各个计数器的控制字和计数值不
是写到同一个地址单元。
各个计数器的控制字各自独立确定,但它们都写入同一个端口地址(控制字寄存器)中,各个计数器的计数值则根据需要独立确定并写入各自计数器
的相应寄存器中。
例1:
设8086系统中8253的三个计数器的端口地址为060H,062H和064H,控制口地址为066H,要求计数器0为方式1,按BCD计数;计数初值为1800D计数器1为方式0,按二进制计数;计数初值为1234H,计数器2为方式3,按二进制计数;当计数初值为065H时,试分别写出计数器0,1,2的初始化程序。
计数器0的初始化:
计数O的控制字:
00100011B=23H
MoVAL23H;计数器O的控制字
OUTO66H,AL;控制字写入8253的控制器
MOVAL18H;取计数初值的高8位,低8位OO可不送
OUTO6OHAL;计数初值送计数器O端口计数器1和初始化:
计数器1的控制字:
O111OOOOB=7OH
MOVAL7OH;计数器的控制字:
方式O,送高8位和低8位,二进制计数
OUTO66HAL;控制字写入8253的控制器
MOVALO34H;取计数初值的低8位
OUTO62HAL;计数初值的低8位,写入计数器1端口
MOVAL12H;取计数初值的高8位
OUTO62HAL;计数初值的高8位写入计数器1端口计数器2的初始化:
计数器2的控制字:
1OO1O11OB=96H
MOVAL96H;计数器2的控制字96H:
方式3,只送低8位,二进制计数
OUTO66HAL;控制字写入8253的控制口
MOVALO56H;计数初值的低8位
OUTO64HAL;计数初值的低8位写入计数器2的端口例2:
要求读出计数器2的当前计数值,并检查是否为全
8253在读取计数器的当前计数值时,必须分两步进行。
首
先发一锁存命令(即控制字中RLIRLo=00,将当前计数值锁存到输出锁存器中。
第二步执行读操作,即用IN指令将
锁存器中内容读入CPU
假设计数初值只有低8位,设其程序段如下(控制口地址为
066H,计数器2的口地址为064H):
KEEPMoVAL80H;计数器2的锁存命令
OUT066HAL;锁存命令写入控制寄存器
INAL,064H;读输出锁存器中的当前计数值(从计数器2
端口读)
CMPAL0FFH;比较当前计数值是否为全“1”
JMEKEEP;非全“1”继续读
HLT;为全“1”暂停
•8253的应用举例
例1:
将8253的计数器1作为5ms定时器,设输入时钟频率为200kHz,试编写8253的初始化程序。
(1)计数初值N计算
已知输入时钟CLK频率为200kHz,则时钟周期为
T=1∕f=1∕200kHz=5μS,于是计数初值N为:
N=5ms∕T=5ms∕5μS=Iooo。
(2)确定控制字
按题意选计数器1,按BCD码计数,工作于方式0,由于计数初值N=1000,控制字D5D4应为11,于是8253的控制字为:
01110001B=71H
(3)选择8253各端口地址
设计数器1的端口地址为
3F82H,控制口地址为3F86Ho
(4)初始化程序如下
MOVAL
,71H;控制字
MOVDX
3F68H;控制口地址
OUTDX
AL;控制字送8253控制寄存器
MOVDX
3F82H;计数器1端口地址
MOVAL
00;将计数初值N=1000的低8
位写入计数器1
OUTDX
AL
MOVAL
10;将N的高8位写入计数器
1
OUTDX,AL
例2:
以8086为CPU的某微机系统中使用了一块8253芯片,其通道端口地址为308H,30AH,30CH控制口地址为30EH,
3个通道使用同一输入时钟,频率为2MHz要求完成如下功
能:
利用计数器O采用硬件触发,输出宽度等于时钟周期的单脉冲,定时常数为36H;
利用计数器1输出频率为2kHz的对称方波;利用计数器2产生宽度为O.6ms的单脉冲,试设计该定时系统硬件电路和初始化程序。
(1)硬件电路设计
硬件电路设计主要是地址译码电路设计及时8253与CPU间
的连接。
根据给定的端口地址可知,地址总线低位部分的
A〜A分别为:
AAF11,A〜A=0000,AAA=IOO〜111,AO=O,由它们经译码器译码产生8253的片选信号,8253的数
据线D〜D)必须与系统数据总线的低8位相连,8253的端口的选择信号A1AO应连系统地址的A2A1。
根据上述要求,译码器应选3-8译码器74LS138。
该译码器有3个代码输入端(GB,A),输入3位代码决定译码信号从丫。
〜丫7中哪一个输出,本例中显然应以丫2输出。
(2)初始化编程
根据题意要求,对3个通道的工作方式,计数初值确定如下:
由CLK〜CLK=2MHz可得,时钟周期T=1∕f=1∕2MHz=O.5μS。
选计数器O:
选择方式5,门控信号GATE应接一正跳变信号,OUT端当计数为O时产生一个宽度等于时钟周期的单脉冲。
计数系数为36,用BCD计数。
所以,计数器O的控制字应
为00011011B=1BH
选计数器1:
选择方式3,GATE按+5V,CLK1=2MHZ俞出方波频率为2kHz,所以,计数常数Nι=2MHz∕2kHz=1000,采用BCD计数,于是计数器1的控制字为:
01110111B=77H
选计数器2:
选择方式1,以构成一个单稳态电路,输出脉
冲宽度由计数常数N2决定,计数常数
N2=600μs/0.5μs=1200,采用BCD计数,于是计数器2的控制字为:
10110011B=B3H
根据以上分析可得3个计数通道的初始化程序如下。
计数通道0的初始化程序:
MoVDX,30EH;8253的控制口地址
MoVAL,1BH;计数通道0的控制字,低8位,方式5,BCD计数
OUTDX,AL;控制字写入控制口
MOVDX,308H;计数器0的端口地址
MOVAL,036H;计数初值的低8位
OUTDX,AL;低字节写入计数器0端口
计数通道1的初始化程序:
MOVDX,30EH;8253的控制口地址
MOVAL,77H;计数通道1的控制字,先写低字
节,后写高字节,方式3,BCD计数
OUTDX
,AL;控制字写入控制口
MOVDX
,30AH;计数通道1的端口地址
MOVAL
,00H;计数初值的低字节
OUTDX
,AL;低字节写入计数通道1
MOVAL
,10D;计数初值的高字节
OUTDX
,AL;高字节写入计数通道1
计数通道2的初始化程序
MOVDX
,30EH;8253的控制口地址
MOV
AL,B3H;计数通道2的控制字,先写低字
节,后写高字节,
方式1,BCD计数
OUTDX
,AL;控制字写入控制口
MOVDX
,30CH;计数通道的端口地址
MOVAL
,00H;计数初值的低字节
OUTDX
,AL;低字节写入计数通道
MOVAL
,12D;计数初值的高字节
OUTDX
,AL;高字节写入计数通道2
计数通道2初始化程序:
MOVAL
,B0H;计数通道2的控制字
OUT05FH
,AL;控制字写入控制器
MOVAL
,068H;计数初值的低8位
AL;计数初值的低8位写入计数通
OUT05DH
道2