Свежие обсуждения
Микроконтроллеры

КАК РАБОТАТЬ С EEPROM PIC16F84A

Ребята такой вопрос работаю с EEPROM, в процессе записи нужен ли обнулять регистор EEDATA. Если идет обнуление на остальных ячейках записывает значение 00. Подскажите как быть...

 

Для чтения:
* нужно записать в соответствующий регистр адресс и затем прочитать с регистра EEDATA значение.
* для записи: занести значение в EEDATA, занести адресс, выполнить "волшебную последовательность"

 

Учтите, что данный товарищ так и не предоставил доказательств того, что это не "развод".

 

Уважаемый Gregory я что то Вас не понимаю о чем вы можно конкретно.

 

peling: обнулять регистор EEDATA. нет, читайте ДШ, там всё разжёвано
При записи в память EEPROM, необходимо сначала записать требуемый адрес в EEADR регистр и данные в EEDATA регистр. Затем выполнить специальную последовательность команд, производящуюю непосредственную запись:
bcf INTCON,GIE
movlv 55h
movwf EECON2
movlv AAh
movwf EECON2
bsf EECON1,WR ;установить WR бит, начать запись

 

Сергей К я считоваю инфо. с компьютера через LPT порт порт работает в режыме ECP портом (микрокотроллером)управляет программа написанн-й на C++ ::::::::: начало>>>>
1 передача лог"1" на микроконтроллер после принятие

ORG 0X000
START
CLRF PORTA
CLRF PORTB
BSF STATUS,RP0
MOVLW B'01001'
MOVWF TRISA
MOVLW B'11111111'
MOVWF TRISB
BCF STATUS,RP0
i
movf PORTA,w
movwf count
btfss count,0
goto i
MOVLW B'00010' ; передача ответ сигнала
MOVWF PORTA
после получения ответ сигнала компьютер выставляет первый блок(8бит) в регистор DATA порт LPT контроллер считовает и записивает в первую ячейку ;
scan2
bcf status,2
movf PORTB,w
btfsc status,2
goto scan2
movwf EEDATA
movlw 0x0000
movwf EEADR
bsf status,5
bsf EECON1,WREN
MOVLW 0x055
MOVWF EECON2
MOVLW 0x0AA
MOVWF EECON2
k
BSF EECON1,WR
btfsc EECON1,WR
goto t
goto k
t
bcf EECON1,WREN
bcf status,RP0
RETURN
таким же образом записиваю 2 ой блок но во время считование ошыбки послед.число оказовается в обоех ячейках?????????

 

А подождать, пока запись закончится?
Посмотрите документацию на МК. Там пример есть. (microchip.ru)
Запись 1 байта в EEPROM длится некоторое время (не зависит от тактовой частоты). Сейчас под рукой документации нету, там нужно проверить флаг "завершения записи".

 

кусок из рабочей программы:
RD_EE BCF STATUS,RP0 ;----------подпрограмма ЧТЕНИЯ из EEPROM \
MOVLW 01h ;адрес ячейки EEPROM, где хранится TB \
MOVWF EEADR
BSF STATUS,RP0
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,0 ;W=EEDATA
RETURN ; /

WR_EE ;------ЗАПИСЬ в EEPROM\________________________
BSF STATUS,RP0 ;банк1 \
BSF EECON1,WREN ;разрешить ЗП \

BCF INTCON,GIE ;запрет прерываний
MOVLW 055h ;ЗП 55
MOVWF EECON2 ;
MOVLW 0AAh ;ЗП АА
MOVWF EECON2 ;
BSF EECON1,WR ;установить бит начала записи

BCF STATUS,RP0 ;банк0
CALL DELAY1
BCF STATUS,WREN ;запрет записи в EEPROM /
RETURN ; _______________________________/

 

Незабывайте "ждать"(пауза) до начала новой записи в ячейку.
P.S.: Там есть бит об окончании записи!

 

Мужики как сказали сделал все отлично работает спасибо Вам всем.