Главная страница
Навигация по странице:

  • Registr , после чего, произвести какую- нибудь операцию ссодержимым этого регистраНапример, увеличим его содержимое на единицу (.101

  • Registr Затем, запишем число .101

  • EEPROM памятью данных eeprom.asm находится впапке "

  • ;******************************************************************************** ; " ШАПКАПРОГРАММЫ"

  • ; Определение положения регистров специального назначения. ;================================================================================

  • Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008). Самоучитель по программированию PIC контроллеров для начинающих. Система команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.


    Скачать 3.49 Mb.
    НазваниеСистема команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.
    АнкорСамоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf
    Дата30.01.2017
    Размер3.49 Mb.
    Формат файлаpdf
    Имя файлаСамоучитель по программированию PIC контроллеров для начинающих .pdf
    ТипПрограмма
    #1195
    КатегорияПромышленность. Энергетика
    страница32 из 57
    1   ...   28   29   30   31   32   33   34   35   ...   57
    LED
    ами
    От
    LED0
    (самый младший, до (самый старший. Например, если результат измерения (подсчета) нужно вывести на индикацию как- разрядное, десятичное число, то двоичный результат измерения "прогоняется " через двоично- десятичное преобразование (о нем, позднее, в
    итоге которого, результат измерения помещается в
    младшие полубайты 8- ми
    LED
    ов
    Далее
    , содержимое этих регистров, с
    соблюдением порядка старшинства, поочередно копируется в
    регистр
    W
    , подвергается кодовому преобразованию (
    call TABLE
    ) и
    выводится на индикацию в
    виде символов
    Что касается последнего, то "технология " вывода на индикацию проста результат кодового преобразования, из регистра
    W,
    копируется в
    регистр того порта, к
    выводам которого подключены выводы секторов 7- сегментного индикатора
    А
    теперь представился удобный случай для того чтобы, в
    общем виде, разобраться с
    таким понятием как динамическая индикация
    Для определенности, предположим, что водном полном цикле индикации, результаты кодового преобразования выводятся на индикацию, начиная с
    младшего
    , десятичного разряда линейки 7- сегментных индикаторов (в порядке возрастания старшинства. По окончании последовательного вывода результатов кодового преобразования вовсе знакомест линейки, происходит переход (по кольцу) на вывод символа в
    младшее знакоместо линейки
    И
    так далее
    До конца линейки
    После этого, все опять повторяется снова и
    снова
    Вот
    Вам и
    типичный пример "двойной закольцовки ": один "виток " большого кольца индикации равен 8- ми "виткам " малого кольца индикации, "дислоцирующегося " внутри большого кольца индикации
    Если речь идет о
    фиксированном количестве "витков " (8), то количество "витков " малого кольца индикации нужно "поставить на счетчик ". Количество "витков " большого кольца индикации тоже нужно "поставить на счетчик ", ведь нельзя же допустить, чтобы рабочая точка программы все время находилась в
    подпрограмме вывода данных на индикацию
    В
    противном случае, "не будут делаться другие, важные дела ", например, замер
    А
    без него, такая индикация и
    даром ненужна То есть, должно быть "отмотано " фиксированное количество "витков " большого кольца индикации, после чего рабочая точка программы должна покинуть
    ПП
    вывода данных на индикацию и "сделать другие, важные дела ". После того как "она их сделает ", ив результате этого, в
    наличии будет иметься то, что нужно вывести на индикацию, снова начинается отработка
    ПП
    вывода данных на индикацию
    Все повторяется снова
    Ну итак далее
    Много раз
    В
    интервале времени каждой такой "отлучки ", 7- сегментные индикаторы "гасятся " вплоть до начала следующей отработки
    ПП
    вывода данных на индикацию
    Это и
    является причиной так называемых "
    мерцаний ", являющихся недостатком динамической индикации "Заход на второй круг ".
    В
    отдельно взятом, 7- сегментном индикаторе, символ индицируется
    (высвечивается ") в
    течение интервала времени формирования одного "витка " малого кольца индикации
    В
    этом интервале времени, он активен
    В
    начале следующего "витка " малого кольца индикации, этот 7- сегментный индикатор переводится из активного, в
    пассивное состояние (гасится "), а
    следующий
    , по разрядности,
    7- сегментный индикатор активируется
    Ну итак далее
    До окончания активации последнего, 7- сегментного индикатора линейки
    Таким образом, речь идет о
    последовательном
    , поразрядном выводе результатов измерения
    (
    счета
    ) на индикацию "Привязка " конкретных, десятичных разрядов результата измерения (счета) к
    конкретным знакоместам линейки 7- сегментных индикаторов, осуществляется путем последовательной
    (
    в порядке старшинства) "
    запитки " 7- сегментных индикаторов, входящих в
    состав линейки
    В
    зависимости оттого, какие именно 7- сегментные индикаторы применены (с общим катодом или с
    общим анодом, эта "
    запитка " осуществляется либо коммутацией точки соединения общих выводов сегментов на плюс источника питания, либо ее коммутацией на корпус

    167 Остальные выводы сегментов объединяются в
    группы
    (по принципу одноименности секторов) ив пределах этих групп, "
    параллелятся ". Получается 8 выводов, которые и
    подключаются к
    выводам порта, который задействован для управления линейкой
    Сказанное относится к
    тому случаю, если линейка создается из отдельных, 7- сегментных индикаторов
    Если речь идет о
    промышленных вариантах такой линейки, то ничего "
    параллелить " ненужно, так как разработчики об этом позаботились
    Для того чтобы обеспечить нужный порядок коммутации 7- сегментных индикаторов линейки, необходим дешифратор, то есть, устройство, у
    которого может быть активен только один из его выходов
    То
    , какой именно из них будет активен, зависит от адресного кода, подаваемого на его входы управления
    При наличии необходимого количества выводов портов, такой дешифратор можно реализовать программно (позднее, будет показано, как это делается. Ноне всегда выводов портов хватает
    Например
    , Все 8 выводов порта
    В
    задействованы
    (через них осуществляется вывод символов на индикацию. Остается 5 выводов порта
    А
    Но для линейки из 8- ми 7- сегментных индикаторов, этого явно недостаточно, так как нужно 8. Да еще и
    под другие нужды нужно что- то выделить
    Поэтому ничего другого не остается, как применить внешний (по отношению к
    ПИКу
    ) дешифратор на 3 адресных входа и 8 выходов
    Это уже вполне приемлемо, так как 3 это не 8. "Извернуться " можно
    Составив соответствующим образом программу, на этих 3- х
    входах
    , можно программно сформировать сигналы управления дешифратором, который, в
    свою очередь, будет осуществлять необходимые коммутации
    Ниже
    Вы видите практическую иллюстрацию сказанного
    Это принципиальная схема частотомера- цифровой шкалы
    На ней
    Вы видите то, о
    чем говорилось выше выводы порта
    В
    подключены к
    выводам секторов 7- сегментных индикаторов (одноименные секторы "
    запараллелены " внутри
    АЛС
    318), 8 общих выводов 7- сегментных индикаторов подключены к
    выходам дешифратора

    168
    (555
    ИД
    7), а
    адресные входы дешифратора подключены к
    первым трем выводам порта
    А
    Резисторы
    R16...R23 - гасящие
    Они нужны для предотвращения токовых перегрузок оконечных каскадов защелок порта
    В
    Пояснение
    В
    примере
    № 1, говорилось о
    реализации вычисляемого перехода, осуществляемого по внешнему, управляющему сигналу, сформированному клавиатурой, и
    имелось ввиду то устройство, принципиальную схему которого
    Вы видите выше
    Посмотрите на схему
    Кнопки клавиатуры подключены к
    выводам
    RA0
    и
    RA1
    Значит
    , эти выводы должны быть настроены на работу
    "
    на вход
    "
    Но к
    этим же выводам подключены и
    первые два адресных входа дешифратора 555
    ИД
    7. Значит, эти выводы должны быть настроены на работу
    "
    на выход
    "
    Вопрос
    :
    "Как же тогда все это "мирно сосуществует " и
    работает в
    комплексе "?
    Ответ
    :
    бОльшую часть полного цикла программы, выводы
    RA0
    и
    RA1
    работают
    "
    на выход
    ",
    то есть, управляют дешифратором (обеспечивают процесс динамической индикации. Для опроса клавиатуры, требуется очень малое время (доли процента от времени полного цикла программы.
    В
    данном случае, опрос клавиатуры производится вначале полного цикла программы и
    непосредственно перед этим опросом, выводы и
    RA1
    программно "
    перенастраиваются " с
    работы
    на выход на работу на "входа после окончания опроса сразу же программно "
    перенастраиваются " с
    работы
    на вход" на работу на выход
    "
    Эти "перенастройки " происходят очень быстро
    Вот
    Вам и
    типичный пример того, как одни и
    те же выводы портов задействуются для выполнения функционально различных действий, а "рулит всем этим делом " программа
    По этому же принципу, можно задействовать группу выводов портов и
    для выполнения большего количества различных "функциональностей " (возможность этого нужно рассматривать в
    каждом конкретном случае, что, согласитесь со мной, весьма существенно
    И
    особенно для "слабосильных " микроконтроллеров, имеющих небольшое количество выводов портов
    В
    данном же случае, без такого рода комплексного "задействования " просто не обойтись, так как если выделять для каждой "функциональности " отдельные группы выводов порта
    А
    , то пяти его выводов окажется недостаточными придется задействовать микроконтроллер с
    бОльшим количеством выводов портов
    Работа с EEPROM памятью данных. память данных также, как и
    память программ, является энергонезависимой памятью, но к
    памяти программ она отношения не имеет, и
    по этой причине, она как бы "стоит особняком " (выполняет свои специфические функции. Ее функции, в
    конечном итоге, сводятся к
    сохранению либо констант, либо числовых результатов операций после выключения питания микроконтроллера, с
    целью их дальнейшего использования после следующего включения питания
    Например
    , в
    моем частотомере- цифровой шкале, память данных задействована в
    двух случаях в
    нее записывается, определяемое пользователем (и по умолчанию, значение промежуточной частоты, которое в
    дальнейшем используется при формировании показаний индикатора в
    режиме цифровой шкалы, иона же выполняет функции энергонезависимой памяти настроек (установка, после включения питания, тех режимов работы прибора, которые были установлены на момент предшествующего выключения питания.
    В
    демонстрационной версии программы, которая предлагалась до замены ее на рабочую, память данных дополнительно задействовалась ив системе блокировки, которая срабатывала на третьем, после прошивки, включении питания, ив системе защиты от несанкционированных попыток изменения содержимого счетчика разрешенного количества включений питания
    Это только отдельный пример
    Есть еще масса всевозможных вариантов задействования
    EEPROM
    памяти данных, в
    результате которых, любое устройство на микроконтроллере можно сделать более "интеллектуальными удобным в
    использовании или
    /
    и ввести некие, трудно устранимые пользователем, ограничения, проявляющиеся после "выхода заграницы дозволенного ". Что касается ограничений, то это одно из моих "хобби ".

    169
    И
    не по той причине, что я "враг народа ". Просто интересно
    В
    связи с
    этим
    , спешу успокоить тех людей, которые пользуются моими "прошивками ": никаких "сюрпризов " они не содержат и
    на этот счет можно быть абсолютно спокойным
    EEPROM
    память
    , сама по себе, "тупая как валенок ". Из нее можно только или считать данные, или записать их в
    нее
    Если
    , при ее задействовании, речь идет о
    какой
    - то "интеллектуальности ", то эту "интеллектуальность " нужно "закладывать " в
    рабочую часть программы
    В
    простейшем случае, данные (числа) в
    EEPROM
    память записываются при "прошивке " ПИКа, а
    в ходе выполнения программы они периодически считываются из нее
    При выключении питания, эти данные не уничтожаются и
    с ними можно работать при последующих включениях питания
    В
    частотомере
    - цифровой шкале, этот вариант задействования
    EEPROM
    памяти применен для установки первичного значения промежуточной частоты (по умолчанию. Другой, более востребованный случай нужные программисту данные, могут быть записаны в
    EEPROM
    память данных, а
    также считаны из нее, при помощи специальных подпрограмм, рекомендованных разработчиками
    Запись и
    /
    или чтение данных можно "спровоцировать " различными способами
    Таким образом, можно многократно, пожеланию пользователя или автоматически, записывать в
    EEPROM
    память данных различные числа, которые, после считывания их из нее, используются в
    работе программы и
    которые сохраняются при выключении питания
    В
    частотомере
    - цифровой шкале, этот вариант задействования
    EEPROM
    памяти применен для организации режима работы типа "запись в
    EEPROM
    память значения промежуточной частоты, определяемой пользователем ". Данные, в
    EEPROM
    память данных, могут быть записаны при "прошивке " ПИКа, а
    затем
    , походу исполнения программы, считаны
    После этого, они могут быть видоизменены, ив этом виде, снова записаны в
    EEPROM
    память данных
    Таких циклов "
    считывания
    /
    записи " может быть много и
    они будут происходить до тех пор, пока результат чтения, например, не "войдет в
    зону " чисел, которую задал программист
    По факту этого события, производится какое- то действие
    С
    привлечением
    EEPROM
    памяти данных, можно организовать парольный доступ к
    чему
    - либо
    Можно еще перечислить множество различных случаев задействования
    EEPROM
    памяти данных
    Во всех случаях, "рулить " ей будет либо рабочая часть программы, либо она же, плюс директивы записи в
    EEPROM
    память данных, располагающиеся в "шапке " программы
    Что это за директивы, Вы узнаете ниже
    Естественно
    , что сейчас я
    не буду "обрушивать на
    Вас лавину информации ", связанной с
    рассмотрением сложных случаев задействования
    EEPROM
    памяти данных
    Примеры я
    привел только стой целью, чтобы показать
    Вам перспективность работы с
    EEPROM
    памятью данных
    Для начала, нужно понять, "что это вообще такое и
    с какого бока к
    этому подойти ".
    Объем
    EEPROM
    памяти данных невелик Для, это 64
    ячейки
    В
    других типах
    ПИКов
    , может быть и
    больше
    В
    каждую из этих ячеек может быть записан один байт (число от .00 до .255). После записи, этот байт (байты) можно считать и
    результат этого считывания использовать в
    программе
    Каждая из этих 64- х
    ячеек
    , в
    диапазоне адресов от .00 до .63
    (00h .. 3Fh), имеет свой адрес, который обязательно нужно указывать как при чтении из EEPROM памяти данных, таки при записи в
    нее
    . Походу составления программы, программист определяет, содержимое какой именно ячейки
    (
    ячеек
    ) нужно считать, ив какую именно ячейку (ячейки) нужно произвести запись, c привязкой " этих действий к
    логике программы
    Запись
    , в
    ту или иную ячейку
    EEPROM
    памяти данных, того или иного числа производится
    "
    по верху
    "
    "
    старого " числа
    При этом, "старое число погибает ". То есть, речь идет о
    замене одного числа другим
    .
    Во время "прошивки " ПИКа, в
    EEPROM
    память данных может быть произведена предварительная запись данных

    170 Этим "рулит " директива (или несколько таких директив)
    DE
    (см ниже, которая, в "шапке " программы, должна располагаться до директивы Поставим перед собой достаточно простую и
    конкретную задачу (что- то типа задания на разработку. До начала исполнения рабочей части программы, необходимо записать, в
    ячейку
    , например, с
    адресом
    02h, число, например, .100 (64h). Затем, входе исполнения программы, нужно скопировать содержимое этой ячейки (.100) в
    регистр регистр общего назначения с
    названием
    , например,
    Registr_,_после_чего,_произвести_какую-_нибудь_операцию_ссодержимым_этого_регистраНапример,_увеличим_его_содержимое_на_единицу_(.101'>Registr
    , после чего, произвести какую- нибудь операцию с
    содержимым этого регистра
    Например
    , увеличим его содержимое на единицу (.101), с
    сохранением результата операции в
    этом же регистре
    Registr
    Затем
    , запишем число .101 в
    ту же ячейку
    EEPROM
    памяти данных
    По ходу этих "разборок ", я
    буду объяснять общие положения работы с
    EEPROM
    памятью данных
    Обращаю
    Ваше внимание наследующую, хотя и
    достаточно примитивную, но "имеющую право на жизнь ", аналогию, которая поможет
    Вам понять суть работы с
    EEPROM
    памятью
    : ячейки
    EEPROM
    памяти можно представить себе в
    виде специфических регистров общего назначения
    И
    в самом деле, с
    содержимым этих ячеек можно производить те же операции, что и
    с содержимым регистров общего назначения (имеется ввиду чтение или запись, и
    не более того, и
    если не требуется сохранить данные после выключения питания, то задачу, сформулированную выше (а также и
    множество других задач, можно решить, задействуя только регистры общего назначения, что, в
    этом случае, всегда и
    делается на практике
    (
    оперативная память. К "услугам " памяти данных прибегают только тогда, когда "деваться некуда " (если не сохранить данные после выключения питания, тоне будет реализована задумка программиста. Главное отличие ячеек
    EEPROM
    памяти данных, от регистров общего назначения, состоит в
    том
    , что в
    них сохраняются данные после выключения питания
    Это хорошо, ноне "шустро ".
    В
    том смысле, что процедуры чтения
    /
    записи
    (особенно записи) довольно- таки "громоздки " достаточно большое количество команд, и
    они отрабатываются не за 1 м
    ц
    И
    даже не за 5, а
    поболее
    Это и
    есть специфика
    Файл с
    примером работы с
    EEPROM
    памятью данных eeprom.asm находится в
    папке
    "
    Тексты программ. Это выглядит так
    ;********************************************************************************
    ;
    РАБОТА
    С
    EEPROM
    ПАМЯТЬЮ
    ДАННЫХ
    ;********************************************************************************
    ; "
    ШАПКА
    ПРОГРАММЫ
    "
    ;================================================================================
    ;.............................................................
    ;.............................................................
    ;================================================================================
    ; Определение положения регистров специального назначения.
    ;================================================================================
    1   ...   28   29   30   31   32   33   34   35   ...   57


    написать администратору сайта