當即數與控制操做指令編程
SLEEP 單片機進入低功耗休眠模式oop
語法形式:SLEEP.net
操做數:無設計
執行時間:一個指令週期索引
執行過程:ip
看門狗計數器清0get
看門狗計數器的預分頻器清0it
STATUS寄存器的「TO」標誌位置1程序設計
STATUS寄存器的「PD」標誌位清0cli
狀態標誌影響:TO PD
說明:SLEEP指令可讓單片機中止全部的工做進入低功耗休眠模式,在休眠模式下芯片的功耗降至最低。在休眠狀態下,單片機的主時鐘振盪器將中止,全部內部寄存器的內容保持不變,直到出現某一條件將單片機從休眠狀態下喚醒。
指令範例:
CALL PrepSleep ;關閉全部不須要的負載,準備進入休眠模式
SLEEP ;如今進入休眠模式
NOP ;喚醒後開始執行指令
CLRWDT 清除看門狗計數器
語法形式:CLRWDT
操做數:無
執行時間:一個指令週期
執行過程:
看門狗計數器清0
看門狗計數器的預分頻器清0
STATUS寄存器的「TO」標誌位置1
STATUS寄存器的「PD」標誌位置1
狀態標誌影響:TO PD
說明:若是芯片在編程燒寫時啓用了獨立的片上看門狗電路,則在程序運行的過程當中必須隔一段時間就執行這條清除看門狗的命令。若是過了足夠長的時間而沒有執行這條指令,到了看門狗計數器計數溢出時就會讓單片機產生復位,程序將會從復位地址處從新運行。PIC單片機的看門狗一旦被打開就不能經過軟件的方式關閉,在芯片休眠的時候照樣工做,故能夠做爲讓單片機退出休眠的一個條件。經過啓用看門狗能夠避免軟件死循環的故障。須要強調的是在一個好的程序設計中CLRWDT這條指令只在程序的主循環中出現一次,儘可能避免處處放置清看門狗指令,絕對不能把這條指令放到中斷服務程序中。
指令範例:
MainLoop:~~~ ;程序主循環
CLRWDT ;清看門狗
CALL KeyCheck ;檢查按鍵
CALL Display ;顯示刷新
GOTO MainLoop ;重複主循環體
RETLW 子程序結束返回並在W寄存器內賦一8位當即數
語法形式:RETLW k
操做數:k爲8位當即數
執行時間:2個指令週期
執行過程:彈出棧頂內容到PC
k→W
狀態標誌影響:無
說明:除了在子程序返回時從W寄存器帶出一個8位當即數外,其餘的執行狀況和指令「RETURN」徹底相同。該指令常常被用於查表功能中。
指令範例:
MOVF Index,W ;W中設定查表索引值(0~3)
CALL Lookup ;調用查表子程序
…… ;其餘指令
Lookup:ADDWF PCL,f ;對PC值做修改
RETLW ‘0’ ;返回0對應的ASCII碼
RETLW ‘1’ ;返回1對應的ASCII碼
RETLW ‘2’ ;返回2對應的ASCII碼
RETLW ‘3’ ;返回3對應的ASCII碼
RETFIE 中斷服務程序結束並返回
語法形式:RETFIE
操做數:無
執行時間:2個指令週期
執行過程:彈出棧頂內容到PC
INTCON寄存器的第7位GIE自動置1
狀態標誌影響:無
說明:該指令把硬件堆棧棧頂的內容(中斷髮生時的返回地址)彈送到程序計數器PC內,對堆棧的影響以下圖所示
和指令「RETURN」的情形基本相同,關鍵區別是該指令會把INTCON寄存器的第7位全局中斷使能位(GIE)置1(在響應中斷時該位自動清0)。而後返回到中斷髮生時的下一條指令處繼續運行。
指令範例:
MOVF status_temp,w ;準備恢復STATUS寄存器的內容
MOVWF STATUS ;STATUS寄存器被恢復
SWAPF w_temp,f ;準備恢復W寄存器內容
SWAPF w_temp,w ;W寄存器被恢復
RETFIE ;中斷返回並容許新的中斷響應
RETURN 子程序結束返回
語法形式:RETURN
操做數:無
執行時間:2個指令週期
執行過程:彈出棧頂內容到PC
狀態標誌影響:無
說明:該指令將棧頂的內容(子程序調用時的返回地址)彈送到程序計數器PC內。注意特殊寄存器PCLATH的內容不會所以改變。程序將會回到在子程序調用時的下一條指令處開始執行。
影響見該圖
指令範例:
CALL Dly4Tcy ;延時4個指令週期
…… ;其餘指令
Dly4Tcy:RETURN ;CALL和RETURN總共消耗4個指令週期