PIC16C5X單片機的狀態(tài)寄存器
該寄存器包含有ALU的算術狀態(tài)位,RESET狀態(tài)位、大于512字節(jié)程序存儲器的頁面預選位。
狀態(tài)寄存器f3可以用作目標寄存器。某些標志位通過相應的寫來設定,而另外一些位是不能通過指令來改變的。TO、PD位是不可寫的。因此一條指令對狀態(tài)寄存器執(zhí)行的結果會有所不同。例如CLR f3被除了TO和PD位之外的所有位清“0”,并把“Z”位置“1”,所以得到的狀態(tài)寄存器內容為“000UU100”,其中,U表示不變化。
建議用BCF、BSF或MOVWF指令來改變狀態(tài)寄存器的內容,這些指令只改變相應的位,而不影響其它狀態(tài)位。
其它影響狀態(tài)位的指令可參考指令系統(tǒng)的說明。
狀態(tài)寄存器包含8位數(shù)據(jù)位,其中低5位是狀態(tài)標志位,高3位中的最高位PA2未用。PA0和PA1是存儲器頁面選擇位,其結構如下表所示。
表1 狀態(tài)寄存器的結構 | |||||||
PA2 | PA1 | PA0 | TO | PD | Z | DC | C |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
下面我們介紹各位的意義。 [1].C(D0):進位/借位標志位。在執(zhí)行ADDWF和SUBWF指令時,最高位產生進位或借位時,C=“1”,在減法采用補碼運算。 [2].DC(D1):輔助進位位。當執(zhí)行ADDWF和SUBWF指令時,低4位產生進位或借位時,DC=“1”。 [3].Z(D2):零標志位。當算術操作結果為0時,Z="1"。 [4].PD(D3):低功耗標志位。上電或執(zhí)行CLR WDT指令時,PD=“1”。執(zhí)行SLEEP指令時,PD=“0”。 [5].TO(D4):WDT溢出標志位。當上電或執(zhí)行CLR WDT、SLEEP指令時,TO=“1”,WDT溢出時,TO=“0”。 [6].PA0,PA1(D5,6):程序存儲器頁面選擇位。對于PIC16C56單片機,PA0是程序存儲器頁面選擇位。PA1是通用讀寫位。在PA=0時,選擇0頁面,即000H-1FFH。PA0=1時,選中1頁,地址為200H-3FFH。 對于PIC16C57/58單片機,PA0、PA1是程序存儲器頁面選擇位。它們的值從00-11H分別選中0-3頁,即地址為000-1FFH、200H-3FFH、400H-5FFH、600H-7FFH。 [7].PA2(D7):通用讀寫位,未使用。 在復位時,PA2,PA1,PA0被清“0”,上電或執(zhí)行CLR WDT指令時,TO、PD都被置“1”,這兩位的變化如表2所示。上電復位時,Z、DC、C標志位狀態(tài)不定。在其它復位情況下(如WDT溢出)Z、DC、C狀態(tài)不變。上電復位TO、PD的狀態(tài)見表3。 |
表2 事件對TO、PD標志位的影響 | |||
事件 | TO | PD | 說明 |
上電 | 1 | 1 | 不影響PD標志位 |
WDT超時溢出 | 0 | X | |
SLEEP指令 | 1 | 0 | |
CLR WDT指令 | 1 | 1 |
表3 復位后TO、PD標志位的狀態(tài) | |||
TO | PD | 復位原因 | |
0 | 0 | WDT超時溢出使SLEEP喚醒 | |
0 | 1 | WDT超時溢出(不在SLEEP狀態(tài)時) | |
1 | 0 | MCLR加低電平使SLEEP喚醒 | |
1 | 1 | 上電時 | |
X | X | MCLR加低電平 |
ADDWF指令后,進位位C=1表示產生進位,執(zhí)行SUBWF指令后,進位位C=0表示借位,執(zhí)行ADDWF或SUBWF指令也將影響輔助進位位DC狀態(tài)。DC表示低半字節(jié)到高半字節(jié)的進位和借位。 |
評論