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