zoukankan      html  css  js  c++  java
  • PIC单片机状态寄存器中的C(进位/借位位标志)

      查阅PIC单片机芯片手册,关于进位/借位位的说明为:

      C:进位/借位位。

       1 = 结果的最高位发生了进位

       0 = 结果的最高位未发生进位

       同时有一条标注:借位的极性是相反的。

      通过以上说明,可以将C的分析分为两种情况:

      1、加法:

       最高位发生了进位:C = 1;

       最高位未发生进位:C = 0;

      2、减法:

       最高位发生了借位:C = 0;

       最高位未发生借位:C = 1;

      为了加深理解,在MPLAB中写入一段代码,通过观测STATUS寄存器的值来测试以上分析:

     1 ;测试SUBWF、ADDWF指令与状态寄存器C标志位的关系
     2 
     3 LIST        P=16F684
     4 include     "P16F684.INC"
     5 
     6 Sub_Register_Small    EQU        20H
     7 Sub_Register_Large    EQU        21H
     8 Add_Register          EQU        22H
     9 Small_Status          EQU        23H    
    10 Large_Status          EQU        24H    
    11 Add_Status            EQU        25H    
    12 
    13 ;被减数 < 减数
    14 MOVLW        54H
    15 MOVWF        Sub_Register_Small
    16 MOVLW        66H
    17 SUBWF        Sub_Register_Small, F
    18 
    19 SWAPF        STATUS, W            ;保存状态寄存器值
    20 MOVWF        Small_Status
    21 SWAPF        Small_Status, F
    22 
    23 ;被减数 > 减数
    24 MOVLW        77H
    25 MOVWF        Sub_Register_Large
    26 MOVLW        66H
    27 SUBWF        Sub_Register_Large, F
    28 
    29 SWAPF        STATUS, W            ;保存状态寄存器值
    30 MOVWF        Large_Status
    31 SWAPF        Large_Status, F
    32 
    33 ;加法进位
    34 MOVLW        77H
    35 MOVWF        Add_Register
    36 MOVLW        0BBH
    37 ADDWF        Add_Register, F
    38 
    39 SWAPF        STATUS, W            ;保存状态寄存器值
    40 MOVWF        Add_Status
    41 SWAPF        Add_Status, F
    42 
    43 END

      启用仿真后,查看内存23H、24H、25H(保存的是以上三种操作后的STATUS)的值,结果如下:

         

      Small_Status  : 00011000B,对应C=0(最高位发生了借位)

      Large_Status : 00011011B,对应C=1(最高位未发生借位)

      Add_Status    : 00011011B,对应C=1(最高位发生了进位)

      为了简单便于记忆,可以把C的进/借位规则记为:加柴(1)做煎(减)蛋(0)!

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/xbook-ben/p/7543587.html
Copyright © 2011-2022 走看看