Вывод текста из EEPROM на ЖКИ • Все своими руками






Вывод текста из EEPROM на ЖКИ

Вывод текста из EEPROM PIC контроллеров на ЖКИ

Эта статья для радиолюбителей, начинающих своё познание в написании программ на ассемблере применительно к PIC16Fxxx. Попался мне недавно один исходник программы измерителя емкости и индуктивности австралийского товарища. И у него в этом исходном файле мне понравился код вывода текстовой информации из флешь памяти контроллера на индикатор.

Я его сразу вставил в свою программу таймера с часами реального времени для водонагревателя. В процессе его изучения мне показалось, что его можно упростить, что я и сделал. Еще раз повторюсь, эта статья для начинающих, все будет подробно, но возможно скучно. Но перед тем как что-то выводить, нам надо это что-то сначала записать в EEPROM. Запись нужного текста в энергонезависимую память производится с помощью директивы DE – «Резервирует 8-разрядное значение в EEPROM памяти». На скриншоте показана запись в память трех текстовых строк – строка 808, 809 и 810. Перед ними на строке 807 находится директива ORG –« Установить адрес программы». Как известно энергонезависимая память начинается с адреса 0×2100.

Загрузка текста в память EEPROM

Разберем строку 808. 1 – Метка Bkl, 2- директива DE, 3 – двойные кавычки, 4 – два пробела, 5-Set, 6 – пробел и т.д. Далее после «On» идут три пробела, кавычки закрываются, разделительная запятая И! – ноль! Этот ноль служит своеобразной меткой конца чтения выводимого на индикатор текста. Оригинальное решение, хотя и занимает ячейку памяти. Метка «Bkl» обозначает адрес ячейки флешь памяти, с которой начинается считывание данных. Внизу скриншот записи данных строк в ячейках EEPROM.

Данные в ячейках EEPROM

И так, строка 808. Данные записаны начиная с ячейки с нулевым адресом, а заканчиваются ячейкой с адресом 0х0F, следующий адрес – 0×10, здесь как раз и записан ноль — метка. При обращении к метке «Bkl» при помощи инструкции movlw, в рабочий регистр WREG будет перенесен адрес первой, в данном случае, нулевой ячейки, содержащей код первого в строке пробела. При обращении в метке «Bykl» в рабочий регистр WREG будет перенесен адрес 0×11 – первой ячейки с кодом пробела текста на строке 809. Теперь непосредственно к самому коду считывания и выведения на индикатор. Скриншот с кодом показан ниже.

Код вывода данных из памяти EEPROM

Непосредственно сам код считывания начинается с 211 строки. Но начнем мы со строки 205 – полной очистки ЖКИ. Стр. 205 — читаем код команды очистки ЖКИ, 206 — передаем код команды в индикатор. 207 – обязательно даем время контроллеру индикатора на выполнение команды. В данном случае пауза может быть намного короче, просто у меня в программе уже есть такая задержка. Далее, строки 208, 209 – сообщаем контроллеру индикатора, с какой строки, и с какого знакоместа начинать вывод информации. Строка 211 – инструкция movlw – заносим в рабочий регистр WREG адрес первой ячейки с меткой «Bkl», находящейся в области EEPROM памяти данных с адресом 0×2100. (Раньше не встречал такой записи, век живи – век учись…). Далее по строкам – переходим в первый банк, т.к. регистр специального назначения EEADR находится в нем, записываем в него адрес первой ячейки нужных нам данных. Далее идет дублирующая инструкция перехода в первый банк, необходимая при дальнейших циклах считывания. Строка 215 – разрешаем чтение данных выбранной ячейки. Не выходя из первого банка, инкрементируем регистр адреса EEADR, т.е. в следующем цикле будут считываться данные из ячейки с адресом 0×01 и т.д. 217-я строка – заносим считанные данные из выбранной ячейки памяти, находящиеся в регистре EEDATA в рабочий регистр WREG. Далее переходим в нулевой банк и проверяем содержимое рабочего регистра на ноль – ждем тот самый нолик, оповещающий о конце считывания. Если в регистре данные не равные нулю, то пропускаем инструкцию безусловного перехода Goto на метку Main_Bkl и выполняем следующую команду Call – вызов подпрограммы вывода символа на индикатор. Далее возвращаемся на метку Cykle_1, вот здесь и пригодилась дублирующая команда перехода в первый банк. Так будет повторяться цикл за циклом, пока в один прекрасный момент в рабочем регистре WREG не обнаружится ноль. Флаг нулевого результата приобретет значение единицы, и в этом случае область исполнения программы переместится на строку 220, выполнит команду безусловного перехода на метку Main_Bkl и пойдет далее выполнять возложенные на неё функции.

Скачать файлы проекта



.

Просмотров:587
Комментариев нет




Оставить комментарий