;------------タイマーループ用固定変数----------------
GPR1 EQU 0Ch ;GPRの1バイト目:0.4msを生成する回数を代入する
GPR2 EQU 0Dh ;GPRの2バイト目:100msを生成回数を代入する
GPR3 EQU 0Eh ;GPRの3バイト目:500msを生成回数を代入する
ORG 0 ;擬似命令:開始番地を0にする <−−− プログラム開始位置設定
MAIN
;-------ポートBを出力にする---------
BSF STATUS,RP0 ;1:バンク1に切り替える=STATUSのRP0を1
CLRF TRISB ;2:ポートBを全て出力にする=TRISBを全て0
BCF STATUS,RP0 ;3:バンク0に戻る=TATUSのRP0を0
LOOP1
;-------処理開始----------------
MOVLW 80h ;Wという固定変数に10000000を代入:2桁しか記述出来ないのでRB7は16進で <−−− ONにする
MOVWF PORTB ; W変数の値をPORTBに代入する=RB7を1にする
CALL Timer ;タイマー呼び出し
MOVLW 1h ;Wという固定変数に00000001を代入 <−−− OFFにする
MOVWF PORTB ; W変数の値をPORTBに代入する=RB0〜RB7を0にする
CALL Timer ;タイマー呼び出し
GOTO LOOP1
;--------------0.5sタイマールーチンセット(固定)-------------------------
;----------100ms*5=0.5sを作る------------
Timer
MOVLW 5h ;W=5
MOVWF GPR3 ;Wの内容をデータ領域3バイト目に書き込む
imeLoop NOP ;何もしない
CALL Timer2 ;999*249*5+Timer2&3のサイクルで500.005msになるそうだ
DECFSZ GPR3,1 ;W=W-1
GOTO TimeLoop
RETURN ;もしW=0になら戻る
;----------400us*250サイクル=100msを作る------------
Timer2
MOVLW 0F9h ;W=249
MOVWF GPR2 ;Wの内容をデータ領域2バイト目に書き込む
imeLoop2 NOP ;何もしない
CALL Timer1 ;999サイクルを249回呼ぶ
DECFSZ GPR2,1 ;W=W-1
GOTO TimeLoop2
RETURN ;もしW=0になら戻る
;----------0.4um*999サイクル=400usを作る------------
Timer1
MOVLW 0F9h ;W=249
MOVWF GPR1 ;Wの内容をデータ領域1バイト目に書き込む
imeLoop1 NOP ;何もしない
DECFSZ GPR1,1 ;W=W-1
GOTO TimeLoop1
RETURN ;もしW=0になら戻る
;---------------------------------------
END