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