Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование PIC-микроконтроллеров на PicBasic

Покупка
Новинка
Артикул: 084958.02.99
Доступ онлайн
349 ₽
В корзину
Книга представляет собой практическое руководство по программированию микроконтроллеров семейства PIC на языке PicBasic. В книге рассматриваются ключевые различия между стандартным компилятором PicBasic и компилятором PicBasic Pro; набор команд, архитектура и характеристики наиболее используемых PICмикроконтроллеров; обработка прерываний и исключительных ситуаций; организация связи между PICмикроконтроллерами и т. д. Приведены многочисленные примеры программ для реализации различных функций PICмикроконтроллеров с использованием языка PicBasic (исходные тексты всех примеров находятся на сайте издательства dmkpess.com). Отдельная глава посвящена ставшей весьма популярной в последнее время робототехнике. Книга будет полезна начинающим разработчикам, инженерам, студентам радиотехнических специальностей, а также широкому кругу читателей, интересую щихся электроникой и программированием.
Хелибайк, Ч. Программирование PIC-микроконтроллеров на PicBasic : практическое руководство / Ч. Хелибайк. - Москва : ДМК Пресс, 2017. - 328 с. - (Серия «Программируемые системы»). - ISBN 978-5-97060-500-4. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2155916 (дата обращения: 18.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Программирование

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 наверняка найдется прибор, наилучшим образом подходящий для реализации ваших идей.
Доступ онлайн
349 ₽
В корзину