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

📄 dpjjx15.htm

📁 51单片机教程及源码
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<FONT FACE="System" LANG="ZH-CN">MOV&#9;A</font><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">R0&#9;&#9;&#9;;</FONT><FONT FACE="宋体" LANG="ZH-CN">从</FONT><FONT FACE="System" LANG="ZH-CN">R0</FONT><FONT FACE="宋体" LANG="ZH-CN">中取数(详见下面说明)</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">MOV&#9;B</font><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#2&#9;&#9;&#9;&#9;</font></P><P ALIGN="JUSTIFY">
<FONT FACE="System" LANG="ZH-CN">MUL&#9;A</font><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">B</FONT><FONT FACE="宋体" LANG="ZH-CN">&#9;&#9;&#9;</FONT><FONT FACE="System" LANG="ZH-CN">;A</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值乘</FONT><FONT FACE="System" LANG="ZH-CN">2</FONT><FONT FACE="宋体" LANG="ZH-CN">(详见下面的说明)</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">JMP&#9;A</font><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">@A+DPTR&#9;      ;</FONT><FONT FACE="宋体" LANG="ZH-CN">跳转</font></P></DIR>
</DIR>

<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">TAB:&#9;AJMP&#9;S1</font><FONT FACE="宋体" LANG="ZH-CN">&#9;&#9;&#9;</FONT><FONT FACE="System" LANG="ZH-CN">;</FONT><FONT FACE="宋体" LANG="ZH-CN">跳转表格</font></P><P ALIGN="JUSTIFY">
<FONT FACE="宋体" LANG="ZH-CN">&#9;</font><FONT FACE="System" LANG="ZH-CN">AJMP&#9;S2</font></P><FONT FACE="System" LANG="ZH-CN">
<P ALIGN="JUSTIFY">&#9;AJMP&#9;S3</P>
<P ALIGN="JUSTIFY">&#9;&#9;.</P>
<P ALIGN="JUSTIFY">&#9;&#9;.</P>
<P ALIGN="JUSTIFY">&#9;&#9;.</P>
</FONT> 
<table width="609" border="1" cellspacing="1" cellpadding="1" height="446">
  <tr> 
    <td rowspan="2" width="342">
      <p><img src="dpj1302.gif" width="338" height="398"></p>
      <p>&nbsp;</p>
      <p align="center">图2</p>
      </td>
    <td width="200"><img src="dpj1301.gif" width="99" height="126"></td>
  </tr>
  <tr> 
    <td width="200" height="330"> 
      <p><img src="dpj1303.gif" width="204" height="272"></p>
      <p align="center">图3</p>
    </td>
  </tr>
