list p=16f877a ; PIC16F877A用のプログラムであることを宣言 #include p16f877a.inc ; PIC16F877A用のヘッダ・ファイルを読み込む __config _HS_OSC & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF CT_DELAY1MS equ 0x20 CT_DELAY05S equ 0x21 ; 初期設定をする bcf STATUS, RP0 ; この2行でバンク0にする bcf STATUS, RP1 clrf PORTC ; LED が点灯しないように0に clrf PORTD ; 出力は0にしておく clrf PORTE ; 出力は0にしておく bsf STATUS, RP0 ; バンク1にする clrf ADCON1 ; ポートAはアナログ入力 movlw 0xff movwf TRISB ; ポートBはディジタル入力 bcf OPTION_REG, NOT_RBPU ; ポートBのウィーク・プルアップを有効に clrf TRISC ; 全ピン出力に clrf TRISD ; 全ピン出力に clrf TRISE ; 全ピン出力に bcf STATUS, RP0 ; バンク0にする ; 初期設定は終了 ; メイン・ルーチン ; LEDを点滅させる loop movlw B'00100001' ; movwf PORTC ; 点灯 call delay05s ; 0.5[s]待ち movlw B'00100000' ; movwf PORTC ; 消灯 call delay05s ; 0.5[s]待ち goto loop ; メイン・ルーチンは、ここまで delay10us: goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 goto $+1 ; 2 nop ; 1 return ; 2 delay1ms: movlw D'89' ; 1 movwf CT_DELAY1MS ; 1 delay1msl1: call delay10us ; 25 decfsz CT_DELAY1MS, f ; 1(次の行を実行)、2(次の行はとばす) goto delay1msl1 ; 2 nop ; 1 goto $+1 ; 2 return ; 2 delay05s: movlw D'250' ; 1 movwf CT_DELAY05S ; 1 delay05sl1: call delay1ms ; 2500 call delay1ms ; 2500 decfsz CT_DELAY05S, f ; 1(次の行を実行)、2(次の行はとばす) goto delay05sl1 ; 2 return ; 2 end リスト4-10 Copyright 2005 Noriaki Mitsunaga