; Copyright 2005 Yasuhiro Kanzaki ; f877010.asm list p=16f877A ; list ディレクティブでPICの型番を指定 #include ; 変数の定義したファイルを読み込む ; 次に コンフィギュレーションビットを設定 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;***** 変数定義域 t_work1 equ 020h ; 外側ループのカウンタ用 t_work2 equ 021h ; 内側ループのカウンタ用 ;********************************************************************** ORG 000h ; リセット時のプログラム開始アドレス nop ; インサーキット・デバッガ用のnop 無くても良い 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 STATUS,RP0 ; バンク0を選択 loop swapf PORTB,W ; ポートBを読みニブルを入れ替える movwf PORTD ; LEDにつながっているポートDへ出力 loop2 call delay ; 時間待ちサブルーチンへ decfsz PORTD,F ; ポートDの値を1減算 goto loop2 ; 時間待ち処理へ戻る goto loop ; サブルーチン delay movlw 0ffh ; 255を繰り返し回数としてWレジスタにセット movwf t_work1 ; 外側ループ・カウンタにセット rep2 movlw 0ffh ; 内側の繰り返し回数をWレジスタにセット movwf t_work2 ; 内側ループ・カウンタにセット rep1 nop ; 1クロック分何もしない decfsz t_work2,F ; 内側のカウンタを-1し0なら終わり goto rep1 ; 0以外繰り返す decfsz t_work1,F ; 外側の繰り返しカウンタを-1し0なら終わり goto rep2 ; 0以外繰り返す return ; メイン・ルーチンに戻る END ; 擬似命令 プログラムの終了を示す