четверг, 30 апреля 2009 г.

Коммуникации в PIC18F85J90

Семья микроконтроллеров PIC18F85J90 поддерживает множество устройств передачи-приема информации. Они включают
адресируемый USART;
улучшенный USART, который поддерживает протокол LIN 1.2;
модуль SSP, который поддерживает обыдва режимы SPI и I2C™ (Master and Slave).

четверг, 23 апреля 2009 г.

Регистры специального назначения

Регистры специального назначения (SFR) образуют интерфейс между центральным процессором и аппаратной частью микроконтроллеров PIC. Они используются в качестве рабочих регистров, регистров конфигурации или для опроса состояния аппаратного обеспечения.

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

Таблица 1.4. Классическое расположение первых восьми файловых регистров в среднем подсемействе микроконтроллеров PIC


Номер регистра Банк0 Банк 1
0 INDF INDF
1 TMRO OPTION
2 PCL PCL
3 STATUS STATUS
4 FSR TSR
5 PORTA TRISA
6 PORTB TRISB
7 PORTC TRISC

Если порт ввода-вывода не работает?

Если вывод порта ведет себя странно, то это может объясняться следующими причинами;
  • проблематика, связанная с чтением/модификацией/записью
  • неправильно установлен соответствующий регистр TRIS;
  • аппаратный модуль включен, переняв на себя работу вывода;
  • вывод порта поврежден, например, по причине короткого замыкания (да, и такое случается!).

Порты ввода-вывода

Выводы портов связаны с регистрами портов и сгруппированы по восемь и меньше. Каждый вывод порта может включаться как выход или как вход (третье состояние).

Регистры портов обозначаются, как правило, PORTA. PORTB, PORTC и т. д. Количество портов разнообразно. У самых маленьких микроконтроллеров PIC, оснащенных всего лишь несколькими выводами портов, выходной регистр называется GPIO.

Каждому регистру PORT поставлен в соответствие регистр направления передачи данных, который поразрядно определяет, какие выводы (по номер) разряда)

Регистры направления передачи данных обозначаются как "TRIS". т.е. TRISA…
Регистр TRIS включает или выключает связанные с выводами выходные усилители-формирователи.

воскресенье, 1 февраля 2009 г.

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

Следующее описание памяти программ касается исключительно базовой серии и среднего подсемейства микроконтроллеров PIC (см. также главу "РКЛ8").
Указатель на слово программы называют счетчиком команд. Центральный процессор всегда выполняет ту команду, на которую указывает этот счетчик, после чего увеличивает его содержимое, если речь не идет о команде перехода.

Младший байт счетчика команд — адресуемый регистр специального назначения (PCL). Регистр PCL изменяют в случае реализации косвенных программных переходов. Однако старший байт счетчика команд умышленно сделан недоступным напрямую. Если необходимо изменить старший байт программною указателя, то его нужно записывать в промежуточный буфер памяти - регистр PCLATH. Регистр PCLATH копируется в старший байт счетчика команд только при доступе к регистpy PCL — будь то по команде перехода или по арифметической команде с аргументом PCL.

Для программного перехода по адресу ADRH:ADRL используют, как правило, команды CALL и GOTO, которым в качестве аргумента передается адрес. При этом существуют трудности, аналогичные тем, которые возникают при адресации памяти данных.

Базовая серия и среднее подсемейство микроконтроллеров PIC предоставляют а распоряжение 11 разрядов для адреса назначения, чтобы охватить все 2К слов программы. Количество в 2К слов обозначается как "страница".

В базовой серии PIC команда GOTO имеет лишь 9 разрядов для адреса назначения, а команда CALL -- даже 8. Иногда для адресации требуется немного ловкости. поскольку необходимо экономно обращаться с имеющейся памятью.
Подобно тому, как это происходит при выборе банка, при адресации памяти программ перед каждой командой перехода должна предварительно выбираться корректная страница (если этого еще не сделано). В среднем подсемействе PIC это реализовано путем правильной установки регистра PCLATH.

