;mpu: PIC12F509
;CALL指令仅限于调用前半页的子函数。goto指令能跳转到一页的任何地方。
;如果要调用分布在程序页中任意地方的函数,可使用这样的方法:
org 0x00 ;第0页
goto Start
;---------------------------------------
DoSomething_1:
... ...
retlw 0x00
Start:
call DoSomething_1;直接调用无需切换程序页
... ...
bsf STATUS,PA0 ;切换到函数DelayMs_V所在的程序页
call DelayMs_V
BCF STATUS,PA0 ;切换回第0页
... ...
bsf STATUS,PA0
call Domething_2_V
BCF STATUS,PA0
;------------------------------------------------------
org 0x200 ;第1页
;如果要调用分布在程序页中任意地方的函数,可使用这样的方法,call间接调用DelayMs函数
DelayMs_V: goto DelayMs ;goto可以跳转到一个程序页的任何地方
DoSomething_2_V: GOTO DoSomething_2
;---------------------------------------
... ...
;----------------------------------------
DoSomething_2:
... ...
call DelayMs_V ;分布在同一页中的函数之间的调用不需要切换程序页。
... ...
retlw 0x00
;----------------------------------------
org 0x360
DelayMs:
... ...
retlw 0x00
;---------------------------------------------------
子函数最好不要跨页,不易于管理。
分布在同一页中的函数之间调用时不需要切换到该页。
分布在不同页中的函数之间调用时要先切换到被调用函数所在的程序页,函数调用结束在切换回之前的程序页。见上述例子。