Программирование PIC-микроконтроллеров на PicBasic
Покупка
Новинка
Тематика:
Программирование на Basic, VBA
Издательство:
ДМК Пресс
Автор:
Хелибайк Чак
Год издания: 2017
Кол-во страниц: 328
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-97060-500-4
Артикул: 084958.02.99
Книга представляет собой практическое руководство по программированию микроконтроллеров семейства PIC на языке PicBasic. В книге рассматриваются ключевые различия между стандартным компилятором PicBasic и компилятором PicBasic Pro; набор команд, архитектура и характеристики наиболее используемых PICмикроконтроллеров; обработка прерываний и исключительных ситуаций; организация связи между PICмикроконтроллерами и т. д. Приведены многочисленные примеры программ для реализации различных функций PICмикроконтроллеров с использованием языка PicBasic (исходные тексты всех примеров находятся на сайте издательства dmkpess.com). Отдельная глава посвящена ставшей весьма популярной в последнее время робототехнике. Книга будет полезна начинающим разработчикам, инженерам, студентам радиотехнических специальностей, а также широкому кругу читателей, интересую щихся электроникой и программированием.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Программирование PICмикроконтроллеров на PicBasic
EMBEDDED TECHNOLOGY TM S E R I E S Ч. Хелибайк Programming PIC Microcontrollers using PicBasic by Chuck Hellebuyck An imprint of Elsevier Science
С Е Р И Я ПРОГРАММИРУЕМЫЕ СИСТЕМЫ Ч. Хелибайк Программирование PICмикроконтроллеров на PicBasic Перевод с английского Москва ДМК Пресс, Додэка, 2017 — 1 —
УДК 004.312 ББК 32.97304 Х36 Хелибайк Ч. Х36 Программирование PICмикроконтроллеров на PicBasic. / Пер. с англ. — М.: ДМК Пресс, 2017. — 328 с.: ил. — (Серия «Программируемые системы»). ISBN 9785970605004 Книга представляет собой практическое руководство по программированию микроконтроллеров семейства PIC на языке PicBasic. В книге рассматриваются ключевые различия между стандартным компилятором PicBasic и компилятором PicBasic Pro; набор команд, архитектура и характеристики наиболее используемых PICмикроконтроллеров; обработка прерываний и исключительных ситуаций; организация связи между PICмикроконтроллерами и т. д. Приведены многочисленные примеры программ для реализации различных функций PICмикроконтроллеров с использованием языка PicBasic (исходные тексты всех примеров находятся на сайте издательства dmkpess.com). Отдельная глава посвящена ставшей весьма популярной в последнее время робототехнике. Книга будет полезна начинающим разработчикам, инженерам, студентам радиотехнических специальностей, а также широкому кругу читателей, интересующихся электроникой и программированием. УДК 004.312 ББК 32.97304 Все права защищены. Никакая часть этого издания не может быть воспроизведена в любой форме или любыми средствами, электронными или механическими, включая фотографирование, ксерокопирование или иные средства копирования или сохранения информации, без письменного разрешения издательства. This edition of Programming PIC Microcontrollers with PICBASIC by Chuck Hellebuyck is published by arrangement with Elsevier Inc. of 200 Wheeler Road, 6th Floor, Burlington, MA01803, USA. © Elsevier Science (USA) ISBN 9785941201075 (Додэка) Издание, ДМК Пресс, 2017 © ISBN 9781589950011 (англ.) ISBN 9785970605004 (ДМК Пресс) © Перевод, макет, ДодэкаXXI
Оглавление 5 Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Глава 1. PICмикроконтроллеры и язык PicBasic . . . . . . . . . . . . . . . . . . . . . . . . . .11 Обзор PICмикроконтроллеров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Программы для работы с PICмикроконтроллерами . . . . . . . . . . . . . . . . . . . . . . . 20 Язык ассемблера. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Компиляторы PicBasic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Глава 2. Компилятор PicBasic compiler (PBC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 Как работает компилятор PBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Переменные, память и ввод/вывод. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Операторы программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Команды компилятора PBC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Заключение по поводу системы команд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Как пользоваться компилятором PBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Дополнительные параметры командной строки DOS. . . . . . . . . . . . . . . . . . . . . . . 59 Глава 3. Компилятор PicBasic Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Константы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Символы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Числа и символы кода ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Строковые константы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Доступ к портам ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Управление портами ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Математические операции. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Команды компилятора PBPro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Заключение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Глава 4. Внутреннее устройство PICмикроконтроллеров . . . . . . . . . . . . . . . . . .131 Основные положения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Память программ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Вектор сброса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Память данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 ОГЛАВЛЕНИЕ
Оглавление Регистр STATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Регистры портов ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Регистры аналогоцифрового преобразователя . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Регистры управления прерываниями и таймером . . . . . . . . . . . . . . . . . . . . . . . . . 140 Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Глава 5. Простые устройства на PICмикроконтроллере . . . . . . . . . . . . . . . . . . .146 Проект № 1. Мигающий светодиод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Проект № 2. Бегущий огонь. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Проект № 3. Управление 7сегментным светодиодным индикатором. . . . . . . . 158 Глава 6. Продолжаем осваивать PIC16F876. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166 Проект № 4. Обращение к порту ввода/вывода PORTA . . . . . . . . . . . . . . . . . . . . 166 Проект № 5. Аналогоцифровое преобразование . . . . . . . . . . . . . . . . . . . . . . . . . 175 Проект № 6. Управление сервомотором . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Глава 7. Обмен информацией . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195 Проект № 7. Управление модулем ЖКИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Проект № 8. Связь через последовательный порт . . . . . . . . . . . . . . . . . . . . . . . . . 207 Проект № 9. Управление ЖКИ по двухпроводной линии . . . . . . . . . . . . . . . . . . 217 Глава 8. Память и звуки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 Проект № 10. Подключение внешней памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Проект № 11. Обращение к внутренней памяти . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Проект № 12. Исполнение музыки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Глава 9. Робототехника. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259 Проект № 13. Роботплатформа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Проект № 14. Движение вдоль линии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Проект № 15. Обнаружение препятствий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 И, в заключение… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Приложение A. Полезные ссылки в сети Интернет . . . . . . . . . . . . . . . . . . . . . .316 Приложение B. Таблица кодов ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317 Предметный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .322
Посвящается моей жене Эрин и моим детям — Крису, Коннору и Бриттани, без поддержки которых эта книга не появилась бы на свет
Введение Вот уже больше 25 лет полупроводниковая схемотехника — мое хобби и моя профессия. Еще ребенком я начал собирать наборы, которые продавала фирма Radio Shack, и воспроизводил конструкции, описанные в радиолюбительских журналах и книгах. Когда появились первые микропроцессоры, они произвели на меня огромное впечатление. Я был слишком юн, чтобы понять, как они работают, но догадывался, что они способны заменить собой целый набор дискретных интегральных микросхем (ИС), на которых до этого были построены все мои электронные проекты. Очень быстро я обнаружил, что для работы с микропроцессорами требовалось гораздо больше инструментов и средств (в том числе и денежных), чем я мог себе позволить. Не имея возможности создать домашнюю лабораторию по разработке микропроцессорных устройств, я в то время не очень далеко продвинулся по пути их изучения. Продолжив обучение в электротехническом колледже, чтобы получить степень бакалавра, я сделал полупроводниковую схемотехнику своей профессией. Я научился программировать и работать с лучшими средствами разработки для микропроцессоров, но все еще не представлял себе, как можно без больших финансовых затрат оборудовать домашнюю лабораторию по проектированию микропроцессорных устройств. Затем я открыл для себя семейство PICмикроконтроллеров фирмы Microchip. Они стоили дешево, их можно было легко купить у многочисленных поставщиков, и средства разработки для них тоже были недорогими. Я купил программатор PIC programmer и снова вернулся к своему радиолюбительскому увлечению. Программируя на ассемблере от фирмы Microchip, я разработал несколько интересных устройств. Но, поскольку у меня практически не было свободного времени, мне хотелось найти более простой язык программирования, такой как BASIC. Когда фирма Parallax выпустила в продажу миниатюрный компьютерный PICориентированный модуль под названием «BASIC Stamp», программы для которого следовало писать на одной из разновидностей BASIC’а, я купил себе такой и начал с ним экспериментировать. ПользоВведение
Введение 9 ваться этим устройством оказалось очень легко, что доставило мне массу удовольствия. Но ограниченный объем памяти и довольно высокая цена не позволили мне использовать его в качестве постоянной основы для моих разработок. Тем не менее, потратив уйму времени на придумывание разных безделушек, я созрел для того, чтобы воплотить пару своих идей в устройства, которые можно было бы продавать. Я подумывал о том, чтобы написать свой собственный компилятор BASIC для компьютерного модуля от Parallax. Это позволило бы мне записывать программы непосредственно в PICмикроконтроллер. И тут я увидел рекламу нового продукта фирмы microEngenering Labs под названием «PicBasic compiler» (компилятор языка PicBasic). Он мог преобразовывать программы, написанные для модуля от Parallax, в формат, который используется для прошивки PICмикроконтроллеров. В нем применялись те же самые команды, что и в модуле от Parallax, и еще несколько новых. Я немедленно приобрел его и начал программировать на PicBasic’е. Оказалось, что это простой, но очень мощный компилятор. В отличие от программирования на ассемблере, он позволял разрабатывать сложные проекты всего за несколько дней, а не недель или месяцев, как мне приходилось делать раньше. Я разработал несколько коммерческих продуктов и стал продавать их через свой сайт www.elproducts.com. Я также решил написать о PICмикроконтроллерах фирмы Microchip статью для журнала Nuts and Volts, которая, к моей радости, была напечатана в июле 1998 года. После этого мне предложили написать книгу о PICмикроконтроллерах. Я никогда не считал себя писателем, но увидел в этом предложении возможность поделиться своими знаниями о PICмикроконтроллерах и PicBasic’е с людьми, которым все эти вещи доставляют такое же наслаждение, как и мне. По тем или иным обстоятельствам, написание книги заняло гораздо больше времени, чем предполагалось. Но нет худа без добра — тем временем, идея программировать PICмикроконтроллеры на BASIC’е приобрела популярность. Повсеместно стали появляться новые компиляторы от новых производителей, новые аксессуары и устройства для прошивки микросхем. PICмикроконтроллеры и PicBasic становились все совершеннее. Я накапливал новые знания и опыт, и старался вместить как можно больше в свою книгу, но так, чтобы она все же оставалась книгой для начинающих. Одним из результатов приобретенного мной опыта стало решение изменить первоначальную структуру книги и вставить в нее главу по робототехнике. За то время, что я писал книгу, робототехника стала очень популярной. Подобно мне, многие люди покупают недорогие, но при этом достаточно мощные средства отладки микроконтроллерных устройств, чтобы разрабатывать роботов в своих домашних лабораториях. Использование BASIC’а для программирования микроконтроллеров стали называть созданием встроенных приложений на языке BASIC. Мой
Введение почтовый ящик завален предложениями работы для программистов со знанием PicBasic’а. В наше время все труднее найти людей с опытом программирования на ассемблере, потому что многие разработчики электронного оборудования перешли на язык Cи. Я считаю, что вскоре пройдет волна перехода на BASIC для встроенных приложений как основной язык программирования для массовой разработки небольших программноаппаратных модулей, поскольку писать на нем проще, чем на Cи, и он почти столь же эффективен1). Я надеюсь, что эта книга станет для вас источником полезной информации, заставит задуматься и, разумеется, доставит вам удовольствие. Все то, о чем в ней написано, сам я узнавал нелегким путем — путем проб и ошибок. Компания Microchip выпускает множество отличных компонентов, а а использование компилятора PicBasic compiler позволит даже начинающему программисту запросто разрабатывать встроенные приложения. Я рекомендую читателям посетить мой интернетсайт, где представлено много различной информации о последних разработках, сделанных с помощью BASIC’а для встроенных приложений. Возникшие вопросы можно решить, связавшись со мной по электронной почте. Чак Хелибайк, фирма Electronic Products, www.elproducts.com chuck@elproducts.com 1) Считается, что разработка программы на языке высокого уровня требует на порядок меньше времени, чем на ассемблере, но объектный код получается в несколько раз больше по объему и работает он в несколько раз медленнее. Это правило, однако, не выполняется для тех микроконтроллеров, о которых в технических описаниях сказано, что их система команд оптимизирована для работы с языками высокого уровня. В этом случае объектный код получается практически таким же эффективным, как если бы изначально создавался на ассемблере. К таким микроконтроллерам относятся, например, микроконтроллеры семейства AVR от фирмы Atmel или 16битные микроконтроллеры семейства XA от фирмы Philips. (Прим. пер.)