При этом перед командами CALL и GOTO необходимо позаботиться только о разрядах 3 и 4 регистра PCLATH. Младшие три разряда затираются адресом перехода. а старшие три не используются, поскольку на данный момент не существует микроконтроллеров PIC среднего подсемейства с более, чем четырьмя страницами.

Наиболее практичный способ выбора страницы перед выполнением команд
CALL LABEL И GOTO LABEL:
MOVLW HIGH__LABEL
MOVWF PCLATH
Измененное значение PCLATH копируется в счетчик команд только по следующим командам CALL и GOTO.
При программировании на ассемблере мы обходимся с управлением страницами подобно тому, как это происходит для памяти данных. Отдельные страницы содержат, по возможности, законченные программные модули. При таком подходе переходы с одной страницы на другую должны использоваться как можно реже. Таблицы и списки размещаются, сети необходимо, на собственной странице.

Такие часто используемые служебные программы как, например, умножение и деление, можно скопировать в каждую страницу, в которой они используются. Для того требуется меньше места, чем в том случае, когда перед каждым вызовом выполняются команды выбора страницы.
Для программного перехода по адресу ADRH:ADRI. используют следующие команды:
MOVF ADRH,W
MOVWF PCLATH
MOVF ADRL,W
MOVWP PCL

Содержимое регистра PCI.ATH загружается в старший байт счетчика команд только последней командой, по которой происходит переход по новому адресу.

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

Предположим, байтовая переменная FALL может принимать значения от 0 до 5. Каждому значению FALL поставлена в соответствие некоторая служебная подпрограмма (PROGO, PROG1, ...). Возможны различные способы ветвления, и один из них выглядит следующим образом:
MOVF FALL,W
ADDWF PCL
GOTO PROGO
GOTO PROG1
GOTO PR0G2
GOTO PR0G3
GOTO PROG4
GOTO PROG5
Перед вызовом этих строк программы следует проверить, действительно ли переменная FALL меньше или равна 5. иначе выполнение команды ADDWF PCL может привести к переходу в непредвиденную область памяти.

Важным примером представленного выше варианта ветвления является следующая подпрограмма;
GETWERT MOVF TABPTR,W
ADDWF PCL
RETLW WERT0
RETLW WERT1
RETLW WERT2
RETLW WERT3
RETLW WERT4
RETLW WERT5 ИТ.Д.

С помощью команды CALL GETWERT в регистр W можно загрузить табличное значение, соответствующее указателю TABPTR.

Косвенная адресация данных

Косвенная адресация подразумевает, что указатель на аргумент размещен не явно в аргументе, а в регистре-указателе. В базовой серии, а также в среднем подсемействе микроконтроллеров Р1С этот регистр называется FSR (File Select Register — регистр выбора файла). Команды с косвенной адресацией не требуют аргумента, поскольку он загружается заранее в FSR.

Без косвенной адресации микроконтроллер немыслим. Поскольку код операции имеет ограниченный размер, в PIC применили следующий трюк: команды для косвенной адресации имеют такой же код операции, что и команды для прямой адресации. Указание на то, что речь идет о косвенной адресации, содержится в аргументе.

Это означает, что должен задаваться какой-то особенный аргумент, который не является "правильным" аргументом данных. В базовой серии и среднем подсемействе микроконтроллеров Р1С это — адрес 0, следовательно, с таким адресом не может быть задан физический файловый регистр. Таким образом, файловый регистр с адресом 0, — это символический регистр, который в ассемблере обозначается именем INDF (косвенный файловый регистр).

Кроме того, в языке ассемблера нет никакого дополнительного кода операции для косвенной адресации, например:
ADDWF INDF.W
В старшем подсемействе микроконтроллеров PIC присутствует три регистра FSR, что повышает удобство программирования. Более подробно об этом сказано в главе "PIC18".

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

Для адресации файловых регистров в распоряжении имеется ограниченное число разрядов в словах команд (в базовой серии PIC — 5 разрядов, с помощью которых можно адресовать 32 файловых регистра). Файловые регистры от 0 до 7 применяются для специальных целей. Их называют Special Function Register (SFR) — регистрами специального назначения. Таким образом, для использования в качестве пользовательских переменных остается еще 24 разряда.

