; Copyright 2005 Noriaki Mitsunaga list p=16f877a ; PIC16F877A 用のプログラムであることを宣言 #include p16f877a.inc ; PIC16F877A 用のヘッダファイルを読み込む ; コンフィギュレーションレジスタで、WDT を有効にする __config _HS_OSC & _CP_OFF & _PWRTE_ON & _WDT_ON & _LVP_OFF CT_DELAY1MS equ 0x20 CT_DELAY20MS equ 0x21 org 0x0 ; 初期設定をする 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にする clrf INTCON ; 割り込みの禁止 ;; WDT にプリスケーラを割り当てる bsf STATUS, RP0 ; バンク1に切り替え movlw b'00000100' ; TMR0 のクロックとプリスケール値 (1:1以外)を設定 movwf OPTION_REG ; bcf STATUS, RP0 ; バンク0に切り替え clrf TMR0 ; TMR0 とプリスケーラをクリア bsf STATUS, RP0 ; バンク1に切り替え movlw b'00001100' ; プリスケーラを WDT に割り当てる, プリスケール値は変更しない movwf OPTION_REG ; clrwdt ; WDT とプリスケーラのクリア movlw b'00001100' ; 最終的に設定するプリスケール値 (1:16)を設定する movwf OPTION_REG ; bcf STATUS, RP0 ; バンク0に切り替え ; 初期設定は終了 ;; ----- ここからメインループ -------- loop ; LED を点灯する movlw B'00000001' movwf PORTC ;; 約 32[ms]x16 スリープ clrwdt ; WDT のクリア sleep ; スリープ ; LED を消灯する movlw B'00000000' movwf PORTC ;; 約 32[ms]x16 スリープ clrwdt ; WDT のクリア sleep ; スリープ goto loop ;; ----- メインループはここまで -------- end