Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008). Самоучитель по программированию PIC контроллеров для начинающих. Система команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.
![]()
|
http://ikarab.narod.ru E-mail: karabea@lipetsk.ru 72 7. Пример создания программы (начало. Общие положения Порядок разработки устройств на микроконтроллерах следующий Предположим, что возникла идея создания устройства на микроконтроллере, которая "упирается " в создание программы, обеспечивающей реализацию замысла конструктора Программа создается не сама для себя, а под конкретное устройство . Цель программы - обеспечения "нормального " (в соответствии с задуманным ) функционирования этого устройства Значительная часть электронной начинки задуманного устройства (кроме внешних, по отношению к микроконтроллеру , устройств) находится внутри микроконтроллера В соответствии с логикой (алгоритмом) работы программы, заданной программистом, программа формирует состав этой электронной начинки (что- то включает, что- то выключает) и обеспечивает логическое взаимодействие ее составных частей Специфика конструирования устройств на микроконтроллерах заключается в том , что в большинстве случаев, наличия отработанной блок - схемы программы оказывается достаточным для создания его полной принципиальной схемы или той части принципиальной схемы, которая включает в себя микроконтроллер И в самом деле, если осуществлена "жесткая привязка " внешних (по отношению к микроконтроллеру ) цепей и устройств к конкретным выводам микроконтроллера (функции выводов определены, типы внешних цепей и устройств определены и "привязаны " к рабочим уровням напряжения на выводах микроконтроллера, то он представляет собой базовый блок с "четко " определенными функциями, к выводам которого подключаются входы ( управление внешними устройствами) и выходы (управление базовым блоком) внешних устройств В процессе "доведения аппаратуры до ума ", при неизменных функциях базового блока, внешние устройства могут видоизменяться, заменяться на аналогичные и т д Именно к такого рода определенности и нужно стремиться при конструировании устройств на микроконтроллерах Естественно , что в процессе работы, могут производиться корректировки / изменения ( например , переназначение функций выводов портов, изменение логики управления внешними устройствами и т д. Процесс создания "электронной начинки " устройства можно разделить на два этапа, которые характеризуются словами "грубо " и "точно " (по аналогии со стратегией и тактикой ). Грубый " этап включает в себя создание блок- схемы устройства, в которой "центром вселенной " является базовый блок на микроконтроллере Блок - схема устройства состоит из блок- схемы программы (основная "масса ") и "квадратиков " условно, обозначающих внешние устройства На этом этапе работы, нужно ясно и четко представлять себе функции, выполняемые той или иной составной частью блок - схемы, а также и порядок их взаимодействия Например , если в блок - схему программы введен счетчик, то как минимум, необходимо знать правильный ответ на вопрос "Зачем он вообще нужен и каковы его функции в "общей картине " устройства "? Если без него обойтись нельзя, тов контексте задумки, нужно определиться сего параметрами (время и направление счета, активный фронтит д. Это потребуется при составлении программы Естественно , что необходимо знать принципы работы устройств цифровой техники (а часто и аналоговой ), а иначе будет " ёжик в тумане ". По этой причине, "ставки " начинающих программистов, имеющих опыт практической работы в области цифровой и аналоговой техники, выше "ставок " начинающих программистов, которые этого опыта не имеют, хотя, в конечном итоге, результат работы зависит от трудолюбия и " упёртости ". После того, как определены элементы блок - схемы программы и порядок их взаимодействия, определяются функции выводов микроконтроллера То есть, в соответствии с функциональным предназначением выводов м / контроллера , определяется порядок подключения, к ним , входов и выходов внешних устройств В дальнейшем , при составлении программы, этот порядок подключения будет определять содержание команд, производящих действия сданными, поступающими в микроконтроллер от внешних устройств, и с данными, которые формируются микроконтроллером для 73 управления внешними устройствами После этого, сначала, составляется принципиальная схема базового блока (рисуется м / контроллер ), а потом , к выводам микроконтроллера, определенным ранее, "подключаются " входы или выходы внешних устройств Если конструктор еще не определился с принципиальными схемами внешних устройств, то их можно изобразить в виде "квадратиков ". Если конструктор заранее определился с принципиальными схемами внешних устройств, то можно составить полную, принципиальную схему разрабатываемого устройства и "привязать " программу к специфике работы внешних устройств Второй вариант, намой взгляд, более предпочтителен, так как он предполагает изначальную продуманность конструкции устройства и соответственно , меньшее количество непредвиденных "сюрпризов ", хотя и первый вариант неплох, особенно для программистов с опытом работы На этом, "грубый " этап работы заканчивается и начинается "точный ". Итак, принцип работы устройства (стратегия, в основном , продуман и понятен Принципиальная схема в наличии Теперь можно начинать составление программы До этого предполагалось, что базовый блок работает "идеально " (без ошибок. Теперь нужно, программными и аппаратными средствами ПИКа , обеспечить это на практике Работа по составлению программы начинается с "шапки " программы, в которой нужно "прописать " все регистры специального и общего назначения, которые предполагается использовать в программе Если Вы что- то забудете "прописать ", а это "что- то " задействуется в рабочей части программы, то ничего страшного, Вам об этом обязательно напомнит По ходу создания программы, часто появляется необходимость "прописки " дополнительных регистров Проблем в этом никаких нет Они "прописываются " также, как и ранее "прописанные " регистры и тут же "вводятся в бой ". Основные "сражения с непослушными нулями и единицами развернутся " в рабочей части программы Здесь будут "стрелять пушки, бить барабаны, свистеть пули и литься кровь ". Желаю Вам оказаться победителем в этом "сражении " и испытать радость победы над самим собой Обычно , рабочая часть программы начинается с подготовительных операций И в самом деле, принципиальная схема устройства в наличии , а значит можно осуществить "привязку " программы к внешним цепями, если к выводу RB0 порта В подключен светодиода к выводу RA4 порта А подключен выход, например, формирователя импульсов, тов начале программы ( в ПП Start ), вывод RB0 необходимо переключить на работу "на выход ", а вывод RA4 переключить на работу "на вход ". Таким образом, речь идет о начальной "настройке " битов каких- то из регистров специального назначения (в данном случае, и. Очень часто требуется сбросить в ноль содержимое каких- то из регистров общего назначения (подготовить их к заполнению данными. Или еще что- нибудь Зависит от конкретной программы Чем сложнее программа, тем "массивнее " подготовительные операции А вот после подготовительных операций, начинается то, что описать, прямо скажу, сложновато Да и как можно описать все детали игры, например, в шахматы ? Возможных комбинаций – миллионы Жизни не хватит Тема неисчерпаемая Для людей творческих и ищущих настоящий " Клондайк ", где можно развернуться "вовсю ширь " и по максимуму реализовать свой творческий потенциал Естественно , что свою задачу я вижу не в том , чтобы "перелопачивать " всё многообразие различных решений, а в том, чтобы помочь Вам приобщиться к этому очень перспективному и увлекательному занятию, а заодно и помочь Вам стать "жизнеспособным организмом ", склонным к самостоятельному развитию (самообразованию. Если быть объективным, то заголовок этого раздела не в полной мере отражает суть того, чем мы будем далее заниматься 74 Необходимо уточнить мы будем заниматься конструированием устройств на ПИКах Для того чтобы это сделать, нужен "симбиоз " электронщика и программиста "Однобокость " типа "или электронщик, или программист " ник чему хорошему не приведет ( машина без колесили колеса без машины. Учтите это Так как "Самоучитель" рассчитан, в первую очередь, на начинающих, то устройства, программы под них или фрагменты программ, изначально, будут простыми В дальнейшем , их сложность будет постепенно нарастать Все файлы текстов программ или их частей, будут иметь расширение .ASM и их можно будет открыть в MPLAB Подробное описание процесса конструирования устройства на PIC16F84A. Примечание все, что будет описываться ниже, для меня уже пройденный этап и "логические цепочки " я, естественно, буду восстанавливать по памяти Постараюсь это сделать в удобной для восприятия форме Примеры взяты из реальной жизни (моей. Описываемые ниже устройства, работоспособны, выполняют свои функции и проверены в работе Пример В большинстве случаев (ноне всегда, все начинается с того , что возникает некая необходимость В свое время, я работал в системе МЧС Липецкой области и занимался вопросами технического обслуживания, ремонта средств радиосвязи и модернизации существующей системы радиосвязи Возникла необходимость в создании относительно дешевого, двунаправленного ретранслятора на импортных симплексных радиостанциях Vertex - 2000, а также в переводе однонаправленного ретранслятора Vertex - 7000 в двунаправленный режим Эти задачи были успешно решены при помощи простых (в схемотехническом отношении) устройств на, которые обошлись очень дешево, но тем не менее, сэкономили "кругленькую сумму ", время и нервы Для начала, рассмотрим самое простое из этих устройств - устройство формирования сигнала тонального вызова для оконечной аппаратуры управления ретранслятором, в качестве которой использована радиостанция Vertex - 2000. Начинаем "раскрутку ". Суть проблемы Система тонального вызова необходима для вызова корреспондента в том случае, если его трубка уложена в специально отведенное для этого место В таком положении, в режиме дежурного приема, радиостанция "не слышит " ничего, кроме строго определенного по частоте сигнала тонального вызова и "докричаться " до корреспондента, с уложенной трубкой, можно только послав ему сигнал тонального вызова Радиостанция Vertex - 2000 имеет систему тонального вызова, но ни одно из значений частот тонального вызова, которые предлагаются разработчиками и которые можно установить при программировании радиостанции, не соответствует значению частоты тонального вызова, применяемой в системе " МЧС - радиосвязи " Липецкой области Самая близкая, к этому значению, частота тонального вызова, которую можно установить в Вертексе , не попадает в частотный интервал допуска Так как в Вертексе , возможности коррекции пользователем частоты тонального вызова не предусмотрено (можно только выбрать из списка, то возникает необходимость в создании устройства формирования сигнала тонального вызова с высокостабильной частотой 1450 гц В простейшем случае, управление работой этого устройства можно сделать ручным (при помощи кнопки выкл ./ выкл тонального вызова, но это уже "прошлый веки не совсем удобно для пользователя Кроме того, в этом случае, время "выдачи " в эфир сигнала тонального вызова нестабильно и существует вероятность " недодачи " (повремени) этого сигнала, при которой приемник тонального вызова корреспондента, из- за своей инерционности, просто "не успеет " сработать, да и "перебор " тоже ненужен Следовательно, при включении на передачу, необходимо организовать автоматический 75 режим "выдачи " в эфир сигнала тонального вызова в течение калиброванного интервала времени Так как для пользователя не всегда бывает удобным "запуск " устройства формирования тонального вызова каждый раз, когда происходит включение на передачу, то необходимо сделать так, чтобы режим автоматического, тонального вызова можно было бы включить или отключить В итоге , к устройству формирования сигнала тонального вызова предъявляются следующие основные требования Частота сигнала тонального вызова должна быть высокостабильной и равной 1450 гц . Сигнал тонального вызова должен формироваться при каждом нажатии тангенты микрофонной гарнитуры. После нажатия на тангенту , сигнал тонального вызова должен "выдаваться" в эфир в течение калиброванного интервала времени (оптимально подобранного по длительности. Режим тонального вызова должен включаться и отключаться вручную. Примечание естественно, что первые 3 пункта должны выполняться только при включенном режиме тонального вызова Итак , "глобальные " требования сформулированы в конкретной и однозначно понимаемой форме Теперь начинаем "раскрутку " по пунктам Первый пункт Если речь идет о высокостабильной частоте, то тактовый генератор ПИКа должен быть кварцевым (если не требуется высокой стабильности частоты, то его можно перевести в режим RC- генератора В ПИКах и такое предусмотрено. В этом отношении, "изобретать велосипед " ненужно Будем использовать стандарт стандартный кварцевый генератор (называется) с кварцем на 4 мГц В этом случае, один машинный цикл равен одной микросекунде, что очень удобно при расчетах и "прикидках ". При использовании кварца, время "выдачи " в эфир сигнала тонального вызова также окажется высокостабильным, хотя к этому интервалу времени, высоких требований по стабильности не предъявляется Как говорится, "кашу маслом не испортишь ". Будем считать это приятной неожиданностью В принципе , можно сформировать импульсную последовательность любой скважности Исходя из того, что анализатор приемника тонального вызова корреспондента представляет собой цифровое устройство, некритичное к скважности импульсной последовательности, вырабатываемой на передающей стороне, то каких- то жестких условий по скважности нет, за исключением того, что импульсы должны быть "не слишком короткими и не слишком длинными " (учет инерционности радиотракта ). Не мудрствуя лукаво ", задаем отношение длительности периода к длительности импульса 2 (так называемый "меандр "). В части касающейся процесса формирования периода импульсной последовательности сигнала тонального вызова, тоже мудрить ненужно полупериоды формируем, используя закольцовку рабочей точки программы в подпрограммах задержки (по аналогии с программой Multi.asm ). В части касающейся 1- го пункта, всё , что возможно определить на предварительной стадии разработки устройства (грубая прикидка "), определено К моменту начала составления текста программы, желательно определиться с как можно бОльшим количеством исходных данных Такая продуманность имеет наибольший, положительный эффект Второй и третий пункты Так как требования 2- го иго пунктов между собой связаны, то для их реализации, определение исходных данных лучше всего производить в комплексе Совершенно очевидно, что при нажатии на тангенту (включении на передачу, должен быть запущен какой- то механизм, формирующий сам сигнал тонального вызова и "дозирующий ", повремени, его "выдачу " в эфир Так как программа должна исполняться непрерывно, тов случае нахождения радиостанции в режиме дежурного приема, программа должна " закольцеваться " (рабочая точка программы, до последующего нажатия на тангенту , должна, в какой - нибудь подпрограмме, "уйти в вечное кольцо "). 76 Часто такого рода " закольцовки " происходят вначале программы, а именно , в подпрограмме Start , но можно "закольцевать " программу (вернее, ее рабочую точку) ив другом "месте " программы Опять жене будем "изобретать велосипед ". В такой простой программе, "особо не развыбираешься ". Итак, в режиме дежурного приема, рабочая точка программы "закольцовывается " в ПП Start и не выходит из нее до момента возникновения управляющего сигнала включения на передачу Примечание : это то, что я называю " вечным кольцом " Может быть, это определение и не вполне удачно, но оно короткое и отражает суть происходящего В момент прихода управляющего сигнала, рабочая точка программы должна выйти из этого "вечного кольца " по сценарию "программа исполняется далее ". А теперь прикинем, а что же должно быть далее Естественно, должен начаться процесс формирования одного периода тонального сигнала, соответствующего частоте 1450 гц Предположим , мы его сформировали, а дальше ? Совершенно очевидно, что необходима " закольцовка " рабочей точки программы, с конца , на начало процедуры формирования одного периода, а иначе сформируется один период и на этом все закончится Если поставить время нахождения, в этой " закольцовке ", в зависимость только от времени нажатия тангенты , то тональный сигнал будет "выдаваться " в эфир в течении всего времени нажатия тангенты , что неприемлемо (см выше. После нажатия тангенты , тональный сигнал должен "выдаваться " в эфир в течение х сек Примечание : давайте, для определенности, "привяжемся " к этому значению Такое значение является оптимальными нужно ориентироваться на него То есть, процесс формирования сигнала тонального вызова должен быть поставлен в зависимость не только от сигнала включения на передачу, но и от таймера (счетчика времени, отмеряющего, с момента нажатия на тангенту , 3 секунды Таймер должен что- то считать Решение напрашивается само собой считать нужно количество периодов сигнала тонального вызова Записывая в таймер различные значения констант, можно получить те или иные значения времени "выхода " в эфир сигнала тонального вызова, а следовательно , и "отрегулировать " это время Таким образом, можно сформировать следующий принцип работы программы В режиме дежурного приема, в подпрограмме |