程序存儲器(PROM)
HT48R05A-1程序存儲器容量為512x14位。程序存儲器是用于存放要執行的指令代碼的,包括中斷向量、數據,可由程序計數器或表格指針來尋址。
在程序存儲器中某幾個地址被保留作為特殊用途。
· 地址000H
此地址保留給程序初始化之用,當系統復位時,程序會從000H地址開始執行。
· 地址004H
此地址保留給外部中斷服務使用。當中斷是開放的,且堆棧未滿,則一旦INT端被下降沿觸發,就能產生中斷,程序從004H地址開始執行外部中斷服務程序。 |
 |
· 地址008H
此地址保留給定時/計數器中斷服務使用。當中斷是開放的,且堆棧未滿,則一旦定時/計數器溢出時,就能產生中斷,程序從008H地址開始執行中斷服務程序。
· 表格地址
ROM 中的任何地址都可被用來作為查表地址使用。查表指令為TABRDC[m]與TABRDL[m]。TABRDC[m]是查表當前頁的數據[1頁=256個字 節(word)]。TABRDL[m]是查表最后一頁的數據。[m]為數據存放的地址。在執行TABRDC[m]指令(或TABRDL[m]指令)后,將 會傳送當前頁(或最后一頁)的一個字節的低位字節到[m],而這個字的高位字節傳送到TBLH(08H)。只有表格中的低位字節被送到目的地址中。而表格 中的高位字節的其它位被傳送到TBLH的低部位,剩余的二位作為0讀出。TBLH為只讀寄存器,而表格指針(TBLP:07H)是可以讀寫的寄存器,用來 指明表格地址。在訪問表格以前。通過對TBLP寄存器賦值來指明表格地址,TBLH只能讀出而不能存儲。如果主程序和ISR(中斷服務程序)二者都使用查 表指令,那么在主程序中的TBLH的內容可能被ISR中的查表指令改變而發生錯誤。應該避免在主程序和ISR中同時使用查表指令。但是,如果主程序和 ISR二者都必須使用查表指令,那么中斷應該在查表指令前被禁止,直到TBLH被備份好。查表指令要花兩個指令周期來完成這一條指令的操作。按照用戶的需 要,這些區域可以作為正常的程序存儲器來使用。 |
| HT48R05A-1直流參數 |
| 指令 |
表格地址 |
| *8 |
*7 |
*6 |
*5 |
*4 |
*3 |
*2 |
*1 |
*0 |
| TABRDC[m] |
P8 |
@7 |
@6 |
@5 |
@4 |
@3 |
@2 |
@1 |
@0 |
| TABRDL[m] |
1 |
@7 |
@6 |
@5 |
@4 |
@3 |
@2 |
@1 |
@0 |
注:*8-*0:表格地震,P8:當前程序計數器,@7-@0:表格指針
堆棧寄存器(STACK)
堆 棧寄存器(STACK)是一個用來保存PC值的特殊存儲單元。HT48R05A-1的堆棧為2級,堆棧寄存器既不是數據存儲器的一部分,也不是程序存儲器 的一部分,而且它既不能讀,也不能寫。任何一級堆棧的使用是由堆棧指針(SP)來確定。堆棧指針也不能寫入和讀出。一旦發生子程序調用或中斷響應時,程序 計數器(PC)的值會壓入堆棧。在子程序調用結束或從子程序返回時,通過執行一條返回指令(RET或RETI),堆棧將原先壓入堆棧的內容彈出,重新裝入 程序計數器(PC)中。在系統復位后,堆棧指針會指向堆棧頂部。
如果堆棧已滿,并且發生了不可屏蔽的中斷,那么中斷請求標志將會 被記錄下來,但是,該中斷的響應還是會被禁止,直到堆棧指針(由RET或RETI)發生遞減時,中斷才會響應。這個功能能防止堆棧溢出,使得程序員易于使 用這種結構。同樣地,堆棧已滿,接著又執行一個子程序調用(CALL),那么堆棧會產生溢出,而使首先進入堆棧的內容將會丟失,只有最后的兩個返回地址會 被保留。 |