.
А операция стирания выполняется блоками по 64 байта.
На время выполнения процесса записи/стирания памяти программ, выполнение текущей программы приостанавливается, пока не закончится цикл записи/стирания (приблизительно 18 мс., выполняется от отдельного таймера). Что конечно вызывает определенные трудности при написание программ, где есть необходимость в точном временном интервале. Вообще в пользовательских программах процесс записи/стирания Flash память программ довольно редкое явление. Очень мало программистов кто этим пользуется и не только из-за приблизительного времени записи/стирания, но и по количественному ограничению самих процессов до 100 000 циклов. Что не скажешь про операцию чтения Flash память программ, которая наоборот очень часто используется программистами (необходимые данные (шрифт, текстовая информация и др. данные) записанные в Flash память программ на стадии "прошивки" впоследствии передаются при помощи специальной операции (команды) в память данных).
Чтение памяти программ.
Для чтения содержимого памяти программ используется инструкция (команда) TBLRD. Она имеет несколько разновидностей, которые мы сейчас рассмотрим:
Результат выполнения команды будет находиться в регистре TABLAT, который является "посредником" между 16-разрядной памятью программ и 8-разрядной памятью данных. Для доступа к памяти используется указатель TBLPTR (TBLPTRU:TBLPTRH:TBLPTRL-21 битный указатель), с помощью которого можно обратиться к любому байту адресного пространства памяти программ.
Для удобства можно указывать метки (названия таблиц ) таблицы данных в памяти программ, воспользовавшись операторами low, high, upper, в принципе от последнего, (если объем памяти программ не превышает 64 КБ) можно и отказаться, просто сбросив TBLPTRU в "0".
Рассмотрим пример:
У нас есть таблица данных в области памяти программ под меткой "TEST" и нам необходимо ее прочитать . Для этого задаем указатель TBLPTR:
clrf TBLPTRU ; Cбрасываем верхний байт
movlw high (TEST); =Задание адреса "TEST"
movwf TBLPTRH ; старшего байта=
movlw low (TEST); =Задание адреса "TEST"
movwf TBLPTRL ; младшего байта=
Естественно, если у вас другое название таблиц(и), вместо TEST необходимо написать их названия (метки).
Далее в зависимости от задачи выполняем подпрограммы (ПП) чтения, как показано здесь...
Важно:
Если таблица данных состоит из нескольких строк, то количество байт в каждой строке, кроме последней строки, должны быть четными. Это объясняется тем, что память программ 16-разрядная (2 байта), а строки в MPLAB всегда начинается соответственно с четного адреса. Прочитав младший байт, мы перескочили старший (нечетный). Но во время инкремента (декремента) этот байт будет считываться, что приведет к ошибке. Надеюсь, понятно объяснил....
Если что не понятно, то можно посмотреть видеоурок по теме.....
Переходим к рассмотрению записи в память программ.
Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2021 © ChipMK.ru
![]() |
|