目次PIC入門ハードウェア


PIC16F84Aの詳細仕様(1)

このページではPIC16F84Aを使うときに必要な各種レジスタの内容の仕様を説明します。

INDFとEECON2は他のレジスタと扱いが違うので色を変えました。
上図の一部はクリッカブルイメージマップになっています。
各々のSFRは以下の機能を持っています。
INDF:間接アドレスによるレジスタの内容
TMR0:タイマーカウンター
PCL:プログラムカウンターの下位8ビット
STATUS:演算結果の各種フラッグ
FSR:間接アドレス用レジスタ
PORTA:PORTAデータ入出力
PORTB:PORTBデータ入出力
EEDATA:EEPROM用データ
EEADR:EEPROM用アドレス
PCLATH:プログラムカウンターの上位5ビット
INTCON:割り込み制御
OPTION_REG:各種モード設定
TRISA:PORTAのモード設定
TRISB:PORTBのモード設定
EECON1:EEPROM用制御レジスタ
EECON2:EEPROM書込保護レジスタ

SFR(Special Function Registers)
RAMファイルレジスタの上位12バイトはSFRとして使われています。これらのレジスタ群はPICの動作で重要な役割をします。タイマー、プログラムカウンタ、間接アドレスレジスタ、EEPROMとのデータ授受、アドレス指定などPIC内部で使用するものもありますが、ソフトウェアで設定したり、読み出して判断する必要のあるものがあります。以下に状態管理に必要なレジスタを説明します。
STATUS レジスタ ( RAMメモリ・アドレス 03h,83h )
R =読み出し可能ビット
W =書き込み可能ビット
-n =電源投入直後の値
Bit6,7 =未使用

ビット7:
IRP
間接アドレス指定時のバンク指定ビット
PIC16F84Aでは使用しません。
設定内容は"0"にしておく必要があります。

ビット6,5:
RP1,RP0
直接アドレス指定時のバンク指定ビット
PIC16F84AではRP0のみを使用します。'0'はバンク0、'1'はバンク1です。
RP1の設定内容は"0"にしておく必要があります。

ビット4:
TO(inv)
タイマーのタイムアウト表示ビット
1 =電源投入直後、CLRWDTまたはSLEEP命令を実行時
0 =Watchdogタイマーのタイムアウトが発生

ビット3:
PD(inv)
パワーダウン表示ビット
1 =電源投入直後、CLRWDT命令を実行時
0 =SLEEP命令実行時

ビット2:
Z
ゼロ状態表示ビット
1 =演算結果がゼロ
0 =演算結果がゼロでない

ビット1:
DC
デジットキャリービット
1 =演算結果の下位4ビットからのオーバーフローが発生
0 =演算結果の下位4ビットからのオーバーフローが発生していない

ビット0:
C
キャリービット
1 = 演算結果の最上位ビットからのオーバーフローが発生
引き算の場合、結果が正
0 =演算結果の最上位ビットからのオーバーフローが発生していない



OPTION_REG レジスタ ( RAMメモリ・アドレス 81h )
R =読み出し可能ビット
W =書き込み可能ビット
-n =電源投入直後の値

ビット7:
RBPU(inv)
ポートBプルアップ抵抗指定
1 =プルアップ抵抗を使用しない
0 =プルアップ抵抗を使用する

ビット6:
INTEDG
割り込みパルスのエッジ指定
1 =RB0/INTピンの立ち上がりで割り込み
0 =RB0/INTピンの立ち下がりで割り込み

ビット5:
T0CS
タイマー入力クロック指定
1 =RA4/T0CKIピンをクロック入力に使用
0 =内部クロックを使用(CLKOUT)

ビット4:
TOSE
タイマーカウントアップエッジ指定
1 =RA4/T0CKIピンの立ち下がりでカウントアップ
0 =RA4/T0CKIピンの立ち上がりでカウントアップ

ビット3:
PSA
タイマープリスケーラー指定
1 =プリスケーラをWatchdogタイマーに使用
0 =プリスケーラをTMR0タイマーに使用

ビット2-0:
PS2-0
プリスケーラのスケール値
    PS2PS1PS0TMR0WDT
    0001:21:1
    0011:41:2
    0101:81:4
    0111:161:8
    1001:321:16
    1011:641:32
    1101:1281:64
    1111:2561:128



INTCON レジスタ ( RAMメモリ・アドレス 0Bh, 8Bh )
R =読み出し可能ビット
W =書き込み可能ビット
-n =電源投入直後の値

ビット7:
GIE
グローバル割り込み指定ビット
1 =全割り込みマスク解除
0 =全割り込み禁止

ビット6:
EEIE
EEPROM書き込み完了割り込み指定ビット
1 =EEPROM書き込み完了割り込み可能
0 =EEPROM書き込み完了割り込み禁止

ビット5:
T0IE
タイマー(TMR0)オーバーフロー割り込み指定ビット
1 =オーバーフロー割り込み可能
0 =オーバーフロー割り込み禁止

ビット4:
INTE
外部割り込み(RB0/INT)割り込み指定ビット
1 =外部割り込み可能
0 =外部割り込み禁止

ビット3:
RBIE
RBポート変化割り込み指定ビット
1 =RBポート割り込み可能
0 =RBポート割り込み禁止

