4. МИКРОКОНТРОЛЛЕРЫ. ИНФОРМАТИКА

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


СТАНДАРТ ЦИФРОВОГО КОДИРОВАНИЯ ASCII

Код ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией) представляет собой стандарт цифрового кодирования цифровых и буквенных символов. Он используется в файлах, а также при обмене данными между двумя компьютерами или между компьютером и периферийными устройствами. Принцип ASCII прост: прописной букве А, например, соответствует код 65, букве В — код 66 и т. д. При желании можно проверить этот код на компьютере, если при нажатой клавише Alt набирать нужный код на цифровом поле клавиатуры. Соответствующая буква при этом появится на экране. Коды ASCII для распространенных символов приведены в табл. 4.1. Справа от десятичного представления кода (первый столбец) дано его значение в шестнадцатеричной системе счисления.



Примечание: CR: Carriage Return — возврат каретки; LF: Line Feed — следующая строка.


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


СТАНДАРТНЫЕ АТ-КОМАНДЫ

АТ-команды представляют собой стандартные команды, использующиеся в большинстве модемов. Возможности современных модемов огромны. Их стоимость относительно невелика, они все шире используются для связи между компьютерами, в частности через Internet. Используя АТ-команды, можно управлять модемом и без помощи такого совершенного логического интерфейса, как Windows.

Электронная схема на базе микроконтроллера позволяет без труда управлять телефонными соединениями. При этом полностью разрешаются проблемы создания интерфейса и стандартизации. Модем представляет собой устройство сопряжения между блоком с последовательной передачей, соответствующей стандарту RS232, и телефонной сетью. Его назначение (хотя и не единственное) — это передача информации в двоичной форме. Часто модем выполняет функцию автоматического распознавания скорости передачи, что облегчает разработку программного обеспечения. С помощью сигнала длиной в несколько байтов можно включить телефонную линию, набрать номер, получить сообщение о звонках. Короче говоря, разрешается автоматически управлять большим количеством ситуаций.

Ниже представлены часто используемые команды:

Q0 — отображать сообщения о текущем состоянии;

Q1 — не отображать сообщения о текущем состоянии;

V0 — сообщения о состоянии в виде цифрового кода;

V1 — сообщения о состоянии в явном виде;

Х4 — ожидание звукового сигнала перед набором номера и определение занятой линии;

S0 — выбор режима автоматического ответа (S0 — 0 — режим автоматического ответа отключен);

М2 — постоянное включение динамика;

D — запрос на набор номера (за кодом запроса следуют определенные параметры и требуемый номер).

Эти компоненты всегда приводятся в технической документации к модемам. Принцип функционирования прост: команда или группа команд, разделенных пробелами (иногда другими символами), отправляется в форме последовательности ASCII кодов, которая начинается со слова АТ. Например, последовательность AT Z возвращает модем в исходное состояние. По умолчанию модем отвечает отправкой идентичной последовательности, при условии что не должен выдать какую-либо дополнительную информацию. Если модем был сконфигурирован нужным образом, при каждом звонке телефонного аппарата автоматически отправляется слово RING («звонок», англ.).

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

Следовательно, модем способен работать как автоответчик. С его помощью можно также управлять отправкой и получением факсов.

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

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



СИСТЕМЫ СЧИСЛЕНИЯ

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

Листинг (текст, написанный на специальном языке) любой программы содержит команды для микропроцессора, а также исходные данные и операторы. Как правило, во всех этих элементах программы используется шестнадцатеричная система счисления. Минимизированная форма записи одного байта состоит из двух знаков, за которыми следует буква Н. Это правило должно строго соблюдаться во избежание путаницы с другим системами счисления. Таким образом, число 48 имеет совершенно другое значение, чем 48Н. Кроме того, шестнадцатеричное число следует обозначать при помощи двух цифр. Например, числа 0Н и 00Н обозначают одну и ту же величину, но список, состоящий из множества чисел, написанных разными способами, при преобразованиях приобретает трудночитаемый вид (рис. 4.1).



Следует иметь в виду, что программисту иногда приходится манипулировать числами из разных систем счисления. К этому прибегают либо для облегчения считывания, либо по необходимости: например, нужно задать однобитный код входа/выхода (0 для входа и 1 для выхода). На рисунке показано, как преобразовать двоичное число в шестнадцатеричное, заполняя отдельные ячейки нулями или единицами и присваивая затем каждой единице значение из соответствующего столбца.

