Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008). Самоучитель по программированию PIC контроллеров для начинающих. Система команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.
Скачать 3.49 Mb.
|
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 секунды Таймер должен что- то считать Решение напрашивается само собой считать нужно количество периодов сигнала тонального вызова Записывая в таймер различные значения констант, можно получить те или иные значения времени "выхода " в эфир сигнала тонального вызова, а следовательно , и "отрегулировать " это время Таким образом, можно сформировать следующий принцип работы программы В режиме дежурного приема, в подпрограмме |