Самоучитель программированию микроконтроллер pic

Знакомство с семейством PIC

Наконец-то сегодня нашлось время познакомить вас с ещё одним семейством микроконтроллеров — это микроконтроллеры PIC.

Данные микроконтроллеры также являются очень известными, устанавливаются во многие устройства и давно уже снискали у радиолюбителей очень сильный интерес.

Разработчиком данного семейства является компания Microchip, которая также ялвяется очень известной и её продукция востребована по всему миру.

Изучение данной серии контроллеров является очень нелёгким вопросом, я этим заниматься начал уже давно, но нормально разобрался с линейкой только сейчас. Последнее время я немного ускорил процесс изучения микроконтроллеров PIC благодаря вашим просьбам в группах и чатах, на которые я не мог не откликнуться.

Также к тому, чтобы поделиться своими знаниями в области программирования данной линейки, меня подтолкнуло то, что я видел много блогов, уроков (в том числе и видео) очень хорошего качества по контроллерам PIC именно с использованием языка ассемблер. А вот на языке C уроков очень мало, что подчёркивает их востребованность.

Поэтому замечу, что программировать МК PIC мы будем именно на языке C. Какую мы выберем среду программирования и компилятор, мы решим чуть позже, а пока же в данном уроке нас ждёт краткое знакомство с самими контроллерами, с их архитектурой и их разновидностями.

Разновидностями контроллеров мы будем считать их деление по архитектуре. Примем за основу разрядность их ядра.

Например, те контроллеры AVR, с которыми мы до сих пор работаем, являются 8-битными, а контроллеры STM, которые мы изучаем — 32-битными.

Вот и контроллеры PIC также делятся по битности.

Первая линейка — это 8-битные контроллеры PIC. Наименование их моделей начинается с префикса PIC10/PIC12/PIC16.

Данная линейка также делится на 3 семейства.

1. BASELINE — данная архитектура присутствует у контроллеров PIC10. От более мощной серии она отличается количеством выводов (от 6 до 28), дешевизной.

2. MID-RANGE — данную архитектуру имеют ядра микроконтроллеров PIC12/PIC16. Количество выводов в данной серии увеличено (от 6 до 64), стоят они несколько дороже, зато имеют помимо 35 машинных инструкций, поддерживаемых серией BASELINE, ещё 14 дополнительных инструкций (оптимизированных под компилятор языка C). Также у данной серии производительность увеличена на 50%, они имеют более глубокий и улучшенный аппаратный стек, увеличенный объём памяти и некоторые прочие прелести, с которыми мы познакомимся в дальнейшем, так как, скорее всего, мы с данной серии и начнём процесс изучения программирования микроконтроллеров PIC.

3. 8-битовые микроконтроллеры PIC18 — это улучшенная серия контроллеров, здесь на борту много другой периферии, количество выводов от 18 до 100, производительность 16 MIPS, поддержка технологии NanoWatt, наличие программироуемого генератора.

Вторая линейка — это 16-битные контроллеры PIC. Они имеют префикс PIC24F и PIC24H. Это уже более мощные контроллеры. В отличие от первой линейки, машинная команда выполняется уже не за 4 такта генератора, а за 2. Также периферия еще более расширена по разновидностям шин, прямой доступ к памяти DMA (у PIC24H), расширенный набор инструкций. Также есть очень много других особенностей.

Третья линейка — это 32-битные контроллеры. Префикс у них уже PIC32. Частота тактирования таких контроллеров до 120 МГц, а у новой серии MZ — до 200 и даже выше. У меня, например, есть отладочная плата, на которой устрановлен контроллер PIC32MZ2048EFH064, у которого тактовая частота составляет 252 мегагерца. Также здесь ещё более увеличена производительность ядра. Данное семейство построено на ядре MIPS32®, которое также кроме высокой производительности отличается ещё и низким потреблением энергии.

Вообщем, вот такие вот краткие характеристики существующих на данный момент контроллеров PIC. Если брать по наименованиям, то наименований очень много, на любой, как говорится, вкус.

