?? dpjjx12.htm
字號:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft FrontPage 5.0">
<TITLE>單片機指令(三)</TITLE>
</HEAD>
<BODY background="../back.jpg">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">單片機指令(三)</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>2</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>、累加器</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>與片外</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>之間的數據傳遞類指令</font></P>
<FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOVX A,@Ri</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOVX @Ri,A</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOVX	#9; A,@DPTR</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOVX @DPTR,A</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">說明:</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>1</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>)在</FONT><FONT SIZE=2>51</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中,與外部存儲器</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>打交道的只可以是</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>累加器。所有需要送入外部</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>的數據必需要通過</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>送去,而所有要讀入的外部</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的數據也必需通過</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>讀入。在此我們可以看出內外部</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>的區別了,內部</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>間可以直接進行數據的傳遞,而外部則不行,比如,要將外部</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中某一單元(設為</FONT><FONT SIZE=2>0100H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單元的數據)送入另一個單元(設為</FONT><FONT SIZE=2>0200H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單元),也必須先將</FONT><FONT SIZE=2>0100H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單元中的內容讀入</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,然后再送到</FONT><FONT SIZE=2>0200H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單元中去。</font></P>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>2)要讀或寫外部的</font><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,當然也必須要知道</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>的地址,在后兩條指令中,地址是被直接放在</FONT><FONT SIZE=2>DPTR</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的。而前兩條指令,由于</FONT><FONT SIZE=2>Ri</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>(即</FONT><FONT SIZE=2>R0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>或</FONT><FONT SIZE=2>R1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>)只是一個</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位的寄存器,所以只提供低</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位地址。因為有時擴展的外部</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>的數量比較少,少于或等于</FONT><FONT SIZE=2>256</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>個,就只需要提供</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位地址就夠了。</font><font size="2"></LI></font><FONT FACE="宋體" LANG="ZH-CN" SIZE=3></p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
3)使用時應當首先將要讀或寫的地址送入</FONT><FONT SIZE=2>DPTR</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>或</FONT><FONT SIZE=2>Ri</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中,然后再用讀寫命令。</font><font size="2"></LI></font><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P></font>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>例:將外部</font><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中</FONT><FONT SIZE=2>100H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單元中的內容送入外部</FONT><FONT SIZE=2>RAM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中</FONT><FONT SIZE=2>200H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單元中。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOV DPTR</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#0100H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOVX A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>@DPTR</font></P>
<FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOV DPTR,#0200H</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOVX @DPTR,A</P>
</FONT>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"> </p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font face="宋體" size="2">3、</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>程序存儲器向累加器</font><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>傳送指令</font><font size="2"></LI></font></p>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2> MOVC A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>@A+DPTR</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2> 本指令是將</font><B><I><FONT SIZE=2>ROM</font></i></B><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的數送入</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中。本指令也被稱為查表指令,常用此指令來查一個已做好在</FONT><B><I><FONT SIZE=2>ROM</font></i></B><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的表格</font></P>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
說明:</P></font>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
此條指令引出一個新的尋址方法:變址尋址。本指令是要在</font><FONT SIZE=2>ROM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>的一個地址單元中找出數據,顯然必須知道這個單元的地址,這個單元的地址是這樣確定的:在執行本指令立腳點</FONT><FONT SIZE=2>DPTR</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中有一個數,</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中有一個數,執行指令時,將</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>和</FONT><FONT SIZE=2>DPTR</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的數加起為,就成為要查找的單元的地址。</font><font size="2"></LI></font><FONT FACE="宋體" LANG="ZH-CN" SIZE=3></p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
</FONT>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>1)查找到的結果被放在</font><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中,因此,本條指令執行前后,</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的值不一定相同。</font><font size="2"></LI></font><FONT FACE="宋體" LANG="ZH-CN" SIZE=3></p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P></font>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2> 例:有一個數在</font><FONT SIZE=2>R0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中,要求用查表的方法確定它的平方值(此數的取值范圍是</FONT><FONT SIZE=2>0-5</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>)</font></P>
<DIR>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOV DPTR</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#TABLE</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOV A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>R0</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOVC A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>@A+DPTR</font></P>
<FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">.</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">.</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">TABLE:	DB 0,1,4,9,16,25</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>設</font><FONT SIZE=2>R0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的值為</FONT><FONT SIZE=2>2</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,送入</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中,而</FONT><FONT SIZE=2>DPTR</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的值則為</FONT><FONT SIZE=2>TABLE</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,則最終確定的</FONT><FONT SIZE=2>ROM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單元的地址就是</FONT><FONT SIZE=2>TABLE+2</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,也就是到這個單元中去取數,取到的是</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,顯然它正是</FONT><FONT SIZE=2>2</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>的平方。其它數據也可以類推。</font></P><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"><HR ALIGN="RIGHT" WIDTH="4%" SIZE=1><HR ALIGN="RIGHT" WIDTH="4%" SIZE=1><HR ALIGN="RIGHT" WIDTH="4%" SIZE=1></FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">標號的真實含義:從這個地方也可以看到另一個問題,我們使用了標號來替代具體的單元地址。事實上,標號的真實含義就是地址數值。在這里它代表了,</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>9</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>16</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>25</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>這幾個數據在</FONT><FONT SIZE=2>ROM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中存放的起點位置。而在以前我們學過的如</FONT><FONT SIZE=2>LCALL DELAY</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>指令中,</FONT><FONT SIZE=2>DELAY </FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>則代表了以</FONT><FONT SIZE=2>DELAY</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>為標號的那段程序在</FONT><FONT SIZE=2>ROM</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中存放的起始地址。事實上,</FONT><FONT SIZE=2>CPU</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>正是通過這個地址才找到這段程序的。</p>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"><HR ALIGN="RIGHT" WIDTH="4%" SIZE=1></FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">可以通過以下的例子再來看一看標號的含義:</p>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"><HR ALIGN="RIGHT" WIDTH="4%" SIZE=1></FONT>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"><FONT SIZE=2>MOV DPTR</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#100H</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -