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

📄 dpjjx10.htm

📁 单片机入门教程.rar
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<TITLE>单片机第八课</TITLE>
</HEAD>
<BODY LINK="#0000ff" VLINK="#800080" bgcolor="#ffffff" background="../back.jpg">
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">单片机第八课(寻址方式与指令系统)</FONT></P>
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习</font><FONT FACE="System" LANG="ZH-CN">8051</FONT><FONT FACE="宋体" LANG="ZH-CN">的指令部份。</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">一、概述</FONT></P>
<P ALIGN="JUSTIFY"><font face="宋体">1、指令的格式</font></P>
<P ALIGN="JUSTIFY"><font face="宋体">我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,</font><font face="宋体">助记符格式,如MOV 
  P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。</font></P>
<P ALIGN="JUSTIFY"><font face="宋体">2、汇编</font></P>
<P ALIGN="JUSTIFY"><font face="宋体">我们写指令使用汇编格式,而计算机只懂机器码格式,所以要将我们写的汇编格式的指令转换为机器码格式,这种转换有两种方法:手工汇编和机器汇编。手工汇编实际上就是查表,因为这两种格式纯粹是格式不同,所以是一一对应的,查一张表格就行了。不过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机器汇编。</font></P>
<P ALIGN="JUSTIFY"><font face="宋体">二、寻址</font></P>
<P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">让我们先来复习一下我们学过的一些指令:</font><FONT FACE="System" LANG="ZH-CN">MOV 
  P1</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#0FFH</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">MOV 
  R7</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#0FFH</FONT><FONT FACE="宋体" LANG="ZH-CN">这些指令都是将一些数据送到相应的位置中去,为什么要送数据呢?第一个因为送入的数可以让灯全灭掉,第二个是为了要实现延时,从这里我们可以看出来,在用单片机的编程语言编程时,经常要用到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有</FONT><FONT FACE="System" LANG="ZH-CN">28</FONT><FONT FACE="宋体" LANG="ZH-CN">条指令(单片机共</FONT><FONT FACE="System" LANG="ZH-CN">111</FONT><FONT FACE="宋体" LANG="ZH-CN">条指令)。下面我们就从数据传递类指令开始吧。</font></P>
<P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">分析一下</font><FONT FACE="System" LANG="ZH-CN">MOV 
  P1</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#0FFH</FONT><FONT FACE="宋体" LANG="ZH-CN">这条指令,我们不难得出结论,第一个词</FONT><FONT FACE="System" LANG="ZH-CN">MOV</FONT><FONT FACE="宋体" LANG="ZH-CN">是命令动词,也就是决定做什么事情的,</FONT><FONT FACE="System" LANG="ZH-CN">MOV</FONT><FONT FACE="宋体" LANG="ZH-CN">是</FONT><FONT FACE="System" LANG="ZH-CN">MOVE</FONT><FONT FACE="宋体" LANG="ZH-CN">少写了一个</FONT><FONT FACE="System" LANG="ZH-CN">E</FONT><FONT FACE="宋体" LANG="ZH-CN">,所以就是“传递”,这就是指令,规定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是</FONT><FONT FACE="System" LANG="ZH-CN">0FFH</FONT><FONT FACE="宋体" LANG="ZH-CN">,而要送达的地方(目的地)就是</FONT><FONT FACE="System" LANG="ZH-CN">P1</FONT><FONT FACE="宋体" LANG="ZH-CN">这个寄存器。在数据传递类指令中,均将目的地写在指令的后面,而将源写在最后。</font></P>