Также, как и рассмотренные, а также рассматриваемые нами контроллеры AVR и STM32, контроллеры PIC работают приблизительно по той же схеме. Сочиняется программа, собирается в машинный код, понятный арифметическо-логическому устройству контроллера, загружается (прошивается или заливается) в контроллер и затем обеспечивает работу по определённому алгоритму. Основной интерфейс, используемый для прошивки данных контроллеров — это ICSP, предназначенный для внутрисхемного программирования. Подробнее с ним мы познакомимся, когда будем прошивать данные контроллеры.

Давайте немного разберёмся с организацией памяти в контроллерах PIC. Так как мы начнём изучение семейства PIC с более простых 8-битных (принцип от простого — к сложному ведь не отменял никто), то и организацию памяти мы посмотрим у данной серии.

Сначала посомтрим блок-схему контроллера на примере МК PIC16F84A (нажмите на картинку для увеличения изображения)

Image00_0500

В левом верхнем углу сразу бросается в глаза модуль памяти FLASH, в которой обычно хранится программа контроллера (прошивка). А в правом верхнем углу мы видим память EEPROM, которая уже исользуется для хранения данных. Эти два вида памяти являются энергонезависимыми и после отклчения и сброса контроллера не стираются. Но данная память не является быстрой, поэтому код при старте программы распределяется уже в память RAM (ОЗУ), которая уже является быстродействующей и предназначена для функционирования контроллера при работе. Поэтому данную память мы уже рассмотрим несколько поподробнее.

Оперативная память контроллера PIC делится на память программ и память данных.

Вот так организована память программ у контроллера PIC16F84A

Image01

Микроконтроллеры данной серии имеют счётчик команд, способный адресовать 8К x 14 слов памяти программ и 14-разрядную шину данных памяти программ. Вся память программ разделена на 4 страницы по 2 килослов каждая (0000h-07FFh, 0800h-0FFFh, 1000h-17FFh, 1800h-1FFFh). Ну это общая информация, поэтому у тех контроллеров, у которых память небольшая перемещение между данными страницами приведёт к циклической адресации. Поэтому размер памяти того контроллера, который мы хотим программировать, мы обязаны знать твёрдо. В общем случае память программ состоит из счётчика команд, стека нескольких уровней, память для хранения векторов прерываний, а также внутренней памяти программ.

Также немного познакомимся с организации оперативной памяти, отведённой под хранение данных.

Память данных разделяется на регистры общего назначения и регистры специального назначения. Посмотрим, как организована память данных контроллера PIC16F84A

Image02

Регистры специального назначения (SFR) — это регистры, которые предназначены для хранения строго отведённых величин и имеют определённые имена. С ними мы будем знакомиться постепенно, когда будем писать какой-то исходный код, который будет широко их использовать.

Регистры общего назначения (GPR) — это ячейки памяти, которые имеют только адреса и предназначены они для хранения любых данных.

Также из приведённого выше рисунка мы видим, что у нашего контроллера память данных разделена на 2 страницы (или банка) переход между которыми осуществляется посредством установки определённых битов в регистре STATUS. Поэтому данный регистр присутствует в обеих банках и обратиться к нему мы можем в любой момент, чтобы сменить текущую страницу памяти.

Адресация может быть как прямая, так и косвенная или относительная, когда адрес отсчитывается относительно текущего адреса. С этим мы возможно не будем знакомиться, так как такая задача возникает у программистов, которые пишут программы на ассемблере.

Соответственно, у каждого контроллера кроме памяти существует много чего ещё интересного, в том числе порты ввода-вывода. Наши контроллеры PIC — также не исключение. Посмотрим назначение ножек контроллера PIC16F84A

Image03

У данного контроллера два порта — порт A и порт B. Из порта A наружу выведены 5 ножек — RA0-RA4, а из порта B — все 8 ножек RB0-RB7.

Также ножки портов могут иметь и другое назначение в зависимости от того, как мы их сконфигурируем. Наример ножка 6 или RB0 может в любой момент превратиться в ножку для захвата внешних прерываний, а ножка 3 или RA4 — стать ножкой для тактирования таймера от внешнего генератора.

