NOTES:
4.1 EEADR EEADR EEADR EEADR
アドレスレジスタは最大 256 バイトまでのデータ EEPROM または最大 8K ワードまでのプログラムフラッ シュをアドレスできます。
プログラムアドレスは、MSByte のアドレスを EEADRH レジスタに、LSByte のアドレスを EEADR レジスタにラ イトします。データアドレスは、(LSByte の)アドレ スを EEADR レジスタにライトします。
128 バイトの EEPROM を持つ PIC16F874/873 では、EEADR の MSbit( ビット 7)は常にクリアして、間違ったロ ケーションに不注意にアクセスしないようにする必要 があります。プログラムメモリにも同じことが言えま す。EEADRH の上位 MSbit は常にクリアしておかなけれ ばなりません。
DS30292A-J-page 42
Preliminary
2000 Microchip Technology Inc.このデータシートは参考資料です。最新版英語データシートを参照してください。
(http://www.microchip.com から入手できます。)
4.2 4.24.2
4.2 EECON1EECON1EECON1EECON1 およびおよびおよびおよび EECON2EECON2EECON2EECON2 レジスタレジスタレジスタレジスタ
EECON1 はメモリアクセス用コントロールレジスタで す。
EECON2 は物理的には存在しません。EECON2 をリードす ると、0 とリードされます。EECON2 レジスタはメモリ ライト処理専用に使用します。
コントロールビット EEPGD はアクセスがプログラムか データメモリアクセスかを指定します。0 の場合、デー タメモリがアクセスされます。1 の場合、プログラム メモリがアクセスされます。
コントロールビット RD および WR はそれぞれリードと ライトを開始します。これらのビットはソフトウエア でクリアできず、セットのみ可能です。RD と WR はリー ドまたはライトが終了した時点でハードウエアがクリ
アします。WR ビットをソフトウエアでクリアできない ということは、誤って完了前にライト動作を終了する のを防ぐことになります。
WREN ビットがセットされると、ライトが可能になりま す。パワーアップ時には WREN ビットはクリアされま す。WRERR ビットは、通常動作中にライト動作が MCLR リセットまたは WDT タイムアウトリセットにより中断 したときにセットされます。リセットに続くこのよう な状況では、WRERR ビットをチェックしてロケーショ ンをリライトすることができます。データおよびアド レスレジスタと EEPGD ビットの値は変化しません。
PIR2 レジスタの割り込みフラグビット EEIF は、ライ トの終了時にセットされます。このビットはソフトウ エアでクリアする必要があります。
図 4‑1:
図 4‑1:図 4‑1:
図 4‑1: EECON1 レジスタ(アドレス 18CEECON1 レジスタ(アドレス 18Ch)EECON1 レジスタ(アドレス 18CEECON1 レジスタ(アドレス 18Ch)h)h)
R/W-x U-0 U-0 U-0 R/W-x R/W-0 R/S-0 R/S-0
EEPGD — — — WRERR WREN WR RD R= リード可能なビット
W= ライト可能なビット S= セット可能なビット U= なし、
「0」としてリードする
- n= POR リセットでの値
bit7 bit0
bit 7:
EEPGD: プログラム / データ EEPROM セレクトビット1 = プログラムメモリにアクセスする
0 = データメモリにアクセスする
(リードまたはライトの進行中は、このビットを変更することはできません)
bit 6:4:
なしなしなしなし: 0 とリードされます。bit 3:
WRERR: EEPROM エラーフラグビット1 = ライトが未完了のまま終了した
(通常動作中の MCLR リセットまたは WDT リセットによる)
0 = ライトが完了した
bit 2:
WREN: EEPROM ライトイネーブルビット1 = ライトサイクルを実行可能する 0 = EEPROM へのライトを実行不可にする
bit 1:
WR: ライトコントロールビット1 = ライトサイクルを開始する。
(このビットはライトが完了するとハードウエアでクリアされる。WR ビットはソフトウエアでセットのみ可能でクリアは不可)。
0 = EEPROM へのライトサイクルが完了
bit 0:
RD: リードコントロールビット1 = EEPROM リードを開始する
(リードには 1 サイクルかかります。RD はハードウエアでクリアされる。RDビットはソフトウエアでセットのみ可能でクリアは不可))。
0 = EEPROM リードを開始しない
2000 Microchip Technology Inc.
Preliminary
DS30292A-J-page 43 このデータシートは参考資料です。最新版英語データシートを参照してください。(http://www.microchip.com から入手できます。)
4.34.34.3
4.3 EEPROMEEPROMEEPROMEEPROM メモリのリードメモリのリードメモリのリードメモリのリード
データメモリロケーションをリードするには、まず、
EEADR レジスタにアドレスをライトして、EEPGD コント ロールビット(EECON1<7>)をクリアし、次にコントロー ルビット RD(EECON1<0>) をセットしなければなりませ
ん。データは次の命令サイクルで EEDATA レジスタに ロードされるので、次の命令でリードすることができ ます。EEDATA はこの値を次のリードまで、またはユー ザーが ( ライト中に)ライトを行うまで、保持します。
例 4‑1:
例 4‑1:例 4‑1:
例 4‑1: DATA EEPROM のリードDATA EEPROM のリードDATA EEPROM のリードDATA EEPROM のリード
BSF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 2 MOVLW DATA_EE_ADDR ;
MOVWF EEADR ; Data Memory Address to read BSF STATUS, RP0 ; Bank 3
BCF EECON1, EEPGD ; Point to DATA memory BSF EECON1, RD ; EEPROM Read BCF STATUS, RP0 ; Bank 2 MOVF EEDATA, W ; W = EEDATA
4.4 4.44.4
4.4 データデータデータデータ EEPROMEEPROMEEPROMEEPROM メモリへのライトメモリへのライトメモリへのライトメモリへのライト
EEPROM データロケーションにライトするには、まず、
アドレスをEEADRレジスタに書き込み、データをEEDATA レジスタに書き込む必要があります。次に、例 4‑2 の シーケンスに従ってライトサイクルを開始します。
例 4‑2:
例 4‑2:例 4‑2:
例 4‑2: DATA EEPROM のライトDATA EEPROM のライトDATA EEPROM のライトDATA EEPROM のライト
上記のシーケンスが各バイトに対して正確に実行され ない場合(EECON2 に 55h をライトし、EECON2 に AAh を ライトし、最後に WR ビットをセットする)、ライトが 開始することはありません。このコードセグメント中 は、割込みの発生を禁止することをお勧めします。
更に、EECON1 の WREN ビットをセットしてライトを許 可する必要があります。このメカニズムにより予想し ないコードの実行(つまり、プログラムの喪失など)
によりデータEEPROMへの誤った書き込みを防ぐことが できます。WREN ビットは、EEPROM の更新時以外は常に クリアにしてください。WREN ビットはハードウエアで はクリアされません。
ライトシーケンスの開始後は、WREN ビットをクリアし てもその時点でのライトサイクルには影響しません。
WR ビットは、WREN がセットされない限りセットを禁止 されます。WREN ビットは前の命令でセットされている 必要があります。WR と WREN を同じ命令でセットする ことはできません。
ライトサイクルの終了後、WR ビットがハードウエアで クリアされ、EEPROM ライト完了割り込みフラグビット
(EEIF) がセットされます。EEIF はソフトウエアでクリ アする必要があります。
BSF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 2 MOVLW DATA_EE_ADDR ;
MOVWF EEADR ; Data Memory Address to write MOVLW DATA_EE_DATA ;
MOVWF EEDATA ; Data Memory Value to write BSF STATUS, RP0 ; Bank 3
BCF EECON1, EEPGD ; Point to DATA memory BSF EECON1, WREN ; Enable writes
BCF INTCON, GIE ; Disable Interrupts MOVLW 55h ;
Required MOVWF EECON2 ; Write 55h Sequence MOVLW AAh ;
MOVWF EECON2 ; Write AAh
BSF EECON1, WR ; Set WR bit to begin write BSF INTCON, GIE ; Enable Interrupts
SLEEP ; Wait for interrupt to signal write complete BCF EECON1, WREN ; Disable writes
DS30292A-J-page 44
Preliminary
2000 Microchip Technology Inc.このデータシートは参考資料です。最新版英語データシートを参照してください。
(http://www.microchip.com から入手できます。)
4.5 4.54.5
4.5 フラッシュプログラムメモリのリードフラッシュプログラムメモリのリードフラッシュプログラムメモリのリードフラッシュプログラムメモリのリード プログラムメモリのロケーションをリードするには、2 バイトのアドレスを EEADR および EEADRH レジスタに書 き込み、EEPGD コントロールビット(EECON1<7>) をセッ トして、最後にコントロールビット RD(EECIN1<0>) を セットします。リードコントロールビットがセットさ れると、マイクロコントローラはそれから2番目の命 令サイクルを使用してデータをリードします。これに より「BSF EECON1,RD」命令後の2番目の命令は無視
されます。データは 3 番目の命令サイクルで EEDATA お よび EEDATH レジスタにロードされており、2 バイト リ ー ド で き ま す。し た が っ て、デ ー タ は BSF EECON1,RD 命 令 の 後 の 3 番 目 の 命 令 サ イ ク ル で EEDATH:EEDATA から読み出しできます。EEDATA および EEDATH レジスタは、別のリード動作が始まるか、ユー ザーが(ライト中に)書き込みを行うまで値を保持し ます。
例 4‑3:
例 4‑3:例 4‑3:
例 4‑3: フラッシュプログラムのリードフラッシュプログラムのリードフラッシュプログラムのリードフラッシュプログラムのリード
BSF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 2 MOVLW ADDRH ;
MOVWF EEADRH ; MSByte of Program Address to read MOVLW ADDRL ;
MOVWF EEADR ; LSByte of Program Address to read BSF STATUS, RP0 ; Bank 3
BSF EECON1, EEPGD ; Point to PROGRAM memory BSF EECON1, RD ; EEPROM Read
NOP ; Any instructions here are ignored as program NOP ; memory is read in third cycle after BSF EECON1,RD
BCF STATUS, RP0 ; Bank 2
MOVF EEDATA, W ; W = LSByte of Program EEDATA MOVF EEDATH, W ; W = MSByte of Program EEDATA
2000 Microchip Technology Inc.
Preliminary
DS30292A-J-page 45 このデータシートは参考資料です。最新版英語データシートを参照してください。(http://www.microchip.com から入手できます。)
4.6 4.64.6
4.6 フラッシュプログラムメモリへのライトフラッシュプログラムメモリへのライトフラッシュプログラムメモリへのライトフラッシュプログラムメモリへのライト フラッシュプログラムメモリのワードは、そのワード がコードプロテクトされていないセグメントのメモリ で、WRT コンフィグレーションビットがセットされて いる場合に限ってライト可能です。フラッシュプログ ラムをライトするには、まず、最初の 2 バイトのアド レスを EEADR および EEADRH レジスタに、2 バイトの データを EEDATA および EEDATH レジスタにライトして、
次に EEPGD コントロールビット(EECON1<7>) をセット
し、最後にコントロールビット WR(EECON1<1>) をセッ トします。必ず例 4‑4のシーケンスに従ってプログラ ムメモリへのライトを開始してください。
「BSF EECON1,WR」命令の後、マイクロコントローラ は次の命令を実行し、その次の命令を無視します。NOP 命令は、「BSF EECON1,WR」命令の2つ後の命令にな ります。次に、マイクロコントローラはライトが行わ れる TPEW( パラメータ D133) のために内部動作を停止 します。これはクロックや周辺機能が動作しつづける ので、スリープモードではありません。ライトサイク ルの後は、マイクロコントローラは EECON1 ライト命令 の後の 3 番目の命令から動作を再開します。
例 4‑4:
例 4‑4:例 4‑4:
例 4‑4: フラッシュプログラムのライトフラッシュプログラムのライトフラッシュプログラムのライトフラッシュプログラムのライト
BSF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 2 MOVLW ADDRH ;
MOVWF EEADRH ; MSByte of Program Address to read MOVLW ADDRL ;
MOVWF EEADR ; LSByte of Program Address to read MOVLW DATAH ;
MOVWF EEDATH ; MS Program Memory Value to write MOVLW DATAL ;
MOVWF EEDATA ; LS Program Memory Value to write BSF STATUS, RP0 ; Bank 3
BSF EECON1, EEPGD ; Point to PROGRAM memory BSF EECON1, WREN ; Enable writes
BCF INTCON, GIE ; Disable Interrupts MOVLW 55h ;
Required MOVWF EECON2 ; Write 55h Sequence MOVLW AAh ;
MOVWF EECON2 ; Write AAh
BSF EECON1, WR ; Set WR bit to begin write ;
;
NOP ; Instructions here are ignored by the microcontroller ; NOP
; Microcontroller will halt operation and wait for ; a write complete. After the write
; the microcontroller continues with 3rd instruction BSF INTCON, GIE ; Enable Interrupts
BCF EECON1, WREN ; Disable writes