; Copyright 2005 Yasuhiro Kanzaki ;********************************************************************** ; Filename: f877021.asm *; ; Notes: timer1による待ちに修正 list p=16f877A ; list 擬似命令でPICの型番を指定 #include ; 変数の定義したファイルを読み込む ; 次に コンフィギュレーションビットを設定 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;***** 変数定義域 t_work1 equ 020h ; ;********************************************************************** ORG 000h ; リセット時のプログラム開始アドレス nop ; インサーキット・デバッガ用のnop 無くても良い goto main ; プログラムの開始部へジャンプ org 01ch main bcf STATUS,RP0 ; バンク0を選択 clrf PORTD ; ポートDをクリア bsf T1CON,T1CKPS1 ; プリスケーラを1:8に設定 bsf T1CON,T1CKPS0 ; bcf T1CON,TMR1CS ; Fosc/4の内部クロックを使用 bsf STATUS,RP0 ; バンク1を選択 Clrf TRISD ; ポートDを出力に設定 bcf OPTION_REG,NOT_RBPU ; Bポートプルアップ指定 bcf STATUS,RP0 ; バンク0を選択 loop swapf PORTB,W ; ポートBを読みニブルを入れ替える movwf PORTD ; ポートDへ出力 loop2 call delay ; 時間待ちサブルーチンへ decfsz PORTD,F ; ポートDの値を1減算 goto loop2 ; 時間待ち処理へ戻る goto loop ; サブルーチン delay: movlw 005h ; 05hを繰り返し回数としてWレジスタにセット movwf t_work1 ; 汎用レジスタにセット rep2: bcf T1CON,TMR1ON ; タイマ1の停止 movlw d'11' ; タイマ設定値上位バイトをセット movwf TMR1H movlw d'221' ; タイマ設定値下位バイトをセット movwf TMR1L bcf PIR1,TMR1IF ; オーバ・フロー・フラグをクリア bsf T1CON,TMR1ON ; タイマ1スタート rep1: btfss PIR1,TMR1IF ; フラグチェック goto rep1 ; フラグオンまで繰り返す decfsz t_work1,F ; 外側の繰り返しカウンタを-1し0なら終わり goto rep2 ; 0以外繰り返す return ; メイン・ルーチンに戻る END ; 擬似命令 END プログラムの終了指定