Тактирование МК PIC также может осуществляться как от внешнего генератора, так и от кварцевого резонатора, от внутреннего резистора, а также существует ещё несколько вариантов, которые поддерживают не все контроллеры данного семейства. На практике как правило используется тактирование от кварцевого резонатора. Скорее всего, мы также последуем данной традиции в наших дальнейших занятиях.

Думаю, на этом мы закончим знакомство с контроллерами PIC. Знакомство получилось кратким, но на первое время нам и этого хватит за глаза. С более расшифрованной информацией мы столкнёмся, когда будем сочинять наши программы. Так что ждите следующих занятий, которые обещают быть очень интересными. Мы познакомимся сначала с установкой среды и компилятора, изучим, как с ними работать, какие тонкости программирования присутствуют в настройках различной периферии, а также в работе с ней.

Смотреть ВИДЕОУРОК (нажмите на картинку)

Источник

Самоучитель по программированию PIC микроконтроллеров. Корабельников Е.А.

Самоучитель по программированию PIC микроконтроллеров. Корабельников Е.А.

Принцип преподнесения информации — максимальная степень «разжеванности», так как «Самоучитель. » предназначен именно для начинающих. Итак, информация будет предоставляться в определенной последовательности и по принципу «от простого к сложному». Прошу придерживаться этой последовательности и не переходить к следующим разделам без уяснения предыдущих. Дело это неторопливое и не требующее суеты. Все «валить в кучу» не буду, «перенапряг» также постараюсь не создавать. «Самоучитель…» расcчитан на начинающих, но при этом предполагается, что они, как минимум, знают основы цифровой техники.

2. Что такое микроконтроллер и как он работает 10

3. Система команд PIC16F84A 26

4. Что такое программа и правила ее составления. Пример создания программы автоколебательного мультивибратора. Директивы. 36

5. Интегрированная среда проектирования MPLAB IDE и работа в ней 45

7. Пример создания программы (начало) 72

8. Пример создания программы (продолжение) 96

9. Работа в симуляторе. Отладка программы 107

10. Как отследить выполнение программы 121

11. Прерывания. Стек. Пример разработки программы с уходом в прерывания 134

12. Организация вычисляемого перехода. Работа с EEPROM памятью данных 160

13. Флаги. Работа с флагами. Как работает цифровой компаратор. Перенос и заем 182

14. Пример задействования флага С в трехбайтном суммирующем устройстве. Циклический сдвиг. Операция умножения 200

15. Введение в принцип построения подпрограммы динамической индикации. Косвенная адресация 222

16. Преобразование двоичных чисел в двоично-десятичные. Окончательное формирование текста подпрограммы динамической индикации 243

17. Принцип счета. Работа с таймером TMR0. Принцип установки групп команд счета в текст программы 262

Дополнительная информация 279

1. Приложение 1: Программаторы PonyProg и IcProg105 2

Как изготовить программатор PonyProg и работать с ним

2. Приложение 2: Область оперативной памяти PIC16F84A 26

3. Приложение 3: Состав регистров специального назначения PIC16F84A 27

4. Приложение 4: Регистр OPTION_REG 29

5. Приложение 5: Регистр STATUS 30

6. Приложение 6: Регистр INTCON 31

7. Приложение 7: Регистр EECON1 32

8. Приложение 8: Биты конфигурации 33

9. Приложение 9: Таблица представления чисел 34

10. Приложение 10: Таблица команд ассемблера (вариант с ошибками №1) 35

11. Приложение 11: Таблица команд ассемблера (вариант с ошибками №2) 47

12. Приложение 12: Таблица команд ассемблера (вариант без ошибок) 58

Год выпуска: 2008
Автор: Корабельников Е.А.
Жанр: Самоучитель
Издательство:
Формат: PDF
Размер: 3.5 МБ + 2,4 МБ + 98 MБ с ПО
Качество: Отсканированные страницы
Количество страниц: 287

Источник

Читайте также:  Мти объектно ориентированное программирование
Оцените статью