; Copyright 2005 Yasuhiro Kanzaki ;********************************************************************** ; Filename: f877020.asm *; ; Notes: timer0による待ちに修正 list p=16f877A ; list directiveでPICの型番を指定 #include ; 変数の定義したファイルを読み込む ; 次に コンフィギュレーションビットを設定 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;***** 変数定義域 t_work1 equ 020h ; ;********************************************************************** ORG 000 ; リセット時のプログラム開始アドレス goto main ; プログラムの開始部へジャンプ org 01ch main bcf STATUS,RP0 ; バンク0を選択 clrf PORTD ; ポートDをクリア bsf STATUS,RP0 ; バンク1を選択 Clrf TRISD ; ポートDを出力に設定 bcf OPTION_REG,NOT_RBPU ; Bポートプルアップ指定 bcf OPTION_REG,T0CS ;追加 タイマ0選択 bcf OPTION_REG,PSA ;追加 プリスケーラはタイマ0 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 0019h ;  19hを繰り返し回数としてWレジスタにセット movwf t_work1 ; 汎用レジスタにセット rep2: movlw D'256'-D'195' ; タイマ設定値セット bcf INTCON,T0IF ; オーバ・フロー・フラグをクリア movwf TMR0 ; タイマ0レジスタに設定値書き込み rep1: btfss INTCON,T0IF ; フラグチェック goto rep1 ; フラグオンまで繰り返す decfsz t_work1,F ; 外側の繰り返しカウンタを-1し0なら終わり goto rep2 ; 0以外繰り返す return ; メイン・ルーチンに戻る END ; ディレクティブ 'end of program'