新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC中檔單片機匯編指令詳解(6)

        PIC中檔單片機匯編指令詳解(6)

        作者: 時間:2016-11-19 來源:網絡 收藏
        立即數與控制操作指令

        SLEEP 單片機進入低功耗休眠模式

        本文引用地址:http://www.104case.com/article/201611/318564.htm

        語法形式:SLEEP

        操作數:無

        執行時間:一個指令周期

        執行過程:

        看門狗計數器清0

        看門狗計數器的預分頻器清0

        STATUS寄存器的“TO”標志位置1

        STATUS寄存器的“PD”標志位清0

        狀態標志影響: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個指令周期



        關鍵詞: PIC單片機匯編指

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 合作市| 通山县| 马尔康县| 桃园县| 寿光市| 白山市| 南岸区| 循化| 武乡县| 南召县| 泌阳县| 博白县| 滨州市| 富宁县| 广宁县| 安阳市| 太仓市| 香港 | 昌图县| 云阳县| 年辖:市辖区| 西安市| 辰溪县| 平陆县| 正蓝旗| 旺苍县| 新沂市| 共和县| 石城县| 兴安盟| 澄迈县| 酉阳| 新密市| 湟源县| 连云港市| 郯城县| 竹溪县| 三穗县| 宕昌县| 寻甸| 柏乡县|