Lチカ.txt
などの名前を付けて保存してください。
COL.STR.3 #どのバンクからでもアクセス可
COL.CF.0 #クリアフラグ
COL.ZF.2 #ゼロフラグ
COL.TRISA.$0C #バンク1
COL.TRISB.$0D #バンク1
COL.OSCCON.$19 #バンク1、オシレータ設定
COL.LATA.$0C #バンク2
COL.LATB.$0D #バンク2
COL.WAITA_0.$20 #自由に使えるメモリは$20から
COL.WAITB_0.$21
COL.WAITB_1.$22
COL.PWC.$8007 #コンフィギュレーションビット
WCF.$03.%100 #内蔵オシレータ
COL.PWC.0 #戻す
MBS.1 #バンク1に移動
CLR.TRISB #全ピン出力
MOV.%01101000 #4MHzで内部発振
MOV.OSCCON.F #設定する
MBS.0 #バンク0に戻る
COL.START #ループ開始
MBS.2 #バンク2
BCF.LATB.0 #RB0ピンに0を出力する
MBS.0
CAL.WAITA #1秒待つ
MBS.2
BSF.LATB.0 #RB0ピンに1を出力する
MBS.0
CAL.WAITA #1秒待つ
GOT.START #戻る(無限にループする)
COL.WAITA #1秒待つ関数
MOV.100 #0.01秒を100回回す
MOV.WAITA_0.F #カウンタに代入
COL.WAITA-LOOP #ループ開始
CAL.WAITB #0.1秒待つ関数を呼ぶ
DES.WAITA_0.F #0ならスキップ
GOT.WAITA-LOOP #戻る
RET #関数を抜ける
COL.WAITB #9998サイクルかかる
MOV.38 #263サイクル*38回=9994サイクル
MOV.WAITB_0.F #上の命令、最後のRETと合わせて4サイクル
COL.WAITB_L0 #1つめのループ(1周263サイクル)
MOV.87 #3サイクル*87回=261サイクル
MOV.WAITB_1.F #上の命令と合わせて2サイクル
COL.WAITB_L1 #2つめのループ(1周3サイクル)
DES.WAITB_1.F #通常1、スキップ時2サイクル
GOT.WAITB_L1 #戻る、2サイクル
NOP #スキップ時の誤差1サイクル
DES.WAITB_0.F
GOT.WAITB_L0 #戻る
NOP #誤差1サイクル
RET #関数を抜ける(2サイクル)