<いまさら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){
}
}
-----------------------------------------------------------------------------------------