PIC单片机之16C84单片机介绍(一)
堆栈是作为循环缓冲器。当堆栈被压入38次后,第9次压入将占据第一次压入的位置,第十次压入将占据第二次压入的位置,等等。同样当堆栈弹出第9次时,与第一次弹出是一样的。注意,没有状态位来 指明堆栈上溢式下溢的条件。没有PUSH,POP指令助记符,但CALL,R ETURN,RETLW,RETFIE等指令的执行或中断发生,将实际发生压栈退栈。
4-2程序存储器的页
PIC16C84具有1K的程序存储器,CALL,GOTO指令只有11位的地址范围,这11位的地址范围允许分支在2K程序存储器页大小的范围。
为将来PIC16C8X程序存储器的扩展,必须由另外两位来说明程序 存储器的页。这些页位来自于PCLATH4:3>。当执行CALL、GOTO指令时,用户必须确保这些页位的编程等指向要求的程序存储器的页。
如果执行CALL指令,整个13位被压入堆栈。所以对于返回指令不要求 对PCLATH4:3>位的管理。因为PC的值将会由退栈而获得。注意:PIC16C84忽略了PCLATH4:3>位,这些位用于程序存储页1,2,3(0800H-1FFFH),不可以把PIC16C84的PCLATH4:3>位用作通用读/写位,这会影响将来产品的向上兼容。
4-3间接寻址,INDF和FSR的作用
INDF寄存器不是物理寄存器,只是被用来与FSR寄存器连接以执行间接寻址。
使用INDF寄存器,就可以实现间接寻址。
使用INDF寄存器的任何指令,实际寻址数据是由文件选择寄存器(FSR)所决定的。读INDF自身(FSR=0),将产生00H。向INDF写,结果无操作(显然可以提供状态位)。8位FSR寄存器同状态寄存器STATUS7>(IRP)组合可以得到9位地址。
然而PIC16C84是不用IRP的。使用下面的例程序,通过间接寻址清零。2OH~2FH单位。
MOVLW 20H ;初始化RAM的指针
MOVF FSR ;到FSR
NEXT CLRF INDF ;通过间接寻址清0,由FSR的内容所指问的寄存器。
INCF FSR ;(FSR)+1→FSR
BIFSS FSR,4;当FSR的第4位为1跳过下一条指令
GOTO NEXT ;否则入。
存储器相关文章:存储器原理
评论