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

今まで、EEPROMに書き込んだデータはPickit2で読んでいました。

ここでは、LED表示でデータを読みます(ASCコード解読)。

<PIC16F688 LEDにデータ表示3>の方法と、eeprom_readを使います。


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

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

//アドレス2番地に0x5A(Z)を書き込む
__EEPROM_DATA(0x00,0x00,0x5A,0x00,0x00,0x00,0x00,0x00);

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


main()
{

OSCCON=0x00;  //31k
ANSEL=0x00;
CMCON0=0x07;

TRISA=0b00000000;  //RORTAを出力に設定
TRISC=0b00000000;  //RORTCを出力に設定
PORTA=0b00000000;  //RORTAをL(0)にする
PORTC=0b00000000;  //RORTCをL(0)にする


//例 アドレス2番地のデータを読む eeprom_read(0x02);

PORTC=eeprom_read(0x02);   //下位4bitが入る
RA0=eeprom_read(0x02)>>4;  //上位4bitの0bit目が入る
RA1=eeprom_read(0x02)>>5;  //上位4bitの1bit目が入る
RA2=eeprom_read(0x02)>>6;  //上位4bitの2bit目が入る
RA4=eeprom_read(0x02)>>7;  //上位4bitの3bit目が入る

	while(1){

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


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


0x5A(Z) 〇●〇● ●〇●〇



次は、一旦、EEPROM内256個のデータを初期化(0)して、JA3RUAの文字を書き込みます。
アドレス0番地(0x00)にJを
アドレス8番地(0x08)にAを
アドレス16番地(0x10)に3を
アドレス24番地(0x18)にRを
アドレス32番地(0x20)にUを
アドレス40番地(0x28)にAを

プログラム
-----------------------------------------------------------------------------------------
#include <htc.h>

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

__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);
__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);
__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);
__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);

__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);
__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);
__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);
__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);

__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);
__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);
__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
ANSEL=0x00;
CMCON0=0x07;

eeprom_write(0x00,0x4A); //アドレス0番地にJを書き込みます。
eeprom_write(0x08,0x41); //アドレス8番地にAを書き込みます。
eeprom_write(0x10,0x33); //アドレス16番地に3を書き込みます。
eeprom_write(0x18,0x52); //アドレス24番地にRを書き込みます。
eeprom_write(0x20,0x55); //アドレス32番地にUを書き込みます。
eeprom_write(0x28,0x41); //アドレス40番地にAを書き込みます。

	while(1){

	}
}

-----------------------------------------------------------------------------------------

次は、書き込んでLEDに表示します。


プログラム
-----------------------------------------------------------------------------------------
#include <htc.h>

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

//EEPROMデータ初期化
__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);
__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);
__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);
__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);

__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);
__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);
__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);
__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);

__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);
__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);
__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 2000


main()
{

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

TRISA=0b00000000;  //RORTAを出力に設定
TRISC=0b00000000;  //RORTCを出力に設定
PORTA=0b00000000;        //RORTAをL(0)にする
PORTC=0b00000000;        //RORTCをL(0)にする

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

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

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

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

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

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


	while(1){

PORTC=eeprom_read(0x00);
RA0=eeprom_read(0x00)>>4;  //上位4bitの0bit目が入る
RA1=eeprom_read(0x00)>>5;  //上位4bitの1bit目が入る
RA2=eeprom_read(0x00)>>6;  //上位4bitの2bit目が入る
RA4=eeprom_read(0x00)>>7;  //上位4bitの3bit目が入る

__delay_ms(JIKAN);


PORTC=eeprom_read(0x08);
RA0=eeprom_read(0x08)>>4;  //上位4bitの0bit目が入る
RA1=eeprom_read(0x08)>>5;  //上位4bitの1bit目が入る
RA2=eeprom_read(0x08)>>6;  //上位4bitの2bit目が入る
RA4=eeprom_read(0x08)>>7;  //上位4bitの3bit目が入る

__delay_ms(JIKAN);


PORTC=eeprom_read(0x10);
RA0=eeprom_read(0x10)>>4;  //上位4bitの0bit目が入る
RA1=eeprom_read(0x10)>>5;  //上位4bitの1bit目が入る
RA2=eeprom_read(0x10)>>6;  //上位4bitの2bit目が入る
RA4=eeprom_read(0x10)>>7;  //上位4bitの3bit目が入る

__delay_ms(JIKAN);


PORTC=eeprom_read(0x18);
RA0=eeprom_read(0x18)>>4;  //上位4bitの0bit目が入る
RA1=eeprom_read(0x18)>>5;  //上位4bitの1bit目が入る
RA2=eeprom_read(0x18)>>6;  //上位4bitの2bit目が入る
RA4=eeprom_read(0x18)>>7;  //上位4bitの3bit目が入る

__delay_ms(JIKAN);


PORTC=eeprom_read(0x20);
RA0=eeprom_read(0x20)>>4;  //上位4bitの0bit目が入る
RA1=eeprom_read(0x20)>>5;  //上位4bitの1bit目が入る
RA2=eeprom_read(0x20)>>6;  //上位4bitの2bit目が入る
RA4=eeprom_read(0x20)>>7;  //上位4bitの3bit目が入る

__delay_ms(JIKAN);


PORTC=eeprom_read(0x28);
RA0=eeprom_read(0x28)>>4;  //上位4bitの0bit目が入る
RA1=eeprom_read(0x28)>>5;  //上位4bitの1bit目が入る
RA2=eeprom_read(0x28)>>6;  //上位4bitの2bit目が入る
RA4=eeprom_read(0x28)>>7;  //上位4bitの3bit目が入る

__delay_ms(JIKAN);

PORTC=0x00;
PORTA=0x00;

__delay_ms(JIKAN);

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