Преобразование шестнадцатеричного числа в десятичное состоит в умножении десятичного эквивалента первого знака на 16 и добавлении к нему десятичного эквивалента второго знака. Таким образом, 48Н равняется 64 (4 х 16) + 8, то есть 72. Для обратного преобразования (из десятичной системы в шестнадцатеричную) десятичное число нужно разделить на 16, вычесть первый знак (целую часть от деления) и умножить остаток на 16. Таким образом, десятичное число 249 в шестнадцатеричной системе записывается как F9H, поскольку 249/16 = 15,5625, откуда вычитается первый знак (F, то есть 15 в десятичной системе), а затем остаток 0,5625 умножается на 16, что дает в результате 9.

Другие преобразования вытекают из основных операций, рассмотренных выше. Например, число 249 или F9H в двоичной системе принимает вид 11111001, поскольку F соответствует 15 = 8 + 4 + 2 + 1, а 9 = 8 + (0 х 4) + (0 х 2) + 1. Для тренировки можно поупражняться с таблицей преобразований, а также с таблицей кодов ASCII для наиболее распространенных символов.


IВМ-СОВМЕСТИМЫЕ ПЕРСОНАЛЬНЫЕ КОМПЬЮТЕРЫ

Добавление микросхем ЗУ

Увеличить объем оперативной памяти IBM-совместимого компьютера несложно — достаточно добавить на его материнскую плату несколько колодок с микросхемами ЗУ (это небольшие печатные платы со специальным разъемом, к которым припаяны интегральные КМОП схемы).

Как правило, материнскую плату не оснащают одной колодкой и не добавляют их по одной. Например, увеличение памяти на 16 Мбайт необязательно будет успешным при добавлении одной колодки с микросхемами емкостью 16 Мбайт, так как одна колодка может быть не распознана компьютером. Лучше добавить две идентичные колодки по 8 Мбайт.

Убедиться в успешной установке можно во время тестирования памяти компьютером, что происходит сразу после включения. В случае неудачи прежде, чем разбирать схему, стоит проверить конфигурацию или попытаться настроить ее с помощью программы установки SETUP (войти в программу обычно можно на стадии загрузки операционный системы, нажав на клавишу Delete). Иногда для решения проблемы достаточно всего-навсего установить нужные значения.


Звуковые сигналы при загрузке компьютера

При включении питания, если тестирование узлов не выявляет каких-либо неполадок, IBM-совместимый компьютер выдает одиночный звуковой сигнал. Если на этой стадии возникают проблемы, но устройство отображения (монитор и видеокарта) функционирует нормально, на экране появляется сообщение о причине сбоя.

Если изображение отсутствует, компьютер выдает код ошибки в виде ряда звуковых сигналов, состоящего из трех серий, причем каждая серия содержит в себе от одного до четырех сигналов. Например, код 1-3-3 означает, что подается один сигнал, далее следует пауза, затем звучат три сигнала друг за другом, пауза и снова три сигнала подряд.

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

1 — тестирование прошло нормально, ошибок не обнаружено;

1-1-4 — ошибка в ПЗУ BIOS (серьезная);

1-3-1 — сбой в системе охлаждение ОЗУ (проверить колодку HS);

3-2-4 — ошибка при проверке драйвера клавиатуры (сменить клавиатуру?);

3-3-4 — сбой при проверке памяти монитора (неисправна видеокарта?);

3-4-1 — сбой при инициализации монитора (неисправна видеокарта?).


Материнская плата с напряжением питания 5 В

Долгое время напряжение питания микропроцессоров, используемых в IBM-совместимых компьютерах, оставалось равным 5 В. Затем по некоторым причинам, главным образом для уменьшения мощности, потребляемой переносными компьютерами, это напряжение снизилось до 3,5, а потом и до 3,2 В. Иногда оно может принимать самые различные значения.

Разумеется, в соответствии с этими нововведениями были модифицированы и материнские платы. Некоторые из них оснастили надлежащим образом задолго до того, как низкие напряжения питания стали частым явлением. Однако многие платы (ради снижения стоимости) были рассчитаны только на напряжение 5 В и лишены стабилизатора для понижения напряжения.

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

