已知8253的两个计数器CLK0=1MHZ,CLK1=1KHZ,现系统要求8253的OUT1产生0.1s的定时方波信号。
(1):应如何实现?
(2):说明两个计数器的工作方式并计算计数初值
(3):编写初始化程序(8253的端口地址80H-83H,均采用二进制计数)
CLK0(通道0)
输入信号:1MHz
输出信号:1KHz
分频系数:1MHz/1KHz=1000
工作方式:方式2(分频器方式
)或方式3(方波发生器
)
D7、D6:通道0,所以是00
D5、D4:既写计数器低8位,又写计数器高8位,所以是11
D3、D2、D1:工作方式的选择:如果是方式2,则为010.如果是方式3,则为011。
D0:二进制计数:0。
方式2:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 |
方式3:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
通道0的初始化:
1、写控制字
2、计数初值
控制字:0011 0100B=34H
MOV AL,34H
OUT 83H,AL ;将控制字写入控制端口进行初始化
MOV AX,1000 ;将计数初值放入AX,然后out到80H端口
OUT 80H,AL ;将低八位out出去
MOV AL,AH
OUT 80H,AL ;将高八位out出去
控制字:0011 0110B=36H
MOV AL,36H
OUT 83H,AL ;将控制字写入控制端口进行初始化
MOV AX,1000 ;将计数初值放入AX,然后out到80H端口
OUT 80H,AL ;将低八位out出去
MOV AL,AH
OUT 80H,AL ;将高八位out出去
CLK1(通道1)
输出信号:10Hz
输入信号:1KHz
分频系数:1MHz/1KHz=1000
T=0.1s,f=10Hz
由题可知:OUT1产生0.1s的定时方波信号
。所以,选择方式3(方波发生器)。
D7、D6:通道1,所以是01
D5、D4:既写计数器低8位,又写计数器高8位,所以是11
D3、D2、D1:工作方式的选择:方式3,为011。
D0:二进制计数:0。
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
通道1的初始化:
1、写控制字
2、计数初值
控制字:0111 0110B=76H
MOV AL,76H ;将控制字写入控制端口进行初始化
OUT 83H,AL
MOV AX,100 ;把它的低八位通过81端口写出去,通道1的端口地址是81H。
OUT 81H,AL
MOV AL,AH
OUT 81H,AL ;把AH中的高8位放回到AL里边,一样的办法送到81H端口去
练习定时计数器8254的使用。尤其是方式2、方式3
分频器的使用。
练习分频系数比较大的处理方法。
要求:使用8254产生频率为1Hz
的信号,驱动发光二极管亮灭闪烁。
已知:8254控制寄存器地址
:283H
计数器通道0地址
:280H
计数器通道1地址
:281H
分析:
CLK0
连接时钟1MHz
,要使输出信号为1Hz
,需要100 0000分频,而计数寄存器最多为16位的值,也就是最多65536分频,做不到106分频这么多。所以使用两个计数通道来接续分频
。
首先:
通道0
,方式2
,初值
可以取1000
,产生1KHz的方波信号
然后:
将1KHz的输出接入通道1
的CLK1端,再使用初值1000
,产生分频后的输出就是1Hz。
硬件电路连接:
8254的CS
----------- 280H
CLK0
--------- 1MHz
GATE0
-------- +5v
OUT0
--------- CLK1
GATE1
-------- +5v
OUT1
--------- L0
1、写出8253的几个控制字及其意义。
2、介绍8253的方式2和方式3的使用原理。通过图来表示,并加以说明。
3、写出该实验中分频结果的计算步骤。
分频系数:1MHz/1KHz=1000Hz,1KHz/1000Hz=1Hz。
4、写出程序并适当加注释。
data segment
pkey db "press any key...$"
ends
stack segment
dw 128 dup(0)
ends
code segment
ASSUME CS:code,DS:data
start:
CLK0:
MOV AL,34H ;将控制字34H写入283H这个控制端口
MOV DX,283h
OUT DX,AL
MOV AX,1000 ;将计数初值放入AX,out到280H这个端口
MOV DX,280H
OUT DX,AL ;计数初值先写低八位后写高八位
MOV AL,AH ;把AH中的高8位放回到AL里边
OUT DX,AL
CLK1:
MOV AL,76H ;将控制字76H写入283H这个控制端口
MOV DX,283H
OUT DX,AL
MOV AX,1000 ;将计数初值放入AX,out到281H这个端口
MOV DX,281H
OUT DX,AL ;计数初值先写低八位后写高八位
MOV AL,AH ;把AH中的高8位放回到AL里边
OUT DX,AL
ends
end start