</table>
<P ALIGN="JUSTIFY">   <FONT FACE="宋体" LANG="ZH-CN">应用背景介绍:在单片机开发中,经常要用到键盘,见上面的</font><FONT FACE="System" LANG="ZH-CN">9</FONT><FONT FACE="宋体" LANG="ZH-CN">个按键的键盘。我们的要求是:当按下功能键</FONT><FONT FACE="System" LANG="ZH-CN">A………..G</FONT><FONT FACE="宋体" LANG="ZH-CN">时去完成不同的功能。这用程序设计的语言来表达的话,就是:按下不同的键去执行不同的程序段,以完成不同的功能。怎么样来实现呢?</font></P>
<P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">   看图</font><FONT FACE="System" LANG="ZH-CN">2</FONT><FONT FACE="宋体" LANG="ZH-CN">,前面的程序读入的是按键的值,如按下</FONT><FONT FACE="System" LANG="ZH-CN">'A'</FONT><FONT FACE="宋体" LANG="ZH-CN">键后获得的键值是</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">,按下</FONT><FONT FACE="System" LANG="ZH-CN">'B'</FONT><FONT FACE="宋体" LANG="ZH-CN">键后获得的值是</FONT><FONT FACE="System" LANG="ZH-CN">'1'</FONT><FONT FACE="宋体" LANG="ZH-CN">等等,然后根据不同的值进行跳转,如键值为</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">就转到</FONT><FONT FACE="System" LANG="ZH-CN">S1</FONT><FONT FACE="宋体" LANG="ZH-CN">执行,为</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">就转到</FONT><FONT FACE="System" LANG="ZH-CN">S2</FONT><FONT FACE="宋体" LANG="ZH-CN">执行。。。。如何来实现这一功能呢?</font></P>
<P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">   先从程序的下面看起,是若干个</font><FONT FACE="System" LANG="ZH-CN">AJMP</FONT><FONT FACE="宋体" LANG="ZH-CN">语句,这若干个</FONT><FONT FACE="System" LANG="ZH-CN">AJMP</FONT><FONT FACE="宋体" LANG="ZH-CN">语句最后在存储器中是这样存放的(见图</FONT><FONT FACE="System" LANG="ZH-CN">3</FONT><FONT FACE="宋体" LANG="ZH-CN">),也就是每个</FONT><FONT FACE="System" LANG="ZH-CN">AJMP</FONT><FONT FACE="宋体" LANG="ZH-CN">语句都占用了两个存储器的空间,并且是连续存放的。而</FONT><FONT FACE="System" LANG="ZH-CN">AJMP&#9;S1</FONT><FONT FACE="宋体" LANG="ZH-CN">存放的地址是</FONT><FONT FACE="System" LANG="ZH-CN">TAB</FONT><FONT FACE="宋体" LANG="ZH-CN">,到底</FONT><FONT FACE="System" LANG="ZH-CN">TAB</FONT><FONT FACE="宋体" LANG="ZH-CN">等于多少,我们不需要知道,把它留给汇编程序来算好了。</font></P>
<P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">   下面我们来看这段程序的执行过程:第一句</font><FONT FACE="System" LANG="ZH-CN">MOV 
  DPTR</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#TAB</FONT><FONT FACE="宋体" LANG="ZH-CN">执行完了之后,</FONT><FONT FACE="System" LANG="ZH-CN">DPTR</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值就是</FONT><FONT FACE="System" LANG="ZH-CN">TAB</FONT><FONT FACE="宋体" LANG="ZH-CN">,第二句是</FONT><FONT FACE="System" LANG="ZH-CN">MOV 
  A</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">R0</FONT><FONT FACE="宋体" LANG="ZH-CN">,我们假设</FONT><FONT FACE="System" LANG="ZH-CN">R0</FONT><FONT FACE="宋体" LANG="ZH-CN">是由按键处理程序获得的键值,比如按下</FONT><FONT FACE="System" LANG="ZH-CN">A</FONT><FONT FACE="宋体" LANG="ZH-CN">键,</FONT><FONT FACE="System" LANG="ZH-CN">R0</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值是</FONT><FONT FACE="System" LANG="ZH-CN">0</FONT><FONT FACE="宋体" LANG="ZH-CN">,按下</FONT><FONT FACE="System" LANG="ZH-CN">B</FONT><FONT FACE="宋体" LANG="ZH-CN">键,</FONT><FONT FACE="System" LANG="ZH-CN">R0</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值是</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">,以此类推,现在我们假设按下的是</FONT><FONT FACE="System" LANG="ZH-CN">B</FONT><FONT FACE="宋体" LANG="ZH-CN">键,则执行完第二条指令后,</FONT><FONT FACE="System" LANG="ZH-CN">A</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值就是</FONT><FONT FACE="System" LANG="ZH-CN">1</FONT><FONT FACE="宋体" LANG="ZH-CN">。并且按我们的分析,按下</FONT><FONT FACE="System" LANG="ZH-CN">B</FONT><FONT FACE="宋体" LANG="ZH-CN">后应当执行</FONT><FONT FACE="System" LANG="ZH-CN">S2</FONT><FONT FACE="宋体" LANG="ZH-CN">这段程序,让我们来看一看是否是这样呢?第三条、第四条指令是将</FONT><FONT FACE="System" LANG="ZH-CN">A</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值乘</FONT><FONT FACE="System" LANG="ZH-CN">2</FONT><FONT FACE="宋体" LANG="ZH-CN">,即执行完第</FONT><FONT FACE="System" LANG="ZH-CN">4</FONT><FONT FACE="宋体" LANG="ZH-CN">条指令后</FONT><FONT FACE="System" LANG="ZH-CN">A</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值是</FONT><FONT FACE="System" LANG="ZH-CN">2</FONT><FONT FACE="宋体" LANG="ZH-CN">。下面就执行</FONT><FONT FACE="System" LANG="ZH-CN">JMP 
  @A+DPTR</FONT><FONT FACE="宋体" LANG="ZH-CN">了,现在</FONT><FONT FACE="System" LANG="ZH-CN">DPTR</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值是</FONT><FONT FACE="System" LANG="ZH-CN">TAB</FONT><FONT FACE="宋体" LANG="ZH-CN">,而</FONT><FONT FACE="System" LANG="ZH-CN">A+DPTR</FONT><FONT FACE="宋体" LANG="ZH-CN">后就是</FONT><FONT FACE="System" LANG="ZH-CN">TAB+2</FONT><FONT FACE="宋体" LANG="ZH-CN">,因此,执行此句程序后,将会跳到</FONT><FONT FACE="System" LANG="ZH-CN">TAB+2</FONT><FONT FACE="宋体" LANG="ZH-CN">这个地址继续执行。看一看在</FONT><FONT FACE="System" LANG="ZH-CN">TAB+2</FONT><FONT FACE="宋体" LANG="ZH-CN">这个地址里面放的是什么?就是</FONT><FONT FACE="System" LANG="ZH-CN">AJMP&#9;S2</FONT><FONT FACE="宋体" LANG="ZH-CN">这条指令。因此,马上又执行</FONT><FONT FACE="System" LANG="ZH-CN">AJMP&#9;&#9;S2</FONT><FONT FACE="宋体" LANG="ZH-CN">指令,程序将跳到</FONT><FONT FACE="System" LANG="ZH-CN">S2</FONT><FONT FACE="宋体" LANG="ZH-CN">处往下执行,这与我们的要求相符合。</font></P>