Прежде чем решиться на приобретение бывшей в использовании материнской платы с рабочим напряжением на 5 В, следует уточнить, есть ли на ней свободное место рядом с микропроцессором. Речь идет о серии контактных площадок, предназначенных для размещения микросхемы стабилизатора в корпусе типа Т0220 (в горизонтальном положении), а также нескольких резисторов. Иногда удается найти место и для колодки двухрядных разъемов, в которые можно вставить одну или несколько перемычек для выбора нужного напряжения питания. Модель LT1086CT, приведенная на рис. 4.2, принадлежит к категории стабилизаторов, способных обеспечить требуемое выходное напряжение при входном напряжении 5 В.



Модель LM317 и ряд других не могут работать при столь низком напряжении на входе. Необходимо тщательно исследовать плату, чтобы точно определить нужный тип стабилизатора. Для его монтажа и настройки можно воспользоваться приведенной схемой. При необходимости допустимо изменять напряжение на выходе стабилизатора, переключая резисторы с помощью перемычек. Правильность расчетов нужно обязательно проверить по имеющейся документации.

Напряжение должно соответствовать значению, установленному для данного микропроцессора. Рекомендуется испытать стабилизатор, собранный на экспериментальной плате, прежде чем приступать к его окончательному монтажу. Стабилизированное напряжение должно оставаться неизменным в режиме без нагрузки и с нагрузкой при токах порядка 1 А.

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


Жесткий диск

Современные материнские платы могут автоматически распознавать большинство периферийных устройств, подключенных к компьютеру, в частности жесткий диск (или диски). При обращении к программе SETUP (раздел, посвященный жесткому диску) можно увидеть, что жесткий диск обычно признается специальной моделью. Материнские платы типа «Plug and Play» («включай и работай») автоматически заполняют нужные рубрики, а для более ранних моделей выбор параметров диска производится вручную.

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

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



СТИРАЕМЫЕ ПРОГРАММИРУЕМЫЕ ЗАПОМИНАЮЩИЕ УСТРОЙСТВА

Работа некоторых устройств памяти, в которых информация стирается оптическим способом диапазона УФ, может нарушиться при наличии яркого света вблизи окна стирания. Это справедливо для стираемых программируемых постоянных ЗУ и для микроконтроллеров. И солнечное, и искусственное освещение одинаково опасны, но чаще всего, особенно на стадии доводки устройства, рабочий стол ярко освещается искусственным светом. Поэтому из предосторожности следует всегда закрывать окно стирания непрозрачной наклейкой. Во время программирования достаточно прикрывать окно обычным ластиком. Некоторые полезные замечания по программированию ЗУ сделаны в главе 2, в разделе «Программируемое постоянное запоминающее устройство».


ФОРМАТЫ ФАЙЛОВ

Программирование микроконтроллера или ПЗУ практически всегда проходит через стадию сохранения двоичного файла в одном из наиболее распространенных форматов.

Существует три таких формата, два из которых были разработаны производителями микропроцессоров. Самым простым является собственно двоичный формат, в котором байты сохраняются один за другим в форме последовательности. Он воспринимается многими программами, но для него не существует стандартного расширения, которое добавляется к имени файла при его сохранении. Часто используется расширение. bin, но оно не является универсальным. Два другие распространенных формата, созданных компанией Motorola, — это формат S19 (расширение. sl9) и так называемый формат Intel (расширение. hex). В этих форматах данные сохраняются в форме кода ASCII и обычно через каждые 16 байт добавляется контрольная информация (checksum — проверка суммы). Для ее формирования выполняется сложение этих байтов. Результат сложения, превышающий FFH, делится на 256 или 16 (в зависимости от формата) и в соответствующем виде сохраняется в начале или в конце строки. Каждая строка предваряется адресом, по которому байты строки будут располагаться в ЗУ. В этих условиях размер сохраняемого файла во многом зависит от структуры программы. Например, если объем ЗУ равен 8 Кб, то для сохранения 10 байт полезной информации при компактном размещении данных потребуется файл размером 8 Кб в двоичном формате и приблизительно 25 байт в других форматах. В этом случае файл будет содержать адрес, за которым следует 10 байт информации, предназначенной для хранения.

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

