;mpu: PIC12F509
;CALL指令僅限于調用前半頁的子函數(shù)。goto指令能跳轉到一頁的任何地方。
;如果要調用分布在程序頁中任意地方的函數(shù),可使用這樣的方法:
org 0x00 ;第0頁
goto Start
;---------------------------------------
DoSomething_1:
... ...
retlw 0x00
Start:
call DoSomething_1;直接調用無需切換程序頁
... ...
bsf STATUS,PA0 ;切換到函數(shù)DelayMs_V所在的程序頁
call DelayMs_V
BCF STATUS,PA0 ;切換回第0頁
... ...
bsf STATUS,PA0
call Domething_2_V
BCF STATUS,PA0
;------------------------------------------------------
org 0x200 ;第1頁
;如果要調用分布在程序頁中任意地方的函數(shù),可使用這樣的方法,call間接調用DelayMs函數(shù)
DelayMs_V: goto DelayMs ;goto可以跳轉到一個程序頁的任何地方
DoSomething_2_V: GOTO DoSomething_2
;---------------------------------------
... ...
;----------------------------------------
DoSomething_2:
... ...
call DelayMs_V ;分布在同一頁中的函數(shù)之間的調用不需要切換程序頁。
... ...
retlw 0x00
;----------------------------------------
org 0x360
DelayMs:
... ...
retlw 0x00
;---------------------------------------------------
子函數(shù)最好不要跨頁,不易于管理。
分布在同一頁中的函數(shù)之間調用時不需要切換到該頁。
分布在不同頁中的函數(shù)之間調用時要先切換到被調用函數(shù)所在的程序頁,函數(shù)調用結束在切換回之前的程序頁。見上述例子。