機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
PIC16F87x的數(shù)據(jù)存儲器規(guī)劃和中斷編程
PIC16F87x的數(shù)據(jù)存儲器規(guī)劃和中斷編程
 更新時間:2008-8-19 13:17:36  點擊數(shù):62
【字體: 字體顏色
中斷。PIC單片機(jī)中采用的是硬件堆棧結(jié)構(gòu),不占用程序存儲器空間,也不占用數(shù)據(jù)存儲器空間,同時也無需用戶去操作堆棧指針;但同時也就決定了它不具備其他單片機(jī)指令系統(tǒng)中的壓棧(PUSH)和出棧(POP)指令。實現(xiàn)中斷現(xiàn)場保護(hù)時,不能用堆棧來實現(xiàn),而是通過變量的復(fù)制備份來實現(xiàn)。一般的實現(xiàn)辦法是:先確定要保護(hù)的現(xiàn)場,一般包括WReg、STATUS等寄存器的內(nèi)容,然后在各個頁都定義與這些寄存器對應(yīng)的變量,以備份現(xiàn)場。發(fā)生中斷時,在中斷處理代碼開始處先將這些現(xiàn)場寄存器內(nèi)容復(fù)制到備份變量,退出中斷處理時再復(fù)制回去恢復(fù)現(xiàn)場:

  ORG 0x004 ;中斷向量人口
movwf w_temp ;保存當(dāng)前w 寄存器內(nèi)容
mov STATUS,w ;將STATUS 寄存器內(nèi)容復(fù)制到w
movwf status_temp ;保存STATUS寄存器內(nèi)容
movf PCLATH,w ;將PCLATH寄存器復(fù)制到w
movw{ pclath_temp ;保存PCLATH 器內(nèi)容
……
;中斷處理代碼放在這里
……
movf pclath_temp,w;
movwf PCLATH ;恢復(fù)PCLATH 寄存器內(nèi)容
movf status_temp,w;
movwf STATUS ;恢復(fù)STATUS寄存器內(nèi)容
swapf w_temp,f
swapf w_temp,w ;恢復(fù)w 寄存器內(nèi)容
retfie ;中斷返回

  因為中斷發(fā)生具有隨機(jī)性,發(fā)生中斷時當(dāng)前的頁是哪個也具有不確定性,所以只在某個頁(如BANK0)中定義一套備份變量w_temp、status_temp等,處理起來是很麻煩的,也要耗費CPU 處理時間,所以一般在每個頁BANK都定義了一套用于備份現(xiàn)場的變量。這顯然是浪費空間的辦法。

  進(jìn)行數(shù)據(jù)存儲器的變量規(guī)劃后,程序的執(zhí)行過程都是在BANK0,因此在BANK0定義一套備份變量就可以了。要備份的現(xiàn)場包含哪些寄存器,可以根據(jù)系統(tǒng)具體情況而定。

  基于上面設(shè)計的中斷處理程序,總是默認(rèn)當(dāng)前的頁是BANK0。如果在訪問一些不在BANK0的特殊寄存器而沒有關(guān)閉中斷,而剛好此時發(fā)生中斷,則此時不能正確訪問到wREG_TEMP等備份變量了,這種情況就是個錯誤。

結(jié)語

  用PIC16F87x單片機(jī)開發(fā)室內(nèi)監(jiān)控系統(tǒng),進(jìn)行變量的規(guī)劃,免去大量的頁選擇問題帶來的不便,能夠避免分頁沒處理好而帶來程序BUG。PIC系列單片機(jī)都有類似的硬件結(jié)構(gòu)和指令系統(tǒng),所以存儲器的規(guī)劃對于其他PIC系列單片機(jī)應(yīng)該也是起作用的。另外,這也從另一個角度說明,在設(shè)計階段對系統(tǒng)變量的物理存儲進(jìn)行適當(dāng)?shù)囊?guī)劃,有時會得到意想不到的效果。
上一頁  [1] [2] 
  • 上一篇: 用PIC16F87X單片機(jī)實現(xiàn)高分辨率頻率計的一種方法
  • 下一篇: PIC單片機(jī)A/D轉(zhuǎn)換數(shù)據(jù)存儲及串口效率
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1