Рассмотрим представление информации в различных форматах.

Пусть устройство памяти объемом 8 Кб должно содержать по адресу 01 00Н следующие 16 байт:

9В А6 FF В7 04 В7 05 А6 F7 В7 06 11 00 15 00 13

В двоичном формате файл займет 8192 байт, включая 256 (FFH) пустых байтов, после которых размещаются 16 байт данных, и затем опять 7920 пустых байтов.

В формате S19 файл будет записан таким образом:



В кодах ASCII получим последовательность, занимающую в шестнадцатеричной форме 43 байта:

53 31 31 31 33 30 31 30 30 39 42 41 36 46 46 42 37 30 34 42 37 30 35 41 36 46 37 42 37 30 36 31 31 30 30 31 35 30 30 31 33 41 35

Эквивалентная запись в формате Intel имеет вид:



Соответствующая последовательность кодов ASCII в шестнадцатеричной форме займет 42 байта:

31 30 30 31 30 30 30 30 39 42 41 36 46 46 42 37 30 34 42 37 30 35 41 36 46 37 42 37 30 36 31 31 30 30 31 35 30 30 31 33 41 35


ЭНЕРГОНЕЗАВИСИМОЕ ОПЕРАТИВНОЕ ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО

Сохранение данных в устройстве памяти при отключении напряжения питания можно обеспечить путем использования специальных компонентов. В случае применения классических компонентов оперативной памяти тот же результат достижим при организации бесперебойного питания ЗУ.

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

Есть микросхемы энергонезависимых ОЗУ, которые в своем несколько увеличенном корпусе содержат статическую память и одну или две батарейки питания. В этом случае основным недостатком также является высокая стоимость и невозможность замены израсходованных батареек. Следует, однако, отметить, что батарейки теоретически имеют очень большой срок службы.

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

Имеется много схем, контролирующих напряжение питания, которые при необходимости переключают устройства на питание от батарейки или аккумулятора, а также обеспечивают управление логическими сигналами, запрещающими некоторые операции в режиме автономного питания. На рис. 4.3 приведен пример использования одной из таких схем, а именно микросхемы МАХ690.



При необходимости (если используется достаточно мощная батарейка) аварийным питанием можно обеспечить не только элементы памяти, но и все компоненты устройства. Микросхемы ОЗУ выбираются из многочисленных существующих типов (6116 и др.), изготовленных по КМОП технологии, с различными размерами корпуса. При переходе в режим питания от батарейки логический сигнал низкого уровня с вывода 7 микросхемы М АХ690 поступает на определенный вход ЗУ и запрещает всякий доступ к нему. Имеется в виду вход выбора кристалла CS или соответствующий дополнительный вход при инвертировании сигнала. Для более сложных вариантов адресации иногда необходимо добавить нескольких логических вентилей.

Рассмотренная небольшая схема успешно обеспечивает бесперебойную работу встроенной энергонезависимой памяти. Если вместо батареек используется аккумулятор, потребуется дополнительное зарядное устройство.


НАЧАЛЬНАЯ УСТАНОВКА МИКРОКОНТРОЛЛЕРА

Начальная установка микропроцессора или микроконтроллера — важная стадия работы, от которой зависит нормальное выполнение программы. Даже кратковременное отключение напряжения питания должно вызывать перезапуск устройства (если отсутствует резервное питание, например батарейное). Тогда схема типа МАХ690, как было показано выше, успешно генерирует управляющий импульс. Простой операционный усилитель, включенный по схеме компаратора напряжения (рис. 4.4), также может генерировать сигнал установки в исходное состояние.



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

Параметры резисторов входных делителей, приведенные на рис. 4.4, соответствуют напряжению 9 В на выходе трансформатора и напряжению питания Vcc — 5 В. Эти параметры корректируются в зависимости от характеристик реальной схемы.


ТИПОВЫЕ ПОДПРОГРАММЫ

Ниже приводятся листинги нескольких подпрограмм, обеспечивающих взаимодействие между микроконтроллером и распространенными периферийными устройствами. Приведены также примеры протоколов коммуникаций и логических функций. При этом используется язык, разработанный фирмой Motorola. Он имеет высокую степень совместимости с программным обеспечением микроконтроллеров типа 6805 и 68НС11. Рекомендуется обратиться к справочному изданию производителя, что поможет лучше понять используемые команды.

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

