Микроконтроллер 1886ВЕ5 содержит аппаратную защиту от записи в память программ. К сожалению это выпало из спецификации. Для записи в память программ, непосредственно перед операцией записи, необходимо подать на вывод "TEST" логическую единицу, а после выполнения записи подать на этот вывод ноль. Это снимает блокировку записи. Необходимо учесть, что нельзя постоянно подавать на этот вывод единицу, т.к. в этом случае при старте микроконтроллер будет уходить в тестовый режим.
Спасибо за ответ. Запись заработала. Также удалось реализовать стирание младшего и старшего секторов памяти. Но аналогичный код по стиранию строки из 16 слов не работает. Укажите, пожалуйста, на причину ошибки.
Рабочий код для стирания секторов:
void erase_sector(char high)
{
TBLPTR = 0;
if (high)
{
EECONH = 0x08; //EEBL = 1
}
else
{
EECONL = 0x08; //EEBH = 1
}
start_timer(); //Timer0 16 ms
writeL(0); //TLWT 0,0
writeHU(0); //TABLWT 1,0,0
}
Нерабочий код для стирания строки из 16 слов:
void erase_string(uns16 address)
{
TBLPTR = address;
if (address >= 2048)
{
EECONH = 0x04; //EERL = 1
}
else
{
EECONL = 0x04; //EERH = 1
}
start_timer(); //Timer0 16 ms
writeL(0); //TLWT 0,0
writeHU(0); //TABLWT 1,0,0
}
Логическая единица на входе TEST устанавливается вне приведённых функций. В качестве адреса для стирания строки передавались различные значения, в том числе и ноль. Но никакого стирания не происходит.