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

📄 pic21.htm

📁 pic单片机原理
💻 HTM
📖 第 1 页 / 共 4 页
字号:
              2F AF 7F FF 0<font face="宋体">块</font> 1<font face="宋体">块</font></p>
            <p align="justify" class="lh15">2<font face="宋体">.专用功能寄存器</font></p>
            <p align="justify" class="lh15">CPU<font face="宋体">和外设使用专用寄存器以控制器件的操作。专用寄存是静态</font>RAM<font face="宋体">。下面介绍几个重要的专用寄存器</font></p>
            <p align="justify" class="lh15"><font face="宋体">①状态寄存器</font></p>
            <p align="justify" class="lh15"><font face="宋体">状态寄存器包含有</font>ALU<font face="宋体">(复术逻辑运算单元)的算术状态,复位状态和对数据存储器的块选择,与任何寄存器一样,状态寄存器可以作为任何指令的目的寄存器。如果状态寄存器作为某指令的目的寄存器</font> 
              <font face="宋体">,而那条指令要影响</font>Z<font face="宋体">、</font>DC<font face="宋体">,</font>C<font face="宋体">位的状态,则禁止写这三位。图</font>4<font face="宋体">-</font>4<font face="宋体">是</font> 
              <font face="宋体">状态寄存器及其状态。</font></p>
            <p align="justify" class="lh15">R<font face="宋体">/</font>W R<font face="宋体">/</font>W 
              R<font face="宋体">/</font>W R R R<font face="宋体">/</font>W R<font face="宋体">/</font>W 
              R<font face="宋体">/</font>W</p>
            <p align="justify" class="lh15">IRP RP1 RP0 TO PD Z DC C bit7 bit0</p>
            <p align="justify" class="lh15"><font face="宋体">其中</font>C<font face="宋体">是进位位,对</font>ADDWF<font face="宋体">和</font>ADDLW<font face="宋体">指令,当这一位为</font>1<font face="宋体">,表示指令</font> 
              <font face="宋体">运算的结果的最高有效位产生了进位输出。减法指令执行的是加第二</font> <font face="宋体">操作数的新码。对于循环指令(</font>RRF<font face="宋体">,</font>RLF<font face="宋体">),这一位即可以来自于源寄存器的高位,也可以来自于低位。如果这一位为</font>0<font face="宋体">,表明结果的最高有效位没有产生进位输出。对于减法,这一位的极性取反。</font>DC<font face="宋体">是数字进位或数字借位位。当这一位为</font>1<font face="宋体">时,结果的</font>D3<font face="宋体">位向</font>D4<font face="宋体">位有进位,否则无进位。对于减法,这位的极性取反。</font>Z<font face="宋体">是结果为</font>0<font face="宋体">标志。当这一位为</font>1<font face="宋体">时,表明算术运算和逻辑运算的结果为</font>0<font face="宋体">,否则这一位为</font>0<font face="宋体">,表明运算结果不为</font>0<font face="宋体">。</font>PD<font face="宋体">:低功耗位。当这一位为</font>1<font face="宋体">表明电源加上按正常供电或执行了</font>C 
              LRWDT<font face="宋体">指令以后,这一位为</font>0<font face="宋体">表示执行了</font>SLEEP<font face="宋体">指令(即器件进入了低功</font> 
              <font face="宋体">耗状态)。</font>TO<font face="宋体">超时位。当这一位为</font>1<font face="宋体">时,表明电源加上,进入了正常供电,且执行了</font>CLRWDT<font face="宋体">和</font>SLEEP<font face="宋体">指令,这一位为</font>0<font face="宋体">表明产生了看门狗计时器超时。</font></p>
            <p align="justify" class="lh15">RP1<font face="宋体">:</font>RP0<font face="宋体">,作为直接寻址的数据存储器的块选择位。</font></p>
            <p align="justify" class="lh15">RP1<font face="宋体">:</font>RP<font face="宋体">=</font>00<font face="宋体">状态,选择</font>0<font face="宋体">块(地址</font>00H<font face="宋体">~</font>7FH<font face="宋体">)。</font></p>
            <p align="justify" class="lh15">RP1<font face="宋体">:</font>RP0<font face="宋体">=</font>01<font face="宋体">状态,选择</font>1<font face="宋体">块(地址</font>80H<font face="宋体">~</font>FFH<font face="宋体">)。</font></p>
            <p align="justify" class="lh15">RP1<font face="宋体">:</font>RP0<font face="宋体">=</font>10<font face="宋体">选择</font>2<font face="宋体">块(地址</font>100H<font face="宋体">~</font>17FH<font face="宋体">)。</font></p>
            <p align="justify" class="lh15">RP1<font face="宋体">:</font>RP0<font face="宋体">=</font>11<font face="宋体">选择</font>3<font face="宋体">块(地址</font>180H<font face="宋体">~</font>1FFH<font face="宋体">)。</font></p>
            <p align="justify" class="lh15"><font face="宋体">每块</font>128<font face="宋体">个字节,</font>PIC16C84<font face="宋体">只使用</font>RP0<font face="宋体">位,</font>RP1<font face="宋体">编程时设置为</font>0<font face="宋体">。不允许使用</font>RP1<font face="宋体">为通用读/写位,这可能影响与将来产品的兼容性。</font>IRP<font face="宋体">寄存器块选择位(作为间接寻址),当这一位设置为</font>0<font face="宋体">,选择</font> 
              0<font face="宋体">.</font>1<font face="宋体">块(地址</font>00H<font face="宋体">~</font>FFH<font face="宋体">),当这一位为</font>1<font face="宋体">时,选择</font>2<font face="宋体">.</font>3<font face="宋体">块(地址</font>100H<font face="宋体">~</font>1FFH<font face="宋体">)。</font>PIC16C84<font face="宋体">不使用</font>IRP<font face="宋体">位,</font>IRP<font face="宋体">位在编程时为</font>0<font face="宋体">。状态寄存器中的</font>Z<font face="宋体">、</font>DC<font face="宋体">,</font>C<font face="宋体">位是根据器件的逻辑来置</font>1<font face="宋体">或清</font>0<font face="宋体">。而</font>TO<font face="宋体">,</font>PD<font face="宋体">位是不可写入的。状态寄存器作为目的寄存器的指令的结果将有不同的内容。例如</font>CLRF 
              STATUS<font face="宋体">(清</font>0<font face="宋体">状态寄存器)。结果状态寄存器的内容为</font>000uuluu<font face="宋体">。其中</font>u<font face="宋体">表示不改变。只有</font>BCF<font face="宋体">,</font>BSF<font face="宋体">,</font>SWAPF<font face="宋体">和</font>MOVW 
              F<font face="宋体">这些指令可以用来改变</font>STATUS<font face="宋体">寄存器的内容,因为这几条指令不影响任何状态位。</font></p>
            <p align="justify" class="lh15"><font face="宋体">②</font>OPTION<font face="宋体">寄存器</font></p>
            <p align="justify" class="lh15">OPTION<font face="宋体">寄存器是可读,可写的寄存器,它包含了各种控制位以配</font> 
              <font face="宋体">置</font>TMRO<font face="宋体">/</font>WDT<font face="宋体">的预分频器,外部</font>INT<font face="宋体">中断,</font>TMRO<font face="宋体">和在</font>PORTB<font face="宋体">的微弱上拉。图</font>4<font face="宋体">-</font>5<font face="宋体">是</font>OPTION<font face="宋体">寄存器各位的功能。</font> 
              R<font face="宋体">/</font>W R<font face="宋体">/</font>W R<font face="宋体">/</font>W 
              R<font face="宋体">/</font>W R<font face="宋体">/</font>W R<font face="宋体">/</font>W 
              R<font face="宋体">/</font> W R<font face="宋体">/</font>W</p>
            <p align="justify" class="lh15">RBPU INTEDG TOCS TOSE PSA PS2 PS1 
              PS0 bit7 bit0</p>
            <p align="justify" class="lh15"><font face="宋体">其中</font>PS2<font face="宋体">,</font>PS1<font face="宋体">,</font>PS0<font face="宋体">为预分频器的值的选择。(与</font>PIC16C6X<font face="宋体">的规定</font> 
              <font face="宋体">相同)。</font>PSA<font face="宋体">位是将预分频器分配给</font>WDT<font face="宋体">(看门狗计时器,或</font>TMR0<font face="宋体">)。</font></p>
            <p align="justify" class="lh15">TOSE<font face="宋体">是为</font>TMRO<font face="宋体">选择跳变信号</font></p>
            <p align="justify" class="lh15">INTEDG<font face="宋体">是为</font>INT<font face="宋体">中断引脚选择跳变信号。</font></p>
            <p align="justify" class="lh15">RBPU<font face="宋体">用来打开或关闭</font>PORTB<font face="宋体">内部的上拉电阻。</font></p>
            <p align="justify" class="lh15">OPTION<font face="宋体">的所有位的定义同</font>PIC16C6X<font face="宋体">系列。</font></p>
            <p align="justify" class="lh15"><font face="宋体">③</font>INTCON<font face="宋体">寄存器</font></p>
            <p align="justify" class="lh15">INTCON<font face="宋体">是可读可写的寄存器,它包含了各中断源允许或禁止中断</font> 
              <font face="宋体">。图</font>4<font face="宋体">-</font>6<font face="宋体">是</font>PIC16C84<font face="宋体">的</font>INTCON<font face="宋体">寄存器</font></p>
            <p align="justify" class="lh15">R<font face="宋体">/</font>W R<font face="宋体">/</font>W 
              R<font face="宋体">/</font>W R<font face="宋体">/</font>W R<font face="宋体">/</font>W 
              R<font face="宋体">/</font>W R<font face="宋体">/</font>W R<font face="宋体">/</font>W</p>
            <p align="justify" class="lh15">GIE EEIE TOIE INTE RBIF TOIF INTIF 
              RB IF bit7 bit0</p>
            <p align="justify" class="lh15"><font face="宋体">其中</font>RBIF<font face="宋体">是</font>RB<font face="宋体">端口改变中断标志位。此位为</font>1<font face="宋体">,表明</font>RB<font face="宋体"><</font>7<font face="宋体">:</font>4<font face="宋体">>输入中至少有一位发生了改变,它必须用软件清</font>0<font face="宋体">这一位。否则为</font>0<font face="宋体">,即</font> 
              RB<font face="宋体"><</font>7<font face="宋体">:</font>4<font face="宋体">>输入中没有改变。</font> 
              ? ? ? ? ? INTIF<font face="宋体">是外部中断标志位。当这一位为</font>1<font face="宋体">时,表明有外部中断发生</font> 
              <font face="宋体">,它必须用软件将其清</font>0<font face="宋体">,否则为</font>0<font face="宋体">,表明没有外部中断发生。</font></p>
            <p align="justify" class="lh15">TOIF<font face="宋体">是</font>TMRO<font face="宋体">溢出中断标志。这一位为</font>1<font face="宋体">,表明</font>TMRO<font face="宋体">发生了溢出,必须由软件将这一位清</font>0<font face="宋体">,否则为</font>0<font face="宋体">,表明</font>TMRO<font face="宋体">没有溢出发生</font></p>
            <p align="justify" class="lh15">RBIE<font face="宋体">是</font>RB<font face="宋体">端口改变中断的允许或禁止位,设置此位为</font>1<font face="宋体">,允许中断,为</font>0<font face="宋体">禁止。</font></p>
            <p align="justify" class="lh15">INTE<font face="宋体">是</font>INT<font face="宋体">中断的允许或禁止位。设置为</font>1<font face="宋体">允许中断方式,为</font>0<font face="宋体">禁止</font> 
              <font face="宋体">。</font></p>
            <p align="justify" class="lh15">TOIE<font face="宋体">为</font>TMRO<font face="宋体">溢出中断的允许或禁止位。设置为</font>1<font face="宋体">允许</font>TMRO<font face="宋体">溢出中断,否则禁止。</font></p>
            <p align="justify" class="lh15">EEIE<font face="宋体">是</font>EE<font face="宋体">(电可擦除)的写完成中断的允许与禁止位。当设置为</font>1<font face="宋体">时,允许</font>EE<font face="宋体">写完成中断,否则禁止。</font></p>
            <p align="justify" class="lh15">GIE<font face="宋体">是所有中断的允许与禁止。设置为</font>1<font face="宋体">时,允许所有不可屏蔽中断,为</font>0<font face="宋体">禁止。</font></p>
            <p align="justify" class="lh15"><font face="宋体">四、</font>PCL<font face="宋体">和</font>PCLATH</p>
            <p align="justify" class="lh15"><font face="宋体">程序计数器(</font>PC<font face="宋体">)是</font>13<font face="宋体">位。低字节</font>PCL<font face="宋体">是可读,可写的寄存器。</font>PC<font face="宋体">的高字节(</font>PCH<font face="宋体">)不是直接可读,可写的。</font>PCLATH<font face="宋体">(</font>PC 
              latch high<font face="宋体">)</font> <font face="宋体">是作为</font>PC<font face="宋体"><</font>12<font face="宋体">:</font>8<font face="宋体">>的保持寄存器,这几位的内容被传送到程序计数器</font> 
              <font face="宋体">的高位。当程序计数器在执行</font>CALL<font face="宋体">,</font>GOTO<font face="宋体">或写</font>PCL<font face="宋体">等指令时,即向</font>PC<font face="宋体">装入新的值。</font>PC<font face="宋体">的高位由</font>PCLATH<font face="宋体">装入。</font></p>
            <p align="justify" class="lh15"><font face="宋体">具有</font>8<font face="宋体">个</font>13<font face="宋体">位宽度的硬件堆栈。堆栈空间它既不是程序存储器的一部分,也不是数据存储器的一个部分,堆栈的指针是不可读/写的。当执行</font>CALL<font face="宋体">指令或中断被响应时,整个</font>13<font face="宋体">位的</font>PC<font face="宋体">被压入堆栈。在执行</font>RETURN<font face="宋体">,</font>RETLW<font face="宋体">,</font>RETFIE<font face="宋体">等指令时,堆栈被弹出。</font>PUSH<font face="宋体">(压入)和</font>POP<font face="宋体">(弹出)不影响</font>PCLATH<font face="宋体">。</font></p>
            <p align="justify" class="lh15"><font face="宋体">堆栈是作为循环缓冲器。当堆栈被压入</font>38<font face="宋体">次后,第</font>9<font face="宋体">次压入将占据第一次压入的位置,第十次压入将占据第二次压入的位置,等等。同样当堆栈弹出第</font>9<font face="宋体">次时,与第一次弹出是一样的。注意,没有状态位来</font> 
              <font face="宋体">指明堆栈上溢式下溢的条件。没有</font>PUSH<font face="宋体">,</font>POP<font face="宋体">指令助记符,但</font>CALL<font face="宋体">,</font>R 
              ETURN<font face="宋体">,</font>RETLW<font face="宋体">,</font>RETFIE<font face="宋体">等指令的执行或中断发生,将实际发生压栈退栈。</font></p>
            <p align="justify" class="lh15">4<font face="宋体">-</font>2<font face="宋体">程序存储器的页</font></p>
            <p align="justify" class="lh15">PIC16C84<font face="宋体">具有</font>1K<font face="宋体">的程序存储器,</font>CALL<font face="宋体">,</font>GOTO<font face="宋体">指令只有</font>11<font face="宋体">位的地址范围,这</font>11<font face="宋体">位的地址范围允许分支在</font>2K<font face="宋体">程序存储器页大小的范围。</font></p>
            <p align="justify" class="lh15"><font face="宋体">为将来</font>PIC16C8X<font face="宋体">程序存储器的扩展,必须由另外两位来说明程序</font> 

⌨️ 快捷键说明

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