Используемые переменные, указанные в начале листинга подпрограммы, должны быть объявлены в основной программе, как и функции управления для коммуникационных портов. Тактовая частота кварцевого генератора для модели 6805 составляет, как правило, 4 МГц.


Последовательный ввод данных

Приведенная ниже подпрограмма позволяет принять байт информации в формате RS232, приведенном к уровню сигнала 0–5 В (5 В в режиме отсутствия сигнала), со скоростью 9600 бод. Особенности последовательной передачи данных также рассматриваются в главе 2, раздел «Последовательный интерфейс».

Слово поступает на вход прерывания микроконтроллера, используемый в данном случае для считывания информации (при отключенном режиме прерывания). Результат операции содержится в переменной <pushrs>. Подпрограмма начинается с цикла ожидания (rsin 1), из которого невозможно выйти без изменения состояния линии прерывания. Основными операциями являются задание длительности выполнения команд и логический сдвиг влево (lsl), позволяющий заполнять байт последовательно, бит за битом, по мере прихода сигналов. Подпрограмма temprs2 осуществляет задержку на 76,5 мкс, откалиброванную с помощью кварцевого генератора с рабочей частотой 4 МГц. Имеется возможность производить подстройку как по частоте кварцевого генератора, так и по скорости передачи данных. Ниже приведен листинг подпрограммы.


Используемые переменные: pushrs и pushrs2.



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


Аналого-цифровой преобразователь с RC-цепочкой

Эта короткая подпрограмма необходима для работы аналого-цифрового преобразователя, описанного в главе 2, раздел «Аналого-цифровое преобразование».

Выход компаратора соединен со входом прерывания, в то время как по линии, соответствующей седьмому биту порта А, выдается импульс переменной ширины. Здесь для увеличения ширины импульса снова используется длительность выполнения команд add #0 и bra in1. При появлении ошибки измерения (слишком высокое напряжение) выдается сообщение в виде кода FFH. Результат преобразования помещается в регистр А. Ниже приведен листинг подпрограммы.

Используемая переменная: А (имя регистра).



Управление символьным индикатором

Речь идет об управлении алфавитно-цифровым индикатором с одной или двумя строками с помощью восьмибитного сигнала. Различные специальные команды уже рассматривались в главе 2.

Контроль за тремя управляющими сигналами Е, RW и RS обеспечивается по линиям 0, 1 и 2 порта В, в то время как данные проходят через порт А. Последовательность поступления сигналов соответствует инструкциям разработчиков. Для некоторых команд она имеет увеличенную временную задержку. Код отправляемой команды должен быть размещен в регистре А перед вызовом подпрограммы. Ниже приведен листинг подпрограммы.

Используемая переменная: push3.



Эта подпрограмма предназначена для отправки единичного символа, а не команды.



Данная подпрограмма, напротив, нужна для отправки целого слова, в конце которого стоит код FFH.



На данном этапе полезно возвратиться к разделу «Световые индикаторы» главы 2, чтобы просмотреть список наиболее распространенных команд управления алфавитно-цифровым индикатором.


Цифровая система фазовой автоподстройки частоты

Данная подпрограмма прекрасно иллюстрирует возможности информатики: она используется для решения схемотехнической задачи скорее аналоговой, чем цифровой по своей сути.

Задача состоит в генерировании прямоугольного сигнала частотой 50 Гц, синхронизированного с внешним опорным сигналом (с напряжением сети) или, если опорный сигнал отсутствует, не синхронизированного. Для этого каждый полупериод сетевого напряжения длительностью 10 мс делится на 16 частей по 625 мкс. Основная программа представляет собой последовательность временных задержек на 625 мкс, в которую вставлены импульсы, управляющие счетчиком генерирования сигнала. Временная задержка может изменяться в пределах 625±10 мкс с шагом 2 мкс. Каждые 20 мс на спаде опорного сигнала генерируется импульс прерывания. В этот момент счетчик (переменная per) должен находиться в 16-й позиции. Таким способом корректируется длительность задержки для синхронизации сигнала генератора с напряжением сети.

Используемые переменные: Push2, per, echant.

Ниже приведен листинг подпрограммы прерывания, вызываемой каждые 20 мс.



Далее приведена часть подпрограммы формирования временной задержки. В начале основной программы переменная echant имеет значение 5. При выполнении программы она изменяется в диапазоне от 0 до 0АН (10D), что соответствует значениям частоты от 49,2 до 50,8 Гц с минимальной длительностью удержания частоты 400 мс.



Умножение и деление в микроконтроллерах

В список выполняемых команд для некоторых микроконтроллеров входят умножение и деление. Их выполнение сводится к логическому сдвигу вправо или влево, иногда при необходимости также производится сложение или вычитание. Если регистр А содержит величину 08Н, то она удвоится (то есть достигнет 10Н) после выполнения следующей операции:

lsla;а х 2

Второй сдвиг влево приведет к новому умножению на 2 и, следовательно, к умножению на 4.

По аналогии с этим деление содержимого регистра А на 2 сводится к сдвигу вправо с помощью следующей команды:

lsra: а / 2

Если второй операнд является нечетным, то основную операцию необходимо дополнить сложением или вычитанием. Например, выражение 8x5, можно преобразовать следующим образом: 8 х (4 + 1) или (8 х 4) + (8 х 1). Эти действия выполняются простым циклом операций:

lsla: a x 2

lsla;a x 4

inca;a x 5

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


Использование 16-битных адресов

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

Применение команды Ida table в расширенном виде позволяет считывать содержимое любого адреса размером 16 бит. Для ее записи требуется три байта. Первый байт задает код команды (записанный в регистре А), в данном случае D6H на языке Motorola. Два других байта содержат собственно адрес (в первом указывается старший разряд адреса, во втором — младший или наоборот, согласно стандартам изготовителя). Подпрограмма считывания адреса, расположенного в ячейке с именем Rout, имеет следующую структуру:



Если адресуемая ячейка расположена в ОЗУ, необходимо предварительно заполнить соответствующую область памяти. Данная процедура выполняется следующими командами:

Ida #06

sta Rout

Ida #00

sta Rout+1

sta Rout+2

Ida #81

sta Rout+3

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

Ida 01

sta Rout+1

Ida 78

sta Rout+2

jsr Rout

После возврата в основную программу регистр А содержит требуемые данные. При считывании таблицы нужно давать приращение сначала младшему разряду адреса, а затем, если нужно, старшему (при обнулении младшего разряда). Такую процедуру может существенно облегчить использование команды с переменным индексом типа Ida table + х.


Контроль за нажатием клавиши

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

Когда нажатие зафиксировано, запускается временная задержка порядка 20 мс, за которой следует новый тест состояния клавиши. Если она остается нажатой, выполняется соответствующая процедура и устройство «ждет», когда клавиша будет отпущена, чтобы продолжить выполнение программы. Если результат теста оказался противоположным, последующие действия зависят от того, какое нажатие предусмотрено для данной клавиши: длительное или кратковременное. В первом случае процедура, вызываемая нажатием, отменяется. Во втором случае она выполняется (по истечении времени задержки), после чего устанавливается режим ожидания нового нажатия.

В следующем примере по одной из линий коммуникационного порта (бит 0 порта А) выполняется считывание. При отсутствии сигнала линия имеет высокий потенциал. Предполагается, что считывание продолжается, пока не будет нажата клавиша и не выполнится подпрограмма, обеспечивающая заданное время задержки (20 мс).



Подпрограмма подачи звуковых сигналов

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

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

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

В приведенной ниже подпрограмме для создания временных задержек в очередной раз используется длительность выполнения команд. Информация хранится в регистрах А и X; выходной сигнал подается на линию, соответствующую биту 1 порта А. Его частота составляет приблизительно 1000 Гц при длительности 250 мс.



Формирование временной задержки

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

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

Однако во всех случаях применяется принцип повторения (нередко многократного) одной или нескольких команд, задающих калиброванную базовую задержку. Таким образом, чтобы обеспечить ожидание в течение 20 мс, нужно 20 раз выполнить подпрограмму задержки на 1 мс или 200 раз повторить подпрограмму задержки на 100 мкс.

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

