PIC マイコンに関する Tips

[戻る]

前回 12F629 に関する Tips を書いたので、 ついでに PIC 全般に関する Tips も書いておきます。

  1. 焼き方

    ここ参照

  2. ヒューズ

    WDT のチェックを外さないと、定期的にリセットされるので注意。 (定期的にCLRWDT を呼ばない場合)。

  3. 割り込み

    割り込みは INTCON の 3〜6bit 目で何を許可するか、7bit 目で 全体を許可するようにする。フレーズは次にような感じ。

          org   0x00
          goto  start
    
    ;;;;; 実際はここに
    :;;;  org   0x04
    ;;;;  goto  interrupt
    ;;;;; というフレーズを入れる
    
    start
          clrf  INTCON    ; 割り込み禁止
    
    ;;;;; ここに初期設定を入れる ;;;;;;;;;;
    
          bsf   INTCON, 5 ; 割り込み許可要因の設定
                          ; この例ではタイマ割り込み (ただしタイマ割り込みでは
                          ; 初期設定の中で OPTION_REG を弄る必要がある)
          bsf   INTCON, 7 ; 割り込み全体を有効にする
    ;;;;; メインループへ ;;;;;;;;;;
    
  4. 割り込み先の処理

    W レジスタと STATUS は明示的に保存しなければならない。また、 割り込み要因をクリアしなければ次の割り込みがかからない。 以下のようなフレーズになる。

    wtmp  equ   20H       ; W レジスタ退避先 (環境によって数値は変える)
    sttmp equ   21H       ; STATUS レジスタ退避先 (環境によって数値は変える)
    
          org   0x04
          goto  interrupt
    interrupt
          bcf   INTCON, 7 ; 二重割り込みを禁止
          movwf wtmp      ; W, STATUS レジスタ退避
          swapf STATUS, w
          movwf sttmp
    
    ;;;;; ここに処理を入れる ;;;;;;;;;;
    
          swapf sttmp, w ; W, STATUS レジスタ復活
          movwf STATUS
          swapf wtmp, f
          swapf wtmp, w
    
          bcf   INTCON, 2 ; 割り込み要因 (この例はタイマ割り込み) をクリア
          retfie          ; 割り込み終了
    
  5. 速度

    1 サイクルはクロック周期の四倍。TMR0 は (OPTION が xx0x0000 の 場合) 2 サイクルで 1 上がる

  6. サイクル

    命令表にサイクルが書かれているが btfsc, btfss, decfsz, incfsz は 「1 (2)」と書いてある。これは、次の命令をスキップしたら 2, スキップ しなければ 1 の意味

  7. フラグ

    movlw は z フラグは変化しない (うっかりして、たまにハマるもので...)


2006.6