<P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">这条指令中,送给</font><FONT FACE="System" LANG="ZH-CN">P1</FONT><FONT FACE="宋体" LANG="ZH-CN">是这个数本身,换言之,做完这条指令后,我们可以明确地知道,</FONT><FONT FACE="System" LANG="ZH-CN">P1</FONT><FONT FACE="宋体" LANG="ZH-CN">中的值是</FONT><FONT FACE="System" LANG="ZH-CN">0FFH</FONT><FONT FACE="宋体" LANG="ZH-CN">,但是并不是任何时候都可以直接给出数本身的。例如,在我们前面给出的延时程序例是这样写的:</font></P>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=607>
  <TR> 
    <TD WIDTH="50%" VALIGN="TOP" HEIGHT=84> 
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">MAIN</font><FONT FACE="宋体" LANG="ZH-CN">:&#9;</FONT> 
        <FONT FACE="System" LANG="ZH-CN">SETB P1.0 </FONT><FONT FACE="宋体" LANG="ZH-CN">    ;(1)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">   </font><FONT FACE="System" LANG="ZH-CN">LCALL 
        DELAY </FONT><FONT FACE="宋体" LANG="ZH-CN">;(2)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">    </font><FONT FACE="System" LANG="ZH-CN">CLR 
        P1.0 </FONT><FONT FACE="宋体" LANG="ZH-CN">    </FONT> <FONT FACE="宋体" LANG="ZH-CN">;(3)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">   </font><FONT FACE="System" LANG="ZH-CN">LCALL 
        DELAY </FONT><FONT FACE="宋体" LANG="ZH-CN">  ;(4)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">    </font><FONT FACE="System" LANG="ZH-CN">AJMP 
        MAIN </FONT><FONT FACE="宋体" LANG="ZH-CN">   ;(5)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">;以下子程序</FONT></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">DELAY</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT> 
        <FONT FACE="System" LANG="ZH-CN">MOV R7</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#250</FONT><FONT FACE="宋体" LANG="ZH-CN"> </FONT> 
        <FONT FACE="宋体" LANG="ZH-CN"> ;(6)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">D1</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT> 
        <FONT FACE="System" LANG="ZH-CN">MOV R6</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#250 
        </FONT><FONT FACE="宋体" LANG="ZH-CN">  ;(7)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">D2</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT> 
        <FONT FACE="System" LANG="ZH-CN">DJNZ R6</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">D2 
        </FONT><FONT FACE="宋体" LANG="ZH-CN">   ;(8)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">  </font> <FONT FACE="System" LANG="ZH-CN">DJNZ 
        R7</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">D1</FONT><FONT FACE="宋体" LANG="ZH-CN">   ;(9)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN"> </font> <FONT FACE="宋体" LANG="ZH-CN"> </FONT><FONT FACE="System" LANG="ZH-CN">RET 
        </FONT><FONT FACE="宋体" LANG="ZH-CN">       ;(10)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">  </font> <FONT FACE="System" LANG="ZH-CN">END 
        </FONT><FONT FACE="宋体" LANG="ZH-CN">    </FONT> <FONT FACE="宋体" LANG="ZH-CN">  ;(11)</FONT> 
      <P ALIGN="JUSTIFY"> 
      <P ALIGN="JUSTIFY">&nbsp; 
      <P ALIGN="JUSTIFY"> 
      <P ALIGN="JUSTIFY">&nbsp; 
      <P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">表1</FONT> 
    </TD>
    <TD WIDTH="50%" VALIGN="TOP" HEIGHT=84> 
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">MAIN</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT> 
        <FONT FACE="System" LANG="ZH-CN">SETB P1.0 </FONT><FONT FACE="宋体" LANG="ZH-CN">    ;(1)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN"> </font><font face="宋体" lang="ZH-CN">   </font><FONT FACE="System" LANG="ZH-CN">MOV 
        30H</font><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#255</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">    </font><FONT FACE="System" LANG="ZH-CN">LCALL 
        DELAY </FONT><FONT FACE="宋体" LANG="ZH-CN">;</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">    </font><FONT FACE="System" LANG="ZH-CN">CLR 
        P1.0 </FONT><FONT FACE="宋体" LANG="ZH-CN">    </FONT> <FONT FACE="宋体" LANG="ZH-CN">;(3)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN"> </FONT><font face="宋体" lang="ZH-CN">   </font> 
        <FONT FACE="System" LANG="ZH-CN">MOV 30H,#200</FONT></P>
      <P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">    </font><FONT FACE="System" LANG="ZH-CN">LCALL 
        DELAY </FONT><FONT FACE="宋体" LANG="ZH-CN">  ;(4)</font></P>
      <P ALIGN="JUSTIFY"> <FONT FACE="宋体" LANG="ZH-CN">    </font><FONT FACE="System" LANG="ZH-CN">AJMP 
        MAIN </FONT><FONT FACE="宋体" LANG="ZH-CN">   ;(5)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="宋体" LANG="ZH-CN">;以下子程序</FONT></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">DELAY</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT> 
        <FONT FACE="System" LANG="ZH-CN">MOV R7</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">30H</FONT><FONT FACE="宋体" LANG="ZH-CN"> </FONT> 
        <FONT FACE="宋体" LANG="ZH-CN"> ;(6)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">D1</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT> 
        <FONT FACE="System" LANG="ZH-CN">MOV R6</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">#250 
        </FONT><FONT FACE="宋体" LANG="ZH-CN">  ;(7)</font></P>
      <P ALIGN="JUSTIFY"><FONT FACE="System" LANG="ZH-CN">D2</font><FONT FACE="宋体" LANG="ZH-CN">:</FONT> 
        <FONT FACE="System" LANG="ZH-CN">DJNZ R6</FONT><FONT FACE="宋体" LANG="ZH-CN">,</FONT><FONT FACE="System" LANG="ZH-CN">D2 

⌨️ 快捷键说明

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