kako spasiti podatke u unutarnjim EEPROM za PIC16F914?

K

kenny_zhou

Guest
Pozdrav svima!
ja sastati problem, ja ištanje to spasiti mnoge podatke za unutarnje EEPROM-u PIC16F914.But ja dont 'znati kako to pisati kod u C ili ASM.
može li mi ruku!

hvala puno!

 
Imati pogledati na podatkovne tablice - ima broj primjera ima.

 
Ako ste koristeći C kompajler, većina njih eeprom imati čitanje i pisanje rutina u svojim knjižnicama.
Ako ste koristeći Hi-Tech, pogledajte u "Pic.h", i vi ćete fino i makro definicije i prototipova funkcija za čitanje i pisanje flash i EEPROM memorije.

Izvod iz Hi-Tech pic.h

Šifra:/************************************************* **********************/

/****** EEPROM memorije čitanje / pisati makronaredbe i definicije funkcije *******/

/************************************************* **********************/

/ * NAPOMENA WELL:Makro EEPROM_READ () nije siguran za upotrebu odmah nakon bilo kojeg

pisati EEPROM-a, kao što to ne čekati WR to jasan. To je po

dizajn, kako bi se omogućilo minimalna površina kod ako slijed čita se

željenog. Da bi se zajamčilo uncorrupted piše, upotrijebite funkciju

eeprom_read () ili umetnuti

while (WR) continue;

Prije pozivanja EEPROM_READ ().

* /

# if EEPROM_SIZE> 0

# ifdef __FLASHTYPE

/ / Makro verzije EEPROM pisati i čitati

# define EEPROM_WRITE (addr, vrijednost) \

do (\

while (WR) continue; EEADR = (adr); EEDATA = (vrijednost); \

EECON1 & = 0x7F; CARRY = 0; if (GIE) CARRY = 1; GIE = 0; \

Wren = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; Wren = 0; \

if (CARRY) GIE = 1; \

) a (0)

# define EEPROM_READ (adr) ((EEADR = (adr)), (EECON1 & = 0x7F), (RD = 1), EEDATA)

# else / / drugi ne pisati flash

# define EEPROM_WRITE (addr, vrijednost) \

do (\

while (WR) continue; EEADR = (adr); EEDATA = (vrijednost); \

CARRY = 0; if (GIE) CARRY = 1; GIE = 0; \

Wren = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; Wren = 0; \

if (CARRY) GIE = 1; \

) a (0)

# define EEPROM_READ (adr) ((EEADR = (adr)), (RD = 1), EEDATA)

# endif/ * Funkcija biblioteka verzija * /

extern void eeprom_write (unsigned char adr, unsigned char vrijednost);

terenac unsigned char eeprom_read (unsigned char adr);

# endif / / kraj EEPROM rutine
 
Koristim CCS.
Šifra:# include <18F8722.h>

# uređaja *= 16

# uređaja ADC = 8# Osigurači NOWDT, WDT128, EC_IO, NOPROTECT, IESO, BROWNOUT, BORV25, PUT, NOCPD

# Osigurači STVREN, NODEBUG, NOLVP, NOWRT, NOCPB, NOEBTRB, NOEBTR, NOWRTD, NOWRTC

# Osigurači NOWRTB, FCMEN, LPT1OSC, MCLR, NOXINST, MCU# koristiti delay (clock = 40000000)# korištenje RS232 (potok = PC, baud = 115.200, paritet = N, xmit = PIN_G1, rcv = PIN_G2, greške)# define RLED PIN_F7

# define YLED PIN_H5# rom int8 0xF0000 = (1, 2, 3, 4)void main ()

(

setup_adc_ports (NO_ANALOGS | VSS_VDD);

setup_adc (ADC_OFF | ADC_TAD_MUL_0);

setup_psp (PSP_DISABLED);

setup_spi (FALSE);

setup_wdt (WDT_OFF);

setup_timer_0 (RTCC_INTERNAL);

setup_timer_1 (T1_DISABLED);

setup_timer_2 (T2_DISABLED, 0,1);

setup_timer_3 (T3_DISABLED | T3_DIV_BY_1);

setup_timer_4 (T4_DISABLED, 0,1);

setup_comparator (NC_NC_NC_NC);

setup_vref (VREF_LOW | -2);

setup_low_volt_detect (FALSE);

setup_oscillator (false);output_low (RLED);

output_high (YLED);

delay_ms (350);output_high (RLED);

output_low (YLED);

delay_ms (350);output_low (RLED);while (1)

(

if (read_eeprom (0x0000) == 1)

output_high (YLED);

drugi

output_high (RLED);delay_ms (100);output_low (YLED);

output_low (RLED);

delay_ms (100);

))

 

Welcome to EDABoard.com

Sponsor

Back
Top