• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機人機接口模塊元器件選擇分析

    PIC單片機人機接口模塊元器件選擇分析

    作者: 時間:2012-09-13 來源:網絡 收藏

    總線結構采取數據線(8位)和指令線(2位)獨立分離的哈佛(Harvard)結構,這樣可使的指令速度得到提高。當一條指令在ALU中執行時,下一條指令己經被取出放到指令寄存器等待執行了。算術邏輯單元ALU和工作寄存器(W)承擔算術邏輯操作任務。

    本文引用地址:http://www.czjhyjcfj.com/article/170871.htm

      16C5X提供二級堆棧(Stack),所以子程序調用只有兩層,使用時一定要注意這點,否則程序運行時將失去控制。IGC5X內部有384bit~2KB的只讀程序存儲器,下面介紹其結構和堆棧,PICIGC5X程序存儲器結構如圖3所示。

      圖3 PIC16C5X程序存儲器結構

      從圖3可以看出,PIC程序存儲器采用分頁結構,每頁長0.5KB,因此PIC16C52程序存儲器在1頁之內,而PIC16C54和PICISC55程序存儲器容量為1頁,PICI6C56和PICI6C57的容量則分別為2頁和4頁。頁面地址由狀態寄存器B的第5位和第6位(PA0、PA1)確定。

      程序轉移時,在本頁內可直接進行,在需跨頁跳轉時(GOTO、CALL指令),則必須根據將要跳轉去的頁面,把f3中的PA0、PA1位置成相應的值。

      (3)相關指令。

      堆棧PICIGC5X設有兩層堆棧,堆棧1和堆棧2,供子程序調用。涉及堆棧操作的指令有兩條。

      ①CALL。

      在主程序中第一次執行CALL指令時,將PC值加1后推入堆棧1,堆棧1原有的內容則被推入堆棧2中。這時子程序中還可再做一次子程序嵌套,即再執行一次CALL指令。如果子程序調用多于二層時,堆棧中只存放最近的兩個返回地址。

      當執行一條CALL指令時,狀態寄存器F3中將頁面尋址位PA1、PA0置入PC的最高兩位(第11位和第10位),而PC的第9位總是被置為0,如圖4所示。

    圖4 PC值對應圖

      這意味著在PIC16C5X中,子程序起始地址只能放在每個程序存儲頁面的上半頁,即低地址的那一半(000~0FF、200~2FF、400~4FF、600~6FF)。

      調用子程序前必須先把F3中的PA0、PA1設置成該子程序所在的頁面地址,返回后再將其恢復成當前的頁面值,但如果這時子程序是在同一頁面,則可省去這一過程。

      ②RETLW。

      該指令把堆棧1的值寫入PC,同時還把堆棧2的值拷貝到堆棧1去。子程序總是返回到調用它時所在的位置,不管它處在什么頁面,也不管F3寄存器中的PA0、PA1此時指在什么頁面。

      但是執行RETLW(子程序返回)指令并不會改變F3中PA0、PA1的值,所以當從一次跨頁面的子程序調用返回時,不要忘了恢復F3中原先PA0和PA1值。

      由于堆棧和PC的寬度是相同的,所以可以在程序的任何位置執行一條CALL指令來調用子程序。但是對于跨頁面的調用,要小心處理B中的頁面地址位PA0和PA1。


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 客服| 台中市| 甘德县| 铜山县| 博野县| 盐山县| 宜兰市| 怀来县| 威海市| 台北县| 抚州市| 克拉玛依市| 隆德县| 阿荣旗| 苗栗县| 左贡县| 巫溪县| 水城县| 清丰县| 江川县| 夹江县| 夏邑县| 安化县| 资兴市| 陆丰市| 宜春市| 新密市| 沁源县| 延长县| 恭城| 望江县| 封开县| 邯郸县| 夏河县| 安仁县| 西青区| 肥东县| 永兴县| 伊川县| 赫章县| 阳东县|