<P ALIGN="JUSTIFY">
<FONT FACE="宋体" LANG="ZH-CN">请大家自行分析按下键“</font><FONT FACE="System" LANG="ZH-CN">A</FONT><FONT FACE="宋体" LANG="ZH-CN">”、“</FONT><FONT FACE="System" LANG="ZH-CN">C</FONT><FONT FACE="宋体" LANG="ZH-CN">”、“</FONT><FONT FACE="System" LANG="ZH-CN">D</FONT><FONT FACE="宋体" LANG="ZH-CN">”</FONT><FONT FACE="System" LANG="ZH-CN">……</FONT><FONT FACE="宋体" LANG="ZH-CN">之后的情况。</font></P>
<P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">   这样我们用</font><FONT FACE="System" LANG="ZH-CN">JMP&#9;@A+DPTR</FONT><FONT FACE="宋体" LANG="ZH-CN">就实现了按下一键跳到相应的程序段去执行的这样一个要求。再问大家一个问题,为什么取得键值后要乘</FONT><FONT FACE="System" LANG="ZH-CN">2</FONT><FONT FACE="宋体" LANG="ZH-CN">?如果例程下面的所有指令换成</FONT><FONT FACE="System" LANG="ZH-CN">LJMP</FONT><FONT FACE="宋体" LANG="ZH-CN">,即:</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">LJMP&#9;S1,LJMP&#9;&#9;S2……</font><FONT FACE="宋体" LANG="ZH-CN">这段程序还能正确地执行吗?如果不能,应该怎么改?</font></P></BODY>
</HTML>

⌨️ 快捷键说明

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