5. Записать h’55’ в регистр EECON2.
6. Записать h’AA’ в регистр EECON2.
7. Установить бит WR для инициирования цикла записи.
8. Выполнить две пустые команды пор.
9. Сбросить бит WREN.
10. При необходимости разрешить прерывания.
11. Дожидаться сброса бита WR, свидетельствующего о завершении цикла записи, нет необходимости, поскольку на время записи работа процессора приостанавливается и возобновляется только по окончании записи.
Подпрограмма FLASH_PUT
, код которой приведен в Программе 15.6, написана в предположении, что при входе в подпрограмму адрес ячейки уже находится в регистрах EEADRH: EEADR, а 14-битное значение — в регистрах EEDATH: EEDATA.; ************************
; * ФУНКЦИЯ: Записывает одно слово в FLASH-память программ *
; * ВХОД: Слово данных в EEDATH: EEDATA *
; * ВХОД: Адрес ячейки в EEADDRH: EEADDR *
; * ВХОД: На время записи прерывания запрещаются *
; * ВЫХОД: Рабочий банк — 0-й *
; *************************
FLASH_PUT
bsf STATUS,RP0
; Переключаемся в 3-й банкbsf STATUS,RP1
bsf EECON1,EEPGD
; Пишем в память программbsf EECON1,WREN
; Разрешаем операцию записиbcf INTCON,GIE
; Запрещаем все прерыванияmovlw h’55’
; Загружаем кодовую последовательностьmovwf EECON2;
movlw h’AA’
movwf EECON2
bsf EECON1,WR
; Инициируем цикл записиnop
nop
bcf EECON1,WREN
; Запрещаем последующую записьbsf INTCON,GIE
; Разрешаем прерыванияbcf STATUS,RP1
; Возвращаемся в 0-й банкbcf STATUS,RP0
return
; и выходим из n/n по окончании цикла записиВсе устройства, имеющие память программ с возможностью электрического стирания, содержат в слове конфигурации биты
Защита кода также влияет и на внутренние операции записи в память программ с помощью кода, подобного представленному на Рис. 15.6. Из самой программы запись может осуществляться только в незащищенные участки памяти программ при условии, что бит WRT установлен в 1 (состояние по умолчанию). Запись 0 в этот бит (_WRT_ENABLE_OFF
) запретит внутреннюю запись в память программ независимо от установок битов защиты кода. На операцию внутреннего чтения биты защиты кода никак не влияют. Директива __config, присутствующая в Программе 15.5, используется для отключения защиты всей памяти программ, что, вообще говоря, делать не обязательно, поскольку в таком состоянии биты находятся по умолчанию.Рис. 15.6
.