8253计数器初值设置与程序初始化

计算计数初值的计算公式计数初值在计算时以下几种情况:

一、当计数器工作在方式2或者方式3的时候,功能实际上是一个分频器,因此计数常数就是分频系数。

分频系数=输入CLK频率/OUT端输出频率

二、当计数器作为定时器工作时,CLK一般来自系统内部的时钟,计数常数就是定时系数。

定时系数(计数初值)N=定时时间(T)×输入时钟频率(fCLK)=定时时间(T)/时钟脉冲周期(tCLK)注:下面标颜色的部分是一一对应的 便于记忆。

1GHz=1000MHz, 1MHz=1000kHz, 1kHz=1000Hz

1s=1000ms,         1 ms=1000μs,      1μs=1000ns

s(秒)、ms(毫秒)、μs(微秒)、ns(纳秒)

时钟周期与时钟频率互为倒数,可得如下·

时钟频率时钟周期

1Hz 1s

1KHz 1ms

1MHz 1μs

1GHz 1ns·

知道这些,便能很快换算周期与频率,

比方10KHz,那么就是1/10=0.1ms,即100μs.

比方100ns,那么就是1/100=0.01GHz,即10MHz.

好,接下来我么来点干货,上例题

例题1、定时器8253的CLK=100KHZ,GATE=1,采用技术通道0,设计一个循环扫描器,要求扫描器每隔10ms输出一个宽度为1个时钟周期的负脉冲,求计数初值。

解析:首先我们知道CLK是时钟频率,为100KHZ,换算为时钟周期,且与后面的每隔10ms这个定时时间一样的单位,就是时钟频率分之一,也就是1/100KHZ=0.01ms。好,下面我们套公式计数初值=定时时间/时钟周期=10/0.01=1000。好,那这道题的最后答案就是1000。

例题2、8253某通道接入6MHZ的时钟,如要求产生2000HZ的方波,则计数器工作在方式几,求计数初值。

解析;首先我们需要了解到8253是有六种工作方式的如下:

方式0–—计数结束中断

方式1–—硬件触发单稳负脉冲

方式2–—频率发生器(分频器)

方式3–——方波发生器

方式4–—软件触发选通

方式5–—硬件触发选通

由上可知 我们用的是方式3 的方波发生器

下面我们来计算初值:n=输入频率/输出频率=6MHZ/2000HZ=6000KHZ/2000kHZ=3k=3000.

所以这个题的计数初值是3000.

还有就是让我们写8253的初始化程序,我们知道写初始化程序必不可少的就是程序控制字和控制端口,比如用

例题1、定时器8253的CLK=100KHZ,GATE=1,采用技术通道0,设计一个循环扫描器,要求扫描器每隔10ms输出一个宽度为1个时钟周期的负脉冲,端口地址范围是304H~307H,计数初值我们已经求出来是1000,然后写初始化程序,初始化时无关项置0,计数初值采用二进制计数。

我相信有很多同学一开始是懵逼状态,大家不要担心,耐心看完,你就是神!

好,步骤一:确定程序控制字,这里需要记忆的有一个图,大家请看下图;

 

程序控制字解析:这里的通道由题目给出为计数器0,也就是通道0,最高两位字节就是00;

D5和D4位怎么选呢,别急,咱们现在知道计数初值是1000,高低字节全部用到了对不对,所以我们选择11:先读/写计数器低字节,后读/写高字节;

然后我们看是方式几,通过了解题目,我们不难看出这是频率发生器,所以我们选择方式2,D3D2D1为010,

最后题目要求是采用二进制计数,啧D0位是0;

所以我们的程序控制字是:0011 0100=34H。

接下来我们一起来看初始化程序:

计数器0的初始化:

MOV AL, 34H  ;读取程序控制字

MOV DX,307H ;设置控制口地址

OUT DX,AL  ;控制字写入控制口

MOV DX,304H ;设置计数器0的地址

MOV AX,1000  ;读取计数值的高低字节

OUT DX,AL ;写入计数值的低字节

MOV AL,AH ;读取计数值的高字节

OUT DX,AL ;写入计数值的高字节

以上就是我们进行的初始化程序,欢迎同学们留言,我们一起学习,加油!

物联沃分享整理
物联沃-IOTWORD物联网 » 8253计数器初值设置与程序初始化

发表评论