LIST P=18F1320;PICの形式 INCLUDE P18F1320.INC;Including MPLab's File ; ERRORLEVEL -302;302番のエラーが出ても無視する ERRORLEVEL -207;207番のエラーが出ても無視する ERRORLEVEL -203;203番のエラーが出ても無視する ;コンフィギュレーションレジスタを以下に設定。詳しくはp18f1320.incに例文込みで書いてある(ただし英文) __CONFIG _CONFIG1H, _IESO_ON_1H & _FSCM_OFF_1H & _XT_OSC_1H;クロック発振の設定 __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _BORV_27_2L;リセット条件とブラウンアウト __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_32K_2H;ウォッチドッグタイマー __CONFIG _CONFIG3H, _MCLRE_OFF_3H;MCLRを禁止にしてある(そして入力専用ピンとして使える) __CONFIG _CONFIG4L, _DEBUG_OFF_4L & _LVP_OFF_4L & _STVR_OFF_4L;デバッグモード・低電圧プログラミング・スタック割り込み __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L;プロテクト関連 __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H;データ用フラッシュメモリとブート領域のプロテクト関連 __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L;プログラムメモリのプロテクト関連 __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H;データ用フラッシュメモリ、ブート領域、コンフィギュレーションレジスタのプロテクト関連 __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L;テーブルリードプロテクト関連 __CONFIG _CONFIG7H, _EBTRB_OFF_7H;ブート領域をほかのブロックから読み出せるようにするかの設定 ;変数宣言 CBLOCK H'20';変数のデータを入れるメモリの位置 ;ここで変数を宣言する CNT1;ウェイトをかけるカウンタとして使用 CNT2;ウェイトをかけるカウンタとして使用 ;汎用一時的変数 TmpV ENDC ;--------------------------------- ORG H'0';プログラムを書き込む位置を設定 GOTO SETTING ;--------------------------------- ;プログラムメモリアドレスH'4'の場所は割り込みがあったときのスタート地点 ORG H'4';プログラムを書き込む位置を設定 ;(何もしない) RETFIE;割り込み終了 ;--------------------------------- SETTING:;初期設定 ;アナログモードで使用しない BCF ADCON0,0 BSF ADCON1,0 BSF ADCON1,1 BSF ADCON1,2 BSF ADCON1,3 ;ポートAの入出力設定 CLRF TRISA;とりあえずすべて出力の設定にする ;必要なピンを入力の設定にする BSF TRISA,0;ポートAのビット0を入力に設定する ;ポートBの入出力設定 CLRF TRISB;とりあえずすべて出力の設定にする ;必要なピンを入力の設定にする ;現時点で入力にしたいピンはない ;ピンの初期値を設定 CLRF PORTA;一度すべて0にする CLRF PORTB;一度すべて0にする ;--------------------------------- MAIN: ;もしポートAのビット1がLだったら、次の行をスキップ(=ボタンが押されたときの動作を行う) BTFSC PORTA,0 GOTO SWLEND BSF PORTB,3 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 BCF PORTB,3 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 BSF PORTB,3 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 BCF PORTB,3 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 BSF PORTB,3 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 BCF PORTB,3 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 CALL W100MILISECOND;0.1秒待機 SWLEND: CALL W100MILISECOND;0.1秒待機 GOTO MAIN;ループ ;--------------------------------- ;100ミリ秒待機 ;--------------------------------- W100MILISECOND: ;50ミリ秒待機を2回 CALL W50MILISECOND CALL W50MILISECOND RETURN;戻る ;50ミリ秒待機 ;--------------------------------- W50MILISECOND: MOVLW D'50';Wレジスタに値を代入 MOVWF CNT2;Wレジスタの値を変数CNT2に書き込む W100MILISECOND_START: ;1ミリ秒待機 MOVLW D'200';Wレジスタに値を代入 MOVWF CNT1;Wレジスタの値を変数CNT1に書き込む CALL W5MICROSECOND;5マイクロ秒の待機作業を、CNT1に入れた回数繰り返す DECFSZ CNT2,F;CNT2が0になったら次の行をスキップ GOTO W100MILISECOND_START;ループ RETURN;戻る W5MICROSECOND:;5マイクロ秒の待機作業を、CNT1に入れた回数繰り返す NOP NOP DECFSZ CNT1,F;変数CNT1の値を1減らし、もし値が0になったら、次の行の命令を飛ばす(RETURNと書いてある命令へジャンプする) GOTO W5MICROSECOND;ループする RETURN;サブルーチン終了 ;--------------------------------- END