В среднем подсемействе микроконтроллеров PIC используется 7 разрядов, которых достаточно уже для адресации 128 файловых регистров. Файловые регистры от 0 до 31 — регистры специального назначения (SFR). так что для переменных остается 96 байт.

Именно в малом размере адресного пространства заключается главный недостаток сжатых команд. Хотя большинство микросхем предоставляют до 4 банков ПО 32 и 128 файловых регистров, операции по переключению банков не совместимы с удобством программирования. При каждом обращении к файловому регистру необходимо обращать внимание на то. правильно ли выбран банк.

Разряды для выбора банка расположены в FSR для базовой серии и в регистре STATUS для среднего подсемейства микроконтроллеров РIС. С некоторого времени MPASM позволяет выбирать банк с помощью ассемблерного макроса:
BANKSEL WERT ;WERT - пример любой переменной
По этому макросу ассемблер вставляет команды, принадлежащие определенно* MJ типу микроконтроллеров, для выбора банка, в котором находится переменная
WERT.

Основной способ избежать ошибок — помещать переключение банка перед каждым доступом к памяти данных тем не менее, несмотря на всю надежность такого подхода, он делает программу большой и не удобочитаемой. Такой способ используют компиляторы с языков высокого уровня.

При программировании на ассемблере многие разработчики применяют другой метод. В качестве основного состояния задается банк 0. и переключение выполняется только при доступе к другим банкам. Для того, чтобы этот метод был действительно эффективен, необходимо хорошо продумывать структуру данных — особенно, если реализованы подпрограммы, не зависящие от главной программы.

Для упрощения этой процедуры компанией Microchip при разработке микроконтроллеров PIC был принят ряд мер. Так, в PIC с четырьмя банками присутствуют области адресов, расположенные друг над другом, к которым можно обращаться независимо от выбора банка (так называемая "область доступа"). Выло бы бессмысленно дополнительно перед каждым доступом к переменной выполнять переключение банка- В этой области доступа располагают, например, рабочие переменные стандартных подпрограмм. Наиболее важные регистры специального назначения. к которым часто обращаются (рабочие регистры), обычно располагаются в банке 0. Регистры специального назначения, расположенные в банке 1. используются, преимущественно, для инициализации.

пятница, 23 января 2009 г.

Набор команд микроконтроллеров PIC

В системе команд микроконтроллеров PIC среднего подсемейства всего 35 кодов операции, где есть все. что требуется для программирования (табл. 1.1 - 1,3). В базовой серии PIC используется почти такой же набор команд. Хотя для удобства программирования было бы неплохо получить еще несколько дополнительных команд, существующих команд достаточно для решения любых задач.

Команды очень хорошо документированы в технических описаниях, где можно найти даже коды операций.

В описании команд следует всегда обращать внимание на колонку, в которой отмечены флаги, изменяемые в результате выполнения той или иной команды. Флаги находятся в регистре состоянии STATUS, в котором также присутствуют и некоторые дополнительные разряды.
В микроконтроллерах РIС базовой серии и среднего подсемейства присутствуют только три флага: ZR, CY и DC. В документации Microchip флат ZR и CY обозначаются соответственно Z и С. Авторы находят это неудобным и потому используют в книге собственный способ записи.

Внимание!
При операциях вычитания флаг CY устанавливается, даже если не было переполнения. По команде MOVF устанавливается флаг ZR (хотя это и непривычно, зато практично ввиду отсутствия команды TEST).

Структура команды микроконтроллеров PIC

Следующее описание структуры команд касается команд длиной в одно слово. Особенности Enhanced PIC описываются в главе "PIC18".

Каждая команда состоит из двух компонентов: кода операции и аргументов. Код операции определяет, какую операцию необходимо выполнять. Аргументы могут быть константами, адресами или прочими параметрами. Оба компонента заключены в одном слове команды, разряды которого используются оптимально, поскольку отсутствует выделение строго определенного количества разрядов под код операции и аргументы. Так, в некоторых командах аргументы очень длинные, в то время как в других командах их вообще нет. В некоторых случаях даже тяжело сказать, какие разряды относятся к коду операции, а какие — к аргументу.

