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