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

📄 单片机第八课.htm

📁 单片机快速入门
💻 HTM
📖 第 1 页 / 共 2 页
字号:
lang=ZH-CN face=System>12M</FONT><FONT lang=ZH-CN face=宋体>的晶振的话,也就</FONT><FONT 
lang=ZH-CN face=System>1</FONT><FONT lang=ZH-CN 
face=宋体>个微秒时间了,一个字节又能有多少?</FONT></P>
<P align=justify><FONT lang=ZH-CN 
face=宋体>不对,如果这条指令只执行一次,也许无所谓,但一条指令如果执行上</FONT><FONT lang=ZH-CN 
face=System>1000</FONT><FONT lang=ZH-CN face=宋体>次,就是</FONT><FONT lang=ZH-CN 
face=System>1</FONT><FONT lang=ZH-CN face=宋体>毫秒,如果要执行</FONT><FONT lang=ZH-CN 
face=System>1000000</FONT><FONT lang=ZH-CN face=宋体>万次,就是</FONT><FONT lang=ZH-CN 
face=System>1S</FONT><FONT lang=ZH-CN 
face=宋体>的误差,这就很可观了,单片机做的是实时控制的事,所以必须如此“斤斤计较”。字节数同样如此。</FONT></P>
<P align=justify><FONT lang=ZH-CN 
face=宋体>再来提一个问题,现在我们已知,寻找操作数可以通过直接给的方式(立即寻址)和直接给出数所在单元地址的方式(直接寻址),这就够了吗?</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>看这个问题,要求从</FONT><FONT lang=ZH-CN 
face=System>30H</FONT><FONT lang=ZH-CN face=宋体>单元开始,取</FONT><FONT lang=ZH-CN 
face=System>20</FONT><FONT lang=ZH-CN face=宋体>个数,分别送入</FONT><FONT lang=ZH-CN 
face=System>A</FONT><FONT lang=ZH-CN face=宋体>累加器。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>就我们目前掌握的办法而言,要从</FONT><FONT lang=ZH-CN 
face=System>30H</FONT><FONT lang=ZH-CN face=宋体>单元取数,就用</FONT><FONT lang=ZH-CN 
face=System>MOV A</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT lang=ZH-CN 
face=System>30H</FONT><FONT lang=ZH-CN face=宋体>,那么下一个数呢?是</FONT><FONT lang=ZH-CN 
face=System>31H</FONT><FONT lang=ZH-CN face=宋体>单元的,怎么取呢?还是只能用</FONT><FONT 
lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT 
lang=ZH-CN face=System>31H</FONT><FONT lang=ZH-CN face=宋体>,那么</FONT><FONT 
lang=ZH-CN face=System>20</FONT><FONT lang=ZH-CN face=宋体>个数,不是得</FONT><FONT 
lang=ZH-CN face=System>20</FONT><FONT lang=ZH-CN 
face=宋体>条指令才能写完吗?这里只有</FONT><FONT lang=ZH-CN face=System>20</FONT><FONT 
lang=ZH-CN face=宋体>个数,如果要送</FONT><FONT lang=ZH-CN face=System>200</FONT><FONT 
lang=ZH-CN face=宋体>个或</FONT><FONT lang=ZH-CN face=System>2000</FONT><FONT 
lang=ZH-CN face=宋体>个数,那岂不要写上</FONT><FONT lang=ZH-CN face=System>200</FONT><FONT 
lang=ZH-CN face=宋体>条或</FONT><FONT lang=ZH-CN face=System>2000</FONT><FONT 
lang=ZH-CN face=宋体>条命令</FONT><FONT lang=ZH-CN face=System>?</FONT><FONT 
lang=ZH-CN 
face=宋体>这未免太笨了吧。为什么会出现这样的状况?是因为我们只会把地址写在指令中,所以就没办法了,如果我们不是把地址直接写在指令中,而是把地址放在另外一个寄存器单元中,根据这个寄存器单元中的数值决定该到哪个单元中取数据,比如,当前这个寄存器中的值是</FONT><FONT 
lang=ZH-CN face=System>30H</FONT><FONT lang=ZH-CN face=宋体>,那么就到</FONT><FONT 
lang=ZH-CN face=System>30H</FONT><FONT lang=ZH-CN face=宋体>单元中去取,如果是</FONT><FONT 
lang=ZH-CN face=System>31H</FONT><FONT lang=ZH-CN face=宋体>就到</FONT><FONT 
lang=ZH-CN face=System>31H</FONT><FONT lang=ZH-CN 
face=宋体>单元中去取,就可以解决这个问题了。怎么个解决法呢?既然是看的寄存器中的值,那么我们就可以通过一定的方法让这里面的值发生变化,比如取完一个数后,将这个寄存器单元中的值加</FONT><FONT 
lang=ZH-CN face=System>1</FONT><FONT lang=ZH-CN 
face=宋体>,还是执行同一条指令,可是取数的对象却不一样了,不是吗。通过例子来说明吧。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>   </FONT><FONT face=宋体>MOV 
R7,#20</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>   </FONT><FONT face=宋体>MOV 
R0,#30H</FONT></P>
<P align=justify><FONT face=宋体>LOOP:MOV A,@R0</FONT></P>
<P align=justify><FONT face=宋体></FONT><FONT lang=ZH-CN face=宋体>   </FONT><FONT 
face=宋体>INC R0</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>   </FONT><FONT face=宋体>DJNZ 
R7,LOOP</FONT></P>
<P align=justify><FONT lang=ZH-CN 
face=宋体>这个例子中大部份指令我们是能看懂的,第一句,是将立即数</FONT><FONT lang=ZH-CN 
face=System>20</FONT><FONT lang=ZH-CN face=宋体>送到</FONT><FONT lang=ZH-CN 
face=System>R7</FONT><FONT lang=ZH-CN face=宋体>中,执行完后</FONT><FONT lang=ZH-CN 
face=System>R7</FONT><FONT lang=ZH-CN face=宋体>中的值应当是</FONT><FONT lang=ZH-CN 
face=System>20</FONT><FONT lang=ZH-CN face=宋体>。第二句是将立即数</FONT><FONT lang=ZH-CN 
face=System>30H</FONT><FONT lang=ZH-CN face=宋体>送入</FONT><FONT lang=ZH-CN 
face=System>R0</FONT><FONT lang=ZH-CN face=宋体>工作寄存器中,所以执行完后,</FONT><FONT 
lang=ZH-CN face=System>R0</FONT><FONT lang=ZH-CN face=宋体>单元中的值是</FONT><FONT 
lang=ZH-CN face=System>30H</FONT><FONT lang=ZH-CN face=宋体>,第三句,这是看一下</FONT><FONT 
lang=ZH-CN face=System>R0</FONT><FONT lang=ZH-CN 
face=宋体>单元中是什么值,把这个值作为地址,取这个地址单元的内容送入</FONT><FONT lang=ZH-CN 
face=System>A</FONT><FONT lang=ZH-CN face=宋体>中,此时,执行这条指令的结果就相当于</FONT><FONT 
lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT 
lang=ZH-CN face=System>30H</FONT><FONT lang=ZH-CN 
face=宋体>。第四句,没学过,就是把</FONT><FONT lang=ZH-CN face=System>R0</FONT><FONT 
lang=ZH-CN face=宋体>中的值加</FONT><FONT lang=ZH-CN face=System>1</FONT><FONT 
lang=ZH-CN face=宋体>,因此执行完后,</FONT><FONT lang=ZH-CN face=System>R0</FONT><FONT 
lang=ZH-CN face=宋体>中的值就是</FONT><FONT lang=ZH-CN face=System>31H</FONT><FONT 
lang=ZH-CN face=宋体>,第五句,学过,将</FONT><FONT lang=ZH-CN face=System>R7</FONT><FONT 
lang=ZH-CN face=宋体>中的值减</FONT><FONT lang=ZH-CN face=System>1</FONT><FONT 
lang=ZH-CN face=宋体>,看是否等于</FONT><FONT lang=ZH-CN face=System>0</FONT><FONT 
lang=ZH-CN face=宋体>,不等于</FONT><FONT lang=ZH-CN face=System>0</FONT><FONT 
lang=ZH-CN face=宋体>,则转到标号</FONT><FONT lang=ZH-CN face=System>LOOP</FONT><FONT 
lang=ZH-CN face=宋体>处继续执行,因此,执行完这句后,将转去执行</FONT><FONT lang=ZH-CN face=System>MOV 
A</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT lang=ZH-CN 
face=System>@R0</FONT><FONT lang=ZH-CN face=宋体>这句话,此时相当于执行了</FONT><FONT 
lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT 
lang=ZH-CN face=System>31H</FONT><FONT lang=ZH-CN face=宋体>(因为此时的</FONT><FONT 
lang=ZH-CN face=System>R0</FONT><FONT lang=ZH-CN face=宋体>中的值已是</FONT><FONT 
lang=ZH-CN face=System>31H</FONT><FONT lang=ZH-CN face=宋体>了),如此,直到</FONT><FONT 
lang=ZH-CN face=System>R7</FONT><FONT lang=ZH-CN face=宋体>中的值逐次相减等于</FONT><FONT 
lang=ZH-CN face=System>0</FONT><FONT lang=ZH-CN face=宋体>,也就是循环</FONT><FONT 
lang=ZH-CN face=System>20</FONT><FONT lang=ZH-CN 
face=宋体>次为止,就实现了我们的要求:从</FONT><FONT lang=ZH-CN face=System>30H</FONT><FONT 
lang=ZH-CN face=宋体>单元开始将</FONT><FONT lang=ZH-CN face=System>20</FONT><FONT 
lang=ZH-CN face=宋体>个数据送入</FONT><FONT lang=ZH-CN face=System>A</FONT><FONT 
lang=ZH-CN face=宋体>中。</FONT></P>
<P align=justify><FONT lang=ZH-CN 
face=宋体>这也是一种寻找数据的方法,由于数据是间接地被找到的,所以就称之为间址寻址。注意,在间址寻址中,只能用</FONT><FONT 
lang=ZH-CN face=System>R0</FONT><FONT lang=ZH-CN face=宋体>或</FONT><FONT 
lang=ZH-CN face=System>R1</FONT><FONT lang=ZH-CN face=宋体>存放等寻找的数据。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>二、指令</FONT></P>
<OL>
  <P align=justify><FONT lang=ZH-CN face=宋体>
  <P align=justify></FONT>
  <LI><FONT lang=ZH-CN face=宋体>数据传递类指令</FONT> </LI></OL>
