在程序存储器中跨页边界
Crossing Page Boundaries in Program Memory
我需要汇编代码和程序内存位置的页面交叉方面的帮助。
ORG 0x500;
BCF pclath,4;
BSF pclath,3;
CALL sub1_p1;
.
.
.
ORG 0x900;
sub1 :
:
RETURN
如果我想在程序内存中跨页边界。比如第0页到第3页,我应该写什么代码?
PCLATH 寄存器的第 3 位和第 4 位决定页码!
示例:
BCF PCLATH,4 ;Select page0
BCF PCLATH,3 ;Select page0
CALL xpage0
...
BCF PCLATH,4 ;Select page 1
BSF PCLATH,3 ;Select page 1
CALL xpage1
...
BSF PCLATH,4 ;Select page2
BCF PCLATH,3 ;Select page2
CALL xpage2
...
BSF PCLATH,4 ;Select page 3
BSF PCLATH,3 ;Select page 3
CALL xpage3
...
较新的 PIC16xxx MCPU 使用特殊指令 MOVLP
。
示例:
MOVLP high HiProc2
CALL HiProc2
...
我需要汇编代码和程序内存位置的页面交叉方面的帮助。
ORG 0x500;
BCF pclath,4;
BSF pclath,3;
CALL sub1_p1;
.
.
.
ORG 0x900;
sub1 :
:
RETURN
如果我想在程序内存中跨页边界。比如第0页到第3页,我应该写什么代码?
PCLATH 寄存器的第 3 位和第 4 位决定页码!
示例:
BCF PCLATH,4 ;Select page0
BCF PCLATH,3 ;Select page0
CALL xpage0
...
BCF PCLATH,4 ;Select page 1
BSF PCLATH,3 ;Select page 1
CALL xpage1
...
BSF PCLATH,4 ;Select page2
BCF PCLATH,3 ;Select page2
CALL xpage2
...
BSF PCLATH,4 ;Select page 3
BSF PCLATH,3 ;Select page 3
CALL xpage3
...
较新的 PIC16xxx MCPU 使用特殊指令 MOVLP
。
示例:
MOVLP high HiProc2
CALL HiProc2
...