; Copyright 2005 Yasuhiro Kanzaki ;********************************************************************** ; CCPキャプチャテスト・プログラム f877035.asm リスト8-1 * list p=16f877A ; listはデバイス定義の擬似命令(ディレクティブ) #include ; デバイスに対応した変数定義のファイルを読み込む __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ORG 000h ; プログラム開始アドレス goto main ;------------------- main bcf STATUS,RP0 clrf PORTD bsf STATUS,RP0 ; バンク1を設定 Clrf TRISD bcf TRISC,2 bcf OPTION_REG,NOT_RBPU ; ポートBプルアップ bcf STATUS,RP0 ; バンク0を設定 bcf PORTC,2 ;タイマ1の初期化 bcf T1CON,T1CKPS1 ; プリスケーラ1:1に設定 bcf T1CON,T1CKPS0 ; bcf T1CON,T1OSCEN ; T1 内蔵オシレータを停止 bcf T1CON,TMR1CS ; 内部クロックFosc/4を使用 ;タイマ2初期設定 movlw 07bh ;プリスケーラ,ポストスケーラ 共に1:16 movwf T2CON ; TMR2 off 01111011h ;CCP1 初期設定 movlw 04h ; 立ち下りエッジでキャプチャ movwf CCP1CON ; ;割り込み処理の初期設定 bcf STATUS,RP0 ; バンク0 bcf INTCON,GIE ; 全体の割り込み処理を禁止; bcf INTCON,PEIE ; 周辺装置からの割り込み処理禁止 bcf PIR1,TMR1IF ; タイマ1割り込みフラグ クリア bcf PIR1,TMR2IF ; タイマ2割り込みフラグ クリア bcf PIR1,CCP1IF ; CCP1割り込みフラグ クリア loop clrf TMR1H ; タイマ1のレジスタを0にセット clrf TMR1L swapf PORTB,W ; DIPスイッチのデータを読み込む bsf STATUS,RP0 ; バンク1をセット movwf PR2 ; 周期レジスタに読み込んだデータをセット bcf STATUS,RP0 ; clrf TMR2 bsf T1CON,TMR1ON ; タイマ1をスタート bsf T2CON,TMR2ON ; タイマ2をスタート rep11 btfss PIR1,TMR2IF ; 経過時間をチェック  goto rep11 ;F=0ならチェックを繰り返す bsf PORTC,2 ; キャプチャ起動のパルス出力 bcf PORTC,2 bcf PIR1,TMR2IF ; フラグ クリア rep12 btfss PIR1,CCP1IF ; キャプチャ チェック  goto rep12 ; CCP1IF=0ならチェックを繰り返す movf CCPR1H,W ; 上位バイトをポートDに出力 movwf PORTD ; bcf PIR1,CCP1IF ; フラグ クリア goto loop END ; プログラムの終了