2. Знакомство с микроконтроллером





   Чтобы освоить все семейство МК PIC нужно понять, как устроен и работает отдельный микроконтроллер, в частности изучить архитектуру, систему команд, организацию памяти и хорошо разобраться в том, как ядро МК взаимодействует с другими его частями, которые называют периферийными модулями, а так же устройство и работу каждого из периферийных модулей. Название периферийный как бы подчеркивает, что МК состоит из классической части, которая "вычисляет и запоминает" и некоей периферии - набора устройств, каждое из которых выполняет какую-либо дополнительную функцию. С помощью этих периферийных устройств МК может автоматически, т. е. не отвлекаясь от выполнения основной задачи, выполнять другие, сопутствующие, задачи, например, подсчитывать события, измерять или отсчитывать временные интервалы, преобразовывать аналоговые напряжения в числа, передавать данные по внешним каналам связи.
   Замечательное свойство периферийных модулей - устройство модуля не зависит от типа МК в который он встроен, а зависит от возложенных на него функций. Т.е. внутри всего семейства модули стандартны, поэтому множество периферийных модулей, используемых в микроконтроллерах PIC16 невелико. Ядро МК PIC построено по RISC архитектуре, т. е. с раздельными шинами команд и данных, а так же раздельными памятью программ и памятью данных. При такой архитектуре, во-первых, разрядность (количество разрядов в слове) слова команды может не совпадать с разрядностью слова данных, во вторых, извлечение команды может происходить одновременно с пересылкой данных. Понятно, что эти особенности приводят к экономии ресурсов памяти и значительно увеличивает производительность ядра МК. Говорят, что PIC микроконтроллеры имеют ортогональную систему команд. Такая система позволяет любой команде обращаться к любому регистру МК. Все МК имеют 8-разрядную шину данных, 8-разрядное АЛУ для выполнения операций и 8-разрядые регистры для хранения данных, поэтому такие МК относятся к классу 8-разрядных. Шина команд МК PIC16 имеет 14 разрядов, а МК PIC18 - 16 разрядов. МК PIC16 ранних выпусков имели 12-разрядную шину команд, большинство из них выпускается и сейчас, но, чтобы не отвлекаться, пока забудем о них.
   Итак, серию PIC16 представляют недорогие высокопроизводительные 8-разрядные МК с RISC архитектурой и системой компактных 14-разрядных команд. Весь набор состоит всего из 35 простых и понятных команд, которые легко изучаются и запоминаются, что упрощает процесс освоения МК. Все команды выполняются за один машинный цикл, кроме команд ветвления, которые выполняются за два машинных цикла.


2.1. Память программ



Набор команд микроконтроллера определяет только то, что, что он умеет делать и не более того. Незапрограммированный МК, после его подключения ничего делать не станет. Что должен делать МК, определяется программой. Программа - это последовательность команд, составленная программистом. Для хранения программы МК имеет память программ (ПП, PROGRAMM MEMORY, PM). Адресное пространство памяти программ МК PIC16 - 8К 14-разрядных слов, но это не значит, что все МК имеют ПП объемом 8К слов. У разных типов объем физически реализованной ПП может составлять 1К, 2К, 4К или 8К слов (рис. 2.1).



Карта памяти программ

Рис. 2.1. Адресное пространство памяти программ и варианты реализации памяти программ микроконтроллеров PIC16.


Для всех МК серии PIC16 область ПП одинакова, и занимает адресное пространство от адреса 0000h до адреса 1FFFh. Но микроконтроллеры разных типов физически имеют различный объем ПП, который может быть равным или меньшим области ПП и занимать полностью или частично область ПП. Причем, физически имеющаяся ПП, всегда располагается, начиная с адреса 0000h и монотонно вверх до своей границы. Содержимое памяти программ микроконтроллера изменяется только однажды - при программировании, а во время его штатной работы, ячейки ПП только считываются, содержащиеся в них коды декодируются и исполняются. Хотя есть микроконтроллеры, имеющие процедуры доступа к ПП из рабочей программы, но сути ПП это не меняет.


2.2. Специальная память



Сверху, к ПП прилегает область специальной памяти (рис. 2.1).
Вот что МК хранит в области специальной памяти.


Разрядность (количество бит в слове) специальной памяти такая же, как и разрядность памяти программ - 14 бит.

Карта специальной памяти

   Рис. 2.2. Область специальной памяти микроконтроллера PIC16.

Ячейки специальной памяти программно не доступны, т.е. из программы нельзя обратиться к ячейке ID или CFG. Прочитать или изменить содержимое этих ячеек можно только программатором, причем это касается и тех МК, у которых имеются процедуры доступа к ПП из рабочей программы.


2.3. Память данных