Наибольший класс команд образуют логические и арифметические операции с аргументом данных и рабочим регистром W. Команд с двумя аргументами данных не существует, в чем заключается один из недостатков сжатой структуры команды.

Этот класс команд имеет следующую структуру:

12 разрядов OOOOO.D.FFFFF
14 разрядов OOOOO.D.FFFFFFF
16 разрядов OOOOOO.D.FFFFFFFF

При этом "О" обозначает код операции, "D" — селектор регистра назначения, а "F" — разряды указателя на аргумент данных.

Очень удобно в этих командах то, что пунктом назначения для результата операции может быть, на выбор, регистр W или указанный в аргументе файловый регистр.

В языке ассемблера, поддерживаемом компанией Microchip, с которым пользователь, наверняка, имел дело, если не предпочитает язык высокого уровня, такая команда записывается следующим образом:

ADDWF WERT,W

Эта команда выполняет сложение содержимого файлового регистра под именем WERT и содержимого рабочего регистра W. Регистр назначения — W . Аргумент D в слове команды в этом случае устанавливается равным 0. Иногда в команде ассемблера встречают также запись в виде "0" вместо "W".

Если в качестве регистра назначения выступает WERT, тогда записывают:

ADDWF WERT,F

или по-другому

ADDWF WERT

Аргумент D в слове команды в этом случае устанавливается равным 1. Иногда в команде ассемблера используют также тип записи "1" вместо "F". Если регистр назначения явно не указан, то в его качестве автоматически выбирается файловый регистр (D=l).
Авторы предпочитают последний, выделенный полужирным шрифтом тип записи, при котором аргумент отбрасывается, поскольку он более наглядный.

Архитектура и принцип функционирования микроконтроллеров PIC

Что касается архитектуры и структуры команд, то базовая концепция микроконтроллеров PIC особо не изменились.

Память данных и память программ разделены. Особенностью микроконтроллеров PIC является то, что память программ и память данных разделены (Гарвардская архитектура). Эта архитектура - основа большинство других особенностей принципа функционирования.

Присутствует шина данных, которая во всех микроконтроллерах PIC имеет разрядность 8 бит и разделена с шиной адреса, которая соединяет центральный процессор с памятью программ. В результате процессор в состоянии одновременно выполнять доступ к данным и к словам команд.

Каждая команда имеет разрядность слова (за исключением PIC18). Гарвардская архитектура допускает, чтобы разрядность ячеек в памяти программ не зависела от разрядности ячеек в памяти данных. Вследствие этого возможно выбрать ячейки памяти программ такого размера, чтобы для каждой команды требовалось только одно обращение к шине адреса. В одном слове команды содержится совокупная информация о коде команды и аргументах.

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

Конвейер команд. Гарвардская архитектура, наряду с применением команд в одно слово, позволяет воспользоваться особым "трюком" под названием "конвейеризация". Одновременно с выполнением команды центральный процессор выбирает из памяти программ следующую команду. Этим обработка ускоряется почти в два раза при той же тактовой частоте.

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

Разрядность команд: 12,14 н 16 бит. Разрядность памяти программ в первом поколении микроконтроллеров PIC составляет 12 бит. Эти устройства, называемые компанией Microchip "базовой серией" (Base-line), - быстрые, хотя, с современной точки зрения, довольно "спартанские". Впрочем они с успехом используются и по сей день.

В последнее время на рынке появились новые интересные представители базовой серии. Само собой разумеется, они поддерживают технологию Flash (например, крошечные PIC10F2xx с шестью или большие PIC16F59 с 40 выводами).

Среднее подсемейство (Mid-range) с разрядностью памяти программ 14 бит предоставляет уже заметно больше комфорта. Удлинение слова команды используется преимущественно в пользу расширения диапазона адресов, поэтому сам набор команд в сравнении с базовой серией микроконтроллеров PIC не изменился. Большой объем адресуемой памяти данных — основа для модулей аппаратного обеспечения среднего подсемейства PIC.

Наиболее современное старшее подсемейство (Enhanced) имеет 16-тиразрядные слова команд, которые используются не только для дальнейшего расширения адресного пространства, но также и для увеличения набора команд. В системе команд этого подсемейства PIC присутствует также несколько команд длиной в два слова, однако, благодаря ухищренной кодировке, их обработка, по сути, не меняется.

Старшее подсемейство PIC обычно обозначают как "PIC18", поскольку данное обозначение присутствует во всех предыдущих микроконтроллерах PIC этого поколения. Поскольку в этом поколении появились некоторые структурные изменения и технологические новшества, ему посвящена отдельная глава книги.

Хотелось бы упомянуть об еще одной ветке старшего подсемейства PIC — "High-Еnd", которое обозначается как "Р1С17". Эти микроконтроллеры уже присутствовали некоторое время на рынке перед Enhanced PIC. Хотя PIC17 и отличаются в некоторых аспектах от других семейств, с ними нетрудно разобраться с помощью технических описаний.

Перспективы микроконтроллеров

Ежегодно на рынке появляются десятки новых типов микроконтроллеров. Также и в сфере периферии уже нельзя довольствоваться только испытанными, давно известными устройствами.

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

О микроконтроллерах PIC

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

Новые и дополнительные свойства микроконтроллеров PIC будут рассмотрены в отдельной главе "PIC18". Авторы решили, что лучше всего будет представить семейство PIC18 как логическое продолжение предыдущих серий PIC, Несколько раз новшества PIC18 кратко упоминаются уже во вступительной главе.

В былые времена различные представители микроконтроллеров PIC одного поколения разнились между собой, в основном, объемом памяти, количеством выводов и типом корпуса. Между тем, существует много функций, которые у ряда производных устройств реализованы по-разному.

Различные типы микроконтроллеров могут отличаться множеством мелочей. Так, к примеру, во многих случаях мы не будем останавливаться на том, какие специальные разряды находятся в каких регистрах. Компания Microchip хорошо потрудилась над тем. чтобы сохранить совместимость "снизу вверх". Каждый опытный разработчик знает как это трудно.

Таким образом, эта книга не может быть заменой литературе от Microchip. Мы настоятельно рекомендуем каждому пользователю микроконтроллеров PIC читать справочные руководства, содержащие немало интересных советов. Особенности конкретного устройства необходимо выяснять по соответствующим техническими описаниям, даже если их не всегда комфортно читать. Кроме того, существует бесчисленное множество полезных рекомендаций для особых случаев применения (так называемые "Application Notes").

Для выбора типа микроконтроллера PIC с определенными свойствами существует Product Selector Guide (руководство по выбору продукта). Некоторые из функций PIC18 теоретически могут быть реализованы даже в представителях среднего подсемейства микроконтроллеров PIC. поэтому перед тем как приступить к новому проекту следует всегда изучать самую свежую информацию.

Поскольку при выборе устройства также учитывается и цена, очень важна возможность беспрепятственного ознакомления с состоянием цен. С некоторого времени это осуществимо с помощью раздела Buy домашней Web-страницы компании Microchip (www.microchip. com).

С точки зрения пользователя, необходимыми компонентами каждого микроконроллера являются:
• центральный процессор;
• память данных и память программ;
• тактовый генератор и таймер;
• порты ввода-вывода;
• схема сброса.

Можно также назвать компоненты, от которых отказались в первых микроконроллерах PIC:
• схема прерываний;
• аппаратные модули, работающие без участия центрального процессора.
Разумеется, существуют и другие компоненты, однако они доступны пользователю лишь косвенно (например, регистр стека).

Что сразу же впечатлило авторов при первом знакомстве с микроконтроллерами PIC. так это базовая концепция архитектуры и принципа функционирования.

Со времен первого поколения, устройства PIC значительно "выросли" — прием не только в размере, но и в интеллектуальности технологии. В первую очередь PIC занимают особое место в мире микроконтроллеров, благодаря множеству хорошо продуманных аппаратных модулей.