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