メモリへの処理内容を指定するSFR。決められた定数を代入する事で動作が決定する。処理内容にはREAD(読み込み)、PROGRAM(書き込み)、VERIFY(指定したデータがあるか検証する)、ERASE(消去)ERASE-ALL(全消去)がある。
読み込み/書き込み等を行うメモリのページアドレスを指定するSFR。
読み込み/書き込みされる実際のデータがバイト単位で格納される。EDATA1の方が上位である。
プログラム上では、次のような共用体の大域変数_a用意することでFlashメモリへの処理を簡単に扱えるようにしている。
typedef union EData { ulong i; // 4byte正整数1つとして見る ushort w[2]; // 2byte正整数2つとして見る byte c[4]; // 1byte正整数4つとして見る } EData;つまり、書き込み時は_aに書き込みたい値を代入した後に、引数に書き込み先のアドレスを指定して書き込み用関数writeFlash()を実行し、読み込み時は引数に読み取りたいアドレスを指定して読み取り用関数readFlash()を呼び出した後、_aの中身を参照する。writeFlash()内部では_aの中身をEDATA1〜4にコピーして書き込み、readFlash()内部ではデータの読み取り後EDATA1〜4を_a[0]〜_a[3]にコピーしているのである。