📄 chapter7.htm
字号:
<td width="10%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="12%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="8%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="48%" bgcolor="#008000"><big><big>写计数器1(设置计数器1初值)</big></big></td>
</tr>
<tr>
<td width="10%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="12%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="8%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="48%" bgcolor="#008000"><big><big>写计数器2(设置计数器2初值)</big></big></td>
</tr>
<tr>
<td width="10%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="12%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="8%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="48%" bgcolor="#008000"><big><big>写控制字或送锁存命令</big></big></td>
</tr>
<tr>
<td width="10%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="12%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="8%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="48%" bgcolor="#008000"><big><big>读计数器0的当前计数值</big></big></td>
</tr>
<tr>
<td width="10%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="12%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="8%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="48%" bgcolor="#008000"><big><big>读计数器1的当前计数值</big></big></td>
</tr>
<tr>
<td width="10%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="12%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="8%" align="center" bgcolor="#008000"><big><big>0</big></big></td>
<td width="48%" bgcolor="#008000"><big><big>读计数器2的当前计数值</big></big></td>
</tr>
<tr>
<td width="10%" align="center" bgcolor="#008000"><big><big>1</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>x</big></big></td>
<td width="12%" align="center" bgcolor="#008000"><big><big>x</big></big></td>
<td width="11%" align="center" bgcolor="#008000"><big><big>x</big></big></td>
<td width="8%" align="center" bgcolor="#008000"><big><big>x</big></big></td>
<td width="48%" bgcolor="#008000"><big><big>未选择</big></big></td>
</tr>
</table>
</center></div>
<blockquote>
<h4 align="left"><font face="宋体" size="5" color="#FFFFFF">4、控制寄存器</font></h4>
</blockquote>
<p align="center"><img src="8253msh.gif" width="550" height="390"
alt="8253msh.gif (10968 bytes)"></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">二、8253的工作模式</font></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF"> 8253包括6中工作模式,称为模式0~模式5,可以完成计数和定时功能。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">计数</font><font
face="宋体" size="5" color="#FFFFFF">:向8253设置完计数初值后,便进行减1计数,减到“0”时,输出一个信号而结束计数过程。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFF00">定时</font><font
face="宋体" size="5" color="#FFFFFF">:向8253设置完计数初值(定时常数)后,便进行减1计数,并按定时常数输出一定频率的时间间隔信号。</font></p>
<h4 align="left"><font face="宋体" size="5" color="#FFFFFF">1、模式0---计数结束产生中断的计数器</font></h4>
</blockquote>
<p align="center"><img src="8253msh0.gif" width="542" height="284"
alt="8253msh0.gif (5625 bytes)"></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">无论8253工作在何种工作模式,其操作均遵循以下规则:</font></p>
</blockquote>
<blockquote>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">a、控制字写入计数器后,所有的控制逻辑电路立即复位,输出端OUT进入初始状态;</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">b、计数初值写入后,在下一个时钟的下降沿(即要经过一个时钟的上升沿和一个下降沿),计数执行部件才开始减1计数;</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">c、门控信号GATE在时钟CLK的上升沿被采样。</font></p>
</blockquote>
</blockquote>
</blockquote>
<blockquote>
<p align="left"> </p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">在模式0中,计数器只计一遍,各个过程如下:</font></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)写入控制字之后,OUT端为初始低电平,并且保持到计数值到达0为止。计数值到达0后,OUT端变为高电平。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)控制字和计数初值N写入后,要在下一个时钟的下降沿才开始做减1计数,即,经过N+1个时钟后,输出端OUT才变为高电平。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">3)如果GATE=1,执行部件获得计数初值后即开始计数,如果GATE变为0,则计数过程停止,相应地延长了OUT端低电平的输出时间。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">4)如果在计数过程中,有一个新的计数初值被写入,那么,下一个时钟时,按新的计数初值重新计数。</font></p>
</blockquote>
</blockquote>
<p align="left"> </p>
<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">三、8253的编程步骤</font></h3>
<blockquote>
<h4 align="left"><font face="宋体" size="5" color="#FFFFFF">1、基本规则:</font></h4>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)对计数器设置计数初值时,必须先写控制字;</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)初值设置时,要符合控制字中的格式规定。</font></p>
</blockquote>
<h4 align="left"><font face="宋体" size="5" color="#FFFFFF">2、编程命令</font></h4>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)写控制字和设置计数初值</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
例如,设某8253的口地址为40H~43H,计数器0工作在模式0,计数初值为2050,则设置计数器0控制字的过程为:</font></p>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV AL,31H
;控制字,BCD计数</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">OUT 43H,AL ;</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV AL,50H
;计数初值的低8位</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">OUT 40,AL</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV AL,30H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">OUT 40,AL</font></p>
</blockquote>
</blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)读取当前的计数初值</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
必须先设置锁存命令,然后才可以读取16位的当前计数值。由于8253的数据线只有8位,所以该计数初值必须从同一端口连续读取两次。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">例如,读取计数器1的当前计数值,程序为:</font></p>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV AL,40H
;锁存计数值控制字</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">OUT 43H,AL</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">IN AL,41H
;读计数值的低8位</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV CL,AL
</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">IN AL,41H
;读计数值的高8位</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV CH,AL </font></p>
</blockquote>
</blockquote>
</blockquote>
<p align="center"><a href="../main/index.htm">返回目录</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -