Файл: Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.06.2025
Просмотров: 3576
Скачиваний: 3
Лично я пользуюсь версией MPLAB 5.70.40, что и Вам советую.
Это "старый, добрый конь, который борозды не испортит" и возможностей у него "выше крыши".
Главный недостаток этой версии - медленно работает (считает), но для начинающих, "реактивной" скорости и не нужно.
Главное ее преимущество - надежность работы.
Вболее поздних версиях, в той или иной мере, осуществлен обмен скорости на надежность, что иногда не есть хорошо.
Вдальнейшем, я буду ориентироваться на версию 5.70.40.
Примечание: дистрибутив MPLAB версии 5.70.40 (и еще 2 версии) имеется на компактдиске. Закачивать дистрибутив MPLAB нужно в папку с английским названием (папка мои документы или рабочий стол не подойдут), иначе будете иметь проблемы.
Лучше всего организовать ее в папке Program Files диска С.
Программа MPLAB является интегрированной средой разработки для ПИКов и содержит все необходимое как для написания и редактирования программы, так и для создания HEX-файлов, а также и для отладки программы.
Таким образом, необходимость в наличии отдельного текстового редактора для написания программы, отдельной программы - ассемблера для создания HEX-файла и отдельного отладчика программы (симулятора) отпадает, так как в MPLAB все это есть (и даже более того).
Установите MPLAB на свой компьютер, убедитесь, что она встала не "криво" и на время про нее забудьте, так как для того чтобы с ней работать, необходимо основательно подготовиться, чем в дальнейшем мы и будем заниматься.
Следующий шаг - сборка программатора, так как HEX-файл программы, созданный в MPLAB, необходимо "превратить" в машинные коды, которые и будут записываться в ПИК (так называемая "прошивка").
Ничего проще и надежнее чем программатор PonyProg, я, на первом этапе, предложить не могу, хотя, безусловно, имеются и другие "достойные" программаторы.
Информацию по сборке программатора PonyProg Вы найдете в "Приложении №1".
Следует учесть, что программатор PonyProg лучше всего работает на относительно "медленных" компьютерах старых выпусков, так как, в свое время, программа PonyProg создавалась под них.
При подключении программатора к современным быстродействующим компьютерам с "навороченными" операционными системами, могут возникнуть конфликты типа "нестыковки" программы PonyProg с операционной системой или превышения предельно допустимой скорости обмена данными между компьютером и программируемым ПИКом, то есть программатор может просто не заработать.
7
Это вовсе не есть факт, но такое может быть.
Самое лучшее решение - применение для этих целей компьютера с тактовой частотой до 500мГц и операционной системы Windows95/98.
Лично я сделал так: купил практически "за так" "древнюю старушку", обманул BIOS, пристегнув к родному винчестеру, "помощником", дополнительный винчестер на 8Гб, поставил Windows98 и включил "форсаж".
Получилось "дешево и сердито", и прежде всего по той причине, что при занятии программированием, создании печатных плат, вычерчивании схем и прочих радиолюбительских делах, особой скорости и не требуется, так как все эти занятия неспешны, и особого смысла задействовать под это дело быстродействующие компьютеры нет.
В моей "старушке" стоит почти на 2Гб подобного рода программ, в том числе и довольно-таки "навороченных", и ничего, прекрасно работает.
С тем, что должно быть в наличии обязательно, я надеюсь, понятно, а теперь о полезных "мелочах". Скачайте эти две маленькие, но полезные и удобные программки:
HEX - калькулятор: файл CALC32.rar прилагается (папка "Программы"). Конвертер систем исчисления: файл BCONV32 прилагается (папка "Программы").
Они настолько просты, что Вы без труда разберетесь, зачем они нужны. Чаще всего требуется конвертер систем исчисления.
08.07.07.
Один из активных участников работы, Петр Высочанский, разработал программу конвертера систем исчисления, которая наиболее адаптирована к практическим нуждам:
Конвертер систем исчисления Петра Высочанского: файл Hex-Dec_Bin.exe прилагается
(папка "Программы")
8
При открытии, программа конвертера устанавливает английскую раскладку клавиатуры (то, что нужно).
Итак, все что необходимо для занятия программированием PIC контроллеров имеется. Пока, это не более чем красивые и интригующие "штучки" не вполне понятного предназначения.
Можно их на досуге рассмотреть, на что-нибудь понажимать, только, во избежание дальнейших недоразумений, не трогайте настроек по умолчанию.
Переходите к следующему разделу.
"Самоучитель по программированию PIC контроллеров для начинающих" http://ikarab.narod.ru E-mail: karabea@lipetsk.ru
9
2. Что такое микроконтроллер, и как он работает
Прежде всего, микроконтроллер это процессор со всеми его "атрибутами", плюс встроенная, энергонезависимая память (программ и данных), что позволяет отказаться от внешней памяти программ и поместить программу в его энергонезависимую память.
Это позволяет создавать очень простые (в схемотехническом отношении) и компактные устройства, выполняющие, тем не менее, достаточно сложные функции.
Иногда даже диву даешься: эта маленькая "штучка" заменяет целую "груду старого железа" (К555 и т.д.).
Любой микроконтроллер, по своим возможностям, конечно же, уступает процессору компьютера, но тем не менее, существует весьма обширный класс устройств, которые преимущественно реализуются именно на микроконтроллерах.
Ив самом деле, компьютер в карман не положишь и от батареек его не запитаешь. Поэтому, во многих случаях, микроконтроллерам просто нет альтернативы. "Сердцем" микроконтроллера является арифметико - логическое устройство (АЛУ).
Проще всего его представить в виде банального калькулятора, кнопками которого управляет программа, написанная на языке ассемблер (то есть, программист).
Если вдуматься, то ничего особо сложного, в механизме управления такого рода калькулятором, нет.
Ив самом деле, если нужно, например, сложить числа А и В, то в тексте программы сначала задаются константы А и В, а затем дается команда "сложить".
Программисту вовсе не обязательно знать, что происходит с нулями и единицами (разве только только для общего развития), ведь калькулятор он на то и калькулятор, чтобы избавить пользователя от "возни" с машинными кодами и прочими "неудобоваримостями". Когда Вы работаете с компьютером, Вам и не нужно детально знать, что происходит в дебрях операционной системы.
Если Вы туда "полезете", то "с ума сойдете", а микроконтроллер, по своей сути, есть тот же самый компьютер, но только простой.
Программисту только нужно детально знать, каким именно образом "приказать железяке" сделать то, что необходимо для достижения задуманного.
Микроконтроллер можно представить себе как некий универсальный "набор" многофункциональных модулей (блоков), "рычаги управления" которыми находятся в руках программиста.
Этих "рычагов" достаточно большое количество, и естественно, их нужно освоить и точно знать, что именно произойдет, если "дернуть" (дать команду на языке ассемблер) за тот или иной "рычаг".
Вот здесь-то уже нужно знать, как "отче наше", каждую деталь и не жалеть на это "узнавание" времени.
Только таким образом пустую "болванку" (незапрограммированый ПИК) можно "заставить" выполнять какие-то "осмысленные" действия, результат большей части которых можно проверить в симуляторе MPLAB (об этом - позднее), даже не записывая программу в ПИК. Итак, необходим переход к "модульному" мышлению.
Любой микроконтроллер можно уподобить детскому конструктору, в состав которого входит множество всяких предметов, манипулируя с которыми, можно получить тот или иной конечный "продукт".
Давайте с ними разберемся и "разложим все по полочкам".
В качестве примера я буду использовать один из самых распространенных PIC контроллеров
PIC16F84A.
Он является как бы "проматерью" более сложных ПИКов, содержит минимальный "набор" модулей и как нельзя лучше подходит для первичного "въезда в м/контроллеры".
Энергонезависимая память.
Начнем с энергонезависимой памяти (память программ и память данных). Информация, заложенная в энергонезависимую память, сохраняется при выключении питания, и поэтому именно в нее записывается программа.
То "место" энергонезависимой памяти, куда записывается программа, называется памятью программ.
Объем памяти программ может быть различен. Для PIC16F84A, он составляет 1024 слова. Это означает, что он предназначен для работы с программами, объем которых не превышает
10
1024 слов.
Слово памяти программ не равно одному байту (8 бит), а больше его (14 бит). Отдельная команда, которую ПИК будет в дальнейшем выполнять, занимает одно слово в памяти программ.
Взависимости от названия этой команды в ассемблере, слово принимает то или иное числовое значение в машинном коде.
После записи в ПИК "прошивки" программы, слова памяти программ (машинные коды) как бы "превращаются" в команды, которые располагаются, в памяти программ, в том же порядке, в котором они следуют в исходном тексте программы, написанном на языке ассемблер, и в том же порядке им присваиваются адреса, при обращении к которым, та или иная команда "извлекается" из памяти программ для ее выполнения.
Последовательность же их выполнения определяется логикой программы.
Это означает то, что выполнение команд может происходить не в порядке последовательного возрастания их адресов, с шагом в одну позицию (так называемый инкремент), а "скачком". Дело в том, что только уж самые простейшие программы, в пределах одного их полного цикла, обходятся без этих "скачков", называемых переходами, и выполняются строго последовательно.
Востальных же случаях, так называемая (мной) "рабочая точка программы" "мечется по тексту программы как угорелая" (как раз благодаря этим самым переходам).
Термин "рабочая точка программы" - моя "самодеятельность".
Всвое время, я был очень сильно удивлен отсутствием чего-то подобного в информации, связанной с объяснением работы программ.
Казалось бы, чего проще, по аналогии, например, с рабочей точкой транзистора, сделать более комфортным "въезд в механику" работы программ?
Так нет же, как будто специально, придумываются такие "головокружительные заменители", причем, в различных случаях, разные, что запутаться в этом очень просто.
Итак, рабочую точку программы можно представить себе в виде некоего "шарика от пингпонга", который "скачет" по командам текста программы в соответствии с алгоритмом (логикой) исполнения программы.
На какую команду "шарик скакнул", та команда и исполняется.
После этого он "перескакивает" на другую команду, она исполняется, и т.д.
Эти "скачки" происходят непрерывно и в течение всего времени включения питания устройства (исполнения программы).
Любая более-менее сложная программа разбивается на части, которые выполняют отдельные функции (своего рода программки в программе) и которые называются
подпрограммами.
Атрибут любой подпрограммы - функциональная законченность производимых в ней действий.
По сути своей, эта "выдумка" введена в программирование для удобства реализации принципа "разделяй и властвуй": "врага" ведь гораздо легче "разгромить по частям, чем в общей массе".
Да и порядка больше.
Безусловные переходы (переходы без условия) между подпрограммами (если они последовательно не переходят одна в другую), осуществляются при помощи команд безусловных переходов, в которых обязательно указывается адрес команды в памяти программ (косвенно - в виде названия подпрограммы или метки), на которую нужно перейти. Существуют также переходы с условием (условные переходы), то есть, с задействованием так называемого стека.
Более подробно о переходах я расскажу позднее.
Адреса команд определяются счетчиком команд (он называется PC).
То есть, каждому состоянию счетчика команд соответствует одна из команд программы. Если команда простая, то счетчик просто инкрементируется (последовательно выполняется следующая команда), а если команда сложная (например, команда перехода или возврата), то счетчик команд изменяет свое состояние "скачком", активируя соответствующую команду.
Примечание: инкремент - увеличение на единицу величины числа, с которым производится эта операция, а декремент - уменьшение на единицу (так называемые комплиментарные операции).
Впростейшем случае, то есть в случае отсутствия в программе переходов, счетчик команд PC, начиная с команды "старта" (нулевой адрес), многократно инкрементируется,
11