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

📄 the02.htm

📁 sed2350de biancheng
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                <td width="28" bgcolor="#FFFFFF"> <p >&nbsp; </p></td>
                <td width="84" colspan="5" bgcolor="#FFFFFF"> <p >状态影响</p></td>
                <td width="70" colspan="3"  bgcolor="#FFFFFF"> <p >注</p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >0000 0000 0010 </p></td>
                <td width="42" > <p >002 </p></td>
                <td width="80" > <p >写OPTION寄存器 </p></td>
                <td width="101" > <p >OPTION - </p></td>
                <td width="186" colspan="4" > <p >W→OPTION register </p></td>
                <td width="84" colspan="5" > <p >无 </p></td>
                <td width="70" colspan="3" > <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >0000 0000 0011 </p></td>
                <td width="42" > <p >003 </p></td>
                <td width="80" > <p >进入睡眠状态 </p></td>
                <td width="101" > <p >SLEEP - </p></td>
                <td width="186" colspan="4" > <p >0→WDT,stop oscillator&nbsp; 
                  </p></td>
                <td width="84" colspan="5" > <p >TO,PD </p></td>
                <td width="70" colspan="3" > <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >0000 0000 0100 </p></td>
                <td width="42" > <p >004 </p></td>
                <td width="80"> <p >清除WDT计时器 </p></td>
                <td width="101" > <p >CLRWDT - </p></td>
                <td width="186" colspan="4" > <p >0→WDT(and prescaler,if assigned) 
                  </p></td>
                <td width="84" colspan="5" > <p >TO,PD </p></td>
                <td width="70" colspan="3" > <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >0000 0000 0fff </p></td>
                <td width="42" > <p >00f </p></td>
                <td width="80" > <p >设置I/O状态 </p></td>
                <td width="101"> <p >TRIS&nbsp;&nbsp; f </p></td>
                <td width="186" colspan="4" > <p >W→I/O control register f&nbsp; 
                  </p></td>
                <td width="84" colspan="5" > <p >无 </p></td>
                <td width="70" colspan="3" > <p >3 </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >1000 kkkk kkkk </p></td>
                <td width="42" > <p >8kk </p></td>
                <td width="80" > <p >子程序带参数返回 </p></td>
                <td width="101" > <p >RETLW&nbsp; k </p></td>
                <td width="186" colspan="4" > <p >k→W,Stack→PC&nbsp; </p></td>
                <td width="84" colspan="5" > <p >无 </p></td>
                <td width="70" colspan="3" > <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >1001 kkkk kkkk </p></td>
                <td width="42" > <p >9kk </p></td>
                <td width="80" > <p >调用子程序 </p></td>
                <td width="101" > <p >CALL&nbsp;&nbsp; k </p></td>
                <td width="186" colspan="4" > <p >PC+1→Stack,K→PC </p></td>
                <td width="84" colspan="5" > <p >无 </p></td>
                <td width="70" colspan="3"> <p >1 </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >101k kkkk kkkk </p></td>
                <td width="42" > <p >Akk </p></td>
                <td width="80" > <p >跳转(K为9位) </p></td>
                <td width="101" > <p >GOTO &nbsp;&nbsp;k </p></td>
                <td width="186" colspan="4" > <p >k→PC(9 bits)&nbsp; </p></td>
                <td width="84" colspan="5" > <p >无 </p></td>
                <td width="70" colspan="3"> <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >1100 kkkk kkkk </p></td>
                <td width="42" > <p >Ckk </p></td>
                <td width="80" > <p >常数置入W </p></td>
                <td width="101"> <p >MOVLW&nbsp; k </p></td>
                <td width="186" colspan="4" > <p >k→W </p></td>
                <td width="84" colspan="5" > <p >Z </p></td>
                <td width="70" colspan="3" > <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >1101 kkkk kkkk </p></td>
                <td width="42" > <p >Dkk </p></td>
                <td width="80" > <p >常数和W做或运算 </p></td>
                <td width="101" > <p >IORLW&nbsp; k </p></td>
                <td width="186" colspan="4" > <p >k∨W→W </p></td>
                <td width="84" colspan="5" > <p >Z </p></td>
                <td width="70" colspan="3" > <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >1110 kkkk kkkk </p></td>
                <td width="42" > <p >Ekk </p></td>
                <td width="80" > <p >常数和W做与运算 </p></td>
                <td width="101" > <p >ANDLW&nbsp; k </p></td>
                <td width="186" colspan="4"> <p >k∧W→W </p></td>
                <td width="84" colspan="5" > <p >Z </p></td>
                <td width="70" colspan="3"> <p >&nbsp; </p></td>
              </tr>
              <tr bgcolor="#FFFFFF"> 
                <td width="112" > <p >1111 kkkk kkkk </p></td>
                <td width="42" > <p >Fkk </p></td>
                <td width="80" > <p >常数和W做异或运算 </p></td>
                <td width="101" > <p >XORLW&nbsp; k </p></td>
                <td width="186" colspan="4" > <p >k○W→W </p></td>
                <td width="84" colspan="5" > <p >Z </p></td>
                <td width="70" colspan="3"> <p >&nbsp; </p></td>
              </tr>
              <tr height="0" bgcolor="#FFFFFF"> 
                <td width="101"> </td>
                <td width="38" > </td>
                <td width="72" > </td>
                <td width="90" > </td>
                <td width="73" > </td>
                <td width="63" > </td>
                <td width="6" > </td>
                <td width="25" > </td>
                <td width="6" > </td>
                <td width="13" > </td>
                <td width="6" > </td>
                <td width="19" > </td>
                <td width="31" > </td>
                <td width="6" > </td>
                <td width="31" > </td>
                <td width="25" > </td>
              </tr>
            </table>
            表2.1&nbsp;&nbsp; PIC12C5XX 指令集 
            <p  style="margin-left:52.45pt;text-indent:-52.45pt">&nbsp;&nbsp; 
              注:1、除GOTO指令外,任何有关写PC(F2)的指令(例如 CALL、MOVWF&nbsp; 2)都将会把PC寄存器的第9位清零。</p>
            <p  style="margin-left:52.45pt;text-indent:-52.45pt">&nbsp;&nbsp; 
                2、若对I/O口寄存器进行操作,如“SUBWF&nbsp;&nbsp; 6,1”,则使用的F6的值是当前GP口上的状态值,而非GP口输出锁存器里的值。</p>
            <p  style="margin-left:52.45pt;text-indent:-52.45pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              3、指令“TRIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6”将W寄存器中的内容写入GP的I/O口控制寄存器中:“1”关断对应端口的输出缓冲器,使其为输入(高阻)状态,“0”则使其为输出态。</p>
            <p  style="margin-left:52.45pt;text-indent:-52.45pt">&nbsp;    4、当预分频器(Prescaler)分配给TIMER0后,任何对TMR0寄存器(F1)写操作的指令都将使预分频器清零。</p>
            <p ><b><font size="2">§2.2&nbsp; PIC12C5XX 指令寻址方式&nbsp;</font></b></p>
            <p  >PIC12C5XX单片机寻址方式根据操作数的来源,可分为寄存器间接寻址、立即数寻址、直接寻址和位寻址四种。</p>
            <p >一、寄存器间接寻址</p>
            <p  >这种寻址方式通过寄存器F0(INDF)、F4(FSR)来实现。实际的寄存器地址放在FSR中,通过INDF来进行间接寻址。</p>
            <p >&nbsp;&nbsp;&nbsp; 例:<br>
              <br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              4<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              0<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVLW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              05H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; W=5<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVWF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              FSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; W(=5)→F4<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVLW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              55H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; W=55H<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVWF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              INDF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; W(=55H)→F5</p>
            <p  >上面这段程序把55H送入F5寄存器。间址寻址方式主要用于编写查表、写表程序,非常方便。请参考§2.7程序设计技巧。</p>
            <p >二、立即数寻址</p>
            <p >这种方式就是操作数为立即数,可直接从指令中获取。</p>
            <p >&nbsp;&nbsp;&nbsp;&nbsp; 例: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              MOVLW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; 16H →W</p>
            <p >三、直接寻址</p>
            <p  >这种方式是对任何一寄存器直接寻址访问。对PIC12C508,寄存器地址(5位)直接包括在指令中,对PIC12C509,寄存器地址中最高1位由FSR(F4)寄存器中的bit5决定,即体选位。</p>
            <p >&nbsp;&nbsp;&nbsp;&nbsp; 例:&nbsp;&nbsp;&nbsp;&nbsp; MOVWF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; W→F8寄存器</p>
            <p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              MOVF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,W&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; F8→W</p>
            <p >四、位寻址</p>
            <p  >这种寻址方式是对寄存器中的任一位(bit)进行操作。</p>
            <p >&nbsp;&nbsp;&nbsp;&nbsp; 例:&nbsp;&nbsp;&nbsp;&nbsp; BSF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              11,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
              ; 把F11的第0位置为“1”。&nbsp;&nbsp;</p>
            <p ><b><font size="2">§2.3&nbsp; 面向字节操作类指令</font></b>&nbsp;&nbsp;</p>
            <p class="lh15"  >这类指令共有18条,包括有数据传送、算术和逻辑运算、数据移位和交换等操作。它们的操作都是在W数据寄存器f之间进行,其指令码结构为:</p>
            <div align="center"> 
              <table border="1" cellspacing="0" cellpadding="0" >
                <tr style="height:18.45pt"> 
                  <td width="84" valign="bottom" class="lh15" > (11—6)</td>
                  <td width="63" valign="bottom" class="lh15" > (5)</td>
                  <td width="77" valign="bottom" class="lh15" > (4—0)</td>
                </tr>
                <tr style="height:18.45pt"> 
                  <td width="84" class="lh15" > OPCODE</td>
                  <td width="63" class="lh15" > d</td>
                  <td width="77" class="lh15" > f(File#)</td>
                </tr>
              </table>
              <span class="lh15"><br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
            <p class="lh15"  >高6位是指令操作码。第6位d是方向位。d=1,则操作结果存入f(数据寄存器),d=0,则操作结果存入W。低5位是数据寄存器地址,可选中32个寄存器。对于PIC12C509,则还要参考寄存器体选择器FSR的bit5选择存入哪一个寄存器体(bank0或bank1)。</p>
            <p class="lh15" >&nbsp;&nbsp;&nbsp;&nbsp;   1、寄存器加法指令</p>
            <p class="lh15" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

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