8253问题!!!两个计数器级联,如何确定两个计数器的初值?

8253问题!!!两个计数器级联,如何确定两个计数器的初值?,第1张

计数初值N=输入频率/输出频率。为保证输入8MHz时恰好有100Hz输出,计数初值必须N=8M/100=80000,这样大的计数初值可以用计数器级联来解决。一般分为整数相乘。80000=4000*20(当然也可以用其他数相乘,如80000=2000*40)

至于8253的各个端口地址,那要看电路连接图,或者题目给出一个8253的基地址,根据这个基地址(即为通道0的地址)来判断其他三个端口地址。

输出信号周期为1秒,频率为1Hz,则计数初值=1MHz/1Hz=1M=10^6.所以需要用两个通道级联,使两个通道的计数初值的乘积为10^6.

可以选取通道0和通道1(随意,反正两个通道级联即可)

把1MHz输入8253的CLK0,OUT0计入CLK1,GATE0和GATE1接+5V。写入0号通道初值1000,1号通道计数初值1000,则OUT1即为每秒一次的信号了

一个通道若使用双字节,是16位计数器,最大计数值N =2^16 =65536

若输入CLK脉冲频率为2MHz, 脉冲周期Tin =1/2MHz =2μS

则一个通道最大定时时间Tmax =65536x2μS =131072μS =131.072mS

.

若要输出周期1秒的连续方波,因所需计数值超出一个通道最大计数值65536,

采用通道级联来实现(如图):

通道0工作方式2,用作自动重装计数初值的分频器;

通道1工作方式3,用作自动重装计数初值的方波发生器。

级联计数初值N1.N2 = 1S/2μS =500000d

设定通道0的计数初值N1 =1000d =3E8h

设定通道1的计数初值N2 =500d =1F4h

.

级联工作过程:

①GATE0及GATE1长接+5V(高电平),

通道0及通道写入计数初值,即开始递减计数,OUT0及OUT1输出高电平;

②每个脉冲输入至CLK0, 通道0的计数值递减1;

当通道0每次计数完毕(计数值递减至0),OUT0向CLK1输出一个脉冲宽度低电平,

使通道1的计数值递减1,通道0自动重装初值开始另一轮计数;

③当通道1的计数值递减到N2/2 =250d,即总计数值递减至25000d,

OUT1输出电平自动翻转,进入方波的下半周期;

④当通道1计数值递减至0,亦自动重装初值,

开始另一轮计数的上半周期,OUT1重新输出高电平。

.

初始化程序:

MOV  DX, 203h       8253控制口地址

MOV  AL, 00110100b  通道0,方式2,写16位初值,二进制数

OUT  DX, AL         通道0的方式字写入控制口

MOV  DX,200h       通道0初值寄存器地址

MOV  AX,3E8h       通道0计数初值

OUT  DX,AL         初值低8位写入通道0

MOV  AL, AH

OUT  DX, AL         初值高8位写入通道0

MOV  DX, 203H       8253控制口地址

MOV  AL, 01110110b  通道1,方式3,写16位初值,二进制数

OUT  DX, AL         通道1的方式字写入控制口

MOV  AX,1F4h       通道1计数初值

OUT  DX,AL         初值低8位写入通道1

MOV  AL, AH

OUT  DX, AL         初值高8位写入通道1


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11611810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存