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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM