АвторСообщение



Не зарегистрирован
Зарегистрирован: 31.07.17
Рейтинг: 0
ссылка на сообщение  Отправлено: 31.07.17 10:59. Заголовок: PIC12F629 проблема при записи в EEPROM


Здравствуйте!
Недавно начал работать с микроконтроллерами. Первые программы составил вполне успешно, но вот с записью в EEPROM вышла проблема. Работаю в MPLAB, даташит по контроллеру 12F629 прочитал, все сделал так, как указано в даташите для записи в EEPROM.
В MPLAB все работает, но вот в "натуре" не хочет ни в какую... Уже составил простейшую программу без задействования выводов портов просто в записью констант в регистры и последующей записью в EEPROM... все равно ни в какую. Пробовал предварительно закладывать в прошивку запись в EEPROM. Через программатор запись проходит. Зато после проверки в схеме в "натуре" вся информация почему-то из EEPROM оказывается стертой (FF). В чем дело, непонятно...

Текст программы прилагаю (может что-то не так делаю...) (На некоторые комментарии не обращайте внимания, это из рабочей программы)
Извините за некорректное отбражение на сайте...

; "ШАПКА" ПРОГРАММЫ
;********************************************************************************
LIST p=12F629 ; Назначение типа ПИКа: PIC12F629.
__CONFIG 3F94H ; Установка битов конфигурации: внутренний
; генератор, WDT выключен, бит защиты не
; установлен, PWRT выключен (11111110010100).
;================================================================================
; Определение адресов регистров специального назначения.
;================================================================================
Status equ 03h ; Регистр Status
IntCon equ 0Bh ; Регистр IntCon
PIR1 equ 0Ch ; Регистр флага завершения записи EEPROM
EEdata equ 9Ah ; EEPROM данные - Банк 1
EEAdr equ 9Bh ; EEPROM адрес - Банк 1
EECon1 equ 9Ch ; EECON1 - Банк 1
EECon2 equ 9Dh ; EECON2 - Банк 1
;================================================================================
; Определение названия и адресов регистров общего назначения.
;================================================================================
S1 equ 20h
S2 equ 21h
S3 equ 22h
S4 equ 23h
S5 equ 24h
;================================================================================
; Присвоение буквенного обозначения операции направления результата выполнения
; команды в регистр, с содержимым которого производится действие (для удобства
; восприятия текста программы).
;================================================================================
F equ 1 ; Результат направить в регистр, с содержимым
; которого производится действие.
W equ 0 ; Результат сохранить в аккумуляторе
;================================================================================
; Присвоение битам их стандартных названий.
; (для удобства восприятия текста программы).
;================================================================================
RP0 equ 5 ; Присвоение 5-му биту регистра STATUS
; названия RP0.
;-------------------------------------------------------------------------------
org 2100h ; Обращение к EEPROM памяти данных.
DE 0FFh,0FFh,0FFh,0FFh,1h ; Записать в ячейки с адресами .0, .1, .2
; числа 0h, 0h, 64h (.100) соответственно.
;================================================================================
; Определение точки входа в программу.
;================================================================================
org 0 ; Начать выполнение программы
goto START ; с первой команды подпрограммы START.
;********************************************************************************
;------------------------ РАБОЧАЯ ЧАСТЬ ПРОГРАММЫ -----------------------------
;********************************************************************************
; Подготовительные операции.
;--------------------------------------------------------------------------------
START clrf IntCon ; Запрещение прерываний
movlw .1
movwf S1
movlw .2
movwf S2
movlw .3
movwf S3
movlw .4
movwf S4
movlw .5
movwf S5
btfsc PIR1,7
goto START
;--------------------------------------------------------------------------------
; Запись
;--------------------------------------------------------------------------------
bsf Status,RP0 ; Выбрать банк 1
movlw .0 ; Записать в регистр W константу 0h.
movwf EEAdr ; Скопировать 0h из регистра W в регистр EEAdr.
movf S1,W ; Скопировать данные регистра
movwf EEdata ; для записи в EEPROM
bsf EECon1,2 ; Разрешить запись
bcf IntCon,7 ; Глобальный запрет прерываний
movlw 055h
movwf EECon2
movlw 0AAh
movwf EECon2
bsf EECon1,1
;-------------------------------------------------------------------------------------------
movlw .1 ; Записать в регистр W константу 1h.
movwf EEAdr ; Скопировать 1h из регистра W в регистр EEAdr.
movf S2,W ; Скопировать данные регистра МЛАДЬШЕГО
movwf EEdata ; разряда задержки для записи в EEPROM
bsf EECon1,2 ; Разрешить запись
bcf IntCon,7 ; Глобальный запрет прерываний
movlw 055h
movwf EECon2
movlw 0AAh
movwf EECon2
bsf EECon1,1
;--------------------------------------------------------------------------------
movlw .2 ; Записать в регистр W константу 3h.
movwf EEAdr ; Скопировать 3h из регистра W в регистр EEAdr.
movf S3,W ; Скопировать данные регистра МЛАДЬШЕГО
movwf EEdata ; разряда задержки для записи в EEPROM
bsf EECon1,2 ; Разрешить запись
bcf IntCon,7 ; Глобальный запрет прерываний
movlw 055h
movwf EECon2
movlw 0AAh
movwf EECon2
bsf EECon1,1
;--------------------------------------------------------------------------------
movlw .3 ; Записать в регистр W константу 4h.
movwf EEAdr ; Скопировать 4h из регистра W в регистр EEAdr.
movf S4,W ; Скопировать данные регистра МЛАДЬШЕГО
movwf EEdata ; разряда задержки для записи в EEPROM
bsf EECon1,2 ; Разрешить запись
bcf IntCon,7 ; Глобальный запрет прерываний
movlw 055h
movwf EECon2
movlw 0AAh
movwf EECon2
bsf EECon1,1
;---------------------------------------------------------------------------------------
movlw .4 ; Записать в регистр W константу 4h.
movwf EEAdr ; Скопировать 4h из регистра W в регистр EEAdr.
movf S5,W ; Скопировать данные регистра МЛАДЬШЕГО
movwf EEdata ; разряда задержки для записи в EEPROM
bsf EECon1,2 ; Разрешить запись
bcf IntCon,7 ; Глобальный запрет прерываний
movlw 055h
movwf EECon2
movlw 0AAh
movwf EECon2
bsf EECon1,1
bcf EECon1,2 ; Запрет записи
bcf Status,RP0 ; Выбрать банк 0
goto START
;================================================================================
end ; Конец программы.




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


администратор




Пост N: 694
Зарегистрирован: 16.03.09
Откуда: Родина, Севастополь
Рейтинг: 1
ссылка на сообщение  Отправлено: 07.08.17 12:49. Заголовок: Вот это пробуйте. cl..


Вот это пробуйте.
click here


Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 31.07.17
Рейтинг: 0
ссылка на сообщение  Отправлено: 07.09.17 11:37. Заголовок: Спасибо, но уже сам ..


Спасибо, но уже сам разобрался. Просто надо было ставить задержку после команды инициализации записи. (Не учел, что данные-то в EEPROM моментально не записываются... Сейчас все заработало! :-)

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 32
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия