Отдельные представители семейства имеют схожий базовый набор портов и модулей периферийных устройств, однако отличаются в части дополнительных возможностей ввода/вывода. Например, в микроконтроллере PIC16F73 имеется 5-канальный 8-битный аналого-цифровой преобразователь, в PIC16F874/7 — уже 8-канальный 10-битный аналого-цифровой преобразователь, а в PIC16F627/628 — аналоговый компаратор и 16-битный таймер/счетчик. Однако, несмотря на эти отличия, существует множество идентичных модулей, использующихся как в моделях среднего уровня, так и в моделях с расширенным ядром. К рассмотрению этих модулей мы вернемся в 3-й части книги.
В данной главе мы в основном будем рассматривать ядро микроконтроллеров семейства среднего уровня. Одним из первых представителей этого семейства (1994) был 18-выводной микроконтроллер PIC16C83/4. Он быстро завоевал популярность, поскольку был первым PIC-микроконтроллером, в котором память программ была реализована в виде электрически стираемого ППЗУ (см. Рис. 2.13 на стр. 42). То есть для стирания кристалла не требовался источник ультрафиолетового излучения, и весь процесс перепрограммирования занимал всего несколько секунд. Кроме того, эти модели имели блок энергонезависимой памяти данных объемом 16 байт для длительного хранения данных. В течение нескольких лет эта модель оставалась уникальной среди всей линейки микроконтроллеров PIC.
В 1996 году на смену PIC16C83/4 пришла модель PIC16F83/4, которая имела FLASH-память программ и лучшие параметры, например более высокую рабочую тактовую частоту.
Несмотря на то что для новых разработок рекомендуется использовать микроконтроллер PIC16F627/8, появившийся в 2002 году, основное его отличие от предшественника заключается в расширенном наборе периферийных модулей, к рассмотрению которых мы приступим в третьей части книги. Поэтому для простоты изложения большинство материалов данной части будет базироваться на модели PIC16F84. Однако при необходимости мы будем ссылаться и на другие модели семейства.
В упрощенном виде архитектура микроконтроллера PIC16F84 показана на Рис. 4.1. Модель PIC16F83 отличается только уменьшенным объемом памяти программ (512 команд). На первый взгляд эти микроконтроллеры имеют очень сложную архитектуру, однако в действительности она ненамного сложнее архитектуры нашего компьютера BASIC (см. Рис. 3.4 на стр. 64). Основное отличие заключается в том, что к внутренней шине данных памяти данных, помимо ЦПУ, подключены периферийные модули. Чтобы лучше понять материал этой главы, рекомендую еще раз просмотреть материал, касающийся указанного компьютера. Вообще говоря, в микроконтроллерах PIC реализована гарвардская архитектура с ее раздельными модулями памяти программ и данных, в которой периферийные устройства отображены на адресное пространство памяти данных. То есть с точки зрения программы все эти устройства расположены в памяти данных. То же касается и различных служебных регистров, таких как регистры статуса и управления, а также счетчика команд.
Рис. 4.1.
Блок выборки, показанный отдельно на Рис. 4.2, предназначен для выборки команд из памяти программ и загрузки их в конвейер. Адрес каждой извлекаемой команды задается счетчиком команд. В свою очередь код операции, выделенный из кода команды, подается на вход дешифратора команд, который активирует в требуемой последовательности соответствующие узлы исполнительного блока.
Рис. 4.2.
Память программ
Основным элементом блока выборки является память программ. Программное обеспечение во встраиваемых системах фиксировано, поскольку после включения питания микроконтроллер должен сразу же приступить к выполнению своих задач, не тратя время на загрузку программы. Поэтому память программ, как правило, реализуется в виде ПЗУ какого-либо типа. В большинстве микроконтроллеров PIC используется многократно-программируемое ПЗУ; если в обозначении модели присутствует буква «F», то это FLASH-память. В памяти программ микроконтроллера PIC16F84 может храниться до 1024 команд, размер каждой из которых составляет 14 бит (см. Рис. 3.5 на стр. 68). В новых микроконтроллерах семейства среднего уровня размер памяти программ колеблется от 1024 (например, PIC16F627) до 8192 (PIC16F876/7) команд.
Счетчик команд
Счетчик команд (Program Counter — PC) используется для адресации, или указания, считываемой из памяти программ команды. Этот 13-битный регистр обычно инкрементируется после каждой выборки, функционируя как двоичный счетчик. Однако, как мы с вами увидим в следующей главе, существует ряд команд, таких как команда goto, выполнение которых вызывает переход к другому месту в памяти программ. Соответственно, нормальное функционирование счетчика команд нарушается. Кроме того, программист может напрямую обращаться к счетчику команд через память данных (см. Рис. 4.8).