程序存储器(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),那么堆栈会产生溢出,而使首先进入堆栈的内容将会丢失,只有最后的两个返回地址会被保留。 |