⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpjjx22.htm

📁 _计算实用教程Visual C++6.0实用教程
💻 HTM
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>定时/计数器实验2</TITLE>
</HEAD>
<BODY background="../back.jpg" bgcolor="#CCCCCC">
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>定时</font><FONT SIZE=3>/</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>计数器实验</FONT><FONT SIZE=3>2</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>前面我们做了定时器的实验,现在来看一看计数实验,在工作中计数通常会有两种要求:第一、将计数的值显示出来,第二、计数值到一定程度即中断报警。第一种如各种计数器、里程表,第二种如前面例中讲到的生产线上的计数。先看第一种吧。我们的硬件中是这样连线的:</font><FONT SIZE=3>324</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>构成的振荡器连到定时</FONT><FONT SIZE=3>/</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>计数器</FONT><FONT SIZE=3>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的外部引脚</FONT><FONT SIZE=3>T1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>上面,我们就利用这个来做一个计数实验,要将计数的值显示出来,当然最好用数码管了,可我们还没讲到这一部份,为了避免把问题复杂化,我们用</FONT><FONT SIZE=3>P1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>口的</FONT><FONT SIZE=3>8</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>个</FONT><FONT SIZE=3>LED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>来显示计到的数据。</font></P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3> 
<P ALIGN="JUSTIFY">程序如下:</P>
<P ALIGN="JUSTIFY">ORG 0000H </P>
<P ALIGN="JUSTIFY">AJMP START </P>
<P ALIGN="JUSTIFY">ORG 30H </P>
<P ALIGN="JUSTIFY">START: </P>
<P ALIGN="JUSTIFY">MOV SP,#5FH </P>
<P ALIGN="JUSTIFY">MOV TMOD,#01000000B ;定时/计数器1作计数用,0不用全置0 </P>
<P ALIGN="JUSTIFY">SETB TR1 ;启动计数器1开始运行. </P>
<P ALIGN="JUSTIFY">LOOP: MOV A,TL0 </P>
<P ALIGN="JUSTIFY">MOV P1,A </P>
<P ALIGN="JUSTIFY">AJMP LOOP</P>
<P ALIGN="JUSTIFY"> END </P>
</FONT>
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在硬件上用线将</font><FONT SIZE=3>324</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的输出与</FONT><FONT SIZE=3>T1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>连通</FONT><FONT SIZE=3>(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>印板上有焊盘</FONT><FONT SIZE=3>)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>运行这种程序,注意将板按正确的位置放置(</FONT><FONT SIZE=3>LM324</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>放在左手边,</FONT><FONT SIZE=3>LED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>排列是按从高位到低们排列)看到什么?随着</FONT><FONT SIZE=3>324</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>后接的</FONT><FONT SIZE=3>LED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的闪烁,单片机的</FONT><FONT SIZE=3>8</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>只</FONT><FONT SIZE=3>LED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>也在不断变化,注意观察,是不是按二进制:</font></P>
<FONT SIZE=3><P ALIGN="JUSTIFY">00000000</P>
<P ALIGN="JUSTIFY">00000001</P>
<P ALIGN="JUSTIFY">00000010</P>
<P ALIGN="JUSTIFY">00000011</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">。</P>
<P ALIGN="JUSTIFY">。</P>
<P ALIGN="JUSTIFY">。</P>
</FONT><P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>这样的顺序在变呢?这就对了,这就是</font><FONT SIZE=3>TL0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的数据。</font></P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3> 
<P ALIGN="JUSTIFY">程序二:</P>
<P ALIGN="JUSTIFY">ORG 0000H </P>
<P ALIGN="JUSTIFY">AJMP START </P>
<P ALIGN="JUSTIFY">ORG 001BH </P>
<P ALIGN="JUSTIFY">AJMP TIMER1 ;定时器1的中断处理</P>
<P ALIGN="JUSTIFY"> ORG 30H </P>
<P ALIGN="JUSTIFY">START: MOV SP,#5FH </P>
<P ALIGN="JUSTIFY">MOV TMOD,#01010000B ;定时/计数器1作计数用,模式1,0不用全置0 </P>
<P ALIGN="JUSTIFY">MOV TH1,#0FFH </P>
<P ALIGN="JUSTIFY">MOV TL1,#0FAH ;预置值,要求每计到6个脉冲即为一个事件 </P>
<P ALIGN="JUSTIFY">SETB EA</P>
<P ALIGN="JUSTIFY">SETB ET1 ;开总中断和定时器1中断允许 </P>
<P ALIGN="JUSTIFY">SETB TR1 ;启动计数器1开始运行. </P>
<P ALIGN="JUSTIFY">AJMP $ </P>
<P ALIGN="JUSTIFY">TIMER1: </P>
<P ALIGN="JUSTIFY">PUSH ACC </P>
<P ALIGN="JUSTIFY">PUSH PSW </P>
<P ALIGN="JUSTIFY">CPL P1.0 ;计数值到,即取反P1.0 </P>
<P ALIGN="JUSTIFY">MOV TH1,#0FFH </P>
<P ALIGN="JUSTIFY">MOV TL1,#0FAH ;重置计数初值</P>
<P ALIGN="JUSTIFY"> POP PSW </P>
<P ALIGN="JUSTIFY">POP ACC </P>
<P ALIGN="JUSTIFY">RETI </P>
<P ALIGN="JUSTIFY">END </P>
</FONT> 
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>&#9;上面这个程序完成的工作很简单,就是在每</font><FONT SIZE=3>6</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>个脉冲到来后取反一次</FONT><FONT SIZE=3>P1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,因此实验的结果应当是:</FONT><FONT SIZE=3>LM324</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>后接的</FONT><FONT SIZE=3>LED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>亮、灭</FONT><FONT SIZE=3>6</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>次,则</FONT><FONT SIZE=3>P1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>口所接</FONT><FONT SIZE=3>LED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>亮或灭一次。这实际就是我们上面讲的计数器的第二种应用。</font></P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3> 
<P ALIGN="JUSTIFY">&#9;程序三:外部中断实验</P>
<P ALIGN="JUSTIFY">ORG 0000H </P>
<P ALIGN="JUSTIFY">AJMP START </P>
<P ALIGN="JUSTIFY">ORG 0003H ;外部中断地直入口 </P>
<P ALIGN="JUSTIFY">AJMP INT0 </P>
<P ALIGN="JUSTIFY">ORG 30H </P>
<P ALIGN="JUSTIFY">START: MOV SP,#5FH </P>
<P ALIGN="JUSTIFY">MOV P1,#0FFH ;灯全灭 </P>
<P ALIGN="JUSTIFY">MOV P3,#0FFH ;P3口置高电平 </P>
<P ALIGN="JUSTIFY">SETB EA </P>
<P ALIGN="JUSTIFY">SETB EX0 </P>
<P ALIGN="JUSTIFY"> AJMP $ </P>
<P ALIGN="JUSTIFY">INT0: </P>
<P ALIGN="JUSTIFY">PUSH ACC </P>
<P ALIGN="JUSTIFY">PUSH PSW </P>
<P ALIGN="JUSTIFY">CPL P1.0 </P>
<P ALIGN="JUSTIFY">POP PSW </P>
<P ALIGN="JUSTIFY">POP ACC </P>
<P ALIGN="JUSTIFY">RETI </P>
<P ALIGN="JUSTIFY">END </P>
</FONT>
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>&#9;本程序的功能很简单,按一次按键</font><FONT SIZE=3>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(接在</FONT><FONT SIZE=3>12</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>引脚上的)就引发一次中断0,取反一次</FONT><FONT SIZE=3>P1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。</FONT><FONT SIZE=3>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,因此理论上按一下灯亮,按一下灯灭,但在实际做实验时,可能会发觉有时不“灵”,按了它没反应,但在大部份时候是对的,这是怎么回事呢?我们在讲解键盘时再作解释,这个程序本身是没有问题的。</font></P>
<P ALIGN="JUSTIFY"><a href="down/exec065.asm">程序1下载</a> <a href="down/Exec065.hex">程序1代码</a> 
  <a href="down/exec066.asm">程序2下载</a> <a href="down/Exec066.hex">程序2代码</a> <a href="down/exec067.asm">程序3下载</a> 
  <a href="down/Exec067.hex">程序3代码</a></P>
</BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -