EEPROMアクセス

 汎用レジスタやS-RAMと異なり、EEPROMへのアクセスはI/Oレジスターを介して1バイトづつ行う。
 使用するI/Oレジスタは、①EEPROMアドレスレジスタ(EEARH, EEARL),②EEPROMデータレジスタ(EEDR),③EEPRO制御レジスタ(EECR)の3つ。

○ EEPROMアドレスレジスタ(EEARH,EEARL)
bit0~bit9 でEEPROM空間のアドレスを指定
○ EEPROMデータレジスタ(EEDR)
EEPROMへの読み込み・書き込みはこのレジスタを介して行われる。
○ EEPROM制御レジスタ(EECR)
        bit4,5:EEPM1、EEPM0:EEPROMプログラミング種別
                    EEPM1    EEPM0    プログラミング時間    動作
                        0            0                3.4ms        1操作で消去と書き込み
                        0            1                1.8ms        消去のみ
                        1            0                1.8ms        書き込みのみ
                        1            1                                        予約
        bit3:EERIE:EEPROM操作可割り込み許可
bit2:EEMPE:EEPROMマスタプログラム許可
bit1:EEPE:EEPROMプログラム許可
bit0:EERE:EEPROM読み込み許可

書き込み手順
  1. EEPE=0まで待機
  2. EEPROMアドレスをEEARH, EEARLに設定する
  3. EEPROMデータをEEDRに設定する
  4. EEMPM1,0ビットにプログラミング種別をセットする。
  5. EEMPEビット設定後4クロック以内にEEPEビットをセット(1)する

読み出し手順
  1. EEPE=0を確認する
  2. EEPROMアドレスをEEARにセットする
  3. EEREビットをセット(1)する
  4. EEDRからデータを読み出す
※EEPROM書き込み動作中にEEPROM I/Oレジスタにデータを書き込むと書き込み結果は不定となるので読み込み動作前にEEPEのポーリング(チェック)を行うこと

[ 例題 ] INT1の例題( int1.asm )を拡張し、電源ON時に、前回のカウント値を初期値とする。初期値はEEPROMから読み込む。カウントアップ時にEEPROMへも値を記録する。

 プログラム: eeprom.asm

  -------------------------------------------------------
   アセンブルには avrae.bat(win), avrae(Mac/Linux)、
   書き込みには avrpe.bat(win), avrpe(Mac/Linux)
  を新しくダウンロードして使ってください。
  Mac, Linux の場合は「リンク先を名前を付けて保存」で
    ~/bin  の下に保存し、実行パミッションを設定する
    chmod +x ~/bin/avra
    chmod +x ~/bin/avrp
  -------------------------------------------------------

 回路図(INT1の例題と同じ):