呼び出し方 †
MOVLW D'10' ; 10ms (10をWレジスタに入れて)
CALL WAIT_1msec_w ; サブルーチンをCALL
プログラム †
汎用メモリー確保 †
WAIT_COUNT EQU 0x50 ; 汎用1msecタイマー用 その1
WAIT_COUNT2 EQU 0x51 ; 汎用1msecタイマー用 その2
サブルーチン本体 †
WAIT_1msec_w
MOVWF WAIT_COUNT2 ; カウント数セット 1msec × n 回
WAIT_1msec_LOOP
; PICのクロック周波数によってカウント数を変える ※→
; CLK = 2MHz … 1cycle = 2μsec , COUNT = 25
; CLK = 4MHz … 1cycle = 1μsec , COUNT = 50
; CLK = 8MHz … 1cycle = 0.5μsec , COUNT =100
; CLK = 16MHz … 1cycle = 0.5μsec , COUNT =200
; CLK = 20MHz … 1cycle = 0.5μsec , COUNT =250
; 但しカウント数セットとreturnは除く(ゆえに、だいたいタイマー)
; 1m秒待ち部分
MOVLW D'50' ; カウント数セット ←※
MOVWF WAIT_COUNT
NOP ; 1cycle
NOP ; 1cycle
NOP ; 1cycle
NOP ; 1cycle
NOP ; 1cycle
NOP ; 1cycle
NOP ; 1cycle
NOP ; 1cycle
DECFSZ WAIT_COUNT,f ; スルー時 1cycle / Skip時 2cycle
GOTO $-9 ; 1cycle LOOP時には1回で10サイクル
DECFSZ WAIT_COUNT2,f
GOTO WAIT_1msec_LOOP
RETURN ; 2cycle