?? dpjjx10.htm
字號:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<TITLE>單片機第八課</TITLE>
<style type="text/css">
td {font-family: "宋體"; font-size: 9pt; font-weight: normal}
a:link {color: #000099;font-size: 9pt; text-decoration: none}
a:visited {color: #65038e; font-size: 9pt; text-decoration: none}
a:hover {color: red; text-decoration: none}
</style>
</HEAD>
<BODY LINK="#0000ff" VLINK="#800080" bgcolor="#ffffff" background="../back.jpg">
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT LANG="ZH-CN" size="2">單片機第八課(尋址方式與指令系統)</FONT></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">通過前面的學習,我們已經了解了單片機內部的結構,并且也已經知道,要控制單片機,讓它為我們干學,要用指令,我們已學了幾條指令,但很零散,從現在開始,我們將要系統地學習8051的指令部份。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT LANG="ZH-CN" size="2">一、概述</FONT></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2">1、指令的格式</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2">我們已知,要讓計算機做事,就得給計算機以指令,并且我們已知,計算機很“笨”,只能懂得數字,如前面我們寫進機器的75H,90H,00H等等,所以指令的第一種格式就是機器碼格式,也說是數字的形式。但這種形式實在是為難我們人了,太難記了,于是有另一種格式,助記符格式,如MOV
P1,#0FFH,這樣就好記了。 這兩種格式之間的關系呢,我們不難理解,本質上它們完全等價,只是形式不一樣而已。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2">2、匯編</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2">我們寫指令使用匯編格式,而計算機只懂機器碼格式,所以要將我們寫的匯編格式的指令轉換為機器碼格式,這種轉換有兩種方法:手工匯編和機器匯編。手工匯編實際上就是查表,因為這兩種格式純粹是格式不同,所以是一一對應的,查一張表格就行了。不過手工查表總是嫌麻煩,所以就有了計算機軟件,用計算機軟件來替代手工查表,這就是機器匯編。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2">二、尋址</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">讓我們先來復習一下我們學過的一些指令:MOV
P1,#0FFH,MOV
R7,#0FFH這些指令都是將一些數據送到相應的位置中去,為什么要送數據呢?第一個因為送入的數可以讓燈全滅掉,第二個是為了要實現延時,從這里我們可以看出來,在用單片機的編程語言編程時,經常要用到數據的傳遞,事實上數據傳遞是單片機編程時的一項重要工作,一共有28條指令(單片機共111條指令)。下面我們就從數據傳遞類指令開始吧。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">分析一下MOV
P1,#0FFH這條指令,我們不難得出結論,第一個詞MOV是命令動詞,也就是決定做什么事情的,MOV是MOVE少寫了一個E,所以就是“傳遞”,這就是指令,規定做什么事情,后面還有一些參數,分析一下,數據傳遞必須要有一個“源”也就是你要送什么數,必須要有一個“目的”,也就是你這個數要送到什么地方去,顯然在上面那條指令中,要送的數(源)就是0FFH,而要送達的地方(目的地)就是P1這個寄存器。在數據傳遞類指令中,均將目的地寫在指令的后面,而將源寫在最后。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">這條指令中,送給P1是這個數本身,換言之,做完這條指令后,我們可以明確地知道,P1中的值是0FFH,但是并不是任何時候都可以直接給出數本身的。例如,在我們前面給出的延時程序例是這樣寫的:</font></P>
<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=607>
<TR>
<TD WIDTH="50%" VALIGN="TOP" HEIGHT=84>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">MAIN</font><font size="2"><FONT FACE="宋體" LANG="ZH-CN">:
</FONT>
<FONT LANG="ZH-CN">SETB P1.0 </FONT></font>
<font size="2" FACE="宋體" LANG="ZH-CN"> ;(1)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><FONT LANG="ZH-CN" size="2">LCALL
DELAY </FONT><font size="2" FACE="宋體" LANG="ZH-CN">;(2)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><font size="2"><FONT LANG="ZH-CN">CLR
P1.0 </FONT><FONT FACE="宋體" LANG="ZH-CN"> </FONT> </font>
<font size="2" FACE="宋體" LANG="ZH-CN">;(3)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><FONT LANG="ZH-CN" size="2">LCALL
DELAY </FONT><font size="2" FACE="宋體" LANG="ZH-CN"> ;(4)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><FONT LANG="ZH-CN" size="2">AJMP
MAIN </FONT><font size="2" FACE="宋體" LANG="ZH-CN"> ;(5)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<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" LANG="ZH-CN">DELAY</font><font size="2"><FONT FACE="宋體" LANG="ZH-CN">:</FONT>
<FONT LANG="ZH-CN">MOV R7</FONT><FONT FACE="宋體" LANG="ZH-CN">,</FONT><FONT LANG="ZH-CN">#250</FONT><FONT FACE="宋體" LANG="ZH-CN"> </FONT>
</font><font size="2" FACE="宋體" LANG="ZH-CN"> ;(6)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">D1</font><font size="2"><FONT FACE="宋體" LANG="ZH-CN">:</FONT>
<FONT LANG="ZH-CN">MOV R6</FONT><FONT FACE="宋體" LANG="ZH-CN">,</FONT><FONT LANG="ZH-CN">#250
</FONT></font><font size="2" FACE="宋體" LANG="ZH-CN"> ;(7)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">D2</font><font size="2"><FONT FACE="宋體" LANG="ZH-CN">:</FONT>
<FONT LANG="ZH-CN">DJNZ R6</FONT><FONT FACE="宋體" LANG="ZH-CN">,</FONT><FONT LANG="ZH-CN">D2
</FONT></font><font size="2" FACE="宋體" LANG="ZH-CN"> ;(8)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><font size="2">
<FONT LANG="ZH-CN">DJNZ
R7</FONT><FONT FACE="宋體" LANG="ZH-CN">,</FONT><FONT LANG="ZH-CN">D1</FONT></font><font size="2" FACE="宋體" LANG="ZH-CN"> ;(9)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><font size="2"> <FONT FACE="宋體" LANG="ZH-CN"> </FONT><FONT LANG="ZH-CN">RET
</FONT></font><font size="2" FACE="宋體" LANG="ZH-CN"> ;(10)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><font size="2">
<FONT LANG="ZH-CN">END
</FONT><FONT FACE="宋體" LANG="ZH-CN"> </FONT> <FONT FACE="宋體" LANG="ZH-CN"> ;(11)</FONT>
</font>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2"> </font>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2"> </font>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN">表1</font><font size="2"> </font>
</TD>
<TD WIDTH="50%" VALIGN="TOP" HEIGHT=84>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" LANG="ZH-CN">MAIN</font><font size="2"><FONT FACE="宋體" LANG="ZH-CN">:</FONT>
<FONT LANG="ZH-CN">SETB P1.0 </FONT></font>
<font size="2" FACE="宋體" LANG="ZH-CN"> ;(1)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" face="宋體" lang="ZH-CN"> </font><font size="2"><FONT LANG="ZH-CN">MOV
30H</font><FONT FACE="宋體" LANG="ZH-CN">,</FONT></font><font size="2" LANG="ZH-CN">#255</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font>
<FONT LANG="ZH-CN" size="2">LCALL
DELAY </FONT><font size="2" FACE="宋體" LANG="ZH-CN">;</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font><font size="2">
<FONT LANG="ZH-CN">CLR
P1.0 </FONT><FONT FACE="宋體" LANG="ZH-CN"> </FONT> </font>
<font size="2" FACE="宋體" LANG="ZH-CN">;(3)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" face="宋體" lang="ZH-CN"> </font><font size="2"> </font>
<font size="2" LANG="ZH-CN">MOV 30H,#200</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font>
<FONT LANG="ZH-CN" size="2">LCALL
DELAY </FONT><font size="2" FACE="宋體" LANG="ZH-CN"> ;(4)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2" FACE="宋體" LANG="ZH-CN"> </font>
<FONT LANG="ZH-CN" size="2">AJMP
MAIN </FONT><font size="2" FACE="宋體" LANG="ZH-CN"> ;(5)</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<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" LANG="ZH-CN">DELAY</font><font size="2"><FONT FACE="宋體" LANG="ZH-CN">:</FONT>
<FONT LANG="ZH-CN">MOV R7</FONT><FONT FACE="宋體" LANG="ZH-CN">,</FONT><FONT LANG="ZH-CN">30H</FONT><FONT FACE="宋體" LANG="ZH-CN"> </FONT>
</font><font size="2" FACE="宋體" LANG="ZH-CN"> ;(6)</font></P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -