text: //
  // キャプチャ割り込み
  //
  // キャプチャ入力ピン(CCPx)をアクティブにすると Timer1 のカウンター TMR1 の値がレジスタ CCPRx に入って割り込みがかかります
  //
  // 1827は CCP(Capture/Compare/PWM)モジュールを4つ(CCP1、CCP2、CCP3、CCP4) 積んでいますが
  //  Timer1 の値しかキャプチャ出来ません
  // なお CCP1 と CCP2 は設定でキャプチャ入力ピンの位置を変更できます
  //
  #include "setting.h"
  
  #ifdef USE_CCP1_CAPTURE
  
  // CCP1 をキャプチャモードで初期化
  void init_ccp1_capture(void)
  {
      // 1をセットすると全ての割り込み処理を許可します
      // 0をセットすると全ての割り込み処理を一旦停止します
      // 詳しくはデータシート 89p を参照してください
      // ここでは一旦 0 をセットして全ての割り込み処理を一旦停止してください
      INTCONbits.GIE = ? ;
  
      // 0 をセットするとRB3(9 pin) を CCP1 のキャプチャ入力とします
      // 1 をセットするとRB0(6 pin) を CCP1 のキャプチャ入力とします
      // 詳しくはデータシート 118p を参照してください
      APFCON0bits.CCP1SEL = ? ;
  
      // キャプチャ入力ピンを入力モードにします
      // 詳しくは input.c の説明を読んで下さい
      TRISB = TRISB | ? ;
  
      // キャプチャ入力ピンに物理スイッチを接続し、かつ
      // プルアップ抵抗を接続しない場合は内部プルアップ機能を有効にします
      // 詳しくは input.c の説明を読んで下さい
      WPUB = WPUB | ? ;
      OPTION_REGbits.nWPUEN = 0;
  
      // 動作モードを設定します
      // 0b0100 : 立ち下がり1回ごとに実行
      // 0b0101 : 立ち上がり1回ごとに実行
      // 0b0110 : 立ち上がり4回ごとに実行
      // 0b0111 : 立ち上がり16回ごとに実行
      // 詳しくはデータシート 204p を参照してください
      CCP1CONbits.CCP1M = ? ;
  
      // 一応 CCPR1 の値を 0 でリセットします
      CCPR1 = ? ;
  
      // Timer1 の動作クロックをセットします
      // 0b00 : FOSC/4
      // 0b01 : FOSC
      // 詳しくはデータシート 185p を参照してください
      T1CONbits.TMR1CS = ? ;
  
      // Timer1 の prescale をセットします
      // 0b11 : x8
      // 0b10 : x4
      // 0b01 : x2
      // 0b00 : x1
      // 詳しくはデータシート 185p を参照してください
      T1CONbits.T1CKPS = ? ;
  
      // 1 をセットすると Timer1 が ON になります
      // 詳しくはデータシート 185p を参照してください
      T1CONbits.TMR1ON = ? ;
  
      // Timer1 のカウンターの値を 0 でリセットします
      TMR1 = ? ;
  
      // キャプチャ割り込みが起きた時に 1 がセットされる割り込みフラグです
      // なお自動ではリセットされないので手動でリセットする必要があります
      // とりあえず 0 でリセットしておきます
      PIR1bits.CCP1IF = ? ;
  
      // 1 をセットすると周辺割り込みを許可します
      // 歴史的な背景(？)から、INT割り込みや8ビットタイマー割り込みなどの
      // 基本的な割り込み処理以外の割り込みのことを周辺割り込みと呼び、
      // PIE1、PIE2 レジスタで許可/不許可を設定します
      // 詳しくはデータシート 89p を参照してください
      INTCONbits.PEIE = ? ;
  
      // 1 をセットするとキャプチャ割り込みを許可します
      // 詳しくはデータシート 90p を参照してください
      PIE1bits.CCP1IE = ? ;
  
      // 1をセットすると全ての割り込み処理を許可します
      // 0をセットすると全ての割り込み処理を一旦停止します
      // 詳しくはデータシート 89p を参照してください
      // ここでは 1 をセットして全ての割り込み処理を許可してください
      INTCONbits.GIE = ? ;
  }
  
  #endif
  