PIC EEPROM

EEPROM の使い方

 EEPROMは他のメモリから独立したメモリです。PICプログラマからの書き込み、実行プログラムからの読み書きも可能で、最近発売のPICにはほとんど実装されています。EEPROMは8bit幅のメモリで、PICによって容量は異なりますので、それぞれのデータシートで確認が必要です。EEPROMの読み書きにはmsecオーダーの時間が必要で、特に書き込み速度は遅いので注意が必要です。

EEPROMに関係するSFR

EEPROMへのアクセスは、SFRのEEADR, EEDATA, EECON1, EECON2を使い間接的に行います。
EEDAは8ビットのEEPROMのアドレス指定用のレジスタ。
EEDATAは8ビットの実データ読み書き用のレジスタ。
EECON1は読み書きに関する、開始命令・完了フラグ・許可/禁止・エラーフラグを指定、監視できるレジスタ。下位5ビットが有効。
EECON2は書き込みの時に使用。アセンブラの書き方サンプルを参考にして下さい。

EECON1
-- -- -- EEIF WRERR WREN WR RD

RD:1をセットすると読み出しが開始される。読み出しが終了すると自動的に0になる
WR:1をセットすると書き込みが開始される。書き込みが終了すると自動的に0になる。
WREN:1は書き込み許可、0は書き込み禁止。
WRERR:書き込みエラーフラグ。1がエラー
EEIF:書き込みが完了すると1が立つ。

 PIC16F84Aの EEDATA, EEADRはBank0にありますが、PIC16F6xxAのEEDATA, EEADRはBank1にあります。自分が使うPICのデータシートで確認が必要です。

 EEPROMの開始アドレスはH'2100'番地に割り当てられています。プログラム中のORG文でH'2100'以降を指定し、初期値として値を保存することができます。 H'2100'とはライターの仕様によるものですが、ほとんどのライターはH'2100'がEEPROMデータメモリの先頭を指すようになっています。 また、PIC18Fシリーズの場合には、EEPROMの開始アドレスはH'F00000'に割り当てられています。 詳しくはPrograming Specificationを参照してください。

プログラムからEEPROMに初期値として書き込む方法
この例ではH'00'がEEPROMの先頭番地に書き込まれ、H'11'が次の番地に、という風に順に書き込まれます。
(例1)

	ORG  H'2100'
	DE  H'00', H'11', H'22'
例1をPICプログラマで書き込む時、Programmer > Setting で開かれるウインドウの、Programタグで、表示される"EEPROM"のチェックボックスがチェックされている必要があります。

プログラム処理によってEEPROMに対して読み出し、書き込みを行なう方法
読み出し手順要約
 1.データの保存先アドレスをEEADRにセット
 2.EECON1のRDにビットセット(読み出し実行)
 3.EEDATAに値が返る
書き込み手順要約
 1.データの書き込み先アドレスをEEADRにセット
 2.書き込みたい値をEEDATAにセット
 3.EECON1のWRENにビットセット(書き込み許可を与える)
 4.呪文を唱える
 5.EECON1のWRにビットセット(書き込み実行)
 6.EECON1のWRがクリアされる(完了を)のを待つ

(例2)プログラムでEEPROMに読み書きする

;変数のメモリ確保
	e_ADRS	equ	0x00	;EEPROM保存先アドレスを記憶
	e_DATA	equ	0x01	;EEPROMに保存するデータを一時的に記憶
【Raed手順】Wレジスタにデータを読み出す
RD_EEPROM
	MOVF	e_ADRS, W	;保存先アドレスを一旦Wレジスタへ格納
	BSF	STATUS, RP0	;Set to page 1
	MOVWF	EEADR		;アドレスをEEADRへセット
	BSF	EECON1, RD	;読み出し開始
	MOVF	EEDATA, W	;Wレジスタにデータ取り出し
	BCF	STATUS, RP0	;PAGE0に戻る
		
【Write手順】
WR_EEPROM
	BCF	STATUS, RP0	;Set to page 0
	MOVF	e_ADRS, W	;データエリアのアドレス指定
	BSF	STATUS, RP0	;Set to page 1
	MOVWF	EEADR		;Address set
	BCF	STATUS, RP0	;Set to page 0
	MOVF	e_DATA, W	;書き込むデータセット
	BSF	STATUS, RP0	;Set to page 1
	MOVWF	EEDATA		;Data set
	BSF	EECON1, WREN	;Set WR Enable
	MOVLW	55H		;Write Sequence(B'01010101')
	MOVWF	EECON2		;Start write
	MOVLW	0AAH		;(B'10101010')
	MOVWF	EECON2
	BSF	EECON1, WR	;Go write
WR_LP ;書き込み確認待ちループ
	BTFSC	EECON1, WR	;Check Write end
	GOTO	WR_LP
	BCF	STATUS, RP0	;Return to page 0


EEPROMのバグ

エラータでPIC16F648AのEEPROMのバグが報告されています。

原文
Unexpected program execution may occur during data EEPROM write cycle.
Note: This problem is corrected in PIC16F648A Rev. A5 and PIC16F627A/628A Rev. A8.

和訳
EEPROMの書き込み中に期待しない動作が起こるかもしれない.
注)この問題はPIC16F648A Rev. A5 とPIC16F627A/628A Rev. A8 で修正されている.

(秋月電子で2005.6に購入したPIC16F648A I/P はDate code 0414367でRev. A1.)
(秋月電子で2005.8に購入したPIC16F648A I/P はDate code 04193BJでRev. A1.)
入手したPICがどのバージョンのものかを調べてEEPROMに限らずバグが無いか確認する必要があります。このエラータに掲載されているEEPROMバグの回避策は下の通りになっていました。

DATA EEPROM WRITE CODE EXAMPLE
	BANKSEL	0x00		;select Bank0
	BCF	PIR1, EEIF	;enshure write complete
				;flag is clear
	BANKSEL	0x80		;change to Bank1
	MOVLW	1 << PEIE	;enable only
				;periphral interrupt
	MOVWF	INTCON		;
	MOVLW	1 << EEIE	;enable only EE write
				;complete interrupt
	MOVWF	PIE1		;
	BSF	EECON1, WREN	;enable EE write
	MOVLW	0x55		;required write
				;protect squence
	MOVWF	EECON2		;
	MOVLW	0xAA		;second part of
				;sequence
	MOVWF	EECON2		;
	BSF	EECON1, WR	;initate write
	SLEEP			;suspend operation
				;during write
	BCF	EECON1, WREN	;disable EE write
				;program execution
				;resumes with this
				;instruction upon EE
				;write completion



PICマイコンと電子工作 HOME



inserted by FC2 system