В этих случаях очень важно иметь точные характеристики микропроцессора, чтобы знать длительность выполнения каждой из команд. Данные величины указываются в виде числа машинных циклов, равных, как правило, части периода тактового генератора. Так, для некоторого цикла в документации может быть указано время: tcycl = 2tosc. Это означает, что при рабочей частоте кварцевого генератора 2 МГц данный цикл будет длиться 1 мкс (2 х 0,5 мкс). Если команда Ida 48 выполняется за два цикла, она длится 2 мкс. Повторяя команду n раз, можно обеспечить временную задержку n х 2 мкс.

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



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


ФОРМИРОВАНИЕ СИГНАЛА СИНХРОНИЗАЦИИ

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

Электрическая сеть — довольно точный источник задающего сигнала. При ее использовании обычно удается исключить ошибки считывания, вызываемые внешними помехами. В регулирующих устройствах с широтно-импульсной модуляцией (см. главу 2, раздел «Широтно-импульсная модуляция») при наличии счетчика, синхронизированного с напряжением сети, можно управлять симистором в нужный момент без создания дополнительной схемы синхронизации.

Принцип запуска схемы синхронизации от сети подобен принципу генерации сигнала установки системы в исходное состояние (см. раздел «Начальная установка микроконтроллера»). Отметим, что обе схемы могут сосуществовать в одном устройстве. Используемый в схеме стабилитрон ограничивает сверху напряжение, снятое с выхода трансформатора (перед диодным мостом), до величины, приемлемой для микроконтроллера (рис. 4.6).



Полученный прямоугольный сигнал подается на вход прерывания (или на другой вход) через резистор ограничения тока. При необходимости этот сигнал можно использовать в качестве опорного для внутреннего таймера.


ОХЛАЖДЕНИЕ АППАРАТУРЫ

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

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

Часто вентилятор охлаждения закрепляется на корпусе процессора, который снабжен пластинчатым радиатором. В некоторых моделях предыдущих поколений (процессоры типа 486) для размещения вентилятора были предусмотрены только направляющие. Цена вентилятора сравнительно невелика, поэтому обычно его ставят на все микропроцессоры, работающие при напряжении питания 5 В. Рекомендуется регулярно чистить вентилятор и проверять его состояние. Во всяком случае, эти операции следует выполнять, если издаваемый вентилятором шум усиливается.


СТОРОЖЕВАЯ СХЕМА

Сторожевая схема (Watch-dog — дословно «сторожевая собака») представляет собой устройство, контролирующее работу микропроцессора и вызывающее его перезагрузку при возникновении сбоя.

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

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

Принцип работы сторожевой схемы достаточно прост и требует минимального программного обеспечения. На одном из выходов микропроцессора должен быть сформирован однобитный сигнал, который может использоваться и для других целей. Для этого в ключевую точку программы нужно вставить подпрограмму, генерирующую в нормальном режиме непрерывную последовательность импульсов, которая прерывается при возникновении сбоя. Эти импульсы управляют работой одновибратора, выход которого соединен со схемой перезагрузки процессора. Постоянная времени одновибратора определяется параметрами RC-цепи и рассчитывается так, что превышение заданного временного промежутка между двумя импульсами вызывает переключение выходного сигнала. Таким образом, важна именно длительность временного промежутка, а не ширина импульса. Это обеспечивает определенную свободу выбора при создании программы.

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

На рис. 4.7 представлена простая схема одновибратора, содержащая два транзистора, несколько резисторов и конденсаторов.



Цепь R2/C2 соединена со схемой, обеспечивающей начальную установку процессора. Параметры элементов цепи должны соответствовать техническим характеристикам процессора. Когда процессор запущен, транзистор Т1 замыкает конденсатор С1 с частотой поступающих на него импульсов. Если импульсы прекращаются, конденсатор заряжается через резистор R1, что вызывает повышение напряжения на базе транзистора Т2. При определенном уровне входного напряжения транзистор открывается, и конденсатор С2 быстро разряжается. Это приводит к появлению на выходе отрицательного сигнала, вызывающего перезагрузку процессора. Величины R1 и С1 рассчитываются так, чтобы их произведение значительно превышало период следования импульсов на входе схемы.

Загрузка...