|
|
FJCニュ−ス7月号
今月は、12ビットコアは2スタックのため、サブルチンコールがあまりできません。
そこで、リターンを少なくするための、工夫 例の紹介です。
0ペ−ジのサブル−チンを他ペ−ジから呼び出せます。
14ビットコアでも800Hを超えるソフトにPCLATHを使って
応用できます。
;***************************
include 12c5xx.h
.12c509
.osc intrc ;内部RCクロック 4MHz
.mclre disable ;MCLR を 入力ポ−ト GP3 で使う
.wdt off
id 1412h
org 8h
cu1 ds 1
cu2 ds 1
gpbf ds 1
run_sw equ gpbf.3
w_cu ds 1 ;wait cunter
p2bf ds 1 ;ページー2時1その他0
sub_dt ds 1 ;ret アドレス バッファ
org 0
goto start
ingpio mov gpbf,gpio ;in gpio
nop
nop
nop
nop
nop
cjne gpbf,gpio,ingpio ;gpioのショ−トパルスの
;ノイズフィルタ−
jnb gpbf.2,lp1_1
mov sub_dt,#1
goto sub1 ;call sub1 不使用
lp1_1 jnb gpbf.3,lp1_2
mov sub_dt,#2
goto sub2 ;call sub2 不使用
lp1_2 jb p2bf.0,lp2 ;2ページ?
ret
lp2 setb pa0 ;ペ-ジ1からのCallでペ-ジ1にもどります。
ret
; サブルーチン を 使用しない 例
sub1 ;サブルーチン処理
sblp cje sub_dt,#1,lp1_1 ;ret しないで戻る。
cje sub_dt,#2,lp1_2
ret ;1,2以外はRET
sub2 ;サブルーチン処理
goto sblp
start mov w_cu,#20
;-------------- timer--------------
wait clr cu1
mov cu2,#4
wait1 nop
djnz cu1,wait1
djnz cu2,wait1
djnz w_cu,wait
mov !gpio,#101100b ; in out set
mov w,#000010b
option
main clr p2bf ;Page 0 prgram SET
call ingpio
jnb run_sw,run ;start sw ON
goto main
run ;ペ−ジ0プログラム
clr sub_dt
call sub2 ;SUB2単独CALL
;ペ−ジ0で書ききれないでペ−ジ1に移行
; page 2 jmp
setb p2bf.0 ;ペ−ジ 1 prgram
setb pa0
goto run_2a
org 200h
ingpio_1 clrb pa0
goto ingpio ;ペ−ジ0のingpio call
sub1_1 clrb pa0
goto sub1 ;ペ−ジ0の call
sub2_1 clrb pa0
goto sub2 ;ペ−ジ0の call
run_2a ;プログラムのつずき
call ingpio_1
;プログラム END
clr p2bf ;ペ−ジ 0 prgram
clrb pa0
goto main
http://homepage2.nifty.com/JG1FJC/
|
|