|
| |
Не зарегистрирован
Зарегистрирован: 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 ; Конец программы.
|