3.2. Разработайте программу, которая позволит роботу с микроконтроллерным управлением из Примера 3.2 наполнить стакан водой из крана.
3.3 Компьютер BASIC, структура которого изображена на Рис. 3.4, может одновременно осуществлять выборку одной команды и исполнять другую команду. Объясните, за счет чего он может выполнять эти операции параллельно.
3.4 Составьте перечень задач, в соответствии с которым робот сможет пройти к ближайшему банкомату, снять со счета заданную сумму наличных, запросить баланс и вернуться на исходную позицию. Не забудьте про обработку запроса на печать баланса, а также продумайте действия робота при отсутствии на счете достаточной суммы денег!
3.5. Для подключения коробки передач к микроконтроллерной системе, показанной на Рис. 3.8, требуется пять выводов микросхемы. Многие микроконтроллеры выпускаются в корпусах с малым числом выводов (см., например, Рис. 10.2 на стр. 304). Подумайте, как можно уменьшить требуемое число выводов, а также будет ли ваше решение экономически оправданным? Подсказка: взгляните на Рис. 2.6 (стр. 36).
3.6. Подумайте, каким образом можно уменьшить на единицу количество выходов микроконтроллера, требуемых для управления дисплеями обоих одометров, и насколько это будет удобно?
Часть II
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
В 1-й части мы познакомились с понятием гарвардской архитектуры и разработали собственный примитивный компьютер BASIC. Хотя этот компьютер существует только в нашем воображении, он был разработан с оглядкой на реальные микроконтроллеры, являющиеся предметом обсуждения данной книги.
Вторая часть книги посвящена главным образом программным аспектам микроконтроллеров, выбранных нами для изучения, — микроконтроллеров PIC® среднего уровня компании Microchip. В этой части мы рассмотрим следующие вопросы:
• Внутренняя структура микроконтроллеров PIC среднего уровня.
• Набор команд.
• Способы адресации команд.
• Разработка программ с использованием интегрированной среды разработки MPLAB®.
• Трансляция с языка ассемблера.
• Подпрограммы и модульный принцип разработки программ.
• Обработка прерываний.
• Язык высокого уровня Си и компиляция написанных на нем программ.
Глава 4
Микроконтроллер PIC16F84
В том же году, когда Microchip приобрела у компании General Instrument интеллектуальные права на микросхему периферийного интерфейсного контроллера (PIC), было разработано первое семейство 8-битных микроконтроллеров с гарвардской архитектурой. Это начальное (или базовое) семейство PIC16C5XX, как и более современные семейства того же уровня PIC10FXXX и 12СХХХ, имело 33 команды, 12-битную память программ, параллельные порты ввода/вывода и один 8-битный таймер/счетчик. Как и во всех последующих семействах микроконтроллеров PIC, исполнительный блок обрабатывал данные побайтно, что соответствует 8-битной организации памяти данных.
К 1992 году на свет появилось среднее семейство PIC16CXXX. Микроконтроллеры этого семейства имели уже 14-битную память программ, что облегчало доступ к памяти данных больших объемов. По сравнению с младшими семействами появились две новые команды. Был значительно расширен базовый набор периферии — добавились такие устройства, как 16-битные таймеры, модуль АЦП, последовательные порты. Также была добавлена поддержка прерываний.
В оставшейся части книги, за исключением главы 16, мы будем рассматривать микроконтроллеры именно этого семейства. И только в 16-й главе мы коснемся старшего семейства PIC18XXXX, появившегося на рынке в 1999 году. Микроконтроллеры данного семейства получили 16-битное ядро и 42 дополнительные команды, большинство из которых направлено на поддержку компиляторов с языков высокого уровня.
В этой главе мы познакомимся с ядром микроконтроллеров семейства среднего уровня с точки зрения его архитектуры. Прочитав эту главу, вы:
• Познакомитесь с внутренней структурой микроконтроллеров PIC среднего уровня с гарвардской архитектурой.
• Разберетесь в назначении, структуре и распределении памяти программ и памяти данных.
• Поймете идею деления памяти данных на банки и их взаимосвязь с состоянием управляющего бита RP0 регистра STATUS.
• Сможете интерпретировать биты регистра STATUS, которые управляют страницами памяти, а также содержат флаги С, DC и Z.
• Поймете, как можно манипулировать содержимым счетчика команд и какую роль в этом играет регистр специального назначения PCLATH.
• Узнаете зависимость между фазами тактового сигнала и внутренней последовательностью микроопераций.
• Познакомитесь с основными периферийными модулями на примере модели PIC16F84.
С точки зрения программирования все устройства с одним и тем же ядром полностью идентичны. Более того, все ядра, используемые в микроконтроллерах PIC, имеют очень много общего. С аппаратной точки зрения блоки выборки и исполнения незначительно отличаются, в частности, поддерживаемым объемом памяти и построением схем сброса.