📄 定时-计数器实验2.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0047)http://www.onestudy.net/download/elec/dpj20.htm -->
<!-- saved from url=(0048)http://www.21icsearch.com/pmcu/dpjjx/dpjjx22.htm --><HTML><HEAD><TITLE>定时/计数器实验2</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb_2312-80">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY bgColor=#cccccc background="">
<P align=justify><FONT lang=ZH-CN face=宋体 size=3>定时</FONT><FONT
size=3>/</FONT><FONT lang=ZH-CN face=宋体 size=3>计数器实验</FONT><FONT
size=3>2</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体
size=3>前面我们做了定时器的实验,现在来看一看计数实验,在工作中计数通常会有两种要求:第一、将计数的值显示出来,第二、计数值到一定程度即中断报警。第一种如各种计数器、里程表,第二种如前面例中讲到的生产线上的计数。先看第一种吧。我们的硬件中是这样连线的:</FONT><FONT
size=3>324</FONT><FONT lang=ZH-CN face=宋体 size=3>构成的振荡器连到定时</FONT><FONT
size=3>/</FONT><FONT lang=ZH-CN face=宋体 size=3>计数器</FONT><FONT
size=3>1</FONT><FONT lang=ZH-CN face=宋体 size=3>的外部引脚</FONT><FONT
size=3>T1</FONT><FONT lang=ZH-CN face=宋体
size=3>上面,我们就利用这个来做一个计数实验,要将计数的值显示出来,当然最好用数码管了,可我们还没讲到这一部份,为了避免把问题复杂化,我们用</FONT><FONT
size=3>P1</FONT><FONT lang=ZH-CN face=宋体 size=3>口的</FONT><FONT
size=3>8</FONT><FONT lang=ZH-CN face=宋体 size=3>个</FONT><FONT
size=3>LED</FONT><FONT lang=ZH-CN face=宋体 size=3>来显示计到的数据。</FONT></P><FONT
lang=ZH-CN face=宋体 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 lang=ZH-CN face=宋体 size=3>在硬件上用线将</FONT><FONT
size=3>324</FONT><FONT lang=ZH-CN face=宋体 size=3>的输出与</FONT><FONT
size=3>T1</FONT><FONT lang=ZH-CN face=宋体 size=3>连通</FONT><FONT
size=3>(</FONT><FONT lang=ZH-CN face=宋体 size=3>印板上有焊盘</FONT><FONT
size=3>)</FONT><FONT lang=ZH-CN face=宋体 size=3>运行这种程序,注意将板按正确的位置放置(</FONT><FONT
size=3>LM324</FONT><FONT lang=ZH-CN face=宋体 size=3>放在左手边,</FONT><FONT
size=3>LED</FONT><FONT lang=ZH-CN face=宋体
size=3>排列是按从高位到低们排列)看到什么?随着</FONT><FONT size=3>324</FONT><FONT lang=ZH-CN
face=宋体 size=3>后接的</FONT><FONT size=3>LED</FONT><FONT lang=ZH-CN face=宋体
size=3>的闪烁,单片机的</FONT><FONT size=3>8</FONT><FONT lang=ZH-CN face=宋体
size=3>只</FONT><FONT size=3>LED</FONT><FONT lang=ZH-CN face=宋体
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 lang=ZH-CN face=宋体 size=3>
<P align=justify>。</P>
<P align=justify>。</P>
<P align=justify>。</P></FONT>
<P align=justify><FONT lang=ZH-CN face=宋体 size=3>这样的顺序在变呢?这就对了,这就是</FONT><FONT
size=3>TL0</FONT><FONT lang=ZH-CN face=宋体 size=3>中的数据。</FONT></P><FONT
lang=ZH-CN face=宋体 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 lang=ZH-CN face=宋体 size=3>上面这个程序完成的工作很简单,就是在每</FONT><FONT
size=3>6</FONT><FONT lang=ZH-CN face=宋体 size=3>个脉冲到来后取反一次</FONT><FONT
size=3>P1</FONT><FONT lang=ZH-CN face=宋体 size=3>。</FONT><FONT
size=3>0</FONT><FONT lang=ZH-CN face=宋体 size=3>,因此实验的结果应当是:</FONT><FONT
size=3>LM324</FONT><FONT lang=ZH-CN face=宋体 size=3>后接的</FONT><FONT
size=3>LED</FONT><FONT lang=ZH-CN face=宋体 size=3>亮、灭</FONT><FONT
size=3>6</FONT><FONT lang=ZH-CN face=宋体 size=3>次,则</FONT><FONT
size=3>P1</FONT><FONT lang=ZH-CN face=宋体 size=3>。</FONT><FONT
size=3>0</FONT><FONT lang=ZH-CN face=宋体 size=3>口所接</FONT><FONT
size=3>LED</FONT><FONT lang=ZH-CN face=宋体
size=3>亮或灭一次。这实际就是我们上面讲的计数器的第二种应用。</FONT></P><FONT lang=ZH-CN face=宋体 size=3>
<P align=justify>程序三:外部中断实验</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 lang=ZH-CN face=宋体 size=3>本程序的功能很简单,按一次按键</FONT><FONT
size=3>1</FONT><FONT lang=ZH-CN face=宋体 size=3>(接在</FONT><FONT
size=3>12</FONT><FONT lang=ZH-CN face=宋体 size=3>引脚上的)就引发一次中断0,取反一次</FONT><FONT
size=3>P1</FONT><FONT lang=ZH-CN face=宋体 size=3>。</FONT><FONT
size=3>0</FONT><FONT lang=ZH-CN face=宋体
size=3>,因此理论上按一下灯亮,按一下灯灭,但在实际做实验时,可能会发觉有时不“灵”,按了它没反应,但在大部份时候是对的,这是怎么回事呢?我们在讲解键盘时再作解释,这个程序本身是没有问题的。</FONT></P>
<P align=center><A href="http://www.onestudy.net/"><FONT
face=黑体>返回“一学网</FONT><FONT face="Times New Roman" color=#000000> </FONT><FONT
face="Times New Roman"><FONT color=#000000>www.</FONT><FONT
color=#ff0000>one</FONT><FONT color=#008000>study</FONT>.net</FONT><FONT
face=黑体> ”首页</FONT></A></P>
<P align=justify> </P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -