Как сохранить данные в EEPROM из внутреннего PIC16F914?

K

kenny_zhou

Guest
Привет всем!
Я встречаюсь проблема, я хочу сохранить много данных на внутреннюю память программ PIC16F914.But Я не знаю, как писать код на C или ASM.
Не могли бы вы дать мне руку!

Спасибо большое!

 
Посмотрите на таблицу - есть примеры кода там.

 
Если вы используете компилятор C, большинство из них имеют EEPROM читать и писать процедур в своих библиотеках.
Если вы используете Привет-Tech, посмотреть в "Pic.h", и вы будет штрафовать и макро определений и прототипы функций для чтения и записи флэш-памяти и EEPROM.

Из Привет-tech pic.h

Код:/************************************************* **********************/

/****** EEPROM памяти для чтения / записи макросов и определения функций *******/

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

/ * Заметьте:Макрос EEPROM_READ () не пригодны для использования сразу после любого

Создать в EEPROM, так как не ждать WR для очистки. Это,

дизайн, чтобы минимальный размер кода, если последовательность читает это

лучшего. гарантировать нетленным записи, используйте функцию

eeprom_read () или вставить

While (WR) продолжать;

Перед вызовом EEPROM_READ ().

* /

# Если EEPROM_SIZE> 0

# IFDEF __FLASHTYPE

/ / Макро версии EEPROM читать и писать

# DEFINE EEPROM_WRITE (адрес, стоимость) \

делать (\

While (WR) продолжать; EEADR = (Addr); EEDATA = (стоимость); \

EECON1 & = 0x7F; CARRY = 0, если (GIE) CARRY = 1; GIE = 0 \

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

если (перенос) GIE = 1; \

а) (0)

# DEFINE EEPROM_READ (адрес) ((EEADR = (Addr)), (EECON1 & = 0x7F), (RD = 1), EEDATA)

# зе / / другое не писать Flash

# DEFINE EEPROM_WRITE (адрес, стоимость) \

делать (\

While (WR) продолжать; EEADR = (Addr); EEDATA = (стоимость); \

CARRY = 0, если (GIE) CARRY = 1; GIE = 0 \

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

если (перенос) GIE = 1; \

а) (0)

# DEFINE EEPROM_READ (адрес) ((EEADR = (Addr)), (RD = 1), EEDATA)

# ENDIF/ * Функция версии библиотеки * /

Внешний eeprom_write недействительным (неподписанных адрес CHAR, Char знак стоимости);

Внешний eeprom_read Char знака (знака адрес Char);

# ENDIF / / конец процедуры EEPROM
 
Я использую УХУ.
Код:# включить <18F8722.h>

# устройство *= 16

# устройства АЦП = 8# ПРЕДОХРАНИТЕЛИ NOWDT, WDT128, EC_IO, NOPROTECT, IESO, Brownout, BORV25, PUT, NOCPD

# ПРЕДОХРАНИТЕЛИ STVREN, NODEBUG, NOLVP, NOWRT, NOCPB, NOEBTRB, NOEBTR, NOWRTD, NOWRTC

# ПРЕДОХРАНИТЕЛИ NOWRTB, FCMEN, LPT1OSC, MCLR, NOXINST, MCU# Используйте задержки (Clock = 40000000)# Используйте RS232 (Stream = ПК = 115200 бод, четности = N, XMIT = PIN_G1, RCV = PIN_G2, ошибки)# DEFINE RLED PIN_F7

# DEFINE YLED PIN_H5# ROM int8 0xf0000 = (1, 2, 3, 4)Основными Void ()

(

setup_adc_ports (NO_ANALOGS | VSS_VDD);

setup_adc (ADC_OFF | ADC_TAD_MUL_0);

setup_psp (PSP_DISABLED);

setup_spi (ЛОЖЬ);

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 (ЛОЖЬ);

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)

(

если (read_eeprom (0x0000) == 1)

output_high (YLED);

еще

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

output_low (RLED);

delay_ms (100);

))

 

Welcome to EDABoard.com

Sponsor

Back
Top