<いまさらPIC16F688 EEPROMデータ表示2>

<いまさらPIC16F688 EEPROMデータ表示1>では、__EEPROM_DATAを使い1行8文字づつの書き込みだけでした。

ここでは、アドレスを指定して1byteだけの書き込みを行ってみたいと思います。
それには、eeprom_writeを使います。

このプログラムを実行してください
-----------------------------------------------------------------------------------------
#include <htc.h>

__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
__IDLOC(0001);

//一旦、アドレス0から7まで0を書き込みます(初期化)
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);

#define _XTAL_FREQ 31000  //31k

main()
{
OSCCON=0x00;  //31k

eeprom_write(0x00,0x41); //アドレス0番地に0x41(A)を書き込みます。


	while(1){

	}
}
-----------------------------------------------------------------------------------------

Pickit2ソフトを立ち上げてREADする。0番地に41(A)が書き込まれている


続いて、アドレス1に0x42(B)、アドレス23に0x37(7)を書き込みます。

このプログラムを実行してください
-----------------------------------------------------------------------------------------
#include <htc.h>

__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
__IDLOC(0001);

//一旦、アドレス0(ox00)から23(0x17)まで0を書き込みます(初期化)
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);

#define _XTAL_FREQ 31000  //31k
#define JIKAN 100


main()
{
OSCCON=0x00;  //31k

eeprom_write(0x01,0x42); //アドレス1番地に0x42(B)を書き込みます。

eeprom_write(0x17,0x37); //アドレス23番地に0x37(7)を書き込みます。


	while(1){

	}
}
-----------------------------------------------------------------------------------------

Pickit2ソフトを立ち上げてREADする。1番地に0x42(B),23番地に0x37(7)が書き込まれている



※上記のプログラムで書き込みは一応出来ているが、書き込みを行うには次の3つの設定を
行うのがいいようです。

EEPGD=0;  //EEPROM  //読み書きするときは0
WREN=1;  //書き込み開始をできるようにするには1
WR=1;  //書き込み開始するには1終わると0になる

最初のプログラムは次のようになります
-----------------------------------------------------------------------------------------
#include <htc.h>


__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
__IDLOC(0001);

//一旦、アドレス0から7まで0を書き込みます(初期化)
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);

#define _XTAL_FREQ 31000  //31k

main()

{

OSCCON=0x00;  //31k
EEPGD=0;  //EEPROM  //読み書きするときは0
WREN=1;  //書き込み開始をできるようにするには1

WR=1;  //書き込み開始するには1終わると0になる
eeprom_write(0x00,0x41); //アドレス0番地に0x41(A)を書き込みます。
while(WR);

	while(1){

	}
}
-----------------------------------------------------------------------------------------

次のプログラムです
-----------------------------------------------------------------------------------------
#include <htc.h>


__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
__IDLOC(0001);

//一旦、アドレス0(ox00)から23(0x17)まで0を書き込みます(初期化)
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);
__EEPROM_DATA(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);

#define _XTAL_FREQ 31000  //31k
#define JIKAN 100

main()
{
OSCCON=0x00;  //31k
EEPGD=0;  //EEPROM  //読み書きするときは0
WREN=1;  //書き込み開始をできるようにするには1

WR=1;  //書き込み開始するには1終わると0になる
eeprom_write(0x01,0x42); //アドレス1番地に0x42(B)を書き込みます。
while(WR);

WR=1;  //書き込み開始するには1終わると0になる
eeprom_write(0x17,0x37); //アドレス23番地に0x37(7)を書き込みます。
while(WR);

	while(1){

	}
}
-----------------------------------------------------------------------------------------