S
sivakumarmhn
Guest
Ahoj!
I am using pic16f873a pro malý projekt acess kontrolu.Ids každé osoby mají být uloženy ve flash paměti pic.Ale já mám problém s mým kódem, paměti, jakmile aktualizace není přepsán, pokud je funkce nazvaná znovu se stejnou adresu ..by mi někdo navrhnout jiný kód
můj kód vypadá takto:
void flash_write (int adresa, char data)
(
unsigned char offset;
unsigned char buffer [4] = (0,0,0,0), / / vytvoří 4 slovo bloku dat
int dest_addr = adresa;
char i = 0;offset = (unsigned char) (adresa & 0x03);
dest_addr & = 0xfffc; / / inicializovat dest_addr bodu na první adresu v bloku 4 slovo
EEADR = (unsigned char) (dest_addr & 0xFF); / / Proud na slovo od místa určení
EEADRH = (unsigned char) ((dest_addr>> 8) & 0xFF);
for (i = 0; i <= BLOCK_LAST_BYTE; i )
(
Wren = 0;
EEPGD = 1; / / přečíst a zachránit celý blok
RD = 1;
asm ( "NOP");
asm ( "NOP");
buffer = (EEDATA);
RD = 0;
EEADR ;
)
/ / DelayMs (20);
EEADR = (unsigned char) (dest_addr & 0xFF); / / Proud na slovo od místa určení
EEADRH = (unsigned char) ((dest_addr>> 8) & 0xFF);
buffer [offset] = data;for (i = 0; i <= BLOCK_LAST_BYTE; i )
(
EEDATA = buffer ;
EEDATH = 0;
EEPGD = 1;
Wren = 1;
/ / GIE =;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1;
asm ( "NOP");
asm ( "NOP");
asm ( "NOP");
Wren = 0;
WR = 0;
/ / GIE =
EEADR
while (WRERR == 1) (
while (EEIF == 1) ()
I am using pic16f873a pro malý projekt acess kontrolu.Ids každé osoby mají být uloženy ve flash paměti pic.Ale já mám problém s mým kódem, paměti, jakmile aktualizace není přepsán, pokud je funkce nazvaná znovu se stejnou adresu ..by mi někdo navrhnout jiný kód
můj kód vypadá takto:
void flash_write (int adresa, char data)
(
unsigned char offset;
unsigned char buffer [4] = (0,0,0,0), / / vytvoří 4 slovo bloku dat
int dest_addr = adresa;
char i = 0;offset = (unsigned char) (adresa & 0x03);
dest_addr & = 0xfffc; / / inicializovat dest_addr bodu na první adresu v bloku 4 slovo
EEADR = (unsigned char) (dest_addr & 0xFF); / / Proud na slovo od místa určení
EEADRH = (unsigned char) ((dest_addr>> 8) & 0xFF);
for (i = 0; i <= BLOCK_LAST_BYTE; i )
(
Wren = 0;
EEPGD = 1; / / přečíst a zachránit celý blok
RD = 1;
asm ( "NOP");
asm ( "NOP");
buffer = (EEDATA);
RD = 0;
EEADR ;
)
/ / DelayMs (20);
EEADR = (unsigned char) (dest_addr & 0xFF); / / Proud na slovo od místa určení
EEADRH = (unsigned char) ((dest_addr>> 8) & 0xFF);
buffer [offset] = data;for (i = 0; i <= BLOCK_LAST_BYTE; i )
(
EEDATA = buffer ;
EEDATH = 0;
EEPGD = 1;
Wren = 1;
/ / GIE =;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1;
asm ( "NOP");
asm ( "NOP");
asm ( "NOP");
Wren = 0;
WR = 0;
/ / GIE =
EEADR
while (WRERR == 1) (
while (EEIF == 1) ()