; Copyright 2005 Yasuhiro Kanzaki ;********************************************************************** ; Filename: f877022.asm *; ; Notes: timer1を32.768kHzのクロックによる発振回路を起動 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 ; リセット時のプログラム開始アドレス goto main ; プログラムの開始部へジャンプ org 01ch main bcf STATUS,RP0 ; バンク0を選択 clrf PORTD ; ポートDをクリア bsf T1CON,TMR1CS ; クロックを外部クロック bcf T1CON,T1CKPS1 ; プリスケーラの設定 0,0を設定 bcf T1CON,T1CKPS0 ;  bsf T1CON,T1OSCEN ; T1専用のオシレータを起動する bsf T1CON,T1SYNC ; クロックを同期させる  clrf TMR1L ; 1秒間のインターバル・タイマのため movlw 0c0h ; C000Hをセット movwf TMR1H ; bcf PIR1,TMR1IF ; オーバ・フロー・フラグをクリア bsf T1CON,TMR1ON; タイマ1のスタート 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 btfss PIR1,TMR1IF ;フラグチェック goto delay ;フラグがONになるまで繰り返す bcf PIR1,TMR1IF ; オーバ・フロー・フラグをクリア movlw 0c0h ; タイマ設定値上位バイトをセット movwf TMR1H return ; メイン・ルーチンに戻る END ; 擬似命令 END プログラムの終了指定