/
Author: Предко М.
Tags: программирование электроника микроконтроллеры
ISBN: 5-901095-07-3
Year: 2001
Text
БИБЛИОТЕКА СОВРЕМЕННОЙ ЭЛЕКТРОНИКИ
Майк Предко
РУКОВОДСТВО
ПО МИКРОКОНТРОЛЛЕРАМ
в двух томах
том I
Перевод с английского под редакцией И И Шагурина и С Б Лужанского
ПОСТМАРКЕТ
МОСКВА
2001
М. Предко
Руководство по микроконтроллерам. Том 1. Москва: Постмаркет, 2001.
416 с.
Описаны архитектура и функционирование микроконтроллеров се-
мейств Intel MCS51, Motorola68HC05, Microchip PIC Atmel AVR Basic
Stamp, система команд и способы адресапии, реализация прерываний,
тестирования и отладки, примеры использования для выполнения типо-
вых функций
На лазерном диске размещены справочные данные и прикладное про-
граммное обеспечение
Для пользователей и разработчиков современных цифровых систем
@ 1999 McGraw-Hill
@ 2000, перевод на русский язык,
ЗАО «Предприятие Постмаркет»
ISBN 5-901095-07-3
Оглавление
Выражения благодарности 8
Введение 9
Часть 1. Введение в микроконтроллеры 13
Глава 1. Микроконтроллеры 14
Воды микроконтроллеров 15
Архитектуры процессоров 18
Вилы памяти в микроконтроллерах 23
Глава 2. Аппаратные средства 30
Корпуса микросхем 31
Технология изготовления кристаллов 37
Питание 39
Запуск (сброс в начальное состояние) 42
Тактирование системы 44
Программный счетчик 48
Арифметико-логическое устройство 49
Сторожевые таймеры 52
Подпрограммы и функции 52
Прерывания 54
Таймеры 57
Параллельный ввод-вывод данных 61
Преобразование логических уровней 63
Последовательный ввод-вывод данных 64
Синхронный последовательный обмен 68
Сети 72
Аналоговый ввод-вывод 79
Ведомые устройства 86
Программирование устройств 87
Интерфейсы отладки 88
Глава 3. Программное обеспечение 90
Средства разработки/Среды 9)
Язык Ассемблера 94
И нтер п ретатор ы 97
Языки высокого уровня 98
Нечеткая логика 105
Разработка программного обеспечения 109
Резидентный монитор и отладчик 114
Операционные системы реального времени 118
Глава 4. Основные типы интерфейсов микроконтроллеров 122
Подавление звона контактов 123
Подключение светодиодов 124
4
Оглавление
7-сег.ментныи светодиодный индикатор 125
Ввод с матричной клавиатуры 127
Управление жидко-кристаллическим индикатором 130
Управление двигателем/реле 136
Ш аговы й лви гател ь 139
Управление сервоприводом 141
Преобразование уровней RS-232 142
Генерация случайных чисел 144
Персональные компьютеры 145
Глава 5. Разработка приложений 156
Выбор микроконтроллера 156
Программные средства и системы разработки 158
Доступность и ресурсы 158
Самотестирование 159
Программаторы 161
Отладка приложений 162
Глава 6. Примеры приложений 167
Программирование микроконтроллеров 167
Первое приложение 168
Приложение часы/термометр 169
Специфичные приложения 172
ЧАСТЬ 2. Микроконтроллеры семейства 8051 173
Глава 7. Микроконтроллер 8051 174
Фирмы-производители 8051 175
Глава 8. Архитектура процессора 8051 177
Центральный процессор 177
Способы адресации 184
Адресация внешней памяти 186
Прерывания 190
Выполнение команд 8051 191
Глава 9. Аппаратные средства микроконтроллеров 8051 194
Типы корпусов 194
Параллельный ввод-вы вод 195
Таймеры 196
Последовательный ввод-вывод 199
Микроконтроллеры Dalias Semiconductor
с шифрованием информации 201
Программирование 203
Маркировка микроконтроллеров 206
10. Разработка приложений на базе 8051 208
Подключение питания 209
Системный тактовый генератор 210
Оглавление
5
Запуск (установка начального состояния) 211
Прерывания 211
Хранение программ 212
Разработка ОСРВ и монитора для 8051 212
Глава 11. Средства разработки для 8051 216
Ассемблеры 217
Языки высокого уровня 218
Объектные файлы «1NHX8M» 219
Программатор Dallas Semiconductor DS87000 221
Глава 12. Система команд микроконтроллера 805 1 224
Команды пересылки данных 225
Арифметические команды 235
Команды битовых операций 242
Команды передачи управления 256
Глава 13. Примеры применения 8051 266
Первое приложение 267
Часы реального времени и термометр 275
«Говорящая» клавиатура для Марии 277
Глава 14. Заключение по семейству 805 1 284
Часть 3. Микроконтроллеры семейства Motorola 68НС05 289
Глава 15. Микроконтроллеры Motorola 68НС05 290
Глава 16. Архитектура процессора 68НС05 294
Центральный процессор 295
Аккумулятор 295
Регистр условий 298
Способы адресации данных 302
Программный счетчик 306
Запуск (установка начального состояния) 310
Прерывания 311
Доступ к регистрам периферийных устройств 312
Функционирование ОЗУ в микроконтроллерах 68НС05 313
Глава 17. Аппаратные средства микроконтроллеров
семейства 68НС05 314
Типы корпусов 316
Системный тактовый генератор 317
Технология логических блоков 318
Реализация прерываний 319
Параллельный ввод-вывод 321
Программируемые таймеры 323
Аналоговый ввод вывод 327
Последовательный ввод-вывод 329
Регистр конфигурации 334
МВ Оглавление
Программирование .......................................... 335
Маркировка................................................. 335
Глава 18. Разработка приложений на базе 68НС05..............337
Подключение питания........................................ 337
Системный тактовый генератор............................... 337
Схема запуска.............................................. 338
Прерывания................................................. 340
Операционные системы реального времени..................... 342
Глава 19. Средства разработки для 68НС05................... 353
Ассемблеры................................................. 353
Языки высокого уровня...................................... 356
Объектные файлы в формате Motorola «S19-Record».............357
Комплекс разработки 68HC705J1CS............................ 359
Глава 2О.Система команд микроконтроллеров 68НС05............363
Команды арифметических операций............................ 364
Команды управления программой.............................. 385
Команды битовых операций................................... 395
Команды управления процессором............................. 398
Глава 21. Примеры применения 68НС05.........................403
Создание первого приложения................................ 403
Реализация часов реального времени и термометра
с помощью «mykeRTOS»....................................... 407
Глава 22. Заключение по семейству 68НС05.....................411
Поддержка микроконтроллеров 68НС05...................... ... 413
В серии
«БИБЛИОТЕКА СОВРЕМЕННОЙ ЭЛЕКТРОНИКИ»
уже вышли учебные пособия:
М.Х. Джонс
«Электроника - практический курс»
К.Б. Клаассен
«Основы измерений.
Электронные .методы
и приборы в измерительной технике»
Ирвинг М. Готтлиб
«Источники питания. Инверторы.
Конверторы.
Линейные и импульсные стабилизаторы»
Заявки на счета для организаций
присылайте по адресу:
107140 Москва, Краснопрудный пер., д. 7,
или по факсу (095) 264 4347. Тел. 207 60 91
e-mai\:postmarket@mtu-net.ru
Заказанные книги будут высланы Вам
в течение 5-ти бизнес-дней
после зачисления денег на наш счет.
Выражения признательности
Во-первых, я xomet бы побшгодарить Скотта Грилло, моего редактора в издатель-
стве McGraw-Hill Ечу принадлежит идея создания книги, и эта работа оказалась для
меня наиболее интересной в данный момент Работа над книгой расширила мои знания,
и я счастлив, что мне представилась возможность набраться опыта в данной облас-
ти Я очень признателен Скотту за его терпеливую помощь в создании этой и преды-
дущей моих книг, а также за руководство в процессе их подготовки к изданию
Одним из наибольших достижений сети Интернет является создание справочных
серверов Для каждого микроконтроллера, описанного в данной книге, имеется ссылка на
соответствующий справочный сервер и даны инструкции по соединению с ним
В написании моей первой книги мне сильно помог Дэйв Кохран из Ptpe-Thompson
(местный представитеть производителя) В процессе создания данной книги я продол-
жал работать с Дэйвом, а также с Грэгом Андерсеном и Алом Ловерихом из Microchip
Друзья, спасибо Вам за помощь и руководство в освоении микроконтроллеров PICmtcro
Я бы хотел поблагодарить Джима Феррела из сектора полупроводниковых приборов
Motorola и Дэрека Клотца из торонтского отдела продаж этой фирмы Я был поражен
Вашим энтузиазмом в области разработки устройств с применением микроконтролле-
ров семейства 68НС05, и высоко ценю Вашу помощь в получении информации и образ-
цов этих приборов Когда я писал эту книгу. Motorola объявила, что выпустила более 2
миллиардов микроконтроллеров 68НС05 Поэтому нет ничего удивительного в том,
что я получал огромную поддержку и ощущал такой энтузиазм с их стороны
Фрэнк Тэйлор из Dallas Semiconductors провел со мной много времени, помогая
освоить выпускаемые этой фирмой микроконтроллеры, которые совместимы с семей-
ством 8051 фирмы Intel, и их усовершенствованные модели, находящиеся в производ-
стве Хочу так же выразить признательность Арану Зараби из Intelletech за его го-
товность ответить на волнующие меня вопросы и предоставить образцы
микроконтроллеров Я высоко ценю Вашу помощь
Один из самых новых микроконтроллеров, появившихся на рынке,— это AVR
Хочу поблагодарить Криса Хэйдена и Джо Янга из фирмы Atmel за то, что они
уделили мне время и помогли найти необходимую информацию
Корпорация Parallax может служить образцом поддержки своей продукции Это
проявляется в разработке большого числа примеров применения и инструментальных
средств проектирования, создании справочных серверов, содержащих руководства для
инженеров-проектировщиков Благодарю Вас за ту значительную поддержку, кото-
рую я всегда получал от всех ваших служащих
Благодарю всех сотрудников компании Celestica, которая является моим посто-
янным работодателем, за энтузиазм, проявленный к данному проекту и моей преды-
дущей книге Лучшего места работы не найти'
Особо благодарю Филлипа Техера из Virtual Micro Design и Дона МакКензи из
Dontrontcs за понимание и помощь в предоставлении образцов их продукции Как
UMPS, так и SimmStick являются прекрасными средствами, помогающими разраба-
тывать новые виды устройств Поэтому ваши усилия по развитию и поддержке
данной продукции заслуживают одобрения
Майк Предко
Торонто, Онтарио, Канада
Введение
Многие рассматривают «компьютерную революцию» как сощание средств
автоматического решения задач, требующих многократных стожных вычис-
тении Такие задачи возникают при расчетах оплаты за различные виды ус-
1\г, при выполнении сложных научных исследовании и разработок, в про-
цессе \правления оборудованием и технологическими процессами на фабриках
и заводах Позже понятие «компьютерная революция» было расширено путем
вкпочения в него сети Интернет и цифровых телекоммуникационных сис-
тем
Но одновременно происходила вторая революция, оказавшая, возможно,
ботее значительное влияние на жизнь каждого из нас Это автоматизация
практически всей окружающей нас среды с помощью дешевых и мощных
микроконтроллеров
Если вы живете в самой обычной квартире, сколько, по вашему мнению,
в неп может быть микроконтроллеров’’ Обойдя свои дом. я обнаружил их не
менее двадцати В их число входили восемь микроконтроллеров в теле- и сте-
реосистемах (устройство дистанционного управления, передатчики и прием-
ники в каждой из них содержали по микроконтроллеру), три — в бытовой
технике, три — в системе отопления-терморегулирования, еще три —в теле-
фонных аппаратах и автоответчиках, два — в танмере управления освещени-
ем. и один — в мониторе, который следил за перемещением ребенка Воз-
можно. я упустил из вида несколько микроконтроллеров, которые могли
содержаться в приборах, где я не предполагал их использование, или в при-
борах, где для осуществления сложных операции используется более одного
микроконтроллера
Большое количество микроконтроллеров используется в автомобилях Со-
временные автомобили содержат более 20 микроконтроллеров, которые не
только контролируют состояние мотора и управляют его работой, но и пре-
пятствуют угону и взлому с помощью системы сигнализации, обеспечивают
функционирование систем безопасности (воздушная подушка и другие уст-
ройства). следят за наружным освещением, температурой воздуха в салоне
автомобизя, работой радио/стереосистем Специальные системы контроля
состояния дверей и приборов освещения могут работать под управлением
автономных микроконтроллеров
Ваш персональный компьютер содержит по краиней мере четыре встро-
енных микроконтроллера - два обеспечивают работу клавиатуры и мыши,
один управляет жестким диском, один отвечает за энергоснабжение Воз-
можно, гораздо больше микроконтроллеров используется для контроля мо-
нитора, модема (или сетевой карты) и принтера
Те, кто не знаком с микроконтроллерами, могут подумать, что это при-
бор с жестко заданными (стандартизированными) функциями Это абсолют-
но не так Термин «микроконтроллер» — это очень общий термин, содержа-
ние которого обычно определяется производителем Однажды я встретил такое
определение поэзии — «это проза, в которой строчка не занимает все про-
10 Введение
странство строки». Мое определение микроконтроллера не такое точное, как
постулаты дзен-буддизма, но оно и не столь специфично, как определения,
используемые для других приборов. «Микроконтроллер — это самостоятель-
ная компьютерная система, которая содержит процессор, вспомогательные
схемы и устройства ввода-вывода данных, размешенные в общем корпусе»
(рис В.I.)
Это определение вполне подходит для рассматриваемых в данной книге
относительно несложных 8-разрядных микроконтроллеров, которые могут од-
новременно обрабатывать только 8 бит информации Однако данное опреде-
ление недостаточно полно характеризует более сложные устройства этого
класса, реализующие обработку 16- и 32-разрядных данных.
Кристалл микроконтроллера
источник питания —
сигнал сброса
в начальное
состояние
(запуск)
тактовые сигналы
блок
управления
питанием
память
программ
блок
управления
сбросом
блок
синхрониза-
ции
и таймер
ОЗУ
входные
и выход-
ные
выводы
Рис. В.1. Общая структура микроконтроллера.
Микроконтроллеры, используемые в различных устройствах, выполняют
функции интерпретации данных, поступающих с клавиатуры пользователя
или от датчиков, определяющих параметры окружающей среды, обеспечива-
ют связь между различными устройствами системы и передают данные дру-
гим приборам. Применение микроконтроллеров позволяет значительно сни-
зить количество и стоимость используемых материалов и комплектующих
изделий, что обеспечит снижение себестоимости конечной продукции. Ис-
пользование микроконтроллеров может существенно увеличить привлекатель-
ность продукции для потребителя благодаря реализации «дружественного
интерфейса» при относительно небольших дополнительных затратах. Обес-
печивается также возможность расширения области применения выпускае-
мой продукции путем использования одних и тех же аппаратных средств с
разнообразным программным обеспечением, специализированным для реа-
лизации различных функций.
При разработке систем управления различными процессами и объектами
использование микроконтроллеров дает проектировщику значительные пре-
имущества.'
Введение 11
Микроконтроллеры отличаются не только архитектурой и характеристика-
ми, но и особенностями функционирования и реализации. Большинство мик-
роконтроллеров представляют собой процессор, интегрированный с памятью
и устройствами ввода/вывода данных. Некоторые микроконтроллеры не явля-
ются реальными приборами, а имеют вид макромоделей, описанных на языке
высокого уровня VHDL, которые созданы для включения в состав специали-
зированных заказных микросхем (ASIC - Application Specific Integrated Circuits).
Такая реализация позволяет инженеру-проектировщику вести в разрабатывае-
мую микросхему память и устройства ввода/вывода данных, которые соответ-
ствуют требованиям технического задания. Практически все микроконтролле-
ры входят в состав определенных семейств, члены которых отличаются составом
и характеристиками периферийных устройств, реализованных на кристалле.
Огромная номенклатура выпускаемых промышленностью микроконтрол-
леров, отличающихся различным сочетанием основных параметров, значи-
тельно усложняет процесс выбора прибора, наиболее подходящего для дан-
ного применения.
Начав работать над этой книгой, я был неприятно удивлен тем, как труд-
но найти необходимую исходную информацию о микроконтроллерах для
начинающих разработчиков, а также сведения о различных приборах, наи-
более подходящих для определенных областей применения. Я считаю, что
достаточно хорошо разбираюсь в компьютерах, но для меня было очень сложно
разобраться в особенностях характеристик тех или иных моделей микрокон-
троллеров и сравнить различные модели с целью определить, какая их них
лучше всего подойдет для определенного проекта. Когда я собирал информа-
цию о микроконтроллерах, у меня было ощущение, что начинающие разра-
ботчики, возможно, быстро устанут и остановятся на первом приборе, кото-
рый покажется отвечающим их требованиям. При этом пользователи чаще
всего выбирают приборы, с которым они уже были знакомы.
В этой книге делается попытка преодолеть некоторые из указанных труд-
ностей и предоставить справочную информацию о некоторых из наиболее
распространенных 8-битовых «встраиваемых»(етЬеййей) микроконтроллерах,
доступных пользователям в настоящее время.
В первой части книги дается общая информация о микроконтроллерах.
Здесь рассматриваются наиболее важные аспекты проектирования устройств
на базе микроконтроллеров и создания для них программного обеспечения,
даются рекомендации по их применению. В этой же части описываются раз-
личные виды микроконтроллеров, стандартные методы обмена данными с
внешними устройствами, а также предлагаются некоторые технические при-
емы, которые разработаны для того, чтобы создавать высококачественное
программное обеспечение.
Каждый из последующих разделов книги посвящен представлению раз-
личных семейств микроконтроллеров, объяснению их архитектуры, аппарат-
ных средств и специальных интерфейсов, краткому рассмотрению примеров
применения. Различные приложения демонстрируют, как работают данные
приборы, раскрывают некоторые особенности их функционирования и на-
12 Введение
глядно иллюстрируют основные положения этой книги. Дается попытка срав-
нительного анализа положительных и отрицательных особенностей различ-
ных микроконтроллеров, имеются дополнительные комментарии, которые
могут быть полезны читателю. В заключении каждого раздела содержатся дан-
ные о производителях и указываются источники информации о характерис-
тиках микроконтроллеров данного семейства.
Совершенно очевидно, что в рамках одной книги невозможно рассмот-
реть все семейства микроконтроллеров со всеми их представителями. Даже
если бы это было возможно, то появление на рынке новых моделей сделало
бы ее устаревшей уже спустя 3-4 месяца Эта книга имеет целью дать общее
представление об архитектуре наиболее популярных 8-разрядных микрокон-
троллеров с объяснением, какие характеристики они имеют, как их про-
граммировать (как создавать программное обеспечение и вводить в прибор
исполняемый код), и где получить дополнительную информацию.
Дополнительная информация
и источники
Целью этой книги является ознакомление с микроконтроллерами, поэтому
она не обеспечивает изучение основ электротехники и вычислительной тех-
ники. Предполагается, что читатель имеет определенный опыт в области элек-
троники и обладает навыками программирования на Ассемблере и языке вы-
сокого уровня. Без общего представления о том, как работают
микропроцессоры, эта книга может показаться Вам трудной для понимания
Я свято верю в Интернет и его возможность помочь инженерам получить
необходимую техническую информацию Это справедливо для всей продук-
ции, представленной в данной книге Помимо адресов в Интернет, где можно
найти наиболее свежую информацию, я привожу сведения о справочных сер-
верах, группах пользователей и данные, используя которые Вы можете непос-
редственно связаться с некоторыми производителями микроконтроллеров
Условные обозначения
К - 1000 Ом
uF - микрофарады
ms - миллисекунды
us - микросекунды
охопп, $пп, Onnh, Н’пп’ - шестнадцатиричное число
ОЬОппп, %ппп, ОпппЬ, В’ппп’ - двоичное число
ппп, Onnnd - десятичное число
AND или & - логическое «И»
OR или I - логическое «ИЛИ»
XOR или л - логическое «Исключающее ИЛИ»
_ Имя (условное обозначение вывода) - вывод активизируется низким уров-
нем сигнала (логический «0»). В справочных данных некоторых производите-
лей такие выводы обозначаются предшествующим знаком «•» или чертой над
обозначением (именем) вывода
Часть
1
ВВЕДЕНИЕ В
МИКРОКОНТРОЛЛЕРЫ
глава
1
МИКРОКОНТРОЛЛЕРЫ
Краткое содержание
Виды микроконтроллеров
Встроенные микроконтроллеры
Микроконтроллеры с внешней памятью
Цифровые сигнальные процессоры
Архитектуры процессоров
CISC против RISC
ГАРВАРД против ПРИНСТОНА
Виды памяти для микроконтроллеров
Память программ (ROM)
Память данных (RAM)
Стеки
Регистры микроконтроллера
Пространство ввода-вывода
При работе с микроконтроллерами необходимо иметь в виду следующее об-
стоятельство Когда разрабатывается система на основе микроконтроллера,
то создаются не только аппаратные средства, которые реализуются соответ-
ствующим подключением микроконтроллера к внешним устройствам Разра-
ботчик должен также обеспечить выполнение многих системных функций,
которые в традиционных микропроцессорных системах обеспечиваются с по
мощью операционной системы и специальных периферийных микросхем Это
позволяет различными способами оптимизировать проект — как его аппарат-
ную, так и программную часть, для конкретного применения В данной книге
даются некоторые рекомендации по поводу выполнения такой оптимизации
Часть данной главы посвящена краткому описанию различий между 8-
разрядными микроконтроллерами и микроконтроллерами с большей разряд-
ностью (16 и 32 бит) Эти сложные устройства выполняют функции целых
Глава 1. Микроконтроллеры
15
подсистем, в то время как 8-ратрядные микроконтроллеры, описанные в
данной кише, обеспечивают решение отдельных более простых задач
Отличия в архитекторе процессоров могут существенно сказаться на их
производитечьности при выполнении различных задач Дискуссии о сравни-
тельных достоинствах различных компьютерных архитектур можно сравнить
с окопными битвами времен первой Мировой Воины Чтобы избежать учас-
тия в этих дпскхсеиях. ограничимся кратким обзором наиболее важных осо-
бенностей разтпчных архитектур и указаниями, для каких приложении наи-
лучшим образом подходит та или иная архитектура
В этой паве также обсуждаются функции памяти и различные виды ее реа-
лизации Если ранее Вы работали с компьютерами, то, возможно, будете удив-
лены тем, как распределяется и испотьзуется память в микроконтроллерах
Различные типы микроконтроллеров
Если бы Вам быти представлены все типы современных микроконтроллеров,
то Вы, вероятно, были бы поражены огромным количеством разнообразных
приборов этого класса, доступных потребителям Все эти приборы можно
разделить на следующие основные типы
• Встраиваемые 8-разрядные микроконтроллеры
• 16- и 32-разрядные микроконтроллеры
• Цифровые сигнальные процессоры (DSP)
Встраиваемые микроконтроллеры
Промышленностью выпускается очень широкая номенклатура встраиваемых
(embedded) микроконтроллеров В этих микроконтроллерах все необходимые
ресурсы (память, устройства ввода-вывода и тд) располагаются на одном
кристалле с процессорным ядром Все, что Вам необходимо сделать — это
подать питание и тактовые сигналы Встраиваемые микроконтроллеры могут
базироваться на существующем микропроцессорном ядре или на процессо-
ре, разработанном специально для данного микроконтроллера Это означает,
что существует большое разнообразие функционирования даже среди уст-
ройств, выполняющих одинаковые задачи
Основное назначение встраиваемых микроконтроллеров — обеспечить с
помощью недорогих средств гибкое (программируемое) управление объек-
тами и связь с внешними устройствами Эти микроконтроллеры не предназ-
начены для реализации комплекса сложных функций, но они способны обес-
печить эффективное управление во многих областях применения Недорогими
будем считать микроконтроллеры, стоимость которых составляет от 1,0 до
20,0 долларов за штуку (цена зависит от технических характеристик, количе-
ства выводов корпуса, объема закупок)
Встраиваемые микроконтроллеры содержат значительное число вспомо-
гательных устройств, благодаря чему обеспечивается их включение в реали-
зуемую систему с использованием минимального количества дополнитель-
ных компонентов В состав этих микроконтроллеров обычно входят
16 Часть 1. Введение в микроконтроллеры
• Схема начального запуска процессора (Reset)
• Генератор тактовых импульсов
• Центральный процессор
• Память программ (E(E)P)ROM и программный интерфейс
• Память дан н ы х RA М
• Средства ввода-вы вода данных
• Таймеры, фиксирующие число командных циклов
Общая структура микроконтроллера показана на рис I I Эта структура дает
представление о том, как микроконтроллер связывается с внешним миром
Кристалл микроконтроллера
источник питания —
сигнал сброса
в начальное ____
состояние
(запуск)
тактовые сигналы
блок управления питанием память программ
порты ввода- вывода
блок управления сбросом процессор
блок синхрониза- ции и таймер
ОЗУ
входные
и выход-
ные
выводы
Рис. 1.1. Структура микроконтроллера
Более сложные встраиваемые микроконтроллеры могут дополнительно ре-
ализовать следующие возможности
• Встроенный монитор/отладчик программ
• Внутренние средства программирования памяти программ (ROM)
• Обработка прерываний от различных источников
• Аналоговый ввод-вывод
• Последовательный ввод-вывод (синхронный и асинхронный)
• Параллельный ввод-вывод (включая интерфейс с компьютером)
• Подключение внешней памяти (микропроцессорный режим)
Все эти возможности значительно увеличивают гибкость применения мик-
роконтроллеров и делают более простым процесс разработки систем на их
основе Следует заметить, что для реализации этих возможностей в большин-
стве случаев требуется расширение функций внешних выводов
Раньше микроконтроллеры изготавливались по биполярной или NMOS
технологии Все современные микроконтроллеры производятся с помощью
CMOS технологии, которая позволяет значительно уменьшить размер крис-
талла и рассеиваемую мощность
Типичные значения максимальной частоты тактовых сигналов составляют
для различных микроконтроллеров 10 — 20 МГц Главным фактором, ограни-
чивающим их скорость, является время доступа к памяти, применяемой в
Глава 1. Микроконтроллеры 17
микроконтроллерах. Однако для типичных применений это ограничение не
является существенным.
Микроконтроллеры с внешней памятью
Некоторые микроконтроллеры (особенно 16- и 32-разрядные) используют
только внешнюю память, которая включает в себя как память программ (ROM),
так и некоторый объем памяти данных (RAM), требуемый для данного приме-
нения Структура микроконтроллера с внешней памятью показана на рис.1 2.
источник питания -
сигнал сброса
в начальное
состояние _
(запуск)
тактовые сигналы
Рис. 1.2. Блок схема микроконтроллера с внешней памятью.
Классическим примером такого микроконтроллера является Intel 80188.
По существу он представляет собой микропроцессор 8088, который исполь-
зовался в компютерах IBM PC, интегрированный на общем кристалле с до-
полнительными схемами, реализующими ряд стандартных функций, таких
как прерывания и прямой доступ к памяти (DMA) Цель создания 80188 со-
стояла в том, чтобы объединить в одном корпусе все устройства, необходи-
мые инженеру для реализации систем, в которых могут использоваться фун-
кциональные возможности и программное обеспечение микропроцессора 8088
Аналогичные цели достигаются при использовании микроконтроллера 80186,
который имеет 16-разрядную внешнюю шину (80188 имеет 8-разрядную вне-
шнюю шину) и представляет собой 16-разрядный процессор 8086, интегриро-
ванный на общем кристалле с дополнительными периферийными схемами (та-
кими же, как в 80188). Также как микропроцессор 8088 является упрошенной
(8-разрядная внешняя и 16-разрядная внутренняя шина) версией 8086 (16-раз-
рядные внешняя и внутренняя шины), так и микроконтроллер 80188 является
упрощенной версией 80186.
Микроконтроллеры с внешней памятью предназначены для других приме-
нений, нежели встраиваемые микроконтроллеры Эти применения обычно тре-
буют большого объема памяти (RAM) и небольшого количества устройств (пор-
2 Зак. 2026
18 Часть 1. Введение в микроконтроллеры
тов) ввода-вывода. Для микроконтроллеров с внешней памятью наиболее под-
ходящими являются приложения, в которых критическим ресурсом является
память, а не число логических входов-вы ходов общего назначения, тогда как
для встраиваемых микроконтроллеров имеет место противоположная ситуация.
Типичным примером применения для микроконтроллера с внешней памя-
тью является контроллер жесткого диска с буферной кэш-памятью, который
обеспечивает промежуточное хранение и распределение больших обьемов дан-
ных (обычно измеряемых в мегабайтах). Внешняя память дает возможность та-
кому микроконтроллеру работать с более высокой скоростью, чем встраивае-
мый микроконтроллер.
Цифровые сигнальные процессоры
Цифровые сигнальные процессоры (DSP) — относительно новая категория
процессоров. Назначение DSP состоит в том, чтобы получать текущие данные
от аналоговой системы и формировать соответствующий отклик. DSPh их ALU
(Arithmetic Logic Unit — арифметико-логическое устройство, которое является
аппаратным средством для выполнения вычислений) работают с очень высо-
кой скоростью, что позволяет осуществлять обработку данных в реальном мас-
штабе времени. DSP часто используются в активных шумо-подавляющих мик-
рофонах, которые устанавливаются в самолетах (второй микрофон обеспечивает
сигнал окружающего шума, который вычитается из сигнала первого микро-
фона, позволяя таким образом подавить шум и оставить только голос) или для
подавления раздвоения изображения в телевизионных сигналах.
Разработка DSP алгоритмов — это специальный раздел теории управле-
ния. Изложение этой теории требует использования весьма продвинутой ма-
тематики и выходит за рамки данной книги (хотя позже вы познакомитесь с
«нечеткой логикой», которая представляет собой нетрадиционный метод уп-
равления системами с помощью компьютера).
В разнообразных DSP можно найти особенности, присущие как встраива-
емым микроконтроллерам, так и микроконтроллерам с внешней памятью.
DSP не предназначены для автономного применения. Обычно они входят в
состав систем, используясь в качестве устройств управления внешним обору-
дованием, а также для обработки входных сигналов и формирования соот-
ветствующего отклика.
Архитектура процессоров
Как указано выше, мне бы не хотелось вдаваться в дискуссию по поводу
того, какая из архитектур лучше — CISC или RISC, Гарвардская или Прин-
стонская. Я попытаюсь объяснить различия между этими архитектурами и
показать, какое отношение они имеют к микроконтроллерам.
CISC против RISC
В настоящее время существует множество RISC (Reduced Instnict Set Computers —
компьютеры с сокращенной системой команд) процессоров, так как сложи-
Глава 1. Микроконтроллеры 19
лось мнение, что RISC быстрее чем CISC (Complex Instruction Set Computers :
Компьютеры co сложной системой команд) процессоры. Такое мнение не со-
всем верно Имеется много процессоров называемых RISC, но на самом деле
относящихся к CISC Более того, в некоторых приложениях CISC-пронессоры
выполняют программный код быстрее, чем это делают RISC-процессоры, или
решают такие задачи, которые RISC-процессоры не могут выполнить.
Каково истинное различие между RISC и CISC? CISC-пронессоры выполня-
ют большой набор команд с развитыми возможностями адресации (непосред-
ственная, индексная и т.д.), давая разработчику возможность выбрать наиболее
подходящую команду для выполнения необходимой операции. В RISC-процессо-
рах набор выполняемых команд сокращен до минимума. При этом разработчик
должен комбинировать команды, чтобы реализовать более сложные операции. Ниже
будет показано, как операции загрузки в стек («push») и извлечения из стека
(«рор») реализуются в RISC-пронессорами с помощью двух простых команд.
Возможность равноправного использования всех регистров процессора на-
зывается «ортогональностью» или «симметричностью» процессора. Это обес-
печивает дополнительную гибкость при выполнении некоторых операций. Рас-
смотрим, например, выполнение условных переходов в программе. В
CISC-npoueccopax условный переход обычно реализуется в соответствии с
определенным значением бита (флага) в регистре состояния. В RISC-процес-
сорах условный переход может происходить при определенном значении бита,
который находится в любом месте памяти. Это значительно упрощает опера-
ции с флагами и выполнение программ, использующих эти флаги.
Успех при использовании RISC-процессоров обеспечивается благодаря
тому, что их более простые команды требуют для выполнения значительно
меньшее число машинных циклов. Таким образом достигается существенное
повышение производительности, что позволяет RlSC-пронессорам эффек-
тивно решать чрезвычайно сложные задачи.
ГАРВАРД против ПРИНСТОНА
Много лет назад правительство Соединенных Штатов дало задание Гарвард-
скому и Принстонскому университетам разработать архитектуру компьютера
для военно-морской артиллерии. Принстонский университет разработал ком-
пьютер, который имел общую память для хранения программ и данных. Та-
кая архитектура компьютеров больше известна как архитектура Фон-Нейма-
на по имени научного руководителя этой разработки (рис. 1.3). .
В этой архитектуре блок интерфейса с памятью выполняет арбитраж запро-
сов к памяти, обеспечивая выборку команд, чтение и запись данных, размеща-
емых в памяти или внутренних регистрах. Может показаться, что блок интер-
фейса является наиболее узким местом между процессором и памятью, так как
одновременно с данными требуется выбирать из памяти очередную команду.
Однако во многих процессорах с Принстонской архитектурой эта проблема ре-
шается путем выборки следующей команды во время выполнения предыдущей.
Такая операция называется предварительной выборкой («предвыборка»), и она
реализуется в большинстве процессоров с такой архитектурой.
20 Часть 1. Введение в микроконтроллеры
блок
памяти
Рис. 1.3. Структура компьютера с Принстонской архитектурой
Гарвардский университет представил разработку компьютера, в котором
для хранения программ, данных и стека использовались отдельные банки па-
мяти (рис I 4)
Принстонская архитектура выиграла соревнование, так как она больше
соответствовала уровню технологии того времени Использование обшей па-
мяти оказалось более предпочтительным из-за ненадежности ламповой элек-
троники (это было до Л1ирокого распространения транзисторов) — при этом
возникало меньше отказов
Гарвардская архитектура почти не использовалась до конца 70-х годов,
когда производители микроконтроллеров поняли, что эта архитектура дает
преимущества устройствам, которые они разрабатывали
Основным преимуществом архитектуры Фон Неймана является то, что
она упрощает устройство микропроцессора, так как реализует обращение
только к одной общей памяти Для микропроцессоров самым важным являет-
ся то, что содержимое ОЗУ (RAM — Random Access Memory) может быть
использовано как для хранения данных, так и для хранения программ В не-
которых приложениях программе необходимо иметь доступ к содержимому
стека Все это предоставляет большую гибкость для разработчика программ-
ного обеспечения, прежде всего в области операционных систем реального
времени, о которых пойдет речь позднее
Гарвардская архитектура выполняет команды за меньшее количество так-
тов, чем архитектура Фон Неймана Это обусловлено тем, что в Гарвардской
архитектуре больнге возможностей для реализации параллельных операций
Выборка следующей команды может происходить одновременно с выполне-
нием предыдущей команды, и нет необходимости останавливать процессор
на время выборки команды
Глава 1. Микроконтроллеры 21
память
программ
Рис. 1.4. Структура компьютера с Гарвардской архитектурой
Например, если процессору с Принстонскои архитектурой необходимо
считать бант и поместить его в аккумулятор, то он производит последова-
течьность действии показанную на рис I 5 В первом цикле из памяти выбира-
ется команда, в следующем цикле данные, которые должны быть помещены
в аккумулятор, считываются из памяти
блок
памяти
Цикл 1 - чтение
(выборка) команды
Цикл 2 - чтение
данных и размеще-
ние их в аккумуля-
торе
Рис. 1.5. Выполнение команды mov Асе, Reg в Принстонской архитектуре
В Гарвардской архитектуре, обеспечивающей более высокую степень па-
раллелизма операций, выполнение текущей операции может совмещаться с
выборкой следующей команды (рис I 6) Команда также выполняется за два
цикла, но выборка очередной команды производится одновременно с вы-
полнением предыдущей Таким образом команда выполняется всего за один
цикл (во время чтения следующей команды)
22 Часть 1. Введение в микроконтроллеры
память
программ
данные
Цикл 1: - завер-
шение выполне-
ния предыдущей
команды - чте-
ние (выборка)
команды mov
Acc,R
Цикл Г - выпол-
нение команды
mov Acc,R - чте-
ние (выборка)
следующей ко-
манды
Рис. 1.6. Выполнение команды mov Асе,Reg в Гарвардской архитектуре.
Этот метод реализации операций («параллелизм») позволяет командам вы-
полняться за одинаковое число тактов, что дает возможность более просто опре-
делить время выполнения циклов и критических участков программы. Это обсто-
ятельство является особенно важным при выборе микроконтроллера для
приложений, где требуется строгое обеспечение заданного времени выполнения.
Например, микроконтроллер PIC фирмы Microchip выполняет любую
команду, кроме тех, которые модифицируют содержимое программного счет-
чика, за четыре такта (один цикл). Это упрощает реализацию критических ко
времени процедур по сравнению с микроконтроллером Intel 8051, где для
выполнения команд может потребоваться от I6 до 64 тактов Из-за этого ча-
сто не удается подсчитать точное время выполнения программы вручную и
приходится применять симуляторы или аппаратные эмуляторы.
Следует отметить, что такие общие способы сравнения производительнос-
ти не следует использовать для всех процессоров и микроконтроллеров, в ко-
торых реализуются эти две архитектуры. Сравнение лучше проводить примени-
тельно к конкретному приложению. Различные архитектуры и устройства имеют
свои специфические особенности, которые позволяют наилучшим образом
реализовать те или иные приложения. В некоторых случаях конкретное прило-
жение может быть выполнено только с использованием определенной архи-
тектуры и специфических особенностей микроконтроллера.
После чтения этого раздела многие, вероятно, подумают, что Гарвардс-
кая архитектура — это единственно правильный выбор. Но Гарвардская архи-
тектура является недостаточно гибкой для некоторых программных проце-
дур, которые требуются для реализации ряда приложений. Соответствующий
пример будет приведен в этой книге.
Вы не должны считать, что одна архитектура лучше, чем другая. В данной
книге будут описаны различия между архитектурами микроконтроллеров,
рассмотрены их преимущества и недостатки в различных ситуациях.
Глава 1. Микроконтроллеры 23
Типы памяти микроконтроллеров
Можно выделить три основных вида памжи, используемой в микроконтрол-
лерах Память программ представляет собой постоянную память, предназна-
ченную для хранения программного кода и констант. Эта память не изменяет
своего содержимого в процессе выполнения программы Память данных пред-
назначена для хранения переменных в ходе выполнения программы. Регист-
ры микроконтроллера — этот вид памяти включает внутренние регистры про-
цессора и регистры, которые служат для управления периферийными
устройствами.
Читателя, возможно, удивит малый объем памяти микроконтроллеров.
Далее вы увидите, что это не является их существенным недостатком Но при
первом знакомстве данная особенность действительно вызывает удивление,
особенно, если сравнивать микроконтроллеры с современными персональ-
ными компьютерами, которые содержат десятки мегабайт памяти.
Память программ
Для хранения программ обычно служит один из видов постоянной памяти.
PROM (однократно-программируемое ПЗУ), EPROM (электрически програм-
мируемое ПЗУ с ультрафиолетовым стиранием), EEPROM (ПЗУ с электри-
ческом записью и стиранием, к этому виду относятся также современные
микросхемы Flash-памяти) или ROM (масочно-программируемое ПЗУ). Все
эти виды памяти являются энергонезависимыми — это означает, что содер-
жимое памяти сохраняется после выключения питания микроконтроллера
Такая память необходима, так как микроконтроллер не содержит каких-либо
устройств массовой памяти (магнитных дисков), с которых загружается про-
грамма в компьютерах Программа постоянно хранится в микроконтроллере.
В процессе выполнения программа считывается из этой памяти, а блок
управления (дешифратор команд) обеспечивает ее декодирование и выпол-
нение необходимых операций. Содержимое памяти программ не может ме-
няться (перепрограммироваться) во время выполнения программы Поэтому
функциональное назначение микроконтроллера не может измениться, пока
содержимое его памяти программ не будет стерто (если это возможно) и
перепрограммировано (заполнено новыми командами).
Следует обратить внимание, что разрядность микроконтроллера (8, I6 или
32 бит) указывается в соответствии с разрядностью его шины данных. В Гар-
вардской архитектуре команды могут иметь большую разрядность, чем дан-
ные, чтобы дать возможность считывать за один такт целую команду. Напри-
мер, микроконтроллеры PIC в зависимости от модели используют команды
с разрядностью 12, 14 или 16 бит. В микроконтроллерах AVR команда всегда
имеет разрядность 16 бит. Однако все эти микроконтроллеры имеют шину
данных разрядностью 8 бит.
В устройствах с Принстонской архитектурой разрядность данных обычно
определяет разрядность (число линий) используемой шины. В микроконтрол-
лерах Motorola 68НС05 24-разрядная команда размещается в трех 8-разрядных
24 Часть 1. Введение в микроконтроллеры
ячейках памяти программ Для полной выборки такой команды необходимо
произвести три цикла считывания этой памяти.
Когда говорится, что устройство является 8-разрядным, это означает раз-
рядность данных, которые способен обрабатывать микроконтроллер.
Память ROM (ПЗУ) используется тогда, когда программный код заносит-
ся в микроконтроллер на этапе его производства. Предварительно программа
отлаживается и тестируется, после чего передается фирме-производителю, где
программа преобразуется в рисунок маски на стеклянном фотошаблоне. Полу-
ченный фотошаблон с маской используется в процессе создания соединений
между элементами, из которых состоит память программ. Поэтому такую па-
мять часто называют масочно-программируемой ROM. .
ROM является самым дешевым типом постоянной памяти для массового
производства. Однако она имеет ряд существенных недостатков, которые приве-
ли к тому, что в последние годы этот тип памяти почти не используется. Основ-
ными недостатками являются значительные затраты средств и времени на со-
здание нового комплекта фотошаблонов и их внедрение в производство. Обычно
такой процесс занимает около десяти недель и является экономически выгод-
ным при выпуске десятков тысяч приборов. Только при таких объемах производ-
ства обеспечивается преимущество ROM по сравнению с E(E)PROM. Суще-
ствует также ограничение, связанное с возможностью использования таких
микроконтроллеров только в определенной сфере применения, так как его про-
грамма обеспечивает выполнение жестко фиксированной последовательности
операций, и не может быть использована для решения каких-либо других задач.
Электрически программируемая память EPROM состоит из ячеек, которые
программируются электрическими сигналами и стираются с помощью ультрафи-
олетового света. Память PROM может быть запрограммирована только один раз
Эта память обычно содержит плавкие перемычки, которые пережигаются во вре-
мя программирования. В настоящее время такая память используется очень редко.
Ячейка памяти EPROM представляет собой MOS-транзистор с плаваю-
щим затвором, который окружен диоксидом кремния (SiO2). Сток транзисто-
ра соединен с «землей», а исток поключен к напряжению питания с помо-
щью резистора. В стертом состоянии (до записи) плавающий затвор не
содержит заряда, и MOS-транзистор закрыт. В этом случае на истоке поддер-
живается высокий потенциал, и при обращении к ячейке считывается логи-
ческая единица. Программирование памяти сводится к записи в соответству-
ющие ячейки логических нулей.
Программирование осуществляется путем подачи на управляющий затвор
высокого напряжения (рис 1.7). Этого напряжения должно быть достаточно,
чтобы обеспечить пробой между управляющим и плавающим затвором, пос-
ле чего заряд с управляющего затвора переносится на плавающий. MOS-тран-
зистор переключается в открытое состояние, закорачивая исток с землей. В
этом случае при обращении к ячейке считывается логический нуль.
Чтобы стереть содержимое ячейки, она освещается ультрафиолетовым
светом, который дает заряду на плавающем затворе достаточную энергию,
чтобы он мог покинуть затвор. Этот процесс может занимать от нескольких
секунд до нескольких минут.
Глава 1, Микроконтроллеры 25
слой металлизации
изолирующий слой
окисла SiO2
кремниевая подложка
Рис 7.7. Ячейка памяти EPROM.
Обычно, микросхемы EPROM производятся в керамическом корпусе с квар-
цевым окошком для доступа ультрафиолетового света. Такой корпус довольно
дорог, что значительно увеличивает стоимость микросхемы. Для уменьшения
цены микросхемы EPROM заключают в корпус без окошка (версия EPROM с
однократным программированием). Сокращение стоимости при использовании
таких корпусов может быть настолько значительным, что эти версии EPROM в
настоящее время часто используются вместо масочно-программируемых ROM.
Раньше микроконтроллеры программировались только с помощью парал-
лельных протоколов, достаточно сложных для реализации. В настоящее время
протоколы программирования современной EPROM и EEPROM памяти су-
щественно изменились, что позволило выполнять программирование мик-
роконтроллера непосредственно в составе системе, где он работает. Такой
способ программирования получил название «in-system programming» или
«ISP». ISP-микроконтроллеры могут быть запрограммированы после того, как
их припаяли на плату. При этом сокращаются расходы на программирование,
так как нет необходимости в использовании специального оборудования —
программаторов.
Память EEPROM (Electrically Erasable Programmable Memory — электри-
чески стираемая программируемая память) можно считать новым поколени-
ем EPROM памяти. В такой памяти ячейка стирается не ультрафиолетовым
светом, а путем электрического соединения плавающего затвора с «землей».
Использование EEPROM позволяет стирать и программировать микроконт-
роллер, не снимая его с платы. Таким способом можно периодически обнов-
лять его программное обеспечение.
Память EEPROM болеедорогая, чем EPROM (в два раза дороже EPROM
с однократным программированием). EEPROM работает немного медлен-
нее, чем EPROM.
Основное преимущество использования памяти EEPROM заключается в
возможности ее многократного перепрограммирования без удаления из платы.
Это дает огромный выигрыш на начальных этапах разработки систем на базе
микроконтроллеров или в процессе их изучения, когда масса времени уходит
на многократный поиск причин неработоспособности системы и выполнение
последующих циклов стирания-лрограммирования памяти программ.
26 Часть 1. Введение в микроконтроллеры
Функционально Flash-память мало отличается от EEPROM Основное раз-
личие состоит в способе стирания записанной информации. В памяти EEPROM
стирание производится отдельно для каждой ячейки, а во Flash-памяти сти-
рание осуществляется целыми блоками Если Вы хотите изменить содержи-
мое одной ячейки Flash-памяти, то Вам потребуется перепрограммировать
целый блок (или всю микросхему) В микроконтроллерах с памятью EEPROM
можно изменять отдельные участки программы без необходимости перепрог-
раммировать все устройство.
Часто указывается, что микроконтроллер имеет Flash-память, хотя на са-
мом деле он содержит EEPROM. В настоящее время между этими типами
памяти имеется мало различий, поэтому некоторые производители исполь-
зуют ли термины как эквивалентные
Память данных
При первом знакомстве с описанием микроконтроллера многих удивит малый
объем их оперативной памяти данных RAM, который обычно составляет де-
сятки или сотни байт. Если микроконтроллер использует для хранения данных
память EEPROM, то ее объем также не превышает нескольких десятков байт
Если Вы пишите программы для персонального компьютера (PC), то у
Вас, вероятно, возникнет вопрос, что можно сделать с таким маленьким объе-
мом памяти. Вероятно, Ваши приложения для PC содержат переменные, объем
которых измеряется в килобайтах, не считая используемых массивов данных.
При использовании массивов требуемый объем памяти может составлять сот-
ни килобайт. Так что же можно сделать, имея объем ОЗУ порядка 25 байт?
Дело в том, программирование для микроконтроллера выполняется по не-
сколько другим правилам, чем программирование PC Применяя некоторые
несложные правила можно решать многие задачи с использованием небольшо-
го объема памяти RAM. При программировании микроконтроллеров констан-
ты, если возможно, не хранятся как переменные Максимально используются
аппаратные возможности микроконтроллеров (такие как таймеры, индексные
регистры), чтобы по возможности ограничить размещение данных в RAM. Это
означает, что при разработке прикладных программ необходимо предваритель-
но позаботиться о распределении ресурсов памяти. Прикладные программы дол-
жны ориентироваться на работу без использования больших массивов данных.
Стек
В микроконтроллерах RAM используется для организации вызова подпрограмм и
обработки прерываний. При этих операциях содержимое программного счетчика
и основных регистров (аккумулятор, регистр состояния, индексные регистры и
т.д.) сохраняется и затем восстанавливается при возврате к основной программе.
Стек — это электронная структура данных, которая функционирует ана-
логично своей физической копии — стопки бумаг. Когда что-либо помещает-
ся в стек, то оно остается там до тех пор, пока не будет вынуто обратно.
Представьте разноцветные листы бумаги, которые укладываются в стопку
один на другой. Когда листы удаляются, то происходит их перемещение в
Глава 1. Микроконтроллеры 27
обратном порялке По этом причине, стек часто наливают очередью типа
LIFO (Ljm In. Eirst Out) — «последний пришел, первым ушел»
В Принстонском архитектуре RAM используется для реализации множе
ства аппаратных функции, включая функции стека При этом снижается про
изводите льносгь Устройства, гак как для доступа к различным видам намят
требуются многократные обращения, которые не могут выполняться одно-
временно По Лои же причине Принстонская архитектура обычно требует
большею ко шчеетва тактов на выполнение команды, чем Гарвардская
Процессоры Гарвардской архитектуры могут иметь три области памяти,
которые адресуются параллельно (в одно и тоже время) память программ,
память данных, включающая пространство ввода вывода, и стек
В Гарвардском архитектуре стековые операции могут производиться в па
мягп. специально выделенной для этой цели Это означает, что при выпол-
нении команды вызова подпрограммы «call» процессор с Гарвардской архи
тектхрои выполняет несколько действий одновременно В Принстонской
архитектуре при выполнении команды «call» следующая команда выбирается
после того, как в стек будет помещено содержимое программного счетчика
Необходимо помнить, что микроконтроллеры обоих архитектур имеют
ограниченную емкость памяти для хранения данных Превышение этого пре-
дела может вызвать проблемы при выполнении программы
Если в процессоре выделен отдельный стек, и объем записанных в него
данных превышает его емкость, то происходит циклическое изменение содер-
жимою указателя стека, и указатель стека начинает ссылаться на ранее запол-
ненную ячейку- стека Это означает, что после слишком большого количества
команд «call» в стеке окажется неправильный адрес возврата который был
записан вместо правильного адреса Если микропроцессор использует общую
область памяти для размещения данных и стека, то существует опасность, что
при переполнении стека произойдет запись в область данных, либо будет сде-
лана попытка записи загружаемых в стек данных в область ROM
Теперь рассмотрим возможности сохранения в стеке содержимого регис-
тров В некоторых архитектурах нет команд, выполняющих загрузку содержи-
мого регистров в стек «push» и извлечения из стека «рор» Из четырех се-
мейств микроконтроллеров, описанных в этой книге, только два имеют такие
команды Однако команды «push» и «рор» могут быть легко реализованы при
помощи индексного регистра, который явно указывает на область стека При
этом вместо каждой из команд «push» и «рор» используются две команды,
указанные ниже
Push , Загрузка данных в стек
move [index], асе , Сохранить содержимое аккумулятора в стеке
decrement index , Перейти к следующей ячейке стека
Pop , Извлечь данные из стека
increment index , Перейти к предыдущей ячейке стека
move асе, [index] , Поместить содержимое стека в аккумулятор
Конечно такое решение является менее эффективным, чем использование
специальных команд «push» и «рор», а используемый индексный регистр может
28 Часть 1. Введение в микроконтроллеры
потребоваться для других целей Однако это решение обеспечивает имитацию
стека при использовании процессоров, у которых такие команды отсутствуют
Существует еще одна проблема с приведенными выше примерами Что
случится, если произойдет прерывание между первой и второй командой,
которые имитируют операции «push» и «рор»9 Если программа обработки
прерывания использует стек, то записанные в нем данные будут потеряны
Для предотвращения этого можно запретить прерывания перед выполнением
этих команд или переставить их в следующем порядке
Push , загрузить данные в стек
Decrement index , Перейти к следующей ячейке стека
move [index], асе , Сохранить содержимое аккумулятора в стеке
Pop , извлечь данные из стека
move асе, [index] , Поместить значение стека в аккумулятор
increment index , Перейти к предыдущей ячейке стека
Если после первой команды программа будет прервана, то после выпол-
нения обработки прерывания содержимое стека не будет потеряно
Регистры микроконтроллера
Пространство ввода-вывода
Подобно всем компьютерным системам, микроконтроллеры имеют множество
регистров, которые используются для управлением различными устройствами,
подключенными к процессору Это могут быть регистры процессора (аккумуля-
тор, регистры состояния, индексные регистры), регистры управления (регист-
ры управления прерываниями, регистры управления таймером) или регистры,
обеспечивающие ввод-вывод данных (регистры данных и регистры управления
параллельным, последовательным или аналоговым вводом-вы вод ом) Обраше
ние к этим регистрам может производиться различными способами
Реализуемые микроконтроллером способы обращения к регистрам оказыва-
ют существенное влияние на их производительность Поэтому очень важно по
нять, как происходит обращение к регистрам, чтобы писать эффективные при-
кладные программы для микроконтроллеров В процессорах с RISC-архитектурой
все регистры (часто и аккумулятор) располагаются по явно задаваемым адресам
Это обеспечивает более высокую гибкость при работе процессора
Рассмотрим пример процедуры ветвления программы при условии, что
определенный бит в регистре порта ввода-вывода установлен в I Для CISC-
процессора соответствующий псевдокод будет выглядеть следующим образом
Accumulator = lOPort .Загрузить содержимое регистра
lOPort в аккумулятор
Accumulator = Accumulator & (1 «Bit) .Маскировать все биты аккуму-
лятора, кроме Bit
if ZeroFlag '= 0 .Если Zero, то бит Bit=1
goto Address » ”
Эта процедура будет компилироваться в последовательность операций
Глава 1. Микроконтроллеры 29
if IQPort.Bit == 1
goto Address
Ассемблерная запись для микроконтроллеров Microchip PIC:
btfsc lOPort, Bit .Пропустить следующую команду, если бит
Bit=O
goto Address
Более эффективно эта процедура реализуется в микроконтроллере Intel 8051:
jb lOPort.Bit, Address ;Перейти, если бит Bit=1
Используя процессор, который может непосредственно обращаться к
любому регистру, можно получить преимущество при разработке простых
прикладных программ. Например, в микроконтроллере Р1С содержимое ак-
кумулятора и регистра состояния не изменяется при передаче управления в
зависимости от значения бита в регистре порта lOPort
Одним из важных вопросов является размещение регистров в адресном про-
странстве. В некоторых процессорах все регистры и RAM располагаются в од-
ном адресном пространстве. Это означает, что память совмещена с регистрами.
Такой подход называется «отображением устройств ввода-вывода на память».
В других процессорах адресное пространство для устройств ввода-вывода
отделено от общего пространства памяти Основное преимущество размеще-
ния регистров ввода-вывода в отдельном пространстве адресов состоит в том,
что при этом упрощается схема подключения памяти программ и данных к
общей шине. Устройства ввода-вывода обычно занимают маленький блок ад-
ресов, что делает неудобным декодирование их адреса совместно с большими
блоками основной памяти. Отдельное пространство ввода-вы вода дает некото-
рое преимущество процессорам с Гарвардской архитектурой, обеспечивая воз-
можность считывать команду во время обращения к регистру ввода-вывода.
После всего вышесказанного Вы, вероятно, считаете, что Гарвардская
архитектура с регистрами и переменными, размешенными в отдельных ад-
ресных пространствах, является наиболее эффективной И Вы правы Однако
имеется ряд причин, по которым использование микроконтроллеров Прин-
стонской архитектуры с отображением устройств ввода-вывода на память
может оказаться для некоторых применений более предпочтительным.
Внешняя память
Несмотря на огромные преимущества использования внутренней встроен-
ной памяти, в некоторых случаях необходимо подключение к микроконтрол-
леру дополнительной внешней памяти (как памяти программ, так и данных).
Существует два основных способа подключения внешней памяти. Первый
способ — подключение внешней памяти к микроконтроллеру, как к микропро-
цессору. Многие микроконтроллеры содержат специальные аппаратные сред-
ства для такого подключения. Второй способ состоит в том, чтобы подключить
память к устройствам ввода-вывода и реали ювать обращение к памяти через эти
устройства программными средствами Такой способ позволяет использовать
простые устройства ввода-вывода без реализации сложных шинных интерфей-
сов. Выбор наилучшего из этих способов зависит от конкретного приложения.
глава
2
АППАРАТНЫЕ СРЕДСТВА
Краткое содержание
Корпуса микроконтроллеров
Технология изготовления кристаллов
Питание
Потребляемая мощность
Подключение питания
Reset (Сброс)
Тактовые сигналы и генераторы
Командные циклы
Программный счетчик
Арифметико-логическое устройство
Сторожевые таймеры
Подпрограммы и функции
Прерывания
Таймеры
Цифровой ввод-вывод
Преобразование уровня
Последовательный ввод-вывод
Асинхронная последовательная связь
Синхронная последовательная связь
Шина MICROWIRE
Синхронный последовательный интерфейс
Сети
I2C
Г лава 2. Аппаратные средства 31
CAN
Аналоговый ввод-вывод
Ведомые устройства
Программирование микроконтроллеров
Безопасность памяти программ
Интерфейсы отладки
В предыдущей главе дано введение в микроконтроллеры, кратко рассмотре-
ны их архитектуры, реализация обращения к программам, данным и устрой-
ствам ввода-вывода В этой главе обсуждается внутренняя структура микро-
контроллеров и их интерфейс с внешними устройствами
Если Вы ознакомились с содержанием главы, то, возможно, поняти, что
будут рассмотрены только некоторые аспекты реализации интерфейса Мно-
гие устройства используют интерфейсы и протоколы, несколько отымаю-
щиеся от описанных ниже, либо интерфейсы, которые здесь вообще не рас-
сматриваются
Корпуса устройств
Когда рассматривается «монтаж прибора в корпус», то будет описываться
материал (герметик), используемый для защиты кристалла, и техноюгия
соединения кристалла с проводниками на печатной плате От выбора того
или иного корпуса зависит цена, размер и качество конечного изделия Для
защиты кристаллов используются два основных материала пластмасса и ке-
рамика
Наиболее распространенными являются пластмассовые корпуса Кристалл,
помещенный в такой корпус, соединяется с внешними выводами при помо-
щи тонких алюминиевых проволочек, которые привариваются к кристаллу с
использованием ультразвука Некоторые кристаллы присоединяются к вне-
шним выводам с помощью технологии «С4», которая будет описана позже
Для заливки пластиковых корпусов используется эпоксидный герметик Ког-
да герметик затвердеет, кристалл становится защищенным от света, влаги и
механического воздействия
Микроконтроллеры с памятью EPROM, помешенные в пластмассовый
корпус, обычно называются однократно программируемыми (OTP — One-
Time Programmable) Такой микроконтроллер можег быть запрограммирован
только один раз, так как пластиковый корпус не позволяет производить сти-
рание содержимого памяти программ типа EPROM путем освещения крис-
талла ультрафиолетом (рис 2 I)
32 Часть 1 Введение в микроконтроллеры
Рис 2.1. Пластмассовый корпус для однократнопрограммируемых приборов
Одна из основных причин размещения микроконтроллера в керамичес
ком корпусе ~ это возможность создания в нем кварцевого окошка для сти-
рания EPROM (рис 2 2) Когда используется керамический корпус, кристалл
приклеивается к его нижней половине и соединяется проводниками с рам-
кой, на которой расположены внешние выводы Керамические корпуса обычно
выпускаются со штыревыми выводами, которые вставляются в сквозные метал-
лизированные отверстия на печатной плате (монтаж по технология РТН — Plated-
Through Hole) Для пластмассовых корпусов возможен более широкий выбор
вариантов монтажа на плате Керамический корпус может значительно уве-
личить стоимость отдельной микросхемы, так он более чем в 10 раз дороже
пластмассового Поэтому микроконтроллеры в керамических корпусах исполь-
зуются обычно во время отладки разрабатываемых систем, когда дополни
тельные расходы из-за применения корпусов с кварцевым окошком являют-
ся оправданными
Рис. 2.2 Керамический корпус с кварцевым окошком
Технология установки микросхемы на печатную плату существенно изме-
нилась за последние годы В 80-х годах практически все микросхемы выпуска-
лись со штыревыми выводами, которые запаивались в отверстия на печатной
плате (рис 2 3) Преимуществом этой технологии монтажа (РНТ-технология)
является ее простота — для производства таких плат не требуется сложное
оборудование и специальная подготовка Недостатком является то, что от-
верстие занимает на плате значительную площадь, и расстояние между со-
седними выводами микросхемы должно быть существенно больше, чем при
Глава 2 Аппаратные средства 33
использовании технологии поверхностного монтаж.! (SMT — Surface Mount
Technology), когда выводы микросхемы припаиваются к поверхности платы
(рис 2 4)
Рис. 2.3. Сквозное соединение
Рис. 2.4. Сравнительные размеры РТН и SMT корпусов
Дзя SMT монтажа используются корпуса с двумя основными типами
выводов (рис 2 5) типа «gull wing» и типа «J» Оба типа выводов имеют свои
преимущества Корпуса с выводами типа «gull wing» позволяют производить
ручную пайку и обеспечивают более простои контроль паянных соединений
Применение корпусов с выводами типа «J» уменьшает площадь печатной
платы В настоящее время корпуса с выводами «gull wing» значительно более
популярны, так как их использование позволяет применять более простое
производственное оборудование и обеспечить переход к сверхплотному мон-
тажу, когда расстояния между центрами выводов уменьшаются до 0,41 мм
3 Зак 2026
34 Часть 1. Введение в микроконтроллеры
Корпус с выводами Корпус
типа «Gull Wing» с выводами типа «J»
Рис. 2.5. Планарная технология корпусов
Уменьшение размера корпуса и шага расположения выводов позволяет
значительно увеличить плотность упаковки компонентов на плате, которая
определяется количеством корпусов, размещаемых на единице площади Ти-
пичное значение шага расположения выводов для РТН-корпусов составляет
2,54 мм, тогда как шаг для SMT-корпуса имеют шаг выводов от 1,27 мм до
0,41 мм SMT-корпуса с малым шагом выводов известны под названием «fine
pitch»
Чтобы оценить, как выбор корпуса влияет на плотность упаковки компо-
нентов на плате, рассмотрим пример использования РТН-корпуса с шагом
выводов 2,5 мм и SMT-корпуса с шагом 1,27 мм SMT-корпус в два раза
меньше по всем измерениям — это значит, что на месте одного РТН-корпуса
можно разместить четыре SMT-корпуса Кроме того, при отсутствии отвер-
стий компоненты могут размещаться с обеих сторон печатной платы В ре-
зультате получаем увеличение плотности упаковки в восемь раз
Чтобы повысить плотность упаковки компонентов и увеличить число вы-
водов микросхемы, шаг выводов для SMT-корпусов был уменьшен до 0,5 мм
Но в процессе разработки корпусов с большим числом выводов были пред-
ложены новые технологии, которые позволяют упростить монтаж печатных
плат
Для производителя установка и снятие SMT-корпусов реализуется про-
ще, чем РТН-корпусов На посадочные места наносится специальная смесь
припоя и флюса, Которая называется паяльной пастой Затем плата помеща-
ется в печь, где паста расплавляется и припаивает микросхему к плате Чтобы
снять компонент с платы, его выводы обдуваются горячим воздухом или
азотом, который расплавляет припой, после чего компонент может быть удален
В то время как производителю, имеющему специальное оборудование, легче
работать с SMT-корпусами, для инженера-разработчика или радиолюбителя
это намного сложнее (особенно если микросхему требуется снять с платы
для перепрограммирования)
Для микросхем с большим количеством выводов (более 300) РТН-корпу-
са обычно не используются из-за их большого размера С SMT-корпусами
также возникают проблемы, так как трудно обеспечить параллельность всех
выводов, нарушение которой вызывает брак при монтаже микросхем на пла-
ту Для монтажа кристаллов с очень большим количеством выводов использу-
ются технологии шариковых выводов — BGA (Ball Grid Array), непосред-
ственного монтажа кристаллов на плату — СОВ (Chip On Board) и
автоматического монтажа на ленту — ТАР (Таре Automated Bonding)
Глава 2. Аппаратные средства 35
В технологии ВСАдля присоединения микросхемы к плате используется
двумерная матрица шариков припоя, расположенных на на нижнеи стороне
корпуса (рис 2 6). Для микосхем с большим числом выводов BGA-корпуса
дают значительное преимущество по сравнению с традиционными SMT-кор-
пусами. Рассмотрим в качестве примера 304-выводную микросхему SMT-кор-
пус представляет собой плоский прямоугольный корпус QFP (Quad Flat Pack),
по четырем сторонам которого расположены выводы с шагом 0,52 мм BGA-
корпус содержит матрицу 16x19 шариковых выводов с шагом 1,27 мм Мини-
мальный размер каждой стороны SMT-корпуса составит 3,9 см (площадь кор-
пуса 15,4 см2), тогда как размер BGA-корпуса составит 2,16x2,54 см (5,5 см2)
В рассмотренном примере BGA-корпус занимает в три раза меньшую пло-
щадь, чем QFP Кроме того BGA-корпус проще устанавливать и паять на
плату, так как он имеет больший шаг выводов.
Кристалл
Шариковые
выводы —
Припой
Рис. 2.6. Корпус типа BGA
Выводы QFP-корпуса очень хрупкие, так как при шаге 0,52 мм их диа-
метр составляет всего около 0,3 мм. Шариковые выводы BGA-корпуса значи-
тельно более твердые. Из-за хрупкости выводов установка и пайка SMT-кор-
пусов обычно осуществляется полностью автоматически, без участия человека.
При монтаже BGA-корпусов нет необходимости соблюдать такие предосто-
рожности.
Установка BGA-корпусов на плату и их демонтаж требуют того же обору-
дования, что и SMT-корпуса. Однако для контроля качества монтажа плат с
BGA-корпусами требуется более сложная аппаратура, включая рентгеновские
установки. BGA-корпуса имеют более высокое качество: процент брака для
SMT-корпусов составляет 0,002-0,005, а для BGA-корпусов — 0,0001-0,0002
и менее.
При использовании технологии СОВ (Chip On Board) кристалл непос-
редственно монтируется на плату. В настоящее время применяются два спосо-
ба крепления кристаллов.
При первый способе кристалл размещается на плате, и контактные пло-
щадки на кристалле и плате соединяются таким же образом, как внутри кор-
пуса микросхемы — с помощью тонких алюминиевых проволочек, которые
привариваются ультразвуком (рис. 2.7). Сам кристалл может быть приклеен
или припаян к плате. Припаивание кристалла используется тогда, когда пла-
та служит в качестве теплоотвода.
36 Часть 1. Введение в микроконтроллеры
Рис. 2.7. Корпус типа СОВ.
Второй способ известен под названием «технология С4» и фактически
очень похож на BGA-процесс, описанный ранее. Шариковые выводы, ис-
пользуемые в этом процессе, называются «выпуклостями» (bumps), потому
что они намного меньше BGA-шариков (рис 2 8). Первоначально эта техно-
логия была разработана IBM для монтажа кристаллов в керамических корпу-
сах без использования соединительных проволочек.
Рис. 2.8. Монтаж на ппату с ипользованием технологии С4.
Технология С4 требует существенных инвестиций в создание оборудова-
ния для монтажа и разработку специальных технологических процессов. Из-
за малого расстояния между кристаллом и платой там может остаться вода,
используемая при промывке платы, что приводит к снижению надежности
изделий. В настоящее время технология С4 находится на экспериментальной
стадии. Причинами этого являются трудности в обеспечении надежной уста-
новки кристалла на плату и возможность отказов из-за усталости шариковых
выводов, возникающей вследствие разности коэффициентов температурно-
го расширения кристалла и платы.
Технология СОВ является наилучшей для создания аппаратуры с высокой
плотностью монтажа, когда имеется мало места для размещения микросхем
(например, телефонная смарт-карта) или требуется специальный теплоотвод
Имеется еще одна технология монтажа, которая представляет собой ком-
бинацию SMT и СОВ Это автоматический монтаж на ленту — TAB (Таре
Automated Bonding) В данном случае контактные площадки кристалла прива-
риваются к медной ленте с изолирующим покрытием, на которой путем штам-
повки создана рамка с выводами. Эти выводы затем припаиваются к метал-
лическим проводникам на печатной плате (рис. 2 9 )
Глава 2. Аппаратные средства 37
ТАВ-технология впервые появились в середине 1980 года как способ сборки
микросхем с большим числа выводов. С усовершенствованием SMT-корпусов
и изобретением BGA технология TAB в значительной степени устарела, хотя
еще используется некоторыми производителями. СложностьТАВ-технологии
заключается в необходимости применения специализированного автомати-
ческого оборудовании для установки и пайки припаивания ТАВ-компонен-
тов, а также в трудности контроля паяных соединений.
От выбранного Вами способа монтажа зависит размер изделия, его цена,
качество паяных соединений, а также выбор производителя, который смо-
жет выполнить сборку продукта. В данном разделе вопросы монтажа элект-
ронных изделий рассмотрены очень бегло. Когда Вы будете выбирать способ
монтажа для Вашего изделия, внимательно проанализируйте все возможно-
сти и проконсультируйтесь с инженерами предприятия, где планируете орга-
низовать выпуск. Они являются специалистами в этой области и знают, ка-
кую технологию монтажа лучше всего использовать для Вашего проекта.
Технология изготовления кристаллов
Как и другие электронные приборы, микроконтроллеры становятся все мень-
ше, быстрее, дешевле и потребляют меньше мощности. Основной причиной
улучшения их характеристик является совершенствование производственных
процессов и используемых технологий, а не использование новых компью-
терных архитектур.
В настоящее время практически все микроконтроллеры выпускаются по
CMOS-технологии (Complementary Metal Oxide Semiconductor — транзисто-
ры co структурой Метал-Окисел-Полупроводник с дополняющим типом про-
водимости: р- и п-канальные). В микросхемах, выпускаемой по этой техноло-
гии совместно используются р-канальные (PMOS) и n-канальные (NMOS)
МOS-транзисторы (рис. 2.10).
На рис. 2.10 дана схема CM OS-инвертора (логического элемента «НЕ»),
Когда на вход схемы поступает низкий потенциал, PMOS-транзистор от-
крыт, a NMOS — закрыт. При этом на выходе установится высокий потенци-
ал (логическая 1), равный напряжению питания Vcc. Если на вход подан
высокий потенциал, то PMOS транзистор будет закрыт, a NMOS — открыт,
обеспечивая на выходе низкий потенциал «земли» (логический 0).
38 Часть 1. Введение в микроконтроллеры
Входной сигнал
Рис. 2.10. Схема CMOS-инвертора.
Когда элемент находится в одном из этих состояний, через транзисторы
протекает очень маленький ток (ток утечки) С увеличением частоты переклю-
чения элемента возрастает средняя величина протекающего тока, и потребля-
емая элементом мощность увеличивается Чтобы сократить энергопотребление,
целесообразно эксплуатировать CMOS-микросхемы при минимально возмож-
ной частоте переключения В «спящем» режиме, когда частота переключения
снижается до нуля, потребление мощности значительно сокращается, так как
переключения элементов не происходит, и ток в схеме не протекает
Важной характеристикой логических элементов является порог переклю-
чения Для CMOS-элементов значение порога переключения обычно состав-
ляет от I 4 В до Vcc/2 Различные логические элементы могут иметь разные
пороги переключения Прежде чем использовать элемент в проектируемом
устройстве необходимо убедиться, что его логические уровни (0 и )) и порог
переключения соответствуют уровням и порогам переключения других эле-
ментов устройства
CMOS-элементы могут непосредственно работать с большинством других
типов логических элементов, реализующих положительную логику Следует
только обратить внимание на возможность использования элементов с пони-
женным напряжением питания, которые имеют более низкие уровни логи-
ческой I (низковольтная логика) В этом случае необходимо, чтобы уровень
логической I (высокий уровень потенциала) всегда был выше порога пере-
ключения
Существует много особенностей, связанных с применением разных се-
мейств логических элементов Элементы этих семейств производятся по раз-
личным технологиям, поэтому они имеют специфические характеристики,
которые необходимо учитывать при их использовании
Чтобы показать, как совершенствовалась технология микроконтроллеров
в последние годы, сравним две микросхемы Первая — микроконтроллер 8748,
Глава 2. Аппаратные средства 39
которым выпускался в середине 80-х годов (по функциям ан.(логичен кон-
троллеру клавиатуры первых персональных компьютеров IBM PC), вторая —
современным микроконтроллер PIC I7C44 Обе микросхемы размещаются в
40-выводном корпусе с шагом 1,52 мм и имеют приблизительно одинаковую
стоимость
Тип микросхемы 8748Н PICI7C44
Технология HMOS CMOS
Память EPROM 2 Кбайт 8 Кбайт
Память RAM 128 Бант 454 Байт
Максимальная частота II МГц 33 МГц
Ток питания 100 мА 38 мА
Ток в «спящем» режиме Не указан 1 мкА
Число линии ввода вывода 27 33
Дополнительные функции 8-битныи таймер Три 16-битных таймера
4 Синхронныи/Асинх- ронныи последова- тельный порт Синхронный/Асинх- ронный последователь- ный порт
t г Широтно-импульсныи модулятор
Питание
Во многих приложениях используется батарейное питание микроконтроллеров,
а в некоторых случаях применяются даже конденсаторы большой емкости, ко-
торые обеспечивают сохранение работоспособности при кратковременных
отключениях питания Поэтому проблема снижения энергопотребления весьма
актуальнадля микроконтроллеров
Как указано выше, практически все современные микроконтроллеры про-
изводятся по CMOS-технологии, поэтому они потребляют значительно мень-
ше мощности, чем ранее выпускавшиеся биполярные или NMOS-микро-
контроччеры
Из-за большого многообразия областей применения и используемых при
этом источников питания цепи питания микроконтроллеров проектируются
как можно более надежными, чтобы обеспечить их нормальное функциони-
рование в различных условиях
Обратим внимание на обозначения, используемые при описании пита-
ния Обозначения «Усс» и «Vdd» применяются для указания напряжения пи-
тания (обычно +5В, хотя возможны и другие значения) Аналогично, обо-
значения «Vss» and «Gnd» используются для указания «земли» В этой книге
используется «Усс» для обозначения питания (даже когда производитель ис-
пользует «Vdd») и «Gnd» для обозначения «земли»
40 Часть 1. Введение в микроконтроллеры
Потребляемая мощность
При планировании энергопотребления для различных устройств, использу-
ющих микроконтроллеры, необходимо учитывать, что потребляемая ими
мощность зависит от режима функционирования Имеются три значения мощ-
ности, потребляемой микроконтроллером в различных рабочих условиях
Первое — собственная мощность, необходимая для нормальной работы мик-
роконтроллера Второе — мощность, потребляемая устройствами ввода-выво-
да, которую требуется учитывать, когда микроконтроллер производит обмен
данными с внешними устройствами Третье — мощность, потребляемая в «спя-
щем» режиме, когда микроконтроллер ожидает наступления внешнего собы-
тия, переключающего его в рабочий режим В зависимости от режима работы
микроконтроллера, реализованное на его основе устройство может при од-
ном и том же ресурсе энергии функционировать в течение нескольких часов
или нескольких месяцев
Собственная мощность — это мощность, которую потребляет микроконт-
роллер, когда к его выводам не подключены внешние устройства Значение
этой мощности зависит, главным образом, оттока потребляемого при пере-
ключении CMOS-элементов, который является функцией скорости работы
м и кроконтроллера
С уменьшением тактовой частоты собственная мощность значительно
уменьшается Ниже указано потребление тока питания для микроконтролле-
ра PICMicro 16С73А на различных тактовых частотах при напряжении пита-
ния 5В
Тактовая частота Ток питания
1 0 МГц 550 мкА
2.0 МГц 750 мкА
3 0 МГц 1 мА
4 0 МГц 1 25 мА
С понижением тактовой частоты потребляемая мощность, которая равна
произведению напряжения питания наток, будет сокращаться Это означает,
что программное обеспечение должно быть компактным, чтобы увеличить
срок работы устройства без смены комплекта батарей, что может быть весьма
важным для некоторых областей применения
Очевидно, что дальнейшее снижение собственной мощности возможно
при уменьшении напряжения питания Реализация этой возможности зави-
сит от типа используемого микроконтроллера и подключенных к нему уст-
ройств Многие современные микросхемы могут работать при снижении на-
пряжения питания до 2 ОВ
Мощность, потребляемая в режиме ввода-вывода, зависит от того, какую
мощность микроконтроллер должен затратить на управление работой вне-
шних устройств Значение этой мощности определяется конкретным вариан-
Глава 2. Аппаратные средства 41
том применения микроконтроллера. Во многих приложениях микроконтрол-
лер является единственным активным устройством — например, вводит ис-
ходные данные с клавиатуры и выдает результаты обработки на светодиоды.
Если микроконтроллер выдает управляющие сигналы непрерывно, даже ког-
да внешние устройства не требуют обслуживания, то данное устройство бу-
дет потреблять больший ток, а значит и мощность, чем это необходимо для
нормальной работы.
Последнее, что осталось обсудить — это потребление мощности в «спя-
щем» режиме. В этот режим микроконтроллер обычно входит после выполне-
ния специальной команды. Тактовый генератор микроконтроллера при этом
останавливается до наступления некоторого события, например, поступле-
ния сигнала от сторожевого таймера или изменения состояния определенно-
го входа.
Использование «спящего» режима может уменьшить потребляемую мощ-
ность с уровня в несколько милливатт до микроватт. Превосходный пример
того, что это означает, взят из раздела «Вопросы и ответы» в руководстве по
применению микроконтроллера BASIC Stamp фирмы Parallax.
Как долго микроконтроллер BASIC Stamp может работать от 9-волыповой ба-
тареи?
Это зависит от того, как используется BASIC Stamp. Если Ваша программа
никогда не использует «спящий» режим и имеет несколько светодиодов, то BASIC
Stamp может работать только несколько часов. Однако, если применяется «спя-
щий» режим и минимизирован ток ввода-вывода, то BASIC Stamp будет рабо-
тать несколько недель. ,
«Спящий» режим — это виртуальный выключатель, реализованный вну|-
ри микроконтроллера. Его использование обеспечивает ряд преимуществ. Во-
первых, такой виртуальный выключатель дешев и надежен — при его вклю-
чении-выключении отказы возникают значительно реже, чем при работе
электромеханического выключателя. Во-вторых, в «спящем» режиме сохра-
няется содержимое памяти данных RAM А последнее преимущество чисго
эстетическое: устройства, которые можно включать и выключать кажутся мне
более привлекательными.
«Спящий» режим имеет один потенциальный недостаток, существенный
для некоторых приложений: время, необходимое для выхода из «спящего»
режима и запуска тактового генератора может достигать десяти миллисекунд.
Действительно, такая задержка может оказаться слишком большой при вза-
имодействии с другой компьютерной системой. Однако если основной зада-
чей микроконтроллера является работа с человеком, то такая задержка про-
блем не вызывает.
При работе микроконтроллера в «спящем» режиме необходимо убедиться
в отсутствии тока, потребляемого элементами нагрузки, подключенными к
его выводам. Ток, втекающий в микроконтроллер от светодиода, подключен-
ного к шине питания, вызовет увеличение потребления мощности в «спя-
щем» режиме.
42 Часть 1. Введение в микроконтроллеры
Подключение питания ’ г ”
Микроконтроллер часто применяется в аппаратуре, где его напряжение пи-
тания может оказаться ниже оптимального. В качестве источников питания
могут использоваться батареи, выпрямители переменного тока с фильтра-
ми, генераторы постоянного тока. Это означает, что микроконтроллерам при-
ходится работать с разными значениями входных сигналов и взаимодейство-
вать с устройствами, работающими с различными логическими уровнями.
Поэтому микроконтроллеры специально проектируются для использования
в таких суровых условиях, которые для многих других электронных устройств
являются неприемлемыми.
К счастью, большинство микроконтроллеров нормально работают в широ-
ком диапазоне внешних условий. Единственное, на что следует обратить вни-
мание при разработке приложения, - это развязка питающего напряжения.
Как правило, для развязки используется танталовый конденсатор емкостью
О, I мкФ, который подключается как можно ближе выводам питания. Этот кон-
денсатор обеспечит повышенный выходной ток при переходных процессах,
предохраняя аппаратуру от ложных сбросов и искажения данных Таким обра-
зом простое включение конденсатора избавит Вас от множества проблем.
Запуск (сброс в начальное состояние)
При любом применении микроконтроллера важно быть уверенным, что он ра-
ботает в допустимых окружающих условиях. Запуск микроконтроллера должен
иметь место только тогда, когда установилось требуемое напряжение питания.
Как правило, устройства, использующие микроконтроллеры, должны на-
чинать работу при включении питающего напряжения. Чтобы быть уверен-
ным, запуск микроконтроллера произойдет, когда напряжение питания дос-
тигло заданного стабильного значения, используют схему, показанную на
рис. 2.11
В этой схеме сигнал RESET на входе микроконтроллера становится актив-
ным (принимает значение логического 0) приблизительно через 22 мс (вре-
мя задержки Td = 2,2 RC) после включения питания. Этого времени доста-
точно для стабилизации напряжения питания и установки требуемой частоты
тактового генератора прежде, чем начнет работать микроконтроллер.
Кнопка RESET используется в процессе разработки устройства для сбро-
са микроконтроллера в начальное состояние. При отладке устройства очень
полезно иметь возможность выполнения сброса, чтобы обеспечить повтор-
ный запуск микроконтроллера. Резистор сопротивлением I00 Ом, который
включен последовательно с конденсатором, служит для ограничения тока
разряда конденсатора в момент сброса (заряженный конденсатор является
источником большого тока, когда он закорачивается на «землю»). Эта схема
может быть использована для запуска микроконтроллеров, у которых сигнал
RESET имеет высокий активный уровень (например, микроконтроллер 805I),
путем инвертирования напряжения на конденсаторе (например, с помощью
микросхемы типа 7404).
Глава 2. Аппаратные средства 43
Микроконтроллер
Кнопка ручного
запуска Reset
Рис. 2.11. Схема формирования сигнала запуска RESET.
Для некоторых микроконтроллеров можно удалить RC-цепь в схеме за-
пуска. так как внутри них имеется схема, обеспечивающая задержку включе-
ния (пуск тактового генератора и начало выполнения первой команды про-
граммы). В этом случае схема запуска может быть упрошена, как показано на
рис. 2.12. Посмотрев на эту схему Вы, возможно, подумаете, что схему можно
еще более упростить, просто подключив вывод RESET к шине питания Vcc.
Это верно, но использовать такое включение следует только после того, как
схема будет полностью отлажена. Однако при этом целесообразно включить
токоограничиваюший резистор, чтобы иметь возможность повторного запус-
ка путем закорачивания вывода RESET на «землю».
Эти схемы сброса лучше всего использовать в случаях, когда гарантирова-
но поддержание напряжения питания в рабочем диапазоне. Для питания многих
устройств используются батареи, напряжение которых падает с течением
времени. По мере падения напряжения могут возникать нарушения в работе
устройства, так как напряжение отключения для одних приборов достигается
раньше, чем для других.
Для решения этой проблемы существуют устройства — мониторы пита-
ния, которые следят за уровнем напряжения Vcc/Vdd. Если это напряжение
падает ниже определенного уровня (обычно 4.5В), то вырабатывается сигнал
RESET. Как правило, такие мониторы питания содержат схему задержки и
работают аналогично описанной выше RC-схеме запуска. Они монтируются
в такой же корпус, как трехвыводной транзистор.
>• Т. :
44 Часть 1. Введение в микроконтроллеры
Кнопка ручного
запуска Reset
Микроконтроллер
Рис. 2.12. Модифицированная схема RESET.
Тактирование системы
Если Вы проектировали схемы тактовых генераторов для микропроцессоров,
то Вы будете приятно удивлены, когда начнете разрабатывать такие схемы
для микроконтроллеров Микроконтроллеры построены так, что требуют
минимального числа внешних элементов для генерации тактовых импульсов
Большинство микроконтроллеров способны работать в очень широком ди-
апазоне частот от нуля до десятков мегагерц Это возможно благодаря исполь-
зованию полностью статической логике Некоторые разработчики используют
тактовую частоту в 1Hz и менее при отладке программного обеспечения Ши-
рокий диапазон возможных рабочих частот позволяет разработчику лучше на-
строить микроконтроллер на выполнение конкретных заданных функций
Существует три способа задания тактовой частоты микроконтроллера,
каждый из которых имеет свои достоинства и недостатки Первый способ -
использование кварцевого резонатора, подключенного согласно схеме на рис
2 13 Этот способ позволяет очень точно задать тактовую частоту микроконт-
роллера (разброс частот обычно составляет не более 0,01 %) Такой уровень
точности требуется для организации интерфейса микроконтроллера с други-
ми устройствами или обеспечения точного хода часов реального времени
Номиналы емкостей конденсаторов в данной схеме определяются произ-
водителем микроконтроллера пля конкретной резонансной частоты кварца
Иногда требуется включить резистор большого номинала (порядка несколь-
Глава 2. Аппаратные средства
45
ких МОм) между выводами ClkO и Clkl. чтобы генератор работал стабильно.
Часто производитель советует использовать переменный конденсатор, под-
ключаемый к выводу Clkl, чтобы обеспечить возможность точной подстрой-
ки частоты.
ClkO
Кристалл
кварца
Clk1
Внешние
конденсаторы
Рис. 2.13. Тактирование с использованием кварцевого резонатора.
Многие разработчики не любят использовать в своих схемах какие-либо
переменные элементы. Если разброс частот не соответствует заданным тре-
бованиям. то можно использовать другие схемы синхронизации.
При использовании малых емкостей тактовые импульсы будут иметь луч-
шую форму. Если Вы включите слишком большие емкости, то это приведет к
деградации формы импульсов, и микроконтроллер не будет запускаться. Если
Вы не уверены в правильности выборанных значений емкостей, то проверь-
те форму тактовых импульсов при помощи осциллографа Их форма должна
быть похожа на верхний рисунок 2.14.
Если схема перегружена из-за включения слишком большой емкости, то
форма импульсов будет похожа на нижний рисунок 2.14. или вместо им-
пульсов вообще будет постоянное напряжение на уровне примерно Vdd/2.
Два основных недостатка этого способа синхронизации — необходимость
подключения дополнительных компонентов и хрупкость кристаллов кварца.
Оба этих недостатка могут быть устранены, если использовать керамический
резонатор. Керамические резонаторы существенно более стойки к ударной
нагрузке, и многие из них имеют встроенные конденсаторы, вследствие чего
количество требуемых внешних компонентов уменьшается с трех до одного.
Керамические резонаторы обычно имеют разбое частот порядка нескольких
десятых процента (около 0.5%)
Следующий способ синхронизации — использование RC-генератора. В этом
случае необходимая частота тактовых импульсов задается путем соответству-
ющего выбора постоянной времени RC-цепи (рис 2 15). Это самый дешевый
способ задания частоты, но, к сожалению, наименее точный. Если кварц
46 Часть 1. Введение в микроконтроллеры
обеспечивает поддержание частоты с точностью в тысячные доли процента,
керамический резонатор — в десятые доли процента, то RC-цепь дает точ-
ность порядка десятков процентов Так, при экспериментах с микроконтрол-
лерами PIC было установлено, что точность RC-генератора составляет при-
мерно 20% Очевидно, что это неприемлемо для многих приложений, где
требуется точный подсчет времени Однако имеются области применения,
где такая точность является вполне достаточной
«Хорошая» форма
импульсов
JU1W
«Плохая» форма
импульсов
Слишком
большая внешняя емкость
Рис. 2.14. Хорошая и плохая формы импульсов для микроконтроллера PICMicro
Рис. 2.15. Подключение RC-цепи для генерации тактовых импульсов
Нет обшей формулы расчета номиналов резистора и конденсатора для
этого типа генератора Причиной этого являются нелинейные внутренние цепи
микроконтроллера Значения R и С, обеспечивающие требуемую частоту син-
хронизации, можно найти в руководстве по применению микроконтроллера
Глава 2. Аппаратные средства
47
Большое преимущество этого способа синхронизации частоты — низкая
цена. Внешние компоненты для схемы RC-генератора могут стоить меньше
одного цента! Точность задания тактовой частоты можно повысить, исполь-
зуя переменные резистор или конденсатор. Однако при этом сложность и
цена генератора увеличатся.
Другой способ синхронизации — это подача тактовых импульсов от внеш-
него генератора. Как указано выше, микроконтроллеры работают в широком
диапазоне частот. При помощи внешнего тактового генератора можно задать
любую частоту синхронизации.
Некоторые микроконтроллеры содержат встроенные RC или кольцевые
генераторы, которые позволяют микроконтроллеру работать без внешних схем
синхронизации. Работа внутреннего генератора обычно разрешается путем со-
ответствующего программирования регистра конфигурации, которое произ-
водится вместе с программированием памяти программ микроконтроллера.
Командные циклы
Если Вы новичок в области применения микропроцессоров и микроконт-
роллеров, то Вас, вероятно, удивит, что командные циклы не тоже самое,
что такты синхронизации. Командный цикл обычно состоит из нескольких
тактов, которые необходимы процессору для выполнения команды. На рис.
2.16 показан командный цикл, состоящий из четырех тактов. В течение ко-
мандного цикла микропроцессор или микроконтроллер выполняет необхо-
димые операции, используя тактовые сигналы для синхронизации этих опе-
раций.
Рис. 2.16. Командный цикл и машинные такты.
Некоторые команды требуют для выполнения более одного командного
цикла. Это затрудняет расчет времени выполнения программы. Часто для оп-
ределения этого времени приходится обращаться к документации или ис-
пользовать симулятор/отладчик. В главах, содержащих примеры приложений,
будет показано, как точно рассчитать время выполнения циклических про-
цедур.
48 Часть 1. Введение в микроконтроллеры
Программный счетчик
Программный счетчик PC (Program Counter) используется для указания сле-
дующей команды выполняемой программы. Реализация этой функции зна-
чительно осложняется, когда необходимо сохранить содержимое PC при вы-
зове подпрограмм и обработке запросов прерывания или обеспечить ветвление
программы. Рис 2 17 иллюстрирует выполнение некоторых функций программ-
ного счетчика, однако на практике они оказываются существенно более слож-
ными.
Программный счетчик представляет собой счетчик с параллельным вводом-
выводом На рис 2 17 показано функционирование PC в процессоре с Прин-
стонской архитектурой В процессорах этого типа содержимое PC поступает
по тине данных в схему управления памятью, указывая адрес считываемой
команды Часто PC входит в состав схемы управления памятью — это позво-
ляет избежать передачи адреса по внутренней шине данных Важные особен-
ности функционирования программного счетчика — параллельная загрузка
нового содержимого, поступающего с шины данных, возможность сброса
(возврат к адресу первой команды программы), реализация инкремента (уве-
личение содержимого для адресации следующей команды). Сигналы, обеспе-
чивающие выполнение этих операции, формируются дешифратором команд,
который управляет последовательностью действий микроконтроллера
Рис. 2.17. Программный счетчик.
Параллельная загрузка используется для записи в PC адреса перехода при
выполнении команды «jump» (безусловный переход) или «call» (вызов под-
программы). В компьютерах с Принстонской архитектурой этот адрес посту-
пает по шине данных В 8-разрядных микроконтроллерах разрядность PC обычно
больше, чем 8 бит (так как при такой разрядности адреса объем доступной
памяти программ составляет всего 256 байт). При загрузке в PC нового адре-
са, он поступает по шине данных частями по 8 бит, что требует выполнения
дополнительных машинных циклов Чтобы сократить время загрузки PC. не-
Глава 2. Аппаратные средства 49
которые процессоры имеют команды ветвления «branch», при которых загру-
жаются только 8 младших разрядов адреса, а старшие разряды остаются без
изменения При выполнении такой команды достаточно передать по шине
данных только один байт, тогда как для загрузки полного 16-разрядного ад-
реса требуется пересылка двух байт
Начальное содержимое PC посте запуска микроконтроллера может иметь
любое значение Хотя наиболее очевидным представляется использование в
качестве начального значения 0x0000 некоторые микроконтроллеры начи-
нают выполнение программы с других адресов Аналогичная ситуация имеет
место с адресами («векторами») прерываний При обслуживании прерыва-
ний в PC обычно загружают содержимое, которое отличается от адреса, заг-
ружаемого при начальном запуске микроконтроттера, однако для реализа-
ции прерывания и запуска могут использоваться одни и те же аппаратные
средства
После чтения очередной команды содержимое программного счетчика
увеличивается (инкрементируется), чтобы обеспечить переход к адресу сле-
дующей команды Если выполняется вызов подпрограммы или происходит
прерывание, то адрес возврата (адрес следующей команды) может быть со-
хранен в стеке без выполнения дополнительных тактов для инкремента со-
держимого программного счетчика
Необходимо сделать некоторые важные замечания по поводу функциони-
рования программного счетчика В работе с микроконтроллерами, имеющими
Принстонскую архитектуру, необходимо следить, чтобы программный счет-
чик не вышел за пределы памяти программ Если это случится, то микрокон-
троллер может начать выборку данных вместо команд и пытаться выполнить
выбранные коды данных, что приведет к непредсказуемому результату
Другая проблема может возникнуть, когда программный счетчик достиг-
нет конца адресуемой памяти Некоторые микроконтроллеры в этом случае
осуществляют циклический переход к команде, размещенной по адресу
0x0000, в других микроконтроллерах дешифратор команд продолжает инкре-
ментировать программный счетчик, что приводит к выполнению неопреде-
ленных команд
Арифметико-логическое устройство
Арифметико-логическое устройство (АЛУ) процессора используется для вы-
полнения всех математических операций в программе Эти операции включа-
ют сложение, вычитание, логическое И, логическое ИЛИ, сдвиг содержи-
мого регистров и установку содержимого регистра состояния в соответствии
с полученными результатами АЛУ не испочьзуется при чтении или записи
данных или команд, оно служит только для обработки данных
АЛУ можно представить как аппаратный блок, который обрабатывает два
слова данных (операнды) и сохраняет полученный результат (рис 2 18) Как
вводятся операнды в АЛУ и куда поступает результат — зависит от конкрет-
ного типа микроконтроллера В этом состоит одно из основных различий между
разными типами процессоров и их системами команд Некоторые микрокон-
4 Зак 2026
50 Часть 1. Введение в микроконтроллеры
тролзеры выбирают один операнд из регистра аккумулятора и сохраняют
резузьтат также в аккумуляторе Другие микроконтрозлеры позволяют ис-
пользовать различные источники операндов и места размещения результатов
Операнд 1 Операнд 2
Результат
Биты состояния
(флаги)
Рис 2.18. Структура АЛУ
АЛУ обычно работают только с положительными целыми числами Одна-
ко при выполнении вычитания получаются отрицательные числа, если вы-
читаемое больше уменьшаемого Для представления отрицательных чисел ис-
пользуется дополнительный код («дополнение до двух») Это необходимо
учитывать при знакомстве с работой АЛУ
Рассмотрим как выполняется команда вычитания на примере микрокон-
троллера Microchip PIC Вместо вычитания одного числа из другого, проис-
ходит добавление отрицательного числа
А - В = А + (-В),
где отрицательное число -В представляется в дополнительном коде Чтобы
получить дополнительный код отрицательного двоичного числа, необходимо
инвертировать значение каждого бита, а затем прибавить единицу
-В = (В л OxOOFF) + 1
Если есть схема преобразования отрицательных чисел в дополнительный
код, то нет необходимости использовать схему вычитания Достаточно иметь
в составе АЛУ сумматор, который реализует вычитание с помощью следую-
щей замены
А-В=А+(В л OxOOFF) + 1
Этот метод выполнения вычитания может вызвать некоторые затрудне-
ния при анализе полученного результата, если учитывать флаг переноса, ус-
танавливаемый в результате сложения и вычитания
В «классических» АЛУ, которые имеют сумматор и вычитатель, часто ис
пользуется общий флаг «переноса-заема» Этот флаг устанавливается в 1, когда
результат сложения больше, чем OxOOFF или результат вычитания меньше
нуля В обоих случаях флаг используется для указания того, что значение 8-и
старших бит результата зависят от результата, полученного при операции над
8-ю младшими битами
Глава 2. Аппаратные средства 51
Если AJ1V не содержит вычитателя (как в приведенном выше примере),
то фла! переноса также устанавливается после сложения или вычитания, но
он имеет друюе значение Чтобы понять это, рассмотрим пару примеров
Первын пример показывает, что происходит, когда одно число вычитается
из другого Miicia. которое больше первого.
0x0077 - 0x0055 = 0x0077
= 0x0077
= 0x0077
= 0x0122
+ (-0x0055) =
+ (0x0055 л OxOOFF) + 1 =
+ ОхООАА + 1 =
Результат получился больше, чем ОхГГ. что приводит к установке флага
переноса 1 в младшем бите старшего байта (флаг переноса/заема в атом слу-
чае не равен 1) Младшие восемь бит равны 0x22 (что и ожидалось) — это
значение будет записано в качестве результата в приемник 11
Следующий пример иллюстрирует ситуацию, когда большее число вычи-
тается из меньшего числа
0x0055 - 0x0077 = 0x0055 + (-0x0077) =
= 0x0055 + (0x0077 л OxOOFF) + 1 =
= 0x0055 + 0x0088 + 1 =
= OxOODE
В этом примере младшие 8 разрядов представляют число 22 в дополни-
тельном коде (что и ожидалось), а бит переноса в старшин байт (флаг пере-
носа) равен 0 такой как ожидалось В «классическом» АЛУ для данного при-
мера результат также будет иметь значение OxDE . но установится флаг
заема-переноса равный 1
Нетрудно заметить, что в АЛУ. не использующем вычитатель, флаг пере-
носа устанавливается в 1, когда результат вычитания положительны!!, и сбра-
сывается в 0. когда результат отрицательный Поэтому формируемый бит
переноса в старшин байт в этом случае можно было бы назвать флагом «пе-
ренос- знак», так как при вычитании он указывает знак результата
Необходимо иметь в виду, что различные представители одного семей-
ства микроконтроллеров обычно имеют одинаковые АЛУ В некоторых семей-
ствах АЛУ реализуют определенные операции, например, умножение, кото-
рые не выполняются микроконтроллерами других семейств Дополнительные
функции, которые обеспечивают различные микроконтроллеры одного се-
мейства, реализуются путем включения в их структуру дополнительных ап-
паратных средств, аналогично периферийным устройствам При этом струк-
тура и функции АЛУ сохраняются, так как вводимые в микроконтроллер
дополнительные устройства используют свои регистры, которые не связаны
с регистром состояния и аккумуляторами Наглядным примером этого явля-
ется семейство 8-разрядных микроконтроллеров 68НС05, выпускаемых фир-
мой Motorola
Сложность АЛУ во многом определяет сложность всего микроконтролле-
ра в целом Часто над созданием АЛУ работает группа разработчиков, срав-
52 Часть 1. Введение в микроконтроллеры
нимая по составу с той, которая работает над остальной частью микропро-
цессора или микроконтроллера (и даже большая, когда разрабатывается про-
цессор аналогичный по сложности персональному компьютеру). От того, как
работает АЛУ, зависит функционирование процессора, входящего в состав
микроконтроллера, а значит и функционирование всего микроконтроллера.
Сторожевые таймеры
Часто электрические помехи, производимые окружающим оборудованием,
вызывают обращение микроконтроллера по неправильному адресу, после чего
его поведение становится непредсказуемым (микроконтроллер «идет в раз-
нос»). Чтобы отслеживать такие ситуации в состав микроконтроллера часто
включают сторожевые таймеры
Это устройство вызывает сброс микроконтроллера, если его содержимое
не будет обновлено в течение определенного промежутка времени (обычно
от десятков миллисекунд до нескольких секунд). Если изменение содержимо-
го программного счетчика не соответствует заданной программе, то команда
модификации сторожевого таймера не будет выполнена. В этом случае сторо-
жевой таймер производит сброс микроконтроллера, устанавливая его в ис-
ходное состояние.
Многие разработчики не используют сторожевые таймеры в своих прило-
жениях, так как не видят необходимости их применения для борьбы с влия-
нием электрических помех, например, при размещении микроконтроллера в
электронно-лучевом дисплее вблизи от трансформатора, обеспечивающего
гашение обратного хода луча, или рядом с катушками зажигания в автомо-
биле. В современной электронике вероятность возникновения электрических
нарушений незначительна, хотя они иногда возникают в ситуациях, похо-
жих на перечисленные выше.
Не рекомендуется использовать сторожевой таймер для маскирования
программных проблем. Хотя этот таймер может уменьшить вероятность про-
граммных ошибок, однако вряд ли он обеспечит исключение всех возмож-
ных причин их возникновения Вместо того, чтобы надеяться на предотвра-
щение программных сбоев аппаратными средствами, лучше более тщательно
протестировать программное обеспечение в различных ситуациях.
Подпрограммы и функции
Обычно подпрограммы и функции рассматриваются в различных книгах и
лекционных курсах как определенные приемы программирования. Здесь бу-
дет рассмотрена их аппаратная реализация, которая обеспечивает вызов под-
программ и передачу параметров, необходимых для ее выполнения
При вызове подпрограммы требуется сохранить содержимое программно-
го счетчика для того, чтобы команда возврата могла вернуть управление ис-
ходной программе. Это может выполняться автоматически (как часть коман-
ды CALL) путем сохранения адреса возврата в стеке При возврате к исходной
программе адрес извлекается из стека и загружается в программный счетчик.
Глава 2. Аппаратные средства 53
Однако некоторые цифровые системы, например, большие компьютеры
серии IBM 370, не имеют стека для сохранения содержимого программного
счетчика или других регистров. В этой архитектуре при выполнении команды
«goto» (переход к подпрограмме) адрес возврата сохраняется в регистре При
этом ответственность за сохранение адреса возврата возлагается на програм-
миста. Наиболее простой способ имитировать команду «call» — это просто
оставить адрес возврата в регистре, если подпрограмма не вызывает другие
подпрограммы. При возврате из подпрограммы содержимое этого регистра
загружается в программный счетчик
В некоторых устройствах при выполнении команды «goto» адрес возврата
вообще нигде не сохраняется. В таком случае для имитации вызова подпрог-
раммы адрес возврата необходимо сохранить в виде переменной. Это может
быть реализовано следующим образом:
ReturnVar = AfterGoto goto ; Сохранить адрес возврата
goto Subroutine ; Вызвать подпрограмму
AfterGoto
Subroutine : Начало подпрограммы
ProgramCounter = ReturnVar ; Возвратиться к команде следующей за goto
Функции — это сложные подпрограммы, при выполнении которых опре-
деленные параметры передаются из исходной программы в подпрограмму, а
после завершения возвращаются обратно Например, функция на языке С
может быть определена следующим образом.
int Func( int i, char far * Ptr );
В этом примере «Func» — функция, требующая два входных параметра:
целое число и указатель, и возвращающая значение целого числа. Один из
наиболее эффективных и часто встречающихся способов передачи парамет-
ров в функцию — это поместить их в стек перед вызовом функции. В подпрог-
рамме можно загрузить индексный регистр значением указателя стека и та-
ким образом получить доступ к параметрам Этот метод обработки параметров
имеет существенное преимущество по сравнению с другими методами: для
передачи параметров используется специально выделенный фрагмент памя-
ти. Переменные, определенные внутри функции (включая входные парамет-
ры), часто называются «локальными» или «автоматическими», так как они
используются только данной функцией, и память для их размещения выде-
ляется автоматически.
Аналогичный метод вызова функций может быть реализован в процессо-
рах, не имеющих стека, путем использования индексного регистра для эму-
ляции стека. Если нельзя непосредственно загрузить в стек содержимое про-
54 Часть 1. Введение в микроконтроллеры
граммного счетчика, то адрес возврата к исходной программе можно сохра-
нить в эмулированном стеке. «. ‘ : г
Другим способом передачи параметров является их сохранение в регист-
рах процессора или в памяти данных в качестве специальных переменных.
Передача параметров через регистры процессора, которая используется в
некоторых случаях, сокращает число регистров, доступных при выполнении
функции. Сохранение параметров в виде специальных переменных также воз-
можно, но при этом уменьшается объем памяти, доступной для использова-
ния программой. Данное ограничение может быть весьма существенным для
микроконтроллеров
Возврат параметра можно выполнить любым из трех описанных выше спо-
собов Но обычно значения возвращаемых параметров загружаются в регист-
ры процессора, так как это наиболее быстрый и эффективный метод переда-
чи данных.
Прерывания
Многие пользователи считают, что прерывания — это та часть аппаратного
обеспечения, которую лучше оставить в покое, так как их использование
требует превосходного знания процессора для разработки программы обра-
ботки прерывания. В противном случае при возникновении прерывания сис-
тема «засыпает» или «идет вразнос». Такое чувство обычно появляется у раз-
работчика после опыта работы с прерываниями для персонального
компьютера, который имеет ряд особенностей, усложняющих создание об-
работчика прерываний. Многие из этих проблем не имеют места в оборудова-
нии, реализованном на базе микроконтроллеров. Использование в данном
оборудовании прерываний может существенно упростить его разработку и
применение.
Если Вы никогда не имели дело с прерываниями, то у Вас возникнет
вопрос — что это такое? В компьютерной системе прерывание — это запуск
специальной подпрограммы (называемой «обработчиком прерывания» или
«программой обслуживания прерывания»), который вызывается сигналом
аппаратуры. На время выполнения этой подпрограммы реализация текущей
программы останавливается. Термин «запрос на прерывание» (interrupt request)
используется потому, что иногда программа отказывается подтвердить пре-
рывание и выполнить обработчик прерывания немедленно (рис 2.I9).
Прерывания в компьютерной системе аналогичны прерываниям в повсед-
невной жизни. Классический пример такого прерывания — телефонный зво-
нок во время просмотра телевизионной передачи. Когда звонит телефон, у
Вас есть три возможности. Первый — проигнорировать звонок. Второй — отве-
тить на звонок, но сказать, что Вы перезвоните позже. Третий — ответить на
звонок, отложив все текущие дела. В компьютерной системе также имеются
три подобных ответа, которые могут быть использованы в качестве реакции
на внешний аппаратный запрос.
Первый возможный ответ — «не реагировать на прерывание, пока не за-
вершится выполнение текущей задачи» — реализуется путем запрещения (мае-
Глава 2. Аппаратные средства
55
кирования) обслуживания запроса прерывания После завершения задачи
возможен один из двух вариантов сброс маски и разрешение обслуживания,
что приведет к вызову обработчика прерывания, или анализ значения битов
(«поллинг»). указывающих на поступление запросов прерывания и непос-
редственное выполнение программы обслуживания без вызова обработчика
прерывания Такой метод обработки прерываний используется, когда требу-
ется обеспечить заданное время выполнения основной программы, так как
любое прерывание может нарушить реализацию необходимого интерфейса
Рис. 2.19. Выполнение прерывания
Не рекомендуется длительное маскирование прерываний, так как в течение
этого времени может произойти наложение нескольких событий, вызываю-
щих прерывания, а распознаваться будет только одно Допустимая продолжи-
тельность маскирования зависит от конкретного применения микроконтрол-
лера, типа и частоты следования таких событий Не рекомендуется запрещать
прерывания на время большее, чем половина минимального ожидаемого
периода следования событий, запрашивающих прерывания
Обработчик прерывания всегда обеспечивает следующую последователь-
ность действий
1. Сохранить содержимое регистров контекста
2. Сбросить контроллер прерываний и оборудование, вызвавшее запрос
3. Обработать данные
4. Восстановить содержимое регистров контекста
5. Вернуться к прерванной программе
Регистры контекста — это регистры, определяющие текущее состояние
выполнения основной программы Обычно к их числу относятся программ-
ный счетчик, регистры состояния и аккумуляторы Другие регистры пронес-
56 Часть 1 Введение в микроконтроллеры
сора, такие как индексные регистры, могут быть использованы в процессе
обработки прерывания поэтому их содержимое также необходимо сохра-
нить Все остальные регистры являются специфическими для конкретного
микроконтролзера и его применения
После сброса в исходное состояние контроллер прерываний готов вос-
принимать следующий запрос, а оборудование, вызывающее прерывание,
готово посызать запрос, когда возникают соответствующие причины Если
поступит новый запрос прерывания, то регистр маскирования прерывании
процессора предотвратит обработку прерывания, но регистр состояния пре
рываний зафиксирует этот запрос, который будет ожидать своего обслужива
ния После завершения обработки текущего прерывания маска прерываний
будет сброшена, и вновь поступивший запрос поступает на обработку
Вложенные прерывания сложны для реализации некоторыми типами мик-
роконтроллеров, которые не имеют стека Эти прерывания могут также выз-
вать проблемы, связанные с переполнением стека Проблема переполнения
актуальна для микроконтроллеров из-за ограниченного объема их памяти
данных и стека последовательность вложенных прерываний может привести
к тому, что в стек будет помещено больше данных, чем это допустимо
Наконец, прерывание обработано Второй пример с телевизором показы
вает, что можно быстро отреагировать на запрос прерывания, приняв необ
ходимые данные, которые будут затем использованы после решения теку-
щей задачи В микроконтроллерах это реализуется путем сохранения
поступивших данных в массиве памяти и последующей их обработки, когда
выполнение исходной программы будет завершено Такой способ обслужива-
ния является хорошим компромиссом между немедленной полной обработ-
кой прерывания, которая может потребовать много времени, и игнорирова-
нием прерывания, что может привести к потере информации о событии,
вызвавшем прерывание
Восстановление регистров контекста и выполнение команды возврата из
прерывания переводит процессор в состояние, в котором он находился до
возникновения прерывания
Рассмотрим, что происходит с содержимым различных регистров при
обработке прерывания Содержимое регистра состояния обычно автомати-
чески сохраняется вместе с содержимым программного счетчика перед обра-
боткой прерывания Это избавляет от необходимости сохранять его в памяти
программными средствами с помощью команд пересылки, а затем восста-
навливать при возврате к исходной программе Однако такое автоматическое
сохранение реализуется не во всех типах микроконтроллеров, поэтому орга
низации обработки прерываний следует уделить особое внимание Данный
вопрос будет рассмотрен для каждого из рассмотренных в книге микроконт-
роллеров в разделе, описывающем его применение
Если содержимое регистра состояния сохраняется перед началом выпол-
нения обработчика прерывания, то по команде возврата производится его
автоматическое восстановление
Если содержимое других регистров процессора изменяется при выполне-
нии обслуживания прерывания, то оно также должно быть сохранено в па-
Г лава 2. Аппаратные средства 57
мяти до изменения и восстановлено перед возвратом в основную программу
Обычно принято сохранять все регистры процессора, чтобы избежать не-
предсказуемых ошибок, которые очень трудно локализовать
Адрес, который загружается в программный счетчик при переходе к обра-
ботчику прерывания, называется «вектор прерывания» Существует несколь-
ко типов векторов Адрес, которым за!ружаегся в программный счетчик при
запуске микроконтроллера (leset) называется «вектор сброса» Для различных
прерывании могут быть заданы разные вектора, что избавляет программу
обслуживания от необходимости определять причину прерывания Использо-
вание различными прерываниями одного вектора обычно не вызывает про-
блем при работе микроконтроллеров, так как чаще всею микроконтроллер
исполняет одну единственную программу Этим микроконтроллер отличается
от персонального компьютера, в процессе эксплуатации которого могут до-
бавляться различные источники прерывании (Если Вы когда-либо подклю-
чали два устройства к портам СОМ1 и COM3, то Вы представляете, о чем
идет речь) В микроконтроллере, где аппаратная часть хорошо известна, не
должно возникнуть каких либо проблем при совместном использовании век-
торов прерывании
Последнее, что осталось рассмотреть, — это программные прерывания
Существуют процессорные команды, которые могут быть использованы для
имитации аппаратных прерывании Наиболее очевидное использование этих
команд — это вызов системных подпрограмм, которые располагаются в про-
извольном месте памяти, и ш требуют для обращения к ним межсегментных
переходов Эта возможность реализована в микропроцессорах семейства Intel
186 и используется в базовой системе ввода-вывода BIOS (Basic Iiiput/Output
System) и операционной системе DOS персональных компьютеров для вызо-
ва системных подпрограмм без необходимости фиксирования точки входа
Вместо этого используются различные вектора прерывании, выбирающие
команду, которая должна выполняться, когда происходит такое программ-
ное прерывание
Возможно после прочтения этои главы механизм прерывании станет для
Вас более понятным или, наоборот. Вы только еще больше запутаетесь При
описании каждого микроконтроллера будет показано, как использование
прерываний может упростить его применение
Таймеры
Если Вы знакомы с микропроцессорами, то, возможно, считаете, что тайме-
ры используются только для обеспечения заданной задержки В микроконтрол-
лерах таймеры используются для решения гораздо более широкого круга задач
Обычно для переключения таймера используются тактовые импульсы
процессора Загрузив в таймер начальное значение, можно отсчитывать опре-
деленные интервалы времени, фиксируя окончание интервала по моменту
переполнения таймера
Часто перед таймером включают предварительный делитель тактовой час-
тоты, чтобы иметь возможность отсчитывать более длинные интервалы вре-
58 Часть 1. Введение в микроконтроллеры
мени Делитель обеспечивает инкремент содержимого таймера после поступ-
ления определенного числа тактовых импульсов
Если требуется реализовать задержку в Юме (0 01с) в системе с тактовой
частотой 10 МГц, то можно использовать схему, показанную на рис 2 20,
следующим образом Сначала надо определить требуемый коэффициент де
ления При тактовой частоте 10 МГц таймер должен переключиться до пере
полнения 10000 раз, что невозможно для 8-разрядного счетчика Чтобы обес-
печить заданную задержку, необходимо выбрать коэффициент деления для
предварительного делителя, который обычно является степенью двойки (то-
есть 1,2, 4, 8, 256) Если выбрать коэффициент деления 64 то таймер пере-
ключится 156 раз при поступлении на вход делителя 64 х 156 = 9984 тактовых
импульсов, что достаточно близко к требуемой величине Более точное зна-
чение задержки может быть достигнуто путем добавления команд NOP или
других команд, используемых для заполнения определенных промежутков
времени Для отсчета заданного времени таймер можно очистить, а затем
непрерывно сравнивать его содержимое со значением 156
Выбор тактового
сигнала
Переполнение
Рис. 2.20. Структура таймера в микроконтроллере
Более эффективный способ отсчета — загрузить в таймер число 100 = 256 — 156
и ждать, когда флаг прерывания по переполнению таймера установится в 1
Используя данный метод, можно реализовать мультизадачный режим вы-
полнения программ Переключение задач будет производиться, когда тай-
мер отсчитает 10 мс
Не рекомендуется использовать этот метод для создания часов реального
времени Так как при перезагрузке таймера значение коэффициента деления
делителя неизвестно, а его содержимое сбрасывается в 0 при записи в ре-
гистр таймера, то при отсчете времени могут возникать ошибки Вместо этого
лучше дать возможность таймеру считать непрерывно (тогда делитель никогда
не сбрасывается), а при его переполнении увеличивать содержимое счетчика
часов реального времени Когда программе требуется узнать текущее время,
она выбирает и преобразует содержимое этого счетчика, получая правильное
Глава 2. Аппаратные средства 59
значение времени. Такой метод используется в IBM PC, где переключение
(«тик») таймера происходит 18,2 раз в секунду.
Глядя на рис. 2.20 можно заметить, что таймер может быть использован
для подсчета внешних событий, если использовать для его переключения
внешний сигнал. ’ $
Если микроконтроллер содержит два таймера, то можно легко реализо-
вать простой тахометр — счетчик числа событий, происходящих за единицу
времени (рис 2.21) Программа реализации тахометра сначала сбрасывает в 0
содержимое счетчика TMR2, а затем устанавливает определенный интервал
времени для срабатывания таймера TMR1. По истечении этою интервала TMR1
срабатывает (устанавливается в 1 бит переполнения TMR1) , вызывая счи-
тывание текущего содержимого и» TMR2.
Тактовый
сигнал
Сигнал
внешнего
события
Переполнение
Рис. 2.21. Реализация тахометра.
Таймеры в микроконтроллерах часто используются для ввода-вывода сиг-
налов с широтно-импульсной модуляцией PWM (Pulse Width Modulated). PWM
сигнал часто используется для передачи значения аналогового сигнала в циф-
ровую систему или из нее. Сигнал имеет повторяющуюся форму, где дли-
тельность импульса пропорциональна значению передаваемой аналоговой
величины (рис. 2.22).
PWM-сигналы часто используется для управления электродвигателями,
задавая скорость вращения или положение вала в сервоприводе. На рис. 2.23
показана схема генерации PWM-сигнала на выходе микроконтроллера. Пока
заданное значение «длительности импульса» больше, чем содержимое тай-
мера, на выходе этой схемы будет поддерживаться высокий потенциал (вер-
шина импульса). Когда содержимое таймера станет равно или больше, чем
заданное значение «периода», то таймер сбрасывается в 0, и процесс повто-
ряется. Такой метод получения PWM-сигнала требует минимального участия
процессора — надо только задать необходимые значения периода и длитель-
ности импульса. При этом значение длительности импульса может изменять-
ся процессором в любое время без остановки процесса вывода.
60 Часть 1 Введение в микроконтроллеры
100% * Длительность (ширина) импульса
Скважность =--------------------------------------
Период импульсов
Рис. 2.22. Сигнал с широтно импульсной модуляцией PWM
Рис. 2.23. Схема генератора PWM-сигнала
Если необходимо сформировать прямоугольный импульсный сигнал оп-
ределенной частоты, то можно использовать ту же схему, задав период в два
раза больше длительности импульса
Измерение длительности импульса PWM-сигнала может быть произведе
но с помошью схемы, приведенной на рис 2 24 В этой схеме на вход_ИЕ8ЕТ
таймера подается сигнал сброса до тех пор, пока входной сигнал имеет низ-
кий уровень При поступлении высокого уровня входного сигнала таймер за
пускается, и его содержимое поступает в регистр длительности импульса По
окончании импульса, когда на входе снова устанавливается низкии уровень,
Глава 2. Аппаратные средства 61
содержимое таймера сохраняется в регистре длительности импульса, а тай-
мер сбрасывается в 0 до прихода следующего импульса Для упрощения на
схеме не показаны некоторые элементы задержки, которые гарантируют,
что значение таймера будет записано в регистр длительности до его сброса
Шина данных
Рис. 2.24. Схема измерения длительности импульса
Параллельный ввод-вывод данных
Основной интерфейс между микроконтролзером и внешними устройствами
реализуется через параллельные порты ввода-вывода Во многих микроконт-
роллерах выводы этих портов служат также для выполнения других функций,
например, последовательного или аналогового ввода-вывода При первом
знакомстве с микроконтроллером очень важно понять, как осуществляется
параллельный ввод-вывод данных
В большинстве микроконтроллеров отдельные выводы портов могут быть
запрограммированы на ввод или вывод данных Типичная схема подключе-
ния внешнего вывода показана на рис 2 25 Необходимо обратить особое вни-
мание на то, что при вводе данных считывается значение сигнала, поступа-
ющего на внешний вывод, а не содержимое триггера данных Если к внешнему
выводу подключены выходы других устройств, то они могут установить свой
уровень выходного сигнала, который будет считан вместо ожидаемого значе-
ния данных, записанных в триггер В некоторых микроконтроллерах суще-
ствует возможность выбора между чтением данных, установленных на выхо-
де триггера или на внешнем выводе
Могут возникнуть некоторые проблемы в микроконтроллерах, которые
выполняют чтение данных и их запись в регистр порта с помощью одной
команды При этом ввод неправильных данных приведет к их записи в триг-
гер в результате выполнения команды чтения/записи
62 Часть 1. Введение в микроконтроллеры
Данные
Адрес
WR
RD
Рис. 2.25. Типовая схема подключения внешнего вывода
Другой распространенный вариант подключения внешнего вывода — это
схема с «открытым коллектором» (в действительности с «открытым стоком»),
показанная на рис 2 26 Состояние данного вывода соответствует состоянию
подключенной к нему шины до тех пор, пока он не будет переключен на
работу в режиме выхода и установлен в состояние О В этом случае вывод
соединен с «землей» через MOS-транзисгор, который управляется логичес-
кой схемой «И», подключенной к выходам триггеров управления и данных.
Внешний
Данные
i
Адрес
WR
RD
Рис. 2.26. Схема подключения вывода с открытым коллектором
Такое подключение вывода позволяет создавать шины с объединением
выходов устройств по схеме «монтажное И» В этой схеме шина подключается
к напряжению питания Vcc (логическая I) через резистор, а к потенциалу
«земли» (логический 0) — через несколько ключей или транзисторов При их
включении на шине устанавливается низкий потенциал Примером примене-
Глава 2. Аппаратные средства 63
ния данном схемы включения является двунаправленная шина с нескольки-
ми источниками информации, каждый из которых может передавать дан-
ные. переводя шину в состояние с низким потенциалом (логический 0)
Обычным выход (рис 2 25) функционирует как выход с озкрьпым кол-
пектором. если он работает в режиме ввода и переходит в режим вывода
только хпя выдачи «0» Когда на шину необходимо вывести «0». ю сначала
«0» записывается в триггер данных, а затем с помощью триггера управления
на выходе устанавливается низким уровень потенциала
Триггер управления разрешает вывод данных на шину Как показано на
приведенных схемах, в современных микроконтроллерах обеспечивается ин-
дивидуальный доступ к триггерам данных и управления с помощью адресном
шины В некоторых более старых типах микроконтроллеров выводы объединя-
ются в группы по 4 или 8 разрядов, которые программируются на совмест-
ную работу в качестве входов или выходов В этом случае при разработке уст-
ронств требуется более тщательно планировать работу аппаратного и
программного обеспечения, чтобы обеспечить выполнение внешними выво-
дами требуемых функции
Внешним вход может быть также использован для подачи запроса преры-
вания Это обычно реализуется, когда вывод работает в режиме ввода
Преобразование логических уровней
При работе с микроконтроллерами часто приходится обеспечивать интер-
фейс устройств, реализованных на микросхемах с различным типом логики
При использовании серийных микросхем с положительной логикоп. напри-
мер, ТТЛ (транзисторно-транзисторная логика) или КМОП (логика на ком-
пзементарных МОП-транзисторах). реализация интерфейса не вызывает про-
бзем так как возможно непосредственное соединение этих микросхем Однако
интерфейс устройств, реализованных на микросхемах с отрицательной и
поюжительнои логикой, например, ЭСЛ (эмиттерно-связанная логика) и
КМОП, может вызвать некоторые трудности
Хотя имеются специальные микросхемы для выполнения такого интер-
фейса, однако обычно они обеспечивают одностороннюю передачу данных,
что затрудняет реализацию двунаправленных шин Кроме того, применение
этих микросхем может значительно увеличить стоимость проектируемого ус-
тройства
Наиболее типичный метод преобразования логических уровней состоит в
том, чтобы привести в соответствие пороги переключения обоих устройств
Как показано на рис 2 27, нижний потенциал напряжения питания для
КМОП-микроконтроллера сдвигается ниже потенциала «земли» таким обра-
зом. чтобы его порог переключения стал соответствовать порогу переключе-
ния микросхем ЭСЛ Резистор с номиналом от 1 кОм до 10 кОм используется
для ограничения тока, который протекает из-за разного значения логических
уровней испотьзуемых микросхем
При взгляде на эту схему может сложиться впечатление, что цена сдвига
уровня питающего напряжения для микроконтроллера намного выше цены
64 Часть 1. Введение в микроконтроллеры
нескольких интерфейсных микросхем На самом деле это не сложно, так как
современные КМОП-микроконтроллеры потребляют очень малую мощность
В приведенной схеме необходимый сдвиг уровней может быть обеспечен вклю-
чением в цепь питания кремниевых диодов, падение напряжения на которых
составляет 0,7 В Этот простой способ согласования уровней позволяет с ми-
нимальными дополнительными затратами подключать КМОП-микроконт-
роллеры к микросхемам ЭСЛ, обеспечивая возможность двунаправленной
передачи данных
уровень «1» для КМОП
Земля -----------------------------
уровень «1» для ЭСЛ
------------------------ Порог переключения
уровень «О» для ЭСЛ
уровень «О» для КМОП
Рис. 2.27. Согласование логических уровней ЭСЛ и КМОП микросхем
Последовательный ввод-вывод данных
Наиболее распространенный вид связи между различными системами (или
компьютерами) — это последовательный обмен В этом случае байт данных
передается по единственному проводу бит за битом с обеспечением синхро-
низации между приемником и источником данных Очевидное преимущество
последовательной передачи данных состоит в том, что она требует неболь-
шого количества линий связи
Существует множество стандартных последовательных протоколов пере-
дачи данных, которые применяются в микроконтроллерах В некоторых мик-
роконтроллерах эти протоколы реализуются внутренними схемами, разме-
щенными на кристалле, что позволяет упростить разработку различных
приложений
Глава 2. Аппаратные средства 65
Асинхронный последовательный обмен
Наиболее распространенная форма последовательной связи — асинхронный
обмен, при котором байт данных посылается как пакет, включающий ин-
формацию о начале и конце передачи данных, а также информацию для
контроля ошибок.
Первым передается не бит данных, а старт-бит, указывающий на начало
передачи данных (начало пакета). Этот бит используется приемником для
синхронизации процесса чтения данных, которые следуют за старт-битом
(младший бит данных идет первым). После битов данных может следовать бит
четности (контрольный бит), который используется для проверки правиль-
ности полученных данных. Существует два типа проверки на четность. Про-
верка на нечетность (Odd) означает, что число единиц в пакете данных,
включая бит четности, должно быть нечетным (например, 0x55 будет иметь
бит четности равным 1, чтобы сделать число единичных битов равным пяти,
то-есть нечетным). Проверка на четность (Even), наоборот, означает что чис-
ло единичных битов должно быть четным (например, при передаче числа
0x55 бит четности будет равен 0).
В некоторых микроконтроллерах значение бита четности должно опреде-
ляться программно, а затем помещаться в регистр. Простой алгоритм реали-
зации этой процедуры заключается состоит в выполнении логической опера-
ции «Исключающее ИЛИ» (XOR) над всеми битами передаваемого байта.
Для микроконтроллера 8051 данная процедура выполнятся с помощью сле-
дующей программы:
mov Count, 8 ; Обработать 8 бит
mov A, 0 ; Очистить регистр «А»
Р Loop Адрес возврата после обработки каждого бита
xrl A, Char ; операция ХОР над младшими битами
rrc A ; Сдвинуть Char, чтобы перейти к следующему биту
djnz Count, P Loop ; Повторить 8 раз
Младший бит регистра «А» будет содержать бит четности (Even) для опе-
ранда «Char». Количество единичных битов вместе с битом четности будет
четным числом. Чтобы реализовать проверку на нечетность, необходимо ин-
вертировать младший бит в регистре «А». -
За битом четности следует стоп-бит, который используется приемником
для обработки конца передачи пакета.
Асинхронный пакет данных показан на рис. 2 28. Существует набор пара-
метров, который должен быть известен при реализации обмена. Одним из
таких параметров является число передаваемых бит данных, которое опреде-
ляется типом приемного и передающего устройств. Пакет на рис. 2.28 содер-
жит только 5 бит данных (такое число бит использовалось в телетайпах), но
возможны пакеты длиной до 8 бит.
Наряду с битами четности («odd») или нечетности («even») возможны
другие варианты контрольных битов: «по», «mark» и «space». «No» означает
отсутствие бита четности в пакете. «Mark» или «space» означает, что вместо
5 Зак. 2026-
66 Часть 1. Введение в микроконтроллеры
бита четности всегда посылается I («mark») изи 0 («space»), соответственно
Эти варианты контрольных битов используется достаточно редко — в тех слу-
чаях, когда необходимо дать приемнику допотнитетьное время на обработку
пакета
Рис. 2.28. Асинхронная последовательная передача данных
Количество стоп-битов также может быть различным Второй стоп-бит мо-
жет вводиться для той же цели, что и контрольные биты «mark» и «space» —
чтобы дать приемнику больше времени для обработки принятого пакета
Практически все современные устройства используют для асинхронного
обмена формат данных «8-N I», что означает передачу 8 бит данных, отсут-
ствие бита четности и один стоп бит Бит четности и дополнительный стоп-
бит обычно не требуются для последовательной связи
Наиболее популярный протокол асинхронной последовательной связи
называется «RS-232», который в настоящее время является международным
стандартом Это очень старый стандарт используемый для связи компьюте-
ров Подробнее RS-232 будет обсуждаться в главе «Типовые интерфейсы мик-
роконтроллеров»
Асинхронный приемник ждет прихода старт бита, когда на линии уста-
навливается низкий уровень Через половину времени передачи одного бита
(длительность этого времени задается синхросигналом) линия вновь опра-
шивается Если на линии все еше установлен низкий уровень сигнала, то
приемник ждет один период и считывает данные (рис 2 29) Если же на ли-
нии оказывается высокий уровень сигнала, то приемник считает, что про
изошла ошибка, и данные не принимаются Этот метод используется как при
аппаратной, так и при программной реализации асинхронного приема дан-
ных В программно реализованных приемниках используются программные
циклы для отсчета задержек времени
Другой распространенный метод асинхронной последовательной переда-
чи данных — это использование кода типа «Манчестер» («mancliester») При
этом методе передача каждого бита данных синхронизируется импульсом, а
значение бита (0 или I) определяется промежутком времени до следующего
импульса (рис 2 30) После передачи заданного числа битов данных следует
Глава 2. Аппаратные средства 67
стоп-импульс, а затем прием данных прекращается Особенность манчестер-
ского кодирования заключается в том, что старт-бит качественно отличается
от 1 или 0 Это позволяет приемнику определить, являются ли поступающие
данные началом или серединой посланного пакета (в последнем случае дан-
ные не будут приниматься до прихода старт-бита) Манчестерское кодирова-
ние хорошо подходит для использования в случаях, когда поток передавае-
мых данных может быть легко прерван Поэтому такой метод передачи данных
является основным для связи с помощью инфракрасного излучения, напри-
мер, в пульте дистанционного управления телевизором ~ -а
Старт-бит
Синхросигналы
Рис. 2.29. Чтение данных при асинхронном последовательном обмене
Рис. 2.30. Последовательный обмен с манчестерским кодированием
68 Часть 1. Введение в микроконтроллеры
Синхронный последовательный обмен
При реализации синхронного обмена вместе с данными посылается синхро-
сигнал, который используется приемником для стробирования данных (рис
2 31)
Синхросигналы
Данные
OVJVAJVJUVJIJ
1ЛЛЛГ1Г1Г1Г1Г
Рис. 2.31. Форма сигналов при синхронной передаче данных “
Типичная схема для преобразования последовательных данных в парал-
лельные показана на рис 2 32 В этой схеме используются две микросхемы 8-
разрядных регистров типа 74LS374 Для большинства приложении не требу-
ется включение второго регистра Это преобразование может также быть
выполнено с помощью специальной микросхемы, но некоторые предпочи-
тают использовать 8-разрядные регистры, так как их обычно легче наити,
чем другие типы микросхем ТТЛ
Рис. 2.32. Схема преобразования последовательных данных в параллельные
Существует два основных протокола для синхронной связи Microwire и
SPI Эти методы применяются для взаимодействия с различными микросхе-
мами, (таких как последовательный EEPROM в BASIC Stamps) Хотя стан-
дарты Microwire и SPI очень похожи, существуют некоторые различия, о
которых необходимо упомянуть
Глава 2. Аппаратные средства 69
Данные протоколы чаще используются для синхронно» последователь-
ной передачи данных, чем для объединения микроконтроллеров в единую
сеть В этих протоколах каждое устропство адресуется индивидуально, хотя
линии передачи данных и синхронизации moivi бьиь общими для мношх
хстронств Если сигнал разрешения выборки (chip select) устройства не ак-
тивен, то это устроиство игнорирует линии данных и синхронизации В каж-
дый момент времени только одно из подключенных к шине устроиств может
быть ведущим (master), то-есть иметь возможность задавать режим работы
шины (рис 2 33)
Рис. 2.33. Синхронная последовательная шина
Если синхронный последовательный порт встроен в микроконтроллер, то
передающая схема имеет вид, показаннып на рис 2 34
- Выход
PWM-
сигналов
таймера
Синхро-
сигналы
Старт Сигнал посылки данных Шина данных микроконтроллера
Рис. 2.34. Схема синхронного вывода данных
70 Часть 1. Введение в микроконтроллеры
Эта схема выводит 8-разрядные данные При реализации протоколов, ана
логичных стандарту Microware, где сначала выдается старт-бит, этот бит по
сылается с помощью команд чтения и записи в порт ввода-вывода Похожая
схема используется для приема данных, где поступающие данные сначала
последовательно вводятся в сдвиговый регистр и затем считываются микро-
контроллером ,
Протокол MICROWIRE
Протокол Microwire обеспечивает передачу данные со скоростью до 1 Мбит в
секунду В одном пакете передается шестнадцать бит данных
На рисунке 2 35 показана форма сигналов при чтения 16 бит данных Пос-
ле выбора микросхемы и посылки старт-бита передается 8-разрядная коман-
да (обозначена как «ОР1», «ОР2», «А5» — «АО» на рис 2 35), затем следуют
16-разрядный адрес (его наличие не является обязательным) и 16 бит дан-
ных При максимальной скорости передачи 1 Мбит в секунду тактовый сиг-
нал изменяется каждые 500нс Передаваемые биты должны быть выдаваться
на линию за 100нс до поступления переднего фронта тактового сигнала Чте-
ние данных должно происходить за 100нс до поступления заднего фронта
тактового сигнала Хотя эти требования выполняются большинством устройств,
необходимо убедиться, что устройства, с которым осуществляется связь,
соответствуют данным условиям 1 • ]
тактовый сигнал
DI (вход данных)
CS (разрешение
выборки)
DO
(выход данных)
Рис. 2.35. Чтение данных в протоколе Microwire
ппппп-п
I
Протокол SPI
t
Протокол SPI похож на протокол Microwire, но имеет несколько отличий
Глава 2. Аппаратные средства 71
I SPI способен передавать данные со скоростью до 3 Мбит в секунду
2 Разрядность данных в SP1 пакете равна 8 бит t
3 Передатчик в SPI имеет возможность приостановить передачу данных
4 Данные в SPI могут передаваться в виде множества байтов, которые назы-
ваются «блок» или «страница» ,
Как и в протоколе Microwire, в SPI сначала передается байт, который
содержит команду для принимающего устройства Затем идет необязатель-
ный 16-разрядный адрес, после чего следуют 8 разрядные данные Как было
указано выше, протокол SPI позволяет передавать несколько байтов (рис
2 36) В протоколе SPI используется симметричный тактовый сигнал, кото-
рый имеет одинаковую длительность высокого и низкого уровня Выходные
данные должны быть выданы на линию по крайней мере за 30нс до поступ-
ления переднего фронта тактового сигнала, а считывание должно происхо-
дить за 30нс до заднего фронта
CS
(разрешение
выборки)
тактовый сигнал
DI (вход данных)
* DO
(выход данных)
iOJUUl
ппппп— п п
47 16 15 14 13 10। ।
1------------------1
।
'-м--- Команда --►.
о
Рис. 2.36. Запись данных в протокопе SPI
При реализации протоколов Microwire или SP1 можно упростить схему
соединения, если подключить вход Din и выход Dout к одной линии (рис
2 37) При таком способе соединения микроконтроллер должен отключить
свой выходной драйвер, когда закончит последовательную передачу данных
После этого он может принимать данные, поступающие от другого устрой-
ства Резистор между выводами данных служит для ограничения тока в тех
случаях, когда и микроконтроллер, и периферийное устройство выдают дан-
ные на линию связи
72 Часть 1 Введение в микроконтроллеры
Рис. 2.37. Подключение входа «D!» и выхода «DO» к одной линии
I
Сети
Когда термин <сеть» употребляется применительно к микроконтроллерам,
то имеются ввиду шины которые используются для подключения дополни
тельных устройств и для обеспечения связи между микроконтроллерами Та-
ким образом сеть микроконтроллеров отличается от локальной сети, такой
как «Ethernet», которая вероятно приходит на ум при слове «сеть»
Существует множество стандартов (в число которых входят описанные
выше Microwire и SPI) которые могут привести в недоумение по поводу
того, что является и что не является сетью Далее под микроконтроллерном
сетью будем понимать отдельную линию связи (провод) и множество под-
ключенных к ней устройств которые могут инициировать передачу сообще
нии и посылать соответствующий отклик на полученное сообщение
В таких сетях имеется «ведущий» («master») — интеллектуальное устрой
ство, которое может инициировать передачу данных Устройства, которые
отвечают на запросы, но не могут их инициировать, называются «ведомые»
(«slaves») Микроконтроллерная сеть может иметь несколько «ведущих» уст-
ройств, В этом случае сетевой протокол требует включения схемы арбитра-
жа, которая позволит различным «ведущим» устройствам передавать данные
не нарушая других сообщении
Обычно в микроконтроллерной сети передается относительно мало дан-
ных, поэтому требуемая для них пропускная способность весьма скромна по
сравнению с сетью Ethenet Часто микроконтроллерная сеть имеет пропуск-
ную способность порядка нескольких байт в секунду, тогда как сеть персо-
нальных компьютеров может передавать несколько Мбайт в секунду
Глава 2. Аппаратные средства 73
Далее будут описаны два наиболее попу 1ярных вида сетей для микрокон-
троллеров. Хотя представленная в книге информация об этих сетях является
достаточно полной, ее недостаточно лля разработки сетевых приложений. Для
получения более подробной информации обращайтесь к руководствам по
использованию микроконтроллеров или к описанию стандартов. Представ-
ленная информация дает понимание основ описываемых протоколов, чтобы
можно было оценить их пригодность для конкретного применения.
Протокол I2C
Наиболее популярный протокол для сети микроконтроллеров — I2C, кото-
рый предназначен для связи устройств в многопроцессорных системах. Этот
стандарт был разработан компанией Philips в конце 70-х годов как метод
реализации интерфейса между микропроцессорами и периферийными уст-
ройствами, который не требует прокладки многочисленных линий для пере-
дачи между устройствами всех разрядов адреса, данных и сигналов управле-
ния. Протокол I2C позволяет разделять сетевые ресурсы между несколькими
ведущими процессорами («niiiltimastenng»).
Шина 12С содержит две линии: линия SDA, которая служит для передачи
данных, и линия SCL, по которой передается синхросигнал, используемый
для стробирования данных. Обе линии подключены через резисторы к шине
питания («подтянуты» к высокому уровню потенциала), что позволяет не-
скольким устройствам управлять их состоянием путем соединения по схеме
«монтажное И».
Шина 12Сдля управления стереосистемой может иметь вид, показанный
на рис. 2.38
Рис. 2.38. Пример I2C сети.
Двухпроводная линия используется для определения начала передачи дан-
ных, а также для передачи самих данных. Чтобы начать передачу данных, шина
переводится в стартовое состояние. При отсутствии передаваемых данных шина
находится в ждущем (пассивном) состоянии («idle»). При этом на обе линии
сигналы не поступают, и на них установлен высокий уровень сигнала (потен-
циал Vcc). Чтобы инициировать передачу данных, ведущее устройство, кото-
рое запрашивает управление шиной, устанавливает низкий уровень сначала на
74 Часть 1. Введение в микроконтроллеры
чинии SDA, а затем на линии SCL (стартовое состояние) В процессе пересыл-
ки данных такое состояние шины является нерабочим, так как прием переда
ваемых данных производится точько при высоком (активном) уровне синхро-
сигнала на линии SCL Чтобы закончить передачу данных выполняются обратные
действия на линии SCL устанавливается высокий уровень сигнала, а затем в
такое же состояние переводится линия данных SDA (рис 2 39)
Конец
передачи
Ждущий
режим
режим
передачи ваемые
(стартовое биты
состояние)
Рис. 2.39. Форма сигналов на шине I2C
Данные передаются синхронным способом, причем первым посылается
старший бит (рис 2 40) После передачи 8 бит ведущее устройство переводит
линию данных в «плавающее» состояние, ожидая подтверждения приема дан
ныхот ведомого устройства Таким подтверждением является установка ведо-
мым устройством низкого уровня сигнала на линии SDA После бита под
тверждения на обех линиях устанавливается низкий уровень Затем
производится пересылка следующего байта, или шина переводится в состоя
ние конца передачи Это означает, что передача завершена, и приемник мо-
жет готовиться к следующему запросу данных
Передатчик ....
Приемник - - -
JWUWWUL
SCL
SDA Бит
подтверж
Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2Бит 1 Бит 0 дения
приема
Рис.2.40 Передача байта по шине 12С
Глава 2. Аппаратные средства 75
Существует две максимальные скорости передачи данных по шине I2C
«стандартны!! режим» — до 100 Кбит/ с п «быстрый режим» — до 400 Кбиг/с
(рис 2 41)
Стандартный режим 4 0
Быстрый режим 0 6
SCL —
40 •
।
Начало Передавае-
передачи мые биты
। ।
Конец Ждущий
передачи режим
Указана минимальная длительность
интервалов времени в микросекундах
Рис. 2.41. Временная диаграмма сигналов на шине I2C
Формат команды поступающей от ведущего устройства к ведомому, по
казан на рис 2 42 Адрес получателя содержит 7 бит Существует неутвержден-
ный («свободный») стандарт согтасно которому четыре старших бита ис-
потьзуются для указания типа устройства а следующие три бита используются
для выбора одного из восьми устройств этого типа или служат для более
точного определения типа устройства Так как этот стандарт не является обя
затедьным, то некоторые устройства требуют указания в качестве трех после
дних адресных бит определенных кодов тогда как другие например микро
схемы памяти EEPROM с последовательной выборкой, используют эти биты
для выбора адресата внутри устройства Существует также 10-разрядныи стан
дарт для передачи адреса в котором первые 4 бита содержат 1 следующий
бит имеет значение 0 последние 2 бита являются старшими битами адреса
а завершающие 8 бит адреса передаются в следующем байте Все это означа-
ет, что очень важно распределить адреса между устройствами, подключен
ными к шине
Первые четыре бита адреса обычно служат для определения типа выбира
емых устройств в соответствии со следующим соглашением
0000 — Зарезервированный адрес
0010 — Синтезатор готоса
0011 — Аудио — интерфейс
0100 — Звуковой генератор
0111 — Жидкокристалтический иди светодиодный дисплей
76 Часть 1. Введение в микроконтроллеры
)< г I 000 — Видео — интерфейс
г1, 1001 — аналого-цировой и цифро-аналоговый интерфейсы
1010 — Последовательная память
1100 — Управление радиоприемником
1101 — Часы/календарь
1111 — Зарезервировано для использования 10-разряди ого адреса
• Дополнительные данные или
начало следующей передачи
Адрес приемника R/W О < Передаваемые или принимае- мые данные Аск •••
Начало « • * “ J | ?
передачи
> I
R/W - Вид обмена (прием или передача)
Аск - Бит подтверждения '
Конец
передачи
Рис. 2.42. Формат передачи данных по шине 12С
Прежде, чем закончить обсуждение протокола 12С, следует обратить вни-
мание на следующие обстоятельства В некоторых устройствах требуется по-
вторная посылка стартового бита, чтобы сбросить принимающее устройство
в исходное состояние для приема следующей команды Например, при чте-
нии из EEPROM-памяти с последовательной выборкой первая команда по-
сылает адрес ячейки, из которой производится считывание, а вторая коман-
да выполняет чтение данных по этому адресу
Следует также обратить внимание на возможность инициирования про-
цесса передачи данных несколькими ведущими микроконтроллерами
(«multimastering») Это может привести к возникновению коллизий, когда два
устройства пытаются управлять шиной одновременно Если один микроконт-
роллер взял управление шиной, то-есть установил стартовое состояние, до
того, как другой попытается сделать тоже самое, то это не вызывает проблем
Проблема возникает, когда несколько устройств инициируют стартовое со-
стояние одновременно, и требуется произвести арбитраж их запросов
На практике осуществить арбитраж в этом случае достаточно просто Во вре-
мя передачи данных оба передатчика точно синхронизируют тактовые импуль-
сы Если при передаче адреса бит, который должен иметь значение I, на самом
деле принимает значение 0, то это указывает на то что шина занята другим
устройством В этом случае ведущее устройство отключается от шины и ждет,
когда наступит состояние «коней передачи», после которого повторяет запрос
Возможно, это трудно понять по приведенному описанию В следующем разделе
«Протокол CAN» будет показано, как тоже самое происходит с использованием
асинхронной шины CAN, которая имеет много общего с шиной I2C
Глава 2. Аппаратные средства
77
Протокол I2C может быть легко реализован программным путем Но при
этом быстрый режим не может быть реализован из-за перегрузки процессо-
ра, даже стандартный режим 100 Кбит/с может оказаться слишком быстрым
для некоторых микроконтроллеров Программная реализация наилучшим об-
разом подходит тогда, когда в сети имеется только одно ведущее устройство
В этом случае нет необходимости синхронизироваться с другими устройства-
ми или принимать сообщения от других ведущих устройств, работающих со
слишком большой скоростью, которая не обеспечивается при программной
реализации.
Протокол CAN
Протокол CAN (Controller Area Network) был разработан компанией Bosch
несколько лет назад как сетевое решение для связи компьютерных систем,
применяемых в автомобилях. В то время не существовало единого стандарта
для связи цифровых устройств в автомобилях До появления протокола CAN
(или протокола Л850, который является аналогичным американским стан-
дартом) автомобили содержали до трех миль проводов весом свыше 90 кг,
которые связывали различные автомобильные электронные устройства Про-
токол CAN был разработан, чтобы удовлетворять следующим требованиям:
I Высокая скорость обмена (до I Мбит/с)
2 Нечувствительность к электромагнитным помехам.
3 Простота, небольшое количество разъемных контактов (для обеспечения
механической надежности)
4 Легкость подключения и удаления устройств.
Протокол CAN подобен протоколу Л 850 и основывается на тех же первых
двух уровнях семиуровневой модели OS1, однако эти два стандарта электри-
чески несовместимы Стандарт на протокол CAN появился раньше, поэтому
данный стандарт реализуется практически во всех моделях европейских и
японских автомобилей, а в настоящее время активно используется и амери-
канскими автомобильными компаниями
Протокол CAN реализуется с использованием операции «монтажное И»,
которая используется также шиной 12С Передача данных на физическом элек-
трическом уровне реализуется с помощью драйверов, соответствующих стан-
дарту RS-485, которые обеспечивают выдачу на линию связи дифференци-
ального напряжения. Такая сеть будет работать даже если один из двух
проводников закорочен или оборван, что особенно важно для обеспечения
надежности автомобильного оборудования Использование соединения, реа-
лизующего «монтажное И», позволяет выполнять арбитраж между различ-
ными ведущими устройствами- когда выходные драйверы устройства актив-
ны, то шина CAN переводится в низкое состояние, аналогично I2C
Пример реализации этого метода арбитража показан на рис 2 43. Когда
сигнал, выдаваемый драйвером, не совпадает с уровнем, установленным на
линии передачи данных (например, при выдаче I на шине оказывается 0), то
драйвер останавливает передачу данных до тех пор пока не завершится пере-
78 Часть 1. Введение в микроконтроллеры
сылка текущего сообщения Этот простои и эффективный способ арбитража
исключает необходимость повторной посылки сообщения при возникнове-
нии коллизии на шине. . , ,
Состояние
ожидания
Старт- Бит 0 Бит 1
бит
Бит 2 Бит 3
Бит 4
Несовпадение
для драйвера?
Несовпадение
для драйвераЗ
Рис. 2.43. Арбитраж при передаче по шине CAN.
Каждое сообщение представляет собой отдельный кадр в потоке пересы-
лаемых данных Кадр передается как фрагмент этого асинхронного последо-
вательного потока, в котором пересылка данных не сопровождается посыл-
кой синхросигнала При этом приемник и передатчик должны работать на
одной частоте обычно скорость обмена устанавливается в пределах от 200
Кбит/с до I Мбит/с Формат кадра передачи данных показан на рис 2 44
RTR
Рис. 2.44. Кадр передачи данных по шине CAN с использованием 11-битного
идентификатора
Глава 2. Аппаратные средства 79
При использовании протокола CAN нулевое значение бита называется
«доминантным» а единичное значение — «рецессивным» (по аналогии с ге-
нами в биологии)
Различные поля кадра имеют следующее назначение
SOF (Start Of Frame) — начало кадра, единичный доминантный бит
Идентификатор — 11-и или 19-битный идентификатор сообщения
RTR — Бит, указывающий, что ведущее устройство является передатчи-
ком (при RTR=I) или приемником (при RTR=O) данных
rl/гО — Зарезервированные биты, которые должны быть доминантными
DLC — 4 бита, которые указывают количество передаваемых байт
Data — от 0 до 8 передаваемых байтв данных, где старший бит идет первым
CRC — 15 битный код контрольной суммы, за которым следует рецессив-
ный бит
Аск — 2-битное поле подтверждения готовности (доминантным и рецес-
сивный биты)
EOF (End Of Frame) — конец кадра (поле, содержащее не менее 7 рецес-
сивных бит)
Последнее важное замечание, касающееся CAN, состоит в том, что уст-
ройствам не даются специфические имена или адреса, сообщение иденти-
фицировано (используя 11-и или 19-и битный идентификатор сообщения)
Этот метод адресации может обеспечить очень гибкий обмен сообщениями
Кадр в протоколе CAN имеет сложный формат, что осложняет его обра-
ботку в процессе передачи и приема сообщения Такая обработка может вы-
полняться как аппаратно, так и программно, но рекомендуется использовать
только аппаратную реализацию CAN Ряд производителей встраивают CAN-
интерфейс в выпускаемые ими микроконтроллеры Также существует несколь-
ко серийно выпускаемых устройств (особенно популярна микросхема Intel
82527), которые эффективно и с минимальными дополнительными затрата-
ми выполняют функции CAN интерфейса
Аналоговый ввод-вывод
Мир, окружающий микроконтроллер, состоит не только из черного и белого
(единиц и нулей), в действительности там имеется много оттенков серого
цвета (значений между нулем и единицей) Часто микроконтроллер должен
взаимодействовать с аналоговыми устройствами, которые работают с сигна-
лами, имеющими уровень между напряжением питания Vcc и «землей», вво-
дить и выводить такие аналоговые сигналы Многие модели микроконтролле-
ров в различных семействах содержат аналогово-цифровые (ADC —
Analog-to-Digital Converter) и цифрово-аналоговые (DAC — Digital-to-Analog
Converter) преобразователи Этот раздел содержит вводную информацию для
реализации ввода-вывода аналоговых сигналов В нем не будут затрагиваться
вопросы передачи аналоговых данных, которые рассматривались ранее в раз-
деле «Таймеры» этой главы, где была описана процедура чтения и посылки
данных с использованием широтно-импульсной модуляции
80 Часть 1. Введение в микроконтроллеры
Существует три способа ввода анапогового сигнала в микроконтроллер
Первый способ - использование датчика, с помощью которого микроконт-
роллер опредезяет физическое положение движка потенциометра Второй
способ — включение аналогового компаратора, который определяет, нахо-
дится ли значение поступающего напряжения выше или ниже заданного уров-
ня (опорного напряжения) Третий тип — использование микроконтроллера с
интегрированным на кристалле аналоге цифровым преобразователем (АЦП),
который обеспечивает измерение значения поступающего на вход напряже-
ния Каждый из этих источников имеет определенные преимущества для раз-
личных областей применения
В первом способе аналоге цифровое преобразование фактически не реа-
лизуется, а текущее значение сопротивления потенциометра определяется с
помощью ввода-вывода цифровых данных Для определения сопротивления
потенциометра к выводу микроконтроллера подключается простая RC-цепь
(рис 2 45) Сопротивление определяется путем измерения времени, в течение
которого потенциал на конденсаторе остается больше порога переключения
Чем больше сопротивление, тем большее число I будет считано на входе за
время измерения (рис 2 46) Чтобы выполнить измерение, вывод параллель
ного порта переводится в режим выхода, на котором устанавливается I (вы-
сокий потенциал) Конденсатор разряжается через сопротивление Rsub, ко-
торое ограничивает ток, предотвращая короткое замыкание в начале разряда
Когда конденсатор полностью разрядился, выходной драйвер закрывается, и
конденсатор начинает заряжаться через потенциометр Измерение заканчи-
вается, когда напряжение на выводе упадет ниже порога переключения Обыч-
но для измерения времени используется таймер
Vcc
Рис. 2.45. Испопьзование цифрового входа для определения сопротивления
потенциометра
Если проследить за этой операцией с помощью осциллографа, то можно
наблюдать форму сигнала, показанную на рис 2 46 Для определения значе-
Глава 2. Аппаратные средства 81
нии R и С можно использовать выражение ( = 22 х RxC, inel - время
заряда конденсатора Сопротивление Rsub обычно выбирается в диапаюнс от
100 Ом до 200 Ом Эта схема измерения дает не совсем точное значение со-
противления R из-за разброса емкости конденсатора, а также влияния пели-
ненного выходного сопротивления CMOS-входа микроконтроллера Более
точные результаты можно получить, используя прецизионный конденсатор,
которын однако трудно наити и он слишком дорог
Рис. 2.46. Изменение входного потенциала при измерении сопротивления
потенциометра.
Можно задаться вопросом, где и почему используется этот метод, если он
не очень точен’ На практике эта схема используется в приложениях, кото-
рые не требуют высокой точности измерения Данная схема может опреде-
лять относительное положение движка потенциометра Например, в компью-
терах IBM PC такая схема используется для определения текущего положения
джопстика Неточность измерения отражается в том, что пользователя просят
переместить джойстик в крайние положения, чтобы произвести его калиб-
ровку Обычно в такой схеме используется танталовый конденсатор емкостью
0,1 мкФ и потенциометр с сопротивлением I0 кОм, при этом время заряда
составляет около 22 мс Этого значения достаточно, чтобы микроконтроллер
смог измерить его с необходимой точностью, в то же время т«5кая задержка
слишком мала, чтобы ее мог заметить пользователь Использование тантало-
вых конденсаторов 0,1 мкФ наиболее удобно, так как такие конденсаторы
используются для развязки питания, поэтому они всегда имеются в наличии
Проблема заключается в том, что разброс емкостей для танталовых конден-
саторов может достигать 100% от их номинала Это означает, что необходимо
производить калибровку перед использованием такого устройства
Следующий способ аналого-цифрового преобразования, обычно исполь-
зуемый в микроконтроллерах, это аналоговый компаратор напряжений Ком-
паратор представляет собой простую схему, которая сравнивает два напря-
жения входное и опорное (Vrel), и устанавливает на выходе I, если входное
6 Зак 2026
82 Часть 1. Введение в микроконтроллеры
напряжение больше, чем опорное (рис 2 47) Этот способ наиболее удобно
испол1 ювать в таких устройствах, как термостаты, где необходимо контро-
лировать достижение определенного уровня измеряемой величины, которая
задается значением входного напряжения
Выход
компаратора
Рис, 2.47. Сигналы на входе и выходе компаратора
Часто в микроконтроллерах, использующих компараторы, опорное на-
пряжение формируется внутри с помощью резистивного делителя и аналого-
вого мультиплексора, который производит выбор требуемого выходного на-
пряжения (рис 2 48) Такая схема обеспечивает получение некоторого набора
опорных напряжений Используется простой алгоритм перебора набора раз-
личных опорных напряжений до срабатывания компаратора Опорное напря-
жение, при котором происходит переключение компаратора, соответствует
значению поступающего входного напряжения Данная схема дает прибли-
женное значение входного напряжения, так как обычно напряжение Vref
задается с достаточно большим шагом Например, если схема обеспечивает 8
уровней опорного напряжения, то при диапазоне напряжений 5 В шаг соста-
вит более 700м В
Другой способ аналого-цифрового преобразования — это использование
параллельно включенных компараторов (рис 2 49) Этот метод является наи-
более быстрым по сравнению с другими методами преобразования типами
ADC Время преобразования определяется задержкой компараторов и при-
оритетного дешифратора Этот способ относительно дорогой, так как требует
использования большого числа компараторов Например, чтобы получить 8-
разрядную точность преобразования потребуется 256 компараторов
Глава 2. Аппаратные средства 83
Управление
мультиплексором
JL
Аналоговый
мультиплексор
Vout
Рис. 2.48. Получение опорных напряжений с помощью резистивного делите-
ля.
Рис. 2.49. Параллельный аналогово-цифровой преобразователь
В последнем способе аналого-цифрового преобразования используется
компаратор и аналоговый источник напряжения (генератор пилообразного
напряжения), которое линейно увеличивается, начиная с О В и до Усс (рис.
2.50). Эта схема называется интегрирующим АЦП. В начале преобразования
таймер сбрасывается, и на выходе генератора устанавливается 0 В. Затем про-
исходит запуск таймера и генератора Когда напряжение на выходе генерато-
ра превысит значение Vin, таймер останавливается, и вырабатывается сиг-
84 Часть 1. Введение в микроконтроллеры
нал «коней преобразования» (ADC stop), который может вызвать прерыва-
ние микроконтроллера При этом содержимое таймера будет пропорциональ-
но значению напряжения Vin
Старт
Рис. 2.50. Интегрирующий аналогово-цифровой преобразователь.
Этот метод обеспечивает весьма высокую точность преобразования. Одна-
ко при его реализации возникает ряд проблем. Первая — это время, требуе-
мое для преобразования Чем выше напряжение Vin, тем больше время пре-
образования. Некоторые микроконтроллеры имеют встроенные генераторы
пилообразного напряжения, которые обеспечивают разную скорость нарас-
тания при различных уровнях входного напряжения. Однако при увеличении
скорости нарастания снижается точность измерения.
Другая проблема — изменение значения входного сигнала во время пре-
образования. Эта проблема решается путем использования конденсатора,
который быстро заряжается до уровня входного напряжения. Затем напряже-
ние на конденсаторе сравнивается с напряжением на выходе генератора.
Последняя проблема, которую осталось обсудить, это выбор времени пре-
образования при измерении очень быстро изменяющихся сигналов. В приме-
ре, показанном на рис. 2.51, полученная в результате преобразования форма
сигнала существенно отличается от реальной. Объяснение, как правильно
выбрать частоту выборки сигнала, выходит за рамки данной книги. Инфор-
мацию по этому вопросу можно найти в книгах, посвященных цифровой
обработке сигналов.
Взглянув на спецификации микроконтроллеров, можно обнаружить, что
только немногие из них имеют аналоговый выход. Чаще всего микроконтрол-
леры ограничиваются формированием выходного опорного напряжения,
получаемого от резистивного делителя. Причина состоит в том, что разные
Глава 2. Аппаратные средства 85
аналоговые внешние устройства требуют выдачи выходных сигналов с раз-
личными параметрами. Если эти параметры не обеспечиваются выходными
драйверами микроконтроллера, то происходит их перегрузка, в результате
чего уровень выходного сигнала не соответствует требуемому значению. Кро-
ме того, при быстром изменении напряжения в выходной цепи могут возни-
кать отражения, которые также искажают значение выходного сигнала. Обычно
для получения выходного аналогового напряжения используются внешние
цифро-аналоговые преобразователи, цифровые потенциометры, включенные
как делители напряжения или широтно-модулированные импульсные сигна-
лы, отфильтрованные при помощи RC-цепи Эти средства обеспечивают очень
высокую точность выходного напряжения (в диапазоне нескольких милли-
вольт).
Реальный
входной
сигнал
________________I__________________________________________I____________________________________I_______________________________________I_________
Форма сигнала
после
считывания
Рис. 2.51. Неверная выборка сигнала.
Существует также одна простая схема, которая может быть использована
совместно с микроконтроллером для реализации аналогового выхода (рис.
2.52). В этой схеме выводы микроконтроллера используются в качестве выхо-
дов. Значение напряжения, поступающего на вход операционного усилите-
ля, зависит от того, на каких выходах установлен низкий уровень сигнала
(логический 0). Таким образом можно получить различные значения напря-
жения на входе операционного усилителя. Операционный усилитель работает
в режиме аналогового повторителя, обеспечивая развязку цели нагрузки от
резистивного делителя. Значения сопротивлений делителя выбираются в за-
висимости от количества выводов, используемых для управления выходным
напряжением.
Глядя на эту схему можно подумать, что с ее помощью можно получить
выходное напряжение больше, чем напряжение питания, если подключить
резистивный делитель к более высокому потенциалу, чем Vcc. Однако при
этом схема, скорее всего, не будет работать из-за ограничительных диодов,
которые подключены к выводам микроконтроллера, чтобы предотвратить
86 Часть 1. Введение в микроконтроллеры
поступление слишком большого напряжения Для получения более высокого
выходного напряжения следует использовать операционным усилитель в ре-
жиме усиления.
Рис. 2.52. Схема реализации аналогового выхода
Существует много различных способов аналогового ввода-вывода Боль-
шинство микроконтроллеров спроектировано таким образом, чтобы просты-
ми средствами реализовать аналоговый ввод-вывод в случае относительно
медленного изменения аналогового напряжения Например, выборка вход-
ного сигнала в интегрирующих АЦП часто осуществляется просто путем ус-
тановки бита «Старт АЦП» в регистре управления, а после выполнения пре-
образования в этом регистре устанавливается бит «Конец АЦП» Для обработки
высокочастотных аналоговых сигналов следует использовать внешний парал-
лельный АЦП совместно с цифровым процессором сигналов (DSP)
Ведомые устройства
Один из наиболее интересных и полезных режимов работы микроконтролле-
ра — функционирование в качестве ведомого (slave), когда микроконтроллер
подключается к другому процессору как периферийное устройство (рис 2 53)
В этом режиме некоторое количество выводов микроконтроллера выделя-
ется для связи с шиной ведущего процессора При этом ведомый микрокон-
троллер ведет себя как интеллектуальная специализированная микросхема
(ASIC), включенная в систему, которая управляется ведущим устройством.
Одним из приложений, где используется такой режим работы, является
персональный компьютер, в котором микроконтроллер Intel 8042 служит в
качестве интерфейса клавиатуры, а также выполняет некоторые другие фун-
Глава 2. Аппаратные средства 87
кипи Это позволяет процессору просто считывать и записывать данные, не
реализуя протокол последовательного обмена с клавиатурой, коюрый обес-
печивается микроконтроллером.
Рис. 2.53. Микроконтроллер в качестве ведомого устройства
Микроконтроллер может прерывать ведущее устройство, используя одну
из своих линий ввода-вывода для подачи запроса прерывания. В некоторых
применениях ведомые микроконтроллеры могут при определенных условиях
работать в качестве ведущего устройства (в режиме «микропроцессора»), обес-
печивая управление шиной.
Программирование устройств
Часто при разработке различных устройств используются микроконтроллеры
с памятью E(E)PROM. Выше обсуждались преимущества этого типа микро-
контроллеров по сравнению с микроконтроллерами, использующими память
ROM. Недостатком E(E)PROM устройств является го, что их необходимо
программировать.
Это обычно происходит следующим образом: в регистр программатора
загружается значение, которое необходимо разместить по определенному
адресу, затем включается схема, которая пересылает содержимое этого реги-
стра по заданному адресу, проходит некоторое время ожидания, пока завер-
шится процесс программирования выбранной ячейки памяти и, наконец,
выполняется верификация, то-есть проверяется правильность записанного
значения. Программирование всего устройства может занять от нескольких
секунд до нескольких минут в зависимости от размера памяти и алгоритма
программирования.
Часто оборудование для программирования оказывается слишком доро-
гим, особенно для радиолюбителей и предприятий малого бизнеса) Но в
некоторых случаях для программирования требуется весьма простое и дос-
тупное оборудование . Когда будут обсуждаться микроконтроллеры PIC и AVR,
можно будет увидеть, как легко программируются некоторые модели этих
приборов. Существуют также устройства, которые не требуют оборудования
для программирования, например, микроконтроллер Basic STAMP, или имеют
встроенный аппаратно-программный блок, избавляющий от необходимости
88 Часть 1. Введение в микроконтроллеры
использования внешнего оборудования, кроме источника повышенного на-
пряжения для программирования, как микроконтроллеры 68НС05
Очень важный аспект, касающийся программирования устройств, заклю-
чается в том, может или нет устройство быть запрограммировано в системе
(внутрисистемное программирование — ISP). Если микроконтроллер допус-
кает возможность такого программирования, то это означает, что он может
быть смонтирован на плату с пустой памятью программ, которая затем мо-
жет быть запрограммирована без какого-либо влияния на остальные компо-
ненты схемы Это может стать важным обстоятельством при выборе микро-
контроллера. Использование ISP-микроконтроллеров избавляет от
необходимости покупать специальный программатор, дает возможность об-
новлять программное обеспечение без изменения расположенных на плате
аппаратных средств, и позволяет производителям создавать запас готовых
изделий, которые могут легко модифицироваться в соответствии с поступа-
ющими заказами.
Безопасность памяти программ ,
Для многих приложений желательно защитить программный код, записан-
ный в микроконтроллер. Чтобы обеспечить такую возможность, многие мик-
роконтроллеры содержат специальные средства для предотвращения считы-
вания хранящейся в них программы. Часто такая возможность реализуется
путем установки определенного значения конфигурационного бита в про-
цессе программирования. Обычно значение этого бита можно изменить толь-
ко в процессе репрограммирования содержимого памяти микроконтроллера,
например, при ультрафиолетовом стирании содержимого EPROM.
Встроенная защита не может предотвратить все возможности считывания
программного кода. Такое считывание можно произвести во многих лабора-
ториях, выполняющих анализ причин отказов микросхем, причем за очень
короткое время. Чтобы усложнить и сделать эту операцию менее эффектив-
ной, некоторые компании зашифровывают записываемые программы путем
перемешивания команд и включают специальные аппаратные блоки, кото-
рый преобразует перемешанные данные в поток команд процессора.
Вышесказанное не имеет целью убедить Вас вообще не использовать име-
ющиеся возможности защиты памяти программ- Просто Вы должны иметь в
виду, что установка бита защиты не может гарантировать абсолютную защи-
ту программного кода, загруженного в микроконтроллер.
Интерфейсы отладки
Для большинства рассмотренных в книге микроконтроллеров разработаны и
выпускаются схемные эмуляторы ICE (In-Circuit Emulator), предназначен-
ные для отладки проектируемых устройств Эти эмуляторы физически заме-
няют микроконтроллер в проектируемом устройстве и реализуют интерфейс
разработчика с данным устройством, обеспечивая доступ к аппаратным сред-
ствам и программному обеспечению. Часто разработчики эмуляторов обеспе-
Глава 2 Аппаратные средства 89
чивают их интеграцию с системой разработки программного обеспечения
(редактор и компилятор), давая возможность производить отладку в режиме
реального времени, когда исключаются задержки, связанные со стиранием
перепрограммированием памяти или выполнением последовательного вво-
да-вывода (в том числе на светодиодные индикаторы) для определения теку-
щего состояния микроконтроллера Единственной проблемой для потребите-
ля может стать стоимость таких эмуляторов, которая может составлять тысячи
долларов
Некоторые микроконтроллеры содержат последовательные интерфейсы,
специально предназначенные для отладки приложений Эти интерфейсы по-
зволяют считывать и записывать содержимое регистров, памяти программ и
данных, а также обеспечивают управление работой устройства, предоставляя
пользователю возможности удаленного запуска-останова микроконтроллера
и считывания содержимого памяти данных, чтобы проконтролировать ход
выполнения программы При использовании вместе со специализированной
многофункциональной управляющей программой этот тип интерфейса мо-
жет заменить схемный эмулятор при отладке программного обеспечения и
комплексной отладке функционирования всего устройства, обеспечивая при
этом существенную экономию средств Интерфейсы такого типа часто реали-
зуются в сложнофункциональных микроконтроллерах с большим количествам
внешних выводов, но их можно встретить и в некоторых моделях более про-
стых и дешевых микроконтроллерах
В качестве последнего вида средств отладки рассмотрим специальное про-
граммное обеспечение, которое управляет выполнением программы Такая
программа-монитор в действительности выполняет достаточно простые фун-
кции, позволяя запускать, останавливать и модифицировать код прикладной
программы, читать и модифицировать содержимое регистров и памяти дан-
ных, а также осуществлять пошаговое выполнение программ и остановку в
контрольных точках В простых микроконтроллерах с малым объемом памяти
этот метод отладки не используется, но при наличии памяти большого объе-
ма такая отладка вполне возможна, и есть некоторые микроконтроллеры,
которые содержат встроенную программу-монитор
ГЛАВА
3
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Краткое содержание
Средства разработки/Среды
Язык Ассемблера
Интерпретаторы
Языки высокого уровня
Нечеткая логика
Разработка программного обеспечения
Распределение ресурсов
Программы, критичные ко времени
Макросы и условные команды
Резидентный монитор и отладчик
Операционные системы реального времени
Наиболее эффективные варианты применения микроконтроллеров реализу-
ются в тех случаях, когда обеспечивается эффективное взаимодействие аппа
ратного и программного обеспечения Часто проектировщики аппаратной части
не привлекаются к разработке программного обеспечения, так как считает-
ся, что они не очень компетентны в области программирования Но хорошее
понимание того, как программируется устройство, не менее важно, чем по
нимание того, как работают аппаратные интерфейсы Надеюсь, что после
знакомства с этой главой читатель поймет, что аппаратные и программные
средства имеют одинаковую важность для работы микроконтроллеров, и при
разработке этих средств используются похожие инструменты
Глава 3. Программное обеспечение 91
Средства разработки/Среды
Идея единства программного и аппаратного обеспечения систем на базе мик-
роконтроллеров является очень важной Объединение инструментальных
средств разработки программного обеспечения с инструментальными сред-
ствами разработки аппаратного обеспечения может стать важным преимуще-
ством при разработке устройства. Существуют пять различных инструментов,
которые используются для разработки приложений на базе микроконтролле-
ров, и объединение их функций может существенно облегчить процесс раз-
работки.
5 В число пяти основных инструментов разработчика входят редактор ис-
ходных текстов, компилятор/ассемблер, программный симулятор, аппарат-
ный эмулятор и программатор. Хотя не все из этих инструментов являются
необходимыми, и каждый из них может исполняться в отдельности, но их
совместное использование упрощает разработку и отладку приложения.
Редактор используется для создания исходного кода программы. Суще-
ствует множество самых разнообразных редакторов от простых, которые просто
копируют код, вводимый с клавиатуры, в файл, до специализированных
редакторов, реакция которых на нажатие определенных клавиш может про-
граммироваться пользователем.
Например редактор, используемый для написания программ на языке С,
в действительности может выполнять программу «REXX» после каждого на-
жатия на клавишу. Эта программа обрабатывает нажатия клавиатуры и обес-
печивает специальные виды отклика в различных ситуациях. Например, пос-
ле ввода оператора «if», редактор выдаст следующий отклик, который
воспроизводит формат языка С для этого оператора:
if О
{
}
else
{
} /* endif
Такая реакция редактора избавляет от необходимости заботится о пра-
вильном синтаксисе оператора.
Этот редактор работает из командной строки DOS, что делает его менее
полезным в средах с графическим интерфейсом, таких как Windows, так как
данные не могут вырезаться и вставляться стандартным образом. Однако для
разработки приложений на языке С такой редактор достаточно комфортен в
использовании. Важно подчеркнуть, что редактор, в первую очередь, должен
быть удобен для пользователя.
Компилятор/ассемблер используется для преобразования исходного тек-
ста в ассемблерные команды микроконтроллера и затем в формат, который
может быть загружен память программ. Далее речь пойдет об ассемблере и
языках высокого уровня, но пока поговорим об интерфейсе компилятора/
ассемблера.
92 Часть 1. Введение в микроконтроллеры
Интерфейс, о котором пойдет речь, — эго интерфейс между редактором и
компилятором/ассемблером Возможность передавать информацию об ошиб-
ках компиляции и отображать неправильные строки на дисплее может сде-
лать процесс разработки более простым и эффективным Для описанного выше
редактора можно написать REXX-программу, которая в процессе компиля-
ции будет сохранять исходный текст, выполнять компиляцию, находить оши-
бочные строки и выделять их в исходном тексте Фактически эта REXX-npo-
грамма производит комплексную обработку исходного текста
Симуляторы — это программы, которые выполняют откомпилированный
программный код в инструментальном компьютере системы разработки (host)
так, как если бы он выполнялся в целевой системе (target) Это позволяет
осуществлять наблюдение за программой и реакцией микроконтроллера на
различные события Симулятор может быть неоценимым инструментом в
процессе разработки программного обеспечения, позволяя исследовать раз-
личные ситуации, которые трудно воспроизвести на реальной аппаратуре
Чтобы имитировать внешние условия и ситуации, обычно используется
специальный файл входных воздействий Этот файл задает последователь-
ность входных сигналов, поступающих на моделируемое устройство Обычно
это выглядит следующим образом
Шаг BitO Bit1 , Определение входных битов
1 1 1 , Начальные условия - Все единицы
100 0 1 , Имитация сдвига данных
101 0 0
102 0 1
105 1 1 , Переход к следующему биту
106 1 0
107 1 1
И так далее
Разработка такого файла может потребовать много времени и больших
усилий Но для понимания того, как работают микроконтроллер и программа
в определенных ситуациях, использование симулятора и файла входных воз-
действий является наилучшим методом Обычно такой файл не может быть
использован для имитации аналоговых входов
В большинстве случаев следует использовать симуляцию перед сборкой и
включением реальной схемы Лучше сначала имитировать определенную ситуа-
цию в устройстве, чем сжечь его во время испытания Если устройство не рабо-
тает ожидаемым образом, то следует изменить файл входных воздействий и
попытаться понять, в чем состоит проблема, используя для этого симулятор,
который позволяет наблюдать за процессом выполнения программы в отличие
от реальной аппаратуры, где можно увидеть только конечные результаты
Интегрированная система разработки UMPS, описанная далее в этой кни-
ге, использует графический симулятор вместо изменения в файле входных
воздействий, чтобы имитировать подключенное к микроконтроллеру обору-
Глава 3. Программное обеспечение 93
дование Используя эту систему, вы можете проанализировать, как будет ра-
ботать программа при подключенном оборудовании Такой симулятор может
сэкономить многие часы, которые тратятся на создание файла воздействии,
и позволить быстро испытать определенные комбинации входных сигналов,
чтобы выявить ошибку и наити ее причину
Специальная схема, реализующая интерфейс с микроконтроллером в ре-
альном масштабе времени, называется «схемный эмулятор» (1п-Снснй
Emulator — ICE) Эмулятор использует микросхему микроконтроллера, под-
ключенную не к ПЗУ, а к ОЗУ программ, которая выполняет прикладные
задачи с реальной скоростью Многие эмуляторы могуг использоваться для
записи команд, выполняемых процессором в определенное время Это помо-
гает понять, как реагирует процессор на данную ситуацию
Схемный эмулятор имеет два значительных недостатка Первый • цена,
так как настоящий эмулятор стоит тысячу долларов и выше Второй недоста-
ток касается электрического соединения эмулятора с отлаживаемой систе-
мой Используемые для этого эмуляторные вилки имеют непрочные выводы,
которые легко ломаются, особенно если вилка многократно вставляется и
вынимается из разъема Но эти недостатки не столь существенны На практи-
ке хорошо спроектированный эмулятор является мощным инструментом
при разработке приложении
Хотя симуляторы не обеспечивают выполнение программы в режиме ре-
ального времени, многие разработчики предпочитают создавать собственные
файлы входных воздействий и использовать симуляторы для моделирования
работы устройств в процессе их проектирования Такой метод позволяет выя-
вить возможные нарушения функционирования устройства до того, как они
проявятся в редльном изделии Следует также отметить, что разработчику
существенно легче производить отладку программного обеспечения, исполь-
зуя исходный текст, а не файлы, сгенерированные компилятором Этот ме-
тод называется «символической отладкой» Следить за выполнением программы
с помощью исходного текста намного проще, чем контролировать скомпи-
лированный объектный код
Последний инструмент разработчика — это программатор памяти про-
грамм микроконтроллера Хотя некоторые производители микроконтролле-
ров предпочитают выпускать их с масочно-программируемои памятью про-
грамм. они обычно выпускают также аналогичные версии микроконтроллеров
с E(E)PROM памятью для разработки приложении Это значит, что суще-
ствует возможность непосредственного программирования микроконтролле-
ра при разработке приложения
Для некоторых микроконтроллеров требуется специдльный программа-
тор, но чаще всего используются возможности внутрисистемного програм-
мирования 1SP В таком случае программатор является частью проектируемо-
го устройства
Очень важно, чтобы при программировании использовались правильные
данные Это особенно необходимо обеспечивать в устройствах с программи-
руемой конфигурацией, когда неправильная установка битов приведет к тому,
что устройство не будет выполнять заданные функции
94 Часть 1. Введение в микроконтроллеры
Некоторые программаторы реализуют функции схемного эмулятора. При
этом установленный в программаторе микроконтроллер подключается к от-
лаживаемой системе и управляет ее работой аналогично тому, как это вы-
полняется в эмуляторе.
/ •
Язык Ассемблера
Прежде чем начать разработку какого-либо устройства на базе микроконт-
роллера очень важно познакомиться с основами программирования на языке
Ассемблера. Если Вы изучили язык Ассемблера для какого-либо микропро-
цессора или микроконтроллера и освоили процесс разработки ассемблерных
программ, то у Вас не возникнут большие проблемы при написании про-
грамм для другого процессора. Даже если Вы разрабатываете программное
обеспечение на языке высокого уровня, то знание Ассемблера позволит оп-
ределить, какие команды реализует процессор, чтобы понять, что происхо-
дит в системе при выполнении программы
Программирование на языке Ассемблера обычно изучают в школе После
прохождения этого курса о нем обычно не вспоминают или вспоминают с
ужасом Однако при разработке приложений для микроконтроллеров следует
не только освоить этот метод программирования, но и научиться хорошо
понимать, как шаг за шагом выполняется ваша программа, и что при этом
происходит в устройстве.
Чтобы процесс изучения языка, написание и отладка программ на Ассем-
блере был более простым и понятным, используется два приема. Первый —
визуализация процедур выполнения команд процессором. Второй — исполь-
зование методов структурного программирования, чтобы сделать программы
более простыми для чтения и понимания
Визуализацию выполнения команд лучше всего осуществить, используя
структурную схему процессора или микроконтроллера, на которой отмечает-
ся прохождение данных при выполнении каждой команды. В результате обес-
печивается хорошее визуальное представление процесса выполнения команд.
Для всех процессоров, представленных в этой книге, дано такое описание
для каждой команды.
В качестве примера рассмотрим описание команды ADC (Сложение с пе-
реносом) для микроконтроллера 68НС05, структура которого показана на
рис. 3.I
Отметим на этой структуре прохождение данных при выполнении коман-
ды (рис. 3.2) -тч}. R г
Обратите внимание, что на рисунке потоки данных для источника и при-
емника разделены. Таким образом обеспечивается лучшее представление о
том, что происходит в процессоре и какими средствами это обеспечивается.
Полное понимание того, что происходит при выполнении команды очень
важно, так как могут изменяться биты состояния или содержимое некоторых
регистров, на которые данная команда влияет неявно. С помощью этих ри-
сунков проще запомнить, как реализуется команда, поэтому не возникает
необходимость часто заглядывать в руководство по программированию.
Глава 3. Программное обеспечение 95
Рис. 3.1. Структура микропроцессора 68НС05
Рис. 3.2. Структура микроконтроллера 68НС05 с указанием пути прохожде-
ния денных при выполнении команды ADC
96 Часть 1. Введение в микроконтроллеры
Рекомендация о целесообразности использования методов структурного
программирования выглядит не совсем обоснованной, однако применение
некоторых из этих методов делает ассемблерные программы более удобными
для чтения
Первый из этих методов заключается в том, чтобы разделять функцио-
нальные блоки программного текста пустыми строками. Например, если тре-
буется прочесть 8-битное число из порта ввода-вывода микроконтроллера
PIC, а затем выдать значение 0x7F в другой порт, если введенное число рав-
но нулю, и повторить эту процедуру восемь раз, то можно использовать сле-
дующую программу.
movlw 8 ; Цикл 8 повторов
movwf Count
Loop Вход в цикл
movlw 0 ; PortB == 0?
lorwf PORTB, w
btfss STATUS, Z
goto Skip ; Нет, пропустить команды
movlw Ox07F ; Да, Вывести ответ 0x7F
movwf PORTC
Skip
decfsz Count ; Уменьшить Count и если 1= 0 вернуться к Loop
goto Loop
Если добавить пустые строки для выделения функциональных блоков, то
получим следующий вид программы
movlw movwf 8 ; Count ; Цикл 8 повторов
Loop Вход в цикл
movlw 0 PortB == 07
lorwf PORTB, w
btfss STATUS, Z •
goto Skip ; Нет, пропустить команды
movlw 0x07F ; Да, Вывести ответ 0x7F
movwf PORTC
Skip
decfsz Count ; Уменьшить Count и если 1= 0 вернуться к Loop
goto Loop
Теперь выделим условный фрагмент программы, что также упрощает чте-
ние программы: ’ —
movlw 8 ; Цикл 8 повторов
movwf Count
Глава 3. Программное обеспечение
97
Loop I Вход в цикл
movlw 0 PortB == 07
iorwf PORTB, w
btfss STATUS, Z
goto Skip Нет, пропустить команды
movlw OxO7F Да, Вывести ответ 0x7F
movwf PORTC
Skip
decfsz Count Уменьшить Count и если '= 0 вернуться к Loop
goto Loop
Код станет еще ботее удобным для чтения, если убрать все ненужные и
избыточные комментарии В результате получим конечный вариант
movlw 8
movwf Count
Loop , Опросить PortB 8 раз
movlw 0 , Если PortB == 0, то PortC = 0x7F
lorwf PORTB, w
btfss STATUS, Z
goto Skip
movlw 0x07F
movwf PORTC
Skip
decfsz Count
goto Loop
По рассмотрении системы команд и примеров применения каждого мик-
роконтроллера будут даны объяснения, как выполняются команды, указа-
ния, на что следует обратить внимание, и рекомендации, как сделать про-
граммный код более эффективным
И нтерп ретаторы
Некоторые разработчики еще помнят старые времена, когда персональные
компьютеры Apple II или IBM PC программировались с помощью языка BASIC
При этом исходный текст выполнялся непосредственно процессором без
промежуточной компиляции Программа, которая анализирует каждую стро-
ку программы и затем выполняет указанную в ней команду, называется «ин-
терпретатор» Это название отражает принцип ее работы, когда каждая стро-
ка сначала интерпретируется и затем выполняется
Интерпретация программного кода обычно является менее эффективным
способом выполнения Прежде чем выполнить командную строку, требуется
7 Зак. 2 026-
98 Часть 1 Введение в микроконтроллеры
выбрать ее из памяти, проанализировать и только потом реализовать задан-
ную операцию Интерпретируемый код программы всегда будет выполняться
дольше, чем откомпилированный, так как он имеет больший объем Многие
интерпретаторы работают как компиляторы — они сначала конвертируют все
командные строки в «символы» (tokens), затем эти символы используются
интерпретатором для выполнения требуемых функций без необходимости
обработки каждой строки отдельно Интерпретаторы, которые сначала ком-
пилируют программу в символы, работают намного быстрее, чем те, кото-
рые этого не делают
Если Вы знакомы с микроконтроллером Parallax BASIC Stamp, который
упоминался ранее в этой книге, то Вы, вероятно, думаете, что он работает
как BASIC-интерпретатор Действительно, при использовании этого микро-
контроллера подключенный к нему инструментальный компьютер преобра-
зует программный код в символы, которые загружаются во внутреннюю па
мять программ EEPROM После загрузки в EEPROM эти символы
используются для выбора подпрограмм, обеспечивающих выполнение про-
граммы
Некоторые микроконтроллеры Имеют встроенный интерпретатор напри-
мер, Intel 8052 содержит встроенный интерпретатор языка BASIC и память
RAM для загрузки исходного текста Эти интерпретаторы не преобразуют текст
в символы, поэтому работают медленно и требуют большого объема памяти
для хранения исходных программных строк Этот исходный программный код
может быть использован для отладки прикладной программы непосредствен-
но внутри микроконтроллера
Языки высокого уровня
Для программирования микроконтроллеров можно использовать различ-
ные языки высокого уровня Термин «язык высокого уровня» служит для обо-
значения языков, используемых для написания легкочитаемых программ,
которые конвертируются (компилируются) в язык ассемблера, а затем пре-
образуются в объектный код (биты и байты) для их выполнения микрокон-
троллером
Эго обычные языки общего назначения, которые конвертированы («пор-
тированы») для создания объектного кода, выполняемого имеющимся в
микроконтроллере процессором, и обеспечивают реализацию некоторых спе-
цифических функций микроконтроллера Имеется множество компилято-
ров, разработанных для различных микроконтроллеров, причем эффектив-
ность объектного кода, который они генерируют, варьируется от очень
плохой до очень хорошей Лучшими являются компиляторы, которые пре-
доставляют пользователю большую часть ресурсов микроконтроллера Эф-
фективность полученного объектного кода определяется объемом занимае-
мой памяти программ, требуемым объемом оперативной памяти для
хранения данных, и количеством ресурсов, необходимых для поддержания
откомпилированного кода
Г лава 3. Программное обеспечение 99
Наиболее популярные языки высокою уровня - эю С. BASIC и Forth
Данные языки доступны для большинова микрокодiрол леров, описанных в
эгои книге Существуют также некоюрые сиециали шрованные языки для
определенных типов микроконтроллеров, которые не являются универсаль-
ными Языки программирования, используемые для микроконтроллеров, могут
тначительно отличаться от стандартных вариантов, даже когда они имеют
одинаковые названия
Основные характеристики я паков высокою уровня
Наличие встроенных функции (например, консольный ввод-вывод) с
подключаемыми библиотекам и
Разнообразные типы данных (S-. 16-, 32-битные целые и с плавающей
точкой)
Выполнение арифметических операции с использованием стека
«Локдтьные» и «глобальные» переменные
Указатели и структуры данных
Распределение памяти
Доступ к аппаратным регистрам
Символическая информация для симулятора/эмулятора
Все эти характеристики обеспечиваются в стандартной среде программи-
рования, функционирующей на персондльных компьютерах и рабочих стан-
циях Однако реализация этих характеристик может быть проблематичной во
встраиваемых микроконтроллерах, которые обладают следующими особен-
ностями
Ограниченный объем памяти программ ROM
Ограниченны!! объем памяти данных RAM
Отсутствие BIOS или операционной системы
Переопределяемый ввод-вывод (когда вывод может использоваться как
цифровои/аналоговыи/последовательныи вход-выход)
Эти особенности могут ограничить возможность применения стандарт-
ных языков высокого уровня и встроенных библиотек Например, функции,
встроенные в библиотеки, которые полезны для некоторых приложении,
во многих других случаях могут оказаться невостребованными В языке С
стандартные библиотеки содержат функции для консольного ввода-выво-
да. переноса данных, математических операции, преобразования данных и
т д Хотя все эти функции являются полезными, вряд ли найдется приложе-
ние, использующее все эти функции одновременно Это означает, что про-
грамма, скомпонованная с библиотекой, будет содержать неиспользуемые
функции В персональных компьютерах, имеющих, по существу, неограни-
ченный объем памяти, так как сегменты прикладных программы могут заг-
ружаться и выгружаться в память по мере необходимости, не возникает
проблем с хранением библиотек Однако во встроенных микроконтроллерах
с ограниченным объемом памяти использование библиотек может стать
весьма проблематичным
100 Часть 1. Введение в микроконтроллеры
Другая проблема со стандартными библиотеками заключается в том, что
разные микроконтроллеры обладают различными особенностями. Например,
некоторые модели микроконтроллера содержат встроенный последователь-
ный порт, тогда как другие его не имеют. Часто в таких случаях функция
сначала проверяет наличие оборудования с определенными характеристика-
ми, а затем выполняет необходимую программу. При этом ухудшается общая
эффективность программы, так как используемые функции требуют боль-
ший объем памяти и большего времени для их на выполнения.
Эти проблемы можно решить путем анализ# использования имеющихся в
библиотеке функций и компоновки в программный код только гех из них,
которые необходимы для конкретного применения и учитывают специфику
используемого микроконтроллера. Часто в микроконтроллерах компоновка
различных объектных файлов (которыми в действительности являются биб-
лиотеки) не применяется. Вместо этого весь код компилируется одновремен-
но, как часть одной программы, а включение в объектный код требуемых
фра1 ментов реализуется с помощью условной компиляции.
Использование слишком большого числа различных типов данных может
вызвать проблемы из-за отсутствия свободной памяти при исполг ’овании 8-
разрядных микроконтроллеров. Для обработки данных с разрядностью более
8 бит необходимо вводить дополнительные команды для выполнения <адан-
ных операции. Например, выражение, написанное на языке С :
FirstVar = FirstVar + SecondVar;
i
выполняется микропроцессором 8051 с помощью следующей последователь-
ности команд, выполняющими обработку 8-разрядных данных:
mov A, FirstVar
add A, SecondVar
mov FirstVar, A
; Выбрать первую переменную
; Сложить со второй переменной
При использовании 16-разрядных переменных программный код услож-
няется:
mov A, FirstVar ; Сложить младшие 8 бит
add A, SecondVar
mov FirstVar, А
mov A, FirstVar +1 ; Сложить старшие 8 бит
addc A, SecondVar + 1 ; Сложение с переносом
mov FirstVar + 1, А
Этот программный код реализуется микроконтроллерами, которые вы-
полняют команды сложения с переносом (addc). Для микроконтроллеров, не
выполняющих команды сложения с переносом, программный код еще боль-
ше усложняется:
mov A, FirstVar
add A, SecondVar
mov FirstVar, A
; Сложить младшие 8 бит
Глава 3. Программное обеспечение 101
jnc Skip ; Если перенос не установлен, то’
пропустить увеличение
inc FirstVar + 1 ; Увеличить старшие 8 бит результата
Skip
mov A, FirstVar + 1
add A, SecondVar + 1
mov FirstVar + 1, A
В данном примере представлен относительно простой вариант выполне-
ния таких операций. Если операция становится более сложной (например,
«FirstVar = SecondVar + (ThirdVar * FourthVar)»), то усложнение программ-
ного кода имеет экспоненциальный характер При этом использование дан-
ных большой разрядности может привести к чрезмерному замедлению вы-
числений или потребовать большего объема памяти, чем имеется в системе.
Операции над числами, имеющими разрядность больше базовой (8 бит),
часто реализуются с помощью библиотечных функций, которые увеличива-
ют время выполнения и объем требуемой памяти. Для многих применений
весьма полезно использование 16-разрядных данных, обработка которых обес-
печивается с помощью небольшого увеличения объема программного кода и
памяти данных. В тоже время 16-разрядные данные обеспечивают достаточно
большой диапазон представления обрабатываемых данных. При правильной
организации вычислений обработка данных практически для всех встроен-
ных приложений, использующих 8-разрядные микроконтроллеры, может быть
выполнена с использованием 8-и и 16-и разрядных целых чисел.
В сложных операциях (таких как «FirstVar = SecondVar + (ThirdVar *
FourthVar):») программный код может быть реализован с помощью ряда сте-
ковых операций.
push SecondVar
push ThirdVar
push FourthVar
mul
addv
pop FirstVar
Эти стековые операции не являются командами процессора, а представ-
ляют последовательность операций, обеспечивающих получение необходи-
мого результата. Компиляторы часто производят оптимизацию этой последо-
вательности операций, прежде чем преобразовать их в команды процессора. В
некоторых процессорах такой код может быть очень эффективным. В зависи-
мости от качества компилятора полученный объектный код может быть так-
же эффективен, как код, написанный вручную, или в 100 раз (по количеству
требуемых команд и циклов их выполнения) менее эффективным.
Для некоторых компиляторов представление реализуемой процедуры с
помощью нескольких командных строк может быть более эффективным по
сравнению с их представлением в виде одной строки. Например, процедура,
описанная строкой
102 Часть 1. Введение в микроконтроллеры
FirstVar = SecondVar + ( ThirdVar * FourthVar ) ;
более эффективно реализуется в виде следующей последовательности опера-
ции"
Temp = ThirdVar * FourthVar;
FirstVar = SecondVar + Temp;
Другое важное соображение касается того, как компилятор преобразует
числа и Обрабатывает промежуточные переменные Если в приведенном выше
примере переменная «FirstVar» не Определена как порт ввода-вывода, то можно
представить программный код в следующем виде"
FirstVar = ThirdVar * FourthVar;
FirstVar = FirstVar + SecondVar;
Такое представление является оптимизацией программы, так как компи-
лятор учитывает, что переменная «FirstVar» не используется при выполне-
нии операции, и ее можно использовать для хранения промежуточных ре-
зультатов. Проблемы могут возникнуть, если переменная «FirstVar» служит
для представления содержимого регистров ввода-вывода. В этом случае запись
промежуточного результата в качестве переменной «FirstVar» может быть
воспринято внешним оборудованием как вывод окончательного результата.
Во многих языках высокого уровня существует два типа переменных.
«Глобальные» переменные определены для использования в течение всей
программы, и их значения не могут переопределяться. В качестве глобальных
обычно задаются переменные, которые используются в основном теле про-
граммы или требуются при выполнении многих подпрограмм (в этом случае
передача значения переменной в качестве параметра подпрограммы не эф-
фективна). Глобальные переменные — это единственный тип переменных,
используемых при программировании на языке ассемблера до тех пор, пока
не будут определены локальные переменные, вводимые вручную.
«Локальные» («автоматические») переменные используются при выпол-
нении конкретной подпрограммы и создаются при обращении к ней. Назна-
чение одной локальной переменной в двух подпрограммах, которые не вло-
жены друг в друга. Означает, что компилятор будет использовать только одно
значение переменной. Обычно локальные переменные загружаются в стек
при вызове подпрограммы и извлекаются из него, когда управление возвра-
щается вызывающей программе. Значение локальной переменной теряется
после выхода из подпрограммы. Параметры, передаваемые подпрограмме,
обычно (но не всегда) являются локальными переменными. Это означает,
что Они могут модифицироваться при выполнении подпрограммы, но их
первоначальные значения, передаваемые подпрограмме, будут сохраняться.
Указатели и структуры данных являются важными средствами повыше-
ния эффективности программирования при использовании больших объе-
мов памяти. Указатели обычно используются в системах, где память является
управляемым ресурсом. Обычно они не используются при программирова-
Глава 3. Программное обеспечение 103
нии микроконтроллеров, имеющих малый объем памяти При разработке
прикладных программ для этих микроконтроллеров вместо указателей ис-
пользуются другие методы Основной метод замены указателей заключается в
создании массива в начале раздела памяти, который предполагается исполь-
зовать Затем для обращения к любому элементу в этой памяти используются
индексы
Организация структур данных очень полезна при многих применениях мик-
роконтроллеров Структурой данных называется блок памяти, который исполь-
зуется для определения стандартной записи данных Например, структуру про-
цессорной команды на языке С можно определить следующим образом
struct instruct {
int address,
char instruct,
int value,
};
// Формат команды
// Адрес команды
// Команда
//16- битные данные
Обычно на структуру ссылаются с помощью указателя, но те же данные
можно поместить в массив 16 разрядных слов (целочисленные данные типа
int на языке С) и ссылаться на него при помощи индекса Чтобы выбрать
необходимый элемент в массиве данных, следует к значению индекса, зада-
ющего адрес начального элемента массива, прибавить смещение, указываю-
щее позицию выбираемого элемента
Покажем, как это реализуется на практике Если требуется выбрать неко-
торую величину из области данных, то при использовании указателя необхо-
димый программный код имеет следующий вид
struct instruct * Ptr, // Определение указателя на структуру
। = Ptr -> value, // Прочесть «value» из текущего элемента
При организации массива эта процедура выглядит следующим образом
struct instruct Array[100], // Определение массива структур
i == Array[ Index ] value,
Этот код немного сложнее кода с указателем, но имеет одно преимуще-
ство в нем не используется указатель, за которым необходимо следить, что-
бы он всегда корректно обращался к требуемому элементу структуры
Другая структура данных, которую необходимо рассмотреть — это таблица
Таблицу можно представить как одномерный массив неизменяемых строк
данных Обычно это информация о состоянии системы или сообщение для
пользователя На языке С это выглядит следующим образом
char Greeting [13] = “Hello there I”,
104 Часть 1. Введение в микроконтроллеры
Компилятор языка должен разместить эти таблицы в памяти программ
(ROM), чтобы сохранить свободной оперативную память RAM, при исполь-
зовании которой потребовалось бы размешать в ней элементы массива и про-
изводить их инициализацию Информация в таблице выбирается как массив,
идентичный массивам, считываемым из RAM.
В микроконтроллерах программный код должен иметь доступ к аппарат-
ным регистрам. Обычно это делается двумя методами. Первый — разрешить
вставку ассемблерных инструкции в тело программы, написанной на языке
высокого уровня Второй — позволить пользователю определить некоторые
позиции в адресном пространстве данных для обращения к этим регистрам.
Оба метода является отклонением от стандарта языка, принятого для персо-
нальных компьютеров и рабочих станций Но эти методы обычно поддержи-
ваются языками высокого уровня, используемыми для программирования
микроконтроллеров.
Последнее, что осталось обсудить, это способ передачи символической
информации к симулятору или эмулятору. Символическая информация — это
ссылки на используемые строки, метки, переменные и указание на их разме-
щение в памяти. Эта информация используется симуляторами и эмуляторами,
чтобы отображать выполнение исходного программного кода. Таким образом
отладка ведется на уровне исходного текста, а не на уровне ассемблера.
Не следует полагать, что все компиляторы выдают одинаковую символи-
ческую информацию (или выдают ее вообще). Может сложиться такая ситуа-
ция, когда не удается найти версию компилятора для выбранного языка,
которая передавала бы необходимую символическую информацию для ис-
пользуемого симулятора.
Существует ряд основных особенностей языков высокого уровня, которые
следует учитывать при их выборе для программирования микроконтроллера
Приведенные здесь комментарии касаются как проектирования программ-
ного обеспечения, так и особенностей функционирования микроконтролле-
ра. Учет этих особенностей поможет выбрать наиболее эффективный вариант
компилятора.
Остается еще один вопрос: зачем вообще использовать язык высокого уров-
ня? Существует несколько причин для этого.
Первая — переносимость кода. При использовании языков высокого уровня
существует множество готовых программ и алгоритмов, которые можно не-
посредственно вставить в разрабатываемую прикладную программу. Может
возникнуть необходимость переноса программ на другие микроконтроллеры
данного семейства или на другие семейства микроконтроллеров. При исполь-
зовании языков высокого уровня такой перенос выполняется намного проще.
Другая причина, почему стоит разрабатывать приложение на языке высо-
кого уровня — отсутствие ограничений, свойственных программированию на
ассемблере. При этом пользователь получает различные дополнительные воз-
можности, например, автоматически вводить в программу коды сложных
операций или производить эффективный контроль синтаксических ошибок
Необходимо отметить, что программная реализация сложных операций из-
за трудности и объемности программирования на языке Ассемблера может
Глава 3. Программное обеспечение 105
привести к менее эффективному про|раммному коду, чем код. полученный
компилятором с языка высокого уровня
Последняя п вероятно наиболее важная причина использования языков
высокого уровня — необходимость щыдержки приложения Часто требуется
модифицировать или отладить написанным код через несколько месяцев или
лет При разработке программ ни ямяке высокого уровня эга задача значи-
тельно упрощается
Нечеткая логика
Есчи Вы когда-нибудь слушали курс теории автоматического управления, то
возможно помните, как трудно было его изучать, и как сложно представить
реальное протекание описываемых процессов Например, достаточно трудно
представить работу реального устройства по размещению полюсов на фазо-
вой диаграмме Современное решение ыдачи управления процессами состо-
ит в том. чтобы использовать цифровой сигнальным процессор для реализа-
ции алгоритмов теории управления с помощью обработки чисел с плавающей
точкой Однако такое решение столь же неэффективно, как попытка понять
классическую теорию управления От проектировщика в этом случае требует-
ся много усилии, чтобы разработать атгорит м, обеспечивающим правильным
отклик разрабатываемой системы в возникающей ситуации
Дчя человека очень важно визуализировать проблему или ситуацию, что-
бы понять, что происходит в системе, и найти правильное решение Тради-
ционная теория управления, преподаваемая на 3-ем или 4-ом курсе универ-
ситета, предлагает только математические методы решения, которые очень
трудно визуализировать
Существует очень интересный нетрадиционным метод управления систе-
мами, который называется «нечеткая юшка» Нечеткая логика может рас-
сматриваться как расширенным вари шт Булевой лотки, где логические пе-
ременные имеют ряд значении в диапазоне между 1 и 0 Обработка
поступающих входных переменных производится таким же способом, как в
Бучевой логике Однако получаемым при этом результат будет также пред-
ставлен не в двоичном форме
Многие по”..ыют, что нечеткая чогика является недавним изобретением,
однако впервые она описана в 1965 году — более 30 чет назад Главная причи-
на тог^, что нечеткая чогика кажется недавним изобретением, заключается в
T^\i, что ее почти полностью игнорировали в Северной Америке В Азии (осо-
бенно в Японии), нечеткая логика стала важной технологией, используемой
в многих приложениях, от термостатов в кондиционерах до рекомендации,
когда и как часто следует кормить детей
Изобретатель нечетной логики профессор Лофти Задех из университета
Беркли определил характеристики нечетких систем следующим образом
1. В нечеткой логике точное утверждение (Истинно — Ложно) является пре-
дельным случаем приближенного утверждения
2. В нечеткой логике все утверждения даются в относительном представле-
нии (скорее Истинно, чем Ложно)
106 Часть 1. Введение в микроконтроллеры
3. Любая логическая система может быть представлена в терминах нечеткой
логики («фаззифицирована»).
4. В нечеткой логике функционирование системы определяется набором «не-
четких» (вероятностных) правил (преобразований), которые оперируют
с набором нечетких входных переменных
5. Логический вывод реализуется с помощью последовательности вероятно-
стных преобразований.
Чтобы объяснять, как определить нечеткую логическую систему, рассмот-
рим классический пример системы управления перевернутым маятником (рис
3 3) Цель управления системой состоит в том, чтобы, используя инерцию,
Удержать груз на конце маятника в вертикальном положении с помощью
перемещения тележки назад или вперед Чтобы практически познакомиться
с решением данной задачи, попробуйте взять карандаш и удержать его вер-
тикально на одном из пальцев (без предварительной тренировки это удается
не более пяти секунд).
Рис. 3.3. Система управления перевернутым маятником.
При разработке нечеткой системы управления в первую очередь необхо-
димо произвести «фаззификацию» системы Это делается путем определения
вероятности появления различных выходных значений в зависимости от по-
ступивших входных значений сигналов В данном примере, выходными пара-
метрами являются скорость и направление движения тележки, а входными —
угловое положение маятника и его угловая скорость
Для каждой входной переменной определяется «нечеткое» множество ее
состояний («зон»). Выходным параметром является текущее положение те-
лежки. Таким образом, можно определить положение тележки как пять раз-
личных позиций, указывающих находится ли тележка в «центре», «рядом»
или «далеко» от центра. «Зоны» должны покрывать все части базовой пере-
менной (ось X на рис. 3.4). Тоже самое необходимо реализовать для угла поло-
жения маятника и его угловой скорости
Когда входные переменные «фаззифицированы», разрабатывается набор
правил, определяющих величину выходного отклика на данные условия Как
показано на рис. 3 4, позиция тележки может быть в «центре» или «рядом»,
это означает, что множество правил могут иметь место для данного условия
Это может показаться необычным, но для нечетких систем это нормально С
учетом этого множества правил вычисляется отклик
Глава 3. Программное обеспечение 107
——— «Центр»
Рис.3.4. Диаграмма выходных зон для маятника.
Некоторые правила для этой системы можно сформулировать в следую-
щем виде.
1. if Angle = Vertical AND Alignlar_Speed = Stopped AND Pos = Centre then
Speed = 0 (если Угол = Вертикаль AND Угловая скорость = Останов AND
Позиция = Центр, то Скорость = 0).
2. if Angle = -Lean AND Angular_Speed = -Slow AND Pos = Centre then Speed
= -Slow (если Угол = -Наклон AND Угловая скорость = -Низкая AND
Позиция = Центр, то Скорость = -Низкая)
Аналогичным образом Moiyr быть сформулированы и остальные правила.
Для их определения могут использоваться различные методы, например пра-
вила типа «если — то», приведенные выше, или модифицированные карты
Карно.
Когда правила определены, производится вычисление выходных перемен-
ных при различных значениях входных пременных. Если посмотреть на пра-
вило номер 2, то возможное значение отрицательного угла отображается,
как показано на рис. 3.5. Значение этого угла равно нечеткому значению 0,4.
Теперь, это значение объединяется с помощью операции Логическое И по
правилу номер 2 со значениями «AngtilarSpeed» («Угловая скорость») и «Pos»
(«Положение»), чтобы получить окончательный результат. Пои выполнении
операции И нечеткое значение одной переменной (0,4 для угла в этом при-
мере) сравнивается с нечеткими значениями других переменных, и в каче-
стве результата используется наименьшее из значений переменных.
Логические операции ИЛИ и НЕ также реализуются в нечеткой логике.
Для операции ИЛИ результатом будет максимальное значение входных пере-
менных. При операции НЕ текущее значение переменной вычитается из 1, и
полученная разность является результатом. Все Булевы преобразования и за-
коны (например, ассоциативность) применимы к нечеткой логике, поэтому
результат вычисляешя достаточно просто.
108 Часть 1 Введение в микроконтроллеры
Рис. 3.5. Нечеткое значение углового положения маятника
Это значение затем используется, чтобы определить вес выходной вет-
чины Так как для вычисления выходной величины используются несколько
правил, то полученные выходные значения комбинируются, образуя окон-
чательный результат
Для примера с перевернутым маятником на рис 3 6 показано, что поу-
чается, когда удовлетворяются два правила и комбинируются два весовых
значения выходной величины Выходное значение может располагаться где-
либо в закрашенной области, но в качестве фактического выхода выбран
центр масс
0 Скорость
Центр
массы
Рис. 3.6. Нечеткий результат для текущего угла в задаче о перевернутом
маятнике
Это все, что касается использования нечеткой логики Конечно, данное
объяснение и простои пример не дают полной картины, как работает этот
метод управления Но это намного проще, чем объяснять, как функциониру-
ет классическая система управления, описание которой, вероятно, заняло
бы целую книгу
Глава 3. Программное обеспечение 109
Разработка програмного обеспечения *
Как было отмечено во Введении, выбор того ити иного способа создания про-
граммного обеспечения должен производиться пользователем с учетом особен-
ностей разрабатываемого приложения В злой паве представлены различные ас-
пекты разработки программного обеспечения для микроконтроллеров
При разработке прикладного программного обеспечения многие пользо-
ватели сначала разрабатывают программы работы периферийных устройств,
затем определяются логические функции для всего приложения Эти функ-
ции определяют, как используются периферийные элементы в данном при-
ложении Такой способ разработки называется «восходящим» проектирова-
нием (разработка «снизу-вверх»)
Можно использовать «нисходящий> способ проектирования (разработка
«сверху-вниз») или что-то среднее между этими двумя способами Каждый
разработчик сам выбирает удобный хля себя стиль программирования
Распределение ресурсов
Если до этого Вы писали программы хля персональных компьютеров или
рабочих станций, то представляете процесс распределения ресурсов не в том
виде, как он выполняется для микроконтроллеров В компьютерах и рабочих
станциях использование ресурсов минимизируется, чтобы получить эффек-
тивную (быструю и маленькую) прикладную программу
В мире микроконтроллеров имеется конечное количество ресурсов Под
ресурсами в первую очередь понимается объем память данных RAM и дос-
тупные пользователю аппаратные средства (периферийные устройства) В ком-
пьютерах и рабочих станциях объем памяти фактически не ограничен (осо-
бенно, если используется виртуальная память на диске), а доступ к
аппаратным ресурсам обычно происходит через BIOS или подпрограммы
операционной системы Поэлому лишь небольшая часть исходного текста
прикладной программы посвящена рехлизации доступа к аппаратуре
При разработке приложении хля микроконтроллеров существует несколько
правил, которые следует выполнять, чтобы объем используемых ресурсов не
превысил доступный предел
1. Использовать только один вид интерфейса с аппаратными средствами (вне-
шними устройствами) Применение различных интерфейсов создает про-
блемы, если потребуется подключать другие типы внешних устройств
2. Идентифицировать глобхльные переменные, специфичные для подпрог-
рамм, и не использовать их где-нибудь еще в коде
3. Использовать везде, где возможно, локхльные переменные (это можно
реализовать только в языках высокого уровня)
4. Если предполагается наличие временно используемых переменных, то про-
грамма должна обеспечить их универсальное использование
Следование этим правилам при разработке прикладных программ избавит
Вас в дхльнеишем от проблем, связанных с устранением трудно выявляемых
неустойчивых ошибок в программе
110 Часть 1. Введение в микроконтроллеры
Программы, критичные ко времени
Хотя микроконтроллеры имеют много встроенных аппаратных средств для
выполнения точных временных операции, существуют случаи, когда необхо-
димо создать программный код, который будет производить операции ввода-
вывода по точному графику Примером этого может служить управление асин-
хронным последовательным обменом без использования аппаратных средств
последоватезьной связи. Это означает, что интервалы времени между посыл-
кой или опросом битов должны быть точно выдержаны
Первое что приходит в голову — это испотьзование таймера и прерыва-
ний, но такой способ часто не дает необходимой точности для разрабатыва-
емого приложения Рассмотрим пример программы для чтения-записи пос-
ледовательных данных со скоростью 9600 бод, которая реализуется
микроконтроллером, имеющим длительность командного цикла 1,0 мкс. При
иллюстрации некоторых возникающих проблем предположим, что все ко-
манды выполняются за один цикл, кроме команд переходов, которые зани-
мают три цикла
Скорость 9600 бод соответствует периоду времени 104,167 мкс. Это озна-
чает, что временной интервал для чтения и записи данных должен занимать
точно 104 цикла (ошибка порядка 0,16%) Пусть для чтения данных (приема)
используется программный код:
mov Count, 8
Loop ; Получить 8 бит и сохранить в «Char»
mov A, Dlay ; Задержка на 104 цикла
DlayLoop
dec A
jnz DlayLoop
rr Char , Сдвинуть “Char” вправо ; - Последний прочитанный бит теперь на 6-ой позиции
mov A, Port ; Получить данные из порта А
and A, 0x001 ; Проверить бит 0 в порте А
jz Skip
or Char, 0x080 ; Установить старший бит в Char
Skip
dec Count ; Прочитано 8 бит?
jnz Loop ; Если «не ноль», то «нет»
Теперь надо определить значение переменной «Dlay».
Сначала вычислим «собственное» время цикла — время, требуемое для
организации его запуска. Глядя на приведенную программу, можно заметить
следующую проблему существует разница в один командный цикл между
двумя ветвями программы — когда бит установлен в 1 или 0
Если входной бит установлен в 0, то выполняется переход по команде «jz»
(условие истинно), который занимает три командных цикла. Если этот бит
установлен в 1, то команды «jz» (условие ложно, и переход не производится)
Глава 3. Программное обеспечение 111
и «01» выпо тяннся з.1 два командных никла Чтобы выполнение прсмраммы
Bcei га занпма ю о inii.iKOBoe время, необходимо добавить две команды «пор»
после команды «01 Char, 0x080»
После згою собственное время программною цикла сосшвш 14 команд-
ных циклов Необходимо дополнительно выполнить 90 циклов для реалиы
цпи требуемой задержки Каждый проход программы задержки 1ребуегче1ы-
ре цикла (о ши для команды «dec А» и три -для команды «|iiz DiayLoop»)
Таким образом значение «Dlay» следует принять равным 23 (при лом про-
грамма задержки будет пройдена 22 раза), а общее время задержки содержит
88 командных циклов Далее прибавляем к атому 13, и все вместе сосывит
101 командный цикл (ошибка 2 98%) Добавляя три команды «пор» или один
переход получаем точно 104 командных цикла
Чтобы определить, какой уровень ошибки являемся приемлемым, необ-
ходимо понимание того, что выполняет программа Для асинхронною интер-
фейса эта ошибка умножается, как минимум, на десять, так как переданмся
восемь бит данных, один старт-бит и один стоп-бит Таким образом ошибка
в 0 S6% при передаче одного бита приводит к ошибке 8.6% при передаче
всего пакета который имеет длину 10 бит Вероятно, это приемлемо Ошибка
в 2.98% на один бит приведет к почти 30% ошибке в конце передачи байта,
чго может быть неприемлемо для ряда приложении
Создание программы для последовательной передачи (записи) данных во
многом аналогично созданию программного кода для приема (чтения), но с
одним важным замечанием Каждое событие — вывод 1ипи 0 цыжно проис-
ходить в течение одного и того же промежутка времени, иначе приемник
может пропустить данные
Ниже дан пример программного кода для передачи байта со скорооью
9600 бод
mov Char, 8
Loop Вывести 8 бит
mov A, Dlay Задержка на 104 цикла
DiayLoop
dec A
jnz DiayLoop
mov A, Char Вывести 0 или 1
and A, 1 Послать младшие бит первым
P SendZero Вывести 0
or Port, 2 ; Использовать бит 1 для вывода
goto SentBit
SendZero Вывести ноль
and PortO, OxOFD
SentBit
rr Char Поместить следующий бит на место младшего
dec Count Сделать 8 раз
jnz Loop
112 Часть 1. Введение в микроконтроллеры
В примере чтения поступающие данные опрашивались водной точке про-
граммы. При записи передаваемые данные выдаются в двух разных точках
Значение I выдается на три цикла раньше, чем значение 0. Это можно легко
исправить путем введения двух команд «пор» перед выполнением команды
«or Port, 2». Однако в этом случае при посылке 0 переход к метке «SentBit»
реализуется на три команды раньше, чем при посылке I. Можно поставить
команду безусловного перехода «goto SentBit» следом за командой «and PortO,
OxOFD». В таком случае при любом значении данных они будут поступать на
выход порта в течение одного и того же числа циклов после начала процеду-
ры «Loop».
После того, как все возможные ветви программы сбалансированы по вре-
мени выполнения, и вывод данных обеспечен в одни и те же моменты вре-
мени, можно произвести расчет параметра «Dlay», как это было выполнено
в примере чтения данных.
Этот пример вероятно покажется несколько надуманным и чрезмерно
сложным. В действительности же он является относительно простым, если
учесть как реально выполняются в микроконтроллерах командные циклы и
условные ветвления. Некоторые процессоры имеет гораздо более широкий
диапазон требуемых командных циклов, чем принято в рассмотренных при-
мерах.
В области приложений, требующих точного учета времени выполнения
программ, использование RISC-системы команд и Гарвардской архитекту-
ры может дать определенные преимущества. В этом случае команды загружа-
ются в течение одного цикла (обычно при выполнении предыдущей коман-
ды) и выполняются в следующем цикле. Поэтому разница во времени
выполнения команд оказывается существенно меньше, и разработка про-
граммного обеспечения для формирования необходимых задержек значительно
упрощается.
Макросы и условная компиляция
Применение макросов и условной компиляции процедур позволяет упростить
разработку и чтение (а значит, и понимание) программ. Эти средства позволя-
ют писать обобщенный программный код. который может быть использован
для многих специфических случаев, вместо того, чтобы создавать специальное
программное обеспечение для каждого из этих случаев отдельно.
Макрос может рассматриваться как функция, которая замещает в про-
грамме вызывающий ее оператор (макровызов), в то время как подпрограм-
ма размешается вне основного программного кода. Например, при програм-
мировании ЖКИ-интерфейса, который требует подачи тактового сигнала Е,
можно использовать код:
push A ; Сохранить аккумулятор
mov A, 0x0001 ; Установить высокий уровень сигнала Е
or Port, A 1
xor Port, A ; Установить снова низкий уровень сигнала Е
pop A ; Восстановить аккумулятор
Глава 3. Программное обеспечение 113
Если эта процедура используется многократно, то исходный текст програм-
мы становится громоздким и трудным для понимания Чтобы упростить исход-
ный текст, приведенный программный код можно представить в виде макроса:
pulse ^E macro ; Импульс по линии «Е»
push А ; Сохранить аккумулятор
mov А, 0x0001 ; Установить высокий уровень сигнала Е
or Port, A
xor Port, A ; Установить снова низкий уровень сигнала Е
. pop A
macroend
Теперь каждый раз, когда надо сформировать импульс на линии Е, вы-
шеприведенный код будет вставлен в исходный текст вместо макровызова.
pulse_E
Макросы могут также содержать параметры. Если в приведенном примере
требуется обеспечить выдачу импульса на произвольный вывод порта, то сле-
дует выполнить необходимые манипуляции с соответствующим битом в ре-
гистре порта. Для этого макрос преобразуется:
pulse macro bit ; Импульс на линии E
push A ; Сохранить аккумулятор
mov A, 1 « bit ; Определить бит
or Port, A ; Установить бит в 1
xor Port, A ; Сбросить бит в 0
POP A
macroend
Теперь вместо макроса, который предназначен для работы с приложени-
ями, где линия Е подключена к выводу 0 порта, можно использовать макрос,
формирующий импульс на любом заданном выводе порта. Например, макро-
вызов :
pulse 2
вставит в программу макрос, который обеспечит выдачу импульса на вывод 2
порта.
Наряду с макросами в программе может использоваться условно компи-
лируемый код, который определяет, надо ли выполнять заданную процеду-
ру, в зависимости от значения специальных параметров. Эти параметры ис-
пользуются только во время компиляции и указывают, надо или нет включать
определенную часть программного кода в исходный текст.
Возвращаясь к первоначальному примеру, можно ввести макропеременную
«debug», которая позволит выполнять специальные процедуры в процессе от-
ладки. В нашем примере формирования сигнала Е для Ж К-индикатора можно
реализовать инверсию сигнала на выводе, подключенном к светодиоду, каждый
раз, когда подается импульс Е. Таким образом будет обеспечена визуальная ин-
дикация (зажигание светодиода), когда происходит запись данных в ЖКИ.
8 Зак. 2026.
114 Часть 1. Введение в микроконтроллеры
Большинство трансляторов проверяют выполнение условий компиляции
перед тем, как компилировать файл. В ассемблерах эти условия обычно пред-
ставлены в форме «If (Условие)/е15е/елб» или в форме «ifdef (Параметр)».
Последняя форма позволяет компилировать программный код при условии,
что параметр определен ранее. В языках высокого уровня, которые использу-
ют формат «И(Условие)/е15е/епй» используются несколько другие операторы
условной компиляции, например, в языке С используется оператор «%if».
Теперь преобразуем наш макрос таким образом, чтобы инвертировать бит
7 порта А, к выводу которого подключен светодиод, когда параметр «Debug»
определен. Получаем макрос:
pulse macro bit ; Импульс по линии E
push A ; Сохранить аккумулятор
mov A, 1 « bit ; Определить бит
or Port, A ; Установить бит в 1
xor Port, A ; Сбросить бит в 0
’ ifdef Debug ; Если “Debug” определен
mov A, 0x080 xor Port, A endif pop A ; Инвертировать бит 7
macroend
Условно компилируемый программный код можно помешать не только в
макросах. Они могут быть использованы и в теле основной программы. Ус-
ловно компилируемые коды обрабатываются в одно время с макросами, по-
этому они обычно рассматриваются вместе с ними Даже если Вы никогда
ранее не использовали ассемблер, макросы и условное компилирование, ве-
роятно, Вам знакомы. Что Вы могли не знать — это то что макросы и услов-
ное компилирование широко применяются в языках высокого уровня. Утвер-
ждение «#defme» в языке С — фактически макрос, а оператор «#if/#else/
Send» используется для условной компиляции.
В приложении «Общие команды Ассемблера» условное компилирование и
макросы рассмотрены более подробно на других примерах.
Резидентный монитор и отладчик
В некоторых микроконтроллерах «монитор» (или «отладчик») загружаются в
память программ для того, чтобы дать возможность разработчику прикладно-
го программного обеспечения загружать, выполнять и отлаживать програм-
мы в реальных условиях. Это может существенно ускорить отладку приложе-
ния и избавить от необходимости покупать внутрисхемный эмулятор. Идея
загрузки программы, которая производит отладку приложения, может пока-
заться неортодоксальной, но если Вы разрабатывали программы для персо-
нальных компьютеров или рабочих станций, то, возможно, использовали
резидентный отладчик.
Глава 3. Программное обеспечение 115
Термины «монитор» и «отладчик» взаимозаменяемы, они используются
для описания одной и той же части программного обеспечения Монитор —
это программа, которая предназначена для контроля за выполнением про-
граммы, а также для модификации содержимого памяти или регистров с
целью изменения работы программы.
Монитор реализует следующие типичные функции
Загрузка программы.
Выполнение программы.
Остановка в контрольных точках.
Пошаговое выполнение.
Модификация программы
Чтение/запись памяти/регистров.
Если Вы работали с резидентным отладчиком (например, отладчик для
MS-DOS), то, вероятно, знакомы со многими из этих функций. Если Вы не
знакомы с ними, то возьмите старую версию MS-DOS и посмотрите про-
грамму «debug». Еще лучше обратиться к главе «Примеры применения мик-
роконтроллера 8051» и посмотреть, как используется интегрированная гра-
фическая среда UMPS.
В настоящее время приложения обычно отлаживаются при помощи гра-
фического интерфейса с поддержкой символической информации. Таким
образом, вместо отладки скомпилированного кода, можно наблюдать дей-
ствительный вид строк исходного текста. Графические отладчики используют
те же концепции и операции, что и отладчики командной строки.
Следует отметить, что мониторы-отладчики работают на том же процес-
соре и используют то же пространство памяти, что и прикладные програм-
мы, которые они отлаживают. Это весьма важное обстоятельство, процессор
используется для выполнения прикладной программы и программы-отлад-
чика. Данный процесс легко осуществить на компьютере, но его трудно реа-
лизовать в микроконтроллере, который имеет намного меньший объем па-
мяти для размещения прикладной программы и монитора. Встречаются
мониторы, которые занимают всего 512 байт и могут располагаться в памяти
микроконтроллера. В таком случае программа-монитор может быть совмеще-
на с прикладной программой без существенного увеличения объема памяти
программ.
Другая проблема состоит в следующем. Так как программа-монитор вы-
полняется микроконтроллером, то в случае использования прикладной про-
граммой аппаратных ресурсов, необходимых монитору, работа приложения
или процесс отладки будут нарушены.
Чтобы резидентный монитор мог реализовать перечисленные выше фун-
кции, микроконтроллер должен иметь ряд встроенных аппаратных средств
Процессор микроконтроллера должен иметь возможность чтения-записи со-
держимого памяти программ и возможность записи в память программ из
выполняющейся программы, иначе монитор не может быть использован для
отладки приложения.
116 Часть 1. Введение в микроконтроллеры
В Принстонском архитектуре, описанной ранее, существует только одно
адресное пространство, которое используется для кода программы, перемен-
ных и стека. В этом случае, программный код, который надо отладить, может
быть помещен в память RAM, что даст возможность легко его модифициро-
вать.
Возможно, это кажется очевидным, но необходимо иметь несколько лй-
ний ввода-вывода для связи монитора с ведущей системой (или терминалом).
Если используется микроконтроллер с очень малым числом выводов, то их
может не хватить для соединения с ведущей системой. Линия приема данных
от ведущей системы должна иметь возможность генерировать прерывания,
чтобы ведущая система могла прерывать выполнение текущей программы.
Либо ведущая система должна иметь возможность сбрасывать микроконтрол-
лер и запускать монитор вместо прикладной программы.
Загрузка программы в микроконтроллер с помощью монитора является
важной темой для обсуждения. Проблема заключается в том, что микрокон-
троллер должен иметь возможность записывать в свою память программ. Та-
кая возможность требуется для обновления программы и расстановки конт-
рольных точек останова.
Стоит уточнить, что представляет собой монитор. На основании выше-
сказанного можно подумать, что монитор это отдельная программа, которая
позволяет загружать и выполнять другие программы. Это в некоторой степени
верно, но более правильно будет сказать, что монитор это специализирован-
ный обработчик прерываний. Монитор вступает в действие только при опре-
деленных условиях (прерываниях). Так как эти условия могут возникнуть в
любой момент времени, то используется соответствующий обработчик пре-
рываний, который останавливает выполнение прикладной программы, ког-
да пользователь хочет взаимодействовать с монитором. В микроконтроллере
или любом другом компьютере монитор активизируется только, когда работа
приложения прерывается пользователем. Это дает возможность приложению
выполняться с полной скоростью, не затрачивая время на выполнение ко-
манд для поддержки монитора.
В то время как большинство обработчиков прерываний просты, предназ-
начены для обслуживания определенных аппаратных средств и выполняются
очень быстро, монитор является очень сложной программой, которая не только
контролирует выполнение приложения, но также осуществляет интерфейс с
пользователем. Часто требуется осуществить интерфейс с пассивным терми-
налом, это означает, что монитор должен уметь проводить анализ команд,
вводимых пользователем с таких терминалов. Управление выполнением при-
ложения главным образом осуществляется путем манипуляции с содержи-
мым программного счетчика для прикладной программы, которое сохраня-
ется в стеке при запуске монитора. Эти манипуляции сводятся к контролю и
обновлению адреса возврата в стеке. Например, если требуется запустить про-
грамму с определенного адреса, то монитор загружает этот адрес в стек в
качестве адреса возврата. Когда монитор будет готов к запуску программы,
выполняется возврат из прерывания, который осуществляется путем извле-
чения требуемого адреса из стека и загрузки его в программный счетчик.
Глава 3. Программное обеспечение 117
Для ре.итзации точек останова и пошаювого выполнения программ тре-
буется модифицировать содержимое памяти, где хранится код прикладной
программы Во многих процессорах есть однобайтная команда для генерации
программного прерывания Например, в микропроцессорах семейства 186,
которые используются в IBM PC, это команда программного прерывания
«mt 3» с кодом ОхСС Для реализации точки останова эта команда помещает-
ся перед первым бантом с ie гхющеи команды Когда поступает команда про-
граммного прерывания, содержимое указателя стека декрементируется, ад-
ресуя ячейку, в которую зацпжаетея содержимое программного счетчика Это
содержимое восстанавливается после выполнения подпрограммы обслужи-
вания прерывания Пошаговое выполнение может быть реализовано анало-
гичным образом — путем передачи управления монитору после выполнения
каждой команды Но контроллеры прерывании некоторых процессоров име-
ют режимы работы, при которых автоматически генерируется прерывание
после каждой команды, то-есть реализуется пошаговый режим
Чтение и запись содержимого регистров часто происходит по команде
пользователя Это может быть сделано сразу посте получения команды пре-
рывания или перед возобновлением выполнения программы Оба метода имеют
свои преимущества Есчи содержимое регистров обновляется немедленно, то
затем пользоватечь может использовать загрузку в них различного содержи-
мого, чтобы инициировать работу микроконтроллера в различных режимах и
ситуациях Таким образом можно выявить особенности функционирования
микроконтроллера Есчи содержимое регистров обновляется прежде, чем во
зобновится выполнение программы, то имеется возможность изменить со-
стояние микроконтроллера таким образом, что прекратить доступ к монито-
ру Таким образом, например, контроллер прерывании может маскировать
прерывания от интерфейса с ведущей системой Этого не происходит, если
регистры обновляются только перед выполнением прерванной программы
Последняя характерная особенность монитора — возможность ассембли-
рования и дизассемблирования команд Для этого требуется значительный
объем памяти, который не входит в состав тех 512 байт, которые занимает
программа-монитор Из-за ограниченности объема памяти микроконтролле-
ра эта функция может оказаться нереализуемой для резидентного монитора
Если ассемблерование-дизассемблирование не выполняется встроенным мо-
нитором. то приходится распечатывать ассемблерный листинг приложения,
который наряду с командой содержит ее шестнадцатеричный код и адрес,
чтобы иметь возможность правильно расставить контрольные точки и по-
нять, что происходит при обращении по определенному адресу
Монитор-отладчик представляет собой превосходный инструмент для от-
ладки прикладных программ, даже если его возможности реализуются не
полностью из-за ограниченности ресурсов микроконтроллера Эти мощные
инструменты разработчика стоят значительно меньше, чем схемный эмуля-
тор
Имеющиеся мониторы обеспечивают отладку программ для многих типов
микроконтроллеров, однако они обычно не разрабатываются для процессо-
ров с Гарвардской архитектурой Как было отмечено в главе «Микроконтрол-
118 Часть 1. Введение в микроконтроллеры
леры», существуют некоторые приложения, которые не могут быть реализо-
ваны при использовании Гарвардской архитектуры Монитор-отладчик — одно
из таких приложений. Причина этого очевидна. Память программ обычно не-
доступна для записи. Даже если она доступна, то различная разрядность ко-
манд и данных значительно усложняет задачу модификации команды. Этот
недостаток в Гарвардской архитектуре не является непреодолимым препят-
ствием для написания программ, работающих как монитор. Но без специаль-
ного интерфейса с памятью программ реализация функций монитора (даже
в сокращенном виде) будет очень сложна или даже невозможна.
Операционные системы реального
времени (ОСРВ)
Операционные системы реального времени — ОСРВ (RTOS — Real Time
Operating Systems) предназначены для компьютерных систем, которые спо-
собны выполнять несколько задач одновременно Например, на персональ-
ном компьютере одновременно может быть запушен графический редактор
«Corel Draw», проигрываться музыкальный диск, осуществляться доступ в
Интернет и выполняться вывод Web-страницы с помощью программы Netscape.
Типичное приложение для микроконтроллера (например, микроконтроллер,
который читает данные с клавиатуры и посылает их в компьютер) обычно
выполняет только одну задачу
Каждая задача на персональном компьютере выполняется независимо от
других, за исключением некоторых возможностей межзадачной связи и уп-
равление ресурсами например, арбитраж всех запросов на доступ к дискам.
Операционная система реального времени состоит из мультизадачной
операционной системы, которая оптимизирована для реализации процессов
управления. Типичная мультизадачная операционная система выделяет каж-
дой задаче одинаковый квант времени, чтобы создать для пользователя впе-
чатление, что все программы выполняются непрерывно ОСРВ разработана
таким образом, чтобы быстро реагировать на внешние события и имитиро-
вать работу нескольких процессоров, каждый из которых контролирует одно
устройство. Например, в жилом доме однопроцессорная ОСРВ может управ-
лять кондиционером, включать ночью внешнее освещение, извещать о воз-
никновении пожара и управлять телефонным автоответчиком. Каждая из этих
задач должна выполняться так, как будто для нее выделен отдельный про-
цессор.
Это достигается путем выделения процессору некоторого интервала вре-
мени для каждой из этих функций (в основном, на опрос устройства и по-
сылку ответа). В мультизадачных операционных системах каждая задача вы-
полняется до ее завершения В ОСРВ сначала производится проверка, есть ли
входные данные для решения задачи, и задача выполняется только при на-
личии этих данных. Если необходимые входные данные отсутствуют, то зада-
ча не выполняется, и операционная система переходит к следующей задаче,
если имеются запросы на ее выполнение.
Глава 3. Программное обеспечение 119
' В ОСРВ для получения входных данных и запуска соответствующей задачи
используются прерывания. Запуск задачи обычно производится путем ее пе-
ресылки из очереди ожидающих задач в очередь задач, предназначенных для
выполнения.
И в мультизадачных операционных системах, и в ОСРВ для передачи дан-
ных между задачами используется функция посылки сообщении. Это означа-
ет, что каждая задача имеет входную очередь сообщений, которые она может
обрабатывать только в течение заданного кванта времени или при запросе
прерывания. Если ответ занимает слишком много времени, то задача поме-
шается обратно в очередь выполняемых команд, и управление передается
следующей задаче. ’ ' ’ _ I '
Системные ресурсы, такие как дисковые накопители, таймеры, устрой-
ства ввода-вывода, обычно доступны только для определенных задач. Это
позволяет организовать очередь запросов к ресурсам и быть уверенным в том,
что доступ к ресурсу не получат несколько задач одновременно.
Данное описание работы мультизадачных операционных систем, частным
случаем которых служат ОСРВ, является весьма упрошенным Эти операци-
онные системы имеют много других особенностей, таких как приоритет за-
дач, семафоры и другие, которые не рассмотрены в данном разделе, хотя
они могут иметь первостепенную важность для ряда приложений. Чтобы по-
чувствовать, как работают многозадачные системы и ОСРВ, рассмотрим в
качестве примера центральную систему управления космической станцией.
Чтобы сэкономить вес, объем и потребляемую мощность, для контроля и
управления всеми устройствами на борту станции, кроме специальной науч-
ной аппаратуры, используется один компьютер. В его функции входят:
Контроль окружающей среды.
Качество атмосферы и величина давления.
Нагревание и охлаждение (кондиционирование).
Освещение (уменьшение освещения ночью).
Управление энергопотреблением.
Ориентирование солнечных батарей по направлению к солнцу.
Контроль за режимом заряда-разряда батарей.
Контроль энергопотребления .
Связь.
Ориентирование антенны на станцию приема.
Мультиплексирование сообщений от различных источников.
Накопление сообщений.
Ориентация и контроль местоположения станции
Слежение за орбитой и ориентацией.
Управление двигателями.
Для осуществления этих базовых функций процессор должен иметь цент-
ральный аппаратно реализованный архив для регистрации сообщений и под-
готовки информации для астронавтов, центральный дисплей, консоль для
120 Часть 1. Введение в микроконтроллеры
ввода-вывода команд и данных, часы реального времени для синхронизации
различных действий Структурная схема такой системы показана на рис. 3 7
Рис. 3.7. Блок-схема ОСРВ для управления космической станцией.
Может возникнуть вопрос — представляет схема на рис. 3 7 структуру
про|раммной или аппаратной части системы. Фактически, она представляет
структуру обеих частей системы. В реальных ОСРВ блок-схема программного
обеспечения аналогична структуре используемых аппаратных средств. Это
означает, что как минимум одна задача используется для выполнения каж-
дой аппаратной функции. Отметим, что на рис. 3.7 некоторые стрелки на-
правлены только в одном направлении. Эти стрелки представляют потоки
данных и указывают направление передачи информации или команд. Следует
отметить, что каждый блок может содержать более одной задачи. Часто ока-
зывается проще реализовать некоторые функции в многозадачном варианте,
чем создавать общую программу для их выполнения.
Рассматривая этот пример, можно придти к мысли, что реальная компь-
ютерная система для управления космической станцией в тысячу раз слож-
нее, чем описанная выше, и встроенные микроконтроллеры не годятся для
этой цели. Если Вы так думаете, то вдвойне неправы. Компьютерная система
для реальной космической станции будет, вероятно, в миллион раз сложнее
этого примера, но встроенные микроконтроллеры могут эффективно исполь-
зоваться в системе ее управления.
Возможно Вас поразят вычислительные мощности, которые имеют про-
стые 8-разрядные микроконтроллеры. Два космических аппарата <• Вояджер»,
первые посланцы Земли к другим планетам, управлялись микропроцессором
(работающим на одной десятой от максимальной скорости), который имел
существенно меньшие возможности, чем процессоры микроконтроллеров.
Глава 3. Программное обеспечение 121
описанных в данной книге Эти микропроцессоры имели только 2Кбайт па-
мяти программ, часть которой должна была обновляться с Земли, чтобы
обеспечить возможность выполнения бортовым компьютером текущих задач
управления. Работа в режиме реального времени не является слишком быст-
рой для компьютера, и события, которые кажутся быстрыми для людей,
могут быть легко обработаны скромной компьютерной системой.
Если необходимо управлять сложной системой с помощью одного про-
цессора, то рекомендуется использовать одну из многих операционных сис-
тем реального времени, которая способна координировать выполнение раз-
личных задач. В разделе, посвященном описанию микроконтроллеров 68НС05,
приводится пример использования ОСРВ.
ГЛАВА
4
ОСНОВНЫЕ ТИПЫ
ИНТЕРФЕЙСОВ
МИКРОКОНТРОЛЛЕРОВ
Краткое содержание
Подавление звона контактов
Вывод на светодиодную индикацию
7-сегментный светодиодный индикатор
Матричная клавиатура
Управление жидкокристаллическими индикаторами
Управление двигателем/реле
Шаговые двигатели
Управление RC-сервомоторами
Преобразование уровней RS-232
Генерация случайных чисел
Персональные компьютеры
Имеется ряд интерфейсных устройств, которые чаще всего используются с
микроконтроллерами Данная глава посвящена знакомству с этими устрой-
ствами и описанию основ их применения.
Глава 4. Основные типы интерфейсов микроконтроллеров 123
Подавление звона контактов
При смыкании и размыкании переключателей в пени возникают им-
пульсные помечи (которые называются «шум» или «звон»), вызванные дре-
безгом контактов Это явление часто возникает в системах на базе микрокон-
троллеров, где для ввода данных используется клавиатура, и «звон» может
восприниматься как многократное нажатие клавиши (рис. 4.1). Звон возника-
ет при установке и разрыве контакта путем нажатия на клавишу.
Рис. 4.1. Дребезг контактов.
В устройствах, использующих микроконтроллеры, помехи, вызванные
дребезгом контактов, могут интерпретироваться как несколько размыкании
и замыканий ключа. Если клавиша используется для управления устройством,
то это устройство воспримет возникающие помехи как многократное нажа-
тие клавиши, что вызовет значительные затруднения при его использовании.
Чтобы устранить данный эффект, используются специальные схемы или про-
граммные методы для подавления «звона».
Один их простых схемотехнических способов устранения звона состоит в
подключении RC-цепи (рис. 4.2). В этой схеме время, требуемое для заряда/
разряда конденсатора до порогового напряжения, маскирует «звон» контак-
тов при переключении. Можно также установить триггер Шмитта между схе-
мой ключа и микроконтроллером, чтобы усилить эффекта подавления «зво-
на». Недостатки этого метода — дополнительные затраты на компоненты,
которые должны быть установлены на плате, и дополнительное время, тре-
буемое для заряда/разряда RC-цепи. Все это может затруднить использование
данной схемы, так как для некоторых ключей с большим уровнем шумов
дополнительная задержка может составить десятые доли секунды.
Значительно лучший способ избавиться от звона — сделать это программ-
но. Если уровень напряжения на выходе ключа не изменяется в течение 20мс,
то можно считать что звон окончился, и больше изменений состояния не
ожидается.
124 Часть 1. Введение в микроконтроллеры
Выход к микроконтроллеру
Рис. 4.2. Устранение дребезга контактов с помощью конденсатора
Программа на языке С, выполняющая фильтрацию звона, может иметь
следующий вид.
DBounce: // Начать при высоком уровне
сигнала на выходе ключа
while (( Port & SW ) i= 0 ); // Ожидать низкого уровня сигнала
на выходе ключа
TMR =0; // Сбросить таймер для ожидания 20мс
while ((( Port & SW ) == 0 ) && ( TMR < Twenty_msec )); „
if ( TMR < Twenty_msec )
goto DBounce; // Звон еще не кончился, повторить
еще раз
Этот программный код может быть модифицирован для конкретного при-
ложения Возможно его упрощение путем использования прерываний для
обработки сигналов, поступающих от таймера и при нажатии клавиши
Подключение светодиодов
Очень часто вывод данных реализуется с помощью светодиодов (LED — Light
Emitting Diode), который достаточно дешевы и легко подключаются к мик-
роконтроллеру Обычно для свечения светодиода требуется ток более 16мА,
что для большинства микроконтроллеров находится в диапазоне допустимых
значений выходных токов Следует помнить, что светодиод является диодом,
пропуская ток только в одном направлении.
Типичная схема подключения светодиода к выводу микроконтроллера
показана на рис 4.3. В этот схеме светодиод будет светиться, когда микрокон-
троллер выдает на этот вывод сигнал «0» (низкое напряжение) Когда вывод
работает в качестве входа данных или на него выводится «1», то светодиод
будет выключен
Резистор с сопротивлением 220 Ом используется для ограничения тока,
так как слишком большой ток может вывести из строя микроконтроллер и
светодиод Некоторые микроконтроллеры содержат ограничители тока на
Глава 4. Основные типы интерфейсов микроконтроллеров 125
выходных линиях, что устраняет потребность в ограничивающем резисторе.
Но все же целесообразно, на всякий случай, включить этот резистор, чтобы
гарантировать, что короткое замыкание на «землю» или напряжение пита-
ния Vcc не выведет из строя микроконтроллер.
Рис. 4.3. Подключение светодиода к выводу микроконтроллера.
7-сегментный светодиодный индикатор
Вероятно, самый простой способ вывода числовых десятичных и шестнадца-
теричных данных — это использование 7-сегментного светодиодного индика-
тора. Такие индикаторы были очень популярны в 70-х годах, но впоследствии
их место заняли жидкокристаллические индикаторы. Но светодиодные инди-
каторы до сих пор являются полезными приборами, которые могут быть вклю-
чены в схему без больших усилий для создания программного обеспечения.
Включая определенные светодиоды (зажигая сегменты), можно выводить
десятичные числа (рис. 4.4)
Каждый светодиод в индикаторе имеет свой буквенный идентификатор (
А, В, С, D, Е, F или G), и одна из ножек светодиода подключена к соответ-
ствующему внешнему выводу. Вторые ножки всех светодиодов соединены
вместе и подключены к общему выводу. Этот общий вывод определяет тип
индикатора: с общим катодом или с общим анодом. Подключение индикато-
ра к микроконтроллеру осуществляется весьма просто: обычно индикатор
подключают как семь или восемь (если используется десятичная точка) неза-
висимых светодиодов.
Наиболее важной частью работы при подключении к микроконтроллеру
нескольких 7-сегментных индикаторов является назначение линий ввода-
вывода для каждого светодиода. Решение этой задачи в начале выполнения
проекта упростит Вам монтаж разводки и отладку устройства в дальнейшем.
Типичный способ подключения нескольких индикаторов состоит в том, что-
бы включить их параллельно и затем управлять протеканием тока через об-
126 Часть 1. Введение в микроконтроллеры
щие выводы отдельных индикаторов Так как величина этого тока обычно
превышает допустимое значение выходного тока микроконтроллера, то для
управления током включаются дополнительные транзисторы, которые вы-
бирают, какой из индикаторов будет находиться в активном состоянии.
Выводы сегментов
индикатора
Рис. 4.4. 7-сегментный светодиодный индикатор.
На рис. 4.5 показано подключение к микроконтроллеру четырех 7-сегмен-
тных индикаторов. В этой схеме микроконтроллер выдает данные для индика-
ции, последовательно переходя от одного индикатора к другому. Каждая цифра
будет высвечиваться в течение очень короткого интервала времени. Это обычно
выполняется с помощью подпрограммы обслуживания прерываний таймера
Int
- Сохранить регистры контекста
- Сбросить таймер и контроппер прерываний
- LED_ Display = 0 ; Выключить все светодиоды
- LEDOutput = Display[++Cur mod #LEDs]
- LED Display = 1 « Cur , Высветить значение для текущего
индикатора
- Восстановить содержимое регистров контекста
- Возврат из прерывания
Эта подпрограмма будет циклически производить вывод цифры на каж-
дый индикатор, разрешая протекание тока через транзистор, подключенный
к его общему выводу. Чтобы избежать мерцания изображения, подпрограмма
должна выполняться со скоростью, обеспечивающей включение индикатора
(свечение каждой цифры) по крайней мере 50 раз в секунду. Чем больше
цифр, тем чаще должны следовать прерывания от таймера. Например, при
восьми индикаторах цифры должны выводиться со скоростью 400 раз в се-
кунду, то-есть в два раза быстрее, чем для четырех индикаторов
Глава 4. Основные типы интерфейсов микроконтроллеров 127
Рис. 4.5. Подключение к микроконтроллеру четырех 7-сегментных индикаторов
В некоторых ситуациях может оказаться, что выделение каждому светоди-
оду индикатора отдельного вывода микроконтроллера слишком расточитель-
но. Можно использовать демультиплексор с высоким выходным током, на-
пример, ТТЛ-микросхему типа 74S138, вместо дискретных транзисторов. Когда
на выбранном выходе демультиплексора устанавливается низкий уровень, то
он пропускает ток подключенного к нему индикатора, обеспечивая вывод
цифры. При этом разводка монтажных соединений в устройстве оказывается
более простой. Следует обратить внимание на то. чтобы используемый де-
мультиплексор был способен пропускать максимальный ток 140мА, который
протекает через общий катод индикатора.
Наряду с 7-сегментными индикаторами существуют 14- и 16-сегментные
индикаторы, которые позволяют выводить символы алфавита («A»-«Z» и «0»-
«9»). При подключении этих индикаторов необходимо следовать тем же пра-
вилам, что и для 7-сегментного индикатора. В главе «Примеры применения
микроконтроллера 8051» будет показано подключение 16-сегментного инди-
катора.
Ввод с матричной клавиатуры
Во многих приложениях требуется производить ввод данных с клавиатуры.
Это может быть реализовано при помощи отдельных кнопок, но такой под-
ход слишком расточителен с точки зрения использования линий ввода-вы-
вода микроконтроллера. Лучшим решением является использование матрич-
ной клавиатуры, которая представляет собой набор ключей, объединенных в
ряды и столбцы (рис. 4.6)
Для чтения состояния определенного ключа на столбец подается сигнал,
а затем считывается состояние рядов. Обычно ряды подключаются к высоко-
му потенциалу, а опрашиваемый столбец соединяется с землей. Если при
сканировании рядов считывается низкий уровень сигнала , то это означает,
что ключ в данной позиции ряд/столбец замкнут (рис. 4.7). На рис. 4.7 показа-
128 Часть 1. Введение в микроконтроллеры
ны два МОП-транзистора, которые используются для подключения столб-
цов к земле Как было сказано в главе «Аппаратные средства», выводы мик-
роконтроллера могут работать в режиме с открытым коллектором. Таким об-
разом, они могут имитировать работу этих транзисторов, делая их включение
ненужным. Транзисторы, показанные на рис 4.7, введены для лучшего пони-
Рис. 4.6. Соединение ключей в матричной клавиатуре
Рис. 4.7. Подключение к микроконтроллеру матричной клавиатуры.
Матричная клавиатура может быть расширена практически до любого раз-
мера, используя при этом небольшое число выводов микроконтроллера. На-
пример, Ю4-клавишная клавиатура персонального компьютера — это матри-
ца, содержащая 13x8 ключей. Требуемое программное обеспечение практически
не изменяется при подключении клавиатуры различной размерности. Если не
хочется писать программное обеспечение для клавиатуры или нет достаточно-
го количества доступных выводов микроконтроллера, то Вы можете упростить
Глава 4 Основные типы интерфейсов микроконтроллеров 129
себе работу Существуют специальные микросхемы, которые выполняют оп-
рос клавиатуры и посылают сшнал, когда данные готовы для считывания
В схеме на рис 4 S показано использование микросхемы типа 74С922 в
качестве интерфейса между клавиатурой с матрицей 4x4 ключа и микрокон-
троллером BASK Stamp
Рис. 4.8. Использование интерфейсной микросхемы 74С922 для подключения
клавиатуры к микроконтроллеру Basic Stamp
9 Зак 2026
130 Часть 1. Введение в микроконтроллеры
В соответствии с программой микроконтроллер непрерывно опрашивает
значение поступающего от микросхемы сигнала «Готовность данных» При
поступлении активного уровня этого сигнала четыре бита, содержащие ад-
рес, считываются в микроконтроллер Stamp .и выводятся на дисплей. Резис-
торы сопротивлением 10 К включаются для устранения конфликтов на шине,
соединяющей микроконтроллер и жидко-кристаллический дисплей, когда
два или более выходных драйверов этих устройств пытаются выводить на одну
линию различные логические уровни. Если с выхода микросхемы 74С922
поступает сигнал, значение которого отличается от сигнала, выдаваемого
микроконтроллером Stamp, то разность напряжений падает на резисторе, а
на шине устанавливается уровень сигнала микроконтроллера. Таким образом
исключается возможность неопределенного состояния линии.
Когда выводы микроконтроллера Stamp работают в режиме ввода, значе-
ние сигнала на шине устанавливает микросхема 74С922. При этом падение
напряжения на резисторах 10 КОм очень мало, и микроконтроллер будет
считывать значения сигналов, поступающих с выходов микросхемы 74С922
Этот способ подключения нескольких устройств к одной шине не являет-
ся единственным. Различные устройства имеют разные входные и выходные
характеристики, так как могут использовать подключение к высокому потен-
циалу через резистор (Pull-Up), ограничение напряжения с помощью фик-
сирующих диодов и другие способы соединения выводов. С помощью этих
способов можно обеспечить подключение к микроконтроллеру различных
внешних устройств Следует отметить, что можно избежать ошибок при реа-
лизации интерфейса для различных устройств, если организовать работу шины
таким образом, чтобы в каждый момент времени только одно устройство
имело право управления шиной.
Управление жидко-кристаллическим *
индикатором
** 41 jk *“ "в
t
Светодиодные индикаторы способны отображать простую информацию, но
они не обладают тем диапазоном возможностей, которые реализуют жидко-
кристаллические индикаторы (ЖКИ). Эти индикаторы позволяют выводить очень
специфичные сообщения, делая интерфейс с пользователем более дружествен-
ным. ЖКИ также весьма полезны для вывода сообщений о состоянии устрой-
ства и другой необходимой информации в процессе отладки приложения.
ЖКИ, реализующие вывод алфавитно-цифровых символов, обладают ре-
путацией устройств, с которыми трудно работать. Чтобы показать, что это не
так, в этом разделе будет рассказано, как работают ЖКИ, и как их подклю-
чать к микроконтроллеру.
Большинство алфавитно-цифровых ЖКИ используют для управления кон-
троллер Hitachi 44780 и реализуют общий интерфейс подключения Благода-
ря этим обстоятельствам ЖКИ, обеспечивающие вывод от 8 до 80 символов
(организованных в виде 2 строк по 40 символов или 4 строк по 20 символов),
являются полностью взаимозаменямыми, так как их применение не требует
какого-либо изменения програмного обеспечения или аппаратных средств
Глава 4. Основные типы интерфейсов микроконтроллеров 131
Чаше всего ЖКИ, использующие контроллер Hitachi 44780, имеют 14-
выводные разъемы с шагом 2,54 мм. Выводы ЖКИ имеют следующее назна-
чение:
Вывод I - «Земля».
4 Вывод 2 — Напряжение питания Vcc.
Вывод 3 — Вход регулировки контрастности изображения
Вывод 4 — Сигнал выбора регистра данных или команд (R/S).
Вывод 5 — Сигнал выбора режима «чтение/запись» (R/W).
Вывод 6 — Синхросигнал Е.
Выводы 7-14 — Линии передачи данных.
Из данного описания видно, что интерфейс микроконтр<->ппера с ЖКИ
представляет собой параллельную шину, которая позволяет просто и быстро
осуществлять чтение и запись данных в ЖКИ. Временные диаграммы сигна-
лов на рис. 4.9 иллюстрируют процесс выдачи байта, содержащего ASCII-код
символа, на экран ЖКИ. ASCII-код содержит 8 бит, которые посылаются в
ЖКИ по четыре или по восемь бит за один цикл обмена. Если используется
4-битный режим обмена, то полный 8-битный код символа передается в виде
двух 4-битных «нибблов» (полубайтов): сначала 4 старших бита, затем 4 млад-
ших. Каждая посылка сопровождается синхросигналом Е, который иниции-
рует прием данных в ЖКИ.
D0-D7
Рис. 4.9. Временные диаграммы сигналов при выводе символа на ЖКИ. .
Передача 4 или 8 бит данных - это два основных режима параллельного
обмена. Рассмотрим некоторые соображения по поводу выбора того или ино-
го режима. Восьмибитный режим передачи целесообразно использовать, ког-
да требуется высокая скорость обмена и есть не менее 10 доступных линий
для ввода-вывода данных. Четырехбитный режим передачи требует, как ми-
нимум, 6 линий ввода-вывода. Чтобы подсоединить микроконтроллер к ЖКИ
при четырехбитном режиме используются только 4 старших разряда линии
данных DB7-4 (рис. 4.10)
Дальнейшее сокращение числа требуемых линий ввода-вывода может быть
обеспечено путем использования сдвигового регистра: в этом случае потре-
буется всего 3 линии (рис. 4.11). В качестве сдвигового регистра обычно ис-
пользуется микросхема 74x174 (где «х» — или НС, или LS). Восьмибитный
режим также можно реализовать с помощью сдвигового регистра, но требу-
ется передавать девятый бит, который используется, чтобы обеспечить выда-
132 Часть 1. Введение в микроконтроллеры
чу сигнала R/S Бит R/S указывает, какая информация передается — команда
или данные Если этот бит установлен в I, то передаются данные, которые
могут быть считаны или записаны в текущей позиции ЖКИ, определяемой
положением курсора Когда бит сброшен в 0, то при записи в ЖКИ переда-
ется команда, при чтении — считывается состояние ЖКИ после выполнения
последней команды.
Рис. 4.10. Подключение ЖКИ к микроконтроллеру при четырехбитном режи-
ме передачи
Рис. 4.11. Использование сдвигового регистра для подключения ЖКИ
Набор символов, которые выводится ЖКИ под управлением контроллера
44780, в основном аналогичен символам, представляемым в ASCII-коде Не-
которые символы ЖКИ не совпадают с ASCII самое важное отличие — это
отсутствие символа «\», который имеет ASCll-код 0x05В Управляющие ASCII-
коды с 0x008 по 0x01 F не воспринимаются ЖКИ как символы управления и
могут отображаться как японские иероглифы Имеется восемь программиру-
емых символов, которые выводятся с помощью кодов с 0x000 по 0x007 Эти
символы программируются с помощью команд, которые устанавливающих
курсор ЖКИ на область памяти генератора символов («CGRAM») и задают
восемь значений адреса для построчной записи изображения символа Следу-
ющие восемь байтов, записанные в память, представляют собой изображе-
ние каждой строки программируемого символа, начиная сверху
Приведенная ниже таблица содержит набор команд, реализуемых ЖКИ
Глава 4 Основные типы интерфейсов микроконтроллеров 133
R/S R/W D7 D6 D5 D4 D3 D2 DI
0 0 0000000
0 0 000000]
0 0 0 0 0 о о I ID
О О 00001DC
О О О О О I SC RL *
О О О О I DL N F *
О О О I А А А А А
0 0 1АААААА
О О BF * * * * * *
I I D D D D D D D
I I D D D D D D D
DO Команда/Описание
1 Очистить индикатор
* Вернуть курсор в начальную по-
зицию Ноше
S Установить направление движе-
ния курсора
В Разрешить экран/курсор
* Переместить курсор/Сдвинуть
экран
* Установить размерность интер-
фейса
А Переместить курсор на
обтастьССРАМ
А Переместить курсор на экран
* Прочесть флаг «Занято»
D Вывести ASCIl-симвот на экран
D Прочесть ASCII-символ с экрана
Назначение отдельных битов команд:
Указание направления движения курсора
. ID — Перемещение курсора после записи каждого байта, если бит уста-
г новлен в 1,
S — Сдвиг изображения на экране после записи байта
Включение экрана/курсора
D — Экран Включить(1)/Выключить(0)
С — Курсор Включить(1)/Выключить(0)
В — Мигание курсора Включить! 1)/Выключить(0)
Перемещение курсора/Сдвиг экрана
SC — Сдвиг экрана Включить(1)/Выключить(0)
RL — Направление сдвига Вправо! 1)/Влево(0)
Установка размерности интерфейса
DL — Разрядность данных 8( 1 )/4(0)
N — Число строк на экране 1(0)/2(I)
F — Размер шрифта 5х 10( 1 )/5х7(0)
Установка курсора на CGRAM
А — Адрес
Чтение /запись ASCII- символов
D — Данные
Обратите внимание, что тип команды определяется числом старших ну
лей
Флаг «Занято» («busy») устанавливается на время выполнения команды
Для написания приложений, которые работают с максимально возможной
скоростью, необходимо опрашивать этот флаг, чтобы исключить необходи-
мость реализации задержки, рассчитанной на наихудший случай выполне-
ния команд ЖКИ Обычно скорость обмена с ЖКИ не Очень важна, и целе-
134 Часть 1. Введение в микроконтроллеры
сообразно использовать программную задержку, которую несложно реализо-
вать. Выполнение всех команд занимает не более 160мкс, кроме команд «Очи-
стить индикатор» и «Вернуть курсор в начальную позицию», которые требу-
ют максимум 4,1мс. Для наихудшею случая можно установить задержку в 5
мс, чтобы обеспечить некоторый запас для надежного функционирования.
Различные типы ЖКИ выполняют команды с разной скоростью. Выше
указаны максимальные значения задержек, но некоторые индикаторы тре-
буют меньшее время для выполнения команд. Однако, если не используется
опрос флага «Занято», ю рекомендуется всегда использовать максимальные
задержки.
В большинстве применений линию «R/W» подсоединяют к земле, так как
чтение состояния ЖКИ не требуется. Это значительно упрощает приложе-
ние, поскольку для считывания данных необходимо менять режим работы
выводов — с записи на чтение. В некоторых случаях возможность чтения со-
стояния ЖКИ бывает полезна, например, при прокручивании данных на
экране. Подключение линии «R/W» к земле также освобождает один вывод
микроконтроллера.
ЖКИ с размером символов 5x10 точек практически не выпускаются, по-
этому бит «F» в команде «Установка размерности интерфейса» должен всегда
быть равен 0.
Перед тем, как вводить в ЖКИ команды или данные, его необходимо
инициализировать. Это делается при помощи следующей последовательности
действий:
Для 8-битного режимы.
1. Подождать более 15мс после подачи питания.
2. Записать 0x30 в ЖКИ и ждать 5мс до завершения выполнения команды.
3. Записать 0x30 в ЖКИ и ждать 160мкс до завершения выполнения команды.
4. Снова записать 0x30 в ЖКИ и ждать 160мкс до завершения выполнения
команды или опрашивать флаг «Занято».
5. Установить рабочие характеристики ЖКИ.
Ввести «Установка размерности интерфейса»
Ввести 0x10, чтобы выключить экран.
Ввести 0x01, чтобы очистить экран.
Ввести «Установка направления движения курсора», чтобы установить
поведение курсора.
Ввести «Включение экрана/курсора», чтобы включить экран и, если
требуется, курсор.
Для инициализации индикатора в 4-битном режиме используется пере-
сылка двух отдельных полубайтов (нибблов), а не полных байтов, составляю-
щих команду. Как было отмечено выше, при посылке байта сначала посыла-
ется старший полубайт, затем младший. При этом каждая посылка четырех
бит сопровождается переключением линии Е.
1. Подождать более 15мс после подачи питания.
2. Записать 0x3 в ЖКИ и ждать 5мс до завершения выполнения команды.
Глава 4. Основные типы интерфейсов микроконтроллеров 135
3. Записать 0x3 в ЖКИ и ждать !60мкс до завершения выполнения команды.
4. Снова записать 0x3 в ЖКИ и ждать !60мкс до завершения выполнения
команды или опрашивать флаг «Занято».
5. Установить рабочие характеристики ЖКИ.
Ввести 0x02 в ЖКИ, чтобы разрешить 4-битный режим.
Все следующие команды/данные требуют пересылки двух полубайт.
Ввести «Установка размерности интерфейса»
Ввести 0x1, 0x0. чтобы выключить экран
Ввести 0x0, 0x1. чтобы очистить экран
Ввести «Установка направления движения курсора», чтобы установить
поведение курсора
Ввести «Включение экрана/курсора», чтобы включить экран и. если
требуется, курсор
После того как инициализация завершена. ЖКИ готов к приему команд
и данных
Последний вопрос, касающийся ЖКИ. — как установить контрастность
изображения. Обычно для этого используется потенциометр, включенный
как делитель напряжения (рис. 4 12). Таким образом легко получается изменя-
ющееся напряжение в диапазоне от «земли» до Vcc, которое обеспечивает
регулировку контрастности изображения символов на экране ЖКИ.
-VPC'
1
2
ЮК
3
ЖКИ
«земля»
Vcc
Регулировка
контраста
Рис. 4.12. Управпение контрастностью изображения ЖКИ.
В начале раздела было сказано, что ЖКИ имеют плохую репутацию из-за
трудностей, возникающих при работе с ними. Самая большая проблема с
ЖКИ заключается в том, чтобы правильно его инициализировать. Если сле-
довать приведенным выше инструкциям, то проблем не должно возникнуть.
Также следует помнить, что минимальная длительность импульса на входе Е
должна составлять 450нс. Если длительность импульса меньше, то работа ЖКИ
будет неустойчивой.
Данного в этом разделе описания работы алфавитно-цифрового ЖКИ,
управляемого контроллером Hitachi 44780, достаточно для того, чтобы на-
136 Часть 1. Введение в микроконтроллеры
чать эксперименты с подключением ЖКИ к микроконтроллеру. Имеется много
интересных возможностей применения ЖКИ, особенно если использовать
вывод программируемых символов. Множество различных приложений, опи-
санных в этой книге, используют ЖКИ, и данные в соответствующих разде-
лах примеры программ можно использовать в разработках. Однако в действи-
тельности не так трудно самостоятельно спроектировать и запрограммировать
устройство, использующее ЖКИ.
Управление двигателем/реле
В этом разделе речь пойдет об управлении электромагнитными реле и мото-
рами с помощью микроконтроллера. Эти устройства не могут непосредствен-
но управляться микроконтроллером, так как они потребляют большой ток и
являются источниками помех. Необходимо использовать специальные интер-
фейсы, чтобы управлять электромагнитными устройствами.
Самый простой метод управления этими устройствами заключается в том,
чтобы просто включать и выключать их. На рис. 4.13 микроконтроллер откры-
вает транзисторную пару Дарлингтона, что приводит к протеканию тока че-
рез катушку реле, которое замыкает контакты. Чтобы разомкнуть реле, тран-
зисторы закрываются подачей 0 на выход микроконтроллера. Шунтирующий
диод используется для подавления импульса напряжения, возникающего при
выключении тока. Это импульс индуцируется магнитным потоком в катушке
и может привести к повреждению источника питания реле и даже микрокон-
троллера. Никогда не следует забывать про включение такого диода в схемах
управления электромагнитными устройствами. Импульс напряжения имеет
амплитуду порядка нескольких сотен вольт и длительность несколько нано-
секунд. При этом диод оказывается в режиме пробоя, и через него протекает
ток, вызывающий снижение индуцированного напряжения.
Рис. 4.13. Управление реле с помощью микроконтроллера.
Глава 4. Основные типы интерфейсов микроконтроллеров 137
Вместо разработки схемы на дискретных компонентах можно использо-
вать для управления электромагнитными приборами специальные интеграль-
ные микросхемы. Весьма полезными приборами являются микросхемы серии
ULN200x, которые содержат несколько выходных каскадов-драйверов, ис-
пользующих транзисторные пары Дарлингтона и шунтирующее диоды.
Такие же аппаратные средства применяются для управления электромо-
торами. Если мотор должен вращаться только в одном направлении, то мож-
но использовать схему на рис. 4.14.
Общий вывод
Рис. 4.14. Набор выходных драйверов в микросхеме ULN2003A.
Для управления вращением мотора в любом направлении служит мосто-
вая схема соединения ключей (транзисторов), показанная на рис. 4 15. Если в
этой схеме открыты все ключи, то ток через мотор не протекает, и он не
будет вращаться. Если замкнуты ключи I и 4, то мотор будет вращаться в
одном направлении, если замкнуты ключи 2 и 3 — в другом. Если одновре-
менно замкнуть оба ключа на одной стороне моста, то из-за короткого замы-
кания может сгореть предохранитель или источник питания.
Управление скоростью мотора обычно осуществляется при помощи сиг-
налов с широтно-импульсной модуляцией (ШИМ). Частота ШИМ-сигналов
должна быть больше 20 КГц, чтобы избежать возникновения при вращении
мотора звукового сигнала, который может быть очень раздражающим.
Также как микросхема ULN2003A упрощает подключение реле, микро-
схема 293D может быть использована для управчения мотором. Микросхема
293D, показанная на рис. 4.16, может управлять двумя моторами, присоеди-
ненными к выходным буферным каскадам (выводы 3, 6, 11 и 14) Выводы 2,
7, Ю и 15 используются для управления уровнем напряжения на буферных
выходах микросхемы (ключи в мостовой схеме, показанной на рис 4.|5).
Выводы I и 9 управляют включением/выключением выходных буферов. На
эти выводы могут подаваться ШИМ-сигналы, что делает управление скоро-
стью вращения мотора очень простым.
138 Часть 1. Введение в микроконтроллеры
Рис. 4.15. Управление электромотором с помощью мостовой схемы
Рис. 4.16. Микросхема 293D для управления электромоторами
Напряжение питания микросхемы Vs составляет +5В, а напряжение пи-
тания электромотора Vss может находиться в пределах от4 5В до 36В Макси
мальныи ток, протекающий через электромотор, составляет 500мА Также
как ULN2003A, микросхема 293D содержит встроенные шунтирующие дио-
ды Это означает, что при подключении к ней электромотора не требуются
внешние шунтирующие диоды (рис 4 I7)
Глава 4 Основные типы интерфейсов микроконтроллеров 139
Рис. 4.17. Подключение электромотора к микросхеме 293D
На рис 4 17 показаны резистор и конденсатор которые иногда использу-
ются для гашения помех Эти два компонента, подключенные к щеткам элек-
тромотора, уменьшают электромагнитное излучение и импульсные помехи,
возникающие при его работе Обычно их подключения не требуется, но если
наблюдается неустойчивая работа микроконтроллера во время работы мотора,
то можно ввести в схему конденсатор емкостью 0.1мкФ и резистор 5 Ом (2Вт)
Микросхема 293D может также использоваться для управления четырех-
полюсным шаговым двигателем — каждый из буферных выходов служит для
управления одним из полюсов двигателя При этом выводы I и 9 должны
быть подключены к питанию, так как не требуются ШИМ-сигналы для уп-
равления скоростью двигателя
Шаговый двигатель
Для шаговых двигателей намного проще разрабатывать программное обеспе-
чение, чем для обычных двигателей постоянного тока Двигатель может пово-
рачиваться на один шаг или вращаться с определенной скоростью, которая
задается частотой выполнения шагов С точки зрения аппаратного интерфей-
са шаговые двигатели немного более сложны в подключении и потребляют
больший ток (то-есть имеют более низкий кпд), но эти недостатки ком-
пенсируются преимуществами, которые обеспечивает их программное уп-
равление
Двухполюсный шаговый двигатель состоит из размещенного на вале по-
стоянного магнита, положение которого задается парой катушек (рис 4 18)
Чтобы перемещать магнит и вал, на катушки подается напряжение с раз-
ными фазами Таким образом обеспечивается притяжение магнита и его пе-
ремещение в требуемом направлении ' • > » > ?
140 Часть 1. Введение в микроконтроллеры
Катушка А
Катушка В
Рис. 4.18. Упрощенная схема шагового двигателя.
Для вращения двигателя, показанного на рис. 4.18, по часовой стрелке,
может быть использована последовательность фаз, приведенная в таблице.
Шаг Фаза Катушка А Катушка В
I 0 S
2 90 N
3 ito N
4 270 S
5 360/0 S
При данной последовательности катушка А притягивает северный полюс
магнита, чтобы перевести магнит в исходное положение. Затем катушка В
притягивает южный полюс магнита, поворачивая его на 90 градусов Далее
вращение мотора продолжается, при чем за каждый шаг мотор поворачива-
ется на 90 градусов.
На конце вала шагового двигателя часто устанавливается шестеренчатая
передача, которая преобразует каждый шаг в очень малое угловое перемеще-
ние. Таким способом обеспечивается получение большего значения крутяще-
го момента и более точный позиционный контроль перемещения вала.
Шаговый двигатель может управляться микросхемами, аналогичными
293D, при этом каждая пара выходов управляет одной катушкой Но суще-
ствуют специальные микросхемы управления шаговым двигателем, такие как
UC1517 (рис. 4.19). В этой микросхеме микроконтроллер посылает шаговый
импульс STEP и задает направление вращения сигналом DIR Вывод INH
отключает выходные драйверы, давая возможность поворачивать двигатель
вручную. Микросхема (JC1517 может выдавать на катушки двухуровневые
сигналы, что позволяет повысить к.п.д. и снизить уровень помех. При этом
обеспечивается также возможность поворота вала на полшага, то-есть на 45
градусов, а не только на 90. Указанные возможности реализуются специфи-
ческим способом для разных типов шаговых двигателей, поэтому прежде чем
их использовать необходимо хорошо ознакомиться с устройством и принци-
пом действия применяемого двигателя.
Глава 4. Основные типы интерфейсов микроконтроллеров 141
Рис. 4.19. Управление шаговым двигателем с помощью микросхемы UC1517
Управление сервоприводом
Сервомоторы предназначены для использования в радиоуправляемых аэро-
планах, машинах и лодках Они тегко подключаются к микроконтроллеру и
часто используются в робототехнике и других приложениях, где требуются
простые механические движения Это может показаться удивительным, но
позиционный сервомотор является аналоговым устроиством
Выходом R/C сервомотора обычно служит колесо, которое поворачивает-
ся на угол от 0 до 90 градусов Существуют сервомоторы, способные повора-
чиваться в диапазоне от 0 до ISO градусов, а также сервомоторы, обладаю-
щие очень большим вращающим моментом для специальных приложении
Обычно к сервомотору достаточно подключить напряжение питания <5В,
«землю* и входном сигнал
R/C сервомотор действительно аналоговое устройство На вход подается
ШИМ-сигнал с цифровыми уровнями напряжения 0 и I Длительность им-
пульса от I Оме до 2 Оме, частота повторении 20мс (рис 4 20) Длительность
ШИМ-импульса определяет положение колеса сервомотора Импульс дли-
тельностью I Оме соответствует положению колеса 0 градусов, импульс дли-
тельностью 2 Оме — 90 градусов
При использовании микроконтроллеров, реализующих на выходе ШИМ-
сигналы, управлять сервомотором очень легко, хотя можно не достичь требу-
емой точности позиционирования Для микроконтроллеров, которые не име-
ют специальных ШИМ-выходов, можно получить ШИМ-сигналы программно
с помощью следующей процедуры
Interrupt . Используется обработчик прерывания
Сохранить содержимое регистров контекста
Вывести “1" на ШИМ линию
Ждать 1 мс
Цикл на 1 мс , Вывести ШИМ-сигнал
142 Часть 1. Введение в микроконтроллеры
if Loop Counter > Specified ServoPos
Output a 0 Завершение ШИМ-сигнала
Установить таймер на прерывание через 18 мс
Восстановить содержимое регистров контекста
Возврат из врерывания
Рис. 4.20. ШИМ-сигнал для управления сервомотором
Эта программа может быть легко модифицирована для управления более
чем одним сервомотором путем введения дополнительных выходных линий
ШИМ сигналов и переменных «Specified ServoPos» Такой способ управле
ния сервомоторами хорош тем, что переменные «Specified_ServoPos» могут
обновляться, не затрагивая работу обработчика прерываний Обслуживание
прерывания занимает 2 мс из каждых 20 мс Это значит, что на обеспечение
функций ШИМ требуется 10 процентов процессорного времени независимо
от числа управляемых сервомоторов
Преобразование уровней RS-232
Наиболее часто преобразование уровня сигнала используется для обеспече-
ния связи по интерфейсу, с помощью которого микроконтроллер должен
соединяться с ведущим компьютером Преобразование уровней можно осу-
ществить применяя различные микросхемы, но использование некоторых
решений позволяет упростить выполнение этой задачи
Напряжения и логические уровни интерфейса RS-232 несколько необыч-
ны (рис 4 21) Первое, что может вызвать проблему — это большой размах
напряжения Но, как показано в главе «Аппаратные средства», напряжения и
токи могут быть уменьшены с помощью токоограничивающего резистора,
включаемого между входом микроконтроллера и разъемом RS 232 Этот ре-
зистор будет защищать фиксирующие диоды на входах микроконтроллера от
протекания большого тока, а также удерживать уровни входного напряжения
в допустимых пределах
Этот метод хорошо работает, так как отрицательное напряжение (логи
ческая «1» в интерфейсе RS-232) будет восприниматься как 0В на входе мик-
роконтроллера, а положительное напряжение (логический «0» в интерфейсе
Глава 4. Основные типы интерфейсов микроконтроллеров 143
RS-232) даже после ограничения до уровня 5В будет выше области переклю-
чения, которая находится в диапазоне от —ЗВ до +ЗВ
“0”->+12 Вольт
^Область переключения
“1"-> -12 Вольт
Рис. 4.21. Уровни напряжений для интерфейса RS 232
Такое решение можно использовать только для приема сигналов RS-232
Если необходимо пересылать данные по интерфейсу RS-232, то отрицатель-
ное напряжение для логической I нельзя получить с помощью данной схемы
Можно получить только ОВ, а это значение находится внутри области пере-
ключения приемника RS-232 Часто это обстоятельство игнорируется, и мик-
роконтроллер просто подключается к приемнику сигналов RS-232 через то-
коограничивающий резистор Иногда такая схема соединения нормально
работает, но следует иметь в виду, что возможность передачи данных по ин-
терфейсу RS-232 с использованием только токоограничивающего резистора
зависит от используемого микроконтроллера и его конкретного применения
Такой способ решения задачи не рекомендуется
Вместо этого отрицательный уровень напряжения для передачи можно
получить от приемника (рис 4 22) Как показано на рис 4 22, приходящие
данные поступают в микроконтроллер через резистор ЮК Нормально линия
находится в отрицательном состоянии (передается «I») Когда передается «О»,
напряжение установится на уровне Vcc Это очень дешевый и элегантный
способ реализации приема и передачи по стандарту RS-232 3-проводнои
интерфейс RS-232 с «земляным» проводом
Рис. 4.22. Интерфейс между RS-232 и КМОП микроконтроллером
144 Часть 1. Введение в микроконтроллеры
Применение описанного метода вызывает некоторые проблемы, которые
необходимо решить перед его использованием в конкретном приложении
Принимаемые и передаваемые данные будут иметь инверсные уровни сигна-
лов 0 и I по сравнению с обычной «положительной» логикой, поэтому мик-
роконтроллер должен произвести их обратную инверсию перед дальнейшим
использованием. Это может стать проблемой для некоторых типов микрокон-
троллеров, в которых последовательный интерфейс не выполняет инверти-
рование полученных данных.
Описанный метод позволяет реализовать только трехпроводной интерфейс
RS-232 Если ведущий компьютер требует обмена сигналами квитирования
(подтверждения готовности) DTR-DSR и CTS-RTS, то придется использо-
вать другой вид интерфейса или замкнуть накоротко линии сигналов квити-
рования, соединив выводы DTR с DSR и CTS с RTS.
Другая проблема состоит в том, что данные, передаваемые микроконт-
роллеру, будут посылаться обратно к передатчику. Это происходит потому,
что при высоком уровне принимаемого сигнала (когда передается логичес-
кий 0) такой же высокий уровень будет установлен на выходе передатчика,
то-есть передаваемый сигнал как бы отражается (эффект «эхо»). Во многих
случаях такой эффект не вызывает каких-либо проблем, а иногда даже из-
бавляет от необходимости писать специальную программу, иммитирующую
посылку «эхо». Но в приложениях, которые не ожидают прихода «эхо», могут
возникнуть определенные трудности Появление «эхо» приводит к тому, что
данные не могут передаваться в дуплексном режиме, то-есть одновременно в
двух направлениях.
Если данный способ реализации интерфейса RS-232 вызывает проблемы
в конкретном приложении, то следует использовать для организации интер-
фейса микросхему Maxim МАХ232, которая содержит внутренний генератор
отрицательного напряжения.
Генерация случайных чисел
Одной из наиболее трудных задач при работе с компьютером является гене-
рация случайных чисел. Существует множество кандидатских диссертаций,
написанных на эту тему. Проблема состоит в том, что компьютеры по своей
природе являются детерминированными устройствами. Они специально спро-
ектированы таким образом, чтобы каждый раз решать данную задачу одним
и тем же путем, и не имеют возможности создавать случайную информацию.
Некоторые языки программирования и компьютерные системы реализу-
ют специальные функции, создающие последовательность случайных чисел.
Однако для их вычисления требуется одно или несколько начальных чисел,
которые должны быть случайными, иначе эта функция будет всегда генери-
ровать одни и те же числа.
В микроконтроллерах существует три способа создания случайных чисел и
все они требуют использования внешних данных. Первый способ применяет-
ся тогда, когда микроконтроллер подключен к часам реального времени. Чте-
ние долей секунды при включении питания даст начальное случайное число.
Глава 4. Основные типы интерфейсов микроконтроллеров 145
Вероятность того, что включение будет происходить в одно и тоже время с
точностью до сотых и тысячных долей секунды, очень мала.
Следующий способ состоит в том. чтобы записать таблицу случайных чи-
сел в память программ и хранить их как константы. Хотя эти числа будут не
совсем случайными, для некоторых приложений это вполне приемлемо. Этот
способ, однако, требует использования некоторых средств для модифика-
ции записанного в память программ объектного кода и размещения в ней
случайных чисел.
Последний способ основан на фиксации некоторых случайных внешних
событий Чаще всего микроконтроллер подключается к обратносмещенному
диоду или к выходу радиолинии, на которую не поступает несущая частота
Затем происходит запись числа случайных помех («шума»), поступающих за
определенный период времени
Персональные компьютеры
Устройством, с которым чаще всего требуется реализовать интерфейс, явля-
ется персональный компьютер. Существует четыре основных интерфейса, с
помощью которых микроконтроллер связывается с компьютером: последо-
вательный порт (RS-232), параллельный порт, интерфейс клавиатуры и мыши,
шина ISA. Существуют и другие методы связи с компьютером, но вышепере-
численные являются наиболее распространенными. Существуют книги, где
рассказано, как подключать устройства, используя данные интерфейсы В этом
разделе нет возможности рассмотреть все эти интерфейсы подробно, особен-
но шину ISA, которая обеспечивает прерывания и прямой доступ к памяти.
Здесь будет дан только общий обзор этих интерфейсов и объяснение того,
как можно с их помощью подключить к компьютеру микроконтроллер.
Персональный компьютер — достаточно сложное устройство для реализа-
ции интерфейса с ним. Причиной этого является непредсказуемое поведение
различных компьютеров, которое проявляется в установке произвольных зна-
чений отдельных битов и байтов в процессе функционирования компьютера.
Данное обстоятельство может показаться удивительным, учитывая что эти
компьютеры были разработаны почти 20 лет назад. Но по мере их развития
функции, которые ранее были реализованы с помощью дискретных компо-
нентов, теперь оказались запрятаны глубоко во внутреннюю структуру ис-
пользуемых в компьютере специализированных заказных микросхем (ASIC).
Используемые в компьютерах микропроцессоры, когда-то имевшие пред-
сказуемый командный цикл, сегодня реализуют функции, которые не так
давно выполняли только большие компьютеры. В результате функции, кото-
рые кажутся легкими для понимания и реализации, могут по-разному вы-
полняться различными компьютерами или вообще оказываются невыполни-
мыми Это обстоятельство может превратиться в кошмар для разработчика,
особенно когда он пытается связаться с компьютером по нестандартному
аппаратному интерфейсу.
10 Зак. 2026.
146 Часть 1. Введение в микроконтроллеры
Большое значение имеет операционная система, установленная на пер-
сональном компьютере Приложения для персональных компьютеров пишут-
ся для операционных систем MS-DOS, Windows 3.1 и Windows/95; в мень-
шей степени используются OS/2, Windows NT и симуляторы MS-DOS,
работающие с различными операционными системами. Каждая из этих опе-
рационных систем использует различные ресурсы (например, таймеры и век-
тора прерываний), что усложняет написание программного обеспечения для
связи с микроконтроллером.
После всего сказанного возникает вопрос, зачем разрабатывается аппара-
тура, ориентированная на связь с компьютером, за исключением случаев,
когда продукция будет выпускаться миллионным тиражом или она специ-
ально предназначена для работы с определенной моделью компьютера. При
попытках решения указанных выше проблем у разработчика возникает боль-
ше вопросов, чем имеется готовых ответов
Работая в качестве инженера, тестирующего электронные устройства раз-
личного назначения, автор книги попытался сформулировать некоторые ре-
комендации по разработке приложений, которые могут работать совместно с
различными моделями персональных компьютеров. Эти рекомендации мож-
но сформулировать в виде двух правил, следуя которым можно разрабатывать
приложения с высокой вероятностью их успешного взаимодействия с ком-
пьютером.
1. Использовать интерфейсы, которые всегда работают на различных моде-
лях компьютеров с разными операционными системами.
2. Аппаратура связи с компьютером должна быть интеллектуальной, обла-
дая возможностью обрабатывать блоки команд и данных, а не только биты
и байты.
Далее будет показано, как эти правила применяются для различных ин-
терфейсов.
Последовательный интерфейс RS-232 лучше всего удовлетворяет этим
правилам. Электрические и временные спецификации данного интерфейса
не изменяются со временем. Компьютер может иметь 9-контактный (DB-
9М) или 25-контактный (DB-25M) разъем, который подключается к интер-
фейсу RS-232 как терминальное оборудование DTE (DataTerminal Equipment).
Назначение контактов разъемов приведено в таблице.
DB-25M
Вывод 1 ~ не подключен
Вывод 2 ~ выход ТХ данных
Вывод 3 ~ вход RX данных
Вывод 4 - выход RTS
Вывод 5 — выход CTS
Вывод 6 — вход DSR
Вывод 7 — «земля»
Вывод 8 — вход DCD
Вывод 14 — не подключен
Вывод 15 — не подключен
Вывод 16 — не подключен
Вывод 17 — не подключен
Вывод 18 — не подключен
Вывод 19 — не подключен
Вывод 20 — выход DTR
Вывод 21 — не подключен
DB-9M
Вывод 1 — вход DCD
Вывод 2 — выход RX данных
Вывод 3— выход ТХ данных
Вывод 4— выход DTR
Вывод 5— «земля»
Вывод 6- вход DSR
Вывод 7— выход RTC
Вывод 8- вход CTS
Глава 4. Основные типы интерфейсов микроконтроллеров 147
Вывод 9 — нс подключен Вывод 22 - вход RI Вывод 9- вход RI
Вывод 10 - нс подключен Вывод 21 - нс подключен
Вывод II — нс подключен Вывод 24 - нс подключен
Вывод 12 — не подключен Вывод 25 -нс подключен
Вывод Р — не подключен
Обычно эти сигналы выводятся из микроконтроллера с помощью гибкого
многожильного кабеля Рекомендуется использовать 9-контактныи разъем,
так как он имеет меньшие размеры
Линии RTS, CTS, DSR, DCD, DTR и Rl служат для передачи сигналов
квитирования, которые используются в некоторых видах связи, чтобы под-
твердить готовность оборудования для посылки данных с помощью Интер-
фейса RS-232 Например, эти линии используются базовой системой ввода-
вывода (BIOS) некоторых компьютеров Чтобы эти сигналы не вызывали
проблем при обмене данными, можно подключить линию DSR к DTR и
линию CTS к RTS Такое подключение «обманет» аппаратное и программное
обеспечение компьютера, которые в любое время будут получать сигналы
готовности к приему и передаче данных
Эти сигналы были первоначально введены в стандарт RS-232, когда ком-
пьютеры обладали гораздо меньшими возможностями, чем сейчас Назначе-
ние этих сигналов состоит в том. чтобы остановить передатчик, если прием-
ник не готов к приему данных, а также информировать передатчик о состоянии
модема Практически во всех приложениях и устроиствах, которые можно
купить в магазине, линии подтверждения готовности соединены вместе (как
описано выше), и для обмена данными используются только три линии две
линии передачи и «земля»
С помощью функции BIOS порт RS-232 в персональном компьютере име-
ет стандартный программный интерфейс, что позволяет приложениям без
больших проблем работать с различными компьютерами и операционными
системами Кроме того операционная система содержит программу эмуляции
терминала, которая помогает при отладке приложения Это дает большое
преимущество при разработке приложении, имеющих интерфейс с компью-
тером. так как при отладке приложения можно использовать эмулятор тер-
минала, а не частично отлаженный интерфейс пользователя С помощью тек-
стовых команд эмулятор терминала позволяет разрабатывать различные
приложения, при этом ввод команд и чтение ответных сообщении выполня-
ется в простой и удобной форме
Существует мнение, что удобные для человека текстовые команды менее
эффективны, чем двоичные коды Однако обычно никаких трудностей не
возникает При скорости обмена 9600 бод необходимость передачи двух бай-
тов вместо одного приведет к тому, что пересылка данных займет 2 мс вме-
сто I мс Большинство микроконтроллерных интерфейсов не передает боль-
ших объемов данных, поэтому дополнительная задержка будет незаметной
для пользователя, а при этом он получает значительные преимущества в виде
более простой процедуры отладки приложения
148 Часть 1. Введение в микроконтроллеры
Если требуется передавать большие объемы данных — порядка десятков
Кбайт в минуту и более, то лучше не использовать интерфейс RS-232 Вместо
этого лучше непосредственно подключиться к системной шине компьютера
или использовать сетевой интерфейс.
Последняя особенность использования RS-232. Доступ к последователь-
ному порту может быть получен через файловую систему путем «открытия»
имен (от СОМ! до COM4) для четырех стандартных последовательных пор-
тов компьютера. Если компьютер содержит графическую карту Super-VGA,
то порт COM4 будет недоступен, так как адресное пространство ввода-выво-
да порта COM4 используется графическим адаптером, совместимым с IBM
8514/А
Использование параллельного (принтерного) порта также является очень
популярным методом соединения микроконтроллера с компьютером Инте-
ресной особенностью этого интерфейса является множество возможных спо-
собов его использования. Реализация параллельного интерфейса в традици-
онном варианте, когда данные передаются от компьютера к приемнику,
показана на рис. 4.23.
Строб-сигнал
Данные
Сигнал SLCT
Сигнал ошибки
Сигнал подтве!
Рис 4.23. Временная диаграмма функционирования параллельного порта.
При этом методе интерфейса проверяются различные сигналы подтверж-
дения, чтобы определить готовность внешнего устройства к приему перед
выдачей данных компьютером Параллельный порт в данном случае служит
только для передачи данных из компьютера В большинстве приложений, ко-
торые используют принтерный порт, данные передаются в двух направлени-
ях. При этом линии подтверждения связи используются для указания направ-
ления передачи данных, а не для проверки состояния внешнего устройства В
большинстве новых моделей персональных компьютеров восемь линий дан-
ных имеют возможность передавать данные в обеих направлениях, но во многих
старых компьютерах принтерный порт может только посылать данные
Для принтерного порта используется 25-контактный разъем, выводы ко-
торого имеют следующее назначение. ,
Глава 4. Основные типы интерфейсов микроконтроллеров 149
DB-25F
Вывод 1 — выход строб-сигнала Вывод 14 - выход —AutoFDxt
Вывод 2 — вход/выход данных D0 Вывод 15 — вход —Error
Вывод 3 — вход/выход данных D1 Вывод 16 — выход —1N1T
Вывод 4 — вход/выход данных D2 Вывод 17 — выход -SLCT1N
Вывод 5 — вход/выход данных D3 Вывод 18 — «земля»
Вывод 6 — вход/выход данных D4 Вывод 19 — «земля»
Вывод 7 — вход/выход данных D5 Вывод 20 — «земля»
Вывод 8 — вход/выход данных D6 Вывод 21 — «земля»
Вывод 9 — вход/выход данных D7 Вывод 22 — «земля»
Вывод 10 — вход —Аск Вывод 23 — «земля»
Вывод 11 — вход Busy Вывод 24 - «земля»
Вывод 12 — вход РЕ Вывод 25 — «земля»
Вывод 13 — вход SLCT
При использовании параллельного порта существует проблема обеспече-
ния временных параметров. В первоначальных моделях IBM PC (и даже в РС/
АТ) время чтения и записи для этого порта было предсказуемо — например,
запись продолжалась не менее 125нс. В новых компьютерах, которые работа-
ют значительно быстрее, чтение/запись содержимого регистра может длить-
ся менее 20нс. Современные компьютеры будут вести себя так же как старые
модели, если их параллельный порт подключен к шине ISA, а не использует
интерфейс, реализованный с помощью специализированных заказных мик-
росхем (AS1C).
Если используются функции BIOS, то временные параметры будут под-
держиваться на уровне стандартных оригинальных значений. Но в этом слу-
чае требуется использование сигналов подтверждения готовности.
Прежде чем использовать параллельный порт компьютера, необходимо
внимательно проанализировать временные параметры вашего приложения и
убедиться, что они будут реализованными при подключении различных мо-
делей компьютеров. Желательно избегать применения параллельного порта,
если это возможно — принтерный порт нарушает первое из данных выше
правил выбора интерфейса.
Передачу данных и команд через порт клавиатуры/мыши лучше оставить
для очень специфичных приложений, таких как подключение внешней клави-
атуры или специальных устройств ввода. Выходные данные микроконтроллера
должны в этом случае представлять собой стандартные скан-коды. Далее будет
рассмотрен интерфейс компьютера PC/AT с клавиатурой, которая способна
посылать и принимать данные (рис. 4.24). Скан-коды клавиатуры передаются
синхронно, с использованием такого же формата, как при асинхронной пере-
даче данных (рис. 4.25). Данные могут передаваться в обоих направлениях, хотя
очевидно, что данные от клавиатуры поступают намного чаще.
150 Часть 1. Введение в микроконтроллеры
1 - Ввод-вывод данных
2 - Не подключен
3 - «Земля»
4 - Vcc
5 - Синхросигнал ввода-вывода
6 - Резервировано
Рис. 4.24. Разъем для подключения клавиатуры в компьютере PC/AT.
Бит Стоп-
четносги бит
Ввод-вывод данных
Старт-Бит 0
бит
Синхросигнал ввода-вывода
Рис. 4.25. Временные диаграммы сигналов клавиатуры PC/AT.
При разработке микроконтроллерного интерфейса между компьютером и
клавиатурой необходимо осуществить управление синхросигналами и сигна-
лами данных для обоих устройств. Если данные посланы, то микроконтрол-
лер должен обеспечить их передачу между устройствами. Если данные посы-
лаются от микроконтроллера к компьютеру, а в это время с клавиатуры
поступают новые данные, то они должны сохраняться в микроконтроллере,
а затем передаваться компьютеру.
Выше говорилось о скан-кодах, поступающих от клавиатуры. В компьюте-
ре данные, посылаемые в виде скан-кодов, определяют позицию ключа на
клавиатуре. Ниже приведена таблица скан-кодов для компьютера PC/AT.
F1 - 0x005 F3 - 0x004 F5 - 0x003 F7 - 0x083 F9 - 0x001
F2 - 0x006 F4 - ОхООС F6 - 0x00 В F8 - ОхООА F10 - 0x009
м * »» _ ОхООЕ Tab — 0x000 Ctr - 0x014 LSH - 0x012 Alt - 0x011
“ 1 ” - 0x016 “Q” - 0x015 “А” - 0x01 С Z” - 0x01 А 0x029
“2” - 0x01 Е “W”- 0x01 D “S” - 0x01В “X” - 0x022 CPL- 0x058
“3” - 0x026 “Е” - 0x024 “D” — 0x023 “С” - 0x021 1ns — 0x070
“4” - 0x025 “R" - 0x02 D “р” — 0x028 “V” - 0х02А Del — 0x071
“5” - 0x02 Е 0х02С “G"- 0x034 “В” - 0x032
“6” - 0x036 “Y” - 0x035 “Н” — 0x033 “N”- 0x031
“7” - 0x03 D “U” - ОхОЗС “J” - 0x038 “М”~ ОхОЗА
“8” - 0x03 Е 6С | М 0x043 “К” - 0x042 1 0x041
“9” - 0x046 “0” - 0x044 “L” - 0x04 В 0x049
Глава 4. Основные типы интерфейсов микроконтроллеров 151
“0” - 0x045 “P” - 0x04D J 0x04C - 0x04A
— 0x04E “[“ “ 0x054 u 0x052 RSH- 0x059
it « 0x055 - 0x05В Ent - 0x05A End — 0x069
BS - 0x05 D Hme— 0x06C Lft - 0x06B Dwn- 0x072
ESC- 0x066 Up - 0x075 5 - 0x073 PdD— 0x07A
NL- 0x076 PgU- 0x07 D Rht - 0x074 + - 0x079
SL - 0x077 PS - 0x07C — — 0x07 В <
SR - BS - 0x084 “Backspace” Hme— “Home' Lft — “стрелка влево”
NL- “Num Lock” PgU- “Page Up” 5 — “5” на клавиатуре
SL - “Scroll Lock” PS - “Print Screen” Rht — “стрелка вправо”
SR - “System Request” Ent - “Enter” — — ” на клавиатуре
CPL- “Caps Lock” RSH— правый “Shift" LSH ~ левый “Shift"
Dwn - -“стрелка вниз” PgD- “Page Down” Ctl — “Ctrl”
При получении данных от клавиатуры необходимо следить за состоянием
клавиш Shift, Alt, Ctrl, CapsLock, NumLock и ScrollLock. От этого зависит, как
будет интерпретироваться компьютером скан-код, посланный с клавиатуры.
Это также справедливо для команд, посылаемых компьютером клавиатуре.
При отпускании ключа перед скан-кодом посылается значение OxFO. Этот
код указывает компьютеру, что клавиша больше не нажата, и не надо про-
должать реализацию функции повторения, если такая имелась в программе,
выполняющейся компьютером .
Компьютер может послать клавиатуре следующие команды:
OxOFF — Повторный запуск микроконтроллера клавиатуры.
OxOFE — Запрос на повторную посылку последнего символа.
0x0F7-0x0FD — «Пустые» команды NOP (эти команды игнорируются).
0x0F6 — Установить начальные значения по умолчанию (после включения
питания).
0x0F5 — Установить начальные значения по умолчанию, но запретить ска-
нирование клавиатуры.
0x0F4 — Разрешить сканирование клавиатуры.
0x0F3 — Установить скорость сканирования. Следующий символ опреде-
ляет скорость сканирования состояния клавиш.
0x0EF-0x0F2 — «Пустые» команды NOP. Эти команды игнорируются.
ОхОЕЕ — «Эхо». Клавиатура возвращает код ОхОЕЕ.
OxOED — Установить состояние светодиодных индикаторов. Следующий
символ определяет состояние индикаторов.
После каждой из этих команд клавиатура выдает код подтверждения «Аск»
(OxFA).
Порт мыши использует такой же интерфейс, но обычно компьютер не
передает по нему данные. По этой причине аппаратные средства компьютера
152 Часть 1. Введение в микроконтроллеры
не позволяют передавать данные с помощью данного интерфейса. Чтобы из-
бежать ошибок, необходимо помнить, что при использовании этого порта
данные должны передаваться только в компьютер.
Последний из рассматриваемых интерфейсов — шина ISA (Industry Standard
Architecture). Это микропроцессорная шина, которая обеспечивает доступ ко
многим сигналам процессора. В современных компьютерах применяются так-
же другие шины, например PCI и EISA, но шина ISA представляет наиболее
традиционный интерфейс и является достаточно простой для использования.
Далее рассматриваются сигналы для реализации 8-разрядного интерфейса,
так как 16-разрядная шина вряд ли будет использоваться 8-разрядными мик-
роконтроллерами. Ниже дается назначение контактов слота шины ISA.
Обратная сторона платы Монтажная сторона платы
ВГ «Земля» Al: -СНКСНК
В2- RESDRV А2. SD7
ВЗ. +5V АЗ: SD6
В4 IRQ2 А4: SD5
В5. -5V А5: SD4
В6: DRQ2 А6: SD3
В7. -12V А7- SD2
В8: -NOWS А8: SD1
В9. +12V А9: SD0
В10: «Земля» А10. CHRDY
В11: -MEMW All: AEN
BI2- -MEMR А12: SA19
В13: -OW А13: SA18
В14: -IOR А14: SA17
В15: -DAC1 А15: SA16
В16: DRQ3 А16: SA15
В17: -DACI А17: SA14
В18: DRQI А18: SA13
В19 -REFRESH А19: SA12
В20: BLCK А20: SAI 1
В21: IRQ7 А21: SA10
В22: 1RQ6 А22: SA9
В23: IRQ5 А23: SA8
В24. IRQ4 А24: SA7
В25: IRQ3 А25: SA6
В26- -DAC2 А26: SA5
В27: ТС А27: SA4
В28: ALE А28: SA3
В29: +5V А29: SA2
ВЗО: OSC АЗО: SAI
В31: «Земля» A3I: SA0
Глава 4. Основные типы интерфейсов микроконтроллеров 153
Далее будут рассмотрены только возможности чтения и записи данных
для устройств, подключенных к шине ISA Если Вас интересует более под-
робное ознакомление с реализацией интерфейса микроконтроллеров с по-
мощью шины ISA, особенно если необходимо использовать прерывания или
прямой доступ к памяти (DMA), — воспользуйтесь ссылками в конце книги
Сигналы шины ISA имеют следующее назначение:
-снкснк Проверка канала. Когда сигнал активен, реализуется немас- кируемое прерывание NMI
SD7-SDO CHRDY Системная шина данных Готовность канала. Когда сигнал активен, вводятся такты ожи- дания обмена по шине
AEN Индикатор активности DMA Когда сигнал активен, DMA кон- троллер работает в активном режиме
SA19-SA0 -RESDRV IRQx DRQx DACx -MEMR -MEMW Системная шина адреса - Системный сброс (Reset) - Линии запроса прерываний. Активный уровень высокий - Линии запроса DMA. Активный уровень низкий - Линии подтверждения DMA. Активный уровень низкий Чтение памяти Запись в память
-IOR -IOW -REFRESH Чтение устройств ввода-вывода Запись в устройства ввода-вывода Активен при регенерации динамической памяти
-NOWS Нет состояний ожидания. Операции ввода-вывода выполня- ются без тактов ожидания со стороны процессора
TC Окончание DMA. Активный уровень сигнала указывает на за- вершение DMA
ALE Разрешен прием адреса Активен, когда сигналы SA19-SA0 достоверны
Линии адреса и данных используются при выполнении циклов чтения и
записи, как показано на рис. 4.26 и 4.27
Следует отметить, что сигнал на линии AEN активен, когда шиной уп-
равляет контроллер прямого доступа к памяти. Состояние этой линии необ-
ходимо проверять при подключении микроконтроллера к шине ISA (рис 4 28).
Сигнал на линии должен иметь низкий уровень, чтобы не происходило чте-
ние или запись неправильных данных.
Если при отладке микроконтроллера или любого другого устройства, под-
ключенного к шине ISA, используется логический анализатор или осциллог-
раф, то для их запуска используется сигнал ALE или выходной сигнал адрес-
ного дешифратора.
154 Часть 1. Введение в микроконтроллеры
Рис. 4.26. Сигналы чтения данных по шине ISA.
Рис. 4.27. Сигналы записи данных по шине ISA
При использовании микроконтроллера в качестве адаптера на шине ISA
очень важно, где размещается его адрес: в пространстве устройств ввода-
вывода или в пространстве памяти. Архитектура микропроцессоров Intel х86
имеет отдельное адресное пространство для устройств ввода-вывода (их ото-
бражение на память не используется). При 8-разрядной шине ISA доступны
один Мбайт памяти или адреса I024 устройств ввода-вывода. Доступное ад-
ресное пространство ввода-вывода для этих микропроцессоров имеет раз-
мерность 64 Кбайт, но при разработке первоначальной спецификации на
компьютеры IBM PC 16-разрядный адрес устройств ввода-вывода был умень-
шен на 2 бита, поэтому доступными оказались только 4096 адресов. Когда
проектировались эти компьютеры, казалось, что 1024 различных адреса бо-
лее чем достаточно для устройств ввода-вывода, поэтому 4 старших бита ад-
реса игнорируются адресным дешифратором.
Глава 4. Основные типы интерфейсов микроконтроллеров 155
Рис. 4.28. Микроконтроллер в качестве ведомого устройства на шине ISA
Обычно адаптеры шины ISA проектируются, чтобы работать с адресным
пространством устройств ввода-вывода. Однако большинство их этих 4096
адресов уже определены для различных стандартных устройств Это означает,
что вы будете иметь трудности с выделением для подключаемого к шине
микроконтроллера свободного адреса, не используемого другим устройством
Такова одна из основных причин, по которым не рекомендуется проектиро-
вать микроконтроллерные устройства, непосредственно подключаемые к шине
ISA.
Возможно, у читателя возникнет вопрос, каким же образом следует осу-
ществить интерфейс с персональным компьютером В настоящее время на
рынке появились микроконтроллеры, имеющие интерфейс с шиной USB
(«universal serial bus»), которая не упоминалась в этой книге. Популярность
этих микроконтроллеров будет расти по мере расширения использования шины
USB в компьютерах и ее программной поддержки различными операцион-
ными системами. Шина USB работает подобно CAN интерфейсу. Также как и
CAN, она предназначена для реализации малых локальных сетей, обеспечи-
вая при этом быструю передачу больших объемов данных
В этом разделе не были определены адреса регистров компьютера и конк-
ретные значения требуемых временных интервалов. Это сделано сознательно,
так как интерфейс с компьютером может быть реализован только с учетом
реальных характеристик выбранной модели Необходимо правильно выбрать
тип интерфейса и определить используемые адреса, чтобы быть уверенным,
что ваше приложение будет успешно работать с разнообразными моделями
персональных компьютеров.
ГЛАВА
5
РАЗРАБОТКА ПРИЛОЖЕНИЙ
Краткое содержание
Выбор микроконтроллера
Особенности выбора характеристик и архитектуры
Программные средства и системы разработки
Доступность и ресурсы
Самотестирование
Программаторы
Отладка приложений
Симуляторы
Эмуляторы
Выбор микроконтроллера
После знакомства с многочисленными примерами применения встраивае-
мых микроконтроллеров читатель, возможно, чувствует себя как голодный
человек, которому предложили меню. Чтобы помочь удовлетворить требова-
ния пользователей, рассмотрим различные аспекты, позволяющие произве-
сти правильный выбор микроконтроллера для планируемого приложения.
Следует отметить, что при выборе микроконтроллера необходимо рас-
сматривать не только различные семейства микроконтроллеров, но и выби-
рать определенный тип внутри семейства. Если вы работали ранее с различ-
ными микроконтроллерами одного семейства, то, возможно, обратили
внимание, что большинство семейств содержит большую номенклатуру при-
боров, имеющих широкий диапазон параметров и характеристик. Прежде чем
остановить свой выбор на том или ином типе микроконтроллера рекоменду-
ется заполнить анкету подобную той, что приведена ниже.
Глава 5. Разработка приложений 157
НАЗВАНИЕ ПРИЛОЖЕНИЯ:
Количество входных выводов’
Количество выходных выводов.
Количество линий ввода-вывода’
Тип запуска (сброса)
Тип синхронизации (требуемая точность):
Необходимость сторожевого таймера:
Защита памяти программ:
Доступный вид питания:
Необходимость асинхронного последовательного ввода-вывода:
Необходимость синхронного последовательного ввода-вывода:
Требуемый размер таблиц:
Необходимость ввод-вывода ШИМ-сигналов:
Требуемый тип аналогового ввода-вывода:
Необходимость однократного программирования (ОТР) при организации
серийного выпуска:
Предпочтительный тип корпуса’
Используемый язык программирования:
Желаемая цена:
Имея такую анкету, можно рассматривать характеристики различных мик-
роконтроллеров, чтобы найти наиболее подходящий прибор. Возможно, по-
требуется изменить спецификации приложения, чтобы оно лучше соответ-
ствовало возможностям определенного микроконтроллера.
При сравнении списка требуемых характеристик микроконтроллера с воз-
можностями реальных приборов следует помнить, что необходимый резуль-
тат может быть достигнут различными путями Например, асинхронный пос-
ледовательный ввод-вывод можно обеспечить путем реализации прямого
чтения-записи сигналов на определенном выводе микроконтроллера с ис-
пользованием прерываний. При этом не требуется использовать микроконт-
роллер со встроенным последовательным интерфейсом типа UART, что мо-
жет снизить стоимость разработки и выпускаемой продукции.
Могут возникнуть трудности с определением требуемого объема памяти
команд, особенно, если предполагается использовать язык высокого уровня
при написании прикладных программ. Всегда рассчитывайте на больший
объем, а если окажется возможным использовать микроконтроллер с мень-
шим объемом памяти, то внесите соответствующее изменение в специфика-
цию разрабатываемого приложения.
Необходимо помнить, что определенные методы программирования трудно
или даже невозможно реализовать в некоторых архитектурах. Однако при об-
суждении выбора возможных архитектур и характеристик микроконтролле-
ров рекомендуем ориентироваться на использование уже известных вам при-
боров, а не пытаться найти что-то исключительное. Если вы нашли подходящий
158 Часть 1. Введение в микроконтроллеры
микроконтроллер со всея необходимом информацией, то делайте свои выбор
и приступайте к разработке
Программные средства и системы
разработки
Перед началом разработки необходимо убедиться, что имеются языковые
средства, с которыми вы хотите работать, и вам доступны знакомые инстру-
ментальные средства проектирования Можно сказать, что создание прило-
жении реализуется путем выбора системы разработки, языка и необходимо-
го внешнего оборудования и их умелого использования Дополнительное время,
которое вы потратите на освоение этих средств, даст возможность разрабаты-
вать более эффективные приложения
Вышесказанное касается также инструментальных средств разработки
Возможно Вы обнаружите, что некоторые системы разработки не работают
на персональных компьютерах или рабочих станциях, с которыми вы лучше
всего знакомы Но сегодня многие системы имеют эмуляторы, которые по-
зволяют запускать программы, написанные для других платформ и операци-
онных систем
Если используется система, которая эмулирует персональный компью-
тер, то следует убедиться в том. что планируемые для использования про-
грамматор и эмулятор будут работать с вашим приложением Даже если все
хорошо работает, лучше купить дешевый персональный компьютер, на кото-
ром может работать Windows 3 11,95 или NT, и запускать от него программа-
тор/эмулятор Большинство средств разработки написано для платформы
«Wintel». которая упростит выбор инструментальных средств, работающих
совместно
У вас могут быть веские причины не использовать персональный компь-
ютер. но эти причины окажутся несущественными, если вы не сможете най-
ти средства разработки для проектируемой системы
Доступность и ресурсы
Вероятно это два самых важных аспекта, которые необходимо учитывать при
выборе микроконтроллера для приложения Не удивляйтесь, если, найдя «иде-
альный» микроконтроллер для приложения. Вы не сможете найти постав-
щика или кого-либо, кто сказал бы Вам как программировать этот прибор В
жизни и не такое бывает, не стоит расстраиваться
Некоторые производители выпускают в небольших количествах микро-
контроллеры для специфичных приложении Такие устройства входят в ката-
логи, но их никогда не бывает у дистрибьюторов Многие дистрибьюторы
имеют свои Web-страницы в Интернет, и вы можете легко и быстро выяс-
нить, имеется ли у них конкретный микроконтроллер Таким образом можно
избежать использования в проекте микроконтроллеров, которые невозмож-
но достать
Глава 5. Разработка приложений 159
Под словом «ресурсы» здесь понимаются также книги, Web-сайты, учеб-
ные курсы, семинары, примеры программ и многое другое. Одно из недавних
достижений Интернет — справочный сервер Это программа распространения
почты, посвященной определенной теме, например, микроконтроллерам. Бла-
годаря таким серверам имеется возможность очень быстро распространять ин-
формацию и давать ответы на вопросы для широкой аудитории. Использова-
ние этих ресурсов может помочь при разработке приложения (особенно, если
это не удается сделать самому, и вы проводите многие часы, глядя на экран
монитора в тщетной попытке понять, что же случилось).
Самотестирование
При разработке коммерческого продукта или критичного ко времени прило-
жения представляется полезным ввести в программу код для тестирования
основных компонентов и интерфейсов микроконтроллера. Это позволит при-
ложению своевременно оповестить пользователя о возникшей ошибке и пре-
дотвратить попытку выполнения программы на неисправном оборудовании.
Тестировать интерфейсы между микроконтроллером и подключенными к
нему внешними устройствами очень просто. Такие тесты обычно заключают-
ся в посылке внешнему устройству тестовых символов (обычно это 0x55 и
ОхАА) и их обратном чтении. Часто устройства, подключенные к шине, име-
ют специальные режимы и регистры, которые позволяют это сделать. Такой
тест часто называется «тест присутствия», так как наряду с тестированием
шины и интерфейсов проверяется присутствие внешнего устройства.
При проверке параллельной шины (в том числе шины микропроцессора)
может потребоваться сначала записать тестовое значение по тестируемому
адресу, а затем записать неверное значение по другому адресу, прежде чем
выполнить считывание тестового значения Дело в том, что в некоторых сис-
темах на шине данных устанавливается «плавающее» значение сигнала в те-
чение некоторого промежутка времени после передачи. Это вызвано влияни-
ем емкостей при переходе от режима записи к режиму считывания. Введение
промежуточной записи неверного значения по другому адресу позволяет пра-
вильно выполнить последующее чтение тестовой величины. Такие проблемы
иногда возникают при тестировании систем — например, оказывается, что
тест присутствия дает правильное значение при обратном считывании в слу-
чае, когда внешнее устройство вообще не было подключено к шине. Значе-
ния тестовой величины должны быть выбраны таким образом, чтобы ни одно
из подключенных к шине устройств не восприняло их как команды, а только
как символы, которые необходимо записать, а затем сосчитать обратно.
Такой же тест может быть использован микроконтроллером для проверки
своих внутренних устройств. Особенный интерес представляет проверка внут-
ренней памяти — RAM и ROM. Память RAM может быть протестирована
прежде, чем приложение начнет инициализировать аппаратные средства внут-
ри и снаружи микроконтроллера. Память ROM, которая используется в каче-
стве памяти программ, можно тестировать с помощью проверки контрольной
суммы, если эта память доступна для чтения.
160 Часть 1. Введение в микроконтроллеры
Чтение памяти программ невозможно в классической Гарвардской архи-
тектуре. Даже если такая возможность имеется, то из-за того, что разрядность
команды обычно больше разрядности данных, возникают проблемы при об-
работке результатов тестирования. /
После проверки памяти и интерфейсов следует проверить правильность
функционирования различных устройств. Для этого все устройства системы
должны иметь возможность работы в режиме «обратной связи» Например,
если имеется аналоговый выход, то он может быть соединен с аналоговым
входом, чтобы проверить правильность полученного значения выходного на-
пряжения (рис 5.1).
М икроконтроллер
Аналоговый
выход
Рис 5.1. Аналоговая обратная связь для самотестирования.
При тестировании микропроцессора можно выполнить проверку каждой
команды перед началом выполнения прикладной программы. Например, в
старом руководстве по IBM-PC можно найти программу «POST» («рочег-ол
self-test»), которая является одним из первых тестов, реализующих проверку
выполнения каждой команды с различными способами адресации. В настоя-
щее время такая проверка не является необходимой, так как возрастание
надежности микроэлектронной продукции привело к тому, что отказы про-
цессоров стали чрезвычайно редкими. Для современных сложнофункциональ-
ных микросхем этот тест не имеет практического значения.
После чтения этого раздела многие могут подумать, что напрасно потеря-
ли время, так как выполнение дополнительных разработок, использование
дополнительной памяти и аппаратных средств для выполнения тестирования
нерационально с экономической точки зрения. Этот вывод справедлив для
многих приложений. Например, при разработке цепочки ключей «R2D2»,
где микроконтроллер используется для зажигания некоторых светодиодов и
воспроизведения каких-то звуков, не стоит заботиться о самотестировании.
Но когда вы находитесь в операционной палате сердечной хирургии, вряд ли
вы будете чувствовать себя комфортно, если будете знать, что разработчики
Глава 5. Разработка приложений 161
аппаратов «искусственное легкое», контроля состояния пациента, реанима-
ционного оборудования и другой медицинской аппаратуры не используют в
них эффективные средства реализации самотестирования
Программаторы
При разработке приложения для хранения программ обычно используется
память E(E)PROM В этом случае имеется возможность обновлять текущий
программный код в микроконтроллере, чтобы производить тестирование и
отладку приложения Чтобы реализовать такую возможность необходимо иметь
подходящий программатор и программу (если используется программирова-
ние в системе) Есть определенные сведения, которые пользователь должен
знать о программировании В данной книге вы познакомитесь с различными
программаторами, которые кроме программирования микроконтроллера ре-
ализуют ряд дополнительных функций
Большинство производителей микроконтроллеров продают также необ-
ходимые для них программаторы, которые могут содержать встроенные эму-
ляторы, чтобы привлечь пользователей к использованию их продукции Та-
кие средства называются «инструментальный набор разработчика» (developer’s
kits) Обычно такой набор кроме программатора/эмулятора включает образцы
компонентов, ассемблер/симулятор/lDE, руководство по использованию и
CD-ROM с информацией в формате Adobe «PDF» Эти наборы содержат все
необходимое для начала разработки приложения Их типичная цена — около
100 долларов, хотя при покупке отдельными частями все это будет стоить
существенно больше Если имеется такой набор для проектируемого вами
устройства, то целесообразно его использовать, даже если вы являетесь ра-
диолюбителем с ограниченным лимитом средств на выполнение разработки
Производители программаторов E(E)PROM также предлагают адаптеры и
программное обеспечение для программирования устройств в процессе се-
рийного производства (промышленные программаторы) В процессе разра-
ботки устройства рекомендуется использовать программатор из набора раз-
работчика, а при их серийном производстве — промышленные программаторы
Как было указано ранее, многие микроконтроллеры выпускаются в вари-
анте, допускающем их программирование в составе системы (lSP-микрокон-
троллеры) Такие микроконтроллеры могут быть запрограммированы без уда-
ления из схемы устройства Это особенно важно при использовании
микроконтроллеров в SMT-корпусах, которые сложно выпаивать и затем снова
монтировать в схему Программирование ISP-микроконтроллеров требует
большего времени по сравнению с микроконтроллерами, которые програм-
мируются с использованием параллельного протокола Время программиро-
вания обычно составляет десятки секунд или минуты, а запись по одному
адресу может потребовать от Ю до 250 мс Это обстоятельство необходимо
учитывать при планировании производственного процесса Большинство 1SP-
микроконтроллеров можно запрограммировать с помощью ICT-тестера (уст-
ройство для тестирования в составе системы), однако тестовое оборудование
это устройство имеет высокую стоимость, поэтому целесообразно произво-
11 Зак 2026
162 Часть 1. Введение в микроконтроллеры
лить программирование другими средствами Наилучшим решением может
стать разработка специального программатора, который подключается к си-
стеме и программирует микроконтроллер, отключая его от других устройств.
Обычно ISP-микроконтроллеры имеют несколько специальных выводов
для связи с программатором Если микроконтроллер программируется в сис-
теме, го схема должна быть построена таким образом, что процесс програм-
мирования не оказывал влияния на другие компоненты схемы, а те, в свою
очередь, не мешали процессу программирования. Можно, например, разме-
стить на головке программатора специальный драйвер, который будет от-
ключать все соединенные с микроконтроллером устройства на время про-
граммирования.
Отладка приложений
Одна из стратегий отладки прикладных программ, которая дает хорошие ре-
зультаты, состоит в том, чтобы использовать ранее отлаженные процедуры
ввода-вывода. В приложениях для 8-разрядных встроенных микроконтролле-
ров процедуры ввода-вывода часто составляют более 80% всего программно-
го обеспечения Когда создаваемое программное обеспечение содержит зна-
чительное количество процедур ввод-вывода, целесообразно сначала
разработать, протестировать и отладить эти процедуры отдельно, а затем вклю-
чить их разрабатываемую прикладную программу. Такой метод называется
«восходящим» программированием («снизу-вверх»),
В приложениях для персональных компьютеров данный метод часто не-
применим, так как большинство процедур ввода-вывода выполняет опера-
ционная система или среда программирования. Но для микроконтроллеров
реализация ввода-вывода составляет основную часть прикладных программ
Общие процедуры ввода-вывода, предоставляемые средствами программи-
рования на языке высокого уровня, обычно имеют большой объем и слиш-
ком специфичны, чтобы их можно было использовать в большинстве прило-
жений для микроконтроллеров Это означает, что для реализации данных
процедур целесообразно самостоятельно разработать стандартные подпрог-
раммы, соответствующие тому методу программирования, который вы ис-
пользуете.
Разработка прикладного программного обеспечения обычно выполняет-
ся в следующей последовательности:
1. Пользовательские процедуры вывода.
2. Пользовательские Процедуры ввода.
3. Процедуры ввода-вывода по общей шине.
4. Разнообразные дополнительные процедуры ввода-вывода.
Такая последовательность разработки позволяет получить необходимое
программное обеспечение и аппаратные интерфейсы для реализации про-
стых процедур отладки и программ тестирования процедур ввода-вывода. Та-
ким образом, если проектируется устройство, в состав которого входит кла-
виатура 4x4, ЖК-индикатор, последовательный интерфейс к памяти EEPROM
Глава 5. Разработка приложений 163
по шине I2C и аналоговые входы, информация с которых должна быть запи-
сана в EEPROM, то сначала надо разработать подпрограммы для функцио-
нирования ЖКИ и чтения с клавиатуры. Шина I2C и аналоговые входы
могут обслуживаться подпрограммами позьзовательского ввода-вывода. Если
разрабатываемое приложение не имеет интерфейса с пользователем, то сле-
дует сначала реализовать последовательный интерфейс ввода-вывода, чтобы
обеспечить доступ к отладочной консоли.
Если имеется эмулятор, то может показаться, что нет необходимости ис-
пользовать описанный выше способ разработки программного обеспечения.
Однако в этом случае число переменных, тестируемых в процессе отладки,
будет минимальным.
Возвращаясь к ранее высказанным рекомендациям, рассмотрим выпол-
нение процедуры отладки. При этом необходимо провести детальную отладку
приложения до получения окончательной версии. Это очень важно, так как с
помощью использования функций ввода-вывода можно убедиться, что все
части приложения работают нормально. В этом случае удается избежать боль-
ших сложностей при отладке конечной версии программы, когда при ее заг-
рузке в микроконтроллер оказывается, что она не обеспечивает выполнение
заданной функции.
После создания процедур ввода-вывода их необходимо протестировать на
симуляторе, чтобы убедиться, что они выполняются, как требуется. Отладка
процедур ввода-вывода на симуляторе может быть облегчена путем разработ-
ки специального файла, который содержит описание входных тестовых сиг-
налов. Программа LIMPS IDE позволяет использовать «виртуальные» устрой-
ства ввода-вывода, исключая необходимость разработки специального файла.
Если после тестирования функция приложения не реализуется на симу-
ляторе, то причиной этого является, вероятно, не программное обеспече-
ние, а какая-то «внешняя» проблема, например, плохие контакты. Такие
проблемы обычно легко выявить при помощи вольтметра, логического проб-
ника или осциллографа.
* V*
Симуляторы
Первичным инструментом для отладки приложений является симулятор. Это
программа, которая выполняет программный код, используя модель микро-
контроллера, и позволяет при этом пользователю наблюдать за ходом выпол-
нения программы. Часто симулятор является частью интегрированной среды
программирования, где отладка происходит на уровне исходного текста.
Симуляторы не являются простыми инструментами. Если Вы не знакомы
с ними, то на изучение всех возможностей, используемых в процессе отлад-
ки, может уйти несколько недель. Частично проблема заключается в изоби-
лии предоставляемых возможностей: различные контрольные точки, возмож-
ные варианты вывода, формирование входных тестовых комбинаций, вывод
на дисплей содержимого регистров и обрабатываемых данных, окна моди-
фикации и многое другое. Самый эффективный способ познакомиться с си-
мулятором — это использовать его при разработке конкретной программы.
164 Часть 1. Введение в микроконтроллеры
Лучше самому написать и отладить программу, которая просто зажигает све-
тодиоды, чем разбираться в программе, которую написал кто-то еще.
Важное преимущество симуляторов — возможность многократного вос-
произведения рабочих ситуаций Если надо понять, почему участок програм-
мы работает некорректно, можно повторять этот участок снова и снова до тех
пор, пока ошибка не будет обнаружена. Воспроизводимость может быть рас-
ширена путем использования специальных файлов входных воздействии. Эти
файлы служат для того, чтобы задать симулятору различные комбинации вход-
ных потоков данных и формы сигналов. Проблема сощания таких входных
файлов заключается в том, что их трудно и долго разрабатывать Обычно эти
файлы пишутся в текстовом формате, что удобно для понимания работы
устройства. Файлы входных воздействий содержат значения входных пере-
менных, которые изменяют состояние устройства в различные моменты вре-
мени, и позволяют контролировать выполнение операции в течение опреде-
ленного числа машинных циклов.
Например, рассмотрим создание файла входных воздействий, который
требуется ввести в симулятор, чтобы протестировать функцию последова-
тельного чтения при поступлении асинхронного символа- OxOOD (ASCll-код
возврата каретки). При этом файл входных тестирующих воздействии будет
выглядеть следующим образом:
Шаг Бит
1 1 ; Линия свободна (ничего не передается) ; - Ожидать пока приложение инициализируется
1000 0 ; Старт - бит
1104 1 ; Бит 0
1208 0
1312 1
1416 1
1520 0 ; Бит 4
1624 0
1728 0
1832 0
1936 1 ; Стоп - бит
2040 1 ; Линия свободна
При создании этого файла предполагалось, что командный цикл (шаг
программы) составляет !мкс, и данные передаются со скоростью 9600 бод,
то-есть период следования битов очень близок к 104 мс Если частота синхро-
низации изменится, то все файлы воздействий также придется изменить.
Для наблюдения сигналов произвольной формы применяется запомина-
ющий осциллограф с выводом на печать численных значений. Эти значения
могут использоваться в качестве основы для создания файла входных воздей-
ствий. Например, такой метод был использован автором при разработке ин-
фракрасного пульта дистанционного управления телевизором Выполняя опе-
рации «вырезать» — «вставить», можно с помощью текстового редактора
создавать достаточно сложные приложения, как это будет показано далее.
Глава 5. Разработка приложений 165
Представляется также весьма полезной реализация программы для генера-
ции входных воздействий, которая могла бы воспринимать макросы и вызы-
вать требуемые воздействия при наступлении определенных событий. Однако
при использовании средств типа универсального отладчика UMPS создание
таких программ становится менее актуальным. >
Как сказано ранее, симулятор является хорошим средством для отладки
повторяющихся событий, но он не подходит для выявления кратковремен-
ных импульсных помех или неожиданных асинхронных или неповторяющих-
ся событий. Чтобы выявить причины сбоев в этих случаях, возможно, при-
дется использовать эмулятор, который может производить трассировку команд
и сигналов ввода-вывода.
Симуляторы воспринимают события, происходящие на границах команд-
ного цикла. Это означает, что некоторые асинхронные события, которые
вызывают прерывание, могут быть восприняты немедленно или с задержкой
на цикл в зависимости от того, когда поступает входной сигнал в пределах
данного цикла. Для выявления таких событий могут потребоваться дополни-
тельные средства отладки, помимо симулятора. i
Эмуляторы
Наиболее сложным и дорогим инструментом для отладки приложения и элек-
трических интерфейсов является эмулятор. Эмулятор — это устройство, кото-
рое заменяет микроконтроллер в схеме и выполняет программу под Вашим
управлением. Эмулятор является превосходным инструментом для разработ-
ки большинства приложений, хотя имеются некоторые разногласия по воп-
росу их использования в процессе разработки.
Обычно эмулятор содержит специальный эмуляторный кристалл, кото-
рый подсоединяется в ведущему компьютеру или рабочей станции. Эмуля-
торный кристалл — это обычный микроконтроллер, помещенный нестан-
дартный корпус с дополнительными выводами, которые подключаются к
шине памяти программ и управляющим сигналам процессора. Эти дополни-
тельные выводы позволяют соединять микроконтроллер с внешней памятью
программ RAM (вместо внутренней EPROM или ROM), которая подключе-
на к ведущему компьютеру. Такой интерфейс позволяет легко загружать тес-
товые программы в эмуляторный кристалл (рис. 5.2). Выводы эмуляторного
кристалла соединяются с разъемом (эмуляторная вилка), который подклю-
чается к отлаживаемому устройству, заменяя в нем микроконтроллер.
Взаимодействие с эмуляторами очень похоже на работу с симулятором.
Разница состоит в том, что эмулятор не воспринимает файл входных воздей-
ствий, так как его выводы подключены к реальному устройству. Эмулятор
предназначен для отладки приложений на реальном оборудовании.
Существуют также эмуляторы, которые на самом деле представляют со-
бой гибрид эмулятора и симулятора. Вместо использования эмуляторного
кристалла такие эмуляторы содержат микроконтроллер, который подсоеди-
нен к ведущей системе и включен в схему приложения так, чтобы выполнять
команды в пошаговом режиме, подобно тому, как интерпретатор выполняет
166 Часть 1. Введение в микроконтроллеры
исходный код программы Обычно скорость выполнения получается в сто и
более раз меньше, чем действительная скорость микроконтроллера Данный
тип эмуляторов намного дешевле «настоящих» эмуляторов, они стоят около
100 долларов, тогда как стоимость настоящего эмулятора 1000 долларов и
выше Несмотря на ограниченность функций такие эмуляторы могут дать до-
вольно точное представление о том, как микроконтроллер будет выполнять
приложение
пользователя
Рис 5.2. Структура эмулятора
Основной недостаток применения эмуляторов состоит в том, что их часто
рассматривают как средство разработки приложений Многие разработчики,
имеющие эмуляторы, используют их для проведения экспериментов и затем
представляют полученные результаты как конечную продукцию Такой под-
ход к разработке приложения крайне неэффективен и может привести к тому,
что в конечной продукции будут содержаться ошибки, так как не была про-
ведена необходимая методическая работа по спецификации интерфейсов, и
различные решения, использованные в проекте, не проанализированы над-
лежащим образом
ГЛАВА
6
ПРИМЕРЫ ПРИЛОЖЕНИЙ
Краткое содержание
Программирование микроконтроллеров
Первое приложение
Приложение часы/термометр
Специфичные приложения
В каждой главе этой книги, посвященной конкретному микроконтролле-
ру, приводится ряд примеров применения, в которых описывается, как со-
здается приложение, и дается обзор различных проблем, которые могут воз-
никнуть на этом пути Сначала дается описание различных типов
микроконтроллеров и возможностей их использования, а затем рассматрива-
ется создание достаточно сложных приложений Однако эта книга не содер-
жит исчерпывающих сведений по разработке приложений для широкого ди-
апазона применений Вместо этого читателю дается достаточная информация
для начала самостоятельной разработки и создания собственного приложе-
ния с минимальной посторонней помощью
В данной главе дается общее описание двух широко используемых прило-
жений, которые в дальнейшем будут реализованы с помощью микроконт-
роллеров, рассмотренных в соответствующих павах книги
Программирование
микроконтроллеров
При разработке приложений для различных микроконтроллеров обычно ис-
пользуются программаторы, которые производитель микроконтроллера по
ставляет в «наборе разработчика» Такой подход обеспечит Вам надежный и
относительно недорогой способ программирования Обычно это самый луч-
168 Часть 1. Введение в микроконтроллеры
ший способ для начала работы, так как средства, входящие в набор разра-
ботчика, очень легко подключаются к персональному компьютеру с исполь-
зованием стандартных интерфейсов и программного обеспечения (например,
Windows) Не требуется какой-то специальной наладки, чтобы заставить эти
приборы правильно работать
Другая причина, почему следует купить набор разработчика, состоит в
том, что помимо программатора в набор входят всевозможные кабели, про-
граммное обеспечение необходимое для разработки, отладки и программи-
рования приложений. В наборы часто входят также образцы микроконтролле-
ров, что дает Вам возможность приступить к работе сразу после покупки
набора Если просуммировать стоимость всех составных частей набора, то
окажется, что набор стоит дешевле, чем отдельные компоненты
Что касается разработки программного обеспечения, то лучше использо-
вать ассемблер и симулятор, разработанные производителем микроконтрол-
лера. Несмотря на то, что в некоторых случаях (особенно для микроконтрол-
леров 68НС05, 8051 и PIC) существует множество других инструментальных
средств, поставляемых третьими фирмами (включая те, которые распростра-
няются бесплатно), следует, при возможности применять средства, предла-
гаемые производителями
Первое приложение
Назначение «первого приложения» — это познакомиться с конкретным мик-
роконтроллером. Этого знакомство позволит Вам после завершения разра-
ботки самостоятельно выполнять следующие этапы проектирования.
Программировать на языке ассемблер (или на языке BASIC для микро-
контроллера Stamp).
Симулировать и отлаживать прикладную программу.
Программировать микроконтроллер.
Выполнять программу с помощью включенного в схему микроконтроллера
Программировать обработчики прерываний.
Схема приложения приведена на рис. 6.1. Это схема будет мигать одним
светодиодом с частотой от I до 4 Гц (чтобы это было легко заметить) и
зажигать другой светодиод при нажатии на кнопку. В большинстве приложе-
ний мигающий светодиод управляется таймером, поэтому программный код
включения-выключения светодиода помещается в обработчик прерывания
таймера.
Программы, которые выполняют аналогичные функции, обеспечивая
мигание отдельных светодиодов, приведены во всех примерах применения
микроконтроллеров. Обычно приложение разрабатывается последовательно:
реализация одной функции, ее отладка, реализация следующей функции и
так далее, пока не будет собрана и запущена вся схема. Этот пример полезен
для освоения программирования микроконтроллера и его первого запуска.
Глава 6. Примеры приложений 169
О ^СС|
220 OmY
Токоограни-
чивающие
резисторы
4,7 К
Резистор
Микро-
контроллер
Свето-
ДИОДЫ
Выключатель ►
Рис. 6.1. Первое приложение управление светодиодами
I
Приложение часы/термометр
Это приложение является наиболее полной демонстрацией того, что может
делать встроенный микроконтроллер Данное устройство представляет собой
часы реального времени, устанавливаемые пользователем, которые показы-
вают текущее время, а также текущую температуру Время и температура
выводятся на ЖК-индикатор (рис 6 2)
Рис. 6.2. Второе приложение цифровые часы/термометр
В качестве термометра используется микросхема DS1820 фирмы Dallas
Semiconductor — однопроводной цифровой термометр Эта микросхема вы-
пускается в различных корпусах, например, можно использовать трехвывод-
ной корпус, которых напоминает транзистор Dallas Semiconductor использу-
ет интерфейс «1-\У1ге»(торговая марка), который позволяет осуществлять
двунаправленную передачу данных между ведущей системой и внешней пе-
риферией, такой как микросхема DS 1820
170 Часть 1. Введение в микроконтроллеры
Микросхема DSI820 обладает множеством полезных особенностей. На-
пример, использование однопроводной шины для соединения нескольких
устройств (при этом каждое устройство получает собственный порядковый
номер, что позволяет обащагься к нему индивидуально) и питание от веду-
щего устройства. Однако в настоящем примере эти особенности не использу-
ются, термометр подключается к напряжению питания Vcc и является един-
ственным устройством на шине. Интерфейс «l-Wire» не был описан ранее в
этой книге, так как он является специфичным для продукции фирмы Dallas
Semiconductor.
Передача данных по шине «l-Wire» инициируется ведущей системой (в
нашем примере — микроконтроллером). Передача осуществляется пакетами по
8 бит (младший бит передается первым) Передача каждого бита занимает по
крайней мере 60 мкс. В исходном состоянии на шине «l-Wire» поддерживается
высокий уровень сигнала путем ее подключения к напряжению питания через
внешний резистор (рис. 6 2). При передаче данных ведущая система или пери-
ферийное устройство (в нашем примере цифровой термометр DS1820) соеди-
няют шину с землей, устанавливая низкий уровень сигнала. Если шина нахо-
дится в низком состоянии в течение очень короткого интервада времени, то
это соответствует передаче логической I. Если шина находится в низком состо-
янии более 15 мкс, то то это соответствует логическому 0 (рис. 6.3).
Рис. 6.3. Временная диаграмма интерфейса «1-wtre» фирмы Dallas
Semiconductor.
Все передачи данных инициируются ведущей системой. Если система пе-
редает данные, то она поддерживает низкий уровень сигнала на линии в
течение определенного периода времени. При приеме данных от микросхемы
DS 1820 ведущая система переводит линию в низкое состояние, затем осво-
бождает ее и проверяет, сколько времени пройдет до того момента, когда
линия вернется в высокое состояние. При передаче данных надо быть уверен-
ным, что не произойдет прерываний, так как прерывания могут повлиять на
процесс обмена. ,
Глава 6. Примеры приложений 171
Перед посылкой в DS1820 любой команды сначала передаются импульсы
«сброса» и «присутствия». Импульс «сброса» реализуется ведущей системой
путем перевода линии в низкое состояние на время от 480 мкс до 960 мкс. В
ответ микросхема DS1820 переводит линию в низкое состояние на время
около 100 мкс (допустимое значение от 60 до 240 мкс). Для упрощения про-
граммного обеспечения проверка поступления импульса «присутствия» час-
то не выполняется. В других приложениях, где термометр может быть отклю-
чен, такая проверка должна производиться.
Для чтения температуры из DS1820 производится следующая последова-
тельность действий:
1. Послать импульс сброса и подождать, пока пройдет импульс присутствия.
2. Послать код 0хСС(команда «skip ROM»), который сообщает DS 1820, что
ему будет адресована следующая команда.
3. Послать код 0x44 (команда преобразования температуры). Текущая темпе-
ратура будет преобразована в цифровой формат и сохранена для последу-
ющего чтения.
4. Подождать не менее 500 мкс, пока завершится преобразование.
5. Послать импульс сброса и подождать, пока поступит импульс присут-
ствия.
Снова послать код ОхСС(команда «skip ROM»).
7. Послать код ОхВЕ, вызывающий чтение внутренней памяти DS1820, в
которой хранится значение температуры (в градусах Цельсия умноженных
на два)
8. Прочесть девять байт, поступающих из внутренней памяти DS1820.
9. Отобразить температуру путем деления первого байта на 2 и посылки пре-
образованного значения на ЖКИ. Если в качестве 9-го бита из внутрен-
ней памяти DS1820 получен 0, то в восьми первых битах указана отрица-
тельная температура, и на ЖКИ выводится символ «-» (минус).
Вся процедура измерения температуры занимает около 5мс. Самый про-
стой способ проверить работает ли термометр — это зажать его пальцами и
посмотреть, как будет повышаться температура на ЖКИ.
В этом приложении используется стандартная тактовая частота, чтобы
показать, что с помощью таймера можно обеспечить необходимые интерва-
лы времени, даже если тактовая частота не кратна 2 (что позволило бы упро-
стить приложение). В предлагаемом решении в обработчик прерывания тай-
мера введены «пустые» команды, чтобы обеспечить выполнение заданного
числа командных циклов. Кроме того используется дополнительная обработ-
ка данных для преобразования значений, полученных от таймера, в стандар-
тные значения времени и реализации предварительной установки времени
пользователем.
В соответствующих разделах книги приведены разные варианты подклю-
чения ЖКИ для различных микроконтроллеров. Это дает возможность выби-
рать для использования в реальном устройстве один из трех представленных
методов подключения и программирования ЖКИ.
172 Часть 1. Введение в микроконтроллеры
Может создаться впечатление, что рассмотренный пример применения
является искусственным и не отражает того, что может встретиться в реаль-
ном приложении На самом деле здесь не все является надуманным, и данное
приложение довольно полно представляет реальную ситуацию, где микро-
контроллер обеспечивает интерфейс с различными внешними устройствами
(в этом примере — кнопка, ЖКИ и DS1820) и выполняет несколько задач (в
этом примере — измерение времени и температуры), хотя настоящие много-
задачные системы или ОСРВ были реализованы только для микроконтролле-
ров 68НС05
Возможно, читатель найдет лучший, более эффективный способ реализа-
ции данного приложения Представленные в книге программы и схемы раз-
работаны для использования в целях обучения, а не для применения в реаль-
ной продукции Эти примеры помогут вам понять, как работают
микроконтроллеры в реальных, достаточно сложных приложениях
Специфичные приложения
Наряду с двумя предыдущими приложениями, для каждого из рассмотрен-
ных микроконтроллеров в соответствующих разделах книги приведены при-
меры, которые иллюстрируют различные особенности данного прибора или
его применения Хотя эти приложения названы «специфичными», во мно-
гих отношениях они являются достаточно общими и демонстрируют прин-
ципы решения проблем, которые могут быть распространены на другие ус-
тройства
Часть
2
МИКРОКОНТРОЛЛЕРЫ
СЕМЕЙСТВА 8051
ГЛАВА
МИКРОКОНТРОЛЛЕР 8051
Краткое содержание
Фирмы-производители 8051
Обычно название Intel ассоциируется с компанией, деятельность которой
полностью посвещена персональным компьютерам и системам. Однако од-
новременно с созданием в 70-х годах первых микропроцессоров эта компа-
ния вела также разработку микроконтроллеров. Усилия по разработке микро-
контроллеров воплотились в архитектуру 8051, которая впервые была
представлена в 1980 году и стала одной из наиболее популярных микроконт-
роллерных архитектур (рис. 7.1)
Рис. 7.1. Микроконтроллеры Dallas Semiconductor 8051 HSM.
Глава 7. Микроконтроллер 8051 175
Микроконтрол тер второго поколения 8051 представляет собой закончен-
ное устройство с большим объемом встроенной памяти программ (ROM и
EPROM) и данных RAM, улучшенными портами ввода-вывода и возможно-
стью подключения внешней памяти Первые микроконтротлеры 8051 были
достаточно быстрыми, имея максимальную тактовую частоту 20MHz
В то время как популярность большинства других типов микроконтролле-
ров опредетяется объемом их продаж, 8051 снискали другую славу Микро-
контроллеры с архитектурой 8051 производятся наибольшим числом компа-
ний В этом заключается их несомненное преимущество, так как каждый
производитель производил усовершенствования 8051 с цетью расширения
функциональных возможностей или повышения скорости Благодаря этому
архитектура 8051 стала весьма привлекательной для реализации широкого
диапазона приложений
В этой главе речь пойдет о классической реализации микроконтроллеров
8051 и ее версии 87С51, где «7» указывает на использование EPROM в каче-
стве памяти программ, а «С» означает, что микросхема изготовлена по CMOS-
технологии Микроконтроллеры 8051 имеют следующие типовые характерис-
тики
Тактовая частота 24 МГц
Командный цикл 12 тактов
Объем памяти программ 4К
Объем памяти данных RAM 128байт
Число линий ввода-вывода — 32
Два 8/16-разрядных таймера
Множество внутренних и внешних источников прерываний
Программируемый последовательный порт
Интерфейс с внешней памятью объемом до 128К
Многие производители провели усовершенствования и расширили воз-
можности выпускаемых ими микроконтроллеров данной архитектуры При
дальнейшем описании будут, в основном, использоваться микроконтролле-
ры со стандартными характеристиками 87С51, которые обозначаются тради-
ционным символом 8051
Фирмы-производители 8051
Сейчас существует более Ю производителей, выпускающих свои версии 8051
Эти версии, совместимые по выводам, программному коду, временным ха-
рактеристикам, имеют существенные отличия от оригинала в части ускорения
выполнения программ и расширения функциональных возможностей Каждый
производитель реализует некоторое улучшение характеристик по сравнению
со стандартным 8051 Первоначальный вариант 8051 может показаться доволь-
но непривлекательным при сравнении с рядом моделей микроконтроллеров
семейств Р1С и 68НС05 Но если рассмотреть весь спектр возможностей, пред-
лагаемых различными производителями 8051, то можно придти к выводу, что
эти микроконтроллеры не уступают любому другому семейству
176 Часть 2. Микроконтроллеры семейства 8051
Являясь создателем архитектуры 8051, компания Intel не внесла суще-
ственных изменений в первоначально разработанные микроконтроллеры.
Наиболее значительное развитие архитектуры 8051 сделано компанией при
разработке микроконтроллеров семейств MCS-151 и MCS-251 Эти микро-
контроллеры, которые по выводам и обьектному коду совместимы с 8051 и
87С51, обеспечивают существенное повышение производительности.
Компания Atmel. которая является «новичком» в области микроконтрол-
леров, предлагает «урезанный» вариант 8051 (наряду с семейством микро-
контроллеров AVR), который размещен в 20-выводном корпусе. Эта версия
8051 ориентирована на использование в относительно простых и дешевых
приложениях. В некоторых версиях микроконтроллеров 8051 компании Atmel
(AT89S105I и AT89S2051) содержится память EEPROM для хранения про-
грамм и энергонезависимая память данных, что делает их удобными для ис-
пользования в процессе изучения и для выполнения радиолюбителями экс-
периментальных разработок.
Компания Dallas Semiconductor разработала быстродействующий вариант
микроконтроллера 8051 HSM («high-speed microcontroller»). Выпустив этот
микроконтроллер, компания Dallas Semiconductor стала лидером по быстро-
действию среди всех поставщиков 8051. В микроконтроллерах 8051 HSM ко-
манды выполняются в два — три раза быстрее по сравнению с базовым се-
мейством 8051.
Одним из наиболее интересных вариантов является микроконтроллер Dallas
Semiconductor с возможностями криптографии. Это устройство позволяет заг-
рузить прикладную программу и хранить ее во внешней памяти SRAM в за-
шифрованном виде Эта микросхема очень полезна для приложений, связан-
ных с дистанционным контролем, где необходимо обеспечить секретность
данных
Компания Philips Semiconductor имеет наиболее широкую по своим воз-
можностям номенклатуру микроконтроллеров, основанных на архитектуре
8051. При разработке приложений, где требуются различные периферийные
устройства, рекомендуется просмотреть каталог Philips Там может найтись
микроконтроллер, который реализует необходимые функции без подключе-
ния внешних устройств. Наряду с широким выбором стандартных вариантов
8051, компания Philips выпускает микроконтроллеры с архитектурой ХА,
которая расширяет архитектуру 8051, обеспечивая возможность обработки
16-разрядных данных.
Одной интересных разработок 80-х годов было создание «совмещенных»
микроконтроллеров и микропроцессоров, в которых стандартная память EPROM
или ROM подключалась непосредственно к задней стороне процессора Пре-
имуществом такого включения было то, что процессор не надо было удалять
из устройства для обновления программного обеспечения. Такая комбинация
более дешевая, так как не применяется гибридная технология (при изготовле-
нии процессора и памяти EPROM/ROM используются разные технологичес-
кие процессы). Экономится также место на плате. Эти преимущества реализо-
ваны в некоторых контроллерах 8051 компании Oki, где используются
микросхемы EPROM/ROM, включаемые в верхнюю часть микроконтроллера
ГЛАВА
8
>
АРХИТЕКТУРА ПРОЦЕССОРА
8051
Краткое содержание
Центральный процессор (CPU)
Способы адресации 8051
Адресация внешней памяти
Прерывания
Выполнение команд 8051
INTEL MCS 151/251
Быстродействующие микроконтроллеры
DALLAS SEMICONDUCTOR
Микроконтроллер 8051 является представителем Гарвардской архитектуры с
возможностями обращения к внешней памяти Архитектура 8051 — это ти-
пичная архитектура микроконтроллеров: если вы сравните ее с архитектурой
AVR и PIC, то не обнаружите принципиальных отличии Однако вы ошибае-
тесь, если думаете, что микроконтроллеры 8051 функционируют аналогично
микропроцессорам Intel 8080 или 8086.
Центральный процессор (CPU)
На верхнем уровне базовая архитектура 8051 ничем не отличается от других
Гарвардских архитектур, представленных в данной книге. На рис. 8 1 показана
архитектура 8051, которая выглядит аналогично ранее описанной Гарвардс-
кой архитектуре. В большинстве случаев программировать микроконтроллер
8051 несложно. Существуют некоторые особенности, но если вы однажды в
12 Зак. 2 02 6.
178 Часть 2. Микроконтроллеры семейства 8051
них разобрались, то в последующем программирование не вызовет особых
затруднений Две особенности, на которые стоит обратить внимание — орга-
низация памяти (включая «память программ» и «регистры» на рис 8 1) и
специфическая реализация регистров
Рис. 8.1. Базовая архитектура микроконтроллера 8051
Рассмотрим подробнее работу регистров (рис 8 2) Первые 256 ячеек па-
мяти данных можно рассматривать как регистры, которые выбираются с по-
мощью прямой адресации (адрес регистра содержится в команде) или кос-
венной адресации (адрес регистра содержится в индексном регистре) Отметим,
что на рис 8 2 выделены адреса с 020h по 02Fh при прямой адресации Эти 16
байт могут адресоваться побитно или побайтно Некоторые биты в служебных
регистрах, имеющих адреса выше 80h, могут быть доступны непосредствен-
но Если требуется изменить отдельные биты в других служебных регистрах,
то можно загрузить их содержимое в область, адресуемую побитно (адреса с
020h по 02Fh), модифицировать, а затем записать обратно в служебный ре-
гистр Эти 128 бит могут также адресоваться как обычные 16 байт памяти
Прямая адресация памяти данных в диапазоне адресов с 80h по FFh вы-
зовет обращение к служебным регистрам Эта область регистров зарезервиро-
вана для процессора и периферийных устройств (рис 8 3) Затененные облас-
ти на рисунке могут содержать или не содержать регистры для управления
периферией В незатененных областях представлен стандартный набор слу-
жебных регистров, которые имеются во всех моделях микроконтроллеров 8051
В этот набор входят указатель стека, индексный указатель DPL и DPH, реги-
стры портов ввода-вывода, регистр состояния PSW и аккумуляторы Далее
будет дана более подробная информация об этих регистрах
Глава 8. Архитектура процесса 8051 179
Косвенная
Прямая
- RAM
- Побитно
адресуемая
RAM
- Банки памяти
4x8 байт
080h
Рис. 8.2. Распределение адресов памяти данных с 000h по OFFh
OFFh
Рис. 8.3. Стандартные адреса служебных регистров.
При всех операциях с прямой адресацией реализуется доступ только к
первым 256 ячейкам памяти данных, которые помечены как «регистры» на
рис 8.1. Для доступа к ячейкам памяти, расположенных за пределами этого
256-адресного пространства, необходимо использовать 16-разрядный индек-
сный регистр DPTR, который состоит из 8-разрядных регистров DPL (млад-
ший байт) и DPH (старший байт)
Для косвенной (или индексной) адресации используется содержимое ука-
зателя стека или индексного регистра. Служебные регистры, расположенные в
180 Часть 2. Микроконтроллеры семейства 8051
диапазоне адресов с 80h по OFFh, не могут быть выбраны с помощью косвен-
ной адресации Многие производители помещают на это место память данных
RAM, которая может быть адресована только при помощи указателя стека или
индексного регистра. При таком размещении памяти получается, что при об-
ращении к 256 первым адресам можно иметь доступ к 384 различным ячейкам
памяти и регистрам Это 256 байт памяти данных, которая полностью доступна
только при использовании команд с косвенной адресацией, и 128 байт слу-
жебных регистров, которые доступны только командам с прямой адресацией
Используя данную информацию о размещении регистров, рассмотрим
функционирование базовой архитектуры с помощью схемы, показанной на
рис 8.4. При перечислении служебных регистров не рассматривался вопрос
об их назначении. Ниже описывается назначение регистров процессора, а
регистры периферийных устройств будут рассмотрены позже.
Рис.8.4. Структура 8051, реализующая прямую адресацию данных.
Регистры-аккумуляторы (А и В) используются для хранения промежуточ-
ных значений результатов арифметических операций. Регистр В используется
только при умножении и делении. Обращение к аккумуляторам реализуется
при выборке определенных команд или путем указания адресов OEOh, OFOh
для регистров Асе, В соответственно.
Слово состояния программы (PSW) содержится в регистре состояния
микроконтроллера 8051. Формат этого слова показан на рис 8.5, где биты CY
и АС являются флагами переноса и полупереноса (перенос между полубай-
тами при обработке двоично-десятичных чисел). Флаг переноса CY устанав-
ливается, когда при сложении или вычитании возникает перенос в старший
байт или заем из него. Это упрощает обработку чисел с разрядностью 16 или
Глава 8. Архитектура процесса 8051 181
более бит. Флаг полупереноса АС устанавливается, когда при сложении или
вычитании результат операции над младшим полубайтом влияет на результат
операции над старшим полубайтом. Эти флаги есть во всех микроконтролле-
рах, представленных в данной книге.
Су Ас F0 RS1 RS0 OV F1 Р
Рис. 8.5. Слово состояния программы (PSW).
Рассматривая содержимое слова PSW, можно заметить отсутствие флага
нуля, который устанавливается в 1, когда результат арифметической, логи-
ческой, битовой или сдвиговой операции равен нулю. Проверка на нуль в
8051 происходит по другому. Команда «jz» проверяет содержимое аккумуля-
тора (А) и выполняет переход, если его содержимое равно нулю.
Биты «RS0» и «RS1» выбирают текущий 8-байтовый банк регистров, ко-
торые используются для реализации однобайтных операций. Команды, адре-
сующие регистры этих банков, содержат меньше байтов и выполняются бы-
стрее. Два младших регистра каждого банка (R0 и R1) могут использоваться
для индексной адресации первых 256 байт в памяти данных.
Указатель стека SP может адресовать только на первые 256 байт памяти.
После включения микроконтроллера его содержимое принимает значение 007h,
но можно изменить это значение, например, на 028h, перемещая стек в вер-
хнюю часть памяти данных. Может показаться странным, что команда загруз-
ки в стек «push» производит инкремент (увеличение на 1) содержимого реги-
стра SP, тогда как в большинстве других типов микроконтроллеров выполняется
его декремент (уменьшение на 1). Это означает, что стек в 8051 растет вверх —
в направлении увеличения адресов, а не вниз — в сторону уменьшения, как в
большинстве микроконтроллеров. Если вы хотите иметь большой объем стека,
то следует установить в указателе стека более низкое начальное значение адре-
са, а не более высокое, как в других микроконтроллерах.
Работая с микроконтроллером 8051 HSM, удобно установить начальное
значение регистра SP равным 80h, так как эта область памяти данных дос-
тупна только через индексный регистр, каким является и указатель стека.
Таким образом, область стека будет располагаться в верхней области первых
256 байт памяти, и можно не беспокоиться о том, чтобы стек не наложился
на какой-либо массив прямо-адресуемых данных.
Регистр DPTR имеет разрядность 16 бит и может адресовать до 64 Кбайт
памяти, начиная с области адресов младших 256 ячеек (регистров). Этот ре-
гистр предназначен, в основном, для адресации внешней памяти, и его ис-
пользование будет более детально рассмотрено в следующих разделах.
На рис 8.6 приведена структура микроконтроллера, в которой показаны
служебные регистры. Можно видеть, как производится доступ к указателю сте-
ка SP, регистрам DPTR, А и PSW, размещенным в области прямо-адресуемых
регистров, и как они взаимодействуют с шинами адреса и данных. Данная
структура является почти полной. Осталось добавить только мультиплексор,
182 Часть 2. Микроконтроллеры семейства 8051
выбираюший непосредственный операнд, заданный в команде, или операнд
из области регистров В результате получаем полностью законченную структуру
(рис 8 7), иллюстрирующую функционирование микроконтроллера 8051
Рис. 8.6. Структура 8051, реализующая косвенную адресацию данных
Рис. 8.7. Структура 8051, реализующая непосредственную адресацию данных
Глава 8. Архитектура процесса 8051 183
Сравним ее со структурой микроконтроллера Dallas Semiconductor 8ОС32О,
приведенной в руководстве по его использованию (рис 8 8)
AD0-AD7
Р2 0-Р2 7
Рис. 8.8. Структура микроконтроллера Dallas Semiconductor DS80C320
184 Часть 2. Микроконтроллеры семейства 8051
Можно заметить, что эти структуры не имеют почти ничего общего. Если
вы сравните структуры, приведенные в этой книге для других типов микро-
контроллеров, со структурами, которые представляют их производители, то
также обнаружите большое различие или полное несоответствие. Это несоот-
ветствие происходит из-за того, что автор данной книги хочет наглядно по-
казать, как работает микроконтроллер Основное внимание уделяется описа-
нию процесса выполнения команд, чтобы читателю было понятно, что
происходит внутри процессора для получения необходимого результата вы-
полняемой операции. В приведенных упрощенных структурах не показан ин-
терфейс процессора с периферийными устройствами, который будет описан
в последующих главах.
Является ли такой метод изучения различных микроконтроллеров и их
процессоров наиболее правильным? Трудно дать однозначный ответ на дан-
ный вопрос. Однако можно утверждать, что это очень эффективный способ,
чтобы понять, как работают микроконтроллеры, и визуально представить,
как происходит пересылка данных внутри них.
Способы адресации
Способы адресации в микроконтроллере 8051 реализованы с учетом приори-
тета доступа к определенным массивам данных. В большинстве приложений
часто обращаться приходится к очень небольшому количеству переменных, к
некоторым переменным обращение происходит время от времени, а боль-
шая часть переменных выбирается достаточно редко При проектировании
8051 компания Intel определила для доступа к данным однобайтный цикл
выполнения команд, который содержит 12 тактов. Доступ к регистрам теку-
щего банка выполняется с помощью однобайтных команд за 12 тактов. Име-
ются также двухбайтные команды, выполняющие обращение к первым 256
адресам памяти за 24 такта (2 цикла), и трехбайтные команды для доступа к
ячейкам памяти за пределами первых 256 байт, для выполнения которых
требуется несколько циклов. Графически это показано на рис. 8.9, который
полезно помнить при разработке сложных прикладных программ на языке
ассемблера. При разработке программ следует стремиться оптимизировать
размещение переменных в памяти данных, чтобы обращение к ним произво-
дилось за меньшее число циклов и требовало меньшего числа байт, занима-
емых в памяти программ.
Первый из рассматриваемых способов — непосредственная адресация не
требует обращения к регистрам или памяти данных. При непосредственной
адресации на обработку поступает операнд, который является частью коман-
ды. При программировании на языке ассемблера значение непосредственно-
го операнда помечается символом #, например:
add А, #77 ; Добавить 77 к содержимому аккумулятора
Эта команда добавляет десятичное число 77 к содержимому аккумулято-
ра, результат поступает обратно в аккумулятор.
Глава 8. Архитектура процесса 8051 185
#Байты
Рис. 8.9. Сравнение способов адресации 8051.
Адресация к регистровым банкам обеспечивает доступ к одному из 8 бай-
тов, размещенных в текущем банке. Это наиболее эффективный способ дос-
тупа к данным с точки зрения уменьшения объема памяти программ и со-
кращения числа требуемых командных циклов. Большинство команд,
работающих с регистровыми банками, выполняются за один цикл и занима-
ют только один байт. Регистры банка имеют имена, начиная с R0 и по R7.
Прямая адресация отличается от регистровой тем, что можно получить
доступ к любому байту в первых 256 ячейках памяти, указав 8-разрядный
адрес. Ячейки с адресами от 080h по OFFh не могут быть выбраны при помо-
щи прямой адресации. Если написать команду:
mov A, 088h
то в аккумулятор загрузится содержимое служебного регистра TCON (ре-
гистр управления таймером), а не содержимое ячейки памяти. Не следует
путать прямую адресацию с непосредственной. Если в команде с непосред-
ственной адресацией забыть поставить символ # перед операндом, то будет
выполняться команда с прямой адресацией. Это является одной из распрос-
траненных синтаксических ошибок при программировании микроконтрол-
леров 8051. Следует быть особенно внимательным при разработке и отладке
прикладных программ, чтобы быть уверенным, что реализуется требуемый
способ адресации.
Косвенно-регистровая адресация осуществляется с помощью регистров R0
или R1 текущего банка. В этом случае содержимое регистра R0 или Rl исполь-
зуется как 8-разрядный адрес для обращения к первым 256 байтам памяти
данных.
orl A,@RO
На выполнение косвенно-регистровой адресации указывает символ @
перед именем регистра R0 или RI. Использование других регистров банка
приведет к ошибке.
Регистр DPTR используется в качестве 16-разрядного индексного регист-
ра. При этом можно указать смещение, которое добавляется к содержимому
186 Часть 2. Микроконтроллеры семейства 8051
DPTR для формирования адреса операнда Такой способ адресации, который
называется косвенно-регистровая со смещением, удобно использовать для
доступа к отдельным элементам в структурах данных
Когда необходимо получить доступ к данным, хранящимся в памяти про-
грамм, можно воспользоваться командой «move А, @А+РС» Эта команда
адресует в памяти программ байт, который расположен со смещением отно-
сительно адреса текущей команды Значение смещения, которое размешает-
ся в аккумуляторе А, должно быть заранее вычислено перед выполнением
команды
Оставшиеся способы адресации используются для изменения текущего
содержимого программного счетчика Подобные способы адресации есть и в
других микроконтроллерах. Подробнее о них будет рассказано в главе «Систе-
ма команд 8051»
Адресация внешней памяти
Микроконтроллер 8051 может адресовать до 64Кбайт внешней памяти про-
грамм и до 64К внешней статической памяти данных SRAM Микроконтрол-
лер содержит встроенный интерфейс внешней памяти, который использует
для обращения к ней линии портов Р0 и Р2 (рис 8 10 )
Рис. 8.10. Обращение микроконтроллера 8051 к внешней памяти.
Каждый раз, когда при обращении к памяти программ или данных сфор-
мированный адрес выходит за границы внутренней памяти, активизируются
внешние выводы, и микроконтроллер 8051 пытается выбрать внешнюю па-
мять Если вы знакомы с другими типами микроконтроллеров, то у вас воз-
никнет вопрос, как это можно выполнить с помощью «типовых» портов вво-
Глава 8. Архитектура процесса 8051 187
да-вывода Вы можете обратиться к главе «Аппаратные особенности 8051»,
чтобы посмотреть, как это реализуется, и какие сигналы при этом поступа
ют на внешние выводы При обращении к внешней памяти сначала выдаются
младшие 8 бит адреса, затем по этом же линиям производится запись или
чтение данных
Временные диаграммы сигналов при чтении внешней памяти программ
показаны на рис 8 II Фактически доступ к внешней памяти производится
так же, как обращаются к внешней 8-разряднои памяти микропроцессоры
Intel 8085 и 8088 Для доступа к памяти данных RAM вместо сигнала разреше-
ния выборки памяти программ PSEN используются сигналы «чтения» _RD
и «мписи» WR В микроконтроллере Dallas Semiconductor HSM 8051 дли-
тельность цикла обращения к памяти может быть увеличена путем «расшире
ния» цикла дополнительными тактами Такое увеличение длительности ник-
ла может потребоваться при переходе от классических микроконтроллеров
8051 на HSM, которые реализуют более быстрые командные циклы, чтобы
при обращении к «медленным» устроиствам выполнялись требуемые времен-
ные соотношения
Figure 8.11. Цикл чтения внешней памяти программ ROM
Если при подключении внешней памяти не требуется использовать все 64
Кбайт адресуемого пространства, то часть линии ввода-вывода может быть
использована не для адресации памяти а по своему прямому назначению
Для этого необходимо разместить внешнюю память в верхней части адресно-
го пространства, чтобы на соответствующих адресных выводах всегда поддер-
живался высокий уровень Тогда эти выводы можно использовать для приема
или выдачи внешних сигналов
Рассмотрим пример проектирования устройства, к которому требуется
подключить 2 Кбайт внешней памяти данных SRAM с помощью соответству-
ющих выводов портов Р0, Р2, но два из этих выводов необходимо оставить
для реализации ввода-вывода данных В этом случае память SRAM может быть
подключена к микроконтроллеру 8051 так, как показано на рис 8 12 На этой
схеме линии Р2 5 и Р2 6 порта Р2 могут использоваться для ввода-вывода
188 Часть 2. Микроконтроллеры семейства 8051
соответствующих битов данных, так как при обращении к памяти SRAM их
состояние не меняется. Если бит адреса установлен в 1 (высокий уровень), то
соответствующая линия ввода-вывода не будет изменять своего состояния.
Это означает, что линии ввода-вывода, использующиеся для адресации па-
мяти, должны всегда быть установлены в высокое состояние, чтобы не воз-
никло проблем с доступом к ячейкам памяти с определенными адресами.
Рис. 8.12. Подключение внешней памяти SRAM емкостью 2 Кбайт.
Как отмечено ранее, устройства ввода-вывода можно достаточно просто
подключать к микроконтроллеру 8051, если использовать один из выводов
порта Р2 для выдачи сигнала разрешения выборки CS или тактового сигна-
ла для внешнего устройства. Один из примеров применения 8051 демонстри-
рует, как дешифрация адреса используется для обращения к устройствам
ввода-вывода, размещенным в адресном пространстве внешней памяти. На
рис. 8.I3 устройство Device I имеет адрес OFEOOh, устройство Device 2 —
адрес OFDOOh, а память ROM (Device 0) размещается, начиная с адреса
OFCOOh. Эта схема позволяет осуществлять доступ к отдельным устройствам,
не оказывая влияния на другие, и без использования сложной дополнитель-
ной логики. Младшие 8 разрядов адреса используются для адресации внутри
периферийных устройств.
Одной из интересных возможностей является использование общей внеш-
ней памяти для хранения программ и данных. Это достигается путем объеди-
нения сигналов PSEN и RD при помощи логической операции И (рис. 8.14).
С помощью такого включения можно реализовать схему, в которой микро-
контроллер 8051 производит запись в свою память. Такая схема может ис-
пользоваться в качестве экспериментального средства отладки для загрузки
Глава 8. Архитектура процесса 8051 189
программы в память SRAM Возникает интересный теоретический вопрос —
относится ли данная схема относится к архитектуре Фон Неймана и к Гар-
вардской архитектуре?
ROM Device 0
Рис. 8.13. Ввод-вывод с отображением на память.
Рис. 8.14. Реализация общей памяти программ и данных.
190 Часть 2. Микроконтроллеры семейства 8051
Прерывания
Карта нижней области памяти программ микроконтроллера 8051 показана на
рис. 8.15. По адресу 0 располагается вектор сброса в начальное состояние (к
этомуже вектору происходит обращение при переполнении сторожевого тай-
мера). При сбросе микроконтроллер переходит к выполнению команды, ад-
рес которой задается этим вектором. После подтверждения прерывания уп-
равление передается по соответствующему адресу, то-есть прерывание 0
вызывает переход по адресу 03h, прерывание 1 — по адресу OBh и так далее.
На первый взгляд в этом нет ничего особенного — все микроконтроллеры,
представленные в данной книге, работают подобным образом. Но особен-
ность заключается в том, что другие микроконтроллеры не предоставляют
область памяти для непосредственного размещения программ обработки каж-
дого вида прерываний. Восемь байт памяти программ, выделяемые для каж-
дого обработчика прерываний могут быть использованы, чтобы разместить
обработчик целиком или обеспечить переход к более сложной программе
обработки. Выделение восьми байт для размещения команд позволяет доста-
точно легко осуществлять обращение к простым процедурам обработки пре-
рываний, например, таким, как выполнение сброса прерывания от таймера
или увеличение содержимого счетчика реального времени.
8-байтовое окно
для обработчика
прерывания 2
8-байтовое окно
для обработчика
прерывания 1
8-байтовое окно
для обработчика
прерывания 0
Вектор сброса
Адрес
000136
OOOOBh
00003h
OOOOOh
Память программ
Рис. 8.15. Адресация прерываний в 8051
Конечно, восьми байт недостаточно, чтобы сохранить содержимое регис-
тров контекста прежде, чем перейти к обработке прерывания. Однако в 8051
нет флага нуля, поэтому содержимое слова состояния PSW сохраняется, если
при обработке прерывания не используются команды сложения и вычита-
ния, которые изменяют флаги переноса в регистре PSW. Простая установка
битов или инкремент и декремент содержимого регистров выполняются без
изменения содержимого PSW.
Глава 8. Архитектура процесса 8051 191
Выполнение команд 8051
Процессорное ядро 8051 отличается от процессоров большинства других мик-
роконтроллеров. Микроконтроллер 8051 содержит процессор с микропрог-
раммным управлением, тогда как другие микроконтроллеры используют про-
цесоры с аппаратным управлением (рис 8.16).
Что такое микропрограммируемый процессор9 Это процессор внутри про-
цессора или конечный автомат, который выполняет каждую команду обраща-
ясь к адресу микропрограммы, реализующей ее выполнение Когда очередная
команда поступает в регистр команд; определенные биты команды использу-
ются для указания точки входа в микропрограмму, которая содержит последо-
вательность микрокоманд. Эти микрокоманды поступают в дешифратор мик-
рокоманд и исполнительное устройство, которые выполняет необходимые
операции, пока не поступит микрокоманда «конец выполнения команды».
I I
I Дешифратор команд 8051 ।
Рис 8.16. Процессор с микропрограммным управлением в микроконтроллере 8051
Следует отметить, что разрядность регистра команд больше, чем разряд-
ность памяти программ. Память команд микроконтроллера 8051 имеет раз-
рядность 8 бит, а многие команды содержат более 8 бит. Это значит, что
перед выполнением вся команда должна быть загружена в регистр команд,
что может потребовать дополнительного времени.
Процессор с аппаратным управлением использует отдельные группы би-
тов в поступившей команды для включения специальных логических блоков,
которые могут быть уникальными для каждой команды. Эти блоки работают
как комбинаторные схемы, обеспечивая выполнение команды (рис. 8.17).
Каждый из этих методов имеет свои преимущества. Процедура микропрог-
раммирования обычно проще, чем разработка аппаратной реализации. Поэтому
проектирование процессоров с микропрограммным управлением может быть
проведено в более короткие сроки и при этом меньше вероятность появления
проблем в определенных ситуациях. Показательным является следующий при-
192 Часть 2. Микроконтроллеры семейства 8051
мер. Несколько лет назад компания IBM решила создать микропроцессор, кото-
рый мог бы выполнять ассемблерный набор команд компьютеров серии 1ВМ/
370. Прежде чем начать разработку нового процессора, компания провела ана-
лиз существующих процессоров и обнаружила, что микропроцессор Motorola
68000 имеет такую же аппаратную организацию, как процессор 1ВМ/370, хотя
набор выполняемых им команд был совершенно другим. Компания IBM заказа-
ла компании Motorola переписать микропрограмму, составленную для микро-
процессора 68000, и в результате получила новый микропроцессор, выполняю-
щий команды 1ВМ/370, за малую часть стоимости разработки нового прибора.
Рис. 8.17. Процессор с аппаратным управлением.
Процессор с аппаратным управлением обычно имеет намного более слож-
ное устройство, так как подобные операции много раз реализуются аппарат-
ными средствами. Например, операции записи или чтения содержимого ре-
гистра повторяются многократно для каждого типа команд. Это означает, что
проект такого процессора будет менее гибким и более сложным в отладке,
чем при микропрограммной реализации. Однако процессор с аппаратным
управлением может работать значительно быстрее.
Классический микроконтроллер 8051 использовал процессор с микро-
программным управлением, который требует от 12 до 24 тактов для выпол-
нения каждой команды. Все другие микроконтроллеры, представленные в
этой книге, работают существенно быстрее.
Ниже будут представлены три типа микроконтроллеров, совместимых с
8051, которые были разработаны для повышения скорости выполнения на-
бора команд 8051.
INTEL MCS 151/251
Микроконтроллеры MCS-151 и MCS-251 представляют собой усовершенство-
ванные версии классического 8051, в которых реализованы некоторые изме-
Глава 8. Архитектура процесса 8051 193
нения и улучшения. Улучшения касаются расширения набора команд для
пересылки 16/32-разрядных данных, возможность адресации памяти данных
объемом до 16 Мбайт, при этом объем стека может быть увеличен до 64
Кбайт вместо первоначальных 256 байт памяти. Что наиболее важно — время
выполнения команд сокращено до 2-4 тактов.
Существуют версии MCS-151 и MCS-251, которые совместимы с 8051 по
выводам и программному обеспечению (на уровне кодов). Эти микроконтроллеры
могут работать на меньшей частоте, обеспечивая такую же производительность,
как 8051, которые они замещают. При этом они потребляют меньшую мощность
и производят меньше помех. Такое применение микроконтроллеров представляет
значительный интерес, хотя многие пользователи обычно ассоциируют усовер-
шенствование микроконтроллеров только с повышением скорости их работы, не
обращая внимание на возможности применения новых приборов при сохранении
прежней рабочей скорости. По-видимому, развитие технологии персональных
компьютеров и рабочих станций приучило нас думать, что любое усовершен-
ствование имеет целью только повышение быстродействия.
MCS-151 — это замена 8051 с тем же набором команд и основных харак-
теристик. MCS-251 - это усовершенствование 8051/MCS-151 в направлении
дальнейшего повышения производительности. Микроконтроллер MCS-251
работает в 15 раз, a MCS-151 в 5 раз быстрее классического 8051. Оба микро-
контроллера — MCS-151 и MCS-251, содержат процессоры с аппаратным
управлением, которые обеспечивают конвейерное выполнение команд с опе-
режающей выборкой следующей команды. Эта их особенность является ос-
новной причиной более быстрого выполнения программ.
Высокоскоростные микроконтроллеры
DALLAS SEMICONDUCTOR
Для реализации описанных в данной книге устройств на базе 8051, исполь-
зовались высокоскоростные микроконтроллеры Dallas Semiconductor HSM.
Компания Dallas Semiconductor впервые предложила заменить микропрог-
раммное процессорное ядро на ядро с аппаратным управлением. В результате
время выполнения команд составило 4, 8, 12 или 16 тактов, что обеспечило
при такой же тактовой частоте повышение производительности от 1,5 до 3
раз по сравнению с обычным 8051.
Из-за различия времени выполнения команд нельзя просто включить в
проектируемое устройство вместо 8051 микроконтроллер Dallas Semiconductor
HSM с пониженной тактовой частотой, как это можно делать с MCS-151
Нелинейное увеличение производительности (по данным компании Dallas
Semiconductor применение HSM дает повышение производительности, в
среднем, в 2,5 раза по сравнению с 8051) может вызвать некоторые пробле-
мы при замене 8051 на HSM в некоторых приложениях. Однако если для
обеспечения задержек в приложении используются только таймеры, то не
возникает проблем при переносе прикладных программ с 8051 на HSM.
На диаграммах, иллюстрирующих реализацию команд, приведено количе-
ство тактов, требуемых для их выполнения, для классического 8051 и для HSM.
13 Зак. 2026-
ГЛАВА
9
АППАРАТНЫЕ СРЕДСТВА
МИКРОКОНТРОЛЛЕРОВ 8051
Краткое содержание
Типы корпусов
Параллельный ввод-вывод
Таймеры
Сторожевой таймер
Последовательный ввод-вывод
Микроконтроллеры Dallas Semiconductor
с шифрованием информации
Программирование
Маркировка микроконтроллеров
Основной проблемой при написании этой главы стало выделение аппарат-
ных средств, общих для всех моделей 8051 Микроконтроллеры с архитекту-
рой 8051, выпускаемые различными производителями, обладают множе-
ством специфических особенностей Поэтому при описании различных
аппаратных средств микроконтроллера будут даваться ссылки на производи-
теля и необходимые комментарии.
Типы корпусов
Основным вариантом корпуса для микроконтроллеров 8051 является DIP
шириной 1,52 см На рис 9 1 показан стандартный корпус и 20-выводная
версия 8051, выпускаемая компанией Atmel ,
Глава 9. Аппаратные средства микроконтроллеров 8051 195
„Reset Vcc Pl 0 Vcc
РЗ 0 (RXd) Pl 7 > 1 Pl I P0 0 (ADO)
РЗ 1 (TXd) Pl f> Pl 2 POI(ADI)
XTAL2 Pl 5 ) * Pl.3 P0 2(AD2)
XTALI Pl 4 PI 4 PO3(AD3)
Р3 2( INTO) Pl 3 J t Pl 5 P0 4(AD4)
Р3 3( INT1) PI 2 Pl 6 P0 5 (AD5)
РЗ 4 (ТО) PI 1 t AIN 1) J t Pl 7 P0 6(AD6)
P3 51TI) РИМ AIN0) > « „Reset PO7(AD7)
Gnd Pl 7 > P3.0 (RXD) _EAVpp
t P3 1 (TXD) ALEcPROG
P3()(JNT0) _PSFN
P3 3(INT1) P2.7(AI5)
P3 4 (TO) Р2.ЫА14)
P,3 5(T1) P2 5(AI3)
i i P3 6 („WR) P2 4(A12)
t P3 7 ( RD) P2 3(Ali)
< XTAL2 P2 2(A10)
< XTALI P2 1 (A9)
t (ind P2 0 (A8)
Рис 9.1. Микроконтроллеры Atmel АТ89С2051 и Intel 8051 в корпусах DIP
Микроконтроллер 8051 выпускается также в разнообразных SMT-корпу-
сах для поверхностного монтажа. Расположение выводов в SMT-корпусах не
совпадает полностью с разводкой РТН корпусов, что необходимо учитывать
при разработке различных изделий.
Большинство производителен придерживается стандартной разводки Intel
в своих версиях 8051. выпускаемых в 40-выводных DlP-корпусах. Показанная
на рис. 9.1 версия Atmel интересна тем, что реализует большинство возмож-
ностей, присущих классическому 8051, используя значительно меньшее ко-
личество выводов.
Параллельный ввод-вывод
Хотя все микроконтроллеры, описанные в данной книге, имеют порты па-
раллельного ввода-вывода, порты 8051 радикально отличаются от них по своим
возможностям и особенностям работы. На рис. 9.2 показано типовое включе-
ние вывода параллельного порта 8051 Не все порты микроконтроллера под-
ключаются к высокому уровню Vcc через соответствующий транзистор. В стан-
дартном 8051 порт 0 не имеет такого подключения, а порты 1.2 и 3 подключены
к Vcc. Описать работу такой схемы включения проще всего, если рассматри-
вать ее как выход с «общим коллектором» (реально с «общим стоком»), ко-
торый может подключаться к высокому уровню потенциала.
Схема на рис. 9.2 работает как двунаправленный ввод-вывод. В схеме ис-
пользуется двухфазный выходной каскад на двух транзисторах. Когда в триггер
регистра данных записана логическая I. нижний транзистор закрыт, верхний
транзистор открыт, и внешний вывод через резистор подключается к высоко-
му потенциалу Vcc. При записи логического 0 верхний транзистор закрывает-
ся, открывает нижний транзистор, который подключает вывод к «земле». Это
означает, что линия всегда активна. Как же происходит чтение данных?
196 Часть 2. Микроконтроллеры семейства 8051
Рис. 9.2. Подключение вывода параллельного порта 8051.
Когда в триггер регистра записана I, данная схема имеет относительно
большое выходное сопротивление («слабый» выход) При подключении к внеш-
нему выводу другого источника сигнала с низким выходным сопротивлени-
ем («сильный» выход) состояние вывода будет определяться этим источни-
ком. Поэтому в режиме чтения на внутреннюю шину данных 8051 будет
поступать значение, поступающее от внешнего источника. Такая организа-
ция ввода-вывода в некоторых случаях облегчает подключение внешних уст-
ройств, а в некоторых усложняет Сложности возникают, если выход микро-
контроллера должен быть источником достаточно большого вытекающего тока
Если микроконтроллер 8051 должен выдавать в нагрузку ток более несколь-
ких десятков микроампер, то к выход следует сделать более мощным. Из-за
высокого выходного сопротивления входная линия может относительно дол-
го (порядка микросекунд) переключаться из низкого состояния в высокое В
микроконтроллерах Dallas Semiconductor на линиях ввода-вывода включены
мощные драйверы, которые переводят линию в высокое состояние за 2 такта
В ряде периферийных устройств, например, в последовательных портах, так-
же часто используются схемы, обеспечивающие более быстрое переключе-
ние выхода в высокое состояние
Таймеры
Внутренние таймеры, используемые в 8051, являются наиболее гибкими для
применения, по сравнению с таймерами других микроконтроллеров, пред-
ставленных в этой книге. Возможны четыре режима работы таймеров, кото-
рые дают возможность управлять различными устройствами с наименьшими
программными затратами. Таймеры 0 и I, которые имеют 8/I6 разрядов, вхо-
дят в состав большинства моделей 8051 Четыре различных режима работы
реконфигурируют структуру таймера для выполнения разнообразных задач
(рис 9 3) В этой структуре TLn и ТНп представляют 8 младших и 8 старших
Глава 9. Аппаратные средства микроконтроллеров 8051 197
разрядов каждого таймера, где п —его номер (например, TL0 — младший 8-
разрядный регистр таймера 0)
Прерывание
таймера
Рис 9.3. Структура таймера 8051
Источником синхросигналов, переключающих таймер, могут быть такто
вые импульсы, частота которых уменьшается при помощи делителя, или
внешний сигнал Выбор источника определяется битом С/_Т в регистре ТMOD
таймера Биты выбора режима в регистре TMOD определяют режим работы
таймера
В режиме 0 таймер конфигурируется как 13 разрядный счетчик, перепол-
нение которого фиксируется по возникновению переноса из разряда 4 реги
стра TLn В режиме I таймер работает как 16-разрядный счетчик
Режим 2 обычно используется для задания скорости обмена встроенного
последовательного порта Для счета используется только счетчик TLn Когда
содержимое этого счетчика превышает OFFh, то в него загружается значе-
ние, которое содержится в регистре ТНп, и счет возобновляется Последова-
тельный порт может использовать сигнал переполнения, чтобы задать ско
рость обмена
В режиме 3 регистры TL0 и ТНО работают как два независимых таймера
Этот режим обеспечивается только в таймером 0, так как для его реализации
требуются как внешним так и внутренний синхросигналы, а таймер 1 не
может переключаться внешним сигналом Таймер ТНО переключается вне-
шними сигналами, a TL0 — внутренними тактовыми импульсами Режим 3
может применяться для реализации тахометра, когда счетчик ТНО определя-
ет количество событий (например, оборотов вала), a TL0 — промежуток вре-
мени, в течение которого они произошли
В расширенной версии микроконтроллера 8052 добавлен таймер 2, кото-
рый является 16-разрядным Этот таймер может использоваться для обнару-
198 Часть 2. Микроконтроллеры семейства 8051
жения и измерения длительности импульсов, приходящих от внешнего ис-
точника Он также может использоваться для задания скорости работы второ-
го последовательного порта.
Стоит заметить, что число циклов, загружаемое в TLn из ТНп в режиме
2, меньше требуемой задержки Подсчет, который показывает, как можно
получить необходимую задержку, будет приведен далее в этой главе, когда
речь пойдет о последовательных портах
Сторожевой таймер
Сторожевой таймер, имеющийся в некоторых моделях 8051, используется
для возврата микроконтроллера из спящего режима, сброса сбившейся про-
граммы или прерывания работы микроконтроллера Сторожевой таймер мо-
жет быть сброшен только программным путем (рис 9 4).
Тактовый сигнал
Рис. 9.4. Сторожевой таймер 8051.
Используя управляемый делитель частоты и блок выбора интервала вре-
мени, можно запрограммировать сторожевой таймер на отсчет интервалов
длительностью от 128 тысяч до I7 миллиардов тактов Другими словами, если
8051 работает на частоте 12 MHz, то интервал составит от I0 мс до 24 мин
Для сброса сторожевого таймера необходимо выполнить следующую пос-
ледовательность команд.
mov OC7h, #OAAh
mov OC7h, $055h
mov WDCON, $002h
; Поспать контрольный символ
; Сбросить сторожевой таймер
Эта последовательность команд используется, чтобы предотвратить неже-
лательный сброс сторожевого таймера, если программа потеряла управление
Такой «таймированный» доступ используется также для других операций с
Глава 9. Аппаратные средства микроконтроллеров 8051 199
периферией, чтобы предотвратить случайную установку или сбоос внешних
аппаратных интерфейсов.
После того как в регистр записана последовательность AAh/55h, сброс
должен последоватьЪ течение четырех командных циклов. Чтобы быть уве-
ренным, чю это произойдет, следует запретить прерывания перед записью
первого символа и разрешить их после команды сброса.
Последовательный ввод-вывод
Последовательный порт 805I — это довольно сложное устройство, кото-
рое способно посылать данные синхронно и асинхронно в различных режи-
мах (рис. 9 5). Структура на рис. 9.5 вероятно будет отличатся от последова-
тельных портов других микроконтроллеров. Основная причина этого состоит
в том, что последовательный порт 8051 способен работать как в синхронном,
так и асинхронном режимах.
Рис. 9.5. Блок схема последовательного приемника/передатчика 8051.
Для синхронного режима (режим 0) используется тактовый сигнал про-
цессора. Данные посылаются и принимаются по линии RX, а синхросигналы
по линии ТХ. В синхронном режиме 8051 может выступать только в роли
ведущего устройства (рис. 9.6). Передача данных инициируется записью по
адресу регистра данных последовательного порта. Данные передаются, то-
есть имеют достоверные значения при поступлении переднего фронта такто-
вого сигнала.
После приема символа может быть реализовано аппаратное прерывание,
или можно следить за состоянием порта с помощью программного опроса
значения бита «Ri n» в регистре управления SCON. Скорость синхронной
передачи равняется одной четвертой или одной двенадцатой от тактовой ча-
стоты процессора.
200 Часть 2. Микроконтроллеры семейства 8051
RXd (Данные)
DO D1
D2 D3 D4
D5 D6 D7
TXd
(Тактовый сигнал)
Рис. 9.6. Временные диаграммы синхронной последовательной передачи 8051.
Скорость асинхронной передачи в классическом 8051 равна частоте ко-
мандного цикла, деленной на 32 или о4 Это означает что скорость передачи
зависит от скорости микроконтроллера. Для получения скорости асинхрон-
ной передачи 9600 бод максимальная частота 8051 должна составлять 7,372800
МГц (9600 х 12 х 64). Для асинхронной передачи предназначен режим 1 пос-
ледовательного порта.
Передача данных инициируется записью байта в сдвиговый регистр пере-
датчика. Передатчик 8051 не имеет регистра хранения, который есть в боль-
шинстве других микроконтроллеров. Эго означает, что запись данных в ре-
гистр передатчика невозможно произвести во время обмена, когда происходит
сдвиг байта. Для достижения максимальной скорости передачи необходимо
следить за битом «Т1» регистра SCON и перезагружать сдвиговый регистр
сразу после окончания передачи предыдущего байта.
В других микроконтроллерах следующий байт просто загружается в ре-
гистр хранения, и его содержимое копируется в сдвиговый регистр после
окончания сдвига. Программа может следить за битом, который показывает
наличие данных в регистре хранения, или ожидать прерывания, которое ге-
нерируется когда регистр хранения пуст. Такой метод позволяет быстрее пе-
редавать данные, не требуя непрерывного слежения за состоянием сдвигово-
го регистра.
После принятия байта, который может содержать 8 или 9 бит, устанавли-
вается бит «R1» в регистре SCON.
Можно генерировать аппаратное прерывание, когда сдвиговый регистр
передатчика пуст или сдвиговый регистр приемника заполнен. Биты разре-
шения прерывания находятся в регистре управления прерываниями IE. Об-
работчик прерывания должен сбрасывать эти биты, так как они не сбрасыва-
ются автоматически перед началом обработки прерывания, как это
выполняется при работе с таймером.
Синхронизация асинхронного порта в классическом 8051 может вызвать
трудности, если приложение должно работать с разными скоростями. Чтобы
решить эту проблему последовательный порт в микроконтроллерах Dallas
Semiconductor HSM модифицирован для работы в четырех режимах вместо
двух режимов в «классическом» 8051. Два дополнительных режима дают воз-
можность приложению работать со стандартной тактовой частотой, кратной
I МГц, и реализовать стандартные скорости передачи данных.
Глава 9. Аппаратные средства микроконтроллеров 8051 201
Вместо того, чтобы исиользова1ь для синхрон пыпи и частоту командных
циклов, в этих двух дополнительных режимах нсполыуе|ся переполнение тан-
мера! .или тапмера2
Для танмера I скорость передачи определяется выражением
DataRate = ( 1 + SMOD ) * Timed OverflowRate I 32
для таймера 2 г» •
DataRate = Timer20verflowRate / 16,
где TimerOvertlowRate — скорость переполнения таймера I или 2. SMOD = 0
inn I — значение бита SMOD в pelистре PCON, обеспечивающим удвоение
скорости обмена данными через иоследовате 1ьнып порт Вторая возможность
реализуется только для последовательного порта 0
Преобразуем первое выражение, чтобы получить значение скорости пе-
реполнения для танмера! (в Гц)
Timed OverflowRate = 32‘DataRate / ( 1 + SMOD )
Период переполнения таймера I при этом составит (в секундах)
Timed OverflowPenod = ( 1 + SMOD ) / ( 32*DataRate )
Количество тактов, которое требуется для получения данного периода,
равно
TimedOverflowCycles = ( 1 + SMOD )*ClockFrequency I ( 32*DataRate ),
где ClockFreqnency — тактовая частота микроконтроллера Значение
TimerlOverflowCycles необходимо занизить в таймер I. чтобы получить тре-
буемую скорость обмена DataRate Таким образом, если требуется обеспечить
скорость обмена 9600 бод, а микроконтроллер 8ОС32О работает на частоте 12
МГц. то полагая SMOD = 0. получаем . а
Timed OverflowCycles= 12 МГц / ( 32 * 9600 бод ) ,!
= 39 063
Значение 39 следует использовать для определения интервала перезагруз-
ки танмера 1 Чтобы получить необходимое содержимое таймера, надо полу-
ченное значение 39 вычесть из 256 Таким образом, для получения скорости
обмена 9600 бод необходимо загрузить в гапмер! число 217 Использование
значения 39 вместо 39,063 даст ошибку в 0.16S5 При передаче пакета из 10
бит (по схеме «8-N-1») обшая ошибка составит 1.6^
Микроконтроллеры Dallas Semiconductor
с шифрованием информации
Если ваше устройство хранит данные, которые не должны быть произвольно
считаны из соображений безопасности, или вы собираетесь поставлять изде-
лия, но не хотите, чтобы программный код был доступен ^пиратам», то
Б Часть 2. Микроконтроллеры семейства 8051
можно использовать модификации микроконтроллера 8051 компании Dallas
Semiconductor серии DS5000 («криптографические 8051») В этих микроконт-
роллерах обеспечивается шифрование содержимого памяти команд и данных.
При попытке чтения зашифрованных данных через микроконтроллер они
автоматически стираются
Эти устройства используют внешнюю память SRAM для хранения про-
грамм и данных, имеющих адреса выше OFFh, но имеют также 32 линии
ввода-вывода, доступные для подключения периферийных устройств (рис. 9.7)
На представленной схеме необходимо обратить внимание на следующие осо-
бенности. Микроконтроллер управляет питанием внешней памяти SRAM. При
помощи дополнительной литиевой батареи эта память превращается в NV-
SRAM (nonvolatile static RAM — память с сохранением данных), содержимое
которой сохраняется при отключении питания. Шифровальные ключи хра-
нятся во внутренних регистрах микроконтроллера Таким образом, при от-
ключении питания ключи теряются.
Encrypted 8051 SRAM
L_ — _______________
Рис. 9.7. Структура микроконтроллера DS5000 с шифрованием содержимого
внешней памяти.
Программа загружается в DS5000 при помощи последовательного прото-
кола. При первом включении питания загрузчик проверяет, подключен ли
программатор. Если программатор не подключен, то управление производит-
ся с помощью программы, хранящейся в SRAM.
Компания Dallas Semiconductor выпускает криптографические 8051»,
смонтированные вместе с часами реального времени, памятью SRAM и ли-
Глава 9. Аппаратные средства микроконтроллеров 8051 203
тиевой батарейкой в виде модуля, подобного SIMM-модулям динамическом
памяти. Для этих модулей гарантируется, что информация в SRAM будет со-
храняться в течение 19 лет.
Одним из интересных применений DS5000 является построение недоро-
гих эмуляторов. Память эмулятора используется для хранения управляющего
программного обеспечения и отлаживаемой прикладной программы При
проектировании устройств на базе DS5000 можно использовать все 32 линии
ввода вывода даже при подключении к микроконтроллеру внешней памяти
Программирование
Приступая к написанию этой главы автор собирался рассмотреть вопросы
программирования классического микроконтроллера 8051, не касаясь других
его модификаций, выпускаемых различными производителями. Однако при
знакомстве с различными версиями выпускаемых 8051 (реально микроконт-
роллеры с программируемой внутренней памятью EPROM обозначаются
87С51) выяснилось, что используется множество способов программирова-
ния, для описания которых потребовалась бы отдельная книга
Приведенная здесь информация может быть использована для програм-
мирования Intel 8751 и Dallas Semiconductor HSM, содержащих EPROM
Прежде чем приступить к программированию других микроконтроллеров,
необходимо ознакомиться с прилагающейся к ним документацией. Рекомен-
дуется также Купить программатор, способный программировать микрокон-
троллер, который вы собираетесь использовать
Для программирования микроконтроллеров 8051 необходимо собрать спе-
циальную схему В случае программирования 8751 и Dallas Semiconductor HSM
эта схема имеет вид, показанный на рис. 9 8
Рис. 9.8. Схема для программирования 8051
204 Часть 2. Микроконтроллеры семейства 8051
Перед записью каждого байта в память программ EPROM требуется уста-
новить его адрес (рис 9.9) Запись в EPROM производится при подаче на
линию ALE/Prog пяти последовательных импульсов Для обеспечения пере-
дачи данных по шинам микроконтроллера во время цикла программирова-
ния используется кварцевый резонатор 4,0 — 6,0 МГц Между программиро-
ванием
тактов,
байтов вводится временной интервал ожидания, составляющий 48
что при частоте 4 МГц составляет I2 мкс.
+12.5V
_ЕАЛ/рр /
5 программирующих импульсов
Адрес
Данные
ALE/Prog
Управление
Рис. 9.9. Временная диаграмма программирования 8051
Чтобы ввести микроконтроллер в режим программирования, необходимо
подать высокий уровень сигнала на вход RESET, низкий уровень сигнала на
bxoa_PSEN и установить высокий уровень на входе ALE, который будет пере-
ключаться при поступлении команды на запись данных В приведенной ниже
таблице представлен ряд режимов, используемых при программировании
Режим ALE/PROG _EA/Vpp Р2.6 Р2.7 РЗ.З Р3.6 Р3.7
Запись программного кода 5 импульсов 1 + 12,5 В 0 I 1 1 1
Верификация +5 В +5 В 0 0 0 1 1
Запись байтов шифрования Программи- рование битов блокировки доступа: 5 импульсов Импульс v ! - ч + 12,5 В + 12,5 В г X 0 I 1 0 1
LBl I 1 1 1 1 1
LB2 LB3 4 h f 0 1 I 1 1 0 1 0 0
Чтение байтов сигнатуры +5 В +5 В 0 0 0 0 0
Глава 9. Аппаратные средства микроконтроллеров 8051 205
В первую очередь рассмотрим область байтов шифрования Это 64 байта,
записываемые в EPROM, которые изменяют при чтении содержимое памяти
программ таким образом, чтобы программу было трудно понять, не зная
байтов шифрования. При чтении программного кода реализуется следующий
алгоритм:
Output = Control(Address) Л !Encrypt( Address & 3Fh ),
где «Output» — считываемый байт, «Control» — адресуемый байт программно-
го кода, «Encrypt» — байт шифрования, последовательно выбираемый из 64-
байтной области, при выборке которых используются только 6 младших раз-
рядов адреса от 00h до 3Fh), Л! — обозначение логической операции
эквивалентности (отрицание Исключающего ИЛИ) Если область байтов шиф-
рования осталась незапрограммированной (при этом все биты сохраняют
значение I), то содержимое зашифрованной EPROM может быть считано в
исходном виде (без шифрования). Чтобы избежать этого, необходимо запи-
сать значения байтов шифрования, отличные от OFFh Чтобы затруднить рас-
шифровку, байты шифрования не должны иметь одно и го же значение. Что-
бы получить случайные значения этих байтов можно использовать
произвольные источники кода, фрагменты из посланий по электронной по-
чте, конечные части программ. Можно, например, повторить последнюю часть
кода, записанного в память программ, или предварительно записать его в
алгоритмической ферме (это можно легко выполнить, используя Приложе-
ние «Основные команды Ассемблера»).
Биты блокирования доступа LBI-3 — это три бита, записываемые в
EPROM, которые определяют, как должна работать внешняя память и мож-
но ли считывать содержимое памяти программ. Программирование каждого
бита LB производится индивидуально при подаче определенной комбинации
входных сигналов, которые приведены в таблице режимов программирова-
ния. Назначение бигов блокировки LBl-З указано в таблице, где символом Р
обозначено запрограммированное состояние бита (запись 0), а символом U
— непрограммированное состояние (сохранение I).
Уровень LB1 LB2 1.ВЗ Режим блокировки
блокировки
1 U U U Отсутствие блокировки
(все биты непрограммированы)
2 Р U U Запрещение записи данных из внутрен-
ней памяти во внешнюю память коман-
дой «move»
3 Р Р U Уровень 2 с запрещением верификации
и чтения содержимого внутренней
SRAM командой «movx»
4 PPP Уровень 3 с запрещением выполнения
команд, выбираемых из внешней па-
мяти
206 Часть 2 Микроконтроллеры семейства 8051
В ячейках с адресами 30h, 31 h и 60h в микроконтроллере содержатся бай-
ты сигнатуры, которые записываются производителем и могут использовать
ся в процессе программирования для определения типа микроконтроллера
По адресу 30I1 записан код производителя (89h — Intel, DAh — Dallas
Semiconductor и I Eh — Atmel) По адресу 3lh указывается номер модели,
адрес 60h содержит дополнительную информацию об этой модели Более
подробная информация содержится в документации на микроконтроллер
Маркировка микроконтроллеров
Информация по маркировке микроконтроллера, которая используется при
заказе соответствующего прибора, является специфической для определен-
ного производителя На рис 9 I0 — 9 12 показана маркировка различных мо
дификаций микроконтроллеров 8051, выпускаемых некоторыми производи-
телями
Тип памяти программ
«О» - Масочно программируемая ROM
«7» - EPROM
Тип корпуса
«Р» - Пластмассовый DIP
«D» - Керамический DIP
«Ы» - PLCC
<<S” — QFP
Префиксы «Т» или «L» перед
символами <<P»/«D»/«S»/«N» обо-
значают расширенный темпера-
турный диапазон
8хС51 (-х) X
Тактовая частота микроконтроллера
Отсутствие символа - 12 МГц
« 1» — 16 МГц
«-2» - 12 МГц
<. 20» - 20 МГц
Рис. 9.10. Маркировка микроконтроллеров Intel 8051
Глава 9. Аппаратные средства микроконтроллеров 8051 207
Тип корпуса
•<М» - Пластмас-
совый DIP
«О» PLCC
«Е» - TQFP
Тактовая частота
G - 25 МГц
L - 33 МГц
DS8xCxxx-PTS
Тип памяти программ
0 - ROM
3 - Память программ
отсутствует
7 - EPROM
Температурный диапазон
•С» - Коммерческий
“ГМ» - Промышленный
Тип прибора
Рис. 9.11. Маркировка микроконтроллеров Dallas Semiconductor HSM.
Температурный диапазон
С - ОС до 70С (Коммерческий)
I - 40С до 70С (Промышленный)
AT89Sxx51-xxPT
Объем памяти
программ
“10 - 512 байт
“20” - 1024 байт
Тип корпуса
“J" - PLCC
“Р' - Пластмассовый DIP
“S” - SOIC
“Y” - SSOP
Рис. 9.12. Маркировка микроконтроллеров Atmel, совместимых с 8051
ГЛАВА
10
РАЗРАБОТКА ПРИЛОЖЕНИЙ
НА БАЗЕ 8051
Краткое содержание
Подключение питания
Системный тактовый генератор
Запуск
Прерывания
Хранение команд
Разработка ОСРВ и монитора для 8051
Разработка приложений для микроконтроллера 8051 несколько отличается от
создания приложений для других микроконтроллеров Это не означает, что
разрабатывать приложения для 8051 сложнее, просто он работает немного не
так, как другие микроконтроллеры Во многих отношениях другие микрокон-
троллеры являются более однородными, чем 8051 Однако изучение микро-
контроллеров с различными характеристиками дает возможность пользова-
телям освоить разнообразные методы и средства проектирования, которые
позволяют создавать наиболее эффективные варианты приложений для ре-
шения конкретных задач
Глава 10. Разработка приложений на базе 8051 209
Подключение питания
Благодаря широкой номенклатуре микроконтроллеров 8051, выпускаемых
различными производителями, эти микроконтроллеры можно найти в аппа-
ратуре, работающей в самых разнообразных условиях Вы можете обнаружить
8051 в системах управления автомобильным двигателем, которые работают в
широком диапазоне температур при высоком уровне помех, или в детских
игрушках, которые питаются от одной щелочной батарейки типа ААА.
При типичном использовании 8051 (или любого микроконтроллера) не-
обходимо подать напряжение питания +5 В на вывод Vcc или Vdd и 0 В («зем-
ля») на вывод Gnd или Vss (рис. 10.1). Как можно ближе в выводу Vcc необхо-
димо подключить конденсатор емкостью 0,1 мкФ. Длина проводника от вывода
Vcc до анода конденсатора должна быть как можно меньше. Катод конденса-
тора подсоединяется к выводу «земля». Такой «развязывающий» конденсатор
обеспечивает фильтрацию помех, поступающих на шину питания во время
переходных процессов. Такой способ подключения питания используется для
большинства типов 8051 и других микроконтроллеров. Эта же схема может
применяться для подключения низковольтного батарейного питания, кото-
рое требуется в некоторых приложениях.
4-5V
Рис.10.1. Подключение питания к микроконтроллеру 8051
Если окажется, что выбранный вами микроконтроллер требует использо-
вания более сложных схем подключения питания, то рекомендуем найти
другой микроконтроллер. Существует множество микроконтроллеров, кото-
рые не требуют каких-то особенных источников питания. Большинство мик-
роконтроллеров будет нормально работать с источниками питания, имею-
щими значительный уровень помех.
Бывают специфические приложения, где один тип микроконтроллера
может работать лучше, чем другие. Но при этом следует выяснить, не предъяв-
ляются ли особые требования к цепям питания. Приложение может быть очень
критично к источнику питания, поэтому он должен быть достаточно про-
стым и устойчивым, чтобы обеспечить нормальную работу всех активных
приборов в разрабатываемом устройстве.
14 Зак. 2026-
210 Часть 2. Микроконтроллеры семейства 8051
Системный тактовый генератор
Подключение внешнего кварцевого резонатора к 8051 выполняется доста-
точно просто Для подключения кристалла кварца или керамического резона-
тора используются схемы, показанные на рис. 10.2. Схема подключения внеш-
него генератора импульсов приведена на рис. 10.3.
XTAL1
XTAL2
Подключение кварцевого или
керамического резонатора без
внутренних конденсаторов
8051
Подключение керамического
резонатора с внутренними
конденсаторами
8051
XTAL1
XTAL2
Рис.
10.2. Подключение кварцевого
и керамического резонатора к 8051
8051
XTAL1
К внешнему генератору
тактовых сигналов
XTAL2 — Неподсоединен
Рис. 10.3. Подключение к 8051 внешнего генератора тактовых сигналов
Первоначально микроконтроллеры 8051 выделялись тем, что они могли
работать с высокой тактовой частотой: до 20 МГц для классического 8051 В
настоящее время есть микроконтроллеры 8051, которые работают на частоте
33 МГц и более. Несмотря на высокую тактовую частоту производительность
8051 оказывается не столь высокой из-за большого числа тактов, требуемых
для выполнения команд. Это обстоятельство обсуждалось в главе «Архитекту-
ра микроконтроллера 8051».
Микроконтроллер Dallas Semiconductor 8051 HSM обладает одной инте-
ресной особенностью. У него есть внутренний кольцевой генератор, обеспе-
чивающий частоту тактовых импульсов в диапазоне от 2 до 4 МГц Встроен-
Глава 10. Разработка приложений на базе 8051 211
ный генератор позволяет сократить потребляемую мощность в приложениях,
не критичных ко времени Микроконтроллер не может запускаться от встро-
енного кольцевого генератора. Необходимо обеспечить внешний тактовый
сигнал для первоначального запуска и выполнения критичных ко времени
участков прикладной программы.
Запуск
(установка начального состояния)
Запуск микроконтроллера 8051 отличается от запуска других микроконтрол-
леров, представленных в данной книге. Для 8051 сигнал запуска RESET име-
ет высокий активный уровень, и процессор начинает выполнение програм-
мы после того, как на этом входе установится низкий уровень сигнала. Этим
8051 отличается от других микроконтроллеров, для которых активный уро-
вень сигнала RESET низкий.
Многие микроконтроллеры 8051 имеют специальную внутреннюю схему
с RC- цепью задержки, которая поддерживает низкий уровень сигнала за-
пуска в течение определенного времени задержки, пока не стабилизируется
работа тактового генератора. Для таких микроконтроллеров не требуется под-
ключать какую-либо схему к выводу запуска. Чтобы при этом иметь возмож-
ность выключения и запуска микроконтроллера в процессе отладки системы,
можно ввести кнопку для отключения питания. При использовании «класси-
ческого» Intel 8051 достаточно включить конденсатор емкостью 0,1мкФ меж-
ду шиной питания Vcc и входом запуска, чтобы быть уверенным, что микро-
контроллер начнет выполнение программы после того, как стабилизируется
работа генератора (рис. 10.4).
Рис. 10.4. Схема запуска 8051 с внешним конденсатором.
Прерывания
Автор долго думал, что следует сказать о прерываниях в главе, посвященной
разработке приложений для микроконтроллера 8051, и решил дать следую-
щую рекомендацию: «Обработчики прерываний должны быть возможно бо-
212 Часть 2. Микроконтроллеры семейства 8051
лее короткими». Это самое лучшее, что можно посоветовать для любого при-
ложения и любого микроконтроллера В случае использования 8051 размеще-
ние обработчика прерывания в виде 8-баитного вектора позволяет более эф-
фективно распределить имеющийся объем памяти программ и избежать
трудностей при реализации вложенных прерываний и перемещениях про-
грамм их обработки.
Микроконтроллер 8051 имеет достаточно полный набор команд, который
позволяет произвести запуск прерывания и установить необходимые флаги,
затратив на это не более 8 байт памяти программ. В рассмотренном далее
примере разработки часов-термометра с ЖК-дисплеем обработчики преры-
ваний занимают всего 3 байта При реализации многих прерываний сброс
запроса происходит автоматически, избавляя от необходимости делать это в
обработчике.
Архитектура 8051 делает процедуру написания обработчиков прерывания
наиболее легкой по сравнению с другими типами микроконтроллеров. Если
обработчики прерываний будут маленькими, то они могут разместиться в
отведенных для них 8-байтных областях и будут выполняться за меньшее чис-
ло тактов При этом не возникнет сложностей с реализацией вложенных пре-
рываний, что упрощает разработку приложений.
Хранение программ
В других микроконтроллерах с Гарвардской архитектурой, которые представ-
лены в данной книге (это микроконтроллеры Р1С и AVR), все команды име-
ют одинаковую длину. Это не совсем верно для AVR, но большинство его
команд имеют длину 16 бит. Данное свойство не характерно для микроконт-
роллеров 8051, команды которых могут иметь длину 1, 2 или 3 байта. Это
обстоятельство может показаться несущественным, однако оно может по-
влиять на объем и время выполнения прикладных программ. Могут возник-
нуть сложности при реализации приложения. Разрядность памяти программ
8051 равна 8 бит. Размещение операнда Reg в команде add A, Reg в текущем
8-байтном регистровом банке сокращает длину и время выполнения коман-
ды. Если операнд Reg находится вне текущего банка, то для его выборки
потребуется более длинная команда и, следовательно, больше тактов для ее
выполнения. Например, при доступе к индексированным данным при помо-
щи одного из регистров текущего банка для выполнения той же операции
требуется в пять раз больше времени
Тщательное планирование использования памяти значительно увеличи-
вает производительность. Рекомендуется при выполнении математических
операций использовать данные из текущего банка, где это возможно.
Разработка ОСРВ и монитора для 8051
Некоторые предпочитают не рассматривать вопросы, связанные с операци-
онными системами реального времени и программой-монитором в начале
изучения микроконтроллера. Это неверный подход, так как понимание того,
Глава 10. Разработка приложений на базе 8051 213
как эти программы работают в данном процессоре, позволяет подготовиться
к написанию любых прикладных программ и инструментальных средств
Микроконтроллер 8051 имеет необычную архитектуру, и он является един-
ственным на описанных в данной книге, для которого представлены и ОСРВ,
и монитор-отладчик Это оказалось возможным благодаря тому, что 8051 об-
ладает достаточным числом регистров, гибким стеком и возможностью адре-
совать внешнюю память программ и данных В данном разделе показано, как
можно реализовать эти средства с использованием архитектуры 8051
При реализации ОСРВ важным фактором является доступ к стеку В неко-
торых микроконтроллерах, например PIC, нельзя получить доступ к данным
в стеке ни для записи, ни для чтения В микроконтролллерах 68НС05 содер-
жимое стека можно сделать доступным, но операции непосредственной за-
писи в стек и чтения из него не реализуются Несмотря на это, позднее будет
показано, как можно реализовать ОСРВ на 68НС05
Причиной, по которой необходим доступ к содержимому стека, является
переключение задач в ОСРВ Информация в стеке — адрес возврата и содер-
жимое регистров контекста, требуется, чтобы продолжить задачу с прерван-
ного места Стек может быть использован для хранения всей информации о
задаче Доступ к данным в стеке легко реализовать при помощи индексного
регистра
Микроконтролллер 8051 содержит четыре 8-баитовых регистровых банка,
которые могут использоваться для быстрого доступа к данным В рассматри-
ваемом примере ОСРВ предполагается, что банк 0 используется для хране-
ния специфичной информации для данной задачи Слово состояния PSW,
содержимое аккумулятора и регистров В. DPTR и SP являются такой ин-
формацией Содержимое этих регистров необходимо сохранить в «информа-
ционном блоке задачи»
Следуя этой схеме, карта распределения памяти для 8051 будет иметь вид.
показанный на рис 10 5 Для информационного блока задачи используется 16
байт В состав этого блока входят восемь регистров банка, шесть байт содер-
жимого указанных выше контекстных регистров и два байта для хранения
адреса возврата Регистры банка будут содержать информацию о запросе ОСРВ,
регистр DPTR служит указателем на блок сообщении Данная схема •позволя-
ет хранить информацию, необходимую для выполнения четырех задач, в ди-
апазоне адресов с 4011 по 7F11
В предлагаемой реализации ОСРВ имеется одна особенность задачи не
могут вызывать подпрограммы Если задача вызывает подпрограмму и проис-
ходит аппаратное прерывание, то для стека понадобится больше места, чем
это доступно Решить эту проблему можно путем увеличения размера инфор-
мационного блока задачи, чтобы дать возможность сохранять адрес и пара-
метры для возврата из подпрограммы
Приведенная схема учитывает, что микроконтроллер 8051 имеет только
128 байт памяти, из которых нижние 64 банта используются ОСРВ для хране-
ния специфичных данных, сообщений, информации о задачах Когда позже
вы познакомитесь в этой книге с ОСРВ для семейства 68НС05. то увидите
214 Часть 2. Микроконтроллеры семейства 8051
что ОСРВ, описанная в данном разделе, оставляет пользователю существен-
но больше ресурсов, чем при реализации системы «mykeRTOS» на микро-
контроллере 68HC05J1 А.
Первые 256 адресов памяти данных
Рис. 10.5. Пример распределения памяти при реализации ОСРВ на 8051.
Пересылка сообщений реализуется при помощи регистров DPTR и R0 из
банка задачи 0. Сообщение может содержаться в регистрах DPL и DPH, или
регистр DPTR может указывать адрес сообщения, хранящегося в памяти. В
регистре R0 будет содержаться байт команды, который указывает ОСРВ и
принимающей задаче, что необходимо делать с сообщением.
Если 128 байт памяти данных недостаточно для работы приложения, то
можно выбрать микроконтроллер, имеющий 256 байт памяти, или подклю-
чить к 8051 внешнюю память. При использовании внешней памяти стек дол-
жен находится в пределах первых 256 байт, и данные из неТо должны сохра-
няться в информационном блоке задачи. Операция копирования данных в
информационный блок задачи или из него увеличивает время, требуемое для
переключения задачи.
Для вызова задачи соответствующий запрос и значения параметров загру-
жаются в регистры, а затем производится обращение к подпрограмме с по-
мощью команды «call». На самом деле это не является обычным вызовом
подпрограммы. Данная процедура передает управление ОСРВ и сохраняется
адрес возврата к исходной задаче. С точки зрения текущей задачи ОСРВ выг-
лядит как подпрограмма. Однако при обращении к ней сохраняется необхо-
димая информация о текущей задаче и производится переключение на дру-
гую задачу, для которой предоставляется имеющийся информационный блок.
Когда задача вызывает подпрограмму, вся контекстная информация со-
храняется в стеке задачи, а затем содержимое указателя стека заносится в
Глава 10. Разработка приложений на базе 8051 215
стек или в определенное место информационного блока задачи. В дальней-
шем значение указателя стека используется ОСРВ в качестве смешения для
доступа к информации о задаче, позволяя выбирать содержимое регистров,
где содержится вызов задачи и необходимые параметры.
Процесс переключения на другую задачу состоит в загрузке указателя стека,
относящегося к новой задаче, и последующего извлечения из стека содержимо-
го различных регистров прежде, чем реализуется возврат из подпрограммы.
Краткое знакомство с программой монитором дается после описания
ОСРВ. Это сделано потому, что прежде, чем пытаться разработать монитор,
надо понять, как создается ОСРВ. Это утверждение может показаться стран-
ным, так как работа монитора существенно отличается от ОСРВ. Но многие
концепции их построения являются общими, например, процедура перехода
к выполнению одной программы из другой программы и управление этой
процедурой с помощью некоторой общей части программного обеспечения.
Одной из наиболее важных особенностей мониторов является его способ-
ность модифицировать собственную память программ. Для этого хорошо под-
ходит микроконтроллер DS5000, который использует общую память SRAM
для хранения программ и данных. Классический 8051 можно использовать,
если подключить к нему внешнюю память и объединить сигналы PSEN и RD
при помощи логического элемента И, а полученный сигнал подать на вход
разрешения выборки памяти_ОЕ.
Возможность модифицировать память программ важна по двум причинам.
Первая, и наиболее очевидная, — необходимость загрузки новой версии про-
граммы без перепрограммирования устройства. Вторая причина — необходи-
мость задания контрольных точек останова. Точка останова задается путем
записи команды «call» по соответствующему адресу, значение которого со-
храняется. Аналогично тому, как команда «call» используется в ОСРВ, эта
команда используется для задания точки останова, записывая в стек адрес
возврата.
Подробный рассказ о реализации программы монитора выходит за рамки
данной книги. Причина в том, что монитор имеет много различных вариан-
тов функционирования и использования. Но понимание основных концеп-
ций и знание того, что необходимо для их реализации, позволяет лучше
понять, как организовать общую память программ и данных и как безопасно
управлять выполнением программ.
ГЛАВА
11
Средства разработки для 8051
Краткое содержание
Ассемблеры
Языки высокого уровня
Объектный файл в формате «S-Record»
Программатор Dallas Semiconductor DS87000
То обстоятельство, что микроконтроллеры с архитектурой 8051 выпускаются
многими производителями, имеет свою отрицательную сторону, так как при
этом ни один из производителей не заинтересован в создании средств разра-
ботки Причина этого очевидна — любое инструментальное средство разра-
ботки может быть использовано для проектирования устройств на базе мик-
роконтроллеров, выпускаемых конкурентами Если же производитель внесет
в свой микроконтроллер изменения, отличающие его от продукции конку-
рентов, то он будет несовместимым с классическим 8051
Поэтому для микроконтроллеров 8051 практически нет хороших средств
разработки программ, симуляторов и программаторов такого уровня как
MPLABкомпании Microchip или «AVR Suite» компании Atinel, которые мож-
но бесплатно загрузить из Интернет Это замечание не относятся к коммер-
ческим продуктам для 8051 Существуют действительно превосходные сред-
ства разработки, которые может приобрести пользователь В этой главе
представлен один из таких инструментов — универсальный симулятор UMPS
(«Universal Microprocessor Simulator»).
Эти комментарии предназначены прежде всего для радиолюбителей и
инженеров-разработчиков, которые хотят протестировать и отладить свое
устройство не платя за программы, которые, возможно, не будут использо-
ваться в дальнейшем.
Глава 11. Средства разработки для 8051 217
Ассемблеры
С точки зрения программиста микроконтроллер 8051 больше похож на
68НС05, чем на микропроцессор Intel 8080 или 8086 В типичном микропро-
цессоре Intel можно встретить команду типа "add А. В ", которая реализует
операцию сложения операндов, хранящихся в памяти А = А + В Подобные
команды не используются в 8051, так как для хранения адресов двух операн-
дов требуется дополнительный объем памяти Вместо этого данные обраба-
тываются с помощью аккумулятора
В главе 12 «Система команд 8051», где рассматриваются рахличные способы
адресации, указано, что при программировании на языке ассемблера воз-
можные различные варианты указания адреса перехода с помощью команды
«jump» короткий («small»), внутристраничный («page») и длинный («long»)
При написании ассемблерных программ для 8051 необходимо учитывать осо-
бенности архитектуры микроконтроллера и следовать определенным реко-
мендациям, которые сформулированы ниже
1. При сбросе микроконтроллер начинает выполнять команды с нулевого
адреса, где располагается 8-байтный обработчик прерывания Поэтому пер-
вая команда этого обработчика должна реализовать переход к основной
программе
2. Желательно, чтобы программа работала с одним 8-байтовым банком ре-
гистров Это сократит объем программы и ускорит ее выполнение
3. Часто используемые переменные следует размешать в первых 256 байтах
памяти, что также сократит объем и ускорит выполнение программы
4. Желательно, чтобы обработчик прерывания имел объем не более 8 байт,
чтобы его можно было разместить в соответствующем окне
5. При выполнении программ, которые контролируют время выполнения,
прерывания должны быть запрещены Например, прерывание, поступаю-
щее в промежутке между записью кодов 55h/AAh может вызвать срабаты-
вание сторожевого таймера
6. При использовании непосредственной адресации не забывайте ставить
перед константой символ «#» Иначе константа будет интерпретироваться
как адрес одного из первых 256 байт памяти
Выполнение этих рекомендаций при разработке прикладных программ
позволит свести к минимуму проблемы, которые могут возникнуть в даль-
нейшем при отладке приложения
Что касается дополнительной информации по написанию ассемблерных
программ для 8051, то она зависит от конкретного используемого ассемблера
Формат написания программ практически одинаков для рахличных ассембле-
ров, но для нормальной работы ассемблера возможно понадобится ввести оп-
ределенные директивы Например, при разработке приложений для данной
книги использовался ассемблер UMPS и ассемблер, свободно распространяе-
мый через Интернет При этом оказалось, что полученные объектные коды не
являются полностью совместимыми Потребовалось ввести некоторые измене-
ния в исходном тексте, чтобы обеспечить полное соответствие программ
218 Часть 2. Микроконтроллеры семейсва 8051
Языки высокого уровня
Архитектура 8051 интересна своими крайностями Из микроконтроллеров, рас-
смотренных в данной книге, архитектура 8051, вероятно, самая сложная для
создания компилятора с языка высокого уровня, который обеспечивал бы
получение наиболее простых, компактных и быстрых программ для выполне-
ния арифметических операций. В то же время эта архитектура оказывается са-
мой удобной для разработки компиляторов, выполняющих манипуляции с
большими блоками данных. Эти два аспекта не всегда являются взаимоисклю-
чающими, но они будут оказывать влияние на работу компилятора.
В идеальном случае прикладная программа для 8051 должна выполнять все
арифметические операции с использованием текущего 8-байтового регист-
рового банка и аккумулятора. Хранение всех переменных в одном банке по-
зволяет получить самый компактный и быстрый код Если же программа бу-
дет перемещать данные из одного банка в другой, то ее эффективность резко
снижается Например:
VarA = VarB + С ; Переменные «VarA» и «VarB» не содержатся в
; аккумуляторе или регистре В.
Если все три переменные находятся в текущем банке, то код будет выгля-
деть так-
mov A, VarB ; 1 байт/12 тактов
add А, С ; 1 байт/12 тактов
mov VarA, А ; 1 байт/12 тактов
Если же переменные «VarA», «VarB» и «С» размещены не в текущем бан-
ке, а находятся в первых 256 байтах памяти, то придется использовать пря-
мую адресацию в каждой из трех команд При этом программа потребует, по
крайней мере, в два раза больше памяти и в два раза больше тактов для
своего выполнения.
В случае, когда переменные «VarA», «VarB» и «С» располагаются в произ-
вольном месте 64-Кбайтной памяти, лучший код, который можно быть
написан, выглядит так:
mov DPTR, VarC ; 3 байта,24 такта
movxA, @DPTR ; 1 байт,24 такта - Загрузка “С”
mov Temp, A ; 1 байт,12 тактов - Сохранение “С”
mov DPTR, VarB , 3 байта,24 такта
movxA, @DPTR ; 1 байт,24 такта - Загрузка “В"
add A, Temp ; 1 байт,12 тактов - Асе = В + С
mov DPTR. VarA ; 3 байта.24 такта
movx @DPTR, A ; 1 байт,24 такта - Сохранение В + С в “VarA”
В последнем случае требуется более чем в три раза больше памяти и более
чем в четыре раза больше тактов для выполнения программы по сравнению с
наилучшим случаем, когда все три переменные находятся в текущем банке.
Глава 11. Средства разработки для 8051 219
В связи с таком разницей в производительности разработчик компилятора
должен обратить особое внимание на разработку стратегии для манипуляции
данными Сокращение пересылок данных между текущим банком, первыми
256 бантами и всеми 64 Кбайтами памяти позволяет сделать конечный вари-
ант программы более эффективным
Одна стратегия включается в том, чтобы сгруппировать арифметические
переменные в регистровых банках и производить переключение банков, ког-
да необходимо обеспечить прямой доступ к определенной группе данных
Дрхгая стратегия состоит в том, чтобы сгруппировать все арифметические
переменные в одном блоке памяти, на которым указывает регистр DPTR или
один из индексных регистров текущего банка В последнем случае доступ к
данным с помощью индексного регистра производится намного быстрее,
чем в случае, когда данные сначала перемещаются во временный регистр
текхщего банка
Возможность регистра DPTR обращаться ко всем 64 К памяти и наличие
команд, позволяющих быстро модифицировать содержимое этого регистра,
обеспечивают быстрый доступ к большим объемам данных Хотя описание
различных структур данных не является целью данной книги, однако изуче-
ние набора реализуемых команд поможет вам организовать хранение данных
в блоках, адресуемых с помощью регистра DPTR, и обеспечить обращение к
данным в этих блоках путем указания смещения, которое прибавляется к
адресу, хранящемуся в DPTR Такая возможность делает 8051 идеально под-
ходящим для реализации регистрирующих устройств, систем сбора инфор-
мации, простых терминальных коммутаторов и других приложении, где тре-
буется быстрая манипуляция большими объемами данных
Объектные файлы «INHX8M»
Наиболее обшим форматом объектного файла является формат «1NHX8M»
фирмы Intel Практически все микроконтроллеры используют этот формат,
которым обычно называют hex-файлом Кроме 8051 этот формат используют
также микроконтроллеры PIC и AVR, описанные в данной книге
Если взглянуть на hex-файл, сгенерированный ассемблером или компи-
лятором, то он будет иметь следующий вид
10000000А601А701АВ018Е288С00030883128D0086
100010000В11ABOAOD0883008COEOCOE0900A80111
10002000А201А3011Е081F04031908001F082106СЕ
OA04FOOOA40B782AA50B782A080057
02400EGOF13F80
00000001FF
Вся информация, необходимая для загрузки памяти программ микрокон-
троллера, находится в этом файле Следует отметить, что в этом файле нет
символической информации, которая обычно создается ассемблером или
220 Часть 2. Микроконтроллеры семейсва 8051
компилятором для отладчика или эмулятора. Каждая строка разбита на не-
сколько полей, которые используются программатором или другим устрой-
ством. Формат файла следующий.
КОЛОНКА ИДЕНТИФИКАТОР КОММЕНТАРИЙ
1 Начало строки Всегда «:»
2-3 2 * количество байт в строке Два, умноженное на количество загружаемых байт должны быть загружены
4-7 Стартовый адрес Адрес начала строки
8-9 Тип данных 00 — Данные, 01 — Конец файла
10-11 2-ой байт слова 1 < • 1 Каждый байт представляется как 16- ричное число (младший байт пер- вым)
12-13 1-ый байт слова J
14... Данные Остальные байты данных
End-2 Контрольная сумма Сумма байтов строки & OxOFF = 0
Обычно строка содержит восемь 16-разрядных слов Возьмем третью стро-
ку снизу в данном примере и рассмотрим, что значит каждое поле.
Столбцы 2-3 содержат 0А — это два умноженное на количество 16-разряд-
ных слов в строке Таких слов пять.
Столбцы 4-7 содержат 04F0 — это адрес, куда должна быть записана стро-
ка. Это значение не использует порядок байтов Intel. В данном случае старший
байт идет первым.
Следующие два столбца содержат 00; это означает, что строка содержит
данные.
Начиная с 10 столбца, следуют 16-разрядные данные:
ОВА4
2А78
0ВА5
2А78
0008
Последние два столбца — это контрольная сумма. Каждый байт состоит из
двух шестнадцатеричных цифр. Эти байты складываются, затем вычитаются
из 0x0100 и результат используется в качестве контрольной суммы.
Для приведенного примера контрольная сумма вычисляется гак:
0А
04
FO
00
Глава 11. Средства разработки для 8051 221
А4
ов
. 78
2А
А5
ОВ
78
2А
08
+00
ЗА9
Над этой суммой выполняется логическая операция И со значением OxOFF,
и результат вычитается из 0x0100:
100
-А9 (= ОхОЗАЭ & OxOFF)
57
Отметим, что число 57 стоит в конце этой строки. Последняя строка при-
мера означает конец файла. Тип данных 1 и контрольная сумма FF указывает
на конец файла.
Программатор Dallas Semiconductor
DS87000
Для программирования 87С520 можно использовать программатор Dallas
Semiconductor DS87000 (рис. 111). Это устройство подключается к последова-
тельному порту персонального компьютера, который служит для загрузки объек-
тного кода в виде hex-файла и управления работой программатора. Он может
использоваться для программирования всех «классических» микроконтролле-
ров 8051. Алгоритм программирования описан в одной из глав этой части.
Программатор DS87000 работает очень хорошо, хотя при его подключе-
нии возникли некоторые трудности. Первая из них состояла в том, что про-
граммное обеспечение для программатора поставляется на дискете формата
5.25". В настоящее время довольно трудно найти компьютер, где были бы
дисководы обоих форматов. В старых IBM PC/AT есть дисковод 5.25", но нет
дисковода 3.5'', поэтому пришлось использовать нуль-модемный кабель, что-
бы подключить к этому компьютеру «laptop» Вторая трудность возникла из-за
25-контактного разъема RS-232, предназначенного для подключения к ком-
пьютеру. Этот разъем подключается к телефонному кабелю, оканчивающе-
муся разъемом RJ-11, который связывает компьютер и программатор. Боль-
шинство персональных компьютеров имеют 9-контактный разъем для
последовательного порта, поэтому для подключения программатора следует
222 Часть 2. Микроконтроллеры семейсва 8051
использовать переходник из 9 в 25 Можно также использовать для подключе-
ния программатора кабель с 9-контактным разъемом, если соединить его
контакты с контактами разъема RJ-11, как показано на рис 11 2
Рис. 11.1. Программатор Dallas Semiconductor DS87000 HSM
Рис. 11.2. 9-контактный разъем для программатора Dallas Semiconductor
DS87000 HSM
Глава 11. Средства разработки для 8051 223
При таком подключении программатор прекрасно работает На экране
можно выбрать порт, к которому подключается программатор, а также раз
личные режимы программирования, включая сценарии для повторного про-
граммирования Программное обеспечение позволяет задать кочичество байт
в памяти программ 87С52О EPROM, которое будет использоваться в опера-
циях программирования, чтения или проверки Обычно следует указывать
количество байтов, которое соответствует объему загружаемого объектного
кода, чтобы сократить время программирования
ГЛАВА
12
СИСТЕМА КОМАНД
МИКРОКОНТРОЛЛЕРА 8051
Краткое содержание
Команды пересылки данных
Арифметические команды
Команды битовых операций
Команды передачи управления
Все три микроконтроллера с Гарвардской архитектурой, представленные
в данной книге, по-разному выполняют команды. Для каждого из этих мик-
роконтроллеров — 8051, PIC и AVR, надо использовать различные способы
реализации наиболее эффективной структуры программы.
Может показаться удивительным, но команды микроконтроллера 8051
очень похожи на команды 68НС05- сначала данные помещаются в аккумуля-
тор, затем над ними выполняется заданная операция. Прежде, чем начать
изучение системы команд, рекомендуется прочесть главу «Архитектура мик-
роконтроллера 8051», чтобы понять, что такое регистровые банки и как выпол-
няется адресация операндов.
Обратите внимание, что при рассмотрении арифметических команд, би-
товых операций и команд пересылки данных в данной главе дается общее
описание команд, использующих разные способы адресации, которые в не-
которых случаях требуют дополнительного цикла для их выполнения. Это сде-
лано, чтобы сократить число рассматриваемых команд со 101 до 62.
При косвенно-регистровой адресации индексный регистр R0 или R1 из
текущего банка помечается буквой i, которая имеет значение i = 0 для реги-
стра R0 и । = 1 для регистра R1. При регистровой адресации символы «пт»
обозначают номер регистра текущего банка.
Глава 12. Система команд микроконтроллера 8051 225
Команды пересылки данных
Прежде, чем начать обработку данных, необходимо понять, как производит-
ся пересылка данных внутри микроконтроллера и доступ к внешней памяти.
Микроконтроллер 8051 имеет группу команд, предназначенных для пере-
сылки данных внутри и вне микроконтроллера Эти команды, а также коман-
ды арифметических операций при программировании на языке ассемблера
имеют следующий формат: , : <.
ins Parmi, Parm2,
где ins — мнемокод команды, Parmi — адрес размещения результата опера-
ции и первого из используемых операндов (если он требуется для выполне-
ния команды), Рагт2 — адрес второго операнда или непосредственное зна-
чение операнда. Это означает, что при выполнении команды mov A, R0
содержимое регистра R0 будет записано в аккумулятор- А = R0, а команда
add A, R0
V
даст следующий результат, записанный в аккумулятор:
А = А + R0
Такой же формат команды использует микроконтроллер AVR. Команды
микроконтроллера 68НС05 содержат только один операнд. Микроконтроллер
PIC работает несколько по-другому, сохраняя результат либо в аккумуляторе
(регистр W), либо в указанном регистре.
При описании команд 8051 символом А обозначается аккумулятор АСС,
который имеет адрес OEOh. Указание на использование регистра А содержится
непосредственно в коде операции, и он не может быть заменен другим реги-
стром Если в команде используется только один операнд - содержимое акку-
мулятора, то в соответствующей строке ассемблера надо указывать АСС, а не
просто А, иначе компилятор выдаст сообщение о синтаксической ошибке.
Теперь Вы понимаете, как работает команда «mov operand, А» (команда
12.1). При использовании любого способа адресации (непосредственная, ре-
гистровая, косвенно-регистровая или прямая) эта команда копирует опе-
ранд-источник в аккумулятор Аналогичным образом выполняется команда
«mov operand, А» (команда 12.2), которая копирует содержимое аккумулято-
ра в операнд-приемник. Эти операндом может быть регистр или ячейка памя-
ти, адресуемая прямо или косвенно.
Команда «mov Operandl, Operand2» (команды 12.3 и 12.4) используются
для пересылки данных без промежуточного использования аккумулятора, то-
есть вместо выполнения двух команд «mov A, Operand2»/«mov Operand 1, А».
Команды «mov С, bit» и «mov bit, С» (команды 12.5 и 12.6) используются
для чтения и записи отдельных битов в регистр PSW (в качестве флага пере-
носа С) без изменения других флагов в этом регистре. Если посмотреть на
код соответствующих команд, то в нем отведено 8 бит для указания номера
пересылаемого бита. Однако при описании архитектуры 8051 было сказано,
что побитовый доступ осуществляется к 128 битам, которые размещены в
15 Зак. 2026.
226 Часть 2. Микроконтроллеры семейства 8051
байтах, имеющих адреса с 020h no 02Fh. Для указания номера одного из 128
битов требуется только 7 биг. Когда старший биг номера (биг 7) установлен
в 1, го происходит доступ к служебным регистрам микроконтроллера. При
этом выбираются биты, которые находятся в регистрах ACC, PSW, В, РО,
Pl. Р2 и РЗ Например, чтобы записать в PSW значение младшего бита реги-
стра данных порта Р1 используется команда «mov С. PI 0». где цифра после
точки означает номер бита.
Насколько полезны такие команды? Если сравнить программу первого
приложения, написанную для 8051. с программами для других микроконт
роллеров, го можно заметить, как легко перенести логическое состояние
кнопки на светодиод. *
Индексная адресация в пространстве памяти объемом 64 Кбайт может
производиться с помошью индексного регистра RI или R0 текущего банка
или регисгра-указагеля DPTR путем использования команд «mov» и «movx»
(команды 12.7, 12.8 и 12.9). В классическом 8051 адреса внешней памяти на-
чинаются с 008011. и, как было сказано ранее, некоторые модели микрокон-
троллеров 8051 имеют 256 байт внутренней памяти, к которой можно полу-
чить доступ с помощью индексной адресации Когда применяется регистр Ri,
го для адресации доступны только первые 256 байт памяти. Когда в качестве
индексного регистра выступает DPTR, го доступны все 64К памяти.
Загрузить 8-разрядные индексные регистры текущего банка можно с по-
мощью команды «Mov Rn, #Const»>. Загрузка 16-разрядного регистра-указа-
теля DPTR осуществляется командой «mov DPTR. «Const» (команда 12.10).
Существует две других формы команд с индексной адресацией Первая —
эго стековые операции «push» и «рор» (команды 12 11 и 12.12). Эги команды
выполняют обычные операции загрузки в стек и извлечения из него содер-
жимого аккумулятора. Однако команды «push А» и «рор А» будут восприни-
маться компилятором как неверные. В этих командах только один параметр,
поэтому, как отмечено выше, корректная запись команд, использующих ак-
кумулятор, имеет вид «push АСС» и «рор АСС».
Таблицы могут быть легко реализованы при помощи команды «move А,
@A+Index» (команда 12.13). Если в качестве индексного регистра служит про-
граммный счетчик, го аккумулятор загружается из памяти программ. Когда в
качестве индексного регистра указывается DPTR, го данные загружаются из
64 Кбайт пространства памяти данных.
Для чтения таблицы данных из памяти программ можно использовать сле-
дующий программный код:
ReadTable: ; Получить в АСС символ из таблицы
add A, tt(Table-GetTable)
move А,@А+РС
GetTable: ; Смещение
ret ; Возврат из подпрограммы
Глава 12. Система команд микроконтроллера 8051 227
Table:
db ‘Н’
db ‘е’
db
db ‘Г
db ‘o’
db 0
; Здесь находятся элементы таблицы
; Конец ASCIIZ строки
Последние две команды этой группы — это команды обмена «xch» и «xchd»
(команды 12.14 и 12.15). Команда «xch A, Operand» обменивает содержимое
аккумулятора и указанного регистра. Операция может быть промоделирована
следующим образом:
Temp = АСС
ACC = Operand
Operand = Temp
Команда «xchd A, @Ri» работает подобно «xch» за исключением того, что
только индексные регистры банка могут быть использованы для определения
адреса операнда, и производится обмен только четырех младших битов.
Команда: “mov A, Operand” Код:
V •«— (A+Operand)»8
АС ((А & OxOF) + ( Operand & OxOF) »4
Пример:
mov А,#123
MCU: 8051
; Записать 123 в Асе
Команда 12.1. Команда mov A, operand.
228 Часть 2. Микроконтроллеры семейства 8051
Команда: “mov Operand, А" Код:
MCU: 8051
Пример:
mov А,#123
mov R2,A
, Записать 123 в R2
Команда 12.2. Команда mov operand, А
Команда: “mov Direct, Oprnd” ' Код:
Пример: MCU: 8051
mov В,#123 , Записать 123 в “В”
Команда 12.3. Команда mov direct.
Глава 12. Система команд микроконтроллера 8051 229
Команда: “mov Bn, Oprnd” Код:
Пример: MCU: 8051
mov R2,#123 . Записать 123 в В2
Команда 12.4. Команда mov Rn, operand
Команда: “mov С, Bit"
Код: |0A2h Bit
Пример:
MCU: 8051
mov C,P0 7
mov P2 6,C
, Переместить бит РО 7 в Р2 6
Команда 12.5. Команда mov С, bit
230 Часть 2. Микроконтроллеры семейства 8051
Команда: “mov Bit, С"
Код:
|092h Bit
Пример:
MCU: 8051
mov С.Р0.7
mov Р2.6.С
; Переместить бит Р0.7 в Р2.6
Команда 12.6. Команда mov bit, С.
Команда: “mov @Ri, Operand” Код:
Выполнение:
(Ri) — Operand
Пример:
mov @ R0,# 123
Dir
Imm
В1010011Г Pest
В0111011Г Const
Адрес операнда-
приемника
Прохождение операнда
Прохождение операнда-
источника
Такты:
8051 HSM
12 4-8
MCU: 8051
; Записать байт 123 по адресу, заданному R0
Команда 12.7. Команда mov @Ri, operand.
Глава 12. Система команд микроконтроллера 8051 231
Команда: “movx A, ©Index'
MCU:
Прохождение операнда
Прохождение данных
аккумулятора
Индексируемый адрес
Пример:
mov DPTR, Buffer
mov A, @Dptr
; Считать из начала
; буфера
Примечание: Когда DPTR используется в качестве индексного регистра, в
циклы доступа к данным могут вводится такты ожидания.
Команда 12.8. Команда movx A, ©index.
Команда: “movx ©Index, А”
( Index) — А
Код:
Index
Ri B1111001I'
DPTR OFOh
Прохождение операнда
Прохождение данных
аккумулятора
Индексируемый адрес
Такты:
8051 HSM
24 8+
Пример: MCU: 8051
mov DPTR, Buffer
mov @Dptr, A
; Записать в начало
; буфера
Примечание: Когда DPTR используется в качестве индексного регистра, в
циклы доступа к данным могут вводится такты ожидания.
Команда 12.9. Команда movx ©index, А.
232 Часть 2. Микроконтроллеры семейства 8051
Код:
Команда: “mov DPTR, #Const’
090h Low High
и. » В регистр DPTR
Прохождение операнда-
источника
Такты:
8051
HSM
DPL *- Const &FFh
DPH *—Const»8
24
12
Пример:
mov DPTR,#ButStart
MCU: 8051
’ , Установить DPTR на начало буфера
Команда 12.10. Команда mov DPTR, //const
Команда: “push direct” Код:
( SP )«— Addr
Пример: MCU: 8051
IntHandler ; Сохранить PSW перед
push PSW , обработкой прерывания
; Обработчик прерывания
pop PSW ; Восстановить PSW
reti
Команда 12.11. Команда push direct.
Глава 12. Система команд микроконтроллера 8051 233
Команда: “pop direct”
Код:
Пример:
IntHandler
push PSW
MCU: 8051
, Сохранить PSW перед
, обработкой прерывания
, Обработчик прерывания
pop PSW
reti
, Восстановить PSW
Команда 12.12. Команда pop direct.
Команда: “movx А, @А + Index” ' Код:
А — ( А + Index )
Пример:
mov DPTR, «Buffer
mov A,#2
move A, @A+DPTR
Index Bits
DPTR 093h
PC 083h
.. Прохождение операнда
..Прохождение данных
аккумулятора
Индексируемый адрес
Такты:
8051 HSM
24 12
MCU: 8051
, Чтение из буфера,
, расположенного в пределах 64К,
, начиная с третьего байта
Примечание: Когда в качестве индексного регистра используется DPTR, то происходит
доступ к памяти данных, когда PC - к памяти программ
Команда 12.13. Команда move A, @A+index.
234 Часть 2. Микроконтроллеры семейства 8051
Код:
Команда: “xch A, Operand’
Operand <— А
Пример:
xch А, Р1
MCU:
8051
Обменять
содержимое А и Port1
Команда 12.14. Команда xch A, operand
Команда: “xchd A, Operand’
Код:
Ind
В1101011Г
Память
программ
Прямо адресуемый операнд
“-‘•ЧЕ
Дешифра-
тор команд
Программ-
ный счетчик
Такты:
—Прохождение операнда
— — » Прохождение данных
аккумулятора
Выпопнение:
А(З.О) -*— Operand(3 0)
Operand(3:0) “— А(3:0)
8051
HSM
12
Пример:
xchd A, TL0
MCU: 8051
; Поменять местами младшие 4 бита
; в А и младшем байте TimerO
Команда 12.15. Команда xchd A, operand
Глава 12. Система команд микроконтроллера 8051 235
Арифметические команды
Микроконтроллер 8051 имеет более полный набор арифметических команд
по сравнению с другими микроконтроллерами. Это может показаться удиви-
тетьным, так как 8051 выполняет меньше арифметических команд, чем не-
которые другие микроконтроллеры, но этот набор позволяет реализовать очень
широкий набор функций.
При выполнении сложения (команда 12.16) операндом-приемником все-
гда является аккумулятор. Как указано ранее, микроконтроллер 8051 не име-
ет флага нуля в регистре состояния PSW. Поэтому при выполнении команд
условных переходов по результату сложения «jz» и «jnz» необходимо, чтобы
этот результат находился в аккумуляторе.
Команда «addc» (команда 12.17) прибавляет к результату сложения флаг
переноса Эта команда позволяет складывать числа, содержащие 16 и более
разрядов. Например, программа сложения двух 16-разрядных чисел, находя-
щихся в текущем регистровом банке, имеет следующий вид.
mov A, VarB ; VarB = VarB + C
add A, C ; Сначала сложить младшие 8 бит
mov VarB, A ; Сохранить младшие 8 бит результата
mov A, VarB+1 ; Сложить старшие 8 бит
addc A, C+1
mov VarB+1, A
Команда вычитания «subb» (команда 12.18) производит вычитание с уче-
том флагом переноса, который служит в качестве флага заема. Это означает,
что при использовании данной команды надо учитывать значение флага пе-
реноса. Ниже приведен пример вычитания двух 16-разрядных чисел:
mov A, VarB ; VarB = VarB - C
clr C ; Очистить флаг переноса перед вычитанием
subb A, C ; Вычесть младшие 8 бит
mov VarB, A Z х
mov A, VarB+1 ; Вычесть старшие 8 бит
subb A, C+1
mov VarB+1, A
Команды инкремента и декремента (команды 12 19 и 12.20) не изменяют
состояния регистра PSW. В этих командах может использоваться регистровая,
прямая и косвенная адресация.
Если посмотреть на описание других микроконтроллеров в последующих
главах книги, то можно заметить, что флаг нуля в регистре состояния ис-
пользуется в таких операциях, как инкремент 16-разрядного операнда. В 8051
эту операцию можно проделать аналогичным способом, но необходимо по-
мнить, что результат, который проверяется на нулевое значение, содержит-
ся в аккумуляторе. Когда при инкременте значение младших 8 бит равно нулю,
то следует произвести инкремент старших 8 бит, если установлен в 1 флаг
переноса из младших разрядов.
236 Часть 2. Микроконтроллеры семейства 8051
Inc Var
xch A Var
cjne A,#0,incSkip
inc Var+1
incSkip
xch Var,A
Инкремент младших 8 бит
Младшие 8 бит не равны нулю
Увеличить старшие 8 бит
Сохранить результат инкремента младших 8 бит
Для декремента 16-разрядных чисел следует использовать команду «subb»
вместо «бес», чтобы установить флаг переноса, когда значение младших 8
бит изменится с 0 на OFFh
mov A, Var , Декремент младших 8 бит
clr C
subb A, #1
mov Var, A
jnc decSkip , Если перенос установлен, декремент старших 8 биг
dec Var+1
decSkip
Команда «inc DPTR» (команда 12 21) представлена отдельно от команд
«тс», «бес», так как она производит операцию над содержимым 16-разряд-
ного регистра DPTR, который состоит из регистров DPL (младший байт) и
DPH (старший байт) К сожалению в наборе команд отсутствует команда дек-
ремента «бес DPTR». но ее можно реализовать с помощью следующей про-
граммы
dec DPL .декремент младших 8 бит
xch A,DPL .Поместить результат в Асе для проверки
Cjne A,#OFFh,Skip .После декремента получилось FFh"7
dec kin DPH ,Да, декремент старших 8 бит
r\ip xch A,DPL .Заменить DPL
Команда «DAA» (команда 12 22) выполняется после сложения или вычи-
тания двух двоично-десятичных чисел (BCD — Binary Собеб Decimal) Число
в BCD-коде содержит в каждой тетраде (половине байта) значения от 0 до 9
После выполнения команды «DAA» содержимое аккумулятора будет содер-
жать правильный BCD-код результата, и флаг переноса будет установлен
соответствующим образом для выполнения следующей BCD-операции, на-
пример, если складываются два 16-разрядных числа (4 десятичных разряда)
По поводу выполнения команды «DAA» необходимо сделать некоторые
замечания Эта команда работает недостаточно корректно после выполнения
вычитания Микроконтроллер 8051 не дает возможности определить отрица-
тельное BCD-число, поэтому достаточно трудно произвести их вычитание
Глава 12. Система команд микроконтроллера 8051 237
Команда «DAA» не производит преобразование байта, представленного в
шестнадцатиричном коде, в BCD-число.
Команда «mul АВ» (команда 12 23) перемножает два 8-разрядных числа,
которые находятся в аккумуляторе и регистре В. Полученный 16-разрядный
результат сохраняется в аккумуляторе (младший байт) и регистре В (старший
байт). Умножение происходит довольно быстро и может быть использовано
для обработки с помощью 8051 сигналов звуковой частоты, то-есть для реа-
лизации функций DSP (digital signal processing). Если команда «mul АВ» ис-
пользуется для умножения 16 разрядных чисел, то для получения правиль-
ного результата используется следующая формула:
Result = (VarB * VarC) + ((VarB+1 * VarC) * 0100h) +
((VarB ’ VarC+1) * 0100h ) + ((VarB+1 " VarC+1) * 0100006)
где «VarB» и «VarC» две 16 разрядные переменные, которые необходимо пере-
множить. Эта формула гарантирует получение правильного 32-разрядного ре-
зультата. Ее можно довольно просто реализовать на ассемблере. Умножение на
OlOOh или OlOOOOh осуществляется путем сдвига результата на 8 или 16 бит.
Команда «div АВ» (команда 12.24) выполняет деление содержимого ак-
кумулятора на содержимое регистра «В». Частное помещается в А, остаток —
в В. Эта команда весьма полезна при преобразовании данных. Например,
преобразование байта в трехзначное десятичное число может быть выполне-
но следующим образом:
mov A, Number ; Сохранить число
mov B, #100 ; Получить сотни и остаток
div AB
mov Hundreds. A ; Сохранить сотни
mov A, В ; Повторить для десятков и единиц
mov В, #10
div AB _ » »
mov Tens, A ; Сохранить десятки
mov Ones, В ; Сохранить единицы
Этот программный код можно сравнить с аналогичным кодом для других
микроконтроллеров, который используется в приложении «часы-термометр».
Программа для 8051 проще, выполняется намного быстрее и занимает мень-
ше места.
В документации фирмы Intel на микроконтроллер 8051 указывается, что
команду «div АВ» следует использовать для быстрого многоразрядного сдви-
га вправо. Эта команда не очень удобна для сдвига 16-разрядных чисел, что
часто приходится выполнять, однако она весьма эффективна для сдвига от-
дельных байт. „
238 Часть 2. Микроконтроллеры семейства 8051
Команда: “add A, Operand" Код:
АС'*— (( А & OxOF ) + ( Operand & OxOF )) » 4
Пример: MCU: 8051
mov A #77 , Добавить 100 к 77
add A #100
Команда 12.16. Команда add A, operand.
Команда: “addc A, Operand”
Выполнение:
Код:
Dir 035h Addr
Ind В0011011Г
Reg В00111ПТ’
Imm 034h Const
.. » Прохождение операнда
—Прохождение данных
аккумупятора
A *— A + Operand +
C *— ( A + Operand
V *— ( A + Operand
AC *— (( A & OxOF
C
+ C ) » 8
+ C ) » 8
) + ( Operand
& OxOF ) + C
Такты:
8051 HSM
12 4-8
) » 4
Пример:
mov А, #77
add А, #100
mov Temp, А
clr А
adc А, #0
mov Temp+1, А
MCU: 8051
, Добавить 100 к 77
(16-разрядное сложение)
, Сохранить старшие 8 бит результата
Команда 12.17. Команда addc A, operand.
Глава 12. Система команд микроконтроллера 8051 239
Команда:
‘subb A, Operand'
Выполнение:
А *— А - ( Operand + С )
С *— ( А - ( Operand + С )) » 8
V *— ( А - ( Operand + С )) » 8
Код:
Dir 095h Addr
Ind B'1001011Г
Reg B'10011rrf
Imm 094h Const
—* Прохождение операнда
Прохождение данных
аккумулятора
Такты:
8051 HSM
12 4-8
АС*— (( А & OxOF ) - (( Operand & OxOF ) + С )) » 4
Пример:
mov А. #100
add А. #77
MCU: 8051
; Вычесть 77 из 100
Примечание : «Subb>> производит вычитание с переносом Перед вычитани-
ем убедитесь, что флаг переноса находится в правильном состоянии.
Команда 12.18. Команда subb A, operand.
Команда: “inc Operand”
Operand •*— Operand + 1
Такты:
Код:
Dir 005h Addr
Ind В0000011Г
Reg B'OOOOIrrr"
Acc 004h Const
Прохождение операнда
8051 HSM
12 4-8
Пример:
inc R0
MCU: 8051
; Инкремент содержимого R0 в текущем банке
Команда 12.19. Команда inc operand.
240 Часть 2. Микроконтроллеры семейства 8051
Команда: “dec Operand” Код:
Пример: MCU: 8051
dec @R0 ; Декремент байта, на который указывает R0
Команда 12.20. Команда dec operand.
Команда: “me DPTR”
Код: 0A3h
Пример:
me DPTR
MCU: 8051
; Инкремент - указателя
: на внешнюю память
Команда 12.21. inc DPTR.
Гпава 12. Система команд микроконтроллера 8051 241
Команда: “DA А”
Код; QD4h
if ( С==1 )ll (( А & OxOFO ) > 0x090 ))
А & OxOFO *— ( А & OxOFO ) + 0x060
Пример:
mov A, #077h
add A, #42h
da А
MCU: 8051
Сложить два BCD числа
Старшие четыре бита
будут содержать «1»
Команда 12.22. Команда DA А.
Команда: “Mui АВ"
Код: 0A4F1
Пример:
mov A, #077h
mov B,#042h
mul AB
MCU: 8051
; Найти произведение
, двух чисел
Команда 12.23. Команда mul АВ
16 Зак. 2026-
242 Часть 2. Микроконтроллеры семейства 8051
Команда: “Div АВ” Код: 084h
А •*—А/В
В •*—А//В
Пример:
mov A, #077h
mov В,#01 Oh
div АВ
MCU: 8051
, Получить десятки
, и единицы числа
Команда 12.24. Команда div АВ
Команды битовых операций
Обработка битов выполняется процессором любого компьютера, но для мик-
роконтроллера такие функции являются особенно важными Это связано с
необходимостью обеспечивать во многих приложениях побитовый ввод и вывод
данных Микроконтроллер 8051 реализует достаточно полный набор битовых
операций, которые существенно облегчают разработку приложений
В число стандартных битовых операций, выполняемых 8051, входят логи-
ческие операции И (команды 12 25, 12 26 и 12 27), ИЛИ (команды 12 28, 12 29
и 12 30) и Исключающее ИЛИ (команды 12 31, 12 32 и 12 33), которые произ-
водятся над 8-разрядными операндами Эти три вида команд нс изменяют со-
держимое регистра PSW, хотя посте их выполнения можно осуществить ус-
ловный переход по нулевому результату с помощью команд «jnz» и «jz»
Одна из полезных особенностей 8051 состоит в том, что наряду с целыми
байтами можно обрабатывать отдельные биты Команды «anl С, Bit» и «or! С,
Bit» (команды 12 34, 12 35, 12 36 и 12 37) выполняют логические операции И
и ИЛИ над флагом переноса С и другим битом с записью результата во флаг
переноса Результат этих операций может использоваться командами «jc» и «jnc»
для выполнения условного перехода по значению флага С Значение бита, ис-
пользуемого при операциях, может быть инвертировано Эта возможность по-
лезна, если требуется реализовать битовую операцию XOR (Исключающее ИЛИ)
Напомним, что операция XOR выполняется следующим образом
А л В = ( А & 'В) I ( 'А & В )
Глааа 12. Система команд микроконтроллера 8051 243
Операцию XOR можно запрограммировать в виде следующего макроса
MACRO xorlbit Parmi, Parm2
mov C, Parmi
anl C, 'Parm2
mov ACC 5, C
mov C, Parm2
anl C, iParml
orl C, ACC 5
ENDMACRO
; Parmi XOR Parm2 результат во флаге “С”
, Выполнить “А & 43"
, Сохранить результат
; Выполнить “’А & В’’
, Объединить результаты
Промежуточный результат (значение «Parmi & 1 Рагт2») сохраняется в
одном из временных флагов регистра PSVV Эта процедура может быть останов-
лена на полпути прерыванием Если она используется как автономная коман-
да, то можно запретить прерывания на время выполнения функции XOR
Наряду с логическими операциями над битами и байтами можно произ-
вести сброс в 0 целых байтов и отдельных битов (команды 12 38, 12 39 и
12 40), установку в I отдельных битов (команды 12 41 и 12 42), инвертирова-
ние значений битов и байтов (команды 12 43, 12 44 и 12 45) При выполнении
этих операций в качестве бита может использоваться флаг переноса или за-
данный бит в пространстве регистров
Команды циклических сдвигов полезны для перемещения битов на опре-
деленные позиции с целью их последующего тестирования или для последо-
вательного ввода или вывода битов (команды 12 46, 12 47, 12 48 и 12 49)
Чаще всего используются команды «г]с» и «ггс», выполняющие сдвиг с учас-
тием флага переноса
Последняя битовая команда вообще не изменяет битов Команда «swap»
(команда 12 50) меняет местами две тетрады в байте
Команда: “anl A, Operand” Код:
Пример:
mov А, «77
anl А, «100
MCU: 8051
, Т1 AND 100 = 68 (десятичные числа)
Команда 12.25. Команда anl A, operand
244 Часть 2. Микроконтроллеры семейства 8051
Код:
Команда: “anl Register, A"
Operand-*— А & Operand
Пример:
mov А, #77
anl Register, А
MCU-
8051
, Register AND 77
Команда 12.26. Команда anl direct, А
Код:
Команда: “anl Register, #Consf
8051
Пример:
anl Р0, #1
MCU:
Очистить все, кроме P0 0
Команда 12.27. Команда anl direct, ffconst
Глааа 12. Система команд микроконтроллера 8051 245
Команда: “orl A, Operand”
Выполнение:
, Прохождение данных
аккумулятора
Такты:
Код:
Dir 045h Addr
Ind В 01000111
Reg В 01081 rrf
Imm 044h Const
1 • Прохождение операнда
А ч— A I Operand
8051 HSM
12 4-8
Пример:
mov А, #77
orl А, #100
MCU: 8051
, 77 OR 100 = 109 (десятичные числа)
Команда 12.28. Команда orl A, operand
Команда: “anl Register, А”
Выполнение:
Operand •«— A I Operand
Код:
Dir 042h Addr
» Прохождение операнда
-I, Прохождение данных
аккумупятора
Такты:
8051 HSM
12 8
Пример:
mov А, #77
orl Register, А
MCU: 8051
, Register OR 77
Команда 12.29. Команда orl direct. A
246 Часть 2. Микроконтроллеры семейства 8051
Команда: “orl Register, Const"
Выполнение:
Operand *— Operand I Constant
Код:
Dir 043h Addr Const
» Прохождение операнда
Прохождение данных
аккумулятора
Такты:
8051 HSM
24 12
Пример:
orl Р0, #1
MCU: 8051
, Установить Р0 0
Команда 12.30. Команда orl direct, const
Команда: “xrl A, Operand”
Код:
Dir 065h Addr
Ind В 01100111
Reg В 01101 rrr
1mm 064h Const
Прохождение операнда
Прохождение данных
аккумулятора
Такты:
8051 HSM
12 4-8
Пример:
mov А, #77
xrl А, #100
MCU: 8051
77 OR 100 = 41 (десятичные числа)
Команда 12.31. Команда xrl A, operand
Глава 12. Система команд микроконтроллера 8051 247
Команда: “xrl Register, А” Код:
Пример: MCU: 8051
mov А, #77 ;
xrl Register, А ; Register XOR 77
Команда 12.32. Команда xrl direct, А.
Код:
Команда: “xrl Register, #Const'
Пример:
xrl Р0, #1
MCU: 8051
; Инвертировать РО.О
Команда 12.33. Команда xrl direct, ffconst
248 Часть 2. Микроконтроллеры семейства 8051
Команда: “anl С, Bit”
С Вй & С
—.» Прохождение бит
Код:
Dir 082ti Вй
Такты:
8051 HSM
12 8
Пример:
anl С,Р1 4
MCU: 8051
; С AND Р1 4, С - флаг переноса
Примечание: Биты с номерами больше 0x7Fh находятся в блоке регистров
специального назначения
Команда 12.34. Команда anl С, bit
Команда: “anl С,' Вй”
С •*— С & >( Вй )
——► Прохождение бит
Код:
Dir 080h Bit
Такты:
8051 HSM
12 8
Пример:
anl C,i(P1 4)
MCU: 8051
; С AND 'Р1.4; С - флаг переноса
; ЦР1.4) - инвертированный бит Р1.4
Примечание: Биты с номерами больше 0x7Fh находятся в блоке регистров
специального назначения
Команда 12.35. Команда anl С, ’bit.
Глава 12. Система команд микроконтроллера 8051 249
Команда: “orl С, Bit”
С ♦— Bit I С
——► Прохождение бит
Такты:
Код:
Dir 072h Bit
8051 HSM
12 8
Пример:
orl С.Р1.4
MCU: 8051
; С OR Р1.4; С — флаг переноса
Примечание: Биты с номерами больше 0x7Fh находятся в блоке регистров
специального назначения
Команда 12.36. Команда orl С, bit.
Команда: “orl CjBit” Код:
Пример: MCU: 8051
orl С,!( Р1.4 ) ; С OR IP1.4; С - флаг переноса
; !(Р1.4) - инвертированный бит Р1.4
Примечание: Биты с номерами больше 0x7Fh находятся в блоке регистров
специального назначения
Команда 12.37. Команда orl С, Ibit.
250 Часть 2. Микроконтроллеры семейства 8051
Код:
Команда: "clr А'
8051
Пример:
clr А
MCU:
Очистить
аккумулятор
Команда 12.38. Команда clr А
Код:
Команда: "clr С
Dir
0C3h
... Прохождение флага
переноса С
Такты:
8051
12
HSM
Пример:
clr С
MCU:
, Очистить флаг переноса
8051
Команда 12.39. Команда ar С
Гпава 12. Система команд микроконтроллера 8051 251
Команда: “clr Bit”
Выполнение:
—*- Прохождение бит
Код:
Dir 0C2h Bit
Такты:
8051 HSM
12 8
Пример:
dr Р2 3
MCU: 8051
Очистить бит ввода вывода
Примечание: Биты с номерами больше 0x7Fh находятся в блоке регистров
специального назначения
Команда 12.40. Команда clr bit
Код:
Команда: “setb С
8051
Пример:
setb С
MCU:
: Установить флаг переноса
Команда 12.41. Команда setb С
252 Часть 2. Микроконтроллеры семейства 8051
Код:
Команда: “setb Bit'
8051
Пример:
setb PSW.RS0
MCU:
; Изменить текущий регистровый банк
Примечание: Биты с номерами больше 0x7Fh находятся в блоке регистров
специального назначения
Команда 12.42. Команда setb bit.
Код:
Команда: “cpl А’
8051
Пример:
cpl А
шс А
MCU:
; Изменить знак содержимого
; аккумулятора
Команда 12.43. Команда cpl А
Глава 12. Система команд микроконтроллера 8051 253
Команда: “cpl С"
Выполнение:
Код:
Dir 0B3h
Прохождение флага
переноса С
Такты:
8051 HSM
12 4
Пример:
cpl С
MCU: 8051
; Инвертировать флаг переноса
Команда 12.44. Команда cpl С.
Код:
Команда: “cpl bit'
8051
Пример:
cpl Р1.4
MCU:
; Инвертировать бит ввода-вывода
Примечание: Биты с номерами больше 0x7Fh находятся в блоке регистров
специального назначения
Команда 12.45. Команда cpl bit.
254 Часть 2. Микроконтроллеры семейства 8051
Команда: “тт А”
Выполнение:
А «- (( А & OxOFE ) » 1 ) +
(( А & 0x001 ) «7 )
Код-
Dir 003h
Прохождение данных
аккумулятора
Такты:
8051 HSM
12 4
Пример:
тт А
MCU 8051
Циклический сдвиг содержимого аккумулятора
на один бит вправо
Команда 12.46. Команда гг А
Команда- “rl А”
Выполнение:
А <— (( А & 0x07F) « 1) ч
(( А & 0x080 ) » 7 )
Dir 023h
Прохождение данных
аккумулятора
Такты:
8051 HSM
12 4
Пример:
г1 А
MCU: 8051
, Циклический сдвиг содержимого аккумулятора
, на один бит влево
Команда 12.47. Команда rl А
Глава 12. Система команд микроконтроллера 8051 255
Команда: “ггс А”
Код:
С ♦— А & 001h
Пример:
ггс А
MCU: 8051
, Циклический сдвиг содержимого аккумулятора
, на один бит вправо через флаг переноса
Команда 12.48. Команда ггс А
Команда: “rlc А”
Код:
Dir 033h
Carry Path
Прохождение данных
аккумулятора
Такты:
8051 HSM
12 4
Выполнение:
А ч— (( А & 0x07F ) « 1 ) +
(( С ) «1 )
С <— ( А & 080h ) » 7
Пример: MCU: 8051
rlc А , Циклический сдвиг содержимого аккумулятора
, на один бит влево через флаг переноса
Команда 12.49. Команда rlc А
256 Часть 2. Микроконтроллеры семейства 8051
Команда: “swap А”
Выполнение:
А <— (( А & OxOF ) « 4 ) +
(( А & OxOFO ) » 4 )
Код:
Dir 0C4h
Прохождение данных
аккумулятора
Такты:
8051 HSM
12 4
Пример:
swap А
MCU: 8051
; Перестановка тетрад в аккумуляторе
Команда 12.50. Команда swap А.
Команды передачи управления
Передача управления в микроконтроллерах 8051 производится обычным об-
разом, за исключением одной особенности, связанной с работой регистра
PSW. Так как в этом регистре отсутствует флаг нуля, то команды условных
переходов по нулевому результату «jz» и «jnz» выполняются несколько по
другому, чем в других микроконтроллерах.
Передавать управление по другому адресу можно тремя различными спо-
собами. Короткий переход «sjnip» — это относительный переход на расстоя-
ние от — 128 до +128 байт относительно начала следующей команды. Несмот-
ря на данное ограничение это, вероятно, наиболее часто употребляемая
команда перехода.
Страничный переходы «ajmp» и «асаП» осуществляются в пределах текущей
страницы объемом 2 Кбайте помощью прибавления 11-разрядного смещения
к содержимому программного счетчика. При этом старшие пять разрядов адре-
са команды остаются без изменения. Это означает, что необходимо следить за
тем, чтобы адрес перехода находился в пределах текущей страницы. На рис
I2.1 показано, какие проблемы могут возникнуть при использовании команды
«ajmp». При втором использовании этой команды происходит переход к ко-
манде с «мнимой» меткой «PhatomB» на текущей странице, хотя на самом
деле команда с меткой «LabelВ» находится за пределами текущей страницы.
Длинный переход («Ijnip») дает возможность передавать управление в любое
место 64К пространства Эту команду можно использовать в любом случае,
Глава 12. Система команд микроконтроллера 8051 257
но она занимает дополнительныи байт памяти программ, а при ее выполне-
нии требуется также дополнительный командный цикл в некоторых моделях
8051, например в HSM
Начало 2К страницы
а|гпр LabelA
LabelA
Конец 2K страницы
ajmp LabelB
PhantomB
«LabelB»
«Мнимая > метка
в пределах страницы
LabelB
Рис. 12.1. Переход внутри текущей 2К страницы
Различные виды безусловных переходов иллюстрируются при описании
команд «jmp» (команда 12 51)
Подпрограммы на 8051 в основном работают, как ожидается Команда «call»
(команда 12 52) загружает адрес возврата в стек, а в конце подпрограммы
команда «ret» (команда 12 53) производит извлечение из стека адреса возврата
Команда «call» может осуществлять страничный или длинный переход
При использовании некоторых ассемблеров для достаточно написать «jmp»
или «call», и ассемблер сам выберет наилучший способ перехода Такие ас-
семблеры удобнее для программиста, так как они избавляют его от лишних
забот и автоматически производят выбор способа перехода в зависимости от
размера программы
Если Вы знакомы с другими процессорами, то Вас вероятно удивит, что
выполнении команды «push» происходит инкремент содержимого указателя
стека В большинстве других процессоров команда «push» производит декре-
мент указателя стека Поэтому при организации стека его указатель должен
быть инициализирован на начало области стека, а не на ее конец, как в
большинстве процессоров
Команда «reti» (команда I2 53) работает подобно команде «ret» за исклю-
чением того, что она выполняется в конце обработчика прерывания После
этой команды микроконтроллер может воспринимать запрос на обслужива-
ние следующего прерывания Такая реализация команды «геи» исключает об-
работку вложенных прерываний, которая возможна в некоторых других
микроконтроллерах Это еще одна из причин, почему обработчики прерыва-
ний должны быть короче и выполняться как можно быстрее
17 Зак. 2026.
258 Часть 2. Микроконтроллеры семейства 8051
Табличные переходы осуществляются с помощью команды «jmp
@A+DPTR» (команда 12 54) В этом случае в регистр DPTR записывается ад-
рес начала таблицы, а в аккумулятор — смещение, задающее положение в
таблице адреса команды перехода
mov DPTR, #Table , , DPTR = Начало таблицы
mov A, Index , Получить индекс
clr c , Умножить на 2 чтобы получить адрес
rlc A
jmp Table ©A + DPTR
ajmp ElementO , Переход к разным элементам
ajmp Element!
В этом примере индекс умножается на два (сдвиг влево на один), чтобы
получить необходимое смещение в таблице, так как каждый элемент табли-
цы содержит два байта
Основные команды условных переходов используют биты состояния в
регистре PSW (команды 12 55 12 56 и 12 57) Эти относительные переходы
производятся, если флаг переноса или заданный в команде биг имеет тначе-
ние 1 или 0 Команда «jbc Bit, Label» интересна тем, что после ее выпот нения
тестируемый бит сбрасывается в 0, если он был установлен в 1 Эта команда
полезна для реализации «семафоров» при организации выполнения задач в
ОСРВ При использовании данной команды тестируемый бит является фла-
гом («семафором»), разрешающим выполнение определенной задачи Пере
ход к задаче производится, если она свободна (флаг-«семафор» имеет значе-
ние 1), после чего устанавливается флаг «занято» (флаг-«семафор» принимает
значение 0), запрещающий обращение к задаче до окончания ее выполнения
Команды перехода по нулевому или ненулевому результату (команда 12 58)
проверяют содержимое аккумулятора на нуль Это означает, что содержимое
аккумулятора, определяющее результат данных команд, не должно изменяться
перед их выполнением
Последняя команда условного перехода производит сравнение содержи-
мого аккумулятора с операндом (команда 12 59) или регистра с операндом
(команда 12 60) и реализует переход, если они не равны Эта операция может
выполняться при значениях содержимого тестового регистра (аккумулятора
или регистра текущего банка), равных или не равных нулю Таким образом
данные команды могут использоваться вместо команд «jz», «juz», позволяя
тестировать на ноль значение любого байга, хранящегося в памяти
Для организации циклов используется команда, которая выполняет дек-
ремент операнда и производит переход, если результат не равен нулю (ко-
манда 12 61)
Глава 12. Система команд микроконтроллера 8051 259
mov
Loop:
djnz
R2, #7
R2, Loop
Цикл 7x
Декремент счетчика и переход,
если результат не равен нулю
Приведенный выше пример повторяет цикл семь раз прежде, чем перей-
ти к последующей части про1раммы.
Последней является «пустая» команда «пор» (команда 12 62), которая за-
нимает один байт и выполняется за один командный цикл Основная цель
использования команды «пор» — скорректировать время выполнения про-
граммы Так как код этой операции равен 0011, то команда может быть введе-
на в память программ вместо ошибочных команд при отладке прикладных
программ вместо того, чтобы производить стирание содержимого памяти и
перепрограммирование микроконтроллера
Команда: “sjmp Label”
г
Переход Код
Короткий sjmp OBOh Addr
Страничный ajmp В aaaOOOOl Addr
Длинный Ijmp 002h AddrHi Addrlo
PC •«— Addres
Пример:
MCU: 8051
sjmp Label
; Переход к метке «Label»
Label:
Команда 12.51. Команда sjmp label.
260 Часть 2. Микроконтроллеры семейства 8051
Команда: “acall Label Г
Память
программ
Программ-
ный счетчик
Дешифра
тор команд
OFOh Ao
|№"" П«
’1’ТТГГГ
Такты:
HSM
8051
24
Прямо адресуемый операнд
Выполнение:
Stack ♦— PC
PC *— Address
Пример:
Icall Label
MCU:
Вызов
Label
Команда 12.52.
Команда acall label.
Вызов Код
Страничный acall Вааа10001 Addr
Длинный Icall O12h AddrHi Addrlo
Сохранение содержимого
PC
...» Новое содержимое PC
12-16
8051
подпрограммы «Label;
Команда: “ret” Код:
PC'*—Stack
Пример: - ’ MCU: 8051
Icall Label
Label
, Вызов подпрограммы «Label»
, Возврат из подпрограммы
ret
Примечание: Команда «геи» выполняется аналогично команде «ret», но раз-
решает обслуживание следующего прерывания
Команда 12.53. Команды ret и reti
Глава 12 Система команд микроконтроллера 8051 261
Команда: “jmp ©A+DPTR” Код: 073h
Пример: MCU: 8051
mov DPTR, #Table Start
mov A, #Table Element
jmp @A+DPTR , Переход к элементу (адресу) в таблице
Команда 12.54. Команда jmp @A+DPTR
Команда: “jnb Bit, Label" Код:
if Bit i=0
PC — Address
JNB
if Bit==O <
PC ч— Address
Пример: MCU: 8051
jnb Bit, Label , Перейти к метке «Label»,
, если Bit = О
Label
Команда 12.55. Команды jb bit, label и jnb bit, label
262 Часть 2. Микроконтроллеры семейства 8051
Команда: “jc. Label’ и Л Код:
if Carry ’=0
PC «— Address
JNC
if Carry==O x
PC — Address
Пример: MCU: 8051
jc Label , Перейти к метке «Label»,
если флаг переноса установлен в 1
Label
Команда 12.56. Команды /с label и )пс label
Bit «— 0
PC •«— Address
Пример: MCU: 8051
jbc Semaphore, Label , Перейти к метке «Label»,
: , если Semaphore установлен
Label
Команда 12.57. Команда jbc bit, label
Глава 12. Система команд микроконтроллера 8051 263
Команда: “jnz, Label” Код:
if Асе ==0
PC — Address
JNZ
if Асе !=0
PC •*—Address
Пример:
jz Label
Label
MCU: 8051
; Перейти к метке «Label»,
; если ACC == 0
Команда 12.58. Команда jz label и jnz label.
Команда: “cjne A, #37, Label” Код:
PC *— Address
Пример:
cjnev A, #37, Label
Label
MCU: 8051
; Перейти к метке «Label»,
; если ACC != 37
Команда 12.59. Команда cjne A, #const, label.
264 Часть 2. Микроконтроллеры семейства 8051
Команда: “cjne Reg, Operand, Label” Код:
PC Address
Прямая В' 10111 rrr Value Addr
Косвенная В 10110111 Reg Addr
» Сравнение с содержимым
регистра
Новое содержимое PC
Такты:
8051 HSM
24 16
Пример:
cjne R2, #37, Label
Label
MCU: 8051
; Перейти к метке «Label»,
; если R2 != 37
Команда 12.60. Команда cjne reg, operand, label.
Команда: “djnz Rn, Label” Код:
if Reg !=Operand
PC Address
Пример:
mov RO, 8
Loop:
djnz RO, Loop
MCU: 8051
; Цикл 8x
; He переходить на метку, если RO = 0
Команда 12.61. Команда djnz Rn, label.
Глава 12. Система команд микроконтроллера 8051 265
Команда “пор ’
Код: 000h
Пример:
MCU: 8051
пор
, Задержка на один командный цикл
Команда 12.62. пор
ГЛАВА
13
ПРИМЕРЫ ПРИМЕНЕНИЯ 8051
Краткое содержание
Первое приложение
Часы реального времени и термометр
«Говорящая» клавиатура
В примерах применения, данных в этой книге, используется не классический
микроконтроллер Intel 8051, a Dallas Semiconductor HSM 80С520, особенно-
сти которого были рассмотрены в главе 7 Причиной выбора микроконтрол-
лера с архитектурой HSM является его более высокая производительность
Чтобы реализовать приведенные примеры на классическом 8051, надо пере-
считать задержки или увеличить тактовую частоту микроконтроллера
Одной из особенностей микроконтроллеров 8051 является отсутствие для
них ассемблеров и симуляторов, поставляемых производителями Для всех
других микроконтроллеров, описанных в книге, имеются такие средства,
которые предоставляются производителями на CD ROM. К сожалению, по-
иски таких средств для 8051 с помощью Интернет не дали результатов, и
автор попытался найти необходимый CD-ROM. Что касается ассемблера, то
удалось получить это средство от компании MetaLink, и автор очень доволен,
что имел возможность его использовать Но возникли трудности при поиске
симулятора — лучшее из этих средств, которое удалось найти, было разрабо-
тано и документировано в Германии
Эта проблема разрешилась, когда автор нашел универсальный симулятор
Universal Microprocessor Program Simulator (UMPS), который является наи-
более эффективным средством отладки программ из всех, рассмотренных в
ходе поисков Он обладает двумя интересными особенностями Во-первых,
этот симулятор способен выполнять программный код для широкого набора
микроконтроллеров — для всех, представленных в данной книге и многих
других. Таким образом вам достаточно иметь одно средство программирова-
Глава 13. Примеры применения 8051 267
ния для работы со множеством различных микроконтроллеров. Во-вторых,
он использует уникальный метод симуляции приложении. Вместо разработки
специального тестового файла UMPS позволяет создать виртуальную схему,
с которой взаимодействует ваше приложение. Таким образом, тестирование
прикладной программы при воздействии многих тестовых и входных сигна-
лов может быть проведено простым «щелчком» мышью. В этой главе будет
показано, как UMPS может помочь при разработке приложений. В приложе-
нии, посвященном UMPS, которое дано в конце книги, будет содержаться
более полная информация об этом средстве отладки.
Первое приложение
Когда вы ознакомитесь с содержанием этой книги, вас, возможно, удивит
большое количество примеров применения, реализующих зажигание двух
светодиодов — одного от таймера, другого при нажатии кнопки. Однако это
очень хороший пример использования микроконтроллера, на основе кото-
рого могут быть разработаны другие, более сложные устройства (рис. 13.1).
При разработке этого приложения будут также рассмотрены возможности
использования симулятора UMPS для отладки прикладных программ.
Рис. 13.1. Подключение «мигающих» светодиодов к микроконтроллеру 87С520.
Основной задачей, которая выполняется данной программой, является
реализация двух параллельно выполняемых потоков команд Первый поток,
который назовем основной программой, инициирует второй поток и затем
входит в цикл, который передает состояние кнопки на второй светодиод. Вто-
рой поток бездействует до переполнения таймера, после чего прерывает вы-
полнение первой задачи и начинает переключать первый светодиод, обеспе-
чивая его мигание.
268 Часть 2. Микроконтроллеры семейства 8051
Алгоритм работы прикладном программы показан на рис 13 2 Этот алго-
ритм повторяется для всех микроконтроллеров, описанных в данной книги.
Приложение демонстрирует работу тактового генератора, линии ввода-вы-
вода и обработку прерываний.
Поток 1
(Основная программа)
Запуск
I
Запуск таймера/
прерываний
1
Установка портов
ввода-вывода
Поток 2
Цикл: J
Ждать 250мс до
наступления прерывания
цикл:
’
Светодиод LED1 = Кнопка
I
Возврат __________
к началу цикла
Переключить светодиод LED2
I
Возврат ________
к началу цикла
Рис 13.2. Блок-схема алгоритма функционирования приложения.
Код этой прикладной программы очень прост — возможно, он самый про-
стой из всех рассматриваемых примеров
; Приложение 1. Мигающие светодиоды.
; Это приложение мигает первым светодиодом и отображает
; состояние кнопки на втором светодиоде.
; Муке Predko
; 97.11.19
; Замечания по аппаратной части:
; Микроконтроллер 80С520 работает на частоте 1 MHz
; Pl. 7 - мигающий светодиод LED2
; Р1.0 - светодиод кнопки LED1
; Р2.0 - кнопка
org 0
ajmp Mainline
org OBh ; Прерывание таймераО
cpl Pl. 7 ; Инвертировать бит 7
reti
org 020h ; Program Mainline
Глава 13. Примеры применения 8051 269
Mainline:
clr CKCON ; Использовать для переключения
тай- мераО внутреннюю тактовую
частоту, деленную на 2
mov tmod,#%oooooooi ; ТаймерО - внутренняя синхронизация
; - Режим 1
mov TCQN,#%00010000 ; Запустить таймерО
mov IE,#%10000010 ; Разрешить прерывание от таймераО
mov Pl,#081 h ; Линии светодиодов в высокое состояние
mov P2,#1 ; Все линии Р2, кроме кнопки, в 0
Loop:
mov C.P2.0 ; Получить состояние кнопки
mov P1.0.C ; Скопировать его на светодиод
ajmp Loop
Код выполняется точно так, как показано на рис. 13.2. Когда код написан,
вы можете протестировать его с помощью симулятора перед тем, как соби-
рать схему и загружать код в микроконтроллер.
Для отладки прикладной программы использовался симулятор UMPS,
демонстрационная версия которого распространяется на CD-ROM. Более де-
тально UMPS рассматривается в Приложении «UMPS» в конце книги.
После инсталляции UMPS запускается операционной системой Windows.
После загрузки UMPS необходимо выбрать тип используемого микроконт-
роллера. Щелкнув мышью на пункт меню «Configure», а затем «Load CPU...»,
выберите «DS80C320» (это младшая модель микроконтроллера 87С520, ко-
торая использовалась при реализации этого приложения). Загрузка приложе-
ния осуществляется выбором пункта «Load» в меню «File». В данном случае
это файл «AP1.ASM» (рис. 13.3).
Переходим к редактору UMPS. Он работает как типичный Windows редак-
тор за исключением того, что некоторые операции используют различные
комбинации клавиш. По мере ввода программного кода комментарии ото-
бражаются курсивом синего цвета. Директивы ассемблера помечаются крас-
ным, а команды выделяются жирным шрифтом.
Откомпилировать код можно путем выбора команды «Compile» в меню
«Program» или нажатием на кнопку с изображением желтого «сверкающего
болта» на панели инструментов. Вам будет задан вопрос об имени исходного
файла и предложено сохранить текст перед компиляцией. После окончания
компиляции появится окно с результатами. Ассемблер UMPS прекращает
компиляцию при обнаружении первой ошибки. Строка с ошибкой будет вы-
делена цветом. Возможно, вы получите несколько другой вид экрана, так как
на приведенных иллюстрациях окно исходного кода растянуто, чтобы пока-
зать полную строку.
270 Часть 2 Микроконтропперы семейства 8051
£Л pi
ДЛЯ*Ы
£jpton Н'й»
с ta«ttinfl\uc'mWCT«И' ••t/st' 51 а>1. айп
1 API Fla+F <9 ILL в~*3 Dutton L£D
1
3 This AppJjcatjon Flashes an LED and polls a switch and leturns the
ьвйш
гсг
Рис 13.3. Экран UMPS с загруженным кодом приложения
Один совет по вводу программы при использовании UMPS — не вводите
пробелы в параметрах команд, даже после запятой UMPS не распознает та
кие команды и выдает ошибку, лишенную смысла (ERROR PASS 2 Rn or Pn
Expected) Все параметры должны быть следовать без пробелов
После того как приюжение успешно откомпилировано, можно присту
пить к симуляции Как сказано выше, симулятор UMPS не использует спе
циальный тестовый файл Вместо этого к устройству подключается виртуаль
ное оборудование Следует добавить два светодиода и кнопку, шелкнув мышью
на позиции «Resources» в меню «Configure» После этого на экране откроется
большое окно На панели инструментов можно выбрать «ADD» и поместить в
окно два светодиода «LED (Red, Green, Yellow)» и кнопку «Push Button»
После этого вид экрана будет похож на рис 13 4
Далее окно ресурсов можно уменьшить насколько это возможно и пере
местить в левый нижний угол экрана Чтобы «подключить» введенные элс
менты, выберите один из светодиодов, например LEDI, и нажмите «Connect»
(рис I3 “') Чтобы подключить этот светодиод после нажатия «Connect» выби
рите «Anode» и «Always I» Это подключит анод светодиода к Vcc Далее еде
лайте тоже самое с катодом, подключив его к PI. бит 7 После окончания
экран будет выглядеть, как показано на рис I3 6
Нажмите «ОК» и повторите операцию для второго светодиода, который
надо подключить к Pl, бит 0
Глава 13. Примеры применения 8051 271
1пглго>
£оггШ Сдгйдиге ЭД*** Убпф»* Нй»
Рис. 13.4. Выбор подключаемых элементов два светодиода и кнопка
с&йдо OjH**® Кй»
, т I . . t 0-|
Рис. 13.5. Подключение светодиода
272 Часть 2. Микроконтроллеры семейства 8051
Seksct ADD to add о пжмя
rniz. u.v. г~it>/at iСВОТОДИОДЗ
Delate Ий> bx.
.LU то» LULU !
[ $w<( h
Рис. 13.7. Подключение кнопки.
Глава 13. Примеры применения 8051 273
Подключить кнопку немного сложнее. После выбора кнопки, выберите
меню «Configuration» или маленькое изображение монитора на панели инст-
рументов (рис. 13.7). В окне «Switch Configuration» щелкните «Push Button»,
чтобы отменить выбор Это позволяет подключать к устройству различные
виды кнопок. Убедитесь, что выбран пункт «1» —when open, и нажмите «ОК»
для выхода из окна Теперь можно подсоединить кнопку, используя меню
«Connect». Подключите «Out» к Р2, бит 0, а «1п» к «Always 0» Эта кнопка
будет замыкать вывод Р2 0 микроконтроллера с «землей». Чтобы выйти из
окна «Resources» нажмите на «Exit» в панели инструментов
После «подключения» внешних элементов можно вывести на экран со-
держимое регистров, чтобы наблюдать за выполнением программы. Для это-
го следует выбрать пункт «CPU Registers» из меню «Configure» Для добавле-
ния аккумулятора нажмите «ADD» и выберите «АСС». Эги действия
необходимо повторить для каждого требуемого регистра.
В нашем примере выведены регистры «Асе», «PSW», «SP», «РС», «TL0»,
«ТНО», «Р1» и «Р2» После добавления этих регистров можно назначить каж-
дому из них свой цвет и выбрать систему исчисления, в которой будет выво-
диться содержимое регистра. Затем можно изменить размеры окон, чтобы
было удобно с ними работать (рис. 13.8). После этого все готово для начала
симуляции.
С этого момента UMPS работает как любой другой симулятор При нажа-
тии кнопки «go» начинается выполнение программы. Можно наблюдать, как
работает программа: первый светодиод будет мигать, а второй зажигаться
при нажатии кнопки. При этом UMPS будет останавливаться при переполне-
нии таймера. Щелкнув на пункте «Run Mode .» в меню «Options» можно от-
менить этот останов, а также выбрать рабочую частоту микроконтроллера.
Для этого приложения используется тактовая частота 4 МГц (рис 13 9)
Возникает вопрос, стоит ли собирать эту схему только для того, чтобы
понаблюдать, как зажигаются светодиоды. Однако для получения необходи-
мых практических навыков необходимо пройти весь путь разработки до кон-
ца, построить схему и запрограммировать 87С520. Хотя симулятор показыва-
ет, что ваше программное обеспечение работает правильно, есть ряд проблем,
которые можно научиться решать только при работе с реальной схемой
Одной из проблем было заставить программатор взаимодействовать с РС.
Об этом детально рассказано в главе 11 «Средства отладки систем на базе
8051» Автору пришлось разработать собственный вариант интерфейса RS-232
для программатора, чтобы обеспечить нормальную работу микроконтролле-
ра 87С520. При работе с реальной схемой выявились также два обстоятель-
ства, из-за которых не удавалось ее запустить.
Во-первых, выяснилось, что вывод ЕА микроконтроллера нельзя остав-
лять неподключенным. Чтобы микроконтроллер работал с внутренней памя-
тью EPROM, этот вывод должен быть подключен к напряжению питания.
Если его подключить к «земле» или оставить неподключенным, то 8051 будет
пытаться обратиться к внешней памяти.
18 Зак. 2026-
274 Часть 2. Микроконтроллеры семейства 8051
К
LULfii
£<
Al flI**?!* b|
Рис. 13.8. Выбор регистров
т -rHifti •----------------
> £« Vw fie n Jtfrxta» Orton Brt>
LU lEdtel ALU UU-lLil M U•1fJrJ LZ1El
Рис. 13.9. Модификация работы симулятора.
Глава 13. Примеры применения 8051 275
Во-вторых, оказалось, что схема тактового генератора, использующая
кварц с последовательным резонансом с частотой I МГц и два конденсатора
по 30pF, которая работает со всеми другими микроконтроллерами, описан-
ными в этой книге, не запускает 87С52О. Когда же был включен кварц с
параллельным резонансом и частотой 4 МГц, схема начала нормально рабо-
тать. При этом, однако, частота мигания светодиода оказалась слишком боль-
шой — 8 раз в секунду. Пришлось изменить коэффициент деления частоты в
таймере с 4 до 12, чтобы светодиод мигал приблизительно 2 раза в секунду.
Несколько комментариев по поводу программного кода. Размер откомпи-
лированного кода оказывается существенно меньше (в 2 и более раз), чем
при использовании всех остальных микроконтроллеров. Это объясняется тем,
что 8051 имеет весьма полный набор команд, включая команды битовых
операций. Если вы сравните реализацию цикла основной программы с ис-
пользованием различных микроконтроллеров, то увидите, что имеется в виду.
В программе для 8051 основной цикл и обработчик прерываний оказываются
намного проще и выполняются быстрее, чем в других приложениях, несмот-
ря на то, что в «классическом» 8051 для выполнения команды требуется, в
среднем, существенно больше тактов. Поэтому не следует оценивать произ-
водительность процессора только по количеству тактов, приходящихся на
одну команду. В ряде случаев, подобных описанному, некоторые типы мик-
роконтроллеров имеют заметное преимущество над другими. Для данного при-
ложения микроконтроллер 8051, который содержит CISC-процессор с Гар-
вардской архитектурой, является наиболее эффективным и простым для
программирования, а также требует меньшего объема памяти программ.
Часы реального времени и термометр
Данная схема весьма проста, а ее компоненты можно разместить на печат-
ной плате таким образом, чтобы обеспечить наиболее удобное расположение
жидкокристаллического дисплея (рис. I3. Ю). Если забежать впереди посмот-
реть аналогичные схемы, реализованные на других микроконтроллерах, то
можно заметить, что они очень похожи. Основные различия имеются в ядре
этого устройства, которое содержит микроконтроллер и компоненты, кото-
рые обеспечивают его нормальное функционирование. Фактически, это та
же схема, которая была описана в первом приложении.
ЖК-дисплей соединен с микроконтроллером таким образом, чтобы с ним
было легко работать на макетной плате. Для этого он подключен к выводам,
находящимся на одной стороне 87С520. Кроме того на плате располагаются
кнопка «Установка» и датчик температуры DS182O, которые подключаются к
микроконтроллеру.
После проектирования схемы перейдем к процессу создания программ-
ного обеспечения. Описанный ниже процесс разработки является достаточно
эффективным для создания всех приложений. (Такой подход не применялся
при разработке первого приложения, так как программа его работы была
очень простой, и данный пример проектирования использовался, чтобы по-
казать, как работает микроконтроллер в реальной схеме).
276 Часть 2. Микроконтроллеры семейства 8051
Рис. 13.10. Часы-термометр, реализованные на базе микроконтроллера 870520.
Первая программа должна проверить работоспособность микроконтролле-
ра на плате. Это, например, может быть простая программа, которая периоди-
чески изменяет состояние неиспользуемой линии ввода-вывода Программ-
ный код «AP2.ASM» делает несколько больше Он выдает на ЖК-дисплей «Heilo»
и является началом разработки подпрограммы записи строки на дисплей.
Разработка этой программы значительно упрощается с использованием
UMPS. Никакая последующая отладка не потребуется, если на виртуальном
ЖК-дисплее будет получено сообщение «Hello»
Следующая программа «AP2V2 ASM» служит инструментом для реализа-
ции отображения времени Она разрешает работу таймера и обеспечивает
изменение значения времени каждую секунду Возможно данная программа
не требует особых пояснений, но ниже дается описание ее работы, чтобы
показать, как производится расчет реального времени
Микроконтроллер 87С520 работает с тактовой частотой 4 МГц, при этом
частота командных циклов составляет I МГц Таймер 0 работает в «режиме I»
с делением тактовой частоты на 4 и реализует прерывания через каждые 65
536 мкс, то-есть приблизительно 16 прерываний в секунду В 87С520 исполь-
зуется 24-разрядный счетчик долей секунд, старший байт которого увеличи-
вается каждый раз при переполнении таймера 0. Основная ветвь программы
следит за содержимым старшего байта этого счетчика и фиксирует секунд-
ные интервалы времени каждый раз, когда этот байт равен I6.
Вместо сброса счетчика долей секунд в нулевое состояние из его содержи-
мого вычитается I 000 000 (к этому моменту содержимое счетчика равно
I 048 576). Это означает что остаток переносится на следующую секунду. Пос-
ле двух секунд этот остаток приведет к тому, что только 15 прерываний по-
требуется, чтобы счетчик превысил значение I 048 576 Таким образом, каж-
дый интервал времени не будет точно равен секунде, но в среднем время
будет фиксироваться правильно.
Глава 13. Примеры применения 8051 277
Программа «AP2V3 ASM» производит опрос состояния кнопки «Установ-
ка» каждый раз, когда содержимое счетчика долей секунды превышает зна-
чение I 048 576 Если эта кнопка нажата, то выполняется установка нового
значения времени. Для этой цели используется специально разработанный
алгоритм, который позволяет упростить отладку приложения Алгоритм уста-
новки времени следующий Для изменения числа минут используется пере-
менная «increment», значение которой после этого сдвигается на один раз-
ряд влево с вводом I в младший бит до получения максимальной величины
03Fh (десятичное 63). Чем дольше держать кнопку, тем больше составит из-
менение времени. Когда значение минут достигает максимума, начинают
увеличиваться часы со скоростью один раз в секунду После каждого часа
значение минут сбрасывается в нуль. Таким образом можно пройти полные
24 часа менее чем за 30 секунд
Последняя часть программного обеспечения реализует обслуживание дат-
чика температуры DS1820 (программа AP2V4.ASM) Создание такой программы
для 87С520 потребовало двух дней работы, тогда как аналогичная программа
для микроконтроллера PIC была разработана за полдня, а для 68НС05 — за
день Основной трудностью при разработке этой программы стало обеспече-
ние синхронизации при последовательном приеме данных от DSI820 по од-
нопроводному интерфейсу. Поэтому в дальнейшем при разработке аналогич-
ных приложений целесообразно выбрать цифровой термометр с интерфейсом
I2C или какой-либо другой термометр с синхронным последовательным ин-
терфейсом.
«Говорящая» клавиатура для Марии
При разработке приложении для данной книги выбирались проекты, на при-
мере которых можно показать разнообразные возможности микроконтролле-
ров Ниже рассмотрен пример приложения, в котором показано, как вне-
шние устройства могут работать с шиной микроконтроллера 8051 и как
микроконтролллер может взаимодействовать с клавиатурой Разработанное
устройство производит опрос клавиатуры, и, если клавиша нажата, на 16-
сегментном светодиодном индикаторе представляется соответствующий сим-
вол — буква или цифра, и произносится соответствующее слово Идея такой
разработки возникла потому, что моя дочь, которой было два с половиной
года, очень любила играть со старой клавиатурой, купленной несколько лет
назад Я решил, что будет полезно подключить к клавиатуре электронное ус-
тройство, которое поможет ей выучить буквы и цифры (рис. 13 11)
Это приложение является реальным проектом, отдельными частями ко-
торого является клавиатура, светодиодный индикатор и синтезатор звука На
его примере будет показано, как эти устройства включаются в схему и как
реализуется их интерфейс с микроконтроллером
В этой схеме имеются три устройства, подключенных к обшей шине Р0/
Р2, которые адресуются как ячейки памяти: две микросхемы 74LS374, ис-
пользуемые как буферы для 16-сегментного индикатора, и синтезатор звука
General Instruments SP0256. Эти устройства выбираются при помощи микро-
278 Часть 2. Микроконтроллеры семейства 8051
схемы 74LS138, которая выполняет дешифрацию адресов с А8 по А10 и вы-
бирается сигналом WR. Этот сигнал используется для разрешения выбора
устройств, подключенных к общей шине Р0/Р2
Рис 13.11. Говорящая клавиатура для Марии.
На рис. 13.12 следует обратить внимание на отсутствие микросхемы 74LS373,
которая обычно подключается к порту 0, чтобы сохранить младшие 8 бит
адреса во время передачи по этим линиям байта данных. Об этих разрядах
адреса не следует беспокоится, так как адреса внешних устройств выравнены
по 256-байтной границе, что исключает необходимость сохранять младшие 8
бит. Исключение этой микросхемы позволяет упростить разводку соединений.
Питание схемы осуществляется от 9-вольтовой батареи для радиоприем-
ника. Типовая цепь питания показана на рис. 13.13. Схема получает напряже-
ние от сетевого адаптера или 9-и вольтовой батареи. Если требуется исполь-
зовать 6-вольтовый источник питания (4 батареи АА), то следует включить
микросхему 78С05. В качестве индикатора включения питания служит свето-
диод.
Используемый в схеме 16-сегментный светодиодный индикатор способен
отображать символы алфавита. Индикатор имеет «общий анод», поэтому для
его работы необходимо положительное напряжение питания. Для индикации
символа определенные сегменты соединяются с «землей». Выходы буферных
регистров 74LS374 всегда разрешены (вывод 1 этих микросхем подключен к
«земле»). На выходах включены токоограничивающие резисторы номиналом
220 Ом, чтобы величина тока, протекающего через светодиоды и буферы не
превышала допустимых значений.
Глава 13. Примеры применения 8051 279
Динамик
Рис. 13.12. Схема говорящей клавиатуры на основе 87С520
Рис. 13.13. Типовая схема источника питания 5В
После записи байта в буферный регистр 74LS374 он будет сохраняться
там до записи нового байта Поэтому нет необходимости сканировать инди-
катор
Данная схема собиралась на макетной плате, где образовалась мешанина
проводов Чтобы провода были возможно короче, пришлось нарушить есте-
ственный порядок соединения выводов буферных регистров и светодиодного
индикатора После того, как монтаж схемы был закончен, пришлось исполь-
зовать программу AP3V3 ASM, которая определяет, к каким разрядам буфер-
ных регистров подключены те или иные сегменты индикатора Эти регистры
имеют адреса OOOOOh и 0040011 в адресном пространстве внешней памяти
данных После запуска этой программы выяснилось, что сегменты индикато-
ра подключены следующим образом
280 Часть 2. Микроконтроллеры семейства 8051
Где: «#» - разряд регистра 74LS374, имею-
щего адрес OOOOh
«_#» - разряд регистра 74LS374, имею-
щего адрес 0400h
Имея эту информацию можно отображать различные алфавитно-цифро-
вые символы — цифры от 0 до 9 и буквы от А до Z Пробел соответствует
установке всех разрядов в состояние 1 Тестовая программа «AP3V4 ASM»
позволяет последовательно вывести все эти символы
Теперь можно перейти к подключению звукосинтезатора SP0256 Это уст-
ройство впервые было выпушенное 15 лет назад компанией General
Instruments, преобразует записанный в него байт в фонему, которая выво-
дится в виде ШИМ-сигнала. На рис. 13 14 приведена схема включения этого
устройства, где не показаны выводы, которые остались неподключенными
Рис. 13.14. Включение звукосинтезатора SP0256.
Сигнал _LRQ становится неактивным, когда завершается вывод фоне-
мы, и устройство готово к приему нового байта После вывода фонемы вы-
полняется процедура опроса состояния вывода LRQ, который соединен с
выводом RD микроконтроллера 87С520. Когда на этом выводе устанавлива-
ется низкий уровень сигнала, производится посылка новой фонемы
Можно отметить, что SP0256 имеет не очень хорошие характеристики. Он
реализует вывод речи в виде ШИМ-сигнала, который не обеспечивает необ-
ходимой информации для ее качественного воспроизведения Более похожим
Глава 13. Примеры применения 8051 281
на звуковой сигнал его можно сделать, пропустив через фильтр низкой час-
тоты — RC-схему, подключенную к аудио-выходу. Для усиления выходного
сигнала используется LM386, который включается как стандартный аудио-
усилитель, работающий на 8-Омный динамик.
Если посмотреть техническую документацию на SP0256, то там указана
тактовая частота 3,12 МГц. В данной схеме использовался кварцевый резонатор
с частотой 3,579545 МГц, что не вызвало каких-либо проблем в ее работе.
При поступлении соответствующего байта, который называется «адре-
сом», SP0256 может воспроизводить следующие английские звуки (отмечены
в таблице заглавными буквами)
АДРЕС ФОНЕМА АДРЕС ФОНЕМА
0 Пауза 10 мс 32 abOUt
1 Пауза 30 мс 33 dOg
2 Пауза 50 мс 34 pIG
3 Пауза 100 мс 35 Vest
4 Пауза 200 мс 36 GUest
5 BOY 37 SHiver
6 mY 38 aZure
7 End 39 bRave
8 Come 40 Favour
9 Power 41 Kite
10 Gym 42 Camera
11 Never 43 Zoo
12 pin 44 boNG
13 To 45 Light
14 Ran 46 Window
15 sUccess 47 repAIR
16 Micro 48 WHen
17 Test 49 Yummy
18 THe 50 CHart
19 mE 51 URn
20 rAY 52 greatER
21 Dog 53 tow
22 dO 54 THe
23 cAUght 55 Sissy
24 Юр 56 Now
25 YEti 57 How
26 cAt 58 stoRage
27 Hat 59 chARm
28 Bat 60 JAR
29 TH In 61 Gone
30 lOOk 62 Lazy
31 fOOd 63 draB
282 Часть 2. Микроконтроллеры семейства 8051
На первый взгляд может показаться, что в списке много повторяющихся
звуков Это не совсем верно Некоторые звуки, которые кажутся одинаковы-
ми, на самом деле имеют небольшие отличия Для составления слова можно
перепробовать различные комбинации
Качество речи, получаемое от этого прибора, варьируется от очень хоро-
шей до фактически непонятной Некоторые цифры и буквы в данном прило-
жении звучат не очень хорошо Возможно, надо потратить больше времени на
подбор лучших комбинаций
Чтобы определить фонемы, составляющие слово, его надо разбить на со-
ставные звуки Например, звучание буквы «X» можно разбить на следующие
звуки
1. Короткое «е»
2. «К»
3. «s»
Используя фонемы с адресами 7, 41 и 55. можно получить достаточно
хорошее звучание
После реализации процедур вывода наступила очередь разработки интер-
фейса с клавиатурой Так как отсутствовала какая-либо документация на
имевшуюся клавиатуру, пришлось «прозванивать» ее контакты, чтобы опре-
делить пару выводов для каждой клавиши После этой операции была полу-
чена следующая матрица подключения клавиш
PIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 “V” “R” “4» “М” “J” “R “7” “U”
2 “С” “3” “к” “D” “8” “Г
3 “X” “W” “2” “ ” “L” “S’* "9” “О”
4 Ctrl Fctn Ь» — ” М fc* Shift Ent
5 “Е” “Z” >
6 “Т" “Q”
7 “5” “N” “Н" “G” “6” “Y”
8 и । м “А” "0” “Р”
9 Caps
10
11
12
13
14
15
Глава 13. Примеры применения 8051 283
Эта матрица была преобразована в таблицу для подключения к 87С520.
РЯД-КОЛОНКА 5 6 9 11 12 13 14 15
1 V R 4 M J F 7 U
2 С Е 3 5 К D 8 1
3 X W 2 L S 9 0
4 Ctrl Func = L Shift Enter
7 в т 5 N H G 6 Y
8 Q 1 / •> A 0 P
10 Caps
Теперь можно приступить к подключению. В разработанной схеме все вы-
воды порта Р2 микроконтроллера свободны, а выводы 6 и 7 порта РЗ исполь-
зуются для шинного интерфейса. От ряда 10 можно отказаться, так как в нем
только одна клавиша. Таким образом, остается подключить 14 линий. Для
чтения клавиатуры в порт Р1 записывается OFFh, и этот порт работает в
режиме ввода данных. Выводы с номерами РЗ.О — Р3.5 используются для
подключения рядов. Эти линии поочередно переводятся в низкое состояние,
чтобы определить, нажата ли клавиша. В исходном состоянии все выводы
порта РЗ находятся в высоком состоянии, кроме сканируемого ряда. Если
при сканировании ряда в порте Р1 окажется не FFh, то одна из клавиш
нажата. По значению битов в портах Р1 и РЗ можно определить, какая имен-
но клавиша нажата.
Рассматривая последнюю часть прикладной программы AP3V7.ASM мож-
но заметить, что не принимается никаких специальных мер для устранения
дребезга контактов клавиатуры. В данном приложении этого не требуется. После
нажатия на клавишу соответствующий символ выводится на индикатор и
произносится синтезатором речи. Через секунду после этого начинается оп-
рос клавиатуры, чтобы определить момент отпускания клавиши. После от-
пускания клавиши следующий опрос клавиатуры начинается через четверть
секунды. Этих задержек вполне достаточно, чтобы дребезг контактов прекра-
тился.
Является ли такое решение самым подходящим? Произношение звука
может занимать большую часть секунды. Поэтому быстрое нажатие на клави-
ши невозможно, и данный простой способ подавления дребезга является
вполне приемлемым для этого приложения. Если же разрабатывается прило-
жение, где ввод с клавиатуры производится с высокой скоростью, то лучше
использовать другой метод устранения дребезга.
Образцы SP0256, а также схемы включения можно получить, обратив-
шись по адресу:
B.G. Micro P.O. Box 280298 Dallas, Texas 75228 1(800)276-2206 or (972)271-
5546 Fax: (972)271-2462
email: bgmicro @bgmicro.com //www.bgmicro.com
ГЛАВА
14
ЗАКЛЮЧЕНИЕ
ПО СЕМЕЙСТВУ 8051
Краткое содержание
Ресурсы 8051
WEB Сайты
Справочные серверы
Фирмы -производители
Возможно, приведенное здесь описание 8051 является не таким полным, как
описание других микроконтроллеров Но если сравнить его с документацией
фирмы Intel на микроконтроллер 8051, которая не обновлялась с 1980 года,
то представленную информацию можно считать вполне законченной
Многие другие производители значительно усовершенствовали класси-
ческий 8051 Хорошим примером тому может послужить линия микроконт
роллеров 8051 фирмы Philips Посетив их Web-сайт можно увидеть, какие
разнообразные периферийные устройства встроены в их микроконтроллеры
Интерфейсные устройства 8051 радикально отличаются от интерфейса
других микроконтроллеров, представленных в данной книге Это не является
недостатком, просто об этом надо знать при разработке приложений Когда я
разрабатывал примеры применения 8051, то не встретил особых трудностей
с реализацией интерфейса, несмотря на его отличия от других микроконт-
роллеров, с которыми мне пришлось работать ранее Если посмотреть на опи-
сание обработчика прерывания от таймера, то можно отметить, что аппарат-
ные средства 8051 спроектированы таким образом, чтобы позволить
программисту легко и быстро корректировать работу устройства
Архитектура и набор команд 8051 достаточно эффективны с точки зрения
объема и скорости выполнения программ Если Вы поняли, чем отличаются
регистровые банки от первых 256 байт памяти, а первые 256 байт от всего
Глава 14. Заключение по семейству 8051 285
пространства 64 Кбайт памяти, то у Вас не будет проблем при программиро-
вании микроконтроллера Такую трехступенчатую организацию памяти с
выделением отдельных служебных регистров можно считать наилучшеи сре-
ди представленных в данной книге микроконтроллеров
Однако имеются два негативных момента Первый — отсутствие хороших
свободно распространяемых инструментальных средств разработки для дан-
ной архитектуры Несмотря на то, что 8051 очень популярен в настоящее
время, он постепенно уступает другим микроконтроллерам, так как для них
производители предлагают недорогие высококачественные инструменталь-
ные средства Было бы неплохо, если бы 8051 имел большую поддержку со
стороны производителен или сторонних разработчиков
Другой негативный момент связан с количеством тактов, требуемых на
выпочнение команд 8051 Различные микроконтроллеры, например MCS-15I,
HSM и ХА, имеют разную производительность, и, к сожалению, отсутствует
каком-либо стандарт, определяющий количество тактов для выполнения ко-
манд, который соблюдался бы всеми производителями
Ознакомившись со справочными данными на микроконтроллеры 8051 HSM
фирмы Dallas semiconductor, можно отметить, что в этих приборах реализова-
но развитие архитектуры и расширение возможностей периферийных устроиств
при сохранении высокой степени совместимости с классическими 8051
Ресурсы 8051
Как сказано ранее, 8051 выпускаются рядом производителем, которые
направляют свои усилия на развитие аппаратных средств этих микроконт-
роллеров и возлагают разработку инструментальных средств проектирования
на сторонних производителен Представленные ниже информационные ре-
сурсы это лишь часть того, что существует, но они дают хорошее представле-
ние о тон информации, которая доступна по 8051
Web-сайты
Ответы на часто задаваемые вопросы по 8051 можно наити по адресу
//р //rtfm mit edu/pub/usenet/comp answers/microcontroller-faq/8051
Это более 50 страниц превосходной разнообразной информации по 8051,
включая поставщиков микроконтроллеров и средств разработки
Восемь Web-сайтов с общей информацией по 8051
http'//www labyrinth net au/~steve/8051 html
Хорошая страница базовых сведении Содержит монитор PaulMon. а так-
же программатор АТ89С2051 ,
http //www labyrinth net au/~steve/8051 html
Хорошая страница сведений
йлр/Zmw ece orst edu/~paul/805l -goodies/goodies-index html
286 Часть 2. Микроконтроллеры семейства 8051
Содержит монитор PaulMon и сведения о других ресурсах 8051.
http://www. eg3. com/embe/gatox805 htm
Содержит ссылки на справочные данные и другие страницы сведений.
http://www. iotasys.com
Библиотеки для ассемблеров/дизассемблеров/компиляторов.
http://www. keil.com/c51/index h tml
Бесплатные пробные версии средств разработки.
http://www.tu-bs.de/studenten/akafunk/pr8051/8051tools/software
Средства разработки и программное обеспечение.
http://www.ece.orst edu/serv/8051/
Различные средства разработки для любителей, включая монитор PaulM.
Информационные серверы
Фирма Philips имеет обновляемый информационный сервер для обсуждения
вопросов, касающихся 8051 вообще и моделей, производимых Philips, в ча-
стности. Подписаться на сервер можно заполнив форму по адресу.
йлр //www. phi hpsmcu. com/jotn .htm I
Фирма Intel поддерживает группу новостей по микроконтроллерам MCS-
51 по адресу:
http://www. intel.com/newsgroups/mcontro! htm
Фирмы-производители
Следующие шесть компаний на сегодняшний день поставляют 8051 Наряду с
почтовым адресом компании приводится адрес ее Web-страницы в Интернет.
Intel »
http://developer.intel.com
Intel Corporation, Santa Clara
2200 Mission College Blvd.
Santa Clara, California 95052-8119 USA
Tel: (408) 765-8080
Fax: (408) 765-9904
Atmel
http ://www. atmel. com
Atmel Corporate Headquarters >
2325 Orchard Parkway
San Jose, Ca 95131
(408)441-0311
Bulletin Board Service (408) 436-4309
Главе 14. Заключение по семейству 8051 287
Dallas Semiconductor
http://www. dalsemi. com
Dallas Semiconductor 4100 Spring Valley Road Suite 302
Dallas, TX 75244 Tel: (972) 788-2197 Fax: (972) 980-4290
ISSI
http://www. issiusa. com/month.html
Integrated Silicon Solution, Inc. 2231 Lawson Lane Santa Clara,
Ca 95054 (408)588-0800 Fax: (408) 588-0805
Philips
http://www.phUipsmcu.com
Philips Semiconductors 811 East Arques Avenue P.O.Box3409
Sunnyvale, CA 94088-3409 Tel. 1(800)234-7381 Fax. 1(800) 943-0087
Siemens
http://www.stemens.de/Semiconductor/products/lCs/34/mc_home.html
Siemens Microelectronics 10950 North Tantau Avenue Cupertino,CA95014
Часть
3
МИКРОКОНТРОЛЛЕРЫ
СЕМЕЙСТВА
MOTOROLA 68НС05
19 Зак 2026
ГЛАВА
15
МИКРОКОНТРОЛЛЕРЫ
MOTOROLA 68НС05
л
Если вам столько же лет, сколько и мне, то вы, наверное, в первый раз
познакомились с языком ассемблера при программировании микропроцес-
сора Motorola 6800, который был одним из первых доступных 8-разрядных
микропроцессоров. Несмотря на то, что его архитектуре уже исполнилось 25
лет, он до сих пор жизнеспособен и используется в качестве процессорного
ядра для микроконтроллеров Подтверждением долголетия и жизнеспособно-
сти этой архитектуры является сделанное фирмой Motorola в апреле 1997 года
заявление о том, что потребителям продано уже более двух миллиардов мик-
роконтроллеров семейства 68НС05 (рис.15.1). Семейства микроконтроллеров
68НСхх более известны под именами «НС05», «НС08» и «НС11». Эти аббре-
виатуры будут использоваться в дальнейшем при изложении материала
Рис.15.1. Образцы микроконтроллеров семейства 68НС05.
Глава 15. Микроконтроллеры Motorola 68НС05 291
Компания Motorola создала весьма полный функциональный ряд микро-
контроллеров 68НС05, развитием которого являются микроконтроллеры се-
мейства 68НС08. Наиболее широкие функциональные возможности обеспе-
чивают микроконтроллеры семейства 68НСН, которые имеют несколько
другую архитектуру и реализуют расширенный набор функций, среди кото-
рых, например, имеется команда деления. Семейства микроконтроллеров
68НСхх имеют архитектуру фон-Неймана или Принстонскую, а их ядром
является CISC-процессор (компьютер со сложным набором команд) Это де-
лает семейства 68НСхх достаточно уникальными среди микроконтроллеров,
но для реализации широкого круга приложений, от пейджеров до автомо-
бильных контроллеров, их архитектура оказывается наиболее подходящей.
Имея Принстонскую архитектуру, 68НСхх могут выполнять некоторые при-
ложения более эффективно, чем другие микроконтроллеры. Позднее будет
приведен пример реализации операционной системы реального времени для
68НСхх.
В этом разделе будет рассматриваться, главным образом, семейство 68НС05.
Поэтому при необходимости вам придется самим искать информацию по
микроконтроллерам 68НС08, которые очень похожи на 68НС05, и по 68НС11
Микроконтроллеры НС11. как их чаще всего называют, имеют не очень много
отличий, но обеспечивают существенно лучшие показатели по производи-
тельности. Используя информацию, приведенную в данной книге, вы смо-
жете достаточно просто освоить работу с ними
На момент создания этой книги насчитывалось уже более 180 моделей
68НС05 (без учета разнообразия типов корпусов), которые обладают различ-
ными характеристиками и функциональными особенностями Набор возмож-
ностей, предоставляемых семействами 68НСхх, поистине поражает.
Для лучшего представления о назначении отдельных микроконтроллеров,
семейство НС05 разделено на серии, каждая из которых маркируется буквен-
ным кодом.
Буквенный код серии Область применения Основные характеристики/ Комментарий
в Автомобилестроение/ Промышленная АЦП, ШИМ ЦАП, SCI, EEPROM (разработан
< автоматика для широкого диапазона температур)
BD Телевизоры/ Мониторы Процессор горизонтальной/ вертикальной синхронизации, ШИМ ЦАП (разработан для использования в компьютерных мониторах)
С и D Контроллеры общего применения Многоканальный счетчик, SCI, SPI, I2C, 16- разрядный таймер
292 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Буквенный код серии Область применения Основные характеристики/ Комментарий
СО Адресация к 64К внешней памяти Отсутствует встроенное ПЗУ/ОЗУ (разработан для взаимодействия с внешней памятью)
сс Видеоприложения Декодеры видеосигналов, шина I2C, АЦП, ШИМ ЦАП, PLL (применяется в телевидении)
Е Контроллеры общего применения РЩЕЕРКОМ,АЦП (разработан для использования в телекомму- никациях и для общего применения)
F Телекоммуникации DTMF, SP1 (предназначен для использования в телекоммуника- циях)
G Контроллеры общего применения Многоканальный таймер, АЦП, SPI, ШИМ ЦАП, PLL
J и К Контроллеры общего применения Выполнены в 16 и 20-выводных корпусах, имеется 15-разрядный таймер
JB Интерфейс шины USB Разработан для применения в USB- приложен и я х
L и LN Управление ЖКИ 1 Драйверы ЖКИ, SCI, SIOP, АЦП,DTMF, PLL (применяются в ЖКИ-приложениях и телефонии)
М Управление ВФД Драйверы вакуумно-флюоресцен- тных дисплеев
МС Управление двигателями АЦП, несколько ШИМ
МР Управление двигателями Несколько АЦП, шесть каналов ШИМ
р Контроллеры общего применения Выпускаются в 28-вы водном кор- пусе, имеются АЦП, SIOP, EEPROM
RC Удаленный контроль Цепи управления инфракрасны- ми светодиодами
SC Защищенные приложения Ограниченный доступ к памяти, серийный номер, имеются кон- троллеры в бескорпусном варианте
Т Телевидение Декодер видеосигналов, АЦП, ШИМ ЦАП, шина I2C
Глава 15. Микроконтроллеры Motorola 68НС05 293
Буквенный Область код серии применения Основные характеристики/ Комментарий
V Автомобилестроение Шина JI850, АЦП, ШИМ ЦАП, SPI, EEPROM, высоковольтный регулятор напряжения
X Автомобилестроение Шина CAN, АЦП, ШИМ ЦАП, SCI, EEPROM высоковольтный регулятор напряжения
В даннои таблице используются сокращенные обозначения ряда устройств
микроконтроллера, описание которых будет дано ниже. SPI — синхронный
последовательным интерфейс, SCI — асинхронный последовательный интер-
фейс. SIOP — последовательный порт ввода-вывода, DTMF — двухтональ-
ныи звуковой генератор, PLL — схема автоподстройки тактовой частоты.
ШИМ ЦАП цифро-аналоговый преобразователь с широтно-им пульс нои
модуляцией
Система буквенных обозначений также используется для маркировки
микроконтроллеров 68НС08 и 68HCII, однако одинаковые буквенные ин-
дексы в обозначении приборов из разных семейств соответствуют различным
функциональным возможностям.
Многие из этих микроконтроллеров разработаны не для общего пользова-
ния. а для специального применения Это означает, что вы можете найти
микроконтроллер, который полностью соответствует вашим требованиям,
но недоступен для использования, так как поставляется только по специаль-
ным заказам Наилучшим способом выбора микроконтроллеров из семейств
68НСхх является выбор прибора, удовлетворяющего вашим требованиям, из
каталогов дистрибьюторов продукции компании Motorola, вместо непосред-
ственного поиска по фирменной документации.
ГЛАВА
16
АРХИТЕКТУРА ПРОЦЕССОРА
MOTOROLA 68НС05
Краткое содержание
Центральный процессор
Аккумулятор
Регистр условий
Способы адресация данных
Индексный регистр
Программный счетчик
Стек
Запуск (становка начального состояния)
Загрузочное ПЗУ
Прерывания
Доступ к регистрам периферийных устройств
Функционирование ОЗУ в микроконтроллерах 68НС05
Глава 16. Архитектура процессора Motorola 68НС05 295
Центральный процессор
Основой для создания процессорного ядра микроконтроллеров Motorola се-
мейства 68НС05 (и 68НС08) послужил микропроцессор 6800, имеющий ар-
хитектуру фон-Неймана или Принстонскую архитектуру Это означает, что
память программ, память данных и регистры ввода/вывода располагаются в
едином адресном пространстве (рис I6 I )
Как уже отмечалось ранее в этой книге, данная архитектура предоставля-
ет ряд преимуществ благодаря большей гибкости программирования Наряду
с возможностью использования операционных систем реального времени
(ОСРВ) и отладчиков/мониторов, программы могут быть загружены в опе-
ративную память RAM с целью их тестирования и отладки без выполнения
этапов программирования/стирания EPROM
Аккумулятор .
Архитектура, показанная на рис 16 I, вполне работоспособна (она была реа-
лизована в ряде процессоров), но она не является оптимальной с точки зре-
ния длины команд и количества тактов машинного времени, требуемых для
их выполнения.
Память
Регистры
ввода-вывода
RAM
(EP)ROM
Не исполь-
зуется
Рис.16.1 Базовая архитектура процессора 68НС05.
Например, сложение содержимого двух ячеек памяти с сохранением ре-
зультата в третьей ячейке будет иметь следующий вид
addRegl, Reg2, Result
, Result = Reg1 + Reg2
Для хранения данной инструкции потребуются от 4 до 7 байт памяти про-
грамм по 1 или 2 байта для адресации данных в каждой из трех ячеек памяти
и 1 байт для кода операции, а ее выполнение займет, по меньшей мере, 10
машинных циклов
296 Часть 3 Микроконтроллеры семейства Motorola 68НС05
Возможно, это не сразу понятно, поэтому ниже дается вся последова-
тельность действий при выполнении данной команды
1 Загрузка команды в дешифратор команд — 7 циклов
2. Загрузка содержимого ячейки Regl в АЛУ — 1 цикл
3. Загрузка содержимого ячейки Reg2 в АЛУ и выполнение команды ADD
— 1 цикл
4. Сохранение результата выполнения команды ADD в ячейке Result — 1
цикл
Данная архитектура не является наилучшим решением, так как требует
включения триггеров-защелок на входе АЛУ а также использования ячейки
RAM (которых не так уж много) для хранения промежуточного результата
вычислений Дешифратор команд будет занимать достаточно много места для
размещения всей информации, необходимой для декодирования команды и
генерации соответствующих микрокоманд для АЛУ, а также для переключе-
ния шин адреса/управления Сложной оказывается также реализация непос-
редственной или индексной адресации операндов
С целью устранения возникших сложностей в процессор введен допол-
нительный регистр, предназначенный для сохранения результата операции
и использования его в качестве одного из операндов АЛУ (рис 16 2 ) При
этом результат выполнения арифметических операций сохраняется в акку-
муляторе (Асе) и может быть в дальнейшем использован при выполнении
последующих операций либо записан в память данных RAM Для загрузки
из памяти в аккумулятор операнда, который который будет участвовать в
арифметических действиях, используется команда LDA — «load accumulator»
(рис 16 3)
Рис.16.2. Архитектура процесоора 68НС05 с аккумулятором
Глава 16. Архитектура процессора Motorola 68НС05 297
Рис.16.3. Перемещение данных при выполнении команды LDA
В качестве примера одной из арифметических операций можно привести
инструкцию ADD, которая выполняет суммирование содержимого аккуму-
лятора с содержимым одной из ячеек памяти, а затем сохраняет результат
операции в аккумуляторе (рис 16 4) По завершении выпочнения всех дей-
ствий результат из аккумулятора может быть сохранен в памяти командой'
STA — «store accumulator» (рис 16 5)
Рис. 16.4. Перемещение данных при выполнении команды ADD
298 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Рис.16.5. Перемещение данных при выполнении команды STA
При рассмотрении этих вариантов может показаться, что использование
аккумулятора требует значительно гораздо большего числа тактов и ячеек па-
мяти, чем в первоначальном примере. На самом деле, разница между выпол-
нением операции одной командой или последовательностью из трех команд
незначительна- 9 байт кода для хранения трех команд против 4-7 байт для
хранения одной команды. При этом число тактов, необходимых для выполне-
ния операции, оказывается одинаковым и равным Ю. Но, как отмечалось выше,
выполнение операции за три команды делает архитектуру процессора более
простой и гибкой, что будет показано ниже в разделе «Адресация данных».
Регистр условий
Архитектура микропроцессоров 6800 предполагает, что регистры периферий-
ных устройств входят в общую карту памяти, но прямой доступ к содержимо-
му основных контекстных регистров процессора запрещен. Содержимое этих
регистров может изменятся в результате выполнения различных операций
(арифметических команд, обработки прерываний и др.), либо доступ к ним
осуществляется другими способами.
Первым в этой группе регистров процессора является регистр условий CCR,
который в других процессорах обычно называется регистром состояния. Содер-
жимое данного регистра изменяется с помощью специальных команд, напри-
мер, команда SEC устанавливает флаг переноса в I. При выполнении ряда
команд один из битов этого регистра используется в качестве входного пара-
метра, например, команда BEQ реализует переход по определенному адресу,
если значение флага нуля равно I. Но в большинстве случаев содержимое реги-
стра условий меняется в результате выполнения арифметических операций,
например, команда ADD может изменить состояние флагов переноса, нуля,
переноса между тетрадами и отрицательного результата (рис. 16.6).
Глава 16. Архитектура процессора Motorola 68НС05 299
Рис. 1 Б.Б. Архитектура процессора 68НС05 С регистром CCR.
Регистр CCR содержит следующие флаги
Бит Флаг Описание
0 Перенос/Заем Устанавливается при выходе результата опе- рации сложения (вычитания) за границы 8- разрядной сетки
1 Нулевой результат Устанавливается при нулевом результате операции
2 Отрицательный результат Устанавливается при отрицательном результате операции
3. Маскирование прерываний Установка данного бита разрешает обслужива- ние прерываний
4. Перенос между тетрадами Устанавливается при возникновении переноса (заема) в старшую тетраду (из старшей тетра- ды) в результате выполнения операции сложе- ния (вычитания)
5. Не используется Равно 1
6. Не используется Равно 1
7. Не используется Равно 1
Флаг переноса устанавливается, если результат операции сложения пре-
вышает значение OxOFF, или результат операции вычитания меньше 0. Этот
флаг используется в арифметических операциях с 16 разрядными (и более)
числами, чтобы увеличить на I (при сложении) или уменьшить на I (при
300 Часть 3. Микроконтроллеры семейства Motorola 68НС05
вычитании) результат сложения старших байтов, если при операции с млад
шими байтами результат вышел за границы 8-разрядной сетки
Например, сложение двух 16-разрядных чисел с сохранением результата
в памяти будет реализовано с помошью следующей программы
Ida разр Regl + ядного 1
add Reg2 + 1
sta Result ч 1
Ida Reg1
adc Reg2
sta Result
, Загрузить в аккумулятор младший байт 16-
числа
, Сложить младшие байты двух чисел
, Сохранить результат операции в младшем байте суммы
, Загрузить в аккумулятор старший байт
16-разрядного числа
, Сложить старшие байты двух чисел с учетом переноса
, Сохранить результат операции в старшем байте суммы
Необходимо отметить некоторые особенности приведенной выше програм-
мы Одна из них связана с порядком следования байтов в 16-разрядном числе
В процессорах фирмы Motorola старший байт числа всегда идет первым, то-
есть расположен по меньшему адресу Эта особенность будет рассмотрена да-
лее в данной главе
Если бы не существовало инструкции ADC, выполняющей сложение с
учетом флага переноса, то после сложения младших байтов полученное значе-
ние флага переноса надо было бы перед суммированием старших байтов заг-
рузить в ячейку Result (если флаг установлен, то в Result загружается 1, в
противном случае 0) Ниже приведена программа для реализации такого ва-
рианта
clr Result , Очистить старший байт ячейки памяти Result
Ida Reg1 + 1 , Сложить младшие байты двух чисел и сохранить результат операции в младшем байте Result
add Reg2 + 1
sta Result + 1
bcc CarrySkip , Если признак переноса установлен, увеличить значение старшего байта результата на 1
inc Result
CarrySkip
Ida Reg1 , Сложить старшие байты двух чисел с содержимым Result и сохранить полученный результат
add Reg2
add Result , Сложить сумму с содержимым Result (Выполнить инкремент при наличии переноса)
sta Result
Флаг переноса также устанавливается, если результат операции вычита-
ния меньше нуля Команда SBC ~ «вычесть с учетом значения флага перено-
са», выполняется аналогично команде ADC Необходимо отметить, что су-
ществует разница в использовании флага переноса/заема между процессорами
семейств 68НСхх и процессорами PIC, которые не учитывают значение дан-
ного флага при выполнении операций вычитания
Гпава 16. Архитектура процессора Motorola 68НС05 301
Флаг нуля устанавливается при нулевом результате операции. Это означа-
ет, что команды:
ог#0 ; Выполнить операцию OR над содержимым аккумулятора и 0
или
and#$FF : Выполнить операцию AND над содержимым
аккумулятора и числом FF
могут быть использованы для проверки содержимого аккумулятора: в случае
нулевого результата производится установка флага нуля без изменения со-
держимого регистра (хотя после предыдущей операции флаг нуля будет уста-
новлен или сброшен в зависимости от результата ее выполнения). Команда
LDA устанавливает флаг нуля в зависимости от величины, загружаемой в
аккумулятор, что устраняет необходимость применения команды тестирова-
ния аккумулятора. Эта команда не влияет на значение флага переноса.
Флаг отрицательного результата устанавливается, когда установлен в I
старший (7-ой) бит содержимого аккумулятора. Как и другие микропроцес-
соры, микроконтроллеры семейств 68НСхх осуществляют поддержку отри-
цательных чисел неявно, представляя положительные и отрицательные чис-
ла в дополнительном коде и обрабатывая их в зависимости от контекста.
Флаг маскирования прерывания не является признаком результата опера-
ции, в отличие от других флагов в регистре CCR. Он не изменяется в резуль-
тате выполнения арифметических операций. Значение этого флага считыва-
ется дешифратором, когда возникает запрос на прерывание. Если флаг сброшен
(бит равен 0), то прерывание только фиксируется, в противном случае вы-
полняется его обработка. Более подробно прерывания будут описаны далее в
этой главе.
Последний флаг полупереноса, имеющийся в регистре CCR, это признак
переноса между тетрадами (нибблами). Этот флаг устанавливается, когда воз-
никает перенос (или заем) в старшую тетраду (или из старшей тетрады) при
выполнении операции сложения (или вычитания). Данный флаг обычно ис-
пользуется при выполнении алгоритмов обработки чисел, в которых каждый
разряд представляется одним байтом.
Ниже приведена подпрограмма, предназначенная для выполнения инк-
ремента двухразрядного шестнадцатеричного числа, каждый разряд которо-
го занимает один байт.
/ 1 - * * ' 1
IncNumber: ,. ; Инкремент числа, реализация переноса между
байтами
Ida #1
add Digit + 1 ; Прибавить 1 к младшему байту
sta Digit + 1
bhcc IncNumEnd ; Переход, если результат не превышает 15
clr Digit + 1 ; Очистить, если результат превышает 15 ,
' Ida #1 ; Прибавить 1 к старшему байту
add Digit
302 Часть 3. Микроконтроллеры семейства Motorola 68НС05
sta bhcc Digit IncNumEnd 4 * -
clr Digit ; Очистить старший байт
IncNumEnd: ; Конец подпрограммы. Вернуться в точку
вызова
rts '
Три старших значащих бита регистра CCR всегда равны 1. Вы, наверное,
спросите, для чего это нужно9 Это необходимо для таких приложений, как
операционная система реального времени RTOS, где в регистр CCR должно
быть загружено начальное значение, каждый бит которого должен иметь оп-
ределенное значение
Способы адресации данных
Необходимо объяснить одно существенное различие между 68НС05 (и други-
ми процессорами фирмы Motorola) и микроконтроллерами других произво-
дителей. В микроконтроллерах Motorola (таких как 68НС05) последователь-
ность байтов в 16-разрядных словах изменена по сравнению с другими
процессорами. Большинство процессоров сначала размещают в памяти млад-
ший байт 16-разрядного числа, а затем старший. Например, в микроконт-
роллерах 8051 используется следующая запись 16-разрядного числа: 0x03412,
которая на самом деле представляет число $1234. Если вы работаете с подоб-
ными процессорами, то быстро научитесь делать такую перестановку в уме,
и данная форма записи будет выглядеть для вас вполне естественно, несмот-
ря на то, что младший байт будет находится по меньшему адресу. Если вы
когда-либо писали программы для персонального компьютера, то знаете,
что именно так хранятся 16-разрядные числа в компьютере. В микроконтрол-
лерах 68НС05 это же число будет записано в виде $1234.
Данная особенность может показаться несущественной. Однако надо иметь
в виду, что такой порядок расположения байтов огличается от порядка, при-
нятого во всех других микроконтроллерах, описанных в данной книге (и в
большинстве процессоров, представленных на рынке). Хотя порядок разме-
щения не имеет принципиального значения, однако пользователь должен
знать, какой порядок используется, и понимать, надо ли изменять его, что-
бы получить действительное значение хранящегося числа.
В микроконтроллерах 68НС05 используются следующие способы адреса-
ции:
Регистровая. Использование конкретного регистра определяется в инст-
рукции (например, INCA — инкремент аккумулятора).
Непосредственная. Операнд содержится в команде (например, ADD #2 —
добавить 2 к содержимому аккумулятора).
Прямая. Адрес операнда, расположенного в одном из первых 256 байт
памяти, содержится в команде (например, LDA $37 — загрузить в аккуму-
лятор содержимое ячейки памяти с адресом $37).
Гпава 16. Архитектура процессора Motorola 68НС05 303
Расширенная 16-разрядный адрес ячейки памяти содержится в команде
(например, goto $ 1234 — загрузить в программный счетчик значение $ 1234)
Индексная без смешения 8-разрядный адрес операнда находится в ин-
дексном регистре
Индексная с 8-разрядным смещением Для получения адреса операнда 8-
разрядное смешение суммируется с содержимым индексного регистра
Индексная с 16-разрядным смещением Для получения адреса операнда 16-
разрядное смещение суммируется с содержимым индексного регистра
В этом разделе будут рассмотрены первые четыре способа адресации, а в
следующем разделе вы познакомитесь с индексными регистрами и тем, как
с их помощью можно адресовать данные Одним из важных моментов, о ко-
тором необходимо упомянуть, является то, что основная команда занимает
один байт, а параметры, необходимые для ее выполнения (например, адрес
операнда или данные), располагаются в дополнительных байтах Для выпол-
нения каждой команды требуется от 2 до 11 тактов
Регистровая адресация наиболее простой метод адресации данных Как
сказано выше, используемый регистр (а часто и отдельные биты регистра)
определяется кодом команды Примерами таких инструкций являются ко-
манды INCX, которая увеличивает содержимое индексного регистра на еди-
ницу (не путать с командой INC ,Х, которая выполняет инкремент содержи-
мого ячейки памяти с адресом, определяемым индексным регистром) и BCS,
которая выполняет ветвление, если установлен в 1 флаг переноса в регистре
условий CCR Все инструкции, использующие для выбора данных регистро-
вую адресацию и не содержащие адрес ветвления, имеют длину 1 байт и
выполняются за 2 или 3 такта машинного времени
При непосредственной адресации значение операнда содержится в самой
инструкции, и перед этим значением необходимо поставить символ # На-
пример, команда ADC #12 означает, что к содержимому аккумулятора нуж-
но прибавить 12 и увеличить полученную сумму на 1, если в результате пре-
дыдущей операции был установлен в 1 флаг переноса Команды, использующие
непосредственную адресацию, занимают 2 байта и требуют для выполнения
не менее 3 тактов
Прямая адресация используется для доступа к ячейкам памяти, расположен-
ным в первом 256-баитном сегменте памяти За байтом кода команды следует 8-
разрядный адрес (1 байт) требуемой ячейки памяти В качестве примера можно
привести команду CLR byte, выполняющую запись нуля в ячейку памяти с
определенным адресом и имеющую код $3F byte Как и команды с непосред-
ственной адресацией, команды, использующие прямую адресацию, занимают
2 байта памяти программ и требуют не менее 3 тактов для выполнения
Расширенную адресацию более точно назвать расширенной прямой адре-
сацией Отсюда следует, что прямая адресация способна обеспечить доступ
ко всей внутренней памяти микроконтроллера, если адрес операнда имеет
расширенный формат — 2 байта При этом длина команды увеличивается до 3
байт, а ее выполнение займет не менее 4 тактов Как правило, если команда
реализует прямую адресацию, то она поддерживает и расширенную
304 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Индексный регистр
Микроконтроллеры 68НС05 имеют в своем составе один 8-разрядный индек-
сный регистр, который может быть использован для доступа к любой ячейке
внутренней памяти При выполнении команд с индексной адресацией, со-
держимое индексного регистра считывается дешифратором команд и посту-
пает на шину адреса для выборки операнда (рис 16 7)
Рис.16.7. Архитектура процессора 68НС05 с индексным регистром
Вас, вероятно, интересует, как с помощью индексного регистра можно
получить доступ к любой позиции адресного пространства, если он имеет
только 8 разрядов, которые позволяют адресоваться только к 256 ячейкам
памяти Это достигается посредством добавления смещения к содержимому
индексного регистра С использованием индексного регистра связаны три су-
щественно различных режима адресации
Первым из них является индексная адресация без смешения, при которой
к содержимому индексного регистра ничего не добавляется Каждая команда
с такой адресацией имеет длину 8 бит и требует для выполнения столько же
тактов, как команда с прямой адресацией Поскольку индексный регистр
имеет только 8 разрядов, то в данном режиме возможен доступ только к
первым 256 ячейкам памяти
При индексной адресации с 8-разрядным смещением это смешение сум-
мируется с содержимым индексного регистра, позволяя адресоваться к лю-
бому байту, находящемуся в диапазоне от 0 до 510 (S1FE) Возможно, это
покажется лишь незначительным усовершенствованием индексной адреса-
ции без смешения На самом деле такое усовершенствование является суще-
ственным, так как упрощает разработку компиляторов и программного обес-
печения для 68НС05 Причиной тому является расположение большинства
Гпава 16. Архитектура процессора Motorola 68НС05 305
ячеек памяти в первых 5!2 полициях адресного пространства для различных
микроконтроллеров семейства 68НС05 Это означает, что доступ к массивам
и другим типам структурированных данных возможен в соответствии с их
начальным положением (или смещением) Таким образом, исключается ра-
бота, выполняемая в других микроконтроллерах, где правильный адрес (вклю-
чая смещение) должен быть, сформирован и помещен в индексный регистр
перед обращением к памяти
В индексной адресации с 8-разрядным смешением смешение может дос-
тигать значения SFF (255) При сложении с содержимым индексного регист-
ра, которое может достигать значения SFF, можно сформировать адрес с
максимальным значением SI FE или 510 (то-есть 255 плюс 255)
Как вы, наверное, уже догадались, индексная адресация с 16-разрядным
смещением может быть названа расширенной индексной адресацией со сме-
щением Для формирования адреса 16-разрядное смещение добавляется к
содержимому индексного регистра
Хотя индексная адресация с 16-разрядным смещением позволяет полу-
чить доступ к любой ячейке адресного пространства, вы не можете адресо-
вать массив памяти объемом более 256 байт Это создавало значительные труд-
ности при программировании микроконтроллеров на заре их развития
Особенно остро данная проблема стояла в микропроцессорах 6502, исполь-
зуемых в компьютерах Apple 2
Решением проблемы стало создание программным способом 16-разряд-
ного индексного регистра, способного к самомодификации На самом деле
существуют два решения поставленной задачи Первым (и, вероятно, более
корректным) способом является использование 8-разрядного индексного
регистра с 16 разрядным смешением, задающим начало каждого 256-баит-
ного адресного блока В 68НС05 процедура чтения из памяти может быть реа-
тизована с помощью следующего программного кода
Index16 , Чтение данных с помощью индексного регистра Х16
Idx Х16+1 , Установить значение индексного регистра
Ida Х16 , Загрузить в аккумулятор старшие 8 бит
bne Index16.1 , Если нет в первых 256 байтах, перейти к следующим
Ida X , Считать содержимое ячейки памяти из первых
256 байт
rts , Вернуться к основной программе
Index16_1 . Данные находятся во втором 256-байтном сегменте9
deca , Уменьшить содержимое аккумулятора на 1
bne Indexl6_2 , Если не равно 0, перейти к следующему сегменту
Ida ($100), X , Считать содержимое ячейки памяти из вторых
256 байт з »х % ‘ . ' «
rts
Index16_2 ; Данные находятся в третьем 256-байтном сегменте9
, И так далее для 254 остальных 256-байтных сегментов
20 Зак 2026
306 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Излишне говорить, что это достаточно нудный способ программирова-
ния. Кроме тою, данный программный код потребует для реализации 1025
команд, занимающих 1791 байт памяти программ, а его выполнение займет
or 21 до 3582 тактов. Подобное использование памяти и большой разброс
количества тактов, затрачиваемых на выполнение подпрограммы, являются
неприемлемыми, особенно если учесть, что процедура записи в память с
помощью такого 16-битного индекса потребует еще больше памяти и тактов.
В некоторых микроконтроллерах, имеющих таблицу перекодировки, от-
куда можно считать индекс, реализация подобной подпрограммы осуществ-
ляется проще. Такой способ имеет преимущество, так как всякий раз при
вызове подпрограммы выполняется одинаковое количество команд, однако
при этом, по-прежнему, требуется большое количество памяти для хране-
ния). К сожалению, процессор 68НС05 не имеет команд обращения к табли-
цам перекодировки. „ -г
Вторым решением, о котором уже говорилось выше, является программ-
ный код, способный к самомодификации. Для чтения данных из памяти,
доступ к которым осуществляется с помощью 16-разрядного индекса, может
быть использована следующая программа: , ,
Index16: ; Чтение данных с помощью индексного регистра Х16
Ida Х16 ; Загрузить адрес для чтения
sta lndex16_Read+1 Ida X16+1 ; Изменить адрес для чтения
sta lndex16_Read+2 • •
lndexl6_Read: ; Операция чтения
Ida $1234 rts ; Начать процесс с фиктивным 16-разрядным адресом ; Вернуться к основной программе
Данная подпрограмма занимает существенно меньше байтов памяти —
только 12, и выполняется каждый раз за одинаковое число тактов — 24. Про-
граммный код, реализующий процедуру записи в память, немного сложнее
и требует использования регистра хранения, но он также довольно прост
Приведенный программный код должен располагаться в памяти RAM и са-
мостоятельно модифицироваться, что, как вы, наверное, знаете, является
наихудшим вариантом программирования С точки зрения «чистого» програм-
миста такое программирование эквивалентно самоубийству. Но если необхо-
димо создать где-нибудь в памяти таблицу объемом более 256 байт, а вы
имеете только 8-разрядный индексный регистр, то создание программного
16-разрядного регистра является наилучшим решением проблемы.
Программный счетчик
Если вам приходилось работать с процессорами, имеющими Принстонскую
архитектуру, то устройство и функционирование программного счетчика
Глава 16. Архитектура процессора Motorola 68НС05 307
микроконтроллера 68НС05 покажется вам очень знакомым Содержимое про-
граммного счетчика не может быть загружено явным образом
Если вы работали с другими 8-разрядными микропроцессорами, тогда
вам необходимо знать об одном их отличии от 68НС05 Программный счет-
чик 68НС05 может предоставить доступ только к памяти, имеющейся в мик-
роконтроллере, а не ко всем 64 Кбайт, доступным при 16-разрядной адреса-
ции Таким образом, если вы используете 68НС05С8, имеющий 7,8 Кбайт
EEPROM и служебной ROM и 0,2 Кбайт RAM, то программный счетчик
будет иметь разрядность 13 бит, то-есть способен адресовать не более 8 Кбайт
Когда содержимое программного счетчика достигает S1FFF, оно возврата
ется к нулевому значению, а не увеличивается до $2000, что можно было бы
ожидать при работе с 16-разрядным программным счетчиком (рис 16 8)
<>
Рис. 16.8. Архитектура микроконтроллера 68НС05 с программным счетчиком
На рис 16 8 вы можете заметить, что изменено название блока «Дешиф-
ратор команд и программный счетчик», присутствующего на предыдущих
диаграммах О причине этого будет сказано позже, после рассмотрения неко-
торых особенностей, присущих 68НС05
Содержимое программного счетчика изменяется при выполнении команд
ветвления, перехода, вызова подпрограмм и возврата из них, но прямой
доступ к нему невозможен Однако, как уже отмечалось в этой книге, доступ
к программному счетчику необходим для реализации программ-мониторов и
ОСРВ
Доступ к программному счетчику можно осуществить косвенным путем,
используя стек После вызова подпрограммы или обработчика прерывания,
308 Часть 3. Микроконтроллеры семейства Motorola 68НС05
данные в стеке располагаются в определенном порядке Обычно ядро ОСРВ
или программ-мониторов загружается посредством прерывания. Для того,
чтобы вернуться к выполнению основной программы, в стек записывается
новое значение содержимого программного счетчика. Например, если при
вызове подпрограммы указатель стека содержал адрес его вершины, то мож-
но вернуться в любую точку пространства памяти, используя следующий
программный код:
SubEnd: ; Перейти в другую точку пространства
Ida NewAddr ; Загрузить в стек новое значение адреса возврата
sta StackTop - 1 ; Вершина стека имеет значение $FF для 68НС05
Ida NewAddr + 1 ; Загрузить младший байт адреса возврата
sta StackTop - 2
rts ; Вернуться из подпрограммы
Это слишком сложный путь для реализации команд jump или goto, одна-
ко он позволяет осуществлять переход в любое место пространства памяти,
что невозможно выполнить одиночной командой При использовании выше-
приведенного программного кода, вы должны точно знать, какое значение
имел указатель стека перед записью в стек нового значения.
СТЕК
Процессор 68НСО5, как и процессоры других микроконтроллеров сохраняет
программный счетчик и контекстные регистры в стеке, чтобы легко и быст-
ро вернуться из подпрограммы или обработчика прерываний. Архитектура
фон-Неймана предполагает, что доступ к стеку можно получить с помощью
процессора (вследствие единого адресного пространства). Хотя в 68НС05 су-
ществуют некоторые ограничения по сравнению с другими процессорами,
имеющими архитектуру фон-Неймана, доступный указатель стека является
гибким инструментом, позволяющим выполнять сложные приложения, ко-
торые часто невозможно реализовать с помощью других микроконтроллеров,
представленных в данной книге.
Указатель стека является 6-разрядным индексным регистром, значение
которого всегда используется со смещением равным $0С0. Он также может
быть представлен как 8-разрядный регистр, у которого старшие 2 бита всегда
установлены в 1. Это означает, что с помощью данного регистра можно полу-
чить доступ к ячейкам памяти с адресами от $0С0 до S0FF. Для иллюстрации
работы стека в 68НС05 на рис. 16.9 показана область памяти, к которой осу-
ществляется доступ при обращении к стеку.
Команда сброса указателя стека RSP устанавливает начальное значение
его содержимого, равное S0FF. При вызове подпрограммы содержимое про-
граммного счетчика, определяющее адрес следующей исполняемой инструк-
ции, сохраняется в стеке (первым сохраняется младший байт). При обработ-
ке прерывания в стек загружается не только значение программного счетчика,
но также содержимое регистра условий CCR, аккумулятора и индексного
регистра. В результате всего сохраняется пять байтов, два из которых содержат
адрес возврата.
Гпава 16. Архитектура процессора Motorola 68НС05 309
Рис.16.9. Область памяти, адресуемая указателем стека в микроконтролле-
ре 68НС05
При использовании стека в прикладной программе следует установить
начальное значение указателя равным S0FF и зарезервировать для стека дос-
таточное место в памяти данных, рассчитывая на наихудший (наиболее пол-
ный) вариант его использования Например, если в вашем приложении ис-
пользуется одна вложенная подпрограмма, которая требует 2 байта стекового
пространства для хранения адреса возврата, и обработчик прерывания, кото-
рый не вызывает дополнительных подпрограмм и занимает 5 байтов для хра-
нения адреса возврата и содержимого контекстных регистров, то для стека
должны быть зарезервированы 9 байтов с адресами от S0F7 до S0FF
Стек процессоров 68НС05 не может быть использован для хранения дан-
ных, как это обычно бывает в большинстве других процессоров с архитекту-
рой фон Неймана Содержимое контекстных регистров сохраняется при вы-
зове обработчика прерывания, а при вызове подпрограммы содержимое
регистров, которое может измениться в процессе ее выполнения, должно
быть полностью сохранено в памяти данных в начале выполнения подпрог-
раммы и восстановлено перед возвратом к основной программе
Выше показано, как модифицировать стек, чтобы можно было косвен-
ным путем изменить содержимое программного счетчика Для большинства
приложений нет необходимости выполнять подобные действия Обычно в
начале программы указатель стека устанавливается в начальное состояние
$0FF (вершина стека), а в процессе выполнения программы обращение к
указателю стека не производится
310 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Запуск
(установка начального состояния)
Установка начального состояния 68НС05 достаточно типична для микроконт-
роллеров После включения питания или активизации сигнала сброса начина-
ет работу встроенный генератор тактовых импульсов Перед тем, как процес-
сор начнет выполнение первой команды программы, адрес которой
определяется вектором установки начального состояния, производится задер-
жка длительностью 4064 такта для стабилизации работы тактового генератора.
По истечении времени задержки из области векторов пользователя, нахо-
дящейся в конце адресного пространства EPROM, загружается вектор уста-
новки начального состояния — адрес первой выполняемой команды. На
рис 16.10 показана последовательность начальной загрузки для микроконт-
роллера 68НС05ЛА, имеющего память EPROM емкостью 1232 байт
Reset
Сигнал тактово-
го генератора
Машинные
такты
Шина адреса
Шина данных
Задержка в
4064 такта
после вклю-
чения
питания
'Сигнал'
RESET
акти-
вен
Рис.16.10. Временные диаграммы сигналов при включении питания или по-
ступления сигнала _RESET. ь
Данный порядок запуска типичен для микроконтроллеров и позволяет
подключать вывод _RESET устройства непосредственно к шине питания Vcc
Если предполагается использовать внешний тактовый генератор, то путем
установки отдельных битов в регистре MOR (mask option register) задержка в
4064 такта может быть уменьшена до 16 тактов с целью ускорения процесса
инициализации.
На предыдущем рисунке вы, должно’быть, заметили, что в микроконт-
роллерах 68НС05 один машинный такт выполняется за два периода сигналов
генератора. Это означает, что команда, которая выполняется за два машин-
ных такта, потребуется четыре периода тактовой частоты.
Глава 16. Архитектура процессора Motorola 68НС05 311
Если при работе приложения требуется частая перезагрузка микроконт-
роллера, например, для iaгрузки в память RAM тестовых программ, то по-
лезно включить в схему кнопку сброса SVV для подачи сигнала запуска на
вход RESET (рис. 16.II) При нажатии этой кнопки производится повтор-
ный запуск микроконтроллера 68НС05.
Рис.16.11. Схеме! формирования сигнала запуска микроконтроллера 68НС05.
Загрузочная память ROM
Большинство микроконтроллеров семейства 68НС05 содержат в масочно-про-
граммируемой памяти ROM несколько программ, предназначенных для уп-
рощения процесса начального программирования устройства. Эта память на-
зывается загрузочным ПЗУ. При подаче на входы микроконтроллера
определенной комбинации сигналов из этого ПЗУ производится выборка
программы, которая обеспечивает последовательную или параллельную заг-
рузку памяти программ EPROM из внешнего устройства. Использование заг-
рузочного ПЗУ позволяет программировать 68НС05 непосредственно в сис-
теме или производи i ь запись в его память программ с помощью очень простых
программаторов. Микроконтроллеры 68НС05 содержат необходимые средства
для использования таких простых внешних программаторов.
Прерывания
Реализация прерываний во многом аналогична процессу установки в началь-
ное состояние (запуск). Когда возникает запрос прерывания, и бит маскиро-
вания в регистре CCR разрешает его обслуживание го в программный счет-
чик загружается определенный адрес, который обеспечивает обращение к
соответствующему обработчику этого прерывания. Микроконтроллер 68ЧС05
несколько отличается от других устройств, описанных в данной книге, спо-
собом реализации «вложенной» обработки нескольких одновременно посту-
пивших запросов прерывания от различных источников.
Как и при начальной загрузке процессора, адрес первой команды обра-
ботчика прерывания задается вектором, находящимся в конце памяти пользо-
312 Часть 3. Микроконтроллеры семейства Motorola 68НС05
вателя EPROM. Для микроконтроллера 68НС05С8 определены следующие
вектора прерываний.
Источник Прерывание Запрос ; Адрес вектора
Reset - Запуск S1FFE-1FFF
SWI Программное прерывание Прерывание S1FFC-1FFD
IRQ Внешнее прерывание Прерывание S1FFA-1FFB
Таймер Прерывание таймера Прерывание S1FF8-1FF9
SCI Прерывание асинхронного Прерывание S1FF6-1FF7
последовательного
интерфейса SCI
Адрес, содержащийся в каждом из векторов, задается в исходном файле
программы и заносится в память EPROM при программировании. При на-
чальной загрузке перед тем, как содержимое вектора Reset извлекается из
памяти и загружается в программный счетчик, регистры процессора уста-
навливаются в определенное начальное состояние.
В процессе обслуживания прерывания, перед тем как загрузить соответ-
ствующий ему вектор, в стеке сохраняется содержимое контекстных регист-
ров в следующем порядке:
1. Старший байт программного счетчика.
2. Младший байт программного счетчика.
3. Индексный регистр.
4. Аккумулятор.
5. Регистр условий.
Для выполнения данной процедуры требуется десять машинных тактов с
учетом загрузки вектора прерывания. Так как контекстные регистры сохраняют-
ся в стеке в начале обслуживания прерывания, а инструкция RTI (возврат из
прерывания) восстанавливает эти регистры, написание обработчиков прерыва-
ний осуществляется довольно просто. Создание обработчиков упрощается также
использованием для различных источников отдельных векторов прерываний.
Реализация «вложенной» обработки нескольких запросов, поступивших от
различных источников или от одного и того же источника, достаточно проста
и зависит только от объема памяти, отведенной под стек. Чтобы разрешить
вложенные прерывания, обработчик должен с помощью команды CLI сбро-
сить в 0 бит маскирования прерываний (бит 3 в регистре CCR) сразу после
того, как будет снят запрос от источника предыдущего прерывания.
Доступ к регистрам периферийных
устройств
Как было показано на вышеприведенных рисунках, регистры периферийных
устройств занимают первые 32 байта в адресном пространстве. Во всех мик-
Глава 16. Архитектура процессора Motorola 68НС05 313
роконтроллерах 68НС05 доступ к регистрам управления вводом-выводом и
регистрам периферийных устройств осуществляется непосредственно путем
записи и чтения по соответствующим адресам
За исключением регистров управления портами и регистров ввода вывода
не существует определенного соглашения по использованию адресов различ-
ных устройств. Если функции устройств, имеющих разные адреса, отличают-
ся не очень существенно, то это не так уж плохо. Но если одни и те же адреса
используются различными устройствами, то нормальное функционирование
периферии может нарушаться- часто одни функции выполняются надлежа-
щим образом, а другие не работают совсем. Размещение регистров различных
устройств по разным адресам обеспечивает необходимое разделение адрес-
ного пространства между устройствами, в результате чего прикладные про-
граммы будут нормально ассемблироваться и компилироваться
Первые четыре позиции адресного пространства отведены под регистры
данных для портов, которые имеют названия от А до D. Если какой-либо
порт отсутствует в микроконтроллере, то соответствующий регистр не ис-
пользуется. Например, в микроконтроллере 68НС05ЛА, который имеется
только два порта ввода-вывода, адреса $002 и $003 не используются Регист-
ры, определяющие направление передачи данных для каждого вывода порта,
например, регистр направления передачи данных PORT А, располагаются
по следующим четырем адресам, начиная с $004.
Функционирование ОЗУ
в микроконтроллерах 68НС05
Важной особенностью семейства 68НС05 и других встраиваемых 8-разрядных
микроконтроллеров фирмы Motorola является возможность использования
памяти RAM не только для хранения переменных и создания стека, но и для
загрузки в него программного кода. Эта особенность часто используется для
отладки приложений без многократного выполнения записи и стирания со-
держимого EPROM Вместо этого прикладная программа или ее часть загру-
жается в 68НС05 с помощью специального кода, расположенного в служеб-
ном ПЗУ, который осуществляет прием данных от основного компьютера и
запись их в ОЗУ.
Большинство микроконтроллеров 68НС05 имеют относительно неболь-
шой объем доступной памяти RAM. Поэтому прикладные программы могут
разрабатываться последовательно, когда уже отлаженные части программы
заносятся в EPROM, а отлаживаемый код загружается в RAM с целью его
тестирования Применение данного метода делает излишним использование
схемного эмулятора и позволяет осуществлять разработку программ с помо-
щью программного монитора, например, монитора BUFALO фирмы Motorola.
При этом сам микроконтроллер должен иметь интерфейс с отладочным ком-
пьютером, используя, например, протокол RS-232.
ГЛАВА
17
АППАРАТНЫЕ СРЕДСТВА
МИКРОКОНТРОЛЛЕРОВ
СЕМЕЙСТВА 68НС05
Краткое содержание
Типы корпусов
Системный тактовый генератор
Технология логических блоков
Реализация прерываний
Параллельный ввод-вывод данных
Программируемые таймеры
Аналоговый ввод-вывод
Последовательный ввод/вывод
Модуль SCI
Модуль SPI
Регистр конфигурации
Программирование
Маркировка микроконтроллеров
Выше уже говорилось о том, что к моменту написания данной книги семей-
ство микроконтроллеров 68НС05 насчитывало около 180 моделей Это поис-
тине огромное число различных устройств, а если еще учесть, что одни и те
же модели могут поставляться в корпусах различных типов, то получается,
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 315
что существуют около тысячи различных типов микроконтроллеров данного
семейства Однако может оказаться, что в нем отсутствует микроконтроллер,
полностью соответствующий вашим требованиям
Чтобы удовлетворить требования потребителей микроконтроллеров
68НС05, фирма Motorola реализует уникальную бизнес-модель Как и боль-
шинство сложных устройств, 68НС05 выполнен из различных функциональ-
ных модулей Объединив на одном кристалле процессор, некоторый объем
RAM, EPROM и несколько устройств ввода/вывода, вы получите микрокон-
троллер Но прежде чем организовать серийный выпуск новых микросхем.
Motorola позволяет заказчикам определить состав изделии, которые наилуч-
шим образом соответствуют требованиям их приложений, а затем фирма
производит микросхему, полностью отвечающую запросам потребителя
Для пояснения вышесказанного на рис I7 1 показано расположение фун-
кциональных блоков микроконтроллера 68НС05С8 на CMOS-кристалле По-
смотрев на этот рисунок вы можете представить, что в случае, если для ва-
шего приложения требуезся еще один последовательный порт, то он может
быть размещен на кристалле Именно таким образом Motorola взаимодейству-
ет с потребителем, создавая новую модель микроконтроллера
Рис.17.1. Топология микроконтроллера 68НС05С8.
316 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Все микроконтроллеры семейства 68НС05 и другие приборы с обозначе-
нием 68НСхх выполнены по CMOS-технологии.
Типы корпусов
Как и другие микроконтроллеры, представленные в данной книге, различ-
ные модели микроконтроллеров семейства 68НС05 выпускаются в корпусах
разных типов. На рис. 17.2 приведены некоторые из них.
84-Lead PLCCJCLCC
FN/FS
50 m) fl 27 rrm) Pitch
! !5 inx ! 15 in Body
6&Lead PLCCJCLCC 62 Lead PLCCJCLCC 44-Lead PLCCJCLCC
FN/FS FN/FS FN/FS
50 ml П 27 rrm) Pitch
50 ml Л 27 rrmJPftch 0950 in x 0 050 in Body 50mi П 27 rrm] Pitch 0750|Пх07Я)1пВоф 0650 in xO 650 in Body
160-LeadCFP
28 rrmx 28 rrm Body
144 Lead TQFP
ilium..и
I PV
SrrmPlWi
20 rrmx2Q rrm Body
120 LeadCFPHCFP
umiiuiiu
! FH/TH !
niHivimvtr
5 rrm Pitch
16 rrmx 16 rrm Body
132-Lead PQFP
FC
112-Lead TQFP
65 mmPtch
20 mm x 20 rrm Body
100 LeadCFPfTCFP
IMiUllllL
? FU/PU |
i =
iiriiimii
5 rrm Pitch
14 rrmx 14 rrm Воф
80-LeadQFP/TQFP
JUIUIUUJIUU.
j FU/PU i
65nynPtch
14 rrmx 14 frm Воф
52-Lead TQFP
KnrmPfcch
10 rrmx 10 rrm Body
25 ml p 635 rrm) Pitch
0950 in X 0 850 in Body
formal. wA Burrpers)
&VLead QFP/TQFP
i ’ 1
! fu/pu i
errmPiteh
14 rrmx 14 rrm Body
44-Lead QFP
xuluul
s 'fb I
тптшпг
В rrm Pitch
10 rrmx 10 rrm Body
I
s
I
4&Hn Haste DIP
100ml (2 54 rrm) Pitch
245 inx 55in Body
(100 ml «600 ml pn centers]
40 Hn Haste DIP
100ml (2 54 rrm) Pitch
205inx 55inBody
(100 ml x 600 ml prt centers]
20 Hn Haste DIP
P
100 m) (2 5f rrm) Pitch
H5 inx 55 in Body
(100 ml x600 ml pn centers)
Lead - вывод mil - миллидюймы
mm - мм in - дюймы
Pitch - Шаг выводов Body - Размер корпуса
Пример: 84-выводный корпус PLCC/CLCC
Расстояние между выводами 50 миллидюймов (1.27 мм)
Параметры корпуса 1.5 дюйма х 1.5 дюйма
Рис.17.2. Типы корпусов для микроконтроллеров семейства 68НС05
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 317
Буквенный код, приведенный на каждом изображении корпуса, соответ-
ствует индексу в условном обозначении устройства Например, микроконт-
роллер 68НС05С8 в пластиковом 40-выводном корпусе DIP с кодом специ-
фикации АС будет иметь маркировку 68НС05С8АСР
На рис 17 2 не представлено все многообразие корпусов, в которых вы-
пускаются различные микроконтроллеры семейства 68НС05 Компания
Motorola производит также множество микроконтроллеров с EPROM, по-
ставляемых в керамических корпусах с окнами, пластмассовых корпусах с
шариковыми выводами (PBGA) и в бескорпусном варианте Выбирая из ка-
талога микроконтроллер 68НС05. важно точно знать, какие варианты корпу-
сов используются для размещения выбранных моделей
Системный тактовый генератор
Как и большинство других микроконтроллеров, 68НС05 может работать при
подключении внешнего частотно-задаюшего кристалла с минимальным ко-
личеством дополнительных компонентов Одной из особенностей 68НС05
является относительно низкая максимальная тактовая частота Этот недоста-
ток частично компенсируется CISC-архитектурои устройства и широкими
набором внутренних периферийных устройств Микроконтроллеры 68НС05
имеют также ограниченные возможности перестройки тактовой частоты
Обычно формирование тактового сигнала производится с использовани-
ем внешнего кварцевого или керамического резонатора (рис 17 3) Кварце-
вый резонатор включается в цепь обратной связи логического элемента И-НЕ
Это обычный способ подключения резонатора к различным микроконтрол-
лерам и схемам генерации тактового сигнала Когда сигнал STOP неактивен
(находится в высоком состоянии), элемент И-НЕ работает как обычный ин-
вертор. выходной сигнал которого поступает на вход с определенной задер-
жкой, вызванной прохождением сигнала через кристалл кварца Сопротив-
ление резистора Rs составляет порядка I0 МОм. а внешние конденсаторы
имеют емкость от 20 до 30 пФ
Интересной особенностью вышеприведенной схемы является возможность
отключения генератора путем подачи сигнала STOP В этом состоит наиболее
существенное различие команд STOP и WAIT — команда STOP полностью
останавливает процессор, и только его перезагрузка или подача внешнего
запроса прерывания на вход IRQ позволяют снова запустить генератор
Микроконтроллеры 68НС05 могут также работать с внешним генерато-
ром тактового сигнала (рис 17 4) Данная схема обеспечивает возможность
работы 68НС05 в диапазоне частот от 0 до 4 МГц Максимальная тактовая
частота данного процессора может показаться довольно малой по сравнению
с другими микроконтроллерами, представленными в данной книге, однако
она достаточна для выполнения большинства приложений Низкая тактовая
частота компенсируется выполнением машинного цикла всего за два такта,
достаточно полным набором команд и широкими возможностями использо-
вания разнообразных периферийных устройств
318 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Рис.17.3. Системный генератор тактовых импульсов с внешним кварцевым
резонатором
К процессору
68НС05
Внешний тактовый сигнал
Рис.17.4. Подключение к 68НС05 внешнего тактового генератора
В некоторых более поздних моделях микроконтроллеров предусмотрена
возможность работы от внешней частотно-задающей RC-цепи, но в микро-
контроллерах 68НС05 других возможностей для генерации тактового сигнала
не существует
Технология логических блоков
Во всех микроконтролерах семейства 68НСО5 основные логические функции
реализованы на элементах, выполненных по CMOS-технологии При работе
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 319
в диапазоне частот от I до 4 МГц микроконтроллер 68НС05 потребляет ток
всего несколько миллиампер. Такие значения тока питания являются доста-
точно типичными для всех микроконтроллеров, представленных в данной
книге.
Микроконтроллеры, используемые при отладке программного обеспече-
ния, выпускаются в корпусах с кварцевым окном для стирания содержимого
EPROM. Выпускаются также микроконтроллеры с однократно-программи-
руемой памятью EPROM, однако, как будет показано позднее в данной гла-
ве, 68НС05 не имеют средств для внутрисхемного ISP-программирования,
которые содержатся в ряде других контроллеров.
Реализация прерываний
Как и в других типах микроконтроллеров, реализация прерываний в 68НС05
осуществляется достаточно просто На практике обработка прерываний в
68НС05 выполняется проще, чем в других микроконтроллерах, потому что
контекстные регистры процессора автоматически сохраняются в начале про-
цедуры обработки прерывания и восстанавливаются при возврате из нее.
Типичную последовательность операций при обработке прерывания мож-
но увидеть на рис. 17.5. Представленная диаграмма показывает, что происхо-
дит в 68НС05, когда поступает внешний запрос прерывания на вход IRQ. Все
этапы выполнения обработки прерывания пронумерованы. Аналогичные эта-
пы выполняются и другими микроконтроллерами, чтобы обеспечить пра-
вильное функционирование систем при поступлении запросов прерывания.
Прерывание:
Карта памяти
68НС05
Сохранить контекстные perni
Получить вектор прерывания
Обработать прерывание
RTI
Addr-1
Addr
Команда
Команда Запрос на входе IRQ
Стек
Addr+1 Команда
Векторы
прерываний
Восстановить
контекстные регистры
RAM
пользователя
Выполнение
основной
программы
Загрузка/
Извлечение
информации
в стек/из стека
EEPROM
пользователя
Выполнение
обработчика
прерывания
Загрузка
вектора
прерывания
Рис.17.5. Процесс обслуживания запроса на прерывания на входе IRQ.
На этапе I процессор находится в нормальном режиме выполнения про-
граммы. При этом флаг маскирования прерывания I в регистре CCR сброшен
320 Часть 3. Микроконтроллеры семейства Motorola 68НС05
в 0, а флаг IRQE (разрешение прерывания на входе IRQ) в регистре управ-
ления прерываниями ISCR установлен в I. При подаче на вход _IRQ отрица-
тельного перепада формируется запрос на прерывание, который поступает в
процессор, выполняющий команду с адресом Addr.
Так как бит IRQE установлен в I, а бит I в регистре CCR сброшен в 0,
прерывание будет выполнено. Содержимое контекстных регистров (аккуму-
лятор, индексный регистр, CCR и программный счетчик) помешается в стек.
Следует отметить, что программный счетчик при этом содержит адрес сле-
дующей команды Addr+1 Если указатель стека адресует его последнюю ячей-
ку, то-есть его содержимое имеет значение меньше, чем $С4, произойдет
переполнение стека. При этом в указатель будет записано значение $FF. Это
будет означать, что стек испорчен, так как произойдет изменение содержи-
мого, ранее записанного в верхнюю ячейку стека. После сохранения содер-
жимого контекстных регистров, в программный счетчик загружается соот-
ветствующий вектор прерывания из области векторов пользователя в EPROM,
а затем устанавливается в I бит I в регистре CCR. Этот этап обозначен на
диаграмме номером 3
На этапе 4 выполняется непосредственно обработка прерывания. Един-
ственным обязательно выполняемым действием в обработчике прерывания
является сброс флага IRQR (сброс прерывания) в регистре ISCR. В конце
процедуры обработки (этап 5) команда RTI восстанавливает из стека содер-
жимое всех контекстных регистров (аккумулятор, индексный регистр, CCR
и программный счетчик) и сбрасывает флаг I в регистре CCR, разрешая
обслуживание новых запросов на прерывание.
На этапе 6 возобновляется выполнение основной программы с команды,
следующей за той, в ходе выполнения которой был получен запрос на пре-
рывание.
Выводы порта А также могут вызвать прерывание , если на один из четы-
рех выводов с номерами от 0 до 3 появится сигнал высокого уровня. Обработ-
ка таких прерываний осуществляется аналогично обслуживанию запроса на
входе _IRQ, с той лишь разницей, что запрос на прерывание возникает,
когда на одном из выводов порта А появляется сигнал высокого уровня.
Многие периферийные устройства в 68НС05 также могут вызывать преры-
вания, используя при этом другие вектора прерываний, записанные в EEPROM.
Это означает, что для каждого источника прерываний может использоваться
отдельный обработчик, или один обработчик прерываний может обслуживать
различные источники, но для определения устройства, вызвавшего запрос, в
последнем случае используются регистры идентификации прерывания.
В отличие от микропроцессоров с Гарвардской архитектурой, здесь может
быть эффективно реализована обработка «вложенных» прерываний. Такая
возможность обеспечивается благодаря стеку и реализуемого порядка выпол-
нения обслуживания, когда содержимое всех контекстных регистров поме-
шается в стек при подтверждении запроса на прерывание. В микроконтролле-
рах 68НС05 для разрешения обслуживания одновременно нескольких запросов
необходимо в обработчике сбросить бит I в регистре CCR в состояние 0 и
обеспечить необходимый размер стека для любого случая.
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 321
Команда программного прерывания SW1 вызывает те же действия, что и
другие виды прерываний, включая установку бита I в регистре CCR в состо-
яние I Различие состоит лишь в том, что данное прерывание реализуется и в
том случае, когда при поступлении команды SWI бит I в регистре CCR уста-
новлен в I Как будет показано в главе «Система команд микроконтроллеров
семейства 68НС05», программное прерывание в 68НС05 может использо-
ваться подобно функциям BIOS в PC Если вы хорошо знакомы с прерывани-
ями BIOS (и DOS) в IBM PC, вы должны знать, что флаг переноса и акку-
мулятор могут эффективно использоваться для передачи данных в процедуру
обработки и обратно
Подобные действия допустимы и в 68НС05, однако при этом необходимо
учитывать некоторые обстоятельства Первым из них является вызов команды
SWI для реализации функций BIOS из основной программы, а не из под-
программы Такой подход позволяет легко найти различные регистры, содер-
жимое которых надо модифицировать перед возвратом например, изменить
состояние флага переноса в сохраненном регистре CCR до выполнения ин-
струкции RTI Во вторых, следует убедиться в том. что SWI использует обра-
ботчик, отдельный от аппаратных прерываний Это позволит в дальнейшем
точно определить, что выполняется именно прерывание BIOS
В приложении, использующем ОСРВ, которое представлено в главе «При-
меры применения 68НС05», будет показано, как можно использовать ко-
манду SW1 для реализации интерфейса с ОСРВ при вызове системных функ-
ций и изменении состояния данных
Параллельный ввод-вывод данных
Порты ввода-вывода в 68НС05 мало отличаются от портов других микрокон-
троллеров Основное отличие состоит в способе определения уровня сигнала
на выводе В микроконтроллерах 68НС05 при считывании состояния вывода,
используемого в качестве входа, в процессор поступает значение поданного
на этот вход сигнала А при считывании состояния вывода, используемого в
качестве выхода данных, полученная величина может соответствовать дей-
ствительному значению сигнала на выводе микросхемы, а может и не соот-
ветствовать (рис 17 6)
Внимательно посмотрев на рис 17 6, вы увидите, что если вывод микро-
контроллера используется в качестве входа (выход триггера «Направление
передачи» находится в низком состоянии), то значение сигнала будет счита-
но верно Но если вывод является выходом (выход триггера «Направление
передачи» находится в высоком состоянии), то чтение из порта приведет к
считыванию ранее записанных в него значении битов
Микроконтроллеры 68НС05 необычны также тем, что для некоторых вы-
водов может быть реализован режим «подтягивания» состояния вывода к «зем-
ле» (обычно в микроконтроллерах сигнал на выводе «подтягивается» к пита-
нию) Данный режим включается путем сброса в 0 бита PDI в регистре режима
MOR и последующего конфигурирования вывода в качестве входа При этом
необходимо сбросить в 0 соответствующий бит в регистре подтягивания сиг-
21 Зак 2026
322 Часть 3. Микроконтроллеры семейства Motorola 68НС05
нала Хотя описание процесса может показаться сложным, его реализация
достаточно проста (рис 17 7)
Рис. 17.6. Параллельный порт ввода/вывода в 68НС05
Рис. 17.7 Вывод 68НС05 С
«подтягиванием» к «земле»
Так как режим «подтягивания» к «земле» работает только для выводов,
используемых в качестве входов, подключение к 68НС05 кнопок для ввода
данных осуществляется очень просто (рис 17 8)
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НСО5 323
Vcc
о
68НС05
Вывод в режиме
«•подтягивания» к
земле
Кнопка
переключения
Рис. 17.8. Использование вывода 66НС05 в режиме подтягивания для считы-
вания состояния кнопочного переключателя.
Вывод, используемым в качестве выхода, может обеспечить достаточный
ток для управления светодиодами и многими другими внешними устрой-
ствами. Однако устройства, требующие больших выходных токов, следует
подключать к выводам через усилители мощности.
Программируемые таймеры
Работа таймеров в микроконтроллерах 68НС05 отличается от работы тайме-
ров других микроконтроллеров, так как при их проектировании использова-
лась другая концепция. Вместо того, чтобы формировать временные интерва-
лы, заданные пользователем, таймеры 68НС05 работают непрерывно,
позволяя прикладном программе следить за их состоянием. В данном разделе
показана реализация этой концепции на простом (таймер в 68НС05ЛА) и
более сложном (таймер в 68НС05С8) примерах
Таймер микроконтроллера 68НС05ЛА переключается внутренним такто-
вым сигналом (внешним синхросигнал делится на два). При переполнении
таймера может быть сформирован запрос на прерывание (рис. 17 9). Необхо-
димо отметить некоторые особенности приведенной схемы. Первой особен-
ностью, которая оказывает наиболее существенное влияние на разработку
прикладной программы, является невозможность явного задания значения
8 разрядного таймера, который работает в «свободном» режиме, непрерыв-
но считая число машинных тактов, независимо от того, хотите вы этого или
нет. В других микроконтроллерах существует возможность использования тай-
мера для реализации определенной задержки, после которой формируется
запрос на прерывание. С помощью таймера 68НС05Л А программные задерж-
ки могут быть реализованы только с помошью введения в программный код
циклов опроса его содержимого. Например, если перед выводом данных вам
необходимо обеспечить задержку в 50 тактов, можно использовать следую-
щую программу:
324 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Ida TCR
add#10
Loop
cmp TCR
bne Loop
, Вычислить значение TCR через 50 машинных циклов
, Ожидать требуемого значения таймера
, Каждый цикл занимает 5 тактов
, Содержимое таймера пока меньше нужного значения
Второй особенностью, на которую следует обратить внимание, является
поступление сигнала переполнения таймера на делитель, сигнал с выхода
которого (или сам сигнал переполнения) может быть использован для фор-
мирования запроса на прерывание Этот делитель может быть использован
для формирования задержек различной длительности — 256, 4К, 8К, 16К,
32К или 256К тактов в зависимости от значения содержимого регистра кон-
троля/состояния таймера
Рис.17.9. Программируемый таймер в 68HC05J1A.
Последней особенностью является использование сигнала с выхода тай-
мера для управления таймером СОР (computer operating properly) стороже-
вого устройства Это означает, что время срабатывания сторожевого устрой-
ства зависит от количества выполненных команд, а не от прошедшего времени
В этом состоит отличие от схем контроля функционирования, используемых
в других микроконтроллерах, которое в случае изменения тактовой частоты
может вызвать определенные проблемы при выполнении некоторых прило-
жений
Таймер 68НС05ЛА может показаться очень простым, а его возможности
достаточно скромными по сравнению с таймерами других микроконтролле-
ров Однако он обладает некоторыми преимуществами, которые будут рас-
смотрены при описании примеров применения.
Таймер микроконтроллера 68НС05С8 более сложен, чем в 68HC05J1A,
но реализует такую же концепцию функционирования (рис 17 10) Главным
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 325
отличием между таймерами является отсутствие в 68НС05С8 делителей сиг-
нала переполнения. Это означает, при использовании таймера в качестве ча-
сов реального времени задержка всегда составляет 256К машинных циклов
Зато реализацию программной задержки можно выполнить с помошью 16-
разрядного регистра сравнения, который обеспечивает более точную уста-
новку времени формирования запроса прерывания В этом случае можно ис-
пользовать следующий псевдокод программы
А = Timer
; Получить текущее значение таймера
Compare = А + Delay ; Вычислить время окончания задержки
Enable Interrupts
Wait for Delay
Цикл ожидания прерывания от таймера
Рис. 17.10. Программируемый таймер в 68НС05С8.
Когда компаратор определит, что значение таймера соответствует задан-
ной величине, может быть выдан сигнал на определенный вывод контролле-
ра. Этот режим работы таймера называется «режим сравнения».
В «режиме захвата» производится фиксирование значения таймера при
возникновении определенного события — изменении сигнала на определен-
ном входе микроконтроллера Например, для измерения длительности им-
пульса можно выполнить следующую последовательность действий:
1. Разрешить захват по фронту на входе ТСАР.
2. Ожидать прихода положительного перепада напряжения.
3. Сохранить соответствующее событию значение счетчика.
4. Разрешить захват по срезу импульса.
326 Часть 3. Микроконтроллеры семейства Motorola 68НС05
5. Ожидать прихода отрицательного перепада напряжения
6. Сохранить соответствующее событию значение счетчика
7. Длительность импульса равна, (результат п 6) — (результат п 2)
Единственной проблемой при измерении параметров импульсов выше-
описанным способом является возможность переполнения 16-разрядного счет-
чика до прихода отрицательного перепада Чтобы избежать этого, следует раз-
решить генерацию запросов прерывания от таймера, и использовать эти
запросы для подсчета числа переполнений счетчика, возникших между фрон-
том и спадом импульса
Сторожевой таймер СОР
СОР является сокращенным обозначением таймера, контролирующего пра-
вильность работы системы Разрешение функционирования этого таймера,
называемого сторожевым («watchdog»), производится при программирова-
нии микроконтроллера путем записи определенного значения в регистр кон-
фигурации MOR или в регистр контроля СОР Как и в других устройствах,
имеющих подобные таймеры, если выполняемая программа не будет произ-
водить периодический перезапуск СОР, то выполняется сброс процессора в
начальное состояние (повторный запуск) После установки бита COPEN (раз-
решение функционирования СОР) в этом регистре отключить СОР программ-
ным способом невозможно
Управление СОР осуществляется тактовым сигналом процессора (в неко-
торых микроконтроллерах сторожевой таймер может переключаться отдель-
ным генератором) Это означает, что выполнение команды STOP приведет к
остановке СОР По этой причине в приложениях, использующих СОР, для
входа в режим пониженного энергопотребления следует применять команду
WAIT В таком случае интервал времени до ближайшего прерывания не дол-
жен превышать времени переполнения СОР
Сброс СОР осуществляется в различных микроконтроллерах семейства
68НС05 по-разному В одних микроконтроллерах для этого достаточно про-
стой записи нуля в бит контроля СОР В других устройствах необходимо в
программный код включать команды, выполняющие периодическую запись
символов сброса — сначала $55, а затем $АЛ Более надежным является вто-
рой способ, при котором для корректного сброса СОР необходимо в различ-
ных частях прикладной программы поместить две команды записи символов
сброса В этом случае вероятность случайного сброса СОР при зацикливании
(«зависании») программы гораздо меньше
В некоторых микроконтроллерах 68НС05 при отсутствии тактового сигна-
ла в течение определенного времени (от 5 до ЮОмкс) происходит перезапуск
процессора и фиксируется ошибка тактового сигнала Когда этот режим, ко-
торый называется «режим мониторинга тактового сигнала», разрешен, час-
тота входного тактового сигнала не должна быть меньше 200КГц, в против-
ном случае возможна ложная установка флага отсутствия тактового сигнала
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 327
Аналоговый ввод-вывод
В ряде микроконтроллеров семейства 68НС05 имеется АЦП, который являет-
ся расширением обычного цифрового ввода-вывода. По сравнению с микро-
контроллерами других семейств, АЦП в 68НС05 является очень быстрым
(рис.17.11). Он выполняет преобразование методом последовательного при-
ближения, формируя сначала старший бит значения поступающего напря-
жения, а затем определяя значения последующих битов до получения 8-раз-
рядного результата.
Рис.17.11. Подключение АЦП к внешнему выводу микроконтроллера 68НС05
Алгоритм преобразования можно описать следующим образом:
DACOutput = О
BitChange = $80
while BitChange •= О
DACOutput += BitChange
if Vin < DACOutput .
DACOutput -= BitChange
endif
BitChange = BitChange » 1
endwhile
; DACOutput содержит текущий результат
; преобразования, которому соответствует
; напряжение на выходе ЦАП
; Начать сравнение с середины
; Вычислить по нисходящей значение
; каждого бита
; Выдать напряжение соответствующее
; текущему результату преобразования
; Если выходное напряжение больше
; входного, то сбросить последний
; установленный бит
; Вычислить значение следующего бита
; Преобразование закончено
328 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Обычно, во встраиваемых АЦП текущий результат преобразования по-
стоянно увеличивается на единицу и соответствующее ему на выходе ЦАП
напряжение сравнивается с входным до тех пор, пока оно не превысит вход-
ное напряжение. Когда напряжение на выходе ЦАП превышает входное, АЦП
прекращает преобразование и выдает соответствующее значение. Если точ-
ность преобразования составляет 8 бит, то может быть сделано до 256 сравне-
ний. Время, требуемое для проведения подобного преобразования, может
быть различным, что вызывает определенные проблемы при реализации не-
которых приложений
АЦП в 68НС05 выполняет преобразование за одно и то же число итера-
ций независимо от значения входного напряжения, и это число (8) гораздо
меньше среднего числа сравнений, требуемого для АЦП других устройств
(приблизительно 128).
Подготовка к работе и использование АЦП довольно просты. В первую
очередь должно быть задано входное напряжение Vrh, которое используется
ЦАП в качестве опорного при формировании выходного значения. Можно
сказать, что выходное напряжение является некоторой частью (зависящей от
состояния входов ЦАП) разности потенциалов Vrh и Vss («земля») Исполь-
зование отдельного источника опорного напряжения позволяет проводить
измерения с приемлемой точностью.
Аналоговый мультиплексор используется для выбора входного сигнала
АЦП, который может быть либо сигналом с одного из выводов микроконт-
роллера, либо внутренним измерительным сигналом, зависящим от Vrh. Ре-
зультатом внутренних измерений может быть Vrh (что соответствует значе-
нию $FE), Vrh/2 (что соответствует $7F или $80) или Vss (что соответствует
значению $00). Внутренние измерения используются для проверки функцио-
нирования АЦП
После подключения схемы формирования внешнего измеряемого сигна-
ла, производится установка бита ADON в регистре ADSCR (регистр состоя-
ния и контроля АЦП) и реализуется задержка длительностью 100 мкс, в
течение которой происходит стабилизация работы АЦП. Если тактовая часто-
та 68НС05 меньше 1 МГц, то необходимо разрешить работу внутренней RC-
цепи в блоке АЦП, и выдержать еще 100 мкс для ее стабилизации.
Теперь можно выполнять преобразования аналогового сигнала. После вы-
бора одного из выводов в качестве входа (у которого должны быть отключе-
ны входные и выходные драйверы во избежание возникновения конфликта
на линии), АЦП начинает непрерывно выполнять измерение входного сиг-
нала. По завершении преобразования следует считать содержимое регистра
ADRC, что вызовет сброс флага выполнения CCF в регистре ADSCR, и
который остается в этом состоянии, пока не будет закончено текущее пре-
образование. Каждое преобразование занимает примерно 32 мкс, а это оз-
начает, что максимальная частота дискретизации сигнала составляет при-
близительно 30 КГц.
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 329
Последовательный ввод/вывод
В наборе периферийных модулем, используемых в микроконтроллерах семей-
ства 68НС05, существуют пять устройств последовательного обмена В данном
параграфе будет рассказано о двух наиболее распространенных SCI — после-
довательный асинхронный интерфеис и SP1 — синхронный последователь-
ным интерфейс
SCI+ является улучшенным вариантом SCI и позволяет передавать такто-
вым сигнал вместе с данными для обмена по последовательному интерфеису
с синхронными устройствами, например с последовательно-параллельными
преобразователями Простои последовательный порт ввода-вывода S1OP яв-
ляется синхронным последовательным портом, который может использоваться
в системах связи с одним ведущим устройством Наконец, порт 12С предназ-
начен для обмена с устройствами по шине I2C, которая поддерживает при-
сутствие на линии нескольких ведущих устройств
Модуль SCI
Последовательный порт универсального асинхронного приемопередатчика
(UART) является полным дуплексным портом, который обеспечивает
простоту интерфейса и имеет некоторые интересные особенности, позволя-
ющие весьма просто разрабатывать прикладные программы для микроконт-
роллеров, использующих UART Как и в большинстве других микроконтрол-
леров, SCI производит обмен данными в формате RS-232 и может послать
или принять строку данных с помощью маскируемых прерывании
Ядро модуля SCI составляют два регистра Первый из них является регис-
тром хранения SCDAT и служит для загрузки выходного сдвигового регистра
Загрузка производится, когда сдвиговый регистр пуст (рис 17 12) Когда ре-
гистр SCDAT становится пустым, или завершается процесс передачи, фор-
мируется запрос прерывания, если установлен в I соответствующий бит в
регистре SCSR Пока сдвиговый регистр осуществляет передачу предыдущего
символа, следующий передаваемый байт может ожидать своей очереди в ре-
гистре SCDAT Если поддерживать регистр SCDAT постоянно заполненным,
что легко осуществляется с помощью прерываний или по опросу бита TDRE
в регистре SCSR, то можно добиться непрерывной передачи данных без за-
держки между стоп-битом предыдущего символа и старт-битом следующего
Когда данные из регистра SCDAT загружаются в сдвиговый регистр ТХ,
начинается их передача с включением в передаваемый кадр старт-бита, стоп-
бита и бита четности Число битов (восемь или девять), передаваемых в каж-
дом кадре, определяется битом М в регистре SCCR1 Последний передавае-
мый бит может быть битом четности, значение которого вычисляется
программным путем
Может показаться, что возможность передачи только 8 или 9 битов делает
невыполнимой реализацию некоторых приложений, например, когда для
обмена используются 7 или меньше битов Однако можно легко уменьшить
330 Часть 3. Микроконтроллеры семейства Motorola 68НС05
количество передаваемых значащих битов путем установки в 1 старших битов
символа, которые будут интерпретироваться приемником как стоп-бит в ре-
жиме ожидания на линии.
Рис. 17.12. Структура передатчика SCI в 68НС05.
Реализация приемника несколько сложнее реализации передатчика
(рис.17.13). Считывание значения входного сигнала производится в 16 раз
быстрее передачи данных. Это позволяет проводить аппаратную проверку со-
стояния сигнала на линии с целью выявления стартового бита и определения
середины интервала, в течение которого производится передача бита, для
обеспечения достоверности информации. После детектирования старт-бита
следующие за ним биты данных начинают поступать в сдвиговый регистр
приемника. После ввода данные загружаются в регистр хранения приемника,
в качестве которого используется тот же регистр SCDAT. Когда выполняется
цикл передачи, данные записываются по адресу регистра SCDAT, а когда
производится прием — данные считываются по этому же адресу.
Прерывание может служить не только индикатором приема символа, но и
индикатором ошибки в процессе приема данных. Одной из таких ошибок
является «ошибка переполнения» — ее флаг устанавливается при получении
нового символа, до того как из регистра хранения будет считан предыдущий
символ. Считывание содержимого регистра хранения сбрасывает в 0 флаг
приема символа, который устанавливается в I после приема байта.
Модуль формирования синхросигнала передачи данных, используемый в
SCI микроконтроллеров 68НС05, имеет одно важное отличие от аналогич-
ных модулей, используемых для управления портами UART в других микро-
контроллерах (рис. 17.14). Если вы посмотрите на рис. 17 14, то решите, что
тактовый генератор выглядит вполне обычно. Входной сигнал проходит через
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 331
предделитель для получения стандартной опорном частоты Эта частота еше
разделится для получения реальной частоты обмена Основная разница меж-
ду генератором синхросигналов SCI в68НС05 и UART других микроконтрол-
леров заключается в возможности деления частоты входного сигнала на 13
Рис.17.13. Структура приемника SCI в микроконтроллере 68НС05
Тактовый
сигнал (1/2 of
Oscillator
Clock)
Рис.17.14. Генератор синхросигнала модуля SCI в 68НС05
На самом деле, частота тактового сигнала может делиться на множество
различных значений, что показано ниже в таблице Но возможность деления
частоты входного сигнала на 13 очень полезна
332 Часть 3. Микроконтроллеры семейства Motorola 68НС05
SCP1 SCP0 Делитель Частота квацевого резонатора
4 МГц 2 МГц
0 0 1 125.00 КГц 62 60 КГц
0 1 2 41 67 КГц 20.83 КГц
1 0 4 31 25 КГц 15 63 КГц
1 1 13 9 60 КГц 4.80 КГц
Если тактовая частота равна 4 МГц, то ее деление на 13 позволяет полу-
чить опорную частоту, равную 9600 бит/сек, что в свою очередь дает возмож-
ность непосредственно осуществлять обмен по RS-232 со стандартными ско-
ростями без использования отдельного источника сигнала определенной
частоты. Ниже дана таблица, которая показывает, как с помощью битов SCR
в регистре управления можно осуществить деление опорной частоты, равной
9600 КГц, для получения различных стандартных скоростей обмена по ин-
терфейсу RS-232 при системной тактовой частоте 4МГц Биты SCRn и SCPn
находятся в регистре управления частотой синхросигналов BAUD
SCR2 SCR1 SCR0 Делитель Скоростьпередачи при 4МГц
0 0 0 1 9600 бит/сек
0 0 1 2 4800 бит/сек
0 1 0 4 2400 бит/сек
0 1 1 8 1200 бит/сек
1 0 0 16 600 бит/сек
1 0 1 32 300 бит/сек
1 1 0 64 150 бит/сек
1 1 1 128 75 бит/сек
Модуль SPI
Модуль последовательного интерфейса SP1 микроконтроллеров 68НС05 не-
много отличается от аналогичных модулей других микроконтроллеров, так
как первоначально он разрабатывался, главным образом, для взаимодействия
с преобразователями последовательного кода в параллельный, а не для реа-
лизации синхронного последовательного протокола. Это позволяет легко под-
ключать к 68НС05 устройства вроде конвертора *374, выполняющего преоб-
разование последовательного интерфейса в параллельный.
На рис. 17.15 показано устройство модуля SPI в 68НС05 Передача данных
инициируется при записи байта в сдвиговый регистр SPL Непосредственно
передача дачных начинается при поступлении переднего фронта синхроим-
пульса, следующего после записи тактового импульса, причем первым пере-
дается старший бит Частота синхросигналов задается путем деления частоты
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 333
тактовых импульсов. Как показано на рис 17 15, при последовательной выда-
че битов осуществляется также их последовательный прием, а затем данные
могут быть считаны из буферного регистра приемника, имеющего такой же
адрес, как что и сдвиговый регистр SP1 При выводе данных на вход «веду-
щий/ведомый» следует подать сигнал высокого уровня. Если модуль SPI не
осуществляет вывод данных, то на этот вход можно подать сигнал низкого
уровня В режиме приема данных состояние сигнала на входе «ведущий/ведо-
мый» не имеет значения Режим работы модуля (ведущий или ведомый) за-
дается путем установки бита MSTR в регистре управления SPI. Если модуль
работает в режиме «ведущий», синхросигнал передачи данных формируется
внутри контроллера, в режиме «ведомый» синхросигнал поступает от внеш-
него ведущего устройства Биты SPR0 и SPR1 в регистре управления SPI оп-
ределяют коэффициент деления, определяющий частоту синхросигналов.
SPR1 SPRO Коэффициент деления тактового сигнала
0 0 2
0 I 4
I 0 16
I I 32
Выход
синхросигнала
Рис. 17.15. Структура модуля SPI в микроконтроллере 68НС05.
Модуль SPI может быть использован для обмена по последовательному
синхронному протоколу (например, MicroWire), однако при этом следует
соблюдать некоторые правила Нельзя реализовать работу нескольких веду-
334 Часть 3. Микроконтроллеры семейства Motorola 68НС05
ших устройств на линии, из-за отсутствия устройств синхронизации такто-
вых сигналов При работе в режиме «ведомый» SPI должен осуществлять оп-
рос внешнего вывода, по состоянию которого он определяет, идет ли обмен
с ним или с другим устройством.
По ряду причин не рекомендуется использовать SPI для обмена по интер-
фейсу I2C Первой из них является отсутствие выходных драйверов с откры-
тым коллектором. Однако если эта проблема легко решается путем использо-
вания внешних драйверов, то существование других проблем может сделать
реализацию I2C на основе SP1 еше более сложной. Эти проблемы заключают-
ся в отсутствии регистра сравнения для проверки правильности адреса и в
невозможности формировать и проверять бит подтверждения в конце посыл-
ки. Однако следует отметить, чго многие микроконтроллеры семейства 68НС05
имеют специализированный порт I2C, имеющий все необходимые атрибу-
ты, чтобы осуществлять связь по этому протоколу.
Регистр конфигурации
Все микроконтроллеры 68НС05 имеют в своем составе регистр, содержимое
которого используется для определения конфигурации микроконтроллера при
начальной загрузке. Этот регистр может иметь различные имена, например,
в 68НС05С8 он называется «option register», а в 68HC05JIA — MOR «mask
option register».
Независимо от названия этот регистр выполняет следующий набор ос-
новных функций.
1. Разрешение или запрет чтения содержимого EPROM.
2. Разрешение работы сторожевого таймера СОР.
3. Указание условия генерации внешнего запроса прерывания (по уровню
или по фронту).
4. Выбор конфигурации памяти (RAM или EPROM).
5. Задержка функционирования при запуске (16 или 4064 тактов)
6. Разрешение «подтягивания» сигналов на выходах портов к «земле».
7. Определение режима работы генератора тактовых мипульсов.
Наличие и специфика выполнения этих функций зависят от типа приме-
няемого микроконтроллера.
Установка в I бита (EPM)SEC в регистре конфигурации препятствует чте-
нию содержимого EPROM с помощью программатора После отладки про-
граммы и ее записи в микроконтроллер установка этого бита позволяет пре-
дотвратить несанкционированное считывание программного кода.
В некоторых 68НС05 существуют несколько вариантов конфигурации па-
мяти, выбор одного из которых осуществляется пользователем в зависимос-
ти от требований приложения. Эти настройки позволяют использовать EPROM
в качестве ОЗУ или ПЗУ.
Уменьшение задержки функционирования при запуске до 16 циклов мо-
жет быть полезным для приложений, в которых 68НС05 управляется вне-
шним тактовым сигналом. Это следует делать в случае полной уверенности в
Глава 17. Аппаратные средства микроконтроллеров семейчтва 68НС05 335
стабильности внешнего тактового сигнала в любом момент работы 68НС05
Задержка функционирования при запуске может быть также уменьшена до
I6 циклов для устронств, использующих в качестве осциллятора RC-цепь
Расположение регистра конфигурации различно для разных микроконт-
роллеров он может находиться в общей адресуемои области памяти, или
доступ к нему со стороны процессора может быть запрещен Это влияет на
способ программирования регистра конфигурации и способ его инициали-
зации в исходном тексте программы
Удобнее всего помещать процедуру инициализации в исходном файле,
что позволяет не заботиться о ней в процессе программирования Для неко-
торых 68HC0S данный способ не подходит, и содержимое регистра конфигу-
рации должно определяться при программировании микроконтроллера Многие
языки программирования и ассемблеры содержат директивы для определе-
ния битов этого регистра
Программирование
Одной из характеристик, по которым встраиваемые микроконтроллеры
Motorola (причем не только семейства 68НС05) уступают другим микрокон-
троллерам. является способ программирования Обычно произвести програм-
мирование микроконтроллеров Motorola достаточно сложно, при этом требу-
ется специальное оборудование и, кроме того, эти микроконтроллеры не
могут быть запрограммированы после их монтажа на плату, то есть в составе
системы (ISP)
Некоторые из микроконтроллеров семеиства 68НС05 снабжены загрузоч-
ным ПЗУ, содержащим программу, которая позволяет при начальной заг-
рхзке устройства копировать в него информацию из подключенной внешней
памяти EPROM Отдельные модели микроконтроллеров используют загру
зочное ПЗУ для загрузки программы прямо из компьютера базовой системы
Другие микроконтроллеры, например, серии 68HC05J, требуют отдельного
программатора, обеспечивающего доступ к внутреннем памяти EPROM и
позволяющего производить ее загрузку
Все три метода записи в EPROM требуют определенных аппаратных ре-
сурсов и достаточной интеллектуальности базовой системы Вследствие этого
микроконтроллеры 68НС05 плохо приспособлены для изготовления устронств
на предприятиях, где загрузка EPROM является частью производственного
процесса Альтернативой таким микроконтроллерам являются версии 68НС05
(а также 68НС08, 68НСН и 68НС12) с масочно программируемым ПЗУ
Маркировка
Маркировка определенною микроконтроллера Motorola содержит в первую
очередь код используемого процессорного ядра (68НС05, 68ПС08, 68НС11 и
т д ) и код спецификации устройства (например, С8, ЛА) Также указывает-
ся информация о типе корпуса (рис 17 16) Описание типов корпусов, в кото-
рых выпускаются 68НС05 приведено в начале этой главы
336 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Буквенно-цифровой код специ-
фикации микроконтроллера
МС68НСххХХХрр
Код семейства микроконтроллеров тип корпуса
-05
-08
-11
-12
Рис. 17.16. Маркировка микроконтроллеров 68НС05
ГЛАВА
18
РАЗРАБОТКА ПРИЛОЖЕНИЙ
НА БАЗЕ 68НС05
Краткое содержание
Подключение питания
Системный тактовый генератор
Схема запуска
Прерывания
Операционные системы реального времени
«MYKERTOS»
Хотя создание устройств на базе 68НС05, как и на базе большинства встраи-
ваемых микроконтроллеров, не представляет особых трудностей, существу-
ют некоторые особенности, о которых следует знать, чтобы избежать про-
блем в процессе разработки
Подключение питания
Большинство микроконтролчеров 68НС05 способно работать в широком диа-
пазоне напряжений питания от 3,0 до 7,0 В, где номинальным является на-
пряжение 5,0 В Потребляемый при этом ток находится в пределах от 1 до 5 мА
Как и для большинства микроконтроллеров, представленных в данной
книге, для 68НС05 рекомендуется включение конденсатора емкостью 0 1 мкФ
между шинами питания и «земли»
Системный тактовый генератор
Микроконтроллеры 68НС05 успешно конкурируют с другими приборами,
представленными в данной книге Этот факт действительно удивителен, по-
22 Зак 2026
338 Часть 3. Микроконтроллеры семейства Motorola 68НС05
скольку архитектура 68НС05 на 10-25 лет старше архитектур других процес-
соров Однако существует область, в которой 68НС05 уступает в гибкости
своим собратьям, и этой областью является системный осциллятор с цепями
формирования тактовых сигналов
Большинство 68НС05 ограничены возможностью выбора между кристал-
лом кварца (или керамическим резонатором) и внешним источником такто-
вою сигнала и работают в диапазоне частот от 1 до 4 МГц Это резко контра-
стирует с другими процессорами, представленными в книге, которые способны
работать в диапазоне от постоянного напряжения и десятков килогерц до де-
сятков мегагерц от внешнего или внутреннего RC ити LC осциллятора
Типичная схема формирования тактового сигнала в68НС05 приведена на
рис 18 1 При использовании внешнего осциплятора, в цепь обратной связи
следует включать резистор (номиналом 1 — 10 МОм) для придания устойчи-
вости генерации тактового сигнала Этот резистор не сильно увеличивает сто-
имость устройства и не очень усложняет схему, поэтому его рекомендуется
применять во всех разработках
Рис. 18.1. Подключение кварцевого резонатора к 68НС05
Некоторые новые микроконтроллеры (особенно из серии 68HC05J) спо-
собны работать от RC-цепи или внешнего тактового генератора, подобно
другим Контроллерам, представленным в данной книге При использовании
внешнего генератора, тактовый сигнал подается на вход Oscl
Схема запуска
Вывод RESET микроконтроллеров 68НС05 управляется низким уровнем
сигнала, и обычно подключается через резистор к шине питания Vcc (или
непосредственно к Vcc, хотя это и не рекомендуется) Использование подтя-
гивающего резистора на выводе RESET позволяет достаточно легко ввести
в схему сброса кнопочный переключатель, который позволит просто переза-
Глава 18. Разработка приложений на базе 68НС05 339
пускать контроллер в процессе отладки приложений. На рис 18.2 показаны
временные диаграммы некоторых сигналов, сразу же после включения пита-
ния (или после перевода сигнала на выводе RESET из низкого состояния в
высокое).
Рис.18.2. Временные диаграммы сигналов при включении питания.
После включения питания начинает работу встроенный генератор, ис-
пользующий внешний резонатор. Перед началом выполнения основной про-
граммы осуществляется задержка в 4064 такта, в течение которой происходит
стабилизация тактового сигнала.
Хотя процедура аппаратного запуска стандартна, следует обратить внима-
ние на особенности программного сброса и на способ определения начала
выполнения программы В конце адресуемого пространства EPROM суще-
ствуют несколько векторов (их адреса зависят от объема EPROM), один из
которых указывает размещение кода основного программы Обращение к этому
вектору производится также при срабатывании сторожевого таймера, ос-
тальные вектора используются при обработке прерываний.
В прикладных программах вы можете увидеть следующую запись процедуры:
Mainline ; Начало выполнения программы после
; запуска ипи включения питания
: ; Выполняемый код
org EPROM_Size - 2 ; Определить вектор начальной загрузки
db Mainline
После включения питания, последние два байта, хранящиеся в EPROM,
загружаются в программный счетчик, и их значение используется в качестве
адреса первой исполняемой команды. Это означает, что начало основной
программы, а также обработчиков прерываний и подпрограммы обслужива-
340 Часть 3. Микроконтроллеры семейства Motorola 68НС05
ния сторожевого устройства, может располагаться в любом месте EPROM.
Таким образом пользователь может размещать в памяти отдельные модули
программы по своему усмотрению.
Прерывания
Микроконтроллер 68НС05 является наиболее удобным средством при разра-
ботке сложных обработчиков прерываний. Это достигается благодаря специ-
фике действий, предпринимаемых процессором при поступлении запроса, и
наличию нескольких векторов прерываний, обслуживающих различные ис-
точники. Встроенные средства контроля также устраняют массу проблем,
возникающих, при написании обработчика. Простейшие, но, тем не менее,
полезные обработчики прерываний могут содержать в своем теле всего три
инструкции
При поступлении запроса на прерывание содержимое всех контекстных
регистров загружается в стек в следующем порядке:
1. Младший байт программного счетчика.
2. Старший байт программного счетчика.
3. Индексный регистр
4. Аккумулятор.
5. Регистр условий CCR.
После выполнения процедуры обслуживания прерывания, команда RETI
восстанавливает содержимое этих регистров и возвращает процессор в точку
возникновения прерывания для продолжения выполнения основной програм-
мы Это означает, что если вы оставили достаточно места для содержимого
контекстных регистров, то можете в дальнейшем не беспокоиться о его со-
хранении При таком использовании контекстных регистров следует только
позаботиться о сбросе флага прерывания в регистре CCR и сообщении ос-
новной программе о том, что произошло прерывание Например, процедура
обслуживания запроса прерывания при переполнении таймера может быть
организована следующим образом:
Tmrlnt ; Начало обработчика прерываний таймера
bset 2,tscr ; Сбросить аппаратный флаг прерывания таймера
bset 0,Flag_Var ; Установить флаг прерывания
reti ; Вернуться к основной программе
Так как 68НС05 имеет стек, в котором сохраняются все контекстные ре-
гистры, то возможна реализация обслуживания нескольких одновременных
запросов Ниже приведен пример такого кода:
Tmrlnt ; Обработчик прерываний таймера с возможностью
; обслуживания нескольких одновременных запросов
bset 2,tscr ; Сбросить аппаратный флаг прерывания таймера
Глава 18. Разработка приложений на базе 68НС05 341
ell ; Разрешить прерывания внутри обработчика
: ; Обработка прерывания таймера
reti ; Вернуться к основной программе
После разрешения обслуживания новых запросов с помощью команды
CLI процесс обработки прерывания может быть прерван запросом с более
высоким приоритетом. Другое прерывание названо прерыванием с более вы-
соким приоритетом потому, что запрос на его обслуживание приходит во
время обработки предыдущего прерывания, и эта обработка приостанавли-
вается до тех пор, пока не будет обслужен новый поступивший запрос. Обыч-
но прерывание, имеющее наивысший приоритет, является немаскируемым,
поэтому ничто не может помешать его обслуживанию.
Последним моментом, которып необходимо рассмотреть, является воз-
можность использования нескольких векторов одними и теми же прерывани-
ями. Например, для устранения дребезга контактов при нажатии клавиши
требуется запустить таймер и обработчик внешнего прерывания. Псевдокод
программы в этом случае будет выглядеть следующим образом:
Setup Timer Delay 32 msecs ; Кнопка будет считаться нажатой
; через 32 мс
Setup Timer Interrupt ; после прихода фронта во избежание
; дребезга
Setup Into on Falling Edge
Enable Global Interrupts
ButtonFlag = 1 , Ждать нажатия кнопки
while ButtonFlag == 1
: ; Если программа находится здесь,
: ; то кнопка нажата
Butlnt ; Обработчик прерывания кнопки
Reset Interrupt
if ButtonFlag == 1 ; Сбросить таймер
Timer = О
return from interrupt
Tmrlnt ; 32 мс прошло
Reset Interrupt
ButtonFlag = 0 ; Кюта считается нажатсй с задержхсй 32 мс
return from interrupt
Процедура Butlnt производит сброс таймера, чтобы обеспечить формиро-
вание запроса от таймера через 32 мс после нажатия кнопки, вызвавшего
342 Часть 3. Микроконтроллеры семейства Motorola 68НС05
данное прерывание За это время прекратится дребезг контактов Данная про-
грамма является хорошим примером совместного использования двух обра-
ботчиков прерываний Она также показывает, как просто обеспечивается об-
служивание внешнего события — нажатия кнопки, поскольку каждая строка
псевдокода соответствует строке ассемблерного текста.
Операционные системы реального
времени
Если вы не встречались с операционными системами реального времени
(ОСРВ) до прочтения этой книги, то дальнейшее изложение, должно быть,
оставит у вас впечатление об их значительном преимуществе по сравнению с
простыми однозадачными программами Это утверждение является слишком
категоричным. Вместо этого лучше сказать, что ОСРВ предоставляют значи-
тельные преимущества по сравнению с однозадачными программами в оп-
ределенных приложениях.
Такими приложениями являются микроконтроллерные системы, исполь-
зующие различные аппаратные ресурсы для решения разных задач Ограни-
ченное количество задач может быть выполнено посредством использования
механизма прерываний, однако увеличение «интеллектуальности» обработ-
чиков прерываний, ведет к увеличению времени выполнения процедуры об-
служивания, что, в свою очередь, повышает вероятность того, что некото-
рые события не будут обработаны Можно, конечно, разрешить обслуживание
одновременных запросов, но это существенно усложнит прикладную про-
грамму.
При использовании ОСРВ прерывания обрабатываются настолько быст-
ро, как только это возможно, а затем продолжает выполняться задача, ожи-
давшая прерывание Вследствие быстроты выполнения обработчиков преры-
ваний, тело которых состоит всего из нескольких строк, все запросы могут
быть обслужены за разумное время и нет необходимости в одновременном
обслуживания нескольких запросов
Микроконтроллер 68НС05 очень хорошо подходит для реализации прило-
жений RTOS по ряду причин. Первой из них является программно-доступ-
ный стек. После получения запроса на прерывание данные сохраняются в
стеке в следующем порядке:
1. Младший байт программного счетчика
2. Старший байт программного счетчика ’
3. Индексный регистр
4. Аккумулятор.
5. Регистр условий CCR.
Зная это, можно сохранить текущее состояние выполняемой на данный
момент задачи, а затем легко модифицировать контекстные регистры
Каждая задача, по сути, является «основной программой», предназна-
ченной для обслуживания определенных частей прикладной программы или
Глава 18. Разработка приложений на базе 68НС05 343
аппаратных ресурсов. Перечисленные выше пять регистров несут в себе всю
информацию (контекст), необходимую для ее выполнения
Следующей особенностью, делающей 68НС05 пригодным для реализации
RTOS, является наличие программного прерывания. Выполнение команды
SW! приводит к сохранению всей контекстной информации задачи в стеке
тем же способом, что и при обслуживании аппаратного прерывания, позво-
ляя ОСРВ манипулировать данными.
Команда SWI значительно упрощает реализацию ОСРВ потому, что она
может использоваться как однобайтная инструкция перехода к ОСРВ Вход в
ОСРВ может распола1аться в любом месте программы, и объектные файлы
могут быть скомпонованы без опасений по поводу местоположения точки
входа в систему. Использование SWI устраняет необходимость применения в
программе команды JMP, которая занимает 3 байта памяти программ вместо
I байта, занимаемого командой SWI.
Скорость выполнения является важным атрибутом ОСРВ-приложений.
Простота доступа к данным, хранящимся в стеке, и однокомандные опера-
ции загрузки и сохранения контекстных регистров RTI и SWI позволяют до-
стичь высокого быстродействия. Когда я учился в университете, мой профес-
сор говорил, что ОСРВ в приложении должна уметь обрабатывать запрос и
переключать задачи за 0,5 мс. Описанная ниже система «MykeRTOS» способ-
на выполнять эти действия с частотой I МГц.
Некоторые из читателей могут сказать, что скорость обработки запроса и
переключения задач зависит от сложности аппаратной реализации приложе-
ния. На самом деле требования к скорости определяются также рядом других
параметров, и микроконтроллеры 68НС05 хорошо подходят для реализации
ОСРВ-приложений.
При этом нельзя сказать, что разработка ОСРВ-приложений для 68НС05
была лишена проблем и недостатков. Первой из них является невозможность
считать значение указателя стека программным путем — он может быть толь-
ко сброшен в начальное состояние Как вы увидите в «mykeRTOS», это озна-
чает, что непосредственный вызов подпрограмм из задачи невозможен, так
как если ОСРВ будет вызвана из подпрограммы с помощью команды SWI, то
значение указателя стека станет неизвестным, а его надо знать для модифи-
кации контекстной информации, хранящейся в стеке. Отсутствие возможно-
сти вызова подпрограмм непосредственно из задачи означает, что код неко-
торых часто используемых функций будет повторяться. Это, в свою очередь,
увеличит память программ, требуемую для приложения.
Следующей проблемой является недостаток памяти, имеющейся в про-
стых микроконтроллерах. При разработке «mykeRTOS» использовался микро-
контроллер типа 68НС05ЛА, имеющий память RAM емкостью 64 байт. Раз-
мещение в этой памяти блоков информации о выполняемых задачах и
головного блока ОСРВ уменьшает объем памяти, доступной для приложе-
ния, до I7 байт. Для персонального компьютера или рабочей станции эти
затраты памяти незначительны, но для маленького микроконтроллера они
могут оказаться существенными.
344 Часть 3. Микроконтроллеры семейства Motorola 68НС05
ОСРВ «MykeRTOS»
Разрабатывая ОСРВ для данной книги, я стремился, насколько возможно,
создать простую и маленькую систему с полным набором функций реального
времени Первоначальной задачей было написание ОСРВ, занимающей не
более 256 байт памяти программ, которая использовала бы для работы не
более 20 байт памяти данных RAM. Это означало, что не только экономится
память, но и при таком небольшом количестве команд будет затрачиваться
мало времени на выполнение операций.
Конечный результат, представленный в книге, требует примерно в два
раза больше ресурсов памяти, чем предполагалось: 47 байт RAM и 453 байт
памяти программ. Несмотря на это, созданная ОСРВ довольно полезна и ис-
пользуется в реализации второго примера приложения для 68НС05. Эта сис-
тема, нескромно названная по имени автора «mykeRTOS», предназначена
для одновременного выполнения четырех задач, загружаемых из файла
RTOSAP ASM, хотя число задач может быть легко увеличено. Если использу-
ется мироконтроллер 68HC05J1A, то для прикладной программы остается 17
байтов RAM и 779 байтов памяти программ. Ни один из ресурсов контролле-
ра, таких как таймер или порты ввода-вывода, не используется для функци-
онирования ОСРВ. Как вы увидите в главе «Примеры применения 68НС05»,
оставшихся ресурсов вполне достаточно для создания довольно сложных при-
ложений.
Первое, о чем необходимо позаботиться при разработке ОСРВ, является
определение требуемого для каждой задачи пространства памяти и его мини-
мизация. Минимизацию необходимо провести, чтобы предотвратить неоправ-
данные затраты ресурсов RAM и уменьшить количество передаваемых дан-
ных при входе в обработчик прерывания и возврате из него. Это в свою очередь
уменьшает количество инструкций пересылки и число тактов, затрачивае-
мых на выполнение процедуры доступа к блоку информации задачи. Для вы-
зова подпрограмм ОСРВ используется команда SWI, что позволяет автомати-
чески сохранять содержимое контекстных регистров (аккумулятора,
индексного регистра, CCR и программного счетчика) и предоставляет воз-
можность доступа к ним при чтении и записи со стороны ОСРВ. После вы-
полнения команды SWI запросы аппаратных прерываний маскируются. По-
этому ОСРВ не могут быть случайно прерванными, что привело бы к потере
информации задачи или к с сохранению контекстной информации ОСРВ в
неизвестной позиции адресного пространства памяти. Данный подход позво-
ляет выполнять как обслуживание запросов ОСРВ, так и обработку прерыва-
ний прикладной задачи, поскольку при выполнении команды SWI вся ин-
формация сохраняется в том же формате, что и при обслуживании
аппаратного прерывания.
Для передачи информации используется механизм сообщений и, следо-
вательно, возникает необходимость в некотором пространстве для хранения
сообщения или указателя на него. Для этой цели выделена часть области ин-
формации задач, что позволяет выбирать сообщения из памяти данных или
регистров, но не реагировать на них, пока задача, пославшая сообщение,
Глава 18. Разработка приложений на базе 68НС05 345
ожидает окончания обработки информации приемником. Размер сообщения
составляет 2 байта, передача которых осуществляется с помощью аккумуля-
тора и индексного регистра. Вместе с 5 байтами, сохраняемыми при преры-
вании, I байтом, используемым для хранения состояния задачи (эта пере-
менная обозначена TSTATUS), и 2 байтами сообщения получается, что блок
информации задачи занимает 8 байтов
Использование двухбайтовых сообщений является компромиссом, так как
при малом количестве байтов сообщения посылка и прием данных будут
занимать много тактов. Если же использовать слишком большое количество
байтов, то может не хватить физического объема памяти RAM, особенно
при разработке приложений для небольших микроконтроллеров, таких как
68НСО5Н1А. Размер в два байта был выбран с расчетом передачи в одном из
них команды для другой задачи, а во втором — данных. Использование под
сообщение двух байтов также хорошо подходит для отладки на симуляторе
ICS05J1A, который поставляется в составе инструментальных средств разра-
ботчика 68HC7O5JICS, потому что контекстная информация каждой задачи в
этом случае может быть отображена в одной строке экрана отладки.
После определения размера информационного блока задачи, было выб-
рано максимальное число одновременно выполняемых задач — четыре. Их
расположение в памяти данных микроконтроллера 68НСО5Л А, который имеет
только 64 байта RAM с адресами от SCO до SFF, показано на рис. 18.3. При
таком формате блоки информации задач расположены в вершине RAM, что
удобно при их просмотре в окне симулятора.
- Память RAM,
доступная для
приложения
Рис.18.3. Использование памяти данных в ОСРВ «mykeRTOS» для 68HC05J1A
На рис. 18.3 вы можете заметить, что под стек отведено только 5 байтов
для хранения содержимого контекстных регистров Это сделано для того, чтобы
минимизировать необходимое количество стековой памяти, предназначен-
ной для хранения контекстной информации каждой отдельной задачи. При
этом можно быть уверенным в том, что информация, сохраняемая при об-
служивании запроса ОСРВ, попадет туда, где ее потом можно будет найти.
Данный момент является очень важным, так как прямой доступ к указателю
346 Часть 3. Микроконтроллеры семейства Motorola 68НС05
стека в 68НС05 невозможен (он может быть только сброшен в состояние
$FF), а необходимо точно знать, где находится содержимое контекстных ре-
гистров. Поэтому их расположение в стеке должно быть фиксированным.
Использование стека, объем которого позволяет вместить только один
блок контекстной информации, означает, что задачи не могут вызывать под-
программ. Это не слишком значительное ограничение, однако оно наклады-
вает свой отпечаток на стиль программирования. Такой подход открывает
возможность использования задач в качестве подпрограмм, что является од-
ной из важных функций многозадачных операционных систем. В идеале каж-
дая задача должна контролировать не более одного ресурса вычислительной
системы или контролировать один процесс. Разработка ваших приложений в
таком стиле обеспечит возможность доступа к одним и тем же ресурсам со
стороны различных процессов. Как показано далее, это дает уверенность в
том, что не возникнут проблемы при взаимодействии нескольких задач с
задачей, контролирующей ресурсы.
Как отмечалось выше, команда SWI используется для организации ин-
терфейса с ОСРВ, так как при ее выполнении производится запись в стек
всех регистров в стандартном формате, что позволяет легко сохранять кон-
текстную информацию и обеспечивать простой возврат из прерывания RTOS.
Последнее заявление является очень важным. На рис.18.4 показана последо-
вательность действий, производимая в случае возникновения прерывания в
процессе выполнения программы.
Рис.18.4. Порядок выполнения прерывания в «mykeRTOS».
Если в процессе выполнения задачи возникает прерывание, то содержи-
мое контекстных регистров, которое находится в стеке, сохраняется в блоке
информации текущей задачи. Затем осуществляется процедура подтвержде-
ния аппаратного прерывания (то-есть сброс запроса), и на время обслужива-
ния этого прерывания все задачи переводятся в режим ожидания. После это-
го выполнение программы продолжается со следующей доступной задачи.
После возвращения к прерванной задаче (например, задача i на рис. 18.4), ее
выполнение продолжается с точки, в которой она была остановлена при-
шедшим запросом. При этом все контекстные регистры будут содержать пра-
вильную информацию, потому что и команда SWI, и аппаратное прерыва-
ние сохраняют контекстные регистры в одном и том же формате.
Байт состояния задачи (TSTATUS) содержит информацию о ее текущем
состоянии, поэтому ОСРВ может сразу определить, надо ли выполнять зада-
чу или она ожидает внешнего события — прерывания или сообщения. Значе-
ния содержимого TSTATUS трактуются следующим образом: ’• '
Глава 18. Разработка приложений на базе 68НС05 347
Значение TSTATUS Описание/комментарий
$00 Задача может быть запущена на выполнение
$Сп Задача ожидает подтверждения приема сообщения от задачи п
SD0 Задача ожидает другую задачу для посылки ей сооб- щения
$3п Задача ожидает прихода запроса на прерывание н (в «mykeRTOS» прерывание таймера имеет номер п = 0)
$FF Задача завершена. Блок ее информации может исполь- зовал ься новой задачей
Индикация состояний ожидания задачи при приеме или подтверждении
сообщения дает возможность последовательно передавать данные от задачи к
задаче. Это означает, что может быть реализован контроль выполнения про-
граммы. Такой пример приведен на рис 18.5. Здесь, если задача 2 получает байт
состояния $00 от задачи 1 после предварительно полученного сообщения от
задачи 0, то сообщение игнорируется, в противном случае оно посылается
задаче 3. В данном примере задача 2 играет роль фильтра сообщений для задачи
3, то-есть производит обработку проходящих через нее сообщений.
Следует сказать, что при разработке ОСРВ-приложения очень полезным
является использование графического изображения связей, показывающих
взаимодействие отдельных задач. Иногда трудно понять, как работает при-
кладная программа, но если указать связи, показывающие предполагаемое
функционирование различных частей приложения, можно наглядно пред-
ставить, как будет выполняться программа. Целесообразно составить общий
план ОСРВ-приложения в виде, показанном на рис 18 5, а затем создавать и
корректировать реальное содержимое отдельных блоков как часть документа-
ции на приложение.
Ознакомившись с «mykeRTOS*. вы, наверное, заметили, что в ней от-
сутствует механизм назначения разным задачам различных приоритетов, ко-
торый обычно используется в других ОСРВ. В типичной операционной систе-
ме определенным задачам назначаются более высокие приоритеты и даются
привилегии по сравнению с другими задачами, например, предоставление
доступа к регистрам и данным, запрещенным для в других задачах. Данная
возможность не реализована в «mykeRTOS» по двум причинам Первой явля-
ется недостаток ресурсов. Обычно в ОСРВ задачи помещаются в очередь на
выполнение согласно их приоритету. Организация такой очереди требует боль-
шего объема памяти для хранения данных и большею объема памяти про-
грамм для обеспечения функционирования очереди. Второй причиной явля-
ется то, что при наличии всего четырех задач возможность назначения
различных приоритетов не является большим преимуществом.
Перед тем как продолжить дальнейшее изложение, следует отметить, что
во втором примере применения 68НС05 (часы/термометр с ЖК-дисплеем)
348 Часть 3. Микроконтроллеры семейства Motorola 68НС05
прикладная программа большую часть времени ожидает прерывания от тай-
мера, чтобы выполнить затем необходимые действия Если все задачи стано-
вятся неактивными, то-есть каждая из задач ждетлибо прерывания от тайме-
ра, либо сообщения от задачи, ожидающей прерывания от таймера, то в
системе ничего не происходит В этом случае ОСРВ находится в бесконечном
цикле, ожид «я когда одна из задач станет доступной для выполнения Этого
нельзя допустить, так как при выполнении функций ОСРВ обслуживание
прерываний запрещено, и выход из цикла никогда не наступит
Задача О
Рис.18.5. Использование механизма сообщений для контроля правильности
выполнения программы
Возникает вопрос, как решить эту проблему9 На самом деле этот вопрос
решается достаточно просто В программу включена небольшая задача, на-
званная «Общая задача» (рис 18 3), которая служит двум целям Во-первых,
она используется в качестве первой задачи, запускаемой при выполнении
приложения Во-вторых, эта задача реализует бесконечный цикл, который
вызывает на выполнение следующую задачу в цепочке и позволяет отслежи-
вать возникновение запроса на прерывание Когда выполнение «Общей зада-
чи» прерывается внешним запросом, ОСРВ принимает на себя управление и
активизирует все заблокированные задачи
При поступлении запроса на обслуживание ОСРВ в аккумулятор А зано-
сится номер запрашиваемой функции, а в индексный регистр X загружаются
параметры, необходимые для ее выполнения Разрешенные запросы
«mykeRTOS» приведены в данной таблице
Глава 18. Разработка приложений на базе 68НС05 349
Запрос Вход Выход A Комментарий X
A X
SetA 0 n 0 11 Записать байт «Асе Register» в области сооб- щений
SetX I n 1 n Записать байт «Index Register» в области со- общений
ReadMsg 2 11 A -1 X -J Считать номер определенного сообщения Если номер сообщения не доступен
GetMsg 3 X 3 n Устанавливает число сообщений, ожидающих задачу
AckMsg 4 n 4 -1 11 -1 Подтвердить определенное сообщение Если сообщение не доступно
StartTask 5 i 5 -1 11 -1 Начать выполнение задачи с адреса старший байт которого находится в «Асе Register» об- ласти сообщений, а младший в индексном регистре Нет доступных блоков информации задач
EndTask 6 X N/AN/A Текущая задача не нужна — сделать ее блок информации доступным для других задач (байт TSTATUS=$FF)
NextTask 7 X 7 X Перейти к следующей выполняемой задаче
Send Msg 8 л 8 11 Заблокировать, пока задача п не подтвердит сообщение
WaitMsg 9 X 9 X Заблокировать, пока задаче не будет послано сообщение
Wait I nt IO 11 10 11 Заблокировать, пока прерывание п не будет выполнено (п=0 для прерывания от таймера)
После обслуживания какого-либо из пяти первых запросов в данном списке
управление возвращается к сделавшей его задаче. При обслуживании после-
дних в списке шести запросов этого не происходит, а перед обслуживанием
запроса выполняется сохранение контекстной информации.
Чтобы начать (инициировать) выполнение задачи, в ячейку «AccRegister»
области сообщений текущей задачи необходимо записать старший байт адре-
са новой задачи. Далее необходимо выполнить запрос «StartTask», предвари-
тельно поместив младший байт адреса в индексный регистр. В «mykeRTOS»
программный код начала выполнения приложения (из «Общей задачи») выг-
лядит следующим образом:
350 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Idx #{Application>8}
cl га
swi ;Acc = 0 = SetA
Ida #StartTask
Idx #Application&$FF
swi
; Установить старший байт стартового
; адреса приложения
; Начать задачу по адресу «Application»
• г
Первый вызов функции ОСРВ помещает адрес приложения в область со-
общений, откуда в дальнейшем он будет извлечен при обслуживании второ-
го запроса. По возвращении из прерывания «StartTask», вы можете сохранить
возвращенный номер задачи, потому что он может быть различным для раз-
ных вариантов дальнейшего выполнения программы, или может использо-
ваться различными задачами. Это хорошая возможность сохранения номера
для его использования другими задачами.
Посылка сообщения осуществляется достаточно просто. Сначала в ячейки
«AccRegister» и «X Register» заносится содержание сообщения, посылаемого
определенному адресату, а затем делается запрос «SendMsg» с номером зада-
чи, заданным отправителем. После получения сообщения в аккумулятор и
индексный регистр X заносится содержание сообщения, полученного от от-
правителя. После чтения сообщения и при отсутствии каких-либо проблем с
его обработкой осуществляется цикл подтверждения.
Задача - отправитель
Ida #SetA
Idx MsgA
swi
Ida #SetX
Idx MsgX
Ida #SendMsg
Idx #Receiver Task
Задача - получатель
Ida #WaitMsg
swi
Блокировано -
ожидание сообщения
Блокировано -
ожидание подтверждения
Ida #ReadMsg
clrx
swi
Ida #AckMsg
clrx
swi
Свободно для выполнения
Рис.18.6. Посыпка/прием/обработка сообщения в «mykeRTOS».
Типичный процесс посылки-приема-подтверждения сообщения показан
на рис. 18.6. Он начинается в момент, когда задача-отправитель и задача-по-
лучатель доступны для выполнения. Затем задача-получатель блокируется и
переводится в режим ожидания сообщения, в то время как задача-отправи-
Глава 18. Разработка приложений на базе 68НС05 351
тель готовится послать сообщение в байты «AccRegister» и «X Register». После
отправки сообщения задача-отправитель блокируется, а получатель стано-
виться активным. Задача-получатель считывает сообщение с помощью запро-
са «ReadMsg», после которого содержание сообщения загружается в аккуму-
лятор и индексный регистр, обрабатывает его, а затем выполняет цикл
подтверждения. После этого сообщение считается посланным и возможно
дальнейшее выполнение любой из обеих задач.
Файл «MYKERTOS ASM» уже создан, вам остается лишь создать файл с
названием «RTOSAP.ASM» с меткой «application» в начале кода. При ассемб-
лировании файла «MYKERTOS» в него включается файл «RTOSAP». Метка
«application» может располагаться в любом месте файла. Область переменных
начинается с адреса «ApVarStart» и в ней могут быть определены до 17 пере-
менных. Если задача не посылает сообщений другим задачам, то вы можете
использовать свободные байты «AccRegister» и «X Register» по своему усмот-
рению. Однако делать это не рекомендуется, потому что информационный
блок задачи может быть загружен по другому адресу, а в таком случае жестко
определенные адреса ячеек «AccRegister» и «XRegister» окажутся неправиль-
ными.
Вы можете заметить, что в ОСРВ определено множество переменных и
меток. Использование их для других целей или переопределение их значений
может вызвать определенные проблемы.
Как указано выше, операционная система «mykeRTOS» была написана
для 68HC05J1A, но она может быть модифицирована для использования в
других микроконтроллерах семейства 68НС05. Если вы собираетесь это сде-
лать, то сможете достаточно просто увеличить число задач, хотя доступ ко
всем задачам должен осуществляться с помощью индексного регистра.
Необходимо обратить внимание на одну особенность «mykeRTOS» — ис-
пользование таблицы переходов. Так как каждая команда перехода занимает
три байта, можно умножить индекс элемента таблицы на три, а затем вы-
полнить короткий переход, используя полученный индекс и адрес начала
таблицы переходов. Код для реализации этого алгоритма приведен ниже:
Ida Index ; Умножить индекс на 2
clc
asla
add Index ; Добавить значение индекса чтобы попучить
; умножение на 3
tax ; Поместить индекс, умноженный на 3 в индексный
; регистр
jmp Table_Start,X ; Перейти к адресу Table_Start + Index
Table_start
jmp Table_Entry1 ; Перейти no первому индексу
jmp Table_Entry2 ; Перейти no второму индексу
352 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Как и при реализации всех табличных переходов, данная программа все-
гда выполняет переход за одинаковое количество тактов независимо от того,
какой элемент таблицы выбирается.
ОСРВ, описанная в этом разделе, обладает достаточно полным набором
свойств и работает довольно быстро: в наихудшем случае время переключе-
ния между задачами при тактовой частоте 1 МГц составляет 640 мкс. Если вы
хорошо знакомы с операционными системами реального времени, то отме-
тите, что существует еще масса вещей, которые можно было бы в нее доба-
вить. Для реализации некоторых приложений можно было бы ввести «сема-
фор», который представляет собой флаг, используемый для организации
последовательной обработки запросов и доступный только внутри операци-
онной системы, чтобы предотвратить изменение его состояния другими за-
дачами. Существует еще ряд функций операционных систем, которые можно
было бы включить в «mykeRTOS».
Если вы плохо знакомы с ОСРВ, то надеюсь, что все здесь сказанное не
показалось вам абсолютной абракадаброй, и вы смогли хоть что-то понять. Я
постарался объяснить, как работает эта и другие ОСРВ. Как упоминалось
выше, приведенная здесь ОСРВ использована для реализации ЖКИ-часов/
таймера. Описание этого устройства приведено в главе «Примеры примене-
ния 68НС05», где вы сможете более подробно ознакомиться с работой
«mykeRTOS».
Операционные системы реального времени действительно могут сделать
программирование некоторых приложений проще, но без хорошего понима-
ния того, что вы делаете, они могут обернуться кошмаром. Существует много
отличных публикаций по данной теме, написанных вполне понятно и дос-
тупно. Не пугайтесь того, что операционные системы для рабочих станций
подобно Windows/NT занимают несколько сотен мегабайт дискового про-
странства. Полезные многозадачные операционные системы для микроконт-
роллеров могут иметь всего несколько сотен строк кода.
ГЛАВА
19
СРЕДСТВА РАЗРАБОТКИ
ДЛЯ 68НС05
Краткое содержание
Ассемблеры
Языки высокого уровня
Объектные файлы в формате Motorola «S19-Record»
Комплекс разработки 68HC705J1CS
Так как микроконтроллер 68НС05 является потомком микропроцессора 6800,
то для создания приложений на его базе можно использовать некоторые сред-
ства разработки программ (ассемблеры, компиляторы, симуляторы и т д) из
арсенала 6800 Большинство этих средств программирования свободно распро-
страняются посредством Internet, однако их качество оставляет желать много
лучшего Вышесказанное означает, что существует ряд других доступных средств
разработки, отличающихся более высоким качеством Прежде чем приобрести
определенное средство разработки, следует провести анализ нескольких пред-
лагаемых средств и выбрать из них наиболее подходящее для вас
Ассемблеры
Если вы не имеете опыта программирования микроконтроллеров, то, навер
ное, решите, что среди других микроконтроллеров представленных в дан-
ной книге, 68НС05 является самым простым для программирования, а его
архитектура наиболее простой для понимания Это несколько ироничное за
мечание, так как 68НС05 является единственным из рассмотренных микро-
контроллеров, который имеет архитектуру фон-Неймана, и использование
этой архитектуры фирмой Motorola достаточно уникально
23 Зак 2026
354 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Причиной, по которой 68НС05 является наиболее простым для освоения
программирования, является широкое использование архитектуры фон-Ней-
мана при изучении основ программирования на ассемблере (рис 19.1). Такую
архитектуру имеют также микропроцессоры Intel 80x6, используемые в пер-
сональных компьютерах.
Рис.19.1. Классическая архитектура фон Неймана.
В ’энной архитектуре выполнение всех арифметических операций состоит
из трех действий:
1. Загрузка в аккумулятор значения первого операнда
2. Выполнение операции со вторым операндом (если он требуется)
3. Сохранение результата операции.
При выполнении этих операций обычно используются три различных спо-
соба адресации операндов: непосредственная (параметр является частью ко-
манды), прямая (адрес операнда содержится в команде) и косвенная (адрес
параметра находится в индексном регистре). Микроконтроллер 68НС05 рабо-
тает именно таким образом. Если вы посмотрите программы, разработанные
для двух приложений, и систему «mykeRTOS», то убедитесь, что они выпол-
няются так, как описано выше. Данная процедура выглядит громоздкой по
сравнению с тем, как эти три операции реализуются микроконтроллерами
AVR и PIC с помощью одной или двух команд.
Можно отметить, что на рис.19.1 не показаны ячейки стека. Это сделано
потому, что в 68НС05 отсутствуют команды загрузки в стек «push» и извлече-
ния из него «рор». Стек данных может быть легко реализован с помощью
индексного регистра и команд декремента/инкремента его содержимого,
которые обеспечивают перемещение вверх и вниз по сегменту стека В этом
случае следует обратить внимание на то, чтобы области стека данных и стека
программного счетчика не перекрывались.
Глава 19. Средства разработки для 68НС05 355
В данной книге каждый ассемблерный код, написанный для 68НС05, со-
держит директиву «org», которая используется, чтобы поместить начало про-
граммы в начало памяти программ EPROM. В программе «CASM5JIA», ис-
пользуемой с инструментальным комплектом 68HC705J1CS, начальный адрес
уже задан в компиляторе как «гот», а конец области программного кода
определяется компилятором, что доставило массу хлопот при разработке вто-
рого приложения, использующего систему «mykeRTOS». Лучше всего, чтобы
используемый вами ассемблер для 68НСО5 не задавал границы программно-
го кода, как это сделано в «CASM5J1A», или имелась бы возможность их
изменения, так как многие модели 68НС05 имеют различные объемы памяти.
Это необходимо учитывать при разработке прикладных программ. Ассемблер
может не учитывать реальные границы памяти используемого в приложении
микроконтроллера. В результате не будет полностью использоваться имеюща-
яся память программ, или будет производиться обращение к области памя-
ти, которая реально не существует в применяемом микроконтроллере.
Одной из проблем, которые могут возникнуть при реализации условных
ветвлений, является появление сообщения «Branch is to an address outside of
range» (адрес ветвления выходит за границы допустимого диапазона). Это
означает, что произошла попытка выполнить ветвление по адресу, смешен-
ному от текущего положения программного счетчика больше, чем на 127
позиций. Данная проблема легко решается путем реализации ветвлений с
помощью команды «jmp».
Предположим, что необходимо записать в ассемблерном коде следующую
операцию:
if А == В then goto Labell ,
и вы сделали следующее:
Ida А ; Сравнить А и В, и если они равны перейти к метке Label
стр В
beq Label
но при компиляции команды «beq Label» появляется сообщение «the jump is
out of range». Во избежание этого, следует использовать ветвление с противо-
положным условием «Ьпе» в обход команды «jmp Label». В этом случае код
будет выглядеть следующим образом:
Ida А ; Сравнить А и В, и если они равны перейти к метке Label
стр В
bne $+5 ; Выполнить ветвление в обход следующей команды
• jmp Label
Операторы $ или * обычно указывают значение программного счетчика,
которое он имеет в начале выполнения команды. Это необходимо уточнить
при использовании конкретного компилятора, так как некоторые из них ис-
пользуют вышеуказанные символы для обозначения адреса команды, следу-
ющей заданной. При выполнении команды «Ьпе $+5» осуществляется пере-
ход по адресу, который на пять позиций больше адреса начала текущей
356 Часть 3. Микроконтроллеры семейства Motorola 68НС05
инструкции, если значение А отлично от В Команда «Ьпе» занимает два бай-
та, а команда «jmp» — три, и поэтому к содержимому программного счетчика
следует прибавить число пять
При реализации ветвления с обходом команды «jmp», которое показано в
данном примере, необходимо убедиться, что команда ветвления с противо-
положным условием действительно существует Если необходимо выполнить
ветвление по условию меньше или равно, то его реализации будет немного
сложнее < j ™ >
Языки высокого уровня >
После ознакомления с программированием 68НС05 на языке ассемблера,
вы, вероятно, думаете, что архитектура 68НС05 плохо подходит для про-
граммирования на языках высокого уровня Я не совсем согласен с этим мне-
нием, хотя при написании программ для 68НС05 на языке высокого уровня
существуют некоторые особенности, которые необходимо уяснить Причем
эти особенности характерны также для других микроконтроллеров, представ-
ленных в данной книге
Если в ассемблерную программу предполагается вставить код, написанный
на языке высокого уровня, то не следует модифицировать содержимое индек-
сного регистра перед тем, как перейти к этой вставке Скорее всего в програм-
ме на языке высокого уровня индексный регистр будет использоваться в дру-
гих целях, например, для реализации стека данных или указателей
Вследствие небольшого объема доступной памяти, которая нужна для
реализации программного стека и хранения переменных, следует умеренно
использовать большие массивы и структуры данных, так как микроконтрол-
лер не может выделить для них достаточно места Лучше всего отказаться от
использования рекурсивных подпрограмм, так как при этом часть стека мо-
жет оказаться в области данных Следует также, по возможности, избегать
применения операций деления и операции с плавающей точкой, так как их
реализация обычно требует большого объема программного кода и использо-
вания регистров для временного хранения Я прекрасно понимаю, что вопло-
щение некоторых приложений просто немыслимо без подобных операций,
однако их число следует минимизировать
Следует также обратить внимание на использование средств нелинейного
программирования, таких как ОСРВ или конечные автоматы, что позволит
минимизировать реальный код приложения Это особенно актуально в при-
ложениях, где ОСРВ действительно необходимо, так как в этом случае обыч-
но генерируется программный код, довольно сложный для отладки по ис-
ходному ассемблерному тексту Если же использовать символьный отладчик,
то процесс отладки будет существенно Проше
Создание компилятора для 68НС05 не является тривиальной задачей Это
может показаться странным, так как в течение длительного времени архи-
тектура 68НС05 не претерпела изменений, да и сама она очень похожа на
архитектуру персональных компьютеров, для которых существует масса дос-
тупных компиляторов Этот факт является следствием ограничения объема
Глава 19. Средства разработки для 68НС05 357
доступной памяти RAM и сложности осуществления доступа к ней из ком-
пилируемого кода. Вы, наверное, спросите, какие сложности возникают при
реализации доступа к RAM со стороны компилятора? Существуют пять спо-
собов адресации, которые являются весьма простыми. Сложность для компи-
лятора представляет доступ к индексированным или автоматически изменя-
емым переменным. При обращении к данным в RAM с помощью
единственного индексного регистра потребуется очень много циклов обмена
его содержимого с памятью. Это становится проблемой, так как подобный
обмен требует хранения слишком большого числа временных переменных, а
его выполнение занимает недопустимо большое число циклов.
Можно сказать, что наилучшим компилятором для 68НС05 является са-
мый простой из них. Если вы используете компилятор для микроконтролле-
ров с малым объемом памяти, например для 68НС05ЛА, который имеет
только 1200 байт памяти программ, то следует отказаться от применения
автоматически изменяемых переменных и свести к минимуму число сложных
операций, таких, как деление.
Из компиляторов для 68НС05 необходимо выбирать тот, который макси-
мально оптимизирует конечный программный код. Вернемся к примеру с
реализацией условного ветвления из предыдущей главы, где показано, как
следует использовать инструкцию ветвления и команду *jmp» для перехода
по адресу, который смешен от адреса следующей за инструкцией ветвления
команды более, чем на I27. Во многих компиляторах используется такой спо-
соб, но следует применять компилятор, который оптимизирует код путем
замены этих двух команд одной командой ветвления, если расстояние между
адресом команды, на которую надо перейти, и адресом команды условного
ветвления меньше 127.
Объектные файлы в формате
Motorola «S19-Record»
Компания Motorola не выполняет соглашение, соблюдаемое другими произ-
водителями микроконтроллеров, по использованию шестнадцатеричного
формата файлов «INHX8M» фирмы Intel. Вместо этого для программирова-
ния микроконтроллеров Motorola используются объектные файлы в формате
Sl9-record. Этот формат очень похож на формат Intel, но имеет некоторые
отличия, о которых сказано ниже. Свое название формат Sl9-record получил
потому, что каждая строка объектного файла начинается с символа S# —
либо SI для строк данных, либо S9 для обозначения конца файла.
Пример файла с расширением ,s!9 представлен ниже:
S11303005FA680B700A6FEB7041A089ACC030C16A1
S110031008В600А880В70080120А1Е008005
S10407F106FD
S10B07F8030F03180300030002
S9030000FC
358 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Вся информация, необходимая для загрузки программы в память микро-
контроллера, находится в файле. Следует иметь в виду, что в файле не содер-
жится символьная информация, которая обычно генерируется компилято-
ром или ассемблером специально для некоторых отладчиков и эмуляторов
Каждую строку можно разбить на несколько полей, которые содержат
служебную информацию для программатора или байты данных. Каждое поле
начинается с определенного столбца, как показано ~В следующей таблице.
Столбец Название Комментарий
1-2 Начало строки Всегда начинается с «S#», где «#» рав- но 1 или 9
3-4 Ч исло байтов в строке Определяет число байтов в строке
5-8 Начальный адрес данных строки Определяет начальный адрес для пе- ресылки данных
9-... Байты данных Каждый байт представлен двумя сим- волами в шестнадцатеричном коде
End-2 Контрольная сумма Сумма элементов строки & OxOFF = OxOFF
Обычно каждая строка содержит до 16 байтов данных.
Возьмем первую строку из предыдущего примера и разобьем ее на поля,
чтобы показать, что реально в ней находится. Первые два байта (S1) показы-
вают, что в строке присутствуют данные. Цифры в следующих двух позициях
определяют количество байтов в строке. В отличие от формата Intel, это число
не умножается на два и реально отражает полное число байтов, расположен-
ных в интервале от данной позиции до конца строки, включая байты адреса
данных и контрольной суммы. Для первой строки это число 13 в шестнадца-
теричном или 19 в десятичном коде. Байты с 5-го по 8-й определяют адрес,
начиная с которого будут загружаться данные в память микроконтроллера. В
данном случае это число 0300, а это значит, что байты кода будут размещены
в памяти, начиная с адреса $0300. За адресом следуют байты команд в шест-
надцатеричном коде. Как принято для микропроцессоров Motorola, числа
представлены в удобном для чтения виде, где первый байт содержит код
команды, а следующие байты содержат параметры инструкции в формате:
старший байт — младший байт. Таким образом, возможно легко проверить
соответствие данных в файле с расширением .si9 листингу ассемблерной
программы.
Последние два байта являются контрольной суммой всех байтов, начиная
с третьей позиции (то-есть числа 1 или 9 не входят в контрольную сумму).
Над суммой всех байтов строки производится логическая операция И со зна-
чением $0FF, что будет равно $0FF.
Последняя строка в данном примере начинается с «S9», что означает ко-
нец файла. - г- - -
Глава 19. Средства разработки для 68НС05 359
Комплекс разработки 68HC705J1CS
При разработке примеров приложений для 68НС05 использовался програм-
матор и стартовый комплекс разработки 68HC705J1CS фирмы Motorola. Ком-
плекс 68HC705J1CS включает все, что надо для разработки приложений на
базе 68НС705 JI А. и изучения микроконтроллеров 68НС05 Он состоит из пла-
ты протрамматора со всем оборудованием, требуемым для программирова-
ния, включая кабель последовательного интерфейса и блок питания, образ-
цы микроконтроллера в корпусе с окошком, дискет, содержащих необходимое
программное обеспечение для разработки программ на ассемблере, и ряда
руководств по 68HC705J1A и программной среде (рис 19 2)
Рис.19-2. Стартовый комплекс разработчика 68HC705J1CS
Центральное место в пакете средств программирования занимает интег-
рированная среда разработки RAPID Она используется для трансляции ис-
ходного ассемблерного файла в объектный код и загрузки («прошивки») его
в микроконтроллер Среда RAPID не работает на уровне проектов, как другие
интегрированные среды разработки, представленные в данной книге При
работе с ней необходимо присутствие текущей активной программы для кон-
троля над действиями ассемблера, и к тому же отсутствует возможность внеш-
ней настройки микроконтроллера, программатора или симулятора После за-
пуска RAPID появляется окно главного редактора, из которого производится
вызов ассемблера, симулятора и программатора
Сам редактор представляет собой нечто среднее между строчным редакто-
ром MS-DOS и редактором с интерфейсом GUI. Назначение функциональ-
360 Часть 3. Микроконтроллеры семейства Motorola 68НС05
ных клавиш немного неудобное, хотя лучше сказать, что оно отличается от
обычного назначения. При разработке ряда приложений, описанных в дан-
ной книге, использовался другой редактор, а редактор RAPID применялся в
процессе отладки для внесения в текст небольших изменений. Редактор мо-
жет показывать сразу два файла, что было очень удобно при одновременном
редактировании «mykeRTOS» и фаила с кодом приложения часы/термометр.
Однако следует сделать одно предостережение, если вы осуществляете вызов
ассемблера или симулятора из второго окна, то зто приведет к потере основ-
ного файла. Работая с RAPID, я пришел к выводу, что после редактирования
файла ОСРВ (RTOSAP.ASM). ’его необходимо сохранить и выити из второго
окна. Это исключает возможность случайного удаления главного файла.
Из редактора RAPID осуществляется запуск программы кросс-ассемблера
«CASM5J1A» и симулятора-монитора «ICS05J1A». На самом деле, выбор ас-
семблера/компилятора, симулятора/эмулятора/программатора и характери-
стик функционирования производится программой «RINSTALL». Обычно
производится запуск RAPID с параметрами по умолчанию, за исключением
добавления к листингу ассемблера параметра, обеспечивающего возможность
просмотра содержимого подключаемых файлов, что является очень важным
для «mykeRTOS».
Ассемблер «CASM5J1A» показал себя с хорошей стороны при разработке
программного кода. Кроме того, он обладает некоторыми полезными осо-
бенностями. Как правило, работа ассемблеров и компиляторов не представ-
ляет особого интереса — они просто выдают листинг и объектный файл, если
не возникает каких-либо проблем при трансляции, а в случае их возникно-
вения останавливаются и указывают на ошибки в исходном тексте. Поведе-
ние «CASM5J1A» мало отличается от пой модели, но он очень хорошо ин-
тегрирован в RAPID. Информация о синтаксических ошибках передается из
ассемблера в RAPID и используется последним для выделения в исходном
тексте определенным цветом строк, содержащих ошибки.
Другой приятной особенностью «CASM5J1A» является то, что он имеет
всю необходимую информацию о структуре микроконтроллера, которая тре-
буется для разработки приложения. Все регистры и важнейшие адреса уже
определены в ассемблере, и нет необходимости указывать их самому или
вводить специальные файлы определения. Это, однако, означает, что при
работе с другим микроконтроллером семейства 68НС05 придется использо-
вать другой ассемблер
Симулятор/эмулятор/программатор «ICS05J1A» является довольно хоро-
шей программой, которая может связываться непосредственно с платой раз-
вития 68HC7-5J1CS. При рассмотрении программного обеспечения «ICS05J1 А»
хотелось бы обсудить его с точки зрения выполнения каждой из трех основ-
ных функций, которые он обеспечивает при взаимодействии с платой разви-
тия (рис. 19.3).
Программа-симулятор работает достаточно гладко и быстро (на Pentium
133 она обеспечивает выполнение, по меньшей мере, четырех тысяч коман-
дных циклов в секунду) в режиме полноэкранной сессии MS-DOS. Вместо
привычного Windows-подобного интерфейса GUI этот симулятор использует
Глава 19. Средства разработки для 68НС05 361
единственное окно, разделенное на небольшие области, содержимое кото-
рых постоянно меняется в ходе выполнения эмуляции/симуляции.
Acc Xreg
10 00
CCR
111.....
IC$*U»A
CPU ~
I SP PC
00FF 0317
CYCLES
. 00000027
Ф1Л
—— source: apl.asa
tscc
the Maxiaua
Enable inter
for the Timer Interrupt Handler/eoll th
----- VARIABLES
PORTA
PORTB
ODRA
DDRB
TSCR
TIMER
ISCR
PDRA
FORB
$80
$xx
$81
$00
$10
$09
$80
$00
$1F
Ь-м. 1
110000000
1XXXXXXXX
110000001
100000000
100010000
100001001
110000000
100000000
100011111
E>
brset
sta
cli
; Loop
Loop
bra
HC705J1A
5,portb,High
If Button is
Loop
Branch back
>st
>st
>st
ALT: B-Br C-Cnt P-PC
00C0
00C8
00D0
00D8
E-------
jFE’Jf- F10
Got 1 M-
00
XX
XX
XX
XX
XX
XX
XX
XX
XX
XX
MEMORY F3
XX
XX
XX
XX
XX
XX
XX XX
XX XX
XZ XX
XX
XX
XX
XX
F-Find L-Find Nxt
Z-Bxit
Рис.19.3. Интерфейс пользователя c ICS05J1A из пакета 68HC705J1CS
Экран симулятора имеет удобный для пользователя вид, однако хотелось
бы, чтобы окно содержимого памяти было немного больше и могло отражать
всю доступную память одновременно. Это изменение позволило бы сделать
отладку приложений ОСРВ намного проще. Ввод команд осуществляется по-
средством клавиатуры в окне «DEBUG НО», которое представляет собой
окно командной строки. Выполнение определенных функций или переходов
из одного окна в другое может осуществляться с помощью заранее запро| -
раммированных функциональных клавиш. При просмотре кода в правом окне
могут использоваться клавиши перемещения курсора вверх/вниз, который
выглядит как прямоугольник определенного цвета, а нажатие клавиши F9
приводит к выполнению последней инструкции, что удобно для пошаговой
отладки программы.
Задание точек останова осуществляется в процессе симуляции/эмуляции
путем указания адреса команды или предшествующей ей метки. При этом
определение точек останова не требует особых навыков. Вы только должны
либо поставить метку перед инструкцией, на которой должно остановиться
выполнение программы, либо просмотреть листинг программы, чтобы опре-
делить адрес этой команды.
Когда «ICS05J1A» загружен, текущий программный код (исходный текст
и двоичный код) представляется в виде командной строки и одновременно
используется симулятором/программатором/эмулятором. Плата Л CS подклю-
362 Часть 3. Микроконтроллеры семейства Motorola 68НС05
чается к последовательному порту персонального компьютера кабелем с 9-
контактными разъемами D-SUB Этот стандартный интерфейс обеспечивает
при эмуляции передачу данных со скоростью 115 200 бит/с Программирова-
ние микроконтроллера осуществляется при вводе слова «program» в команд-
ной строке окна DEBUG F10 Процесс программирования может показаться
несколько архаичным по сравнению с другими программаторами, которые
рассмотрены в данной книге, однако это устройство работает и позволяет
осуществлять программирование довольно быстро При первоначальном за-
пуске программатора обнаружилось, что не удается использовать последова-
тельный порт компьютера, заданный по умолчанию Поэтому пришлось пе-
резапустить «1CS05J1A» из командной строки MS-DOS используя следующий
формат команды
C>ICS05J1A port pgm
где «port» является номером используемого последовательного порта, а
«pgm» определяет программу, для которой надо выполнить процесс симуля-
ции/эмуляции/прошивки в 68HC7O5J1A
Процесс эмуляции заключается в подключении платы J1CS к схеме с
помощью 20-рядного шлейфа, заканчивающегося разъемами IDC Если при
запуске «ICS05J1A» эта плата (которая на экране обозначается «pod») под-
ключена и на нее подано питающее напряжение, то на экране появляется
сообщение «POD YES», и состояния сигналов на выводах 20-контактного
IDC- разъема становятся доступными для программы Этот метод подобен
тому, который использован при создании эмулятора для микроконтролллера
Stamp, описанного в данной книге Следует иметь в виду, что реальная ско-
рость работы эмулятора относительно невысока Как удалось выяснить, мак-
симальная скорость работы эмулятора составляет примерно 1000 машинных
циклов в секунду, что позволяет использовать эмулятор для огладки многих
приложений Однако при отладке приложений, критичных к скорости вы-
полнения, например, при реализации последовательного интерфейса с тер-
модатчиком DS182O, эмулятор не сможет помочь
Если рассмотреть аппаратную реализацию эмулятора, то следует отметить
одну особенность, которая связана с функционированием портов ввода/вы-
вода На плате JICS смонтирован микроконтроллер 68НСО5С8, который осу-
ществляет эмуляцию портов ввода/вывода Этот микроконтроллер не имеет
возможности подтягивания к «земле» сигналов на выводах, как это осуще-
ствляется в 68HCO5J1A Поэтому для компенсации данного обстоятельства к
эмулируемым выводам подключены два терминальных блока, которые про-
изводят подтягивание сигнала к «земле».
ГЛАВА
20
СИСТЕМА КОМАНД
МИКРОКОНТРОЛЛЕРОВ 68НС05
Краткое содержание
Команды арифметических операций
Команды передачи управления
Команды битовых операций
Команды управления процессором
Микроконтроллеры семейства 68НС05, как и другие процессоры и микро-
контроллеры фирмы Motorola, являющиеся потомками 6800, выполняют
большой набор команд, что позволяет создавать на их основе широкий ряд
приложений Большинство команд из этого набора поддерживает до шести
способов адресации данных Для облегчения ссылок команды, использую-
щие различные способы адресации, описываются совместно
Как уже упоминалось, первый байт команды содержит код операции, а в
последующих байтах располагаются используемые операнды Число тактов,
необходимых для выполнения команды, зависит от числа байтов, содержа-
щих операнды — 0, 1 или 2 адресуемых байта Чтобы программа выполнялась
за наименьшее число тактов, следует рассмотреть различные способы адре-
сации и выбрать наилучший вариант размещения данных для выполняемой
задачи Обычно путем размещения всех данных в первых 256 байтах памяти,
имеющих адреса от $0 до $0FF, можно свести к минимуму число циклов,
затрачиваемых на выполнение
364 Часть 3. Микроконтроллеры семейства Motorola 68НС05
В некоторых случаях дается общее описание для нескольких команд, на-
пример, для команд ветвления Это сделано, чтобы описать похожие коман-
ды в одном месте и сократить, таким образом, время поиска описания нуж-
ной команды.
Команды арифметических операций
Базовыми операциями для каждого процессора являются операции пересыл-
ки данных. В микроконтроллерах 68НС05 пересылка осуществляется путем
загрузки байта в регистр и его последующего сохранения в другом месте
памяти. Основными командами для выполнения этих операций являются LDA
и STA, осуществляющие загрузку данных из памяти в аккумулятор и сохра-
нение его содержимого в памяти, соответственно.
Если посмотреть на описание этих команд (команды 20.1 и 20.2), то они
покажутся не очень простыми Команда LDA поддерживает шесть способов
адресации, а команда STA — пять Эти способы были рассмотрены в преды-
дущей главе, однако здесь еще раз будет показано их использование данны-
ми командами, чтобы лучше пояснить их реализацию.
Первым способом загрузки регистра является непосредственная адреса-
ция, когда заданное число заносится в аккумулятор. Например, если в акку-
мулятор необходимо загрузить число 12, то это можно сделать так, как пока-
зано на рис.20.1.
Рис.20.1. Использование непосредственной
лятора в 68НС05.
адресации для загрузки аккуму-
Величина, которая должна быть загружена в аккумулятор, находится в
байте, следующим за байтом кода команды (в данном случае этот код равен
Глава 20. Система команд микроконтроллеров 68НС05 365
$А6) Как и при выполнении других команд, биты регистра CCR устанавли-
ваются в соответствии со значением числа, загруженного в аккумулятор При
использовании команд с непосредственной адресацией в ассемблерном коде
перед операндом ставится знак # («диез») Команда загрузки в аккумулятор
числа 37 будет выглядеть следующим образом
Ida #37
или
Ida #$25
Как и для непосредственной адресации, при использовании прямой или
расширенной адресации можно изобразить процесс загрузки аккумулятора
графически В случае применения прямой адресации возможен доступ к пер-
вым 256 ячейкам памяти, а в случае расширенной — к любой ячейке адрес-
ного пространства При непосредственной адресации в аккумулятор загружа-
ется содержимое байта, следующего за кодом команды, и указание его адреса
не требуется
При индексной адресации содержимое индексного регистра (с учетом
смешения, если оно задано) выводится на адресную шину, и этот адрес
используется для обращения к ячейке памяти, содержимое которой загружа-
ется в аккумулятор (рис 20 2)
Рис.20.2. Использование индексной адресации для загрузки аккумулятора в
68НС05
Этот адрес может иметь 8- или 16-разрядное смещение Используя смеще-
ние, можно реализовать обращение к таблице
366 Часть 3. Микроконтроллеры семейства Motorola 68НС05
HelloTable:
DB ‘Н’, *е', ‘Г, ‘I’, ‘о’
и послать сообщение на ЖК-дисплей с помощью следующего программного
кода:
WriteHello: ; CLRX ; ; Вывести сообщение «Hello» на LCD ; Задать значение индекса равным 0
WriteHello Loop: ; ; Переходить сюда, пока не будет выполнен вывод
LDA HelloTable, X : ; Загрузить в аккумулятор элемент таблицы ; с текущим индексом
JSR LCDOut ; INCX ; ; Вывести символ ; Увеличить содержимое индексного регистра на 1
CPX #5 ; ; Конец таблицы?
BNE WnteHel!o_Loop ; RTS ; Вывести следующий символ , Вернуться в точку вызова процедуры
Данный код позволяет расположить таблицу «HelloTable» в любом месте
памяти. Если она будет расположена в первых 256 байтах памяти (например,
записана в память RAM), то команда LDA HelioTable,X будет иметь длину
только один байт и выполняться за три такта. Однако при этом следует внести
изменения в программу: команду CLRX заменить на LDX ^HelloTable, а ко-
манду СРХ #5 на СРХ #Не11оТаЫе+5.
Если таблица HelloTable расположена в первых 254 байтах RAM, то для
адресации ее элементов можно использовать индексный регистр с 8-разряд-
ным смещением. Но если таблица или хотя бы один из ее элементов располо-
жены выше первых 254 байтов, то команда будет занимать 3 байта памяти
программ, а ее выполнение потребует 5 тактов.
Сохранение содержимого аккумулятора производится с помощью тех же
способов адресации, за исключением непосредственной, которая не реали-
зуется при операциях записи в память. Таким образом, для сохранения со-
держимого аккумулятора инструкция STA использует те же способы адреса-
ции памяти, которые использовались командой LDA для извлечения байта
из памяти данных.
К индексному регистру возможен прямой доступ с помощью команд заг-
рузки и сохранения (команды 20.3 и 20.4). Применение команд ТАХ и ТХА
(команды 20.5 и 20.6) позволяет использовать этот регистр в качестве регис-
тра временного хранения содержимого аккумулятора. Как показано при опи-
сании команды MUL, индексный регистр используется не только как указа-
тель.
Арифметические операции сложения и вычитания (команды 20.7, 20.8,
20.9 и 20.10) очень просты в использовании. Команда ADD добавляет заданное
число к содержимому аккумулятора и сохраняет полученный результат в акку-
муляторе, а также изменяет содержимое регистра условий. Команда SUB вы-
читает число из содержимого аккумулятора и помещает результат в аккумуля-
тор. Как говорилось ранее, флаг переноса одновременно является флагом заема
и устанавливается, если результат операции вычитания меньше нуля.
Глава 20. Система команд микроконтроллеров 68НС05 367
Команды сложения и вычитания с учетом флага переноса позволяют бо
лее просто осуществлять выполнение сложных операции Например, вычита-
ние 16-разрядных чисел (А = В - С) может быть реализовано следующим
образом
LDA B+1 , Произвести вычитание младших 8 бит
SUB C+1
STA A+1
LDA В , Произвести вычитание старших 8 бит
SBC С , Выполнить вычитание с учетом флага переноса
STA A
Если вы сравните приведенный код с программой, выполняющей обра-
ботку 16-разрядных операндов на Р1С или других процессорах, не имеющих
команд сложения или вычитания с учетом переноса, то увидите, что исполь
зование таких команд значительно упрощает разработку программ В данном
примере вычисления разности 16-разрядных операндов учитывается, что дан-
ные хранятся в формате Motorola, где старший байт предшествует младшему
В микроконтроллерах 68НС05 имеется операция быстрого 8-разрядного ум-
ножения (команда 20 11). результатом выполнения которой является 16-раз-
рядное число Одной из наиболее полезных особенностей этой операции явля-
ется возможность получения частного от значения Например, если вы хотите
найти 1/10 значения числа, то может быть использован следующий код
LDX # 256 / 10 , Загрузить 1/10 от 256
LDA value , Загрузить значение, которое нужно разделить на 10
MUL
STX Fraction , Сохранить частное от деления значения на 10
Так как используются только 8-разрядов, то, умножая число на часть от
256, вы тем самым выполняете деление на константу Подобный метод деле-
ния может быть использован и в других процессорах, описанных в данной
книге, даже если они не имеют команды умножения
Команды логических операции AMD. OR и XOR (команды 20 I2, 20 13 и
20 14), как и команды сложения/вычитания, поддерживают все шесть спосо-
бов адресации непосредственную, прямую, расширенную, индексную без
смещения, индексную с 8-разрядным смещением и индексную с 16-разряд-
ным смещением Логические операции влияют только на состояние флагов
нуля и отрицательного результата
Очистка регистров и байтов памяти данных может быть проведена с по-
мощью команды CLR (команда 20 15), которая является простейшим спосо-
бом загрузки ну |евого значения в регистр
Загрузка числа з регистр или ячейку памяти может быть выполнена двумя
способами Если необходимо записать байт в памяти программ EPROM, го
это можно еде 1ать явно при программировании с помощью директивы DB
Например, для загрузи в EPROM сообщения, которое затем будет выведено
на экран, можно использовать следующий код
368 Часть 3. Микроконтроллеры семейства Motorola 68НС05
IntMsg
db “Hello”,0 ; Сообщение для вывода на экран
Второй способ загрузки используется для данных, расположенных в RAM.
В этом случае используются команды LDA # и STA it:
LDA #lnteger ; Загрузить определенное значение в ячейку памяти
STA Register
Подобно тому, как CLR производит очистку регистра, команда СОМ (ко-
манда 20.16) выполняет операцию Исключающее ИЛИ над содержимым ре-
гистра и числом S0FF, реализуя таким образом логическую инверсию. Следу-
ет отметить, что при этом флаг переноса устанавливается в 1. Это означает,
что флаг переноса не может быть использован командой, следующей за СОМ.
Для изменения знака числа используется команда NEG (команда 20.17),
которая преобразует значение 8-разрядного числа в дополнительный код (до-
полнение до 2). Если бы команды NEG не существовало, то для изменения
знака числа пришлось бы использовать следующую последовательность ко-
манд:
LDA #0 ; Вычислить значение Register = 0 - Register
SUB Register '
STA Register
Такое выполнение преобразования требует больше команд, что, в свою
очередь, ведет к увеличению числа тактов для их выполнения и возрастанию
используемого объема памяти программ.
В набор команд 68НС05 входят также команды инкремента и декремента
(команды 20.18 и 20.19). Они используются как простой способ увеличения
или уменьшения на единицу значения 8-разрядного числа. При рассмотре-
нии других микроконтроллеров приводится пример реализации инкремента
16-разрядного числа с помощью команды инкремента, которая устанавлива-
ет в 1 флаг нуля. Для 68НС05 декремент 16-разрядного числа можно выпол-
нить таким же способом — путем вычитания 1 из младших 8 битов и последу-
ющего декремента старших 8 битов, если устанавливается флаг переноса,
хотя команда DEC в 68НС05 влияет на состояние флага отрицательного ре-
зультата.
LDA value+1 ; Уменьшить значение младшего байта на 1
SUB #1
STA value+1
ВСС dec16Skip ; Пропустить декремент старшего байта, еспи
; флаг переноса сброшен в 0
DEC value v>
dec16Skip:
Некоторые читатели могут подумать, что декремент 16-разрядного числа
можно осуществить следующим способом:
Главв 20. Система команд микроконтроллеров 68НС05 369
DEC value+1 ; Уменьшить значение младшего байта на 1
BPL dec16Skip ; Если результат не отрицательный, пропустить
; выполнение следующей команды
DEC value ; Уменьшить значение старшего байта на 1
dec16Skip:
Однако необходимо отметить, что при этом флаг отрицательного резуль-
тата в регистре CCR будет установлен в I, если результат операции «DEC
vahie+l» попадет в диапазон от $080 до $0FF, а это, в свою очередь, приве-
дет к декременту старшего байта. Таким образом, при выполнении такого
программного кода половина всех операций декремента 16 разрядного числа
будет выполняться с декрементом старшего байта вместо того, чтобы выпол-
нять декремент старшего байта только один раз из 256.
Микроконтроллеры 68НС05 имеют ряд команд сравнения, позволяющих
проводить тестирование данных. Эти команды проверяют значение операнда
и устанавливают флаги в регистре CCR в соответствии со значением тестиру-
емой величины. Наиболее часто производится тестирование для проверки
операнда на нулевое значение (команда 20 20) Команда TST производит ус-
тановку флагов нуля и отрицательного результата.
Команда BIT (команда 20.21) выполняет операцию Логическое И над
заданным операндом и содержимым аккумулятора. После этой операции про-
изводится установка флагов нуля и отрицательного результата.
Команды СМР и СМХ (команды 20.22 и 20.23) выполняют обычные опе-
рации сравнения. Команда СМР производит сравнение операнда с содержи-
мым аккумулятора. По результатам выполнения этой операции устанавлива-
ются флаги нуля, отрицательного результата, переноса и переноса между
тетрадами. Команда СМХ служит для сравнения операнда с содержимым
индексного регистра. В основном эта команда используется для определения
выхода содержимого индексного регистра за некоторые границы, что очень
важно при использовании языков высокого уровня, когда необходимо осу-
ществлять проверку выхода за границы массива. Команда может также ис-
пользоваться в случаях, когда индексный регистр служит для временного
хранения значения.
Сдвиг 8-разрядных данных, расположенных в регистре или ячейке памя-
ти, может выполняться одним из трех способов. Арифметический сдвиг мо-
жет рассматриваться как умножение или деление. Логические сдвиги хорошо
подходят для извлечения данных из регистра бит за битом, а при выполне-
нии циклического сдвига выдвигаемый из регистра бит помешается во флаг
переноса. В принципе, наличие трех способов сдвига является избыточным.
Например, в микроконтроллере PIC все три способа реализуются с помо-
щью одного циклического сдвига через флаг переноса.
Как сказано выше, арифметический сдвиг подобен умножению или деле-
нию чисел, представленных в дополнительном коде, на два, где последний
выдвинутый бит помешается во флаг переноса регистра CCR (команды 20.24
и 20.25). Выполнение команд арифметического сдвига показано на рис.20.3.
При арифметическом сдвиге знак сдвигаемого операнда не изменяется.
24 Зак. 2 02 6.
370 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Рис.20.3. Выполнение команд арифметического сдвига в 68НС05.
При логическом сдвиге операнд просто сдвигается вправо или влево на
одну позицию, и значение выдвигаемого бита помещается в регистр CCR
как флаг переноса (команды 20.24 и 20.26). Выполнение команд логического
сдвига показано на рис.20.4. Следует отметить, что логический сдвиг влево
идентичен арифметическому. По этой Причине Motorola сделала команды ASL
и LSL одинаковыми, и в книге их описание дается в одном месте.
Сдвиг влево
В7
__L
М---О
I „
Сдвиг вправо 0
С
Рис.20.4. Выполнение команд логического сдвига в 68НС05.
Последний тип операций сдвига реализуется командами циклического
сдвига (команды 20.27 и 20.28). При выполнении этих команд сдвиг данных
осуществляется через флаг переноса, как это показано на рис.20.5.
Сдвиг влево
Сдвиг вправо
Рис.20.5. Выполнение команд циклического сдвига в 68НС05.
Команды циклического сдвига реализуются в большинстве микроконт-
роллеров. С помощью этих команд могут быть легко эмулированы другие типы
сдвигов. Например, если требуется эмулировать арифметический сдвиг впра-
Глава 20. Система команд микроконтроллеров 68НС05 371
во содержимого байта RAM с помощью команды ROR, то можно использо-
вать следующий код
CLC , Очистить флаг переноса
BRCLR 7, Reg, NoCarrySet , Если бит 7 Reg установлен, установить
SEC , флаг переноса перед сдвигом
NoCarrySet , Теперь выполнить правильный сдвиг Reg
ROR Reg
Микроконтроллеры 68НС05 выполняют достаточно много рахтичных ариф-
метических операций Это соответствует концепции CISC-архитектуры, согласно
которой программисту должна быть доступна любая возможная операция В
случае 68НС05 реализация данной концепции способствует созданию ботее
эффективного программного кода приложения вследствие минимизации зат-
рат времени и памяти, требуемых для реализации отсутствующих команд
Код команды: Смотри ниже
Команда: “LDA Операнд”
Входной поток
данных
Выходной поток
данных
Аккумулятор ч—Operand
Z •«— Operand—0
N <— ((Операнд & $080)»7) & 1
Пример:
LDA Flags
EOR Bit
STA Flags
Микроконтроллер; 68HC05
, Изменить состояние флага
Способ адресации Формат Код команды Число тактов
Непосредственная LDA#val $A6 val 2
Прямая LDA reg $B6 Adr 3
Расширенная LDA reg $C6 HAdr LAdr 4
Индексная без смещения LDAX $F6 3
Индексная с 8 разрядным смещением LDA Off X $E6 Off 4
Индексная с 16-разрядным смещением LDA Off X $C6 HOff LOff 5
Команда 20.1. Команда LDA в 68НС05
372 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Команда: “STA Операнд”
Код команды: Смотри ниже
Выполнение:
Выходной поток
данных
Число циклов:
Операнд •<— Аккумулятор
Z 4— Аккумулятор==0
N — Аккумулятор»?
4-6
Пример:
LDA First
STA First
j Микроконтроллер: 68HC05
Переместить байт
Способ адресации Формат Код команды Число тактов
Прямая STA reg SB7 Adr 4
Расширенная STA reg SC7 HAdr LAdr 5
Индексная без смещения STA. X $F7 4
Индексная с 8-разрядным смещением STA Ott.X SE7 Off 5
Индексная с 16-разрядным смещениеь STA Ott.X SD7 HOff LOff 6
Команда 20.2. Команда STA в 68НС05.
Код команды: Смотри ниже
Команда: “LDX Операнд"
Выполнение:
Входной поток
данных
Выходной поток
данных
Число циклов:
X -4— Операнд 1
Z 4— Операнд==0
N -м— ((Операнд &0В0)»7) & 1
2-5
Пример:
LDX First
LDA ,Х
EOR Bit
STA ,Х
Микроконтроллер: 68НС05
.Изменить состояние бита
Способ адресации Формат Код команды Число тактов
Непосредственная LDX #val SAE val 2
Прямая LDX reg $BE Adr 3
Расширенная LDX reg SCE HAdr LAdr 4
Индексная без смещения LDX ,X SFE 3
Индексная с 8-разрядным смещением LDX Ott.X SEE Off 4
Индексная с 16-разрядным смещением. LDX Ott.X SCE HOff LOff 5
Команда20.3. Команда LDX в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 373
Команда: “STX Операнд"
Код команды: Смотри ниже
4 6
Операнд -4— Индексный регистр
Z Индексный регистр==0
N -4— Индексный регистр»?
Пример:
STX Saved
Микроконтроллер: 68НС05
Сохранить текущий индекс
Способ адресации Формат Код команды Число тактов
Прямая STX reg $BF Adr 4
Расширенная STX reg SCF HAdr LAdr 5
Индексная без смещения STX X $FF 4
Индексная с В разрядным смещением STX OH X SEP OH 5
Индексная с 16-разрядным смещениел STX OH X $DF HOff LOH 6
Команда 20.4. Команда STX в 68НС05
Индексный регистр -4— Аккумулятор
Пример: Микроконтроллер: 68НС05
ТАХ .Сохранить Временно содержимое аккумулятора
LDA Reg
. Восстановить содержимое аккумулятора
Комментарий:
Команда 20.5. Команда ТАХ в 68НС05.
374 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: $97
Команда: “ТХА”
Аккумулятор •<— Индексный регистр
Пример: Микроконтроллер: 68НС05
ТАХ .Сохранить временно содержимое аккумулятора
LDA Reg
ТХА , Восстановить содержимое аккумулятора
Комментарий:
Команда 20.6. Команда ТХА в 68НС05.
Команда: “ADD Операнд”
Код команды: Смотри ниже
Выполнение:
Входной поток
данных
Выходной поток
данных
Число циклов:
Аккумулятор -ч— Аккумулятор + Операнд 2-5
С -ч— (Аккумулятор + Операнд) > SOFF
Z -4___ (Аккумулятор + Операнд)==0
Н -ч— (((Аккумулятор & $0F) + (Операнд & $0F))»4) & 1
Пример:
LDX First+1
ADD Second+1
STA First+1
LDA First
ADC Second
STA First
Микроконтроллер: 68HC05
Суммирование 16-разрядных чисел
, First=First+Second
Способ адресации Формат Код команды Число тактов
Непосредственная ADD #val SAB val 2
Прямая ADD reg $BB Adr 3
Расширенная ADD reg $CB HAdr LAdi 4
Индексная без смещения ADD ,X $FB 3
Индексная с 8-разрядным смещением ADD Off.X $EB Off 4
Индексная с 16-разрядным смещением ADD Off X SCB HOff LOff 5
Команда 20.7. Команда ADD в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 375
Команда: “ADC Операнд”
Код команды: Смотри ниже
J | Лрираммныи |
J
Рв+СТры п •
Адресное
пространство
Дешифратор koi '.аир
и формирователь адреса
Reset
Выполнение:
Аккумулятор — Аккумулятор к Операнд + С 2-5
С — (Аккумулятор + Операнд + С) > $OFF
Z ____ (Аккумулятор + Операнд + С)==0
Входной поток
данных
(LF)ROM
Выходной поток
данных
Число циклов:
Н — (((Аккумулятор & $0F) < (Операнд & $0F) + С)»4) &
Пример: LDX First+1 ADD Second+1 Микроконтроллер: 68HC05 .Суммирование 16 разрядных чисел . First=First+Second
LDA First ADC Second STA First Способ адресации Формат Код команды Число тактов
Непосредственная ADC #val $A9 val 2
Прямая ADC reg $B9 Adr 3
Расширенная ADC reg $C9 HAdr LAdr 4
Индексная без смещения ADC ,X $F9 3
Индексная с В-разрядным смещением ADC Off.X $E9 Off 4
Индексная с 16-разрядным смещением ADC Off.X $C9 HOff LOff 5
Команда 20.8. Команда ADDC в 68НС05.
Код команды: Смотри ниже
Команда: “SUB Операнд’
Аккумулятор -4— Аккумулятор - Операнд
С Ч— (Аккумулятор - Операнд) < $0
Z ____ (Аккумулятор - Операнд)==0
N — (Аккумулятор - Операнд)»?
2-5
Пример:
LDA First+1 SBB Second+1 , Вычитание 16-разрядных чисел , First=First-Second
STA First+1
LDA First
SBC Second
STA First
Микроконтроллер: 68НС05
Способ адресации Формат Код команды Число тактов
Непосредственная SUB #val $A0 vaJ 2
Прямая SUB reg $B0 Adr 3
Расширенная SUB reg $00 HAdr LAdr 4
Индексная без смещения SUB ,x $F0 3
Индексная с В-разрядным смещением SUB Off.X $E0 Off 4
Индексная с 16 разрядным смещением SUB Off.X $00 HOff LOff 5
Команда 20.9. Команда SUB в 68HC05.
376 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: Смотри ниже
Команда: “SBC Операнд”
t Входной поток
данных
.» Выходной поток
данных
Число циклов:
Аккумулятор ч— Аккумулятор - Операнд 2 5
С -м— (Аккумулятор - Операнд) < $0
Z ____ (Аккумулятор - Операнд)==0
N -м— (Аккумулятор - Операнд)»?
Пример: LDA First+1 SBB Second+1 Микроконтроллер: 68HC05 ; Вычитание 16-разрядных чисел . First=First-Second
LDA First SBC Second STA First Способ адресации Формат Код команды Число тактов
Непосредственная SBC #val $A0 val 2
Прямая SBC reg SBC Adr 3
Расширенная SBC reg SCO HAdr LAdr 4
Индексная без смещения SBC x SFO 3
Индексная с 8-разрядным смещением SBC OffX $E0 Off 4 i
Индексная с 16 разрядным смещением SBC Off.X SCO HOff LOff 5
Команда 20.10. Команда SBC в 68НС05.
Команда: “MUL” Код команды: $42
Исходные данные
Выходной поток данных
Выполнение: Число циклов:
X А -М— Х*А
Н -«— 0
С Ч— 0
Пример:
LDX #5
LDA #7
MUL
,5x7
Микроконтроллер: 68НС05
Команда 20.11. Команда MUL в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 377
Команда. “AND Операнд”
Код команды: Смотри ниже
Дешифратор команд
и формирователь адреса
Адресное
гг| пространство
| Указатель Стака [ I Программным
11
lEPJROM
Reset
Выполнение:
Выходной поток
данных
Входной поток
данных
Число циклов:
I
Аккумулятор 4— Аккумулятор & Onepai-щ 2-5
Z 4— (Аккумулятор В Операнд)==0
N _____ ((Аккумулятор В Операнд) В $080) »7) В 1
Пример:
LDA First
AND Masc
STA First
Микроконтроллер: 68НС05
Очистить биты по маске
Способ адресации Формат Код команды Число тактов
Непосредственная AND #va1 $A4 val 2
Прямая AND reg $B4 Adr 3
Расширенная AND reg $C4 HAdr UXdr 4
Индексная без смещения AND X $F4 3
Индексная с В разрядным смещением AND OffX $E4 Off 4
Индексная с 16 разрядным смещением AND OffX $C4 HOff LOff 5
Команда 20.12. Команда AND в 68НС05
Код команды: Смотри ниже
Команда: “ORA Операнд”
Аккумулятор 4— Аккумулятор I Операнд 2 5
Z 4— (Аккумулятор I Операнд)==0
N -4__ ((Аккумулятор I Операнд) В $080) »7) В 1
Пример: Микроконтроллер: 68НС05
LDA First . Установить биты по маске
ORA Masc _______________________________________________________
Способ адресации Формат Код команды Число тактов
Непосредственная ORA #val $AA val 2
Прямая ORA reg $BA Adr 3
Расширенная ORA reg SCA HAdr LAdr 4
Индексная без смещения ORA X SFA 3
Индексная с 8-разрядным смещением ORA OffX $EA Off 4
Индексная с 16 разрядным смещением ORA OffX $CA HOff LOff 5
Команда 20.13. Команда ORA в 68НС05.
378 Часть 3. Микроконтроллеры семейства Motorola 68НС05
команда: “EOR Операнд”
Код команды: Смотри ниже
Аккумулятор 4— Аккумулятор Л Операнд 2-5
Z 4— (Аккумулятор Л Операнд)==0
N -ч__ ((Аккумулятор Л Операнд) & $080) »7) & 1
Адресное
Входной ПОТОК
данных
Выходной поток
данных
Число циклов:
Пример:
LDA Flags
EOR Bit
STA Flags
Микроконтроллер: 68HC05
Изменить состояние бита
Способ адресации Формат Код команды Число тактов
Непосредственная EOR #val $A8 val 2
Прямая EOR reg $B8 Adr 3
Расширенная EOR reg $C8 HAdr LAdr 4
Индексная без смещения EOR ,X $F8 3
Индексная с 8-разрядным смещением EOR Off,X $E8 Off 4
Индексная с 16-разрядным смещением EOR Off.X $C8 HOff LOff 5
Команда 20.14. Команда EOR в 68НС05.
Код команды: Смотри ниже
Команда: “CLR Операнд” >ч
Операнд -4— 0
Z 4— 1
N ч___ 0
Пример:
CLR Variable
3-6
Микроконтроллер: 68НС05
, Очистить содержимое переменной
Способ адресации Формат Код команды Число тактов
Регистровая - А CLrA $4F 3
регистровая X CLRX $5F 3
Прямая CLR reg $3F Adr 5
Индексная без смещения CLR ,X $7F 5
Индексная с 8-разрядным смещением CLR Off.X $6F Off 6
Команда 20.15. Команда CLR в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 379
Код команды: Смотри ниже
Команда;
“СОМ Операнд”
Операнд — Операнд Л OxOFF 3 6
Z *— (Операнд л OxOFF)==O
N •<— (Операнд л OxOFF) »7
С 1
Пример:
COM Variable
INC Variable
Микроконтроллер: 68НС05
Изменить знак переменной
Способ адресации Формат Код команды Число тактов
Регистровая А СОМА $40 3
Регистровая X СОМХ $50 3
Прямая COM reg $30 Adr 5
Индексная без смещения СОМ X $70 5
Индексная с В разрядным смещением COM OffX $60 Off 6
Код команды: Смотри ниже
Команда 20.16. Команда СОМ в 68НС05
Команда: “NEG Операнд"
3-6
Операнд •*— О - Операнд
Z — (О - Операнд)==0
N -ч— (О - Операнд) »7
С — (0 - Операнд) < О
Пример:
NEG Variable
Микроконтроллер: 68НС05
Изменить знак переменной
Способ адресации Формат Код команды Число тактов
Регистровая А СОМА $40 3
Регистровая X СОМХ $50 3
Прямая COM reg $30 Adr 5
Индексная без смещения СОМ X $70 5
Индексная с 8-разрядным смещением COM OffX $60 Off 6
Команда 20.17. Команда NEG в 68НС05.
380 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: Смотри ниже
Команда: “INC Операнд”
Операнд •*— Операнд + 1
Z •*— (Операнд + 1)==О
N ♦— (Операнд +1) »7
Адресное
Адресуемый регистр
Выходной поток
данных
Число циклов:
3-6
Пример:
INC Counter
Микроконтроллер: 68НС05
, Инкремент счетчика
Способ адресаций Формат Код команды Число тактов
Регистровая - А INCA $4A 3
Регистровая - X INCX $5A 3
Прямая INC reg $3A Adr 5
Индексная без смещения INC X $7A 5
Индексная с 8-разрядным смещением INC OffX $6A Off 6
Команда 20.18. Команда INC в 68НС05
Выполнение:
Resej
Дешифратор команд
и формирователь адреса
Адресное
VI пространство
I чжку
Команда: “DEC Операнд'
| Укаааткль стека | | Программный счетчик
X
Нулевой регистр
EPIROM
Выходной поток
данных
Код команды: Смотри ниже
Число циклов:
I
Операнд Операнд - 1
Z (Операнд - 1)==0
N *— (Операнд - 1) »7
3-6
Пример:
DEC Variable
BNE Label
Микроконтроллер: 68HC05
, Декремент счетчика в цикле
Способ адресации Формат Код команды Число тактов
Регистровая А DECA $4A 3
Регистровая - X DECX $5A 3
Прямая DEC reg $3A Adr 5
Индексная без смещения DEC ,X $7A 5
Индексная с 8-разрядным смещением DEC OffX $6A Off 6
Команда 20.19. Команда DEC в 68НС05.
Главв 20. Система команд микроконтроллеров 68НС05 381
Код команды: Смотри ниже
Команда: “BIT Операнд”
I
Дешифратор команд
и формирователь адреса
Адресное
пространство
| Указаталь стека | | Программной Счетчик
S -
(ЕР) НОМ
Reset
Выполнение:
Входной поток
данных
Выходной поток
данных
1нпОкоь*« U=—»
регистр [* ’
Число циклов:
Результат <— Аккумулятор & Операнд 2 5
Z — (Аккумулятор & Операнд)=0
N -4_ ((Аккумулятор & Операнд) & $080) »7
Пример:
BIT $1
BNE Label
Микроконтроллер: 68НС05
, Бит 0 является флагом
, Выполнить ветвление если бит 0 установлен
Способ адресации Формат Код команды Число тактов
Непосредствен мая BIT #val $A5 val 2
Прямая BIT reg $B5 Adr 3
Расширенная BIT reg $C5 HAdr LAdr 4
Индексная без смещения BIT X $F5 3
Индексная с 8 разрядным смещением BIT OffX $E5 Off 4
Индексная с 16-разрядным смещением BIT OffX $C5 HOff LOff 5
Команда 20.20. Команда TST в 68НС05
Выполнение:
‘BIT Операнд’
Код команды: Смотри ниже
Reset
Дешифратор команд
и формирола!ель адреса
Адресное
-71 пространство
Команда:
| Указатель стека | Программки счетчик
t . ?...
1ЕР1ИОМ
Число циклов:
Выходной поток
данных
Входной поток
данных
Результат — Аккумулятор & Операнд 2-5
Z -К— (Аккумулятор & Операнд)==0
N ____ ((Аккумулятор & Операнд) & $080) »7
Пример:
BIT $1
BNE Label
Микроконтроллер: 68НС05
. Бит 0 является флагом
, Выполнить ветвление, если бит 0 установлен
Способ адресации Формат Код команды Число тактов
Непосредственная BIT #val SA5 val 2
Прямая BIT reg $B5 Adr 3
Расширенная BIT reg $C5 HAdr LAdr 4
Индексная без смещения BIT X $F5 3
Индексная с 8 разрядным смещением BIT OffX $E5 Off 4
Индексная с 16-разрядным смещением BIT OffX $C5 HOff LOff 5
Команда 20.21. Команда BIT в 68НС05.
382 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: Смотри ниже
‘CMP Операнд’
Команда:
2-5
Результат — Аккумулятор - Операнд
Z — (Аккумулятор - Операнд)==0
N М— ((Аккумулятор - Операнд) & $080) »7
С — (Аккумулятор - Операнд) < 0
Пример:
СМР 37
BNE Label
Микроконтроллер: 68НС05
, Если Аккумулятор '=37, то выполнить ветвление
Способ адресации Формат Код команды Число тактов
Непосредственная СМР Aval SAI val 2
Прямая СМР reg $В1 Adr 3
Расширенная СМР reg $С1 HAdr LAdr 4
Индексная без смещения СМР ,х $F1 3
Индексная с 8-разрядным смещением СМР Off.X $Е1 Off 4
Индексная с 16-разрядным смещением СМР Off.X $С1 HOff LOff 5
Код команды: Смотри ниже
Команда
20.22. Команда СМР в 68НС05.
“СМХ Операнд”
Команда:
2-5
Результат — X - Операнд
Z — (X - Операнд)==0
N Ч— ((X - Операнд) & $080) »7v
С — (X - Операнд) < 0
Пример:
СМХ 37
BNE Label
Микроконтроллер: 68НС05
, Если индекс '=37. то выполнить ветвление
Способ адресации Формат Код команды Чиспо тактов
Непосредственная СМХ #val $АЗ val 2
Прямая СМХ reg $ВЗ Adr 3
Расширенная СМХ reg $СЗ HAdr LAdr 4
Индексная без смещения СМХ ,Х $F3 3
Индексная с 8-разрядным смещением СМХ OffX $ЕЗ Off 4
Индексная с 16-разрядным смещением СМХ Off.X $СЗ HOff LOff 5
Команда 20.23. Команда СМХ в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 383
Код команды: Смотри ниже
Команда: “ASL/LSL Операнд”
Операнд -<— (Операнд « 1) + 0 3-6
Z 4— ((Операнд « 1) т 0)==0
N 4— ((Операнд « 1) + О) »7
С -4— Операнд » 7
Пример:
Микроконтроллер: 68НС05
ASLA
Аккумулятор = АккумуЛятор‘2
Способ адресации ASL Формат LSL Формат Код команды Число тактов
Регистровая - А ASIA LSLA $47 3
Регистровая X AS LX LSLX $57 3
Прямая ASL reg LSL Reg $37 Adr 5
Индексная без смещения ASL X LSL ,X $77 5
Индексная с 8 разрядным смещением ASL OffX LSL Off.X $67 Off 6
Команда 20.24. Команда ASL/LSL в 68НС05.
Адресуемый регистр
Выходной поток
данных
Число циклов:
Операнд -4— (Операнд » 1) + (Операнд & Ох 80) 3-6
Z 4— ((Операнд » 1) + (Операнд & 0х-80))==0
N 4— ((Операнд » 1) -г (Операнд & 0х-80)) »7
С -4 - Операнд & 1
Пример: Микроконтроллер: 68НС05
LDXS3 Разделить содержимое аккумулятора на 8
Код команды: Смотри ниже
Способ адресации Формат Код команды Число тактов
Регистровая А ASRA $47 3
Регистровая - X ASRX $57 3
Прямая ASR reg $37 Adr 5
Индексная без смещения ASR ,Х $77 5
Индексная с В-разрядным смещением ASR Off.X $67 Off 6
Команда 20.25. Команда ASP в 68НС05.
384 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: Смотри ниже
Команда; “LSR Операнд”
Операнд — (Операнд » 1)
Z — ((Операнд » 1) ==0
N *— О
С — Операнд’ & 1
Адресуемый регистр
Выходной поток
данных
Число циклов:
3-6
Пример:
LDX#3
Loop
LSRA
DECX
BNE Loop
Микроконтроллер: 68HC05
, Разделить содержимое аккумулятора на 8
Способ адресации Формат Код команды Число тактов
Регистровая - А LSRA $44 3
Регистровая - X LSRX $54 3
Прямая LSR reg $34 Adr 5
Индексная без смещения LSR ,Х $74 5
Индексная с 8 разрядным смещением LSR Off.X $64 Off 6
Команда 20.26. Команда LSR в 68НС05.
Код команды: Смотри ниже
Команда: “ROL Операнд”
Операнд — (Операнд « 1) + С
Z <— ((Операнд « 1) + С)==0
N <— Операнд « 6
С •<— Операнд » 7
Адресуемый регистр
Выходной поток
данных
Число циклов:
3-6
Пример:
CLC
ROL Reg
ROL Reg+1
Микроконтроллер: 68НС05
, Сдвиг 16-разрядного числа на 1
Способ адресации Формат Код команды Число тактов
Регистровая - А ROLA $49 3
Регистровая X ROLX $59 3
Прямая ROL reg $39 Adr 5
Индексная без смещения ROL ,Х $79 5
Индексная с 8-разрядным смещением ROL Off.X $69 Off 6
Команда 20.27. Команда ROL в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 385
Код команды: Смотри ниже
Команда: “ROR Операнд”
Адресуемый регистр
Выходной поток
данных
Число циклов:
Операнда— (Операнд » 1) + (С « 7) 3-6
Z — ((Операнд » 1) + (С « 7)) =0
N — С
С — Операнд & 1
Пример: Микроконтроллер: 68НС05
CLC Сдвиг 16-разрядного числа на 1
ROR Reg ________________________________________________
Способ адресации формат Код команды Число тактов
Регистровая - А RORA $46 3
Регистровая - X RORX $56 3
Прямая ROR reg $36 Adr 5
Индексная без смещения ROR X $76 5
Индексная с 8-разрядным смещением ROR OffX $66 Off 6
Команда 20.28. Команда ROR в 68НС05.
Команды управления программой
В микроконтроллере 68НС05 существует несколько различных способов из-
менения последовательности выполнения программы, как условных, так и
безусловных. Эти способы можно разбить на три категории. К первой из них
относится прямой переход в любую точку адресного пространства памяти
программ. Это может быть либо обычный переход, либо вызов подпрограм-
мы. Ко второй категории относится условный или прямой переход в точку,
смещенную относительно текущего значения указателя команд. Этот способ
требует меньше памяти программ, хотя выполняется за то же количество
циклов, как и прямое изменение содержимого программного счетчика. К
последней категории относится программный запрос прерывания, который
очень полезен при реализации функций ввода-вывода (BIOS) для приклад-
ных программ. Если вы хорошо знакомы с языком ассемблера для персональ-
ного компьютера (микропроцессора 8086), то легко поймете, как выполня-
ются команды управления программой в 68НС05.
Прямое изменение содержимого программного счетчика (команды 20.29
и 20.30) реализуется с большим числом разновидностей в зависимости от
того, где расположен новый адрес и как осуществляется доступ к нему. Ос-
новными методами записи нового адреса в программный счетчик являются
прямой или расширенный способы адресации, где адрес перехода указыва-
ется непосредственно в инструкции.
25 Зак. 2026.
386 Часть 3. Микроконтроллеры семейства Motorola 68НС05
При использовании индексной адресации, нужный адрес формируется
путем сложения 8 разрядного содержимого индексного регистра со смеше-
нием, которое задается в команде Таким образом, таблица переходов может
быть расположена в любом месте пространства памяти
Команда JSR (переход к подпрограмме) выполняется так же, как и инст-
рукция JMP, за исключением того, что содержимое программного счетчика,
указывающее адрес следующей команды, сохраняется в стеке После завер-
шения выполнения подпрограммы, вызывается инструкция RTS (возврат из
подпрограммы — команда 20 31), которая выбирает адрес следующей коман-
ды из стека и загружает его в программный счетчик Затем выполнение про-
граммы продолжается с команды, следующей за JSR
Ветвление производится путем прибавления 8 разрядного смещения, пред-
ставленного в дополнительном коде, к содержимому программного счетчи
ка, который в это время указывает на команду, стедуюшую за командой Эго
означает, что новый адрес в программном счетчике будет смешен от адреса
следующей инструкции на число, лежащее в пределах от -128 до +127 Ниже
приведен пример программы, выполняющей инкремент 16-разрядного чис-
ла, в котором для иллюстрации работы команд ветвления добавлены адреса
и коды команд
Addr $3C Reg+1 INC Reg+1 , Выполнить инкремент младвих 8 бигов
Addr+2 $26 $02 BNE Skip , Пропустить инкремент старших , 8 битов, если Low++ i= 0
Addr+4 $3C Reg INC Reg , Выполнить инкремент старших 8 бигов
Addr+6 Skip , Выполнить следующую инструкцию
После выполнения первого инкремента в регистре CCR устанавливают-
ся/сбрасываются флаги нуля и отрицательного результата в зависимости от
полученного значения младших 8 бит 16-разрядного 4ncia Затем проверяет
ся флаг нуля, и если он не установлен в 1, то команда BNE добавляет смеше-
ние (в данном случае Ski р=2) к содержимому протраммного счетчика, в
котором хранится адрес следующей команда (в данном случае Addr+4) Затем
выполнение программы будет продолжено с адреса Addr+6
Приведенный программный код является довольно простым Более инте
ресной является организация перехода к выше расположенным адресам (мень-
шим по абсолютному значению) Например, процедура функция сдвига со-
держимого аккумулятора на определенное число битов может быть реализована
следующим образом
Addr Power2 Выполнить A « X
Addr $5D TSTX , Если X == 0, не выполнять ROLA
Addr+1 $27 $04 BEQ Skip
Addr+3 Loop Переходить сюда для каждого 1
нового цикла сдвига
Addr+3 $48 ASLA Сдвинуть содержимое Асе на 1
Addr+4 $5A DECX , Выполнить декремент счетчика
Addr+5 $26 $FC BNE Loop , Выполнить сдвиг еще раз9
Глава 20. Система команд микроконтроллеров 68НС05 387
Addr+7
Addr+7 $81
Skip
RTS
;Сдвиг выполнен, вернуться из процедуры
Выполнение первого ветвления BEQ Skip не требует пояснений, так как
полностью соответствует описанному выше. После команды «BEQ Skip» в
программном счетчике содержится значение «Addr+З». Если ветвление вы-
полняется, то в него будет занесено значение «Addr+7», так как смешение
равно 4.
Вторая команда ветвления BNE Loop имеет смешение, равное $FC. Не
стоит этому удивляться, так как на самом деле это число -4 (если вы переве-
дете $FC в десятичную систему счисления, то сами в этом убедитесь). В конце
выполнения команды BNE Loop программный счетчик имеет значение
Addr+7, и если условие ветвления выполняется, то программный счетчик
получает значение равное Addr+З, что на 4 меньше предыдущего.
Другим примером может служить реализация бесконечного цикла. Так как
программный счетчик во время добавления к нему смещения указывает на
следующую команду, то его можно постоянно переводить к началу выполня-
емой инструкции. Это будет выглядеть следующим образом:
Addr $20 $FE BNE * ; Бесконечный цикл
Получив достаточную практику в корректировке и отладке ассемблерных
программ для 68НС05, вы научитесь быстро вычислять смещение в шестнад-
цатиричном коде для ветвления назад.
Чаше всего ветвления применяются для условного выполнения програм-
мы. В 68НС05 имеется десять инструкций ветвления, которым соответствуют
различные условия (команда 20.33). Каждое ветвление выполняется за три
машинных цикла. В следующей таблице приведены все эти команды, причем
они расположены так, чтобы напротив каждой команды ветвления находи-
лась комплементарная команда с противоположным условием ветвления
Комплементарная команда
Команда Условие Биты CCR Команда Условие Биты CCR
BHI А > В с==о && z==o BLS А <= В С==1 II Z==1
BHS А >= В с==о BLS А < В С==1
BEQ А == В Z==1 BNE А != В Z==0
BMI А < 0 N=1 BPL А >= 0 N==0
BHCS (A&$F)=(B&$F) Н==0
Следует отметить, что команда BHS эквивалентна ВСС, a BLO эквива-
лентна BCS. Мнемоники BHS и BLO указывают на условие ветвления Мне-
моники ВСС и BCS указывают на то, что результат ветвления зависит от
состояния флага переноса.
Ограничение значения смещения 8-ю разрядами может показаться нео-
правданным. На практике можно реализовать переход в любую точку памяти,
используя комплиментарные команды. Приведенная выше таблица позволя-
ет облегчить поиск команды ветвления, комплементарной данной. Напри-
мер, если вы хотите перевести в ассемблерный код строку:
388 Часть 3. Микроконтроллеры семейства Motorola 68НС05
if А > В then goto Label
а метка Label может находиться в любом месте памяти, то следует использо-
вать код:
Addr $B6A LDA A ; Выполнить A - В
Addr+2 $B1B CMP В »' Л
Addr+4 $23 $03 BLS Skip , Перейти, если больше (или
Addr+6 $CC $LH$LL JMP Label ; выполнить ветвление в обход JMP
Addr+9 Skip ; если результат меньше или равен)
Выполнение условия комплиментарной команды (в данном случае А <= В)
приведет к изменению содержимого программного счетчика, чтобы обойти
команду JMP Label. В приведенном коде LH и LL обозначают, соответствен-
но, старший и младший байты адреса Label. Данный метод реализации длин-
ного условного перехода может показаться неуклюжим, однако многие ком-
пиляторы генерируют именно такой код и не оптимизируют его, даже если
оптимизация может быть выполнена путем замены длинного условного пе-
рехода одной командой.
Ранее в этой главе был приведен пример, в котором выполнение команд
BRPL и BRMI могло вызвать определенные проблемы (особенно при повто-
рении операций инкремента/декремента).
Если вы сравните приведенную таблицу с таблицей команд в документа-
ции фирмы Motorola на 68НС05, то заметите, что здесь пропущены некото-
рые команды ветвления. Это сделано не случайно. Пропущенные команды
ветвления (команды 20.34 и 20.35) учитывают текущее состояние бита разре-
шения прерываний и состояние сигнала на определенном входе контроллера.
Они осуществляют условные переходы или ветвления в зависимости от со-
стояния сигнала на выводе IRQ и бита 1 в регистре CCR. Команда ветвления
по значению бита 1 применяется достаточно редко, так как довольно риско-
ванно использовать состояние бита маскирования прерывания в качестве ус-
ловия дальнейшего выполнения программы, причем состояние этого бита
чаще всего неизвестно при написании программы. Ветвления, условием ко-
торых служит значение внешнего сигнала на входе IRQ, можно осуществить
с помощью команд BRCLR и BRSET, описанных ниже.
Вы, наверное, заметили, что ничего не было сказано о командах безус-
ловного ветвления (BRA — команда 20.36), и отсутствия ветвления (BRN).
Как вы увидите позже в данной главе, я не считаю команду BRN полезной
для реализации ветвлений. Команду безусловного ветвления лучше приме-
нять при создании перемещаемого программного кода. В других случаях целе-
Глава 20. Система команд микроконтроллеров 68НС05 389
сообразнее использовать некоторые варианты команды JMP, которые зани-
мают столько же места в памяти, сколько и BRA, но выполняются за мень-
шее число тактов.
Команда ветвления к подпрограмме (BSR — команда 20.32) выполняется
подобно команде JSR, но для перехода к подпрограмме в команде задается
не абсолютный адрес, а смешение. Также как при выполнении JSR, полный
адрес команды, следующей за BSR, сохраняется в стеке. Для возврата из
подпрограммы необходимо выполнить команду RTS
Выполнение программного прерывания командой SWI (команда 20.37)
аналогично реализации аппаратного прерывания за исключением того, что
не требуется производить сброс запроса прерывания, поступившего от пери-
ферийного устройства. Для возврата из обработки как аппаратного, так и
программного прерывания используется команда RTI (команда 20.38).
Если провести аналогию с IBM PC, то программное прерывание лучше
всего использовать в качестве интерфейса BIOS (базовой системы ввода/вы-
вода) для перемещаемых программ. Программа может инициировать запрос
на выполнение функции BIOS с помощью команды SWI, передавая необхо-
димые данные через аккумулятор или индексный регистр Преимуществами
данного подхода является возможность размещения функций BIOS в любом
месте памяти и возможность их изменения без воздействия на код приложе-
ния, что позволяет поддерживать различные типы периферийных устройств,
не меняя основной программы. В качестве примера будет приведена подпрог-
рамма BIOS, осуществляющая обслуживание асинхронного последователь-
ного интерфейса, которая может выполняться различными микроконтрол-
лерами семейства 68НС05, как имеющими модуль SCI, так и не имеющими
его. В таком случае одна и та же прикладная программа может выполняться и
на 68HC05J1A, и на 68НС05С8 без изменения кода.
Важным преимуществом SW1 является го, что после выполнения этой
команды обслуживание остальных запросов на прерывание запрещается. Это
позволяет выполнять подпрограммы, критичные ко времени, которые не
допускают прерываний в процессе своего выполнения
Другим применением для SWI является ОСРВ. Использование команды
SW1 вместо обычного вызова подпрограммы позволяет автоматически сохра-
нить в стеке содержимое всех контекстных регистров и сделать это гораздо
быстрее, чем при сохранении их содержимого с помощью специальных ко-
манд. В ОСРВ, представленной в данной книге, команда SWI используется в
качестве запроса на выполнение функций операционной системы.
390 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Изменение состояния
программного счетчика
Число циклов:
PC'*— Операнд
Код команды: Смотри ниже
Пример:
JMP Label
Label
Микроконтроллер: 68НС05
, Перейти в по какому либо адресу
Способ адресации Формат Код команды Число тактов
Прямая JMP Adr $BC Adr 2
Расширенная JMP Adr $CC HAdr LAdr 3
Индексная без смещения JMP X $F3 5
Индексная с 8-разрядным смещением JMP OffX $E3 Off 5
Индексная с 16 разрядным смещением JMP OffX $C3 HOff LOff 6
Команда 20.29. Команда JMP в 68НС05.
Код команды: Смотри ниже
Команда: “JSR Адрес”
Стек *— PCL
Стек <— РСН
PC*— Операнд
Сохранение содержимого
программного счетчика
____* Загрузка нового значения
программного счетчика
Число циклов:
S-7
Пример:
JSR Label
Label
RTS
Микроконтроллер: 68НС05
, Вызов подпрограммы
Способ адресации Формат Код команды Число тактов
Прямая JSR Adr SBD Adr 5
Расширенная JSR Adr $CD HAdr LAdr 6
Индексная без смещения JSR ,X SFD 5
Индексная с 8-разрядным смещением JSR OffX $ED Off 6
Индексная с 16-разрядным смещением JSR Off,X $DD HOff LOff 7
Команда 20.30. Команда JSR в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 391
Команда: "RTS"
Выполнение:
РСН -ч— Стек
PCL -ч— Стек
Код команды: $81
Восстановление содер-
жимого программного
счетчика из стека
г
Число циклов:
6
Пример:
JSR Label
Микроконтроллер- 68НС05
, Вызов подпрограммы
Label
RTS
Команда 20.31. Команда RTS в 68НС05
Код команды: SAD Addr
Команда: “BSR”
Выполнение:
Стек — PCL
Стек-ч— РСН
PC — PC + Адрес
Сохранение содержимого
программного счетчика
Загрузка нового значения
программного счетчика
Число циклоа:
6
Пример:
Микроконтроллер: 68НС05
BSR Label
. Вызов локальной подпрограммы
Label
RTS
Команда 20.32. Команда BSR в 68НС05.
392 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: Смотри ниже
Команда: “BCC/BCS Смещение”
if CCR Bil(s)==Start
РСч—PC + Смещение
Загрузка нового значения
программного счетчика
Число циклов:
Пример:
Микроконтроллер: 68НС05
BNE Label
, Выполнить ветвление к метке “Label», если флаг нуля в регистре CCR сброшен
Команда Код Условие ветвления Циклы
BCC/BHS Offset $24 Offset Carry == 0 3
BCS/BLO Offset $25 Offset Carry == 1 3
ВЕО Offset $27 Offset Zero == 1 3
BHCC Offset $24 Offset Half == 0 3
BHCS Offset $25 Offset Half == 1 3
BHI Offset $22 Offset Zero + Carry == 0 3
BLS Offset $23 Offset Zero II Carry =- f 3
BM1 Offset $2B Offset Negative == 1 3
BNE Offset $26 Offset Zero == 0 3
BPL Offset $2A Offset C == 0 II Z == 1 3
Команда 20.33. Команды условного перехода в 68НС05.
Команда: “BIH/BIL Смещение”
Пример:
BIH Label
НИЯ
Label
Код комвнды: Смотри ниже
Внешнее прерывание
Загрузка нового значения
программного счетчика
Число циклов:
3
Микроконтроллер: 68НС05
. Выполнить ветвление к метке «Label», если внешний сигнал прерыва-
, находится в высоком состоянии
Команда Код Циклы
BIH Offset $2F Offset 3
BIL Offset $2E Offset 3
Команда 20.34. Команды усповного перехода, выполнение которых зависит
от состояния сигнала на входе внешнего прерывания в 68НС05.
Глава 20. Система команд микроконтроллеров 68НС05 393
Код команды: Смотри ниже
Команда: “BMC/BMS Смещение”
it Int Mask==Start
PC — PC + Смещение
Маскируемое прерывание
Загрузка нового значения
программного счетчика
Число циклов:
3
Пример:
BMS Label
Label
Микроконтроллер: 68НС05
, Выполнить ветвление к метке -Label- если бит маскирования прерывании
, находится в состоянии О (обслуживание прерываний разрешено)
Команда Код Циклы
ВМС Offset $2D Offset 3
BMS Offset $2C Offset 3
Команда 20.35. Команды условного перехода, выполнение которых зависит
от бита маскирования прерываний в 68НС05
Код команды: $20 Addr
Команда: “BRA Смещение"
РС — РС + Смещение
Изменение содержимого
программного счетчика
Число циклов:
3
Пример: Микроконтроллер: 68НС05
BRA Label
, Выполнить ветвление к метке «Label-
Label
Комментарий: Ветвление выполняется по адресу, смещенному от адреса следующей
за BRA команды на число, лежащее в диапазоне от -128 до +127 «BRN- (Отсутствие
ветвления - $21) является командой, комплементарной для BRA (фактически представ-
ляет собой инструкцию «NOP», которая занимает 2 байта памяти программ и выпол-
няется за 3 цикла)
Команда 20.36. Команда безусловного ветвления BRA в 68НС05.
394 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: $83
Команда- “SWI”
Регистры, сохраняемые
в стеке
SP <— SP + 1
SP «— SP + 1
SP *— SP + 1
SP *— SP + 1
SP-4— SP + 1
I ♦— 1
Поместить в стек CCR
Поместить в стек Аккумулятор
Поместить в стек X
Поместить в стек РСН
Поместить в стек PCL
Число циклов.
10
Пример:
Микроконтроллер- 68НС05
SWI
Программное прерывание
Interrupt
Возврат из прерывания
Команда 20.37. Команда SWI в 68НС05
Команда: “RTI”
Код команды- $80
Регистры, восстанавливаемые
из стека
Восстановить
Восстановить
Восстановить
PCL SP <— SP - 1
РСН SP 4— SP - 1
X SP 4— SP - 1
Число циклов:
9
Восстановить Асе SP -4—SP - 1
Восстановить CCR SP4— SP - 1
Пример-
Interrupt
Микроконтроллер: 68НС05
RTI
Возврат из прерывания
Команда 20.38. Команда RTI в 68НС05
Глава 20. Система команд микроконтроллеров 68НС05 395
Команды битовых операций
В микропроцессорах 6800, которые являются предшественниками 68НС05 и других
микроконтроллеров Motorola, не существует команд битовых операций. Это яв-
ляется определенным недостатком, и особенно ощущается при подключении к
микропроцессору или микроконтроллеру внешних устройств. Для доступа к от-
дельным битам или для их тестирования требуется много команд, что приводит
к увеличению памяти программ и увеличивает время их выполнения.
К счастью набор команд 68НС05 включает в себя достаточное количество
команд, выполняющих операции над отдельными битами. Это значительно
облегчает разработку интерфейса с различными внешними устройствами.
Учитывая это. необходимо обратить внимание на следующее обстоятельство
При выборе компилятора или ассемблера для 68НС05 необходимо убедить-
ся, что он разработан именно для 68НС05, так как ассемблер для 6800 (или
6802) не обеспечивает некоторых функций, крайне полезных для 68НС05.
Основными битовыми операциями являются установка и сброс отдель-
ных битов (команды 20.39 и 20.40). Данные команды оперируют с отдельны-
ми битами, расположенными в первых 256 позициях адресного пространства
68НС05. Доступ может быть получен к любой из этих 256 ячеек памяти. Каж-
дая из этих команд реализует операции чтение-А№О/ОЯ-запись. Например,
если для сброса в 0 пятого бита в ячейке памяти Reg используется инструк-
ция BCLR, то на самом деле выполняется следующая операция;
Reg = Reg & ( SFF Л ( 1 « 5) )
Можно сказать, что содержимое ячейки памяти считывается, над ним
производится операция Логическое И с числом, в котором все биты уста-
новлены в ) за исключением того, который нужно очистить (в данном случае
бит 5), а затем полученное значение записывается обратно в ту же ячейку
памяти. Установка определенного бита в I производится таким же образом,
только после чтения байта памяти над ним производится операция Логичес-
кое ИЛИ с числом, у которого сброшены в 0 все биты за исключением того,
который нужно установить.
Команды BRCLR и BRSET (команды 20.41 и 20.42) применяются для
условного ветвления в программе, выполнение которого зависит от состоя-
ния заданною бита в определенной ячейке памяти, которая должна распола-
гаться в первых 256 позициях адресного пространства.
Можно заметить, что на диаграммах, описывающих эти инструкции, по-
казано, как генерируются отдельные биты команды. При этом несколько из-
менен обычный порядок описания этих команд, принятый в документации
фирмы Motorola, где каждой команде соответствует 8 различных кодов (один
код для каждого проверяемого бита). На диаграммах показано, как формиру-
ется код команды в зависимости от номера проверяемого бита.
Выполнение команд ветвления, условием для которых является состоя-
ния бита, происходит также как и выполнение обычных команд ветвления.
Смещение, определяющее адрес перехода, может находиться в диапазоне от
-128 до +127.
396 Часть 3. Микроконтроллеры семейства Motorola 68НС05
., Код команды: ($11 + bit*2) Addr
Команда*. “BCLR бит. Регистр”
Регистр ч— Регистр I ((1 « бит) Л $FF)
Чтение содержимого регистра
Запись в регистр значения
с модифицированным битом
Число циклов:
5
Пример:
BRSET 4 Reg
е Микроконтроллер: 68НС05
Bits ($11 + bit*2) Reg
($11 + 4*2) Reg
($11 + $08) Reg
$19 Reg
Комментарий: В документации фирмы Motorola каждому биту соответствует отдельная
команда
Команда 20.39. Команды «BCLR bit, Register» в 68НС05
Код команды: ($10 + bit*2) Addr
Команда: “BSET бит. Регистр"
Регистр ч— Регистр I (1 « бит)
Запись в регистр значения
с модифицированным битом
Чтение содержимого регистра
Число циклов:
5
Пример:
BSET 7, Reg
Микроконтроллер: 68НС05
Bits ($10 + bit*2) Reg
($10 + 4*2) Reg , ,
($10 + $0E) Reg
$1E Reg
Комментарий: В документации фирмы Motorola каждому биту соответствует отдельная
команда
, . с •
Команда 20.40. Команды «BSET bit. Register» в 68НС05
Глава 20. Система команд микроконтроллеров 68НС05 397
Команда: "BRCLR бит. Регистр, Смещение Код команды: ($01 + bit*2) Addr
Если (Регистр 6 (1 « бит) Л $FF)
* Чтение содержимого регистра
» Изменение содержимого
программного счетчика
Число циклов:
то PC — PC -г Смещение 5
Пример:
BRCLR 1 Reg Label Bits
Микроконтроллер: 68НС05
($01 + bit*2) Reg Oft
($01 + 1*2) Reg Off
($01 + $02) Reg Oft
$03 Reg Off
Комментарий: В документации фирмы Motorola каждому биту соответствует отдельная
команда
Команда 20.41. Команды «BRCLR bit. Register, Offset» в 68HC05
Команда: “BRSET бит. Регистр, Смещение” Код команды: ($00 + bit*2) Addr
Если (Регистр 6 (1 « бит)) то PC — PC ► Смещение
Чтение содержимого регистра
Изменение содержимого
программного счетчика
Число циклов:
Пример: Микроконтроллер: 68НС05
BRSET 2 Reg Label Bits ($00 + ЫГ2) Reg Oft
, ($00 + 2*2) Reg Off
, ($00 » $04) Reg Oft
, $04 Reg Off
Комментарий: В документации фирмы Motorola каждому биту соответствует отдельная
команда
Команда 20.42. Команды «BRSET bit. Register, Offset» в 68HC05
398 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Команды управления процессором
В 68НС05 существует ряд команд, предназначенных для контроля над состоя-
нием процессора и содержимым регистра состояния Эти команды полезны
дтя выполнения критичных к времени операций, уменьшения потребления
мощности микроконтроллером и для доступа к битам регистра CCR. В компью-
терах или рабочих станциях большинство из этих команд не реализуется, одна-
ко в приложениях для 68НС05 и других микроконтроллеров они необходимы.
Как вы и предполагаете, команда NOP (Команда 20 43) не делает абсо-
лютно ничего. Эга команда занимает один байт памяти программ, а на ее
выполнение затрачивается два машинных цикла Следует обратить внимание
на два обстоятельства, связанных с командой NOP Первое обстоятельство
касается кода команды. Я полагаю, что микроконтроллеры должны иметь два
кода команды NOP. один со всеми сброшенными битами (т.е. $00) и один со
всеми установленными (те. SFF). При этом появляется возможность разме-
щения команд NOP в EPROM, а затем записи в эти ячейки памяти полез-
ных команд без стирания содержимого других ячеек памяти микроконтрол-
лера. Если потребуется удалить команды, то после стирания память будет
заполнена нулями, представляющими команду NOP
Вторым обстоятельством, на который следует обратить внимание, явля-
ется то, что выполнение команды NOP занимает два такта. Это означает, что
реально она выполняется за 4 периода синхронизации (по 2 периода в каж-
дом такте) Для повышения точности интервала задержки можно использо-
вать команду BRN (команда 20.44), которая обеспечивает задержку на 3 такта.
Если необходимо реализовать временную задержку больше чем на два такта,
то можно использовать NOP в сочетании с BRN, чтобы добиться точности
интервала задержки до 1 такта.
Часто при работе в ОСРВ, когда все задачи ожидают внешнего события,
выполняется пустая процедура, представляющая собой вечный цикл ожида-
ния запроса на прерывание, при возникновении которого начинает выпол-
няться задача с более высоким приоритетом. Тело этой процедуры обычно
выглядит следующим образом:
DummyTask ; Выполняется только, когда все остальные задачи
; находятся в режиме ожидания
CLI ; Разрешить прерывания
BRA * ; Перейти по этому же адресу
Звездочка (*) показывает, что адрес текущей строки является адресом
перехода. Таким образом, команда «BRA *» будет иметь код $20 $FE.
Команда WAIT (команда 20.45) как раз подходит для таких целей Вместо
того чтобы создавать отдельную задачу, подобно приведенной выше, микро-
контроллер может быть переведен в режим ожидания внешнего прерывания
с помощью одной команды WAIT. После выполнения WAIT тактовый гене-
ратор продолжает функционировать вместе с таймерами и другими перифе-
рийными устройствами, поэтому при возникновении прерывания, произой-
дет переход к соответствующей подпрограмме обработки. При выполнении
Глава 20. Система команд микроконтроллеров 68НС05 399
команды WAIT тактовый сигнал процессора отключается, но при поступле-
нии внешнего прерывания или при аппаратном сбросе он сразу появляется.
Выполнение команды STOP (команда 20.46) подобно выполнению ко-
манды WAIT, однако в этом случае отключается тактовый сигнал микрокон-
троллера. Это означает, что ни один из аппаратных запросов на прерывание,
кроме запроса, поступающего на вход IRQ, не может возникнуть после вы-
полнения STOP. При возникновении аппаратного сброса или запроса на вхо-
де IRQ, осциллятор возобновляет свою работу, однако, перед тем как счи-
тать соответствующий вектор прерывания и начать выполнение программы,
осуществляется задержка в 1920 циклов для стабилизации тактового сигнала.
Если по каким-либо причинам (например, в начале выполнения новой
задачи приложения ОСРВ) необходимо сбросить в начальное состояние ука-
затель стека, то следует использовать команду RSP (команда 20.47), которая
загружает в этот регистр адрес вершины стека ($FF).
Последней подгруппой команд управления состоянием процессора являют-
ся команды установки/сброса битов регистра CCR (команда 20.48). Эти команды
используются для управления флагами переноса и разрешения прерываний,
прямой доступ к которым запрещен. Во многих приложениях флаг переноса ис-
пользуется для хранения битовых параметров, если, конечно, в программе не
используются команды, способные изменить состояние этого флага. Для уста-
новки значения этого параметра применяются команды CLC и SEC.
Флаги прерываний могут быть установлены или сброшены с помощью ко-
манд CL1 и SE1. Эти команды служат для разрешения или запрещения обслу-
живания прерываний: если бит I сброшен в 0. то обслуживание прерываний
запрещается Данные команды не могут использоваться для работы с битовы-
ми параметрами потому, что не существует команд ветвления, использующих
в качестве условия состояние бита маскирования прерываний в регистре CCR.
Команда: “NOP" Код команды: S9D
Число циклов:
2
Пример:
NOP
Микроконтроллер: 68НС05
, Ничего не делать в течение двух циклов
Комментарий: < NOP-> может использоваться либо для сохранения пространства памя-
ти с цепью дальнейшей записи кода, пибо для обеспечения временных задержек.
«BRN» (Отсутствие ветвления - $21) может использоваться в качестве «NOP». но
занимает 2 байта памяти программ и выполняется за 3 цикла
Команда 20.43. Команда NOP в 68НС05.
400 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: $21 Byte
Команда: ‘BRN Байт”
Пример:
BNE Byte
Число циклов:
3
Микроконтроллер: 68НС05
Ничего не делать в течение трех циклов
Комментарий: Команда -BRN» может использоваться в качестве инструкции “NOP>>,
которая выполняется за три цикла, с целью обеспечения более точной задержки
выполнения критичных ко времени приложений
Команда 20.44. Команда BRN в 6ННС05
Команда: “WAIT” Код команды: $8F
1ч— о
Число циклов:
N/A
Пример:
WAIT
Команда 20.45. Команда
Микроконтроллер: 6ВНС05
Ожидать сбросаМрерывания
WAIT в 68НС05
Глава 20. Система команд микроконтроллеров 68НС05 401
Код команды: $8Е
Число циклов:
N/A
Пример:
STOP
Микроконтроллер: 68НС05
, Ожидать сброса/лрерывания
Команда 20.46. Команда STOP в 68НС05.
Код команды: $9С
Команда:
“RSP”
SP-<— SFF
Выходной поток
данных
Число циклов:
Пример:
RSP
Микроконтроллер: 68НС05
, Выполнить сброс указателя стека
Команда 20.47. Команда PSP в 68НС05.
26 Зак. 2026.
402 Часть 3. Микроконтроллеры семейства Motorola 68НС05
Код команды: Смотри ниже
Команда: “CLC/CLI/SEC/SEI”
CRCBit 0 I 1
*• Запись в бит регистра CCR
Число циклов:
2
Пример:
CLI
Микроконтроллер: 68НС05
, Разрешить обслуживание прерываний
Команда Формат Код Число Тактов
Clear Carry CLC $98 2
Clear Int CLI $9A 2
Set Carry SEC $99 2
Set Int SEI $9B 2
Команда 20.48. Команды установки/сброса битов регистра ССР в 68НС05.
ГЛАВА
21
ПРИМЕРЫ ПРИМЕНЕНИЯ 68НС05
Краткое содержание
Создание первого приложения
Реализация часов реального времени и термометра с помощью
«mykeRTOS»
«При разработке примеров применения микроконтроллеров семейства
68НС05, которые представлены в данной главе, использовалась одна из наи-
более простых моделей этого семейства — микроконтроллер 68HC05JIА Для
реализации более сложных устройств могут потребоваться микроконтролле
ры с более широким набором реализуемых функций, однако 68HCJIA явля-
ется наиболее подходящим для применения в рассматриваемых приложениях
(особенно ОСРВ), которые не требуют использования внутренних перифе-
рийных устройств. ,
Создание первого приложения
Разработка устройства, которое зажигает светодиоды и опрашивает состоя-
ние кнопки, является хорошей практикой, так как это приложение идеально
подходит для первого знакомства с процессором, а алгоритм его работы,
реализация которого в виде соответствующей программы занимает около
получаса, сводится к несложному управлению сигналом на линии Реализа-
ция этого устройства позволяет проверить, насколько хорошо освоены про-
стейшие методы программирования микроконтроллеров.
Аппаратная реализация приложения очень похожа на реализацию анало-
гичных устройств на основе других микроконтроллеров, но имеются две важ-
ных особенности (рис.21.I.). Первой особенностью является включение резис-
тора обратной связи номиналом I МОм между выводами Oscl и Osc2 Варьируя
различными параметрами, мне удалось добиться работы 68НС05 без этого ре-
зистора. Однако я обнаружил, что его применение повышает устойчивость ра-
404 Часть 3. Микроконтроллеры семейства 68НС05
боты схемы (особенно при старте) По этой причине, я рекомендую всегда
включать высокоомный резистор обратной связи между выводами Oscl и Osc2
Второе отличие заключается в способе подключения кнопочного пере-
ключателя SW на рис 21 1 В большинстве других приложений переключатель
включается между «землей» и управляемой линией, сигнал на которой под
тягивается резистором (внешним или внутренним) к напряжению питанию
В 68НС05, где имеется встроенный резистор, который в случае разрешения
его работы осуществляет подтягивание сигнала на выводе к «земле», воз-
можно более простое подключение кнопочного переключателя без внешнего
подтягивающего резистора
Л н
Vcc
Рис.21 1. Устройство управления светодиодами на базе 68HC705J1A
Программный код для данного приложения является достаточно простым
, АР1 - Управление миганием светодиода на выводе РА7 и контроль
, кнопки на входе РВ5
I
, Данная программа вызывает мигание светодиода на выводе РА7 с
, частотой 2 раза в секунду Следует отметить, что в обработчике
' 1 , прерываний используется счетчик для замедления скорости
, обработки прерывания
, Муке Predko - 97 09 23
»
I
, Примечания к аппаратной реализации
, Используется микроконтроллер 68HC05J1A
, Резонансная частота кварца - 1МГц
, Вывод Reset подключен к шине питания через резистор ЮК
, К выводу РАО подключен светодиод, второй вывод которого
, соединен с шиной питания через резистор номиналом 220 Ом
Глава 21. Примеры применения 68НС05 405
; К выводу РА7 подключен светодиод, второй вывод которого
; соединен с шиной питания через резистор номиналом 220 Ом
; Между выводом РВ5 и шиной питания включен кнопочный пере-
; ключатель
; Переменные и макросы
count equ $С0 , Счетчик, используемый для
, управления индикатором
PAGE
, Основная программа
org rom
mainline
dr count , Очистить содержимое Counter
ъ Ч clrx , Очистить X для правильной работы прерывания
Ida #$80 ; Погасить светодиод
sta porta
Ida #$81 ; Конфигурировать выводы РА7, РАО
, в качестве выходов
x sta ddra
, Ida #$DF , Разрешить работу подтягивающего резистора
sta portb
Ida #$10 ; Задать максимальную задержку таймера для
sta tscr , часов реального времени
cli , Разрешить обслуживание прерываний
, Цикл, в течение которого фиксируются запросы на прерывание от
, таймера и осуществляется опрос входного бита
Loop , ** »
brset 5,portb,High , Если сигнал на выводе, управляемом кнопочным , переключателем, находится в высоком , состоянии, то включить индикатор
bset 0,porta , Если вывод находится в низком состоянии , (кнопка отжата), то отключить индикатор
bra Loop , Вернуться к началу цикла
High , Кнопка нажата Включить светодиод
bclr 0, porta
bra Loop
PAGE
; Процедура обработки прерываний таймера
timrint
bset 2,tscr , Сбросить флаг прерывания
inc count , Выполнить инкремент Counter перед
, тестированием на равенство 8
406 Часть 3 Микроконтроллеры семейства 68НС05
Ida count , Counter == 89
cmpa #8
bne ti„end , Если нет, то пропустить выполнение следующего кода
clr count , Да Выполнить сначала
Ida porta eor #$80 , Изменить состояние LED - индикатора
sta porta X
ti_end rti f
PAGE
, Векторы прерываний org $7F1
db $00 , Запретить обслуживание внешних прерываний
org $7F8 dw timrint dw mainline dw mainline dw mainline , Векторы прерываний и вектор начальной загрузки
Вторая команда в тексте программы производит очистку содержимого
индексного регистра X Выполнение этой операции не обязательно, однако
она включена в программу потому, что симулятор ICS05J1A выдает сообще-
ние об ошибке, если при реализации прерывания в стек загружается содер-
жимое регистра, которое не было определено ранее Запись нуля в регистр X
позволяет устранить эту ошибку при трансляции программы
Необходимо отметить, что в конце программы после указания вектора
прерываний таймера, который обращается к подпрограмме обработки
«timrint», определяются также три вектора, вызывающие обращение к ос-
новной программе «mainline» Это обстоятельство может несколько смутить,
так как за вектором прерываний таймера должны следовать вектора прерыва-
ния по внешнему запросу IRQ и программного прерывания SWI Так как в
данном приложении эти прерывания не используются, то вместо них встав-
лены обращения к основной программе, чтобы выдержать интервал адресов
между вектором прерываний таймера и вектором запуска (начальной загруз-
ки), расположенным по адресу $7FE
Можно заменить последние пять строк следующим кодом
org $7F8 , Вектора прерываний и вектор начальной загрузки
dw timrint
org $7FE
dw mainline
Если внимательно рассмотреть приведенный программный код, то можно
убедиться, что в нем нет ничего сложного для понимания Если вы работали с
другими процессорами, имеющими архитектуру фон-Неймана, то 68НС05 не
доставит вам особых хлопот и покажется хорошо знакомым, особенно при ра-
боте со стеком, в который может загружаться содержимое основных регистров
Глава 21. Примеры применения 68НС05 407
Реализация часов реального времени и
термометра с помощью «mykeRTOS»
Когда я решил сделать на базе 68НС05 устройство, объединяющее в себе
часы с ЖК-дисплеем и термометр, используя разработанную для этой книги
ОСРВ, я не ожидал возникновения каких-либо значительных проблем Из
этой фразы становится очевидным, что закие проблемы возникли Нельзя
сказать, что эти проблемы были очень серьезными, однако процесс реазиза-
ции проекта оказался достаточно интересным.
Сама схема является очень простой (рис. 21.2) и не содержит каких-либо
сюрпризов Подключение периферийных устройств к 68HC05J1A выглядит
вполне стандартно, и можно провести аналогию между данной разработкой
и похожими устройствами на базе других микроконтроллеров
Рис.21.2. ЧасыЛермометр на базе 68HC05J1A.
В первоначальной версии программы была реализована довольно сложная
организация задач приложения, включая возможность завершения задач с
разрешением другим задачам получать их информационные блоки Все это
работало довольно хорошо с незначительными проблемами, которые были
выявлены с помощью симулятора до загрузки программы в память микро-
контроллера.
Я собирался использовать эту программу в качестве базовой, но при под-
ключении цифрового термодатчика DSI820 начались проблемы. Первой явил-
ся недостаток памяти. В то время я работал над программой RTOS4.ASM Ос-
новное отличие этой версии ОСРВ от финальной («mykeRTOS») заключается
в изменении процедур обслуживания некоторых запросов задач. Их реализация
была модифицирована с целью уменьшения занимаемого места. Наибольшему
изменению подвергся запрос StartTask, где я отказался от предварительного
сохранения адреса новой задачи с помощью запросов SetA и SetX. В новой
408 Часть 3. Микроконтроллеры семейства 68НС05
версии при генерации запроса StartTask младший байт адреса новой задачи
сохраняется в индексном регистре Был также упрощен код задачи управления
ЖК_дисплеем, так как в первоначальном варианте задача выполняла множе-
ство общих функций Кроме обработки сообщений она могла непосредственно
записывать команды и данные в регистры ЖК-дисплея Эти функции LCDTask,
как и некоторые другие возможности, были удалены из кода приложения
Также пришлось удалить код, предназначенный для завершения Application,
чтобы оставить место для BUTTask Конечная диаграмма, иллюстрирующая
взаимодействие отдельных блоков кода приложения, приведена на рис 21 3
Приложение - Задача 0
LCDTask - Задача 1
Рис.21.3. Блок-схема прикладной программы для цифровых часовЛермометра.
Написание кода для DS 1820 также не обошлось без своих трудностей. Воз-
никло несколько проблем, особенно при сопряжении временных характери-
стик 68НС05 с временными параметрами DSI820. Именно здесь я понял,
насколько медленно по сравнению с другими микроконтроллерами работает
68НС05 с отдельными битами, и насколько быстро он обрабатывает байты
Мне так и не удалось получить на выходе 68НС05 хороший сигнал «I» для
DS1820 при работе на частоте 1МГц. Сигнал «I» представляет собой отрица-
тельный импульс длительностью от I до 15 мкс. Лучшее, что удалось получить
на частоте I МГц — обеспечить импульс длительностью 24мкс, используя ко-
манды bset и belt Именно поэтому в аппаратной реализации приложения при-
меняется кварц с резонансной частотой 4 МГц. Заменив кварцевый резона-
тор, я был приятно удивлен простоте перехода на новую частоту, так как при
этом пришлось произвести единственное изменение в коде, чтобы увеличить в
Глава 21. Примеры применения 68НС05 409
4 раза интервал времени между прерываниями таймера Это было сделано пу-
тем изменения значения, записываемого в регистр управления таймера TCSR
Интересно отметить, что цикл вывода символа выполнялся настолько
быстро, что пришлось использовать дополнительную задержку, необходи-
мую для соответствия временным характеристикам DSI820 — после посылки
бита производится задержка, по меныиеи мере, па 64 мкс Эту задержку при-
шлось бы реализовать даже при работе 68НС05 на прежней частоте I МГц
Это обстоятельство является прекрасным примером того, что прямое срав-
нение микроконтроллеров не имеет смысла Можно привести пример приложе-
ния, в котором интенсивно используются операции над отдельными битами, и
где микроконтроллер PIC обойдет по производительности 68НС05 Но если тре-
буется интенсивная обработка бантов, 68НС05 окажется гораздо быстрее
Следует отметить особенности кода для DS1820 Первой является маски-
рование прерывании перед обращением к DS1820 с помощью команды CLI
Это делается для того, чтобы прерывание не могло испортить сигнал на ли-
нии обмена с DSI820
Втором особенностью является использование трех инструкции NOP, рас-
положенных в макросе GetDS Первоначально, в этом месте кода был реализо-
ван цикл ожидания перевода линии в высокое состояние со стороны DSI820
Этот цикл не работал с симулятором J1CS В J1CS не было возможности осуще-
ствить симуляцию перехода линии в высокое состояние, поэтому я обошел зто
препятствие путем включения трех инструкции NOP, выполнение которых за-
нимает столько же времени, сколько выполнение одном инструкции BRCL
Конечный вариант программы, содержащимся в файле RTOSAPASM.
работает очень хорошо Если вы посмотрите на него, то у вас, вероятно,
возникнут некоторые замечания по поводу самого приложения и использо-
ванной ОСРВ
Первым делом вы, наверное, скажете, что использование подпрограмм в
ОСРВ позволит сэкономить память программ Я согласен с этим, но отмечу,
что это, в свою очередь, вызовет увеличение затрат памяти RAM Примене-
ние подпрограмм вызовет увеличение памяти для хранения блока информа-
ции задач (где располагается вся информация, необходимая для выполнения
задачи), а также потребует значительных усилии для вычисления реального
положения указателя стека
Вы можете сказать, что код приложения получился более сложным, чем
при прямом программировании Здесь я, пожалуй, не соглашусь с вами Если
вы посмотрите на диаграмму взаимодействия отдельных задач (рис 2I 3), то
она действительно может показаться довольно сложной Однако если взгля-
нуть на каждый блок в отдельности, то их код окажется простым Например,
псевдокод для BUTTask, которая является одной из самых сложных задач
приложения, можно записать следующим образом
ButLoop
Wait 32 msec
if Button Pressed
Count++
410 Часть 3. Микроконтроллеры семейства 68НС05
if Count > 1 Sec , Если больше 31
• Seconds = 59 , Пошла новая минута
Increment = Increment « 1
else
Increment = 1
goto ButLoop
Как вы сами видите, код довольно прост Сложность заключается в выяс-
нении взаимодействия отдельных задач Это действительно является отступ-
лением от традиционного программирования В ОСРВ прерывания таймера
очень просты, и можно не учитывать их влияние на выполнение других задач
К тому же каждая задача отделена от других и выполняется автономно, что,
как мне кажется, упрощает процесс отладки
После всего вышесказанного вы, наверное, спросите, действительно ли
данное приложение является хорошей демонстрацией возможностей микро-
контроллеров 68НС059 Ответ может быть отрицательным из-за сокращения
программы, которое пришлось сделать, чтобы уместить ее в 68HC05J1A, где
имеется только 1200 байт памяти программ Но я могу доказать, что это дей-
ствительно хороший пример приложения
Разработка и отладка данного приложения более просто осуществляется с
помощью «mykeRTOS», чем с использованием традиционных методов От-
сутствие взаимодействия между различными функциями является в данном
случае преимуществом После однократного прогона и отладки задачи, она
может быть включена, доступна или отключена, что позволяет изолировать
ее от проблем, связанных с другими задачами Следует также отметить, что
данный подход позволяет применить метод разработки «снизу-вверх» для
создания прикладных программ
ГЛАВА
22
ЗАКЛЮЧЕНИЕ
ПО СЕМЕЙСТВУ 68НС05
Краткое содержание
Поддержка микроконтроллеров 68НС05
WEB сайты
Литература
Компании
Микроконтроллер 68НС05 существенно отличается от других микроконтрол-
леров, представленных в данной книге Отличие состоит не только в исполь-
зовании другой архитектуры процессора, но и в реализации широкой номен-
клатуры различных моделей микроконтроллеров и готовности компании
Motorola разработать новый микроконтроллер специально для вашего прило-
жения
Необходимо отметить, что по скорости выполнения команд 68НСО5 усту-
пает другим процессорам, описанным в данной книге Однако тактовая час-
тота не является единственным параметром, определяющим производитель
ность Микроконтроллер 68НС05 реализует ряд функций и команд, которые
делают его более эффективным и более быстрым, чем другие представлен-
ные здесь микроконтроллеры
При сравнении производительности различных процессоров у вас, воз-
можно, сложилось мнение, что 68НС05 менее эффективен, чем другие мик-
роконтроллеры Поэтому следует уточнить некоторые обстоятельства, свя-
занные с оценкой эффективности Первое обстоятельство является
повторением вышесказанного тактовая частота не является основным по-
казателем общей производительности, которая зависит от реальной скоро-
сти передачи данных в системе, а не только от скорости их обработки внут-
412 Часть 3. Микроконтроллеры семейства Motorolla 68НС05
ри процессора. Сравним два компьютера: «laptop» на Pentium с тактовой
частотой 133 Мгц и персональный компьютер на таком же процессоре При-
ложения должны выполняться на этих компьютерах одинаково, так как оба
имеют одинаковое количество памяти и выводят информацию на экран в
режиме SuperVGA, 800 х 640 точек. Единственное отличие состоит в том,
что персональный компьютер имеет объем жесткого диска 1,6 Гбайт, а
«laptop» — 800Мбайт. Однако компьютер производит компиляцию программ
в три раза быстрее, чем «laptop»
Второе обстоятельство касается архитектуры процессора Гарвардская ар-
хитектура более эффективна, чем Принстонская, так как в ней реализовано
разделение шин данных и команд. Поэтому, пока одна команда производит
обработку данных, можно выбирать и дешифрировать следующую команду.
Однако есть приложения, в которых Принстонская архитектура превосходит
по производительности Гарвардскую. Например, из всех микроконтроллеров,
представленных в данной книге, 68НС05 является наиболее эффективным
для реализации приложений ОСРВ. При использовании микроконтроллеров
8051 или AVR переключение задач ОСРВ потребует больше времени и ко-
манд на сохранение и загрузку контекстных регистров, чем 68НС05.
Линейная модель памяти 68НС05 позволяет выполнять обработку данных,
расположенных как в EPROM, так и в RAM, причем выборка осуществляет-
ся одним и тем же способом, с использованием одинаковых команд и аппа-
ратных ресурсов. Эта возможность обеспечивает значительное преимущество
при разработке самомодифицирующихся программ, использующих 16-раз-
рядный индексный регистр, как было показано выше, или при создании
программ отладчиков/мониторов, которые позволяют загружать программу в
память с целью ее выполнения и отладки.
Фирму Motorola часто критикуют за то, что многие модели ее микрокон-
троллеров недоступны для широкого круга пользователей Однако указанный
недостаток компенсируется большим количеством выпускаемых моделей
микроконтроллеров семейства 68НС05 — более 180 на момент написания книги
При этом количество снятых с производства моделей относительно невелико.
Собирая материалы для данной книги, я убедился в том, что большинство
микроконтроллеров семейства 68НС05 разработано для производителей спе-
циализированных устройств. Это не значит, что вы должны отказаться от
микроконтроллеров Motorola только потому, что являетесь потребителем ма-
лого объема ее продукции, и не в состоянии оплатить разработку новой мо-
дели микроконтроллера, необходимой для вашего приложения Если вы хо-
тите использовать 68НС05 в специализированных приложениях, но не уверены
в том, что можете финансировать разработку новой модели, обратитесь в
местное представительство Motorola и узнайте, что они могут для вас сделать
В процессе написания данной книги я пришел к выводу, что имеющиеся
программные средства разработки для 68НС05 либо дешевые, но с ограни-
ченными возможностями (это, в основном, свободно распространяемые
средства), либо имеющие широкие возможности, но дорогие Такая ситуация
сложилась из-за того, что прошло много времени с момента появления пер-
вых процессоров 6800 с большим количеством примитивных средств разра-
Глава 22. Заключение по семейству 68НС05 413
ботки, распространяемых свободно. Современные разработчики средств от-
ладки не рискуют предлагать на рынке свои продукты, если они не имеют
значительных улучшений и нововведений по сравнению со свободно распро-
страняемыми. Представленная в данной книге интегрированная среда разра-
ботки «RAPID», которая включена в состав стартового комплекса 68HC70J1CS,
достаточно эффективна, но разработка с ее помощью больших приложений
вызывает значительные трудности.
Основным недостатком 68НС05, о котором следует сказать, является от-
сутствие возможности внутрисистемного программирования (ISP) Микро-
контроллеры 68НС05 ориентированы на использование при проектировании
приложения программаторов или эмуляторов, имеющихся у разработчика.
Затем, при организации массового выпуска, предполагается использование
масочно-программируемых микроконтроллеров, для чего фирма Motorola
обеспечивает необходимые возможности. Хотелось бы, чтобы возможность
ISP-программирования и внутренняя память EEPROM были введены в раз-
личные модели микроконтроллеров семейства 68НС05. Это будет способство-
вать увеличению числа любителей, использующих микроконтроллеры
Motorola, и даст возможность разработчикам приложений применять в своих
проектах 68НС05, в котором можно будет на этапе отладки легко модифици-
ровать программный код непосредственно в создаваемом устройстве.
Можно часто слышать, что при выборе микроконтроллера многие инже-
неры стараются найти «наилучшее» устройство. Это обычно означает, что
они хотят получить микроконтроллер с удобными средствами проектирова-
ния, минимальными ограничениями на объем программного кода и наи-
большей скоростью выполнения программы. Проанализировав данные тре-
бования, можно придти к заключению, что 68НС05 по этим показателям
уступает другим микроконтроллерам, представленными в книге. Однако пре-
имуществом 68НС05 является его архитектура, с которой большинство ин-
женеров познакомилось при изучении программирования на ассемблере и
основ вычислительной техники. Принстонская архитектура, используемая в
68НС05, позволяет разрабатывать приложения, реализация которых невоз-
можна на микроконтроллерах с Гарвардской архитектурой.
Поддержка микроконтроллеров
68НС05
Современный метод ознакомления с микроконтроллерами с помощью Ин-
тернет позволяет получить как техническую информацию по отдельным мик-
роконтроллерам, так и сведения о фирме-изготовителе. Обычно сначала сле-
дует просмотреть вводную информацию о микроконтроллере и получить
сведения о том, как начать работу с ним. Впервые этот способ был использо-
ван для изучения микроконтроллеров PIC, и я был удиатен количеству ин-
формации, приложений и средств разработки, доступных в Web.
По этим показателям 68НС05 уступает другим микроконтроллерам, пред-
ставленным в данной книге. Существует много компаний, размещающих в
414 Часть 3. Микроконтроллеры семейства Motorolla 68НС05
Интернет информацию о своей продукции для семейства 68НС05, но почти
никто из них не предоставляет примеры приложений или средства разработ-
ки, которые можно легко найти для других микроконтроллеров. Я считаю,
что это является результатом политики фирмы Motorola, предпочитающей
работать с оптовыми покупателями, по заказам которых разрабатываются
специализированные модели микроконтроллеров
Отсутствие хороших сайтов, содержащих информацию о 68НС05 (кроме
сайтов, принадлежащих Motorola) ограничивает массовое распространение
этих микроконтроллеров несмотря на то, что 68НС05 является наиболее про-
стым для обучения начинающих программистов и инженеров. В качестве при-
мера можно привести микроконтроллеры PIC, успех которым был обеспе-
чен благодаря множеству разнообразных сайтов.
WEB сайты
Из-за отсутствия других хороших сайтов получить необходимую информа-
цию по микроконтроллерам 68НС05 и их применению можно только на сай-
те фирмы Motorola:
http://www.mch.motsps.com/mc.html
Этот сайт содержит полные сведения о характеристиках различных мик-
роконтроллеров, включая более высокопроизводительные семейства 68НС11
и другие, и средствах для разработки приложений на их основе.
Лучшим информационным сайтом является-
http//www. oztechchnics.com.au
Литература
Компания Motorola предоставляет большой набор литературы по микроконт-
роллерам каждого семейства. Для подписки на литературу по 68НС05/68НС08
следует послать сообщение по адресу:
majordomo@www.mcu.motsps.com „.
с пометкой: «subscribe mot-68НС05-68НС08».
Компании-производители
Просматривая Web-сайты, я был удивлен, когда обнаружил, что микрокон-
троллеры 68НС05 поставляются также компанией Harris.Semiconductor. Адре-
са производителей:
Motorola
Motorola semiconductor Product Sector
6501 William Cannon Drive West
Austin, Texas
http://www. mcu. motsps. com/mc. html
Глава 22. Заключение по семейству 68НС05 415
Harris
I-800-4-HARRIS (I-800-442-7747) ext 700
http //www semi horns com/
В серии «Библиотека современной электроники» уже вышли
следующие учебные пособия и монографии:
М.Х. Джонс «Электронам - практический курс»
К.5. Клаассен «Основы измерений. Электронные методы
и приборы в измерительной технике»
ИМ. Готтлиб «Источники питания. Инверторы.
Конверторы. Линейные и импульсные стабилизаторы»
Заявки направляйте по адресу:
107140, Москва, Краснопрудный пер., д.7, «Постмаркет»
e-mail: postmarket@mtu-net.tu
Факс: (095) 264-4347
Тел.: (095) 207-6091
Компьютерная верстка -МВ Алексеева
Ответственный за выпуск - J1 Ф Соловейчик
Лицензия ЛР №090215
Подписано в печать
Формат 70x100/16 Печать офсетная Гарнитура Таймс
Печл 26 Тираж 2000 экз Заказ 2026
Оригинал-макет подготовлен ЗАО «Предприятие Постмаркет»
Полиграфическое производственное объединение «Известия»
Управление делами Президента Российской Федерации
103798, Москва, Пушкинская пл , 5