Программирование 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. (Прим. пер.)
Семейство микроконтроллеров PIC (Programmable Interface Controller — программируемый интерфейсный контроллер) было разработано отделением полупроводниковых компонентов компании General Instruments Inc. В отличие от микроконтроллеров традиционной архитектуры, PICмикроконтроллеры давали пользователю возможность программного управления линиями ввода/вывода, имели большой максимально допустимый входной и выходной ток, а их архитектурное построение было основано на принципах RISC — Reduced Instruction Set Code — программирование с сокращенной системой команд. Первые PICмикроконтроллеры выполняли каждую команду за один период внутренней тактовой частоты, составляющей 1/4 частоты кварцевого генератора. Максимально допустимая частота генератора ранних PICмикроконтроллеров могла достигать 20 МГц, что обеспечивало относительно высокое для 8битных микроконтроллеров быстродействие. Главное же их достоинство состояло в том, что максимально допустимый входной или выходной ток любой линии ввода/вывода достигал 20 мА. Для сравнения, типичный микроконтроллер того времени имел линии ввода/вывода, способные обеспечить выходной ток всего лишь 1 мА, а входной — 1.6 мА. Компания General Instruments продала свое полупроводниковое отделение, включая и производственные мощности по выпуску PICмикроконтроллеров в городе Чандлер, штат Аризона, группе предпринимателей, которые основали ныне всем известную фирму Microchip Technology. PICмикроконтроллеры вскоре заняли ключевое место в ассортименте электронных компонентов, которые новая компания предлагала покупателям. Поначалу выбор микроконтроллеров был весьма ограничен, и ни один из них не имел таких, ныне привычных, функций, как прерывание по переполнению таймера или от внешнего сигнала. Присущая им несколько необычная организация памяти, поделенная на банки, и по сей день сохранилась у многих изделий фирмы Microchip. Несмотря на эти недостатки, PICмикроконтроллеры пользовались популярностью, что побудило компанию Microchip разработать новые компоненты с новыми функциональГЛАВА 1 PICМИКРОКОНТРОЛЛЕРЫ И ЯЗЫК PICBASIC
Глава 1. PICмикроконтроллеры и язык PicBasic ными возможностями, такими как прерывания, встроенные аналогоцифровые преобразователи (АЦП), встроенные компараторы и многое другое. Линейка продуктов от Microchip вскоре пополнилась как компонентами с флэшпамятью, так и недорогими однократно программируемыми (ОП) постоянными запоминающими устройствами. Эти недорогие ОППЗУ и позволили фирме Microchip занять лидирующее положение в сфере производства 8битных микроконтроллеров. Конкурирующие производители тоже предлагали ОП компоненты, но они, как правило, были существенно дороже, чем изделия с масочным постоянным запоминающим устройством (ПЗУ). Процесс изготовления микроконтроллера с масочным ПЗУ заключается в том, что слои полупроводникового материала последовательно наносятся один на другой, при этом формируются транзисторы и другие компоненты. Надлежащая комбинация этих компонентов определяет конфигурацию ячеек памяти и обеспечивает выполнение микроконтроллером заложенной в него программы. Масочное ПЗУ создается раз и навсегда. Чтобы изменить всего лишь одну команду в программе, пришлось бы делать новое масочное ПЗУ. Фирма Microchip нашла способ производить устройства с ОППЗУ, практически столь же дешевые, как и устройства с масочным ПЗУ. Это позволило разработчикам применять однократно программируемые компоненты в своих конечных продуктах, так что они могли вносить небольшие изменения в программу, не останавливая производство и не тратя деньги на новое масочное ПЗУ. Компания Microchip дополнила PICмикроконтроллеры функцией последовательного внутрисхемного программирования. После этого у производителей появилась возможность выпускать печатные платы электронных устройств с установленными на них незапрограммированными контроллерами, а затем программировать их прямо на платах. Такая универсальность добавила продукции от Microchip популярности как у профессионалов, так и в среде изучающих микроконтроллеры любителей. Сама же фирма Microchip стала вторым по величине производителем 8битных микроконтроллеров, а также лидером в сфере производства недорогих ЭСППЗУ (электрически стираемых программируемых ПЗУ) с большим числом циклов стирания/записи и в ряде других секторов рынка. Microchip продолжает ускоренными темпами разрабатывать новые микроконтроллеры трех основных категорий: устройства с 12битной, 14битной и 16битной памятью программ. Все эти изделия имеют 8битную шину данных, поэтому по существующей классификации они относятся к разряду 8битных микроконтроллеров. Что бы вы ни разрабатывали, у компании Microchip наверняка найдется прибор, наилучшим образом подходящий для реализации ваших идей.
Доступ онлайн
В корзину