ビット2:
T0IF
タイマー(TMR0)オーバーフロー表示ビット
1 =タイマーオーバーフローが発生(ソフトでのクリアが必要)
0 =タイマーオーバーフローは発生していない

ビット1:
INTF
外部割り込み(RB0/INT)表示ビット
1 =外部割り込みが発生(ソフトでのクリアが必要)
0 =外部割り込みは発生していない

ビット0:
RBIF
RBポート変化割り込み表示ビット
1 =RB4からRB7の少なくても1で変化が発生(ソフトでのクリアが必要)
0 =RB4からRB7で変化は発生していない



EECON1 レジスタ ( RAMメモリ・アドレス 88h )
R =読み出し可能ビット
W =書き込み可能ビット
S =設定可能ビット
U =未使用
-n =電源投入直後の値

ビット7-5:
未使用
読み込み値は"0"

ビット4:
EEIF
EEPROM書き込み完了割り込み表示ビット
1 =書き込み完了割り込みが発生(ソフトでのクリアが必要)
0 =書き込みが完了していないか書き込み動作が行われていない

ビット3:
WRERR
EEPROM書き込み障害表示ビット
1 =書き込み動作が完了前に終了
0 =書き込み障害は発生していない

ビット2:
WREN
EEPROM書き込み指定ビット
1 =書き込み可能
0 =書き込み禁止

ビット1:
WR
EEPROM書き込み制御ビット
1 =書き込みサイクルを初期化(ソフトで設定、ハードでクリア)
0 =書き込み初期化動作はしていない

ビット0:
RD
EEPROM読み込み制御ビット
1 =読み込みサイクルを初期化(ソフトで設定、ハードでクリア)
0 =読み込み初期化動作はしていない



INDF レジスタ ( RAMメモリ・アドレス 00h )
このレジスタは間接アドレス方式でメモリの内容の読み書きを行う場合に使用するレジスタです。
直接アドレス方式でメモリを読む場合には命令コードの中でメモリアドレスが直接指定されます。
    直接アドレス方式の例
      movwf 30h
      この場合、メモリアドレス(30h)は命令コードの中に組み込まれ 00 0000 1011 0000 のようになります。
      赤い部分がmovwfを示す命令コード、青い部分(1ビット)はファイル・レジスタへの書き込み指定(固定)、緑の部分がメモリアドレスです。
この場合、連続したメモリを読み書きするためにはメモリ毎に命令を書く必要があります。連続したメモリの読み書きをする場合には間接アドレス方式が便利です。

間接アドレス方式でメモリの読み書きを行う場合にはメモリのアドレスをFSRレジスタに設定します。
これにより、FSRレジスタで指定されたアドレスのメモリ内容がINDFレジスタを介して読み書きできます。要は、INDFレジスタが実際のメモリとの中継役になるわけです。この方法を使うとFSRの内容を1つ加算すれば、次のメモリの内容がINDFにリンクされることになり、各々の命令を書かなくても計算でメモリアドレスを変えることができます。



EECON2 レジスタ ( RAMメモリ・アドレス 89h )
EEPROMにデータを書く際、このレジスタに55hとAAhを順番に書くことによりEEPROMへの書き込みを可能にします。
EEPROMに書かれたデータは電源を切っても消えないため、誤った書き込みが行われると電源を再投入しても元には戻りません。ですから、誤った処理で異常なデータを書かないようにするためです。ただし、誤った処理でこのシーケンスが使われている場合にはプロテクトできません。

以下にEEPROMの書き込みシーケンスのサンプルを示します。
赤い部分がプロテクト処理です。
        bsf     status,rp0      ;Change to Bank1
        bcf     intcon,gie      ;Disables all interrupts
        bsf     eecon1,wren     ;Allows write cycles
        movlw   h'55'           ;Set 55h data
        movwf   eecon2          ;Write 55h to EECON2
        movlw   h'aa'           ;Set AAh data
        movwf   eecon2          ;write AAh to EECON2
        bsf     eecon1,wr       ;Initiates a write cycle
        bsf     intcon,gie      ;Enables all un-masked interrupts




コンフィギュレーションワード ( プログラム・メモリ・アドレス 2007h )

R =読み出し可能ビット
P =プログラム可能ビット
-n =電源投入直後の値
u =変化なし
ビット13-4:
CP
コードプロテクション指定ビット
1 =コードプロテクトしない
0 =全てのメモリーをプロテクト
コードプロテクトはPICのメモリ内容が読み出されないようにガードするために使用します。
必要がなければプロテクトしないに設定します。
ビット3:
PWRTE(inv)
パワーアップタイマー指定ビット
1 =パワーアップタイマーを使用しない
0 =パワーアップタイマーを使用する
パワーアップタイマーは電源投入後約72ms間、リセットし続けるためのタイマーです。
通常は使用するに設定します。
ビット2:
WDTE
Watchdog Timer(WDT)指定ビット
1 =WDTを使用する
0 =WDTを使用しない
ビット1-0:
FOSC1
FOSC0
クロック発振器タイプ指定ビット
    FOSC1FOSC0発振器タイプ発振周波数
    11Resistor/Capacitor1MHz以下
    10High Speed Crystal/Resonator4MHz〜20MHz
    01Crystal/Resonator4MHz以下
    00Low Power Crystal200KHz以下