Программирование микроконтроллеров семейства PIC
Программирование микроконтроллеров семейства PIC
Первые микроконтроллеры появились в 60-х годах. Автоматизированные системы до этого времени обычно строились на основе реле. Теперь программируемые логические контроллеры распространены повсеместно. Однако программирование микроконтроллеров — процесс нередко сложно воспринимаемый. Поэтому рассмотрим, как программировать контроллер на примере широко известной серии ПЛК (PLC — Peripheral Interface Controller) — продукта компании Microchip Technology Inc.
Микропроцессор
С микропроцессором (далее МП) дела обстоят немного иначе. Он содержит в себе арифметико-логическое устройство, блок синхронизации и управления, запоминающие устройство, регистры и шину. То есть МП содержит в себе только то, что непосредственно понадобится для выполнения арифметический и логических операций. Все остальные комплектующие (ОЗУ, ПЗУ, устройства ввода/вывода, интерфейсы) нужно подключать извне.
Структурная схема микропроцессорного устройства
Первые микропроцессоры появились тоже в начале 70-х. Самым популярным на тот момент считался 4004. Это микропроцессор, разработанный компанией Intel и представленный 15 ноября 1971 года. Он имел внушающие на тот период характеристики:
- 2300 транзисторов;
- тактовая частота — 740 кГц;
- разрядность регистров и шины — 4 бита;
- техпроцесс — 10 мкм;
- площадь кристалла: — 12 мм².
К слову, 4004 был выполнен в обычном DIP-16 корпусе. Этот МП является самой популярной микросхемой для коллекционирования. Некоторые экземпляры продаются по 400 $ за штуку. Менее раритетные стоят около 250 $.
Уже через пару лет 8-битные МП позволили создавать первые бытовые микрокомпьютеры.
Естественно, тут преимуществом является то, что к МП можно на выбор подключать разную периферию с разными характеристиками (что не во всех случаях можно на МК). Второе основное отличие микропроцессора от микроконтроллера в том, что МП имеют больше вычислительной мощности. Их не имеет смысла ставить в микроволновки и «умные» лампочки. Микропроцессоры применяют там, где вычислительная мощность МК уже не справляется — игровые приставки, сложные вычислительные устройства и приборы, гаджеты.
Получается, чтобы обеспечить работоспособность микропроцессора, нужно подключить ему хотя бы минимальный набор периферии. Минусы:
- Размер — если в случае МК всё уже находится в одном корпусе, то минимальный набор элементов для работы МП занимает больше места.
- Цена — обычно, вся «сборка» комплектующих для МП выходит гораздо дороже «голых» микроконтроллеров.
- Производительность — микропроцессоры обладают большей производительностью, чем микроконтроллеры.
- Выбор — в случае МП у вас есть возможность подобрать комплектующие. Это позволит поставить более подходящую под ваши цели периферию.
Память данных
В регистровой памяти МК выделяются две группы регистров:
● специальные регистры, к которым относятся:
• адресуемые 8–разряные регистры (рис.6.3.3, а): псевдорегистр (INDF), регистр таймера/счетчика реального времени (TMR0), регистр счетчика команд (А10, А9, А8, PCL), регистр состояния (STATUS), регистр косвенной адресации (FSR) и регистры ввода/вывода (PORTA, PORTA, PORTC);
• рабочий регистр W, регистр состояния OPTION, регистры управления портами TRISA, TRISB, TRISC (рис.6.3.3, б), доступ к которым осуществляется с помощью специальных команд;
• регистр конфигурации CONFIG, не имеющий доступа.
Информация (выбранный тип генератора, разрешение/запрещение сторожевого таймера и включение/выключение бита защиты от считывания программного кода) в этот регистр заносится на этапе программирования микроконтроллера;
● регистры общего назначения, которые используются программой для хранения переменных по усмотрению пользователя.
Эти 8–разрядные регистры, разделенные на 4 банка по 16 регистров в каждом, и составляют основной объем памяти данных (рис.6.2.2).
Адресное пространство памяти данных объединяет регистры специальных функций и регистры общего назначения.
Специальные регистры и часть регистров общего назначения с адресами 00h.
1Fh отнесены к банку 0.
Поэтому он содержит 32 8–разрядных регистра, в то время как остальных три банка — по 16 регистров.
Для обращения к регистрам в банках 1, 2, 3 выделены соответственно адреса ЗОh.ЗFh, 50h.5Fh, 70h.7Fh.
Таким образом, адресное пространство памяти данных имеет «дыры».
Отметим, что каждый бит любого адресуемого регистра доступен 4 битным командам.
Способы адресации
Для обращения к памяти данных (специальным регистрам и регистрам общего назначения) используется косвенная и прямая (относительная) адресация (рис.6.3.4).
Косвенная адресация реализуется с помощью псевдорегистра INDF (физически не существующего, но имеющего адрес 00h) и регистра косвенной адресации FSR (рис.6.3.3, а).
Псевдорегистр INDF служит указателем регистра FSR, в котором находится адрес запрашиваемого регистра данных: биты 6, 5 задают номер банка (00 — банк 0, 01 — банк 1,10 — банк 2, 11 — банк 3), биты 4.
0 используются для адресации регистра данных внутри банка, при этом:
● бит 4 переключает адрес между 16–ю регистрами первой и второй групп;
● биты 3.
0 адресуют регистры в пределах каждой группы.
Так как в банках 1, 2 и 3 отсутствуют регистры по 16 младшим адресам, при обращении по этим адресам реализуется доступ только к группе регистров банка О с младшими адресами 00h.
Например, при обращении по адресам 23h, 43h, 63h обеспечивается доступ к регистру STATUS, имеющему адрес 03h.
В этих случаях бит 4 регистра FSR автоматически устанавливается в 0, а состояние битов 6 и 5 FSR игнорируется.
При обращении по старшим адресам 10h.
1Fh биты 6 и 5 FSR задают номер банка, а бит 4 устанавливается в единичное состояние (рис.6.3.4).
Прямая адресация обеспечивает доступ только к регистрам банка 0 с помощью младших разрядов кода команд (рис.6.3.4), поступающих по 5–битной шине из дешифратора команд (рис.6.2.1).
Поскольку биты 6 и 5 псевдорегистра FSR действуют постоянно, по сути дела при обращении к страницам 1, 2, 3 осуществляется способ относительной адресации.