<OL>1) <FONT lang=ZH-CN face=宋体>以累加器为目的操作数的指令</FONT> 
  <P><FONT lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN 
  face=宋体>,</FONT><FONT lang=ZH-CN face=System>Rn</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN 
  face=宋体>,</FONT><FONT lang=ZH-CN face=System>direct</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN 
  face=宋体>,</FONT><FONT lang=ZH-CN face=System>@Ri</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN 
  face=宋体>,</FONT><FONT lang=ZH-CN face=System>#data</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=宋体>第一条指令中,</FONT><FONT lang=ZH-CN 
  face=System>Rn</FONT><FONT lang=ZH-CN face=宋体>代表的是</FONT><FONT lang=ZH-CN 
  face=System>R0-R7</FONT><FONT lang=ZH-CN face=宋体>。第二条指令中,</FONT><FONT 
  lang=ZH-CN face=System>direct</FONT><FONT lang=ZH-CN 
  face=宋体>就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数</FONT><FONT lang=ZH-CN 
  face=System>data</FONT><FONT lang=ZH-CN face=宋体>送到</FONT><FONT lang=ZH-CN 
  face=System>A</FONT><FONT lang=ZH-CN face=宋体>中。</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=宋体>下面我们通过一些例子加以说明:</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=System>MOV A</FONT><FONT lang=ZH-CN 
  face=宋体>,</FONT><FONT lang=ZH-CN face=System>R1 </FONT><FONT lang=ZH-CN 
  face=宋体>;将工作寄存器</FONT><FONT lang=ZH-CN face=System>R1</FONT><FONT lang=ZH-CN 
  face=宋体>中的值送入</FONT><FONT lang=ZH-CN face=System>A</FONT><FONT lang=ZH-CN 
  face=宋体>,</FONT><FONT lang=ZH-CN face=System>R1</FONT><FONT lang=ZH-CN 
  face=宋体>中的值保持不变。</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=System>MOV A,30H </FONT><FONT 
  lang=ZH-CN face=宋体>;将内存</FONT><FONT lang=ZH-CN face=System>30H</FONT><FONT 
  lang=ZH-CN face=宋体>单元中的值送入</FONT><FONT lang=ZH-CN face=System>A</FONT><FONT 
  lang=ZH-CN face=宋体>,</FONT><FONT lang=ZH-CN face=System>30H</FONT><FONT 
  lang=ZH-CN face=宋体>单元中的值保持不变。</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=System>MOV A,@R1 </FONT><FONT 
  lang=ZH-CN face=宋体>;先看</FONT><FONT lang=ZH-CN face=System>R1</FONT><FONT 
  lang=ZH-CN face=宋体>中是什么值,把这个值作为地址,并将这个地址单元中的值送入</FONT><FONT lang=ZH-CN 
  face=System>A</FONT><FONT lang=ZH-CN face=宋体>中。如执行命令前</FONT><FONT lang=ZH-CN 
  face=System>R1</FONT><FONT lang=ZH-CN face=宋体>中的值为</FONT><FONT lang=ZH-CN 
  face=System>20H</FONT><FONT lang=ZH-CN face=宋体>,则是将</FONT><FONT lang=ZH-CN 
  face=System>20H</FONT><FONT lang=ZH-CN face=宋体>单元中的值送入</FONT><FONT lang=ZH-CN 
  face=System>A</FONT><FONT lang=ZH-CN face=宋体>中。</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=System>MOV A,#34H </FONT><FONT 
  lang=ZH-CN face=宋体>;将立即数</FONT><FONT lang=ZH-CN face=System>34H</FONT><FONT 
  lang=ZH-CN face=宋体>送入</FONT><FONT lang=ZH-CN face=System>A</FONT><FONT 
  lang=ZH-CN face=宋体>中,执行完本条指令后,</FONT><FONT lang=ZH-CN 
  face=System>A</FONT><FONT lang=ZH-CN face=宋体>中的值是</FONT><FONT lang=ZH-CN 
  face=System>34H</FONT><FONT lang=ZH-CN face=宋体>。</FONT></P>
  <P align=justify><FONT lang=ZH-CN face=宋体></FONT>
  <P align=justify><FONT lang=ZH-CN face=宋体></FONT>2)<FONT lang=ZH-CN 
  face=宋体>以寄存器</FONT><FONT lang=ZH-CN face=System>Rn</FONT><FONT lang=ZH-CN 
  face=宋体>为目的操作的指令</FONT> 
  <P><FONT lang=ZH-CN face=System>MOV Rn,A</FONT></P></OL>
<P align=justify><FONT lang=ZH-CN face=宋体></FONT><FONT lang=ZH-CN 
face=System></FONT><FONT lang=ZH-CN face=宋体>  </FONT><FONT lang=ZH-CN 
face=System>MOV Rn,direct</FONT></P>
<P align=justify><FONT lang=ZH-CN face=System></FONT><FONT lang=ZH-CN 
face=宋体>  </FONT><FONT lang=ZH-CN face=System>MOV Rn,#data</FONT></P>
<P align=justify><FONT lang=ZH-CN 
face=宋体>这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。</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>
<P align=justify><FONT lang=ZH-CN face=宋体> </FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体> </FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体> </FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体> </FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体> </FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体> </FONT></P></BODY></HTML>

⌨️ 快捷键说明

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