como salvar dados na EEPROM interna do PIC16F914?

K

kenny_zhou

Guest
Olá a todos!
i reunir um problema, eu quero salvar muitos dados com o regulamento interno da EEPROM PIC16F914.But não sei como escrever o código em C ou ASM.
você poderia me dar uma mão!

thanks a lot!

 
Dê uma olhada no datasheet - existem exemplos código lá.

 
Se você estiver usando um compilador C,
a maioria deles têm eeprom ler e escrever em suas rotinas bibliotecas.
Se você estiver usando Hi-Tech, procure em "Pic.h" e você terá multa tanto macro definições e protótipos função de leitura e escrita de memória flash e eeprom.

Extrato de Hi-Tech pic.h

Código:/************************************************* **********************/

/****** Memória EEPROM ler / escrever macros e definições função *******/

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

/ * NOTE BEM:A macro EEPROM_READ () não é segura para uso imediatamente após qualquer

EEPROM para escrever, uma vez que não se espere que a WR clara. Este é, por

concepção, a fim de permitir tamanho mínimo código se lê é uma seqüência de

pretendida. Para garantir uncorrupted escreve, utilize a função

eeprom_read () ou inserir

while (WR) continue;

antes de chamar EEPROM_READ ().

* /

# se EEPROM_SIZE> 0

# ifdef __FLASHTYPE

/ / Macro versões EEPROM de escrever e ler

# define EEPROM_WRITE (addr, valor) \

do (\

while (WR) continue; EEADR = (addr); EEDATA = (valor); \

EECON1 & = 0x7F; TRANSPORTAR = 0; if (GIE) realizar = 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 / / senão não escreve flash

# define EEPROM_WRITE (addr, valor) \

do (\

while (WR) continue; EEADR = (addr); EEDATA = (valor); \

TRANSPORTE = 0; if (GIE) realizar = 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/ * Biblioteca versões função * /

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

extern unsigned char eeprom_read (unsigned char addr);

# endif / / fim EEPROM routines
 
Eu uso CAC.
Código:# include <18F8722.h>

# dispositivo *= 16

# dispositivo adc = 8# Fusíveis NOWDT, WDT128, EC_IO, NOPROTECT, IESO, BROWNOUT, BORV25, PUT, NOCPD

# Fusíveis STVREN, NODEBUG, NOLVP, NOWRT, NOCPB, NOEBTRB, NOEBTR, NOWRTD, NOWRTC

# Fusíveis NOWRTB, FCMEN, LPT1OSC, MCLR, NOXINST, MCU# poderá utilizar o atraso (clock = 40000000)# use rs232 (stream = PC, baud = 115200, parity = N, xmit = PIN_G1, VN = PIN_G2, erros)# 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 (falso);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);

diferente

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

output_low (RLED);

delay_ms (100);

))

 

Welcome to EDABoard.com

Sponsor

Back
Top