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)!