При работе микроконтроллера, его программа использует различные оперативные данные, полученные в результате вычислений, преобразований, считываний с внешних устройств и портов. Эти оперативные данные называют переменными величинами, или просто, переменными. Для хранения переменных служит память данных (ПД, DATA MEMORY, DM). ПД представляет собой массив регистров разрядностью в один байт. Объем ПД всегда гораздо меньше, чем ПП, и обычно составляет от 16 до 256 байт. При выключении питания МК, данные в ПД не сохраняются. Обычно это и не требуется. Но бывает необходимо время от времени, по ходу работы МК, скорректировать или запомнить какие-то параметры. Например, одни телевизоры при очередном включении устанавливают усредненные значения оперативных регулировок, а другие восстанавливают их такими, какими они были при последнем выключении телевизора. В первом случае, измененные пользователем настройки запоминаются в ПД и, при выключении питания исчезают, а при включении, программа берет начальные параметры из ПП и инициирует ими соответствующие переменные в ПД. Программа МК не может изменить содержимое ПП, поэтому предписанные программистом начальные параметры не могут быть изменены. Все изменения в ПД не сохраняются при выключении питания. Т.о. становится очевидной необходимость памяти обладающей свойствами, как ПЗУ, так и ОЗУ. С появлением FLASH микроконтроллеров такая память была создана и введена в состав МК. Она реализована в виде массива ячеек (обычно 64…256) разрядностью в один байт и называется EEPROM Data Memory или FLASH ПД. Программа микроконтроллера в ходе своего исполнения может считывать и записывать байты во FLASH ПД. Данные в ней могут быть переписаны миллионы раз и сохраняются при выключении питания. Чтобы считать байт из FLASH ПД необходимо выполнить соответствующую процедуру состоящую из нескольких команд, а чтобы записать байт во FLASH ПД необходимо выполнить соответствующую процедуру и подождать окончания записи несколько миллисекунд. Некоторые МК имеют возможность записи и считывания данных прямо во FLASH ПП, используя такой же механизм, как и при доступе к FLASH ПД. В принципе не имеет значения, где хранить изменяемый параметр, только нужно иметь в виду, что

   МК разных типов имеют различное число линий ввода/вывода, но, в любом случае, все они логически разбиты на группы по 8. Группы называются как PORTA, PORTB, PORTC и т.д. Число имеющихся у МК линий ввода/вывода не обязательно кратно 8, поэтому группа может быть не полной, но всегда, как логическая единица, порт представляет собой байт. Как правило, каждый разряд порта, независимо от других разрядов, может быть оперативно настроен как на ввод бита, так и на вывод. Т.е. программа может оперативно переключать направление разряда порта. Как это делается? Просто каждому порту соответствует дополнительный регистр, разряды которого определяют направление соответствующего разряда порта. Эти регистры называются TRISA, TRISB, и т.д. Единица в разряде регистра TRIS переключает соответствующий разряд порта на вход, а ноль - на выход. Подобно регистрам TRIS, существуют и другие служебные регистры, с помощью которых программа осуществляет управление различными функциями и функциями периферийных модулей. Как ядро МК, так и его периферийные модули, имеют свои информационные регистры, как, например регистр STATUS, в котором находятся флаги (биты) описывающие некоторые признаки результата выполненной операции, или регистры АЦП, из которых можно считать результат преобразования. Все служебные регистры, такие как управляющие и информационные регистры, порты, и даже счетчик программ относятся к регистрам специальных функций (Special Function Registers, коротко SFR). Регистры специальных функций управляют свойствами различных физических и логических модулей МК или являются носителями результата функции, выполняемой модулем. Например, таймер, порт или АЦП перед использованием должен быть настроен на требуемый режим. Для этого в управляющий регистр модуля записывается управляющее слово. После окончания функции модуля результат считывается из другого специального регистра модуля. Все эти регистры являются регистрами специальных функций. Каждый SFR имеет имя, причем имена стандартны для всего семейства МК PIC. И вот еще одно замечательное свойство МК PIC: все регистры SFR находятся в адресном пространстве памяти данных. К любому регистру SFR можно обращаться так же, как и к любой ячейки ПД. Это значит, что для функционирования МК нет надобности в специальных управляющих командах, достаточно обычных арифметических и логических команд и команд пересылки, что значительно сокращает весь набор необходимых команд, облегчает освоение МК и упрощает написание и чтение программ. SFR занимают первые 0x20 адресов на каждой странице ПД (о страничной организации ПД чуть позже). После SFR в ПД расположены регистры общего назначения (РОНы, General Purpose Registers, GPR).




Далее: 2.4. Обобщенная структурная схема МК
Оглавление



Полный пречень выпускаемых микроконтроллеров PIC, все неоьходимые документы смотрите на сайте фирмы Microchip microchip.com
А также на российском сайте и на русском языке microchip.ru


Павел Лукиенко