微机原理变量命名规则 微机原理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 ;写入计数值的高字节
以上就是我们进行的初始化程序,欢迎同学们留言,我们一起学习,加油!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com