desar les dades en la EEPROM interna del PIC16F914??

K

kenny_zhou

Guest
Hola a tots!
em trobo amb un problema, vull desar dades a la EEPROM interna de la i PIC16F914.But no saben com escriure el codi en C o ASM.
¿Podria donar-me una mà!

moltes gràcies!

 
Microsoft doszedł do wniosku że już najwyższy czas by w proces tworzenia kolejnych wersji Internet Explorera włączyli się jego użytkownicy, ogłaszając uruchomienie kanału dla deweloperów. Osoby, które zdecydują się z niego skorzystać otrzymają dostęp do najnowszych wersji Internet Explorera i będą w stanie podejrzeć nad jakimi funkcjami pracują pro...

Read more...
 
Fes un cop d'ull al full de dades - hi ha exemples de codi allà.

 
Si utilitzeu un compilador de C, la majoria d'ells han eeprom llegir i escriure rutines en les seves col • leccions.
Si vostè està utilitzant Hi-Tech, cerqueu a "Pic.h" i se li multa les dues definicions de macros i prototips de funcions de lectura i escriptura de flash i de memòria EEPROM.

Extracte de Hi-Tech pic.h

Codi:/************************************************* **********************/

/****** Memòria EEPROM de lectura / escriptura de macros i definicions de funcions *******/

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

/ * NOTA BÉ:La macro EEPROM_READ () no és segura per al seu ús immediatament després de qualsevol

escriure a la EEPROM, ja que no espera WR clar. Aquesta és, per

el disseny, per permetre que la mida del codi mínim si una seqüència de lectures és

desitjat. per a garantir incorrupte escriu, utilitzeu la funció

eeprom_read () o inseriu

al mateix temps (WR) continue;

abans de trucar a EEPROM_READ ().

* /

# Si EEPROM_SIZE> 0

# Ifdef __FLASHTYPE

/ / Versions de macro de EEPROM escriure i llegir

# Define EEPROM_WRITE (addr, value) \

do (\

al mateix temps (WR) continue; EEADR = (addr); EEDATA = (valor); \

EECON1 & = 0x7F, dur a = 0, si (GIE) dur a = 1; GIE = 0; \

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

if (carry) GIE = 1; \

) While (0)

# Define EEPROM_READ (addr) ((EEADR = (addr)), (EECON1 & = 0x7F), (RD = 1), EEDATA),

# Else / / else no escriu flash

# Define EEPROM_WRITE (addr, value) \

do (\

al mateix temps (WR) continue; EEADR = (addr); EEDATA = (valor); \

CARRY = 0, si (GIE) dur a = 1; GIE = 0; \

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

if (carry) GIE = 1; \

) While (0)

# Define EEPROM_READ (addr) ((EEADR = (addr)), (RD = 1), EEDATA),

# Endif/ * Versions funció de la biblioteca * /

eeprom_write extern void (addr unsigned char, unsigned char valor);

extern eeprom_read unsigned char (unsigned char addr);

# Endif / / rutines EEPROM final
 
Jo faig servir la CAC.
Codi:# Include <18F8722.h>

# Trasto *= 16

# Trasto aC = 8# Fuses NOWDT, WDT128, EC_IO, NOPROTECT, IESO, BROWNOUT, BORV25, PUT, NOCPD

# Fuses STVREN, NODEBUG, NOLVP, NOWRT, NOCPB, NOEBTRB, NOEBTR, NOWRTD, NOWRTC

# Fuses NOWRTB, FCMEN, LPT1OSC, MCLR, NOXINST, MCU# Use delay (clock = 40000000)# Use rs232 (stream = PC = 115.200 bauds, la paritat = N, Xmit = PIN_G1, VN = PIN_G2, errors)# Define PIN_F7 RLED

# Define PIN_H5 YLED# 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 (fals);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);

una mica més

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

output_low (RLED);

delay_ms (100);

))

 

Welcome to EDABoard.com

Sponsor

Back
Top