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

📄 pic16cxxx-7.htm

📁 PIC单片机C语言教程!绝对经典
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>
<head>
<title>PIC16Cxxx单片机应用与设计</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
BODY {font-size:12px;font-family:宋体;}
td {font-size:12px;font-family:宋体;}

A:link {	COLOR: #0000ff; TEXT-DECORATION: underline}
A:visited {	COLOR:#0000ff; TEXT-DECORATION: underline}
A:active {	COLOR:red! important; TEXT-DECORATION: underline}
A:hover {	TEXT-DECORATION: none}
.b24 a:link {	FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:visited {FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:active {	FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:hover {	FONT-SIZE: 12px; COLOR:#990000; TEXT-DECORATION: none}
.lh13 {	LINE-HEIGHT: 130%}
.lh15 {	LINE-HEIGHT: 150%}
.lh17 {	LINE-HEIGHT: 170%}
.lh19 {	LINE-HEIGHT: 190%}
.lh30 {	LINE-HEIGHT: 300%}
-->
</style>
</head>

<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" >

 
<table width="775" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr align="center">
    <td>&nbsp;</td>
  </tr>
  <tr align="center"> 
    <td> <table width="700" border="0" cellspacing="0" cellpadding="0">
        <tr> 
          <td width="41%" height="46" valign="top"><img src="logo.gif" width="205" height="41"></td>
          <td height="46" width="59%" valign="bottom" align="right"> <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr> 
                <td align="right"><b><font style="font-size:16px" color="#990000">—— 
                  —— —— 技术资料下载中心</font></b> </td>
              </tr>
              <tr> 
                <td height="8"></td>
              </tr>
            </table></td>
        </tr>
        <tr> 
          <td height="1" colspan="2"></td>
        </tr>
        <tr bgcolor="#990000"> 
          <td height="1" colspan="2"></td>
        </tr>
        <tr> 
          <td colspan="2">&nbsp;</td>
        </tr>
        <tr> 
          <td colspan="2"><font style="font-size:16px" color="#000000"><b>>> <a href="index.htm">PIC16CXXX单片机应用与设计</a> 
            \</b></font></td>
        </tr>
        <tr> 
          <td colspan="2">&nbsp;</td>
        </tr>
      </table>
      <table width="700" border="0" cellspacing="0" cellpadding="2"  class="lh15">
        <tr> 
          <td align="center"><b><font size="3">第七章 PIC16CXX指令系统</font><font size="3"></font></b></td>
        </tr>
        <tr> 
          <td> <p>&nbsp;</p></td>
        </tr>
        <tr valign="top"> 
          <td height="300"> PIC16CXX每条指令长14位,指令由操作码和操作数组成。PIC16CXX共有35条指令,由操作对象可分为:<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;1. 面向字节操作类<br> &nbsp;&nbsp;&nbsp;&nbsp;2. 
            面向位操作类<br> &nbsp;&nbsp;&nbsp;&nbsp;3. 常数操作和控制类操作。<br>
            全部指令如图7.1所示。<br> <img src="image/a308.gif" width="702" height="1261"> 
            注:(1)PIC16CXX有35条基本指令及二条附加指令,即TRIS和OPTION。在PIC16CXX中TRIS和OPTION寄存器是直接可寻址的,所以不必用这二条指令,保留它们只是为了和PIC16C5X向上兼容,即便于PIC16C5X代码向PIC16CXX的移植,见下节指令详介。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;(2)对I/O寄存器操作的指令,如&quot;MOVF 6,1&quot;,使用的F6(RB口)的值是RB口脚上的状态值,而非输出锁存器的值。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;(3)&quot;f&quot;代表寄存器,&quot;d&quot;代表目的寄存器,当d=0,操作结果放入W寄存器,d=1,则结果放入 
            f寄存器。&quot;b&quot;代表位(0~7),K代表一个8位或11位的常数。 
            <p>§7.1 PIC16CXX 指令寻址方式<br>
              <br>
              &nbsp;&nbsp;&nbsp;&nbsp;PIC16XX单片机寻址方式根据操作数的来源,要分为寄存器间接寻址、立即数寻址、直接寻址和位寻址四种。<br>
              <br>
              一、寄存器间接寻址<br>
              &nbsp;&nbsp;&nbsp;&nbsp;这种寻址方式通过寄存器F0、F4来实现。实际的寄存器地址放在F4的低5位中,通过F0来进行间接寻址。</p>
            <p align="center"><img src="image/a309.gif" width="356" height="87"></p>
            &nbsp;&nbsp;&nbsp;&nbsp; <p>上面这段程序把55H送入F5寄存器。间址寻址方式主要用于编写查表、写表程序,非常方便。请参考程序设计技巧。<br>
              <br>
              二、立即数寻址<br>
              &nbsp;&nbsp;&nbsp;&nbsp;这种方式就是操作数为立即数,可直接从指令中获取。</p>
            <p><img src="image/a310.gif" width="316" height="22"></p>
            <p>三、直接寻址<br>
              &nbsp;&nbsp;&nbsp;&nbsp;这种方式是对任何一寄存器直接寻址访问。<br>
              <img src="image/a312.gif" width="310" height="43"> </p>
            <p>四、位寻址<br>
              &nbsp;&nbsp;&nbsp;&nbsp;这种寻址方式是对寄存器中的任一位(bit)进行操作。</p>
            <p><img src="image/a313.gif" width="391" height="26"></p>
            <p> <br>
              §7.2 PIC16CXX 指令详介<br>
              <br>
              1. 立即数加法指令<br>
              格式: ADDLW K<br>
              <br>
              代码: <img src="image/a314.gif" width="190" height="59"><br>
              指令周期: 1<br>
              操作: W+K→W<br>
              影响状态位: C,DC,Z<br>
              说明: W寄存器的内容与8位立即数K相加,结果放入W寄存器。<br>
              例: ADDLW 60H ; W+60H→W<br>
              ───────────────────────────</p>
            <p>2. 寄存器加法指令</p>
            <p><br>
              格式: ADDWF f,d<br>
              <br>
              代码: <img src="image/a315.gif" width="171" height="60"><br>
              <br>
              指令周期: 1<br>
              操作: W+f→d<br>
              影响状态位: C,DC,Z<br>
              说明: W寄存器内容和f寄存器内容相加,结果存入f(d=1)或W(d=0)<br>
              例: ADDWF 8,0 ; F8+W→W<br>
              ADDWF 8,1 ; F8+W→F8<br>
              ───────────────────────────</p>
            <p>3. 立即数逻辑&quot;与&quot;指令<br>
              格式: ANDLW K<br>
              <br>
              代码:<img src="image/a316.gif" width="183" height="54"><br>
              <br>
              指令周期: 1<br>
              操作: W∧K→K<br>
              影响状态位: Z<br>
              说明: W和8位立即数K相&quot;与&quot;,结果存入W。<br>
              例: ANDLW 55H,0 ; W∧55H→W<br>
              ───────────────────────────</p>
            <p>4. 寄存器逻辑&quot;与&quot;指令<br>
              格式: ANDWF f,d<br>
              <br>
              代码:<img src="image/a317.gif" width="161" height="61"><br>
              <br>
              指令周期: 1<br>
              操作: W∧f→d<br>
              影响状态位: Z<br>
              说明: W寄存器内容和f寄存器内容相&quot;与&quot;,结果放入W(d=0)或f(d=1)<br>
              例: ANDWF 8,0 ; W∧F8→W<br>
              ANDWF 8,1 ; W∧F8→F8<br>
              ───────────────────────────</p>
            <p>5. 位清零指令<br>
              格式: BCF f,b<br>
              <br>
              代码: <img src="image/a318.gif" width="156" height="53"><br>
              <br>
              指令周期: 1<br>
              操作: 0→f(b)<br>
              影响状态位: 无<br>
              说明: 将f寄存器的b位清为0。<br>
              例: BCF 8,0 ; 将F8的bit0清为0。<br>
              BCF 8,2 ; 将F8的bit2清为0。<br>
              ───────────────────────────<br>
              6. 位置&quot;1&quot;指令</p>
            <p>格式: BSF f,b<br>
              <br>
              代码: <img src="image/a319.gif" width="154" height="59"><br>
              <br>
              指令周期: 1<br>
              操作: 1→f(b)<br>
              影响状态位: 无<br>
              说明: 将f寄存器的b位置为1。<br>
              例: BSF 5,1 ; 将F5(RA口)的bit1(RA1)置为&quot;1&quot;。<br>
              ───────────────────────────</p>
            <p>7. 位测试,为&quot;0&quot;则跳指令<br>
              格式: BTFSC f,b<br>
              <br>
              代码: <img src="image/a320.gif" width="151" height="56"><br>
              <br>
              指令周期: 1或2(产生跳转为2)<br>
              操作: 如果f(b)=0则跳(PC+1→PC0<br>
              影响状态位: 无<br>
              说明: 测试f寄存器第b位,如f(b)=0则跳过下一条指令(PC+1→PC),否则顺序执行下<br>
              去。<br>
              例: ┌─ BTFSC 8,2 ; 测试F8的bit2<br>
              bit2=0 │跳 MOVF 5,0 ; bit2=1,执行这条指令<br>
              └─ INCF 9,1 ; bit2=0,则跳到这条指令。<br>
              ───────────────────────────<br>
              8. 位测试,为&quot;1&quot;则跳指令<br>
              格式: BTFSS f,b<br>
              <br>
              代码: <img src="image/a320.gif" width="151" height="56"><br>
              <br>
              指令周期: 1或2(产生跳转为2)<br>
              操作: 如果f(b)=1则跳(PC+1→PC)<br>
              影响状态位: 无<br>
              说明: 测试f寄存器的第b位,如位f(b)=1则跳过下一条指令,否则顺序执行下去。<br>
              <img src="image/a321.gif" width="409" height="70"> <br>
              ─────────────────────────── </p>
            <p>9. 子程序调用指令<br>
              格式: CALL K<br>
              <br>
              代码: <img src="image/a325.gif" width="197" height="57"><br>
              <br>
              指令周期: 2<br>
              操作: PC+1→堆栈,K→PC910,0) PCLATH(4,3)→PC912,11)<br>
              影响状态位: 无<br>
              说明: 子程序调用。首先将PC加1推入堆栈,然后将常数K(11位)→PC(10,0),同时<br>
              PCLATH(4,3)→PC(12,11),形成PC=子程序入口地址。<br>
              <img src="image/a326.gif" width="373" height="149"><br>
              ───────────────────────────</p>
            <p>10. 寄存器清零指令<br>
              格式: CLRF f<br>
              <br>
              代码:<img src="image/a327.gif" width="157" height="54"><br>
              <br>
              指令周期: 1<br>
              操作: 0→f<br>
              影响状态位: Z<br>
              说明: f寄存器被清为全零,状态位Z=1。<br>
              例: CLRF 9 ; F9=00H<br>
              ───────────────────────────</p>
            <p>11. W清零指令<br>
              格式: CLRW<br>
              <br>
              代码: <img src="image/a328.gif" width="181" height="58"><br>
              <br>
              指令周期: 1<br>
              操作: 0→W<br>
              影响状态位: Z<br>
              说明: W寄存器清全零,状态位Z=1。<br>
              例: CLRW ; W=00H<br>
              ───────────────────────────</p>
            <p>12. 看门狗计数器清零指令<br>
              格式: CLRWDT<br>
              <br>
              代码: <img src="image/a330.gif" width="156" height="57"><br>
              <br>
              指令周期: 1<br>
              操作: 00→WDT,0→WDT分频器<br>
              影响状态位: 1→TO,1→PD<br>
              说明: 清零WDT计数器,同时WDT分频器(如果欲分频倍数分配给WDT)也清为零。指<br>
              令执行后状态位TO=1,PD=1。<br>
              ───────────────────────────</p>
            <p>13. 寄存器取反指令<br>
              格式: COMF f,d<br>
              <br>
              代码: <img src="image/a331.gif" width="163" height="54"><br>
              <br>
              指令周期: 1<br>
              操作: f→d<br>
              影响状态位: Z<br>
              说明: f寄存器内容取反后送入W(d=0)或f本身(d=1)。<br>
              例: COMF 8,0 ; F8→W<br>
              COMF 8,1 ; F8→F8<br>
              ───────────────────────────<br>
              14. 寄存器减1指令<br>
              格式: DECF f,d<br>
              <br>
              代码: <img src="image/a332.gif" width="159" height="55"><br>
              <br>
              指令周期: 1<br>
              操作: f-1→d<br>
              影响状态位: Z<br>
              说明: F寄存器内容减1后送入W(d=0)或f(d=1)。<br>
              ───────────────────────────<br>
              15. 寄存器减1,结果为零则跳指令<br>
              格式: DECFSZ f,d<br>
              <br>
              代码: <img src="image/a333.gif" width="153" height="61"><br>
              <br>
              指令周期: 1或29跳则为2)<br>
              操作: f-1→d,结果为零则跳(PC+1→PC)<br>
              影响状态位: 无<br>
              说明: f寄存器内容减1存入W(d=0)或f(d=1)。如结果为0则跳过下一条指令(PC+1→PC)。<br>
              <img src="image/a334.gif" width="362" height="66"> <br>
              ───────────────────────────</p>
            <p>16. 无条件跳转指令<br>
              格式: GOTO K<br>
              <br>
              代码: <img src="image/a335.gif" width="186" height="54"><br>
              <br>
              指令周期: 2<br>
              操作: K→PC(10,0),PCLATH(4,3)→PC(12,11)<br>
              影响状态位: 无<br>
              说明: 无条件跳转,11位常数K→PC(10,0) PCLATH(4,3)→PC(12,11)。<br>
              <img src="image/a336.gif" width="380" height="96"> <br>
              ───────────────────────────</p>
            <p>17. 寄存器加1指令<br>
              格式: INCF f,d<br>

⌨️ 快捷键说明

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